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:
authornpm-robot <ops+robot@npmjs.com>2022-01-14 20:42:48 +0300
committerGitHub <noreply@github.com>2022-01-14 20:42:48 +0300
commitaaa4306a81a388cef1090d5f058a65fb75c64518 (patch)
tree4f7244d72fe59584059ac125c2c464885db988cb /deps
parent08fc4b5d7e9ff57787f48831c228ab91b051317f (diff)
deps: upgrade npm to 8.3.1
PR-URL: https://github.com/nodejs/node/pull/41503 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Ruy Adorno <ruyadorno@github.com> Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Mohammed Keyvanzadeh <mohammadkeyvanzade94@gmail.com> Reviewed-By: Darshan Sen <raisinten@gmail.com>
Diffstat (limited to 'deps')
-rw-r--r--deps/npm/docs/output/commands/npm-ls.html2
-rw-r--r--deps/npm/docs/output/commands/npm.html2
-rw-r--r--deps/npm/lib/commands/unpublish.js26
-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.12
-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-pkg.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.12
-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.12
-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.12
-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.72
-rw-r--r--deps/npm/man/man7/developers.72
-rw-r--r--deps/npm/man/man7/logging.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/lib/shrinkwrap.js19
-rw-r--r--deps/npm/node_modules/@npmcli/arborist/package.json10
-rw-r--r--deps/npm/node_modules/@npmcli/config/lib/index.js14
-rw-r--r--deps/npm/node_modules/@npmcli/config/package.json2
-rw-r--r--deps/npm/node_modules/agentkeepalive/History.md9
-rw-r--r--deps/npm/node_modules/agentkeepalive/lib/agent.js9
-rw-r--r--deps/npm/node_modules/agentkeepalive/package.json4
-rw-r--r--deps/npm/node_modules/hosted-git-info/git-host-info.js30
-rw-r--r--deps/npm/node_modules/hosted-git-info/package.json7
-rw-r--r--deps/npm/node_modules/is-core-module/core.json2
-rw-r--r--deps/npm/node_modules/is-core-module/package.json2
-rw-r--r--deps/npm/node_modules/is-core-module/test/index.js2
-rw-r--r--deps/npm/node_modules/libnpmaccess/README.md247
-rw-r--r--deps/npm/node_modules/libnpmaccess/lib/index.js (renamed from deps/npm/node_modules/libnpmaccess/index.js)16
-rw-r--r--deps/npm/node_modules/libnpmaccess/package.json27
-rw-r--r--deps/npm/node_modules/libnpmaccess/test/fixtures/tnock.js12
-rw-r--r--deps/npm/node_modules/libnpmaccess/test/index.js417
-rw-r--r--deps/npm/node_modules/libnpmdiff/lib/index.js (renamed from deps/npm/node_modules/libnpmdiff/index.js)6
-rw-r--r--deps/npm/node_modules/libnpmdiff/package.json25
-rw-r--r--deps/npm/node_modules/libnpmexec/README.md50
-rw-r--r--deps/npm/node_modules/libnpmexec/lib/cache-install-dir.js3
-rw-r--r--deps/npm/node_modules/libnpmexec/lib/file-exists.js6
-rw-r--r--deps/npm/node_modules/libnpmexec/lib/get-bin-from-manifest.js6
-rw-r--r--deps/npm/node_modules/libnpmexec/lib/index.js18
-rw-r--r--deps/npm/node_modules/libnpmexec/lib/manifest-missing.js6
-rw-r--r--deps/npm/node_modules/libnpmexec/lib/run-script.js9
-rw-r--r--deps/npm/node_modules/libnpmexec/package.json27
-rw-r--r--deps/npm/node_modules/libnpmfund/README.md132
-rw-r--r--deps/npm/node_modules/libnpmfund/lib/index.js (renamed from deps/npm/node_modules/libnpmfund/index.js)46
-rw-r--r--deps/npm/node_modules/libnpmfund/package.json27
-rw-r--r--deps/npm/node_modules/libnpmhook/README.md271
-rw-r--r--deps/npm/node_modules/libnpmhook/lib/index.js (renamed from deps/npm/node_modules/libnpmhook/index.js)10
-rw-r--r--deps/npm/node_modules/libnpmhook/package.json30
-rw-r--r--deps/npm/node_modules/libnpmorg/README.md149
-rw-r--r--deps/npm/node_modules/libnpmorg/lib/index.js (renamed from deps/npm/node_modules/libnpmorg/index.js)6
-rw-r--r--deps/npm/node_modules/libnpmorg/package.json24
-rw-r--r--deps/npm/node_modules/libnpmpack/README.md56
-rw-r--r--deps/npm/node_modules/libnpmpack/lib/index.js (renamed from deps/npm/node_modules/libnpmpack/index.js)8
-rw-r--r--deps/npm/node_modules/libnpmpack/package.json23
-rw-r--r--deps/npm/node_modules/libnpmpublish/README.md105
-rw-r--r--deps/npm/node_modules/libnpmpublish/lib/index.js (renamed from deps/npm/node_modules/libnpmpublish/index.js)0
-rw-r--r--deps/npm/node_modules/libnpmpublish/lib/publish.js (renamed from deps/npm/node_modules/libnpmpublish/publish.js)6
-rw-r--r--deps/npm/node_modules/libnpmpublish/lib/unpublish.js (renamed from deps/npm/node_modules/libnpmpublish/unpublish.js)9
-rw-r--r--deps/npm/node_modules/libnpmpublish/package.json31
-rw-r--r--deps/npm/node_modules/libnpmsearch/README.md173
-rw-r--r--deps/npm/node_modules/libnpmsearch/lib/index.js (renamed from deps/npm/node_modules/libnpmsearch/index.js)6
-rw-r--r--deps/npm/node_modules/libnpmsearch/package.json24
-rw-r--r--deps/npm/node_modules/libnpmteam/README.md189
-rw-r--r--deps/npm/node_modules/libnpmteam/lib/index.js (renamed from deps/npm/node_modules/libnpmteam/index.js)12
-rw-r--r--deps/npm/node_modules/libnpmteam/package.json24
-rw-r--r--deps/npm/node_modules/libnpmversion/README.md159
-rw-r--r--deps/npm/node_modules/libnpmversion/lib/index.js4
-rw-r--r--deps/npm/node_modules/libnpmversion/lib/proc-log.js2
-rw-r--r--deps/npm/node_modules/libnpmversion/lib/retrieve-tag.js4
-rw-r--r--deps/npm/node_modules/libnpmversion/lib/tag.js4
-rw-r--r--deps/npm/node_modules/libnpmversion/lib/version.js22
-rw-r--r--deps/npm/node_modules/libnpmversion/lib/write-json.js2
-rw-r--r--deps/npm/node_modules/libnpmversion/package.json26
-rw-r--r--deps/npm/package.json54
-rw-r--r--deps/npm/test/lib/commands/pack.js3
-rw-r--r--deps/npm/test/lib/commands/unpublish.js48
144 files changed, 2113 insertions, 755 deletions
diff --git a/deps/npm/docs/output/commands/npm-ls.html b/deps/npm/docs/output/commands/npm-ls.html
index 2e313801aae..3ad752bcac4 100644
--- a/deps/npm/docs/output/commands/npm-ls.html
+++ b/deps/npm/docs/output/commands/npm-ls.html
@@ -160,7 +160,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@8.3.0 /path/to/npm
+<pre lang="bash"><code>npm@8.3.1 /path/to/npm
└─┬ init-package-json@0.0.4
└── promzard@0.1.5
</code></pre>
diff --git a/deps/npm/docs/output/commands/npm.html b/deps/npm/docs/output/commands/npm.html
index 6fb69cf3a8b..044d90faec6 100644
--- a/deps/npm/docs/output/commands/npm.html
+++ b/deps/npm/docs/output/commands/npm.html
@@ -149,7 +149,7 @@ npm command-line interface
<pre lang="bash"><code>npm &lt;command&gt; [args]
</code></pre>
<h3 id="version">Version</h3>
-<p>8.3.0</p>
+<p>8.3.1</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/lib/commands/unpublish.js b/deps/npm/lib/commands/unpublish.js
index 578890025d2..85c366381cc 100644
--- a/deps/npm/lib/commands/unpublish.js
+++ b/deps/npm/lib/commands/unpublish.js
@@ -9,6 +9,10 @@ const log = require('../utils/log-shim')
const otplease = require('../utils/otplease.js')
const getIdentity = require('../utils/get-identity.js')
+const LAST_REMAINING_VERSION_ERROR = 'Refusing to delete the last version of the package. ' +
+'It will block from republishing a new version for 24 hours.\n' +
+'Run with --force to do this.'
+
const BaseCommand = require('../base-command.js')
class Unpublish extends BaseCommand {
static description = 'Remove a package from the registry'
@@ -16,6 +20,11 @@ class Unpublish extends BaseCommand {
static params = ['dry-run', 'force', 'workspace', 'workspaces']
static usage = ['[<@scope>/]<pkg>[@<version>]']
+ async getKeysOfVersions (name, opts) {
+ const json = await npmFetch.json(npa(name).escapedName, opts)
+ return Object.keys(json.versions)
+ }
+
async completion (args) {
const { partialWord, conf } = args
@@ -44,8 +53,7 @@ class Unpublish extends BaseCommand {
return pkgs
}
- const json = await npmFetch.json(npa(pkgs[0]).escapedName, opts)
- const versions = Object.keys(json.versions)
+ const versions = await this.getKeysOfVersions(pkgs[0], opts)
if (!versions.length) {
return pkgs
} else {
@@ -97,12 +105,26 @@ class Unpublish extends BaseCommand {
const { name, version, publishConfig } = manifest
const pkgJsonSpec = npa.resolve(name, version)
const optsWithPub = { ...opts, publishConfig }
+
+ const versions = await this.getKeysOfVersions(name, optsWithPub)
+ if (versions.length === 1 && !force) {
+ throw this.usageError(
+ LAST_REMAINING_VERSION_ERROR
+ )
+ }
+
if (!dryRun) {
await otplease(opts, opts => libunpub(pkgJsonSpec, optsWithPub))
}
pkgName = name
pkgVersion = version ? `@${version}` : ''
} else {
+ const versions = await this.getKeysOfVersions(spec.name, opts)
+ if (versions.length === 1 && !force) {
+ throw this.usageError(
+ LAST_REMAINING_VERSION_ERROR
+ )
+ }
if (!dryRun) {
await otplease(opts, opts => libunpub(spec, opts))
}
diff --git a/deps/npm/man/man1/npm-access.1 b/deps/npm/man/man1/npm-access.1
index e6786f2a04c..400e41ba630 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" "December 2021" "" ""
+.TH "NPM\-ACCESS" "1" "January 2022" "" ""
.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 859088196ee..43273a5c7f6 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" "December 2021" "" ""
+.TH "NPM\-ADDUSER" "1" "January 2022" "" ""
.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 9279f1f6e81..23ad2c4f5e3 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" "December 2021" "" ""
+.TH "NPM\-AUDIT" "1" "January 2022" "" ""
.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 fa1abc087e1..a9fcca68865 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" "December 2021" "" ""
+.TH "NPM\-BIN" "1" "January 2022" "" ""
.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 857b78727ad..97431843d22 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" "December 2021" "" ""
+.TH "NPM\-BUGS" "1" "January 2022" "" ""
.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 0ae5e8251e1..e696f17f7a8 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" "December 2021" "" ""
+.TH "NPM\-CACHE" "1" "January 2022" "" ""
.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 fdd6edbdc03..df1f1c9831e 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" "December 2021" "" ""
+.TH "NPM\-CI" "1" "January 2022" "" ""
.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 93b7785ec90..7ac09937c93 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" "December 2021" "" ""
+.TH "NPM\-COMPLETION" "1" "January 2022" "" ""
.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 8b667c03d9c..ce13c858854 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" "December 2021" "" ""
+.TH "NPM\-CONFIG" "1" "January 2022" "" ""
.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 dff883b8270..959b3ffb6d0 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" "December 2021" "" ""
+.TH "NPM\-DEDUPE" "1" "January 2022" "" ""
.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 f83b46a156d..36b93d8d8b8 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" "December 2021" "" ""
+.TH "NPM\-DEPRECATE" "1" "January 2022" "" ""
.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 e730b597a6e..995391d15f4 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" "December 2021" "" ""
+.TH "NPM\-DIFF" "1" "January 2022" "" ""
.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 e2bd3c0e28d..bc37884fab8 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" "December 2021" "" ""
+.TH "NPM\-DIST\-TAG" "1" "January 2022" "" ""
.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 d0f2ce82c2d..d794821a7cb 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" "December 2021" "" ""
+.TH "NPM\-DOCS" "1" "January 2022" "" ""
.SH "NAME"
\fBnpm-docs\fR \- Open documentation for a package in a web browser
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-doctor.1 b/deps/npm/man/man1/npm-doctor.1
index 3b863eddab4..49bfe6e2dda 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" "December 2021" "" ""
+.TH "NPM\-DOCTOR" "1" "January 2022" "" ""
.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 4d3bf1711d1..e20c8af8438 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" "December 2021" "" ""
+.TH "NPM\-EDIT" "1" "January 2022" "" ""
.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 545d799306a..46140f0993e 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" "December 2021" "" ""
+.TH "NPM\-EXEC" "1" "January 2022" "" ""
.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 91a66ff3f53..7467b24a155 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" "December 2021" "" ""
+.TH "NPM\-EXPLAIN" "1" "January 2022" "" ""
.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 79e4e5a7dfb..1c4f90deb90 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" "December 2021" "" ""
+.TH "NPM\-EXPLORE" "1" "January 2022" "" ""
.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 bd157ab7fd3..162dcf0d443 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" "December 2021" "" ""
+.TH "NPM\-FIND\-DUPES" "1" "January 2022" "" ""
.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 488dd168c62..5a45391788f 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" "December 2021" "" ""
+.TH "NPM\-FUND" "1" "January 2022" "" ""
.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 8566e38185a..299ae9e5945 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" "December 2021" "" ""
+.TH "NPM\-HELP\-SEARCH" "1" "January 2022" "" ""
.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 260a253fede..d84fbb58849 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" "December 2021" "" ""
+.TH "NPM\-HELP" "1" "January 2022" "" ""
.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 609604155b3..4c3bd994398 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" "December 2021" "" ""
+.TH "NPM\-HOOK" "1" "January 2022" "" ""
.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 8119ff10fda..7a540d2b141 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" "December 2021" "" ""
+.TH "NPM\-INIT" "1" "January 2022" "" ""
.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 5b2e09cf1c2..acc190c20b6 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" "December 2021" "" ""
+.TH "NPM\-INSTALL\-CI\-TEST" "1" "January 2022" "" ""
.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 451ae94e87c..3f1a07292fa 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" "December 2021" "" ""
+.TH "NPM\-INSTALL\-TEST" "1" "January 2022" "" ""
.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 cf93650b30a..d6f5c5f07bb 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" "December 2021" "" ""
+.TH "NPM\-INSTALL" "1" "January 2022" "" ""
.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 b15ac7bce6d..3e7efd00ebb 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" "December 2021" "" ""
+.TH "NPM\-LINK" "1" "January 2022" "" ""
.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 17534e845fc..7be9d44c006 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" "December 2021" "" ""
+.TH "NPM\-LOGOUT" "1" "January 2022" "" ""
.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 61db54629dc..2b0338e3f30 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" "December 2021" "" ""
+.TH "NPM\-LS" "1" "January 2022" "" ""
.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@8\.3\.0 /path/to/npm
+npm@8\.3\.1 /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 3ca826bd6c7..8c147767fbf 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" "December 2021" "" ""
+.TH "NPM\-ORG" "1" "January 2022" "" ""
.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 e596e77c346..947037359c8 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" "December 2021" "" ""
+.TH "NPM\-OUTDATED" "1" "January 2022" "" ""
.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 289d67a6688..13937da6484 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" "December 2021" "" ""
+.TH "NPM\-OWNER" "1" "January 2022" "" ""
.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 42ab2fa74f2..9f0e0d8bc78 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" "December 2021" "" ""
+.TH "NPM\-PACK" "1" "January 2022" "" ""
.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 885cbd837d4..82a42a75716 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" "December 2021" "" ""
+.TH "NPM\-PING" "1" "January 2022" "" ""
.SH "NAME"
\fBnpm-ping\fR \- Ping npm registry
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-pkg.1 b/deps/npm/man/man1/npm-pkg.1
index dcb6a8bb4d7..db5e89d1304 100644
--- a/deps/npm/man/man1/npm-pkg.1
+++ b/deps/npm/man/man1/npm-pkg.1
@@ -1,4 +1,4 @@
-.TH "NPM\-PKG" "1" "December 2021" "" ""
+.TH "NPM\-PKG" "1" "January 2022" "" ""
.SH "NAME"
\fBnpm-pkg\fR \- Manages your package\.json
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-prefix.1 b/deps/npm/man/man1/npm-prefix.1
index 259b85e7ee9..7219fbecd13 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" "December 2021" "" ""
+.TH "NPM\-PREFIX" "1" "January 2022" "" ""
.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 176afb69c24..7fe66a033ef 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" "December 2021" "" ""
+.TH "NPM\-PROFILE" "1" "January 2022" "" ""
.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 54204593ff5..37d62b46027 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" "December 2021" "" ""
+.TH "NPM\-PRUNE" "1" "January 2022" "" ""
.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 ca9a3041bfd..80e66f59c30 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" "December 2021" "" ""
+.TH "NPM\-PUBLISH" "1" "January 2022" "" ""
.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 5b0e96d04b8..7f4dd093411 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" "December 2021" "" ""
+.TH "NPM\-REBUILD" "1" "January 2022" "" ""
.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 178816429ad..31fb205ece5 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" "December 2021" "" ""
+.TH "NPM\-REPO" "1" "January 2022" "" ""
.SH "NAME"
\fBnpm-repo\fR \- Open package repository page in the browser
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-restart.1 b/deps/npm/man/man1/npm-restart.1
index 37060c2b6f5..549e531902a 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" "December 2021" "" ""
+.TH "NPM\-RESTART" "1" "January 2022" "" ""
.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 9ac47bbeb38..4b9816bfd59 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" "December 2021" "" ""
+.TH "NPM\-ROOT" "1" "January 2022" "" ""
.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 22b80dbf024..6587e358824 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" "December 2021" "" ""
+.TH "NPM\-RUN\-SCRIPT" "1" "January 2022" "" ""
.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 5b16ae5babc..80e6eb14e26 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" "December 2021" "" ""
+.TH "NPM\-SEARCH" "1" "January 2022" "" ""
.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 960d5d81fa8..1d45353ddbd 100644
--- a/deps/npm/man/man1/npm-set-script.1
+++ b/deps/npm/man/man1/npm-set-script.1
@@ -1,4 +1,4 @@
-.TH "NPM\-SET\-SCRIPT" "1" "December 2021" "" ""
+.TH "NPM\-SET\-SCRIPT" "1" "January 2022" "" ""
.SH "NAME"
\fBnpm-set-script\fR \- Set tasks in the scripts section of package\.json
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-shrinkwrap.1 b/deps/npm/man/man1/npm-shrinkwrap.1
index 166ec5da103..1a407c697ac 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" "December 2021" "" ""
+.TH "NPM\-SHRINKWRAP" "1" "January 2022" "" ""
.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 7b580abec8d..705cc9fbc3a 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" "December 2021" "" ""
+.TH "NPM\-STAR" "1" "January 2022" "" ""
.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 3cf9bdc96ea..20af164e278 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" "December 2021" "" ""
+.TH "NPM\-STARS" "1" "January 2022" "" ""
.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 66b9a935ff9..314d3914fc1 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" "December 2021" "" ""
+.TH "NPM\-START" "1" "January 2022" "" ""
.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 daf293986b6..1bfa7443897 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" "December 2021" "" ""
+.TH "NPM\-STOP" "1" "January 2022" "" ""
.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 a75060f1b2e..0ce06f38265 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" "December 2021" "" ""
+.TH "NPM\-TEAM" "1" "January 2022" "" ""
.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 44e0d716c89..e71fef4ab04 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" "December 2021" "" ""
+.TH "NPM\-TEST" "1" "January 2022" "" ""
.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 a1ff1bc8831..968fee9305c 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" "December 2021" "" ""
+.TH "NPM\-TOKEN" "1" "January 2022" "" ""
.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 f1015a4174b..66aef70b046 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" "December 2021" "" ""
+.TH "NPM\-UNINSTALL" "1" "January 2022" "" ""
.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 052d7ef4c46..41e8bee4da4 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" "December 2021" "" ""
+.TH "NPM\-UNPUBLISH" "1" "January 2022" "" ""
.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 ef9fe6e3866..5fc5316a865 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" "December 2021" "" ""
+.TH "NPM\-UNSTAR" "1" "January 2022" "" ""
.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 4188dda6b1a..b5afea48f73 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" "December 2021" "" ""
+.TH "NPM\-UPDATE" "1" "January 2022" "" ""
.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 73fcf0bdfa9..38e9f9af68d 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" "December 2021" "" ""
+.TH "NPM\-VERSION" "1" "January 2022" "" ""
.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 4ff00fa9340..5d2fdadfaf6 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" "December 2021" "" ""
+.TH "NPM\-VIEW" "1" "January 2022" "" ""
.SH "NAME"
\fBnpm-view\fR \- View registry info
.SS Synopsis
diff --git a/deps/npm/man/man1/npm-whoami.1 b/deps/npm/man/man1/npm-whoami.1
index bd3aea36aa9..60d67c543b1 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" "December 2021" "" ""
+.TH "NPM\-WHOAMI" "1" "January 2022" "" ""
.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 1ee03685317..875c883fcf0 100644
--- a/deps/npm/man/man1/npm.1
+++ b/deps/npm/man/man1/npm.1
@@ -1,4 +1,4 @@
-.TH "NPM" "1" "December 2021" "" ""
+.TH "NPM" "1" "January 2022" "" ""
.SH "NAME"
\fBnpm\fR \- javascript package manager
.SS Synopsis
@@ -10,7 +10,7 @@ npm <command> [args]
.RE
.SS Version
.P
-8\.3\.0
+8\.3\.1
.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 f210e94f098..aee52e51203 100644
--- a/deps/npm/man/man1/npx.1
+++ b/deps/npm/man/man1/npx.1
@@ -1,4 +1,4 @@
-.TH "NPX" "1" "December 2021" "" ""
+.TH "NPX" "1" "January 2022" "" ""
.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 7b0161242f9..3c449d41eef 100644
--- a/deps/npm/man/man5/folders.5
+++ b/deps/npm/man/man5/folders.5
@@ -1,4 +1,4 @@
-.TH "FOLDERS" "5" "December 2021" "" ""
+.TH "FOLDERS" "5" "January 2022" "" ""
.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 1879e6557f5..432d11eda9e 100644
--- a/deps/npm/man/man5/install.5
+++ b/deps/npm/man/man5/install.5
@@ -1,4 +1,4 @@
-.TH "INSTALL" "5" "December 2021" "" ""
+.TH "INSTALL" "5" "January 2022" "" ""
.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 05f6cf4fd8b..01216bd0fdc 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" "December 2021" "" ""
+.TH "NPM\-SHRINKWRAP\.JSON" "5" "January 2022" "" ""
.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 33f011e7958..983294e9c20 100644
--- a/deps/npm/man/man5/npmrc.5
+++ b/deps/npm/man/man5/npmrc.5
@@ -1,4 +1,4 @@
-.TH "NPMRC" "5" "December 2021" "" ""
+.TH "NPMRC" "5" "January 2022" "" ""
.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 6306a8cb6c3..2695e041e7e 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" "December 2021" "" ""
+.TH "PACKAGE\.JSON" "5" "January 2022" "" ""
.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 22cccd59d32..98de34c0c59 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" "December 2021" "" ""
+.TH "PACKAGE\-LOCK\.JSON" "5" "January 2022" "" ""
.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 c366ec1bef6..2e05f320075 100644
--- a/deps/npm/man/man7/config.7
+++ b/deps/npm/man/man7/config.7
@@ -1,4 +1,4 @@
-.TH "CONFIG" "7" "December 2021" "" ""
+.TH "CONFIG" "7" "January 2022" "" ""
.SH "NAME"
\fBconfig\fR \- More than you probably want to know about npm configuration
.SS Description
diff --git a/deps/npm/man/man7/developers.7 b/deps/npm/man/man7/developers.7
index 017beab9daa..9deb251a185 100644
--- a/deps/npm/man/man7/developers.7
+++ b/deps/npm/man/man7/developers.7
@@ -1,4 +1,4 @@
-.TH "DEVELOPERS" "7" "December 2021" "" ""
+.TH "DEVELOPERS" "7" "January 2022" "" ""
.SH "NAME"
\fBdevelopers\fR \- Developer Guide
.SS Description
diff --git a/deps/npm/man/man7/logging.7 b/deps/npm/man/man7/logging.7
index 9098c388495..0818e0debc0 100644
--- a/deps/npm/man/man7/logging.7
+++ b/deps/npm/man/man7/logging.7
@@ -1,4 +1,4 @@
-.TH "LOGGING" "7" "December 2021" "" ""
+.TH "LOGGING" "7" "January 2022" "" ""
.SH "NAME"
\fBLogging\fR \- Why, What & How we Log
.SS Description
diff --git a/deps/npm/man/man7/orgs.7 b/deps/npm/man/man7/orgs.7
index 32941be2f6f..6790323a4f7 100644
--- a/deps/npm/man/man7/orgs.7
+++ b/deps/npm/man/man7/orgs.7
@@ -1,4 +1,4 @@
-.TH "ORGS" "7" "December 2021" "" ""
+.TH "ORGS" "7" "January 2022" "" ""
.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 3f5a28edcd0..8f085101168 100644
--- a/deps/npm/man/man7/registry.7
+++ b/deps/npm/man/man7/registry.7
@@ -1,4 +1,4 @@
-.TH "REGISTRY" "7" "December 2021" "" ""
+.TH "REGISTRY" "7" "January 2022" "" ""
.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 daf28731842..17a7d3dacb0 100644
--- a/deps/npm/man/man7/removal.7
+++ b/deps/npm/man/man7/removal.7
@@ -1,4 +1,4 @@
-.TH "REMOVAL" "7" "December 2021" "" ""
+.TH "REMOVAL" "7" "January 2022" "" ""
.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 d4702277a7b..b1fd4d17f11 100644
--- a/deps/npm/man/man7/scope.7
+++ b/deps/npm/man/man7/scope.7
@@ -1,4 +1,4 @@
-.TH "SCOPE" "7" "December 2021" "" ""
+.TH "SCOPE" "7" "January 2022" "" ""
.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 2c121b1f4ad..33b70e92ca3 100644
--- a/deps/npm/man/man7/scripts.7
+++ b/deps/npm/man/man7/scripts.7
@@ -1,4 +1,4 @@
-.TH "SCRIPTS" "7" "December 2021" "" ""
+.TH "SCRIPTS" "7" "January 2022" "" ""
.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 c809092741f..a4c3eef8beb 100644
--- a/deps/npm/man/man7/workspaces.7
+++ b/deps/npm/man/man7/workspaces.7
@@ -1,4 +1,4 @@
-.TH "WORKSPACES" "7" "December 2021" "" ""
+.TH "WORKSPACES" "7" "January 2022" "" ""
.SH "NAME"
\fBworkspaces\fR \- Working with workspaces
.SS Description
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/shrinkwrap.js b/deps/npm/node_modules/@npmcli/arborist/lib/shrinkwrap.js
index 2f0c0877cf8..a7a68c98c6d 100644
--- a/deps/npm/node_modules/@npmcli/arborist/lib/shrinkwrap.js
+++ b/deps/npm/node_modules/@npmcli/arborist/lib/shrinkwrap.js
@@ -1085,18 +1085,29 @@ class Shrinkwrap {
return lock
}
- save (options = {}) {
+ toJSON () {
if (!this.data) {
- throw new Error('run load() before saving data')
+ throw new Error('run load() before getting or setting data')
}
+ return this.commit()
+ }
+
+ toString (options = {}) {
+ const data = this.toJSON()
const { format = true } = options
const defaultIndent = this.indent || 2
const indent = format === true ? defaultIndent
: format || 0
const eol = format ? this.newline || '\n' : ''
- const data = this.commit()
- const json = stringify(data, swKeyOrder, indent).replace(/\n/g, eol)
+ return stringify(data, swKeyOrder, indent).replace(/\n/g, eol)
+ }
+
+ save (options = {}) {
+ if (!this.data) {
+ throw new Error('run load() before saving data')
+ }
+ const json = this.toString(options)
return Promise.all([
writeFile(this.filename, json).catch(er => {
if (this.hiddenLockfile) {
diff --git a/deps/npm/node_modules/@npmcli/arborist/package.json b/deps/npm/node_modules/@npmcli/arborist/package.json
index cea3d5ecd7e..ac2922bc965 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": "4.1.1",
+ "version": "4.2.0",
"description": "Manage node_modules trees",
"dependencies": {
"@isaacs/string-locale-compare": "^1.1.0",
@@ -37,7 +37,7 @@
"walk-up-path": "^1.0.0"
},
"devDependencies": {
- "@npmcli/template-oss": "^2.3.1",
+ "@npmcli/template-oss": "^2.4.2",
"benchmark": "^2.1.4",
"chalk": "^4.1.0",
"minify-registry-metadata": "^2.1.0",
@@ -94,9 +94,11 @@
"engines": {
"node": "^12.13.0 || ^14.15.0 || >=16"
},
- "templateVersion": "2.3.1",
"eslintIgnore": [
"test/fixtures/",
"!test/fixtures/*.js"
- ]
+ ],
+ "templateOSS": {
+ "version": "2.4.3"
+ }
}
diff --git a/deps/npm/node_modules/@npmcli/config/lib/index.js b/deps/npm/node_modules/@npmcli/config/lib/index.js
index e52f7a14f7d..293fad2ec56 100644
--- a/deps/npm/node_modules/@npmcli/config/lib/index.js
+++ b/deps/npm/node_modules/@npmcli/config/lib/index.js
@@ -401,6 +401,20 @@ class Config {
}
}
+ // Returns true if the value is coming directly from the source defined
+ // in default definitions, if the current value for the key config is
+ // coming from any other different source, returns false
+ isDefault (key) {
+ const [defaultType, ...types] = [...confTypes]
+ const defaultData = this.data.get(defaultType).data
+
+ return hasOwnProperty(defaultData, key)
+ && types.every(type => {
+ const typeData = this.data.get(type).data
+ return !hasOwnProperty(typeData, key)
+ })
+ }
+
invalidHandler (k, val, type, source, where) {
this.log.warn(
'invalid config',
diff --git a/deps/npm/node_modules/@npmcli/config/package.json b/deps/npm/node_modules/@npmcli/config/package.json
index 299202ec2d0..83d8a349d22 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.3.2",
+ "version": "2.4.0",
"files": [
"lib"
],
diff --git a/deps/npm/node_modules/agentkeepalive/History.md b/deps/npm/node_modules/agentkeepalive/History.md
index ea47ddcfe10..00cb65f5db3 100644
--- a/deps/npm/node_modules/agentkeepalive/History.md
+++ b/deps/npm/node_modules/agentkeepalive/History.md
@@ -1,4 +1,13 @@
+4.2.0 / 2021-12-31
+==================
+
+**fixes**
+ * [[`f418c67`](http://github.com/node-modules/agentkeepalive/commit/f418c67a63c061c7261592d4553bc455e0b0d306)] - fix: change `freeSocketTimeout` default value to 4000 (#102) (fengmk2 <<fengmk2@gmail.com>>)
+
+**others**
+ * [[`bc2a1ce`](http://github.com/node-modules/agentkeepalive/commit/bc2a1cea0884b4d18b0d244bf00006d9107963df)] - doc(readme): making `timeout`'s default clear (#100) (Aaron <<aaronarinder@gmail.com>>)
+
4.1.4 / 2021-02-05
==================
diff --git a/deps/npm/node_modules/agentkeepalive/lib/agent.js b/deps/npm/node_modules/agentkeepalive/lib/agent.js
index d0294a69f42..a7065b5e5d1 100644
--- a/deps/npm/node_modules/agentkeepalive/lib/agent.js
+++ b/deps/npm/node_modules/agentkeepalive/lib/agent.js
@@ -31,9 +31,10 @@ class Agent extends OriginalAgent {
constructor(options) {
options = options || {};
options.keepAlive = options.keepAlive !== false;
- // default is keep-alive and 15s free socket timeout
+ // default is keep-alive and 4s free socket timeout
+ // see https://medium.com/ssense-tech/reduce-networking-errors-in-nodejs-23b4eb9f2d83
if (options.freeSocketTimeout === undefined) {
- options.freeSocketTimeout = 15000;
+ options.freeSocketTimeout = 4000;
}
// Legacy API: keepAliveTimeout should be rename to `freeSocketTimeout`
if (options.keepAliveTimeout) {
@@ -51,8 +52,8 @@ class Agent extends OriginalAgent {
// Sets the socket to timeout after timeout milliseconds of inactivity on the socket.
// By default is double free socket timeout.
if (options.timeout === undefined) {
- // make sure socket default inactivity timeout >= 30s
- options.timeout = Math.max(options.freeSocketTimeout * 2, 30000);
+ // make sure socket default inactivity timeout >= 8s
+ options.timeout = Math.max(options.freeSocketTimeout * 2, 8000);
}
// support humanize format
diff --git a/deps/npm/node_modules/agentkeepalive/package.json b/deps/npm/node_modules/agentkeepalive/package.json
index 9027d554d1b..aba00ea1484 100644
--- a/deps/npm/node_modules/agentkeepalive/package.json
+++ b/deps/npm/node_modules/agentkeepalive/package.json
@@ -1,6 +1,6 @@
{
"name": "agentkeepalive",
- "version": "4.1.4",
+ "version": "4.2.0",
"description": "Missing keepalive http.Agent",
"main": "index.js",
"browser": "browser.js",
@@ -59,7 +59,7 @@
"os": {
"github": "linux"
},
- "version": "8, 10, 12, 14"
+ "version": "8, 10, 12, 14, 16"
},
"author": "fengmk2 <fengmk2@gmail.com> (https://fengmk2.com)",
"license": "MIT"
diff --git a/deps/npm/node_modules/hosted-git-info/git-host-info.js b/deps/npm/node_modules/hosted-git-info/git-host-info.js
index d4919344c77..ba55248e7d6 100644
--- a/deps/npm/node_modules/hosted-git-info/git-host-info.js
+++ b/deps/npm/node_modules/hosted-git-info/git-host-info.js
@@ -139,6 +139,36 @@ gitHosts.gist = Object.assign({}, defaults, {
}
})
+gitHosts.sourcehut = Object.assign({}, defaults, {
+ protocols: ['git+ssh:', 'https:'],
+ domain: 'git.sr.ht',
+ treepath: 'tree',
+ browsefiletemplate: ({ domain, user, project, committish, treepath, path, fragment, hashformat }) => `https://${domain}/${user}/${project}/${treepath}/${maybeEncode(committish || 'main')}/${path}${maybeJoin('#', hashformat(fragment || ''))}`,
+ filetemplate: ({ domain, user, project, committish, path }) => `https://${domain}/${user}/${project}/blob/${maybeEncode(committish) || 'main'}/${path}`,
+ httpstemplate: ({ domain, user, project, committish }) => `https://${domain}/${user}/${project}.git${maybeJoin('#', committish)}`,
+ tarballtemplate: ({ domain, user, project, committish }) => `https://${domain}/${user}/${project}/archive/${maybeEncode(committish) || 'main'}.tar.gz`,
+ bugstemplate: ({ domain, user, project }) => `https://todo.sr.ht/${user}/${project}`,
+ docstemplate: ({ domain, user, project, treepath, committish }) => `https://${domain}/${user}/${project}${maybeJoin('/', treepath, '/', maybeEncode(committish))}#readme`,
+ extract: (url) => {
+ let [, user, project, aux] = url.pathname.split('/', 4)
+
+ // tarball url
+ if (['archive'].includes(aux)) {
+ return
+ }
+
+ if (project && project.endsWith('.git')) {
+ project = project.slice(0, -4)
+ }
+
+ if (!user || !project) {
+ return
+ }
+
+ return { user, project, committish: url.hash.slice(1) }
+ }
+})
+
const names = Object.keys(gitHosts)
gitHosts.byShortcut = {}
gitHosts.byDomain = {}
diff --git a/deps/npm/node_modules/hosted-git-info/package.json b/deps/npm/node_modules/hosted-git-info/package.json
index b7e2ee28e5b..b145e622408 100644
--- a/deps/npm/node_modules/hosted-git-info/package.json
+++ b/deps/npm/node_modules/hosted-git-info/package.json
@@ -1,6 +1,6 @@
{
"name": "hosted-git-info",
- "version": "4.0.2",
+ "version": "4.1.0",
"description": "Provides metadata and conversions from repository urls for GitHub, Bitbucket and GitLab",
"main": "index.js",
"repository": {
@@ -34,7 +34,7 @@
"devDependencies": {
"standard": "^16.0.3",
"standard-version": "^9.1.0",
- "tap": "^14.11.0"
+ "tap": "^15.1.6"
},
"files": [
"index.js",
@@ -46,7 +46,6 @@
},
"tap": {
"color": 1,
- "coverage": true,
- "esm": false
+ "coverage": true
}
}
diff --git a/deps/npm/node_modules/is-core-module/core.json b/deps/npm/node_modules/is-core-module/core.json
index 5cd90d1732b..8f4ad128989 100644
--- a/deps/npm/node_modules/is-core-module/core.json
+++ b/deps/npm/node_modules/is-core-module/core.json
@@ -83,6 +83,8 @@
"node:querystring": [">= 14.18 && < 15", ">= 16"],
"readline": true,
"node:readline": [">= 14.18 && < 15", ">= 16"],
+ "readline/promises": ">= 17",
+ "node:readline/promises": ">= 17",
"repl": true,
"node:repl": [">= 14.18 && < 15", ">= 16"],
"smalloc": ">= 0.11.5 && < 3",
diff --git a/deps/npm/node_modules/is-core-module/package.json b/deps/npm/node_modules/is-core-module/package.json
index 2b58b2332cd..78470592517 100644
--- a/deps/npm/node_modules/is-core-module/package.json
+++ b/deps/npm/node_modules/is-core-module/package.json
@@ -1,6 +1,6 @@
{
"name": "is-core-module",
- "version": "2.7.0",
+ "version": "2.8.0",
"description": "Is this specifier a node.js core module?",
"main": "index.js",
"sideEffects": false,
diff --git a/deps/npm/node_modules/is-core-module/test/index.js b/deps/npm/node_modules/is-core-module/test/index.js
index 392678e85c6..b688cd22f64 100644
--- a/deps/npm/node_modules/is-core-module/test/index.js
+++ b/deps/npm/node_modules/is-core-module/test/index.js
@@ -6,7 +6,7 @@ var semver = require('semver');
var isCore = require('../');
var data = require('../core.json');
-var supportsNodePrefix = semver.satisfies(process.versions.node, '>= 16', { includePrerelease: true });
+var supportsNodePrefix = semver.satisfies(process.versions.node, '^14.18 || >= 16', { includePrerelease: true });
test('core modules', function (t) {
t.test('isCore()', function (st) {
diff --git a/deps/npm/node_modules/libnpmaccess/README.md b/deps/npm/node_modules/libnpmaccess/README.md
new file mode 100644
index 00000000000..c0793445979
--- /dev/null
+++ b/deps/npm/node_modules/libnpmaccess/README.md
@@ -0,0 +1,247 @@
+# libnpmaccess
+
+[![npm version](https://img.shields.io/npm/v/libnpmaccess.svg)](https://npm.im/libnpmaccess)
+[![license](https://img.shields.io/npm/l/libnpmaccess.svg)](https://npm.im/libnpmaccess)
+[![GitHub Actions](https://github.com/npm/libnpmaccess/workflows/Node%20CI/badge.svg)](https://github.com/npm/libnpmaccess/actions?query=workflow%3A%22Node+CI%22)
+[![Coverage Status](https://coveralls.io/repos/github/npm/libnpmaccess/badge.svg?branch=latest)](https://coveralls.io/github/npm/libnpmaccess?branch=latest)
+
+[`libnpmaccess`](https://github.com/npm/libnpmaccess) is a Node.js
+library that provides programmatic access to the guts of the npm CLI's `npm
+access` command and its various subcommands. This includes managing account 2FA,
+listing packages and permissions, looking at package collaborators, and defining
+package permissions for users, orgs, and teams.
+
+## Example
+
+```javascript
+const access = require('libnpmaccess')
+
+// List all packages @zkat has access to on the npm registry.
+console.log(Object.keys(await access.lsPackages('zkat')))
+```
+
+## Table of Contents
+
+* [Installing](#install)
+* [Example](#example)
+* [Contributing](#contributing)
+* [API](#api)
+ * [access opts](#opts)
+ * [`public()`](#public)
+ * [`restricted()`](#restricted)
+ * [`grant()`](#grant)
+ * [`revoke()`](#revoke)
+ * [`tfaRequired()`](#tfa-required)
+ * [`tfaNotRequired()`](#tfa-not-required)
+ * [`lsPackages()`](#ls-packages)
+ * [`lsPackages.stream()`](#ls-packages-stream)
+ * [`lsCollaborators()`](#ls-collaborators)
+ * [`lsCollaborators.stream()`](#ls-collaborators-stream)
+
+### Install
+
+`$ npm install libnpmaccess`
+
+### API
+
+#### <a name="opts"></a> `opts` for `libnpmaccess` commands
+
+`libnpmaccess` uses [`npm-registry-fetch`](https://npm.im/npm-registry-fetch).
+All options are passed through directly to that library, so please refer to [its
+own `opts`
+documentation](https://www.npmjs.com/package/npm-registry-fetch#fetch-options)
+for options that can be passed in.
+
+A couple of options of note for those in a hurry:
+
+* `opts.token` - can be passed in and will be used as the authentication token for the registry. For other ways to pass in auth details, see the n-r-f docs.
+* `opts.otp` - certain operations will require an OTP token to be passed in. If a `libnpmaccess` command fails with `err.code === EOTP`, please retry the request with `{otp: <2fa token>}`
+
+#### <a name="public"></a> `> access.public(spec, [opts]) -> Promise<Boolean>`
+
+`spec` must be an [`npm-package-arg`](https://npm.im/npm-package-arg)-compatible
+registry spec.
+
+Makes package described by `spec` public.
+
+##### Example
+
+```javascript
+await access.public('@foo/bar', {token: 'myregistrytoken'})
+// `@foo/bar` is now public
+```
+
+#### <a name="restricted"></a> `> access.restricted(spec, [opts]) -> Promise<Boolean>`
+
+`spec` must be an [`npm-package-arg`](https://npm.im/npm-package-arg)-compatible
+registry spec.
+
+Makes package described by `spec` private/restricted.
+
+##### Example
+
+```javascript
+await access.restricted('@foo/bar', {token: 'myregistrytoken'})
+// `@foo/bar` is now private
+```
+
+#### <a name="grant"></a> `> access.grant(spec, team, permissions, [opts]) -> Promise<Boolean>`
+
+`spec` must be an [`npm-package-arg`](https://npm.im/npm-package-arg)-compatible
+registry spec. `team` must be a fully-qualified team name, in the `scope:team`
+format, with or without the `@` prefix, and the team must be a valid team within
+that scope. `permissions` must be one of `'read-only'` or `'read-write'`.
+
+Grants `read-only` or `read-write` permissions for a certain package to a team.
+
+##### Example
+
+```javascript
+await access.grant('@foo/bar', '@foo:myteam', 'read-write', {
+ token: 'myregistrytoken'
+})
+// `@foo/bar` is now read/write enabled for the @foo:myteam team.
+```
+
+#### <a name="revoke"></a> `> access.revoke(spec, team, [opts]) -> Promise<Boolean>`
+
+`spec` must be an [`npm-package-arg`](https://npm.im/npm-package-arg)-compatible
+registry spec. `team` must be a fully-qualified team name, in the `scope:team`
+format, with or without the `@` prefix, and the team must be a valid team within
+that scope. `permissions` must be one of `'read-only'` or `'read-write'`.
+
+Removes access to a package from a certain team.
+
+##### Example
+
+```javascript
+await access.revoke('@foo/bar', '@foo:myteam', {
+ token: 'myregistrytoken'
+})
+// @foo:myteam can no longer access `@foo/bar`
+```
+
+#### <a name="tfa-required"></a> `> access.tfaRequired(spec, [opts]) -> Promise<Boolean>`
+
+`spec` must be an [`npm-package-arg`](https://npm.im/npm-package-arg)-compatible
+registry spec.
+
+Makes it so publishing or managing a package requires using 2FA tokens to
+complete operations.
+
+##### Example
+
+```javascript
+await access.tfaRequires('lodash', {token: 'myregistrytoken'})
+// Publishing or changing dist-tags on `lodash` now require OTP to be enabled.
+```
+
+#### <a name="tfa-not-required"></a> `> access.tfaNotRequired(spec, [opts]) -> Promise<Boolean>`
+
+`spec` must be an [`npm-package-arg`](https://npm.im/npm-package-arg)-compatible
+registry spec.
+
+Disabled the package-level 2FA requirement for `spec`. Note that you will need
+to pass in an `otp` token in `opts` in order to complete this operation.
+
+##### Example
+
+```javascript
+await access.tfaNotRequired('lodash', {otp: '123654', token: 'myregistrytoken'})
+// Publishing or editing dist-tags on `lodash` no longer requires OTP to be
+// enabled.
+```
+
+#### <a name="ls-packages"></a> `> access.lsPackages(entity, [opts]) -> Promise<Object | null>`
+
+`entity` must be either a valid org or user name, or a fully-qualified team name
+in the `scope:team` format, with or without the `@` prefix.
+
+Lists out packages a user, org, or team has access to, with corresponding
+permissions. Packages that the access token does not have access to won't be
+listed.
+
+In order to disambiguate between users and orgs, two requests may end up being
+made when listing orgs or users.
+
+For a streamed version of these results, see
+[`access.lsPackages.stream()`](#ls-package-stream).
+
+##### Example
+
+```javascript
+await access.lsPackages('zkat', {
+ token: 'myregistrytoken'
+})
+// Lists all packages `@zkat` has access to on the registry, and the
+// corresponding permissions.
+```
+
+#### <a name="ls-packages-stream"></a> `> access.lsPackages.stream(scope, [team], [opts]) -> Stream`
+
+`entity` must be either a valid org or user name, or a fully-qualified team name
+in the `scope:team` format, with or without the `@` prefix.
+
+Streams out packages a user, org, or team has access to, with corresponding
+permissions, with each stream entry being formatted like `[packageName,
+permissions]`. Packages that the access token does not have access to won't be
+listed.
+
+In order to disambiguate between users and orgs, two requests may end up being
+made when listing orgs or users.
+
+The returned stream is a valid `asyncIterator`.
+
+##### Example
+
+```javascript
+for await (let [pkg, perm] of access.lsPackages.stream('zkat')) {
+ console.log('zkat has', perm, 'access to', pkg)
+}
+// zkat has read-write access to eggplant
+// zkat has read-only access to @npmcorp/secret
+```
+
+#### <a name="ls-collaborators"></a> `> access.lsCollaborators(spec, [user], [opts]) -> Promise<Object | null>`
+
+`spec` must be an [`npm-package-arg`](https://npm.im/npm-package-arg)-compatible
+registry spec. `user` must be a valid user name, with or without the `@`
+prefix.
+
+Lists out access privileges for a certain package. Will only show permissions
+for packages to which you have at least read access. If `user` is passed in, the
+list is filtered only to teams _that_ user happens to belong to.
+
+For a streamed version of these results, see [`access.lsCollaborators.stream()`](#ls-collaborators-stream).
+
+##### Example
+
+```javascript
+await access.lsCollaborators('@npm/foo', 'zkat', {
+ token: 'myregistrytoken'
+})
+// Lists all teams with access to @npm/foo that @zkat belongs to.
+```
+
+#### <a name="ls-collaborators-stream"></a> `> access.lsCollaborators.stream(spec, [user], [opts]) -> Stream`
+
+`spec` must be an [`npm-package-arg`](https://npm.im/npm-package-arg)-compatible
+registry spec. `user` must be a valid user name, with or without the `@`
+prefix.
+
+Stream out access privileges for a certain package, with each entry in `[user,
+permissions]` format. Will only show permissions for packages to which you have
+at least read access. If `user` is passed in, the list is filtered only to teams
+_that_ user happens to belong to.
+
+The returned stream is a valid `asyncIterator`.
+
+##### Example
+
+```javascript
+for await (let [usr, perm] of access.lsCollaborators.stream('npm')) {
+ console.log(usr, 'has', perm, 'access to npm')
+}
+// zkat has read-write access to npm
+// iarna has read-write access to npm
+```
diff --git a/deps/npm/node_modules/libnpmaccess/index.js b/deps/npm/node_modules/libnpmaccess/lib/index.js
index 883110b2899..925f742921a 100644
--- a/deps/npm/node_modules/libnpmaccess/index.js
+++ b/deps/npm/node_modules/libnpmaccess/lib/index.js
@@ -36,7 +36,7 @@ function setAccess (spec, access, opts = {}) {
...opts,
method: 'POST',
body: { access },
- spec
+ spec,
}).then(() => true)
})
}
@@ -47,7 +47,9 @@ cmd.grant = (spec, entity, permissions, opts = {}) => {
const { scope, team } = splitEntity(entity)
validate('OSSSO', [spec, scope, team, permissions, opts])
if (permissions !== 'read-write' && permissions !== 'read-only') {
- throw new Error('`permissions` must be `read-write` or `read-only`. Got `' + permissions + '` instead')
+ throw new Error(
+ '`permissions` must be `read-write` or `read-only`. Got `'
+ + permissions + '` instead')
}
const uri = `/-/team/${eu(scope)}/${eu(team)}/package`
return npmFetch(uri, {
@@ -56,7 +58,7 @@ cmd.grant = (spec, entity, permissions, opts = {}) => {
body: { package: spec.name, permissions },
scope,
spec,
- ignoreBody: true
+ ignoreBody: true,
})
.then(() => true)
})
@@ -74,7 +76,7 @@ cmd.revoke = (spec, entity, opts = {}) => {
body: { package: spec.name },
scope,
spec,
- ignoreBody: true
+ ignoreBody: true,
})
.then(() => true)
})
@@ -106,7 +108,7 @@ cmd.lsPackages.stream = (entity, opts = {}) => {
const nextOpts = {
...opts,
query: { format: 'cli' },
- mapJSON
+ mapJSON,
}
const ret = new Minipass({ objectMode: true })
npmFetch.json.stream(uri, '*', nextOpts)
@@ -153,7 +155,7 @@ cmd.lsCollaborators.stream = (spec, user, opts) => {
return npmFetch.json.stream(uri, '*', {
...opts,
query: { format: 'cli', user: user || undefined },
- mapJSON
+ mapJSON,
})
}
@@ -169,7 +171,7 @@ function setRequires2fa (spec, required, opts = {}) {
method: 'POST',
body: { publish_requires_tfa: required },
spec,
- ignoreBody: true
+ ignoreBody: true,
}).then(() => true)
})
}
diff --git a/deps/npm/node_modules/libnpmaccess/package.json b/deps/npm/node_modules/libnpmaccess/package.json
index 23d4b444ca0..8d2ba3ad765 100644
--- a/deps/npm/node_modules/libnpmaccess/package.json
+++ b/deps/npm/node_modules/libnpmaccess/package.json
@@ -1,20 +1,26 @@
{
"name": "libnpmaccess",
- "version": "4.0.3",
+ "version": "5.0.0",
"description": "programmatic library for `npm access` commands",
- "author": "Kat Marchán <kzm@sykosomatic.org>",
+ "author": "GitHub Inc.",
"license": "ISC",
+ "main": "lib/index.js",
"scripts": {
"preversion": "npm test",
"postversion": "npm publish",
"postpublish": "git push origin --follow-tags",
- "lint": "standard",
- "test": "tap"
+ "lint": "eslint '**/*.js'",
+ "test": "tap",
+ "postlint": "npm-template-check",
+ "lintfix": "npm run lint -- --fix",
+ "prepublishOnly": "git push origin --follow-tags",
+ "snap": "tap",
+ "posttest": "npm run lint"
},
"devDependencies": {
+ "@npmcli/template-oss": "^2.4.2",
"nock": "^12.0.1",
- "standard": "^14.3.0",
- "tap": "^14.11.0"
+ "tap": "^15.1.0"
},
"repository": {
"type": "git",
@@ -29,9 +35,16 @@
"npm-registry-fetch": "^11.0.0"
},
"engines": {
- "node": ">=10"
+ "node": "^12.13.0 || ^14.15.0 || >=16"
},
"tap": {
"check-coverage": true
+ },
+ "files": [
+ "bin",
+ "lib"
+ ],
+ "templateOSS": {
+ "version": "2.4.3"
}
}
diff --git a/deps/npm/node_modules/libnpmaccess/test/fixtures/tnock.js b/deps/npm/node_modules/libnpmaccess/test/fixtures/tnock.js
deleted file mode 100644
index 00b6e160e10..00000000000
--- a/deps/npm/node_modules/libnpmaccess/test/fixtures/tnock.js
+++ /dev/null
@@ -1,12 +0,0 @@
-'use strict'
-
-const nock = require('nock')
-
-module.exports = tnock
-function tnock (t, host) {
- const server = nock(host)
- t.tearDown(function () {
- server.done()
- })
- return server
-}
diff --git a/deps/npm/node_modules/libnpmaccess/test/index.js b/deps/npm/node_modules/libnpmaccess/test/index.js
deleted file mode 100644
index c6d939c3d8c..00000000000
--- a/deps/npm/node_modules/libnpmaccess/test/index.js
+++ /dev/null
@@ -1,417 +0,0 @@
-'use strict'
-
-const t = require('tap')
-const tnock = require('./fixtures/tnock.js')
-
-const access = require('../index.js')
-
-const REG = 'http://localhost:1337'
-const OPTS = {
- registry: REG
-}
-
-t.test('access public', t => {
- tnock(t, REG).post(
- '/-/package/%40foo%2Fbar/access', { access: 'public' }
- ).reply(200)
- return access.public('@foo/bar', OPTS).then(ret => {
- t.deepEqual(ret, true, 'request succeeded')
- })
-})
-
-t.test('access public - failure', t => {
- tnock(t, REG).post(
- '/-/package/%40foo%2Fbar/access', { access: 'public' }
- ).reply(418)
- return access.public('@foo/bar', OPTS)
- .catch(err => {
- t.equals(err.statusCode, 418, 'fails with code from registry')
- })
-})
-
-t.test('access restricted', t => {
- tnock(t, REG).post(
- '/-/package/%40foo%2Fbar/access', { access: 'restricted' }
- ).reply(200)
- return access.restricted('@foo/bar', OPTS).then(ret => {
- t.deepEqual(ret, true, 'request succeeded')
- })
-})
-
-t.test('access restricted - failure', t => {
- tnock(t, REG).post(
- '/-/package/%40foo%2Fbar/access', { access: 'restricted' }
- ).reply(418)
- return access.restricted('@foo/bar', OPTS)
- .catch(err => {
- t.equals(err.statusCode, 418, 'fails with code from registry')
- })
-})
-
-t.test('access 2fa-required', t => {
- tnock(t, REG).post('/-/package/%40foo%2Fbar/access', {
- publish_requires_tfa: true
- }).reply(200, { ok: true })
- return access.tfaRequired('@foo/bar', OPTS).then(ret => {
- t.deepEqual(ret, true, 'request succeeded')
- })
-})
-
-t.test('access 2fa-not-required', t => {
- tnock(t, REG).post('/-/package/%40foo%2Fbar/access', {
- publish_requires_tfa: false
- }).reply(200, { ok: true })
- return access.tfaNotRequired('@foo/bar', OPTS).then(ret => {
- t.deepEqual(ret, true, 'request succeeded')
- })
-})
-
-t.test('access grant basic read-write', t => {
- tnock(t, REG).put('/-/team/myorg/myteam/package', {
- package: '@foo/bar',
- permissions: 'read-write'
- }).reply(201)
- return access.grant(
- '@foo/bar', 'myorg:myteam', 'read-write', OPTS
- ).then(ret => {
- t.deepEqual(ret, true, 'request succeeded')
- })
-})
-
-t.test('access grant basic read-only', t => {
- tnock(t, REG).put('/-/team/myorg/myteam/package', {
- package: '@foo/bar',
- permissions: 'read-only'
- }).reply(201)
- return access.grant(
- '@foo/bar', 'myorg:myteam', 'read-only', OPTS
- ).then(ret => {
- t.deepEqual(ret, true, 'request succeeded')
- })
-})
-
-t.test('access grant bad perm', t => {
- return access.grant(
- '@foo/bar', 'myorg:myteam', 'unknown', OPTS
- ).then(ret => {
- throw new Error('should not have succeeded')
- }, err => {
- t.match(
- err.message,
- /must be.*read-write.*read-only/,
- 'only read-write and read-only are accepted'
- )
- })
-})
-
-t.test('access grant no entity', t => {
- return access.grant(
- '@foo/bar', undefined, 'read-write', OPTS
- ).then(ret => {
- throw new Error('should not have succeeded')
- }, err => {
- t.match(
- err.message,
- /Expected string/,
- 'passing undefined entity gives useful error'
- )
- })
-})
-
-t.test('access grant basic unscoped', t => {
- tnock(t, REG).put('/-/team/myorg/myteam/package', {
- package: 'bar',
- permissions: 'read-write'
- }).reply(201)
- return access.grant(
- 'bar', 'myorg:myteam', 'read-write', OPTS
- ).then(ret => {
- t.deepEqual(ret, true, 'request succeeded')
- })
-})
-
-t.test('access grant no opts passed', t => {
- // NOTE: mocking real url, because no opts variable means `registry` value
- // will be defauled to real registry url
- tnock(t, 'https://registry.npmjs.org')
- .put('/-/team/myorg/myteam/package', {
- package: 'bar',
- permissions: 'read-write'
- })
- .reply(201)
- return access.grant('bar', 'myorg:myteam', 'read-write')
- .then(ret => {
- t.equals(ret, true, 'request succeeded')
- })
-})
-
-t.test('access revoke basic', t => {
- tnock(t, REG).delete('/-/team/myorg/myteam/package', {
- package: '@foo/bar'
- }).reply(200)
- return access.revoke('@foo/bar', 'myorg:myteam', OPTS).then(ret => {
- t.deepEqual(ret, true, 'request succeeded')
- })
-})
-
-t.test('access revoke basic unscoped', t => {
- tnock(t, REG).delete('/-/team/myorg/myteam/package', {
- package: 'bar'
- }).reply(200, { accessChanged: true })
- return access.revoke('bar', 'myorg:myteam', OPTS).then(ret => {
- t.deepEqual(ret, true, 'request succeeded')
- })
-})
-
-t.test('access revoke no opts passed', t => {
- // NOTE: mocking real url, because no opts variable means `registry` value
- // will be defauled to real registry url
- tnock(t, 'https://registry.npmjs.org')
- .delete('/-/team/myorg/myteam/package', {
- package: 'bar'
- })
- .reply(201)
- return access.revoke('bar', 'myorg:myteam')
- .then(ret => {
- t.equals(ret, true, 'request succeeded')
- })
-})
-
-t.test('ls-packages on team', t => {
- const serverPackages = {
- '@foo/bar': 'write',
- '@foo/util': 'read',
- '@foo/other': 'shrödinger'
- }
- const clientPackages = {
- '@foo/bar': 'read-write',
- '@foo/util': 'read-only',
- '@foo/other': 'shrödinger'
- }
- tnock(t, REG).get(
- '/-/team/myorg/myteam/package?format=cli'
- ).reply(200, serverPackages)
- return access.lsPackages('myorg:myteam', OPTS).then(data => {
- t.deepEqual(data, clientPackages, 'got client package info')
- })
-})
-
-t.test('ls-packages on org', t => {
- const serverPackages = {
- '@foo/bar': 'write',
- '@foo/util': 'read',
- '@foo/other': 'shrödinger'
- }
- const clientPackages = {
- '@foo/bar': 'read-write',
- '@foo/util': 'read-only',
- '@foo/other': 'shrödinger'
- }
- tnock(t, REG).get(
- '/-/org/myorg/package?format=cli'
- ).reply(200, serverPackages)
- return access.lsPackages('myorg', OPTS).then(data => {
- t.deepEqual(data, clientPackages, 'got client package info')
- })
-})
-
-t.test('ls-packages on user', t => {
- const serverPackages = {
- '@foo/bar': 'write',
- '@foo/util': 'read',
- '@foo/other': 'shrödinger'
- }
- const clientPackages = {
- '@foo/bar': 'read-write',
- '@foo/util': 'read-only',
- '@foo/other': 'shrödinger'
- }
- const srv = tnock(t, REG)
- srv.get('/-/org/myuser/package?format=cli').reply(404, { error: 'not found' })
- srv.get('/-/user/myuser/package?format=cli').reply(200, serverPackages)
- return access.lsPackages('myuser', OPTS).then(data => {
- t.deepEqual(data, clientPackages, 'got client package info')
- })
-})
-
-t.test('ls-packages error on team', t => {
- tnock(t, REG).get('/-/team/myorg/myteam/package?format=cli').reply(404)
- return access.lsPackages('myorg:myteam', OPTS).then(
- () => { throw new Error('should not have succeeded') },
- err => t.equal(err.code, 'E404', 'spit out 404 directly if team provided')
- )
-})
-
-t.test('ls-packages error on user', t => {
- const srv = tnock(t, REG)
- srv.get('/-/org/myuser/package?format=cli').reply(404, { error: 'not found' })
- srv.get('/-/user/myuser/package?format=cli').reply(404, { error: 'not found' })
- return access.lsPackages('myuser', OPTS).then(
- () => { throw new Error('should not have succeeded') },
- err => t.equal(err.code, 'E404', 'spit out 404 if both reqs fail')
- )
-})
-
-t.test('ls-packages bad response', t => {
- tnock(t, REG).get(
- '/-/team/myorg/myteam/package?format=cli'
- ).reply(200, JSON.stringify(null))
- return access.lsPackages('myorg:myteam', OPTS).then(data => {
- t.deepEqual(data, null, 'succeeds with null')
- })
-})
-
-t.test('ls-packages stream', t => {
- const serverPackages = {
- '@foo/bar': 'write',
- '@foo/util': 'read',
- '@foo/other': 'shrödinger'
- }
- const clientPackages = [
- ['@foo/bar', 'read-write'],
- ['@foo/util', 'read-only'],
- ['@foo/other', 'shrödinger']
- ]
- tnock(t, REG).get(
- '/-/team/myorg/myteam/package?format=cli'
- ).reply(200, serverPackages)
- return access.lsPackages.stream('myorg:myteam', OPTS)
- .collect()
- .then(data => {
- t.deepEqual(data, clientPackages, 'got streamed client package info')
- })
-})
-
-t.test('ls-packages stream no opts', t => {
- const serverPackages = {
- '@foo/bar': 'write',
- '@foo/util': 'read',
- '@foo/other': 'shrödinger'
- }
- const clientPackages = [
- ['@foo/bar', 'read-write'],
- ['@foo/util', 'read-only'],
- ['@foo/other', 'shrödinger']
- ]
- // NOTE: mocking real url, because no opts variable means `registry` value
- // will be defauled to real registry url
- tnock(t, 'https://registry.npmjs.org')
- .get('/-/team/myorg/myteam/package?format=cli')
- .reply(200, serverPackages)
- return access.lsPackages.stream('myorg:myteam')
- .collect()
- .then(data => {
- t.deepEqual(data, clientPackages, 'got streamed client package info')
- })
-})
-
-t.test('ls-collaborators', t => {
- const serverCollaborators = {
- 'myorg:myteam': 'write',
- 'myorg:anotherteam': 'read',
- 'myorg:thirdteam': 'special-case'
- }
- const clientCollaborators = {
- 'myorg:myteam': 'read-write',
- 'myorg:anotherteam': 'read-only',
- 'myorg:thirdteam': 'special-case'
- }
- tnock(t, REG).get(
- '/-/package/%40foo%2Fbar/collaborators?format=cli'
- ).reply(200, serverCollaborators)
- return access.lsCollaborators('@foo/bar', OPTS).then(data => {
- t.deepEqual(data, clientCollaborators, 'got collaborators')
- })
-})
-
-t.test('ls-collaborators stream', t => {
- const serverCollaborators = {
- 'myorg:myteam': 'write',
- 'myorg:anotherteam': 'read',
- 'myorg:thirdteam': 'special-case'
- }
- const clientCollaborators = [
- ['myorg:myteam', 'read-write'],
- ['myorg:anotherteam', 'read-only'],
- ['myorg:thirdteam', 'special-case']
- ]
- tnock(t, REG).get(
- '/-/package/%40foo%2Fbar/collaborators?format=cli'
- ).reply(200, serverCollaborators)
- return access.lsCollaborators.stream('@foo/bar', OPTS)
- .collect()
- .then(data => {
- t.deepEqual(data, clientCollaborators, 'got collaborators')
- })
-})
-
-t.test('ls-collaborators w/scope', t => {
- const serverCollaborators = {
- 'myorg:myteam': 'write',
- 'myorg:anotherteam': 'read',
- 'myorg:thirdteam': 'special-case'
- }
- const clientCollaborators = {
- 'myorg:myteam': 'read-write',
- 'myorg:anotherteam': 'read-only',
- 'myorg:thirdteam': 'special-case'
- }
- tnock(t, REG).get(
- '/-/package/%40foo%2Fbar/collaborators?format=cli&user=zkat'
- ).reply(200, serverCollaborators)
- return access.lsCollaborators('@foo/bar', 'zkat', OPTS).then(data => {
- t.deepEqual(data, clientCollaborators, 'got collaborators')
- })
-})
-
-t.test('ls-collaborators w/o scope', t => {
- const serverCollaborators = {
- 'myorg:myteam': 'write',
- 'myorg:anotherteam': 'read',
- 'myorg:thirdteam': 'special-case'
- }
- const clientCollaborators = {
- 'myorg:myteam': 'read-write',
- 'myorg:anotherteam': 'read-only',
- 'myorg:thirdteam': 'special-case'
- }
- tnock(t, REG).get(
- '/-/package/bar/collaborators?format=cli&user=zkat'
- ).reply(200, serverCollaborators)
- return access.lsCollaborators('bar', 'zkat', OPTS).then(data => {
- t.deepEqual(data, clientCollaborators, 'got collaborators')
- })
-})
-
-t.test('ls-collaborators bad response', t => {
- tnock(t, REG).get(
- '/-/package/%40foo%2Fbar/collaborators?format=cli'
- ).reply(200, JSON.stringify(null))
- return access.lsCollaborators('@foo/bar', null, OPTS).then(data => {
- t.deepEqual(data, null, 'succeeds with null')
- })
-})
-
-t.test('error on non-registry specs', t => {
- const resolve = () => { throw new Error('should not succeed') }
- const reject = err => t.match(
- err.message, /spec.*must be a registry spec/, 'registry spec required'
- )
- return Promise.all([
- access.public('githubusername/reponame').then(resolve, reject),
- access.restricted('foo/bar').then(resolve, reject),
- access.grant('foo/bar', 'myorg', 'myteam', 'read-only').then(resolve, reject),
- access.revoke('foo/bar', 'myorg', 'myteam').then(resolve, reject),
- access.lsCollaborators('foo/bar').then(resolve, reject),
- access.tfaRequired('foo/bar').then(resolve, reject),
- access.tfaNotRequired('foo/bar').then(resolve, reject)
- ])
-})
-
-t.test('edit', t => {
- t.equal(typeof access.edit, 'function', 'access.edit exists')
- t.throws(() => {
- access.edit()
- }, /Not implemented/, 'directly throws NIY message')
- t.done()
-})
diff --git a/deps/npm/node_modules/libnpmdiff/index.js b/deps/npm/node_modules/libnpmdiff/lib/index.js
index 6e68e6c4c43..10532c1990d 100644
--- a/deps/npm/node_modules/libnpmdiff/index.js
+++ b/deps/npm/node_modules/libnpmdiff/lib/index.js
@@ -1,8 +1,8 @@
const pacote = require('pacote')
-const formatDiff = require('./lib/format-diff.js')
-const getTarball = require('./lib/tarball.js')
-const untar = require('./lib/untar.js')
+const formatDiff = require('./format-diff.js')
+const getTarball = require('./tarball.js')
+const untar = require('./untar.js')
// TODO: we test this condition in the diff command
// so this error probably doesnt need to be here. Or
diff --git a/deps/npm/node_modules/libnpmdiff/package.json b/deps/npm/node_modules/libnpmdiff/package.json
index 129d9b90cd7..24846f39cf4 100644
--- a/deps/npm/node_modules/libnpmdiff/package.json
+++ b/deps/npm/node_modules/libnpmdiff/package.json
@@ -1,14 +1,15 @@
{
"name": "libnpmdiff",
- "version": "2.0.4",
+ "version": "3.0.0",
"description": "The registry diff",
"repository": "https://github.com/npm/libnpmdiff",
+ "main": "lib/index.js",
"files": [
- "index.js",
+ "bin",
"lib"
],
"engines": {
- "node": ">=10"
+ "node": "^12.13.0 || ^14.15.0 || >=16"
},
"keywords": [
"npm",
@@ -28,24 +29,21 @@
"license": "ISC",
"scripts": {
"eslint": "eslint",
- "lint": "npm run eslint -- index.js \"lib/**/*.js\" \"test/*.js\"",
+ "lint": "eslint '**/*.js'",
"lintfix": "npm run lint -- --fix",
- "test": "tap test/*.js",
+ "test": "tap",
"posttest": "npm run lint",
- "snap": "tap test/*.js",
+ "snap": "tap",
"preversion": "npm test",
"postversion": "npm publish",
- "prepublishOnly": "git push origin --follow-tags"
+ "prepublishOnly": "git push origin --follow-tags",
+ "postlint": "npm-template-check"
},
"tap": {
"check-coverage": true
},
- "standard": {
- "ignore": [
- "/tap-snapshots/"
- ]
- },
"devDependencies": {
+ "@npmcli/template-oss": "^2.4.2",
"eslint": "^8.1.0",
"tap": "^15.0.9"
},
@@ -58,5 +56,8 @@
"npm-package-arg": "^8.1.4",
"pacote": "^12.0.0",
"tar": "^6.1.0"
+ },
+ "templateOSS": {
+ "version": "2.4.3"
}
}
diff --git a/deps/npm/node_modules/libnpmexec/README.md b/deps/npm/node_modules/libnpmexec/README.md
new file mode 100644
index 00000000000..a48552714d5
--- /dev/null
+++ b/deps/npm/node_modules/libnpmexec/README.md
@@ -0,0 +1,50 @@
+# libnpmexec
+
+[![npm version](https://img.shields.io/npm/v/libnpmexec.svg)](https://npm.im/libnpmexec)
+[![license](https://img.shields.io/npm/l/libnpmexec.svg)](https://npm.im/libnpmexec)
+[![GitHub Actions](https://github.com/npm/libnpmexec/workflows/node-ci/badge.svg)](https://github.com/npm/libnpmexec/actions?query=workflow%3Anode-ci)
+[![Coverage Status](https://coveralls.io/repos/github/npm/libnpmexec/badge.svg?branch=main)](https://coveralls.io/github/npm/libnpmexec?branch=main)
+
+The `npm exec` (`npx`) Programmatic API
+
+## Install
+
+`npm install libnpmexec`
+
+## Usage:
+
+```js
+const libexec = require('libnpmexec')
+await libexec({
+ args: ['yosay', 'Bom dia!'],
+ cache: '~/.npm/_cacache',
+ npxCache: '~/.npm/_npx',
+ yes: true,
+})
+```
+
+## API:
+
+### `libexec(opts)`
+
+- `opts`:
+ - `args`: List of pkgs to execute **Array<String>**, defaults to `[]`
+ - `call`: An alternative command to run when using `packages` option **String**, defaults to empty string.
+ - `cache`: The path location to where the npm cache folder is placed **String**
+ - `npxCache`: The path location to where the npx cache folder is placed **String**
+ - `color`: Output should use color? **Boolean**, defaults to `false`
+ - `localBin`: Location to the `node_modules/.bin` folder of the local project to start scanning for bin files **String**, defaults to `./node_modules/.bin`. **libexec** will walk up the directory structure looking for `node_modules/.bin` folders in parent folders that might satisfy the current `arg` and will use that bin if found.
+ - `locationMsg`: Overrides "at location" message when entering interactive mode **String**
+ - `log`: Sets an optional logger **Object**, defaults to `proc-log` module usage.
+ - `globalBin`: Location to the global space bin folder, same as: `$(npm bin -g)` **String**, defaults to empty string.
+ - `output`: A function to print output to **Function**
+ - `packages`: A list of packages to be used (possibly fetch from the registry) **Array<String>**, defaults to `[]`
+ - `path`: Location to where to read local project info (`package.json`) **String**, defaults to `.`
+ - `runPath`: Location to where to execute the script **String**, defaults to `.`
+ - `scriptShell`: Default shell to be used **String**, defaults to `sh` on POSIX systems, `process.env.ComSpec` OR `cmd` on Windows
+ - `yes`: Should skip download confirmation prompt when fetching missing packages from the registry? **Boolean**
+ - `registry`, `cache`, and more options that are forwarded to [@npmcli/arborist](https://github.com/npm/arborist/) and [pacote](https://github.com/npm/pacote/#options) **Object**
+
+## LICENSE
+
+[ISC](./LICENSE)
diff --git a/deps/npm/node_modules/libnpmexec/lib/cache-install-dir.js b/deps/npm/node_modules/libnpmexec/lib/cache-install-dir.js
index 4fb534f7dfe..77466938762 100644
--- a/deps/npm/node_modules/libnpmexec/lib/cache-install-dir.js
+++ b/deps/npm/node_modules/libnpmexec/lib/cache-install-dir.js
@@ -3,8 +3,9 @@ const crypto = require('crypto')
const { resolve } = require('path')
const cacheInstallDir = ({ npxCache, packages }) => {
- if (!npxCache)
+ if (!npxCache) {
throw new Error('Must provide a valid npxCache path')
+ }
// only packages not found in ${prefix}/node_modules
return resolve(npxCache, getHash(packages))
diff --git a/deps/npm/node_modules/libnpmexec/lib/file-exists.js b/deps/npm/node_modules/libnpmexec/lib/file-exists.js
index a115be14b00..05dddc89f08 100644
--- a/deps/npm/node_modules/libnpmexec/lib/file-exists.js
+++ b/deps/npm/node_modules/libnpmexec/lib/file-exists.js
@@ -13,11 +13,13 @@ const localFileExists = async (dir, binName, root = '/') => {
for (const path of walkUp(resolve(dir))) {
const binDir = resolve(path, 'node_modules', '.bin')
- if (await fileExists(resolve(binDir, binName)))
+ if (await fileExists(resolve(binDir, binName))) {
return binDir
+ }
- if (path.toLowerCase() === root)
+ if (path.toLowerCase() === root) {
return false
+ }
}
return false
diff --git a/deps/npm/node_modules/libnpmexec/lib/get-bin-from-manifest.js b/deps/npm/node_modules/libnpmexec/lib/get-bin-from-manifest.js
index 038095b5023..8ebc0e7a18b 100644
--- a/deps/npm/node_modules/libnpmexec/lib/get-bin-from-manifest.js
+++ b/deps/npm/node_modules/libnpmexec/lib/get-bin-from-manifest.js
@@ -3,13 +3,15 @@ const getBinFromManifest = (mani) => {
// otherwise if there's 1 bin or all bin value is the same (alias), use
// that, otherwise fail
const bin = mani.bin || {}
- if (new Set(Object.values(bin)).size === 1)
+ if (new Set(Object.values(bin)).size === 1) {
return Object.keys(bin)[0]
+ }
// XXX probably a util to parse this better?
const name = mani.name.replace(/^@[^/]+\//, '')
- if (bin[name])
+ if (bin[name]) {
return name
+ }
// XXX need better error message
throw Object.assign(new Error('could not determine executable to run'), {
diff --git a/deps/npm/node_modules/libnpmexec/lib/index.js b/deps/npm/node_modules/libnpmexec/lib/index.js
index 3f1463d767a..facafb035d3 100644
--- a/deps/npm/node_modules/libnpmexec/lib/index.js
+++ b/deps/npm/node_modules/libnpmexec/lib/index.js
@@ -59,8 +59,9 @@ const exec = async (opts) => {
})
// nothing to maybe install, skip the arborist dance
- if (!call && !args.length && !packages.length)
+ if (!call && !args.length && !packages.length) {
return await _run()
+ }
const needPackageCommandSwap = args.length && !packages.length
// if there's an argument and no package has been explicitly asked for
@@ -79,8 +80,9 @@ const exec = async (opts) => {
binExists = true
}
- if (binExists)
+ if (binExists) {
return await _run()
+ }
packages.push(args[0])
}
@@ -109,8 +111,9 @@ const exec = async (opts) => {
})
}))
- if (needPackageCommandSwap)
+ if (needPackageCommandSwap) {
args[0] = getBinFromManifest(manis[0])
+ }
// figure out whether we need to install stuff, or if local is fine
const localArb = new Arborist({
@@ -150,8 +153,9 @@ const exec = async (opts) => {
if (add.length) {
if (!yes) {
// set -n to always say no
- if (yes === false)
+ if (yes === false) {
throw new Error('canceled')
+ }
if (noTTY() || ciDetect()) {
log.warn('exec', `The following package${
@@ -165,11 +169,13 @@ const exec = async (opts) => {
const prompt = `Need to install the following packages:\n${
addList
}Ok to proceed? `
- if (typeof log.clearProgress === 'function')
+ if (typeof log.clearProgress === 'function') {
log.clearProgress()
+ }
const confirm = await read({ prompt, default: 'y' })
- if (confirm.trim().toLowerCase().charAt(0) !== 'y')
+ if (confirm.trim().toLowerCase().charAt(0) !== 'y') {
throw new Error('canceled')
+ }
}
}
await arb.reify({
diff --git a/deps/npm/node_modules/libnpmexec/lib/manifest-missing.js b/deps/npm/node_modules/libnpmexec/lib/manifest-missing.js
index 47146809609..aec1281e3a4 100644
--- a/deps/npm/node_modules/libnpmexec/lib/manifest-missing.js
+++ b/deps/npm/node_modules/libnpmexec/lib/manifest-missing.js
@@ -3,12 +3,14 @@ const manifestMissing = ({ tree, manifest }) => {
// true means we need to install it
const child = tree.children.get(manifest.name)
// if no child, we have to load it
- if (!child)
+ if (!child) {
return true
+ }
// if no version/tag specified, allow whatever's there
- if (manifest._from === `${manifest.name}@`)
+ if (manifest._from === `${manifest.name}@`) {
return false
+ }
// otherwise the version has to match what we WOULD get
return child.version !== manifest.version
diff --git a/deps/npm/node_modules/libnpmexec/lib/run-script.js b/deps/npm/node_modules/libnpmexec/lib/run-script.js
index 819dacb8bae..851f5c60bd0 100644
--- a/deps/npm/node_modules/libnpmexec/lib/run-script.js
+++ b/deps/npm/node_modules/libnpmexec/lib/run-script.js
@@ -41,16 +41,18 @@ const run = async ({
},
}
- if (log && log.disableProgress)
+ if (log && log.disableProgress) {
log.disableProgress()
+ }
try {
if (script === scriptShell) {
const isTTY = !noTTY()
if (isTTY) {
- if (ciDetect())
+ if (ciDetect()) {
return log.warn('exec', 'Interactive mode disabled in CI environment')
+ }
locationMsg = locationMsg || ` at location:\n${colorize.dim(runPath)}`
@@ -78,8 +80,9 @@ const run = async ({
stdio: 'inherit',
})
} finally {
- if (log && log.enableProgress)
+ if (log && log.enableProgress) {
log.enableProgress()
+ }
}
}
diff --git a/deps/npm/node_modules/libnpmexec/package.json b/deps/npm/node_modules/libnpmexec/package.json
index 3a03bd6cba0..8c8812a651a 100644
--- a/deps/npm/node_modules/libnpmexec/package.json
+++ b/deps/npm/node_modules/libnpmexec/package.json
@@ -1,7 +1,8 @@
{
"name": "libnpmexec",
- "version": "3.0.1",
+ "version": "3.0.2",
"files": [
+ "bin",
"lib"
],
"main": "lib/index.js",
@@ -28,25 +29,24 @@
],
"license": "ISC",
"scripts": {
- "lint": "eslint lib/*.js",
- "pretest": "npm run lint",
- "test": "tap test/*.js",
- "snap": "tap test/*.js",
+ "lint": "eslint '**/*.js'",
+ "posttest": "npm run lint",
+ "test": "tap",
+ "snap": "tap",
"preversion": "npm test",
"postversion": "npm publish",
- "prepublishOnly": "git push origin --follow-tags"
+ "prepublishOnly": "git push origin --follow-tags",
+ "postlint": "npm-template-check",
+ "lintfix": "npm run lint -- --fix"
},
"tap": {
"color": true,
- "check-coverage": true
+ "check-coverage": true,
+ "files": "test/*.js"
},
"devDependencies": {
+ "@npmcli/template-oss": "^2.4.2",
"bin-links": "^2.2.1",
- "eslint": "^7.24.0",
- "eslint-plugin-import": "^2.22.1",
- "eslint-plugin-node": "^11.1.0",
- "eslint-plugin-promise": "^5.1.0",
- "eslint-plugin-standard": "^5.0.0",
"tap": "^15.0.6"
},
"dependencies": {
@@ -61,5 +61,8 @@
"read": "^1.0.7",
"read-package-json-fast": "^2.0.2",
"walk-up-path": "^1.0.0"
+ },
+ "templateOSS": {
+ "version": "2.4.3"
}
}
diff --git a/deps/npm/node_modules/libnpmfund/README.md b/deps/npm/node_modules/libnpmfund/README.md
new file mode 100644
index 00000000000..8ab663f634d
--- /dev/null
+++ b/deps/npm/node_modules/libnpmfund/README.md
@@ -0,0 +1,132 @@
+# libnpmfund
+
+[![npm version](https://img.shields.io/npm/v/libnpmfund.svg)](https://npm.im/libnpmfund)
+[![license](https://img.shields.io/npm/l/libnpmfund.svg)](https://npm.im/libnpmfund)
+[![GitHub Actions](https://github.com/npm/libnpmfund/workflows/node-ci/badge.svg)](https://github.com/npm/libnpmfund/actions?query=workflow%3Anode-ci)
+[![Coverage Status](https://coveralls.io/repos/github/npm/libnpmfund/badge.svg?branch=master)](https://coveralls.io/github/npm/libnpmfund?branch=master)
+
+[`libnpmfund`](https://github.com/npm/libnpmfund) is a Node.js library for
+retrieving **funding** information for packages installed using
+[`arborist`](https://github.com/npm/arborist).
+
+## Table of Contents
+
+* [Example](#example)
+* [Install](#install)
+* [Contributing](#contributing)
+* [API](#api)
+* [LICENSE](#license)
+
+## Example
+
+```js
+const { read } = require('libnpmfund')
+
+const fundingInfo = await read()
+console.log(
+ JSON.stringify(fundingInfo, null, 2)
+)
+// => {
+ length: 2,
+ name: 'foo',
+ version: '1.0.0',
+ funding: { url: 'https://example.com' },
+ dependencies: {
+ bar: {
+ version: '1.0.0',
+ funding: { url: 'http://collective.example.com' }
+ }
+ }
+}
+```
+
+## Install
+
+`$ npm install libnpmfund`
+
+### Contributing
+
+The npm team enthusiastically welcomes contributions and project participation!
+There's a bunch of things you can do if you want to contribute! The
+[Contributor Guide](https://github.com/npm/cli/blob/latest/CONTRIBUTING.md)
+outlines the process for community interaction and contribution. Please don't
+hesitate to jump in if you'd like to, or even ask us questions if something
+isn't clear.
+
+All participants and maintainers in this project are expected to follow the
+[npm Code of Conduct](https://www.npmjs.com/policies/conduct), and just
+generally be excellent to each other.
+
+Please refer to the [Changelog](CHANGELOG.md) for project history details, too.
+
+Happy hacking!
+
+### API
+
+##### <a name="fund.read"></a> `> fund.read([opts]) -> Promise<Object>`
+
+Reads **funding** info from a npm install and returns a promise for a
+tree object that only contains packages in which funding info is defined.
+
+Options:
+
+- `countOnly`: Uses the tree-traversal logic from **npm fund** but skips over
+any obj definition and just returns an obj containing `{ length }` - useful for
+things such as printing a `6 packages are looking for funding` msg.
+- `workspaces`: `Array<String>` List of workspaces names to filter for,
+the result will only include a subset of the resulting tree that includes
+only the nodes that are children of the listed workspaces names.
+- `path`, `registry` and more [Arborist](https://github.com/npm/arborist/) options.
+
+##### <a name="fund.readTree"></a> `> fund.readTree(tree, [opts]) -> Promise<Object>`
+
+Reads **funding** info from a given install tree and returns a tree object
+that only contains packages in which funding info is defined.
+
+- `tree`: An [`arborist`](https://github.com/npm/arborist) tree to be used, e.g:
+
+```js
+const Arborist = require('@npmcli/arborist')
+const { readTree } = require('libnpmfund')
+
+const arb = new Arborist({ path: process.cwd() })
+const tree = await arb.loadActual()
+
+return readTree(tree, { countOnly: false })
+```
+
+Options:
+
+- `countOnly`: Uses the tree-traversal logic from **npm fund** but skips over
+any obj definition and just returns an obj containing `{ length }` - useful for
+things such as printing a `6 packages are looking for funding` msg.
+
+##### <a name="fund.normalizeFunding"></a> `> fund.normalizeFunding(funding) -> Object`
+
+From a `funding` `<object|string|array>`, retrieves normalized funding objects
+containing a `url` property.
+
+e.g:
+
+```js
+normalizeFunding('http://example.com')
+// => {
+ url: 'http://example.com'
+}
+```
+
+##### <a name="fund.isValidFunding"></a> `> fund.isValidFunding(funding) -> Boolean`
+
+Returns `<true>` if `funding` is a valid funding object, e.g:
+
+```js
+isValidFunding({ foo: 'not a valid funding obj' })
+// => false
+
+isValidFunding('http://example.com')
+// => true
+```
+
+## LICENSE
+
+[ISC](./LICENSE)
diff --git a/deps/npm/node_modules/libnpmfund/index.js b/deps/npm/node_modules/libnpmfund/lib/index.js
index 37bc1dd0b79..a3d2d8223ca 100644
--- a/deps/npm/node_modules/libnpmfund/index.js
+++ b/deps/npm/node_modules/libnpmfund/lib/index.js
@@ -15,11 +15,13 @@ function normalizeFunding (funding) {
// Is the value of a `funding` property of a `package.json`
// a valid type+url for `npm fund` to display?
function isValidFunding (funding) {
- if (!funding)
+ if (!funding) {
return false
+ }
- if (Array.isArray(funding))
+ if (Array.isArray(funding)) {
return funding.every(f => !Array.isArray(f) && isValidFunding(f))
+ }
try {
var parsed = new URL(funding.url || funding)
@@ -30,8 +32,9 @@ function isValidFunding (funding) {
if (
parsed.protocol !== 'https:' &&
parsed.protocol !== 'http:'
- )
+ ) {
return false
+ }
return Boolean(parsed.host)
}
@@ -53,8 +56,9 @@ function readTree (tree, opts) {
function tracked (name, version) {
const key = String(name) + String(version)
- if (seen.has(key))
+ if (seen.has(key)) {
return true
+ }
seen.add(key)
}
@@ -89,30 +93,36 @@ function readTree (tree, opts) {
function getFundingDependencies (tree) {
const edges = tree && tree.edgesOut && tree.edgesOut.values()
- if (!edges)
+ if (!edges) {
return empty()
+ }
const directDepsWithFunding = Array.from(edges).map(edge => {
- if (!edge || !edge.to)
+ if (!edge || !edge.to) {
return empty()
+ }
const node = edge.to.target || edge.to
- if (!node.package)
+ if (!node.package) {
return empty()
+ }
- if (filterSet && filterSet.size > 0 && !filterSet.has(node))
+ if (filterSet && filterSet.size > 0 && !filterSet.has(node)) {
return empty()
+ }
const { name, funding, version } = node.package
// avoids duplicated items within the funding tree
- if (tracked(name, version))
+ if (tracked(name, version)) {
return empty()
+ }
const fundingItem = {}
- if (version)
+ if (version) {
fundingItem.version = version
+ }
attachFundingInfo(fundingItem, funding)
@@ -126,8 +136,9 @@ function readTree (tree, opts) {
(res, { node, fundingItem }, i) => {
if (!fundingItem ||
fundingItem.length === 0 ||
- !node)
+ !node) {
return res
+ }
// recurse
const transitiveDependencies = node.edgesOut &&
@@ -136,17 +147,18 @@ function readTree (tree, opts) {
// if we're only counting items there's no need
// to add all the data to the resulting object
- if (countOnly)
+ if (countOnly) {
return null
+ }
if (hasDependencies(transitiveDependencies)) {
fundingItem.dependencies =
retrieveDependencies(transitiveDependencies)
}
- if (isValidFunding(fundingItem.funding))
+ if (isValidFunding(fundingItem.funding)) {
res[node.package.name] = fundingItem
- else if (hasDependencies(fundingItem.dependencies)) {
+ } else if (hasDependencies(fundingItem.dependencies)) {
res[_trailingDependencies] =
Object.assign(
empty(),
@@ -170,11 +182,13 @@ function readTree (tree, opts) {
(tree && tree.name)
result.name = name || (tree && tree.path)
- if (tree && tree.package && tree.package.version)
+ if (tree && tree.package && tree.package.version) {
result.version = tree.package.version
+ }
- if (tree && tree.package && tree.package.funding)
+ if (tree && tree.package && tree.package.funding) {
result.funding = normalizeFunding(tree.package.funding)
+ }
result.dependencies = retrieveDependencies(treeDependencies)
}
diff --git a/deps/npm/node_modules/libnpmfund/package.json b/deps/npm/node_modules/libnpmfund/package.json
index 2bd47419936..4b7ffc8f308 100644
--- a/deps/npm/node_modules/libnpmfund/package.json
+++ b/deps/npm/node_modules/libnpmfund/package.json
@@ -1,8 +1,10 @@
{
"name": "libnpmfund",
- "version": "2.0.1",
+ "version": "2.0.2",
+ "main": "lib/index.js",
"files": [
- "index.js"
+ "bin",
+ "lib"
],
"description": "Programmatic API for npm fund",
"repository": "https://github.com/npm/libnpmfund",
@@ -15,7 +17,7 @@
"fund",
"gitfund"
],
- "author": "npm Inc. <support@npmjs.com>",
+ "author": "GitHub Inc.",
"contributors": [
{
"name": "Ruy Adorno",
@@ -26,29 +28,21 @@
"license": "ISC",
"scripts": {
"eslint": "eslint",
- "lint": "npm run eslint -- index.js test.js",
+ "lint": "eslint '**/*.js'",
"lintfix": "npm run lint -- --fix",
"posttest": "npm run lint",
"test": "tap",
"snap": "tap",
"preversion": "npm test",
"postversion": "npm publish",
- "prepublishOnly": "git push origin --follow-tags"
+ "prepublishOnly": "git push origin --follow-tags",
+ "postlint": "npm-template-check"
},
"tap": {
"check-coverage": true
},
- "standard": {
- "ignore": [
- "/tap-snapshots/"
- ]
- },
"devDependencies": {
- "eslint": "^7.26.0",
- "eslint-plugin-import": "^2.22.1",
- "eslint-plugin-node": "^11.1.0",
- "eslint-plugin-promise": "^5.1.0",
- "eslint-plugin-standard": "^5.0.0",
+ "@npmcli/template-oss": "^2.4.2",
"tap": "^15.0.9"
},
"dependencies": {
@@ -56,5 +50,8 @@
},
"engines": {
"node": "^12.13.0 || ^14.15.0 || >=16"
+ },
+ "templateOSS": {
+ "version": "2.4.3"
}
}
diff --git a/deps/npm/node_modules/libnpmhook/README.md b/deps/npm/node_modules/libnpmhook/README.md
new file mode 100644
index 00000000000..ce6e8c1a519
--- /dev/null
+++ b/deps/npm/node_modules/libnpmhook/README.md
@@ -0,0 +1,271 @@
+# libnpmhook
+
+[![npm version](https://img.shields.io/npm/v/libnpmhook.svg)](https://npm.im/libnpmhook)
+[![license](https://img.shields.io/npm/l/libnpmhook.svg)](https://npm.im/libnpmhook)
+[![Coverage Status](https://coveralls.io/repos/github/npm/libnpmhook/badge.svg?branch=latest)](https://coveralls.io/github/npm/libnpmhook?branch=latest)
+
+[`libnpmhook`](https://github.com/npm/libnpmhook) is a Node.js library for
+programmatically managing the npm registry's server-side hooks.
+
+For a more general introduction to managing hooks, see [the introductory blog
+post](https://blog.npmjs.org/post/145260155635/introducing-hooks-get-notifications-of-npm).
+
+## Table of Contents
+
+* [Example](#example)
+* [Install](#install)
+* [Contributing](#contributing)
+* [API](#api)
+ * [hook opts](#opts)
+ * [`add()`](#add)
+ * [`rm()`](#rm)
+ * [`ls()`](#ls)
+ * [`ls.stream()`](#ls-stream)
+ * [`update()`](#update)
+
+## Example
+
+```js
+const hooks = require('libnpmhook')
+
+console.log(await hooks.ls('mypkg', {token: 'deadbeef'}))
+// array of hook objects on `mypkg`.
+```
+
+## Install
+
+`$ npm install libnpmhook`
+
+### API
+
+#### <a name="opts"></a> `opts` for `libnpmhook` commands
+
+`libnpmhook` uses [`npm-registry-fetch`](https://npm.im/npm-registry-fetch).
+All options are passed through directly to that library, so please refer to [its
+own `opts`
+documentation](https://www.npmjs.com/package/npm-registry-fetch#fetch-options)
+for options that can be passed in.
+
+A couple of options of note for those in a hurry:
+
+* `opts.token` - can be passed in and will be used as the authentication token for the registry. For other ways to pass in auth details, see the n-r-f docs.
+* `opts.otp` - certain operations will require an OTP token to be passed in. If a `libnpmhook` command fails with `err.code === EOTP`, please retry the request with `{otp: <2fa token>}`
+
+#### <a name="add"></a> `> hooks.add(name, endpoint, secret, [opts]) -> Promise`
+
+`name` is the name of the package, org, or user/org scope to watch. The type is
+determined by the name syntax: `'@foo/bar'` and `'foo'` are treated as packages,
+`@foo` is treated as a scope, and `~user` is treated as an org name or scope.
+Each type will attach to different events.
+
+The `endpoint` should be a fully-qualified http URL for the endpoint the hook
+will send its payload to when it fires. `secret` is a shared secret that the
+hook will send to that endpoint to verify that it's actually coming from the
+registry hook.
+
+The returned Promise resolves to the full hook object that was created,
+including its generated `id`.
+
+See also: [`POST
+/v1/hooks/hook`](https://github.com/npm/registry/blob/master/docs/hooks/endpoints.md#post-v1hookshook)
+
+##### Example
+
+```javascript
+await hooks.add('~zkat', 'https://example.com/api/added', 'supersekrit', {
+ token: 'myregistrytoken',
+ otp: '694207'
+})
+
+=>
+
+{ id: '16f7xoal',
+ username: 'zkat',
+ name: 'zkat',
+ endpoint: 'https://example.com/api/added',
+ secret: 'supersekrit',
+ type: 'owner',
+ created: '2018-08-21T20:05:25.125Z',
+ updated: '2018-08-21T20:05:25.125Z',
+ deleted: false,
+ delivered: false,
+ last_delivery: null,
+ response_code: 0,
+ status: 'active' }
+```
+
+#### <a name="find"></a> `> hooks.find(id, [opts]) -> Promise`
+
+Returns the hook identified by `id`.
+
+The returned Promise resolves to the full hook object that was found, or error
+with `err.code` of `'E404'` if it didn't exist.
+
+See also: [`GET
+/v1/hooks/hook/:id`](https://github.com/npm/registry/blob/master/docs/hooks/endpoints.md#get-v1hookshookid)
+
+##### Example
+
+```javascript
+await hooks.find('16f7xoal', {token: 'myregistrytoken'})
+
+=>
+
+{ id: '16f7xoal',
+ username: 'zkat',
+ name: 'zkat',
+ endpoint: 'https://example.com/api/added',
+ secret: 'supersekrit',
+ type: 'owner',
+ created: '2018-08-21T20:05:25.125Z',
+ updated: '2018-08-21T20:05:25.125Z',
+ deleted: false,
+ delivered: false,
+ last_delivery: null,
+ response_code: 0,
+ status: 'active' }
+```
+
+#### <a name="rm"></a> `> hooks.rm(id, [opts]) -> Promise`
+
+Removes the hook identified by `id`.
+
+The returned Promise resolves to the full hook object that was removed, if it
+existed, or `null` if no such hook was there (instead of erroring).
+
+See also: [`DELETE
+/v1/hooks/hook/:id`](https://github.com/npm/registry/blob/master/docs/hooks/endpoints.md#delete-v1hookshookid)
+
+##### Example
+
+```javascript
+await hooks.rm('16f7xoal', {
+ token: 'myregistrytoken',
+ otp: '694207'
+})
+
+=>
+
+{ id: '16f7xoal',
+ username: 'zkat',
+ name: 'zkat',
+ endpoint: 'https://example.com/api/added',
+ secret: 'supersekrit',
+ type: 'owner',
+ created: '2018-08-21T20:05:25.125Z',
+ updated: '2018-08-21T20:05:25.125Z',
+ deleted: true,
+ delivered: false,
+ last_delivery: null,
+ response_code: 0,
+ status: 'active' }
+
+// Repeat it...
+await hooks.rm('16f7xoal', {
+ token: 'myregistrytoken',
+ otp: '694207'
+})
+
+=> null
+```
+
+#### <a name="update"></a> `> hooks.update(id, endpoint, secret, [opts]) -> Promise`
+
+The `id` should be a hook ID from a previously-created hook.
+
+The `endpoint` should be a fully-qualified http URL for the endpoint the hook
+will send its payload to when it fires. `secret` is a shared secret that the
+hook will send to that endpoint to verify that it's actually coming from the
+registry hook.
+
+The returned Promise resolves to the full hook object that was updated, if it
+existed. Otherwise, it will error with an `'E404'` error code.
+
+See also: [`PUT
+/v1/hooks/hook/:id`](https://github.com/npm/registry/blob/master/docs/hooks/endpoints.md#put-v1hookshookid)
+
+##### Example
+
+```javascript
+await hooks.update('16fxoal', 'https://example.com/api/other', 'newsekrit', {
+ token: 'myregistrytoken',
+ otp: '694207'
+})
+
+=>
+
+{ id: '16f7xoal',
+ username: 'zkat',
+ name: 'zkat',
+ endpoint: 'https://example.com/api/other',
+ secret: 'newsekrit',
+ type: 'owner',
+ created: '2018-08-21T20:05:25.125Z',
+ updated: '2018-08-21T20:14:41.964Z',
+ deleted: false,
+ delivered: false,
+ last_delivery: null,
+ response_code: 0,
+ status: 'active' }
+```
+
+#### <a name="ls"></a> `> hooks.ls([opts]) -> Promise`
+
+Resolves to an array of hook objects associated with the account you're
+authenticated as.
+
+Results can be further filtered with three values that can be passed in through
+`opts`:
+
+* `opts.package` - filter results by package name
+* `opts.limit` - maximum number of hooks to return
+* `opts.offset` - pagination offset for results (use with `opts.limit`)
+
+See also:
+ * [`hooks.ls.stream()`](#ls-stream)
+ * [`GET
+/v1/hooks`](https://github.com/npm/registry/blob/master/docs/hooks/endpoints.md#get-v1hooks)
+
+##### Example
+
+```javascript
+await hooks.ls({token: 'myregistrytoken'})
+
+=>
+[
+ { id: '16f7xoal', ... },
+ { id: 'wnyf98a1', ... },
+ ...
+]
+```
+
+#### <a name="ls-stream"></a> `> hooks.ls.stream([opts]) -> Stream`
+
+Returns a stream of hook objects associated with the account you're
+authenticated as. The returned stream is a valid `Symbol.asyncIterator` on
+`node@>=10`.
+
+Results can be further filtered with three values that can be passed in through
+`opts`:
+
+* `opts.package` - filter results by package name
+* `opts.limit` - maximum number of hooks to return
+* `opts.offset` - pagination offset for results (use with `opts.limit`)
+
+See also:
+ * [`hooks.ls()`](#ls)
+ * [`GET
+/v1/hooks`](https://github.com/npm/registry/blob/master/docs/hooks/endpoints.md#get-v1hooks)
+
+##### Example
+
+```javascript
+for await (let hook of hooks.ls.stream({token: 'myregistrytoken'})) {
+ console.log('found hook:', hook.id)
+}
+
+=>
+// outputs:
+// found hook: 16f7xoal
+// found hook: wnyf98a1
+```
diff --git a/deps/npm/node_modules/libnpmhook/index.js b/deps/npm/node_modules/libnpmhook/lib/index.js
index 262fcc083a6..7cd18261d84 100644
--- a/deps/npm/node_modules/libnpmhook/index.js
+++ b/deps/npm/node_modules/libnpmhook/lib/index.js
@@ -18,7 +18,7 @@ cmd.add = (name, endpoint, secret, opts = {}) => {
return fetch.json('/-/npm/v1/hooks/hook', {
...opts,
method: 'POST',
- body: { type, name, endpoint, secret }
+ body: { type, name, endpoint, secret },
})
}
@@ -26,7 +26,7 @@ cmd.rm = (id, opts = {}) => {
validate('SO', [id, opts])
return fetch.json(`/-/npm/v1/hooks/hook/${eu(id)}`, {
...opts,
- method: 'DELETE'
+ method: 'DELETE',
}).catch(err => {
if (err.code === 'E404') {
return null
@@ -41,7 +41,7 @@ cmd.update = (id, endpoint, secret, opts = {}) => {
return fetch.json(`/-/npm/v1/hooks/hook/${eu(id)}`, {
...opts,
method: 'PUT',
- body: {endpoint, secret}
+ body: { endpoint, secret },
})
}
@@ -64,7 +64,7 @@ cmd.ls.stream = (opts = {}) => {
query: {
package: pkg,
limit,
- offset
- }
+ offset,
+ },
})
}
diff --git a/deps/npm/node_modules/libnpmhook/package.json b/deps/npm/node_modules/libnpmhook/package.json
index 40951245a9e..a46de40ac98 100644
--- a/deps/npm/node_modules/libnpmhook/package.json
+++ b/deps/npm/node_modules/libnpmhook/package.json
@@ -1,18 +1,24 @@
{
"name": "libnpmhook",
- "version": "6.0.3",
+ "version": "7.0.0",
"description": "programmatic API for managing npm registry hooks",
- "main": "index.js",
+ "main": "lib/index.js",
"files": [
- "*.js",
+ "bin",
"lib"
],
"scripts": {
"prerelease": "npm t",
"postrelease": "npm publish && git push --follow-tags",
- "pretest": "standard",
- "release": "standard-version -s",
- "test": "tap"
+ "test": "tap",
+ "lint": "eslint '**/*.js'",
+ "postlint": "npm-template-check",
+ "lintfix": "npm run lint -- --fix",
+ "preversion": "npm test",
+ "postversion": "npm publish",
+ "prepublishOnly": "git push origin --follow-tags",
+ "snap": "tap",
+ "posttest": "npm run lint"
},
"tap": {
"check-coverage": true
@@ -24,19 +30,21 @@
"registry",
"npm api"
],
- "author": "Kat Marchán <kzm@sykosomatic.org>",
+ "author": "GitHub Inc.",
"license": "ISC",
"dependencies": {
"aproba": "^2.0.0",
"npm-registry-fetch": "^11.0.0"
},
"devDependencies": {
+ "@npmcli/template-oss": "^2.4.2",
"nock": "^9.6.1",
- "standard": "^11.0.1",
- "standard-version": "^4.4.0",
- "tap": "^14.10.6"
+ "tap": "^15.1.0"
},
"engines": {
- "node": ">=10"
+ "node": "^12.13.0 || ^14.15.0 || >=16"
+ },
+ "templateOSS": {
+ "version": "2.4.3"
}
}
diff --git a/deps/npm/node_modules/libnpmorg/README.md b/deps/npm/node_modules/libnpmorg/README.md
new file mode 100644
index 00000000000..b2e1ed589b8
--- /dev/null
+++ b/deps/npm/node_modules/libnpmorg/README.md
@@ -0,0 +1,149 @@
+# libnpmorg
+
+[![npm version](https://img.shields.io/npm/v/libnpmorg.svg)](https://npm.im/libnpmorg)
+[![license](https://img.shields.io/npm/l/libnpmorg.svg)](https://npm.im/libnpmorg)
+[![GitHub Actions](https://github.com/npm/libnpmorg/workflows/Node%20CI/badge.svg)](https://github.com/npm/libnpmorg/workflows/Node%20CI/badge.svg)
+[![Coverage Status](https://coveralls.io/repos/github/npm/libnpmorg/badge.svg?branch=latest)](https://coveralls.io/github/npm/libnpmorg?branch=latest)
+
+[`libnpmorg`](https://github.com/npm/libnpmorg) is a Node.js library for
+programmatically accessing the [npm Org membership
+API](https://github.com/npm/registry/blob/master/docs/orgs/memberships.md#membership-detail).
+
+## Table of Contents
+
+* [Example](#example)
+* [Install](#install)
+* [Contributing](#contributing)
+* [API](#api)
+ * [hook opts](#opts)
+ * [`set()`](#set)
+ * [`rm()`](#rm)
+ * [`ls()`](#ls)
+ * [`ls.stream()`](#ls-stream)
+
+## Example
+
+```js
+const org = require('libnpmorg')
+
+console.log(await org.ls('myorg', {token: 'deadbeef'}))
+=>
+Roster {
+ zkat: 'developer',
+ iarna: 'admin',
+ isaacs: 'owner'
+}
+```
+
+## Install
+
+`$ npm install libnpmorg`
+
+### API
+
+#### <a name="opts"></a> `opts` for `libnpmorg` commands
+
+`libnpmorg` uses [`npm-registry-fetch`](https://npm.im/npm-registry-fetch).
+All options are passed through directly to that library, so please refer to [its
+own `opts`
+documentation](https://www.npmjs.com/package/npm-registry-fetch#fetch-options)
+for options that can be passed in.
+
+A couple of options of note for those in a hurry:
+
+* `opts.token` - can be passed in and will be used as the authentication token for the registry. For other ways to pass in auth details, see the n-r-f docs.
+* `opts.otp` - certain operations will require an OTP token to be passed in. If a `libnpmorg` command fails with `err.code === EOTP`, please retry the request with `{otp: <2fa token>}`
+
+#### <a name="set"></a> `> org.set(org, user, [role], [opts]) -> Promise`
+
+The returned Promise resolves to a [Membership
+Detail](https://github.com/npm/registry/blob/master/docs/orgs/memberships.md#membership-detail)
+object.
+
+The `role` is optional and should be one of `admin`, `owner`, or `developer`.
+`developer` is the default if no `role` is provided.
+
+`org` and `user` must be scope names for the org name and user name
+respectively. They can optionally be prefixed with `@`.
+
+See also: [`PUT
+/-/org/:scope/user`](https://github.com/npm/registry/blob/master/docs/orgs/memberships.md#org-membership-replace)
+
+##### Example
+
+```javascript
+await org.set('@myorg', '@myuser', 'admin', {token: 'deadbeef'})
+=>
+MembershipDetail {
+ org: {
+ name: 'myorg',
+ size: 15
+ },
+ user: 'myuser',
+ role: 'admin'
+}
+```
+
+#### <a name="rm"></a> `> org.rm(org, user, [opts]) -> Promise`
+
+The Promise resolves to `null` on success.
+
+`org` and `user` must be scope names for the org name and user name
+respectively. They can optionally be prefixed with `@`.
+
+See also: [`DELETE
+/-/org/:scope/user`](https://github.com/npm/registry/blob/master/docs/orgs/memberships.md#org-membership-delete)
+
+##### Example
+
+```javascript
+await org.rm('myorg', 'myuser', {token: 'deadbeef'})
+```
+
+#### <a name="ls"></a> `> org.ls(org, [opts]) -> Promise`
+
+The Promise resolves to a
+[Roster](https://github.com/npm/registry/blob/master/docs/orgs/memberships.md#roster)
+object.
+
+`org` must be a scope name for an org, and can be optionally prefixed with `@`.
+
+See also: [`GET
+/-/org/:scope/user`](https://github.com/npm/registry/blob/master/docs/orgs/memberships.md#org-roster)
+
+##### Example
+
+```javascript
+await org.ls('myorg', {token: 'deadbeef'})
+=>
+Roster {
+ zkat: 'developer',
+ iarna: 'admin',
+ isaacs: 'owner'
+}
+```
+
+#### <a name="ls-stream"></a> `> org.ls.stream(org, [opts]) -> Stream`
+
+Returns a stream of entries for a
+[Roster](https://github.com/npm/registry/blob/master/docs/orgs/memberships.md#roster),
+with each emitted entry in `[key, value]` format.
+
+`org` must be a scope name for an org, and can be optionally prefixed with `@`.
+
+The returned stream is a valid `Symbol.asyncIterator`.
+
+See also: [`GET
+/-/org/:scope/user`](https://github.com/npm/registry/blob/master/docs/orgs/memberships.md#org-roster)
+
+##### Example
+
+```javascript
+for await (let [user, role] of org.ls.stream('myorg', {token: 'deadbeef'})) {
+ console.log(`user: ${user} (${role})`)
+}
+=>
+user: zkat (developer)
+user: iarna (admin)
+user: isaacs (owner)
+```
diff --git a/deps/npm/node_modules/libnpmorg/index.js b/deps/npm/node_modules/libnpmorg/lib/index.js
index 208542b31e8..4684b516d2b 100644
--- a/deps/npm/node_modules/libnpmorg/index.js
+++ b/deps/npm/node_modules/libnpmorg/lib/index.js
@@ -22,7 +22,7 @@ cmd.set = (org, user, role, opts = {}) => {
return fetch.json(`/-/org/${eu(org)}/user`, {
...opts,
method: 'PUT',
- body: { user, role }
+ body: { user, role },
}).then(ret => Object.assign(new MembershipDetail(), ret))
}
@@ -34,7 +34,7 @@ cmd.rm = (org, user, opts = {}) => {
...opts,
method: 'DELETE',
body: { user },
- ignoreBody: true
+ ignoreBody: true,
}).then(() => null)
}
@@ -59,6 +59,6 @@ cmd.ls.stream = (org, opts = {}) => {
...opts,
mapJSON: (value, [key]) => {
return [key, value]
- }
+ },
})
}
diff --git a/deps/npm/node_modules/libnpmorg/package.json b/deps/npm/node_modules/libnpmorg/package.json
index 0e82a207b70..93297c36338 100644
--- a/deps/npm/node_modules/libnpmorg/package.json
+++ b/deps/npm/node_modules/libnpmorg/package.json
@@ -1,8 +1,9 @@
{
"name": "libnpmorg",
- "version": "2.0.3",
+ "version": "3.0.0",
"description": "Programmatic api for `npm org` commands",
- "author": "Kat Marchán <kzm@sykosomatic.org>",
+ "author": "GitHub Inc.",
+ "main": "lib/index.js",
"keywords": [
"libnpm",
"npm",
@@ -16,21 +17,25 @@
"preversion": "npm test",
"postversion": "npm publish",
"prepublishOnly": "git push origin --follow-tags",
- "lint": "standard",
+ "lint": "eslint '**/*.js'",
"test": "tap",
- "posttest": "npm run lint"
+ "posttest": "npm run lint",
+ "postlint": "npm-template-check",
+ "lintfix": "npm run lint -- --fix",
+ "snap": "tap"
},
"files": [
- "index.js"
+ "bin",
+ "lib"
],
"tap": {
"check-coverage": true
},
"devDependencies": {
+ "@npmcli/template-oss": "^2.4.2",
"minipass": "^3.1.1",
"nock": "^12.0.1",
- "standard": "^14.3.1",
- "tap": "^14.10.6"
+ "tap": "^15.0.0"
},
"repository": {
"type": "git",
@@ -43,6 +48,9 @@
"npm-registry-fetch": "^11.0.0"
},
"engines": {
- "node": ">=10"
+ "node": "^12.13.0 || ^14.15.0 || >=16"
+ },
+ "templateOSS": {
+ "version": "2.4.3"
}
}
diff --git a/deps/npm/node_modules/libnpmpack/README.md b/deps/npm/node_modules/libnpmpack/README.md
new file mode 100644
index 00000000000..15c911a1eaa
--- /dev/null
+++ b/deps/npm/node_modules/libnpmpack/README.md
@@ -0,0 +1,56 @@
+# libnpmpack
+
+[![npm version](https://img.shields.io/npm/v/libnpmpack.svg)](https://npm.im/libnpmpack)
+[![license](https://img.shields.io/npm/l/libnpmpack.svg)](https://npm.im/libnpmpack)
+[![GitHub Actions](https://github.com/npm/libnpmpack/workflows/Node%20CI/badge.svg)](https://github.com/npm/libnpmpack/actions?query=workflow%3A%22Node+CI%22)
+[![Coverage Status](https://coveralls.io/repos/github/npm/libnpmpack/badge.svg?branch=latest)](https://coveralls.io/github/npm/libnpmpack?branch=latest)
+
+[`libnpmpack`](https://github.com/npm/libnpmpack) is a Node.js library for
+programmatically packing tarballs from a local directory or from a registry or github spec. If packing from a local source, `libnpmpack` will also run the `prepack` and `postpack` lifecycles.
+
+## Table of Contents
+
+* [Example](#example)
+* [Install](#install)
+* [API](#api)
+ * [`pack()`](#pack)
+
+## Example
+
+```js
+const pack = require('libnpmpack')
+```
+
+## Install
+
+`$ npm install libnpmpack`
+
+### API
+
+#### <a name="pack"></a> `> pack(spec, [opts]) -> Promise`
+
+Packs a tarball from a local directory or from a registry or github spec and returns a Promise that resolves to the tarball data Buffer, with from, resolved, and integrity fields attached.
+
+If no options are passed, the tarball file will be saved on the same directory from which `pack` was called in.
+
+`libnpmpack` uses [`pacote`](https://npm.im/pacote).
+Most options are passed through directly to that library, so please refer to
+[its own `opts`
+documentation](https://www.npmjs.com/package/pacote#options)
+for options that can be passed in.
+
+##### Examples
+
+```javascript
+// packs from cwd
+const tarball = await pack()
+
+// packs from a local directory
+const localTar = await pack('/Users/claudiahdz/projects/my-cool-pkg')
+
+// packs from a registry spec
+const registryTar = await pack('abbrev@1.0.3')
+
+// packs from a github spec
+const githubTar = await pack('isaacs/rimraf#PR-192')
+```
diff --git a/deps/npm/node_modules/libnpmpack/index.js b/deps/npm/node_modules/libnpmpack/lib/index.js
index 779c4d96d93..23bb9df4b22 100644
--- a/deps/npm/node_modules/libnpmpack/index.js
+++ b/deps/npm/node_modules/libnpmpack/lib/index.js
@@ -23,14 +23,14 @@ async function pack (spec = 'file:.', opts = {}) {
path: spec.fetchSpec,
stdio: 'inherit',
pkg: manifest,
- banner
+ banner,
})
}
// packs tarball
const tarball = await pacote.tarball(manifest._resolved, {
...opts,
- integrity: manifest._integrity
+ integrity: manifest._integrity,
})
if (spec.type === 'directory') {
@@ -45,8 +45,8 @@ async function pack (spec = 'file:.', opts = {}) {
env: {
npm_package_from: tarball.from,
npm_package_resolved: tarball.resolved,
- npm_package_integrity: tarball.integrity
- }
+ npm_package_integrity: tarball.integrity,
+ },
})
}
diff --git a/deps/npm/node_modules/libnpmpack/package.json b/deps/npm/node_modules/libnpmpack/package.json
index e0538b17160..dad28c39858 100644
--- a/deps/npm/node_modules/libnpmpack/package.json
+++ b/deps/npm/node_modules/libnpmpack/package.json
@@ -1,31 +1,35 @@
{
"name": "libnpmpack",
- "version": "3.0.0",
+ "version": "3.0.1",
"description": "Programmatic API for the bits behind npm pack",
- "author": "npm Inc. <support@npmjs.com>",
+ "author": "GitHub Inc.",
+ "main": "lib/index.js",
"contributors": [
"Claudia Hernández <claudia@npmjs.com>"
],
- "main": "index.js",
"files": [
- "*.js"
+ "bin",
+ "lib"
],
"license": "ISC",
"scripts": {
"preversion": "npm test",
"postversion": "npm publish",
"prepublishOnly": "git push origin --follow-tags",
- "lint": "standard",
+ "lint": "eslint '**/*.js'",
"test": "tap",
- "posttest": "npm run lint"
+ "posttest": "npm run lint",
+ "postlint": "npm-template-check",
+ "lintfix": "npm run lint -- --fix",
+ "snap": "tap"
},
"tap": {
"check-coverage": true
},
"devDependencies": {
+ "@npmcli/template-oss": "^2.4.2",
"nock": "^13.0.7",
- "standard": "^16.0.3",
- "tap": "^14.11.0"
+ "tap": "^15.0.0"
},
"repository": {
"type": "git",
@@ -40,5 +44,8 @@
},
"engines": {
"node": "^12.13.0 || ^14.15.0 || >=16"
+ },
+ "templateOSS": {
+ "version": "2.4.3"
}
}
diff --git a/deps/npm/node_modules/libnpmpublish/README.md b/deps/npm/node_modules/libnpmpublish/README.md
new file mode 100644
index 00000000000..0da46e89d3b
--- /dev/null
+++ b/deps/npm/node_modules/libnpmpublish/README.md
@@ -0,0 +1,105 @@
+# libnpmpublish
+
+[`libnpmpublish`](https://github.com/npm/libnpmpublish) is a Node.js
+library for programmatically publishing and unpublishing npm packages. Give
+it a manifest as an object and a tarball as a Buffer, and it'll put them on
+the registry for you.
+
+## Table of Contents
+
+* [Example](#example)
+* [Install](#install)
+* [API](#api)
+ * [publish/unpublish opts](#opts)
+ * [`publish()`](#publish)
+ * [`unpublish()`](#unpublish)
+
+## Example
+
+```js
+const { publish, unpublish } = require('libnpmpublish')
+```
+
+## Install
+
+`$ npm install libnpmpublish`
+
+### API
+
+#### <a name="opts"></a> `opts` for `libnpmpublish` commands
+
+`libnpmpublish` uses
+[`npm-registry-fetch`](https://npm.im/npm-registry-fetch). Most options
+are passed through directly to that library, so please refer to [its own
+`opts` documentation](http://npm.im/npm-registry-fetch#fetch-options) for
+options that can be passed in.
+
+A couple of options of note:
+
+* `opts.defaultTag` - registers the published package with the given tag,
+ defaults to `latest`.
+
+* `opts.access` - tells the registry whether this package should be
+ published as public or restricted. Only applies to scoped packages, which
+ default to restricted.
+
+* `opts.token` - can be passed in and will be used as the authentication
+ token for the registry. For other ways to pass in auth details, see the
+ n-r-f docs.
+
+#### <a name="publish"></a> `> libpub.publish(manifest, tarData, [opts]) -> Promise`
+
+Sends the package represented by the `manifest` and `tarData` to the
+configured registry.
+
+`manifest` should be the parsed `package.json` for the package being
+published (which can also be the manifest pulled from a packument, a git
+repo, tarball, etc.)
+
+`tarData` is a `Buffer` of the tarball being published.
+
+If `opts.npmVersion` is passed in, it will be used as the `_npmVersion`
+field in the outgoing packument. You may put your own user-agent string in
+there to identify your publishes.
+
+If `opts.algorithms` is passed in, it should be an array of hashing
+algorithms to generate `integrity` hashes for. The default is `['sha512']`,
+which means you end up with `dist.integrity = 'sha512-deadbeefbadc0ffee'`.
+Any algorithm supported by your current node version is allowed -- npm
+clients that do not support those algorithms will simply ignore the
+unsupported hashes.
+
+##### Example
+
+```js
+// note that pacote.manifest() and pacote.tarball() can also take
+// any spec that npm can install. a folder shown here, since that's
+// far and away the most common use case.
+const path = '/a/path/to/your/source/code'
+const pacote = require('pacote') // see: http://npm.im/pacote
+const manifest = await pacote.manifest(path)
+const tarData = await pacote.tarball(path)
+await libpub.publish(manifest, tarData, {
+ npmVersion: 'my-pub-script@1.0.2',
+ token: 'my-auth-token-here'
+}, opts)
+// Package has been published to the npm registry.
+```
+
+#### <a name="unpublish"></a> `> libpub.unpublish(spec, [opts]) -> Promise`
+
+Unpublishes `spec` from the appropriate registry. The registry in question may
+have its own limitations on unpublishing.
+
+`spec` should be either a string, or a valid
+[`npm-package-arg`](https://npm.im/npm-package-arg) parsed spec object. For
+legacy compatibility reasons, only `tag` and `version` specs will work as
+expected. `range` specs will fail silently in most cases.
+
+##### Example
+
+```js
+await libpub.unpublish('lodash', { token: 'i-am-the-worst'})
+//
+// `lodash` has now been unpublished, along with all its versions
+```
diff --git a/deps/npm/node_modules/libnpmpublish/index.js b/deps/npm/node_modules/libnpmpublish/lib/index.js
index 35687e02625..35687e02625 100644
--- a/deps/npm/node_modules/libnpmpublish/index.js
+++ b/deps/npm/node_modules/libnpmpublish/lib/index.js
diff --git a/deps/npm/node_modules/libnpmpublish/publish.js b/deps/npm/node_modules/libnpmpublish/lib/publish.js
index bed0f27246f..f6d88f7325b 100644
--- a/deps/npm/node_modules/libnpmpublish/publish.js
+++ b/deps/npm/node_modules/libnpmpublish/lib/publish.js
@@ -47,8 +47,9 @@ Remove the 'private' field from the package.json to publish it.`),
ignoreBody: true,
})
} catch (err) {
- if (err.code !== 'E409')
+ if (err.code !== 'E409') {
throw err
+ }
// if E409, we attempt exactly ONE retry, to protect us
// against malicious activity like trying to publish
// a bunch of new versions of a package at the same time
@@ -73,8 +74,9 @@ const patchManifest = (_manifest, opts) => {
const manifest = { ..._manifest }
manifest._nodeVersion = process.versions.node
- if (npmVersion)
+ if (npmVersion) {
manifest._npmVersion = npmVersion
+ }
fixer.fixNameField(manifest, { strict: true, allowLegacyCase: true })
const version = semver.clean(manifest.version)
diff --git a/deps/npm/node_modules/libnpmpublish/unpublish.js b/deps/npm/node_modules/libnpmpublish/lib/unpublish.js
index 937e4b84963..7fbeea503a3 100644
--- a/deps/npm/node_modules/libnpmpublish/unpublish.js
+++ b/deps/npm/node_modules/libnpmpublish/lib/unpublish.js
@@ -31,8 +31,9 @@ const unpublish = async (spec, opts) => {
// if missing specific version,
// assumed unpublished
- if (!versionData && !rawSpecs && !noVersions)
+ if (!versionData && !rawSpecs && !noVersions) {
return true
+ }
// unpublish all versions of a package:
// - no specs supplied "npm unpublish foo"
@@ -54,8 +55,9 @@ const unpublish = async (spec, opts) => {
// deleting dist tags associated to version
Object.keys(pkg['dist-tags']).forEach(tag => {
- if (pkg['dist-tags'][tag] === version)
+ if (pkg['dist-tags'][tag] === version) {
delete pkg['dist-tags'][tag]
+ }
})
if (latestVer === version) {
@@ -89,8 +91,9 @@ const unpublish = async (spec, opts) => {
return true
}
} catch (err) {
- if (err.code !== 'E404')
+ if (err.code !== 'E404') {
throw err
+ }
return true
}
diff --git a/deps/npm/node_modules/libnpmpublish/package.json b/deps/npm/node_modules/libnpmpublish/package.json
index ac0d632f7d6..156503af7d3 100644
--- a/deps/npm/node_modules/libnpmpublish/package.json
+++ b/deps/npm/node_modules/libnpmpublish/package.json
@@ -1,41 +1,39 @@
{
"name": "libnpmpublish",
- "version": "4.0.2",
+ "version": "5.0.0",
"description": "Programmatic API for the bits behind npm publish and unpublish",
- "author": "npm Inc. <support@npmjs.com>",
+ "author": "GitHub Inc.",
+ "main": "lib/index.js",
"contributors": [
"Kat Marchán <kzm@zkat.tech>",
"Claudia Hernández <claudia@npmjs.com>"
],
- "main": "index.js",
"files": [
- "*.js"
+ "bin",
+ "lib"
],
"license": "ISC",
"scripts": {
"eslint": "eslint",
- "lint": "npm run eslint -- \"*.js\"",
+ "lint": "eslint '**/*.js'",
"lintfix": "npm run lint -- --fix",
"preversion": "npm test",
"postversion": "npm publish",
"prepublishOnly": "git push origin --follow-tags",
"test": "tap",
- "posttest": "npm run lint"
+ "posttest": "npm run lint",
+ "postlint": "npm-template-check",
+ "snap": "tap"
},
"tap": {
"check-coverage": true
},
"devDependencies": {
- "eslint": "^7.11.0",
- "eslint-plugin-import": "^2.22.1",
- "eslint-plugin-node": "^11.1.0",
- "eslint-plugin-promise": "^4.2.1",
- "eslint-plugin-standard": "^4.0.2",
- "libnpmpack": "^2.0.0",
+ "@npmcli/template-oss": "^2.4.2",
+ "libnpmpack": "^3.0.0",
"lodash.clonedeep": "^4.5.0",
"nock": "^12.0.2",
- "standard": "^14.3.1",
- "tap": "^14.10.6"
+ "tap": "^15"
},
"repository": {
"type": "git",
@@ -51,6 +49,9 @@
"ssri": "^8.0.1"
},
"engines": {
- "node": ">=10"
+ "node": "^12.13.0 || ^14.15.0 || >=16"
+ },
+ "templateOSS": {
+ "version": "2.4.3"
}
}
diff --git a/deps/npm/node_modules/libnpmsearch/README.md b/deps/npm/node_modules/libnpmsearch/README.md
new file mode 100644
index 00000000000..31f44fe2479
--- /dev/null
+++ b/deps/npm/node_modules/libnpmsearch/README.md
@@ -0,0 +1,173 @@
+# libnpmsearch
+
+[![npm version](https://img.shields.io/npm/v/libnpmsearch.svg)](https://npm.im/libnpmsearch)
+[![license](https://img.shields.io/npm/l/libnpmsearch.svg)](https://npm.im/libnpmsearch)
+[![Coverage Status](https://coveralls.io/repos/github/npm/libnpmsearch/badge.svg?branch=latest)](https://coveralls.io/github/npm/libnpmsearch?branch=latest)
+
+[`libnpmsearch`](https://github.com/npm/libnpmsearch) is a Node.js library for
+programmatically accessing the npm search endpoint. It does **not** support
+legacy search through `/-/all`.
+
+## Table of Contents
+
+* [Example](#example)
+* [Install](#install)
+* [Contributing](#contributing)
+* [API](#api)
+ * [search opts](#opts)
+ * [`search()`](#search)
+ * [`search.stream()`](#search-stream)
+
+## Example
+
+```js
+const search = require('libnpmsearch')
+
+console.log(await search('libnpm'))
+=>
+[
+ {
+ name: 'libnpm',
+ description: 'programmatic npm API',
+ ...etc
+ },
+ {
+ name: 'libnpmsearch',
+ description: 'Programmatic API for searching in npm and compatible registries',
+ ...etc
+ },
+ ...more
+]
+```
+
+## Install
+
+`$ npm install libnpmsearch`
+
+### API
+
+#### <a name="opts"></a> `opts` for `libnpmsearch` commands
+
+The following opts are used directly by `libnpmsearch` itself:
+
+* `opts.limit` - Number of results to limit the query to. Default: 20
+* `opts.from` - Offset number for results. Used with `opts.limit` for pagination. Default: 0
+* `opts.detailed` - If true, returns an object with `package`, `score`, and `searchScore` fields, with `package` being what would usually be returned, and the other two containing details about how that package scored. Useful for UIs. Default: false
+* `opts.sortBy` - Used as a shorthand to set `opts.quality`, `opts.maintenance`, and `opts.popularity` with values that prioritize each one. Should be one of `'optimal'`, `'quality'`, `'maintenance'`, or `'popularity'`. Default: `'optimal'`
+* `opts.maintenance` - Decimal number between `0` and `1` that defines the weight of `maintenance` metrics when scoring and sorting packages. Default: `0.65` (same as `opts.sortBy: 'optimal'`)
+* `opts.popularity` - Decimal number between `0` and `1` that defines the weight of `popularity` metrics when scoring and sorting packages. Default: `0.98` (same as `opts.sortBy: 'optimal'`)
+* `opts.quality` - Decimal number between `0` and `1` that defines the weight of `quality` metrics when scoring and sorting packages. Default: `0.5` (same as `opts.sortBy: 'optimal'`)
+
+`libnpmsearch` uses [`npm-registry-fetch`](https://npm.im/npm-registry-fetch).
+Most options are passed through directly to that library, so please refer to
+[its own `opts`
+documentation](https://www.npmjs.com/package/npm-registry-fetch#fetch-options)
+for options that can be passed in.
+
+A couple of options of note for those in a hurry:
+
+* `opts.token` - can be passed in and will be used as the authentication token for the registry. For other ways to pass in auth details, see the n-r-f docs.
+
+#### <a name="search"></a> `> search(query, [opts]) -> Promise`
+
+`query` must be either a String or an Array of search terms.
+
+If `opts.limit` is provided, it will be sent to the API to constrain the number
+of returned results. You may receive more, or fewer results, at the endpoint's
+discretion.
+
+The returned Promise resolved to an Array of search results with the following
+format:
+
+```js
+{
+ name: String,
+ version: SemverString,
+ description: String || null,
+ maintainers: [
+ {
+ username: String,
+ email: String
+ },
+ ...etc
+ ] || null,
+ keywords: [String] || null,
+ date: Date || null
+}
+```
+
+If `opts.limit` is provided, it will be sent to the API to constrain the number
+of returned results. You may receive more, or fewer results, at the endpoint's
+discretion.
+
+For streamed results, see [`search.stream`](#search-stream).
+
+##### Example
+
+```javascript
+await search('libnpm')
+=>
+[
+ {
+ name: 'libnpm',
+ description: 'programmatic npm API',
+ ...etc
+ },
+ {
+ name: 'libnpmsearch',
+ description: 'Programmatic API for searching in npm and compatible registries',
+ ...etc
+ },
+ ...more
+]
+```
+
+#### <a name="search-stream"></a> `> search.stream(query, [opts]) -> Stream`
+
+`query` must be either a String or an Array of search terms.
+
+If `opts.limit` is provided, it will be sent to the API to constrain the number
+of returned results. You may receive more, or fewer results, at the endpoint's
+discretion.
+
+The returned Stream emits one entry per search result, with each entry having
+the following format:
+
+```js
+{
+ name: String,
+ version: SemverString,
+ description: String || null,
+ maintainers: [
+ {
+ username: String,
+ email: String
+ },
+ ...etc
+ ] || null,
+ keywords: [String] || null,
+ date: Date || null
+}
+```
+
+For getting results in one chunk, see [`search`](#search-stream).
+
+##### Example
+
+```javascript
+search.stream('libnpm').on('data', console.log)
+=>
+// entry 1
+{
+ name: 'libnpm',
+ description: 'programmatic npm API',
+ ...etc
+}
+// entry 2
+{
+ name: 'libnpmsearch',
+ description: 'Programmatic API for searching in npm and compatible registries',
+ ...etc
+}
+// etc
+```
diff --git a/deps/npm/node_modules/libnpmsearch/index.js b/deps/npm/node_modules/libnpmsearch/lib/index.js
index cb6b50783d3..959059176f5 100644
--- a/deps/npm/node_modules/libnpmsearch/index.js
+++ b/deps/npm/node_modules/libnpmsearch/lib/index.js
@@ -16,7 +16,7 @@ function searchStream (query, opts = {}) {
popularity: 0.98,
maintenance: 0.5,
...opts.opts, // this is to support the cli's --searchopts parameter
- ...opts
+ ...opts,
}
switch (opts.sortBy) {
@@ -54,7 +54,7 @@ function searchStream (query, opts = {}) {
from: opts.from,
quality: opts.quality,
popularity: opts.popularity,
- maintenance: opts.maintenance
+ maintenance: opts.maintenance,
},
mapJSON: (obj) => {
if (obj.package.date) {
@@ -65,7 +65,7 @@ function searchStream (query, opts = {}) {
} else {
return obj.package
}
- }
+ },
}
)
}
diff --git a/deps/npm/node_modules/libnpmsearch/package.json b/deps/npm/node_modules/libnpmsearch/package.json
index 88179b8d6fd..5479e41ae3c 100644
--- a/deps/npm/node_modules/libnpmsearch/package.json
+++ b/deps/npm/node_modules/libnpmsearch/package.json
@@ -1,10 +1,11 @@
{
"name": "libnpmsearch",
- "version": "3.1.2",
+ "version": "4.0.0",
"description": "Programmatic API for searching in npm and compatible registries.",
- "author": "Kat Marchán <kzm@sykosomatic.org>",
+ "author": "GitHub Inc.",
+ "main": "lib/index.js",
"files": [
- "*.js",
+ "bin",
"lib"
],
"keywords": [
@@ -18,16 +19,20 @@
"preversion": "npm test",
"postversion": "npm publish",
"prepublishOnly": "git push origin --follow-tags",
- "posttest": "standard",
- "test": "tap"
+ "posttest": "npm run lint",
+ "test": "tap",
+ "lint": "eslint '**/*.js'",
+ "postlint": "npm-template-check",
+ "lintfix": "npm run lint -- --fix",
+ "snap": "tap"
},
"tap": {
"check-coverage": true
},
"devDependencies": {
+ "@npmcli/template-oss": "^2.4.2",
"nock": "^9.6.1",
- "standard": "^12.0.0",
- "tap": "^14.11.0"
+ "tap": "^15"
},
"repository": {
"type": "git",
@@ -39,6 +44,9 @@
"npm-registry-fetch": "^11.0.0"
},
"engines": {
- "node": ">=10"
+ "node": "^12.13.0 || ^14.15.0 || >=16"
+ },
+ "templateOSS": {
+ "version": "2.4.3"
}
}
diff --git a/deps/npm/node_modules/libnpmteam/README.md b/deps/npm/node_modules/libnpmteam/README.md
new file mode 100644
index 00000000000..603cf6622cd
--- /dev/null
+++ b/deps/npm/node_modules/libnpmteam/README.md
@@ -0,0 +1,189 @@
+# libnpmteam
+
+[![npm version](https://img.shields.io/npm/v/libnpmteam.svg)](https://npm.im/libnpmteam)
+[![license](https://img.shields.io/npm/l/libnpmteam.svg)](https://npm.im/libnpmteam)
+[![GitHub Actions](https://github.com/npm/libnpmteam/workflows/Node%20CI/badge.svg)](https://github.com/npm/libnpmteam/workflows/Node%20CI/badge.svg)
+[![Coverage Status](https://coveralls.io/repos/github/npm/libnpmteam/badge.svg?branch=latest)](https://coveralls.io/github/npm/libnpmteam?branch=latest)
+
+[`libnpmteam`](https://github.com/npm/libnpmteam) is a Node.js
+library that provides programmatic access to the guts of the npm CLI's `npm
+team` command and its various subcommands.
+
+## Example
+
+```javascript
+const team = require('libnpmteam')
+
+// List all teams for the @npm org.
+console.log(await team.lsTeams('npm'))
+```
+
+## Publishing
+1. Manually create CHANGELOG.md file
+1. Commit changes to CHANGELOG.md
+ ```bash
+ $ git commit -m "chore: updated CHANGELOG.md"
+ ```
+1. Run `npm version {newVersion}`
+ ```bash
+ # Example
+ $ npm version patch
+ # 1. Runs `coverage` and `lint` scripts
+ # 2. Bumps package version; and **create commit/tag**
+ # 3. Runs `npm publish`; publishing directory with **unpushed commit**
+ # 4. Runs `git push origin --follow-tags`
+ ```
+
+## Table of Contents
+
+* [Installing](#install)
+* [Example](#example)
+* [API](#api)
+ * [team opts](#opts)
+ * [`create()`](#create)
+ * [`destroy()`](#destroy)
+ * [`add()`](#add)
+ * [`rm()`](#rm)
+ * [`lsTeams()`](#ls-teams)
+ * [`lsTeams.stream()`](#ls-teams-stream)
+ * [`lsUsers()`](#ls-users)
+ * [`lsUsers.stream()`](#ls-users-stream)
+
+### Install
+
+`$ npm install libnpmteam`
+
+### API
+
+#### <a name="opts"></a> `opts` for `libnpmteam` commands
+
+`libnpmteam` uses [`npm-registry-fetch`](https://npm.im/npm-registry-fetch).
+All options are passed through directly to that library, so please refer to [its
+own `opts`
+documentation](https://www.npmjs.com/package/npm-registry-fetch#fetch-options)
+for options that can be passed in.
+
+A couple of options of note for those in a hurry:
+
+* `opts.token` - can be passed in and will be used as the authentication token for the registry. For other ways to pass in auth details, see the n-r-f docs.
+* `opts.otp` - certain operations will require an OTP token to be passed in. If a `libnpmteam` command fails with `err.code === EOTP`, please retry the request with `{otp: <2fa token>}`
+
+#### <a name="create"></a> `> team.create(team, [opts]) -> Promise`
+
+Creates a team named `team`. Team names use the format `@<scope>:<name>`, with
+the `@` being optional.
+
+Additionally, `opts.description` may be passed in to include a description.
+
+##### Example
+
+```javascript
+await team.create('@npm:cli', {token: 'myregistrytoken'})
+// The @npm:cli team now exists.
+```
+
+#### <a name="destroy"></a> `> team.destroy(team, [opts]) -> Promise`
+
+Destroys a team named `team`. Team names use the format `@<scope>:<name>`, with
+the `@` being optional.
+
+##### Example
+
+```javascript
+await team.destroy('@npm:cli', {token: 'myregistrytoken'})
+// The @npm:cli team has been destroyed.
+```
+
+#### <a name="add"></a> `> team.add(user, team, [opts]) -> Promise`
+
+Adds `user` to `team`.
+
+##### Example
+
+```javascript
+await team.add('zkat', '@npm:cli', {token: 'myregistrytoken'})
+// @zkat now belongs to the @npm:cli team.
+```
+
+#### <a name="rm"></a> `> team.rm(user, team, [opts]) -> Promise`
+
+Removes `user` from `team`.
+
+##### Example
+
+```javascript
+await team.rm('zkat', '@npm:cli', {token: 'myregistrytoken'})
+// @zkat is no longer part of the @npm:cli team.
+```
+
+#### <a name="ls-teams"></a> `> team.lsTeams(scope, [opts]) -> Promise`
+
+Resolves to an array of team names belonging to `scope`.
+
+##### Example
+
+```javascript
+await team.lsTeams('@npm', {token: 'myregistrytoken'})
+=>
+[
+ 'npm:cli',
+ 'npm:web',
+ 'npm:registry',
+ 'npm:developers'
+]
+```
+
+#### <a name="ls-teams-stream"></a> `> team.lsTeams.stream(scope, [opts]) -> Stream`
+
+Returns a stream of teams belonging to `scope`.
+
+For a Promise-based version of these results, see [`team.lsTeams()`](#ls-teams).
+
+##### Example
+
+```javascript
+for await (let team of team.lsTeams.stream('@npm', {token: 'myregistrytoken'})) {
+ console.log(team)
+}
+
+// outputs
+// npm:cli
+// npm:web
+// npm:registry
+// npm:developers
+```
+
+#### <a name="ls-users"></a> `> team.lsUsers(team, [opts]) -> Promise`
+
+Resolves to an array of usernames belonging to `team`.
+
+For a streamed version of these results, see [`team.lsUsers.stream()`](#ls-users-stream).
+
+##### Example
+
+```javascript
+await team.lsUsers('@npm:cli', {token: 'myregistrytoken'})
+=>
+[
+ 'iarna',
+ 'zkat'
+]
+```
+
+#### <a name="ls-users-stream"></a> `> team.lsUsers.stream(team, [opts]) -> Stream`
+
+Returns a stream of usernames belonging to `team`.
+
+For a Promise-based version of these results, see [`team.lsUsers()`](#ls-users).
+
+##### Example
+
+```javascript
+for await (let user of team.lsUsers.stream('@npm:cli', {token: 'myregistrytoken'})) {
+ console.log(user)
+}
+
+// outputs
+// iarna
+// zkat
+```
diff --git a/deps/npm/node_modules/libnpmteam/index.js b/deps/npm/node_modules/libnpmteam/lib/index.js
index 8b6040113d5..4b257ea850d 100644
--- a/deps/npm/node_modules/libnpmteam/index.js
+++ b/deps/npm/node_modules/libnpmteam/lib/index.js
@@ -15,7 +15,7 @@ cmd.create = (entity, opts = {}) => {
...opts,
method: 'PUT',
scope,
- body: { name: team, description: opts.description }
+ body: { name: team, description: opts.description },
})
})
}
@@ -27,7 +27,7 @@ cmd.destroy = (entity, opts = {}) => {
return npmFetch.json(uri, {
...opts,
method: 'DELETE',
- scope
+ scope,
})
}
@@ -39,7 +39,7 @@ cmd.add = (user, entity, opts = {}) => {
...opts,
method: 'PUT',
scope,
- body: { user }
+ body: { user },
})
}
@@ -51,7 +51,7 @@ cmd.rm = (user, entity, opts = {}) => {
...opts,
method: 'DELETE',
scope,
- body: { user }
+ body: { user },
})
}
@@ -62,7 +62,7 @@ cmd.lsTeams.stream = (scope, opts = {}) => {
const uri = `/-/org/${eu(scope)}/team`
return npmFetch.json.stream(uri, '.*', {
...opts,
- query: { format: 'cli' }
+ query: { format: 'cli' },
})
}
@@ -74,7 +74,7 @@ cmd.lsUsers.stream = (entity, opts = {}) => {
const uri = `/-/team/${eu(scope)}/${eu(team)}/user`
return npmFetch.json.stream(uri, '.*', {
...opts,
- query: { format: 'cli' }
+ query: { format: 'cli' },
})
}
diff --git a/deps/npm/node_modules/libnpmteam/package.json b/deps/npm/node_modules/libnpmteam/package.json
index 09837ad2dd1..1264402321e 100644
--- a/deps/npm/node_modules/libnpmteam/package.json
+++ b/deps/npm/node_modules/libnpmteam/package.json
@@ -1,28 +1,33 @@
{
"name": "libnpmteam",
"description": "npm Team management APIs",
- "version": "2.0.4",
- "author": "Kat Marchán <kzm@zkat.tech>",
+ "version": "3.0.0",
+ "author": "GitHub Inc.",
"license": "ISC",
+ "main": "lib/index.js",
"scripts": {
"preversion": "npm test",
"postversion": "npm publish",
"prepublishOnly": "git push origin --follow-tags",
- "lint": "standard",
+ "lint": "eslint '**/*.js'",
"test": "tap",
- "posttest": "npm run lint"
+ "posttest": "npm run lint",
+ "postlint": "npm-template-check",
+ "lintfix": "npm run lint -- --fix",
+ "snap": "tap"
},
"devDependencies": {
+ "@npmcli/template-oss": "^2.4.2",
"nock": "^12.0.1",
- "standard": "^14.3.1",
- "tap": "^14.10.6"
+ "tap": "^15"
},
"repository": {
"type": "git",
"url": "https://github.com/npm/libnpmteam.git"
},
"files": [
- "index.js"
+ "bin",
+ "lib"
],
"homepage": "https://npmjs.com/package/libnpmteam",
"dependencies": {
@@ -30,9 +35,12 @@
"npm-registry-fetch": "^11.0.0"
},
"engines": {
- "node": ">=10"
+ "node": "^12.13.0 || ^14.15.0 || >=16"
},
"tap": {
"check-coverage": true
+ },
+ "templateOSS": {
+ "version": "2.4.3"
}
}
diff --git a/deps/npm/node_modules/libnpmversion/README.md b/deps/npm/node_modules/libnpmversion/README.md
new file mode 100644
index 00000000000..e82e7cd6f87
--- /dev/null
+++ b/deps/npm/node_modules/libnpmversion/README.md
@@ -0,0 +1,159 @@
+# libnpmversion
+
+Library to do the things that 'npm version' does.
+
+## USAGE
+
+```js
+const npmVersion = require('libnpmversion')
+
+// argument can be one of:
+// - any semver version string (set to that exact version)
+// - 'major', 'minor', 'patch', 'pre{major,minor,patch}' (increment at
+// that value)
+// - 'from-git' (set to the latest semver-lookin git tag - this skips
+// gitTagVersion, but will still sign if asked)
+npmVersion(arg, {
+ path: '/path/to/my/pkg', // defaults to cwd
+
+ allowSameVersion: false, // allow tagging/etc to the current version
+ preid: '', // when arg=='pre', define the prerelease string, like 'beta' etc.
+ tagVersionPrefix: 'v', // tag as 'v1.2.3' when versioning to 1.2.3
+ commitHooks: true, // default true, run git commit hooks, default true
+ gitTagVersion: true, // default true, tag the version
+ signGitCommit: false, // default false, gpg sign the git commit
+ signGitTag: false, // default false, gpg sign the git tag
+ force: false, // push forward recklessly if any problems happen
+ ignoreScripts: false, // do not run pre/post/version lifecycle scripts
+ scriptShell: '/bin/bash', // shell to run lifecycle scripts in
+ message: 'v%s', // message for tag and commit, replace %s with the version
+}).then(newVersion => {
+ console.error('version updated!', newVersion)
+})
+```
+
+## Description
+
+Run this in a package directory to bump the version and write the new data
+back to `package.json`, `package-lock.json`, and, if present,
+`npm-shrinkwrap.json`.
+
+The `newversion` argument should be a valid semver string, a valid second
+argument to [semver.inc](https://github.com/npm/node-semver#functions) (one
+of `patch`, `minor`, `major`, `prepatch`, `preminor`, `premajor`,
+`prerelease`), or `from-git`. In the second case, the existing version will
+be incremented by 1 in the specified field. `from-git` will try to read
+the latest git tag, and use that as the new npm version.
+
+If run in a git repo, it will also create a version commit and tag. This
+behavior is controlled by `gitTagVersion` (see below), and can be
+disabled by setting `gitTagVersion: false` in the options.
+It will fail if the working directory is not clean, unless `force: true` is
+set.
+
+If supplied with a `message` string option, it will
+use it as a commit message when creating a version commit. If the
+`message` option contains `%s` then that will be replaced with the
+resulting version number.
+
+If the `signGitTag` option is set, then the tag will be signed using
+the `-s` flag to git. Note that you must have a default GPG key set up in
+your git config for this to work properly.
+
+If `preversion`, `version`, or `postversion` are in the `scripts` property
+of the package.json, they will be executed in the appropriate sequence.
+
+The exact order of execution is as follows:
+
+1. Check to make sure the git working directory is clean before we get
+ started. Your scripts may add files to the commit in future steps.
+ This step is skipped if the `force` flag is set.
+2. Run the `preversion` script. These scripts have access to the old
+ `version` in package.json. A typical use would be running your full
+ test suite before deploying. Any files you want added to the commit
+ should be explicitly added using `git add`.
+3. Bump `version` in `package.json` as requested (`patch`, `minor`,
+ `major`, explicit version number, etc).
+4. Run the `version` script. These scripts have access to the new `version`
+ in package.json (so they can incorporate it into file headers in
+ generated files for example). Again, scripts should explicitly add
+ generated files to the commit using `git add`.
+5. Commit and tag.
+6. Run the `postversion` script. Use it to clean up the file system or
+ automatically push the commit and/or tag.
+
+Take the following example:
+
+```json
+{
+ "scripts": {
+ "preversion": "npm test",
+ "version": "npm run build && git add -A dist",
+ "postversion": "git push && git push --tags && rm -rf build/temp"
+ }
+}
+```
+
+This runs all your tests, and proceeds only if they pass. Then runs your
+`build` script, and adds everything in the `dist` directory to the commit.
+After the commit, it pushes the new commit and tag up to the server, and
+deletes the `build/temp` directory.
+
+## API
+
+### `npmVersion(newversion, options = {}) -> Promise<String>`
+
+Do the things. Returns a promise that resolves to the new version if
+all is well, or rejects if any errors are encountered.
+
+### Options
+
+#### `path` String
+
+The path to the package being versionified. Defaults to process.cwd().
+
+#### `allowSameVersion` Boolean
+
+Allow setting the version to the current version in package.json. Default
+`false`.
+
+#### `preid` String
+When the `newversion` is pre, premajor, preminor, or prepatch, this
+defines the prerelease string, like 'beta' etc.
+
+#### `tagVersionPrefix` String
+
+The prefix to add to the raw semver string for the tag name. Defaults to
+`'v'`. (So, by default it tags as 'v1.2.3' when versioning to 1.2.3.)
+
+#### `commitHooks` Boolean
+
+Run git commit hooks. Default true.
+
+#### `gitTagVersion` Boolean
+
+Tag the version, default true.
+
+#### `signGitCommit` Boolean
+
+GPG sign the git commit. Default `false`.
+
+#### `signGitTag` Boolean
+
+GPG sign the git tag. Default `false`.
+
+#### `force` Boolean
+
+Push forward recklessly if any problems happen. Default `false`.
+
+#### `ignoreScripts` Boolean
+
+Do not run pre/post/version lifecycle scripts. Default `false`.
+
+#### `scriptShell` String
+
+Path to the shell, which should execute the lifecycle scripts. Defaults to `/bin/sh` on unix, or `cmd.exe` on windows.
+
+#### `message` String
+
+The message for the git commit and annotated git tag that are created.
diff --git a/deps/npm/node_modules/libnpmversion/lib/index.js b/deps/npm/node_modules/libnpmversion/lib/index.js
index b10b3e6ba41..683941cdea4 100644
--- a/deps/npm/node_modules/libnpmversion/lib/index.js
+++ b/deps/npm/node_modules/libnpmversion/lib/index.js
@@ -16,7 +16,7 @@ module.exports = async (newversion, opts = {}) => {
scriptShell = undefined,
preid = null,
log = proclog,
- message = 'v%s'
+ message = 'v%s',
} = opts
const pkg = opts.pkg || await readJson(path + '/package.json')
@@ -36,6 +36,6 @@ module.exports = async (newversion, opts = {}) => {
preid,
pkg,
log,
- message
+ message,
})
}
diff --git a/deps/npm/node_modules/libnpmversion/lib/proc-log.js b/deps/npm/node_modules/libnpmversion/lib/proc-log.js
index b2bdd9dc902..a7c683ba2fd 100644
--- a/deps/npm/node_modules/libnpmversion/lib/proc-log.js
+++ b/deps/npm/node_modules/libnpmversion/lib/proc-log.js
@@ -9,7 +9,7 @@ const LEVELS = [
'http',
'silly',
'pause',
- 'resume'
+ 'resume',
]
const log = level => (...args) => process.emit('log', level, ...args)
diff --git a/deps/npm/node_modules/libnpmversion/lib/retrieve-tag.js b/deps/npm/node_modules/libnpmversion/lib/retrieve-tag.js
index 6adb6df317a..c5fb64e3311 100644
--- a/deps/npm/node_modules/libnpmversion/lib/retrieve-tag.js
+++ b/deps/npm/node_modules/libnpmversion/lib/retrieve-tag.js
@@ -2,7 +2,9 @@ const { spawn } = require('@npmcli/git')
const semver = require('semver')
module.exports = async opts => {
- const tag = (await spawn(['describe', '--tags', '--abbrev=0', '--match=*.*.*'], opts)).stdout.trim()
+ const tag = (await spawn(
+ ['describe', '--tags', '--abbrev=0', '--match=*.*.*'],
+ opts)).stdout.trim()
const ver = semver.coerce(tag, { loose: true })
if (ver) {
return ver.version
diff --git a/deps/npm/node_modules/libnpmversion/lib/tag.js b/deps/npm/node_modules/libnpmversion/lib/tag.js
index 73134dd25e6..095456b2030 100644
--- a/deps/npm/node_modules/libnpmversion/lib/tag.js
+++ b/deps/npm/node_modules/libnpmversion/lib/tag.js
@@ -5,7 +5,7 @@ module.exports = async (version, opts) => {
signGitTag,
allowSameVersion,
tagVersionPrefix,
- message
+ message,
} = opts
const tag = `${tagVersionPrefix}${version}`
@@ -25,6 +25,6 @@ module.exports = async (version, opts) => {
'tag',
flags.join(''),
message.replace(/%s/g, version),
- tag
+ tag,
], opts)
}
diff --git a/deps/npm/node_modules/libnpmversion/lib/version.js b/deps/npm/node_modules/libnpmversion/lib/version.js
index 2ef79173fca..116a375553e 100644
--- a/deps/npm/node_modules/libnpmversion/lib/version.js
+++ b/deps/npm/node_modules/libnpmversion/lib/version.js
@@ -19,7 +19,7 @@ module.exports = async (newversion, opts) => {
ignoreScripts,
preid,
pkg,
- log
+ log,
} = opts
const { valid, clean, inc } = semver
@@ -38,7 +38,7 @@ module.exports = async (newversion, opts) => {
if (!newV) {
throw Object.assign(new Error('Invalid version: ' + newversion), {
current,
- requested: newversion
+ requested: newversion,
})
}
@@ -46,7 +46,7 @@ module.exports = async (newversion, opts) => {
throw Object.assign(new Error('Version not changed'), {
current,
requested: newversion,
- newVersion: newV
+ newVersion: newV,
})
}
@@ -67,8 +67,8 @@ module.exports = async (newversion, opts) => {
banner: log.level !== 'silent',
env: {
npm_old_version: current,
- npm_new_version: newV
- }
+ npm_new_version: newV,
+ },
})
}
@@ -101,8 +101,8 @@ module.exports = async (newversion, opts) => {
banner: log.level !== 'silent',
env: {
npm_old_version: current,
- npm_new_version: newV
- }
+ npm_new_version: newV,
+ },
})
}
@@ -115,7 +115,9 @@ module.exports = async (newversion, opts) => {
}
await commit(newV, opts)
await tag(newV, opts)
- } else { log.verbose('version', 'Not tagging: not in a git repo or no git cmd') }
+ } else {
+ log.verbose('version', 'Not tagging: not in a git repo or no git cmd')
+ }
if (!ignoreScripts) {
await runScript({
@@ -126,8 +128,8 @@ module.exports = async (newversion, opts) => {
banner: log.level !== 'silent',
env: {
npm_old_version: current,
- npm_new_version: newV
- }
+ npm_new_version: newV,
+ },
})
}
diff --git a/deps/npm/node_modules/libnpmversion/lib/write-json.js b/deps/npm/node_modules/libnpmversion/lib/write-json.js
index 813bb7ffc27..f066d72c67e 100644
--- a/deps/npm/node_modules/libnpmversion/lib/write-json.js
+++ b/deps/npm/node_modules/libnpmversion/lib/write-json.js
@@ -7,7 +7,7 @@ const kNewline = Symbol.for('newline')
module.exports = async (path, pkg) => {
const {
[kIndent]: indent = 2,
- [kNewline]: newline = '\n'
+ [kNewline]: newline = '\n',
} = pkg
delete pkg._id
const raw = JSON.stringify(pkg, null, indent) + '\n'
diff --git a/deps/npm/node_modules/libnpmversion/package.json b/deps/npm/node_modules/libnpmversion/package.json
index 523f25f1d55..6d7823f5d0a 100644
--- a/deps/npm/node_modules/libnpmversion/package.json
+++ b/deps/npm/node_modules/libnpmversion/package.json
@@ -1,40 +1,37 @@
{
"name": "libnpmversion",
- "version": "2.0.1",
+ "version": "2.0.2",
"main": "lib/index.js",
"files": [
- "lib/*.js"
+ "bin",
+ "lib"
],
"description": "library to do the things that 'npm version' does",
"repository": {
"type": "git",
"url": "git+https://github.com/npm/libnpmversion"
},
- "author": "Isaac Z. Schlueter <i@izs.me> (https://izs.me)",
+ "author": "GitHub Inc.",
"license": "ISC",
"scripts": {
- "lint": "standard",
- "lint:fix": "standard --fix",
+ "lint": "eslint '**/*.js'",
"test": "tap",
"posttest": "npm run lint",
"snap": "tap",
"preversion": "npm test",
"postversion": "npm publish",
- "prepublishOnly": "git push origin --follow-tags"
- },
- "standard": {
- "ignore": [
- "tap-snapshots"
- ]
+ "prepublishOnly": "git push origin --follow-tags",
+ "postlint": "npm-template-check",
+ "lintfix": "npm run lint -- --fix"
},
"tap": {
"coverage-map": "map.js",
"check-coverage": true
},
"devDependencies": {
+ "@npmcli/template-oss": "^2.4.2",
"require-inject": "^1.4.4",
- "standard": "^16.0.3",
- "tap": "^14.11.0"
+ "tap": "^15"
},
"dependencies": {
"@npmcli/git": "^2.0.7",
@@ -45,5 +42,8 @@
},
"engines": {
"node": "^12.13.0 || ^14.15.0 || >=16"
+ },
+ "templateOSS": {
+ "version": "2.4.3"
}
}
diff --git a/deps/npm/package.json b/deps/npm/package.json
index 636ef21e5fb..a4a5fcc6e8d 100644
--- a/deps/npm/package.json
+++ b/deps/npm/package.json
@@ -1,5 +1,5 @@
{
- "version": "8.3.0",
+ "version": "8.3.1",
"name": "npm",
"description": "a package manager for JavaScript",
"workspaces": [
@@ -55,9 +55,9 @@
},
"dependencies": {
"@isaacs/string-locale-compare": "^1.1.0",
- "@npmcli/arborist": "^4.1.1",
+ "@npmcli/arborist": "^4.2.0",
"@npmcli/ci-detect": "^1.4.0",
- "@npmcli/config": "^2.3.2",
+ "@npmcli/config": "^2.4.0",
"@npmcli/map-workspaces": "^2.0.0",
"@npmcli/package-json": "^1.0.1",
"@npmcli/run-script": "^2.0.0",
@@ -74,22 +74,22 @@
"fastest-levenshtein": "^1.0.12",
"glob": "^7.2.0",
"graceful-fs": "^4.2.8",
- "hosted-git-info": "^4.0.2",
+ "hosted-git-info": "^4.1.0",
"ini": "^2.0.0",
"init-package-json": "^2.0.5",
"is-cidr": "^4.0.2",
"json-parse-even-better-errors": "^2.3.1",
- "libnpmaccess": "^4.0.2",
- "libnpmdiff": "^2.0.4",
- "libnpmexec": "^3.0.1",
- "libnpmfund": "^2.0.1",
- "libnpmhook": "^6.0.2",
- "libnpmorg": "^2.0.2",
- "libnpmpack": "^3.0.0",
- "libnpmpublish": "^4.0.1",
- "libnpmsearch": "^3.1.1",
- "libnpmteam": "^2.0.3",
- "libnpmversion": "^2.0.1",
+ "libnpmaccess": "^5.0.0",
+ "libnpmdiff": "^3.0.0",
+ "libnpmexec": "^3.0.2",
+ "libnpmfund": "^2.0.2",
+ "libnpmhook": "^7.0.0",
+ "libnpmorg": "^3.0.0",
+ "libnpmpack": "^3.0.1",
+ "libnpmpublish": "^5.0.0",
+ "libnpmsearch": "^4.0.0",
+ "libnpmteam": "^3.0.0",
+ "libnpmversion": "^2.0.2",
"make-fetch-happen": "^9.1.0",
"minipass": "^3.1.6",
"minipass-pipeline": "^1.2.4",
@@ -201,16 +201,18 @@
],
"devDependencies": {
"@npmcli/eslint-config": "^2.0.0",
+ "@npmcli/template-oss": "^2.4.3",
"eslint": "^8.3.0",
"licensee": "^8.2.0",
"spawk": "^1.7.1",
- "tap": "^15.1.5"
+ "tap": "^15.1.6"
},
"scripts": {
"dumpconf": "env | grep npm | sort | uniq",
"preversion": "bash scripts/update-authors.sh && git add AUTHORS && git commit -m \"update AUTHORS\" || true",
"licenses": "licensee --production --errors-only",
"test": "tap",
+ "test-all": "npm run test --if-present --workspaces --include-workspace-root",
"check-coverage": "tap",
"snap": "tap",
"postsnap": "make -s mandocs",
@@ -235,6 +237,26 @@
"check-coverage": true,
"timeout": 600
},
+ "templateOSS": {
+ "applyRootRepoFiles": false,
+ "applyWorkspaceRepoFiles": true,
+ "applyRootModuleFiles": false,
+ "workspaces": [
+ "@npmcli/arborist",
+ "libnpmaccess",
+ "libnpmdiff",
+ "libnpmfund",
+ "libnpmexec",
+ "libnpmorg",
+ "libnpmhook",
+ "libnpmpack",
+ "libnpmpublish",
+ "libnpmsearch",
+ "libnpmteam",
+ "libnpmversion"
+ ],
+ "version": "2.4.3"
+ },
"license": "Artistic-2.0",
"engines": {
"node": "^12.13.0 || ^14.15.0 || >=16"
diff --git a/deps/npm/test/lib/commands/pack.js b/deps/npm/test/lib/commands/pack.js
index 21057e20795..51453dae9b0 100644
--- a/deps/npm/test/lib/commands/pack.js
+++ b/deps/npm/test/lib/commands/pack.js
@@ -136,6 +136,9 @@ t.test('workspaces', async t => {
},
config: {
workspaces: true,
+ // TODO: this is a workaround for npm run test-all
+ // somehow leaking include-workspace-root
+ 'include-workspace-root': false,
},
})
diff --git a/deps/npm/test/lib/commands/unpublish.js b/deps/npm/test/lib/commands/unpublish.js
index 1424adf5c98..b1b148a7c27 100644
--- a/deps/npm/test/lib/commands/unpublish.js
+++ b/deps/npm/test/lib/commands/unpublish.js
@@ -3,6 +3,23 @@ const { fake: mockNpm } = require('../../fixtures/mock-npm')
let result = ''
const noop = () => null
+const versions = async () => {
+ return {
+ versions: {
+ '1.0.0': {},
+ '1.0.1': {},
+ },
+ }
+}
+
+const singleVersion = async () => {
+ return {
+ versions: {
+ '1.0.0': {},
+ },
+ }
+}
+
const config = {
force: false,
loglevel: 'silly',
@@ -26,7 +43,7 @@ const npm = mockNpm({
const mocks = {
libnpmaccess: { lsPackages: noop },
libnpmpublish: { unpublish: noop },
- 'npm-registry-fetch': { json: noop },
+ 'npm-registry-fetch': { json: versions },
'../../../lib/utils/otplease.js': async (opts, fn) => fn(opts),
'../../../lib/utils/get-identity.js': async () => 'foo',
'proc-log': { silly () {}, verbose () {} },
@@ -530,3 +547,32 @@ t.test('completion', async t => {
})
})
})
+
+t.test('show error on unpublish <pkg>@version with package.json and the last version', async t => {
+ const Unpublish = t.mock('../../../lib/commands/unpublish.js', {
+ ...mocks,
+ 'npm-registry-fetch': { json: singleVersion },
+ path: { resolve: () => testDir, join: () => testDir + '/package.json' },
+ })
+ const unpublish = new Unpublish(npm)
+ await t.rejects(
+ unpublish.exec(['pkg@1.0.0']),
+ 'Refusing to delete the last version of the package. ' +
+ 'It will block from republishing a new version for 24 hours.\n' +
+ 'Run with --force to do this.'
+ )
+})
+
+t.test('show error on unpublish <pkg>@version when the last version', async t => {
+ const Unpublish = t.mock('../../../lib/commands/unpublish.js', {
+ ...mocks,
+ 'npm-registry-fetch': { json: singleVersion },
+ })
+ const unpublish = new Unpublish(npm)
+ await t.rejects(
+ unpublish.exec(['pkg@1.0.0']),
+ 'Refusing to delete the last version of the package. ' +
+ 'It will block from republishing a new version for 24 hours.\n' +
+ 'Run with --force to do this.'
+ )
+})