From 25ed3a719ccd8252a7fad1cfb0a5f0f9d6229972 Mon Sep 17 00:00:00 2001
From: npm CLI robot
Date: Sat, 7 Sep 2024 23:09:40 -0700
Subject: [PATCH 1/9] deps: upgrade npm to 10.8.3
PR-URL: https://github.com/nodejs/node/pull/54619
Reviewed-By: Luigi Pinca
---
deps/npm/docs/content/commands/npm-ls.md | 2 +-
deps/npm/docs/content/commands/npm.md | 2 +-
.../npm/docs/content/configuring-npm/npmrc.md | 7 +-
.../content/configuring-npm/package-json.md | 4 +-
deps/npm/docs/output/commands/npm-access.html | 4 +-
.../npm/docs/output/commands/npm-adduser.html | 4 +-
deps/npm/docs/output/commands/npm-audit.html | 4 +-
deps/npm/docs/output/commands/npm-bugs.html | 4 +-
deps/npm/docs/output/commands/npm-cache.html | 4 +-
deps/npm/docs/output/commands/npm-ci.html | 4 +-
.../docs/output/commands/npm-completion.html | 4 +-
deps/npm/docs/output/commands/npm-config.html | 4 +-
deps/npm/docs/output/commands/npm-dedupe.html | 4 +-
.../docs/output/commands/npm-deprecate.html | 4 +-
deps/npm/docs/output/commands/npm-diff.html | 4 +-
.../docs/output/commands/npm-dist-tag.html | 4 +-
deps/npm/docs/output/commands/npm-docs.html | 4 +-
deps/npm/docs/output/commands/npm-doctor.html | 4 +-
deps/npm/docs/output/commands/npm-edit.html | 4 +-
deps/npm/docs/output/commands/npm-exec.html | 4 +-
.../npm/docs/output/commands/npm-explain.html | 4 +-
.../npm/docs/output/commands/npm-explore.html | 4 +-
.../docs/output/commands/npm-find-dupes.html | 4 +-
deps/npm/docs/output/commands/npm-fund.html | 4 +-
.../docs/output/commands/npm-help-search.html | 4 +-
deps/npm/docs/output/commands/npm-help.html | 4 +-
deps/npm/docs/output/commands/npm-hook.html | 4 +-
deps/npm/docs/output/commands/npm-init.html | 4 +-
.../output/commands/npm-install-ci-test.html | 4 +-
.../output/commands/npm-install-test.html | 4 +-
.../npm/docs/output/commands/npm-install.html | 4 +-
deps/npm/docs/output/commands/npm-link.html | 4 +-
deps/npm/docs/output/commands/npm-login.html | 4 +-
deps/npm/docs/output/commands/npm-logout.html | 4 +-
deps/npm/docs/output/commands/npm-ls.html | 6 +-
deps/npm/docs/output/commands/npm-org.html | 4 +-
.../docs/output/commands/npm-outdated.html | 4 +-
deps/npm/docs/output/commands/npm-owner.html | 4 +-
deps/npm/docs/output/commands/npm-pack.html | 4 +-
deps/npm/docs/output/commands/npm-ping.html | 4 +-
deps/npm/docs/output/commands/npm-pkg.html | 4 +-
deps/npm/docs/output/commands/npm-prefix.html | 4 +-
.../npm/docs/output/commands/npm-profile.html | 4 +-
deps/npm/docs/output/commands/npm-prune.html | 4 +-
.../npm/docs/output/commands/npm-publish.html | 4 +-
deps/npm/docs/output/commands/npm-query.html | 4 +-
.../npm/docs/output/commands/npm-rebuild.html | 4 +-
deps/npm/docs/output/commands/npm-repo.html | 4 +-
.../npm/docs/output/commands/npm-restart.html | 4 +-
deps/npm/docs/output/commands/npm-root.html | 4 +-
.../docs/output/commands/npm-run-script.html | 4 +-
deps/npm/docs/output/commands/npm-sbom.html | 4 +-
deps/npm/docs/output/commands/npm-search.html | 4 +-
.../docs/output/commands/npm-shrinkwrap.html | 4 +-
deps/npm/docs/output/commands/npm-star.html | 4 +-
deps/npm/docs/output/commands/npm-stars.html | 4 +-
deps/npm/docs/output/commands/npm-start.html | 4 +-
deps/npm/docs/output/commands/npm-stop.html | 4 +-
deps/npm/docs/output/commands/npm-team.html | 4 +-
deps/npm/docs/output/commands/npm-test.html | 4 +-
deps/npm/docs/output/commands/npm-token.html | 4 +-
.../docs/output/commands/npm-uninstall.html | 4 +-
.../docs/output/commands/npm-unpublish.html | 4 +-
deps/npm/docs/output/commands/npm-unstar.html | 4 +-
deps/npm/docs/output/commands/npm-update.html | 4 +-
.../npm/docs/output/commands/npm-version.html | 4 +-
deps/npm/docs/output/commands/npm-view.html | 4 +-
deps/npm/docs/output/commands/npm-whoami.html | 4 +-
deps/npm/docs/output/commands/npm.html | 6 +-
deps/npm/docs/output/commands/npx.html | 4 +-
.../docs/output/configuring-npm/folders.html | 4 +-
.../docs/output/configuring-npm/install.html | 4 +-
.../output/configuring-npm/npm-global.html | 4 +-
.../docs/output/configuring-npm/npm-json.html | 8 +-
.../configuring-npm/npm-shrinkwrap-json.html | 4 +-
.../docs/output/configuring-npm/npmrc.html | 11 +-
.../output/configuring-npm/package-json.html | 8 +-
.../configuring-npm/package-lock-json.html | 4 +-
deps/npm/docs/output/using-npm/config.html | 4 +-
.../using-npm/dependency-selectors.html | 4 +-
.../npm/docs/output/using-npm/developers.html | 4 +-
deps/npm/docs/output/using-npm/logging.html | 4 +-
deps/npm/docs/output/using-npm/orgs.html | 4 +-
.../docs/output/using-npm/package-spec.html | 4 +-
deps/npm/docs/output/using-npm/registry.html | 4 +-
deps/npm/docs/output/using-npm/removal.html | 4 +-
deps/npm/docs/output/using-npm/scope.html | 4 +-
deps/npm/docs/output/using-npm/scripts.html | 4 +-
.../npm/docs/output/using-npm/workspaces.html | 4 +-
deps/npm/lib/cli/exit-handler.js | 5 +-
deps/npm/lib/commands/init.js | 5 +-
deps/npm/lib/commands/publish.js | 7 +-
deps/npm/lib/commands/run-script.js | 4 +-
deps/npm/man/man1/npm-access.1 | 2 +-
deps/npm/man/man1/npm-adduser.1 | 2 +-
deps/npm/man/man1/npm-audit.1 | 2 +-
deps/npm/man/man1/npm-bugs.1 | 2 +-
deps/npm/man/man1/npm-cache.1 | 2 +-
deps/npm/man/man1/npm-ci.1 | 2 +-
deps/npm/man/man1/npm-completion.1 | 2 +-
deps/npm/man/man1/npm-config.1 | 2 +-
deps/npm/man/man1/npm-dedupe.1 | 2 +-
deps/npm/man/man1/npm-deprecate.1 | 2 +-
deps/npm/man/man1/npm-diff.1 | 2 +-
deps/npm/man/man1/npm-dist-tag.1 | 2 +-
deps/npm/man/man1/npm-docs.1 | 2 +-
deps/npm/man/man1/npm-doctor.1 | 2 +-
deps/npm/man/man1/npm-edit.1 | 2 +-
deps/npm/man/man1/npm-exec.1 | 2 +-
deps/npm/man/man1/npm-explain.1 | 2 +-
deps/npm/man/man1/npm-explore.1 | 2 +-
deps/npm/man/man1/npm-find-dupes.1 | 2 +-
deps/npm/man/man1/npm-fund.1 | 2 +-
deps/npm/man/man1/npm-help-search.1 | 2 +-
deps/npm/man/man1/npm-help.1 | 2 +-
deps/npm/man/man1/npm-hook.1 | 2 +-
deps/npm/man/man1/npm-init.1 | 2 +-
deps/npm/man/man1/npm-install-ci-test.1 | 2 +-
deps/npm/man/man1/npm-install-test.1 | 2 +-
deps/npm/man/man1/npm-install.1 | 2 +-
deps/npm/man/man1/npm-link.1 | 2 +-
deps/npm/man/man1/npm-login.1 | 2 +-
deps/npm/man/man1/npm-logout.1 | 2 +-
deps/npm/man/man1/npm-ls.1 | 4 +-
deps/npm/man/man1/npm-org.1 | 2 +-
deps/npm/man/man1/npm-outdated.1 | 2 +-
deps/npm/man/man1/npm-owner.1 | 2 +-
deps/npm/man/man1/npm-pack.1 | 2 +-
deps/npm/man/man1/npm-ping.1 | 2 +-
deps/npm/man/man1/npm-pkg.1 | 2 +-
deps/npm/man/man1/npm-prefix.1 | 2 +-
deps/npm/man/man1/npm-profile.1 | 2 +-
deps/npm/man/man1/npm-prune.1 | 2 +-
deps/npm/man/man1/npm-publish.1 | 2 +-
deps/npm/man/man1/npm-query.1 | 2 +-
deps/npm/man/man1/npm-rebuild.1 | 2 +-
deps/npm/man/man1/npm-repo.1 | 2 +-
deps/npm/man/man1/npm-restart.1 | 2 +-
deps/npm/man/man1/npm-root.1 | 2 +-
deps/npm/man/man1/npm-run-script.1 | 2 +-
deps/npm/man/man1/npm-sbom.1 | 2 +-
deps/npm/man/man1/npm-search.1 | 2 +-
deps/npm/man/man1/npm-shrinkwrap.1 | 2 +-
deps/npm/man/man1/npm-star.1 | 2 +-
deps/npm/man/man1/npm-stars.1 | 2 +-
deps/npm/man/man1/npm-start.1 | 2 +-
deps/npm/man/man1/npm-stop.1 | 2 +-
deps/npm/man/man1/npm-team.1 | 2 +-
deps/npm/man/man1/npm-test.1 | 2 +-
deps/npm/man/man1/npm-token.1 | 2 +-
deps/npm/man/man1/npm-uninstall.1 | 2 +-
deps/npm/man/man1/npm-unpublish.1 | 2 +-
deps/npm/man/man1/npm-unstar.1 | 2 +-
deps/npm/man/man1/npm-update.1 | 2 +-
deps/npm/man/man1/npm-version.1 | 2 +-
deps/npm/man/man1/npm-view.1 | 2 +-
deps/npm/man/man1/npm-whoami.1 | 2 +-
deps/npm/man/man1/npm.1 | 4 +-
deps/npm/man/man1/npx.1 | 2 +-
deps/npm/man/man5/folders.5 | 2 +-
deps/npm/man/man5/install.5 | 2 +-
deps/npm/man/man5/npm-global.5 | 2 +-
deps/npm/man/man5/npm-json.5 | 7 +-
deps/npm/man/man5/npm-shrinkwrap-json.5 | 2 +-
deps/npm/man/man5/npmrc.5 | 9 +-
deps/npm/man/man5/package-json.5 | 7 +-
deps/npm/man/man5/package-lock-json.5 | 2 +-
deps/npm/man/man7/config.7 | 2 +-
deps/npm/man/man7/dependency-selectors.7 | 2 +-
deps/npm/man/man7/developers.7 | 2 +-
deps/npm/man/man7/logging.7 | 2 +-
deps/npm/man/man7/orgs.7 | 2 +-
deps/npm/man/man7/package-spec.7 | 2 +-
deps/npm/man/man7/registry.7 | 2 +-
deps/npm/man/man7/removal.7 | 2 +-
deps/npm/man/man7/scope.7 | 2 +-
deps/npm/man/man7/scripts.7 | 2 +-
deps/npm/man/man7/workspaces.7 | 2 +-
.../@npmcli/arborist/package.json | 11 +-
.../node_modules/@npmcli/config/package.json | 11 +-
.../node_modules/cacache/lib/entry-index.js | 1 -
deps/npm/node_modules/cacache/package.json | 2 +-
deps/npm/node_modules/debug/package.json | 2 +-
deps/npm/node_modules/debug/src/browser.js | 4 +-
.../foreground-child/dist/commonjs/index.js | 6 +-
.../foreground-child/dist/esm/index.js | 6 +-
.../foreground-child/package.json | 2 +-
.../node_modules/glob/dist/commonjs/glob.d.ts | 1 -
.../glob/dist/commonjs/glob.d.ts.map | 2 +-
.../glob/dist/commonjs/ignore.d.ts | 1 -
.../glob/dist/commonjs/ignore.d.ts.map | 2 +-
.../glob/dist/commonjs/index.d.ts | 4 +-
.../glob/dist/commonjs/index.js.map | 2 +-
.../glob/dist/commonjs/pattern.d.ts | 1 -
.../glob/dist/commonjs/pattern.d.ts.map | 2 +-
.../glob/dist/commonjs/walker.d.ts | 1 -
.../glob/dist/commonjs/walker.d.ts.map | 2 +-
deps/npm/node_modules/glob/dist/esm/glob.d.ts | 1 -
.../node_modules/glob/dist/esm/glob.d.ts.map | 2 +-
.../node_modules/glob/dist/esm/ignore.d.ts | 1 -
.../glob/dist/esm/ignore.d.ts.map | 2 +-
.../npm/node_modules/glob/dist/esm/index.d.ts | 4 +-
.../node_modules/glob/dist/esm/pattern.d.ts | 1 -
.../glob/dist/esm/pattern.d.ts.map | 2 +-
.../node_modules/glob/dist/esm/walker.d.ts | 1 -
.../glob/dist/esm/walker.d.ts.map | 2 +-
deps/npm/node_modules/glob/package.json | 2 +-
.../jackspeak/dist/commonjs/index.js | 4 +-
.../node_modules/jackspeak/dist/esm/index.js | 4 +-
deps/npm/node_modules/jackspeak/package.json | 8 +-
.../node_modules/libnpmaccess/package.json | 11 +-
deps/npm/node_modules/libnpmdiff/package.json | 11 +-
deps/npm/node_modules/libnpmexec/lib/index.js | 19 +-
deps/npm/node_modules/libnpmexec/package.json | 13 +-
deps/npm/node_modules/libnpmfund/package.json | 11 +-
deps/npm/node_modules/libnpmhook/package.json | 11 +-
deps/npm/node_modules/libnpmorg/package.json | 11 +-
deps/npm/node_modules/libnpmpack/package.json | 11 +-
.../node_modules/libnpmpublish/package.json | 11 +-
.../node_modules/libnpmsearch/package.json | 11 +-
deps/npm/node_modules/libnpmteam/package.json | 11 +-
.../node_modules/libnpmversion/package.json | 11 +-
.../lru-cache/dist/commonjs/index.js | 168 ++-
.../lru-cache/dist/commonjs/index.min.js | 2 +-
.../node_modules/lru-cache/dist/esm/index.js | 168 ++-
.../lru-cache/dist/esm/index.min.js | 2 +-
deps/npm/node_modules/lru-cache/package.json | 17 +-
.../node-gyp/.release-please-manifest.json | 2 +-
deps/npm/node_modules/node-gyp/CHANGELOG.md | 29 +
deps/npm/node_modules/node-gyp/README.md | 18 +-
.../gyp/.release-please-manifest.json | 3 +
.../node-gyp/gyp/data/ninja/build.ninja | 4 +
.../node-gyp/gyp/docs/GypVsCMake.md | 116 ++
.../node_modules/node-gyp/gyp/docs/Hacking.md | 46 +
.../node-gyp/gyp/docs/InputFormatReference.md | 1080 +++++++++++++++++
.../gyp/docs/LanguageSpecification.md | 430 +++++++
.../node_modules/node-gyp/gyp/docs/README.md | 27 +
.../node_modules/node-gyp/gyp/docs/Testing.md | 450 +++++++
.../node-gyp/gyp/docs/UserDocumentation.md | 965 +++++++++++++++
.../node-gyp/gyp/pylib/gyp/MSVSSettings.py | 2 +
.../node-gyp/gyp/pylib/gyp/common.py | 63 +-
.../node-gyp/gyp/pylib/gyp/common_test.py | 103 +-
.../gyp/pylib/gyp/generator/android.py | 4 +-
.../gyp/generator/compile_commands_json.py | 10 +-
.../node-gyp/gyp/pylib/gyp/generator/gypsh.py | 2 +-
.../node-gyp/gyp/pylib/gyp/generator/make.py | 80 +-
.../node-gyp/gyp/pylib/gyp/generator/msvs.py | 9 +-
.../node-gyp/gyp/pylib/gyp/generator/ninja.py | 31 +
.../gyp/pylib/gyp/generator/ninja_test.py | 12 +
.../node-gyp/gyp/pylib/gyp/input.py | 10 +-
.../node-gyp/gyp/pylib/gyp/msvs_emulation.py | 5 +-
.../node-gyp/gyp/pylib/gyp/xcode_emulation.py | 29 +-
.../gyp/pylib/gyp/xcode_emulation_test.py | 53 +
.../node_modules/node-gyp/gyp/pyproject.toml | 19 +-
.../node-gyp/gyp/release-please-config.json | 11 +
deps/npm/node_modules/node-gyp/lib/build.js | 33 +-
.../node_modules/node-gyp/lib/configure.js | 24 +-
.../node-gyp/lib/find-visualstudio.js | 52 +-
deps/npm/node_modules/node-gyp/lib/log.js | 11 +-
.../node-gyp/node_modules/proc-log/LICENSE | 15 -
.../node_modules/proc-log/lib/index.js | 23 -
.../node_modules/proc-log/package.json | 44 -
deps/npm/node_modules/node-gyp/package.json | 6 +-
.../node_modules/npm-package-arg/lib/npa.js | 4 +
.../node_modules/npm-package-arg/package.json | 15 +-
.../postcss-selector-parser/API.md | 2 +-
.../postcss-selector-parser/dist/parser.js | 2 +-
.../postcss-selector-parser/package.json | 2 +-
deps/npm/node_modules/semver/README.md | 2 +-
deps/npm/node_modules/semver/classes/range.js | 34 +-
deps/npm/node_modules/semver/package.json | 2 +-
deps/npm/package.json | 25 +-
.../test/lib/commands/publish.js.test.cjs | 4 +
.../tap-snapshots/test/lib/docs.js.test.cjs | 4 +-
deps/npm/test/lib/cli/exit-handler.js | 7 +-
deps/npm/test/lib/commands/init.js | 30 +
deps/npm/test/lib/commands/publish.js | 42 +
deps/npm/test/lib/utils/timers.js | 2 +-
278 files changed, 4488 insertions(+), 692 deletions(-)
create mode 100644 deps/npm/node_modules/node-gyp/gyp/.release-please-manifest.json
create mode 100644 deps/npm/node_modules/node-gyp/gyp/data/ninja/build.ninja
create mode 100644 deps/npm/node_modules/node-gyp/gyp/docs/GypVsCMake.md
create mode 100644 deps/npm/node_modules/node-gyp/gyp/docs/Hacking.md
create mode 100644 deps/npm/node_modules/node-gyp/gyp/docs/InputFormatReference.md
create mode 100644 deps/npm/node_modules/node-gyp/gyp/docs/LanguageSpecification.md
create mode 100644 deps/npm/node_modules/node-gyp/gyp/docs/README.md
create mode 100644 deps/npm/node_modules/node-gyp/gyp/docs/Testing.md
create mode 100644 deps/npm/node_modules/node-gyp/gyp/docs/UserDocumentation.md
create mode 100644 deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation_test.py
create mode 100644 deps/npm/node_modules/node-gyp/gyp/release-please-config.json
delete mode 100644 deps/npm/node_modules/node-gyp/node_modules/proc-log/LICENSE
delete mode 100644 deps/npm/node_modules/node-gyp/node_modules/proc-log/lib/index.js
delete mode 100644 deps/npm/node_modules/node-gyp/node_modules/proc-log/package.json
diff --git a/deps/npm/docs/content/commands/npm-ls.md b/deps/npm/docs/content/commands/npm-ls.md
index 9b3beb53b07..59e5b281ef1 100644
--- a/deps/npm/docs/content/commands/npm-ls.md
+++ b/deps/npm/docs/content/commands/npm-ls.md
@@ -27,7 +27,7 @@ packages will *also* show the paths to the specified packages. For
example, running `npm ls promzard` in npm's source tree will show:
```bash
-npm@10.8.2 /path/to/npm
+npm@10.8.3 /path/to/npm
└─┬ init-package-json@0.0.4
└── promzard@0.1.5
```
diff --git a/deps/npm/docs/content/commands/npm.md b/deps/npm/docs/content/commands/npm.md
index 4234718dfbb..52ad44d60a6 100644
--- a/deps/npm/docs/content/commands/npm.md
+++ b/deps/npm/docs/content/commands/npm.md
@@ -14,7 +14,7 @@ Note: This command is unaware of workspaces.
### Version
-10.8.2
+10.8.3
### Description
diff --git a/deps/npm/docs/content/configuring-npm/npmrc.md b/deps/npm/docs/content/configuring-npm/npmrc.md
index 0aa99fc2710..fb335b2d43d 100644
--- a/deps/npm/docs/content/configuring-npm/npmrc.md
+++ b/deps/npm/docs/content/configuring-npm/npmrc.md
@@ -29,7 +29,7 @@ Environment variables can be replaced using `${VARIABLE_NAME}`. For
example:
```bash
-prefix = ${HOME}/.npm-packages
+cache = ${HOME}/.npm-packages
```
Each of these files is loaded, and config options are resolved in priority
@@ -120,10 +120,13 @@ _authToken=MYTOKEN
@myorg:registry=https://somewhere-else.com/myorg
@another:registry=https://somewhere-else.com/another
//registry.npmjs.org/:_authToken=MYTOKEN
+
; would apply to both @myorg and @another
-; //somewhere-else.com/:_authToken=MYTOKEN
+//somewhere-else.com/:_authToken=MYTOKEN
+
; would apply only to @myorg
//somewhere-else.com/myorg/:_authToken=MYTOKEN1
+
; would apply only to @another
//somewhere-else.com/another/:_authToken=MYTOKEN2
```
diff --git a/deps/npm/docs/content/configuring-npm/package-json.md b/deps/npm/docs/content/configuring-npm/package-json.md
index 755071c6f10..a843b974b0e 100644
--- a/deps/npm/docs/content/configuring-npm/package-json.md
+++ b/deps/npm/docs/content/configuring-npm/package-json.md
@@ -617,6 +617,7 @@ See [semver](https://github.com/npm/node-semver#versions) for more details about
* `tag` A specific version tagged and published as `tag` See [`npm
dist-tag`](/commands/npm-dist-tag)
* `path/path/path` See [Local Paths](#local-paths) below
+* `npm:@scope/pkg@version` Custom alias for a pacakge See [`package-spec`](/using-npm/package-spec#aliases)
For example, these are all valid:
@@ -634,7 +635,8 @@ For example, these are all valid:
"two": "2.x",
"thr": "3.3.x",
"lat": "latest",
- "dyl": "file:../dyl"
+ "dyl": "file:../dyl",
+ "kpg": "npm:pkg@1.0.0"
}
}
```
diff --git a/deps/npm/docs/output/commands/npm-access.html b/deps/npm/docs/output/commands/npm-access.html
index 9b75d6f3d22..76bf07b8473 100644
--- a/deps/npm/docs/output/commands/npm-access.html
+++ b/deps/npm/docs/output/commands/npm-access.html
@@ -141,9 +141,9 @@
-
+
npm-access
- @10.8.2
+ @10.8.3
Set access level on published packages
diff --git a/deps/npm/docs/output/commands/npm-adduser.html b/deps/npm/docs/output/commands/npm-adduser.html
index 7714ee49fb8..8cf2e1abf4b 100644
--- a/deps/npm/docs/output/commands/npm-adduser.html
+++ b/deps/npm/docs/output/commands/npm-adduser.html
@@ -141,9 +141,9 @@
-
+
npm-adduser
- @10.8.2
+ @10.8.3
Add a registry user account
diff --git a/deps/npm/docs/output/commands/npm-audit.html b/deps/npm/docs/output/commands/npm-audit.html
index 1d7a3d0008c..7d53101a2f3 100644
--- a/deps/npm/docs/output/commands/npm-audit.html
+++ b/deps/npm/docs/output/commands/npm-audit.html
@@ -141,9 +141,9 @@
-
+
npm-audit
- @10.8.2
+ @10.8.3
Run a security audit
diff --git a/deps/npm/docs/output/commands/npm-bugs.html b/deps/npm/docs/output/commands/npm-bugs.html
index f440ee7b67e..d9e5cf60b67 100644
--- a/deps/npm/docs/output/commands/npm-bugs.html
+++ b/deps/npm/docs/output/commands/npm-bugs.html
@@ -141,9 +141,9 @@
-
+
npm-bugs
- @10.8.2
+ @10.8.3
Report bugs for a package in a web browser
diff --git a/deps/npm/docs/output/commands/npm-cache.html b/deps/npm/docs/output/commands/npm-cache.html
index 18f6deff50f..21f2cc68bcc 100644
--- a/deps/npm/docs/output/commands/npm-cache.html
+++ b/deps/npm/docs/output/commands/npm-cache.html
@@ -141,9 +141,9 @@
-
+
npm-cache
- @10.8.2
+ @10.8.3
Manipulates packages cache
diff --git a/deps/npm/docs/output/commands/npm-ci.html b/deps/npm/docs/output/commands/npm-ci.html
index 45ed16fa523..9f645ecfb59 100644
--- a/deps/npm/docs/output/commands/npm-ci.html
+++ b/deps/npm/docs/output/commands/npm-ci.html
@@ -141,9 +141,9 @@
-
+
npm-ci
- @10.8.2
+ @10.8.3
Clean install a project
diff --git a/deps/npm/docs/output/commands/npm-completion.html b/deps/npm/docs/output/commands/npm-completion.html
index a9ce580c3bc..d73c648bfa3 100644
--- a/deps/npm/docs/output/commands/npm-completion.html
+++ b/deps/npm/docs/output/commands/npm-completion.html
@@ -141,9 +141,9 @@
-
+
npm-completion
- @10.8.2
+ @10.8.3
Tab Completion for npm
diff --git a/deps/npm/docs/output/commands/npm-config.html b/deps/npm/docs/output/commands/npm-config.html
index 5ac1867915b..4e5c7088638 100644
--- a/deps/npm/docs/output/commands/npm-config.html
+++ b/deps/npm/docs/output/commands/npm-config.html
@@ -141,9 +141,9 @@
-
+
npm-config
- @10.8.2
+ @10.8.3
Manage the npm configuration files
diff --git a/deps/npm/docs/output/commands/npm-dedupe.html b/deps/npm/docs/output/commands/npm-dedupe.html
index ccfae35d83b..f4c92e79f8d 100644
--- a/deps/npm/docs/output/commands/npm-dedupe.html
+++ b/deps/npm/docs/output/commands/npm-dedupe.html
@@ -141,9 +141,9 @@
-
+
npm-dedupe
- @10.8.2
+ @10.8.3
Reduce duplication in the package tree
diff --git a/deps/npm/docs/output/commands/npm-deprecate.html b/deps/npm/docs/output/commands/npm-deprecate.html
index 6a56ba9880e..c644650427a 100644
--- a/deps/npm/docs/output/commands/npm-deprecate.html
+++ b/deps/npm/docs/output/commands/npm-deprecate.html
@@ -141,9 +141,9 @@
-
+
npm-deprecate
- @10.8.2
+ @10.8.3
Deprecate a version of a package
diff --git a/deps/npm/docs/output/commands/npm-diff.html b/deps/npm/docs/output/commands/npm-diff.html
index 344b4bc1653..6e23a06faa4 100644
--- a/deps/npm/docs/output/commands/npm-diff.html
+++ b/deps/npm/docs/output/commands/npm-diff.html
@@ -141,9 +141,9 @@
-
+
npm-diff
- @10.8.2
+ @10.8.3
The registry diff command
diff --git a/deps/npm/docs/output/commands/npm-dist-tag.html b/deps/npm/docs/output/commands/npm-dist-tag.html
index 127960a8629..2e0ea2b927c 100644
--- a/deps/npm/docs/output/commands/npm-dist-tag.html
+++ b/deps/npm/docs/output/commands/npm-dist-tag.html
@@ -141,9 +141,9 @@
-
+
npm-dist-tag
- @10.8.2
+ @10.8.3
Modify package distribution tags
diff --git a/deps/npm/docs/output/commands/npm-docs.html b/deps/npm/docs/output/commands/npm-docs.html
index 540a5ea024f..e5108efb32b 100644
--- a/deps/npm/docs/output/commands/npm-docs.html
+++ b/deps/npm/docs/output/commands/npm-docs.html
@@ -141,9 +141,9 @@
-
+
npm-docs
- @10.8.2
+ @10.8.3
Open documentation for a package in a web browser
diff --git a/deps/npm/docs/output/commands/npm-doctor.html b/deps/npm/docs/output/commands/npm-doctor.html
index 7bd165d7dca..6ec69164f8d 100644
--- a/deps/npm/docs/output/commands/npm-doctor.html
+++ b/deps/npm/docs/output/commands/npm-doctor.html
@@ -141,9 +141,9 @@
-
+
npm-doctor
- @10.8.2
+ @10.8.3
Check the health of your npm environment
diff --git a/deps/npm/docs/output/commands/npm-edit.html b/deps/npm/docs/output/commands/npm-edit.html
index 34e5ca4d5f7..3b0e7247173 100644
--- a/deps/npm/docs/output/commands/npm-edit.html
+++ b/deps/npm/docs/output/commands/npm-edit.html
@@ -141,9 +141,9 @@
-
+
npm-edit
- @10.8.2
+ @10.8.3
Edit an installed package
diff --git a/deps/npm/docs/output/commands/npm-exec.html b/deps/npm/docs/output/commands/npm-exec.html
index 878dcd9f252..71087fefd84 100644
--- a/deps/npm/docs/output/commands/npm-exec.html
+++ b/deps/npm/docs/output/commands/npm-exec.html
@@ -141,9 +141,9 @@
-
+
npm-exec
- @10.8.2
+ @10.8.3
Run a command from a local or remote npm package
diff --git a/deps/npm/docs/output/commands/npm-explain.html b/deps/npm/docs/output/commands/npm-explain.html
index fc8f58c7f31..dcc6a94838a 100644
--- a/deps/npm/docs/output/commands/npm-explain.html
+++ b/deps/npm/docs/output/commands/npm-explain.html
@@ -141,9 +141,9 @@
-
+
npm-explain
- @10.8.2
+ @10.8.3
Explain installed packages
diff --git a/deps/npm/docs/output/commands/npm-explore.html b/deps/npm/docs/output/commands/npm-explore.html
index 6eb79de91cf..783de27e7dd 100644
--- a/deps/npm/docs/output/commands/npm-explore.html
+++ b/deps/npm/docs/output/commands/npm-explore.html
@@ -141,9 +141,9 @@
-
+
npm-explore
- @10.8.2
+ @10.8.3
Browse an installed package
diff --git a/deps/npm/docs/output/commands/npm-find-dupes.html b/deps/npm/docs/output/commands/npm-find-dupes.html
index 4f1da2a2797..fb1badb1476 100644
--- a/deps/npm/docs/output/commands/npm-find-dupes.html
+++ b/deps/npm/docs/output/commands/npm-find-dupes.html
@@ -141,9 +141,9 @@
-
+
npm-find-dupes
- @10.8.2
+ @10.8.3
Find duplication in the package tree
diff --git a/deps/npm/docs/output/commands/npm-fund.html b/deps/npm/docs/output/commands/npm-fund.html
index b43b29a18ab..9e597d085c0 100644
--- a/deps/npm/docs/output/commands/npm-fund.html
+++ b/deps/npm/docs/output/commands/npm-fund.html
@@ -141,9 +141,9 @@
-
+
npm-fund
- @10.8.2
+ @10.8.3
Retrieve funding information
diff --git a/deps/npm/docs/output/commands/npm-help-search.html b/deps/npm/docs/output/commands/npm-help-search.html
index 7f271058b16..0b521d6de2a 100644
--- a/deps/npm/docs/output/commands/npm-help-search.html
+++ b/deps/npm/docs/output/commands/npm-help-search.html
@@ -141,9 +141,9 @@
-
+
npm-help-search
- @10.8.2
+ @10.8.3
Search npm help documentation
diff --git a/deps/npm/docs/output/commands/npm-help.html b/deps/npm/docs/output/commands/npm-help.html
index e89ed156d39..dafcf20f7bc 100644
--- a/deps/npm/docs/output/commands/npm-help.html
+++ b/deps/npm/docs/output/commands/npm-help.html
@@ -141,9 +141,9 @@
-
+
npm-help
- @10.8.2
+ @10.8.3
Get help on npm
diff --git a/deps/npm/docs/output/commands/npm-hook.html b/deps/npm/docs/output/commands/npm-hook.html
index ae38dae7b89..953ce47aca7 100644
--- a/deps/npm/docs/output/commands/npm-hook.html
+++ b/deps/npm/docs/output/commands/npm-hook.html
@@ -141,9 +141,9 @@
-
+
npm-hook
- @10.8.2
+ @10.8.3
Manage registry hooks
diff --git a/deps/npm/docs/output/commands/npm-init.html b/deps/npm/docs/output/commands/npm-init.html
index 07374a452de..305e3483807 100644
--- a/deps/npm/docs/output/commands/npm-init.html
+++ b/deps/npm/docs/output/commands/npm-init.html
@@ -141,9 +141,9 @@
-
+
npm-init
- @10.8.2
+ @10.8.3
Create a package.json file
diff --git a/deps/npm/docs/output/commands/npm-install-ci-test.html b/deps/npm/docs/output/commands/npm-install-ci-test.html
index 49baa977185..a25a150d655 100644
--- a/deps/npm/docs/output/commands/npm-install-ci-test.html
+++ b/deps/npm/docs/output/commands/npm-install-ci-test.html
@@ -141,9 +141,9 @@
-
+
npm-install-ci-test
- @10.8.2
+ @10.8.3
Install a project with a clean slate and run tests
diff --git a/deps/npm/docs/output/commands/npm-install-test.html b/deps/npm/docs/output/commands/npm-install-test.html
index 4c69148e052..1a36de01dcf 100644
--- a/deps/npm/docs/output/commands/npm-install-test.html
+++ b/deps/npm/docs/output/commands/npm-install-test.html
@@ -141,9 +141,9 @@
-
+
npm-install-test
- @10.8.2
+ @10.8.3
Install package(s) and run tests
diff --git a/deps/npm/docs/output/commands/npm-install.html b/deps/npm/docs/output/commands/npm-install.html
index f0904523aad..858c325cd83 100644
--- a/deps/npm/docs/output/commands/npm-install.html
+++ b/deps/npm/docs/output/commands/npm-install.html
@@ -141,9 +141,9 @@
-
+
npm-install
- @10.8.2
+ @10.8.3
Install a package
diff --git a/deps/npm/docs/output/commands/npm-link.html b/deps/npm/docs/output/commands/npm-link.html
index abef5869d6b..c6738b85254 100644
--- a/deps/npm/docs/output/commands/npm-link.html
+++ b/deps/npm/docs/output/commands/npm-link.html
@@ -141,9 +141,9 @@
-
+
npm-link
- @10.8.2
+ @10.8.3
Symlink a package folder
diff --git a/deps/npm/docs/output/commands/npm-login.html b/deps/npm/docs/output/commands/npm-login.html
index 61ad78a5012..bc8e4684ea5 100644
--- a/deps/npm/docs/output/commands/npm-login.html
+++ b/deps/npm/docs/output/commands/npm-login.html
@@ -141,9 +141,9 @@
-
+
npm-login
- @10.8.2
+ @10.8.3
Login to a registry user account
diff --git a/deps/npm/docs/output/commands/npm-logout.html b/deps/npm/docs/output/commands/npm-logout.html
index 9a033aa79b0..5b48e25a824 100644
--- a/deps/npm/docs/output/commands/npm-logout.html
+++ b/deps/npm/docs/output/commands/npm-logout.html
@@ -141,9 +141,9 @@
-
+
npm-logout
- @10.8.2
+ @10.8.3
Log out of the registry
diff --git a/deps/npm/docs/output/commands/npm-ls.html b/deps/npm/docs/output/commands/npm-ls.html
index 7a3dd776853..c1c5cd0c9e7 100644
--- a/deps/npm/docs/output/commands/npm-ls.html
+++ b/deps/npm/docs/output/commands/npm-ls.html
@@ -141,9 +141,9 @@
-
+
npm-ls
- @10.8.2
+ @10.8.3
List installed packages
@@ -168,7 +168,7 @@ Description
the results to only the paths to the packages named. Note that nested
packages will also show the paths to the specified packages. For
example, running npm ls promzard in npm's source tree will show:
-npm@10.8.2 /path/to/npm
+npm@10.8.3 /path/to/npm
└─┬ init-package-json@0.0.4
└── promzard@0.1.5
diff --git a/deps/npm/docs/output/commands/npm-org.html b/deps/npm/docs/output/commands/npm-org.html
index d2de0860af3..9f97a53bf5c 100644
--- a/deps/npm/docs/output/commands/npm-org.html
+++ b/deps/npm/docs/output/commands/npm-org.html
@@ -141,9 +141,9 @@
-
+
npm-org
- @10.8.2
+ @10.8.3
Manage orgs
diff --git a/deps/npm/docs/output/commands/npm-outdated.html b/deps/npm/docs/output/commands/npm-outdated.html
index 1b64f41a67c..db933f402e9 100644
--- a/deps/npm/docs/output/commands/npm-outdated.html
+++ b/deps/npm/docs/output/commands/npm-outdated.html
@@ -141,9 +141,9 @@
-
+
npm-outdated
- @10.8.2
+ @10.8.3
Check for outdated packages
diff --git a/deps/npm/docs/output/commands/npm-owner.html b/deps/npm/docs/output/commands/npm-owner.html
index 8a1a6f0d9e5..7b3d111efad 100644
--- a/deps/npm/docs/output/commands/npm-owner.html
+++ b/deps/npm/docs/output/commands/npm-owner.html
@@ -141,9 +141,9 @@
-
+
npm-owner
- @10.8.2
+ @10.8.3
Manage package owners
diff --git a/deps/npm/docs/output/commands/npm-pack.html b/deps/npm/docs/output/commands/npm-pack.html
index 15ef606ed7f..a39574805ca 100644
--- a/deps/npm/docs/output/commands/npm-pack.html
+++ b/deps/npm/docs/output/commands/npm-pack.html
@@ -141,9 +141,9 @@
-
+
npm-pack
- @10.8.2
+ @10.8.3
Create a tarball from a package
diff --git a/deps/npm/docs/output/commands/npm-ping.html b/deps/npm/docs/output/commands/npm-ping.html
index 82e28649225..bb052270cf3 100644
--- a/deps/npm/docs/output/commands/npm-ping.html
+++ b/deps/npm/docs/output/commands/npm-ping.html
@@ -141,9 +141,9 @@
-
+
npm-ping
- @10.8.2
+ @10.8.3
Ping npm registry
diff --git a/deps/npm/docs/output/commands/npm-pkg.html b/deps/npm/docs/output/commands/npm-pkg.html
index 37afec5cffc..86c5ad73917 100644
--- a/deps/npm/docs/output/commands/npm-pkg.html
+++ b/deps/npm/docs/output/commands/npm-pkg.html
@@ -141,9 +141,9 @@
-
+
npm-pkg
- @10.8.2
+ @10.8.3
Manages your package.json
diff --git a/deps/npm/docs/output/commands/npm-prefix.html b/deps/npm/docs/output/commands/npm-prefix.html
index 1c084cc9df6..d16200830c3 100644
--- a/deps/npm/docs/output/commands/npm-prefix.html
+++ b/deps/npm/docs/output/commands/npm-prefix.html
@@ -141,9 +141,9 @@
-
+
npm-prefix
- @10.8.2
+ @10.8.3
Display prefix
diff --git a/deps/npm/docs/output/commands/npm-profile.html b/deps/npm/docs/output/commands/npm-profile.html
index 8b92e6951fb..ac0c7206cba 100644
--- a/deps/npm/docs/output/commands/npm-profile.html
+++ b/deps/npm/docs/output/commands/npm-profile.html
@@ -141,9 +141,9 @@
-
+
npm-profile
- @10.8.2
+ @10.8.3
Change settings on your registry profile
diff --git a/deps/npm/docs/output/commands/npm-prune.html b/deps/npm/docs/output/commands/npm-prune.html
index b711e011f02..ea1976ed852 100644
--- a/deps/npm/docs/output/commands/npm-prune.html
+++ b/deps/npm/docs/output/commands/npm-prune.html
@@ -141,9 +141,9 @@
-
+
npm-prune
- @10.8.2
+ @10.8.3
Remove extraneous packages
diff --git a/deps/npm/docs/output/commands/npm-publish.html b/deps/npm/docs/output/commands/npm-publish.html
index f2cd69ca329..89d5ac62ec1 100644
--- a/deps/npm/docs/output/commands/npm-publish.html
+++ b/deps/npm/docs/output/commands/npm-publish.html
@@ -141,9 +141,9 @@
-
+
npm-publish
- @10.8.2
+ @10.8.3
Publish a package
diff --git a/deps/npm/docs/output/commands/npm-query.html b/deps/npm/docs/output/commands/npm-query.html
index b85f7d7c2ae..90c75bccd61 100644
--- a/deps/npm/docs/output/commands/npm-query.html
+++ b/deps/npm/docs/output/commands/npm-query.html
@@ -141,9 +141,9 @@
-
+
npm-query
- @10.8.2
+ @10.8.3
Dependency selector query
diff --git a/deps/npm/docs/output/commands/npm-rebuild.html b/deps/npm/docs/output/commands/npm-rebuild.html
index cfec91a6df8..6dbb7f9c12e 100644
--- a/deps/npm/docs/output/commands/npm-rebuild.html
+++ b/deps/npm/docs/output/commands/npm-rebuild.html
@@ -141,9 +141,9 @@
-
+
npm-rebuild
- @10.8.2
+ @10.8.3
Rebuild a package
diff --git a/deps/npm/docs/output/commands/npm-repo.html b/deps/npm/docs/output/commands/npm-repo.html
index 3688a7d94bc..c31847aeca0 100644
--- a/deps/npm/docs/output/commands/npm-repo.html
+++ b/deps/npm/docs/output/commands/npm-repo.html
@@ -141,9 +141,9 @@
-
+
npm-repo
- @10.8.2
+ @10.8.3
Open package repository page in the browser
diff --git a/deps/npm/docs/output/commands/npm-restart.html b/deps/npm/docs/output/commands/npm-restart.html
index 0b35a0c2a69..6d0b29454a7 100644
--- a/deps/npm/docs/output/commands/npm-restart.html
+++ b/deps/npm/docs/output/commands/npm-restart.html
@@ -141,9 +141,9 @@
-
+
npm-restart
- @10.8.2
+ @10.8.3
Restart a package
diff --git a/deps/npm/docs/output/commands/npm-root.html b/deps/npm/docs/output/commands/npm-root.html
index fd53d1bbdaa..670cf25a731 100644
--- a/deps/npm/docs/output/commands/npm-root.html
+++ b/deps/npm/docs/output/commands/npm-root.html
@@ -141,9 +141,9 @@
-
+
npm-root
- @10.8.2
+ @10.8.3
Display npm root
diff --git a/deps/npm/docs/output/commands/npm-run-script.html b/deps/npm/docs/output/commands/npm-run-script.html
index f5fe27b3bb3..bcabcc0bfec 100644
--- a/deps/npm/docs/output/commands/npm-run-script.html
+++ b/deps/npm/docs/output/commands/npm-run-script.html
@@ -141,9 +141,9 @@
-
+
npm-run-script
- @10.8.2
+ @10.8.3
Run arbitrary package scripts
diff --git a/deps/npm/docs/output/commands/npm-sbom.html b/deps/npm/docs/output/commands/npm-sbom.html
index 3ec9f8f7a66..f95f0992fb5 100644
--- a/deps/npm/docs/output/commands/npm-sbom.html
+++ b/deps/npm/docs/output/commands/npm-sbom.html
@@ -141,9 +141,9 @@
-
+
npm-sbom
- @10.8.2
+ @10.8.3
Generate a Software Bill of Materials (SBOM)
diff --git a/deps/npm/docs/output/commands/npm-search.html b/deps/npm/docs/output/commands/npm-search.html
index b3b6f2ac16e..ba4b81381b0 100644
--- a/deps/npm/docs/output/commands/npm-search.html
+++ b/deps/npm/docs/output/commands/npm-search.html
@@ -141,9 +141,9 @@
-
+
npm-search
- @10.8.2
+ @10.8.3
Search for packages
diff --git a/deps/npm/docs/output/commands/npm-shrinkwrap.html b/deps/npm/docs/output/commands/npm-shrinkwrap.html
index f6f56a687de..c143822f846 100644
--- a/deps/npm/docs/output/commands/npm-shrinkwrap.html
+++ b/deps/npm/docs/output/commands/npm-shrinkwrap.html
@@ -141,9 +141,9 @@
-
+
npm-shrinkwrap
- @10.8.2
+ @10.8.3
Lock down dependency versions for publication
diff --git a/deps/npm/docs/output/commands/npm-star.html b/deps/npm/docs/output/commands/npm-star.html
index c9ed2155b3a..e634b8686c2 100644
--- a/deps/npm/docs/output/commands/npm-star.html
+++ b/deps/npm/docs/output/commands/npm-star.html
@@ -141,9 +141,9 @@
-
+
npm-star
- @10.8.2
+ @10.8.3
Mark your favorite packages
diff --git a/deps/npm/docs/output/commands/npm-stars.html b/deps/npm/docs/output/commands/npm-stars.html
index 36e78998f6a..0986e3a60f6 100644
--- a/deps/npm/docs/output/commands/npm-stars.html
+++ b/deps/npm/docs/output/commands/npm-stars.html
@@ -141,9 +141,9 @@
-
+
npm-stars
- @10.8.2
+ @10.8.3
View packages marked as favorites
diff --git a/deps/npm/docs/output/commands/npm-start.html b/deps/npm/docs/output/commands/npm-start.html
index e3df137b38b..0879146131e 100644
--- a/deps/npm/docs/output/commands/npm-start.html
+++ b/deps/npm/docs/output/commands/npm-start.html
@@ -141,9 +141,9 @@
-
+
npm-start
- @10.8.2
+ @10.8.3
Start a package
diff --git a/deps/npm/docs/output/commands/npm-stop.html b/deps/npm/docs/output/commands/npm-stop.html
index 9b2148c3b0f..ea3001a24bd 100644
--- a/deps/npm/docs/output/commands/npm-stop.html
+++ b/deps/npm/docs/output/commands/npm-stop.html
@@ -141,9 +141,9 @@
-
+
npm-stop
- @10.8.2
+ @10.8.3
Stop a package
diff --git a/deps/npm/docs/output/commands/npm-team.html b/deps/npm/docs/output/commands/npm-team.html
index f958beddd7c..2cad22ffbd4 100644
--- a/deps/npm/docs/output/commands/npm-team.html
+++ b/deps/npm/docs/output/commands/npm-team.html
@@ -141,9 +141,9 @@
-
+
npm-team
- @10.8.2
+ @10.8.3
Manage organization teams and team memberships
diff --git a/deps/npm/docs/output/commands/npm-test.html b/deps/npm/docs/output/commands/npm-test.html
index c271df80629..ab7431a1b0a 100644
--- a/deps/npm/docs/output/commands/npm-test.html
+++ b/deps/npm/docs/output/commands/npm-test.html
@@ -141,9 +141,9 @@
-
+
npm-test
- @10.8.2
+ @10.8.3
Test a package
diff --git a/deps/npm/docs/output/commands/npm-token.html b/deps/npm/docs/output/commands/npm-token.html
index e6bb91e2284..ca7df2869ec 100644
--- a/deps/npm/docs/output/commands/npm-token.html
+++ b/deps/npm/docs/output/commands/npm-token.html
@@ -141,9 +141,9 @@
-
+
npm-token
- @10.8.2
+ @10.8.3
Manage your authentication tokens
diff --git a/deps/npm/docs/output/commands/npm-uninstall.html b/deps/npm/docs/output/commands/npm-uninstall.html
index 5068012ab18..ea964c96e07 100644
--- a/deps/npm/docs/output/commands/npm-uninstall.html
+++ b/deps/npm/docs/output/commands/npm-uninstall.html
@@ -141,9 +141,9 @@
-
+
npm-uninstall
- @10.8.2
+ @10.8.3
Remove a package
diff --git a/deps/npm/docs/output/commands/npm-unpublish.html b/deps/npm/docs/output/commands/npm-unpublish.html
index 7f39239dde5..607049cf467 100644
--- a/deps/npm/docs/output/commands/npm-unpublish.html
+++ b/deps/npm/docs/output/commands/npm-unpublish.html
@@ -141,9 +141,9 @@
-
+
npm-unpublish
- @10.8.2
+ @10.8.3
Remove a package from the registry
diff --git a/deps/npm/docs/output/commands/npm-unstar.html b/deps/npm/docs/output/commands/npm-unstar.html
index ec6b78576fd..15a72f60134 100644
--- a/deps/npm/docs/output/commands/npm-unstar.html
+++ b/deps/npm/docs/output/commands/npm-unstar.html
@@ -141,9 +141,9 @@
-
+
npm-unstar
- @10.8.2
+ @10.8.3
Remove an item from your favorite packages
diff --git a/deps/npm/docs/output/commands/npm-update.html b/deps/npm/docs/output/commands/npm-update.html
index 4e6664dd884..e38eb06ba4c 100644
--- a/deps/npm/docs/output/commands/npm-update.html
+++ b/deps/npm/docs/output/commands/npm-update.html
@@ -141,9 +141,9 @@
-
+
npm-update
- @10.8.2
+ @10.8.3
Update packages
diff --git a/deps/npm/docs/output/commands/npm-version.html b/deps/npm/docs/output/commands/npm-version.html
index 7cc8ed10ee2..dfb31dd2c98 100644
--- a/deps/npm/docs/output/commands/npm-version.html
+++ b/deps/npm/docs/output/commands/npm-version.html
@@ -141,9 +141,9 @@
-
+
npm-version
- @10.8.2
+ @10.8.3
Bump a package version
diff --git a/deps/npm/docs/output/commands/npm-view.html b/deps/npm/docs/output/commands/npm-view.html
index 01231ca910d..8837e47e8f6 100644
--- a/deps/npm/docs/output/commands/npm-view.html
+++ b/deps/npm/docs/output/commands/npm-view.html
@@ -141,9 +141,9 @@
-
+
npm-view
- @10.8.2
+ @10.8.3
View registry info
diff --git a/deps/npm/docs/output/commands/npm-whoami.html b/deps/npm/docs/output/commands/npm-whoami.html
index 6369c4423ba..f6dbcc3f3ae 100644
--- a/deps/npm/docs/output/commands/npm-whoami.html
+++ b/deps/npm/docs/output/commands/npm-whoami.html
@@ -141,9 +141,9 @@
-
+
npm-whoami
- @10.8.2
+ @10.8.3
Display npm username
diff --git a/deps/npm/docs/output/commands/npm.html b/deps/npm/docs/output/commands/npm.html
index c0c14657848..e9f96129c15 100644
--- a/deps/npm/docs/output/commands/npm.html
+++ b/deps/npm/docs/output/commands/npm.html
@@ -141,9 +141,9 @@
-
+
npm
- @10.8.2
+ @10.8.3
javascript package manager
@@ -158,7 +158,7 @@ Table of contents
Note: This command is unaware of workspaces.
Version
-10.8.2
+10.8.3
Description
npm is the package manager for the Node JavaScript platform. It puts
modules in place so that node can find them, and manages dependency
diff --git a/deps/npm/docs/output/commands/npx.html b/deps/npm/docs/output/commands/npx.html
index d4a38d77f6d..418fc957a78 100644
--- a/deps/npm/docs/output/commands/npx.html
+++ b/deps/npm/docs/output/commands/npx.html
@@ -141,9 +141,9 @@
-
+
npx
- @10.8.2
+ @10.8.3
Run a command from a local or remote npm package
diff --git a/deps/npm/docs/output/configuring-npm/folders.html b/deps/npm/docs/output/configuring-npm/folders.html
index 3adaf3d6c35..9bcbc0e5a36 100644
--- a/deps/npm/docs/output/configuring-npm/folders.html
+++ b/deps/npm/docs/output/configuring-npm/folders.html
@@ -141,9 +141,9 @@
-
+
folders
- @10.8.2
+ @10.8.3
Folder Structures Used by npm
diff --git a/deps/npm/docs/output/configuring-npm/install.html b/deps/npm/docs/output/configuring-npm/install.html
index 0aebecd23bf..d0d46ffc693 100644
--- a/deps/npm/docs/output/configuring-npm/install.html
+++ b/deps/npm/docs/output/configuring-npm/install.html
@@ -141,9 +141,9 @@
-
+
install
- @10.8.2
+ @10.8.3
Download and install node and npm
diff --git a/deps/npm/docs/output/configuring-npm/npm-global.html b/deps/npm/docs/output/configuring-npm/npm-global.html
index 3adaf3d6c35..9bcbc0e5a36 100644
--- a/deps/npm/docs/output/configuring-npm/npm-global.html
+++ b/deps/npm/docs/output/configuring-npm/npm-global.html
@@ -141,9 +141,9 @@
-
+
folders
- @10.8.2
+ @10.8.3
Folder Structures Used by npm
diff --git a/deps/npm/docs/output/configuring-npm/npm-json.html b/deps/npm/docs/output/configuring-npm/npm-json.html
index e8a01b0e736..dfdc917fc21 100644
--- a/deps/npm/docs/output/configuring-npm/npm-json.html
+++ b/deps/npm/docs/output/configuring-npm/npm-json.html
@@ -141,9 +141,9 @@
-
+
package.json
- @10.8.2
+ @10.8.3
Specifics of npm's package.json handling
@@ -620,6 +620,7 @@ dependencies
user/repo See 'GitHub URLs' below
tag A specific version tagged and published as tag See npm dist-tag
path/path/path See Local Paths below
+npm:@scope/pkg@version Custom alias for a pacakge See package-spec
For example, these are all valid:
{
@@ -635,7 +636,8 @@ dependencies
"two": "2.x",
"thr": "3.3.x",
"lat": "latest",
- "dyl": "file:../dyl"
+ "dyl": "file:../dyl",
+ "kpg": "npm:pkg@1.0.0"
}
}
diff --git a/deps/npm/docs/output/configuring-npm/npm-shrinkwrap-json.html b/deps/npm/docs/output/configuring-npm/npm-shrinkwrap-json.html
index fe780afa9fe..567f47ad15d 100644
--- a/deps/npm/docs/output/configuring-npm/npm-shrinkwrap-json.html
+++ b/deps/npm/docs/output/configuring-npm/npm-shrinkwrap-json.html
@@ -141,9 +141,9 @@
-
+
npm-shrinkwrap.json
- @10.8.2
+ @10.8.3
A publishable lockfile
diff --git a/deps/npm/docs/output/configuring-npm/npmrc.html b/deps/npm/docs/output/configuring-npm/npmrc.html
index efe972a1e41..19950a61fb8 100644
--- a/deps/npm/docs/output/configuring-npm/npmrc.html
+++ b/deps/npm/docs/output/configuring-npm/npmrc.html
@@ -141,9 +141,9 @@
-
+
npmrc
- @10.8.2
+ @10.8.3
The npm config files
@@ -171,7 +171,7 @@ Files
All npm config files are an ini-formatted list of key = value parameters.
Environment variables can be replaced using ${VARIABLE_NAME}. For
example:
-prefix = ${HOME}/.npm-packages
+cache = ${HOME}/.npm-packages
Each of these files is loaded, and config options are resolved in priority
order. For example, a setting in the userconfig file would override the
@@ -238,10 +238,13 @@
@myorg:registry=https://somewhere-else.com/myorg
@another:registry=https://somewhere-else.com/another
//registry.npmjs.org/:_authToken=MYTOKEN
+
; would apply to both @myorg and @another
-; //somewhere-else.com/:_authToken=MYTOKEN
+//somewhere-else.com/:_authToken=MYTOKEN
+
; would apply only to @myorg
//somewhere-else.com/myorg/:_authToken=MYTOKEN1
+
; would apply only to @another
//somewhere-else.com/another/:_authToken=MYTOKEN2
diff --git a/deps/npm/docs/output/configuring-npm/package-json.html b/deps/npm/docs/output/configuring-npm/package-json.html
index e8a01b0e736..dfdc917fc21 100644
--- a/deps/npm/docs/output/configuring-npm/package-json.html
+++ b/deps/npm/docs/output/configuring-npm/package-json.html
@@ -141,9 +141,9 @@
-
+
package.json
- @10.8.2
+ @10.8.3
Specifics of npm's package.json handling
@@ -620,6 +620,7 @@ dependencies
user/repo See 'GitHub URLs' below
tag A specific version tagged and published as tag See npm dist-tag
path/path/path See Local Paths below
+npm:@scope/pkg@version Custom alias for a pacakge See package-spec
For example, these are all valid:
{
@@ -635,7 +636,8 @@ dependencies
"two": "2.x",
"thr": "3.3.x",
"lat": "latest",
- "dyl": "file:../dyl"
+ "dyl": "file:../dyl",
+ "kpg": "npm:pkg@1.0.0"
}
}
diff --git a/deps/npm/docs/output/configuring-npm/package-lock-json.html b/deps/npm/docs/output/configuring-npm/package-lock-json.html
index 89e2cfc1ff5..7ece2f78141 100644
--- a/deps/npm/docs/output/configuring-npm/package-lock-json.html
+++ b/deps/npm/docs/output/configuring-npm/package-lock-json.html
@@ -141,9 +141,9 @@
-
+
package-lock.json
- @10.8.2
+ @10.8.3
A manifestation of the manifest
diff --git a/deps/npm/docs/output/using-npm/config.html b/deps/npm/docs/output/using-npm/config.html
index 3958a19f0c1..0bc94abe755 100644
--- a/deps/npm/docs/output/using-npm/config.html
+++ b/deps/npm/docs/output/using-npm/config.html
@@ -141,9 +141,9 @@
-
+
config
- @10.8.2
+ @10.8.3
More than you probably want to know about npm configuration
diff --git a/deps/npm/docs/output/using-npm/dependency-selectors.html b/deps/npm/docs/output/using-npm/dependency-selectors.html
index 9761688c860..38c14547a1d 100644
--- a/deps/npm/docs/output/using-npm/dependency-selectors.html
+++ b/deps/npm/docs/output/using-npm/dependency-selectors.html
@@ -141,9 +141,9 @@
-
+
Dependency Selector Syntax & Querying
- @10.8.2
+ @10.8.3
Dependency Selector Syntax & Querying
diff --git a/deps/npm/docs/output/using-npm/developers.html b/deps/npm/docs/output/using-npm/developers.html
index 8d2ea196e1d..fbb68f149c8 100644
--- a/deps/npm/docs/output/using-npm/developers.html
+++ b/deps/npm/docs/output/using-npm/developers.html
@@ -141,9 +141,9 @@
-
+
developers
- @10.8.2
+ @10.8.3
Developer Guide
diff --git a/deps/npm/docs/output/using-npm/logging.html b/deps/npm/docs/output/using-npm/logging.html
index 3247023599a..9943e1a6e81 100644
--- a/deps/npm/docs/output/using-npm/logging.html
+++ b/deps/npm/docs/output/using-npm/logging.html
@@ -141,9 +141,9 @@
-
+
Logging
- @10.8.2
+ @10.8.3
Why, What & How We Log
diff --git a/deps/npm/docs/output/using-npm/orgs.html b/deps/npm/docs/output/using-npm/orgs.html
index 03692460f69..487f16e322e 100644
--- a/deps/npm/docs/output/using-npm/orgs.html
+++ b/deps/npm/docs/output/using-npm/orgs.html
@@ -141,9 +141,9 @@
-
+
orgs
- @10.8.2
+ @10.8.3
Working with Teams & Orgs
diff --git a/deps/npm/docs/output/using-npm/package-spec.html b/deps/npm/docs/output/using-npm/package-spec.html
index fa222b5dfd6..c485b897fb2 100644
--- a/deps/npm/docs/output/using-npm/package-spec.html
+++ b/deps/npm/docs/output/using-npm/package-spec.html
@@ -141,9 +141,9 @@
-
+
package-spec
- @10.8.2
+ @10.8.3
Package name specifier
diff --git a/deps/npm/docs/output/using-npm/registry.html b/deps/npm/docs/output/using-npm/registry.html
index 2f73e5567a7..285769976fb 100644
--- a/deps/npm/docs/output/using-npm/registry.html
+++ b/deps/npm/docs/output/using-npm/registry.html
@@ -141,9 +141,9 @@
-
+
registry
- @10.8.2
+ @10.8.3
The JavaScript Package Registry
diff --git a/deps/npm/docs/output/using-npm/removal.html b/deps/npm/docs/output/using-npm/removal.html
index 61fd3f49f51..207835c29ca 100644
--- a/deps/npm/docs/output/using-npm/removal.html
+++ b/deps/npm/docs/output/using-npm/removal.html
@@ -141,9 +141,9 @@
-
+
removal
- @10.8.2
+ @10.8.3
Cleaning the Slate
diff --git a/deps/npm/docs/output/using-npm/scope.html b/deps/npm/docs/output/using-npm/scope.html
index 66a9a7cdee9..a536b06726e 100644
--- a/deps/npm/docs/output/using-npm/scope.html
+++ b/deps/npm/docs/output/using-npm/scope.html
@@ -141,9 +141,9 @@
-
+
scope
- @10.8.2
+ @10.8.3
Scoped packages
diff --git a/deps/npm/docs/output/using-npm/scripts.html b/deps/npm/docs/output/using-npm/scripts.html
index b83c434e71e..a22d6c9d8ec 100644
--- a/deps/npm/docs/output/using-npm/scripts.html
+++ b/deps/npm/docs/output/using-npm/scripts.html
@@ -141,9 +141,9 @@
-
+
scripts
- @10.8.2
+ @10.8.3
How npm handles the "scripts" field
diff --git a/deps/npm/docs/output/using-npm/workspaces.html b/deps/npm/docs/output/using-npm/workspaces.html
index c7a7ddf5827..b3ebf5c300c 100644
--- a/deps/npm/docs/output/using-npm/workspaces.html
+++ b/deps/npm/docs/output/using-npm/workspaces.html
@@ -141,9 +141,9 @@
-
+
workspaces
- @10.8.2
+ @10.8.3
Working with workspaces
diff --git a/deps/npm/lib/cli/exit-handler.js b/deps/npm/lib/cli/exit-handler.js
index fff95165a18..e76b08c80a6 100644
--- a/deps/npm/lib/cli/exit-handler.js
+++ b/deps/npm/lib/cli/exit-handler.js
@@ -66,8 +66,9 @@ class ExitHandler {
}
#handleProcessExit (code) {
- // Force exit code to a number if it has not been set
- const exitCode = typeof code === 'number' ? code : (this.#exited ? 0 : 1)
+ const numCode = Number(code) || 0
+ // Always exit w/ a non-zero code if exit handler was not called
+ const exitCode = this.#exited ? numCode : (numCode || 1)
this.#process.exitCode = exitCode
if (this.#notLoadedOrExited) {
diff --git a/deps/npm/lib/commands/init.js b/deps/npm/lib/commands/init.js
index 4c682104835..b8ef3e59ccf 100644
--- a/deps/npm/lib/commands/init.js
+++ b/deps/npm/lib/commands/init.js
@@ -95,7 +95,7 @@ class Init extends BaseCommand {
await this.update(workspacesPaths)
}
- async execCreate (args, path = process.cwd()) {
+ async execCreate (args, runPath = process.cwd()) {
const [initerName, ...otherArgs] = args
let packageName = initerName
@@ -129,7 +129,6 @@ class Init extends BaseCommand {
globalBin,
chalk,
} = this.npm
- const runPath = path
const scriptShell = this.npm.config.get('script-shell') || undefined
const yes = this.npm.config.get('yes')
@@ -140,7 +139,7 @@ class Init extends BaseCommand {
globalBin,
output,
chalk,
- path,
+ path: this.npm.localPrefix,
runPath,
scriptShell,
yes,
diff --git a/deps/npm/lib/commands/publish.js b/deps/npm/lib/commands/publish.js
index 3fe337a7b1c..c2cd3cf9c92 100644
--- a/deps/npm/lib/commands/publish.js
+++ b/deps/npm/lib/commands/publish.js
@@ -46,7 +46,12 @@ class Publish extends BaseCommand {
await this.#publish(args)
}
- async execWorkspaces () {
+ async execWorkspaces (args) {
+ const useWorkspaces = args.length === 0 || args.includes('.')
+ if (!useWorkspaces) {
+ log.warn('Ignoring workspaces for specified package(s)')
+ return this.exec(args)
+ }
await this.setWorkspaces()
for (const [name, workspace] of this.workspaces.entries()) {
diff --git a/deps/npm/lib/commands/run-script.js b/deps/npm/lib/commands/run-script.js
index 180dfa1cdea..0a139d08af7 100644
--- a/deps/npm/lib/commands/run-script.js
+++ b/deps/npm/lib/commands/run-script.js
@@ -165,8 +165,10 @@ class RunScript extends BaseCommand {
return
}
- // TODO this is missing things like prepare, prepublishOnly, and dependencies
const cmdList = [
+ 'prepare', 'prepublishOnly',
+ 'prepack', 'postpack',
+ 'dependencies',
'preinstall', 'install', 'postinstall',
'prepublish', 'publish', 'postpublish',
'prerestart', 'restart', 'postrestart',
diff --git a/deps/npm/man/man1/npm-access.1 b/deps/npm/man/man1/npm-access.1
index b258d3e716f..d3e622c61d5 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-ACCESS" "1" "August 2024" "NPM@10.8.3" ""
.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 d3bb092dcaa..a670b65c627 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-ADDUSER" "1" "August 2024" "NPM@10.8.3" ""
.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 77c33143c9e..7b8e907cd65 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-AUDIT" "1" "August 2024" "NPM@10.8.3" ""
.SH "NAME"
\fBnpm-audit\fR - Run a security audit
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-bugs.1 b/deps/npm/man/man1/npm-bugs.1
index 0fa972bf9d8..d20ac537779 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-BUGS" "1" "August 2024" "NPM@10.8.3" ""
.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 5998b4b8c03..ae80a0ed6d8 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-CACHE" "1" "August 2024" "NPM@10.8.3" ""
.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 2dd518ed046..840ef475bd9 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-CI" "1" "August 2024" "NPM@10.8.3" ""
.SH "NAME"
\fBnpm-ci\fR - Clean install a project
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-completion.1 b/deps/npm/man/man1/npm-completion.1
index 5125cf846ae..ad7294e0ea4 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-COMPLETION" "1" "August 2024" "NPM@10.8.3" ""
.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 cbe4650e530..10828f3752a 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-CONFIG" "1" "August 2024" "NPM@10.8.3" ""
.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 2659aaea2cb..3c3621f37b3 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-DEDUPE" "1" "August 2024" "NPM@10.8.3" ""
.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 998fa261c6e..a7f7089a9c8 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-DEPRECATE" "1" "August 2024" "NPM@10.8.3" ""
.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 53fdb66e7cd..4d3f9f6955a 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-DIFF" "1" "August 2024" "NPM@10.8.3" ""
.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 6f640281b7c..d8451c181f1 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-DIST-TAG" "1" "August 2024" "NPM@10.8.3" ""
.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 f54738a7134..f6398139688 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-DOCS" "1" "August 2024" "NPM@10.8.3" ""
.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 f3be6d141c5..ba1cff38927 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-DOCTOR" "1" "August 2024" "NPM@10.8.3" ""
.SH "NAME"
\fBnpm-doctor\fR - Check the health of your npm environment
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-edit.1 b/deps/npm/man/man1/npm-edit.1
index 566fd70a171..6beaa7b3844 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-EDIT" "1" "August 2024" "NPM@10.8.3" ""
.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 22c68549a49..3e267f6eaae 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-EXEC" "1" "August 2024" "NPM@10.8.3" ""
.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 ca4ea11e76b..60f19d7e1a8 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-EXPLAIN" "1" "August 2024" "NPM@10.8.3" ""
.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 396847fe67e..3c1abf7b4db 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-EXPLORE" "1" "August 2024" "NPM@10.8.3" ""
.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 04a56c192f5..13448092746 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-FIND-DUPES" "1" "August 2024" "NPM@10.8.3" ""
.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 bcc4536443d..25a3b60faa0 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-FUND" "1" "August 2024" "NPM@10.8.3" ""
.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 070f471411a..60713918433 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-HELP-SEARCH" "1" "August 2024" "NPM@10.8.3" ""
.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 3642462f9fe..97b15b6eeab 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-HELP" "1" "August 2024" "NPM@10.8.3" ""
.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 844b447603a..b7362d6e2ef 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-HOOK" "1" "August 2024" "NPM@10.8.3" ""
.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 ac928f08bc1..4639e3031da 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-INIT" "1" "August 2024" "NPM@10.8.3" ""
.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 6e89a784af8..3f8e17b9c69 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-INSTALL-CI-TEST" "1" "August 2024" "NPM@10.8.3" ""
.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 721aff1061b..6d3c5aca8c6 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-INSTALL-TEST" "1" "August 2024" "NPM@10.8.3" ""
.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 f6d7fdc59f3..3d51d664fb6 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-INSTALL" "1" "August 2024" "NPM@10.8.3" ""
.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 3730b23fbf4..b2d6e243af7 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-LINK" "1" "August 2024" "NPM@10.8.3" ""
.SH "NAME"
\fBnpm-link\fR - Symlink a package folder
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-login.1 b/deps/npm/man/man1/npm-login.1
index 68f5a19c672..ae61f04aeba 100644
--- a/deps/npm/man/man1/npm-login.1
+++ b/deps/npm/man/man1/npm-login.1
@@ -1,4 +1,4 @@
-.TH "NPM-LOGIN" "1" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-LOGIN" "1" "August 2024" "NPM@10.8.3" ""
.SH "NAME"
\fBnpm-login\fR - Login to a registry user account
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-logout.1 b/deps/npm/man/man1/npm-logout.1
index 47888bc7c3c..5601da1924d 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-LOGOUT" "1" "August 2024" "NPM@10.8.3" ""
.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 790628e64dd..0775be95e46 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-LS" "1" "August 2024" "NPM@10.8.3" ""
.SH "NAME"
\fBnpm-ls\fR - List installed packages
.SS "Synopsis"
@@ -20,7 +20,7 @@ Positional arguments are \fBname@version-range\fR identifiers, which will limit
.P
.RS 2
.nf
-npm@10.8.2 /path/to/npm
+npm@10.8.3 /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 a0a5ad9f2b8..782162959b8 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-ORG" "1" "August 2024" "NPM@10.8.3" ""
.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 af534fea7e9..bd22481ccb4 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-OUTDATED" "1" "August 2024" "NPM@10.8.3" ""
.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 76c8c99f962..22202d1d46e 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-OWNER" "1" "August 2024" "NPM@10.8.3" ""
.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 22b13e9d03b..dbe579ed7ce 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-PACK" "1" "August 2024" "NPM@10.8.3" ""
.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 3585838b6f2..21318c02556 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-PING" "1" "August 2024" "NPM@10.8.3" ""
.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 d665ee57d73..05c3b50411b 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-PKG" "1" "August 2024" "NPM@10.8.3" ""
.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 928a4d32d22..9745f3370c8 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-PREFIX" "1" "August 2024" "NPM@10.8.3" ""
.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 abef0a1b305..8171db696c6 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-PROFILE" "1" "August 2024" "NPM@10.8.3" ""
.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 f0138f231c2..cd065ff5a58 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-PRUNE" "1" "August 2024" "NPM@10.8.3" ""
.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 3103180a0e6..17572afaaa8 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-PUBLISH" "1" "August 2024" "NPM@10.8.3" ""
.SH "NAME"
\fBnpm-publish\fR - Publish a package
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-query.1 b/deps/npm/man/man1/npm-query.1
index 607446d2a61..8b395876b68 100644
--- a/deps/npm/man/man1/npm-query.1
+++ b/deps/npm/man/man1/npm-query.1
@@ -1,4 +1,4 @@
-.TH "NPM-QUERY" "1" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-QUERY" "1" "August 2024" "NPM@10.8.3" ""
.SH "NAME"
\fBnpm-query\fR - Dependency selector query
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-rebuild.1 b/deps/npm/man/man1/npm-rebuild.1
index 3229db60be4..d500181cd66 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-REBUILD" "1" "August 2024" "NPM@10.8.3" ""
.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 1792a6b92c4..0592faf7559 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-REPO" "1" "August 2024" "NPM@10.8.3" ""
.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 c11c7080e08..c92a1acede0 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-RESTART" "1" "August 2024" "NPM@10.8.3" ""
.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 6bd0238c998..8daf0430c4e 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-ROOT" "1" "August 2024" "NPM@10.8.3" ""
.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 8744438b4af..b3374d7cdc5 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-RUN-SCRIPT" "1" "August 2024" "NPM@10.8.3" ""
.SH "NAME"
\fBnpm-run-script\fR - Run arbitrary package scripts
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-sbom.1 b/deps/npm/man/man1/npm-sbom.1
index 29e650029a8..70423b46fdf 100644
--- a/deps/npm/man/man1/npm-sbom.1
+++ b/deps/npm/man/man1/npm-sbom.1
@@ -1,4 +1,4 @@
-.TH "NPM-SBOM" "1" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-SBOM" "1" "August 2024" "NPM@10.8.3" ""
.SH "NAME"
\fBnpm-sbom\fR - Generate a Software Bill of Materials (SBOM)
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-search.1 b/deps/npm/man/man1/npm-search.1
index 4cf87992c60..c72a963f577 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-SEARCH" "1" "August 2024" "NPM@10.8.3" ""
.SH "NAME"
\fBnpm-search\fR - Search for packages
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-shrinkwrap.1 b/deps/npm/man/man1/npm-shrinkwrap.1
index 0a3293cf70a..1f677474153 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-SHRINKWRAP" "1" "August 2024" "NPM@10.8.3" ""
.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 22ba144b3a4..f441999ab56 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-STAR" "1" "August 2024" "NPM@10.8.3" ""
.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 64dc6b33bc9..5f22addcb31 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-STARS" "1" "August 2024" "NPM@10.8.3" ""
.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 1e78848ca51..1e2c8265972 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-START" "1" "August 2024" "NPM@10.8.3" ""
.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 d4049a023b0..546dc8bef5d 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-STOP" "1" "August 2024" "NPM@10.8.3" ""
.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 a8c44701147..c8e4286873d 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-TEAM" "1" "August 2024" "NPM@10.8.3" ""
.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 5faa46791ae..2edba4e88bb 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-TEST" "1" "August 2024" "NPM@10.8.3" ""
.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 69c0e99da77..20bda1a7ef3 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-TOKEN" "1" "August 2024" "NPM@10.8.3" ""
.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 bc3a39b3077..052c11b8085 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-UNINSTALL" "1" "August 2024" "NPM@10.8.3" ""
.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 df92aa2e005..fd7ee3066e9 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-UNPUBLISH" "1" "August 2024" "NPM@10.8.3" ""
.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 35e73f13326..f5e409f0917 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-UNSTAR" "1" "August 2024" "NPM@10.8.3" ""
.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 426f2ec1f80..dd9d503de4e 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-UPDATE" "1" "August 2024" "NPM@10.8.3" ""
.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 2ed22bb4534..5e6d0beefac 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-VERSION" "1" "August 2024" "NPM@10.8.3" ""
.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 a0b209dc24a..baca4b0a97f 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-VIEW" "1" "August 2024" "NPM@10.8.3" ""
.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 515c0bb1d73..40caa068abd 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-WHOAMI" "1" "August 2024" "NPM@10.8.3" ""
.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 50cc28c469f..471e5b5f7c1 100644
--- a/deps/npm/man/man1/npm.1
+++ b/deps/npm/man/man1/npm.1
@@ -1,4 +1,4 @@
-.TH "NPM" "1" "July 2024" "NPM@10.8.2" ""
+.TH "NPM" "1" "August 2024" "NPM@10.8.3" ""
.SH "NAME"
\fBnpm\fR - javascript package manager
.SS "Synopsis"
@@ -12,7 +12,7 @@ npm
Note: This command is unaware of workspaces.
.SS "Version"
.P
-10.8.2
+10.8.3
.SS "Description"
.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 conflicts intelligently.
diff --git a/deps/npm/man/man1/npx.1 b/deps/npm/man/man1/npx.1
index 1c44feefac7..0849e0d1094 100644
--- a/deps/npm/man/man1/npx.1
+++ b/deps/npm/man/man1/npx.1
@@ -1,4 +1,4 @@
-.TH "NPX" "1" "July 2024" "NPM@10.8.2" ""
+.TH "NPX" "1" "August 2024" "NPM@10.8.3" ""
.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 5296710e504..6e4b89a844f 100644
--- a/deps/npm/man/man5/folders.5
+++ b/deps/npm/man/man5/folders.5
@@ -1,4 +1,4 @@
-.TH "FOLDERS" "5" "July 2024" "NPM@10.8.2" ""
+.TH "FOLDERS" "5" "August 2024" "NPM@10.8.3" ""
.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 a9d13cc90f6..e5d1e892131 100644
--- a/deps/npm/man/man5/install.5
+++ b/deps/npm/man/man5/install.5
@@ -1,4 +1,4 @@
-.TH "INSTALL" "5" "July 2024" "NPM@10.8.2" ""
+.TH "INSTALL" "5" "August 2024" "NPM@10.8.3" ""
.SH "NAME"
\fBinstall\fR - Download and install node and npm
.SS "Description"
diff --git a/deps/npm/man/man5/npm-global.5 b/deps/npm/man/man5/npm-global.5
index 5296710e504..6e4b89a844f 100644
--- a/deps/npm/man/man5/npm-global.5
+++ b/deps/npm/man/man5/npm-global.5
@@ -1,4 +1,4 @@
-.TH "FOLDERS" "5" "July 2024" "NPM@10.8.2" ""
+.TH "FOLDERS" "5" "August 2024" "NPM@10.8.3" ""
.SH "NAME"
\fBfolders\fR - Folder Structures Used by npm
.SS "Description"
diff --git a/deps/npm/man/man5/npm-json.5 b/deps/npm/man/man5/npm-json.5
index 6e822952179..b167d6e0e92 100644
--- a/deps/npm/man/man5/npm-json.5
+++ b/deps/npm/man/man5/npm-json.5
@@ -1,4 +1,4 @@
-.TH "PACKAGE.JSON" "5" "July 2024" "NPM@10.8.2" ""
+.TH "PACKAGE.JSON" "5" "August 2024" "NPM@10.8.3" ""
.SH "NAME"
\fBpackage.json\fR - Specifics of npm's package.json handling
.SS "Description"
@@ -585,6 +585,8 @@ See \fBsemver\fR \fI\(lahttps://github.com/npm/node-semver#versions\(ra\fR for m
\fBtag\fR A specific version tagged and published as \fBtag\fR See npm help dist-tag
.IP \(bu 4
\fBpath/path/path\fR See \fBLocal Paths\fR \fI(Local Paths)\fR below
+.IP \(bu 4
+\fBnpm:@scope/pkg@version\fR Custom alias for a pacakge See \fB\fBpackage-spec\fR\fR \fI\(la/using-npm/package-spec#aliases\(ra\fR
.RE 0
.P
@@ -605,7 +607,8 @@ For example, these are all valid:
"two": "2.x",
"thr": "3.3.x",
"lat": "latest",
- "dyl": "file:../dyl"
+ "dyl": "file:../dyl",
+ "kpg": "npm:pkg@1.0.0"
}
}
.fi
diff --git a/deps/npm/man/man5/npm-shrinkwrap-json.5 b/deps/npm/man/man5/npm-shrinkwrap-json.5
index 5e06ab8f6ed..13353dc1e6a 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" "July 2024" "NPM@10.8.2" ""
+.TH "NPM-SHRINKWRAP.JSON" "5" "August 2024" "NPM@10.8.3" ""
.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 972edce7cf1..9f439429b53 100644
--- a/deps/npm/man/man5/npmrc.5
+++ b/deps/npm/man/man5/npmrc.5
@@ -1,4 +1,4 @@
-.TH "NPMRC" "5" "July 2024" "NPM@10.8.2" ""
+.TH "NPMRC" "5" "August 2024" "NPM@10.8.3" ""
.SH "NAME"
\fBnpmrc\fR - The npm config files
.SS "Description"
@@ -27,7 +27,7 @@ All npm config files are an ini-formatted list of \fBkey = value\fR parameters.
.P
.RS 2
.nf
-prefix = ${HOME}/.npm-packages
+cache = ${HOME}/.npm-packages
.fi
.RE
.P
@@ -106,10 +106,13 @@ _authToken=MYTOKEN
@myorg:registry=https://somewhere-else.com/myorg
@another:registry=https://somewhere-else.com/another
//registry.npmjs.org/:_authToken=MYTOKEN
+
; would apply to both @myorg and @another
-; //somewhere-else.com/:_authToken=MYTOKEN
+//somewhere-else.com/:_authToken=MYTOKEN
+
; would apply only to @myorg
//somewhere-else.com/myorg/:_authToken=MYTOKEN1
+
; would apply only to @another
//somewhere-else.com/another/:_authToken=MYTOKEN2
.fi
diff --git a/deps/npm/man/man5/package-json.5 b/deps/npm/man/man5/package-json.5
index 6e822952179..b167d6e0e92 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" "July 2024" "NPM@10.8.2" ""
+.TH "PACKAGE.JSON" "5" "August 2024" "NPM@10.8.3" ""
.SH "NAME"
\fBpackage.json\fR - Specifics of npm's package.json handling
.SS "Description"
@@ -585,6 +585,8 @@ See \fBsemver\fR \fI\(lahttps://github.com/npm/node-semver#versions\(ra\fR for m
\fBtag\fR A specific version tagged and published as \fBtag\fR See npm help dist-tag
.IP \(bu 4
\fBpath/path/path\fR See \fBLocal Paths\fR \fI(Local Paths)\fR below
+.IP \(bu 4
+\fBnpm:@scope/pkg@version\fR Custom alias for a pacakge See \fB\fBpackage-spec\fR\fR \fI\(la/using-npm/package-spec#aliases\(ra\fR
.RE 0
.P
@@ -605,7 +607,8 @@ For example, these are all valid:
"two": "2.x",
"thr": "3.3.x",
"lat": "latest",
- "dyl": "file:../dyl"
+ "dyl": "file:../dyl",
+ "kpg": "npm:pkg@1.0.0"
}
}
.fi
diff --git a/deps/npm/man/man5/package-lock-json.5 b/deps/npm/man/man5/package-lock-json.5
index 46ed8588794..183a8fbff85 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" "July 2024" "NPM@10.8.2" ""
+.TH "PACKAGE-LOCK.JSON" "5" "August 2024" "NPM@10.8.3" ""
.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 0c88e78430b..0cd1e963107 100644
--- a/deps/npm/man/man7/config.7
+++ b/deps/npm/man/man7/config.7
@@ -1,4 +1,4 @@
-.TH "CONFIG" "7" "July 2024" "NPM@10.8.2" ""
+.TH "CONFIG" "7" "August 2024" "NPM@10.8.3" ""
.SH "NAME"
\fBconfig\fR - More than you probably want to know about npm configuration
.SS "Description"
diff --git a/deps/npm/man/man7/dependency-selectors.7 b/deps/npm/man/man7/dependency-selectors.7
index cd8f26dc88a..92cbf923c15 100644
--- a/deps/npm/man/man7/dependency-selectors.7
+++ b/deps/npm/man/man7/dependency-selectors.7
@@ -1,4 +1,4 @@
-.TH "QUERYING" "7" "July 2024" "NPM@10.8.2" ""
+.TH "QUERYING" "7" "August 2024" "NPM@10.8.3" ""
.SH "NAME"
\fBQuerying\fR - Dependency Selector Syntax & Querying
.SS "Description"
diff --git a/deps/npm/man/man7/developers.7 b/deps/npm/man/man7/developers.7
index 9ee299fcfcc..fd7d1342f26 100644
--- a/deps/npm/man/man7/developers.7
+++ b/deps/npm/man/man7/developers.7
@@ -1,4 +1,4 @@
-.TH "DEVELOPERS" "7" "July 2024" "NPM@10.8.2" ""
+.TH "DEVELOPERS" "7" "August 2024" "NPM@10.8.3" ""
.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 4af5c0a11bb..3ab9f5c1ddf 100644
--- a/deps/npm/man/man7/logging.7
+++ b/deps/npm/man/man7/logging.7
@@ -1,4 +1,4 @@
-.TH "LOGGING" "7" "July 2024" "NPM@10.8.2" ""
+.TH "LOGGING" "7" "August 2024" "NPM@10.8.3" ""
.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 986887c6278..c3718278543 100644
--- a/deps/npm/man/man7/orgs.7
+++ b/deps/npm/man/man7/orgs.7
@@ -1,4 +1,4 @@
-.TH "ORGS" "7" "July 2024" "NPM@10.8.2" ""
+.TH "ORGS" "7" "August 2024" "NPM@10.8.3" ""
.SH "NAME"
\fBorgs\fR - Working with Teams & Orgs
.SS "Description"
diff --git a/deps/npm/man/man7/package-spec.7 b/deps/npm/man/man7/package-spec.7
index f87afd4ca1b..60cbfcd9ff6 100644
--- a/deps/npm/man/man7/package-spec.7
+++ b/deps/npm/man/man7/package-spec.7
@@ -1,4 +1,4 @@
-.TH "PACKAGE-SPEC" "7" "July 2024" "NPM@10.8.2" ""
+.TH "PACKAGE-SPEC" "7" "August 2024" "NPM@10.8.3" ""
.SH "NAME"
\fBpackage-spec\fR - Package name specifier
.SS "Description"
diff --git a/deps/npm/man/man7/registry.7 b/deps/npm/man/man7/registry.7
index 1023018bd10..a798125ab8d 100644
--- a/deps/npm/man/man7/registry.7
+++ b/deps/npm/man/man7/registry.7
@@ -1,4 +1,4 @@
-.TH "REGISTRY" "7" "July 2024" "NPM@10.8.2" ""
+.TH "REGISTRY" "7" "August 2024" "NPM@10.8.3" ""
.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 f6f38e5c3ec..9e792b51df7 100644
--- a/deps/npm/man/man7/removal.7
+++ b/deps/npm/man/man7/removal.7
@@ -1,4 +1,4 @@
-.TH "REMOVAL" "7" "July 2024" "NPM@10.8.2" ""
+.TH "REMOVAL" "7" "August 2024" "NPM@10.8.3" ""
.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 6ccf927c714..9313cb14436 100644
--- a/deps/npm/man/man7/scope.7
+++ b/deps/npm/man/man7/scope.7
@@ -1,4 +1,4 @@
-.TH "SCOPE" "7" "July 2024" "NPM@10.8.2" ""
+.TH "SCOPE" "7" "August 2024" "NPM@10.8.3" ""
.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 f1c45c7a9db..843454ed9fd 100644
--- a/deps/npm/man/man7/scripts.7
+++ b/deps/npm/man/man7/scripts.7
@@ -1,4 +1,4 @@
-.TH "SCRIPTS" "7" "July 2024" "NPM@10.8.2" ""
+.TH "SCRIPTS" "7" "August 2024" "NPM@10.8.3" ""
.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 461f6b5c71f..7459be91ff0 100644
--- a/deps/npm/man/man7/workspaces.7
+++ b/deps/npm/man/man7/workspaces.7
@@ -1,4 +1,4 @@
-.TH "WORKSPACES" "7" "July 2024" "NPM@10.8.2" ""
+.TH "WORKSPACES" "7" "August 2024" "NPM@10.8.3" ""
.SH "NAME"
\fBworkspaces\fR - Working with workspaces
.SS "Description"
diff --git a/deps/npm/node_modules/@npmcli/arborist/package.json b/deps/npm/node_modules/@npmcli/arborist/package.json
index 9fdbbbf8607..7fec2c6bea3 100644
--- a/deps/npm/node_modules/@npmcli/arborist/package.json
+++ b/deps/npm/node_modules/@npmcli/arborist/package.json
@@ -41,7 +41,7 @@
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.22.0",
+ "@npmcli/template-oss": "4.23.3",
"benchmark": "^2.1.4",
"minify-registry-metadata": "^3.0.0",
"nock": "^13.3.3",
@@ -54,12 +54,13 @@
"posttest": "npm run lint",
"snap": "tap",
"test-proxy": "ARBORIST_TEST_PROXY=1 tap --snapshot",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
- "lintfix": "npm run lint -- --fix",
+ "lint": "npm run eslint",
+ "lintfix": "npm run eslint -- --fix",
"benchmark": "node scripts/benchmark.js",
"benchclean": "rm -rf scripts/benchmark/*/",
"postlint": "template-oss-check",
- "template-oss-apply": "template-oss-apply --force"
+ "template-oss-apply": "template-oss-apply --force",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"repository": {
"type": "git",
@@ -92,7 +93,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.22.0",
+ "version": "4.23.3",
"content": "../../scripts/template-oss/index.js"
}
}
diff --git a/deps/npm/node_modules/@npmcli/config/package.json b/deps/npm/node_modules/@npmcli/config/package.json
index 04e6e55c3ef..6cf2b85438c 100644
--- a/deps/npm/node_modules/@npmcli/config/package.json
+++ b/deps/npm/node_modules/@npmcli/config/package.json
@@ -17,11 +17,12 @@
"scripts": {
"test": "tap",
"snap": "tap",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
"postlint": "template-oss-check",
- "lintfix": "npm run lint -- --fix",
+ "lintfix": "npm run eslint -- --fix",
"posttest": "npm run lint",
- "template-oss-apply": "template-oss-apply --force"
+ "template-oss-apply": "template-oss-apply --force",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"tap": {
"nyc-arg": [
@@ -32,7 +33,7 @@
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
"@npmcli/mock-globals": "^1.0.0",
- "@npmcli/template-oss": "4.22.0",
+ "@npmcli/template-oss": "4.23.3",
"tap": "^16.3.8"
},
"dependencies": {
@@ -50,7 +51,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.22.0",
+ "version": "4.23.3",
"content": "../../scripts/template-oss/index.js"
}
}
diff --git a/deps/npm/node_modules/cacache/lib/entry-index.js b/deps/npm/node_modules/cacache/lib/entry-index.js
index f73a11ca29d..89c28f2f257 100644
--- a/deps/npm/node_modules/cacache/lib/entry-index.js
+++ b/deps/npm/node_modules/cacache/lib/entry-index.js
@@ -22,7 +22,6 @@ const { moveFile } = require('@npmcli/fs')
const pMap = require('p-map')
const lsStreamConcurrency = 5
-
module.exports.NotFoundError = class NotFoundError extends Error {
constructor (cache, key) {
super(`No cache entry for ${key} found in ${cache}`)
diff --git a/deps/npm/node_modules/cacache/package.json b/deps/npm/node_modules/cacache/package.json
index 0741183efc1..6e6219158ed 100644
--- a/deps/npm/node_modules/cacache/package.json
+++ b/deps/npm/node_modules/cacache/package.json
@@ -1,6 +1,6 @@
{
"name": "cacache",
- "version": "18.0.3",
+ "version": "18.0.4",
"cache-version": {
"content": "2",
"index": "5"
diff --git a/deps/npm/node_modules/debug/package.json b/deps/npm/node_modules/debug/package.json
index cb67103857a..8eea0552055 100644
--- a/deps/npm/node_modules/debug/package.json
+++ b/deps/npm/node_modules/debug/package.json
@@ -1,6 +1,6 @@
{
"name": "debug",
- "version": "4.3.5",
+ "version": "4.3.6",
"repository": {
"type": "git",
"url": "git://github.com/debug-js/debug.git"
diff --git a/deps/npm/node_modules/debug/src/browser.js b/deps/npm/node_modules/debug/src/browser.js
index cd0fc35d1ee..8d808e5889d 100644
--- a/deps/npm/node_modules/debug/src/browser.js
+++ b/deps/npm/node_modules/debug/src/browser.js
@@ -125,6 +125,8 @@ function useColors() {
return false;
}
+ let m;
+
// Is webkit? http://stackoverflow.com/a/16459606/376773
// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
@@ -132,7 +134,7 @@ function useColors() {
(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
// Is firefox >= v31?
// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
- (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||
+ (typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)) && parseInt(m[1], 10) >= 31) ||
// Double check webkit in userAgent just in case we are in a worker
(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
}
diff --git a/deps/npm/node_modules/foreground-child/dist/commonjs/index.js b/deps/npm/node_modules/foreground-child/dist/commonjs/index.js
index 8ea5413b093..07a01c5830d 100644
--- a/deps/npm/node_modules/foreground-child/dist/commonjs/index.js
+++ b/deps/npm/node_modules/foreground-child/dist/commonjs/index.js
@@ -63,7 +63,7 @@ function foregroundChild(...fgArgs) {
};
const removeOnExit = (0, signal_exit_1.onExit)(childHangup);
(0, proxy_signals_js_1.proxySignals)(child);
- (0, watchdog_js_1.watchdog)(child);
+ const dog = (0, watchdog_js_1.watchdog)(child);
let done = false;
child.on('close', async (code, signal) => {
/* c8 ignore start */
@@ -71,7 +71,9 @@ function foregroundChild(...fgArgs) {
return;
/* c8 ignore stop */
done = true;
- const result = cleanup(code, signal);
+ const result = cleanup(code, signal, {
+ watchdogPid: dog.pid,
+ });
const res = isPromise(result) ? await result : result;
removeOnExit();
if (res === false)
diff --git a/deps/npm/node_modules/foreground-child/dist/esm/index.js b/deps/npm/node_modules/foreground-child/dist/esm/index.js
index d42ba8f31dd..6266b5848cc 100644
--- a/deps/npm/node_modules/foreground-child/dist/esm/index.js
+++ b/deps/npm/node_modules/foreground-child/dist/esm/index.js
@@ -56,7 +56,7 @@ export function foregroundChild(...fgArgs) {
};
const removeOnExit = onExit(childHangup);
proxySignals(child);
- watchdog(child);
+ const dog = watchdog(child);
let done = false;
child.on('close', async (code, signal) => {
/* c8 ignore start */
@@ -64,7 +64,9 @@ export function foregroundChild(...fgArgs) {
return;
/* c8 ignore stop */
done = true;
- const result = cleanup(code, signal);
+ const result = cleanup(code, signal, {
+ watchdogPid: dog.pid,
+ });
const res = isPromise(result) ? await result : result;
removeOnExit();
if (res === false)
diff --git a/deps/npm/node_modules/foreground-child/package.json b/deps/npm/node_modules/foreground-child/package.json
index e157528477c..980b7e85d15 100644
--- a/deps/npm/node_modules/foreground-child/package.json
+++ b/deps/npm/node_modules/foreground-child/package.json
@@ -1,6 +1,6 @@
{
"name": "foreground-child",
- "version": "3.2.1",
+ "version": "3.3.0",
"description": "Run a child as if it's the foreground process. Give it stdio. Exit when it exits.",
"main": "./dist/commonjs/index.js",
"types": "./dist/commonjs/index.d.ts",
diff --git a/deps/npm/node_modules/glob/dist/commonjs/glob.d.ts b/deps/npm/node_modules/glob/dist/commonjs/glob.d.ts
index b3559edf801..25262b3ddf4 100644
--- a/deps/npm/node_modules/glob/dist/commonjs/glob.d.ts
+++ b/deps/npm/node_modules/glob/dist/commonjs/glob.d.ts
@@ -1,4 +1,3 @@
-///
import { Minimatch } from 'minimatch';
import { Minipass } from 'minipass';
import { FSOption, Path, PathScurry } from 'path-scurry';
diff --git a/deps/npm/node_modules/glob/dist/commonjs/glob.d.ts.map b/deps/npm/node_modules/glob/dist/commonjs/glob.d.ts.map
index 3ec673a5fae..c32dc74c967 100644
--- a/deps/npm/node_modules/glob/dist/commonjs/glob.d.ts.map
+++ b/deps/npm/node_modules/glob/dist/commonjs/glob.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../../src/glob.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAoB,MAAM,WAAW,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAEnC,OAAO,EACL,QAAQ,EACR,IAAI,EACJ,UAAU,EAIX,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAGtC,MAAM,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;AACvC,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,CAAA;AAalE;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAE5B;;;;;OAKG;IACH,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;IAElB;;;;OAIG;IACH,GAAG,CAAC,EAAE,OAAO,CAAA;IAEb;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IAErB;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAEhB;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,UAAU,CAAA;IAEvC;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IAEvB;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IAEd;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IAEnB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAEhB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IAEf;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IAEf;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IAEpB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAA;IAE1B;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb;;;;;OAKG;IACH,MAAM,CAAC,EAAE,UAAU,CAAA;IAEnB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IAEd;;;OAGG;IACH,MAAM,CAAC,EAAE,WAAW,CAAA;IAEpB;;;;;;;;;;;;;OAaG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAE9B;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IAEvB;;;OAGG;IACH,EAAE,CAAC,EAAE,QAAQ,CAAA;IAEb;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IAEf;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IAEf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA0CG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B;AAED,MAAM,MAAM,4BAA4B,GAAG,WAAW,GAAG;IACvD,aAAa,EAAE,IAAI,CAAA;IAEnB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG,WAAW,GAAG;IACxD,aAAa,CAAC,EAAE,KAAK,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG,WAAW,GAAG;IACxD,aAAa,CAAC,EAAE,SAAS,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,MAAM,CAAC,IAAI,IACrB,IAAI,SAAS,4BAA4B,GAAG,IAAI,GAC9C,IAAI,SAAS,6BAA6B,GAAG,MAAM,GACnD,IAAI,SAAS,6BAA6B,GAAG,MAAM,GACnD,MAAM,GAAG,IAAI,CAAA;AACjB,MAAM,MAAM,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAA;AAE1C,MAAM,MAAM,SAAS,CAAC,IAAI,IACxB,IAAI,SAAS,4BAA4B,GAAG,IAAI,GAC9C,IAAI,SAAS,6BAA6B,GAAG,KAAK,GAClD,IAAI,SAAS,6BAA6B,GAAG,KAAK,GAClD,OAAO,CAAA;AAEX;;GAEG;AACH,qBAAa,IAAI,CAAC,IAAI,SAAS,WAAW,CAAE,YAAW,WAAW;IAChE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,OAAO,CAAA;IACZ,WAAW,EAAE,OAAO,CAAA;IACpB,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,UAAU,CAAA;IACvC,aAAa,EAAE,OAAO,CAAA;IACtB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,EAAE,OAAO,CAAA;IACd,UAAU,EAAE,OAAO,CAAA;IACnB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAA;IACzB,QAAQ,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,UAAU,CAAA;IAClB,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,oBAAoB,EAAE,OAAO,CAAA;IAC7B,aAAa,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;IAC9B,mBAAmB,EAAE,OAAO,CAAA;IAE5B;;OAEG;IACH,IAAI,EAAE,IAAI,CAAA;IAEV;;OAEG;IACH,QAAQ,EAAE,OAAO,EAAE,CAAA;IAEnB;;;;;;;;;;;OAWG;gBACS,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI;IA2HlD;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAoBpC;;OAEG;IACH,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBzB;;OAEG;IACH,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAc9C;;OAEG;IACH,UAAU,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAclD;;;OAGG;IACH,WAAW,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;IAGlD,CAAC,MAAM,CAAC,QAAQ,CAAC;IAIjB;;;OAGG;IACH,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;IAGnD,CAAC,MAAM,CAAC,aAAa,CAAC;CAGvB"}
\ No newline at end of file
+{"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../../src/glob.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAoB,MAAM,WAAW,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAEnC,OAAO,EACL,QAAQ,EACR,IAAI,EACJ,UAAU,EAIX,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAGtC,MAAM,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;AACvC,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,CAAA;AAalE;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAE5B;;;;;OAKG;IACH,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;IAElB;;;;OAIG;IACH,GAAG,CAAC,EAAE,OAAO,CAAA;IAEb;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IAErB;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAEhB;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,UAAU,CAAA;IAEvC;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IAEvB;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IAEd;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IAEnB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAEhB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IAEf;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IAEf;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IAEpB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAA;IAE1B;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb;;;;;OAKG;IACH,MAAM,CAAC,EAAE,UAAU,CAAA;IAEnB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IAEd;;;OAGG;IACH,MAAM,CAAC,EAAE,WAAW,CAAA;IAEpB;;;;;;;;;;;;;OAaG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAE9B;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IAEvB;;;OAGG;IACH,EAAE,CAAC,EAAE,QAAQ,CAAA;IAEb;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IAEf;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IAEf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA0CG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B;AAED,MAAM,MAAM,4BAA4B,GAAG,WAAW,GAAG;IACvD,aAAa,EAAE,IAAI,CAAA;IAEnB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG,WAAW,GAAG;IACxD,aAAa,CAAC,EAAE,KAAK,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG,WAAW,GAAG;IACxD,aAAa,CAAC,EAAE,SAAS,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,MAAM,CAAC,IAAI,IACrB,IAAI,SAAS,4BAA4B,GAAG,IAAI,GAC9C,IAAI,SAAS,6BAA6B,GAAG,MAAM,GACnD,IAAI,SAAS,6BAA6B,GAAG,MAAM,GACnD,MAAM,GAAG,IAAI,CAAA;AACjB,MAAM,MAAM,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAA;AAE1C,MAAM,MAAM,SAAS,CAAC,IAAI,IACxB,IAAI,SAAS,4BAA4B,GAAG,IAAI,GAC9C,IAAI,SAAS,6BAA6B,GAAG,KAAK,GAClD,IAAI,SAAS,6BAA6B,GAAG,KAAK,GAClD,OAAO,CAAA;AAEX;;GAEG;AACH,qBAAa,IAAI,CAAC,IAAI,SAAS,WAAW,CAAE,YAAW,WAAW;IAChE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,OAAO,CAAA;IACZ,WAAW,EAAE,OAAO,CAAA;IACpB,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,UAAU,CAAA;IACvC,aAAa,EAAE,OAAO,CAAA;IACtB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,EAAE,OAAO,CAAA;IACd,UAAU,EAAE,OAAO,CAAA;IACnB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAA;IACzB,QAAQ,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,UAAU,CAAA;IAClB,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,oBAAoB,EAAE,OAAO,CAAA;IAC7B,aAAa,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;IAC9B,mBAAmB,EAAE,OAAO,CAAA;IAE5B;;OAEG;IACH,IAAI,EAAE,IAAI,CAAA;IAEV;;OAEG;IACH,QAAQ,EAAE,OAAO,EAAE,CAAA;IAEnB;;;;;;;;;;;OAWG;gBACS,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI;IA2HlD;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAoBpC;;OAEG;IACH,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBzB;;OAEG;IACH,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAc9C;;OAEG;IACH,UAAU,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAclD;;;OAGG;IACH,WAAW,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;IAGlD,CAAC,MAAM,CAAC,QAAQ,CAAC;IAIjB;;;OAGG;IACH,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;IAGnD,CAAC,MAAM,CAAC,aAAa,CAAC;CAGvB"}
\ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/commonjs/ignore.d.ts b/deps/npm/node_modules/glob/dist/commonjs/ignore.d.ts
index cfe108dbd41..1893b16df87 100644
--- a/deps/npm/node_modules/glob/dist/commonjs/ignore.d.ts
+++ b/deps/npm/node_modules/glob/dist/commonjs/ignore.d.ts
@@ -1,4 +1,3 @@
-///
import { Minimatch, MinimatchOptions } from 'minimatch';
import { Path } from 'path-scurry';
import { GlobWalkerOpts } from './walker.js';
diff --git a/deps/npm/node_modules/glob/dist/commonjs/ignore.d.ts.map b/deps/npm/node_modules/glob/dist/commonjs/ignore.d.ts.map
index 82a7ac2a306..57d6ab6153d 100644
--- a/deps/npm/node_modules/glob/dist/commonjs/ignore.d.ts.map
+++ b/deps/npm/node_modules/glob/dist/commonjs/ignore.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"ignore.d.ts","sourceRoot":"","sources":["../../src/ignore.ts"],"names":[],"mappings":";AAKA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAElC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,OAAO,CAAA;IAC9B,eAAe,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,OAAO,CAAA;IACtC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;CAC/B;AAWD;;GAEG;AACH,qBAAa,MAAO,YAAW,UAAU;IACvC,QAAQ,EAAE,SAAS,EAAE,CAAA;IACrB,gBAAgB,EAAE,SAAS,EAAE,CAAA;IAC7B,QAAQ,EAAE,SAAS,EAAE,CAAA;IACrB,gBAAgB,EAAE,SAAS,EAAE,CAAA;IAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAA;IACzB,MAAM,EAAE,gBAAgB,CAAA;gBAGtB,OAAO,EAAE,MAAM,EAAE,EACjB,EACE,OAAO,EACP,MAAM,EACN,KAAK,EACL,UAAU,EACV,QAA0B,GAC3B,EAAE,cAAc;IAqBnB,GAAG,CAAC,GAAG,EAAE,MAAM;IAyCf,OAAO,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO;IAczB,eAAe,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO;CAWlC"}
\ No newline at end of file
+{"version":3,"file":"ignore.d.ts","sourceRoot":"","sources":["../../src/ignore.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAElC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,OAAO,CAAA;IAC9B,eAAe,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,OAAO,CAAA;IACtC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;CAC/B;AAWD;;GAEG;AACH,qBAAa,MAAO,YAAW,UAAU;IACvC,QAAQ,EAAE,SAAS,EAAE,CAAA;IACrB,gBAAgB,EAAE,SAAS,EAAE,CAAA;IAC7B,QAAQ,EAAE,SAAS,EAAE,CAAA;IACrB,gBAAgB,EAAE,SAAS,EAAE,CAAA;IAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAA;IACzB,MAAM,EAAE,gBAAgB,CAAA;gBAGtB,OAAO,EAAE,MAAM,EAAE,EACjB,EACE,OAAO,EACP,MAAM,EACN,KAAK,EACL,UAAU,EACV,QAA0B,GAC3B,EAAE,cAAc;IAqBnB,GAAG,CAAC,GAAG,EAAE,MAAM;IAyCf,OAAO,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO;IAczB,eAAe,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO;CAWlC"}
\ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/commonjs/index.d.ts b/deps/npm/node_modules/glob/dist/commonjs/index.d.ts
index 693ba2ab8e6..9c326ddc895 100644
--- a/deps/npm/node_modules/glob/dist/commonjs/index.d.ts
+++ b/deps/npm/node_modules/glob/dist/commonjs/index.d.ts
@@ -91,7 +91,7 @@ export declare const glob: typeof glob_ & {
iterateSync: typeof globIterateSync;
Glob: typeof Glob;
hasMagic: (pattern: string | string[], options?: GlobOptions) => boolean;
- escape: (s: string, { windowsPathsNoEscape, }?: Pick | undefined) => string;
- unescape: (s: string, { windowsPathsNoEscape, }?: Pick | undefined) => string;
+ escape: (s: string, { windowsPathsNoEscape, }?: Pick) => string;
+ unescape: (s: string, { windowsPathsNoEscape, }?: Pick) => string;
};
//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/commonjs/index.js.map b/deps/npm/node_modules/glob/dist/commonjs/index.js.map
index 7f3f8d89fd8..e648b1d0193 100644
--- a/deps/npm/node_modules/glob/dist/commonjs/index.js.map
+++ b/deps/npm/node_modules/glob/dist/commonjs/index.js.map
@@ -1 +1 @@
-{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,yCAA4C;AAS5C,uCAAgC;AAChC,iDAAyC;AAEzC,uCAA4C;AAAnC,mGAAA,MAAM,OAAA;AAAE,qGAAA,QAAQ,OAAA;AAQzB,qCAAgC;AAAvB,+FAAA,IAAI,OAAA;AAOb,+CAAyC;AAAhC,wGAAA,QAAQ,OAAA;AACjB,yCAAoC;AAA3B,mGAAA,MAAM,OAAA;AAyBf,SAAgB,cAAc,CAC5B,OAA0B,EAC1B,UAAuB,EAAE;IAEzB,OAAO,IAAI,cAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,UAAU,EAAE,CAAA;AAChD,CAAC;AALD,wCAKC;AAsBD,SAAgB,UAAU,CACxB,OAA0B,EAC1B,UAAuB,EAAE;IAEzB,OAAO,IAAI,cAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,CAAA;AAC5C,CAAC;AALD,gCAKC;AAqBD,SAAgB,QAAQ,CACtB,OAA0B,EAC1B,UAAuB,EAAE;IAEzB,OAAO,IAAI,cAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAA;AAC9C,CAAC;AALD,4BAKC;AAwBD,KAAK,UAAU,KAAK,CAClB,OAA0B,EAC1B,UAAuB,EAAE;IAEzB,OAAO,IAAI,cAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAA;AAC1C,CAAC;AAqBD,SAAgB,eAAe,CAC7B,OAA0B,EAC1B,UAAuB,EAAE;IAEzB,OAAO,IAAI,cAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;AACjD,CAAC;AALD,0CAKC;AAqBD,SAAgB,WAAW,CACzB,OAA0B,EAC1B,UAAuB,EAAE;IAEzB,OAAO,IAAI,cAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,OAAO,EAAE,CAAA;AAC7C,CAAC;AALD,kCAKC;AAED,iEAAiE;AACpD,QAAA,UAAU,GAAG,cAAc,CAAA;AAC3B,QAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAA;AAC5D,QAAA,WAAW,GAAG,eAAe,CAAA;AAC7B,QAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE;IAChD,IAAI,EAAE,eAAe;CACtB,CAAC,CAAA;AACW,QAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;IAC1C,MAAM,EAAE,cAAc;IACtB,OAAO,EAAE,eAAe;CACzB,CAAC,CAAA;AAEW,QAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;IACvC,IAAI,EAAE,KAAK;IACX,QAAQ;IACR,IAAI,EAAJ,YAAI;IACJ,UAAU;IACV,MAAM,EAAN,cAAM;IACN,cAAc;IACd,UAAU,EAAV,kBAAU;IACV,WAAW;IACX,OAAO,EAAP,eAAO;IACP,eAAe;IACf,WAAW,EAAX,mBAAW;IACX,IAAI,EAAJ,cAAI;IACJ,QAAQ,EAAR,uBAAQ;IACR,MAAM,EAAN,kBAAM;IACN,QAAQ,EAAR,oBAAQ;CACT,CAAC,CAAA;AACF,YAAI,CAAC,IAAI,GAAG,YAAI,CAAA","sourcesContent":["import { escape, unescape } from 'minimatch'\nimport { Minipass } from 'minipass'\nimport { Path } from 'path-scurry'\nimport type {\n GlobOptions,\n GlobOptionsWithFileTypesFalse,\n GlobOptionsWithFileTypesTrue,\n GlobOptionsWithFileTypesUnset,\n} from './glob.js'\nimport { Glob } from './glob.js'\nimport { hasMagic } from './has-magic.js'\n\nexport { escape, unescape } from 'minimatch'\nexport type {\n FSOption,\n Path,\n WalkOptions,\n WalkOptionsWithFileTypesTrue,\n WalkOptionsWithFileTypesUnset,\n} from 'path-scurry'\nexport { Glob } from './glob.js'\nexport type {\n GlobOptions,\n GlobOptionsWithFileTypesFalse,\n GlobOptionsWithFileTypesTrue,\n GlobOptionsWithFileTypesUnset,\n} from './glob.js'\nexport { hasMagic } from './has-magic.js'\nexport { Ignore } from './ignore.js'\nexport type { IgnoreLike } from './ignore.js'\nexport type { MatchStream } from './walker.js'\n\n/**\n * Syncronous form of {@link globStream}. Will read all the matches as fast as\n * you consume them, even all in a single tick if you consume them immediately,\n * but will still respond to backpressure if they're not consumed immediately.\n */\nexport function globStreamSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue,\n): Minipass\nexport function globStreamSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse,\n): Minipass\nexport function globStreamSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesUnset,\n): Minipass\nexport function globStreamSync(\n pattern: string | string[],\n options: GlobOptions,\n): Minipass | Minipass\nexport function globStreamSync(\n pattern: string | string[],\n options: GlobOptions = {},\n) {\n return new Glob(pattern, options).streamSync()\n}\n\n/**\n * Return a stream that emits all the strings or `Path` objects and\n * then emits `end` when completed.\n */\nexport function globStream(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse,\n): Minipass\nexport function globStream(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue,\n): Minipass\nexport function globStream(\n pattern: string | string[],\n options?: GlobOptionsWithFileTypesUnset | undefined,\n): Minipass\nexport function globStream(\n pattern: string | string[],\n options: GlobOptions,\n): Minipass | Minipass\nexport function globStream(\n pattern: string | string[],\n options: GlobOptions = {},\n) {\n return new Glob(pattern, options).stream()\n}\n\n/**\n * Synchronous form of {@link glob}\n */\nexport function globSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse,\n): string[]\nexport function globSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue,\n): Path[]\nexport function globSync(\n pattern: string | string[],\n options?: GlobOptionsWithFileTypesUnset | undefined,\n): string[]\nexport function globSync(\n pattern: string | string[],\n options: GlobOptions,\n): Path[] | string[]\nexport function globSync(\n pattern: string | string[],\n options: GlobOptions = {},\n) {\n return new Glob(pattern, options).walkSync()\n}\n\n/**\n * Perform an asynchronous glob search for the pattern(s) specified. Returns\n * [Path](https://isaacs.github.io/path-scurry/classes/PathBase) objects if the\n * {@link withFileTypes} option is set to `true`. See {@link GlobOptions} for\n * full option descriptions.\n */\nasync function glob_(\n pattern: string | string[],\n options?: GlobOptionsWithFileTypesUnset | undefined,\n): Promise\nasync function glob_(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue,\n): Promise\nasync function glob_(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse,\n): Promise\nasync function glob_(\n pattern: string | string[],\n options: GlobOptions,\n): Promise\nasync function glob_(\n pattern: string | string[],\n options: GlobOptions = {},\n) {\n return new Glob(pattern, options).walk()\n}\n\n/**\n * Return a sync iterator for walking glob pattern matches.\n */\nexport function globIterateSync(\n pattern: string | string[],\n options?: GlobOptionsWithFileTypesUnset | undefined,\n): Generator\nexport function globIterateSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue,\n): Generator\nexport function globIterateSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse,\n): Generator\nexport function globIterateSync(\n pattern: string | string[],\n options: GlobOptions,\n): Generator | Generator\nexport function globIterateSync(\n pattern: string | string[],\n options: GlobOptions = {},\n) {\n return new Glob(pattern, options).iterateSync()\n}\n\n/**\n * Return an async iterator for walking glob pattern matches.\n */\nexport function globIterate(\n pattern: string | string[],\n options?: GlobOptionsWithFileTypesUnset | undefined,\n): AsyncGenerator\nexport function globIterate(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue,\n): AsyncGenerator\nexport function globIterate(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse,\n): AsyncGenerator\nexport function globIterate(\n pattern: string | string[],\n options: GlobOptions,\n): AsyncGenerator | AsyncGenerator\nexport function globIterate(\n pattern: string | string[],\n options: GlobOptions = {},\n) {\n return new Glob(pattern, options).iterate()\n}\n\n// aliases: glob.sync.stream() glob.stream.sync() glob.sync() etc\nexport const streamSync = globStreamSync\nexport const stream = Object.assign(globStream, { sync: globStreamSync })\nexport const iterateSync = globIterateSync\nexport const iterate = Object.assign(globIterate, {\n sync: globIterateSync,\n})\nexport const sync = Object.assign(globSync, {\n stream: globStreamSync,\n iterate: globIterateSync,\n})\n\nexport const glob = Object.assign(glob_, {\n glob: glob_,\n globSync,\n sync,\n globStream,\n stream,\n globStreamSync,\n streamSync,\n globIterate,\n iterate,\n globIterateSync,\n iterateSync,\n Glob,\n hasMagic,\n escape,\n unescape,\n})\nglob.glob = glob\n"]}
\ No newline at end of file
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAqDA,wCAKC;AAsBD,gCAKC;AAqBD,4BAKC;AAkDD,0CAKC;AAqBD,kCAKC;AAhMD,yCAA4C;AAS5C,uCAAgC;AAChC,iDAAyC;AAEzC,uCAA4C;AAAnC,mGAAA,MAAM,OAAA;AAAE,qGAAA,QAAQ,OAAA;AAQzB,qCAAgC;AAAvB,+FAAA,IAAI,OAAA;AAOb,+CAAyC;AAAhC,wGAAA,QAAQ,OAAA;AACjB,yCAAoC;AAA3B,mGAAA,MAAM,OAAA;AAyBf,SAAgB,cAAc,CAC5B,OAA0B,EAC1B,UAAuB,EAAE;IAEzB,OAAO,IAAI,cAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,UAAU,EAAE,CAAA;AAChD,CAAC;AAsBD,SAAgB,UAAU,CACxB,OAA0B,EAC1B,UAAuB,EAAE;IAEzB,OAAO,IAAI,cAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,CAAA;AAC5C,CAAC;AAqBD,SAAgB,QAAQ,CACtB,OAA0B,EAC1B,UAAuB,EAAE;IAEzB,OAAO,IAAI,cAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAA;AAC9C,CAAC;AAwBD,KAAK,UAAU,KAAK,CAClB,OAA0B,EAC1B,UAAuB,EAAE;IAEzB,OAAO,IAAI,cAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAA;AAC1C,CAAC;AAqBD,SAAgB,eAAe,CAC7B,OAA0B,EAC1B,UAAuB,EAAE;IAEzB,OAAO,IAAI,cAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;AACjD,CAAC;AAqBD,SAAgB,WAAW,CACzB,OAA0B,EAC1B,UAAuB,EAAE;IAEzB,OAAO,IAAI,cAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,OAAO,EAAE,CAAA;AAC7C,CAAC;AAED,iEAAiE;AACpD,QAAA,UAAU,GAAG,cAAc,CAAA;AAC3B,QAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAA;AAC5D,QAAA,WAAW,GAAG,eAAe,CAAA;AAC7B,QAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE;IAChD,IAAI,EAAE,eAAe;CACtB,CAAC,CAAA;AACW,QAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;IAC1C,MAAM,EAAE,cAAc;IACtB,OAAO,EAAE,eAAe;CACzB,CAAC,CAAA;AAEW,QAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;IACvC,IAAI,EAAE,KAAK;IACX,QAAQ;IACR,IAAI,EAAJ,YAAI;IACJ,UAAU;IACV,MAAM,EAAN,cAAM;IACN,cAAc;IACd,UAAU,EAAV,kBAAU;IACV,WAAW;IACX,OAAO,EAAP,eAAO;IACP,eAAe;IACf,WAAW,EAAX,mBAAW;IACX,IAAI,EAAJ,cAAI;IACJ,QAAQ,EAAR,uBAAQ;IACR,MAAM,EAAN,kBAAM;IACN,QAAQ,EAAR,oBAAQ;CACT,CAAC,CAAA;AACF,YAAI,CAAC,IAAI,GAAG,YAAI,CAAA","sourcesContent":["import { escape, unescape } from 'minimatch'\nimport { Minipass } from 'minipass'\nimport { Path } from 'path-scurry'\nimport type {\n GlobOptions,\n GlobOptionsWithFileTypesFalse,\n GlobOptionsWithFileTypesTrue,\n GlobOptionsWithFileTypesUnset,\n} from './glob.js'\nimport { Glob } from './glob.js'\nimport { hasMagic } from './has-magic.js'\n\nexport { escape, unescape } from 'minimatch'\nexport type {\n FSOption,\n Path,\n WalkOptions,\n WalkOptionsWithFileTypesTrue,\n WalkOptionsWithFileTypesUnset,\n} from 'path-scurry'\nexport { Glob } from './glob.js'\nexport type {\n GlobOptions,\n GlobOptionsWithFileTypesFalse,\n GlobOptionsWithFileTypesTrue,\n GlobOptionsWithFileTypesUnset,\n} from './glob.js'\nexport { hasMagic } from './has-magic.js'\nexport { Ignore } from './ignore.js'\nexport type { IgnoreLike } from './ignore.js'\nexport type { MatchStream } from './walker.js'\n\n/**\n * Syncronous form of {@link globStream}. Will read all the matches as fast as\n * you consume them, even all in a single tick if you consume them immediately,\n * but will still respond to backpressure if they're not consumed immediately.\n */\nexport function globStreamSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue,\n): Minipass\nexport function globStreamSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse,\n): Minipass\nexport function globStreamSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesUnset,\n): Minipass\nexport function globStreamSync(\n pattern: string | string[],\n options: GlobOptions,\n): Minipass | Minipass\nexport function globStreamSync(\n pattern: string | string[],\n options: GlobOptions = {},\n) {\n return new Glob(pattern, options).streamSync()\n}\n\n/**\n * Return a stream that emits all the strings or `Path` objects and\n * then emits `end` when completed.\n */\nexport function globStream(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse,\n): Minipass\nexport function globStream(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue,\n): Minipass\nexport function globStream(\n pattern: string | string[],\n options?: GlobOptionsWithFileTypesUnset | undefined,\n): Minipass\nexport function globStream(\n pattern: string | string[],\n options: GlobOptions,\n): Minipass | Minipass\nexport function globStream(\n pattern: string | string[],\n options: GlobOptions = {},\n) {\n return new Glob(pattern, options).stream()\n}\n\n/**\n * Synchronous form of {@link glob}\n */\nexport function globSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse,\n): string[]\nexport function globSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue,\n): Path[]\nexport function globSync(\n pattern: string | string[],\n options?: GlobOptionsWithFileTypesUnset | undefined,\n): string[]\nexport function globSync(\n pattern: string | string[],\n options: GlobOptions,\n): Path[] | string[]\nexport function globSync(\n pattern: string | string[],\n options: GlobOptions = {},\n) {\n return new Glob(pattern, options).walkSync()\n}\n\n/**\n * Perform an asynchronous glob search for the pattern(s) specified. Returns\n * [Path](https://isaacs.github.io/path-scurry/classes/PathBase) objects if the\n * {@link withFileTypes} option is set to `true`. See {@link GlobOptions} for\n * full option descriptions.\n */\nasync function glob_(\n pattern: string | string[],\n options?: GlobOptionsWithFileTypesUnset | undefined,\n): Promise\nasync function glob_(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue,\n): Promise\nasync function glob_(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse,\n): Promise\nasync function glob_(\n pattern: string | string[],\n options: GlobOptions,\n): Promise\nasync function glob_(\n pattern: string | string[],\n options: GlobOptions = {},\n) {\n return new Glob(pattern, options).walk()\n}\n\n/**\n * Return a sync iterator for walking glob pattern matches.\n */\nexport function globIterateSync(\n pattern: string | string[],\n options?: GlobOptionsWithFileTypesUnset | undefined,\n): Generator\nexport function globIterateSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue,\n): Generator\nexport function globIterateSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse,\n): Generator\nexport function globIterateSync(\n pattern: string | string[],\n options: GlobOptions,\n): Generator | Generator\nexport function globIterateSync(\n pattern: string | string[],\n options: GlobOptions = {},\n) {\n return new Glob(pattern, options).iterateSync()\n}\n\n/**\n * Return an async iterator for walking glob pattern matches.\n */\nexport function globIterate(\n pattern: string | string[],\n options?: GlobOptionsWithFileTypesUnset | undefined,\n): AsyncGenerator\nexport function globIterate(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue,\n): AsyncGenerator\nexport function globIterate(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse,\n): AsyncGenerator\nexport function globIterate(\n pattern: string | string[],\n options: GlobOptions,\n): AsyncGenerator | AsyncGenerator\nexport function globIterate(\n pattern: string | string[],\n options: GlobOptions = {},\n) {\n return new Glob(pattern, options).iterate()\n}\n\n// aliases: glob.sync.stream() glob.stream.sync() glob.sync() etc\nexport const streamSync = globStreamSync\nexport const stream = Object.assign(globStream, { sync: globStreamSync })\nexport const iterateSync = globIterateSync\nexport const iterate = Object.assign(globIterate, {\n sync: globIterateSync,\n})\nexport const sync = Object.assign(globSync, {\n stream: globStreamSync,\n iterate: globIterateSync,\n})\n\nexport const glob = Object.assign(glob_, {\n glob: glob_,\n globSync,\n sync,\n globStream,\n stream,\n globStreamSync,\n streamSync,\n globIterate,\n iterate,\n globIterateSync,\n iterateSync,\n Glob,\n hasMagic,\n escape,\n unescape,\n})\nglob.glob = glob\n"]}
\ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/commonjs/pattern.d.ts b/deps/npm/node_modules/glob/dist/commonjs/pattern.d.ts
index 109cc4e7a5d..9636df3b54d 100644
--- a/deps/npm/node_modules/glob/dist/commonjs/pattern.d.ts
+++ b/deps/npm/node_modules/glob/dist/commonjs/pattern.d.ts
@@ -1,4 +1,3 @@
-///
import { GLOBSTAR } from 'minimatch';
export type MMPattern = string | RegExp | typeof GLOBSTAR;
export type PatternList = [p: MMPattern, ...rest: MMPattern[]];
diff --git a/deps/npm/node_modules/glob/dist/commonjs/pattern.d.ts.map b/deps/npm/node_modules/glob/dist/commonjs/pattern.d.ts.map
index 39cd0620eb3..cdf32234631 100644
--- a/deps/npm/node_modules/glob/dist/commonjs/pattern.d.ts.map
+++ b/deps/npm/node_modules/glob/dist/commonjs/pattern.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"pattern.d.ts","sourceRoot":"","sources":["../../src/pattern.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,QAAQ,CAAA;AAGzD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;AAC9D,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,GAAG,IAAI,EAAE,SAAS,EAAE;CACrB,CAAA;AACD,MAAM,MAAM,gBAAgB,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;AACjE,MAAM,MAAM,mBAAmB,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;AAChE,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;AAMrD;;;GAGG;AACH,qBAAa,OAAO;;IAIlB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;gBAUrB,WAAW,EAAE,SAAS,EAAE,EACxB,QAAQ,EAAE,MAAM,EAAE,EAClB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,CAAC,QAAQ;IA6D3B;;OAEG;IACH,OAAO,IAAI,SAAS;IAIpB;;OAEG;IACH,QAAQ,IAAI,OAAO;IAGnB;;OAEG;IACH,UAAU,IAAI,OAAO;IAGrB;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACH,UAAU,IAAI,MAAM;IAUpB;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,IAAI,IAAI,OAAO,GAAG,IAAI;IAetB;;OAEG;IACH,KAAK,IAAI,OAAO;IAoBhB;;OAEG;IACH,OAAO,IAAI,OAAO;IAelB;;OAEG;IACH,UAAU,IAAI,OAAO;IAUrB;;OAEG;IACH,IAAI,IAAI,MAAM;IASd;;;OAGG;IACH,mBAAmB,IAAI,OAAO;IAQ9B;;OAEG;IACH,kBAAkB,IAAI,OAAO;CAM9B"}
\ No newline at end of file
+{"version":3,"file":"pattern.d.ts","sourceRoot":"","sources":["../../src/pattern.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,QAAQ,CAAA;AAGzD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;AAC9D,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,GAAG,IAAI,EAAE,SAAS,EAAE;CACrB,CAAA;AACD,MAAM,MAAM,gBAAgB,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;AACjE,MAAM,MAAM,mBAAmB,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;AAChE,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;AAMrD;;;GAGG;AACH,qBAAa,OAAO;;IAIlB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;gBAUrB,WAAW,EAAE,SAAS,EAAE,EACxB,QAAQ,EAAE,MAAM,EAAE,EAClB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,CAAC,QAAQ;IA6D3B;;OAEG;IACH,OAAO,IAAI,SAAS;IAIpB;;OAEG;IACH,QAAQ,IAAI,OAAO;IAGnB;;OAEG;IACH,UAAU,IAAI,OAAO;IAGrB;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACH,UAAU,IAAI,MAAM;IAUpB;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,IAAI,IAAI,OAAO,GAAG,IAAI;IAetB;;OAEG;IACH,KAAK,IAAI,OAAO;IAoBhB;;OAEG;IACH,OAAO,IAAI,OAAO;IAelB;;OAEG;IACH,UAAU,IAAI,OAAO;IAUrB;;OAEG;IACH,IAAI,IAAI,MAAM;IASd;;;OAGG;IACH,mBAAmB,IAAI,OAAO;IAQ9B;;OAEG;IACH,kBAAkB,IAAI,OAAO;CAM9B"}
\ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/commonjs/walker.d.ts b/deps/npm/node_modules/glob/dist/commonjs/walker.d.ts
index fb51b9ece57..499c8f49338 100644
--- a/deps/npm/node_modules/glob/dist/commonjs/walker.d.ts
+++ b/deps/npm/node_modules/glob/dist/commonjs/walker.d.ts
@@ -1,4 +1,3 @@
-///
/**
* Single-use utility classes to provide functionality to the {@link Glob}
* methods.
diff --git a/deps/npm/node_modules/glob/dist/commonjs/walker.d.ts.map b/deps/npm/node_modules/glob/dist/commonjs/walker.d.ts.map
index 832c3527086..769957bd59b 100644
--- a/deps/npm/node_modules/glob/dist/commonjs/walker.d.ts.map
+++ b/deps/npm/node_modules/glob/dist/commonjs/walker.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"walker.d.ts","sourceRoot":"","sources":["../../src/walker.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAClC,OAAO,EAAU,UAAU,EAAE,MAAM,aAAa,CAAA;AAOhD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE1C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;IAClB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,UAAU,CAAA;IACvC,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,SAAS,CAAC,EAAE,OAAO,CAAA;IAGnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAA;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B;AAED,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAAG;IAC9C,aAAa,EAAE,IAAI,CAAA;CACpB,CAAA;AACD,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG;IAC/C,aAAa,EAAE,KAAK,CAAA;CACrB,CAAA;AACD,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG;IAC/C,aAAa,CAAC,EAAE,SAAS,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,cAAc,IACzC,CAAC,SAAS,gBAAgB,GAAG,IAAI,GAC/B,CAAC,SAAS,iBAAiB,GAAG,MAAM,GACpC,CAAC,SAAS,iBAAiB,GAAG,MAAM,GACpC,IAAI,GAAG,MAAM,CAAA;AAEjB,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,cAAc,IAC1C,CAAC,SAAS,gBAAgB,GAAG,GAAG,CAAC,IAAI,CAAC,GACpC,CAAC,SAAS,iBAAiB,GAAG,GAAG,CAAC,MAAM,CAAC,GACzC,CAAC,SAAS,iBAAiB,GAAG,GAAG,CAAC,MAAM,CAAC,GACzC,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,CAAA;AAEtB,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,cAAc,IAAI,QAAQ,CAC1D,MAAM,CAAC,CAAC,CAAC,EACT,MAAM,CAAC,CAAC,CAAC,CACV,CAAA;AAUD;;GAEG;AACH,8BAAsB,QAAQ,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc;;IACtE,IAAI,EAAE,IAAI,CAAA;IACV,QAAQ,EAAE,OAAO,EAAE,CAAA;IACnB,IAAI,EAAE,CAAC,CAAA;IACP,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAkB;IACjC,MAAM,EAAE,OAAO,CAAQ;IACvB,OAAO,EAAE,OAAO,CAAQ;IAIxB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,mBAAmB,EAAE,OAAO,CAAA;gBAEhB,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAsCpD,KAAK;IAGL,MAAM;IAUN,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG;IAahB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IAqBpE,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS;IAgBrE,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS;IAmBzD,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI;IACtC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAE1C,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO;IA2BhC,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtE,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAK3D,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG;IAOvD,OAAO,CACL,MAAM,EAAE,IAAI,EACZ,QAAQ,EAAE,OAAO,EAAE,EACnB,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,MAAM,GAAG;IA2Cf,OAAO,CACL,MAAM,EAAE,IAAI,EACZ,OAAO,EAAE,IAAI,EAAE,EACf,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,MAAM,GAAG;IAsBf,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG;IAO3D,WAAW,CACT,MAAM,EAAE,IAAI,EACZ,QAAQ,EAAE,OAAO,EAAE,EACnB,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,MAAM,GAAG;IAqCf,WAAW,CACT,MAAM,EAAE,IAAI,EACZ,OAAO,EAAE,IAAI,EAAE,EACf,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,MAAM,GAAG;CAoBhB;AAED,qBAAa,UAAU,CACrB,CAAC,SAAS,cAAc,GAAG,cAAc,CACzC,SAAQ,QAAQ,CAAC,CAAC,CAAC;IACnB,OAAO,iBAAuB;gBAElB,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAIpD,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI;IAIvB,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAiBrC,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;CAW3B;AAED,qBAAa,UAAU,CACrB,CAAC,SAAS,cAAc,GAAG,cAAc,CACzC,SAAQ,QAAQ,CAAC,CAAC,CAAC;IACnB,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;gBAE3B,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAUpD,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI;IAK7B,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC;IAYxB,UAAU,IAAI,WAAW,CAAC,CAAC,CAAC;CAO7B"}
\ No newline at end of file
+{"version":3,"file":"walker.d.ts","sourceRoot":"","sources":["../../src/walker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAClC,OAAO,EAAU,UAAU,EAAE,MAAM,aAAa,CAAA;AAOhD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE1C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;IAClB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,UAAU,CAAA;IACvC,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,SAAS,CAAC,EAAE,OAAO,CAAA;IAGnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAA;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B;AAED,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAAG;IAC9C,aAAa,EAAE,IAAI,CAAA;CACpB,CAAA;AACD,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG;IAC/C,aAAa,EAAE,KAAK,CAAA;CACrB,CAAA;AACD,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG;IAC/C,aAAa,CAAC,EAAE,SAAS,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,cAAc,IACzC,CAAC,SAAS,gBAAgB,GAAG,IAAI,GAC/B,CAAC,SAAS,iBAAiB,GAAG,MAAM,GACpC,CAAC,SAAS,iBAAiB,GAAG,MAAM,GACpC,IAAI,GAAG,MAAM,CAAA;AAEjB,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,cAAc,IAC1C,CAAC,SAAS,gBAAgB,GAAG,GAAG,CAAC,IAAI,CAAC,GACpC,CAAC,SAAS,iBAAiB,GAAG,GAAG,CAAC,MAAM,CAAC,GACzC,CAAC,SAAS,iBAAiB,GAAG,GAAG,CAAC,MAAM,CAAC,GACzC,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,CAAA;AAEtB,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,cAAc,IAAI,QAAQ,CAC1D,MAAM,CAAC,CAAC,CAAC,EACT,MAAM,CAAC,CAAC,CAAC,CACV,CAAA;AAUD;;GAEG;AACH,8BAAsB,QAAQ,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc;;IACtE,IAAI,EAAE,IAAI,CAAA;IACV,QAAQ,EAAE,OAAO,EAAE,CAAA;IACnB,IAAI,EAAE,CAAC,CAAA;IACP,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAkB;IACjC,MAAM,EAAE,OAAO,CAAQ;IACvB,OAAO,EAAE,OAAO,CAAQ;IAIxB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,mBAAmB,EAAE,OAAO,CAAA;gBAEhB,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAsCpD,KAAK;IAGL,MAAM;IAUN,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG;IAahB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IAqBpE,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS;IAgBrE,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS;IAmBzD,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI;IACtC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAE1C,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO;IA2BhC,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtE,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAK3D,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG;IAOvD,OAAO,CACL,MAAM,EAAE,IAAI,EACZ,QAAQ,EAAE,OAAO,EAAE,EACnB,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,MAAM,GAAG;IA2Cf,OAAO,CACL,MAAM,EAAE,IAAI,EACZ,OAAO,EAAE,IAAI,EAAE,EACf,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,MAAM,GAAG;IAsBf,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG;IAO3D,WAAW,CACT,MAAM,EAAE,IAAI,EACZ,QAAQ,EAAE,OAAO,EAAE,EACnB,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,MAAM,GAAG;IAqCf,WAAW,CACT,MAAM,EAAE,IAAI,EACZ,OAAO,EAAE,IAAI,EAAE,EACf,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,MAAM,GAAG;CAoBhB;AAED,qBAAa,UAAU,CACrB,CAAC,SAAS,cAAc,GAAG,cAAc,CACzC,SAAQ,QAAQ,CAAC,CAAC,CAAC;IACnB,OAAO,iBAAuB;gBAElB,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAIpD,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI;IAIvB,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAiBrC,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;CAW3B;AAED,qBAAa,UAAU,CACrB,CAAC,SAAS,cAAc,GAAG,cAAc,CACzC,SAAQ,QAAQ,CAAC,CAAC,CAAC;IACnB,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;gBAE3B,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAUpD,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI;IAK7B,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC;IAYxB,UAAU,IAAI,WAAW,CAAC,CAAC,CAAC;CAO7B"}
\ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/esm/glob.d.ts b/deps/npm/node_modules/glob/dist/esm/glob.d.ts
index 457d5676cce..25262b3ddf4 100644
--- a/deps/npm/node_modules/glob/dist/esm/glob.d.ts
+++ b/deps/npm/node_modules/glob/dist/esm/glob.d.ts
@@ -1,4 +1,3 @@
-///
import { Minimatch } from 'minimatch';
import { Minipass } from 'minipass';
import { FSOption, Path, PathScurry } from 'path-scurry';
diff --git a/deps/npm/node_modules/glob/dist/esm/glob.d.ts.map b/deps/npm/node_modules/glob/dist/esm/glob.d.ts.map
index 3ec673a5fae..c32dc74c967 100644
--- a/deps/npm/node_modules/glob/dist/esm/glob.d.ts.map
+++ b/deps/npm/node_modules/glob/dist/esm/glob.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../../src/glob.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAoB,MAAM,WAAW,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAEnC,OAAO,EACL,QAAQ,EACR,IAAI,EACJ,UAAU,EAIX,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAGtC,MAAM,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;AACvC,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,CAAA;AAalE;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAE5B;;;;;OAKG;IACH,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;IAElB;;;;OAIG;IACH,GAAG,CAAC,EAAE,OAAO,CAAA;IAEb;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IAErB;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAEhB;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,UAAU,CAAA;IAEvC;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IAEvB;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IAEd;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IAEnB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAEhB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IAEf;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IAEf;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IAEpB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAA;IAE1B;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb;;;;;OAKG;IACH,MAAM,CAAC,EAAE,UAAU,CAAA;IAEnB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IAEd;;;OAGG;IACH,MAAM,CAAC,EAAE,WAAW,CAAA;IAEpB;;;;;;;;;;;;;OAaG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAE9B;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IAEvB;;;OAGG;IACH,EAAE,CAAC,EAAE,QAAQ,CAAA;IAEb;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IAEf;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IAEf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA0CG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B;AAED,MAAM,MAAM,4BAA4B,GAAG,WAAW,GAAG;IACvD,aAAa,EAAE,IAAI,CAAA;IAEnB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG,WAAW,GAAG;IACxD,aAAa,CAAC,EAAE,KAAK,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG,WAAW,GAAG;IACxD,aAAa,CAAC,EAAE,SAAS,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,MAAM,CAAC,IAAI,IACrB,IAAI,SAAS,4BAA4B,GAAG,IAAI,GAC9C,IAAI,SAAS,6BAA6B,GAAG,MAAM,GACnD,IAAI,SAAS,6BAA6B,GAAG,MAAM,GACnD,MAAM,GAAG,IAAI,CAAA;AACjB,MAAM,MAAM,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAA;AAE1C,MAAM,MAAM,SAAS,CAAC,IAAI,IACxB,IAAI,SAAS,4BAA4B,GAAG,IAAI,GAC9C,IAAI,SAAS,6BAA6B,GAAG,KAAK,GAClD,IAAI,SAAS,6BAA6B,GAAG,KAAK,GAClD,OAAO,CAAA;AAEX;;GAEG;AACH,qBAAa,IAAI,CAAC,IAAI,SAAS,WAAW,CAAE,YAAW,WAAW;IAChE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,OAAO,CAAA;IACZ,WAAW,EAAE,OAAO,CAAA;IACpB,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,UAAU,CAAA;IACvC,aAAa,EAAE,OAAO,CAAA;IACtB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,EAAE,OAAO,CAAA;IACd,UAAU,EAAE,OAAO,CAAA;IACnB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAA;IACzB,QAAQ,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,UAAU,CAAA;IAClB,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,oBAAoB,EAAE,OAAO,CAAA;IAC7B,aAAa,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;IAC9B,mBAAmB,EAAE,OAAO,CAAA;IAE5B;;OAEG;IACH,IAAI,EAAE,IAAI,CAAA;IAEV;;OAEG;IACH,QAAQ,EAAE,OAAO,EAAE,CAAA;IAEnB;;;;;;;;;;;OAWG;gBACS,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI;IA2HlD;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAoBpC;;OAEG;IACH,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBzB;;OAEG;IACH,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAc9C;;OAEG;IACH,UAAU,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAclD;;;OAGG;IACH,WAAW,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;IAGlD,CAAC,MAAM,CAAC,QAAQ,CAAC;IAIjB;;;OAGG;IACH,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;IAGnD,CAAC,MAAM,CAAC,aAAa,CAAC;CAGvB"}
\ No newline at end of file
+{"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../../src/glob.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAoB,MAAM,WAAW,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAEnC,OAAO,EACL,QAAQ,EACR,IAAI,EACJ,UAAU,EAIX,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAGtC,MAAM,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;AACvC,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,CAAA;AAalE;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAE5B;;;;;OAKG;IACH,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;IAElB;;;;OAIG;IACH,GAAG,CAAC,EAAE,OAAO,CAAA;IAEb;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IAErB;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAEhB;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,UAAU,CAAA;IAEvC;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IAEvB;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IAEd;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IAEnB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAEhB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IAEf;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IAEf;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IAEpB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAA;IAE1B;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb;;;;;OAKG;IACH,MAAM,CAAC,EAAE,UAAU,CAAA;IAEnB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IAEd;;;OAGG;IACH,MAAM,CAAC,EAAE,WAAW,CAAA;IAEpB;;;;;;;;;;;;;OAaG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAE9B;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IAEvB;;;OAGG;IACH,EAAE,CAAC,EAAE,QAAQ,CAAA;IAEb;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IAEf;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IAEf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA0CG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B;AAED,MAAM,MAAM,4BAA4B,GAAG,WAAW,GAAG;IACvD,aAAa,EAAE,IAAI,CAAA;IAEnB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG,WAAW,GAAG;IACxD,aAAa,CAAC,EAAE,KAAK,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG,WAAW,GAAG;IACxD,aAAa,CAAC,EAAE,SAAS,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,MAAM,CAAC,IAAI,IACrB,IAAI,SAAS,4BAA4B,GAAG,IAAI,GAC9C,IAAI,SAAS,6BAA6B,GAAG,MAAM,GACnD,IAAI,SAAS,6BAA6B,GAAG,MAAM,GACnD,MAAM,GAAG,IAAI,CAAA;AACjB,MAAM,MAAM,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAA;AAE1C,MAAM,MAAM,SAAS,CAAC,IAAI,IACxB,IAAI,SAAS,4BAA4B,GAAG,IAAI,GAC9C,IAAI,SAAS,6BAA6B,GAAG,KAAK,GAClD,IAAI,SAAS,6BAA6B,GAAG,KAAK,GAClD,OAAO,CAAA;AAEX;;GAEG;AACH,qBAAa,IAAI,CAAC,IAAI,SAAS,WAAW,CAAE,YAAW,WAAW;IAChE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,OAAO,CAAA;IACZ,WAAW,EAAE,OAAO,CAAA;IACpB,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,UAAU,CAAA;IACvC,aAAa,EAAE,OAAO,CAAA;IACtB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,EAAE,OAAO,CAAA;IACd,UAAU,EAAE,OAAO,CAAA;IACnB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAA;IACzB,QAAQ,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,UAAU,CAAA;IAClB,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,oBAAoB,EAAE,OAAO,CAAA;IAC7B,aAAa,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;IAC9B,mBAAmB,EAAE,OAAO,CAAA;IAE5B;;OAEG;IACH,IAAI,EAAE,IAAI,CAAA;IAEV;;OAEG;IACH,QAAQ,EAAE,OAAO,EAAE,CAAA;IAEnB;;;;;;;;;;;OAWG;gBACS,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI;IA2HlD;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAoBpC;;OAEG;IACH,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBzB;;OAEG;IACH,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAc9C;;OAEG;IACH,UAAU,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAclD;;;OAGG;IACH,WAAW,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;IAGlD,CAAC,MAAM,CAAC,QAAQ,CAAC;IAIjB;;;OAGG;IACH,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;IAGnD,CAAC,MAAM,CAAC,aAAa,CAAC;CAGvB"}
\ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/esm/ignore.d.ts b/deps/npm/node_modules/glob/dist/esm/ignore.d.ts
index 085319e9dd6..1893b16df87 100644
--- a/deps/npm/node_modules/glob/dist/esm/ignore.d.ts
+++ b/deps/npm/node_modules/glob/dist/esm/ignore.d.ts
@@ -1,4 +1,3 @@
-///
import { Minimatch, MinimatchOptions } from 'minimatch';
import { Path } from 'path-scurry';
import { GlobWalkerOpts } from './walker.js';
diff --git a/deps/npm/node_modules/glob/dist/esm/ignore.d.ts.map b/deps/npm/node_modules/glob/dist/esm/ignore.d.ts.map
index 82a7ac2a306..57d6ab6153d 100644
--- a/deps/npm/node_modules/glob/dist/esm/ignore.d.ts.map
+++ b/deps/npm/node_modules/glob/dist/esm/ignore.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"ignore.d.ts","sourceRoot":"","sources":["../../src/ignore.ts"],"names":[],"mappings":";AAKA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAElC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,OAAO,CAAA;IAC9B,eAAe,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,OAAO,CAAA;IACtC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;CAC/B;AAWD;;GAEG;AACH,qBAAa,MAAO,YAAW,UAAU;IACvC,QAAQ,EAAE,SAAS,EAAE,CAAA;IACrB,gBAAgB,EAAE,SAAS,EAAE,CAAA;IAC7B,QAAQ,EAAE,SAAS,EAAE,CAAA;IACrB,gBAAgB,EAAE,SAAS,EAAE,CAAA;IAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAA;IACzB,MAAM,EAAE,gBAAgB,CAAA;gBAGtB,OAAO,EAAE,MAAM,EAAE,EACjB,EACE,OAAO,EACP,MAAM,EACN,KAAK,EACL,UAAU,EACV,QAA0B,GAC3B,EAAE,cAAc;IAqBnB,GAAG,CAAC,GAAG,EAAE,MAAM;IAyCf,OAAO,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO;IAczB,eAAe,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO;CAWlC"}
\ No newline at end of file
+{"version":3,"file":"ignore.d.ts","sourceRoot":"","sources":["../../src/ignore.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAElC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,OAAO,CAAA;IAC9B,eAAe,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,OAAO,CAAA;IACtC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;CAC/B;AAWD;;GAEG;AACH,qBAAa,MAAO,YAAW,UAAU;IACvC,QAAQ,EAAE,SAAS,EAAE,CAAA;IACrB,gBAAgB,EAAE,SAAS,EAAE,CAAA;IAC7B,QAAQ,EAAE,SAAS,EAAE,CAAA;IACrB,gBAAgB,EAAE,SAAS,EAAE,CAAA;IAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAA;IACzB,MAAM,EAAE,gBAAgB,CAAA;gBAGtB,OAAO,EAAE,MAAM,EAAE,EACjB,EACE,OAAO,EACP,MAAM,EACN,KAAK,EACL,UAAU,EACV,QAA0B,GAC3B,EAAE,cAAc;IAqBnB,GAAG,CAAC,GAAG,EAAE,MAAM;IAyCf,OAAO,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO;IAczB,eAAe,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO;CAWlC"}
\ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/esm/index.d.ts b/deps/npm/node_modules/glob/dist/esm/index.d.ts
index 693ba2ab8e6..9c326ddc895 100644
--- a/deps/npm/node_modules/glob/dist/esm/index.d.ts
+++ b/deps/npm/node_modules/glob/dist/esm/index.d.ts
@@ -91,7 +91,7 @@ export declare const glob: typeof glob_ & {
iterateSync: typeof globIterateSync;
Glob: typeof Glob;
hasMagic: (pattern: string | string[], options?: GlobOptions) => boolean;
- escape: (s: string, { windowsPathsNoEscape, }?: Pick | undefined) => string;
- unescape: (s: string, { windowsPathsNoEscape, }?: Pick | undefined) => string;
+ escape: (s: string, { windowsPathsNoEscape, }?: Pick) => string;
+ unescape: (s: string, { windowsPathsNoEscape, }?: Pick) => string;
};
//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/esm/pattern.d.ts b/deps/npm/node_modules/glob/dist/esm/pattern.d.ts
index da675f9322c..9636df3b54d 100644
--- a/deps/npm/node_modules/glob/dist/esm/pattern.d.ts
+++ b/deps/npm/node_modules/glob/dist/esm/pattern.d.ts
@@ -1,4 +1,3 @@
-///
import { GLOBSTAR } from 'minimatch';
export type MMPattern = string | RegExp | typeof GLOBSTAR;
export type PatternList = [p: MMPattern, ...rest: MMPattern[]];
diff --git a/deps/npm/node_modules/glob/dist/esm/pattern.d.ts.map b/deps/npm/node_modules/glob/dist/esm/pattern.d.ts.map
index 39cd0620eb3..cdf32234631 100644
--- a/deps/npm/node_modules/glob/dist/esm/pattern.d.ts.map
+++ b/deps/npm/node_modules/glob/dist/esm/pattern.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"pattern.d.ts","sourceRoot":"","sources":["../../src/pattern.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,QAAQ,CAAA;AAGzD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;AAC9D,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,GAAG,IAAI,EAAE,SAAS,EAAE;CACrB,CAAA;AACD,MAAM,MAAM,gBAAgB,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;AACjE,MAAM,MAAM,mBAAmB,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;AAChE,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;AAMrD;;;GAGG;AACH,qBAAa,OAAO;;IAIlB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;gBAUrB,WAAW,EAAE,SAAS,EAAE,EACxB,QAAQ,EAAE,MAAM,EAAE,EAClB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,CAAC,QAAQ;IA6D3B;;OAEG;IACH,OAAO,IAAI,SAAS;IAIpB;;OAEG;IACH,QAAQ,IAAI,OAAO;IAGnB;;OAEG;IACH,UAAU,IAAI,OAAO;IAGrB;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACH,UAAU,IAAI,MAAM;IAUpB;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,IAAI,IAAI,OAAO,GAAG,IAAI;IAetB;;OAEG;IACH,KAAK,IAAI,OAAO;IAoBhB;;OAEG;IACH,OAAO,IAAI,OAAO;IAelB;;OAEG;IACH,UAAU,IAAI,OAAO;IAUrB;;OAEG;IACH,IAAI,IAAI,MAAM;IASd;;;OAGG;IACH,mBAAmB,IAAI,OAAO;IAQ9B;;OAEG;IACH,kBAAkB,IAAI,OAAO;CAM9B"}
\ No newline at end of file
+{"version":3,"file":"pattern.d.ts","sourceRoot":"","sources":["../../src/pattern.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,QAAQ,CAAA;AAGzD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;AAC9D,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,GAAG,IAAI,EAAE,SAAS,EAAE;CACrB,CAAA;AACD,MAAM,MAAM,gBAAgB,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;AACjE,MAAM,MAAM,mBAAmB,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;AAChE,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;AAMrD;;;GAGG;AACH,qBAAa,OAAO;;IAIlB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;gBAUrB,WAAW,EAAE,SAAS,EAAE,EACxB,QAAQ,EAAE,MAAM,EAAE,EAClB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,CAAC,QAAQ;IA6D3B;;OAEG;IACH,OAAO,IAAI,SAAS;IAIpB;;OAEG;IACH,QAAQ,IAAI,OAAO;IAGnB;;OAEG;IACH,UAAU,IAAI,OAAO;IAGrB;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACH,UAAU,IAAI,MAAM;IAUpB;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,IAAI,IAAI,OAAO,GAAG,IAAI;IAetB;;OAEG;IACH,KAAK,IAAI,OAAO;IAoBhB;;OAEG;IACH,OAAO,IAAI,OAAO;IAelB;;OAEG;IACH,UAAU,IAAI,OAAO;IAUrB;;OAEG;IACH,IAAI,IAAI,MAAM;IASd;;;OAGG;IACH,mBAAmB,IAAI,OAAO;IAQ9B;;OAEG;IACH,kBAAkB,IAAI,OAAO;CAM9B"}
\ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/esm/walker.d.ts b/deps/npm/node_modules/glob/dist/esm/walker.d.ts
index fcc7fad29a1..499c8f49338 100644
--- a/deps/npm/node_modules/glob/dist/esm/walker.d.ts
+++ b/deps/npm/node_modules/glob/dist/esm/walker.d.ts
@@ -1,4 +1,3 @@
-///
/**
* Single-use utility classes to provide functionality to the {@link Glob}
* methods.
diff --git a/deps/npm/node_modules/glob/dist/esm/walker.d.ts.map b/deps/npm/node_modules/glob/dist/esm/walker.d.ts.map
index 832c3527086..769957bd59b 100644
--- a/deps/npm/node_modules/glob/dist/esm/walker.d.ts.map
+++ b/deps/npm/node_modules/glob/dist/esm/walker.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"walker.d.ts","sourceRoot":"","sources":["../../src/walker.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAClC,OAAO,EAAU,UAAU,EAAE,MAAM,aAAa,CAAA;AAOhD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE1C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;IAClB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,UAAU,CAAA;IACvC,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,SAAS,CAAC,EAAE,OAAO,CAAA;IAGnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAA;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B;AAED,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAAG;IAC9C,aAAa,EAAE,IAAI,CAAA;CACpB,CAAA;AACD,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG;IAC/C,aAAa,EAAE,KAAK,CAAA;CACrB,CAAA;AACD,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG;IAC/C,aAAa,CAAC,EAAE,SAAS,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,cAAc,IACzC,CAAC,SAAS,gBAAgB,GAAG,IAAI,GAC/B,CAAC,SAAS,iBAAiB,GAAG,MAAM,GACpC,CAAC,SAAS,iBAAiB,GAAG,MAAM,GACpC,IAAI,GAAG,MAAM,CAAA;AAEjB,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,cAAc,IAC1C,CAAC,SAAS,gBAAgB,GAAG,GAAG,CAAC,IAAI,CAAC,GACpC,CAAC,SAAS,iBAAiB,GAAG,GAAG,CAAC,MAAM,CAAC,GACzC,CAAC,SAAS,iBAAiB,GAAG,GAAG,CAAC,MAAM,CAAC,GACzC,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,CAAA;AAEtB,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,cAAc,IAAI,QAAQ,CAC1D,MAAM,CAAC,CAAC,CAAC,EACT,MAAM,CAAC,CAAC,CAAC,CACV,CAAA;AAUD;;GAEG;AACH,8BAAsB,QAAQ,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc;;IACtE,IAAI,EAAE,IAAI,CAAA;IACV,QAAQ,EAAE,OAAO,EAAE,CAAA;IACnB,IAAI,EAAE,CAAC,CAAA;IACP,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAkB;IACjC,MAAM,EAAE,OAAO,CAAQ;IACvB,OAAO,EAAE,OAAO,CAAQ;IAIxB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,mBAAmB,EAAE,OAAO,CAAA;gBAEhB,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAsCpD,KAAK;IAGL,MAAM;IAUN,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG;IAahB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IAqBpE,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS;IAgBrE,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS;IAmBzD,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI;IACtC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAE1C,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO;IA2BhC,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtE,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAK3D,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG;IAOvD,OAAO,CACL,MAAM,EAAE,IAAI,EACZ,QAAQ,EAAE,OAAO,EAAE,EACnB,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,MAAM,GAAG;IA2Cf,OAAO,CACL,MAAM,EAAE,IAAI,EACZ,OAAO,EAAE,IAAI,EAAE,EACf,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,MAAM,GAAG;IAsBf,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG;IAO3D,WAAW,CACT,MAAM,EAAE,IAAI,EACZ,QAAQ,EAAE,OAAO,EAAE,EACnB,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,MAAM,GAAG;IAqCf,WAAW,CACT,MAAM,EAAE,IAAI,EACZ,OAAO,EAAE,IAAI,EAAE,EACf,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,MAAM,GAAG;CAoBhB;AAED,qBAAa,UAAU,CACrB,CAAC,SAAS,cAAc,GAAG,cAAc,CACzC,SAAQ,QAAQ,CAAC,CAAC,CAAC;IACnB,OAAO,iBAAuB;gBAElB,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAIpD,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI;IAIvB,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAiBrC,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;CAW3B;AAED,qBAAa,UAAU,CACrB,CAAC,SAAS,cAAc,GAAG,cAAc,CACzC,SAAQ,QAAQ,CAAC,CAAC,CAAC;IACnB,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;gBAE3B,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAUpD,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI;IAK7B,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC;IAYxB,UAAU,IAAI,WAAW,CAAC,CAAC,CAAC;CAO7B"}
\ No newline at end of file
+{"version":3,"file":"walker.d.ts","sourceRoot":"","sources":["../../src/walker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAClC,OAAO,EAAU,UAAU,EAAE,MAAM,aAAa,CAAA;AAOhD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE1C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;IAClB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,UAAU,CAAA;IACvC,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,SAAS,CAAC,EAAE,OAAO,CAAA;IAGnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAA;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B;AAED,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAAG;IAC9C,aAAa,EAAE,IAAI,CAAA;CACpB,CAAA;AACD,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG;IAC/C,aAAa,EAAE,KAAK,CAAA;CACrB,CAAA;AACD,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG;IAC/C,aAAa,CAAC,EAAE,SAAS,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,cAAc,IACzC,CAAC,SAAS,gBAAgB,GAAG,IAAI,GAC/B,CAAC,SAAS,iBAAiB,GAAG,MAAM,GACpC,CAAC,SAAS,iBAAiB,GAAG,MAAM,GACpC,IAAI,GAAG,MAAM,CAAA;AAEjB,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,cAAc,IAC1C,CAAC,SAAS,gBAAgB,GAAG,GAAG,CAAC,IAAI,CAAC,GACpC,CAAC,SAAS,iBAAiB,GAAG,GAAG,CAAC,MAAM,CAAC,GACzC,CAAC,SAAS,iBAAiB,GAAG,GAAG,CAAC,MAAM,CAAC,GACzC,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,CAAA;AAEtB,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,cAAc,IAAI,QAAQ,CAC1D,MAAM,CAAC,CAAC,CAAC,EACT,MAAM,CAAC,CAAC,CAAC,CACV,CAAA;AAUD;;GAEG;AACH,8BAAsB,QAAQ,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc;;IACtE,IAAI,EAAE,IAAI,CAAA;IACV,QAAQ,EAAE,OAAO,EAAE,CAAA;IACnB,IAAI,EAAE,CAAC,CAAA;IACP,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAkB;IACjC,MAAM,EAAE,OAAO,CAAQ;IACvB,OAAO,EAAE,OAAO,CAAQ;IAIxB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,mBAAmB,EAAE,OAAO,CAAA;gBAEhB,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAsCpD,KAAK;IAGL,MAAM;IAUN,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG;IAahB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IAqBpE,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS;IAgBrE,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS;IAmBzD,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI;IACtC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAE1C,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO;IA2BhC,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtE,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAK3D,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG;IAOvD,OAAO,CACL,MAAM,EAAE,IAAI,EACZ,QAAQ,EAAE,OAAO,EAAE,EACnB,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,MAAM,GAAG;IA2Cf,OAAO,CACL,MAAM,EAAE,IAAI,EACZ,OAAO,EAAE,IAAI,EAAE,EACf,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,MAAM,GAAG;IAsBf,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG;IAO3D,WAAW,CACT,MAAM,EAAE,IAAI,EACZ,QAAQ,EAAE,OAAO,EAAE,EACnB,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,MAAM,GAAG;IAqCf,WAAW,CACT,MAAM,EAAE,IAAI,EACZ,OAAO,EAAE,IAAI,EAAE,EACf,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,MAAM,GAAG;CAoBhB;AAED,qBAAa,UAAU,CACrB,CAAC,SAAS,cAAc,GAAG,cAAc,CACzC,SAAQ,QAAQ,CAAC,CAAC,CAAC;IACnB,OAAO,iBAAuB;gBAElB,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAIpD,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI;IAIvB,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAiBrC,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;CAW3B;AAED,qBAAa,UAAU,CACrB,CAAC,SAAS,cAAc,GAAG,cAAc,CACzC,SAAQ,QAAQ,CAAC,CAAC,CAAC;IACnB,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;gBAE3B,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAUpD,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI;IAK7B,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC;IAYxB,UAAU,IAAI,WAAW,CAAC,CAAC,CAAC;CAO7B"}
\ No newline at end of file
diff --git a/deps/npm/node_modules/glob/package.json b/deps/npm/node_modules/glob/package.json
index 644aece15b3..6d4893b5f32 100644
--- a/deps/npm/node_modules/glob/package.json
+++ b/deps/npm/node_modules/glob/package.json
@@ -5,7 +5,7 @@
},
"name": "glob",
"description": "the most correct and second fastest glob implementation in JavaScript",
- "version": "10.5.0",
+ "version": "10.4.5",
"type": "module",
"tshy": {
"main": true,
diff --git a/deps/npm/node_modules/jackspeak/dist/commonjs/index.js b/deps/npm/node_modules/jackspeak/dist/commonjs/index.js
index b0e016d175a..f7fc9cb69a2 100644
--- a/deps/npm/node_modules/jackspeak/dist/commonjs/index.js
+++ b/deps/npm/node_modules/jackspeak/dist/commonjs/index.js
@@ -501,7 +501,7 @@ class Jack {
cause = { name: field, found: value, validOptions: validOptions };
}
if (valid && !valid(value)) {
- cause ??= { name: field, found: value };
+ cause = cause || { name: field, found: value };
}
if (cause) {
throw new Error(`Invalid value provided for --${field}: ${JSON.stringify(value)}`, { cause });
@@ -565,7 +565,7 @@ class Jack {
};
}
if (config.validate && !config.validate(value)) {
- cause ??= { name: field, found: value };
+ cause = cause || { name: field, found: value };
}
if (cause) {
throw new Error(`Invalid config value for ${field}: ${value}`, {
diff --git a/deps/npm/node_modules/jackspeak/dist/esm/index.js b/deps/npm/node_modules/jackspeak/dist/esm/index.js
index 8eef5b4e8f5..78fdfa81554 100644
--- a/deps/npm/node_modules/jackspeak/dist/esm/index.js
+++ b/deps/npm/node_modules/jackspeak/dist/esm/index.js
@@ -493,7 +493,7 @@ export class Jack {
cause = { name: field, found: value, validOptions: validOptions };
}
if (valid && !valid(value)) {
- cause ??= { name: field, found: value };
+ cause = cause || { name: field, found: value };
}
if (cause) {
throw new Error(`Invalid value provided for --${field}: ${JSON.stringify(value)}`, { cause });
@@ -557,7 +557,7 @@ export class Jack {
};
}
if (config.validate && !config.validate(value)) {
- cause ??= { name: field, found: value };
+ cause = cause || { name: field, found: value };
}
if (cause) {
throw new Error(`Invalid config value for ${field}: ${value}`, {
diff --git a/deps/npm/node_modules/jackspeak/package.json b/deps/npm/node_modules/jackspeak/package.json
index f9f74306733..51eaabdf354 100644
--- a/deps/npm/node_modules/jackspeak/package.json
+++ b/deps/npm/node_modules/jackspeak/package.json
@@ -1,6 +1,9 @@
{
"name": "jackspeak",
- "version": "3.4.0",
+ "publishConfig": {
+ "tag": "v3-legacy"
+ },
+ "version": "3.4.3",
"description": "A very strict and proper argument parser.",
"tshy": {
"main": true,
@@ -66,9 +69,6 @@
"dependencies": {
"@isaacs/cliui": "^8.0.2"
},
- "engines": {
- "node": ">=14"
- },
"funding": {
"url": "https://github.com/sponsors/isaacs"
},
diff --git a/deps/npm/node_modules/libnpmaccess/package.json b/deps/npm/node_modules/libnpmaccess/package.json
index 64a4af0bee1..b9d92e4eda6 100644
--- a/deps/npm/node_modules/libnpmaccess/package.json
+++ b/deps/npm/node_modules/libnpmaccess/package.json
@@ -6,18 +6,19 @@
"license": "ISC",
"main": "lib/index.js",
"scripts": {
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
"test": "tap",
"postlint": "template-oss-check",
- "lintfix": "npm run lint -- --fix",
+ "lintfix": "npm run eslint -- --fix",
"snap": "tap",
"posttest": "npm run lint",
- "template-oss-apply": "template-oss-apply --force"
+ "template-oss-apply": "template-oss-apply --force",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
"@npmcli/mock-registry": "^1.0.0",
- "@npmcli/template-oss": "4.22.0",
+ "@npmcli/template-oss": "4.23.3",
"nock": "^13.3.3",
"tap": "^16.3.8"
},
@@ -41,7 +42,7 @@
],
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.22.0",
+ "version": "4.23.3",
"content": "../../scripts/template-oss/index.js"
},
"tap": {
diff --git a/deps/npm/node_modules/libnpmdiff/package.json b/deps/npm/node_modules/libnpmdiff/package.json
index f1c28fd1735..0e6d23d54d1 100644
--- a/deps/npm/node_modules/libnpmdiff/package.json
+++ b/deps/npm/node_modules/libnpmdiff/package.json
@@ -32,17 +32,18 @@
],
"license": "ISC",
"scripts": {
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
- "lintfix": "npm run lint -- --fix",
+ "lint": "npm run eslint",
+ "lintfix": "npm run eslint -- --fix",
"test": "tap",
"posttest": "npm run lint",
"snap": "tap",
"postlint": "template-oss-check",
- "template-oss-apply": "template-oss-apply --force"
+ "template-oss-apply": "template-oss-apply --force",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.22.0",
+ "@npmcli/template-oss": "4.23.3",
"tap": "^16.3.8"
},
"dependencies": {
@@ -57,7 +58,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.22.0",
+ "version": "4.23.3",
"content": "../../scripts/template-oss/index.js"
},
"tap": {
diff --git a/deps/npm/node_modules/libnpmexec/lib/index.js b/deps/npm/node_modules/libnpmexec/lib/index.js
index 3d9d24469ac..8344471696e 100644
--- a/deps/npm/node_modules/libnpmexec/lib/index.js
+++ b/deps/npm/node_modules/libnpmexec/lib/index.js
@@ -202,14 +202,19 @@ const exec = async (opts) => {
args[0] = getBinFromManifest(commandManifest)
if (needInstall.length > 0 && globalPath) {
- // See if the package is installed globally, and run the translated bin
+ // See if the package is installed globally. If it is, run the translated bin
const globalArb = new Arborist({ ...flatOptions, path: globalPath, global: true })
- const globalTree = await globalArb.loadActual()
- const { manifest: globalManifest } =
- await missingFromTree({ spec, tree: globalTree, flatOptions, shallow: true })
- if (!globalManifest && await fileExists(`${globalBin}/${args[0]}`)) {
- binPaths.push(globalBin)
- return await run()
+ const globalTree = await globalArb.loadActual().catch(() => {
+ log.verbose(`Could not read global path ${globalPath}, ignoring`)
+ return null
+ })
+ if (globalTree) {
+ const { manifest: globalManifest } =
+ await missingFromTree({ spec, tree: globalTree, flatOptions, shallow: true })
+ if (!globalManifest && await fileExists(`${globalBin}/${args[0]}`)) {
+ binPaths.push(globalBin)
+ return await run()
+ }
}
}
}
diff --git a/deps/npm/node_modules/libnpmexec/package.json b/deps/npm/node_modules/libnpmexec/package.json
index 15950126638..627af537b42 100644
--- a/deps/npm/node_modules/libnpmexec/package.json
+++ b/deps/npm/node_modules/libnpmexec/package.json
@@ -1,6 +1,6 @@
{
"name": "libnpmexec",
- "version": "8.1.3",
+ "version": "8.1.4",
"files": [
"bin/",
"lib/"
@@ -33,13 +33,14 @@
],
"license": "ISC",
"scripts": {
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
"posttest": "npm run lint",
"test": "tap",
"snap": "tap",
"postlint": "template-oss-check",
- "lintfix": "npm run lint -- --fix",
- "template-oss-apply": "template-oss-apply --force"
+ "lintfix": "npm run eslint -- --fix",
+ "template-oss-apply": "template-oss-apply --force",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"tap": {
"files": "test/*.js",
@@ -51,7 +52,7 @@
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
"@npmcli/mock-registry": "^1.0.0",
- "@npmcli/template-oss": "4.22.0",
+ "@npmcli/template-oss": "4.23.3",
"bin-links": "^4.0.4",
"chalk": "^5.2.0",
"just-extend": "^6.2.0",
@@ -72,7 +73,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.22.0",
+ "version": "4.23.3",
"content": "../../scripts/template-oss/index.js"
}
}
diff --git a/deps/npm/node_modules/libnpmfund/package.json b/deps/npm/node_modules/libnpmfund/package.json
index 3ce8a899ccb..03fe5f9b4e5 100644
--- a/deps/npm/node_modules/libnpmfund/package.json
+++ b/deps/npm/node_modules/libnpmfund/package.json
@@ -31,17 +31,18 @@
],
"license": "ISC",
"scripts": {
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
- "lintfix": "npm run lint -- --fix",
+ "lint": "npm run eslint",
+ "lintfix": "npm run eslint -- --fix",
"posttest": "npm run lint",
"test": "tap",
"snap": "tap",
"postlint": "template-oss-check",
- "template-oss-apply": "template-oss-apply --force"
+ "template-oss-apply": "template-oss-apply --force",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.22.0",
+ "@npmcli/template-oss": "4.23.3",
"tap": "^16.3.8"
},
"dependencies": {
@@ -52,7 +53,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.22.0",
+ "version": "4.23.3",
"content": "../../scripts/template-oss/index.js"
},
"tap": {
diff --git a/deps/npm/node_modules/libnpmhook/package.json b/deps/npm/node_modules/libnpmhook/package.json
index 098762c037d..741cf8a975b 100644
--- a/deps/npm/node_modules/libnpmhook/package.json
+++ b/deps/npm/node_modules/libnpmhook/package.json
@@ -9,12 +9,13 @@
],
"scripts": {
"test": "tap",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
"postlint": "template-oss-check",
- "lintfix": "npm run lint -- --fix",
+ "lintfix": "npm run eslint -- --fix",
"snap": "tap",
"posttest": "npm run lint",
- "template-oss-apply": "template-oss-apply --force"
+ "template-oss-apply": "template-oss-apply --force",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"repository": {
"type": "git",
@@ -35,7 +36,7 @@
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.22.0",
+ "@npmcli/template-oss": "4.23.3",
"nock": "^13.3.3",
"tap": "^16.3.8"
},
@@ -44,7 +45,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.22.0",
+ "version": "4.23.3",
"content": "../../scripts/template-oss/index.js"
},
"tap": {
diff --git a/deps/npm/node_modules/libnpmorg/package.json b/deps/npm/node_modules/libnpmorg/package.json
index aa3440de583..1076474eb97 100644
--- a/deps/npm/node_modules/libnpmorg/package.json
+++ b/deps/npm/node_modules/libnpmorg/package.json
@@ -14,13 +14,14 @@
],
"license": "ISC",
"scripts": {
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
"test": "tap",
"posttest": "npm run lint",
"postlint": "template-oss-check",
- "lintfix": "npm run lint -- --fix",
+ "lintfix": "npm run eslint -- --fix",
"snap": "tap",
- "template-oss-apply": "template-oss-apply --force"
+ "template-oss-apply": "template-oss-apply --force",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"files": [
"bin/",
@@ -28,7 +29,7 @@
],
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.22.0",
+ "@npmcli/template-oss": "4.23.3",
"minipass": "^7.1.1",
"nock": "^13.3.3",
"tap": "^16.3.8"
@@ -49,7 +50,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.22.0",
+ "version": "4.23.3",
"content": "../../scripts/template-oss/index.js"
},
"tap": {
diff --git a/deps/npm/node_modules/libnpmpack/package.json b/deps/npm/node_modules/libnpmpack/package.json
index 03fc3cda5cb..588921bbfa9 100644
--- a/deps/npm/node_modules/libnpmpack/package.json
+++ b/deps/npm/node_modules/libnpmpack/package.json
@@ -13,17 +13,18 @@
],
"license": "ISC",
"scripts": {
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
"test": "tap",
"posttest": "npm run lint",
"postlint": "template-oss-check",
- "lintfix": "npm run lint -- --fix",
+ "lintfix": "npm run eslint -- --fix",
"snap": "tap",
- "template-oss-apply": "template-oss-apply --force"
+ "template-oss-apply": "template-oss-apply --force",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.22.0",
+ "@npmcli/template-oss": "4.23.3",
"nock": "^13.3.3",
"spawk": "^1.7.1",
"tap": "^16.3.8"
@@ -46,7 +47,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.22.0",
+ "version": "4.23.3",
"content": "../../scripts/template-oss/index.js"
},
"tap": {
diff --git a/deps/npm/node_modules/libnpmpublish/package.json b/deps/npm/node_modules/libnpmpublish/package.json
index 87fc8215dca..e19d82dd349 100644
--- a/deps/npm/node_modules/libnpmpublish/package.json
+++ b/deps/npm/node_modules/libnpmpublish/package.json
@@ -14,19 +14,20 @@
],
"license": "ISC",
"scripts": {
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
- "lintfix": "npm run lint -- --fix",
+ "lint": "npm run eslint",
+ "lintfix": "npm run eslint -- --fix",
"test": "tap",
"posttest": "npm run lint",
"postlint": "template-oss-check",
"snap": "tap",
- "template-oss-apply": "template-oss-apply --force"
+ "template-oss-apply": "template-oss-apply --force",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
"@npmcli/mock-globals": "^1.0.0",
"@npmcli/mock-registry": "^1.0.0",
- "@npmcli/template-oss": "4.22.0",
+ "@npmcli/template-oss": "4.23.3",
"nock": "^13.3.3",
"tap": "^16.3.8"
},
@@ -52,7 +53,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.22.0",
+ "version": "4.23.3",
"content": "../../scripts/template-oss/index.js"
},
"tap": {
diff --git a/deps/npm/node_modules/libnpmsearch/package.json b/deps/npm/node_modules/libnpmsearch/package.json
index 795a6ae0768..d43aaa4a454 100644
--- a/deps/npm/node_modules/libnpmsearch/package.json
+++ b/deps/npm/node_modules/libnpmsearch/package.json
@@ -18,15 +18,16 @@
"scripts": {
"posttest": "npm run lint",
"test": "tap",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
"postlint": "template-oss-check",
- "lintfix": "npm run lint -- --fix",
+ "lintfix": "npm run eslint -- --fix",
"snap": "tap",
- "template-oss-apply": "template-oss-apply --force"
+ "template-oss-apply": "template-oss-apply --force",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.22.0",
+ "@npmcli/template-oss": "4.23.3",
"nock": "^13.3.3",
"tap": "^16.3.8"
},
@@ -45,7 +46,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.22.0",
+ "version": "4.23.3",
"content": "../../scripts/template-oss/index.js"
},
"tap": {
diff --git a/deps/npm/node_modules/libnpmteam/package.json b/deps/npm/node_modules/libnpmteam/package.json
index 4900435c5b2..84876996118 100644
--- a/deps/npm/node_modules/libnpmteam/package.json
+++ b/deps/npm/node_modules/libnpmteam/package.json
@@ -6,17 +6,18 @@
"license": "ISC",
"main": "lib/index.js",
"scripts": {
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
"test": "tap",
"posttest": "npm run lint",
"postlint": "template-oss-check",
- "lintfix": "npm run lint -- --fix",
+ "lintfix": "npm run eslint -- --fix",
"snap": "tap",
- "template-oss-apply": "template-oss-apply --force"
+ "template-oss-apply": "template-oss-apply --force",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.22.0",
+ "@npmcli/template-oss": "4.23.3",
"nock": "^13.3.3",
"tap": "^16.3.8"
},
@@ -39,7 +40,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.22.0",
+ "version": "4.23.3",
"content": "../../scripts/template-oss/index.js"
},
"tap": {
diff --git a/deps/npm/node_modules/libnpmversion/package.json b/deps/npm/node_modules/libnpmversion/package.json
index 3f251e4b636..ccfe5a05cb3 100644
--- a/deps/npm/node_modules/libnpmversion/package.json
+++ b/deps/npm/node_modules/libnpmversion/package.json
@@ -15,13 +15,14 @@
"author": "GitHub Inc.",
"license": "ISC",
"scripts": {
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
"test": "tap",
"posttest": "npm run lint",
"snap": "tap",
"postlint": "template-oss-check",
- "lintfix": "npm run lint -- --fix",
- "template-oss-apply": "template-oss-apply --force"
+ "lintfix": "npm run eslint -- --fix",
+ "template-oss-apply": "template-oss-apply --force",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"tap": {
"coverage-map": "map.js",
@@ -32,7 +33,7 @@
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.22.0",
+ "@npmcli/template-oss": "4.23.3",
"require-inject": "^1.4.4",
"tap": "^16.3.8"
},
@@ -48,7 +49,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.22.0",
+ "version": "4.23.3",
"content": "../../scripts/template-oss/index.js"
}
}
diff --git a/deps/npm/node_modules/lru-cache/dist/commonjs/index.js b/deps/npm/node_modules/lru-cache/dist/commonjs/index.js
index e1ef9dbf7b8..9df0f71fcfb 100644
--- a/deps/npm/node_modules/lru-cache/dist/commonjs/index.js
+++ b/deps/npm/node_modules/lru-cache/dist/commonjs/index.js
@@ -130,21 +130,26 @@ class Stack {
/**
* Default export, the thing you're using this module to get.
*
- * All properties from the options object (with the exception of
- * {@link OptionsBase.max} and {@link OptionsBase.maxSize}) are added as
- * normal public members. (`max` and `maxBase` are read-only getters.)
- * Changing any of these will alter the defaults for subsequent method calls,
- * but is otherwise safe.
+ * The `K` and `V` types define the key and value types, respectively. The
+ * optional `FC` type defines the type of the `context` object passed to
+ * `cache.fetch()` and `cache.memo()`.
+ *
+ * Keys and values **must not** be `null` or `undefined`.
+ *
+ * All properties from the options object (with the exception of `max`,
+ * `maxSize`, `fetchMethod`, `memoMethod`, `dispose` and `disposeAfter`) are
+ * added as normal public members. (The listed options are read-only getters.)
+ *
+ * Changing any of these will alter the defaults for subsequent method calls.
*/
class LRUCache {
- // properties coming in from the options of these, only max and maxSize
- // really *need* to be protected. The rest can be modified, as they just
- // set defaults for various methods.
+ // options that cannot be changed without disaster
#max;
#maxSize;
#dispose;
#disposeAfter;
#fetchMethod;
+ #memoMethod;
/**
* {@link LRUCache.OptionsBase.ttl}
*/
@@ -290,6 +295,9 @@ class LRUCache {
get fetchMethod() {
return this.#fetchMethod;
}
+ get memoMethod() {
+ return this.#memoMethod;
+ }
/**
* {@link LRUCache.OptionsBase.dispose} (read-only)
*/
@@ -303,7 +311,7 @@ class LRUCache {
return this.#disposeAfter;
}
constructor(options) {
- const { max = 0, ttl, ttlResolution = 1, ttlAutopurge, updateAgeOnGet, updateAgeOnHas, allowStale, dispose, disposeAfter, noDisposeOnSet, noUpdateTTL, maxSize = 0, maxEntrySize = 0, sizeCalculation, fetchMethod, noDeleteOnFetchRejection, noDeleteOnStaleGet, allowStaleOnFetchRejection, allowStaleOnFetchAbort, ignoreFetchAbort, } = options;
+ const { max = 0, ttl, ttlResolution = 1, ttlAutopurge, updateAgeOnGet, updateAgeOnHas, allowStale, dispose, disposeAfter, noDisposeOnSet, noUpdateTTL, maxSize = 0, maxEntrySize = 0, sizeCalculation, fetchMethod, memoMethod, noDeleteOnFetchRejection, noDeleteOnStaleGet, allowStaleOnFetchRejection, allowStaleOnFetchAbort, ignoreFetchAbort, } = options;
if (max !== 0 && !isPosInt(max)) {
throw new TypeError('max option must be a nonnegative integer');
}
@@ -323,6 +331,11 @@ class LRUCache {
throw new TypeError('sizeCalculation set to non-function');
}
}
+ if (memoMethod !== undefined &&
+ typeof memoMethod !== 'function') {
+ throw new TypeError('memoMethod must be a function if defined');
+ }
+ this.#memoMethod = memoMethod;
if (fetchMethod !== undefined &&
typeof fetchMethod !== 'function') {
throw new TypeError('fetchMethod must be a function if specified');
@@ -401,7 +414,8 @@ class LRUCache {
}
}
/**
- * Return the remaining TTL time for a given entry key
+ * Return the number of ms left in the item's TTL. If item is not in cache,
+ * returns `0`. Returns `Infinity` if item is in cache without a defined TTL.
*/
getRemainingTTL(key) {
return this.#keyMap.has(key) ? Infinity : 0;
@@ -417,7 +431,7 @@ class LRUCache {
if (ttl !== 0 && this.ttlAutopurge) {
const t = setTimeout(() => {
if (this.#isStale(index)) {
- this.delete(this.#keyList[index]);
+ this.#delete(this.#keyList[index], 'expire');
}
}, ttl + 1);
// unref() not supported on all platforms
@@ -674,13 +688,14 @@ class LRUCache {
return this.entries();
}
/**
- * A String value that is used in the creation of the default string description of an object.
- * Called by the built-in method Object.prototype.toString.
+ * A String value that is used in the creation of the default string
+ * description of an object. Called by the built-in method
+ * `Object.prototype.toString`.
*/
[Symbol.toStringTag] = 'LRUCache';
/**
* Find a value for which the supplied fn method returns a truthy value,
- * similar to Array.find(). fn is called as fn(value, key, cache).
+ * similar to `Array.find()`. fn is called as `fn(value, key, cache)`.
*/
find(fn, getOptions = {}) {
for (const i of this.#indexes()) {
@@ -696,10 +711,15 @@ class LRUCache {
}
}
/**
- * Call the supplied function on each item in the cache, in order from
- * most recently used to least recently used. fn is called as
- * fn(value, key, cache). Does not update age or recenty of use.
- * Does not iterate over stale values.
+ * Call the supplied function on each item in the cache, in order from most
+ * recently used to least recently used.
+ *
+ * `fn` is called as `fn(value, key, cache)`.
+ *
+ * If `thisp` is provided, function will be called in the `this`-context of
+ * the provided object, or the cache if no `thisp` object is provided.
+ *
+ * Does not update age or recenty of use, or iterate over stale values.
*/
forEach(fn, thisp = this) {
for (const i of this.#indexes()) {
@@ -735,7 +755,7 @@ class LRUCache {
let deleted = false;
for (const i of this.#rindexes({ allowStale: true })) {
if (this.#isStale(i)) {
- this.delete(this.#keyList[i]);
+ this.#delete(this.#keyList[i], 'expire');
deleted = true;
}
}
@@ -743,9 +763,15 @@ class LRUCache {
}
/**
* Get the extended info about a given entry, to get its value, size, and
- * TTL info simultaneously. Like {@link LRUCache#dump}, but just for a
- * single key. Always returns stale values, if their info is found in the
- * cache, so be sure to check for expired TTLs if relevant.
+ * TTL info simultaneously. Returns `undefined` if the key is not present.
+ *
+ * Unlike {@link LRUCache#dump}, which is designed to be portable and survive
+ * serialization, the `start` value is always the current timestamp, and the
+ * `ttl` is a calculated remaining time to live (negative if expired).
+ *
+ * Always returns stale values, if their info is found in the cache, so be
+ * sure to check for expirations (ie, a negative {@link LRUCache.Entry#ttl})
+ * if relevant.
*/
info(key) {
const i = this.#keyMap.get(key);
@@ -774,7 +800,16 @@ class LRUCache {
}
/**
* Return an array of [key, {@link LRUCache.Entry}] tuples which can be
- * passed to cache.load()
+ * passed to {@link LRLUCache#load}.
+ *
+ * The `start` fields are calculated relative to a portable `Date.now()`
+ * timestamp, even if `performance.now()` is available.
+ *
+ * Stale entries are always included in the `dump`, even if
+ * {@link LRUCache.OptionsBase.allowStale} is false.
+ *
+ * Note: this returns an actual array, not a generator, so it can be more
+ * easily passed around.
*/
dump() {
const arr = [];
@@ -803,8 +838,12 @@ class LRUCache {
}
/**
* Reset the cache and load in the items in entries in the order listed.
- * Note that the shape of the resulting cache may be different if the
- * same options are not used in both caches.
+ *
+ * The shape of the resulting cache may be different if the same options are
+ * not used in both caches.
+ *
+ * The `start` fields are assumed to be calculated relative to a portable
+ * `Date.now()` timestamp, even if `performance.now()` is available.
*/
load(arr) {
this.clear();
@@ -827,6 +866,30 @@ class LRUCache {
*
* Note: if `undefined` is specified as a value, this is an alias for
* {@link LRUCache#delete}
+ *
+ * Fields on the {@link LRUCache.SetOptions} options param will override
+ * their corresponding values in the constructor options for the scope
+ * of this single `set()` operation.
+ *
+ * If `start` is provided, then that will set the effective start
+ * time for the TTL calculation. Note that this must be a previous
+ * value of `performance.now()` if supported, or a previous value of
+ * `Date.now()` if not.
+ *
+ * Options object may also include `size`, which will prevent
+ * calling the `sizeCalculation` function and just use the specified
+ * number if it is a positive integer, and `noDisposeOnSet` which
+ * will prevent calling a `dispose` function in the case of
+ * overwrites.
+ *
+ * If the `size` (or return value of `sizeCalculation`) for a given
+ * entry is greater than `maxEntrySize`, then the item will not be
+ * added to the cache.
+ *
+ * Will update the recency of the entry.
+ *
+ * If the value is `undefined`, then this is an alias for
+ * `cache.delete(key)`. `undefined` is never stored in the cache.
*/
set(k, v, setOptions = {}) {
if (v === undefined) {
@@ -844,7 +907,7 @@ class LRUCache {
status.maxEntrySizeExceeded = true;
}
// have to delete, in case something is there already.
- this.delete(k);
+ this.#delete(k, 'set');
return this;
}
let index = this.#size === 0 ? undefined : this.#keyMap.get(k);
@@ -996,6 +1059,14 @@ class LRUCache {
* Will return false if the item is stale, even though it is technically
* in the cache.
*
+ * Check if a key is in the cache, without updating the recency of
+ * use. Age is updated if {@link LRUCache.OptionsBase.updateAgeOnHas} is set
+ * to `true` in either the options or the constructor.
+ *
+ * Will return `false` if the item is stale, even though it is technically in
+ * the cache. The difference can be determined (if it matters) by using a
+ * `status` argument, and inspecting the `has` field.
+ *
* Will not update item age unless
* {@link LRUCache.OptionsBase.updateAgeOnHas} is set.
*/
@@ -1087,7 +1158,7 @@ class LRUCache {
this.#valList[index] = bf.__staleWhileFetching;
}
else {
- this.delete(k);
+ this.#delete(k, 'fetch');
}
}
else {
@@ -1116,7 +1187,7 @@ class LRUCache {
// the stale value is not removed from the cache when the fetch fails.
const del = !noDelete || bf.__staleWhileFetching === undefined;
if (del) {
- this.delete(k);
+ this.#delete(k, 'fetch');
}
else if (!allowStaleAborted) {
// still replace the *promise* with the stale value,
@@ -1262,6 +1333,28 @@ class LRUCache {
return staleVal ? p.__staleWhileFetching : (p.__returned = p);
}
}
+ async forceFetch(k, fetchOptions = {}) {
+ const v = await this.fetch(k, fetchOptions);
+ if (v === undefined)
+ throw new Error('fetch() returned undefined');
+ return v;
+ }
+ memo(k, memoOptions = {}) {
+ const memoMethod = this.#memoMethod;
+ if (!memoMethod) {
+ throw new Error('no memoMethod provided to constructor');
+ }
+ const { context, forceRefresh, ...options } = memoOptions;
+ const v = this.get(k, options);
+ if (!forceRefresh && v !== undefined)
+ return v;
+ const vv = memoMethod(k, v, {
+ options,
+ context,
+ });
+ this.set(k, vv, options);
+ return vv;
+ }
/**
* Return a value from the cache. Will update the recency of the cache
* entry found.
@@ -1282,7 +1375,7 @@ class LRUCache {
// delete only if not an in-flight background fetch
if (!fetching) {
if (!noDeleteOnStaleGet) {
- this.delete(k);
+ this.#delete(k, 'expire');
}
if (status && allowStale)
status.returnedStale = true;
@@ -1345,16 +1438,20 @@ class LRUCache {
}
/**
* Deletes a key out of the cache.
+ *
* Returns true if the key was deleted, false otherwise.
*/
delete(k) {
+ return this.#delete(k, 'delete');
+ }
+ #delete(k, reason) {
let deleted = false;
if (this.#size !== 0) {
const index = this.#keyMap.get(k);
if (index !== undefined) {
deleted = true;
if (this.#size === 1) {
- this.clear();
+ this.#clear(reason);
}
else {
this.#removeItemSize(index);
@@ -1364,10 +1461,10 @@ class LRUCache {
}
else if (this.#hasDispose || this.#hasDisposeAfter) {
if (this.#hasDispose) {
- this.#dispose?.(v, k, 'delete');
+ this.#dispose?.(v, k, reason);
}
if (this.#hasDisposeAfter) {
- this.#disposed?.push([v, k, 'delete']);
+ this.#disposed?.push([v, k, reason]);
}
}
this.#keyMap.delete(k);
@@ -1403,6 +1500,9 @@ class LRUCache {
* Clear the cache entirely, throwing away all values.
*/
clear() {
+ return this.#clear('delete');
+ }
+ #clear(reason) {
for (const index of this.#rindexes({ allowStale: true })) {
const v = this.#valList[index];
if (this.#isBackgroundFetch(v)) {
@@ -1411,10 +1511,10 @@ class LRUCache {
else {
const k = this.#keyList[index];
if (this.#hasDispose) {
- this.#dispose?.(v, k, 'delete');
+ this.#dispose?.(v, k, reason);
}
if (this.#hasDisposeAfter) {
- this.#disposed?.push([v, k, 'delete']);
+ this.#disposed?.push([v, k, reason]);
}
}
}
diff --git a/deps/npm/node_modules/lru-cache/dist/commonjs/index.min.js b/deps/npm/node_modules/lru-cache/dist/commonjs/index.min.js
index b7149f5415a..ad643b0badc 100644
--- a/deps/npm/node_modules/lru-cache/dist/commonjs/index.min.js
+++ b/deps/npm/node_modules/lru-cache/dist/commonjs/index.min.js
@@ -1,2 +1,2 @@
-"use strict";var G=(o,t,e)=>{if(!t.has(o))throw TypeError("Cannot "+e)};var j=(o,t,e)=>(G(o,t,"read from private field"),e?e.call(o):t.get(o)),I=(o,t,e)=>{if(t.has(o))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(o):t.set(o,e)},D=(o,t,e,i)=>(G(o,t,"write to private field"),i?i.call(o,e):t.set(o,e),e);Object.defineProperty(exports,"__esModule",{value:!0});exports.LRUCache=void 0;var T=typeof performance=="object"&&performance&&typeof performance.now=="function"?performance:Date,N=new Set,L=typeof process=="object"&&process?process:{},P=(o,t,e,i)=>{typeof L.emitWarning=="function"?L.emitWarning(o,t,e,i):console.error(`[${e}] ${t}: ${o}`)},W=globalThis.AbortController,M=globalThis.AbortSignal;if(typeof W>"u"){M=class{onabort;_onabort=[];reason;aborted=!1;addEventListener(i,s){this._onabort.push(s)}},W=class{constructor(){t()}signal=new M;abort(i){if(!this.signal.aborted){this.signal.reason=i,this.signal.aborted=!0;for(let s of this.signal._onabort)s(i);this.signal.onabort?.(i)}}};let o=L.env?.LRU_CACHE_IGNORE_AC_WARNING!=="1",t=()=>{o&&(o=!1,P("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.","NO_ABORT_CONTROLLER","ENOTSUP",t))}}var V=o=>!N.has(o),Y=Symbol("type"),A=o=>o&&o===Math.floor(o)&&o>0&&isFinite(o),H=o=>A(o)?o<=Math.pow(2,8)?Uint8Array:o<=Math.pow(2,16)?Uint16Array:o<=Math.pow(2,32)?Uint32Array:o<=Number.MAX_SAFE_INTEGER?E:null:null,E=class extends Array{constructor(t){super(t),this.fill(0)}},v,z=class{heap;length;static create(t){let e=H(t);if(!e)return[];D(z,v,!0);let i=new z(t,e);return D(z,v,!1),i}constructor(t,e){if(!j(z,v))throw new TypeError("instantiate Stack using Stack.create(n)");this.heap=new e(t),this.length=0}push(t){this.heap[this.length++]=t}pop(){return this.heap[--this.length]}},R=z;v=new WeakMap,I(R,v,!1);var C=class{#g;#f;#p;#w;#C;ttl;ttlResolution;ttlAutopurge;updateAgeOnGet;updateAgeOnHas;allowStale;noDisposeOnSet;noUpdateTTL;maxEntrySize;sizeCalculation;noDeleteOnFetchRejection;noDeleteOnStaleGet;allowStaleOnFetchAbort;allowStaleOnFetchRejection;ignoreFetchAbort;#n;#S;#s;#i;#t;#l;#c;#o;#h;#_;#r;#b;#y;#u;#m;#T;#a;static unsafeExposeInternals(t){return{starts:t.#y,ttls:t.#u,sizes:t.#b,keyMap:t.#s,keyList:t.#i,valList:t.#t,next:t.#l,prev:t.#c,get head(){return t.#o},get tail(){return t.#h},free:t.#_,isBackgroundFetch:e=>t.#e(e),backgroundFetch:(e,i,s,n)=>t.#D(e,i,s,n),moveToTail:e=>t.#v(e),indexes:e=>t.#A(e),rindexes:e=>t.#F(e),isStale:e=>t.#d(e)}}get max(){return this.#g}get maxSize(){return this.#f}get calculatedSize(){return this.#S}get size(){return this.#n}get fetchMethod(){return this.#C}get dispose(){return this.#p}get disposeAfter(){return this.#w}constructor(t){let{max:e=0,ttl:i,ttlResolution:s=1,ttlAutopurge:n,updateAgeOnGet:h,updateAgeOnHas:l,allowStale:r,dispose:g,disposeAfter:b,noDisposeOnSet:f,noUpdateTTL:u,maxSize:c=0,maxEntrySize:F=0,sizeCalculation:d,fetchMethod:S,noDeleteOnFetchRejection:a,noDeleteOnStaleGet:w,allowStaleOnFetchRejection:y,allowStaleOnFetchAbort:p,ignoreFetchAbort:_}=t;if(e!==0&&!A(e))throw new TypeError("max option must be a nonnegative integer");let O=e?H(e):Array;if(!O)throw new Error("invalid max value: "+e);if(this.#g=e,this.#f=c,this.maxEntrySize=F||this.#f,this.sizeCalculation=d,this.sizeCalculation){if(!this.#f&&!this.maxEntrySize)throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");if(typeof this.sizeCalculation!="function")throw new TypeError("sizeCalculation set to non-function")}if(S!==void 0&&typeof S!="function")throw new TypeError("fetchMethod must be a function if specified");if(this.#C=S,this.#T=!!S,this.#s=new Map,this.#i=new Array(e).fill(void 0),this.#t=new Array(e).fill(void 0),this.#l=new O(e),this.#c=new O(e),this.#o=0,this.#h=0,this.#_=R.create(e),this.#n=0,this.#S=0,typeof g=="function"&&(this.#p=g),typeof b=="function"?(this.#w=b,this.#r=[]):(this.#w=void 0,this.#r=void 0),this.#m=!!this.#p,this.#a=!!this.#w,this.noDisposeOnSet=!!f,this.noUpdateTTL=!!u,this.noDeleteOnFetchRejection=!!a,this.allowStaleOnFetchRejection=!!y,this.allowStaleOnFetchAbort=!!p,this.ignoreFetchAbort=!!_,this.maxEntrySize!==0){if(this.#f!==0&&!A(this.#f))throw new TypeError("maxSize must be a positive integer if specified");if(!A(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");this.#I()}if(this.allowStale=!!r,this.noDeleteOnStaleGet=!!w,this.updateAgeOnGet=!!h,this.updateAgeOnHas=!!l,this.ttlResolution=A(s)||s===0?s:1,this.ttlAutopurge=!!n,this.ttl=i||0,this.ttl){if(!A(this.ttl))throw new TypeError("ttl must be a positive integer if specified");this.#L()}if(this.#g===0&&this.ttl===0&&this.#f===0)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!this.#g&&!this.#f){let m="LRU_CACHE_UNBOUNDED";V(m)&&(N.add(m),P("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",m,C))}}getRemainingTTL(t){return this.#s.has(t)?1/0:0}#L(){let t=new E(this.#g),e=new E(this.#g);this.#u=t,this.#y=e,this.#U=(n,h,l=T.now())=>{if(e[n]=h!==0?l:0,t[n]=h,h!==0&&this.ttlAutopurge){let r=setTimeout(()=>{this.#d(n)&&this.delete(this.#i[n])},h+1);r.unref&&r.unref()}},this.#z=n=>{e[n]=t[n]!==0?T.now():0},this.#O=(n,h)=>{if(t[h]){let l=t[h],r=e[h];if(!l||!r)return;n.ttl=l,n.start=r,n.now=i||s();let g=n.now-r;n.remainingTTL=l-g}};let i=0,s=()=>{let n=T.now();if(this.ttlResolution>0){i=n;let h=setTimeout(()=>i=0,this.ttlResolution);h.unref&&h.unref()}return n};this.getRemainingTTL=n=>{let h=this.#s.get(n);if(h===void 0)return 0;let l=t[h],r=e[h];if(!l||!r)return 1/0;let g=(i||s())-r;return l-g},this.#d=n=>{let h=e[n],l=t[n];return!!l&&!!h&&(i||s())-h>l}}#z=()=>{};#O=()=>{};#U=()=>{};#d=()=>!1;#I(){let t=new E(this.#g);this.#S=0,this.#b=t,this.#E=e=>{this.#S-=t[e],t[e]=0},this.#x=(e,i,s,n)=>{if(this.#e(i))return 0;if(!A(s))if(n){if(typeof n!="function")throw new TypeError("sizeCalculation must be a function");if(s=n(i,e),!A(s))throw new TypeError("sizeCalculation return invalid (expect positive integer)")}else throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.");return s},this.#R=(e,i,s)=>{if(t[e]=i,this.#f){let n=this.#f-t[e];for(;this.#S>n;)this.#W(!0)}this.#S+=t[e],s&&(s.entrySize=i,s.totalCalculatedSize=this.#S)}}#E=t=>{};#R=(t,e,i)=>{};#x=(t,e,i,s)=>{if(i||s)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");return 0};*#A({allowStale:t=this.allowStale}={}){if(this.#n)for(let e=this.#h;!(!this.#G(e)||((t||!this.#d(e))&&(yield e),e===this.#o));)e=this.#c[e]}*#F({allowStale:t=this.allowStale}={}){if(this.#n)for(let e=this.#o;!(!this.#G(e)||((t||!this.#d(e))&&(yield e),e===this.#h));)e=this.#l[e]}#G(t){return t!==void 0&&this.#s.get(this.#i[t])===t}*entries(){for(let t of this.#A())this.#t[t]!==void 0&&this.#i[t]!==void 0&&!this.#e(this.#t[t])&&(yield[this.#i[t],this.#t[t]])}*rentries(){for(let t of this.#F())this.#t[t]!==void 0&&this.#i[t]!==void 0&&!this.#e(this.#t[t])&&(yield[this.#i[t],this.#t[t]])}*keys(){for(let t of this.#A()){let e=this.#i[t];e!==void 0&&!this.#e(this.#t[t])&&(yield e)}}*rkeys(){for(let t of this.#F()){let e=this.#i[t];e!==void 0&&!this.#e(this.#t[t])&&(yield e)}}*values(){for(let t of this.#A())this.#t[t]!==void 0&&!this.#e(this.#t[t])&&(yield this.#t[t])}*rvalues(){for(let t of this.#F())this.#t[t]!==void 0&&!this.#e(this.#t[t])&&(yield this.#t[t])}[Symbol.iterator](){return this.entries()}[Symbol.toStringTag]="LRUCache";find(t,e={}){for(let i of this.#A()){let s=this.#t[i],n=this.#e(s)?s.__staleWhileFetching:s;if(n!==void 0&&t(n,this.#i[i],this))return this.get(this.#i[i],e)}}forEach(t,e=this){for(let i of this.#A()){let s=this.#t[i],n=this.#e(s)?s.__staleWhileFetching:s;n!==void 0&&t.call(e,n,this.#i[i],this)}}rforEach(t,e=this){for(let i of this.#F()){let s=this.#t[i],n=this.#e(s)?s.__staleWhileFetching:s;n!==void 0&&t.call(e,n,this.#i[i],this)}}purgeStale(){let t=!1;for(let e of this.#F({allowStale:!0}))this.#d(e)&&(this.delete(this.#i[e]),t=!0);return t}info(t){let e=this.#s.get(t);if(e===void 0)return;let i=this.#t[e],s=this.#e(i)?i.__staleWhileFetching:i;if(s===void 0)return;let n={value:s};if(this.#u&&this.#y){let h=this.#u[e],l=this.#y[e];if(h&&l){let r=h-(T.now()-l);n.ttl=r,n.start=Date.now()}}return this.#b&&(n.size=this.#b[e]),n}dump(){let t=[];for(let e of this.#A({allowStale:!0})){let i=this.#i[e],s=this.#t[e],n=this.#e(s)?s.__staleWhileFetching:s;if(n===void 0||i===void 0)continue;let h={value:n};if(this.#u&&this.#y){h.ttl=this.#u[e];let l=T.now()-this.#y[e];h.start=Math.floor(Date.now()-l)}this.#b&&(h.size=this.#b[e]),t.unshift([i,h])}return t}load(t){this.clear();for(let[e,i]of t){if(i.start){let s=Date.now()-i.start;i.start=T.now()-s}this.set(e,i.value,i)}}set(t,e,i={}){if(e===void 0)return this.delete(t),this;let{ttl:s=this.ttl,start:n,noDisposeOnSet:h=this.noDisposeOnSet,sizeCalculation:l=this.sizeCalculation,status:r}=i,{noUpdateTTL:g=this.noUpdateTTL}=i,b=this.#x(t,e,i.size||0,l);if(this.maxEntrySize&&b>this.maxEntrySize)return r&&(r.set="miss",r.maxEntrySizeExceeded=!0),this.delete(t),this;let f=this.#n===0?void 0:this.#s.get(t);if(f===void 0)f=this.#n===0?this.#h:this.#_.length!==0?this.#_.pop():this.#n===this.#g?this.#W(!1):this.#n,this.#i[f]=t,this.#t[f]=e,this.#s.set(t,f),this.#l[this.#h]=f,this.#c[f]=this.#h,this.#h=f,this.#n++,this.#R(f,b,r),r&&(r.set="add"),g=!1;else{this.#v(f);let u=this.#t[f];if(e!==u){if(this.#T&&this.#e(u)){u.__abortController.abort(new Error("replaced"));let{__staleWhileFetching:c}=u;c!==void 0&&!h&&(this.#m&&this.#p?.(c,t,"set"),this.#a&&this.#r?.push([c,t,"set"]))}else h||(this.#m&&this.#p?.(u,t,"set"),this.#a&&this.#r?.push([u,t,"set"]));if(this.#E(f),this.#R(f,b,r),this.#t[f]=e,r){r.set="replace";let c=u&&this.#e(u)?u.__staleWhileFetching:u;c!==void 0&&(r.oldValue=c)}}else r&&(r.set="update")}if(s!==0&&!this.#u&&this.#L(),this.#u&&(g||this.#U(f,s,n),r&&this.#O(r,f)),!h&&this.#a&&this.#r){let u=this.#r,c;for(;c=u?.shift();)this.#w?.(...c)}return this}pop(){try{for(;this.#n;){let t=this.#t[this.#o];if(this.#W(!0),this.#e(t)){if(t.__staleWhileFetching)return t.__staleWhileFetching}else if(t!==void 0)return t}}finally{if(this.#a&&this.#r){let t=this.#r,e;for(;e=t?.shift();)this.#w?.(...e)}}}#W(t){let e=this.#o,i=this.#i[e],s=this.#t[e];return this.#T&&this.#e(s)?s.__abortController.abort(new Error("evicted")):(this.#m||this.#a)&&(this.#m&&this.#p?.(s,i,"evict"),this.#a&&this.#r?.push([s,i,"evict"])),this.#E(e),t&&(this.#i[e]=void 0,this.#t[e]=void 0,this.#_.push(e)),this.#n===1?(this.#o=this.#h=0,this.#_.length=0):this.#o=this.#l[e],this.#s.delete(i),this.#n--,e}has(t,e={}){let{updateAgeOnHas:i=this.updateAgeOnHas,status:s}=e,n=this.#s.get(t);if(n!==void 0){let h=this.#t[n];if(this.#e(h)&&h.__staleWhileFetching===void 0)return!1;if(this.#d(n))s&&(s.has="stale",this.#O(s,n));else return i&&this.#z(n),s&&(s.has="hit",this.#O(s,n)),!0}else s&&(s.has="miss");return!1}peek(t,e={}){let{allowStale:i=this.allowStale}=e,s=this.#s.get(t);if(s===void 0||!i&&this.#d(s))return;let n=this.#t[s];return this.#e(n)?n.__staleWhileFetching:n}#D(t,e,i,s){let n=e===void 0?void 0:this.#t[e];if(this.#e(n))return n;let h=new W,{signal:l}=i;l?.addEventListener("abort",()=>h.abort(l.reason),{signal:h.signal});let r={signal:h.signal,options:i,context:s},g=(d,S=!1)=>{let{aborted:a}=h.signal,w=i.ignoreFetchAbort&&d!==void 0;if(i.status&&(a&&!S?(i.status.fetchAborted=!0,i.status.fetchError=h.signal.reason,w&&(i.status.fetchAbortIgnored=!0)):i.status.fetchResolved=!0),a&&!w&&!S)return f(h.signal.reason);let y=c;return this.#t[e]===c&&(d===void 0?y.__staleWhileFetching?this.#t[e]=y.__staleWhileFetching:this.delete(t):(i.status&&(i.status.fetchUpdated=!0),this.set(t,d,r.options))),d},b=d=>(i.status&&(i.status.fetchRejected=!0,i.status.fetchError=d),f(d)),f=d=>{let{aborted:S}=h.signal,a=S&&i.allowStaleOnFetchAbort,w=a||i.allowStaleOnFetchRejection,y=w||i.noDeleteOnFetchRejection,p=c;if(this.#t[e]===c&&(!y||p.__staleWhileFetching===void 0?this.delete(t):a||(this.#t[e]=p.__staleWhileFetching)),w)return i.status&&p.__staleWhileFetching!==void 0&&(i.status.returnedStale=!0),p.__staleWhileFetching;if(p.__returned===p)throw d},u=(d,S)=>{let a=this.#C?.(t,n,r);a&&a instanceof Promise&&a.then(w=>d(w===void 0?void 0:w),S),h.signal.addEventListener("abort",()=>{(!i.ignoreFetchAbort||i.allowStaleOnFetchAbort)&&(d(void 0),i.allowStaleOnFetchAbort&&(d=w=>g(w,!0)))})};i.status&&(i.status.fetchDispatched=!0);let c=new Promise(u).then(g,b),F=Object.assign(c,{__abortController:h,__staleWhileFetching:n,__returned:void 0});return e===void 0?(this.set(t,F,{...r.options,status:void 0}),e=this.#s.get(t)):this.#t[e]=F,F}#e(t){if(!this.#T)return!1;let e=t;return!!e&&e instanceof Promise&&e.hasOwnProperty("__staleWhileFetching")&&e.__abortController instanceof W}async fetch(t,e={}){let{allowStale:i=this.allowStale,updateAgeOnGet:s=this.updateAgeOnGet,noDeleteOnStaleGet:n=this.noDeleteOnStaleGet,ttl:h=this.ttl,noDisposeOnSet:l=this.noDisposeOnSet,size:r=0,sizeCalculation:g=this.sizeCalculation,noUpdateTTL:b=this.noUpdateTTL,noDeleteOnFetchRejection:f=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:u=this.allowStaleOnFetchRejection,ignoreFetchAbort:c=this.ignoreFetchAbort,allowStaleOnFetchAbort:F=this.allowStaleOnFetchAbort,context:d,forceRefresh:S=!1,status:a,signal:w}=e;if(!this.#T)return a&&(a.fetch="get"),this.get(t,{allowStale:i,updateAgeOnGet:s,noDeleteOnStaleGet:n,status:a});let y={allowStale:i,updateAgeOnGet:s,noDeleteOnStaleGet:n,ttl:h,noDisposeOnSet:l,size:r,sizeCalculation:g,noUpdateTTL:b,noDeleteOnFetchRejection:f,allowStaleOnFetchRejection:u,allowStaleOnFetchAbort:F,ignoreFetchAbort:c,status:a,signal:w},p=this.#s.get(t);if(p===void 0){a&&(a.fetch="miss");let _=this.#D(t,p,y,d);return _.__returned=_}else{let _=this.#t[p];if(this.#e(_)){let x=i&&_.__staleWhileFetching!==void 0;return a&&(a.fetch="inflight",x&&(a.returnedStale=!0)),x?_.__staleWhileFetching:_.__returned=_}let O=this.#d(p);if(!S&&!O)return a&&(a.fetch="hit"),this.#v(p),s&&this.#z(p),a&&this.#O(a,p),_;let m=this.#D(t,p,y,d),U=m.__staleWhileFetching!==void 0&&i;return a&&(a.fetch=O?"stale":"refresh",U&&O&&(a.returnedStale=!0)),U?m.__staleWhileFetching:m.__returned=m}}get(t,e={}){let{allowStale:i=this.allowStale,updateAgeOnGet:s=this.updateAgeOnGet,noDeleteOnStaleGet:n=this.noDeleteOnStaleGet,status:h}=e,l=this.#s.get(t);if(l!==void 0){let r=this.#t[l],g=this.#e(r);return h&&this.#O(h,l),this.#d(l)?(h&&(h.get="stale"),g?(h&&i&&r.__staleWhileFetching!==void 0&&(h.returnedStale=!0),i?r.__staleWhileFetching:void 0):(n||this.delete(t),h&&i&&(h.returnedStale=!0),i?r:void 0)):(h&&(h.get="hit"),g?r.__staleWhileFetching:(this.#v(l),s&&this.#z(l),r))}else h&&(h.get="miss")}#j(t,e){this.#c[e]=t,this.#l[t]=e}#v(t){t!==this.#h&&(t===this.#o?this.#o=this.#l[t]:this.#j(this.#c[t],this.#l[t]),this.#j(this.#h,t),this.#h=t)}delete(t){let e=!1;if(this.#n!==0){let i=this.#s.get(t);if(i!==void 0)if(e=!0,this.#n===1)this.clear();else{this.#E(i);let s=this.#t[i];if(this.#e(s)?s.__abortController.abort(new Error("deleted")):(this.#m||this.#a)&&(this.#m&&this.#p?.(s,t,"delete"),this.#a&&this.#r?.push([s,t,"delete"])),this.#s.delete(t),this.#i[i]=void 0,this.#t[i]=void 0,i===this.#h)this.#h=this.#c[i];else if(i===this.#o)this.#o=this.#l[i];else{let n=this.#c[i];this.#l[n]=this.#l[i];let h=this.#l[i];this.#c[h]=this.#c[i]}this.#n--,this.#_.push(i)}}if(this.#a&&this.#r?.length){let i=this.#r,s;for(;s=i?.shift();)this.#w?.(...s)}return e}clear(){for(let t of this.#F({allowStale:!0})){let e=this.#t[t];if(this.#e(e))e.__abortController.abort(new Error("deleted"));else{let i=this.#i[t];this.#m&&this.#p?.(e,i,"delete"),this.#a&&this.#r?.push([e,i,"delete"])}}if(this.#s.clear(),this.#t.fill(void 0),this.#i.fill(void 0),this.#u&&this.#y&&(this.#u.fill(0),this.#y.fill(0)),this.#b&&this.#b.fill(0),this.#o=0,this.#h=0,this.#_.length=0,this.#S=0,this.#n=0,this.#a&&this.#r){let t=this.#r,e;for(;e=t?.shift();)this.#w?.(...e)}}};exports.LRUCache=C;
+"use strict";var G=(l,t,e)=>{if(!t.has(l))throw TypeError("Cannot "+e)};var j=(l,t,e)=>(G(l,t,"read from private field"),e?e.call(l):t.get(l)),I=(l,t,e)=>{if(t.has(l))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(l):t.set(l,e)},x=(l,t,e,i)=>(G(l,t,"write to private field"),i?i.call(l,e):t.set(l,e),e);Object.defineProperty(exports,"__esModule",{value:!0});exports.LRUCache=void 0;var T=typeof performance=="object"&&performance&&typeof performance.now=="function"?performance:Date,P=new Set,U=typeof process=="object"&&process?process:{},H=(l,t,e,i)=>{typeof U.emitWarning=="function"?U.emitWarning(l,t,e,i):console.error(`[${e}] ${t}: ${l}`)},D=globalThis.AbortController,N=globalThis.AbortSignal;if(typeof D>"u"){N=class{onabort;_onabort=[];reason;aborted=!1;addEventListener(i,s){this._onabort.push(s)}},D=class{constructor(){t()}signal=new N;abort(i){if(!this.signal.aborted){this.signal.reason=i,this.signal.aborted=!0;for(let s of this.signal._onabort)s(i);this.signal.onabort?.(i)}}};let l=U.env?.LRU_CACHE_IGNORE_AC_WARNING!=="1",t=()=>{l&&(l=!1,H("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.","NO_ABORT_CONTROLLER","ENOTSUP",t))}}var V=l=>!P.has(l),Y=Symbol("type"),A=l=>l&&l===Math.floor(l)&&l>0&&isFinite(l),k=l=>A(l)?l<=Math.pow(2,8)?Uint8Array:l<=Math.pow(2,16)?Uint16Array:l<=Math.pow(2,32)?Uint32Array:l<=Number.MAX_SAFE_INTEGER?E:null:null,E=class extends Array{constructor(t){super(t),this.fill(0)}},v,O=class{heap;length;static create(t){let e=k(t);if(!e)return[];x(O,v,!0);let i=new O(t,e);return x(O,v,!1),i}constructor(t,e){if(!j(O,v))throw new TypeError("instantiate Stack using Stack.create(n)");this.heap=new e(t),this.length=0}push(t){this.heap[this.length++]=t}pop(){return this.heap[--this.length]}},W=O;v=new WeakMap,I(W,v,!1);var C=class{#g;#f;#p;#w;#R;#W;ttl;ttlResolution;ttlAutopurge;updateAgeOnGet;updateAgeOnHas;allowStale;noDisposeOnSet;noUpdateTTL;maxEntrySize;sizeCalculation;noDeleteOnFetchRejection;noDeleteOnStaleGet;allowStaleOnFetchAbort;allowStaleOnFetchRejection;ignoreFetchAbort;#n;#S;#s;#i;#t;#l;#c;#o;#h;#_;#r;#b;#m;#u;#y;#E;#a;static unsafeExposeInternals(t){return{starts:t.#m,ttls:t.#u,sizes:t.#b,keyMap:t.#s,keyList:t.#i,valList:t.#t,next:t.#l,prev:t.#c,get head(){return t.#o},get tail(){return t.#h},free:t.#_,isBackgroundFetch:e=>t.#e(e),backgroundFetch:(e,i,s,n)=>t.#x(e,i,s,n),moveToTail:e=>t.#C(e),indexes:e=>t.#A(e),rindexes:e=>t.#F(e),isStale:e=>t.#d(e)}}get max(){return this.#g}get maxSize(){return this.#f}get calculatedSize(){return this.#S}get size(){return this.#n}get fetchMethod(){return this.#R}get memoMethod(){return this.#W}get dispose(){return this.#p}get disposeAfter(){return this.#w}constructor(t){let{max:e=0,ttl:i,ttlResolution:s=1,ttlAutopurge:n,updateAgeOnGet:h,updateAgeOnHas:o,allowStale:r,dispose:g,disposeAfter:b,noDisposeOnSet:f,noUpdateTTL:u,maxSize:c=0,maxEntrySize:F=0,sizeCalculation:d,fetchMethod:S,memoMethod:a,noDeleteOnFetchRejection:w,noDeleteOnStaleGet:m,allowStaleOnFetchRejection:p,allowStaleOnFetchAbort:_,ignoreFetchAbort:z}=t;if(e!==0&&!A(e))throw new TypeError("max option must be a nonnegative integer");let y=e?k(e):Array;if(!y)throw new Error("invalid max value: "+e);if(this.#g=e,this.#f=c,this.maxEntrySize=F||this.#f,this.sizeCalculation=d,this.sizeCalculation){if(!this.#f&&!this.maxEntrySize)throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");if(typeof this.sizeCalculation!="function")throw new TypeError("sizeCalculation set to non-function")}if(a!==void 0&&typeof a!="function")throw new TypeError("memoMethod must be a function if defined");if(this.#W=a,S!==void 0&&typeof S!="function")throw new TypeError("fetchMethod must be a function if specified");if(this.#R=S,this.#E=!!S,this.#s=new Map,this.#i=new Array(e).fill(void 0),this.#t=new Array(e).fill(void 0),this.#l=new y(e),this.#c=new y(e),this.#o=0,this.#h=0,this.#_=W.create(e),this.#n=0,this.#S=0,typeof g=="function"&&(this.#p=g),typeof b=="function"?(this.#w=b,this.#r=[]):(this.#w=void 0,this.#r=void 0),this.#y=!!this.#p,this.#a=!!this.#w,this.noDisposeOnSet=!!f,this.noUpdateTTL=!!u,this.noDeleteOnFetchRejection=!!w,this.allowStaleOnFetchRejection=!!p,this.allowStaleOnFetchAbort=!!_,this.ignoreFetchAbort=!!z,this.maxEntrySize!==0){if(this.#f!==0&&!A(this.#f))throw new TypeError("maxSize must be a positive integer if specified");if(!A(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");this.#P()}if(this.allowStale=!!r,this.noDeleteOnStaleGet=!!m,this.updateAgeOnGet=!!h,this.updateAgeOnHas=!!o,this.ttlResolution=A(s)||s===0?s:1,this.ttlAutopurge=!!n,this.ttl=i||0,this.ttl){if(!A(this.ttl))throw new TypeError("ttl must be a positive integer if specified");this.#U()}if(this.#g===0&&this.ttl===0&&this.#f===0)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!this.#g&&!this.#f){let R="LRU_CACHE_UNBOUNDED";V(R)&&(P.add(R),H("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",R,C))}}getRemainingTTL(t){return this.#s.has(t)?1/0:0}#U(){let t=new E(this.#g),e=new E(this.#g);this.#u=t,this.#m=e,this.#M=(n,h,o=T.now())=>{if(e[n]=h!==0?o:0,t[n]=h,h!==0&&this.ttlAutopurge){let r=setTimeout(()=>{this.#d(n)&&this.#T(this.#i[n],"expire")},h+1);r.unref&&r.unref()}},this.#v=n=>{e[n]=t[n]!==0?T.now():0},this.#O=(n,h)=>{if(t[h]){let o=t[h],r=e[h];if(!o||!r)return;n.ttl=o,n.start=r,n.now=i||s();let g=n.now-r;n.remainingTTL=o-g}};let i=0,s=()=>{let n=T.now();if(this.ttlResolution>0){i=n;let h=setTimeout(()=>i=0,this.ttlResolution);h.unref&&h.unref()}return n};this.getRemainingTTL=n=>{let h=this.#s.get(n);if(h===void 0)return 0;let o=t[h],r=e[h];if(!o||!r)return 1/0;let g=(i||s())-r;return o-g},this.#d=n=>{let h=e[n],o=t[n];return!!o&&!!h&&(i||s())-h>o}}#v=()=>{};#O=()=>{};#M=()=>{};#d=()=>!1;#P(){let t=new E(this.#g);this.#S=0,this.#b=t,this.#z=e=>{this.#S-=t[e],t[e]=0},this.#G=(e,i,s,n)=>{if(this.#e(i))return 0;if(!A(s))if(n){if(typeof n!="function")throw new TypeError("sizeCalculation must be a function");if(s=n(i,e),!A(s))throw new TypeError("sizeCalculation return invalid (expect positive integer)")}else throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.");return s},this.#D=(e,i,s)=>{if(t[e]=i,this.#f){let n=this.#f-t[e];for(;this.#S>n;)this.#L(!0)}this.#S+=t[e],s&&(s.entrySize=i,s.totalCalculatedSize=this.#S)}}#z=t=>{};#D=(t,e,i)=>{};#G=(t,e,i,s)=>{if(i||s)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");return 0};*#A({allowStale:t=this.allowStale}={}){if(this.#n)for(let e=this.#h;!(!this.#j(e)||((t||!this.#d(e))&&(yield e),e===this.#o));)e=this.#c[e]}*#F({allowStale:t=this.allowStale}={}){if(this.#n)for(let e=this.#o;!(!this.#j(e)||((t||!this.#d(e))&&(yield e),e===this.#h));)e=this.#l[e]}#j(t){return t!==void 0&&this.#s.get(this.#i[t])===t}*entries(){for(let t of this.#A())this.#t[t]!==void 0&&this.#i[t]!==void 0&&!this.#e(this.#t[t])&&(yield[this.#i[t],this.#t[t]])}*rentries(){for(let t of this.#F())this.#t[t]!==void 0&&this.#i[t]!==void 0&&!this.#e(this.#t[t])&&(yield[this.#i[t],this.#t[t]])}*keys(){for(let t of this.#A()){let e=this.#i[t];e!==void 0&&!this.#e(this.#t[t])&&(yield e)}}*rkeys(){for(let t of this.#F()){let e=this.#i[t];e!==void 0&&!this.#e(this.#t[t])&&(yield e)}}*values(){for(let t of this.#A())this.#t[t]!==void 0&&!this.#e(this.#t[t])&&(yield this.#t[t])}*rvalues(){for(let t of this.#F())this.#t[t]!==void 0&&!this.#e(this.#t[t])&&(yield this.#t[t])}[Symbol.iterator](){return this.entries()}[Symbol.toStringTag]="LRUCache";find(t,e={}){for(let i of this.#A()){let s=this.#t[i],n=this.#e(s)?s.__staleWhileFetching:s;if(n!==void 0&&t(n,this.#i[i],this))return this.get(this.#i[i],e)}}forEach(t,e=this){for(let i of this.#A()){let s=this.#t[i],n=this.#e(s)?s.__staleWhileFetching:s;n!==void 0&&t.call(e,n,this.#i[i],this)}}rforEach(t,e=this){for(let i of this.#F()){let s=this.#t[i],n=this.#e(s)?s.__staleWhileFetching:s;n!==void 0&&t.call(e,n,this.#i[i],this)}}purgeStale(){let t=!1;for(let e of this.#F({allowStale:!0}))this.#d(e)&&(this.#T(this.#i[e],"expire"),t=!0);return t}info(t){let e=this.#s.get(t);if(e===void 0)return;let i=this.#t[e],s=this.#e(i)?i.__staleWhileFetching:i;if(s===void 0)return;let n={value:s};if(this.#u&&this.#m){let h=this.#u[e],o=this.#m[e];if(h&&o){let r=h-(T.now()-o);n.ttl=r,n.start=Date.now()}}return this.#b&&(n.size=this.#b[e]),n}dump(){let t=[];for(let e of this.#A({allowStale:!0})){let i=this.#i[e],s=this.#t[e],n=this.#e(s)?s.__staleWhileFetching:s;if(n===void 0||i===void 0)continue;let h={value:n};if(this.#u&&this.#m){h.ttl=this.#u[e];let o=T.now()-this.#m[e];h.start=Math.floor(Date.now()-o)}this.#b&&(h.size=this.#b[e]),t.unshift([i,h])}return t}load(t){this.clear();for(let[e,i]of t){if(i.start){let s=Date.now()-i.start;i.start=T.now()-s}this.set(e,i.value,i)}}set(t,e,i={}){if(e===void 0)return this.delete(t),this;let{ttl:s=this.ttl,start:n,noDisposeOnSet:h=this.noDisposeOnSet,sizeCalculation:o=this.sizeCalculation,status:r}=i,{noUpdateTTL:g=this.noUpdateTTL}=i,b=this.#G(t,e,i.size||0,o);if(this.maxEntrySize&&b>this.maxEntrySize)return r&&(r.set="miss",r.maxEntrySizeExceeded=!0),this.#T(t,"set"),this;let f=this.#n===0?void 0:this.#s.get(t);if(f===void 0)f=this.#n===0?this.#h:this.#_.length!==0?this.#_.pop():this.#n===this.#g?this.#L(!1):this.#n,this.#i[f]=t,this.#t[f]=e,this.#s.set(t,f),this.#l[this.#h]=f,this.#c[f]=this.#h,this.#h=f,this.#n++,this.#D(f,b,r),r&&(r.set="add"),g=!1;else{this.#C(f);let u=this.#t[f];if(e!==u){if(this.#E&&this.#e(u)){u.__abortController.abort(new Error("replaced"));let{__staleWhileFetching:c}=u;c!==void 0&&!h&&(this.#y&&this.#p?.(c,t,"set"),this.#a&&this.#r?.push([c,t,"set"]))}else h||(this.#y&&this.#p?.(u,t,"set"),this.#a&&this.#r?.push([u,t,"set"]));if(this.#z(f),this.#D(f,b,r),this.#t[f]=e,r){r.set="replace";let c=u&&this.#e(u)?u.__staleWhileFetching:u;c!==void 0&&(r.oldValue=c)}}else r&&(r.set="update")}if(s!==0&&!this.#u&&this.#U(),this.#u&&(g||this.#M(f,s,n),r&&this.#O(r,f)),!h&&this.#a&&this.#r){let u=this.#r,c;for(;c=u?.shift();)this.#w?.(...c)}return this}pop(){try{for(;this.#n;){let t=this.#t[this.#o];if(this.#L(!0),this.#e(t)){if(t.__staleWhileFetching)return t.__staleWhileFetching}else if(t!==void 0)return t}}finally{if(this.#a&&this.#r){let t=this.#r,e;for(;e=t?.shift();)this.#w?.(...e)}}}#L(t){let e=this.#o,i=this.#i[e],s=this.#t[e];return this.#E&&this.#e(s)?s.__abortController.abort(new Error("evicted")):(this.#y||this.#a)&&(this.#y&&this.#p?.(s,i,"evict"),this.#a&&this.#r?.push([s,i,"evict"])),this.#z(e),t&&(this.#i[e]=void 0,this.#t[e]=void 0,this.#_.push(e)),this.#n===1?(this.#o=this.#h=0,this.#_.length=0):this.#o=this.#l[e],this.#s.delete(i),this.#n--,e}has(t,e={}){let{updateAgeOnHas:i=this.updateAgeOnHas,status:s}=e,n=this.#s.get(t);if(n!==void 0){let h=this.#t[n];if(this.#e(h)&&h.__staleWhileFetching===void 0)return!1;if(this.#d(n))s&&(s.has="stale",this.#O(s,n));else return i&&this.#v(n),s&&(s.has="hit",this.#O(s,n)),!0}else s&&(s.has="miss");return!1}peek(t,e={}){let{allowStale:i=this.allowStale}=e,s=this.#s.get(t);if(s===void 0||!i&&this.#d(s))return;let n=this.#t[s];return this.#e(n)?n.__staleWhileFetching:n}#x(t,e,i,s){let n=e===void 0?void 0:this.#t[e];if(this.#e(n))return n;let h=new D,{signal:o}=i;o?.addEventListener("abort",()=>h.abort(o.reason),{signal:h.signal});let r={signal:h.signal,options:i,context:s},g=(d,S=!1)=>{let{aborted:a}=h.signal,w=i.ignoreFetchAbort&&d!==void 0;if(i.status&&(a&&!S?(i.status.fetchAborted=!0,i.status.fetchError=h.signal.reason,w&&(i.status.fetchAbortIgnored=!0)):i.status.fetchResolved=!0),a&&!w&&!S)return f(h.signal.reason);let m=c;return this.#t[e]===c&&(d===void 0?m.__staleWhileFetching?this.#t[e]=m.__staleWhileFetching:this.#T(t,"fetch"):(i.status&&(i.status.fetchUpdated=!0),this.set(t,d,r.options))),d},b=d=>(i.status&&(i.status.fetchRejected=!0,i.status.fetchError=d),f(d)),f=d=>{let{aborted:S}=h.signal,a=S&&i.allowStaleOnFetchAbort,w=a||i.allowStaleOnFetchRejection,m=w||i.noDeleteOnFetchRejection,p=c;if(this.#t[e]===c&&(!m||p.__staleWhileFetching===void 0?this.#T(t,"fetch"):a||(this.#t[e]=p.__staleWhileFetching)),w)return i.status&&p.__staleWhileFetching!==void 0&&(i.status.returnedStale=!0),p.__staleWhileFetching;if(p.__returned===p)throw d},u=(d,S)=>{let a=this.#R?.(t,n,r);a&&a instanceof Promise&&a.then(w=>d(w===void 0?void 0:w),S),h.signal.addEventListener("abort",()=>{(!i.ignoreFetchAbort||i.allowStaleOnFetchAbort)&&(d(void 0),i.allowStaleOnFetchAbort&&(d=w=>g(w,!0)))})};i.status&&(i.status.fetchDispatched=!0);let c=new Promise(u).then(g,b),F=Object.assign(c,{__abortController:h,__staleWhileFetching:n,__returned:void 0});return e===void 0?(this.set(t,F,{...r.options,status:void 0}),e=this.#s.get(t)):this.#t[e]=F,F}#e(t){if(!this.#E)return!1;let e=t;return!!e&&e instanceof Promise&&e.hasOwnProperty("__staleWhileFetching")&&e.__abortController instanceof D}async fetch(t,e={}){let{allowStale:i=this.allowStale,updateAgeOnGet:s=this.updateAgeOnGet,noDeleteOnStaleGet:n=this.noDeleteOnStaleGet,ttl:h=this.ttl,noDisposeOnSet:o=this.noDisposeOnSet,size:r=0,sizeCalculation:g=this.sizeCalculation,noUpdateTTL:b=this.noUpdateTTL,noDeleteOnFetchRejection:f=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:u=this.allowStaleOnFetchRejection,ignoreFetchAbort:c=this.ignoreFetchAbort,allowStaleOnFetchAbort:F=this.allowStaleOnFetchAbort,context:d,forceRefresh:S=!1,status:a,signal:w}=e;if(!this.#E)return a&&(a.fetch="get"),this.get(t,{allowStale:i,updateAgeOnGet:s,noDeleteOnStaleGet:n,status:a});let m={allowStale:i,updateAgeOnGet:s,noDeleteOnStaleGet:n,ttl:h,noDisposeOnSet:o,size:r,sizeCalculation:g,noUpdateTTL:b,noDeleteOnFetchRejection:f,allowStaleOnFetchRejection:u,allowStaleOnFetchAbort:F,ignoreFetchAbort:c,status:a,signal:w},p=this.#s.get(t);if(p===void 0){a&&(a.fetch="miss");let _=this.#x(t,p,m,d);return _.__returned=_}else{let _=this.#t[p];if(this.#e(_)){let M=i&&_.__staleWhileFetching!==void 0;return a&&(a.fetch="inflight",M&&(a.returnedStale=!0)),M?_.__staleWhileFetching:_.__returned=_}let z=this.#d(p);if(!S&&!z)return a&&(a.fetch="hit"),this.#C(p),s&&this.#v(p),a&&this.#O(a,p),_;let y=this.#x(t,p,m,d),L=y.__staleWhileFetching!==void 0&&i;return a&&(a.fetch=z?"stale":"refresh",L&&z&&(a.returnedStale=!0)),L?y.__staleWhileFetching:y.__returned=y}}async forceFetch(t,e={}){let i=await this.fetch(t,e);if(i===void 0)throw new Error("fetch() returned undefined");return i}memo(t,e={}){let i=this.#W;if(!i)throw new Error("no memoMethod provided to constructor");let{context:s,forceRefresh:n,...h}=e,o=this.get(t,h);if(!n&&o!==void 0)return o;let r=i(t,o,{options:h,context:s});return this.set(t,r,h),r}get(t,e={}){let{allowStale:i=this.allowStale,updateAgeOnGet:s=this.updateAgeOnGet,noDeleteOnStaleGet:n=this.noDeleteOnStaleGet,status:h}=e,o=this.#s.get(t);if(o!==void 0){let r=this.#t[o],g=this.#e(r);return h&&this.#O(h,o),this.#d(o)?(h&&(h.get="stale"),g?(h&&i&&r.__staleWhileFetching!==void 0&&(h.returnedStale=!0),i?r.__staleWhileFetching:void 0):(n||this.#T(t,"expire"),h&&i&&(h.returnedStale=!0),i?r:void 0)):(h&&(h.get="hit"),g?r.__staleWhileFetching:(this.#C(o),s&&this.#v(o),r))}else h&&(h.get="miss")}#I(t,e){this.#c[e]=t,this.#l[t]=e}#C(t){t!==this.#h&&(t===this.#o?this.#o=this.#l[t]:this.#I(this.#c[t],this.#l[t]),this.#I(this.#h,t),this.#h=t)}delete(t){return this.#T(t,"delete")}#T(t,e){let i=!1;if(this.#n!==0){let s=this.#s.get(t);if(s!==void 0)if(i=!0,this.#n===1)this.#N(e);else{this.#z(s);let n=this.#t[s];if(this.#e(n)?n.__abortController.abort(new Error("deleted")):(this.#y||this.#a)&&(this.#y&&this.#p?.(n,t,e),this.#a&&this.#r?.push([n,t,e])),this.#s.delete(t),this.#i[s]=void 0,this.#t[s]=void 0,s===this.#h)this.#h=this.#c[s];else if(s===this.#o)this.#o=this.#l[s];else{let h=this.#c[s];this.#l[h]=this.#l[s];let o=this.#l[s];this.#c[o]=this.#c[s]}this.#n--,this.#_.push(s)}}if(this.#a&&this.#r?.length){let s=this.#r,n;for(;n=s?.shift();)this.#w?.(...n)}return i}clear(){return this.#N("delete")}#N(t){for(let e of this.#F({allowStale:!0})){let i=this.#t[e];if(this.#e(i))i.__abortController.abort(new Error("deleted"));else{let s=this.#i[e];this.#y&&this.#p?.(i,s,t),this.#a&&this.#r?.push([i,s,t])}}if(this.#s.clear(),this.#t.fill(void 0),this.#i.fill(void 0),this.#u&&this.#m&&(this.#u.fill(0),this.#m.fill(0)),this.#b&&this.#b.fill(0),this.#o=0,this.#h=0,this.#_.length=0,this.#S=0,this.#n=0,this.#a&&this.#r){let e=this.#r,i;for(;i=e?.shift();)this.#w?.(...i)}}};exports.LRUCache=C;
//# sourceMappingURL=index.min.js.map
diff --git a/deps/npm/node_modules/lru-cache/dist/esm/index.js b/deps/npm/node_modules/lru-cache/dist/esm/index.js
index bf8f7e816ba..649304a9492 100644
--- a/deps/npm/node_modules/lru-cache/dist/esm/index.js
+++ b/deps/npm/node_modules/lru-cache/dist/esm/index.js
@@ -127,21 +127,26 @@ class Stack {
/**
* Default export, the thing you're using this module to get.
*
- * All properties from the options object (with the exception of
- * {@link OptionsBase.max} and {@link OptionsBase.maxSize}) are added as
- * normal public members. (`max` and `maxBase` are read-only getters.)
- * Changing any of these will alter the defaults for subsequent method calls,
- * but is otherwise safe.
+ * The `K` and `V` types define the key and value types, respectively. The
+ * optional `FC` type defines the type of the `context` object passed to
+ * `cache.fetch()` and `cache.memo()`.
+ *
+ * Keys and values **must not** be `null` or `undefined`.
+ *
+ * All properties from the options object (with the exception of `max`,
+ * `maxSize`, `fetchMethod`, `memoMethod`, `dispose` and `disposeAfter`) are
+ * added as normal public members. (The listed options are read-only getters.)
+ *
+ * Changing any of these will alter the defaults for subsequent method calls.
*/
export class LRUCache {
- // properties coming in from the options of these, only max and maxSize
- // really *need* to be protected. The rest can be modified, as they just
- // set defaults for various methods.
+ // options that cannot be changed without disaster
#max;
#maxSize;
#dispose;
#disposeAfter;
#fetchMethod;
+ #memoMethod;
/**
* {@link LRUCache.OptionsBase.ttl}
*/
@@ -287,6 +292,9 @@ export class LRUCache {
get fetchMethod() {
return this.#fetchMethod;
}
+ get memoMethod() {
+ return this.#memoMethod;
+ }
/**
* {@link LRUCache.OptionsBase.dispose} (read-only)
*/
@@ -300,7 +308,7 @@ export class LRUCache {
return this.#disposeAfter;
}
constructor(options) {
- const { max = 0, ttl, ttlResolution = 1, ttlAutopurge, updateAgeOnGet, updateAgeOnHas, allowStale, dispose, disposeAfter, noDisposeOnSet, noUpdateTTL, maxSize = 0, maxEntrySize = 0, sizeCalculation, fetchMethod, noDeleteOnFetchRejection, noDeleteOnStaleGet, allowStaleOnFetchRejection, allowStaleOnFetchAbort, ignoreFetchAbort, } = options;
+ const { max = 0, ttl, ttlResolution = 1, ttlAutopurge, updateAgeOnGet, updateAgeOnHas, allowStale, dispose, disposeAfter, noDisposeOnSet, noUpdateTTL, maxSize = 0, maxEntrySize = 0, sizeCalculation, fetchMethod, memoMethod, noDeleteOnFetchRejection, noDeleteOnStaleGet, allowStaleOnFetchRejection, allowStaleOnFetchAbort, ignoreFetchAbort, } = options;
if (max !== 0 && !isPosInt(max)) {
throw new TypeError('max option must be a nonnegative integer');
}
@@ -320,6 +328,11 @@ export class LRUCache {
throw new TypeError('sizeCalculation set to non-function');
}
}
+ if (memoMethod !== undefined &&
+ typeof memoMethod !== 'function') {
+ throw new TypeError('memoMethod must be a function if defined');
+ }
+ this.#memoMethod = memoMethod;
if (fetchMethod !== undefined &&
typeof fetchMethod !== 'function') {
throw new TypeError('fetchMethod must be a function if specified');
@@ -398,7 +411,8 @@ export class LRUCache {
}
}
/**
- * Return the remaining TTL time for a given entry key
+ * Return the number of ms left in the item's TTL. If item is not in cache,
+ * returns `0`. Returns `Infinity` if item is in cache without a defined TTL.
*/
getRemainingTTL(key) {
return this.#keyMap.has(key) ? Infinity : 0;
@@ -414,7 +428,7 @@ export class LRUCache {
if (ttl !== 0 && this.ttlAutopurge) {
const t = setTimeout(() => {
if (this.#isStale(index)) {
- this.delete(this.#keyList[index]);
+ this.#delete(this.#keyList[index], 'expire');
}
}, ttl + 1);
// unref() not supported on all platforms
@@ -671,13 +685,14 @@ export class LRUCache {
return this.entries();
}
/**
- * A String value that is used in the creation of the default string description of an object.
- * Called by the built-in method Object.prototype.toString.
+ * A String value that is used in the creation of the default string
+ * description of an object. Called by the built-in method
+ * `Object.prototype.toString`.
*/
[Symbol.toStringTag] = 'LRUCache';
/**
* Find a value for which the supplied fn method returns a truthy value,
- * similar to Array.find(). fn is called as fn(value, key, cache).
+ * similar to `Array.find()`. fn is called as `fn(value, key, cache)`.
*/
find(fn, getOptions = {}) {
for (const i of this.#indexes()) {
@@ -693,10 +708,15 @@ export class LRUCache {
}
}
/**
- * Call the supplied function on each item in the cache, in order from
- * most recently used to least recently used. fn is called as
- * fn(value, key, cache). Does not update age or recenty of use.
- * Does not iterate over stale values.
+ * Call the supplied function on each item in the cache, in order from most
+ * recently used to least recently used.
+ *
+ * `fn` is called as `fn(value, key, cache)`.
+ *
+ * If `thisp` is provided, function will be called in the `this`-context of
+ * the provided object, or the cache if no `thisp` object is provided.
+ *
+ * Does not update age or recenty of use, or iterate over stale values.
*/
forEach(fn, thisp = this) {
for (const i of this.#indexes()) {
@@ -732,7 +752,7 @@ export class LRUCache {
let deleted = false;
for (const i of this.#rindexes({ allowStale: true })) {
if (this.#isStale(i)) {
- this.delete(this.#keyList[i]);
+ this.#delete(this.#keyList[i], 'expire');
deleted = true;
}
}
@@ -740,9 +760,15 @@ export class LRUCache {
}
/**
* Get the extended info about a given entry, to get its value, size, and
- * TTL info simultaneously. Like {@link LRUCache#dump}, but just for a
- * single key. Always returns stale values, if their info is found in the
- * cache, so be sure to check for expired TTLs if relevant.
+ * TTL info simultaneously. Returns `undefined` if the key is not present.
+ *
+ * Unlike {@link LRUCache#dump}, which is designed to be portable and survive
+ * serialization, the `start` value is always the current timestamp, and the
+ * `ttl` is a calculated remaining time to live (negative if expired).
+ *
+ * Always returns stale values, if their info is found in the cache, so be
+ * sure to check for expirations (ie, a negative {@link LRUCache.Entry#ttl})
+ * if relevant.
*/
info(key) {
const i = this.#keyMap.get(key);
@@ -771,7 +797,16 @@ export class LRUCache {
}
/**
* Return an array of [key, {@link LRUCache.Entry}] tuples which can be
- * passed to cache.load()
+ * passed to {@link LRLUCache#load}.
+ *
+ * The `start` fields are calculated relative to a portable `Date.now()`
+ * timestamp, even if `performance.now()` is available.
+ *
+ * Stale entries are always included in the `dump`, even if
+ * {@link LRUCache.OptionsBase.allowStale} is false.
+ *
+ * Note: this returns an actual array, not a generator, so it can be more
+ * easily passed around.
*/
dump() {
const arr = [];
@@ -800,8 +835,12 @@ export class LRUCache {
}
/**
* Reset the cache and load in the items in entries in the order listed.
- * Note that the shape of the resulting cache may be different if the
- * same options are not used in both caches.
+ *
+ * The shape of the resulting cache may be different if the same options are
+ * not used in both caches.
+ *
+ * The `start` fields are assumed to be calculated relative to a portable
+ * `Date.now()` timestamp, even if `performance.now()` is available.
*/
load(arr) {
this.clear();
@@ -824,6 +863,30 @@ export class LRUCache {
*
* Note: if `undefined` is specified as a value, this is an alias for
* {@link LRUCache#delete}
+ *
+ * Fields on the {@link LRUCache.SetOptions} options param will override
+ * their corresponding values in the constructor options for the scope
+ * of this single `set()` operation.
+ *
+ * If `start` is provided, then that will set the effective start
+ * time for the TTL calculation. Note that this must be a previous
+ * value of `performance.now()` if supported, or a previous value of
+ * `Date.now()` if not.
+ *
+ * Options object may also include `size`, which will prevent
+ * calling the `sizeCalculation` function and just use the specified
+ * number if it is a positive integer, and `noDisposeOnSet` which
+ * will prevent calling a `dispose` function in the case of
+ * overwrites.
+ *
+ * If the `size` (or return value of `sizeCalculation`) for a given
+ * entry is greater than `maxEntrySize`, then the item will not be
+ * added to the cache.
+ *
+ * Will update the recency of the entry.
+ *
+ * If the value is `undefined`, then this is an alias for
+ * `cache.delete(key)`. `undefined` is never stored in the cache.
*/
set(k, v, setOptions = {}) {
if (v === undefined) {
@@ -841,7 +904,7 @@ export class LRUCache {
status.maxEntrySizeExceeded = true;
}
// have to delete, in case something is there already.
- this.delete(k);
+ this.#delete(k, 'set');
return this;
}
let index = this.#size === 0 ? undefined : this.#keyMap.get(k);
@@ -993,6 +1056,14 @@ export class LRUCache {
* Will return false if the item is stale, even though it is technically
* in the cache.
*
+ * Check if a key is in the cache, without updating the recency of
+ * use. Age is updated if {@link LRUCache.OptionsBase.updateAgeOnHas} is set
+ * to `true` in either the options or the constructor.
+ *
+ * Will return `false` if the item is stale, even though it is technically in
+ * the cache. The difference can be determined (if it matters) by using a
+ * `status` argument, and inspecting the `has` field.
+ *
* Will not update item age unless
* {@link LRUCache.OptionsBase.updateAgeOnHas} is set.
*/
@@ -1084,7 +1155,7 @@ export class LRUCache {
this.#valList[index] = bf.__staleWhileFetching;
}
else {
- this.delete(k);
+ this.#delete(k, 'fetch');
}
}
else {
@@ -1113,7 +1184,7 @@ export class LRUCache {
// the stale value is not removed from the cache when the fetch fails.
const del = !noDelete || bf.__staleWhileFetching === undefined;
if (del) {
- this.delete(k);
+ this.#delete(k, 'fetch');
}
else if (!allowStaleAborted) {
// still replace the *promise* with the stale value,
@@ -1259,6 +1330,28 @@ export class LRUCache {
return staleVal ? p.__staleWhileFetching : (p.__returned = p);
}
}
+ async forceFetch(k, fetchOptions = {}) {
+ const v = await this.fetch(k, fetchOptions);
+ if (v === undefined)
+ throw new Error('fetch() returned undefined');
+ return v;
+ }
+ memo(k, memoOptions = {}) {
+ const memoMethod = this.#memoMethod;
+ if (!memoMethod) {
+ throw new Error('no memoMethod provided to constructor');
+ }
+ const { context, forceRefresh, ...options } = memoOptions;
+ const v = this.get(k, options);
+ if (!forceRefresh && v !== undefined)
+ return v;
+ const vv = memoMethod(k, v, {
+ options,
+ context,
+ });
+ this.set(k, vv, options);
+ return vv;
+ }
/**
* Return a value from the cache. Will update the recency of the cache
* entry found.
@@ -1279,7 +1372,7 @@ export class LRUCache {
// delete only if not an in-flight background fetch
if (!fetching) {
if (!noDeleteOnStaleGet) {
- this.delete(k);
+ this.#delete(k, 'expire');
}
if (status && allowStale)
status.returnedStale = true;
@@ -1342,16 +1435,20 @@ export class LRUCache {
}
/**
* Deletes a key out of the cache.
+ *
* Returns true if the key was deleted, false otherwise.
*/
delete(k) {
+ return this.#delete(k, 'delete');
+ }
+ #delete(k, reason) {
let deleted = false;
if (this.#size !== 0) {
const index = this.#keyMap.get(k);
if (index !== undefined) {
deleted = true;
if (this.#size === 1) {
- this.clear();
+ this.#clear(reason);
}
else {
this.#removeItemSize(index);
@@ -1361,10 +1458,10 @@ export class LRUCache {
}
else if (this.#hasDispose || this.#hasDisposeAfter) {
if (this.#hasDispose) {
- this.#dispose?.(v, k, 'delete');
+ this.#dispose?.(v, k, reason);
}
if (this.#hasDisposeAfter) {
- this.#disposed?.push([v, k, 'delete']);
+ this.#disposed?.push([v, k, reason]);
}
}
this.#keyMap.delete(k);
@@ -1400,6 +1497,9 @@ export class LRUCache {
* Clear the cache entirely, throwing away all values.
*/
clear() {
+ return this.#clear('delete');
+ }
+ #clear(reason) {
for (const index of this.#rindexes({ allowStale: true })) {
const v = this.#valList[index];
if (this.#isBackgroundFetch(v)) {
@@ -1408,10 +1508,10 @@ export class LRUCache {
else {
const k = this.#keyList[index];
if (this.#hasDispose) {
- this.#dispose?.(v, k, 'delete');
+ this.#dispose?.(v, k, reason);
}
if (this.#hasDisposeAfter) {
- this.#disposed?.push([v, k, 'delete']);
+ this.#disposed?.push([v, k, reason]);
}
}
}
diff --git a/deps/npm/node_modules/lru-cache/dist/esm/index.min.js b/deps/npm/node_modules/lru-cache/dist/esm/index.min.js
index 4285815f9ab..4571d0254e2 100644
--- a/deps/npm/node_modules/lru-cache/dist/esm/index.min.js
+++ b/deps/npm/node_modules/lru-cache/dist/esm/index.min.js
@@ -1,2 +1,2 @@
-var G=(o,t,e)=>{if(!t.has(o))throw TypeError("Cannot "+e)};var I=(o,t,e)=>(G(o,t,"read from private field"),e?e.call(o):t.get(o)),j=(o,t,e)=>{if(t.has(o))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(o):t.set(o,e)},D=(o,t,e,i)=>(G(o,t,"write to private field"),i?i.call(o,e):t.set(o,e),e);var O=typeof performance=="object"&&performance&&typeof performance.now=="function"?performance:Date,M=new Set,L=typeof process=="object"&&process?process:{},P=(o,t,e,i)=>{typeof L.emitWarning=="function"?L.emitWarning(o,t,e,i):console.error(`[${e}] ${t}: ${o}`)},W=globalThis.AbortController,N=globalThis.AbortSignal;if(typeof W>"u"){N=class{onabort;_onabort=[];reason;aborted=!1;addEventListener(i,s){this._onabort.push(s)}},W=class{constructor(){t()}signal=new N;abort(i){if(!this.signal.aborted){this.signal.reason=i,this.signal.aborted=!0;for(let s of this.signal._onabort)s(i);this.signal.onabort?.(i)}}};let o=L.env?.LRU_CACHE_IGNORE_AC_WARNING!=="1",t=()=>{o&&(o=!1,P("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.","NO_ABORT_CONTROLLER","ENOTSUP",t))}}var V=o=>!M.has(o),Y=Symbol("type"),A=o=>o&&o===Math.floor(o)&&o>0&&isFinite(o),H=o=>A(o)?o<=Math.pow(2,8)?Uint8Array:o<=Math.pow(2,16)?Uint16Array:o<=Math.pow(2,32)?Uint32Array:o<=Number.MAX_SAFE_INTEGER?E:null:null,E=class extends Array{constructor(t){super(t),this.fill(0)}},v,z=class{heap;length;static create(t){let e=H(t);if(!e)return[];D(z,v,!0);let i=new z(t,e);return D(z,v,!1),i}constructor(t,e){if(!I(z,v))throw new TypeError("instantiate Stack using Stack.create(n)");this.heap=new e(t),this.length=0}push(t){this.heap[this.length++]=t}pop(){return this.heap[--this.length]}},C=z;v=new WeakMap,j(C,v,!1);var R=class{#g;#f;#p;#w;#C;ttl;ttlResolution;ttlAutopurge;updateAgeOnGet;updateAgeOnHas;allowStale;noDisposeOnSet;noUpdateTTL;maxEntrySize;sizeCalculation;noDeleteOnFetchRejection;noDeleteOnStaleGet;allowStaleOnFetchAbort;allowStaleOnFetchRejection;ignoreFetchAbort;#n;#S;#s;#i;#t;#l;#c;#o;#h;#_;#r;#b;#y;#u;#m;#O;#a;static unsafeExposeInternals(t){return{starts:t.#y,ttls:t.#u,sizes:t.#b,keyMap:t.#s,keyList:t.#i,valList:t.#t,next:t.#l,prev:t.#c,get head(){return t.#o},get tail(){return t.#h},free:t.#_,isBackgroundFetch:e=>t.#e(e),backgroundFetch:(e,i,s,n)=>t.#D(e,i,s,n),moveToTail:e=>t.#v(e),indexes:e=>t.#A(e),rindexes:e=>t.#F(e),isStale:e=>t.#d(e)}}get max(){return this.#g}get maxSize(){return this.#f}get calculatedSize(){return this.#S}get size(){return this.#n}get fetchMethod(){return this.#C}get dispose(){return this.#p}get disposeAfter(){return this.#w}constructor(t){let{max:e=0,ttl:i,ttlResolution:s=1,ttlAutopurge:n,updateAgeOnGet:h,updateAgeOnHas:l,allowStale:r,dispose:g,disposeAfter:b,noDisposeOnSet:f,noUpdateTTL:u,maxSize:c=0,maxEntrySize:F=0,sizeCalculation:d,fetchMethod:S,noDeleteOnFetchRejection:a,noDeleteOnStaleGet:w,allowStaleOnFetchRejection:y,allowStaleOnFetchAbort:p,ignoreFetchAbort:_}=t;if(e!==0&&!A(e))throw new TypeError("max option must be a nonnegative integer");let T=e?H(e):Array;if(!T)throw new Error("invalid max value: "+e);if(this.#g=e,this.#f=c,this.maxEntrySize=F||this.#f,this.sizeCalculation=d,this.sizeCalculation){if(!this.#f&&!this.maxEntrySize)throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");if(typeof this.sizeCalculation!="function")throw new TypeError("sizeCalculation set to non-function")}if(S!==void 0&&typeof S!="function")throw new TypeError("fetchMethod must be a function if specified");if(this.#C=S,this.#O=!!S,this.#s=new Map,this.#i=new Array(e).fill(void 0),this.#t=new Array(e).fill(void 0),this.#l=new T(e),this.#c=new T(e),this.#o=0,this.#h=0,this.#_=C.create(e),this.#n=0,this.#S=0,typeof g=="function"&&(this.#p=g),typeof b=="function"?(this.#w=b,this.#r=[]):(this.#w=void 0,this.#r=void 0),this.#m=!!this.#p,this.#a=!!this.#w,this.noDisposeOnSet=!!f,this.noUpdateTTL=!!u,this.noDeleteOnFetchRejection=!!a,this.allowStaleOnFetchRejection=!!y,this.allowStaleOnFetchAbort=!!p,this.ignoreFetchAbort=!!_,this.maxEntrySize!==0){if(this.#f!==0&&!A(this.#f))throw new TypeError("maxSize must be a positive integer if specified");if(!A(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");this.#j()}if(this.allowStale=!!r,this.noDeleteOnStaleGet=!!w,this.updateAgeOnGet=!!h,this.updateAgeOnHas=!!l,this.ttlResolution=A(s)||s===0?s:1,this.ttlAutopurge=!!n,this.ttl=i||0,this.ttl){if(!A(this.ttl))throw new TypeError("ttl must be a positive integer if specified");this.#L()}if(this.#g===0&&this.ttl===0&&this.#f===0)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!this.#g&&!this.#f){let m="LRU_CACHE_UNBOUNDED";V(m)&&(M.add(m),P("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",m,R))}}getRemainingTTL(t){return this.#s.has(t)?1/0:0}#L(){let t=new E(this.#g),e=new E(this.#g);this.#u=t,this.#y=e,this.#x=(n,h,l=O.now())=>{if(e[n]=h!==0?l:0,t[n]=h,h!==0&&this.ttlAutopurge){let r=setTimeout(()=>{this.#d(n)&&this.delete(this.#i[n])},h+1);r.unref&&r.unref()}},this.#z=n=>{e[n]=t[n]!==0?O.now():0},this.#T=(n,h)=>{if(t[h]){let l=t[h],r=e[h];if(!l||!r)return;n.ttl=l,n.start=r,n.now=i||s();let g=n.now-r;n.remainingTTL=l-g}};let i=0,s=()=>{let n=O.now();if(this.ttlResolution>0){i=n;let h=setTimeout(()=>i=0,this.ttlResolution);h.unref&&h.unref()}return n};this.getRemainingTTL=n=>{let h=this.#s.get(n);if(h===void 0)return 0;let l=t[h],r=e[h];if(!l||!r)return 1/0;let g=(i||s())-r;return l-g},this.#d=n=>{let h=e[n],l=t[n];return!!l&&!!h&&(i||s())-h>l}}#z=()=>{};#T=()=>{};#x=()=>{};#d=()=>!1;#j(){let t=new E(this.#g);this.#S=0,this.#b=t,this.#E=e=>{this.#S-=t[e],t[e]=0},this.#U=(e,i,s,n)=>{if(this.#e(i))return 0;if(!A(s))if(n){if(typeof n!="function")throw new TypeError("sizeCalculation must be a function");if(s=n(i,e),!A(s))throw new TypeError("sizeCalculation return invalid (expect positive integer)")}else throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.");return s},this.#W=(e,i,s)=>{if(t[e]=i,this.#f){let n=this.#f-t[e];for(;this.#S>n;)this.#R(!0)}this.#S+=t[e],s&&(s.entrySize=i,s.totalCalculatedSize=this.#S)}}#E=t=>{};#W=(t,e,i)=>{};#U=(t,e,i,s)=>{if(i||s)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");return 0};*#A({allowStale:t=this.allowStale}={}){if(this.#n)for(let e=this.#h;!(!this.#G(e)||((t||!this.#d(e))&&(yield e),e===this.#o));)e=this.#c[e]}*#F({allowStale:t=this.allowStale}={}){if(this.#n)for(let e=this.#o;!(!this.#G(e)||((t||!this.#d(e))&&(yield e),e===this.#h));)e=this.#l[e]}#G(t){return t!==void 0&&this.#s.get(this.#i[t])===t}*entries(){for(let t of this.#A())this.#t[t]!==void 0&&this.#i[t]!==void 0&&!this.#e(this.#t[t])&&(yield[this.#i[t],this.#t[t]])}*rentries(){for(let t of this.#F())this.#t[t]!==void 0&&this.#i[t]!==void 0&&!this.#e(this.#t[t])&&(yield[this.#i[t],this.#t[t]])}*keys(){for(let t of this.#A()){let e=this.#i[t];e!==void 0&&!this.#e(this.#t[t])&&(yield e)}}*rkeys(){for(let t of this.#F()){let e=this.#i[t];e!==void 0&&!this.#e(this.#t[t])&&(yield e)}}*values(){for(let t of this.#A())this.#t[t]!==void 0&&!this.#e(this.#t[t])&&(yield this.#t[t])}*rvalues(){for(let t of this.#F())this.#t[t]!==void 0&&!this.#e(this.#t[t])&&(yield this.#t[t])}[Symbol.iterator](){return this.entries()}[Symbol.toStringTag]="LRUCache";find(t,e={}){for(let i of this.#A()){let s=this.#t[i],n=this.#e(s)?s.__staleWhileFetching:s;if(n!==void 0&&t(n,this.#i[i],this))return this.get(this.#i[i],e)}}forEach(t,e=this){for(let i of this.#A()){let s=this.#t[i],n=this.#e(s)?s.__staleWhileFetching:s;n!==void 0&&t.call(e,n,this.#i[i],this)}}rforEach(t,e=this){for(let i of this.#F()){let s=this.#t[i],n=this.#e(s)?s.__staleWhileFetching:s;n!==void 0&&t.call(e,n,this.#i[i],this)}}purgeStale(){let t=!1;for(let e of this.#F({allowStale:!0}))this.#d(e)&&(this.delete(this.#i[e]),t=!0);return t}info(t){let e=this.#s.get(t);if(e===void 0)return;let i=this.#t[e],s=this.#e(i)?i.__staleWhileFetching:i;if(s===void 0)return;let n={value:s};if(this.#u&&this.#y){let h=this.#u[e],l=this.#y[e];if(h&&l){let r=h-(O.now()-l);n.ttl=r,n.start=Date.now()}}return this.#b&&(n.size=this.#b[e]),n}dump(){let t=[];for(let e of this.#A({allowStale:!0})){let i=this.#i[e],s=this.#t[e],n=this.#e(s)?s.__staleWhileFetching:s;if(n===void 0||i===void 0)continue;let h={value:n};if(this.#u&&this.#y){h.ttl=this.#u[e];let l=O.now()-this.#y[e];h.start=Math.floor(Date.now()-l)}this.#b&&(h.size=this.#b[e]),t.unshift([i,h])}return t}load(t){this.clear();for(let[e,i]of t){if(i.start){let s=Date.now()-i.start;i.start=O.now()-s}this.set(e,i.value,i)}}set(t,e,i={}){if(e===void 0)return this.delete(t),this;let{ttl:s=this.ttl,start:n,noDisposeOnSet:h=this.noDisposeOnSet,sizeCalculation:l=this.sizeCalculation,status:r}=i,{noUpdateTTL:g=this.noUpdateTTL}=i,b=this.#U(t,e,i.size||0,l);if(this.maxEntrySize&&b>this.maxEntrySize)return r&&(r.set="miss",r.maxEntrySizeExceeded=!0),this.delete(t),this;let f=this.#n===0?void 0:this.#s.get(t);if(f===void 0)f=this.#n===0?this.#h:this.#_.length!==0?this.#_.pop():this.#n===this.#g?this.#R(!1):this.#n,this.#i[f]=t,this.#t[f]=e,this.#s.set(t,f),this.#l[this.#h]=f,this.#c[f]=this.#h,this.#h=f,this.#n++,this.#W(f,b,r),r&&(r.set="add"),g=!1;else{this.#v(f);let u=this.#t[f];if(e!==u){if(this.#O&&this.#e(u)){u.__abortController.abort(new Error("replaced"));let{__staleWhileFetching:c}=u;c!==void 0&&!h&&(this.#m&&this.#p?.(c,t,"set"),this.#a&&this.#r?.push([c,t,"set"]))}else h||(this.#m&&this.#p?.(u,t,"set"),this.#a&&this.#r?.push([u,t,"set"]));if(this.#E(f),this.#W(f,b,r),this.#t[f]=e,r){r.set="replace";let c=u&&this.#e(u)?u.__staleWhileFetching:u;c!==void 0&&(r.oldValue=c)}}else r&&(r.set="update")}if(s!==0&&!this.#u&&this.#L(),this.#u&&(g||this.#x(f,s,n),r&&this.#T(r,f)),!h&&this.#a&&this.#r){let u=this.#r,c;for(;c=u?.shift();)this.#w?.(...c)}return this}pop(){try{for(;this.#n;){let t=this.#t[this.#o];if(this.#R(!0),this.#e(t)){if(t.__staleWhileFetching)return t.__staleWhileFetching}else if(t!==void 0)return t}}finally{if(this.#a&&this.#r){let t=this.#r,e;for(;e=t?.shift();)this.#w?.(...e)}}}#R(t){let e=this.#o,i=this.#i[e],s=this.#t[e];return this.#O&&this.#e(s)?s.__abortController.abort(new Error("evicted")):(this.#m||this.#a)&&(this.#m&&this.#p?.(s,i,"evict"),this.#a&&this.#r?.push([s,i,"evict"])),this.#E(e),t&&(this.#i[e]=void 0,this.#t[e]=void 0,this.#_.push(e)),this.#n===1?(this.#o=this.#h=0,this.#_.length=0):this.#o=this.#l[e],this.#s.delete(i),this.#n--,e}has(t,e={}){let{updateAgeOnHas:i=this.updateAgeOnHas,status:s}=e,n=this.#s.get(t);if(n!==void 0){let h=this.#t[n];if(this.#e(h)&&h.__staleWhileFetching===void 0)return!1;if(this.#d(n))s&&(s.has="stale",this.#T(s,n));else return i&&this.#z(n),s&&(s.has="hit",this.#T(s,n)),!0}else s&&(s.has="miss");return!1}peek(t,e={}){let{allowStale:i=this.allowStale}=e,s=this.#s.get(t);if(s===void 0||!i&&this.#d(s))return;let n=this.#t[s];return this.#e(n)?n.__staleWhileFetching:n}#D(t,e,i,s){let n=e===void 0?void 0:this.#t[e];if(this.#e(n))return n;let h=new W,{signal:l}=i;l?.addEventListener("abort",()=>h.abort(l.reason),{signal:h.signal});let r={signal:h.signal,options:i,context:s},g=(d,S=!1)=>{let{aborted:a}=h.signal,w=i.ignoreFetchAbort&&d!==void 0;if(i.status&&(a&&!S?(i.status.fetchAborted=!0,i.status.fetchError=h.signal.reason,w&&(i.status.fetchAbortIgnored=!0)):i.status.fetchResolved=!0),a&&!w&&!S)return f(h.signal.reason);let y=c;return this.#t[e]===c&&(d===void 0?y.__staleWhileFetching?this.#t[e]=y.__staleWhileFetching:this.delete(t):(i.status&&(i.status.fetchUpdated=!0),this.set(t,d,r.options))),d},b=d=>(i.status&&(i.status.fetchRejected=!0,i.status.fetchError=d),f(d)),f=d=>{let{aborted:S}=h.signal,a=S&&i.allowStaleOnFetchAbort,w=a||i.allowStaleOnFetchRejection,y=w||i.noDeleteOnFetchRejection,p=c;if(this.#t[e]===c&&(!y||p.__staleWhileFetching===void 0?this.delete(t):a||(this.#t[e]=p.__staleWhileFetching)),w)return i.status&&p.__staleWhileFetching!==void 0&&(i.status.returnedStale=!0),p.__staleWhileFetching;if(p.__returned===p)throw d},u=(d,S)=>{let a=this.#C?.(t,n,r);a&&a instanceof Promise&&a.then(w=>d(w===void 0?void 0:w),S),h.signal.addEventListener("abort",()=>{(!i.ignoreFetchAbort||i.allowStaleOnFetchAbort)&&(d(void 0),i.allowStaleOnFetchAbort&&(d=w=>g(w,!0)))})};i.status&&(i.status.fetchDispatched=!0);let c=new Promise(u).then(g,b),F=Object.assign(c,{__abortController:h,__staleWhileFetching:n,__returned:void 0});return e===void 0?(this.set(t,F,{...r.options,status:void 0}),e=this.#s.get(t)):this.#t[e]=F,F}#e(t){if(!this.#O)return!1;let e=t;return!!e&&e instanceof Promise&&e.hasOwnProperty("__staleWhileFetching")&&e.__abortController instanceof W}async fetch(t,e={}){let{allowStale:i=this.allowStale,updateAgeOnGet:s=this.updateAgeOnGet,noDeleteOnStaleGet:n=this.noDeleteOnStaleGet,ttl:h=this.ttl,noDisposeOnSet:l=this.noDisposeOnSet,size:r=0,sizeCalculation:g=this.sizeCalculation,noUpdateTTL:b=this.noUpdateTTL,noDeleteOnFetchRejection:f=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:u=this.allowStaleOnFetchRejection,ignoreFetchAbort:c=this.ignoreFetchAbort,allowStaleOnFetchAbort:F=this.allowStaleOnFetchAbort,context:d,forceRefresh:S=!1,status:a,signal:w}=e;if(!this.#O)return a&&(a.fetch="get"),this.get(t,{allowStale:i,updateAgeOnGet:s,noDeleteOnStaleGet:n,status:a});let y={allowStale:i,updateAgeOnGet:s,noDeleteOnStaleGet:n,ttl:h,noDisposeOnSet:l,size:r,sizeCalculation:g,noUpdateTTL:b,noDeleteOnFetchRejection:f,allowStaleOnFetchRejection:u,allowStaleOnFetchAbort:F,ignoreFetchAbort:c,status:a,signal:w},p=this.#s.get(t);if(p===void 0){a&&(a.fetch="miss");let _=this.#D(t,p,y,d);return _.__returned=_}else{let _=this.#t[p];if(this.#e(_)){let U=i&&_.__staleWhileFetching!==void 0;return a&&(a.fetch="inflight",U&&(a.returnedStale=!0)),U?_.__staleWhileFetching:_.__returned=_}let T=this.#d(p);if(!S&&!T)return a&&(a.fetch="hit"),this.#v(p),s&&this.#z(p),a&&this.#T(a,p),_;let m=this.#D(t,p,y,d),x=m.__staleWhileFetching!==void 0&&i;return a&&(a.fetch=T?"stale":"refresh",x&&T&&(a.returnedStale=!0)),x?m.__staleWhileFetching:m.__returned=m}}get(t,e={}){let{allowStale:i=this.allowStale,updateAgeOnGet:s=this.updateAgeOnGet,noDeleteOnStaleGet:n=this.noDeleteOnStaleGet,status:h}=e,l=this.#s.get(t);if(l!==void 0){let r=this.#t[l],g=this.#e(r);return h&&this.#T(h,l),this.#d(l)?(h&&(h.get="stale"),g?(h&&i&&r.__staleWhileFetching!==void 0&&(h.returnedStale=!0),i?r.__staleWhileFetching:void 0):(n||this.delete(t),h&&i&&(h.returnedStale=!0),i?r:void 0)):(h&&(h.get="hit"),g?r.__staleWhileFetching:(this.#v(l),s&&this.#z(l),r))}else h&&(h.get="miss")}#I(t,e){this.#c[e]=t,this.#l[t]=e}#v(t){t!==this.#h&&(t===this.#o?this.#o=this.#l[t]:this.#I(this.#c[t],this.#l[t]),this.#I(this.#h,t),this.#h=t)}delete(t){let e=!1;if(this.#n!==0){let i=this.#s.get(t);if(i!==void 0)if(e=!0,this.#n===1)this.clear();else{this.#E(i);let s=this.#t[i];if(this.#e(s)?s.__abortController.abort(new Error("deleted")):(this.#m||this.#a)&&(this.#m&&this.#p?.(s,t,"delete"),this.#a&&this.#r?.push([s,t,"delete"])),this.#s.delete(t),this.#i[i]=void 0,this.#t[i]=void 0,i===this.#h)this.#h=this.#c[i];else if(i===this.#o)this.#o=this.#l[i];else{let n=this.#c[i];this.#l[n]=this.#l[i];let h=this.#l[i];this.#c[h]=this.#c[i]}this.#n--,this.#_.push(i)}}if(this.#a&&this.#r?.length){let i=this.#r,s;for(;s=i?.shift();)this.#w?.(...s)}return e}clear(){for(let t of this.#F({allowStale:!0})){let e=this.#t[t];if(this.#e(e))e.__abortController.abort(new Error("deleted"));else{let i=this.#i[t];this.#m&&this.#p?.(e,i,"delete"),this.#a&&this.#r?.push([e,i,"delete"])}}if(this.#s.clear(),this.#t.fill(void 0),this.#i.fill(void 0),this.#u&&this.#y&&(this.#u.fill(0),this.#y.fill(0)),this.#b&&this.#b.fill(0),this.#o=0,this.#h=0,this.#_.length=0,this.#S=0,this.#n=0,this.#a&&this.#r){let t=this.#r,e;for(;e=t?.shift();)this.#w?.(...e)}}};export{R as LRUCache};
+var G=(l,t,e)=>{if(!t.has(l))throw TypeError("Cannot "+e)};var I=(l,t,e)=>(G(l,t,"read from private field"),e?e.call(l):t.get(l)),j=(l,t,e)=>{if(t.has(l))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(l):t.set(l,e)},x=(l,t,e,i)=>(G(l,t,"write to private field"),i?i.call(l,e):t.set(l,e),e);var T=typeof performance=="object"&&performance&&typeof performance.now=="function"?performance:Date,P=new Set,M=typeof process=="object"&&process?process:{},H=(l,t,e,i)=>{typeof M.emitWarning=="function"?M.emitWarning(l,t,e,i):console.error(`[${e}] ${t}: ${l}`)},W=globalThis.AbortController,N=globalThis.AbortSignal;if(typeof W>"u"){N=class{onabort;_onabort=[];reason;aborted=!1;addEventListener(i,s){this._onabort.push(s)}},W=class{constructor(){t()}signal=new N;abort(i){if(!this.signal.aborted){this.signal.reason=i,this.signal.aborted=!0;for(let s of this.signal._onabort)s(i);this.signal.onabort?.(i)}}};let l=M.env?.LRU_CACHE_IGNORE_AC_WARNING!=="1",t=()=>{l&&(l=!1,H("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.","NO_ABORT_CONTROLLER","ENOTSUP",t))}}var V=l=>!P.has(l),Y=Symbol("type"),A=l=>l&&l===Math.floor(l)&&l>0&&isFinite(l),k=l=>A(l)?l<=Math.pow(2,8)?Uint8Array:l<=Math.pow(2,16)?Uint16Array:l<=Math.pow(2,32)?Uint32Array:l<=Number.MAX_SAFE_INTEGER?O:null:null,O=class extends Array{constructor(t){super(t),this.fill(0)}},z,E=class{heap;length;static create(t){let e=k(t);if(!e)return[];x(E,z,!0);let i=new E(t,e);return x(E,z,!1),i}constructor(t,e){if(!I(E,z))throw new TypeError("instantiate Stack using Stack.create(n)");this.heap=new e(t),this.length=0}push(t){this.heap[this.length++]=t}pop(){return this.heap[--this.length]}},R=E;z=new WeakMap,j(R,z,!1);var D=class{#g;#f;#p;#w;#R;#W;ttl;ttlResolution;ttlAutopurge;updateAgeOnGet;updateAgeOnHas;allowStale;noDisposeOnSet;noUpdateTTL;maxEntrySize;sizeCalculation;noDeleteOnFetchRejection;noDeleteOnStaleGet;allowStaleOnFetchAbort;allowStaleOnFetchRejection;ignoreFetchAbort;#n;#S;#s;#i;#t;#l;#c;#o;#h;#_;#r;#m;#b;#u;#y;#O;#a;static unsafeExposeInternals(t){return{starts:t.#b,ttls:t.#u,sizes:t.#m,keyMap:t.#s,keyList:t.#i,valList:t.#t,next:t.#l,prev:t.#c,get head(){return t.#o},get tail(){return t.#h},free:t.#_,isBackgroundFetch:e=>t.#e(e),backgroundFetch:(e,i,s,n)=>t.#x(e,i,s,n),moveToTail:e=>t.#C(e),indexes:e=>t.#A(e),rindexes:e=>t.#F(e),isStale:e=>t.#d(e)}}get max(){return this.#g}get maxSize(){return this.#f}get calculatedSize(){return this.#S}get size(){return this.#n}get fetchMethod(){return this.#R}get memoMethod(){return this.#W}get dispose(){return this.#p}get disposeAfter(){return this.#w}constructor(t){let{max:e=0,ttl:i,ttlResolution:s=1,ttlAutopurge:n,updateAgeOnGet:h,updateAgeOnHas:o,allowStale:r,dispose:g,disposeAfter:m,noDisposeOnSet:f,noUpdateTTL:u,maxSize:c=0,maxEntrySize:F=0,sizeCalculation:d,fetchMethod:S,memoMethod:a,noDeleteOnFetchRejection:w,noDeleteOnStaleGet:b,allowStaleOnFetchRejection:p,allowStaleOnFetchAbort:_,ignoreFetchAbort:v}=t;if(e!==0&&!A(e))throw new TypeError("max option must be a nonnegative integer");let y=e?k(e):Array;if(!y)throw new Error("invalid max value: "+e);if(this.#g=e,this.#f=c,this.maxEntrySize=F||this.#f,this.sizeCalculation=d,this.sizeCalculation){if(!this.#f&&!this.maxEntrySize)throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");if(typeof this.sizeCalculation!="function")throw new TypeError("sizeCalculation set to non-function")}if(a!==void 0&&typeof a!="function")throw new TypeError("memoMethod must be a function if defined");if(this.#W=a,S!==void 0&&typeof S!="function")throw new TypeError("fetchMethod must be a function if specified");if(this.#R=S,this.#O=!!S,this.#s=new Map,this.#i=new Array(e).fill(void 0),this.#t=new Array(e).fill(void 0),this.#l=new y(e),this.#c=new y(e),this.#o=0,this.#h=0,this.#_=R.create(e),this.#n=0,this.#S=0,typeof g=="function"&&(this.#p=g),typeof m=="function"?(this.#w=m,this.#r=[]):(this.#w=void 0,this.#r=void 0),this.#y=!!this.#p,this.#a=!!this.#w,this.noDisposeOnSet=!!f,this.noUpdateTTL=!!u,this.noDeleteOnFetchRejection=!!w,this.allowStaleOnFetchRejection=!!p,this.allowStaleOnFetchAbort=!!_,this.ignoreFetchAbort=!!v,this.maxEntrySize!==0){if(this.#f!==0&&!A(this.#f))throw new TypeError("maxSize must be a positive integer if specified");if(!A(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");this.#P()}if(this.allowStale=!!r,this.noDeleteOnStaleGet=!!b,this.updateAgeOnGet=!!h,this.updateAgeOnHas=!!o,this.ttlResolution=A(s)||s===0?s:1,this.ttlAutopurge=!!n,this.ttl=i||0,this.ttl){if(!A(this.ttl))throw new TypeError("ttl must be a positive integer if specified");this.#M()}if(this.#g===0&&this.ttl===0&&this.#f===0)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!this.#g&&!this.#f){let C="LRU_CACHE_UNBOUNDED";V(C)&&(P.add(C),H("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",C,D))}}getRemainingTTL(t){return this.#s.has(t)?1/0:0}#M(){let t=new O(this.#g),e=new O(this.#g);this.#u=t,this.#b=e,this.#U=(n,h,o=T.now())=>{if(e[n]=h!==0?o:0,t[n]=h,h!==0&&this.ttlAutopurge){let r=setTimeout(()=>{this.#d(n)&&this.#T(this.#i[n],"expire")},h+1);r.unref&&r.unref()}},this.#z=n=>{e[n]=t[n]!==0?T.now():0},this.#E=(n,h)=>{if(t[h]){let o=t[h],r=e[h];if(!o||!r)return;n.ttl=o,n.start=r,n.now=i||s();let g=n.now-r;n.remainingTTL=o-g}};let i=0,s=()=>{let n=T.now();if(this.ttlResolution>0){i=n;let h=setTimeout(()=>i=0,this.ttlResolution);h.unref&&h.unref()}return n};this.getRemainingTTL=n=>{let h=this.#s.get(n);if(h===void 0)return 0;let o=t[h],r=e[h];if(!o||!r)return 1/0;let g=(i||s())-r;return o-g},this.#d=n=>{let h=e[n],o=t[n];return!!o&&!!h&&(i||s())-h>o}}#z=()=>{};#E=()=>{};#U=()=>{};#d=()=>!1;#P(){let t=new O(this.#g);this.#S=0,this.#m=t,this.#v=e=>{this.#S-=t[e],t[e]=0},this.#G=(e,i,s,n)=>{if(this.#e(i))return 0;if(!A(s))if(n){if(typeof n!="function")throw new TypeError("sizeCalculation must be a function");if(s=n(i,e),!A(s))throw new TypeError("sizeCalculation return invalid (expect positive integer)")}else throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.");return s},this.#D=(e,i,s)=>{if(t[e]=i,this.#f){let n=this.#f-t[e];for(;this.#S>n;)this.#L(!0)}this.#S+=t[e],s&&(s.entrySize=i,s.totalCalculatedSize=this.#S)}}#v=t=>{};#D=(t,e,i)=>{};#G=(t,e,i,s)=>{if(i||s)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");return 0};*#A({allowStale:t=this.allowStale}={}){if(this.#n)for(let e=this.#h;!(!this.#I(e)||((t||!this.#d(e))&&(yield e),e===this.#o));)e=this.#c[e]}*#F({allowStale:t=this.allowStale}={}){if(this.#n)for(let e=this.#o;!(!this.#I(e)||((t||!this.#d(e))&&(yield e),e===this.#h));)e=this.#l[e]}#I(t){return t!==void 0&&this.#s.get(this.#i[t])===t}*entries(){for(let t of this.#A())this.#t[t]!==void 0&&this.#i[t]!==void 0&&!this.#e(this.#t[t])&&(yield[this.#i[t],this.#t[t]])}*rentries(){for(let t of this.#F())this.#t[t]!==void 0&&this.#i[t]!==void 0&&!this.#e(this.#t[t])&&(yield[this.#i[t],this.#t[t]])}*keys(){for(let t of this.#A()){let e=this.#i[t];e!==void 0&&!this.#e(this.#t[t])&&(yield e)}}*rkeys(){for(let t of this.#F()){let e=this.#i[t];e!==void 0&&!this.#e(this.#t[t])&&(yield e)}}*values(){for(let t of this.#A())this.#t[t]!==void 0&&!this.#e(this.#t[t])&&(yield this.#t[t])}*rvalues(){for(let t of this.#F())this.#t[t]!==void 0&&!this.#e(this.#t[t])&&(yield this.#t[t])}[Symbol.iterator](){return this.entries()}[Symbol.toStringTag]="LRUCache";find(t,e={}){for(let i of this.#A()){let s=this.#t[i],n=this.#e(s)?s.__staleWhileFetching:s;if(n!==void 0&&t(n,this.#i[i],this))return this.get(this.#i[i],e)}}forEach(t,e=this){for(let i of this.#A()){let s=this.#t[i],n=this.#e(s)?s.__staleWhileFetching:s;n!==void 0&&t.call(e,n,this.#i[i],this)}}rforEach(t,e=this){for(let i of this.#F()){let s=this.#t[i],n=this.#e(s)?s.__staleWhileFetching:s;n!==void 0&&t.call(e,n,this.#i[i],this)}}purgeStale(){let t=!1;for(let e of this.#F({allowStale:!0}))this.#d(e)&&(this.#T(this.#i[e],"expire"),t=!0);return t}info(t){let e=this.#s.get(t);if(e===void 0)return;let i=this.#t[e],s=this.#e(i)?i.__staleWhileFetching:i;if(s===void 0)return;let n={value:s};if(this.#u&&this.#b){let h=this.#u[e],o=this.#b[e];if(h&&o){let r=h-(T.now()-o);n.ttl=r,n.start=Date.now()}}return this.#m&&(n.size=this.#m[e]),n}dump(){let t=[];for(let e of this.#A({allowStale:!0})){let i=this.#i[e],s=this.#t[e],n=this.#e(s)?s.__staleWhileFetching:s;if(n===void 0||i===void 0)continue;let h={value:n};if(this.#u&&this.#b){h.ttl=this.#u[e];let o=T.now()-this.#b[e];h.start=Math.floor(Date.now()-o)}this.#m&&(h.size=this.#m[e]),t.unshift([i,h])}return t}load(t){this.clear();for(let[e,i]of t){if(i.start){let s=Date.now()-i.start;i.start=T.now()-s}this.set(e,i.value,i)}}set(t,e,i={}){if(e===void 0)return this.delete(t),this;let{ttl:s=this.ttl,start:n,noDisposeOnSet:h=this.noDisposeOnSet,sizeCalculation:o=this.sizeCalculation,status:r}=i,{noUpdateTTL:g=this.noUpdateTTL}=i,m=this.#G(t,e,i.size||0,o);if(this.maxEntrySize&&m>this.maxEntrySize)return r&&(r.set="miss",r.maxEntrySizeExceeded=!0),this.#T(t,"set"),this;let f=this.#n===0?void 0:this.#s.get(t);if(f===void 0)f=this.#n===0?this.#h:this.#_.length!==0?this.#_.pop():this.#n===this.#g?this.#L(!1):this.#n,this.#i[f]=t,this.#t[f]=e,this.#s.set(t,f),this.#l[this.#h]=f,this.#c[f]=this.#h,this.#h=f,this.#n++,this.#D(f,m,r),r&&(r.set="add"),g=!1;else{this.#C(f);let u=this.#t[f];if(e!==u){if(this.#O&&this.#e(u)){u.__abortController.abort(new Error("replaced"));let{__staleWhileFetching:c}=u;c!==void 0&&!h&&(this.#y&&this.#p?.(c,t,"set"),this.#a&&this.#r?.push([c,t,"set"]))}else h||(this.#y&&this.#p?.(u,t,"set"),this.#a&&this.#r?.push([u,t,"set"]));if(this.#v(f),this.#D(f,m,r),this.#t[f]=e,r){r.set="replace";let c=u&&this.#e(u)?u.__staleWhileFetching:u;c!==void 0&&(r.oldValue=c)}}else r&&(r.set="update")}if(s!==0&&!this.#u&&this.#M(),this.#u&&(g||this.#U(f,s,n),r&&this.#E(r,f)),!h&&this.#a&&this.#r){let u=this.#r,c;for(;c=u?.shift();)this.#w?.(...c)}return this}pop(){try{for(;this.#n;){let t=this.#t[this.#o];if(this.#L(!0),this.#e(t)){if(t.__staleWhileFetching)return t.__staleWhileFetching}else if(t!==void 0)return t}}finally{if(this.#a&&this.#r){let t=this.#r,e;for(;e=t?.shift();)this.#w?.(...e)}}}#L(t){let e=this.#o,i=this.#i[e],s=this.#t[e];return this.#O&&this.#e(s)?s.__abortController.abort(new Error("evicted")):(this.#y||this.#a)&&(this.#y&&this.#p?.(s,i,"evict"),this.#a&&this.#r?.push([s,i,"evict"])),this.#v(e),t&&(this.#i[e]=void 0,this.#t[e]=void 0,this.#_.push(e)),this.#n===1?(this.#o=this.#h=0,this.#_.length=0):this.#o=this.#l[e],this.#s.delete(i),this.#n--,e}has(t,e={}){let{updateAgeOnHas:i=this.updateAgeOnHas,status:s}=e,n=this.#s.get(t);if(n!==void 0){let h=this.#t[n];if(this.#e(h)&&h.__staleWhileFetching===void 0)return!1;if(this.#d(n))s&&(s.has="stale",this.#E(s,n));else return i&&this.#z(n),s&&(s.has="hit",this.#E(s,n)),!0}else s&&(s.has="miss");return!1}peek(t,e={}){let{allowStale:i=this.allowStale}=e,s=this.#s.get(t);if(s===void 0||!i&&this.#d(s))return;let n=this.#t[s];return this.#e(n)?n.__staleWhileFetching:n}#x(t,e,i,s){let n=e===void 0?void 0:this.#t[e];if(this.#e(n))return n;let h=new W,{signal:o}=i;o?.addEventListener("abort",()=>h.abort(o.reason),{signal:h.signal});let r={signal:h.signal,options:i,context:s},g=(d,S=!1)=>{let{aborted:a}=h.signal,w=i.ignoreFetchAbort&&d!==void 0;if(i.status&&(a&&!S?(i.status.fetchAborted=!0,i.status.fetchError=h.signal.reason,w&&(i.status.fetchAbortIgnored=!0)):i.status.fetchResolved=!0),a&&!w&&!S)return f(h.signal.reason);let b=c;return this.#t[e]===c&&(d===void 0?b.__staleWhileFetching?this.#t[e]=b.__staleWhileFetching:this.#T(t,"fetch"):(i.status&&(i.status.fetchUpdated=!0),this.set(t,d,r.options))),d},m=d=>(i.status&&(i.status.fetchRejected=!0,i.status.fetchError=d),f(d)),f=d=>{let{aborted:S}=h.signal,a=S&&i.allowStaleOnFetchAbort,w=a||i.allowStaleOnFetchRejection,b=w||i.noDeleteOnFetchRejection,p=c;if(this.#t[e]===c&&(!b||p.__staleWhileFetching===void 0?this.#T(t,"fetch"):a||(this.#t[e]=p.__staleWhileFetching)),w)return i.status&&p.__staleWhileFetching!==void 0&&(i.status.returnedStale=!0),p.__staleWhileFetching;if(p.__returned===p)throw d},u=(d,S)=>{let a=this.#R?.(t,n,r);a&&a instanceof Promise&&a.then(w=>d(w===void 0?void 0:w),S),h.signal.addEventListener("abort",()=>{(!i.ignoreFetchAbort||i.allowStaleOnFetchAbort)&&(d(void 0),i.allowStaleOnFetchAbort&&(d=w=>g(w,!0)))})};i.status&&(i.status.fetchDispatched=!0);let c=new Promise(u).then(g,m),F=Object.assign(c,{__abortController:h,__staleWhileFetching:n,__returned:void 0});return e===void 0?(this.set(t,F,{...r.options,status:void 0}),e=this.#s.get(t)):this.#t[e]=F,F}#e(t){if(!this.#O)return!1;let e=t;return!!e&&e instanceof Promise&&e.hasOwnProperty("__staleWhileFetching")&&e.__abortController instanceof W}async fetch(t,e={}){let{allowStale:i=this.allowStale,updateAgeOnGet:s=this.updateAgeOnGet,noDeleteOnStaleGet:n=this.noDeleteOnStaleGet,ttl:h=this.ttl,noDisposeOnSet:o=this.noDisposeOnSet,size:r=0,sizeCalculation:g=this.sizeCalculation,noUpdateTTL:m=this.noUpdateTTL,noDeleteOnFetchRejection:f=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:u=this.allowStaleOnFetchRejection,ignoreFetchAbort:c=this.ignoreFetchAbort,allowStaleOnFetchAbort:F=this.allowStaleOnFetchAbort,context:d,forceRefresh:S=!1,status:a,signal:w}=e;if(!this.#O)return a&&(a.fetch="get"),this.get(t,{allowStale:i,updateAgeOnGet:s,noDeleteOnStaleGet:n,status:a});let b={allowStale:i,updateAgeOnGet:s,noDeleteOnStaleGet:n,ttl:h,noDisposeOnSet:o,size:r,sizeCalculation:g,noUpdateTTL:m,noDeleteOnFetchRejection:f,allowStaleOnFetchRejection:u,allowStaleOnFetchAbort:F,ignoreFetchAbort:c,status:a,signal:w},p=this.#s.get(t);if(p===void 0){a&&(a.fetch="miss");let _=this.#x(t,p,b,d);return _.__returned=_}else{let _=this.#t[p];if(this.#e(_)){let U=i&&_.__staleWhileFetching!==void 0;return a&&(a.fetch="inflight",U&&(a.returnedStale=!0)),U?_.__staleWhileFetching:_.__returned=_}let v=this.#d(p);if(!S&&!v)return a&&(a.fetch="hit"),this.#C(p),s&&this.#z(p),a&&this.#E(a,p),_;let y=this.#x(t,p,b,d),L=y.__staleWhileFetching!==void 0&&i;return a&&(a.fetch=v?"stale":"refresh",L&&v&&(a.returnedStale=!0)),L?y.__staleWhileFetching:y.__returned=y}}async forceFetch(t,e={}){let i=await this.fetch(t,e);if(i===void 0)throw new Error("fetch() returned undefined");return i}memo(t,e={}){let i=this.#W;if(!i)throw new Error("no memoMethod provided to constructor");let{context:s,forceRefresh:n,...h}=e,o=this.get(t,h);if(!n&&o!==void 0)return o;let r=i(t,o,{options:h,context:s});return this.set(t,r,h),r}get(t,e={}){let{allowStale:i=this.allowStale,updateAgeOnGet:s=this.updateAgeOnGet,noDeleteOnStaleGet:n=this.noDeleteOnStaleGet,status:h}=e,o=this.#s.get(t);if(o!==void 0){let r=this.#t[o],g=this.#e(r);return h&&this.#E(h,o),this.#d(o)?(h&&(h.get="stale"),g?(h&&i&&r.__staleWhileFetching!==void 0&&(h.returnedStale=!0),i?r.__staleWhileFetching:void 0):(n||this.#T(t,"expire"),h&&i&&(h.returnedStale=!0),i?r:void 0)):(h&&(h.get="hit"),g?r.__staleWhileFetching:(this.#C(o),s&&this.#z(o),r))}else h&&(h.get="miss")}#j(t,e){this.#c[e]=t,this.#l[t]=e}#C(t){t!==this.#h&&(t===this.#o?this.#o=this.#l[t]:this.#j(this.#c[t],this.#l[t]),this.#j(this.#h,t),this.#h=t)}delete(t){return this.#T(t,"delete")}#T(t,e){let i=!1;if(this.#n!==0){let s=this.#s.get(t);if(s!==void 0)if(i=!0,this.#n===1)this.#N(e);else{this.#v(s);let n=this.#t[s];if(this.#e(n)?n.__abortController.abort(new Error("deleted")):(this.#y||this.#a)&&(this.#y&&this.#p?.(n,t,e),this.#a&&this.#r?.push([n,t,e])),this.#s.delete(t),this.#i[s]=void 0,this.#t[s]=void 0,s===this.#h)this.#h=this.#c[s];else if(s===this.#o)this.#o=this.#l[s];else{let h=this.#c[s];this.#l[h]=this.#l[s];let o=this.#l[s];this.#c[o]=this.#c[s]}this.#n--,this.#_.push(s)}}if(this.#a&&this.#r?.length){let s=this.#r,n;for(;n=s?.shift();)this.#w?.(...n)}return i}clear(){return this.#N("delete")}#N(t){for(let e of this.#F({allowStale:!0})){let i=this.#t[e];if(this.#e(i))i.__abortController.abort(new Error("deleted"));else{let s=this.#i[e];this.#y&&this.#p?.(i,s,t),this.#a&&this.#r?.push([i,s,t])}}if(this.#s.clear(),this.#t.fill(void 0),this.#i.fill(void 0),this.#u&&this.#b&&(this.#u.fill(0),this.#b.fill(0)),this.#m&&this.#m.fill(0),this.#o=0,this.#h=0,this.#_.length=0,this.#S=0,this.#n=0,this.#a&&this.#r){let e=this.#r,i;for(;i=e?.shift();)this.#w?.(...i)}}};export{D as LRUCache};
//# sourceMappingURL=index.min.js.map
diff --git a/deps/npm/node_modules/lru-cache/package.json b/deps/npm/node_modules/lru-cache/package.json
index ef118623196..f3cd4c0cc53 100644
--- a/deps/npm/node_modules/lru-cache/package.json
+++ b/deps/npm/node_modules/lru-cache/package.json
@@ -1,7 +1,10 @@
{
"name": "lru-cache",
+ "publishConfig": {
+ "tag": "legacy-v10"
+ },
"description": "A cache object that deletes the least-recently-used items.",
- "version": "10.2.2",
+ "version": "10.4.3",
"author": "Isaac Z. Schlueter ",
"keywords": [
"mru",
@@ -49,18 +52,16 @@
"url": "git://github.com/isaacs/node-lru-cache.git"
},
"devDependencies": {
- "@tapjs/clock": "^1.1.16",
"@types/node": "^20.2.5",
"@types/tap": "^15.0.6",
"benchmark": "^2.1.4",
- "clock-mock": "^2.0.2",
"esbuild": "^0.17.11",
"eslint-config-prettier": "^8.5.0",
"marked": "^4.2.12",
"mkdirp": "^2.1.5",
"prettier": "^2.6.2",
- "tap": "^18.5.7",
- "tshy": "^1.8.0",
+ "tap": "^20.0.3",
+ "tshy": "^2.0.0",
"tslib": "^2.4.0",
"typedoc": "^0.25.3",
"typescript": "^5.2.2"
@@ -69,9 +70,6 @@
"files": [
"dist"
],
- "engines": {
- "node": "14 || >=16.14"
- },
"prettier": {
"semi": false,
"printWidth": 70,
@@ -113,5 +111,6 @@
}
}
},
- "type": "module"
+ "type": "module",
+ "module": "./dist/esm/index.js"
}
diff --git a/deps/npm/node_modules/node-gyp/.release-please-manifest.json b/deps/npm/node_modules/node-gyp/.release-please-manifest.json
index 1842506cfa9..01db3293b94 100644
--- a/deps/npm/node_modules/node-gyp/.release-please-manifest.json
+++ b/deps/npm/node_modules/node-gyp/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "10.1.0"
+ ".": "10.2.0"
}
diff --git a/deps/npm/node_modules/node-gyp/CHANGELOG.md b/deps/npm/node_modules/node-gyp/CHANGELOG.md
index 9db4f9f9528..1d4e4185320 100644
--- a/deps/npm/node_modules/node-gyp/CHANGELOG.md
+++ b/deps/npm/node_modules/node-gyp/CHANGELOG.md
@@ -1,5 +1,34 @@
# Changelog
+## [10.2.0](https://github.com/nodejs/node-gyp/compare/v10.1.0...v10.2.0) (2024-07-09)
+
+
+### Features
+
+* allow VCINSTALLDIR to specify a portable instance ([#3036](https://github.com/nodejs/node-gyp/issues/3036)) ([d38af2e](https://github.com/nodejs/node-gyp/commit/d38af2e0c2a81b12cd221b1f8517fb89e609d62c))
+* **gyp:** update gyp to v0.18.1 ([#3039](https://github.com/nodejs/node-gyp/issues/3039)) ([ea99fea](https://github.com/nodejs/node-gyp/commit/ea99fea83485dc5be04db01df9b2fdbe05319b8e))
+* support `rebuild` and `build` for cross-compiling Node-API module to wasm on Windows ([#2974](https://github.com/nodejs/node-gyp/issues/2974)) ([6318d2b](https://github.com/nodejs/node-gyp/commit/6318d2b210224415ff5932c2863e6cc14d4583dc))
+
+
+### Core
+
+* add an arch check to VS 2019 ([#3025](https://github.com/nodejs/node-gyp/issues/3025)) ([323957b](https://github.com/nodejs/node-gyp/commit/323957b74e9586fb3fbfb2acad5040379c778de6))
+* **deps:** bump seanmiddleditch/gha-setup-ninja from 4 to 5 ([#3041](https://github.com/nodejs/node-gyp/issues/3041)) ([10f6730](https://github.com/nodejs/node-gyp/commit/10f6730be660e7a38be8a12111937e37fcf74834))
+* proc-log@4.0.0 ([#3022](https://github.com/nodejs/node-gyp/issues/3022)) ([141aa6b](https://github.com/nodejs/node-gyp/commit/141aa6bf029e6f984be8ea98aaf985e5df894082))
+* tar@6.2.1 ([#3021](https://github.com/nodejs/node-gyp/issues/3021)) ([b22d5ee](https://github.com/nodejs/node-gyp/commit/b22d5eef861892c968052ffc1c71b551f738163b))
+
+
+### Doc
+
+* `node-pre-gyp` is no longer maintained ([#3015](https://github.com/nodejs/node-gyp/issues/3015)) ([93186f1](https://github.com/nodejs/node-gyp/commit/93186f10c966b4148fc500e48f8cbffacccdfa3c))
+* add the way to configuring Python dependency for Windows PowerShell ([#2996](https://github.com/nodejs/node-gyp/issues/2996)) ([9fd7936](https://github.com/nodejs/node-gyp/commit/9fd7936f0d7232a8a79e6a7b6cbfb814d9042b13))
+* Installation -- Python >= v3.12 requires `node-gyp` >= v10 ([#3010](https://github.com/nodejs/node-gyp/issues/3010)) ([a6b48fc](https://github.com/nodejs/node-gyp/commit/a6b48fca9993e54d757cd110f6b41f8200d99ca4))
+
+
+### Miscellaneous
+
+* fix ruff command ([#3044](https://github.com/nodejs/node-gyp/issues/3044)) ([b3916d5](https://github.com/nodejs/node-gyp/commit/b3916d5b25704a53e89be16b500036a14bdc5060))
+
## [10.1.0](https://github.com/nodejs/node-gyp/compare/v10.0.1...v10.1.0) (2024-03-13)
diff --git a/deps/npm/node_modules/node-gyp/README.md b/deps/npm/node_modules/node-gyp/README.md
index 9e4c608e20a..474c59b4589 100644
--- a/deps/npm/node_modules/node-gyp/README.md
+++ b/deps/npm/node_modules/node-gyp/README.md
@@ -21,6 +21,9 @@ All current and LTS target versions of Node.js are supported. Depending on what
## Installation
+> [!Important]
+> Python >= v3.12 requires `node-gyp` >= v10
+
You can install `node-gyp` using `npm`:
``` bash
@@ -45,10 +48,16 @@ Depending on your operating system, you will need to install:
### On Windows
-Install the current [version of Python](https://devguide.python.org/versions/) from the
-[Microsoft Store](https://apps.microsoft.com/store/search?publisher=Python+Software+Foundation).
+Install tools with [Chocolatey](https://chocolatey.org):
+``` bash
+choco install python visualstudio2022-workload-vctools -y
+```
+
+Or install and configure Python and Visual Studio tools manually:
+
+ * Install the current [version of Python](https://devguide.python.org/versions/) from the
+ [Microsoft Store](https://apps.microsoft.com/store/search?publisher=Python+Software+Foundation).
-Install tools and configuration manually:
* Install Visual C++ Build Environment: For Visual Studio 2019 or later, use the `Desktop development with C++` workload from [Visual Studio Community](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community). For a version older than Visual Studio 2019, install [Visual Studio Build Tools](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools) with the `Visual C++ build tools` option.
If the above steps didn't work for you, please visit [Microsoft's Node.js Guidelines for Windows](https://github.com/Microsoft/nodejs-guidelines/blob/master/windows-environment.md#compiling-native-addon-modules) for additional tips.
@@ -81,7 +90,8 @@ export npm_config_python=/path/to/executable/python
Or on Windows:
```console
py --list-paths # To see the installed Python versions
-set npm_config_python=C:\path\to\python.exe
+set npm_config_python=C:\path\to\python.exe # CMD
+$Env:npm_config_python="C:\path\to\python.exe" # PowerShell
```
3. If the `PYTHON` environment variable is set to the path of a Python executable,
diff --git a/deps/npm/node_modules/node-gyp/gyp/.release-please-manifest.json b/deps/npm/node_modules/node-gyp/gyp/.release-please-manifest.json
new file mode 100644
index 00000000000..cbd0ca0683d
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/gyp/.release-please-manifest.json
@@ -0,0 +1,3 @@
+{
+ ".": "0.18.1"
+}
diff --git a/deps/npm/node_modules/node-gyp/gyp/data/ninja/build.ninja b/deps/npm/node_modules/node-gyp/gyp/data/ninja/build.ninja
new file mode 100644
index 00000000000..2400dbb1f0d
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/gyp/data/ninja/build.ninja
@@ -0,0 +1,4 @@
+rule cc
+ command = cc $in $out
+
+build my.out: cc my.in
diff --git a/deps/npm/node_modules/node-gyp/gyp/docs/GypVsCMake.md b/deps/npm/node_modules/node-gyp/gyp/docs/GypVsCMake.md
new file mode 100644
index 00000000000..6d659a6123b
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/gyp/docs/GypVsCMake.md
@@ -0,0 +1,116 @@
+# vs. CMake
+
+GYP was originally created to generate native IDE project files (Visual Studio, Xcode) for building [Chromium](http://www.chromim.org).
+
+The functionality of GYP is very similar to the [CMake](http://www.cmake.org)
+build tool. Bradley Nelson wrote up the following description of why the team
+created GYP instead of using CMake. The text below is copied from
+http://www.mail-archive.com/webkit-dev@lists.webkit.org/msg11029.html
+
+```
+
+Re: [webkit-dev] CMake as a build system?
+Bradley Nelson
+Mon, 19 Apr 2010 22:38:30 -0700
+
+Here's the innards of an email with a laundry list of stuff I came up with a
+while back on the gyp-developers list in response to Mike Craddick regarding
+what motivated gyp's development, since we were aware of cmake at the time
+(we'd even started a speculative port):
+
+
+I did an exploratory port of portions of Chromium to cmake (I think I got as
+far as net, base, sandbox, and part of webkit).
+There were a number of motivations, not all of which would apply to other
+projects. Also, some of the design of gyp was informed by experience at
+Google with large projects built wholly from source, leading to features
+absent from cmake, but not strictly required for Chromium.
+
+1. Ability to incrementally transition on Windows. It took us about 6 months
+to switch fully to gyp. Previous attempts to move to scons had taken a long
+time and failed, due to the requirement to transition while in flight. For a
+substantial period of time, we had a hybrid of checked in vcproj and gyp generated
+vcproj. To this day we still have a good number of GUIDs pinned in the gyp files,
+because different parts of our release pipeline have leftover assumptions
+regarding manipulating the raw sln/vcprojs. This transition occurred from
+the bottom up, largely because modules like base were easier to convert, and
+had a lower churn rate. During early stages of the transition, the majority
+of the team wasn't even aware they were using gyp, as it integrated into
+their existing workflow, and only affected modules that had been converted.
+
+2. Generation of a more 'normal' vcproj file. Gyp attempts, particularly on
+Windows, to generate vcprojs which resemble hand generated projects. It
+doesn't generate any Makefile type projects, but instead produces msvs
+Custom Build Steps and Custom Build Rules. This makes the resulting projects
+easier to understand from the IDE and avoids parts of the IDE that simply
+don't function correctly if you use Makefile projects. Our early hope with
+gyp was to support the least common denominator of features present in each
+of the platform specific project file formats, rather than falling back on
+generated Makefiles/shell scripts to emulate some common abstraction. CMake by
+comparison makes a good faith attempt to use native project features, but
+falls back on generated scripts in order to preserve the same semantics on
+each platforms.
+
+3. Abstraction on the level of project settings, rather than command line
+flags. In gyp's syntax you can add nearly any option present in a hand
+generated xcode/vcproj file. This allows you to use abstractions built into
+the IDEs rather than reverse engineering them possibly incorrectly for
+things like: manifest generation, precompiled headers, bundle generation.
+When somebody wants to use a particular menu option from msvs, I'm able to
+do a web search on the name of the setting from the IDE and provide them
+with a gyp stanza that does the equivalent. In many cases, not all project
+file constructs correspond to command line flags.
+
+4. Strong notion of module public/private interface. Gyp allows targets to
+publish a set of direct_dependent_settings, specifying things like
+include_dirs, defines, platforms specific settings, etc. This means that
+when module A depends on module B, it automatically acquires the right build
+settings without module A being filled with assumptions/knowledge of exactly
+how module B is built. Additionally, all of the transitive dependencies of
+module B are pulled in. This avoids their being a single top level view of
+the project, rather each gyp file expresses knowledge about its immediate
+neighbors. This keep local knowledge local. CMake effectively has a large
+shared global namespace.
+
+5. Cross platform generation. CMake is not able to generate all project
+files on all platforms. For example xcode projects cannot be generated from
+windows (cmake uses mac specific libraries to do project generation). This
+means that for instance generating a tarball containing pregenerated
+projects for all platforms is hard with Cmake (requires distribution to
+several machine types).
+
+6. Gyp has rudimentary cross compile support. Currently we've added enough
+functionality to gyp to support x86 -> arm cross compiles. Last I checked
+this functionality wasn't present in cmake. (This occurred later).
+
+
+That being said there are a number of drawbacks currently to gyp:
+
+1. Because platform specific settings are expressed at the project file
+level (rather than the command line level). Settings which might otherwise
+be shared in common between platforms (flags to gcc on mac/linux), end up
+being repeated twice. Though in fairness there is actually less sharing here
+than you'd think. include_dirs and defines actually represent 90% of what
+can be typically shared.
+
+2. CMake may be more mature, having been applied to a broader range of
+projects. There a number of 'tool modules' for cmake, which are shared in a
+common community.
+
+3. gyp currently makes some nasty assumptions about the availability of
+chromium's hermetic copy of cygwin on windows. This causes you to either
+have to special case a number of rules, or swallow this copy of cygwin as a
+build time dependency.
+
+4. CMake includes a fairly readable imperative language. Currently Gyp has a
+somewhat poorly specified declarative language (variable expansion happens
+in sometimes weird and counter-intuitive ways). In fairness though, gyp assumes
+that external python scripts can be used as an escape hatch. Also gyp avoids
+a lot of the things you'd need imperative code for, by having a nice target
+settings publication mechanism.
+
+5. (Feature/drawback depending on personal preference). Gyp's syntax is
+DEEPLY nested. It suffers from all of Lisp's advantages and drawbacks.
+
+-BradN
+```
diff --git a/deps/npm/node_modules/node-gyp/gyp/docs/Hacking.md b/deps/npm/node_modules/node-gyp/gyp/docs/Hacking.md
new file mode 100644
index 00000000000..89b3b8bea92
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/gyp/docs/Hacking.md
@@ -0,0 +1,46 @@
+# Hacking
+
+## Getting the sources
+
+Git is required to hack on anything, you can set up a git clone of GYP
+as follows:
+
+```
+mkdir foo
+cd foo
+git clone git@github.com:nodejs/gyp-next.git
+cd gyp
+```
+
+(this will clone gyp underneath it into `foo/gyp`.
+`foo` can be any directory name you want. Once you've done that,
+you can use the repo like anything other Git repo.
+
+## Testing your change
+
+GYP has a suite of tests which you can run with the provided test driver
+to make sure your changes aren't breaking anything important.
+
+You run the test driver with e.g.
+
+``` sh
+$ python -m pip install --upgrade pip setuptools
+$ pip install --editable ".[dev]"
+$ python -m pytest
+```
+
+See [Testing](Testing.md) for more details on the test framework.
+
+Note that it can be handy to look at the project files output by the tests
+to diagnose problems. The easiest way to do that is by kindly asking the
+test driver to leave the temporary directories it creates in-place.
+This is done by setting the enviroment variable "PRESERVE", e.g.
+
+```
+set PRESERVE=all # On Windows
+export PRESERVE=all # On saner platforms.
+```
+
+## Reviewing your change
+
+All changes to GYP must be code reviewed before submission.
diff --git a/deps/npm/node_modules/node-gyp/gyp/docs/InputFormatReference.md b/deps/npm/node_modules/node-gyp/gyp/docs/InputFormatReference.md
new file mode 100644
index 00000000000..2b2c180f444
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/gyp/docs/InputFormatReference.md
@@ -0,0 +1,1080 @@
+# Input Format Reference
+
+## Primitive Types
+
+The following primitive types are found within input files:
+
+ * String values, which may be represented by enclosing them in
+ `'single quotes'` or `"double quotes"`. By convention, single
+ quotes are used.
+ * Integer values, which are represented in decimal without any special
+ decoration. Integers are fairly rare in input files, but have a few
+ applications in boolean contexts, where the convention is to
+ represent true values with `1` and false with `0`.
+ * Lists, which are represented as a sequence of items separated by
+ commas (`,`) within square brackets (`[` and `]`). A list may
+ contain any other primitive types, including other lists.
+ Generally, each item of a list must be of the same type as all other
+ items in the list, but in some cases (such as within `conditions`
+ sections), the list structure is more tightly specified. A trailing
+ comma is permitted.
+
+ This example list contains three string values.
+
+ ```
+ [ 'Generate', 'Your', 'Projects', ]
+ ```
+
+ * Dictionaries, which map keys to values. All keys are strings.
+ Values may be of any other primitive type, including other
+ dictionaries. A dictionary is enclosed within curly braces (`{` and
+ `}`). Keys precede values, separated by a colon (`:`). Successive
+ dictionary entries are separated by commas (`,`). A trailing comma
+ is permitted. It is an error for keys to be duplicated within a
+ single dictionary as written in an input file, although keys may
+ replace other keys during [merging](#Merging).
+
+ This example dictionary maps each of three keys to different values.
+
+ ```
+ {
+ 'inputs': ['version.c.in'],
+ 'outputs': ['version.c'],
+ 'process_outputs_as_sources': 1,
+ }
+ ```
+
+## Overall Structure
+
+A GYP input file is organized as structured data. At the root scope of
+each `.gyp` or `.gypi` (include) file is a dictionary. The keys and
+values of this dictionary, along with any descendants contained within
+the values, provide the data contained within the file. This data is
+given meaning by interpreting specific key names and their associated
+values in specific ways (see [Settings Keys](#Settings_Keys)).
+
+### Comments (#)
+
+Within an input file, a comment is introduced by a pound sign (`#`) not
+within a string. Any text following the pound sign, up until the end of
+the line, is treated as a comment.
+
+#### Example
+
+```
+{
+ 'school_supplies': [
+ 'Marble composition book',
+ 'Sharp #2 pencil',
+ 'Safety scissors', # You still shouldn't run with these
+ ],
+}
+```
+
+In this example, the # in `'Sharp #2 pencil'` is not taken as
+introducing a comment because it occurs within a string, but the text
+after `'Safety scissors'` is treated as a comment having no impact on
+the data within the file.
+
+## Merging
+
+### Merge Basics (=, ?, +)
+
+Many operations on GYP input files occurs by merging dictionary and list
+items together. During merge operations, it is important to recognize
+the distinction between source and destination values. Items from the
+source value are merged into the destination, which leaves the source
+unchanged and the destination modified by the source. A dictionary may
+only be merged into another dictionary, and a list may only be merged
+into another list.
+
+ * When merging a dictionary, for each key in the source:
+ * If the key does not exist in the destination dictionary, insert it
+ and copy the associated value directly.
+ * If the key does exist:
+ * If the associated value is a dictionary, perform the dictionary
+ merging procedure using the source's and destination's value
+ dictionaries.
+ * If the associated value is a list, perform the list merging
+ procedure using the source's and destination's value lists.
+ * If the associated value is a string or integer, the destination
+ value is replaced by the source value.
+ * When merging a list, merge according to the suffix appended to the
+ key name, if the list is a value within a dictionary.
+ * If the key ends with an equals sign (`=`), the policy is for the
+ source list to completely replace the destination list if it
+ exists. _Mnemonic: `=` for assignment._
+ * If the key ends with a question mark (`?`), the policy is for the
+ source list to be set as the destination list only if the key is
+ not already present in the destination. _Mnemonic: `?` for
+ conditional assignment_.
+ * If the key ends with a plus sign (`+`), the policy is for the
+ source list contents to be prepended to the destination list.
+ _Mnemonic: `+` for addition or concatenation._
+ * If the list key is undecorated, the policy is for the source list
+ contents to be appended to the destination list. This is the
+ default list merge policy.
+
+#### Example
+
+Source dictionary:
+
+```
+{
+ 'include_dirs+': [
+ 'shared_stuff/public',
+ ],
+ 'link_settings': {
+ 'libraries': [
+ '-lshared_stuff',
+ ],
+ },
+ 'test': 1,
+}
+```
+
+Destination dictionary:
+
+```
+{
+ 'target_name': 'hello',
+ 'sources': [
+ 'kitty.cc',
+ ],
+ 'include_dirs': [
+ 'headers',
+ ],
+ 'link_settings': {
+ 'libraries': [
+ '-lm',
+ ],
+ 'library_dirs': [
+ '/usr/lib',
+ ],
+ },
+ 'test': 0,
+}
+```
+
+Merged dictionary:
+
+```
+{
+ 'target_name': 'hello',
+ 'sources': [
+ 'kitty.cc',
+ ],
+ 'include_dirs': [
+ 'shared_stuff/public', # Merged, list item prepended due to include_dirs+
+ 'headers',
+ ],
+ 'link_settings': {
+ 'libraries': [
+ '-lm',
+ '-lshared_stuff', # Merged, list item appended
+ ],
+ 'library_dirs': [
+ '/usr/lib',
+ ],
+ },
+ 'test': 1, # Merged, int value replaced
+}
+```
+
+## Pathname Relativization
+
+In a `.gyp` or `.gypi` file, many string values are treated as pathnames
+relative to the file in which they are defined.
+
+String values associated with the following keys, or contained within
+lists associated with the following keys, are treated as pathnames:
+
+ * destination
+ * files
+ * include\_dirs
+ * inputs
+ * libraries
+ * outputs
+ * sources
+ * mac\_bundle\_resources
+ * mac\_framework\_dirs
+ * msvs\_cygwin\_dirs
+ * msvs\_props
+
+Additionally, string values associated with keys ending in the following
+suffixes, or contained within lists associated with keys ending in the
+following suffixes, are treated as pathnames:
+
+ * `_dir`
+ * `_dirs`
+ * `_file`
+ * `_files`
+ * `_path`
+ * `_paths`
+
+However, any string value beginning with any of these characters is
+excluded from pathname relativization:
+
+ * `/` for identifying absolute paths.
+ * `$` for introducing build system variable expansions.
+ * `-` to support specifying such items as `-llib`, meaning “library
+ `lib` in the library search path.”
+ * `<`, `>`, and `!` for GYP expansions.
+
+When merging such relative pathnames, they are adjusted so that they can
+remain valid relative pathnames, despite being relative to a new home.
+
+#### Example
+
+Source dictionary from `../build/common.gypi`:
+
+```
+{
+ 'include_dirs': ['include'], # Treated as relative to ../build
+ 'libraries': ['-lz'], # Not treated as a pathname, begins with a dash
+ 'defines': ['NDEBUG'], # defines does not contain pathnames
+}
+```
+
+Target dictionary, from `base.gyp`:
+
+```
+{
+ 'sources': ['string_util.cc'],
+}
+```
+
+Merged dictionary:
+
+```
+{
+ 'sources': ['string_util.cc'],
+ 'include_dirs': ['../build/include'],
+ 'libraries': ['-lz'],
+ 'defines': ['NDEBUG'],
+}
+```
+
+Because of pathname relativization, after the merge is complete, all of
+the pathnames in the merged dictionary are valid relative to the
+directory containing `base.gyp`.
+
+## List Singletons
+
+Some list items are treated as singletons, and the list merge process
+will enforce special rules when merging them. At present, any string
+item in a list that does not begin with a dash (`-`) is treated as a
+singleton, although **this is subject to change.** When appending or
+prepending a singleton to a list, if the item is already in the list,
+only the earlier instance is retained in the merged list.
+
+#### Example
+
+Source dictionary:
+
+```
+{
+ 'defines': [
+ 'EXPERIMENT=1',
+ 'NDEBUG',
+ ],
+}
+```
+
+Destination dictionary:
+
+```
+{
+ 'defines': [
+ 'NDEBUG',
+ 'USE_THREADS',
+ ],
+}
+```
+
+Merged dictionary:
+
+```
+{
+ 'defines': [
+ 'NDEBUG',
+ 'USE_THREADS',
+ 'EXPERIMENT=1', # Note that NDEBUG is not appended after this.
+ ],
+}
+```
+
+## Including Other Files
+
+If the `-I` (`--include`) argument was used to invoke GYP, any files
+specified will be implicitly merged into the root dictionary of all
+`.gyp` files.
+
+An [includes](#includes) section may be placed anywhere within a
+`.gyp` or `.gypi` (include) file. `includes` sections contain lists of
+other files to include. They are processed sequentially and merged into
+the enclosing dictionary at the point that the `includes` section was
+found. `includes` sections at the root of a `.gyp` file dictionary are
+merged after any `-I` includes from the command line.
+
+[includes](#includes) sections are processed immediately after a file is
+loaded, even before [variable and conditional
+processing](#Variables_and_Conditionals), so it is not possible to
+include a file based on a [variable reference](#Variable_Expansions).
+While it would be useful to be able to include files based on variable
+expansions, it is most likely more useful to allow included files access
+to variables set by the files that included them.
+
+An [includes](#includes) section may, however, be placed within a
+[conditional](#Conditionals) section. The included file itself will
+be loaded unconditionally, but its dictionary will be discarded if the
+associated condition is not true.
+
+## Variables and Conditionals
+
+### Variables
+
+There are three main types of variables within GYP.
+
+ * Predefined variables. By convention, these are named with
+ `CAPITAL_LETTERS`. Predefined variables are set automatically by
+ GYP. They may be overridden, but it is not advisable to do so. See
+ [Predefined Variables](#Predefined_Variables) for a list of
+ variables that GYP provides.
+ * User-defined variables. Within any dictionary, a key named
+ `variables` can be provided, containing a mapping between variable
+ names (keys) and their contents (values), which may be strings,
+ integers, or lists of strings. By convention, user-defined
+ variables are named with `lowercase_letters`.
+ * Automatic variables. Within any dictionary, any key with a string
+ value has a corresponding automatic variable whose name is the same
+ as the key name with an underscore (`_`) prefixed. For example, if
+ your dictionary contains `type: 'static_library'`, an automatic
+ variable named `_type` will be provided, and its value will be a
+ string, `'static_library'`.
+
+Variables are inherited from enclosing scopes.
+
+### Providing Default Values for Variables (%)
+
+Within a `variables` section, keys named with percent sign (`%`)
+suffixes mean that the variable should be set only if it is undefined at
+the time it is processed. This can be used to provide defaults for
+variables that would otherwise be undefined, so that they may reliably
+be used in [variable expansion or conditional
+processing](#Variables_and_Conditionals).
+
+### Predefined Variables
+
+Each GYP generator module provides defaults for the following variables:
+
+ * `OS`: The name of the operating system that the generator produces
+ output for. Common values for values for `OS` are:
+
+ * `'linux'`
+ * `'mac'`
+ * `'win'`
+
+ But other values may be encountered and this list should not be
+ considered exhaustive. The `gypd` (debug) generator module does not
+ provide a predefined value for `OS`. When invoking GYP with the
+ `gypd` module, if a value for `OS` is needed, it must be provided on
+ the command line, such as `gyp -f gypd -DOS=mac`.
+
+ GYP generators also provide defaults for these variables. They may
+ be expressed in terms of variables used by the build system that
+ they generate for, often in `$(VARIABLE)` format. For example, the
+ GYP `PRODUCT_DIR` variable maps to the Xcode `BUILT_PRODUCTS_DIR`
+ variable, so `PRODUCT_DIR` is defined by the Xcode generator as
+ `$(BUILT_PRODUCTS_DIR)`.
+ * `EXECUTABLE_PREFIX`: A prefix, if any, applied to executable names.
+ Usually this will be an empty string.
+ * `EXECUTABLE_SUFFIX`: A suffix, if any, applied to executable names.
+ On Windows, this will be `.exe`, elsewhere, it will usually be an
+ empty string.
+ * `INTERMEDIATE_DIR`: A directory that can be used to place
+ intermediate build results in. `INTERMEDIATE_DIR` is only
+ guaranteed to be accessible within a single target (See targets).
+ This variable is most useful within the context of rules and actions
+ (See rules, See actions). Compare with `SHARED_INTERMEDIATE_DIR`.
+ * `PRODUCT_DIR`: The directory in which the primary output of each
+ target, such as executables and libraries, is placed.
+ * `RULE_INPUT_ROOT`: The base name for the input file (e.g. "`foo`").
+ See Rules.
+ * `RULE_INPUT_EXT`: The file extension for the input file (e.g.
+ "`.cc`"). See Rules.
+ * `RULE_INPUT_NAME`: Full name of the input file (e.g. "`foo.cc`").
+ See Rules.
+ * `RULE_INPUT_PATH`: Full path to the input file (e.g.
+ "`/bar/foo.cc`"). See Rules.
+ * `SHARED_INTERMEDIATE_DIR`: A directory that can be used to place
+ intermediate build results in, and have them be accessible to other
+ targets. Unlike `INTERMEDIATE_DIR`, each target in a project,
+ possibly spanning multiple `.gyp` files, shares the same
+ `SHARED_INTERMEDIATE_DIR`.
+
+The following additional predefined variables may be available under
+certain circumstances:
+
+ * `DEPTH`. When GYP is invoked with a `--depth` argument, when
+ processing any `.gyp` file, `DEPTH` will be a relative path from the
+ `.gyp` file to the directory specified by the `--depth` argument.
+
+### User-Defined Variables
+
+A user-defined variable may be defined in terms of other variables, but
+not other variables that have definitions provided in the same scope.
+
+### Variable Expansions (<, >, <@, >@)
+
+GYP provides two forms of variable expansions, “early” or “pre”
+expansions, and “late,” “post,” or “target” expansions. They have
+similar syntax, differing only in the character used to introduce them.
+
+ * Early expansions are introduced by a less-than (`<`) character.
+ _Mnemonic: the arrow points to the left, earlier on a timeline._
+ * Late expansions are introduced by a less-than (`>`) character.
+ _Mnemonic: the arrow points to the right, later on a timeline._
+
+The difference the two phases of expansion is described in [Early and
+Late Phases](#Early_and_Late_Phases).
+
+These characters were chosen based upon the requirement that they not
+conflict with the variable format used natively by build systems. While
+the dollar sign (`$`) is the most natural fit for variable expansions,
+its use was ruled out because most build systems already use that
+character for their own variable expansions. Using different characters
+means that no escaping mechanism was needed to differentiate between GYP
+variables and build system variables, and writing build system variables
+into GYP files is not cumbersome.
+
+Variables may contain lists or strings, and variable expansions may
+occur in list or string context. There are variant forms of variable
+expansions that may be used to determine how each type of variable is to
+be expanded in each context.
+
+ * When a variable is referenced by `<(VAR)` or `>(VAR)`:
+ * If `VAR` is a string, the variable reference within the string is
+ replaced by variable's string value.
+ * If `VAR` is a list, the variable reference within the string is
+ replaced by a string containing the concatenation of all of the
+ variable’s list items. Generally, the items are joined with
+ spaces between each, but the specific behavior is
+ generator-specific. The precise encoding used by any generator
+ should be one that would allow each list item to be treated as a
+ separate argument when used as program arguments on the system
+ that the generator produces output for.
+ * When a variable is referenced by `<@(VAR)` or `>@(VAR)`:
+ * The expansion must occur in list context.
+ * The list item must be `'<@(VAR)'` or `'>@(VAR)'` exactly.
+ * If `VAR` is a list, each of its elements are inserted into the
+ list in which expansion is taking place, replacing the list item
+ containing the variable reference.
+ * If `VAR` is a string, the string is converted to a list which is
+ inserted into the list in which expansion is taking place as
+ above. The conversion into a list is generator-specific, but
+ generally, spaces in the string are taken as separators between
+ list items. The specific method of converting the string to a
+ list should be the inverse of the encoding method used to expand
+ list variables in string context, above.
+
+GYP treats references to undefined variables as errors.
+
+### Command Expansions (` form
+ of [variable expansions](#Variable_Expansions),
+ and on the `!` form of [command
+ expansions](#Command_Expansions_(!,_!@)).
+
+These two phases are provided because there are some circumstances in
+which each is desirable.
+
+The “early” phase is appropriate for most expansions and evaluations.
+“Early” expansions and evaluations may be performed anywhere within any
+`.gyp` or `.gypi` file.
+
+The “late” phase is appropriate when expansion or evaluation must be
+deferred until a specific section has been merged into target context.
+“Late” expansions and evaluations only occur within `targets` sections
+and their descendants. The typical use case for a late-phase expansion
+is to provide, in some globally-included `.gypi` file, distinct
+behaviors depending on the specifics of a target.
+
+#### Example
+
+Given this input:
+
+```
+{
+ 'target_defaults': {
+ 'target_conditions': [
+ ['_type=="shared_library"', {'cflags': ['-fPIC']}],
+ ],
+ },
+ 'targets': [
+ {
+ 'target_name': 'sharing_is_caring',
+ 'type': 'shared_library',
+ },
+ {
+ 'target_name': 'static_in_the_attic',
+ 'type': 'static_library',
+ },
+ ]
+}
+```
+
+The conditional needs to be evaluated only in target context; it is
+nonsense outside of target context because no `_type` variable is
+defined. [target\_conditions](#target_conditions) allows evaluation
+to be deferred until after the [targets](#targets) sections are
+merged into their copies of [target\_defaults](#target_defaults).
+The resulting targets, after “late” phase processing:
+
+```
+{
+ 'targets': [
+ {
+ 'target_name': 'sharing_is_caring',
+ 'type': 'shared_library',
+ 'cflags': ['-fPIC'],
+ },
+ {
+ 'target_name': 'static_in_the_attic',
+ 'type': 'static_library',
+ },
+ ]
+}
+```
+
+### Expansion and Evaluation Performed Simultaneously
+
+During any expansion and evaluation phase, both expansion and evaluation
+are performed simultaneously. The process for handling variable
+expansions and conditional evaluation within a dictionary is:
+
+ * Load [automatic variables](#Variables) (those with leading
+ underscores).
+ * If a [variables](#variables) section is present, recurse into its
+ dictionary. This allows [conditionals](#Conditionals) to be
+ present within the `variables` dictionary.
+ * Load [Variables user-defined variables](#User-Defined) from the
+ [variables](#variables) section.
+ * For each string value in the dictionary, perform [variable
+ expansion](#Variable_Expansions) and, if operating
+ during the “late” phase, [command
+ expansions](#Command_Expansions).
+ * Reload [automatic variables](#Variables) and [Variables
+ user-defined variables](#User-Defined) because the variable
+ expansion step may have resulted in changes to the automatic
+ variables.
+ * If a [conditions](#conditions) or
+ [target\_conditions](#target_conditions) section (depending on
+ phase) is present, recurse into its dictionary. This is done after
+ variable expansion so that conditionals may take advantage of
+ expanded automatic variables.
+ * Evaluate [conditionals](#Conditionals).
+ * Reload [automatic variables](#Variables) and [Variables
+ user-defined variables](#User-Defined) because the conditional
+ evaluation step may have resulted in changes to the automatic
+ variables.
+ * Recurse into child dictionaries or lists that have not yet been
+ processed.
+
+One quirk of this ordering is that you cannot expect a
+[variables](#variables) section within a dictionary’s
+[conditional](#Conditionals) to be effective in the dictionary
+itself, but the added variables will be effective in any child
+dictionaries or lists. It is thought to be far more worthwhile to
+provide resolved [automatic variables](#Variables) to
+[conditional](#Conditionals) sections, though. As a workaround, to
+conditionalize variable values, place a [conditions](#conditions) or
+[target\_conditions](#target_conditions) section within the
+[variables](#variables) section.
+
+## Dependencies and Dependents
+
+In GYP, “dependents” are targets that rely on other targets, called
+“dependencies.” Dependents declare their reliance with a special
+section within their target dictionary,
+[dependencies](#dependencies).
+
+### Dependent Settings
+
+It is useful for targets to “advertise” settings to their dependents.
+For example, a target might require that all of its dependents add
+certain directories to their include paths, link against special
+libraries, or define certain preprocessor macros. GYP allows these
+cases to be handled gracefully with “dependent settings” sections.
+There are three types of such sections:
+
+ * [direct\_dependent\_settings](#direct_dependent_settings), which
+ advertises settings to a target's direct dependents only.
+ * [all\_dependent\_settings](#all_dependnet_settings), which
+ advertises settings to all of a target's dependents, both direct and
+ indirect.
+ * [link\_settings](#link_settings), which contains settings that
+ should be applied when a target’s object files are used as linker
+ input.
+
+Furthermore, in some cases, a target needs to pass its dependencies’
+settings on to its own dependents. This might happen when a target’s
+own public header files include header files provided by its dependency.
+[export\_dependent\_settings](#export_dependent_settings) allows a
+target to declare dependencies for which
+[direct\_dependent\_settings](#direct_dependent_settings) should be
+passed through to its own dependents.
+
+Dependent settings processing merges a copy of the relevant dependent
+settings dictionary from a dependency into its relevant dependent
+targets.
+
+In most instances,
+[direct\_dependent\_settings](#direct_dependent_settings) will be
+used. There are very few cases where
+[all\_dependent\_settings](#all_dependent_settings) is actually
+correct; in most of the cases where it is tempting to use, it would be
+preferable to declare
+[export\_dependent\_settings](#export_dependent_settings). Most
+[libraries](#libraries) and [library\_dirs](#library_dirs)
+sections should be placed within [link\_settings](#link_settings)
+sections.
+
+#### Example
+
+Given:
+
+```
+{
+ 'targets': [
+ {
+ 'target_name': 'cruncher',
+ 'type': 'static_library',
+ 'sources': ['cruncher.cc'],
+ 'direct_dependent_settings': {
+ 'include_dirs': ['.'], # dependents need to find cruncher.h.
+ },
+ 'link_settings': {
+ 'libraries': ['-lm'], # cruncher.cc does math.
+ },
+ },
+ {
+ 'target_name': 'cruncher_test',
+ 'type': 'executable',
+ 'dependencies': ['cruncher'],
+ 'sources': ['cruncher_test.cc'],
+ },
+ ],
+}
+```
+
+After dependent settings processing, the dictionary for `cruncher_test`
+will be:
+
+```
+{
+ 'target_name': 'cruncher_test',
+ 'type': 'executable',
+ 'dependencies': ['cruncher'], # implies linking against cruncher
+ 'sources': ['cruncher_test.cc'],
+ 'include_dirs': ['.']
+ 'libraries': ['-lm'],
+},
+```
+
+If `cruncher` was declared as a `shared_library` instead of a
+`static_library`, the `cruncher_test` target would not contain `-lm`,
+but instead, `cruncher` itself would link against `-lm`.
+
+## Linking Dependencies
+
+The precise meaning of a dependency relationship varies with the
+[types](#type) of the [targets](#targets) at either end of the
+relationship. In GYP, a dependency relationship can indicate two things
+about how targets relate to each other:
+
+ * Whether the dependent target needs to link against the dependency.
+ * Whether the dependency target needs to be built prior to the
+ dependent. If the former case is true, this case must be true as
+ well.
+
+The analysis of the first item is complicated by the differences between
+static and shared libraries.
+
+ * Static libraries are simply collections of object files (`.o` or
+ `.obj`) that are used as inputs to a linker (`ld` or `link.exe`).
+ Static libraries don't link against other libraries, they’re
+ collected together and used when eventually linking a shared library
+ or executable.
+ * Shared libraries are linker output and must undergo symbol
+ resolution. They must link against other libraries (static or
+ shared) in order to facilitate symbol resolution. They may be used
+ as libraries in subsequent link steps.
+ * Executables are also linker output, and also undergo symbol
+ resolution. Like shared libraries, they must link against static
+ and shared libraries to facilitate symbol resolution. They may not
+ be reused as linker inputs in subsequent link steps.
+
+Accordingly, GYP performs an operation referred to as “static library
+dependency adjustment,” in which it makes each linker output target
+(shared libraries and executables) link against the static libraries it
+depends on, either directly or indirectly. Because the linkable targets
+link against these static libraries, they are also made direct
+dependents of the static libraries.
+
+As part of this process, GYP is also able to remove the direct
+dependency relationships between two static library targets, as a
+dependent static library does not actually need to link against a
+dependency static library. This removal facilitates speedier builds
+under some build systems, as they are now free to build the two targets
+in parallel. The removal of this dependency is incorrect in some cases,
+such as when the dependency target contains [rules](#rules) or
+[actions](#actions) that generate header files required by the
+dependent target. In such cases, the dependency target, the one
+providing the side-effect files, must declare itself as a
+[hard\_dependency](#hard_dependency). This setting instructs GYP to
+not remove the dependency link between two static library targets in its
+generated output.
+
+## Loading Files to Resolve Dependencies
+
+When GYP runs, it loads all `.gyp` files needed to resolve dependencies
+found in [dependencies](#dependencies) sections. These files are not
+merged into the files that reference them, but they may contain special
+sections that are merged into dependent target dictionaries.
+
+## Build Configurations
+
+Explain this.
+
+## List Filters
+
+GYP allows list items to be filtered by “exclusions” and “patterns.”
+Any list containing string values in a dictionary may have this
+filtering applied. For the purposes of this section, a list modified by
+exclusions or patterns is referred to as a “base list”, in contrast to
+the “exclusion list” and “pattern list” that operates on it.
+
+ * For a base list identified by key name `key`, the `key!` list
+ provides exclusions.
+ * For a base list identified by key name `key`, the `key/` list
+ provides regular expression pattern-based filtering.
+
+Both `key!` and `key/` may be present. The `key!` exclusion list will
+be processed first, followed by the `key/` pattern list.
+
+Exclusion lists are most powerful when used in conjunction with
+[conditionals](#Conditionals).
+
+## Exclusion Lists (!)
+
+An exclusion list provides a way to remove items from the related list
+based on exact matching. Any item found in an exclusion list will be
+removed from the corresponding base list.
+
+#### Example
+
+This example excludes files from the `sources` based on the setting of
+the `OS` variable.
+
+```
+{
+ 'sources:' [
+ 'mac_util.mm',
+ 'win_util.cc',
+ ],
+ 'conditions': [
+ ['OS=="mac"', {'sources!': ['win_util.cc']}],
+ ['OS=="win"', {'sources!': ['mac_util.cc']}],
+ ],
+}
+```
+
+## Pattern Lists (/)
+
+Pattern lists are similar to, but more powerful than, [exclusion
+lists](#Exclusion_Lists_(!)). Each item in a pattern list is itself
+a two-element list. The first item is a string, either `'include'` or
+`'exclude'`, specifying the action to take. The second item is a string
+specifying a regular expression. Any item in the base list matching the
+regular expression pattern will either be included or excluded, based on
+the action specified.
+
+Items in a pattern list are processed in sequence, and an excluded item
+that is later included will not be removed from the list (unless it is
+subsequently excluded again.)
+
+Pattern lists are processed after [exclusion
+lists](#Exclusion_Lists_(!)), so it is possible for a pattern list to
+re-include items previously excluded by an exclusion list.
+
+Nothing is actually removed from a base list until all items in an
+[exclusion list](#Exclusion_Lists_(!)) and pattern list have been
+evaluated. This allows items to retain their correct position relative
+to one another even after being excluded and subsequently included.
+
+#### Example
+
+In this example, a uniform naming scheme is adopted for
+platform-specific files.
+
+```
+{
+ 'sources': [
+ 'io_posix.cc',
+ 'io_win.cc',
+ 'launcher_mac.cc',
+ 'main.cc',
+ 'platform_util_linux.cc',
+ 'platform_util_mac.mm',
+ ],
+ 'sources/': [
+ ['exclude', '_win\\.cc$'],
+ ],
+ 'conditions': [
+ ['OS!="linux"', {'sources/': [['exclude', '_linux\\.cc$']]}],
+ ['OS!="mac"', {'sources/': [['exclude', '_mac\\.cc|mm?$']]}],
+ ['OS=="win"', {'sources/': [
+ ['include', '_win\\.cc$'],
+ ['exclude', '_posix\\.cc$'],
+ ]}],
+ ],
+}
+```
+
+After the pattern list is applied, `sources` will have the following
+values, depending on the setting of `OS`:
+
+ * When `OS` is `linux`: `['io_posix.cc', 'main.cc',
+ 'platform_util_linux.cc']`
+ * When `OS` is `mac`: `['io_posix.cc', 'launcher_mac.cc', 'main.cc',
+ 'platform_util_mac.mm']`
+ * When `OS` is `win`: `['io_win.cc', 'main.cc',
+ 'platform_util_win.cc']`
+
+Note that when `OS` is `win`, the `include` for `_win.cc` files is
+processed after the `exclude` matching the same pattern, because the
+`sources/` list participates in [merging](#Merging) during
+[conditional evaluation](#Conditonals) just like any other list
+would. This guarantees that the `_win.cc` files, previously
+unconditionally excluded, will be re-included when `OS` is `win`.
+
+## Locating Excluded Items
+
+In some cases, a GYP generator needs to access to items that were
+excluded by an [exclusion list](#Exclusion_Lists_(!)) or [pattern
+list](#Pattern_Lists_(/)). When GYP excludes items during processing
+of either of these list types, it places the results in an `_excluded`
+list. In the example above, when `OS` is `mac`, `sources_excluded`
+would be set to `['io_win.cc', 'platform_util_linux.cc']`. Some GYP
+generators use this feature to display excluded files in the project
+files they generate for the convenience of users, who may wish to refer
+to other implementations.
+
+## Processing Order
+
+GYP uses a defined and predictable order to execute the various steps
+performed between loading files and generating output.
+
+ * Load files.
+ * Load `.gyp` files. Merge any [command-line
+ includes](#Including_Other_Files) into each `.gyp` file’s root
+ dictionary. As [includes](#Including_Other_Files) are found,
+ load them as well and [merge](#Merging) them into the scope in
+ which the [includes](#includes) section was found.
+ * Perform [“early” or “pre”](#Early_and_Late_Phases) [variable
+ expansion and conditional
+ evaluation](#Variables_and_Conditionals).
+ * [Merge](#Merging) each [target’s](#targets) dictionary into
+ the `.gyp` file’s root [target\_defaults](#target_defaults)
+ dictionary.
+ * Scan each [target](#targets) for
+ [dependencies](#dependencies), and repeat the above steps for
+ any newly-referenced `.gyp` files not yet loaded.
+ * Scan each [target](#targets) for wildcard
+ [dependencies](#dependencies), expanding the wildcards.
+ * Process [dependent settings](#Dependent_Settings). These
+ sections are processed, in order:
+ * [all\_dependent\_settings](#all_dependent_settings)
+ * [direct\_dependent\_settings](#direct_dependent_settings)
+ * [link\_dependent\_settings](#link_dependent_settings)
+ * Perform [static library dependency
+ adjustment](#Linking_Dependencies).
+ * Perform [“late,” “post,” or “target”](#Early_and_Late_Phases)
+ [variable expansion and conditional
+ evaluation](#Variables_and_Conditionals) on [target](#targets)
+ dictionaries.
+ * Merge [target](#targets) settings into
+ [configurations](#configurations) as appropriate.
+ * Process [exclusion and pattern
+ lists](#List_Exclusions_and_Patterns).
+
+## Settings Keys
+
+### Settings that may appear anywhere
+
+#### conditions
+
+_List of `condition` items_
+
+A `conditions` section introduces a subdictionary that is only merged
+into the enclosing scope based on the evaluation of a conditional
+expression. Each `condition` within a `conditions` list is itself a
+list of at least two items:
+
+ 1. A string containing the conditional expression itself. Conditional
+ expressions may take the following forms:
+ * For string values, `var=="value"` and `var!="value"` to test
+ equality and inequality. For example, `'OS=="linux"'` is true
+ when the `OS` variable is set to `"linux"`.
+ * For integer values, `var==value`, `var!=value`, `var=value`, and `var>value`, to test equality and
+ several common forms of inequality. For example,
+ `'chromium_code==0'` is true when the `chromium_code` variable is
+ set to `0`.
+ * It is an error for a conditional expression to reference any
+ undefined variable.
+ 1. A dictionary containing the subdictionary to be merged into the
+ enclosing scope if the conditional expression evaluates to true.
+
+These two items can be followed by any number of similar two items that
+will be evaluated if the previous conditional expression does not
+evaluate to true.
+
+An additional optional dictionary can be appended to this sequence of
+two items. This optional dictionary will be merged into the enclosing
+scope if none of the conditional expressions evaluate to true.
+
+Within a `conditions` section, each item is processed sequentially, so
+it is possible to predict the order in which operations will occur.
+
+There is no restriction on nesting `conditions` sections.
+
+`conditions` sections are very similar to `target_conditions` sections.
+See target\_conditions.
+
+#### Example
+
+```
+{
+ 'sources': [
+ 'common.cc',
+ ],
+ 'conditions': [
+ ['OS=="mac"', {'sources': ['mac_util.mm']}],
+ ['OS=="win"', {'sources': ['win_main.cc']}, {'sources': ['posix_main.cc']}],
+ ['OS=="mac"', {'sources': ['mac_impl.mm']},
+ 'OS=="win"', {'sources': ['win_impl.cc']},
+ {'sources': ['default_impl.cc']}
+ ],
+ ],
+}
+```
+
+Given this input, the `sources` list will take on different values based
+on the `OS` variable.
+
+ * If `OS` is `"mac"`, `sources` will contain `['common.cc',
+ 'mac_util.mm', 'posix_main.cc', 'mac_impl.mm']`.
+ * If `OS` is `"win"`, `sources` will contain `['common.cc',
+ 'win_main.cc', 'win_impl.cc']`.
+ * If `OS` is any other value such as `"linux"`, `sources` will contain
+ `['common.cc', 'posix_main.cc', 'default_impl.cc']`.
diff --git a/deps/npm/node_modules/node-gyp/gyp/docs/LanguageSpecification.md b/deps/npm/node_modules/node-gyp/gyp/docs/LanguageSpecification.md
new file mode 100644
index 00000000000..178b8c83169
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/gyp/docs/LanguageSpecification.md
@@ -0,0 +1,430 @@
+# Language Specification
+
+## Objective
+
+Create a tool for the Chromium project that generates native Visual Studio,
+Xcode and SCons and/or make build files from a platform-independent input
+format. Make the input format as reasonably general as possible without
+spending extra time trying to "get everything right," except where not doing so
+would likely lead Chromium to an eventual dead end. When in doubt, do what
+Chromium needs and don't worry about generalizing the solution.
+
+## Background
+
+Numerous other projects, both inside and outside Google, have tried to
+create a simple, universal cross-platform build representation that
+still allows sufficient per-platform flexibility to accommodate
+irreconcilable differences. The fact that no obvious working candidate
+exists that meets Chromium's requirements indicates this is probably a
+tougher problem than it appears at first glance. We aim to succeed by
+creating a tool that is highly specific to Chromium's specific use case,
+not to the general case of design a completely platform-independent tool
+for expressing any possible build.
+
+The Mac has the most sophisticated model for application development
+through an IDE. Consequently, we will use the Xcode model as the
+starting point (the input file format must handle Chromium's use of
+Xcode seamlessly) and adapt the design as necessary for the other
+platforms.
+
+## Overview
+
+The overall design has the following characteristics:
+
+ * Input configurations are specified in files with the suffix `.gyp`.
+ * Each `.gyp` file specifies how to build the targets for the
+ "component" defined by that file.
+ * Each `.gyp` file generates one or more output files appropriate to
+ the platform:
+ * On Mac, a `.gyp` file generates one Xcode .xcodeproj bundle with
+ information about how its targets are built.
+ * On Windows, a `.gyp` file generates one Visual Studio .sln file,
+ and one Visual Studio .vcproj file per target.
+ * On Linux, a `.gyp` file generates one SCons file and/or one
+ Makefile per target
+ * The `.gyp` file syntax is a Python data structure.
+ * Use of arbitrary Python in `.gyp` files is forbidden.
+ * Use of eval() with restricted globals and locals on `.gyp` file
+ contents restricts the input to an evaluated expression, not
+ arbitrary Python statements.
+ * All input is expected to comply with JSON, with two exceptions:
+ the # character (not inside strings) begins a comment that lasts
+ until the end of the line, and trailing commas are permitted at
+ the end of list and dict contents.
+ * Input data is a dictionary of keywords and values.
+ * "Invalid" keywords on any given data structure are not illegal,
+ they're just ignored.
+ * TODO: providing warnings on use of illegal keywords would help
+ users catch typos. Figure out something nice to do with this.
+
+## Detailed Design
+
+Some up-front design principles/thoughts/TODOs:
+
+ * Re-use keywords consistently.
+ * Keywords that allow configuration of a platform-specific concept get
+ prefixed appropriately:
+ * Examples: `msvs_disabled_warnings`, `xcode_framework_dirs`
+ * The input syntax is declarative and data-driven.
+ * This gets enforced by using Python `eval()` (which only evaluates
+ an expression) instead of `exec` (which executes arbitrary python)
+ * Semantic meanings of specific keyword values get deferred until all
+ are read and the configuration is being evaluated to spit out the
+ appropriate file(s)
+ * Source file lists:
+ * Are flat lists. Any imposed ordering within the `.gyp` file (e.g.
+ alphabetically) is purely by convention and for developer
+ convenience. When source files are linked or archived together,
+ it is expected that this will occur in the order that files are
+ listed in the `.gyp` file.
+ * Source file lists contain no mechanism for by-hand folder
+ configuration (`Filter` tags in Visual Studio, `Groups` in Xcode)
+ * A folder hierarchy is created automatically that mirrors the file
+ system
+
+### Example
+
+```
+{
+ 'target_defaults': {
+ 'defines': [
+ 'U_STATIC_IMPLEMENTATION',
+ ['LOGFILE', 'foo.log',],
+ ],
+ 'include_dirs': [
+ '..',
+ ],
+ },
+ 'targets': [
+ {
+ 'target_name': 'foo',
+ 'type': 'static_library',
+ 'sources': [
+ 'foo/src/foo.cc',
+ 'foo/src/foo_main.cc',
+ ],
+ 'include_dirs': [
+ 'foo',
+ 'foo/include',
+ ],
+ 'conditions': [
+ [ 'OS==mac', { 'sources': [ 'platform_test_mac.mm' ] } ]
+ ],
+ 'direct_dependent_settings': {
+ 'defines': [
+ 'UNIT_TEST',
+ ],
+ 'include_dirs': [
+ 'foo',
+ 'foo/include',
+ ],
+ },
+ },
+ ],
+}
+```
+
+### Structural Elements
+
+### Top-level Dictionary
+
+This is the single dictionary in the `.gyp` file that defines the
+targets and how they're to be built.
+
+The following keywords are meaningful within the top-level dictionary
+definition:
+
+| *Keyword* | *Description* |
+|:------------------|:------------------|
+| `conditions` | A conditional section that may contain other items that can be present in a top-level dictionary, on a conditional basis. See the "Conditionals" section below. |
+| `includes` | A list of `.gypi` files to be included in the top-level dictionary. |
+| `target_defaults` | A dictionary of default settings to be inherited by all targets in the top-level dictionary. See the "Settings keywords" section below. |
+| `targets` | A list of target specifications. See the "targets" below. |
+| `variables` | A dictionary containing variable definitions. Each key in this dictionary is the name of a variable, and each value must be a string value that the variable is to be set to. |
+
+### targets
+
+A list of dictionaries defining targets to be built by the files
+generated from this `.gyp` file.
+
+Targets may contain `includes`, `conditions`, and `variables` sections
+as permitted in the root dictionary. The following additional keywords
+have structural meaning for target definitions:
+
+| *Keyword* | *Description* |
+|:---------------------------- |:------------------------------------------|
+| `actions` | A list of special custom actions to perform on a specific input file, or files, to produce output files. See the "Actions" section below. |
+| `all_dependent_settings` | A dictionary of settings to be applied to all dependents of the target, transitively. This includes direct dependents and the entire set of their dependents, and so on. This section may contain anything found within a `target` dictionary, except `configurations`, `target_name`, and `type` sections. Compare `direct_dependent_settings` and `link_settings`. |
+| `configurations` | A list of dictionaries defining build configurations for the target. See the "Configurations" section below. |
+| `copies` | A list of copy actions to perform. See the "Copies" section below. |
+| `defines` | A list of preprocesor definitions to be passed on the command line to the C/C++ compiler (via `-D` or `/D` options). |
+| `dependencies` | A list of targets on which this target depends. Targets in other `.gyp` files are specified as `../path/to/other.gyp:target_we_want`. |
+| `direct_dependent_settings` | A dictionary of settings to be applied to other targets that depend on this target. These settings will only be applied to direct dependents. This section may contain anything found within a `target` dictionary, except `configurations`, `target_name`, and `type` sections. Compare with `all_dependent_settings` and `link_settings`. |
+| `include_dirs` | A list of include directories to be passed on the command line to the C/C++ compiler (via `-I` or `/I` options). |
+| `libraries` | A list of list of libraries (and/or frameworks) on which this target depends. |
+| `link_settings` | A dictionary of settings to be applied to targets in which this target's contents are linked. `executable` and `shared_library` targets are linkable, so if they depend on a non-linkable target such as a `static_library`, they will adopt its `link_settings`. This section can contain anything found within a `target` dictionary, except `configurations`, `target_name`, and `type` sections. Compare `all_dependent_settings` and `direct_dependent_settings`. |
+| `rules` | A special custom action to perform on a list of input files, to produce output files. See the "Rules" section below. |
+| `sources` | A list of source files that are used to build this target or which should otherwise show up in the IDE for this target. In practice, we expect this list to be a union of all files necessary to build the target on all platforms, as well as other related files that aren't actually used for building, like README files. |
+| `target_conditions` | Like `conditions`, but evaluation is delayed until the settings have been merged into an actual target. `target_conditions` may be used to place conditionals into a `target_defaults` section but have them still depend on specific target settings. |
+| `target_name` | The name of a target being defined. |
+| `type` | The type of target being defined. This field currently supports `executable`, `static_library`, `shared_library`, and `none`. The `none` target type is useful when producing output which is not linked. For example, converting raw translation files into resources or documentation into platform specific help files. |
+| `msvs_props` | A list of Visual Studio property sheets (`.vsprops` files) to be used to build the target. |
+| `xcode_config_file` | An Xcode configuration (`.xcconfig` file) to be used to build the target. |
+| `xcode_framework_dirs` | A list of framework directories be used to build the target. |
+
+You can affect the way that lists/dictionaries are merged together (for
+example the way a list in target\_defaults interacts with the same named
+list in the target itself) with a couple of special characters, which
+are covered in [Merge
+Basics](InputFormatReference#Merge_Basics_(=,_?,_+).md) and [List
+Filters](InputFormatReference#List_Filters.md) on the
+InputFormatReference page.
+
+### configurations
+
+`configurations` sections may be found within `targets` or
+`target_defaults` sections. The `configurations` section is a list of
+dictionaries specifying different build configurations. Because
+configurations are implemented as lists, it is not currently possible to
+override aspects of configurations that are imported into a target from
+a `target_defaults` section.
+
+NOTE: It is extremely important that each target within a project define
+the same set of configurations. This continues to apply even when a
+project spans across multiple `.gyp` files.
+
+A configuration dictionary may contain anything that can be found within
+a target dictionary, except for `actions`, `all_dependent_settings`,
+`configurations`, `dependencies`, `direct_dependent_settings`,
+`libraries`, `link_settings`, `sources`, `target_name`, and `type`.
+
+Configuration dictionaries may also contain these elements:
+
+| *Keyword* | *Description* |
+|:---------------------|:----------------------------------------------------|
+| `configuration_name` | Required attribute. The name of the configuration. |
+
+### Conditionals
+
+Conditionals may appear within any dictionary in a `.gyp` file. There
+are two tpes of conditionals, which differ only in the timing of their
+processing. `conditons` sections are processed shortly after loading
+`.gyp` files, and `target_conditons` sections are processed after all
+dependencies have been computed.
+
+A conditional section is introduced with a `conditions` or
+`target_conditions` dictionary keyword, and is composed of a list. Each
+list contains two or three elements. The first two elements, which are
+always required, are the conditional expression to evaluate and a
+dictionary containing settings to merge into the dictionary containing
+the `conditions` or `target_conditions` section if the expression
+evaluates to true. The third, optional, list element is a dictionary to
+merge if the expression evaluates to false.
+
+The `eval()` of the expression string takes place in the context of
+global and/or local dictionaries that constructed from the `.gyp` input
+data, and overrides the `__builtin__` dictionary, to prevent the
+execution of arbitrary Python code.
+
+### Actions
+
+An `actions` section provides a list of custom build actions to perform
+on inputs, producing outputs. The `actions` section is organized as a
+list. Each item in the list is a dictionary having the following form:
+
+| *Keyword* | *Type* | *Description* |
+|:--------------|:-------|:-----------------------------|
+| `action_name` | string | The name of the action. Depending on how actions are implemented in the various generators, some may desire or require this property to be set to a unique name; others may ignore this property entirely. |
+| `inputs` | list | A list of pathnames treated as inputs to the custom action. |
+| `outputs` | list | A list of pathnames that the custom action produces. |
+| `action` | list | A command line invocation used to produce `outputs` from `inputs`. For maximum cross-platform compatibility, invocations that require a Python interpreter should be specified with a first element `"python"`. This will enable generators for environments with specialized Python installations to be able to perform the action in an appropriate Python environment. |
+| `message` | string | A message to be displayed to the user by the build system when the action is run. |
+
+Build environments will compare `inputs` and `outputs`. If any `output`
+is missing or is outdated relative to any `input`, the custom action
+will be invoked. If all `outputs` are present and newer than all
+`inputs`, the `outputs` are considered up-to-date and the action need
+not be invoked.
+
+Actions are implemented in Xcode as shell script build phases performed
+prior to the compilation phase. In the Visual Studio generator, actions
+appear files with a `FileConfiguration` containing a custom
+`VCCustomBuildTool` specifying the remainder of the inputs, the outputs,
+and the action.
+
+Combined with variable expansions, actions can be quite powerful. Here
+is an example action that leverages variable expansions to minimize
+duplication of pathnames:
+
+```
+ 'sources': [
+ # libraries.cc is generated by the js2c action below.
+ '<(INTERMEDIATE_DIR)/libraries.cc',
+ ],
+ 'actions': [
+ {
+ 'variables': {
+ 'core_library_files': [
+ 'src/runtime.js',
+ 'src/v8natives.js',
+ 'src/macros.py',
+ ],
+ },
+ 'action_name': 'js2c',
+ 'inputs': [
+ 'tools/js2c.py',
+ '<@(core_library_files)',
+ ],
+ 'outputs': [
+ '<(INTERMEDIATE_DIR)/libraries.cc',
+ '<(INTERMEDIATE_DIR)/libraries-empty.cc',
+ ],
+ 'action': ['python', 'tools/js2c.py', '<@(_outputs)', 'CORE', '<@(core_library_files)'],
+ },
+ ],
+```
+
+### Rules
+
+A `rules` section provides custom build action to perform on inputs, producing
+outputs. The `rules` section is organized as a list. Each item in the list is
+a dictionary having the following form:
+
+| *Keyword* | *Type* | *Description* |
+|:------------|:-------|:-----------------------------------------|
+| `rule_name` | string | The name of the rule. Depending on how Rules are implemented in the various generators, some may desire or require this property to be set to a unique name; others may ignore this property entirely. |
+| `extension` | string | All source files of the current target with the given extension will be treated successively as inputs to the rule. |
+| `inputs` | list | Additional dependencies of the rule. |
+| `outputs` | list | A list of pathnames that the rule produces. Has access to `RULE_INPUT_` variables (see below). |
+| `action` | list | A command line invocation used to produce `outputs` from `inputs`. For maximum cross-platform compatibility, invocations that require a Python interpreter should be specified with a first element `"python"`. This will enable generators for environments with specialized Python installations to be able to perform the action in an appropriate Python environment. Has access to `RULE_INPUT_` variables (see below). |
+| `message` | string | A message to be displayed to the user by the build system when the action is run. Has access to `RULE_INPUT_` variables (see below). |
+
+There are several variables available to `outputs`, `action`, and `message`.
+
+| *Variable* | *Description* |
+|:---------------------|:------------------------------------|
+| `RULE_INPUT_PATH` | The full path to the current input. |
+| `RULE_INPUT_DIRNAME` | The directory of the current input. |
+| `RULE_INPUT_NAME` | The file name of the current input. |
+| `RULE_INPUT_ROOT` | The file name of the current input without extension. |
+| `RULE_INPUT_EXT` | The file name extension of the current input. |
+
+Rules can be thought of as Action generators. For each source selected
+by `extension` an special action is created. This action starts out with
+the same `inputs`, `outputs`, `action`, and `message` as the rule. The
+source is added to the action's `inputs`. The `outputs`, `action`, and
+`message` are then handled the same but with the additional variables.
+If the `_output` variable is used in the `action` or `message` the
+`RULE_INPUT_` variables in `output` will be expanded for the current
+source.
+
+### Copies
+
+A `copies` section provides a simple means of copying files. The
+`copies` section is organized as a list. Each item in the list is a
+dictionary having the following form:
+
+| *Keyword* | *Type* | *Description* |
+|:--------------|:-------|:------------------------------|
+| `destination` | string | The directory into which the `files` will be copied. |
+| `files` | list | A list of files to be copied. |
+
+The copies will be created in `destination` and have the same file name
+as the file they are copied from. Even if the `files` are from multiple
+directories they will all be copied into the `destination` directory.
+Each `destination` file has an implicit build dependency on the file it
+is copied from.
+
+### Generated Xcode .pbxproj Files
+
+We derive the following things in a `project.pbxproj` plist file within
+an `.xcodeproj` bundle from the above input file formats as follows:
+
+ * `Group hierarchy`: This is generated in a fixed format with contents
+ derived from the input files. There is no provision for the user to
+ specify additional groups or create a custom hierarchy.
+ * `Configuration group`: This will be used with the
+ `xcode_config_file` property above, if needed.
+ * `Source group`: The union of the `sources` lists of all `targets`
+ after applying appropriate `conditions`. The resulting list is
+ sorted and put into a group hierarchy that matches the layout of
+ the directory tree on disk, with a root of // (the top of the
+ hierarchy).
+ * `Frameworks group`: Taken directly from `libraries` value for the
+ target, after applying appropriate conditions.
+ * `Projects group`: References to other `.xcodeproj` bundles that
+ are needed by the `.xcodeproj` in which the group is contained.
+ * `Products group`: Output from the various targets.
+ * `Project References`:
+ * `Project Configurations`:
+ * Per-`.xcodeproj` file settings are not supported, all settings are
+ applied at the target level.
+ * `Targets`:
+ * `Phases`: Copy sources, link with libraries/frameworks, ...
+ * `Target Configurations`: Specified by input.
+ * `Dependencies`: (local and remote)
+
+### Generated Visual Studio .vcproj Files
+
+We derive the following sections in a `.vcproj` file from the above
+input file formats as follows:
+
+ * `VisualStudioProject`:
+ * `Platforms`:
+ * `ToolFiles`:
+ * `Configurations`:
+ * `Configuration`:
+ * `References`:
+ * `Files`:
+ * `Filter`:
+ * `File`:
+ * `FileConfiguration`:
+ * `Tool`:
+ * `Globals`:
+
+### Generated Visual Studio .sln Files
+
+We derive the following sections in a `.sln` file from the above input
+file formats as follows:
+
+ * `Projects`:
+ * `WebsiteProperties`:
+ * `ProjectDependencies`:
+ * `Global`:
+ * `SolutionConfigurationPlatforms`:
+ * `ProjectConfigurationPlatforms`:
+ * `SolutionProperties`:
+ * `NestedProjects`:
+
+## Caveats
+
+Notes/Question from very first prototype draft of the language.
+Make sure these issues are addressed somewhere before deleting.
+
+ * Libraries are easy, application abstraction is harder
+ * Applications involves resource compilation
+ * Applications involve many inputs
+ * Applications include transitive closure of dependencies
+ * Specific use cases like cc\_library
+ * Mac compiles more than just .c/.cpp files (specifically, .m and .mm
+ files)
+ * Compiler options vary by:
+ * File type
+ * Target type
+ * Individual file
+ * Files may have custom settings per file per platform, but we probably
+ don't care or need to support this in gyp.
+ * Will all linked non-Chromium projects always use the same versions of every
+ subsystem?
+ * Variants are difficult. We've identified the following variants (some
+ specific to Chromium, some typical of other projects in the same ballpark):
+ * Target platform
+ * V8 vs. JSC
+ * Debug vs. Release
+ * Toolchain (VS version, gcc, version)
+ * Host platform
+ * L10N
+ * Vendor
+ * Purify / Valgrind
+ * Will everyone upgrade VS at once?
+ * What does a dylib dependency mean?
diff --git a/deps/npm/node_modules/node-gyp/gyp/docs/README.md b/deps/npm/node_modules/node-gyp/gyp/docs/README.md
new file mode 100644
index 00000000000..5f9b6a59ce0
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/gyp/docs/README.md
@@ -0,0 +1,27 @@
+# Generate Your Projects (gyp-next)
+
+GYP is a Meta-Build system: a build system that generates other build systems.
+
+* [User documentation](./UserDocumentation.md)
+* [Input Format Reference](./InputFormatReference.md)
+* [Language specification](./LanguageSpecification.md)
+* [Hacking](./Hacking.md)
+* [Testing](./Testing.md)
+* [GYP vs. CMake](./GypVsCMake.md)
+
+GYP is intended to support large projects that need to be built on multiple
+platforms (e.g., Mac, Windows, Linux), and where it is important that
+the project can be built using the IDEs that are popular on each platform
+as if the project is a "native" one.
+
+It can be used to generate XCode projects, Visual Studio projects, Ninja
+build files, and Makefiles. In each case GYP's goal is to replicate as
+closely as possible the way one would set up a native build of the project
+using the IDE.
+
+GYP can also be used to generate "hybrid" projects that provide the IDE
+scaffolding for a nice user experience but call out to Ninja to do the actual
+building (which is usually much faster than the native build systems of the
+IDEs).
+
+For more information on GYP, click on the links above.
diff --git a/deps/npm/node_modules/node-gyp/gyp/docs/Testing.md b/deps/npm/node_modules/node-gyp/gyp/docs/Testing.md
new file mode 100644
index 00000000000..baeb65f9441
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/gyp/docs/Testing.md
@@ -0,0 +1,450 @@
+# Testing
+
+NOTE: this document is outdated and needs to be updated. Read with your own discretion.
+
+## Introduction
+
+This document describes the GYP testing infrastructure,
+as provided by the `TestGyp.py` module.
+
+These tests emphasize testing the _behavior_ of the
+various GYP-generated build configurations:
+Visual Studio, Xcode, SCons, Make, etc.
+The goal is _not_ to test the output of the GYP generators by,
+for example, comparing a GYP-generated Makefile
+against a set of known "golden" Makefiles
+(although the testing infrastructure could
+be used to write those kinds of tests).
+The idea is that the generated build configuration files
+could be completely written to add a feature or fix a bug
+so long as they continue to support the functional behaviors
+defined by the tests: building programs, shared libraries, etc.
+
+## "Hello, world!" GYP test configuration
+
+Here is an actual test configuration,
+a simple build of a C program to print `"Hello, world!"`.
+
+```
+ $ ls -l test/hello
+ total 20
+ -rw-r--r-- 1 knight knight 312 Jul 30 20:22 gyptest-all.py
+ -rw-r--r-- 1 knight knight 307 Jul 30 20:22 gyptest-default.py
+ -rwxr-xr-x 1 knight knight 326 Jul 30 20:22 gyptest-target.py
+ -rw-r--r-- 1 knight knight 98 Jul 30 20:22 hello.c
+ -rw-r--r-- 1 knight knight 142 Jul 30 20:22 hello.gyp
+ $
+```
+
+The `gyptest-*.py` files are three separate tests (test scripts)
+that use this configuration. The first one, `gyptest-all.py`,
+looks like this:
+
+```
+ #!/usr/bin/env python
+
+ """
+ Verifies simplest-possible build of a "Hello, world!" program
+ using an explicit build target of 'all'.
+ """
+
+ import TestGyp
+
+ test = TestGyp.TestGyp()
+
+ test.run_gyp('hello.gyp')
+
+ test.build_all('hello.gyp')
+
+ test.run_built_executable('hello', stdout="Hello, world!\n")
+
+ test.pass_test()
+```
+
+The test script above runs GYP against the specified input file
+(`hello.gyp`) to generate a build configuration.
+It then tries to build the `'all'` target
+(or its equivalent) using the generated build configuration.
+Last, it verifies that the build worked as expected
+by running the executable program (`hello`)
+that was just presumably built by the generated configuration,
+and verifies that the output from the program
+matches the expected `stdout` string (`"Hello, world!\n"`).
+
+Which configuration is generated
+(i.e., which build tool to test)
+is specified when the test is run;
+see the next section.
+
+Surrounding the functional parts of the test
+described above are the header,
+which should be basically the same for each test
+(modulo a different description in the docstring):
+
+```
+ #!/usr/bin/env python
+
+ """
+ Verifies simplest-possible build of a "Hello, world!" program
+ using an explicit build target of 'all'.
+ """
+
+ import TestGyp
+
+ test = TestGyp.TestGyp()
+```
+
+Similarly, the footer should be the same in every test:
+
+```
+ test.pass_test()
+```
+
+## Running tests
+
+Test scripts are run by the `gyptest.py` script.
+You can specify (an) explicit test script(s) to run:
+
+```
+ $ python gyptest.py test/hello/gyptest-all.py
+ PYTHONPATH=/home/knight/src/gyp/trunk/test/lib
+ TESTGYP_FORMAT=scons
+ /usr/bin/python test/hello/gyptest-all.py
+ PASSED
+ $
+```
+
+If you specify a directory, all test scripts
+(scripts prefixed with `gyptest-`) underneath
+the directory will be run:
+
+```
+ $ python gyptest.py test/hello
+ PYTHONPATH=/home/knight/src/gyp/trunk/test/lib
+ TESTGYP_FORMAT=scons
+ /usr/bin/python test/hello/gyptest-all.py
+ PASSED
+ /usr/bin/python test/hello/gyptest-default.py
+ PASSED
+ /usr/bin/python test/hello/gyptest-target.py
+ PASSED
+ $
+```
+
+Or you can specify the `-a` option to run all scripts
+in the tree:
+
+```
+ $ python gyptest.py -a
+ PYTHONPATH=/home/knight/src/gyp/trunk/test/lib
+ TESTGYP_FORMAT=scons
+ /usr/bin/python test/configurations/gyptest-configurations.py
+ PASSED
+ /usr/bin/python test/defines/gyptest-defines.py
+ PASSED
+ .
+ .
+ .
+ .
+ /usr/bin/python test/variables/gyptest-commands.py
+ PASSED
+ $
+```
+
+If any tests fail during the run,
+the `gyptest.py` script will report them in a
+summary at the end.
+
+## Debugging tests
+
+Tests that create intermediate output do so under the gyp/out/testworkarea
+directory. On test completion, intermediate output is cleaned up. To preserve
+this output, set the environment variable PRESERVE=1. This can be handy to
+inspect intermediate data when debugging a test.
+
+You can also set PRESERVE\_PASS=1, PRESERVE\_FAIL=1 or PRESERVE\_NO\_RESULT=1
+to preserve output for tests that fall into one of those categories.
+
+# Specifying the format (build tool) to use
+
+By default, the `gyptest.py` script will generate configurations for
+the "primary" supported build tool for the platform you're on:
+Visual Studio on Windows,
+Xcode on Mac,
+and (currently) SCons on Linux.
+An alternate format (build tool) may be specified
+using the `-f` option:
+
+```
+ $ python gyptest.py -f make test/hello/gyptest-all.py
+ PYTHONPATH=/home/knight/src/gyp/trunk/test/lib
+ TESTGYP_FORMAT=make
+ /usr/bin/python test/hello/gyptest-all.py
+ PASSED
+ $
+```
+
+Multiple tools may be specified in a single pass as
+a comma-separated list:
+
+```
+ $ python gyptest.py -f make,scons test/hello/gyptest-all.py
+ PYTHONPATH=/home/knight/src/gyp/trunk/test/lib
+ TESTGYP_FORMAT=make
+ /usr/bin/python test/hello/gyptest-all.py
+ PASSED
+ TESTGYP_FORMAT=scons
+ /usr/bin/python test/hello/gyptest-all.py
+ PASSED
+ $
+```
+
+## Test script functions and methods
+
+The `TestGyp` class contains a lot of functionality
+intended to make it easy to write tests.
+This section describes the most useful pieces for GYP testing.
+
+(The `TestGyp` class is actually a subclass of more generic
+`TestCommon` and `TestCmd` base classes
+that contain even more functionality than is
+described here.)
+
+### Initialization
+
+The standard initialization formula is:
+
+```
+ import TestGyp
+ test = TestGyp.TestGyp()
+```
+
+This copies the contents of the directory tree in which
+the test script lives to a temporary directory for execution,
+and arranges for the temporary directory's removal on exit.
+
+By default, any comparisons of output or file contents
+must be exact matches for the test to pass.
+If you need to use regular expressions for matches,
+a useful alternative initialization is:
+
+```
+ import TestGyp
+ test = TestGyp.TestGyp(match = TestGyp.match_re,
+ diff = TestGyp.diff_re)`
+```
+
+### Running GYP
+
+The canonical invocation is to simply specify the `.gyp` file to be executed:
+
+```
+ test.run_gyp('file.gyp')
+```
+
+Additional GYP arguments may be specified:
+
+```
+ test.run_gyp('file.gyp', arguments=['arg1', 'arg2', ...])
+```
+
+To execute GYP from a subdirectory (where, presumably, the specified file
+lives):
+
+```
+ test.run_gyp('file.gyp', chdir='subdir')
+```
+
+### Running the build tool
+
+Running the build tool requires passing in a `.gyp` file, which may be used to
+calculate the name of a specific build configuration file (such as a MSVS
+solution file corresponding to the `.gyp` file).
+
+There are several different `.build_*()` methods for invoking different types
+of builds.
+
+To invoke a build tool with an explicit `all` target (or equivalent):
+
+```
+ test.build_all('file.gyp')
+```
+
+To invoke a build tool with its default behavior (for example, executing `make`
+with no targets specified):
+
+```
+ test.build_default('file.gyp')
+```
+
+To invoke a build tool with an explicit specified target:
+
+```
+ test.build_target('file.gyp', 'target')
+```
+
+### Running executables
+
+The most useful method executes a program built by the GYP-generated
+configuration:
+
+```
+ test.run_built_executable('program')
+```
+
+The `.run_built_executable()` method will account for the actual built target
+output location for the build tool being tested, as well as tack on any
+necessary executable file suffix for the platform (for example `.exe` on
+Windows).
+
+`stdout=` and `stderr=` keyword arguments specify expected standard output and
+error output, respectively. Failure to match these (if specified) will cause
+the test to fail. An explicit `None` value will suppress that verification:
+
+```
+ test.run_built_executable('program',
+ stdout="expect this output\n",
+ stderr=None)
+```
+
+Note that the default values are `stdout=None` and `stderr=''` (that is, no
+check for standard output, and error output must be empty).
+
+Arbitrary executables (not necessarily those built by GYP) can be executed with
+the lower-level `.run()` method:
+
+```
+ test.run('program')
+```
+
+The program must be in the local directory (that is, the temporary directory
+for test execution) or be an absolute path name.
+
+### Fetching command output
+
+```
+ test.stdout()
+```
+
+Returns the standard output from the most recent executed command (including
+`.run_gyp()`, `.build_*()`, or `.run*()` methods).
+
+```
+ test.stderr()
+```
+
+Returns the error output from the most recent executed command (including
+`.run_gyp()`, `.build_*()`, or `.run*()` methods).
+
+### Verifying existence or non-existence of files or directories
+
+```
+ test.must_exist('file_or_dir')
+```
+
+Verifies that the specified file or directory exists, and fails the test if it
+doesn't.
+
+```
+ test.must_not_exist('file_or_dir')
+```
+
+Verifies that the specified file or directory does not exist, and fails the
+test if it does.
+
+### Verifying file contents
+
+```
+ test.must_match('file', 'expected content\n')
+```
+
+Verifies that the content of the specified file match the expected string, and
+fails the test if it does not. By default, the match must be exact, but
+line-by-line regular expressions may be used if the `TestGyp` object was
+initialized with `TestGyp.match_re`.
+
+```
+ test.must_not_match('file', 'expected content\n')
+```
+
+Verifies that the content of the specified file does _not_ match the expected
+string, and fails the test if it does. By default, the match must be exact,
+but line-by-line regular expressions may be used if the `TestGyp` object was
+initialized with `TestGyp.match_re`.
+
+```
+ test.must_contain('file', 'substring')
+```
+
+Verifies that the specified file contains the specified substring, and fails
+the test if it does not.
+
+```
+ test.must_not_contain('file', 'substring')
+```
+
+Verifies that the specified file does not contain the specified substring, and
+fails the test if it does.
+
+```
+ test.must_contain_all_lines(output, lines)
+```
+
+Verifies that the output string contains all of the "lines" in the specified
+list of lines. In practice, the lines can be any substring and need not be
+`\n`-terminaed lines per se. If any line is missing, the test fails.
+
+```
+ test.must_not_contain_any_lines(output, lines)
+```
+
+Verifies that the output string does _not_ contain any of the "lines" in the
+specified list of lines. In practice, the lines can be any substring and need
+not be `\n`-terminaed lines per se. If any line exists in the output string,
+the test fails.
+
+```
+ test.must_contain_any_line(output, lines)
+```
+
+Verifies that the output string contains at least one of the "lines" in the
+specified list of lines. In practice, the lines can be any substring and need
+not be `\n`-terminaed lines per se. If none of the specified lines is present,
+the test fails.
+
+### Reading file contents
+
+```
+ test.read('file')
+```
+
+Returns the contents of the specified file. Directory elements contained in a
+list will be joined:
+
+```
+ test.read(['subdir', 'file'])
+```
+
+### Test success or failure
+
+```
+ test.fail_test()
+```
+
+Fails the test, reporting `FAILED` on standard output and exiting with an exit
+status of `1`.
+
+```
+ test.pass_test()
+```
+
+Passes the test, reporting `PASSED` on standard output and exiting with an exit
+status of `0`.
+
+```
+ test.no_result()
+```
+
+Indicates the test had no valid result (i.e., the conditions could not be
+tested because of an external factor like a full file system). Reports `NO
+RESULT` on standard output and exits with a status of `2`.
diff --git a/deps/npm/node_modules/node-gyp/gyp/docs/UserDocumentation.md b/deps/npm/node_modules/node-gyp/gyp/docs/UserDocumentation.md
new file mode 100644
index 00000000000..808f37a1a93
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/gyp/docs/UserDocumentation.md
@@ -0,0 +1,965 @@
+# User Documentation
+
+## Introduction
+
+This document is intended to provide a user-level guide to GYP. The
+emphasis here is on how to use GYP to accomplish specific tasks, not on
+the complete technical language specification. (For that, see the
+[LanguageSpecification](LanguageSpecification.md).)
+
+The document below starts with some overviews to provide context: an
+overview of the structure of a `.gyp` file itself, an overview of a
+typical executable-program target in a `.gyp` file, an an overview of a
+typical library target in a `.gyp` file.
+
+After the overviews, there are examples of `gyp` patterns for different
+common use cases.
+
+## Skeleton of a typical Chromium .gyp file
+
+Here is the skeleton of a typical `.gyp` file in the Chromium tree:
+
+```
+ {
+ 'variables': {
+ .
+ .
+ .
+ },
+ 'includes': [
+ '../build/common.gypi',
+ ],
+ 'target_defaults': {
+ .
+ .
+ .
+ },
+ 'targets': [
+ {
+ 'target_name': 'target_1',
+ .
+ .
+ .
+ },
+ {
+ 'target_name': 'target_2',
+ .
+ .
+ .
+ },
+ ],
+ 'conditions': [
+ ['OS=="linux"', {
+ 'targets': [
+ {
+ 'target_name': 'linux_target_3',
+ .
+ .
+ .
+ },
+ ],
+ }],
+ ['OS=="win"', {
+ 'targets': [
+ {
+ 'target_name': 'windows_target_4',
+ .
+ .
+ .
+ },
+ ],
+ }, { # OS != "win"
+ 'targets': [
+ {
+ 'target_name': 'non_windows_target_5',
+ .
+ .
+ .
+ },
+ }],
+ ],
+ }
+```
+
+The entire file just contains a Python dictionary. (It's actually JSON,
+with two small Pythonic deviations: comments are introduced with `#`,
+and a `,` (comma)) is legal after the last element in a list or
+dictionary.)
+
+The top-level pieces in the `.gyp` file are as follows:
+
+`'variables'`: Definitions of variables that can be interpolated and
+used in various other parts of the file.
+
+`'includes'`: A list of of other files that will be included in this
+file. By convention, included files have the suffix `.gypi` (gyp
+include).
+
+`'target_defaults'`: Settings that will apply to _all_ of the targets
+defined in this `.gyp` file.
+
+`'targets'`: The list of targets for which this `.gyp` file can
+generate builds. Each target is a dictionary that contains settings
+describing all the information necessary to build the target.
+
+`'conditions'`: A list of condition specifications that can modify the
+contents of the items in the global dictionary defined by this `.gyp`
+file based on the values of different variablwes. As implied by the
+above example, the most common use of a `conditions` section in the
+top-level dictionary is to add platform-specific targets to the
+`targets` list.
+
+## Skeleton of a typical executable target in a .gyp file
+
+The most straightforward target is probably a simple executable program.
+Here is an example `executable` target that demonstrates the features
+that should cover most simple uses of gyp:
+
+```
+ {
+ 'targets': [
+ {
+ 'target_name': 'foo',
+ 'type': 'executable',
+ 'msvs_guid': '5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65',
+ 'dependencies': [
+ 'xyzzy',
+ '../bar/bar.gyp:bar',
+ ],
+ 'defines': [
+ 'DEFINE_FOO',
+ 'DEFINE_A_VALUE=value',
+ ],
+ 'include_dirs': [
+ '..',
+ ],
+ 'sources': [
+ 'file1.cc',
+ 'file2.cc',
+ ],
+ 'conditions': [
+ ['OS=="linux"', {
+ 'defines': [
+ 'LINUX_DEFINE',
+ ],
+ 'include_dirs': [
+ 'include/linux',
+ ],
+ }],
+ ['OS=="win"', {
+ 'defines': [
+ 'WINDOWS_SPECIFIC_DEFINE',
+ ],
+ }, { # OS != "win",
+ 'defines': [
+ 'NON_WINDOWS_DEFINE',
+ ],
+ }]
+ ],
+ },
+ ],
+ }
+```
+
+The top-level settings in the target include:
+
+`'target_name'`: The name by which the target should be known, which
+should be unique across all `.gyp` files. This name will be used as the
+project name in the generated Visual Studio solution, as the target name
+in the generated XCode configuration, and as the alias for building this
+target from the command line of the generated SCons configuration.
+
+`'type'`: Set to `executable`, logically enough.
+
+`'msvs_guid'`: THIS IS ONLY TRANSITIONAL. This is a hard-coded GUID
+values that will be used in the generated Visual Studio solution
+file(s). This allows us to check in a `chrome.sln` file that
+interoperates with gyp-generated project files. Once everything in
+Chromium is being generated by gyp, it will no longer be important that
+the GUIDs stay constant across invocations, and we'll likely get rid of
+these settings,
+
+`'dependencies'`: This lists other targets that this target depends on.
+The gyp-generated files will guarantee that the other targets are built
+before this target. Any library targets in the `dependencies` list will
+be linked with this target. The various settings (`defines`,
+`include_dirs`, etc.) listed in the `direct_dependent_settings` sections
+of the targets in this list will be applied to how _this_ target is
+built and linked. See the more complete discussion of
+`direct_dependent_settings`, below.
+
+`'defines'`: The C preprocessor definitions that will be passed in on
+compilation command lines (using `-D` or `/D` options).
+
+`'include_dirs'`: The directories in which included header files live.
+These will be passed in on compilation command lines (using `-I` or `/I`
+options).
+
+`'sources'`: The source files for this target.
+
+`'conditions'`: A block of conditions that will be evaluated to update
+the different settings in the target dictionary.
+
+## Skeleton of a typical library target in a .gyp file
+
+The vast majority of targets are libraries. Here is an example of a
+library target including the additional features that should cover most
+needs of libraries:
+
+```
+ {
+ 'targets': [
+ {
+ 'target_name': 'foo',
+ 'type': '<(library)'
+ 'msvs_guid': '5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65',
+ 'dependencies': [
+ 'xyzzy',
+ '../bar/bar.gyp:bar',
+ ],
+ 'defines': [
+ 'DEFINE_FOO',
+ 'DEFINE_A_VALUE=value',
+ ],
+ 'include_dirs': [
+ '..',
+ ],
+ 'direct_dependent_settings': {
+ 'defines': [
+ 'DEFINE_FOO',
+ 'DEFINE_ADDITIONAL',
+ ],
+ 'linkflags': [
+ ],
+ },
+ 'export_dependent_settings': [
+ '../bar/bar.gyp:bar',
+ ],
+ 'sources': [
+ 'file1.cc',
+ 'file2.cc',
+ ],
+ 'conditions': [
+ ['OS=="linux"', {
+ 'defines': [
+ 'LINUX_DEFINE',
+ ],
+ 'include_dirs': [
+ 'include/linux',
+ ],
+ ],
+ ['OS=="win"', {
+ 'defines': [
+ 'WINDOWS_SPECIFIC_DEFINE',
+ ],
+ }, { # OS != "win",
+ 'defines': [
+ 'NON_WINDOWS_DEFINE',
+ ],
+ }]
+ ],
+ ],
+ }
+```
+
+The possible entries in a library target are largely the same as those
+that can be specified for an executable target (`defines`,
+`include_dirs`, etc.). The differences include:
+
+`'type'`: This should almost always be set to '<(library)', which allows
+the user to define at gyp time whether libraries are to be built static
+or shared. (On Linux, at least, linking with shared libraries saves
+significant link time.) If it's necessary to pin down the type of
+library to be built, the `type` can be set explicitly to
+`static_library` or `shared_library`.
+
+`'direct_dependent_settings'`: This defines the settings that will be
+applied to other targets that _directly depend_ on this target--that is,
+that list _this_ target in their `'dependencies'` setting. This is
+where you list the `defines`, `include_dirs`, `cflags` and `linkflags`
+that other targets that compile or link against this target need to
+build consistently.
+
+`'export_dependent_settings'`: This lists the targets whose
+`direct_dependent_settings` should be "passed on" to other targets that
+use (depend on) this target. `TODO: expand on this description.`
+
+## Use Cases
+
+These use cases are intended to cover the most common actions performed
+by developers using GYP.
+
+Note that these examples are _not_ fully-functioning, self-contained
+examples (or else they'd be way too long). Each example mostly contains
+just the keywords and settings relevant to the example, with perhaps a
+few extra keywords for context. The intent is to try to show the
+specific pieces you need to pay attention to when doing something.
+[NOTE: if practical use shows that these examples are confusing without
+additional context, please add what's necessary to clarify things.]
+
+### Add new source files
+
+There are similar but slightly different patterns for adding a
+platform-independent source file vs. adding a source file that only
+builds on some of the supported platforms.
+
+#### Add a source file that builds on all platforms
+
+**Simplest possible case**: You are adding a file(s) that builds on all
+platforms.
+
+Just add the file(s) to the `sources` list of the appropriate dictionary
+in the `targets` list:
+
+```
+ {
+ 'targets': [
+ {
+ 'target_name': 'my_target',
+ 'type': 'executable',
+ 'sources': [
+ '../other/file_1.cc',
+ 'new_file.cc',
+ 'subdir/file3.cc',
+ ],
+ },
+ ],
+ },
+```
+
+File path names are relative to the directory in which the `.gyp` file lives.
+
+Keep the list sorted alphabetically (unless there's a really, really,
+_really_ good reason not to).
+
+#### Add a platform-specific source file
+
+##### Your platform-specific file is named `*_linux.{ext}`, `*_mac.{ext}`, `*_posix.{ext}` or `*_win.{ext}`
+
+The simplest way to add a platform-specific source file, assuming you're
+adding a completely new file and get to name it, is to use one of the
+following standard suffixes:
+
+ * `_linux` (e.g. `foo_linux.cc`)
+ * `_mac` (e.g. `foo_mac.cc`)
+ * `_posix` (e.g. `foo_posix.cc`)
+ * `_win` (e.g. `foo_win.cc`)
+
+Simply add the file to the `sources` list of the appropriate dict within
+the `targets` list, like you would any other source file.
+
+```
+ {
+ 'targets': [
+ {
+ 'target_name': 'foo',
+ 'type': 'executable',
+ 'sources': [
+ 'independent.cc',
+ 'specific_win.cc',
+ ],
+ },
+ ],
+ },
+```
+
+The Chromium `.gyp` files all have appropriate `conditions` entries to
+filter out the files that aren't appropriate for the current platform.
+In the above example, the `specific_win.cc` file will be removed
+automatically from the source-list on non-Windows builds.
+
+##### Your platform-specific file does not use an already-defined pattern
+
+If your platform-specific file does not contain a
+`*_{linux,mac,posix,win}` substring (or some other pattern that's
+already in the `conditions` for the target), and you can't change the
+file name, there are two patterns that can be used.
+
+**Prefererred**: Add the file to the `sources` list of the appropriate
+dictionary within the `targets` list. Add an appropriate `conditions`
+section to exclude the specific files name:
+
+```
+ {
+ 'targets': [
+ {
+ 'target_name': 'foo',
+ 'type': 'executable',
+ 'sources': [
+ 'linux_specific.cc',
+ ],
+ 'conditions': [
+ ['OS != "linux"', {
+ 'sources!': [
+ # Linux-only; exclude on other platforms.
+ 'linux_specific.cc',
+ ]
+ }[,
+ ],
+ },
+ ],
+ },
+```
+
+Despite the duplicate listing, the above is generally preferred because
+the `sources` list contains a useful global list of all sources on all
+platforms with consistent sorting on all platforms.
+
+**Non-preferred**: In some situations, however, it might make sense to
+list a platform-specific file only in a `conditions` section that
+specifically _includes_ it in the `sources` list:
+
+```
+ {
+ 'targets': [
+ {
+ 'target_name': 'foo',
+ 'type': 'executable',
+ 'sources': [],
+ ['OS == "linux"', {
+ 'sources': [
+ # Only add to sources list on Linux.
+ 'linux_specific.cc',
+ ]
+ }],
+ },
+ ],
+ },
+```
+
+The above two examples end up generating equivalent builds, with the
+small exception that the `sources` lists will list the files in
+different orders. (The first example defines explicitly where
+`linux_specific.cc` appears in the list--perhaps in in the
+middle--whereas the second example will always tack it on to the end of
+the list.)
+
+**Including or excluding files using patterns**: There are more
+complicated ways to construct a `sources` list based on patterns. See
+`TODO` below.
+
+### Add a new executable
+
+An executable program is probably the most straightforward type of
+target, since all it typically needs is a list of source files, some
+compiler/linker settings (probably varied by platform), and some library
+targets on which it depends and which must be used in the final link.
+
+#### Add an executable that builds on all platforms
+
+Add a dictionary defining the new executable target to the `targets`
+list in the appropriate `.gyp` file. Example:
+
+```
+ {
+ 'targets': [
+ {
+ 'target_name': 'new_unit_tests',
+ 'type': 'executable',
+ 'defines': [
+ 'FOO',
+ ],
+ 'include_dirs': [
+ '..',
+ ],
+ 'dependencies': [
+ 'other_target_in_this_file',
+ 'other_gyp2:target_in_other_gyp2',
+ ],
+ 'sources': [
+ 'new_additional_source.cc',
+ 'new_unit_tests.cc',
+ ],
+ },
+ ],
+ }
+```
+
+#### Add a platform-specific executable
+
+Add a dictionary defining the new executable target to the `targets`
+list within an appropriate `conditions` block for the platform. The
+`conditions` block should be a sibling to the top-level `targets` list:
+
+```
+ {
+ 'targets': [
+ ],
+ 'conditions': [
+ ['OS=="win"', {
+ 'targets': [
+ {
+ 'target_name': 'new_unit_tests',
+ 'type': 'executable',
+ 'defines': [
+ 'FOO',
+ ],
+ 'include_dirs': [
+ '..',
+ ],
+ 'dependencies': [
+ 'other_target_in_this_file',
+ 'other_gyp2:target_in_other_gyp2',
+ ],
+ 'sources': [
+ 'new_additional_source.cc',
+ 'new_unit_tests.cc',
+ ],
+ },
+ ],
+ }],
+ ],
+ }
+```
+
+### Add settings to a target
+
+There are several different types of settings that can be defined for
+any given target.
+
+#### Add new preprocessor definitions (`-D` or `/D` flags)
+
+New preprocessor definitions are added by the `defines` setting:
+
+```
+ {
+ 'targets': [
+ {
+ 'target_name': 'existing_target',
+ 'defines': [
+ 'FOO',
+ 'BAR=some_value',
+ ],
+ },
+ ],
+ },
+```
+
+These may be specified directly in a target's settings, as in the above
+example, or in a `conditions` section.
+
+#### Add a new include directory (`-I` or `/I` flags)
+
+New include directories are added by the `include_dirs` setting:
+
+```
+ {
+ 'targets': [
+ {
+ 'target_name': 'existing_target',
+ 'include_dirs': [
+ '..',
+ 'include',
+ ],
+ },
+ ],
+ },
+```
+
+These may be specified directly in a target's settings, as in the above
+example, or in a `conditions` section.
+
+#### Add new compiler flags
+
+Specific compiler flags can be added with the `cflags` setting:
+
+```
+ {
+ 'targets': [
+ {
+ 'target_name': 'existing_target',
+ 'conditions': [
+ ['OS=="win"', {
+ 'cflags': [
+ '/WX',
+ ],
+ }, { # OS != "win"
+ 'cflags': [
+ '-Werror',
+ ],
+ }],
+ ],
+ },
+ ],
+ },
+```
+
+Because these flags will be specific to the actual compiler involved,
+they will almost always be only set within a `conditions` section.
+
+#### Add new linker flags
+
+Setting linker flags is OS-specific. On linux and most non-mac posix
+systems, they can be added with the `ldflags` setting:
+
+```
+ {
+ 'targets': [
+ {
+ 'target_name': 'existing_target',
+ 'conditions': [
+ ['OS=="linux"', {
+ 'ldflags': [
+ '-pthread',
+ ],
+ }],
+ ],
+ },
+ ],
+ },
+```
+
+Because these flags will be specific to the actual linker involved,
+they will almost always be only set within a `conditions` section.
+
+On OS X, linker settings are set via `xcode_settings`, on Windows via
+`msvs_settings`.
+
+#### Exclude settings on a platform
+
+Any given settings keyword (`defines`, `include_dirs`, etc.) has a
+corresponding form with a trailing `!` (exclamation point) to remove
+values from a setting. One useful example of this is to remove the
+Linux `-Werror` flag from the global settings defined in
+`build/common.gypi`:
+
+```
+ {
+ 'targets': [
+ {
+ 'target_name': 'third_party_target',
+ 'conditions': [
+ ['OS=="linux"', {
+ 'cflags!': [
+ '-Werror',
+ ],
+ }],
+ ],
+ },
+ ],
+ },
+```
+
+### Cross-compiling
+
+GYP has some (relatively limited) support for cross-compiling.
+
+If the variable `GYP_CROSSCOMPILE` or one of the toolchain-related
+variables (like `CC_host` or `CC_target`) is set, GYP will think that
+you wish to do a cross-compile.
+
+When cross-compiling, each target can be part of a "host" build, a
+"target" build, or both. By default, the target is assumed to be (only)
+part of the "target" build. The 'toolsets' property can be set on a
+target to change the default.
+
+A target's dependencies are assumed to match the build type (so, if A
+depends on B, by default that means that a target build of A depends on
+a target build of B). You can explicitly depend on targets across
+toolchains by specifying "#host" or "#target" in the dependencies list.
+If GYP is not doing a cross-compile, the "#host" and "#target" will be
+stripped as needed, so nothing breaks.
+
+### Add a new library
+
+TODO: write intro
+
+#### Add a library that builds on all platforms
+
+Add the a dictionary defining the new library target to the `targets`
+list in the appropriate `.gyp` file. Example:
+
+```
+ {
+ 'targets': [
+ {
+ 'target_name': 'new_library',
+ 'type': '<(library)',
+ 'defines': [
+ 'FOO',
+ 'BAR=some_value',
+ ],
+ 'include_dirs': [
+ '..',
+ ],
+ 'dependencies': [
+ 'other_target_in_this_file',
+ 'other_gyp2:target_in_other_gyp2',
+ ],
+ 'direct_dependent_settings': {
+ 'include_dirs': '.',
+ },
+ 'export_dependent_settings': [
+ 'other_target_in_this_file',
+ ],
+ 'sources': [
+ 'new_additional_source.cc',
+ 'new_library.cc',
+ ],
+ },
+ ],
+ }
+```
+
+The use of the `<(library)` variable above should be the default `type`
+setting for most library targets, as it allows the developer to choose,
+at `gyp` time, whether to build with static or shared libraries.
+(Building with shared libraries saves a _lot_ of link time on Linux.)
+
+It may be necessary to build a specific library as a fixed type. Is so,
+the `type` field can be hard-wired appropriately. For a static library:
+
+```
+ 'type': 'static_library',
+```
+
+For a shared library:
+
+```
+ 'type': 'shared_library',
+```
+
+#### Add a platform-specific library
+
+Add a dictionary defining the new library target to the `targets` list
+within a `conditions` block that's a sibling to the top-level `targets`
+list:
+
+```
+ {
+ 'targets': [
+ ],
+ 'conditions': [
+ ['OS=="win"', {
+ 'targets': [
+ {
+ 'target_name': 'new_library',
+ 'type': '<(library)',
+ 'defines': [
+ 'FOO',
+ 'BAR=some_value',
+ ],
+ 'include_dirs': [
+ '..',
+ ],
+ 'dependencies': [
+ 'other_target_in_this_file',
+ 'other_gyp2:target_in_other_gyp2',
+ ],
+ 'direct_dependent_settings': {
+ 'include_dirs': '.',
+ },
+ 'export_dependent_settings': [
+ 'other_target_in_this_file',
+ ],
+ 'sources': [
+ 'new_additional_source.cc',
+ 'new_library.cc',
+ ],
+ },
+ ],
+ }],
+ ],
+ }
+```
+
+### Dependencies between targets
+
+GYP provides useful primitives for establishing dependencies between
+targets, which need to be configured in the following situations.
+
+#### Linking with another library target
+
+```
+ {
+ 'targets': [
+ {
+ 'target_name': 'foo',
+ 'dependencies': [
+ 'libbar',
+ ],
+ },
+ {
+ 'target_name': 'libbar',
+ 'type': '<(library)',
+ 'sources': [
+ ],
+ },
+ ],
+ }
+```
+
+Note that if the library target is in a different `.gyp` file, you have
+to specify the path to other `.gyp` file, relative to this `.gyp` file's
+directory:
+
+```
+ {
+ 'targets': [
+ {
+ 'target_name': 'foo',
+ 'dependencies': [
+ '../bar/bar.gyp:libbar',
+ ],
+ },
+ ],
+ }
+```
+
+Adding a library often involves updating multiple `.gyp` files, adding
+the target to the approprate `.gyp` file (possibly a newly-added `.gyp`
+file), and updating targets in the other `.gyp` files that depend on
+(link with) the new library.
+
+#### Compiling with necessary flags for a library target dependency
+
+We need to build a library (often a third-party library) with specific
+preprocessor definitions or command-line flags, and need to ensure that
+targets that depend on the library build with the same settings. This
+situation is handled by a `direct_dependent_settings` block:
+
+```
+ {
+ 'targets': [
+ {
+ 'target_name': 'foo',
+ 'type': 'executable',
+ 'dependencies': [
+ 'libbar',
+ ],
+ },
+ {
+ 'target_name': 'libbar',
+ 'type': '<(library)',
+ 'defines': [
+ 'LOCAL_DEFINE_FOR_LIBBAR',
+ 'DEFINE_TO_USE_LIBBAR',
+ ],
+ 'include_dirs': [
+ '..',
+ 'include/libbar',
+ ],
+ 'direct_dependent_settings': {
+ 'defines': [
+ 'DEFINE_TO_USE_LIBBAR',
+ ],
+ 'include_dirs': [
+ 'include/libbar',
+ ],
+ },
+ },
+ ],
+ }
+```
+
+In the above example, the sources of the `foo` executable will be
+compiled with the options `-DDEFINE_TO_USE_LIBBAR -Iinclude/libbar`,
+because of those settings' being listed in the
+`direct_dependent_settings` block.
+
+Note that these settings will likely need to be replicated in the
+settings for the library target itsef, so that the library will build
+with the same options. This does not prevent the target from defining
+additional options for its "internal" use when compiling its own source
+files. (In the above example, these are the `LOCAL_DEFINE_FOR_LIBBAR`
+define, and the `..` entry in the `include_dirs` list.)
+
+#### When a library depends on an additional library at final link time
+
+```
+ {
+ 'targets': [
+ {
+ 'target_name': 'foo',
+ 'type': 'executable',
+ 'dependencies': [
+ 'libbar',
+ ],
+ },
+ {
+ 'target_name': 'libbar',
+ 'type': '<(library)',
+ 'dependencies': [
+ 'libother'
+ ],
+ 'export_dependent_settings': [
+ 'libother'
+ ],
+ },
+ {
+ 'target_name': 'libother',
+ 'type': '<(library)',
+ 'direct_dependent_settings': {
+ 'defines': [
+ 'DEFINE_FOR_LIBOTHER',
+ ],
+ 'include_dirs': [
+ 'include/libother',
+ ],
+ },
+ },
+ ],
+ }
+```
+
+### Support for Mac OS X bundles
+
+gyp supports building bundles on OS X (.app, .framework, .bundle, etc).
+Here is an example of this:
+
+```
+ {
+ 'target_name': 'test_app',
+ 'product_name': 'Test App Gyp',
+ 'type': 'executable',
+ 'mac_bundle': 1,
+ 'sources': [
+ 'main.m',
+ 'TestAppAppDelegate.h',
+ 'TestAppAppDelegate.m',
+ ],
+ 'mac_bundle_resources': [
+ 'TestApp/English.lproj/InfoPlist.strings',
+ 'TestApp/English.lproj/MainMenu.xib',
+ ],
+ 'link_settings': {
+ 'libraries': [
+ '$(SDKROOT)/System/Library/Frameworks/Cocoa.framework',
+ ],
+ },
+ 'xcode_settings': {
+ 'INFOPLIST_FILE': 'TestApp/TestApp-Info.plist',
+ },
+ },
+```
+
+The `mac_bundle` key tells gyp that this target should be a bundle.
+`executable` targets get extension `.app` by default, `shared_library`
+targets get `.framework` – but you can change the bundle extensions by
+setting `product_extension` if you want. Files listed in
+`mac_bundle_resources` will be copied to the bundle's `Resource` folder
+of the bundle. You can also set
+`process_outputs_as_mac_bundle_resources` to 1 in actions and rules to
+let the output of actions and rules be added to that folder (similar to
+`process_outputs_as_sources`). If `product_name` is not set, the bundle
+will be named after `target_name`as usual.
+
+### Move files (refactoring)
+
+TODO
+
+### Custom build steps
+
+TODO
+
+#### Adding an explicit build step to generate specific files
+
+TODO
+
+#### Adding a rule to handle files with a new suffix
+
+TODO
+
+### Build flavors
+
+TODO
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py
index 93633dbca13..ac87f572b24 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py
@@ -793,6 +793,8 @@ def _ValidateSettings(validators, settings, stderr):
_compile, "CompileAsManaged", _Enumeration([], new=["false", "true"])
) # /clr
_MSBuildOnly(_compile, "CreateHotpatchableImage", _boolean) # /hotpatch
+_MSBuildOnly(_compile, "LanguageStandard", _string)
+_MSBuildOnly(_compile, "LanguageStandard_C", _string)
_MSBuildOnly(_compile, "MultiProcessorCompilation", _boolean) # /MP
_MSBuildOnly(_compile, "PreprocessOutputPath", _string) # /Fi
_MSBuildOnly(_compile, "ProcessorNumber", _integer) # the number of processors
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/common.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/common.py
index b73a0c55b1e..762ae021090 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/common.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/common.py
@@ -9,6 +9,7 @@
import tempfile
import sys
import subprocess
+import shlex
from collections.abc import MutableSet
@@ -422,8 +423,54 @@ def EnsureDirExists(path):
except OSError:
pass
+def GetCrossCompilerPredefines(): # -> dict
+ cmd = []
+
+ # shlex.split() will eat '\' in posix mode, but
+ # setting posix=False will preserve extra '"' cause CreateProcess fail on Windows
+ # this makes '\' in %CC_target% and %CFLAGS% work
+ def replace_sep(s):
+ return s.replace(os.sep, "/") if os.sep != "/" else s
+
+ if CC := os.environ.get("CC_target") or os.environ.get("CC"):
+ cmd += shlex.split(replace_sep(CC))
+ if CFLAGS := os.environ.get("CFLAGS"):
+ cmd += shlex.split(replace_sep(CFLAGS))
+ elif CXX := os.environ.get("CXX_target") or os.environ.get("CXX"):
+ cmd += shlex.split(replace_sep(CXX))
+ if CXXFLAGS := os.environ.get("CXXFLAGS"):
+ cmd += shlex.split(replace_sep(CXXFLAGS))
+ else:
+ return {}
-def GetFlavor(params):
+ if sys.platform == "win32":
+ fd, input = tempfile.mkstemp(suffix=".c")
+ real_cmd = [*cmd, "-dM", "-E", "-x", "c", input]
+ try:
+ os.close(fd)
+ stdout = subprocess.run(
+ real_cmd, shell=True,
+ capture_output=True, check=True
+ ).stdout
+ finally:
+ os.unlink(input)
+ else:
+ input = "/dev/null"
+ real_cmd = [*cmd, "-dM", "-E", "-x", "c", input]
+ stdout = subprocess.run(
+ real_cmd, shell=False,
+ capture_output=True, check=True
+ ).stdout
+
+ defines = {}
+ lines = stdout.decode("utf-8").replace("\r\n", "\n").split("\n")
+ for line in lines:
+ if (line or "").startswith("#define "):
+ _, key, *value = line.split(" ")
+ defines[key] = " ".join(value)
+ return defines
+
+def GetFlavorByPlatform():
"""Returns |params.flavor| if it's set, the system's default flavor else."""
flavors = {
"cygwin": "win",
@@ -431,8 +478,6 @@ def GetFlavor(params):
"darwin": "mac",
}
- if "flavor" in params:
- return params["flavor"]
if sys.platform in flavors:
return flavors[sys.platform]
if sys.platform.startswith("sunos"):
@@ -452,6 +497,18 @@ def GetFlavor(params):
return "linux"
+def GetFlavor(params):
+ if "flavor" in params:
+ return params["flavor"]
+
+ defines = GetCrossCompilerPredefines()
+ if "__EMSCRIPTEN__" in defines:
+ return "emscripten"
+ if "__wasm__" in defines:
+ return "wasi" if "__wasi__" in defines else "wasm"
+
+ return GetFlavorByPlatform()
+
def CopyTool(flavor, out_path, generator_flags={}):
"""Finds (flock|mac|win)_tool.gyp in the gyp directory and copies it
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/common_test.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/common_test.py
index 05344085ad3..b6c4cccc1ac 100755
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/common_test.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/common_test.py
@@ -9,7 +9,8 @@
import gyp.common
import unittest
import sys
-
+import os
+from unittest.mock import patch, MagicMock
class TestTopologicallySorted(unittest.TestCase):
def test_Valid(self):
@@ -24,9 +25,8 @@ def test_Valid(self):
def GetEdge(node):
return tuple(graph[node])
- self.assertEqual(
- gyp.common.TopologicallySorted(graph.keys(), GetEdge), ["a", "c", "d", "b"]
- )
+ assert gyp.common.TopologicallySorted(
+ graph.keys(), GetEdge) == ["a", "c", "d", "b"]
def test_Cycle(self):
"""Test that an exception is thrown on a cyclic graph."""
@@ -58,7 +58,7 @@ def tearDown(self):
def assertFlavor(self, expected, argument, param):
sys.platform = argument
- self.assertEqual(expected, gyp.common.GetFlavor(param))
+ assert expected == gyp.common.GetFlavor(param)
def test_platform_default(self):
self.assertFlavor("freebsd", "freebsd9", {})
@@ -73,6 +73,99 @@ def test_platform_default(self):
def test_param(self):
self.assertFlavor("foobar", "linux2", {"flavor": "foobar"})
+ class MockCommunicate:
+ def __init__(self, stdout):
+ self.stdout = stdout
+
+ def decode(self, encoding):
+ return self.stdout
+
+ @patch("os.close")
+ @patch("os.unlink")
+ @patch("tempfile.mkstemp")
+ def test_GetCrossCompilerPredefines(self, mock_mkstemp, mock_unlink, mock_close):
+ mock_close.return_value = None
+ mock_unlink.return_value = None
+ mock_mkstemp.return_value = (0, "temp.c")
+
+ def mock_run(env, defines_stdout, expected_cmd):
+ with patch("subprocess.run") as mock_run:
+ mock_process = MagicMock()
+ mock_process.returncode = 0
+ mock_process.stdout = TestGetFlavor.MockCommunicate(defines_stdout)
+ mock_run.return_value = mock_process
+ expected_input = "temp.c" if sys.platform == "win32" else "/dev/null"
+ with patch.dict(os.environ, env):
+ defines = gyp.common.GetCrossCompilerPredefines()
+ flavor = gyp.common.GetFlavor({})
+ if env.get("CC_target"):
+ mock_run.assert_called_with(
+ [
+ *expected_cmd,
+ "-dM", "-E", "-x", "c", expected_input
+ ],
+ shell=sys.platform == "win32",
+ capture_output=True, check=True)
+ return [defines, flavor]
+
+ [defines1, _] = mock_run({}, "", [])
+ assert {} == defines1
+
+ [defines2, flavor2] = mock_run(
+ { "CC_target": "/opt/wasi-sdk/bin/clang" },
+ "#define __wasm__ 1\n#define __wasi__ 1\n",
+ ["/opt/wasi-sdk/bin/clang"]
+ )
+ assert { "__wasm__": "1", "__wasi__": "1" } == defines2
+ assert flavor2 == "wasi"
+
+ [defines3, flavor3] = mock_run(
+ { "CC_target": "/opt/wasi-sdk/bin/clang --target=wasm32" },
+ "#define __wasm__ 1\n",
+ ["/opt/wasi-sdk/bin/clang", "--target=wasm32"]
+ )
+ assert { "__wasm__": "1" } == defines3
+ assert flavor3 == "wasm"
+
+ [defines4, flavor4] = mock_run(
+ { "CC_target": "/emsdk/upstream/emscripten/emcc" },
+ "#define __EMSCRIPTEN__ 1\n",
+ ["/emsdk/upstream/emscripten/emcc"]
+ )
+ assert { "__EMSCRIPTEN__": "1" } == defines4
+ assert flavor4 == "emscripten"
+
+ # Test path which include white space
+ [defines5, flavor5] = mock_run(
+ {
+ "CC_target": "\"/Users/Toyo Li/wasi-sdk/bin/clang\" -O3",
+ "CFLAGS": "--target=wasm32-wasi-threads -pthread"
+ },
+ "#define __wasm__ 1\n#define __wasi__ 1\n#define _REENTRANT 1\n",
+ [
+ "/Users/Toyo Li/wasi-sdk/bin/clang",
+ "-O3",
+ "--target=wasm32-wasi-threads",
+ "-pthread"
+ ]
+ )
+ assert {
+ "__wasm__": "1",
+ "__wasi__": "1",
+ "_REENTRANT": "1"
+ } == defines5
+ assert flavor5 == "wasi"
+
+ original_sep = os.sep
+ os.sep = "\\"
+ [defines6, flavor6] = mock_run(
+ { "CC_target": "\"C:\\Program Files\\wasi-sdk\\clang.exe\"" },
+ "#define __wasm__ 1\n#define __wasi__ 1\n",
+ ["C:/Program Files/wasi-sdk/clang.exe"]
+ )
+ os.sep = original_sep
+ assert { "__wasm__": "1", "__wasi__": "1" } == defines6
+ assert flavor6 == "wasi"
if __name__ == "__main__":
unittest.main()
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py
index 9a796702142..2a63f412dbc 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py
@@ -740,8 +740,8 @@ def ComputeOutput(self, spec):
)
else:
path = (
- "$(call intermediates-dir-for,"
- f"{self.android_class},{self.android_module},,,$(GYP_VAR_PREFIX))"
+ f"$(call intermediates-dir-for,{self.android_class},"
+ f"{self.android_module},,,$(GYP_VAR_PREFIX))"
)
assert spec.get("product_dir") is None # TODO: not supported?
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/compile_commands_json.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/compile_commands_json.py
index 0ffa3bb5980..5d7f14da969 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/compile_commands_json.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/compile_commands_json.py
@@ -108,10 +108,14 @@ def GenerateOutput(target_list, target_dicts, data, params):
cwd = os.path.dirname(build_file)
AddCommandsForTarget(cwd, target, params, per_config_commands)
+ output_dir = None
try:
- output_dir = params["options"].generator_output
- except (AttributeError, KeyError):
- output_dir = params["generator_flags"].get("output_dir", "out")
+ # generator_output can be `None` on Windows machines, or even not
+ # defined in other cases
+ output_dir = params.get("options").generator_output
+ except AttributeError:
+ pass
+ output_dir = output_dir or params["generator_flags"].get("output_dir", "out")
for configuration_name, commands in per_config_commands.items():
filename = os.path.join(output_dir, configuration_name, "compile_commands.json")
gyp.common.EnsureDirExists(filename)
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/gypsh.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/gypsh.py
index 625b6d65ca1..8dfb1f1645f 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/gypsh.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/gypsh.py
@@ -51,7 +51,7 @@ def GenerateOutput(target_list, target_dicts, data, params):
# locals are available, and identify gypsh.
banner = (
f"Python {sys.version} on {sys.platform}\nlocals.keys() = "
- f"{repr(sorted(locals.keys()))}\ngypsh"
+ f"{sorted(locals.keys())!r}\ngypsh"
)
code.interact(banner, local=locals)
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py
index 1b9974948e4..392d900914d 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py
@@ -25,6 +25,7 @@
import os
import re
import subprocess
+import sys
import gyp
import gyp.common
import gyp.xcode_emulation
@@ -378,7 +379,7 @@ def CalculateGeneratorInputInfo(params):
CXXFLAGS.target ?= $(CPPFLAGS) $(CXXFLAGS)
LINK.target ?= %(LINK.target)s
LDFLAGS.target ?= $(LDFLAGS)
-AR.target ?= $(AR)
+AR.target ?= %(AR.target)s
PLI.target ?= %(PLI.target)s
# C++ apps need to be linked with g++.
@@ -442,13 +443,21 @@ def CalculateGeneratorInputInfo(params):
define fixup_dep
# The depfile may not exist if the input file didn't have any #includes.
touch $(depfile).raw
-# Fixup path as in (1).
-sed -e "s|^$(notdir $@)|$@|" $(depfile).raw >> $(depfile)
+# Fixup path as in (1).""" +
+ (r"""
+sed -e "s|^$(notdir $@)|$@|" -re 's/\\\\([^$$])/\/\1/g' $(depfile).raw >> $(depfile)"""
+ if sys.platform == 'win32' else r"""
+sed -e "s|^$(notdir $@)|$@|" $(depfile).raw >> $(depfile)""") +
+ r"""
# Add extra rules as in (2).
# We remove slashes and replace spaces with new lines;
# remove blank lines;
-# delete the first line and append a colon to the remaining lines.
-sed -e 's|\\||' -e 'y| |\n|' $(depfile).raw |\
+# delete the first line and append a colon to the remaining lines.""" +
+ ("""
+sed -e 's/\\\\\\\\$$//' -e 's/\\\\\\\\/\\//g' -e 'y| |\\n|' $(depfile).raw |\\"""
+ if sys.platform == 'win32' else """
+sed -e 's|\\\\||' -e 'y| |\\n|' $(depfile).raw |\\""") +
+ r"""
grep -v '^$$' |\
sed -e 1d -e 's|$$|:|' \
>> $(depfile)
@@ -724,6 +733,10 @@ def QuoteIfNecessary(string):
string = '"' + string.replace('"', '\\"') + '"'
return string
+def replace_sep(string):
+ if sys.platform == 'win32':
+ string = string.replace('\\\\', '/').replace('\\', '/')
+ return string
def StringToMakefileVariable(string):
"""Convert a string to a value that is acceptable as a make variable name."""
@@ -859,7 +872,7 @@ def Write(
self.output = self.ComputeMacBundleOutput(spec)
self.output_binary = self.ComputeMacBundleBinaryOutput(spec)
else:
- self.output = self.output_binary = self.ComputeOutput(spec)
+ self.output = self.output_binary = replace_sep(self.ComputeOutput(spec))
self.is_standalone_static_library = bool(
spec.get("standalone_static_library", 0)
@@ -985,7 +998,7 @@ def WriteSubMake(self, output_filename, makefile_path, targets, build_dir):
# sub-project dir (see test/subdirectory/gyptest-subdir-all.py).
self.WriteLn(
"export builddir_name ?= %s"
- % os.path.join(os.path.dirname(output_filename), build_dir)
+ % replace_sep(os.path.join(os.path.dirname(output_filename), build_dir))
)
self.WriteLn(".PHONY: all")
self.WriteLn("all:")
@@ -2063,7 +2076,7 @@ def WriteList(self, value_list, variable=None, prefix="", quoter=QuoteIfNecessar
"""
values = ""
if value_list:
- value_list = [quoter(prefix + value) for value in value_list]
+ value_list = [replace_sep(quoter(prefix + value)) for value in value_list]
values = " \\\n\t" + " \\\n\t".join(value_list)
self.fp.write(f"{variable} :={values}\n\n")
@@ -2369,10 +2382,12 @@ def WriteAutoRegenerationRule(params, root_makefile, makefile_name, build_files)
"\t$(call do_cmd,regen_makefile)\n\n"
% {
"makefile_name": makefile_name,
- "deps": " ".join(SourceifyAndQuoteSpaces(bf) for bf in build_files),
- "cmd": gyp.common.EncodePOSIXShellList(
- [gyp_binary, "-fmake"] + gyp.RegenerateFlags(options) + build_files_args
+ "deps": replace_sep(
+ " ".join(SourceifyAndQuoteSpaces(bf) for bf in build_files)
),
+ "cmd": replace_sep(gyp.common.EncodePOSIXShellList(
+ [gyp_binary, "-fmake"] + gyp.RegenerateFlags(options) + build_files_args
+ )),
}
)
@@ -2435,33 +2450,52 @@ def CalculateMakefilePath(build_file, base_name):
makefile_path = os.path.join(
options.toplevel_dir, options.generator_output, makefile_name
)
- srcdir = gyp.common.RelativePath(srcdir, options.generator_output)
+ srcdir = replace_sep(gyp.common.RelativePath(srcdir, options.generator_output))
srcdir_prefix = "$(srcdir)/"
flock_command = "flock"
copy_archive_arguments = "-af"
makedep_arguments = "-MMD"
+
+ # wasm-ld doesn't support --start-group/--end-group
+ link_commands = LINK_COMMANDS_LINUX
+ if flavor in ["wasi", "wasm"]:
+ link_commands = link_commands.replace(' -Wl,--start-group', '').replace(
+ ' -Wl,--end-group', ''
+ )
+
+ CC_target = replace_sep(GetEnvironFallback(("CC_target", "CC"), "$(CC)"))
+ AR_target = replace_sep(GetEnvironFallback(("AR_target", "AR"), "$(AR)"))
+ CXX_target = replace_sep(GetEnvironFallback(("CXX_target", "CXX"), "$(CXX)"))
+ LINK_target = replace_sep(GetEnvironFallback(("LINK_target", "LINK"), "$(LINK)"))
+ PLI_target = replace_sep(GetEnvironFallback(("PLI_target", "PLI"), "pli"))
+ CC_host = replace_sep(GetEnvironFallback(("CC_host", "CC"), "gcc"))
+ AR_host = replace_sep(GetEnvironFallback(("AR_host", "AR"), "ar"))
+ CXX_host = replace_sep(GetEnvironFallback(("CXX_host", "CXX"), "g++"))
+ LINK_host = replace_sep(GetEnvironFallback(("LINK_host", "LINK"), "$(CXX.host)"))
+ PLI_host = replace_sep(GetEnvironFallback(("PLI_host", "PLI"), "pli"))
+
header_params = {
"default_target": default_target,
"builddir": builddir_name,
"default_configuration": default_configuration,
"flock": flock_command,
"flock_index": 1,
- "link_commands": LINK_COMMANDS_LINUX,
+ "link_commands": link_commands,
"extra_commands": "",
"srcdir": srcdir,
"copy_archive_args": copy_archive_arguments,
"makedep_args": makedep_arguments,
- "CC.target": GetEnvironFallback(("CC_target", "CC"), "$(CC)"),
- "AR.target": GetEnvironFallback(("AR_target", "AR"), "$(AR)"),
- "CXX.target": GetEnvironFallback(("CXX_target", "CXX"), "$(CXX)"),
- "LINK.target": GetEnvironFallback(("LINK_target", "LINK"), "$(LINK)"),
- "PLI.target": GetEnvironFallback(("PLI_target", "PLI"), "pli"),
- "CC.host": GetEnvironFallback(("CC_host", "CC"), "gcc"),
- "AR.host": GetEnvironFallback(("AR_host", "AR"), "ar"),
- "CXX.host": GetEnvironFallback(("CXX_host", "CXX"), "g++"),
- "LINK.host": GetEnvironFallback(("LINK_host", "LINK"), "$(CXX.host)"),
- "PLI.host": GetEnvironFallback(("PLI_host", "PLI"), "pli"),
+ "CC.target": CC_target,
+ "AR.target": AR_target,
+ "CXX.target": CXX_target,
+ "LINK.target": LINK_target,
+ "PLI.target": PLI_target,
+ "CC.host": CC_host,
+ "AR.host": AR_host,
+ "CXX.host": CXX_host,
+ "LINK.host": LINK_host,
+ "PLI.host": PLI_host,
}
if flavor == "mac":
flock_command = "./gyp-mac-tool flock"
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py
index 6f0f8c1ab64..6b5b24acc00 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py
@@ -1779,8 +1779,8 @@ def _GetCopies(spec):
fixed_dst = _FixPath(dst)
full_dst = f'"{fixed_dst}\\{outer_dir}\\"'
cmd = (
- f'mkdir {full_dst} 2>nul & cd "{_FixPath(base_dir)}" && '
- f'xcopy /e /f /y "{outer_dir}" {full_dst}'
+ f'mkdir {full_dst} 2>nul & cd "{_FixPath(base_dir)}" '
+ f'&& xcopy /e /f /y "{outer_dir}" {full_dst}'
)
copies.append(
(
@@ -1896,9 +1896,8 @@ def _GetPlatformOverridesOfProject(spec):
for config_name, c in spec["configurations"].items():
config_fullname = _ConfigFullName(config_name, c)
platform = c.get("msvs_target_platform", _ConfigPlatform(c))
- fixed_config_fullname = (
- f"{_ConfigBaseName(config_name, _ConfigPlatform(c))}|{platform}"
- )
+ base_name = _ConfigBaseName(config_name, _ConfigPlatform(c))
+ fixed_config_fullname = f"{base_name}|{platform}"
if spec["toolset"] == "host" and generator_supports_multiple_toolsets:
fixed_config_fullname = f"{config_name}|x64"
config_platform_overrides[config_fullname] = fixed_config_fullname
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py
index 8ba341e96d3..0146c499626 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py
@@ -11,6 +11,7 @@
import os.path
import re
import signal
+import shutil
import subprocess
import sys
import gyp
@@ -2210,6 +2211,7 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params, config_name
options = params["options"]
flavor = gyp.common.GetFlavor(params)
generator_flags = params.get("generator_flags", {})
+ generate_compile_commands = generator_flags.get("compile_commands", False)
# build_dir: relative path from source root to our output files.
# e.g. "out/Debug"
@@ -2878,6 +2880,35 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params, config_name
master_ninja_file.close()
+ if generate_compile_commands:
+ compile_db = GenerateCompileDBWithNinja(toplevel_build)
+ compile_db_file = OpenOutput(
+ os.path.join(toplevel_build, "compile_commands.json")
+ )
+ compile_db_file.write(json.dumps(compile_db, indent=2))
+ compile_db_file.close()
+
+
+def GenerateCompileDBWithNinja(path, targets=["all"]):
+ """Generates a compile database using ninja.
+
+ Args:
+ path: The build directory to generate a compile database for.
+ targets: Additional targets to pass to ninja.
+
+ Returns:
+ List of the contents of the compile database.
+ """
+ ninja_path = shutil.which("ninja")
+ if ninja_path is None:
+ raise Exception("ninja not found in PATH")
+ json_compile_db = subprocess.check_output(
+ [ninja_path, "-C", path]
+ + targets
+ + ["-t", "compdb", "cc", "cxx", "objc", "objcxx"]
+ )
+ return json.loads(json_compile_db)
+
def PerformBuild(data, configurations, params):
options = params["options"]
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja_test.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja_test.py
index 7d180685b21..15cddfdf244 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja_test.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja_test.py
@@ -6,6 +6,7 @@
""" Unit tests for the ninja.py file. """
+from pathlib import Path
import sys
import unittest
@@ -50,6 +51,17 @@ def test_BinaryNamesLinux(self):
writer.ComputeOutputFileName(spec, "static_library").endswith(".a")
)
+ def test_GenerateCompileDBWithNinja(self):
+ build_dir = (
+ Path(__file__).resolve().parent.parent.parent.parent / "data" / "ninja"
+ )
+ compile_db = ninja.GenerateCompileDBWithNinja(build_dir)
+ assert len(compile_db) == 1
+ assert compile_db[0]["directory"] == str(build_dir)
+ assert compile_db[0]["command"] == "cc my.in my.out"
+ assert compile_db[0]["file"] == "my.in"
+ assert compile_db[0]["output"] == "my.out"
+
if __name__ == "__main__":
unittest.main()
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/input.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/input.py
index 0b56c72750e..7150269cda5 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/input.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/input.py
@@ -1135,16 +1135,16 @@ def EvalCondition(condition, conditions_key, phase, variables, build_file):
true_dict = condition[i + 1]
if type(true_dict) is not dict:
raise GypError(
- f"{conditions_key} {cond_expr} must be followed by a dictionary, not "
- f"{type(true_dict)}"
+ f"{conditions_key} {cond_expr} must be followed by a dictionary, "
+ f"not {type(true_dict)}"
)
if len(condition) > i + 2 and type(condition[i + 2]) is dict:
false_dict = condition[i + 2]
i = i + 3
if i != len(condition):
raise GypError(
- f"{conditions_key} {cond_expr} has {len(condition) - i} "
- "unexpected trailing items"
+ f"{conditions_key} {cond_expr} has "
+ f"{len(condition) - i} unexpected trailing items"
)
else:
false_dict = None
@@ -2536,6 +2536,8 @@ def ProcessListFiltersInDict(name, the_dict):
lists = []
del_lists = []
for key, value in the_dict.items():
+ if not key:
+ continue
operation = key[-1]
if operation not in {"!", "/"}:
continue
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py
index 847d1b8dc1d..adda5a0273f 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py
@@ -830,14 +830,15 @@ def _GetLdManifestFlags(
("VCLinkerTool", "UACUIAccess"), config, default="false"
)
+ level = execution_level_map[execution_level]
inner = f"""
-
+
-""" # noqa: E501
+"""
else:
inner = ""
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py
index 29caf1ce7fb..5f2c097f63e 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py
@@ -579,7 +579,8 @@ def GetCflags(self, configname, arch=None):
sdk_root = self._SdkPath()
if "SDKROOT" in self._Settings() and sdk_root:
- cflags.append("-isysroot %s" % sdk_root)
+ cflags.append("-isysroot")
+ cflags.append(sdk_root)
if self.header_map_path:
cflags.append("-I%s" % self.header_map_path)
@@ -664,7 +665,8 @@ def GetCflags(self, configname, arch=None):
# TODO: Supporting fat binaries will be annoying.
self._WarnUnimplemented("ARCHS")
archs = ["i386"]
- cflags.append("-arch " + archs[0])
+ cflags.append("-arch")
+ cflags.append(archs[0])
if archs[0] in ("i386", "x86_64"):
if self._Test("GCC_ENABLE_SSE3_EXTENSIONS", "YES", default="NO"):
@@ -924,17 +926,15 @@ def GetLdflags(self, configname, product_dir, gyp_to_build_path, arch=None):
self._AppendPlatformVersionMinFlags(ldflags)
if "SDKROOT" in self._Settings() and self._SdkPath():
- ldflags.append("-isysroot " + self._SdkPath())
+ ldflags.append("-isysroot")
+ ldflags.append(self._SdkPath())
for library_path in self._Settings().get("LIBRARY_SEARCH_PATHS", []):
ldflags.append("-L" + gyp_to_build_path(library_path))
if "ORDER_FILE" in self._Settings():
- ldflags.append(
- "-Wl,-order_file "
- + "-Wl,"
- + gyp_to_build_path(self._Settings()["ORDER_FILE"])
- )
+ ldflags.append("-Wl,-order_file")
+ ldflags.append("-Wl," + gyp_to_build_path(self._Settings()["ORDER_FILE"]))
if not gyp.common.CrossCompileRequested():
if arch is not None:
@@ -946,7 +946,9 @@ def GetLdflags(self, configname, product_dir, gyp_to_build_path, arch=None):
# TODO: Supporting fat binaries will be annoying.
self._WarnUnimplemented("ARCHS")
archs = ["i386"]
- ldflags.append("-arch " + archs[0])
+ # Avoid quoting the space between -arch and the arch name
+ ldflags.append("-arch")
+ ldflags.append(archs[0])
# Xcode adds the product directory by default.
# Rewrite -L. to -L./ to work around http://www.openradar.me/25313838
@@ -954,7 +956,8 @@ def GetLdflags(self, configname, product_dir, gyp_to_build_path, arch=None):
install_name = self.GetInstallName()
if install_name and self.spec["type"] != "loadable_module":
- ldflags.append("-install_name " + install_name.replace(" ", r"\ "))
+ ldflags.append("-install_name")
+ ldflags.append(install_name.replace(" ", r"\ "))
for rpath in self._Settings().get("LD_RUNPATH_SEARCH_PATHS", []):
ldflags.append("-Wl,-rpath," + rpath)
@@ -971,7 +974,8 @@ def GetLdflags(self, configname, product_dir, gyp_to_build_path, arch=None):
platform_root = self._XcodePlatformPath(configname)
if sdk_root and platform_root:
ldflags.append("-F" + platform_root + "/Developer/Library/Frameworks/")
- ldflags.append("-framework XCTest")
+ ldflags.append("-framework")
+ ldflags.append("XCTest")
is_extension = self._IsIosAppExtension() or self._IsIosWatchKitExtension()
if sdk_root and is_extension:
@@ -987,7 +991,8 @@ def GetLdflags(self, configname, product_dir, gyp_to_build_path, arch=None):
+ "/System/Library/PrivateFrameworks/PlugInKit.framework/PlugInKit"
)
else:
- ldflags.append("-e _NSExtensionMain")
+ ldflags.append("-e")
+ ldflags.append("_NSExtensionMain")
ldflags.append("-fapplication-extension")
self._Appendf(ldflags, "CLANG_CXX_LIBRARY", "-stdlib=%s")
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation_test.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation_test.py
new file mode 100644
index 00000000000..98b02320d5a
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation_test.py
@@ -0,0 +1,53 @@
+#!/usr/bin/env python3
+
+"""Unit tests for the xcode_emulation.py file."""
+
+from gyp.xcode_emulation import XcodeSettings
+import sys
+import unittest
+
+
+class TestXcodeSettings(unittest.TestCase):
+ def setUp(self):
+ if sys.platform != "darwin":
+ self.skipTest("This test only runs on macOS")
+
+ def test_GetCflags(self):
+ target = {
+ "type": "static_library",
+ "configurations": {
+ "Release": {},
+ },
+ }
+ configuration_name = "Release"
+ xcode_settings = XcodeSettings(target)
+ cflags = xcode_settings.GetCflags(configuration_name, "arm64")
+
+ # Do not quote `-arch arm64` with spaces in one string.
+ self.assertEqual(
+ cflags,
+ ["-fasm-blocks", "-mpascal-strings", "-Os", "-gdwarf-2", "-arch", "arm64"],
+ )
+
+ def GypToBuildPath(self, path):
+ return path
+
+ def test_GetLdflags(self):
+ target = {
+ "type": "static_library",
+ "configurations": {
+ "Release": {},
+ },
+ }
+ configuration_name = "Release"
+ xcode_settings = XcodeSettings(target)
+ ldflags = xcode_settings.GetLdflags(
+ configuration_name, "PRODUCT_DIR", self.GypToBuildPath, "arm64"
+ )
+
+ # Do not quote `-arch arm64` with spaces in one string.
+ self.assertEqual(ldflags, ["-arch", "arm64", "-LPRODUCT_DIR"])
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/deps/npm/node_modules/node-gyp/gyp/pyproject.toml b/deps/npm/node_modules/node-gyp/gyp/pyproject.toml
index 7183e07d3c2..def9858e444 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pyproject.toml
+++ b/deps/npm/node_modules/node-gyp/gyp/pyproject.toml
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "gyp-next"
-version = "0.16.1"
+version = "0.18.1"
authors = [
{ name="Node.js contributors", email="ryzokuken@disroot.org" },
]
@@ -12,8 +12,7 @@ description = "A fork of the GYP build system for use in the Node.js projects"
readme = "README.md"
license = { file="LICENSE" }
requires-python = ">=3.8"
-# The Python module "packaging" is vendored in the "pylib/packaging" directory to support Python >= 3.12.
-# dependencies = ["packaging>=23.1"] # Uncomment this line if the vendored version is removed.
+dependencies = ["packaging>=24.0", "setuptools>=69.5.1"]
classifiers = [
"Development Status :: 3 - Alpha",
"Environment :: Console",
@@ -29,7 +28,7 @@ classifiers = [
]
[project.optional-dependencies]
-dev = ["flake8", "ruff", "pytest"]
+dev = ["pytest", "ruff"]
[project.scripts]
gyp = "gyp:script_main"
@@ -38,7 +37,12 @@ gyp = "gyp:script_main"
"Homepage" = "https://github.com/nodejs/gyp-next"
[tool.ruff]
-lint.select = [
+extend-exclude = ["pylib/packaging"]
+line-length = 88
+target-version = "py37"
+
+[tool.ruff.lint]
+select = [
"C4", # flake8-comprehensions
"C90", # McCabe cyclomatic complexity
"DTZ", # flake8-datetimez
@@ -87,7 +91,7 @@ lint.select = [
# "T20", # flake8-print
# "TRY", # tryceratops
]
-lint.ignore = [
+ignore = [
"E721",
"PLC1901",
"PLR0402",
@@ -101,9 +105,6 @@ lint.ignore = [
"RUF012",
"UP031",
]
-extend-exclude = ["pylib/packaging"]
-line-length = 88
-target-version = "py37"
[tool.ruff.lint.mccabe]
max-complexity = 101
diff --git a/deps/npm/node_modules/node-gyp/gyp/release-please-config.json b/deps/npm/node_modules/node-gyp/gyp/release-please-config.json
new file mode 100644
index 00000000000..b6cad32a2dd
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/gyp/release-please-config.json
@@ -0,0 +1,11 @@
+{
+ "last-release-sha": "78756421b0d7bb335992a9c7d26ba3cc8b619708",
+ "packages": {
+ ".": {
+ "release-type": "python",
+ "package-name": "gyp-next",
+ "bump-minor-pre-major": true,
+ "include-component-in-tag": false
+ }
+ }
+}
diff --git a/deps/npm/node_modules/node-gyp/lib/build.js b/deps/npm/node_modules/node-gyp/lib/build.js
index 6b8d84d3ede..e1f49bb6ff0 100644
--- a/deps/npm/node_modules/node-gyp/lib/build.js
+++ b/deps/npm/node_modules/node-gyp/lib/build.js
@@ -1,6 +1,7 @@
'use strict'
-const fs = require('graceful-fs').promises
+const gracefulFs = require('graceful-fs')
+const fs = gracefulFs.promises
const path = require('path')
const { glob } = require('glob')
const log = require('./log')
@@ -85,59 +86,65 @@ async function build (gyp, argv) {
async function findSolutionFile () {
const files = await glob('build/*.sln')
if (files.length === 0) {
- throw new Error('Could not find *.sln file. Did you run "configure"?')
+ if (gracefulFs.existsSync('build/Makefile') || (await glob('build/*.mk')).length !== 0) {
+ command = makeCommand
+ await doWhich(false)
+ return
+ } else {
+ throw new Error('Could not find *.sln file or Makefile. Did you run "configure"?')
+ }
}
guessedSolution = files[0]
log.verbose('found first Solution file', guessedSolution)
- await doWhich()
+ await doWhich(true)
}
/**
* Uses node-which to locate the msbuild / make executable.
*/
- async function doWhich () {
+ async function doWhich (msvs) {
// On Windows use msbuild provided by node-gyp configure
- if (win) {
+ if (msvs) {
if (!config.variables.msbuild_path) {
throw new Error('MSBuild is not set, please run `node-gyp configure`.')
}
command = config.variables.msbuild_path
log.verbose('using MSBuild:', command)
- await doBuild()
+ await doBuild(msvs)
return
}
// First make sure we have the build command in the PATH
const execPath = await which(command)
log.verbose('`which` succeeded for `' + command + '`', execPath)
- await doBuild()
+ await doBuild(msvs)
}
/**
* Actually spawn the process and compile the module.
*/
- async function doBuild () {
+ async function doBuild (msvs) {
// Enable Verbose build
const verbose = log.logger.isVisible('verbose')
let j
- if (!win && verbose) {
+ if (!msvs && verbose) {
argv.push('V=1')
}
- if (win && !verbose) {
+ if (msvs && !verbose) {
argv.push('/clp:Verbosity=minimal')
}
- if (win) {
+ if (msvs) {
// Turn off the Microsoft logo on Windows
argv.push('/nologo')
}
// Specify the build type, Release by default
- if (win) {
+ if (msvs) {
// Convert .gypi config target_arch to MSBuild /Platform
// Since there are many ways to state '32-bit Intel', default to it.
// N.B. msbuild's Condition string equality tests are case-insensitive.
@@ -173,7 +180,7 @@ async function build (gyp, argv) {
}
}
- if (win) {
+ if (msvs) {
// did the user specify their own .sln file?
const hasSln = argv.some(function (arg) {
return path.extname(arg) === '.sln'
diff --git a/deps/npm/node_modules/node-gyp/lib/configure.js b/deps/npm/node_modules/node-gyp/lib/configure.js
index e4b8c94e3d2..ee672cfbf26 100644
--- a/deps/npm/node_modules/node-gyp/lib/configure.js
+++ b/deps/npm/node_modules/node-gyp/lib/configure.js
@@ -92,8 +92,28 @@ async function configure (gyp, argv) {
log.verbose(
'build dir', '"build" dir needed to be created?', isNew ? 'Yes' : 'No'
)
- const vsInfo = win ? await findVisualStudio(release.semver, gyp.opts['msvs-version']) : null
- return createConfigFile(vsInfo)
+ if (win) {
+ let usingMakeGenerator = false
+ for (let i = argv.length - 1; i >= 0; --i) {
+ const arg = argv[i]
+ if (arg === '-f' || arg === '--format') {
+ const format = argv[i + 1]
+ if (typeof format === 'string' && format.startsWith('make')) {
+ usingMakeGenerator = true
+ break
+ }
+ } else if (arg.startsWith('--format=make')) {
+ usingMakeGenerator = true
+ break
+ }
+ }
+ let vsInfo = {}
+ if (!usingMakeGenerator) {
+ vsInfo = await findVisualStudio(release.semver, gyp.opts['msvs-version'])
+ }
+ return createConfigFile(vsInfo)
+ }
+ return createConfigFile(null)
}
async function createConfigFile (vsInfo) {
diff --git a/deps/npm/node_modules/node-gyp/lib/find-visualstudio.js b/deps/npm/node_modules/node-gyp/lib/find-visualstudio.js
index 8c5ae961275..2dc1930fd78 100644
--- a/deps/npm/node_modules/node-gyp/lib/find-visualstudio.js
+++ b/deps/npm/node_modules/node-gyp/lib/find-visualstudio.js
@@ -54,8 +54,10 @@ class VisualStudioFinder {
}
const checks = [
+ () => this.findVisualStudio2019OrNewerFromSpecifiedLocation(),
() => this.findVisualStudio2019OrNewerUsingSetupModule(),
() => this.findVisualStudio2019OrNewer(),
+ () => this.findVisualStudio2017FromSpecifiedLocation(),
() => this.findVisualStudio2017UsingSetupModule(),
() => this.findVisualStudio2017(),
() => this.findVisualStudio2015(),
@@ -116,6 +118,48 @@ class VisualStudioFinder {
throw new Error('Could not find any Visual Studio installation to use')
}
+ async findVisualStudio2019OrNewerFromSpecifiedLocation () {
+ return this.findVSFromSpecifiedLocation([2019, 2022])
+ }
+
+ async findVisualStudio2017FromSpecifiedLocation () {
+ if (this.nodeSemver.major >= 22) {
+ this.addLog(
+ 'not looking for VS2017 as it is only supported up to Node.js 21')
+ return null
+ }
+ return this.findVSFromSpecifiedLocation([2017])
+ }
+
+ async findVSFromSpecifiedLocation (supportedYears) {
+ if (!this.envVcInstallDir) {
+ return null
+ }
+ const info = {
+ path: path.resolve(this.envVcInstallDir),
+ // Assume the version specified by the user is correct.
+ // Since Visual Studio 2015, the Developer Command Prompt sets the
+ // VSCMD_VER environment variable which contains the version information
+ // for Visual Studio.
+ // https://learn.microsoft.com/en-us/visualstudio/ide/reference/command-prompt-powershell?view=vs-2022
+ version: process.env.VSCMD_VER,
+ packages: [
+ 'Microsoft.VisualStudio.Component.VC.Tools.x86.x64',
+ // Assume MSBuild exists. It will be checked in processing.
+ 'Microsoft.VisualStudio.VC.MSBuild.Base'
+ ]
+ }
+
+ // Is there a better way to get SDK information?
+ const envWindowsSDKVersion = process.env.WindowsSDKVersion
+ const sdkVersionMatched = envWindowsSDKVersion?.match(/^(\d+)\.(\d+)\.(\d+)\..*/)
+ if (sdkVersionMatched) {
+ info.packages.push(`Microsoft.VisualStudio.Component.Windows10SDK.${sdkVersionMatched[3]}.Desktop`)
+ }
+ // pass for further processing
+ return this.processData([info], supportedYears)
+ }
+
async findVisualStudio2019OrNewerUsingSetupModule () {
return this.findNewVSUsingSetupModule([2019, 2022])
}
@@ -321,7 +365,7 @@ class VisualStudioFinder {
// Helper - process version information
getVersionInfo (info) {
- const match = /^(\d+)\.(\d+)\..*/.exec(info.version)
+ const match = /^(\d+)\.(\d+)(?:\..*)?/.exec(info.version)
if (!match) {
this.log.silly('- failed to parse version:', info.version)
return {}
@@ -363,7 +407,11 @@ class VisualStudioFinder {
return path.join(info.path, 'MSBuild', '15.0', 'Bin', 'MSBuild.exe')
}
if (versionYear === 2019) {
- return msbuildPath
+ if (process.arch === 'arm64' && this.msBuildPathExists(msbuildPathArm64)) {
+ return msbuildPathArm64
+ } else {
+ return msbuildPath
+ }
}
}
/**
diff --git a/deps/npm/node_modules/node-gyp/lib/log.js b/deps/npm/node_modules/node-gyp/lib/log.js
index 6841719abab..36fa2487f5c 100644
--- a/deps/npm/node_modules/node-gyp/lib/log.js
+++ b/deps/npm/node_modules/node-gyp/lib/log.js
@@ -1,12 +1,11 @@
'use strict'
-const procLog = require('proc-log')
+const { log } = require('proc-log')
const { format } = require('util')
// helper to emit log messages with a predefined prefix
-const logLevels = Object.keys(procLog).filter((k) => typeof procLog[k] === 'function')
-const withPrefix = (prefix) => logLevels.reduce((acc, level) => {
- acc[level] = (...args) => procLog[level](prefix, ...args)
+const withPrefix = (prefix) => log.LEVELS.reduce((acc, level) => {
+ acc[level] = (...args) => log[level](prefix, ...args)
return acc
}, {})
@@ -78,7 +77,7 @@ class Logger {
this.#levels = new Map(this.#levels.map((level, index) => [level.id, { ...level, index }]))
this.level = 'info'
this.stream = stream
- procLog.pause()
+ log.pause()
}
get stream () {
@@ -165,5 +164,5 @@ module.exports = {
logger: new Logger(NULL_LOGGER ? null : process.stderr),
stdout: NULL_LOGGER ? () => {} : (...args) => console.log(...args),
withPrefix,
- ...procLog
+ ...log
}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/proc-log/LICENSE b/deps/npm/node_modules/node-gyp/node_modules/proc-log/LICENSE
deleted file mode 100644
index 83837797202..00000000000
--- a/deps/npm/node_modules/node-gyp/node_modules/proc-log/LICENSE
+++ /dev/null
@@ -1,15 +0,0 @@
-The ISC License
-
-Copyright (c) GitHub, Inc.
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
-IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/node-gyp/node_modules/proc-log/lib/index.js b/deps/npm/node_modules/node-gyp/node_modules/proc-log/lib/index.js
deleted file mode 100644
index 7c5dfad3b7b..00000000000
--- a/deps/npm/node_modules/node-gyp/node_modules/proc-log/lib/index.js
+++ /dev/null
@@ -1,23 +0,0 @@
-// emits 'log' events on the process
-const LEVELS = [
- 'notice',
- 'error',
- 'warn',
- 'info',
- 'verbose',
- 'http',
- 'silly',
- 'pause',
- 'resume',
-]
-
-const log = level => (...args) => process.emit('log', level, ...args)
-
-const logger = {}
-for (const level of LEVELS) {
- logger[level] = log(level)
-}
-
-logger.LEVELS = LEVELS
-
-module.exports = logger
diff --git a/deps/npm/node_modules/node-gyp/node_modules/proc-log/package.json b/deps/npm/node_modules/node-gyp/node_modules/proc-log/package.json
deleted file mode 100644
index d335fa965ac..00000000000
--- a/deps/npm/node_modules/node-gyp/node_modules/proc-log/package.json
+++ /dev/null
@@ -1,44 +0,0 @@
-{
- "name": "proc-log",
- "version": "3.0.0",
- "files": [
- "bin/",
- "lib/"
- ],
- "main": "lib/index.js",
- "description": "just emit 'log' events on the process object",
- "repository": {
- "type": "git",
- "url": "https://github.com/npm/proc-log.git"
- },
- "author": "GitHub Inc.",
- "license": "ISC",
- "scripts": {
- "test": "tap",
- "snap": "tap",
- "posttest": "npm run lint",
- "postsnap": "eslint index.js test/*.js --fix",
- "lint": "eslint \"**/*.js\"",
- "postlint": "template-oss-check",
- "lintfix": "npm run lint -- --fix",
- "template-oss-apply": "template-oss-apply --force"
- },
- "devDependencies": {
- "@npmcli/eslint-config": "^3.0.1",
- "@npmcli/template-oss": "4.5.1",
- "tap": "^16.0.1"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- },
- "templateOSS": {
- "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.5.1"
- },
- "tap": {
- "nyc-arg": [
- "--exclude",
- "tap-snapshots/**"
- ]
- }
-}
diff --git a/deps/npm/node_modules/node-gyp/package.json b/deps/npm/node_modules/node-gyp/package.json
index 95f012fa5da..8e2ea42510d 100644
--- a/deps/npm/node_modules/node-gyp/package.json
+++ b/deps/npm/node_modules/node-gyp/package.json
@@ -11,7 +11,7 @@
"bindings",
"gyp"
],
- "version": "10.1.0",
+ "version": "10.2.0",
"installVersion": 11,
"author": "Nathan Rajlich (http://tootallnate.net)",
"repository": {
@@ -28,9 +28,9 @@
"graceful-fs": "^4.2.6",
"make-fetch-happen": "^13.0.0",
"nopt": "^7.0.0",
- "proc-log": "^3.0.0",
+ "proc-log": "^4.1.0",
"semver": "^7.3.5",
- "tar": "^6.1.2",
+ "tar": "^6.2.1",
"which": "^4.0.0"
},
"engines": {
diff --git a/deps/npm/node_modules/npm-package-arg/lib/npa.js b/deps/npm/node_modules/npm-package-arg/lib/npa.js
index 6a3f07da929..8094b3e732c 100644
--- a/deps/npm/node_modules/npm-package-arg/lib/npa.js
+++ b/deps/npm/node_modules/npm-package-arg/lib/npa.js
@@ -380,6 +380,10 @@ function fromAlias (res, where) {
throw new Error('aliases only work for registry deps')
}
+ if (!subSpec.name) {
+ throw new Error('aliases must have a name')
+ }
+
res.subSpec = subSpec
res.registry = true
res.type = 'alias'
diff --git a/deps/npm/node_modules/npm-package-arg/package.json b/deps/npm/node_modules/npm-package-arg/package.json
index c4cee1f928e..d3f6fd7cf0a 100644
--- a/deps/npm/node_modules/npm-package-arg/package.json
+++ b/deps/npm/node_modules/npm-package-arg/package.json
@@ -1,6 +1,6 @@
{
"name": "npm-package-arg",
- "version": "11.0.2",
+ "version": "11.0.3",
"description": "Parse the things that can be arguments to `npm install`",
"main": "./lib/npa.js",
"directories": {
@@ -18,23 +18,24 @@
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.21.3",
+ "@npmcli/template-oss": "4.23.1",
"tap": "^16.0.1"
},
"scripts": {
"test": "tap",
"snap": "tap",
"npmclilint": "npmcli-lint",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
- "lintfix": "npm run lint -- --fix",
+ "lint": "npm run eslint",
+ "lintfix": "npm run eslint -- --fix",
"posttest": "npm run lint",
"postsnap": "npm run lintfix --",
"postlint": "template-oss-check",
- "template-oss-apply": "template-oss-apply --force"
+ "template-oss-apply": "template-oss-apply --force",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"repository": {
"type": "git",
- "url": "https://github.com/npm/npm-package-arg.git"
+ "url": "git+https://github.com/npm/npm-package-arg.git"
},
"author": "GitHub Inc.",
"license": "ISC",
@@ -54,7 +55,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.21.3",
+ "version": "4.23.1",
"publish": true
}
}
diff --git a/deps/npm/node_modules/postcss-selector-parser/API.md b/deps/npm/node_modules/postcss-selector-parser/API.md
index 64459e3376f..c8e55ee53f6 100644
--- a/deps/npm/node_modules/postcss-selector-parser/API.md
+++ b/deps/npm/node_modules/postcss-selector-parser/API.md
@@ -786,7 +786,7 @@ has a method `error(message, options)` that returns an
error object. This method should always be used to raise
errors relating to the syntax of selectors. The options
to this method are passed to postcss's error constructor
-([documentation](http://api.postcss.org/Container.html#error)).
+([documentation](http://postcss.org/api/#container-error)).
#### Async Error Example
diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/parser.js b/deps/npm/node_modules/postcss-selector-parser/dist/parser.js
index 144f91f7300..ada61582777 100644
--- a/deps/npm/node_modules/postcss-selector-parser/dist/parser.js
+++ b/deps/npm/node_modules/postcss-selector-parser/dist/parser.js
@@ -485,7 +485,7 @@ var Parser = /*#__PURE__*/function () {
}
// We need to decide between a space that's a descendant combinator and meaningless whitespace at the end of a selector.
var nextSigTokenPos = this.locateNextMeaningfulToken(this.position);
- if (nextSigTokenPos < 0 || this.tokens[nextSigTokenPos][_tokenize.FIELDS.TYPE] === tokens.comma) {
+ if (nextSigTokenPos < 0 || this.tokens[nextSigTokenPos][_tokenize.FIELDS.TYPE] === tokens.comma || this.tokens[nextSigTokenPos][_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) {
var nodes = this.parseWhitespaceEquivalentTokens(nextSigTokenPos);
if (nodes.length > 0) {
var last = this.current.last;
diff --git a/deps/npm/node_modules/postcss-selector-parser/package.json b/deps/npm/node_modules/postcss-selector-parser/package.json
index 0a1bc95700d..0b074d0fd4f 100644
--- a/deps/npm/node_modules/postcss-selector-parser/package.json
+++ b/deps/npm/node_modules/postcss-selector-parser/package.json
@@ -1,6 +1,6 @@
{
"name": "postcss-selector-parser",
- "version": "6.1.0",
+ "version": "6.1.2",
"devDependencies": {
"@babel/cli": "^7.11.6",
"@babel/core": "^7.11.6",
diff --git a/deps/npm/node_modules/semver/README.md b/deps/npm/node_modules/semver/README.md
index a896b79233a..b31570c9514 100644
--- a/deps/npm/node_modules/semver/README.md
+++ b/deps/npm/node_modules/semver/README.md
@@ -459,7 +459,7 @@ strings that they parse.
in descending order when passed to `Array.sort()`.
* `compareBuild(v1, v2)`: The same as `compare` but considers `build` when two versions
are equal. Sorts in ascending order if passed to `Array.sort()`.
-* `compareLoose(v1, v2)`: Short for ``compare(v1, v2, { loose: true })`.
+* `compareLoose(v1, v2)`: Short for `compare(v1, v2, { loose: true })`.
* `diff(v1, v2)`: Returns the difference between two versions by the release type
(`major`, `premajor`, `minor`, `preminor`, `patch`, `prepatch`, or `prerelease`),
or null if the versions are the same.
diff --git a/deps/npm/node_modules/semver/classes/range.js b/deps/npm/node_modules/semver/classes/range.js
index 117b45a2b8e..ceee23144d3 100644
--- a/deps/npm/node_modules/semver/classes/range.js
+++ b/deps/npm/node_modules/semver/classes/range.js
@@ -1,3 +1,5 @@
+const SPACE_CHARACTERS = /\s+/g
+
// hoisted class for cyclic dependency
class Range {
constructor (range, options) {
@@ -18,7 +20,7 @@ class Range {
// just put it in the set and return
this.raw = range.value
this.set = [[range]]
- this.format()
+ this.formatted = undefined
return this
}
@@ -29,10 +31,7 @@ class Range {
// First reduce all whitespace as much as possible so we do not have to rely
// on potentially slow regexes like \s*. This is then stored and used for
// future error messages as well.
- this.raw = range
- .trim()
- .split(/\s+/)
- .join(' ')
+ this.raw = range.trim().replace(SPACE_CHARACTERS, ' ')
// First, split on ||
this.set = this.raw
@@ -66,14 +65,29 @@ class Range {
}
}
- this.format()
+ this.formatted = undefined
+ }
+
+ get range () {
+ if (this.formatted === undefined) {
+ this.formatted = ''
+ for (let i = 0; i < this.set.length; i++) {
+ if (i > 0) {
+ this.formatted += '||'
+ }
+ const comps = this.set[i]
+ for (let k = 0; k < comps.length; k++) {
+ if (k > 0) {
+ this.formatted += ' '
+ }
+ this.formatted += comps[k].toString().trim()
+ }
+ }
+ }
+ return this.formatted
}
format () {
- this.range = this.set
- .map((comps) => comps.join(' ').trim())
- .join('||')
- .trim()
return this.range
}
diff --git a/deps/npm/node_modules/semver/package.json b/deps/npm/node_modules/semver/package.json
index cb8def45184..663d3701b7e 100644
--- a/deps/npm/node_modules/semver/package.json
+++ b/deps/npm/node_modules/semver/package.json
@@ -1,6 +1,6 @@
{
"name": "semver",
- "version": "7.6.2",
+ "version": "7.6.3",
"description": "The semantic version parser used by npm.",
"main": "index.js",
"scripts": {
diff --git a/deps/npm/package.json b/deps/npm/package.json
index 875dcef4da1..e7784119332 100644
--- a/deps/npm/package.json
+++ b/deps/npm/package.json
@@ -1,5 +1,5 @@
{
- "version": "10.8.2",
+ "version": "10.8.3",
"name": "npm",
"description": "a package manager for JavaScript",
"workspaces": [
@@ -63,13 +63,13 @@
"@sigstore/tuf": "^2.3.4",
"abbrev": "^2.0.0",
"archy": "~1.0.0",
- "cacache": "^18.0.3",
+ "cacache": "^18.0.4",
"chalk": "^5.3.0",
"ci-info": "^4.0.0",
"cli-columns": "^4.0.0",
"fastest-levenshtein": "^1.0.16",
"fs-minipass": "^3.0.3",
- "glob": "^10.5.0",
+ "glob": "^10.4.5",
"graceful-fs": "^4.2.11",
"hosted-git-info": "^7.0.2",
"ini": "^4.1.3",
@@ -78,7 +78,7 @@
"json-parse-even-better-errors": "^3.0.2",
"libnpmaccess": "^8.0.6",
"libnpmdiff": "^6.1.4",
- "libnpmexec": "^8.1.3",
+ "libnpmexec": "^8.1.4",
"libnpmfund": "^5.0.12",
"libnpmhook": "^10.0.5",
"libnpmorg": "^6.0.6",
@@ -92,12 +92,12 @@
"minipass": "^7.1.1",
"minipass-pipeline": "^1.2.4",
"ms": "^2.1.2",
- "node-gyp": "^10.1.0",
+ "node-gyp": "^10.2.0",
"nopt": "^7.2.1",
"normalize-package-data": "^6.0.2",
"npm-audit-report": "^5.0.0",
"npm-install-checks": "^6.3.0",
- "npm-package-arg": "^11.0.2",
+ "npm-package-arg": "^11.0.3",
"npm-pick-manifest": "^9.1.0",
"npm-profile": "^10.0.0",
"npm-registry-fetch": "^17.1.0",
@@ -108,7 +108,7 @@
"proc-log": "^4.2.0",
"qrcode-terminal": "^0.12.0",
"read": "^3.0.1",
- "semver": "^7.6.2",
+ "semver": "^7.6.3",
"spdx-expression-parse": "^4.0.0",
"ssri": "^10.0.6",
"supports-color": "^9.4.0",
@@ -196,7 +196,7 @@
"@npmcli/git": "^5.0.8",
"@npmcli/mock-globals": "^1.0.0",
"@npmcli/mock-registry": "^1.0.0",
- "@npmcli/template-oss": "4.22.0",
+ "@npmcli/template-oss": "4.23.3",
"@tufjs/repo-mock": "^2.0.0",
"ajv": "^8.12.0",
"ajv-formats": "^2.1.1",
@@ -222,13 +222,14 @@
"snap": "tap",
"prepack": "node . run build -w docs",
"posttest": "node . run lint",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
- "lintfix": "node . run lint -- --fix",
+ "lint": "node . run eslint",
+ "lintfix": "node . run eslint -- --fix",
"lint-all": "node . run lint -ws -iwr --if-present",
"resetdeps": "node scripts/resetdeps.js",
"rp-pull-request": "node scripts/update-authors.js",
"postlint": "template-oss-check",
- "template-oss-apply": "template-oss-apply --force"
+ "template-oss-apply": "template-oss-apply --force",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"tap": {
"test-env": [
@@ -253,7 +254,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.22.0",
+ "version": "4.23.3",
"content": "./scripts/template-oss/root.js"
},
"license": "Artistic-2.0",
diff --git a/deps/npm/tap-snapshots/test/lib/commands/publish.js.test.cjs b/deps/npm/tap-snapshots/test/lib/commands/publish.js.test.cjs
index bad7355fb90..78395c5cbca 100644
--- a/deps/npm/tap-snapshots/test/lib/commands/publish.js.test.cjs
+++ b/deps/npm/tap-snapshots/test/lib/commands/publish.js.test.cjs
@@ -393,6 +393,10 @@ exports[`test/lib/commands/publish.js TAP workspaces all workspaces - some marke
+ workspace-a@1.2.3-a
`
+exports[`test/lib/commands/publish.js TAP workspaces differet package spec > publish different package spec 1`] = `
++ pkg@1.2.3
+`
+
exports[`test/lib/commands/publish.js TAP workspaces json > all workspaces in json 1`] = `
{
"workspace-a": {
diff --git a/deps/npm/tap-snapshots/test/lib/docs.js.test.cjs b/deps/npm/tap-snapshots/test/lib/docs.js.test.cjs
index 4f74f88d2bf..68eee1542d9 100644
--- a/deps/npm/tap-snapshots/test/lib/docs.js.test.cjs
+++ b/deps/npm/tap-snapshots/test/lib/docs.js.test.cjs
@@ -3231,7 +3231,7 @@ exports[`test/lib/docs.js TAP usage init > must match snapshot 1`] = `
Create a package.json file
Usage:
-npm init (same as \`npx \`)
+npm init (same as \`npx create-\`)
npm init <@scope> (same as \`npx <@scope>/create\`)
Options:
@@ -3246,7 +3246,7 @@ aliases: create, innit
Run "npm help init" for more info
\`\`\`bash
-npm init (same as \`npx \`)
+npm init (same as \`npx create-\`)
npm init <@scope> (same as \`npx <@scope>/create\`)
aliases: create, innit
diff --git a/deps/npm/test/lib/cli/exit-handler.js b/deps/npm/test/lib/cli/exit-handler.js
index 90d130a3992..939c9617aff 100644
--- a/deps/npm/test/lib/cli/exit-handler.js
+++ b/deps/npm/test/lib/cli/exit-handler.js
@@ -194,15 +194,16 @@ t.test('exit handler never called', async t => {
const { logs, errors } = await mockExitHandler(t, {
config: { loglevel: 'silent' },
})
- process.emit('exit', 1)
+ process.emit('exit', 0)
t.strictSame(logs, [])
t.strictSame(errors(), [''], 'one empty string')
+ t.equal(process.exitCode, 1)
})
t.test('loglevel notice', async (t) => {
const { logs, errors } = await mockExitHandler(t)
- process.emit('exit', 1)
- t.equal(process.exitCode, 1)
+ process.emit('exit', 2)
+ t.equal(process.exitCode, 2)
t.match(logs.error, [
'Exit handler never called!',
/error with npm itself/,
diff --git a/deps/npm/test/lib/commands/init.js b/deps/npm/test/lib/commands/init.js
index f210c9bc2c9..1e453474292 100644
--- a/deps/npm/test/lib/commands/init.js
+++ b/deps/npm/test/lib/commands/init.js
@@ -1,5 +1,6 @@
const t = require('tap')
const fs = require('node:fs/promises')
+const nodePath = require('node:path')
const { resolve, basename } = require('node:path')
const _mockNpm = require('../../fixtures/mock-npm')
const { cleanTime } = require('../../fixtures/clean-snapshot')
@@ -428,4 +429,33 @@ t.test('workspaces', async t => {
t.equal(ws.version, '1.0.0')
t.equal(ws.license, 'ISC')
})
+ t.test('init pkg - installed workspace package', async t => {
+ const { npm } = await mockNpm(t, {
+ prefixDir: {
+ 'package.json': JSON.stringify({
+ name: 'init-ws-test',
+ dependencies: {
+ '@npmcli/create': '1.0.0',
+ },
+ workspaces: ['test/workspace-init-a'],
+ }),
+ 'test/workspace-init-a': {
+ 'package.json': JSON.stringify({
+ version: '1.0.0',
+ name: '@npmcli/create',
+ bin: { 'init-create': 'index.js' },
+ }),
+ 'index.js': `#!/usr/bin/env node
+ require('fs').writeFileSync('npm-init-test-success', '')
+ console.log('init-create ran')`,
+ },
+ },
+ })
+ await npm.exec('install', []) // reify
+ npm.config.set('workspace', ['test/workspace-init-b'])
+ await npm.exec('init', ['@npmcli'])
+ const exists = await fs.stat(nodePath.join(
+ npm.prefix, 'test/workspace-init-b', 'npm-init-test-success'))
+ t.ok(exists.isFile(), 'bin ran, creating file inside workspace')
+ })
})
diff --git a/deps/npm/test/lib/commands/publish.js b/deps/npm/test/lib/commands/publish.js
index fa43994679b..4dea3e2fa06 100644
--- a/deps/npm/test/lib/commands/publish.js
+++ b/deps/npm/test/lib/commands/publish.js
@@ -700,6 +700,48 @@ t.test('workspaces', t => {
await npm.exec('publish', [])
t.matchSnapshot(joinedOutput(), 'all workspaces in json')
})
+
+ t.test('differet package spec', async t => {
+ const testDir = {
+ 'package.json': JSON.stringify(
+ {
+ ...pkgJson,
+ workspaces: ['workspace-a'],
+ }, null, 2),
+ 'workspace-a': {
+ 'package.json': JSON.stringify({
+ name: 'workspace-a',
+ version: '1.2.3-a',
+ }),
+ },
+ 'dir/pkg': {
+ 'package.json': JSON.stringify({
+ name: 'pkg',
+ version: '1.2.3',
+ }),
+ },
+ }
+
+ const { npm, joinedOutput } = await loadMockNpm(t, {
+ config: {
+ ...auth,
+ },
+ prefixDir: testDir,
+ chdir: ({ prefix }) => path.resolve(prefix, './workspace-a'),
+ })
+ const registry = new MockRegistry({
+ tap: t,
+ registry: npm.config.get('registry'),
+ authorization: token,
+ })
+ registry.nock
+ .put('/pkg', body => {
+ return t.match(body, { name: 'pkg' })
+ }).reply(200, {})
+ await npm.exec('publish', ['../dir/pkg'])
+ t.matchSnapshot(joinedOutput(), 'publish different package spec')
+ })
+
t.end()
})
diff --git a/deps/npm/test/lib/utils/timers.js b/deps/npm/test/lib/utils/timers.js
index f13b5ac2ba7..891c6d3ac63 100644
--- a/deps/npm/test/lib/utils/timers.js
+++ b/deps/npm/test/lib/utils/timers.js
@@ -30,7 +30,7 @@ t.test('logs timing events', async (t) => {
timers.off()
time.end('foo')
t.equal(logs.timing.length, 1)
- t.match(logs.timing[0], /^bar Completed in [0-9]ms/)
+ t.match(logs.timing[0], /^bar Completed in [0-9]+m?s/)
})
t.test('finish unstarted timer', async (t) => {
From 466a9bce051115c7af9f15e6769096bdb6a5981e Mon Sep 17 00:00:00 2001
From: npm CLI robot
Date: Sat, 5 Oct 2024 06:54:06 -0700
Subject: [PATCH 2/9] deps: upgrade npm to 10.9.0
PR-URL: https://github.com/nodejs/node/pull/55255
Reviewed-By: Luigi Pinca
Reviewed-By: Rafael Gonzaga
Reviewed-By: Marco Ippolito
---
deps/npm/docs/content/commands/npm-init.md | 2 +-
deps/npm/docs/content/commands/npm-install.md | 4 -
deps/npm/docs/content/commands/npm-ls.md | 2 +-
deps/npm/docs/content/commands/npm.md | 2 +-
.../content/configuring-npm/package-json.md | 30 +
deps/npm/docs/output/commands/npm-access.html | 4 +-
.../npm/docs/output/commands/npm-adduser.html | 4 +-
deps/npm/docs/output/commands/npm-audit.html | 4 +-
deps/npm/docs/output/commands/npm-bugs.html | 4 +-
deps/npm/docs/output/commands/npm-cache.html | 4 +-
deps/npm/docs/output/commands/npm-ci.html | 4 +-
.../docs/output/commands/npm-completion.html | 4 +-
deps/npm/docs/output/commands/npm-config.html | 4 +-
deps/npm/docs/output/commands/npm-dedupe.html | 4 +-
.../docs/output/commands/npm-deprecate.html | 4 +-
deps/npm/docs/output/commands/npm-diff.html | 4 +-
.../docs/output/commands/npm-dist-tag.html | 4 +-
deps/npm/docs/output/commands/npm-docs.html | 4 +-
deps/npm/docs/output/commands/npm-doctor.html | 4 +-
deps/npm/docs/output/commands/npm-edit.html | 4 +-
deps/npm/docs/output/commands/npm-exec.html | 4 +-
.../npm/docs/output/commands/npm-explain.html | 4 +-
.../npm/docs/output/commands/npm-explore.html | 4 +-
.../docs/output/commands/npm-find-dupes.html | 4 +-
deps/npm/docs/output/commands/npm-fund.html | 4 +-
.../docs/output/commands/npm-help-search.html | 4 +-
deps/npm/docs/output/commands/npm-help.html | 4 +-
deps/npm/docs/output/commands/npm-hook.html | 4 +-
deps/npm/docs/output/commands/npm-init.html | 6 +-
.../output/commands/npm-install-ci-test.html | 4 +-
.../output/commands/npm-install-test.html | 4 +-
.../npm/docs/output/commands/npm-install.html | 7 +-
deps/npm/docs/output/commands/npm-link.html | 4 +-
deps/npm/docs/output/commands/npm-login.html | 4 +-
deps/npm/docs/output/commands/npm-logout.html | 4 +-
deps/npm/docs/output/commands/npm-ls.html | 6 +-
deps/npm/docs/output/commands/npm-org.html | 4 +-
.../docs/output/commands/npm-outdated.html | 4 +-
deps/npm/docs/output/commands/npm-owner.html | 4 +-
deps/npm/docs/output/commands/npm-pack.html | 4 +-
deps/npm/docs/output/commands/npm-ping.html | 4 +-
deps/npm/docs/output/commands/npm-pkg.html | 4 +-
deps/npm/docs/output/commands/npm-prefix.html | 4 +-
.../npm/docs/output/commands/npm-profile.html | 4 +-
deps/npm/docs/output/commands/npm-prune.html | 4 +-
.../npm/docs/output/commands/npm-publish.html | 4 +-
deps/npm/docs/output/commands/npm-query.html | 4 +-
.../npm/docs/output/commands/npm-rebuild.html | 4 +-
deps/npm/docs/output/commands/npm-repo.html | 4 +-
.../npm/docs/output/commands/npm-restart.html | 4 +-
deps/npm/docs/output/commands/npm-root.html | 4 +-
.../docs/output/commands/npm-run-script.html | 4 +-
deps/npm/docs/output/commands/npm-sbom.html | 4 +-
deps/npm/docs/output/commands/npm-search.html | 4 +-
.../docs/output/commands/npm-shrinkwrap.html | 4 +-
deps/npm/docs/output/commands/npm-star.html | 4 +-
deps/npm/docs/output/commands/npm-stars.html | 4 +-
deps/npm/docs/output/commands/npm-start.html | 4 +-
deps/npm/docs/output/commands/npm-stop.html | 4 +-
deps/npm/docs/output/commands/npm-team.html | 4 +-
deps/npm/docs/output/commands/npm-test.html | 4 +-
deps/npm/docs/output/commands/npm-token.html | 4 +-
.../docs/output/commands/npm-uninstall.html | 4 +-
.../docs/output/commands/npm-unpublish.html | 4 +-
deps/npm/docs/output/commands/npm-unstar.html | 4 +-
deps/npm/docs/output/commands/npm-update.html | 4 +-
.../npm/docs/output/commands/npm-version.html | 4 +-
deps/npm/docs/output/commands/npm-view.html | 4 +-
deps/npm/docs/output/commands/npm-whoami.html | 4 +-
deps/npm/docs/output/commands/npm.html | 6 +-
deps/npm/docs/output/commands/npx.html | 4 +-
.../docs/output/configuring-npm/folders.html | 4 +-
.../docs/output/configuring-npm/install.html | 4 +-
.../output/configuring-npm/npm-global.html | 4 +-
.../docs/output/configuring-npm/npm-json.html | 29 +-
.../configuring-npm/npm-shrinkwrap-json.html | 4 +-
.../docs/output/configuring-npm/npmrc.html | 4 +-
.../output/configuring-npm/package-json.html | 29 +-
.../configuring-npm/package-lock-json.html | 4 +-
deps/npm/docs/output/using-npm/config.html | 4 +-
.../using-npm/dependency-selectors.html | 4 +-
.../npm/docs/output/using-npm/developers.html | 4 +-
deps/npm/docs/output/using-npm/logging.html | 4 +-
deps/npm/docs/output/using-npm/orgs.html | 4 +-
.../docs/output/using-npm/package-spec.html | 4 +-
deps/npm/docs/output/using-npm/registry.html | 4 +-
deps/npm/docs/output/using-npm/removal.html | 4 +-
deps/npm/docs/output/using-npm/scope.html | 4 +-
deps/npm/docs/output/using-npm/scripts.html | 4 +-
.../npm/docs/output/using-npm/workspaces.html | 4 +-
deps/npm/lib/arborist-cmd.js | 1 +
deps/npm/lib/base-cmd.js | 61 +-
deps/npm/lib/commands/init.js | 2 +-
deps/npm/lib/commands/run-script.js | 1 +
deps/npm/lib/npm.js | 4 +
deps/npm/lib/utils/error-message.js | 7 +
deps/npm/lib/utils/ping.js | 2 +-
deps/npm/man/man1/npm-access.1 | 2 +-
deps/npm/man/man1/npm-adduser.1 | 2 +-
deps/npm/man/man1/npm-audit.1 | 2 +-
deps/npm/man/man1/npm-bugs.1 | 2 +-
deps/npm/man/man1/npm-cache.1 | 2 +-
deps/npm/man/man1/npm-ci.1 | 2 +-
deps/npm/man/man1/npm-completion.1 | 2 +-
deps/npm/man/man1/npm-config.1 | 2 +-
deps/npm/man/man1/npm-dedupe.1 | 2 +-
deps/npm/man/man1/npm-deprecate.1 | 2 +-
deps/npm/man/man1/npm-diff.1 | 2 +-
deps/npm/man/man1/npm-dist-tag.1 | 2 +-
deps/npm/man/man1/npm-docs.1 | 2 +-
deps/npm/man/man1/npm-doctor.1 | 2 +-
deps/npm/man/man1/npm-edit.1 | 2 +-
deps/npm/man/man1/npm-exec.1 | 2 +-
deps/npm/man/man1/npm-explain.1 | 2 +-
deps/npm/man/man1/npm-explore.1 | 2 +-
deps/npm/man/man1/npm-find-dupes.1 | 2 +-
deps/npm/man/man1/npm-fund.1 | 2 +-
deps/npm/man/man1/npm-help-search.1 | 2 +-
deps/npm/man/man1/npm-help.1 | 2 +-
deps/npm/man/man1/npm-hook.1 | 2 +-
deps/npm/man/man1/npm-init.1 | 4 +-
deps/npm/man/man1/npm-install-ci-test.1 | 2 +-
deps/npm/man/man1/npm-install-test.1 | 2 +-
deps/npm/man/man1/npm-install.1 | 4 +-
deps/npm/man/man1/npm-link.1 | 2 +-
deps/npm/man/man1/npm-login.1 | 2 +-
deps/npm/man/man1/npm-logout.1 | 2 +-
deps/npm/man/man1/npm-ls.1 | 4 +-
deps/npm/man/man1/npm-org.1 | 2 +-
deps/npm/man/man1/npm-outdated.1 | 2 +-
deps/npm/man/man1/npm-owner.1 | 2 +-
deps/npm/man/man1/npm-pack.1 | 2 +-
deps/npm/man/man1/npm-ping.1 | 2 +-
deps/npm/man/man1/npm-pkg.1 | 2 +-
deps/npm/man/man1/npm-prefix.1 | 2 +-
deps/npm/man/man1/npm-profile.1 | 2 +-
deps/npm/man/man1/npm-prune.1 | 2 +-
deps/npm/man/man1/npm-publish.1 | 2 +-
deps/npm/man/man1/npm-query.1 | 2 +-
deps/npm/man/man1/npm-rebuild.1 | 2 +-
deps/npm/man/man1/npm-repo.1 | 2 +-
deps/npm/man/man1/npm-restart.1 | 2 +-
deps/npm/man/man1/npm-root.1 | 2 +-
deps/npm/man/man1/npm-run-script.1 | 2 +-
deps/npm/man/man1/npm-sbom.1 | 2 +-
deps/npm/man/man1/npm-search.1 | 2 +-
deps/npm/man/man1/npm-shrinkwrap.1 | 2 +-
deps/npm/man/man1/npm-star.1 | 2 +-
deps/npm/man/man1/npm-stars.1 | 2 +-
deps/npm/man/man1/npm-start.1 | 2 +-
deps/npm/man/man1/npm-stop.1 | 2 +-
deps/npm/man/man1/npm-team.1 | 2 +-
deps/npm/man/man1/npm-test.1 | 2 +-
deps/npm/man/man1/npm-token.1 | 2 +-
deps/npm/man/man1/npm-uninstall.1 | 2 +-
deps/npm/man/man1/npm-unpublish.1 | 2 +-
deps/npm/man/man1/npm-unstar.1 | 2 +-
deps/npm/man/man1/npm-update.1 | 2 +-
deps/npm/man/man1/npm-version.1 | 2 +-
deps/npm/man/man1/npm-view.1 | 2 +-
deps/npm/man/man1/npm-whoami.1 | 2 +-
deps/npm/man/man1/npm.1 | 4 +-
deps/npm/man/man1/npx.1 | 2 +-
deps/npm/man/man5/folders.5 | 2 +-
deps/npm/man/man5/install.5 | 2 +-
deps/npm/man/man5/npm-global.5 | 2 +-
deps/npm/man/man5/npm-json.5 | 34 +-
deps/npm/man/man5/npm-shrinkwrap-json.5 | 2 +-
deps/npm/man/man5/npmrc.5 | 2 +-
deps/npm/man/man5/package-json.5 | 34 +-
deps/npm/man/man5/package-lock-json.5 | 2 +-
deps/npm/man/man7/config.7 | 2 +-
deps/npm/man/man7/dependency-selectors.7 | 2 +-
deps/npm/man/man7/developers.7 | 2 +-
deps/npm/man/man7/logging.7 | 2 +-
deps/npm/man/man7/orgs.7 | 2 +-
deps/npm/man/man7/package-spec.7 | 2 +-
deps/npm/man/man7/registry.7 | 2 +-
deps/npm/man/man7/removal.7 | 2 +-
deps/npm/man/man7/scope.7 | 2 +-
deps/npm/man/man7/scripts.7 | 2 +-
deps/npm/man/man7/workspaces.7 | 2 +-
.../node_modules/@isaacs/fs-minipass/LICENSE | 15 +
.../fs-minipass/dist/commonjs/index.js | 430 ++++++++
.../fs-minipass/dist/commonjs/package.json | 3 +
.../@isaacs/fs-minipass/dist/esm/index.js | 420 ++++++++
.../@isaacs/fs-minipass/dist/esm/package.json | 3 +
.../@isaacs/fs-minipass/package.json | 72 ++
.../node_modules/@npmcli/agent/package.json | 22 +-
.../arborist/lib/arborist/build-ideal-tree.js | 5 +-
.../@npmcli/arborist/package.json | 58 +-
.../node_modules/@npmcli/config/package.json | 16 +-
deps/npm/node_modules/@npmcli/fs/package.json | 18 +-
.../npm/node_modules/@npmcli/git/package.json | 27 +-
.../installed-package-contents/package.json | 23 +-
.../@npmcli/map-workspaces/lib/index.js | 34 +-
.../@npmcli/map-workspaces/package.json | 25 +-
.../@npmcli/metavuln-calculator/package.json | 24 +-
.../@npmcli/name-from-folder/package.json | 20 +-
.../npm/node_modules/@npmcli/node-gyp/LICENSE | 7 +
.../@npmcli/node-gyp/package.json | 20 +-
.../@npmcli/package-json/lib/normalize.js | 10 +-
.../@npmcli/package-json/package.json | 29 +-
.../@npmcli/promise-spawn/package.json | 19 +-
.../node_modules/@npmcli/query/package.json | 21 +-
.../node_modules/@npmcli/redact/package.json | 19 +-
.../@npmcli/run-script/package.json | 28 +-
.../node_modules/@npmcli/agent/lib/agents.js | 206 ++++
.../node_modules/@npmcli/agent/lib/dns.js | 53 +
.../node_modules/@npmcli/agent/lib/errors.js | 61 ++
.../node_modules/@npmcli/agent/lib/index.js | 56 ++
.../node_modules/@npmcli/agent/lib/options.js | 86 ++
.../node_modules/@npmcli/agent/lib/proxy.js | 88 ++
.../node_modules/@npmcli/agent/package.json | 60 ++
.../sign/node_modules/@npmcli/fs/LICENSE.md | 20 +
.../@npmcli/fs/lib/common/get-options.js | 20 +
.../@npmcli/fs/lib/common/node.js | 9 +
.../node_modules/@npmcli/fs/lib/cp/LICENSE | 15 +
.../node_modules/@npmcli/fs/lib/cp/errors.js | 129 +++
.../node_modules/@npmcli/fs/lib/cp/index.js | 22 +
.../@npmcli/fs/lib/cp/polyfill.js | 428 ++++++++
.../sign/node_modules/@npmcli/fs/lib/index.js | 13 +
.../node_modules/@npmcli/fs/lib/move-file.js | 78 ++
.../@npmcli/fs/lib/readdir-scoped.js | 20 +
.../@npmcli/fs/lib/with-temp-dir.js | 39 +
.../sign/node_modules/@npmcli/fs/package.json | 52 +
.../sign/node_modules/cacache/LICENSE.md | 16 +
.../node_modules/cacache/lib/content/path.js | 29 +
.../node_modules/cacache/lib/content/read.js | 165 ++++
.../node_modules/cacache/lib/content/rm.js | 18 +
.../node_modules/cacache/lib/content/write.js | 206 ++++
.../node_modules/cacache/lib/entry-index.js | 336 +++++++
.../sign/node_modules/cacache/lib/get.js | 170 ++++
.../sign/node_modules/cacache/lib/index.js | 42 +
.../node_modules/cacache/lib/memoization.js | 72 ++
.../sign/node_modules/cacache/lib/put.js | 80 ++
.../sign/node_modules/cacache/lib/rm.js | 31 +
.../node_modules/cacache/lib/util/glob.js | 7 +
.../cacache/lib/util/hash-to-segments.js | 7 +
.../sign/node_modules/cacache/lib/util/tmp.js | 26 +
.../sign/node_modules/cacache/lib/verify.js | 257 +++++
.../sign/node_modules/cacache/package.json | 82 ++
.../node_modules/make-fetch-happen/LICENSE | 16 +
.../make-fetch-happen/lib/cache/entry.js | 471 +++++++++
.../make-fetch-happen/lib/cache/errors.js | 11 +
.../make-fetch-happen/lib/cache/index.js | 49 +
.../make-fetch-happen/lib/cache/key.js | 17 +
.../make-fetch-happen/lib/cache/policy.js | 161 +++
.../make-fetch-happen/lib/fetch.js | 118 +++
.../make-fetch-happen/lib/index.js | 41 +
.../make-fetch-happen/lib/options.js | 54 +
.../make-fetch-happen/lib/pipeline.js | 41 +
.../make-fetch-happen/lib/remote.js | 131 +++
.../make-fetch-happen/package.json | 75 ++
.../sign/node_modules/minipass-fetch/LICENSE | 28 +
.../minipass-fetch/lib/abort-error.js | 17 +
.../node_modules/minipass-fetch/lib/blob.js | 97 ++
.../node_modules/minipass-fetch/lib/body.js | 350 +++++++
.../minipass-fetch/lib/fetch-error.js | 32 +
.../minipass-fetch/lib/headers.js | 267 +++++
.../node_modules/minipass-fetch/lib/index.js | 377 +++++++
.../minipass-fetch/lib/request.js | 282 ++++++
.../minipass-fetch/lib/response.js | 90 ++
.../node_modules/minipass-fetch/package.json | 69 ++
.../sign/node_modules/proc-log/LICENSE | 15 +
.../sign/node_modules/proc-log/lib/index.js | 153 +++
.../sign/node_modules/proc-log/package.json | 45 +
.../sign/node_modules/ssri/LICENSE.md | 16 +
.../sign/node_modules/ssri/lib/index.js | 580 +++++++++++
.../sign/node_modules/ssri/package.json | 65 ++
.../sign/node_modules/unique-filename/LICENSE | 5 +
.../node_modules/unique-filename/lib/index.js | 7 +
.../node_modules/unique-filename/package.json | 51 +
.../sign/node_modules/unique-slug/LICENSE | 15 +
.../node_modules/unique-slug/lib/index.js | 11 +
.../node_modules/unique-slug/package.json | 47 +
deps/npm/node_modules/abbrev/package.json | 20 +-
.../node_modules/bin-links/lib/link-gently.js | 16 +-
deps/npm/node_modules/bin-links/package.json | 26 +-
.../node_modules/cacache/lib/entry-index.js | 2 +-
deps/npm/node_modules/cacache/lib/verify.js | 3 +-
.../cacache/node_modules/chownr/LICENSE.md | 63 ++
.../chownr/dist/commonjs/index.js | 93 ++
.../chownr/dist/commonjs/package.json | 3 +
.../node_modules/chownr/dist/esm/index.js | 85 ++
.../node_modules/chownr/dist/esm/package.json | 3 +
.../cacache/node_modules/chownr/package.json | 69 ++
.../cacache/node_modules/minizlib/LICENSE | 26 +
.../minizlib/dist/commonjs/constants.js | 123 +++
.../minizlib/dist/commonjs/index.js | 352 +++++++
.../minizlib/dist/commonjs/package.json | 3 +
.../minizlib/dist/esm/constants.js | 117 +++
.../node_modules/minizlib/dist/esm/index.js | 333 +++++++
.../minizlib/dist/esm/package.json | 3 +
.../node_modules/minizlib/package.json | 81 ++
.../cacache/node_modules/mkdirp/LICENSE | 21 +
.../node_modules/mkdirp/dist/cjs/package.json | 91 ++
.../node_modules/mkdirp/dist/cjs/src/bin.d.ts | 3 +
.../mkdirp/dist/cjs/src/bin.d.ts.map | 1 +
.../node_modules/mkdirp/dist/cjs/src/bin.js | 80 ++
.../mkdirp/dist/cjs/src/bin.js.map | 1 +
.../mkdirp/dist/cjs/src/find-made.d.ts | 4 +
.../mkdirp/dist/cjs/src/find-made.d.ts.map | 1 +
.../mkdirp/dist/cjs/src/find-made.js | 35 +
.../mkdirp/dist/cjs/src/find-made.js.map | 1 +
.../mkdirp/dist/cjs/src/index.d.ts | 39 +
.../mkdirp/dist/cjs/src/index.d.ts.map | 1 +
.../node_modules/mkdirp/dist/cjs/src/index.js | 53 +
.../mkdirp/dist/cjs/src/index.js.map | 1 +
.../mkdirp/dist/cjs/src/mkdirp-manual.d.ts | 6 +
.../dist/cjs/src/mkdirp-manual.d.ts.map | 1 +
.../mkdirp/dist/cjs/src/mkdirp-manual.js | 79 ++
.../mkdirp/dist/cjs/src/mkdirp-manual.js.map | 1 +
.../mkdirp/dist/cjs/src/mkdirp-native.d.ts | 6 +
.../dist/cjs/src/mkdirp-native.d.ts.map | 1 +
.../mkdirp/dist/cjs/src/mkdirp-native.js | 50 +
.../mkdirp/dist/cjs/src/mkdirp-native.js.map | 1 +
.../mkdirp/dist/cjs/src/opts-arg.d.ts | 42 +
.../mkdirp/dist/cjs/src/opts-arg.d.ts.map | 1 +
.../mkdirp/dist/cjs/src/opts-arg.js | 38 +
.../mkdirp/dist/cjs/src/opts-arg.js.map | 1 +
.../mkdirp/dist/cjs/src/path-arg.d.ts | 2 +
.../mkdirp/dist/cjs/src/path-arg.d.ts.map | 1 +
.../mkdirp/dist/cjs/src/path-arg.js | 28 +
.../mkdirp/dist/cjs/src/path-arg.js.map | 1 +
.../mkdirp/dist/cjs/src/use-native.d.ts | 6 +
.../mkdirp/dist/cjs/src/use-native.d.ts.map | 1 +
.../mkdirp/dist/cjs/src/use-native.js | 17 +
.../mkdirp/dist/cjs/src/use-native.js.map | 1 +
.../mkdirp/dist/mjs/find-made.d.ts | 4 +
.../mkdirp/dist/mjs/find-made.d.ts.map | 1 +
.../node_modules/mkdirp/dist/mjs/find-made.js | 30 +
.../mkdirp/dist/mjs/find-made.js.map | 1 +
.../node_modules/mkdirp/dist/mjs/index.d.ts | 39 +
.../mkdirp/dist/mjs/index.d.ts.map | 1 +
.../node_modules/mkdirp/dist/mjs/index.js | 43 +
.../node_modules/mkdirp/dist/mjs/index.js.map | 1 +
.../mkdirp/dist/mjs/mkdirp-manual.d.ts | 6 +
.../mkdirp/dist/mjs/mkdirp-manual.d.ts.map | 1 +
.../mkdirp/dist/mjs/mkdirp-manual.js | 75 ++
.../mkdirp/dist/mjs/mkdirp-manual.js.map | 1 +
.../mkdirp/dist/mjs/mkdirp-native.d.ts | 6 +
.../mkdirp/dist/mjs/mkdirp-native.d.ts.map | 1 +
.../mkdirp/dist/mjs/mkdirp-native.js | 46 +
.../mkdirp/dist/mjs/mkdirp-native.js.map | 1 +
.../mkdirp/dist/mjs/opts-arg.d.ts | 42 +
.../mkdirp/dist/mjs/opts-arg.d.ts.map | 1 +
.../node_modules/mkdirp/dist/mjs/opts-arg.js | 34 +
.../mkdirp/dist/mjs/opts-arg.js.map | 1 +
.../node_modules/mkdirp/dist/mjs/package.json | 3 +
.../mkdirp/dist/mjs/path-arg.d.ts | 2 +
.../mkdirp/dist/mjs/path-arg.d.ts.map | 1 +
.../node_modules/mkdirp/dist/mjs/path-arg.js | 24 +
.../mkdirp/dist/mjs/path-arg.js.map | 1 +
.../mkdirp/dist/mjs/use-native.d.ts | 6 +
.../mkdirp/dist/mjs/use-native.d.ts.map | 1 +
.../mkdirp/dist/mjs/use-native.js | 14 +
.../mkdirp/dist/mjs/use-native.js.map | 1 +
.../cacache/node_modules/mkdirp/package.json | 91 ++
.../node_modules/mkdirp/readme.markdown | 281 ++++++
.../cacache/node_modules/p-map/index.js | 269 +++++
.../cacache/node_modules/p-map/license | 9 +
.../cacache/node_modules/p-map/package.json | 57 ++
.../cacache/node_modules/tar/LICENSE | 15 +
.../node_modules/tar/dist/commonjs/create.js | 83 ++
.../tar/dist/commonjs/cwd-error.js | 18 +
.../node_modules/tar/dist/commonjs/extract.js | 78 ++
.../tar/dist/commonjs/get-write-flag.js | 29 +
.../node_modules/tar/dist/commonjs/header.js | 306 ++++++
.../node_modules/tar/dist/commonjs/index.js | 54 +
.../tar/dist/commonjs/large-numbers.js | 99 ++
.../node_modules/tar/dist/commonjs/list.js | 136 +++
.../tar/dist/commonjs/make-command.js | 61 ++
.../node_modules/tar/dist/commonjs/mkdir.js | 209 ++++
.../tar/dist/commonjs/mode-fix.js | 29 +
.../tar/dist/commonjs/normalize-unicode.js | 17 +
.../dist/commonjs/normalize-windows-path.js | 12 +
.../node_modules/tar/dist/commonjs/options.js | 66 ++
.../node_modules/tar/dist/commonjs/pack.js | 477 +++++++++
.../tar/dist/commonjs/package.json | 3 +
.../node_modules/tar/dist/commonjs/parse.js | 599 ++++++++++++
.../tar/dist/commonjs/path-reservations.js | 170 ++++
.../node_modules/tar/dist/commonjs/pax.js | 158 +++
.../tar/dist/commonjs/read-entry.js | 140 +++
.../node_modules/tar/dist/commonjs/replace.js | 231 +++++
.../tar/dist/commonjs/strip-absolute-path.js | 29 +
.../dist/commonjs/strip-trailing-slashes.js | 18 +
.../tar/dist/commonjs/symlink-error.js | 19 +
.../node_modules/tar/dist/commonjs/types.js | 50 +
.../node_modules/tar/dist/commonjs/unpack.js | 919 ++++++++++++++++++
.../node_modules/tar/dist/commonjs/update.js | 33 +
.../tar/dist/commonjs/warn-method.js | 31 +
.../tar/dist/commonjs/winchars.js | 14 +
.../tar/dist/commonjs/write-entry.js | 689 +++++++++++++
.../node_modules/tar/dist/esm/create.js | 77 ++
.../node_modules/tar/dist/esm/cwd-error.js | 14 +
.../node_modules/tar/dist/esm/extract.js | 49 +
.../tar/dist/esm/get-write-flag.js | 23 +
.../node_modules/tar/dist/esm/header.js | 279 ++++++
.../node_modules/tar/dist/esm/index.js | 20 +
.../tar/dist/esm/large-numbers.js | 94 ++
.../cacache/node_modules/tar/dist/esm/list.js | 106 ++
.../node_modules/tar/dist/esm/make-command.js | 57 ++
.../node_modules/tar/dist/esm/mkdir.js | 201 ++++
.../node_modules/tar/dist/esm/mode-fix.js | 25 +
.../tar/dist/esm/normalize-unicode.js | 13 +
.../tar/dist/esm/normalize-windows-path.js | 9 +
.../node_modules/tar/dist/esm/options.js | 54 +
.../cacache/node_modules/tar/dist/esm/pack.js | 445 +++++++++
.../node_modules/tar/dist/esm/package.json | 3 +
.../node_modules/tar/dist/esm/parse.js | 595 ++++++++++++
.../tar/dist/esm/path-reservations.js | 166 ++++
.../cacache/node_modules/tar/dist/esm/pax.js | 154 +++
.../node_modules/tar/dist/esm/read-entry.js | 136 +++
.../node_modules/tar/dist/esm/replace.js | 225 +++++
.../tar/dist/esm/strip-absolute-path.js | 25 +
.../tar/dist/esm/strip-trailing-slashes.js | 14 +
.../tar/dist/esm/symlink-error.js | 15 +
.../node_modules/tar/dist/esm/types.js | 45 +
.../node_modules/tar/dist/esm/unpack.js | 888 +++++++++++++++++
.../node_modules/tar/dist/esm/update.js | 30 +
.../node_modules/tar/dist/esm/warn-method.js | 27 +
.../node_modules/tar/dist/esm/winchars.js | 9 +
.../node_modules/tar/dist/esm/write-entry.js | 657 +++++++++++++
.../cacache/node_modules/tar/package.json | 325 +++++++
.../cacache/node_modules/yallist/LICENSE.md | 63 ++
.../yallist/dist/commonjs/index.js | 384 ++++++++
.../yallist/dist/commonjs/package.json | 3 +
.../node_modules/yallist/dist/esm/index.js | 379 ++++++++
.../yallist/dist/esm/package.json | 3 +
.../cacache/node_modules/yallist/package.json | 68 ++
deps/npm/node_modules/cacache/package.json | 27 +-
deps/npm/node_modules/cmd-shim/package.json | 17 +-
.../node_modules/hosted-git-info/package.json | 17 +-
.../npm/node_modules/ignore-walk/package.json | 17 +-
deps/npm/node_modules/ini/package.json | 16 +-
.../init-package-json/package.json | 27 +-
.../package.json | 17 +-
.../node_modules/libnpmaccess/package.json | 10 +-
deps/npm/node_modules/libnpmdiff/package.json | 14 +-
deps/npm/node_modules/libnpmexec/package.json | 22 +-
deps/npm/node_modules/libnpmfund/package.json | 8 +-
deps/npm/node_modules/libnpmhook/package.json | 8 +-
deps/npm/node_modules/libnpmorg/package.json | 8 +-
deps/npm/node_modules/libnpmpack/package.json | 14 +-
.../node_modules/libnpmpublish/package.json | 16 +-
.../node_modules/libnpmsearch/package.json | 8 +-
deps/npm/node_modules/libnpmteam/package.json | 8 +-
.../node_modules/libnpmversion/package.json | 14 +-
.../make-fetch-happen/package.json | 29 +-
.../node_modules/minizlib/LICENSE | 26 +
.../minizlib/dist/commonjs/constants.js | 123 +++
.../minizlib/dist/commonjs/index.js | 352 +++++++
.../minizlib/dist/commonjs/package.json | 3 +
.../minizlib/dist/esm/constants.js | 117 +++
.../node_modules/minizlib/dist/esm/index.js | 333 +++++++
.../minizlib/dist/esm/package.json | 3 +
.../node_modules/minizlib/package.json | 81 ++
.../node_modules/minipass-fetch/package.json | 19 +-
.../npm/node_modules/mute-stream/package.json | 20 +-
.../node_modules/@npmcli/agent/lib/agents.js | 206 ++++
.../node_modules/@npmcli/agent/lib/dns.js | 53 +
.../node_modules/@npmcli/agent/lib/errors.js | 61 ++
.../node_modules/@npmcli/agent/lib/index.js | 56 ++
.../node_modules/@npmcli/agent/lib/options.js | 86 ++
.../node_modules/@npmcli/agent/lib/proxy.js | 88 ++
.../node_modules/@npmcli/agent/package.json | 60 ++
.../node_modules/@npmcli/fs/LICENSE.md | 20 +
.../@npmcli/fs/lib/common/get-options.js | 20 +
.../@npmcli/fs/lib/common/node.js | 9 +
.../node_modules/@npmcli/fs/lib/cp/LICENSE | 15 +
.../node_modules/@npmcli/fs/lib/cp/errors.js | 129 +++
.../node_modules/@npmcli/fs/lib/cp/index.js | 22 +
.../@npmcli/fs/lib/cp/polyfill.js | 428 ++++++++
.../node_modules/@npmcli/fs/lib/index.js | 13 +
.../node_modules/@npmcli/fs/lib/move-file.js | 78 ++
.../@npmcli/fs/lib/readdir-scoped.js | 20 +
.../@npmcli/fs/lib/with-temp-dir.js | 39 +
.../node_modules/@npmcli/fs/package.json | 52 +
.../node-gyp/node_modules/abbrev/LICENSE | 46 +
.../node-gyp/node_modules/abbrev/lib/index.js | 50 +
.../node-gyp/node_modules/abbrev/package.json | 43 +
.../node-gyp/node_modules/cacache/LICENSE.md | 16 +
.../node_modules/cacache/lib/content/path.js | 29 +
.../node_modules/cacache/lib/content/read.js | 165 ++++
.../node_modules/cacache/lib/content/rm.js | 18 +
.../node_modules/cacache/lib/content/write.js | 206 ++++
.../node_modules/cacache/lib/entry-index.js | 336 +++++++
.../node-gyp/node_modules/cacache/lib/get.js | 170 ++++
.../node_modules/cacache/lib/index.js | 42 +
.../node_modules/cacache/lib/memoization.js | 72 ++
.../node-gyp/node_modules/cacache/lib/put.js | 80 ++
.../node-gyp/node_modules/cacache/lib/rm.js | 31 +
.../node_modules/cacache/lib/util/glob.js | 7 +
.../cacache/lib/util/hash-to-segments.js | 7 +
.../node_modules/cacache/lib/util/tmp.js | 26 +
.../node_modules/cacache/lib/verify.js | 257 +++++
.../node_modules/cacache/package.json | 82 ++
.../node-gyp/node_modules/isexe/LICENSE | 15 +
.../node_modules/isexe/dist/cjs/index.js | 46 +
.../node_modules/isexe/dist/cjs/options.js | 3 +
.../node_modules/isexe/dist/cjs/package.json | 3 +
.../node_modules/isexe/dist/cjs/posix.js | 67 ++
.../node_modules/isexe/dist/cjs/win32.js | 62 ++
.../node_modules/isexe/dist/mjs/index.js | 16 +
.../node_modules/isexe/dist/mjs/options.js | 2 +
.../node_modules/isexe/dist/mjs/package.json | 3 +
.../node_modules/isexe/dist/mjs/posix.js | 62 ++
.../node_modules/isexe/dist/mjs/win32.js | 57 ++
.../node-gyp/node_modules/isexe/package.json | 96 ++
.../node_modules/make-fetch-happen/LICENSE | 16 +
.../make-fetch-happen/lib/cache/entry.js | 471 +++++++++
.../make-fetch-happen/lib/cache/errors.js | 11 +
.../make-fetch-happen/lib/cache/index.js | 49 +
.../make-fetch-happen/lib/cache/key.js | 17 +
.../make-fetch-happen/lib/cache/policy.js | 161 +++
.../make-fetch-happen/lib/fetch.js | 118 +++
.../make-fetch-happen/lib/index.js | 41 +
.../make-fetch-happen/lib/options.js | 54 +
.../make-fetch-happen/lib/pipeline.js | 41 +
.../make-fetch-happen/lib/remote.js | 131 +++
.../make-fetch-happen/package.json | 75 ++
.../node_modules/minipass-fetch/LICENSE | 28 +
.../minipass-fetch/lib/abort-error.js | 17 +
.../node_modules/minipass-fetch/lib/blob.js | 97 ++
.../node_modules/minipass-fetch/lib/body.js | 350 +++++++
.../minipass-fetch/lib/fetch-error.js | 32 +
.../minipass-fetch/lib/headers.js | 267 +++++
.../node_modules/minipass-fetch/lib/index.js | 377 +++++++
.../minipass-fetch/lib/request.js | 282 ++++++
.../minipass-fetch/lib/response.js | 90 ++
.../node_modules/minipass-fetch/package.json | 69 ++
.../node-gyp/node_modules/nopt/LICENSE | 15 +
.../node-gyp/node_modules/nopt/README.md | 213 ++++
.../node-gyp/node_modules/nopt/bin/nopt.js | 29 +
.../node-gyp/node_modules/nopt/lib/debug.js | 5 +
.../node_modules/nopt/lib/nopt-lib.js | 479 +++++++++
.../node-gyp/node_modules/nopt/lib/nopt.js | 30 +
.../node_modules/nopt/lib/type-defs.js | 91 ++
.../node-gyp/node_modules/nopt/package.json | 51 +
.../node-gyp/node_modules/proc-log/LICENSE | 15 +
.../node_modules/proc-log/lib/index.js | 153 +++
.../node_modules/proc-log/package.json | 45 +
.../node-gyp/node_modules/ssri/LICENSE.md | 16 +
.../node-gyp/node_modules/ssri/lib/index.js | 580 +++++++++++
.../node-gyp/node_modules/ssri/package.json | 65 ++
.../node_modules/unique-filename/LICENSE | 5 +
.../node_modules/unique-filename/lib/index.js | 7 +
.../node_modules/unique-filename/package.json | 51 +
.../node-gyp/node_modules/unique-slug/LICENSE | 15 +
.../node_modules/unique-slug/lib/index.js | 11 +
.../node_modules/unique-slug/package.json | 47 +
.../node-gyp/node_modules/which/LICENSE | 15 +
.../node-gyp/node_modules/which/README.md | 51 +
.../node-gyp/node_modules/which/bin/which.js | 52 +
.../node-gyp/node_modules/which/lib/index.js | 111 +++
.../node-gyp/node_modules/which/package.json | 57 ++
.../nopt/node_modules/abbrev/LICENSE | 46 +
.../nopt/node_modules/abbrev/lib/index.js | 50 +
.../nopt/node_modules/abbrev/package.json | 43 +
deps/npm/node_modules/nopt/package.json | 17 +-
.../normalize-package-data/package.json | 19 +-
.../npm-audit-report/package.json | 20 +-
.../npm/node_modules/npm-bundled/package.json | 19 +-
.../npm-install-checks/lib/current-env.js | 63 ++
.../npm-install-checks/lib/dev-engines.js | 145 +++
.../npm-install-checks/lib/index.js | 41 +-
.../npm-install-checks/package.json | 19 +-
.../npm-normalize-package-bin/package.json | 19 +-
.../node_modules/npm-package-arg/package.json | 16 +-
.../node_modules/npm-packlist/package.json | 20 +-
.../npm-pick-manifest/package.json | 23 +-
.../npm/node_modules/npm-profile/lib/index.js | 2 +-
.../npm/node_modules/npm-profile/package.json | 23 +-
.../node_modules/minizlib/LICENSE | 26 +
.../minizlib/dist/commonjs/constants.js | 123 +++
.../minizlib/dist/commonjs/index.js | 352 +++++++
.../minizlib/dist/commonjs/package.json | 3 +
.../minizlib/dist/esm/constants.js | 117 +++
.../node_modules/minizlib/dist/esm/index.js | 333 +++++++
.../minizlib/dist/esm/package.json | 3 +
.../node_modules/minizlib/package.json | 81 ++
.../npm-registry-fetch/package.json | 30 +-
.../npm-user-validate/package.json | 17 +-
deps/npm/node_modules/pacote/package.json | 43 +-
.../parse-conflict-json/package.json | 22 +-
deps/npm/node_modules/proc-log/package.json | 19 +-
deps/npm/node_modules/proggy/package.json | 22 +-
deps/npm/node_modules/promzard/package.json | 19 +-
.../node_modules/read-cmd-shim/package.json | 23 +-
.../read-package-json-fast/package.json | 24 +-
.../node_modules/read/dist/commonjs/read.js | 3 +-
deps/npm/node_modules/read/package.json | 33 +-
deps/npm/node_modules/rimraf/LICENSE | 15 +
deps/npm/node_modules/rimraf/README.md | 220 +++++
.../rimraf/dist/commonjs/default-tmp.d.ts | 3 +
.../rimraf/dist/commonjs/default-tmp.d.ts.map | 1 +
.../rimraf/dist/commonjs/default-tmp.js | 61 ++
.../rimraf/dist/commonjs/default-tmp.js.map | 1 +
.../rimraf/dist/commonjs/fix-eperm.d.ts | 3 +
.../rimraf/dist/commonjs/fix-eperm.d.ts.map | 1 +
.../rimraf/dist/commonjs/fix-eperm.js | 58 ++
.../rimraf/dist/commonjs/fix-eperm.js.map | 1 +
.../node_modules/rimraf/dist/commonjs/fs.d.ts | 17 +
.../rimraf/dist/commonjs/fs.d.ts.map | 1 +
.../node_modules/rimraf/dist/commonjs/fs.js | 46 +
.../rimraf/dist/commonjs/fs.js.map | 1 +
.../rimraf/dist/commonjs/ignore-enoent.d.ts | 3 +
.../dist/commonjs/ignore-enoent.d.ts.map | 1 +
.../rimraf/dist/commonjs/ignore-enoent.js | 21 +
.../rimraf/dist/commonjs/ignore-enoent.js.map | 1 +
.../rimraf/dist/commonjs/index.d.ts | 50 +
.../rimraf/dist/commonjs/index.d.ts.map | 1 +
.../rimraf/dist/commonjs/index.js | 78 ++
.../rimraf/dist/commonjs/index.js.map | 1 +
.../rimraf/dist/commonjs/opt-arg.d.ts | 34 +
.../rimraf/dist/commonjs/opt-arg.d.ts.map | 1 +
.../rimraf/dist/commonjs/opt-arg.js | 53 +
.../rimraf/dist/commonjs/opt-arg.js.map | 1 +
.../rimraf/dist/commonjs/package.json | 3 +
.../rimraf/dist/commonjs/path-arg.d.ts | 4 +
.../rimraf/dist/commonjs/path-arg.d.ts.map | 1 +
.../rimraf/dist/commonjs/path-arg.js | 52 +
.../rimraf/dist/commonjs/path-arg.js.map | 1 +
.../rimraf/dist/commonjs/platform.d.ts | 3 +
.../rimraf/dist/commonjs/platform.d.ts.map | 1 +
.../rimraf/dist/commonjs/platform.js | 4 +
.../rimraf/dist/commonjs/platform.js.map | 1 +
.../dist/commonjs/readdir-or-error.d.ts | 3 +
.../dist/commonjs/readdir-or-error.d.ts.map | 1 +
.../rimraf/dist/commonjs/readdir-or-error.js | 19 +
.../dist/commonjs/readdir-or-error.js.map | 1 +
.../rimraf/dist/commonjs/retry-busy.d.ts | 8 +
.../rimraf/dist/commonjs/retry-busy.d.ts.map | 1 +
.../rimraf/dist/commonjs/retry-busy.js | 68 ++
.../rimraf/dist/commonjs/retry-busy.js.map | 1 +
.../rimraf/dist/commonjs/rimraf-manual.d.ts | 3 +
.../dist/commonjs/rimraf-manual.d.ts.map | 1 +
.../rimraf/dist/commonjs/rimraf-manual.js | 12 +
.../rimraf/dist/commonjs/rimraf-manual.js.map | 1 +
.../dist/commonjs/rimraf-move-remove.d.ts | 4 +
.../dist/commonjs/rimraf-move-remove.d.ts.map | 1 +
.../dist/commonjs/rimraf-move-remove.js | 192 ++++
.../dist/commonjs/rimraf-move-remove.js.map | 1 +
.../rimraf/dist/commonjs/rimraf-native.d.ts | 4 +
.../dist/commonjs/rimraf-native.d.ts.map | 1 +
.../rimraf/dist/commonjs/rimraf-native.js | 24 +
.../rimraf/dist/commonjs/rimraf-native.js.map | 1 +
.../rimraf/dist/commonjs/rimraf-posix.d.ts | 4 +
.../dist/commonjs/rimraf-posix.d.ts.map | 1 +
.../rimraf/dist/commonjs/rimraf-posix.js | 123 +++
.../rimraf/dist/commonjs/rimraf-posix.js.map | 1 +
.../rimraf/dist/commonjs/rimraf-windows.d.ts | 4 +
.../dist/commonjs/rimraf-windows.d.ts.map | 1 +
.../rimraf/dist/commonjs/rimraf-windows.js | 182 ++++
.../dist/commonjs/rimraf-windows.js.map | 1 +
.../rimraf/dist/commonjs/use-native.d.ts | 4 +
.../rimraf/dist/commonjs/use-native.d.ts.map | 1 +
.../rimraf/dist/commonjs/use-native.js | 22 +
.../rimraf/dist/commonjs/use-native.js.map | 1 +
.../node_modules/rimraf/dist/esm/bin.d.mts | 8 +
.../rimraf/dist/esm/bin.d.mts.map | 1 +
deps/npm/node_modules/rimraf/dist/esm/bin.mjs | 256 +++++
.../node_modules/rimraf/dist/esm/bin.mjs.map | 1 +
.../rimraf/dist/esm/default-tmp.d.ts | 3 +
.../rimraf/dist/esm/default-tmp.d.ts.map | 1 +
.../rimraf/dist/esm/default-tmp.js | 55 ++
.../rimraf/dist/esm/default-tmp.js.map | 1 +
.../rimraf/dist/esm/fix-eperm.d.ts | 3 +
.../rimraf/dist/esm/fix-eperm.d.ts.map | 1 +
.../node_modules/rimraf/dist/esm/fix-eperm.js | 53 +
.../rimraf/dist/esm/fix-eperm.js.map | 1 +
deps/npm/node_modules/rimraf/dist/esm/fs.d.ts | 17 +
.../node_modules/rimraf/dist/esm/fs.d.ts.map | 1 +
deps/npm/node_modules/rimraf/dist/esm/fs.js | 31 +
.../node_modules/rimraf/dist/esm/fs.js.map | 1 +
.../rimraf/dist/esm/ignore-enoent.d.ts | 3 +
.../rimraf/dist/esm/ignore-enoent.d.ts.map | 1 +
.../rimraf/dist/esm/ignore-enoent.js | 16 +
.../rimraf/dist/esm/ignore-enoent.js.map | 1 +
.../node_modules/rimraf/dist/esm/index.d.ts | 50 +
.../rimraf/dist/esm/index.d.ts.map | 1 +
.../npm/node_modules/rimraf/dist/esm/index.js | 70 ++
.../node_modules/rimraf/dist/esm/index.js.map | 1 +
.../node_modules/rimraf/dist/esm/opt-arg.d.ts | 34 +
.../rimraf/dist/esm/opt-arg.d.ts.map | 1 +
.../node_modules/rimraf/dist/esm/opt-arg.js | 46 +
.../rimraf/dist/esm/opt-arg.js.map | 1 +
.../node_modules/rimraf/dist/esm/package.json | 3 +
.../rimraf/dist/esm/path-arg.d.ts | 4 +
.../rimraf/dist/esm/path-arg.d.ts.map | 1 +
.../node_modules/rimraf/dist/esm/path-arg.js | 47 +
.../rimraf/dist/esm/path-arg.js.map | 1 +
.../rimraf/dist/esm/platform.d.ts | 3 +
.../rimraf/dist/esm/platform.d.ts.map | 1 +
.../node_modules/rimraf/dist/esm/platform.js | 2 +
.../rimraf/dist/esm/platform.js.map | 1 +
.../rimraf/dist/esm/readdir-or-error.d.ts | 3 +
.../rimraf/dist/esm/readdir-or-error.d.ts.map | 1 +
.../rimraf/dist/esm/readdir-or-error.js | 14 +
.../rimraf/dist/esm/readdir-or-error.js.map | 1 +
.../rimraf/dist/esm/retry-busy.d.ts | 8 +
.../rimraf/dist/esm/retry-busy.d.ts.map | 1 +
.../rimraf/dist/esm/retry-busy.js | 63 ++
.../rimraf/dist/esm/retry-busy.js.map | 1 +
.../rimraf/dist/esm/rimraf-manual.d.ts | 3 +
.../rimraf/dist/esm/rimraf-manual.d.ts.map | 1 +
.../rimraf/dist/esm/rimraf-manual.js | 6 +
.../rimraf/dist/esm/rimraf-manual.js.map | 1 +
.../rimraf/dist/esm/rimraf-move-remove.d.ts | 4 +
.../dist/esm/rimraf-move-remove.d.ts.map | 1 +
.../rimraf/dist/esm/rimraf-move-remove.js | 187 ++++
.../rimraf/dist/esm/rimraf-move-remove.js.map | 1 +
.../rimraf/dist/esm/rimraf-native.d.ts | 4 +
.../rimraf/dist/esm/rimraf-native.d.ts.map | 1 +
.../rimraf/dist/esm/rimraf-native.js | 19 +
.../rimraf/dist/esm/rimraf-native.js.map | 1 +
.../rimraf/dist/esm/rimraf-posix.d.ts | 4 +
.../rimraf/dist/esm/rimraf-posix.d.ts.map | 1 +
.../rimraf/dist/esm/rimraf-posix.js | 118 +++
.../rimraf/dist/esm/rimraf-posix.js.map | 1 +
.../rimraf/dist/esm/rimraf-windows.d.ts | 4 +
.../rimraf/dist/esm/rimraf-windows.d.ts.map | 1 +
.../rimraf/dist/esm/rimraf-windows.js | 177 ++++
.../rimraf/dist/esm/rimraf-windows.js.map | 1 +
.../rimraf/dist/esm/use-native.d.ts | 4 +
.../rimraf/dist/esm/use-native.d.ts.map | 1 +
.../rimraf/dist/esm/use-native.js | 16 +
.../rimraf/dist/esm/use-native.js.map | 1 +
deps/npm/node_modules/rimraf/package.json | 89 ++
deps/npm/node_modules/ssri/package.json | 17 +-
.../node_modules/@npmcli/agent/lib/agents.js | 206 ++++
.../node_modules/@npmcli/agent/lib/dns.js | 53 +
.../node_modules/@npmcli/agent/lib/errors.js | 61 ++
.../node_modules/@npmcli/agent/lib/index.js | 56 ++
.../node_modules/@npmcli/agent/lib/options.js | 86 ++
.../node_modules/@npmcli/agent/lib/proxy.js | 88 ++
.../node_modules/@npmcli/agent/package.json | 60 ++
.../tuf-js/node_modules/@npmcli/fs/LICENSE.md | 20 +
.../@npmcli/fs/lib/common/get-options.js | 20 +
.../@npmcli/fs/lib/common/node.js | 9 +
.../node_modules/@npmcli/fs/lib/cp/LICENSE | 15 +
.../node_modules/@npmcli/fs/lib/cp/errors.js | 129 +++
.../node_modules/@npmcli/fs/lib/cp/index.js | 22 +
.../@npmcli/fs/lib/cp/polyfill.js | 428 ++++++++
.../node_modules/@npmcli/fs/lib/index.js | 13 +
.../node_modules/@npmcli/fs/lib/move-file.js | 78 ++
.../@npmcli/fs/lib/readdir-scoped.js | 20 +
.../@npmcli/fs/lib/with-temp-dir.js | 39 +
.../node_modules/@npmcli/fs/package.json | 52 +
.../tuf-js/node_modules/cacache/LICENSE.md | 16 +
.../node_modules/cacache/lib/content/path.js | 29 +
.../node_modules/cacache/lib/content/read.js | 165 ++++
.../node_modules/cacache/lib/content/rm.js | 18 +
.../node_modules/cacache/lib/content/write.js | 206 ++++
.../node_modules/cacache/lib/entry-index.js | 336 +++++++
.../tuf-js/node_modules/cacache/lib/get.js | 170 ++++
.../tuf-js/node_modules/cacache/lib/index.js | 42 +
.../node_modules/cacache/lib/memoization.js | 72 ++
.../tuf-js/node_modules/cacache/lib/put.js | 80 ++
.../tuf-js/node_modules/cacache/lib/rm.js | 31 +
.../node_modules/cacache/lib/util/glob.js | 7 +
.../cacache/lib/util/hash-to-segments.js | 7 +
.../node_modules/cacache/lib/util/tmp.js | 26 +
.../tuf-js/node_modules/cacache/lib/verify.js | 257 +++++
.../tuf-js/node_modules/cacache/package.json | 82 ++
.../node_modules/make-fetch-happen/LICENSE | 16 +
.../make-fetch-happen/lib/cache/entry.js | 471 +++++++++
.../make-fetch-happen/lib/cache/errors.js | 11 +
.../make-fetch-happen/lib/cache/index.js | 49 +
.../make-fetch-happen/lib/cache/key.js | 17 +
.../make-fetch-happen/lib/cache/policy.js | 161 +++
.../make-fetch-happen/lib/fetch.js | 118 +++
.../make-fetch-happen/lib/index.js | 41 +
.../make-fetch-happen/lib/options.js | 54 +
.../make-fetch-happen/lib/pipeline.js | 41 +
.../make-fetch-happen/lib/remote.js | 131 +++
.../make-fetch-happen/package.json | 75 ++
.../node_modules/minipass-fetch/LICENSE | 28 +
.../minipass-fetch/lib/abort-error.js | 17 +
.../node_modules/minipass-fetch/lib/blob.js | 97 ++
.../node_modules/minipass-fetch/lib/body.js | 350 +++++++
.../minipass-fetch/lib/fetch-error.js | 32 +
.../minipass-fetch/lib/headers.js | 267 +++++
.../node_modules/minipass-fetch/lib/index.js | 377 +++++++
.../minipass-fetch/lib/request.js | 282 ++++++
.../minipass-fetch/lib/response.js | 90 ++
.../node_modules/minipass-fetch/package.json | 69 ++
.../tuf-js/node_modules/proc-log/LICENSE | 15 +
.../tuf-js/node_modules/proc-log/lib/index.js | 153 +++
.../tuf-js/node_modules/proc-log/package.json | 45 +
.../tuf-js/node_modules/ssri/LICENSE.md | 16 +
.../tuf-js/node_modules/ssri/lib/index.js | 580 +++++++++++
.../tuf-js/node_modules/ssri/package.json | 65 ++
.../node_modules/unique-filename/LICENSE | 5 +
.../node_modules/unique-filename/lib/index.js | 7 +
.../node_modules/unique-filename/package.json | 51 +
.../tuf-js/node_modules/unique-slug/LICENSE | 15 +
.../node_modules/unique-slug/lib/index.js | 11 +
.../node_modules/unique-slug/package.json | 47 +
.../node_modules/unique-filename/package.json | 22 +-
.../npm/node_modules/unique-slug/package.json | 20 +-
.../validate-npm-package-name/package.json | 17 +-
deps/npm/node_modules/which/package.json | 25 +-
.../write-file-atomic/package.json | 19 +-
deps/npm/package.json | 94 +-
.../test/lib/commands/doctor.js.test.cjs | 8 +-
.../test/lib/commands/install.js.test.cjs | 309 ++++++
deps/npm/test/fixtures/clean-snapshot.js | 6 +
deps/npm/test/lib/commands/doctor.js | 48 +-
deps/npm/test/lib/commands/install.js | 317 ++++++
deps/npm/test/lib/commands/ping.js | 18 +
deps/npm/test/lib/npm.js | 2 +-
813 files changed, 43927 insertions(+), 1054 deletions(-)
create mode 100644 deps/npm/node_modules/@isaacs/fs-minipass/LICENSE
create mode 100644 deps/npm/node_modules/@isaacs/fs-minipass/dist/commonjs/index.js
create mode 100644 deps/npm/node_modules/@isaacs/fs-minipass/dist/commonjs/package.json
create mode 100644 deps/npm/node_modules/@isaacs/fs-minipass/dist/esm/index.js
create mode 100644 deps/npm/node_modules/@isaacs/fs-minipass/dist/esm/package.json
create mode 100644 deps/npm/node_modules/@isaacs/fs-minipass/package.json
create mode 100644 deps/npm/node_modules/@npmcli/node-gyp/LICENSE
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/agent/lib/agents.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/agent/lib/dns.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/agent/lib/errors.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/agent/lib/index.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/agent/lib/options.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/agent/lib/proxy.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/agent/package.json
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/LICENSE.md
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/common/get-options.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/common/node.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/cp/LICENSE
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/cp/errors.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/cp/index.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/cp/polyfill.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/index.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/move-file.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/readdir-scoped.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/with-temp-dir.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/package.json
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/cacache/LICENSE.md
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/content/path.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/content/read.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/content/rm.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/content/write.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/entry-index.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/get.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/index.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/memoization.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/put.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/rm.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/util/glob.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/util/hash-to-segments.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/util/tmp.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/verify.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/cacache/package.json
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/LICENSE
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/cache/entry.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/cache/errors.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/cache/index.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/cache/key.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/cache/policy.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/fetch.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/index.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/options.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/pipeline.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/remote.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/package.json
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/LICENSE
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/lib/abort-error.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/lib/blob.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/lib/body.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/lib/fetch-error.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/lib/headers.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/lib/index.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/lib/request.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/lib/response.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/package.json
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/proc-log/LICENSE
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/proc-log/lib/index.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/proc-log/package.json
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/ssri/LICENSE.md
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/ssri/lib/index.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/ssri/package.json
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/unique-filename/LICENSE
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/unique-filename/lib/index.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/unique-filename/package.json
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/unique-slug/LICENSE
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/unique-slug/lib/index.js
create mode 100644 deps/npm/node_modules/@sigstore/sign/node_modules/unique-slug/package.json
create mode 100644 deps/npm/node_modules/cacache/node_modules/chownr/LICENSE.md
create mode 100644 deps/npm/node_modules/cacache/node_modules/chownr/dist/commonjs/index.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/chownr/dist/commonjs/package.json
create mode 100644 deps/npm/node_modules/cacache/node_modules/chownr/dist/esm/index.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/chownr/dist/esm/package.json
create mode 100644 deps/npm/node_modules/cacache/node_modules/chownr/package.json
create mode 100644 deps/npm/node_modules/cacache/node_modules/minizlib/LICENSE
create mode 100644 deps/npm/node_modules/cacache/node_modules/minizlib/dist/commonjs/constants.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/minizlib/dist/commonjs/index.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/minizlib/dist/commonjs/package.json
create mode 100644 deps/npm/node_modules/cacache/node_modules/minizlib/dist/esm/constants.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/minizlib/dist/esm/index.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/minizlib/dist/esm/package.json
create mode 100644 deps/npm/node_modules/cacache/node_modules/minizlib/package.json
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/LICENSE
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/package.json
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/bin.d.ts
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/bin.d.ts.map
create mode 100755 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/bin.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/bin.js.map
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/find-made.d.ts
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/find-made.d.ts.map
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/find-made.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/find-made.js.map
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/index.d.ts
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/index.d.ts.map
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/index.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/index.js.map
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-manual.d.ts
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-manual.d.ts.map
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-manual.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-manual.js.map
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-native.d.ts
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-native.d.ts.map
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-native.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-native.js.map
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/opts-arg.d.ts
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/opts-arg.d.ts.map
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/opts-arg.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/opts-arg.js.map
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/path-arg.d.ts
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/path-arg.d.ts.map
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/path-arg.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/path-arg.js.map
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/use-native.d.ts
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/use-native.d.ts.map
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/use-native.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/use-native.js.map
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/find-made.d.ts
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/find-made.d.ts.map
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/find-made.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/find-made.js.map
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/index.d.ts
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/index.d.ts.map
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/index.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/index.js.map
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-manual.d.ts
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-manual.d.ts.map
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-manual.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-manual.js.map
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-native.d.ts
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-native.d.ts.map
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-native.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-native.js.map
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/opts-arg.d.ts
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/opts-arg.d.ts.map
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/opts-arg.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/opts-arg.js.map
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/package.json
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/path-arg.d.ts
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/path-arg.d.ts.map
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/path-arg.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/path-arg.js.map
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/use-native.d.ts
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/use-native.d.ts.map
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/use-native.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/use-native.js.map
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/package.json
create mode 100644 deps/npm/node_modules/cacache/node_modules/mkdirp/readme.markdown
create mode 100644 deps/npm/node_modules/cacache/node_modules/p-map/index.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/p-map/license
create mode 100644 deps/npm/node_modules/cacache/node_modules/p-map/package.json
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/LICENSE
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/create.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/cwd-error.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/extract.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/get-write-flag.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/header.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/index.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/large-numbers.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/list.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/make-command.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/mkdir.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/mode-fix.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/normalize-unicode.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/normalize-windows-path.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/options.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/pack.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/package.json
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/parse.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/path-reservations.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/pax.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/read-entry.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/replace.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/strip-absolute-path.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/strip-trailing-slashes.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/symlink-error.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/types.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/unpack.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/update.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/warn-method.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/winchars.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/write-entry.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/esm/create.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/esm/cwd-error.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/esm/extract.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/esm/get-write-flag.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/esm/header.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/esm/index.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/esm/large-numbers.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/esm/list.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/esm/make-command.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/esm/mkdir.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/esm/mode-fix.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/esm/normalize-unicode.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/esm/normalize-windows-path.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/esm/options.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/esm/pack.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/esm/package.json
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/esm/parse.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/esm/path-reservations.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/esm/pax.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/esm/read-entry.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/esm/replace.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/esm/strip-absolute-path.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/esm/strip-trailing-slashes.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/esm/symlink-error.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/esm/types.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/esm/unpack.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/esm/update.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/esm/warn-method.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/esm/winchars.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/dist/esm/write-entry.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/tar/package.json
create mode 100644 deps/npm/node_modules/cacache/node_modules/yallist/LICENSE.md
create mode 100644 deps/npm/node_modules/cacache/node_modules/yallist/dist/commonjs/index.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/yallist/dist/commonjs/package.json
create mode 100644 deps/npm/node_modules/cacache/node_modules/yallist/dist/esm/index.js
create mode 100644 deps/npm/node_modules/cacache/node_modules/yallist/dist/esm/package.json
create mode 100644 deps/npm/node_modules/cacache/node_modules/yallist/package.json
create mode 100644 deps/npm/node_modules/minipass-fetch/node_modules/minizlib/LICENSE
create mode 100644 deps/npm/node_modules/minipass-fetch/node_modules/minizlib/dist/commonjs/constants.js
create mode 100644 deps/npm/node_modules/minipass-fetch/node_modules/minizlib/dist/commonjs/index.js
create mode 100644 deps/npm/node_modules/minipass-fetch/node_modules/minizlib/dist/commonjs/package.json
create mode 100644 deps/npm/node_modules/minipass-fetch/node_modules/minizlib/dist/esm/constants.js
create mode 100644 deps/npm/node_modules/minipass-fetch/node_modules/minizlib/dist/esm/index.js
create mode 100644 deps/npm/node_modules/minipass-fetch/node_modules/minizlib/dist/esm/package.json
create mode 100644 deps/npm/node_modules/minipass-fetch/node_modules/minizlib/package.json
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/@npmcli/agent/lib/agents.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/@npmcli/agent/lib/dns.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/@npmcli/agent/lib/errors.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/@npmcli/agent/lib/index.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/@npmcli/agent/lib/options.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/@npmcli/agent/lib/proxy.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/@npmcli/agent/package.json
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/LICENSE.md
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/common/get-options.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/common/node.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/cp/LICENSE
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/cp/errors.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/cp/index.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/cp/polyfill.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/index.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/move-file.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/readdir-scoped.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/with-temp-dir.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/package.json
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/abbrev/LICENSE
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/abbrev/lib/index.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/abbrev/package.json
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/cacache/LICENSE.md
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/cacache/lib/content/path.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/cacache/lib/content/read.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/cacache/lib/content/rm.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/cacache/lib/content/write.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/cacache/lib/entry-index.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/cacache/lib/get.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/cacache/lib/index.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/cacache/lib/memoization.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/cacache/lib/put.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/cacache/lib/rm.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/cacache/lib/util/glob.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/cacache/lib/util/hash-to-segments.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/cacache/lib/util/tmp.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/cacache/lib/verify.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/cacache/package.json
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/isexe/LICENSE
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/isexe/dist/cjs/index.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/isexe/dist/cjs/options.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/isexe/dist/cjs/package.json
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/isexe/dist/cjs/posix.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/isexe/dist/cjs/win32.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/isexe/dist/mjs/index.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/isexe/dist/mjs/options.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/isexe/dist/mjs/package.json
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/isexe/dist/mjs/posix.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/isexe/dist/mjs/win32.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/isexe/package.json
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/LICENSE
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/cache/entry.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/cache/errors.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/cache/index.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/cache/key.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/cache/policy.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/fetch.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/index.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/options.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/pipeline.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/remote.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/package.json
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/LICENSE
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/lib/abort-error.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/lib/blob.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/lib/body.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/lib/fetch-error.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/lib/headers.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/lib/index.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/lib/request.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/lib/response.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/package.json
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/nopt/LICENSE
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/nopt/README.md
create mode 100755 deps/npm/node_modules/node-gyp/node_modules/nopt/bin/nopt.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/nopt/lib/debug.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/nopt/lib/nopt-lib.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/nopt/lib/nopt.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/nopt/lib/type-defs.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/nopt/package.json
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/proc-log/LICENSE
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/proc-log/lib/index.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/proc-log/package.json
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/ssri/LICENSE.md
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/ssri/lib/index.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/ssri/package.json
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/unique-filename/LICENSE
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/unique-filename/lib/index.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/unique-filename/package.json
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/unique-slug/LICENSE
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/unique-slug/lib/index.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/unique-slug/package.json
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/which/LICENSE
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/which/README.md
create mode 100755 deps/npm/node_modules/node-gyp/node_modules/which/bin/which.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/which/lib/index.js
create mode 100644 deps/npm/node_modules/node-gyp/node_modules/which/package.json
create mode 100644 deps/npm/node_modules/nopt/node_modules/abbrev/LICENSE
create mode 100644 deps/npm/node_modules/nopt/node_modules/abbrev/lib/index.js
create mode 100644 deps/npm/node_modules/nopt/node_modules/abbrev/package.json
create mode 100644 deps/npm/node_modules/npm-install-checks/lib/current-env.js
create mode 100644 deps/npm/node_modules/npm-install-checks/lib/dev-engines.js
create mode 100644 deps/npm/node_modules/npm-registry-fetch/node_modules/minizlib/LICENSE
create mode 100644 deps/npm/node_modules/npm-registry-fetch/node_modules/minizlib/dist/commonjs/constants.js
create mode 100644 deps/npm/node_modules/npm-registry-fetch/node_modules/minizlib/dist/commonjs/index.js
create mode 100644 deps/npm/node_modules/npm-registry-fetch/node_modules/minizlib/dist/commonjs/package.json
create mode 100644 deps/npm/node_modules/npm-registry-fetch/node_modules/minizlib/dist/esm/constants.js
create mode 100644 deps/npm/node_modules/npm-registry-fetch/node_modules/minizlib/dist/esm/index.js
create mode 100644 deps/npm/node_modules/npm-registry-fetch/node_modules/minizlib/dist/esm/package.json
create mode 100644 deps/npm/node_modules/npm-registry-fetch/node_modules/minizlib/package.json
create mode 100644 deps/npm/node_modules/rimraf/LICENSE
create mode 100644 deps/npm/node_modules/rimraf/README.md
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/default-tmp.d.ts
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/default-tmp.d.ts.map
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/default-tmp.js
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/default-tmp.js.map
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/fix-eperm.d.ts
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/fix-eperm.d.ts.map
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/fix-eperm.js
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/fix-eperm.js.map
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/fs.d.ts
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/fs.d.ts.map
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/fs.js
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/fs.js.map
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/ignore-enoent.d.ts
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/ignore-enoent.d.ts.map
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/ignore-enoent.js
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/ignore-enoent.js.map
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/index.d.ts
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/index.d.ts.map
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/index.js
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/index.js.map
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/opt-arg.d.ts
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/opt-arg.d.ts.map
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/opt-arg.js
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/opt-arg.js.map
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/package.json
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/path-arg.d.ts
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/path-arg.d.ts.map
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/path-arg.js
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/path-arg.js.map
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/platform.d.ts
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/platform.d.ts.map
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/platform.js
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/platform.js.map
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/readdir-or-error.d.ts
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/readdir-or-error.d.ts.map
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/readdir-or-error.js
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/readdir-or-error.js.map
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/retry-busy.d.ts
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/retry-busy.d.ts.map
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/retry-busy.js
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/retry-busy.js.map
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/rimraf-manual.d.ts
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/rimraf-manual.d.ts.map
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/rimraf-manual.js
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/rimraf-manual.js.map
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/rimraf-move-remove.d.ts
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/rimraf-move-remove.d.ts.map
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/rimraf-move-remove.js
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/rimraf-move-remove.js.map
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/rimraf-native.d.ts
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/rimraf-native.d.ts.map
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/rimraf-native.js
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/rimraf-native.js.map
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/rimraf-posix.d.ts
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/rimraf-posix.d.ts.map
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/rimraf-posix.js
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/rimraf-posix.js.map
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/rimraf-windows.d.ts
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/rimraf-windows.d.ts.map
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/rimraf-windows.js
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/rimraf-windows.js.map
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/use-native.d.ts
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/use-native.d.ts.map
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/use-native.js
create mode 100644 deps/npm/node_modules/rimraf/dist/commonjs/use-native.js.map
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/bin.d.mts
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/bin.d.mts.map
create mode 100755 deps/npm/node_modules/rimraf/dist/esm/bin.mjs
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/bin.mjs.map
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/default-tmp.d.ts
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/default-tmp.d.ts.map
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/default-tmp.js
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/default-tmp.js.map
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/fix-eperm.d.ts
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/fix-eperm.d.ts.map
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/fix-eperm.js
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/fix-eperm.js.map
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/fs.d.ts
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/fs.d.ts.map
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/fs.js
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/fs.js.map
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/ignore-enoent.d.ts
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/ignore-enoent.d.ts.map
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/ignore-enoent.js
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/ignore-enoent.js.map
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/index.d.ts
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/index.d.ts.map
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/index.js
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/index.js.map
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/opt-arg.d.ts
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/opt-arg.d.ts.map
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/opt-arg.js
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/opt-arg.js.map
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/package.json
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/path-arg.d.ts
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/path-arg.d.ts.map
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/path-arg.js
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/path-arg.js.map
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/platform.d.ts
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/platform.d.ts.map
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/platform.js
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/platform.js.map
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/readdir-or-error.d.ts
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/readdir-or-error.d.ts.map
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/readdir-or-error.js
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/readdir-or-error.js.map
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/retry-busy.d.ts
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/retry-busy.d.ts.map
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/retry-busy.js
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/retry-busy.js.map
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/rimraf-manual.d.ts
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/rimraf-manual.d.ts.map
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/rimraf-manual.js
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/rimraf-manual.js.map
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/rimraf-move-remove.d.ts
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/rimraf-move-remove.d.ts.map
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/rimraf-move-remove.js
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/rimraf-move-remove.js.map
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/rimraf-native.d.ts
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/rimraf-native.d.ts.map
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/rimraf-native.js
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/rimraf-native.js.map
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/rimraf-posix.d.ts
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/rimraf-posix.d.ts.map
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/rimraf-posix.js
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/rimraf-posix.js.map
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/rimraf-windows.d.ts
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/rimraf-windows.d.ts.map
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/rimraf-windows.js
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/rimraf-windows.js.map
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/use-native.d.ts
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/use-native.d.ts.map
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/use-native.js
create mode 100644 deps/npm/node_modules/rimraf/dist/esm/use-native.js.map
create mode 100644 deps/npm/node_modules/rimraf/package.json
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/@npmcli/agent/lib/agents.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/@npmcli/agent/lib/dns.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/@npmcli/agent/lib/errors.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/@npmcli/agent/lib/index.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/@npmcli/agent/lib/options.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/@npmcli/agent/lib/proxy.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/@npmcli/agent/package.json
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/@npmcli/fs/LICENSE.md
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/@npmcli/fs/lib/common/get-options.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/@npmcli/fs/lib/common/node.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/@npmcli/fs/lib/cp/LICENSE
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/@npmcli/fs/lib/cp/errors.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/@npmcli/fs/lib/cp/index.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/@npmcli/fs/lib/cp/polyfill.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/@npmcli/fs/lib/index.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/@npmcli/fs/lib/move-file.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/@npmcli/fs/lib/readdir-scoped.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/@npmcli/fs/lib/with-temp-dir.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/@npmcli/fs/package.json
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/cacache/LICENSE.md
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/cacache/lib/content/path.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/cacache/lib/content/read.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/cacache/lib/content/rm.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/cacache/lib/content/write.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/cacache/lib/entry-index.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/cacache/lib/get.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/cacache/lib/index.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/cacache/lib/memoization.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/cacache/lib/put.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/cacache/lib/rm.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/cacache/lib/util/glob.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/cacache/lib/util/hash-to-segments.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/cacache/lib/util/tmp.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/cacache/lib/verify.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/cacache/package.json
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/make-fetch-happen/LICENSE
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/make-fetch-happen/lib/cache/entry.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/make-fetch-happen/lib/cache/errors.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/make-fetch-happen/lib/cache/index.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/make-fetch-happen/lib/cache/key.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/make-fetch-happen/lib/cache/policy.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/make-fetch-happen/lib/fetch.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/make-fetch-happen/lib/index.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/make-fetch-happen/lib/options.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/make-fetch-happen/lib/pipeline.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/make-fetch-happen/lib/remote.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/make-fetch-happen/package.json
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/minipass-fetch/LICENSE
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/minipass-fetch/lib/abort-error.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/minipass-fetch/lib/blob.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/minipass-fetch/lib/body.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/minipass-fetch/lib/fetch-error.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/minipass-fetch/lib/headers.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/minipass-fetch/lib/index.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/minipass-fetch/lib/request.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/minipass-fetch/lib/response.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/minipass-fetch/package.json
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/proc-log/LICENSE
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/proc-log/lib/index.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/proc-log/package.json
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/ssri/LICENSE.md
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/ssri/lib/index.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/ssri/package.json
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/unique-filename/LICENSE
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/unique-filename/lib/index.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/unique-filename/package.json
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/unique-slug/LICENSE
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/unique-slug/lib/index.js
create mode 100644 deps/npm/node_modules/tuf-js/node_modules/unique-slug/package.json
create mode 100644 deps/npm/tap-snapshots/test/lib/commands/install.js.test.cjs
diff --git a/deps/npm/docs/content/commands/npm-init.md b/deps/npm/docs/content/commands/npm-init.md
index c4b39e63970..870f846761e 100644
--- a/deps/npm/docs/content/commands/npm-init.md
+++ b/deps/npm/docs/content/commands/npm-init.md
@@ -7,7 +7,7 @@ description: Create a package.json file
### Synopsis
```bash
-npm init (same as `npx `)
+npm init (same as `npx create-`)
npm init <@scope> (same as `npx <@scope>/create`)
aliases: create, innit
diff --git a/deps/npm/docs/content/commands/npm-install.md b/deps/npm/docs/content/commands/npm-install.md
index 3ec3c0f3c12..ec933394b1a 100644
--- a/deps/npm/docs/content/commands/npm-install.md
+++ b/deps/npm/docs/content/commands/npm-install.md
@@ -178,10 +178,6 @@ into a tarball (b).
npm install ansi-regex --save-bundle
```
- **Note**: If there is a file or folder named `` in the current
- working directory, then it will try to install that, and only try to
- fetch the package by name if it is not valid.
-
* `npm install @npm:`:
Install a package under a custom alias. Allows multiple versions of
diff --git a/deps/npm/docs/content/commands/npm-ls.md b/deps/npm/docs/content/commands/npm-ls.md
index 59e5b281ef1..3abedf9cd8e 100644
--- a/deps/npm/docs/content/commands/npm-ls.md
+++ b/deps/npm/docs/content/commands/npm-ls.md
@@ -27,7 +27,7 @@ packages will *also* show the paths to the specified packages. For
example, running `npm ls promzard` in npm's source tree will show:
```bash
-npm@10.8.3 /path/to/npm
+npm@10.9.0 /path/to/npm
└─┬ init-package-json@0.0.4
└── promzard@0.1.5
```
diff --git a/deps/npm/docs/content/commands/npm.md b/deps/npm/docs/content/commands/npm.md
index 52ad44d60a6..d92892ec544 100644
--- a/deps/npm/docs/content/commands/npm.md
+++ b/deps/npm/docs/content/commands/npm.md
@@ -14,7 +14,7 @@ Note: This command is unaware of workspaces.
### Version
-10.8.3
+10.9.0
### Description
diff --git a/deps/npm/docs/content/configuring-npm/package-json.md b/deps/npm/docs/content/configuring-npm/package-json.md
index a843b974b0e..7e9daf13177 100644
--- a/deps/npm/docs/content/configuring-npm/package-json.md
+++ b/deps/npm/docs/content/configuring-npm/package-json.md
@@ -337,6 +337,10 @@ the `files` globs. Exceptions to this are:
These can not be included.
+### exports
+
+The "exports" provides a modern alternative to "main" allowing multiple entry points to be defined, conditional entry resolution support between environments, and preventing any other entry points besides those defined in "exports". This encapsulation allows module authors to clearly define the public interface for their package. For more details see the [node.js documentation on package entry points](https://nodejs.org/api/packages.html#package-entry-points)
+
### main
The main field is a module ID that is the primary entry point to your
@@ -1125,6 +1129,32 @@ Like the `os` option, you can also block architectures:
The host architecture is determined by `process.arch`
+### devEngines
+
+The `devEngines` field aids engineers working on a codebase to all be using the same tooling.
+
+You can specify a `devEngines` property in your `package.json` which will run before `install`, `ci`, and `run` commands.
+
+> Note: `engines` and `devEngines` differ in object shape. They also function very differently. `engines` is designed to alert the user when a dependency uses a differening npm or node version that the project it's being used in, whereas `devEngines` is used to alert people interacting with the source code of a project.
+
+The supported keys under the `devEngines` property are `cpu`, `os`, `libc`, `runtime`, and `packageManager`. Each property can be an object or an array of objects. Objects must contain `name`, and optionally can specify `version`, and `onFail`. `onFail` can be `warn`, `error`, or `ignore`, and if left undefined is of the same value as `error`. `npm` will assume that you're running with `node`.
+Here's an example of a project that will fail if the environment is not `node` and `npm`. If you set `runtime.name` or `packageManager.name` to any other string, it will fail within the npm CLI.
+
+```json
+{
+ "devEngines": {
+ "runtime": {
+ "name": "node",
+ "onFail": "error"
+ },
+ "packageManager": {
+ "name": "npm",
+ "onFail": "error"
+ }
+ }
+}
+```
+
### private
If you set `"private": true` in your package.json, then npm will refuse to
diff --git a/deps/npm/docs/output/commands/npm-access.html b/deps/npm/docs/output/commands/npm-access.html
index 76bf07b8473..0a839663fcb 100644
--- a/deps/npm/docs/output/commands/npm-access.html
+++ b/deps/npm/docs/output/commands/npm-access.html
@@ -141,9 +141,9 @@
-
+
npm-access
- @10.8.3
+ @10.9.0
Set access level on published packages
diff --git a/deps/npm/docs/output/commands/npm-adduser.html b/deps/npm/docs/output/commands/npm-adduser.html
index 8cf2e1abf4b..2ac615ad139 100644
--- a/deps/npm/docs/output/commands/npm-adduser.html
+++ b/deps/npm/docs/output/commands/npm-adduser.html
@@ -141,9 +141,9 @@
-
+
npm-adduser
- @10.8.3
+ @10.9.0
Add a registry user account
diff --git a/deps/npm/docs/output/commands/npm-audit.html b/deps/npm/docs/output/commands/npm-audit.html
index 7d53101a2f3..d7374ccfa66 100644
--- a/deps/npm/docs/output/commands/npm-audit.html
+++ b/deps/npm/docs/output/commands/npm-audit.html
@@ -141,9 +141,9 @@
-
+
npm-audit
- @10.8.3
+ @10.9.0
Run a security audit
diff --git a/deps/npm/docs/output/commands/npm-bugs.html b/deps/npm/docs/output/commands/npm-bugs.html
index d9e5cf60b67..9186bc100ae 100644
--- a/deps/npm/docs/output/commands/npm-bugs.html
+++ b/deps/npm/docs/output/commands/npm-bugs.html
@@ -141,9 +141,9 @@
-
+
npm-bugs
- @10.8.3
+ @10.9.0
Report bugs for a package in a web browser
diff --git a/deps/npm/docs/output/commands/npm-cache.html b/deps/npm/docs/output/commands/npm-cache.html
index 21f2cc68bcc..55cec217dbd 100644
--- a/deps/npm/docs/output/commands/npm-cache.html
+++ b/deps/npm/docs/output/commands/npm-cache.html
@@ -141,9 +141,9 @@
-
+
npm-cache
- @10.8.3
+ @10.9.0
Manipulates packages cache
diff --git a/deps/npm/docs/output/commands/npm-ci.html b/deps/npm/docs/output/commands/npm-ci.html
index 9f645ecfb59..efe85877756 100644
--- a/deps/npm/docs/output/commands/npm-ci.html
+++ b/deps/npm/docs/output/commands/npm-ci.html
@@ -141,9 +141,9 @@
-
+
npm-ci
- @10.8.3
+ @10.9.0
Clean install a project
diff --git a/deps/npm/docs/output/commands/npm-completion.html b/deps/npm/docs/output/commands/npm-completion.html
index d73c648bfa3..4a91a94498f 100644
--- a/deps/npm/docs/output/commands/npm-completion.html
+++ b/deps/npm/docs/output/commands/npm-completion.html
@@ -141,9 +141,9 @@
-
+
npm-completion
- @10.8.3
+ @10.9.0
Tab Completion for npm
diff --git a/deps/npm/docs/output/commands/npm-config.html b/deps/npm/docs/output/commands/npm-config.html
index 4e5c7088638..d18998fea84 100644
--- a/deps/npm/docs/output/commands/npm-config.html
+++ b/deps/npm/docs/output/commands/npm-config.html
@@ -141,9 +141,9 @@
-
+
npm-config
- @10.8.3
+ @10.9.0
Manage the npm configuration files
diff --git a/deps/npm/docs/output/commands/npm-dedupe.html b/deps/npm/docs/output/commands/npm-dedupe.html
index f4c92e79f8d..194ea085383 100644
--- a/deps/npm/docs/output/commands/npm-dedupe.html
+++ b/deps/npm/docs/output/commands/npm-dedupe.html
@@ -141,9 +141,9 @@
-
+
npm-dedupe
- @10.8.3
+ @10.9.0
Reduce duplication in the package tree
diff --git a/deps/npm/docs/output/commands/npm-deprecate.html b/deps/npm/docs/output/commands/npm-deprecate.html
index c644650427a..ae40adfbbab 100644
--- a/deps/npm/docs/output/commands/npm-deprecate.html
+++ b/deps/npm/docs/output/commands/npm-deprecate.html
@@ -141,9 +141,9 @@
-
+
npm-deprecate
- @10.8.3
+ @10.9.0
Deprecate a version of a package
diff --git a/deps/npm/docs/output/commands/npm-diff.html b/deps/npm/docs/output/commands/npm-diff.html
index 6e23a06faa4..257b1c21572 100644
--- a/deps/npm/docs/output/commands/npm-diff.html
+++ b/deps/npm/docs/output/commands/npm-diff.html
@@ -141,9 +141,9 @@
-
+
npm-diff
- @10.8.3
+ @10.9.0
The registry diff command
diff --git a/deps/npm/docs/output/commands/npm-dist-tag.html b/deps/npm/docs/output/commands/npm-dist-tag.html
index 2e0ea2b927c..08e7770a0c1 100644
--- a/deps/npm/docs/output/commands/npm-dist-tag.html
+++ b/deps/npm/docs/output/commands/npm-dist-tag.html
@@ -141,9 +141,9 @@
-
+
npm-dist-tag
- @10.8.3
+ @10.9.0
Modify package distribution tags
diff --git a/deps/npm/docs/output/commands/npm-docs.html b/deps/npm/docs/output/commands/npm-docs.html
index e5108efb32b..8b647251f36 100644
--- a/deps/npm/docs/output/commands/npm-docs.html
+++ b/deps/npm/docs/output/commands/npm-docs.html
@@ -141,9 +141,9 @@
-
+
npm-docs
- @10.8.3
+ @10.9.0
Open documentation for a package in a web browser
diff --git a/deps/npm/docs/output/commands/npm-doctor.html b/deps/npm/docs/output/commands/npm-doctor.html
index 6ec69164f8d..110ec2f9b20 100644
--- a/deps/npm/docs/output/commands/npm-doctor.html
+++ b/deps/npm/docs/output/commands/npm-doctor.html
@@ -141,9 +141,9 @@
-
+
npm-doctor
- @10.8.3
+ @10.9.0
Check the health of your npm environment
diff --git a/deps/npm/docs/output/commands/npm-edit.html b/deps/npm/docs/output/commands/npm-edit.html
index 3b0e7247173..9e4f7b361a5 100644
--- a/deps/npm/docs/output/commands/npm-edit.html
+++ b/deps/npm/docs/output/commands/npm-edit.html
@@ -141,9 +141,9 @@
-
+
npm-edit
- @10.8.3
+ @10.9.0
Edit an installed package
diff --git a/deps/npm/docs/output/commands/npm-exec.html b/deps/npm/docs/output/commands/npm-exec.html
index 71087fefd84..695fa35ab82 100644
--- a/deps/npm/docs/output/commands/npm-exec.html
+++ b/deps/npm/docs/output/commands/npm-exec.html
@@ -141,9 +141,9 @@
-
+
npm-exec
- @10.8.3
+ @10.9.0
Run a command from a local or remote npm package
diff --git a/deps/npm/docs/output/commands/npm-explain.html b/deps/npm/docs/output/commands/npm-explain.html
index dcc6a94838a..e79255ff5fa 100644
--- a/deps/npm/docs/output/commands/npm-explain.html
+++ b/deps/npm/docs/output/commands/npm-explain.html
@@ -141,9 +141,9 @@
-
+
npm-explain
- @10.8.3
+ @10.9.0
Explain installed packages
diff --git a/deps/npm/docs/output/commands/npm-explore.html b/deps/npm/docs/output/commands/npm-explore.html
index 783de27e7dd..e296f4146af 100644
--- a/deps/npm/docs/output/commands/npm-explore.html
+++ b/deps/npm/docs/output/commands/npm-explore.html
@@ -141,9 +141,9 @@
-
+
npm-explore
- @10.8.3
+ @10.9.0
Browse an installed package
diff --git a/deps/npm/docs/output/commands/npm-find-dupes.html b/deps/npm/docs/output/commands/npm-find-dupes.html
index fb1badb1476..a8c914a0dd3 100644
--- a/deps/npm/docs/output/commands/npm-find-dupes.html
+++ b/deps/npm/docs/output/commands/npm-find-dupes.html
@@ -141,9 +141,9 @@
-
+
npm-find-dupes
- @10.8.3
+ @10.9.0
Find duplication in the package tree
diff --git a/deps/npm/docs/output/commands/npm-fund.html b/deps/npm/docs/output/commands/npm-fund.html
index 9e597d085c0..36a63253439 100644
--- a/deps/npm/docs/output/commands/npm-fund.html
+++ b/deps/npm/docs/output/commands/npm-fund.html
@@ -141,9 +141,9 @@
-
+
npm-fund
- @10.8.3
+ @10.9.0
Retrieve funding information
diff --git a/deps/npm/docs/output/commands/npm-help-search.html b/deps/npm/docs/output/commands/npm-help-search.html
index 0b521d6de2a..76dea45d852 100644
--- a/deps/npm/docs/output/commands/npm-help-search.html
+++ b/deps/npm/docs/output/commands/npm-help-search.html
@@ -141,9 +141,9 @@
-
+
npm-help-search
- @10.8.3
+ @10.9.0
Search npm help documentation
diff --git a/deps/npm/docs/output/commands/npm-help.html b/deps/npm/docs/output/commands/npm-help.html
index dafcf20f7bc..e6b14af2f9e 100644
--- a/deps/npm/docs/output/commands/npm-help.html
+++ b/deps/npm/docs/output/commands/npm-help.html
@@ -141,9 +141,9 @@
-
+
npm-help
- @10.8.3
+ @10.9.0
Get help on npm
diff --git a/deps/npm/docs/output/commands/npm-hook.html b/deps/npm/docs/output/commands/npm-hook.html
index 953ce47aca7..393700a9a71 100644
--- a/deps/npm/docs/output/commands/npm-hook.html
+++ b/deps/npm/docs/output/commands/npm-hook.html
@@ -141,9 +141,9 @@
-
+
npm-hook
- @10.8.3
+ @10.9.0
Manage registry hooks
diff --git a/deps/npm/docs/output/commands/npm-init.html b/deps/npm/docs/output/commands/npm-init.html
index 305e3483807..8ff01b2f7a7 100644
--- a/deps/npm/docs/output/commands/npm-init.html
+++ b/deps/npm/docs/output/commands/npm-init.html
@@ -141,9 +141,9 @@
-
+
npm-init
- @10.8.3
+ @10.9.0
Create a package.json file
@@ -154,7 +154,7 @@ Table of contents
Synopsis
-
npm init <package-spec> (same as `npx <package-spec>`)
+npm init <package-spec> (same as `npx create-<package-spec>`)
npm init <@scope> (same as `npx <@scope>/create`)
aliases: create, innit
diff --git a/deps/npm/docs/output/commands/npm-install-ci-test.html b/deps/npm/docs/output/commands/npm-install-ci-test.html
index a25a150d655..b0f9d237ed8 100644
--- a/deps/npm/docs/output/commands/npm-install-ci-test.html
+++ b/deps/npm/docs/output/commands/npm-install-ci-test.html
@@ -141,9 +141,9 @@
-
+
npm-install-ci-test
- @10.8.3
+ @10.9.0
Install a project with a clean slate and run tests
diff --git a/deps/npm/docs/output/commands/npm-install-test.html b/deps/npm/docs/output/commands/npm-install-test.html
index 1a36de01dcf..b0fbd63887f 100644
--- a/deps/npm/docs/output/commands/npm-install-test.html
+++ b/deps/npm/docs/output/commands/npm-install-test.html
@@ -141,9 +141,9 @@
-
+
npm-install-test
- @10.8.3
+ @10.9.0
Install package(s) and run tests
diff --git a/deps/npm/docs/output/commands/npm-install.html b/deps/npm/docs/output/commands/npm-install.html
index 858c325cd83..fa57e02eaf9 100644
--- a/deps/npm/docs/output/commands/npm-install.html
+++ b/deps/npm/docs/output/commands/npm-install.html
@@ -141,9 +141,9 @@
-
+
npm-install
- @10.8.3
+ @10.9.0
Install a package
@@ -309,9 +309,6 @@ Description
npm install readable-stream --save-exact
npm install ansi-regex --save-bundle
-Note: If there is a file or folder named <name> in the current
-working directory, then it will try to install that, and only try to
-fetch the package by name if it is not valid.
npm install <alias>@npm:<name>:
diff --git a/deps/npm/docs/output/commands/npm-link.html b/deps/npm/docs/output/commands/npm-link.html
index c6738b85254..4e461ebefaf 100644
--- a/deps/npm/docs/output/commands/npm-link.html
+++ b/deps/npm/docs/output/commands/npm-link.html
@@ -141,9 +141,9 @@
-
+
npm-link
- @10.8.3
+ @10.9.0
Symlink a package folder
diff --git a/deps/npm/docs/output/commands/npm-login.html b/deps/npm/docs/output/commands/npm-login.html
index bc8e4684ea5..9c1584ca36b 100644
--- a/deps/npm/docs/output/commands/npm-login.html
+++ b/deps/npm/docs/output/commands/npm-login.html
@@ -141,9 +141,9 @@
-
+
npm-login
- @10.8.3
+ @10.9.0
Login to a registry user account
diff --git a/deps/npm/docs/output/commands/npm-logout.html b/deps/npm/docs/output/commands/npm-logout.html
index 5b48e25a824..8908b329395 100644
--- a/deps/npm/docs/output/commands/npm-logout.html
+++ b/deps/npm/docs/output/commands/npm-logout.html
@@ -141,9 +141,9 @@
-
+
npm-logout
- @10.8.3
+ @10.9.0
Log out of the registry
diff --git a/deps/npm/docs/output/commands/npm-ls.html b/deps/npm/docs/output/commands/npm-ls.html
index c1c5cd0c9e7..2615a492a75 100644
--- a/deps/npm/docs/output/commands/npm-ls.html
+++ b/deps/npm/docs/output/commands/npm-ls.html
@@ -141,9 +141,9 @@
-
+
npm-ls
- @10.8.3
+ @10.9.0
List installed packages
@@ -168,7 +168,7 @@ Description
the results to only the paths to the packages named. Note that nested
packages will also show the paths to the specified packages. For
example, running npm ls promzard in npm's source tree will show:
-npm@10.8.3 /path/to/npm
+npm@10.9.0 /path/to/npm
└─┬ init-package-json@0.0.4
└── promzard@0.1.5
diff --git a/deps/npm/docs/output/commands/npm-org.html b/deps/npm/docs/output/commands/npm-org.html
index 9f97a53bf5c..66d823f7f3c 100644
--- a/deps/npm/docs/output/commands/npm-org.html
+++ b/deps/npm/docs/output/commands/npm-org.html
@@ -141,9 +141,9 @@
-
+
npm-org
- @10.8.3
+ @10.9.0
Manage orgs
diff --git a/deps/npm/docs/output/commands/npm-outdated.html b/deps/npm/docs/output/commands/npm-outdated.html
index db933f402e9..6002ff1818d 100644
--- a/deps/npm/docs/output/commands/npm-outdated.html
+++ b/deps/npm/docs/output/commands/npm-outdated.html
@@ -141,9 +141,9 @@
-
+
npm-outdated
- @10.8.3
+ @10.9.0
Check for outdated packages
diff --git a/deps/npm/docs/output/commands/npm-owner.html b/deps/npm/docs/output/commands/npm-owner.html
index 7b3d111efad..e8b7a05274a 100644
--- a/deps/npm/docs/output/commands/npm-owner.html
+++ b/deps/npm/docs/output/commands/npm-owner.html
@@ -141,9 +141,9 @@
-
+
npm-owner
- @10.8.3
+ @10.9.0
Manage package owners
diff --git a/deps/npm/docs/output/commands/npm-pack.html b/deps/npm/docs/output/commands/npm-pack.html
index a39574805ca..596ba9a35e3 100644
--- a/deps/npm/docs/output/commands/npm-pack.html
+++ b/deps/npm/docs/output/commands/npm-pack.html
@@ -141,9 +141,9 @@
-
+
npm-pack
- @10.8.3
+ @10.9.0
Create a tarball from a package
diff --git a/deps/npm/docs/output/commands/npm-ping.html b/deps/npm/docs/output/commands/npm-ping.html
index bb052270cf3..de393dbd0b5 100644
--- a/deps/npm/docs/output/commands/npm-ping.html
+++ b/deps/npm/docs/output/commands/npm-ping.html
@@ -141,9 +141,9 @@
-
+
npm-ping
- @10.8.3
+ @10.9.0
Ping npm registry
diff --git a/deps/npm/docs/output/commands/npm-pkg.html b/deps/npm/docs/output/commands/npm-pkg.html
index 86c5ad73917..ffb153cc440 100644
--- a/deps/npm/docs/output/commands/npm-pkg.html
+++ b/deps/npm/docs/output/commands/npm-pkg.html
@@ -141,9 +141,9 @@
-
+
npm-pkg
- @10.8.3
+ @10.9.0
Manages your package.json
diff --git a/deps/npm/docs/output/commands/npm-prefix.html b/deps/npm/docs/output/commands/npm-prefix.html
index d16200830c3..da63644f2df 100644
--- a/deps/npm/docs/output/commands/npm-prefix.html
+++ b/deps/npm/docs/output/commands/npm-prefix.html
@@ -141,9 +141,9 @@
-
+
npm-prefix
- @10.8.3
+ @10.9.0
Display prefix
diff --git a/deps/npm/docs/output/commands/npm-profile.html b/deps/npm/docs/output/commands/npm-profile.html
index ac0c7206cba..c3679196a85 100644
--- a/deps/npm/docs/output/commands/npm-profile.html
+++ b/deps/npm/docs/output/commands/npm-profile.html
@@ -141,9 +141,9 @@
-
+
npm-profile
- @10.8.3
+ @10.9.0
Change settings on your registry profile
diff --git a/deps/npm/docs/output/commands/npm-prune.html b/deps/npm/docs/output/commands/npm-prune.html
index ea1976ed852..4e844ab9f02 100644
--- a/deps/npm/docs/output/commands/npm-prune.html
+++ b/deps/npm/docs/output/commands/npm-prune.html
@@ -141,9 +141,9 @@
-
+
npm-prune
- @10.8.3
+ @10.9.0
Remove extraneous packages
diff --git a/deps/npm/docs/output/commands/npm-publish.html b/deps/npm/docs/output/commands/npm-publish.html
index 89d5ac62ec1..b808cc29a15 100644
--- a/deps/npm/docs/output/commands/npm-publish.html
+++ b/deps/npm/docs/output/commands/npm-publish.html
@@ -141,9 +141,9 @@
-
+
npm-publish
- @10.8.3
+ @10.9.0
Publish a package
diff --git a/deps/npm/docs/output/commands/npm-query.html b/deps/npm/docs/output/commands/npm-query.html
index 90c75bccd61..d85a2f6c27f 100644
--- a/deps/npm/docs/output/commands/npm-query.html
+++ b/deps/npm/docs/output/commands/npm-query.html
@@ -141,9 +141,9 @@
-
+
npm-query
- @10.8.3
+ @10.9.0
Dependency selector query
diff --git a/deps/npm/docs/output/commands/npm-rebuild.html b/deps/npm/docs/output/commands/npm-rebuild.html
index 6dbb7f9c12e..ff28b35b86b 100644
--- a/deps/npm/docs/output/commands/npm-rebuild.html
+++ b/deps/npm/docs/output/commands/npm-rebuild.html
@@ -141,9 +141,9 @@
-
+
npm-rebuild
- @10.8.3
+ @10.9.0
Rebuild a package
diff --git a/deps/npm/docs/output/commands/npm-repo.html b/deps/npm/docs/output/commands/npm-repo.html
index c31847aeca0..8ee7e9d6d2d 100644
--- a/deps/npm/docs/output/commands/npm-repo.html
+++ b/deps/npm/docs/output/commands/npm-repo.html
@@ -141,9 +141,9 @@
-
+
npm-repo
- @10.8.3
+ @10.9.0
Open package repository page in the browser
diff --git a/deps/npm/docs/output/commands/npm-restart.html b/deps/npm/docs/output/commands/npm-restart.html
index 6d0b29454a7..e3171bf2809 100644
--- a/deps/npm/docs/output/commands/npm-restart.html
+++ b/deps/npm/docs/output/commands/npm-restart.html
@@ -141,9 +141,9 @@
-
+
npm-restart
- @10.8.3
+ @10.9.0
Restart a package
diff --git a/deps/npm/docs/output/commands/npm-root.html b/deps/npm/docs/output/commands/npm-root.html
index 670cf25a731..4e2e82e5bb2 100644
--- a/deps/npm/docs/output/commands/npm-root.html
+++ b/deps/npm/docs/output/commands/npm-root.html
@@ -141,9 +141,9 @@
-
+
npm-root
- @10.8.3
+ @10.9.0
Display npm root
diff --git a/deps/npm/docs/output/commands/npm-run-script.html b/deps/npm/docs/output/commands/npm-run-script.html
index bcabcc0bfec..4673e733f49 100644
--- a/deps/npm/docs/output/commands/npm-run-script.html
+++ b/deps/npm/docs/output/commands/npm-run-script.html
@@ -141,9 +141,9 @@
-
+
npm-run-script
- @10.8.3
+ @10.9.0
Run arbitrary package scripts
diff --git a/deps/npm/docs/output/commands/npm-sbom.html b/deps/npm/docs/output/commands/npm-sbom.html
index f95f0992fb5..00508eca6cd 100644
--- a/deps/npm/docs/output/commands/npm-sbom.html
+++ b/deps/npm/docs/output/commands/npm-sbom.html
@@ -141,9 +141,9 @@
-
+
npm-sbom
- @10.8.3
+ @10.9.0
Generate a Software Bill of Materials (SBOM)
diff --git a/deps/npm/docs/output/commands/npm-search.html b/deps/npm/docs/output/commands/npm-search.html
index ba4b81381b0..edf4e437e65 100644
--- a/deps/npm/docs/output/commands/npm-search.html
+++ b/deps/npm/docs/output/commands/npm-search.html
@@ -141,9 +141,9 @@
-
+
npm-search
- @10.8.3
+ @10.9.0
Search for packages
diff --git a/deps/npm/docs/output/commands/npm-shrinkwrap.html b/deps/npm/docs/output/commands/npm-shrinkwrap.html
index c143822f846..f225abaed92 100644
--- a/deps/npm/docs/output/commands/npm-shrinkwrap.html
+++ b/deps/npm/docs/output/commands/npm-shrinkwrap.html
@@ -141,9 +141,9 @@
-
+
npm-shrinkwrap
- @10.8.3
+ @10.9.0
Lock down dependency versions for publication
diff --git a/deps/npm/docs/output/commands/npm-star.html b/deps/npm/docs/output/commands/npm-star.html
index e634b8686c2..04b36628ad2 100644
--- a/deps/npm/docs/output/commands/npm-star.html
+++ b/deps/npm/docs/output/commands/npm-star.html
@@ -141,9 +141,9 @@
-
+
npm-star
- @10.8.3
+ @10.9.0
Mark your favorite packages
diff --git a/deps/npm/docs/output/commands/npm-stars.html b/deps/npm/docs/output/commands/npm-stars.html
index 0986e3a60f6..3183aa047f1 100644
--- a/deps/npm/docs/output/commands/npm-stars.html
+++ b/deps/npm/docs/output/commands/npm-stars.html
@@ -141,9 +141,9 @@
-
+
npm-stars
- @10.8.3
+ @10.9.0
View packages marked as favorites
diff --git a/deps/npm/docs/output/commands/npm-start.html b/deps/npm/docs/output/commands/npm-start.html
index 0879146131e..b81caefe0a4 100644
--- a/deps/npm/docs/output/commands/npm-start.html
+++ b/deps/npm/docs/output/commands/npm-start.html
@@ -141,9 +141,9 @@
-
+
npm-start
- @10.8.3
+ @10.9.0
Start a package
diff --git a/deps/npm/docs/output/commands/npm-stop.html b/deps/npm/docs/output/commands/npm-stop.html
index ea3001a24bd..85d4c782a73 100644
--- a/deps/npm/docs/output/commands/npm-stop.html
+++ b/deps/npm/docs/output/commands/npm-stop.html
@@ -141,9 +141,9 @@
-
+
npm-stop
- @10.8.3
+ @10.9.0
Stop a package
diff --git a/deps/npm/docs/output/commands/npm-team.html b/deps/npm/docs/output/commands/npm-team.html
index 2cad22ffbd4..6ad869fa3be 100644
--- a/deps/npm/docs/output/commands/npm-team.html
+++ b/deps/npm/docs/output/commands/npm-team.html
@@ -141,9 +141,9 @@
-
+
npm-team
- @10.8.3
+ @10.9.0
Manage organization teams and team memberships
diff --git a/deps/npm/docs/output/commands/npm-test.html b/deps/npm/docs/output/commands/npm-test.html
index ab7431a1b0a..bce16c92e4f 100644
--- a/deps/npm/docs/output/commands/npm-test.html
+++ b/deps/npm/docs/output/commands/npm-test.html
@@ -141,9 +141,9 @@
-
+
npm-test
- @10.8.3
+ @10.9.0
Test a package
diff --git a/deps/npm/docs/output/commands/npm-token.html b/deps/npm/docs/output/commands/npm-token.html
index ca7df2869ec..99fcafd9b8f 100644
--- a/deps/npm/docs/output/commands/npm-token.html
+++ b/deps/npm/docs/output/commands/npm-token.html
@@ -141,9 +141,9 @@
-
+
npm-token
- @10.8.3
+ @10.9.0
Manage your authentication tokens
diff --git a/deps/npm/docs/output/commands/npm-uninstall.html b/deps/npm/docs/output/commands/npm-uninstall.html
index ea964c96e07..dd8e7a22346 100644
--- a/deps/npm/docs/output/commands/npm-uninstall.html
+++ b/deps/npm/docs/output/commands/npm-uninstall.html
@@ -141,9 +141,9 @@
-
+
npm-uninstall
- @10.8.3
+ @10.9.0
Remove a package
diff --git a/deps/npm/docs/output/commands/npm-unpublish.html b/deps/npm/docs/output/commands/npm-unpublish.html
index 607049cf467..56e2c59f62a 100644
--- a/deps/npm/docs/output/commands/npm-unpublish.html
+++ b/deps/npm/docs/output/commands/npm-unpublish.html
@@ -141,9 +141,9 @@
-
+
npm-unpublish
- @10.8.3
+ @10.9.0
Remove a package from the registry
diff --git a/deps/npm/docs/output/commands/npm-unstar.html b/deps/npm/docs/output/commands/npm-unstar.html
index 15a72f60134..710d8a947d6 100644
--- a/deps/npm/docs/output/commands/npm-unstar.html
+++ b/deps/npm/docs/output/commands/npm-unstar.html
@@ -141,9 +141,9 @@
-
+
npm-unstar
- @10.8.3
+ @10.9.0
Remove an item from your favorite packages
diff --git a/deps/npm/docs/output/commands/npm-update.html b/deps/npm/docs/output/commands/npm-update.html
index e38eb06ba4c..e587ec92f86 100644
--- a/deps/npm/docs/output/commands/npm-update.html
+++ b/deps/npm/docs/output/commands/npm-update.html
@@ -141,9 +141,9 @@
-
+
npm-update
- @10.8.3
+ @10.9.0
Update packages
diff --git a/deps/npm/docs/output/commands/npm-version.html b/deps/npm/docs/output/commands/npm-version.html
index dfb31dd2c98..196a0236093 100644
--- a/deps/npm/docs/output/commands/npm-version.html
+++ b/deps/npm/docs/output/commands/npm-version.html
@@ -141,9 +141,9 @@
-
+
npm-version
- @10.8.3
+ @10.9.0
Bump a package version
diff --git a/deps/npm/docs/output/commands/npm-view.html b/deps/npm/docs/output/commands/npm-view.html
index 8837e47e8f6..0eebee30377 100644
--- a/deps/npm/docs/output/commands/npm-view.html
+++ b/deps/npm/docs/output/commands/npm-view.html
@@ -141,9 +141,9 @@
-
+
npm-view
- @10.8.3
+ @10.9.0
View registry info
diff --git a/deps/npm/docs/output/commands/npm-whoami.html b/deps/npm/docs/output/commands/npm-whoami.html
index f6dbcc3f3ae..0d1fa5ea9b8 100644
--- a/deps/npm/docs/output/commands/npm-whoami.html
+++ b/deps/npm/docs/output/commands/npm-whoami.html
@@ -141,9 +141,9 @@
-
+
npm-whoami
- @10.8.3
+ @10.9.0
Display npm username
diff --git a/deps/npm/docs/output/commands/npm.html b/deps/npm/docs/output/commands/npm.html
index e9f96129c15..005009c1dba 100644
--- a/deps/npm/docs/output/commands/npm.html
+++ b/deps/npm/docs/output/commands/npm.html
@@ -141,9 +141,9 @@
-
+
npm
- @10.8.3
+ @10.9.0
javascript package manager
@@ -158,7 +158,7 @@ Table of contents
Note: This command is unaware of workspaces.
Version
-10.8.3
+10.9.0
Description
npm is the package manager for the Node JavaScript platform. It puts
modules in place so that node can find them, and manages dependency
diff --git a/deps/npm/docs/output/commands/npx.html b/deps/npm/docs/output/commands/npx.html
index 418fc957a78..d3239ed320b 100644
--- a/deps/npm/docs/output/commands/npx.html
+++ b/deps/npm/docs/output/commands/npx.html
@@ -141,9 +141,9 @@
-
+
npx
- @10.8.3
+ @10.9.0
Run a command from a local or remote npm package
diff --git a/deps/npm/docs/output/configuring-npm/folders.html b/deps/npm/docs/output/configuring-npm/folders.html
index 9bcbc0e5a36..f23aef6354f 100644
--- a/deps/npm/docs/output/configuring-npm/folders.html
+++ b/deps/npm/docs/output/configuring-npm/folders.html
@@ -141,9 +141,9 @@
-
+
folders
- @10.8.3
+ @10.9.0
Folder Structures Used by npm
diff --git a/deps/npm/docs/output/configuring-npm/install.html b/deps/npm/docs/output/configuring-npm/install.html
index d0d46ffc693..cddbcaae2de 100644
--- a/deps/npm/docs/output/configuring-npm/install.html
+++ b/deps/npm/docs/output/configuring-npm/install.html
@@ -141,9 +141,9 @@
-
+
install
- @10.8.3
+ @10.9.0
Download and install node and npm
diff --git a/deps/npm/docs/output/configuring-npm/npm-global.html b/deps/npm/docs/output/configuring-npm/npm-global.html
index 9bcbc0e5a36..f23aef6354f 100644
--- a/deps/npm/docs/output/configuring-npm/npm-global.html
+++ b/deps/npm/docs/output/configuring-npm/npm-global.html
@@ -141,9 +141,9 @@
-
+
folders
- @10.8.3
+ @10.9.0
Folder Structures Used by npm
diff --git a/deps/npm/docs/output/configuring-npm/npm-json.html b/deps/npm/docs/output/configuring-npm/npm-json.html
index dfdc917fc21..0cd27f8d82f 100644
--- a/deps/npm/docs/output/configuring-npm/npm-json.html
+++ b/deps/npm/docs/output/configuring-npm/npm-json.html
@@ -141,16 +141,16 @@
-
+
package.json
- @10.8.3
+ @10.9.0
Specifics of npm's package.json handling
Description
@@ -411,6 +411,8 @@
files
yarn.lock
These can not be included.
+
exports
+
The "exports" provides a modern alternative to "main" allowing multiple entry points to be defined, conditional entry resolution support between environments, and preventing any other entry points besides those defined in "exports". This encapsulation allows module authors to clearly define the public interface for their package. For more details see the node.js documentation on package entry points
main
The main field is a module ID that is the primary entry point to your
program. That is, if your package is named foo, and a user installs it,
@@ -1005,6 +1007,27 @@
cpu
}
The host architecture is determined by process.arch
+
devEngines
+
The devEngines field aids engineers working on a codebase to all be using the same tooling.
+
You can specify a devEngines property in your package.json which will run before install, ci, and run commands.
+
+Note: engines and devEngines differ in object shape. They also function very differently. engines is designed to alert the user when a dependency uses a differening npm or node version that the project it's being used in, whereas devEngines is used to alert people interacting with the source code of a project.
+
+
The supported keys under the devEngines property are cpu, os, libc, runtime, and packageManager. Each property can be an object or an array of objects. Objects must contain name, and optionally can specify version, and onFail. onFail can be warn, error, or ignore, and if left undefined is of the same value as error. npm will assume that you're running with node.
+Here's an example of a project that will fail if the environment is not node and npm. If you set runtime.name or packageManager.name to any other string, it will fail within the npm CLI.
+
{
+ "devEngines": {
+ "runtime": {
+ "name": "node",
+ "onFail": "error"
+ },
+ "packageManager": {
+ "name": "npm",
+ "onFail": "error"
+ }
+ }
+}
+
private
If you set "private": true in your package.json, then npm will refuse to
publish it.
diff --git a/deps/npm/docs/output/configuring-npm/npm-shrinkwrap-json.html b/deps/npm/docs/output/configuring-npm/npm-shrinkwrap-json.html
index 567f47ad15d..5f20e99541a 100644
--- a/deps/npm/docs/output/configuring-npm/npm-shrinkwrap-json.html
+++ b/deps/npm/docs/output/configuring-npm/npm-shrinkwrap-json.html
@@ -141,9 +141,9 @@
-
+
npm-shrinkwrap.json
- @10.8.3
+ @10.9.0
A publishable lockfile
diff --git a/deps/npm/docs/output/configuring-npm/npmrc.html b/deps/npm/docs/output/configuring-npm/npmrc.html
index 19950a61fb8..a20c3d807d3 100644
--- a/deps/npm/docs/output/configuring-npm/npmrc.html
+++ b/deps/npm/docs/output/configuring-npm/npmrc.html
@@ -141,9 +141,9 @@
-
+
npmrc
- @10.8.3
+ @10.9.0
The npm config files
diff --git a/deps/npm/docs/output/configuring-npm/package-json.html b/deps/npm/docs/output/configuring-npm/package-json.html
index dfdc917fc21..0cd27f8d82f 100644
--- a/deps/npm/docs/output/configuring-npm/package-json.html
+++ b/deps/npm/docs/output/configuring-npm/package-json.html
@@ -141,16 +141,16 @@
-
+
package.json
- @10.8.3
+ @10.9.0
Specifics of npm's package.json handling
Description
@@ -411,6 +411,8 @@
files
yarn.lock
These can not be included.
+
exports
+
The "exports" provides a modern alternative to "main" allowing multiple entry points to be defined, conditional entry resolution support between environments, and preventing any other entry points besides those defined in "exports". This encapsulation allows module authors to clearly define the public interface for their package. For more details see the node.js documentation on package entry points
main
The main field is a module ID that is the primary entry point to your
program. That is, if your package is named foo, and a user installs it,
@@ -1005,6 +1007,27 @@
cpu
}
The host architecture is determined by process.arch
+
devEngines
+
The devEngines field aids engineers working on a codebase to all be using the same tooling.
+
You can specify a devEngines property in your package.json which will run before install, ci, and run commands.
+
+Note: engines and devEngines differ in object shape. They also function very differently. engines is designed to alert the user when a dependency uses a differening npm or node version that the project it's being used in, whereas devEngines is used to alert people interacting with the source code of a project.
+
+
The supported keys under the devEngines property are cpu, os, libc, runtime, and packageManager. Each property can be an object or an array of objects. Objects must contain name, and optionally can specify version, and onFail. onFail can be warn, error, or ignore, and if left undefined is of the same value as error. npm will assume that you're running with node.
+Here's an example of a project that will fail if the environment is not node and npm. If you set runtime.name or packageManager.name to any other string, it will fail within the npm CLI.
+
{
+ "devEngines": {
+ "runtime": {
+ "name": "node",
+ "onFail": "error"
+ },
+ "packageManager": {
+ "name": "npm",
+ "onFail": "error"
+ }
+ }
+}
+
private
If you set "private": true in your package.json, then npm will refuse to
publish it.
diff --git a/deps/npm/docs/output/configuring-npm/package-lock-json.html b/deps/npm/docs/output/configuring-npm/package-lock-json.html
index 7ece2f78141..58598df7ae4 100644
--- a/deps/npm/docs/output/configuring-npm/package-lock-json.html
+++ b/deps/npm/docs/output/configuring-npm/package-lock-json.html
@@ -141,9 +141,9 @@
-
+
package-lock.json
- @10.8.3
+ @10.9.0
A manifestation of the manifest
diff --git a/deps/npm/docs/output/using-npm/config.html b/deps/npm/docs/output/using-npm/config.html
index 0bc94abe755..5d70bb7e8e8 100644
--- a/deps/npm/docs/output/using-npm/config.html
+++ b/deps/npm/docs/output/using-npm/config.html
@@ -141,9 +141,9 @@
-
+
config
- @10.8.3
+ @10.9.0
More than you probably want to know about npm configuration
diff --git a/deps/npm/docs/output/using-npm/dependency-selectors.html b/deps/npm/docs/output/using-npm/dependency-selectors.html
index 38c14547a1d..008377b3ab5 100644
--- a/deps/npm/docs/output/using-npm/dependency-selectors.html
+++ b/deps/npm/docs/output/using-npm/dependency-selectors.html
@@ -141,9 +141,9 @@
-
+
Dependency Selector Syntax & Querying
- @10.8.3
+ @10.9.0
Dependency Selector Syntax & Querying
diff --git a/deps/npm/docs/output/using-npm/developers.html b/deps/npm/docs/output/using-npm/developers.html
index fbb68f149c8..e75223cd623 100644
--- a/deps/npm/docs/output/using-npm/developers.html
+++ b/deps/npm/docs/output/using-npm/developers.html
@@ -141,9 +141,9 @@
-
+
developers
- @10.8.3
+ @10.9.0
Developer Guide
diff --git a/deps/npm/docs/output/using-npm/logging.html b/deps/npm/docs/output/using-npm/logging.html
index 9943e1a6e81..5499bd53e28 100644
--- a/deps/npm/docs/output/using-npm/logging.html
+++ b/deps/npm/docs/output/using-npm/logging.html
@@ -141,9 +141,9 @@
-
+
Logging
- @10.8.3
+ @10.9.0
Why, What & How We Log
diff --git a/deps/npm/docs/output/using-npm/orgs.html b/deps/npm/docs/output/using-npm/orgs.html
index 487f16e322e..c9ed80f6421 100644
--- a/deps/npm/docs/output/using-npm/orgs.html
+++ b/deps/npm/docs/output/using-npm/orgs.html
@@ -141,9 +141,9 @@
-
+
orgs
- @10.8.3
+ @10.9.0
Working with Teams & Orgs
diff --git a/deps/npm/docs/output/using-npm/package-spec.html b/deps/npm/docs/output/using-npm/package-spec.html
index c485b897fb2..a370699bb55 100644
--- a/deps/npm/docs/output/using-npm/package-spec.html
+++ b/deps/npm/docs/output/using-npm/package-spec.html
@@ -141,9 +141,9 @@
-
+
package-spec
- @10.8.3
+ @10.9.0
Package name specifier
diff --git a/deps/npm/docs/output/using-npm/registry.html b/deps/npm/docs/output/using-npm/registry.html
index 285769976fb..9d9f8a53933 100644
--- a/deps/npm/docs/output/using-npm/registry.html
+++ b/deps/npm/docs/output/using-npm/registry.html
@@ -141,9 +141,9 @@
-
+
registry
- @10.8.3
+ @10.9.0
The JavaScript Package Registry
diff --git a/deps/npm/docs/output/using-npm/removal.html b/deps/npm/docs/output/using-npm/removal.html
index 207835c29ca..2668dd9dd8a 100644
--- a/deps/npm/docs/output/using-npm/removal.html
+++ b/deps/npm/docs/output/using-npm/removal.html
@@ -141,9 +141,9 @@
-
+
removal
- @10.8.3
+ @10.9.0
Cleaning the Slate
diff --git a/deps/npm/docs/output/using-npm/scope.html b/deps/npm/docs/output/using-npm/scope.html
index a536b06726e..0441f8ef703 100644
--- a/deps/npm/docs/output/using-npm/scope.html
+++ b/deps/npm/docs/output/using-npm/scope.html
@@ -141,9 +141,9 @@
-
+
scope
- @10.8.3
+ @10.9.0
Scoped packages
diff --git a/deps/npm/docs/output/using-npm/scripts.html b/deps/npm/docs/output/using-npm/scripts.html
index a22d6c9d8ec..ff37c2ede18 100644
--- a/deps/npm/docs/output/using-npm/scripts.html
+++ b/deps/npm/docs/output/using-npm/scripts.html
@@ -141,9 +141,9 @@
-
+
scripts
- @10.8.3
+ @10.9.0
How npm handles the "scripts" field
diff --git a/deps/npm/docs/output/using-npm/workspaces.html b/deps/npm/docs/output/using-npm/workspaces.html
index b3ebf5c300c..19195cc868d 100644
--- a/deps/npm/docs/output/using-npm/workspaces.html
+++ b/deps/npm/docs/output/using-npm/workspaces.html
@@ -141,9 +141,9 @@
-
+
workspaces
- @10.8.3
+ @10.9.0
Working with workspaces
diff --git a/deps/npm/lib/arborist-cmd.js b/deps/npm/lib/arborist-cmd.js
index 9d247d02fa1..f0167887b06 100644
--- a/deps/npm/lib/arborist-cmd.js
+++ b/deps/npm/lib/arborist-cmd.js
@@ -18,6 +18,7 @@ class ArboristCmd extends BaseCommand {
static workspaces = true
static ignoreImplicitWorkspace = false
+ static checkDevEngines = true
constructor (npm) {
super(npm)
diff --git a/deps/npm/lib/base-cmd.js b/deps/npm/lib/base-cmd.js
index 99ae6d7f43c..941ffefad2e 100644
--- a/deps/npm/lib/base-cmd.js
+++ b/deps/npm/lib/base-cmd.js
@@ -1,10 +1,12 @@
const { log } = require('proc-log')
class BaseCommand {
+ // these defaults can be overridden by individual commands
static workspaces = false
static ignoreImplicitWorkspace = true
+ static checkDevEngines = false
- // these are all overridden by individual commands
+ // these should always be overridden by individual commands
static name = null
static description = null
static params = null
@@ -129,6 +131,63 @@ class BaseCommand {
}
}
+ // Checks the devEngines entry in the package.json at this.localPrefix
+ async checkDevEngines () {
+ const force = this.npm.flatOptions.force
+
+ const { devEngines } = await require('@npmcli/package-json')
+ .normalize(this.npm.config.localPrefix)
+ .then(p => p.content)
+ .catch(() => ({}))
+
+ if (typeof devEngines === 'undefined') {
+ return
+ }
+
+ const { checkDevEngines, currentEnv } = require('npm-install-checks')
+ const current = currentEnv.devEngines({
+ nodeVersion: this.npm.nodeVersion,
+ npmVersion: this.npm.version,
+ })
+
+ const failures = checkDevEngines(devEngines, current)
+ const warnings = failures.filter(f => f.isWarn)
+ const errors = failures.filter(f => f.isError)
+
+ const genMsg = (failure, i = 0) => {
+ return [...new Set([
+ // eslint-disable-next-line
+ i === 0 ? 'The developer of this package has specified the following through devEngines' : '',
+ `${failure.message}`,
+ `${failure.errors.map(e => e.message).join('\n')}`,
+ ])].filter(v => v).join('\n')
+ }
+
+ [...warnings, ...(force ? errors : [])].forEach((failure, i) => {
+ const message = genMsg(failure, i)
+ log.warn('EBADDEVENGINES', message)
+ log.warn('EBADDEVENGINES', {
+ current: failure.current,
+ required: failure.required,
+ })
+ })
+
+ if (force) {
+ return
+ }
+
+ if (errors.length) {
+ const failure = errors[0]
+ const message = genMsg(failure)
+ throw Object.assign(new Error(message), {
+ engine: failure.engine,
+ code: 'EBADDEVENGINES',
+ current: failure.current,
+ required: failure.required,
+ })
+ }
+ }
+
async setWorkspaces () {
const { relative } = require('node:path')
diff --git a/deps/npm/lib/commands/init.js b/deps/npm/lib/commands/init.js
index b8ef3e59ccf..09e8d8522f7 100644
--- a/deps/npm/lib/commands/init.js
+++ b/deps/npm/lib/commands/init.js
@@ -31,7 +31,7 @@ class Init extends BaseCommand {
static name = 'init'
static usage = [
- ' (same as `npx `)',
+ ' (same as `npx create-`)',
'<@scope> (same as `npx <@scope>/create`)',
]
diff --git a/deps/npm/lib/commands/run-script.js b/deps/npm/lib/commands/run-script.js
index 0a139d08af7..50c745d6d9c 100644
--- a/deps/npm/lib/commands/run-script.js
+++ b/deps/npm/lib/commands/run-script.js
@@ -21,6 +21,7 @@ class RunScript extends BaseCommand {
static workspaces = true
static ignoreImplicitWorkspace = false
static isShellout = true
+ static checkDevEngines = true
static async completion (opts, npm) {
const argv = opts.conf.argv.remain
diff --git a/deps/npm/lib/npm.js b/deps/npm/lib/npm.js
index 5563cec21ba..893e032f1ec 100644
--- a/deps/npm/lib/npm.js
+++ b/deps/npm/lib/npm.js
@@ -247,6 +247,10 @@ class Npm {
execWorkspaces = true
}
+ if (command.checkDevEngines && !this.global) {
+ await command.checkDevEngines()
+ }
+
return time.start(`command:${cmd}`, () =>
execWorkspaces ? command.execWorkspaces(args) : command.exec(args))
}
diff --git a/deps/npm/lib/utils/error-message.js b/deps/npm/lib/utils/error-message.js
index fc47c909069..4b5582ac8e1 100644
--- a/deps/npm/lib/utils/error-message.js
+++ b/deps/npm/lib/utils/error-message.js
@@ -200,6 +200,13 @@ const errorMessage = (er, npm) => {
].join('\n')])
break
+ case 'EBADDEVENGINES': {
+ const { current, required } = er
+ summary.push(['EBADDEVENGINES', er.message])
+ detail.push(['EBADDEVENGINES', { current, required }])
+ break
+ }
+
case 'EBADPLATFORM': {
const actual = er.current
const expected = { ...er.required }
diff --git a/deps/npm/lib/utils/ping.js b/deps/npm/lib/utils/ping.js
index 00956d0c163..1c8c9e827a4 100644
--- a/deps/npm/lib/utils/ping.js
+++ b/deps/npm/lib/utils/ping.js
@@ -2,6 +2,6 @@
// used by the ping and doctor commands
const fetch = require('npm-registry-fetch')
module.exports = async (flatOptions) => {
- const res = await fetch('/-/ping?write=true', flatOptions)
+ const res = await fetch('/-/ping', { ...flatOptions, cache: false })
return res.json().catch(() => ({}))
}
diff --git a/deps/npm/man/man1/npm-access.1 b/deps/npm/man/man1/npm-access.1
index d3e622c61d5..602193f3b8e 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-ACCESS" "1" "October 2024" "NPM@10.9.0" ""
.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 a670b65c627..467384ec0ec 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-ADDUSER" "1" "October 2024" "NPM@10.9.0" ""
.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 7b8e907cd65..64bf5d5461a 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-AUDIT" "1" "October 2024" "NPM@10.9.0" ""
.SH "NAME"
\fBnpm-audit\fR - Run a security audit
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-bugs.1 b/deps/npm/man/man1/npm-bugs.1
index d20ac537779..c25b04b6814 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-BUGS" "1" "October 2024" "NPM@10.9.0" ""
.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 ae80a0ed6d8..e9da044a5b4 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-CACHE" "1" "October 2024" "NPM@10.9.0" ""
.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 840ef475bd9..1ad1419cb1f 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-CI" "1" "October 2024" "NPM@10.9.0" ""
.SH "NAME"
\fBnpm-ci\fR - Clean install a project
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-completion.1 b/deps/npm/man/man1/npm-completion.1
index ad7294e0ea4..6f246c436ce 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-COMPLETION" "1" "October 2024" "NPM@10.9.0" ""
.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 10828f3752a..1bef58e188b 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-CONFIG" "1" "October 2024" "NPM@10.9.0" ""
.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 3c3621f37b3..b1e21f0478e 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-DEDUPE" "1" "October 2024" "NPM@10.9.0" ""
.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 a7f7089a9c8..31e9e56cd95 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-DEPRECATE" "1" "October 2024" "NPM@10.9.0" ""
.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 4d3f9f6955a..c29ae3266d1 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-DIFF" "1" "October 2024" "NPM@10.9.0" ""
.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 d8451c181f1..46e5cf8ac34 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-DIST-TAG" "1" "October 2024" "NPM@10.9.0" ""
.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 f6398139688..6cda2d87abe 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-DOCS" "1" "October 2024" "NPM@10.9.0" ""
.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 ba1cff38927..7a67ed1e6b3 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-DOCTOR" "1" "October 2024" "NPM@10.9.0" ""
.SH "NAME"
\fBnpm-doctor\fR - Check the health of your npm environment
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-edit.1 b/deps/npm/man/man1/npm-edit.1
index 6beaa7b3844..5ae7e24b67d 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-EDIT" "1" "October 2024" "NPM@10.9.0" ""
.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 3e267f6eaae..20c21e67919 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-EXEC" "1" "October 2024" "NPM@10.9.0" ""
.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 60f19d7e1a8..65ef0e086e2 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-EXPLAIN" "1" "October 2024" "NPM@10.9.0" ""
.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 3c1abf7b4db..6b92a81c2ab 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-EXPLORE" "1" "October 2024" "NPM@10.9.0" ""
.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 13448092746..261313e1b23 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-FIND-DUPES" "1" "October 2024" "NPM@10.9.0" ""
.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 25a3b60faa0..b87d57d20c0 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-FUND" "1" "October 2024" "NPM@10.9.0" ""
.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 60713918433..9660ca29697 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-HELP-SEARCH" "1" "October 2024" "NPM@10.9.0" ""
.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 97b15b6eeab..a8c70fdc88a 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-HELP" "1" "October 2024" "NPM@10.9.0" ""
.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 b7362d6e2ef..2c07a5afadb 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-HOOK" "1" "October 2024" "NPM@10.9.0" ""
.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 4639e3031da..cb7339dc0f4 100644
--- a/deps/npm/man/man1/npm-init.1
+++ b/deps/npm/man/man1/npm-init.1
@@ -1,11 +1,11 @@
-.TH "NPM-INIT" "1" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-INIT" "1" "October 2024" "NPM@10.9.0" ""
.SH "NAME"
\fBnpm-init\fR - Create a package.json file
.SS "Synopsis"
.P
.RS 2
.nf
-npm init (same as `npx `)
+npm init (same as `npx create-`)
npm init <@scope> (same as `npx <@scope>/create`)
aliases: create, innit
diff --git a/deps/npm/man/man1/npm-install-ci-test.1 b/deps/npm/man/man1/npm-install-ci-test.1
index 3f8e17b9c69..52defde693a 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-INSTALL-CI-TEST" "1" "October 2024" "NPM@10.9.0" ""
.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 6d3c5aca8c6..e2023e1a985 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-INSTALL-TEST" "1" "October 2024" "NPM@10.9.0" ""
.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 3d51d664fb6..59b3a8c81ac 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-INSTALL" "1" "October 2024" "NPM@10.9.0" ""
.SH "NAME"
\fBnpm-install\fR - Install a package
.SS "Synopsis"
@@ -173,8 +173,6 @@ npm install readable-stream --save-exact
npm install ansi-regex --save-bundle
.fi
.RE
-.P
-\fBNote\fR: If there is a file or folder named \fB\fR in the current working directory, then it will try to install that, and only try to fetch the package by name if it is not valid.
.IP \(bu 4
\fBnpm install @npm:\fR:
.P
diff --git a/deps/npm/man/man1/npm-link.1 b/deps/npm/man/man1/npm-link.1
index b2d6e243af7..e6106495400 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-LINK" "1" "October 2024" "NPM@10.9.0" ""
.SH "NAME"
\fBnpm-link\fR - Symlink a package folder
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-login.1 b/deps/npm/man/man1/npm-login.1
index ae61f04aeba..36f2bf2d0f3 100644
--- a/deps/npm/man/man1/npm-login.1
+++ b/deps/npm/man/man1/npm-login.1
@@ -1,4 +1,4 @@
-.TH "NPM-LOGIN" "1" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-LOGIN" "1" "October 2024" "NPM@10.9.0" ""
.SH "NAME"
\fBnpm-login\fR - Login to a registry user account
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-logout.1 b/deps/npm/man/man1/npm-logout.1
index 5601da1924d..78cba39ccd8 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-LOGOUT" "1" "October 2024" "NPM@10.9.0" ""
.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 0775be95e46..b0364fe1531 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-LS" "1" "October 2024" "NPM@10.9.0" ""
.SH "NAME"
\fBnpm-ls\fR - List installed packages
.SS "Synopsis"
@@ -20,7 +20,7 @@ Positional arguments are \fBname@version-range\fR identifiers, which will limit
.P
.RS 2
.nf
-npm@10.8.3 /path/to/npm
+npm@10.9.0 /path/to/npm
└─┬ init-package-json@0.0.4
└── promzard@0.1.5
.fi
diff --git a/deps/npm/man/man1/npm-org.1 b/deps/npm/man/man1/npm-org.1
index 782162959b8..0465a6b5bdd 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-ORG" "1" "October 2024" "NPM@10.9.0" ""
.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 bd22481ccb4..ad1cf078236 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-OUTDATED" "1" "October 2024" "NPM@10.9.0" ""
.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 22202d1d46e..5842e5a51d1 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-OWNER" "1" "October 2024" "NPM@10.9.0" ""
.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 dbe579ed7ce..6cc2acd4b58 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-PACK" "1" "October 2024" "NPM@10.9.0" ""
.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 21318c02556..ad03cbbb6a1 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-PING" "1" "October 2024" "NPM@10.9.0" ""
.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 05c3b50411b..2f45876234e 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-PKG" "1" "October 2024" "NPM@10.9.0" ""
.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 9745f3370c8..cac44344c71 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-PREFIX" "1" "October 2024" "NPM@10.9.0" ""
.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 8171db696c6..28e3f41244a 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-PROFILE" "1" "October 2024" "NPM@10.9.0" ""
.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 cd065ff5a58..7634c75f090 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-PRUNE" "1" "October 2024" "NPM@10.9.0" ""
.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 17572afaaa8..c6724b6fe2c 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-PUBLISH" "1" "October 2024" "NPM@10.9.0" ""
.SH "NAME"
\fBnpm-publish\fR - Publish a package
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-query.1 b/deps/npm/man/man1/npm-query.1
index 8b395876b68..0a3c6e665e7 100644
--- a/deps/npm/man/man1/npm-query.1
+++ b/deps/npm/man/man1/npm-query.1
@@ -1,4 +1,4 @@
-.TH "NPM-QUERY" "1" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-QUERY" "1" "October 2024" "NPM@10.9.0" ""
.SH "NAME"
\fBnpm-query\fR - Dependency selector query
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-rebuild.1 b/deps/npm/man/man1/npm-rebuild.1
index d500181cd66..e537cec373e 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-REBUILD" "1" "October 2024" "NPM@10.9.0" ""
.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 0592faf7559..869541f6faa 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-REPO" "1" "October 2024" "NPM@10.9.0" ""
.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 c92a1acede0..b0e3b0deead 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-RESTART" "1" "October 2024" "NPM@10.9.0" ""
.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 8daf0430c4e..94a132557e3 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-ROOT" "1" "October 2024" "NPM@10.9.0" ""
.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 b3374d7cdc5..424c733d6a0 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-RUN-SCRIPT" "1" "October 2024" "NPM@10.9.0" ""
.SH "NAME"
\fBnpm-run-script\fR - Run arbitrary package scripts
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-sbom.1 b/deps/npm/man/man1/npm-sbom.1
index 70423b46fdf..7bb8199c8b1 100644
--- a/deps/npm/man/man1/npm-sbom.1
+++ b/deps/npm/man/man1/npm-sbom.1
@@ -1,4 +1,4 @@
-.TH "NPM-SBOM" "1" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-SBOM" "1" "October 2024" "NPM@10.9.0" ""
.SH "NAME"
\fBnpm-sbom\fR - Generate a Software Bill of Materials (SBOM)
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-search.1 b/deps/npm/man/man1/npm-search.1
index c72a963f577..4fe67890bc9 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-SEARCH" "1" "October 2024" "NPM@10.9.0" ""
.SH "NAME"
\fBnpm-search\fR - Search for packages
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-shrinkwrap.1 b/deps/npm/man/man1/npm-shrinkwrap.1
index 1f677474153..ed3c0cb03cc 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-SHRINKWRAP" "1" "October 2024" "NPM@10.9.0" ""
.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 f441999ab56..83d0ff230ec 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-STAR" "1" "October 2024" "NPM@10.9.0" ""
.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 5f22addcb31..bdeffec7a3b 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-STARS" "1" "October 2024" "NPM@10.9.0" ""
.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 1e2c8265972..c3cb48c6f72 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-START" "1" "October 2024" "NPM@10.9.0" ""
.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 546dc8bef5d..36ef105209b 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-STOP" "1" "October 2024" "NPM@10.9.0" ""
.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 c8e4286873d..6712c8f92b2 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-TEAM" "1" "October 2024" "NPM@10.9.0" ""
.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 2edba4e88bb..5e63e9c6d76 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-TEST" "1" "October 2024" "NPM@10.9.0" ""
.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 20bda1a7ef3..29a2c361574 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-TOKEN" "1" "October 2024" "NPM@10.9.0" ""
.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 052c11b8085..0c10a60c1f0 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-UNINSTALL" "1" "October 2024" "NPM@10.9.0" ""
.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 fd7ee3066e9..098af2e5931 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-UNPUBLISH" "1" "October 2024" "NPM@10.9.0" ""
.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 f5e409f0917..7326984aa8b 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-UNSTAR" "1" "October 2024" "NPM@10.9.0" ""
.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 dd9d503de4e..797a9e601cf 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-UPDATE" "1" "October 2024" "NPM@10.9.0" ""
.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 5e6d0beefac..d0a7dcee6fe 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-VERSION" "1" "October 2024" "NPM@10.9.0" ""
.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 baca4b0a97f..2925f8d7d2c 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-VIEW" "1" "October 2024" "NPM@10.9.0" ""
.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 40caa068abd..f283db5c9d2 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-WHOAMI" "1" "October 2024" "NPM@10.9.0" ""
.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 471e5b5f7c1..b2034bc50fa 100644
--- a/deps/npm/man/man1/npm.1
+++ b/deps/npm/man/man1/npm.1
@@ -1,4 +1,4 @@
-.TH "NPM" "1" "August 2024" "NPM@10.8.3" ""
+.TH "NPM" "1" "October 2024" "NPM@10.9.0" ""
.SH "NAME"
\fBnpm\fR - javascript package manager
.SS "Synopsis"
@@ -12,7 +12,7 @@ npm
Note: This command is unaware of workspaces.
.SS "Version"
.P
-10.8.3
+10.9.0
.SS "Description"
.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 conflicts intelligently.
diff --git a/deps/npm/man/man1/npx.1 b/deps/npm/man/man1/npx.1
index 0849e0d1094..a1000443cc6 100644
--- a/deps/npm/man/man1/npx.1
+++ b/deps/npm/man/man1/npx.1
@@ -1,4 +1,4 @@
-.TH "NPX" "1" "August 2024" "NPM@10.8.3" ""
+.TH "NPX" "1" "October 2024" "NPM@10.9.0" ""
.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 6e4b89a844f..6e3045729c4 100644
--- a/deps/npm/man/man5/folders.5
+++ b/deps/npm/man/man5/folders.5
@@ -1,4 +1,4 @@
-.TH "FOLDERS" "5" "August 2024" "NPM@10.8.3" ""
+.TH "FOLDERS" "5" "October 2024" "NPM@10.9.0" ""
.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 e5d1e892131..f5fabf02d74 100644
--- a/deps/npm/man/man5/install.5
+++ b/deps/npm/man/man5/install.5
@@ -1,4 +1,4 @@
-.TH "INSTALL" "5" "August 2024" "NPM@10.8.3" ""
+.TH "INSTALL" "5" "October 2024" "NPM@10.9.0" ""
.SH "NAME"
\fBinstall\fR - Download and install node and npm
.SS "Description"
diff --git a/deps/npm/man/man5/npm-global.5 b/deps/npm/man/man5/npm-global.5
index 6e4b89a844f..6e3045729c4 100644
--- a/deps/npm/man/man5/npm-global.5
+++ b/deps/npm/man/man5/npm-global.5
@@ -1,4 +1,4 @@
-.TH "FOLDERS" "5" "August 2024" "NPM@10.8.3" ""
+.TH "FOLDERS" "5" "October 2024" "NPM@10.9.0" ""
.SH "NAME"
\fBfolders\fR - Folder Structures Used by npm
.SS "Description"
diff --git a/deps/npm/man/man5/npm-json.5 b/deps/npm/man/man5/npm-json.5
index b167d6e0e92..49773dda01d 100644
--- a/deps/npm/man/man5/npm-json.5
+++ b/deps/npm/man/man5/npm-json.5
@@ -1,4 +1,4 @@
-.TH "PACKAGE.JSON" "5" "August 2024" "NPM@10.8.3" ""
+.TH "PACKAGE.JSON" "5" "October 2024" "NPM@10.9.0" ""
.SH "NAME"
\fBpackage.json\fR - Specifics of npm's package.json handling
.SS "Description"
@@ -338,6 +338,9 @@ Most of these ignored files can be included specifically if included in the \fBf
.P
These can not be included.
+.SS "exports"
+.P
+The "exports" provides a modern alternative to "main" allowing multiple entry points to be defined, conditional entry resolution support between environments, and preventing any other entry points besides those defined in "exports". This encapsulation allows module authors to clearly define the public interface for their package. For more details see the \fBnode.js documentation on package entry points\fR \fI\(lahttps://nodejs.org/api/packages.html#package-entry-points\(ra\fR
.SS "main"
.P
The main field is a module ID that is the primary entry point to your program. That is, if your package is named \fBfoo\fR, and a user installs it, and then does \fBrequire("foo")\fR, then your main module's exports object will be returned.
@@ -1041,6 +1044,35 @@ Like the \fBos\fR option, you can also block architectures:
.RE
.P
The host architecture is determined by \fBprocess.arch\fR
+.SS "devEngines"
+.P
+The \fBdevEngines\fR field aids engineers working on a codebase to all be using the same tooling.
+.P
+You can specify a \fBdevEngines\fR property in your \fBpackage.json\fR which will run before \fBinstall\fR, \fBci\fR, and \fBrun\fR commands.
+.RS 0
+.P
+Note: \fBengines\fR and \fBdevEngines\fR differ in object shape. They also function very differently. \fBengines\fR is designed to alert the user when a dependency uses a differening npm or node version that the project it's being used in, whereas \fBdevEngines\fR is used to alert people interacting with the source code of a project.
+.RE 0
+
+.P
+The supported keys under the \fBdevEngines\fR property are \fBcpu\fR, \fBos\fR, \fBlibc\fR, \fBruntime\fR, and \fBpackageManager\fR. Each property can be an object or an array of objects. Objects must contain \fBname\fR, and optionally can specify \fBversion\fR, and \fBonFail\fR. \fBonFail\fR can be \fBwarn\fR, \fBerror\fR, or \fBignore\fR, and if left undefined is of the same value as \fBerror\fR. \fBnpm\fR will assume that you're running with \fBnode\fR. Here's an example of a project that will fail if the environment is not \fBnode\fR and \fBnpm\fR. If you set \fBruntime.name\fR or \fBpackageManager.name\fR to any other string, it will fail within the npm CLI.
+.P
+.RS 2
+.nf
+{
+ "devEngines": {
+ "runtime": {
+ "name": "node",
+ "onFail": "error"
+ },
+ "packageManager": {
+ "name": "npm",
+ "onFail": "error"
+ }
+ }
+}
+.fi
+.RE
.SS "private"
.P
If you set \fB"private": true\fR in your package.json, then npm will refuse to publish it.
diff --git a/deps/npm/man/man5/npm-shrinkwrap-json.5 b/deps/npm/man/man5/npm-shrinkwrap-json.5
index 13353dc1e6a..d1f394d23aa 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" "August 2024" "NPM@10.8.3" ""
+.TH "NPM-SHRINKWRAP.JSON" "5" "October 2024" "NPM@10.9.0" ""
.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 9f439429b53..3b78f989c23 100644
--- a/deps/npm/man/man5/npmrc.5
+++ b/deps/npm/man/man5/npmrc.5
@@ -1,4 +1,4 @@
-.TH "NPMRC" "5" "August 2024" "NPM@10.8.3" ""
+.TH "NPMRC" "5" "October 2024" "NPM@10.9.0" ""
.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 b167d6e0e92..49773dda01d 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" "August 2024" "NPM@10.8.3" ""
+.TH "PACKAGE.JSON" "5" "October 2024" "NPM@10.9.0" ""
.SH "NAME"
\fBpackage.json\fR - Specifics of npm's package.json handling
.SS "Description"
@@ -338,6 +338,9 @@ Most of these ignored files can be included specifically if included in the \fBf
.P
These can not be included.
+.SS "exports"
+.P
+The "exports" provides a modern alternative to "main" allowing multiple entry points to be defined, conditional entry resolution support between environments, and preventing any other entry points besides those defined in "exports". This encapsulation allows module authors to clearly define the public interface for their package. For more details see the \fBnode.js documentation on package entry points\fR \fI\(lahttps://nodejs.org/api/packages.html#package-entry-points\(ra\fR
.SS "main"
.P
The main field is a module ID that is the primary entry point to your program. That is, if your package is named \fBfoo\fR, and a user installs it, and then does \fBrequire("foo")\fR, then your main module's exports object will be returned.
@@ -1041,6 +1044,35 @@ Like the \fBos\fR option, you can also block architectures:
.RE
.P
The host architecture is determined by \fBprocess.arch\fR
+.SS "devEngines"
+.P
+The \fBdevEngines\fR field aids engineers working on a codebase to all be using the same tooling.
+.P
+You can specify a \fBdevEngines\fR property in your \fBpackage.json\fR which will run before \fBinstall\fR, \fBci\fR, and \fBrun\fR commands.
+.RS 0
+.P
+Note: \fBengines\fR and \fBdevEngines\fR differ in object shape. They also function very differently. \fBengines\fR is designed to alert the user when a dependency uses a differening npm or node version that the project it's being used in, whereas \fBdevEngines\fR is used to alert people interacting with the source code of a project.
+.RE 0
+
+.P
+The supported keys under the \fBdevEngines\fR property are \fBcpu\fR, \fBos\fR, \fBlibc\fR, \fBruntime\fR, and \fBpackageManager\fR. Each property can be an object or an array of objects. Objects must contain \fBname\fR, and optionally can specify \fBversion\fR, and \fBonFail\fR. \fBonFail\fR can be \fBwarn\fR, \fBerror\fR, or \fBignore\fR, and if left undefined is of the same value as \fBerror\fR. \fBnpm\fR will assume that you're running with \fBnode\fR. Here's an example of a project that will fail if the environment is not \fBnode\fR and \fBnpm\fR. If you set \fBruntime.name\fR or \fBpackageManager.name\fR to any other string, it will fail within the npm CLI.
+.P
+.RS 2
+.nf
+{
+ "devEngines": {
+ "runtime": {
+ "name": "node",
+ "onFail": "error"
+ },
+ "packageManager": {
+ "name": "npm",
+ "onFail": "error"
+ }
+ }
+}
+.fi
+.RE
.SS "private"
.P
If you set \fB"private": true\fR in your package.json, then npm will refuse to publish it.
diff --git a/deps/npm/man/man5/package-lock-json.5 b/deps/npm/man/man5/package-lock-json.5
index 183a8fbff85..df3dcca1c4f 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" "August 2024" "NPM@10.8.3" ""
+.TH "PACKAGE-LOCK.JSON" "5" "October 2024" "NPM@10.9.0" ""
.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 0cd1e963107..ee166c9d4cc 100644
--- a/deps/npm/man/man7/config.7
+++ b/deps/npm/man/man7/config.7
@@ -1,4 +1,4 @@
-.TH "CONFIG" "7" "August 2024" "NPM@10.8.3" ""
+.TH "CONFIG" "7" "October 2024" "NPM@10.9.0" ""
.SH "NAME"
\fBconfig\fR - More than you probably want to know about npm configuration
.SS "Description"
diff --git a/deps/npm/man/man7/dependency-selectors.7 b/deps/npm/man/man7/dependency-selectors.7
index 92cbf923c15..54d80fee4dc 100644
--- a/deps/npm/man/man7/dependency-selectors.7
+++ b/deps/npm/man/man7/dependency-selectors.7
@@ -1,4 +1,4 @@
-.TH "QUERYING" "7" "August 2024" "NPM@10.8.3" ""
+.TH "QUERYING" "7" "October 2024" "NPM@10.9.0" ""
.SH "NAME"
\fBQuerying\fR - Dependency Selector Syntax & Querying
.SS "Description"
diff --git a/deps/npm/man/man7/developers.7 b/deps/npm/man/man7/developers.7
index fd7d1342f26..aa907f3f51d 100644
--- a/deps/npm/man/man7/developers.7
+++ b/deps/npm/man/man7/developers.7
@@ -1,4 +1,4 @@
-.TH "DEVELOPERS" "7" "August 2024" "NPM@10.8.3" ""
+.TH "DEVELOPERS" "7" "October 2024" "NPM@10.9.0" ""
.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 3ab9f5c1ddf..f36ae6e4703 100644
--- a/deps/npm/man/man7/logging.7
+++ b/deps/npm/man/man7/logging.7
@@ -1,4 +1,4 @@
-.TH "LOGGING" "7" "August 2024" "NPM@10.8.3" ""
+.TH "LOGGING" "7" "October 2024" "NPM@10.9.0" ""
.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 c3718278543..2866d7dd980 100644
--- a/deps/npm/man/man7/orgs.7
+++ b/deps/npm/man/man7/orgs.7
@@ -1,4 +1,4 @@
-.TH "ORGS" "7" "August 2024" "NPM@10.8.3" ""
+.TH "ORGS" "7" "October 2024" "NPM@10.9.0" ""
.SH "NAME"
\fBorgs\fR - Working with Teams & Orgs
.SS "Description"
diff --git a/deps/npm/man/man7/package-spec.7 b/deps/npm/man/man7/package-spec.7
index 60cbfcd9ff6..0d76a5f3017 100644
--- a/deps/npm/man/man7/package-spec.7
+++ b/deps/npm/man/man7/package-spec.7
@@ -1,4 +1,4 @@
-.TH "PACKAGE-SPEC" "7" "August 2024" "NPM@10.8.3" ""
+.TH "PACKAGE-SPEC" "7" "October 2024" "NPM@10.9.0" ""
.SH "NAME"
\fBpackage-spec\fR - Package name specifier
.SS "Description"
diff --git a/deps/npm/man/man7/registry.7 b/deps/npm/man/man7/registry.7
index a798125ab8d..61ad2702f7b 100644
--- a/deps/npm/man/man7/registry.7
+++ b/deps/npm/man/man7/registry.7
@@ -1,4 +1,4 @@
-.TH "REGISTRY" "7" "August 2024" "NPM@10.8.3" ""
+.TH "REGISTRY" "7" "October 2024" "NPM@10.9.0" ""
.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 9e792b51df7..a76b743553c 100644
--- a/deps/npm/man/man7/removal.7
+++ b/deps/npm/man/man7/removal.7
@@ -1,4 +1,4 @@
-.TH "REMOVAL" "7" "August 2024" "NPM@10.8.3" ""
+.TH "REMOVAL" "7" "October 2024" "NPM@10.9.0" ""
.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 9313cb14436..94c22ccbd9f 100644
--- a/deps/npm/man/man7/scope.7
+++ b/deps/npm/man/man7/scope.7
@@ -1,4 +1,4 @@
-.TH "SCOPE" "7" "August 2024" "NPM@10.8.3" ""
+.TH "SCOPE" "7" "October 2024" "NPM@10.9.0" ""
.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 843454ed9fd..925d3181dc9 100644
--- a/deps/npm/man/man7/scripts.7
+++ b/deps/npm/man/man7/scripts.7
@@ -1,4 +1,4 @@
-.TH "SCRIPTS" "7" "August 2024" "NPM@10.8.3" ""
+.TH "SCRIPTS" "7" "October 2024" "NPM@10.9.0" ""
.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 7459be91ff0..1812eb73eb7 100644
--- a/deps/npm/man/man7/workspaces.7
+++ b/deps/npm/man/man7/workspaces.7
@@ -1,4 +1,4 @@
-.TH "WORKSPACES" "7" "August 2024" "NPM@10.8.3" ""
+.TH "WORKSPACES" "7" "October 2024" "NPM@10.9.0" ""
.SH "NAME"
\fBworkspaces\fR - Working with workspaces
.SS "Description"
diff --git a/deps/npm/node_modules/@isaacs/fs-minipass/LICENSE b/deps/npm/node_modules/@isaacs/fs-minipass/LICENSE
new file mode 100644
index 00000000000..19129e315fe
--- /dev/null
+++ b/deps/npm/node_modules/@isaacs/fs-minipass/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/@isaacs/fs-minipass/dist/commonjs/index.js b/deps/npm/node_modules/@isaacs/fs-minipass/dist/commonjs/index.js
new file mode 100644
index 00000000000..2b3178c5263
--- /dev/null
+++ b/deps/npm/node_modules/@isaacs/fs-minipass/dist/commonjs/index.js
@@ -0,0 +1,430 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.WriteStreamSync = exports.WriteStream = exports.ReadStreamSync = exports.ReadStream = void 0;
+const events_1 = __importDefault(require("events"));
+const fs_1 = __importDefault(require("fs"));
+const minipass_1 = require("minipass");
+const writev = fs_1.default.writev;
+const _autoClose = Symbol('_autoClose');
+const _close = Symbol('_close');
+const _ended = Symbol('_ended');
+const _fd = Symbol('_fd');
+const _finished = Symbol('_finished');
+const _flags = Symbol('_flags');
+const _flush = Symbol('_flush');
+const _handleChunk = Symbol('_handleChunk');
+const _makeBuf = Symbol('_makeBuf');
+const _mode = Symbol('_mode');
+const _needDrain = Symbol('_needDrain');
+const _onerror = Symbol('_onerror');
+const _onopen = Symbol('_onopen');
+const _onread = Symbol('_onread');
+const _onwrite = Symbol('_onwrite');
+const _open = Symbol('_open');
+const _path = Symbol('_path');
+const _pos = Symbol('_pos');
+const _queue = Symbol('_queue');
+const _read = Symbol('_read');
+const _readSize = Symbol('_readSize');
+const _reading = Symbol('_reading');
+const _remain = Symbol('_remain');
+const _size = Symbol('_size');
+const _write = Symbol('_write');
+const _writing = Symbol('_writing');
+const _defaultFlag = Symbol('_defaultFlag');
+const _errored = Symbol('_errored');
+class ReadStream extends minipass_1.Minipass {
+ [_errored] = false;
+ [_fd];
+ [_path];
+ [_readSize];
+ [_reading] = false;
+ [_size];
+ [_remain];
+ [_autoClose];
+ constructor(path, opt) {
+ opt = opt || {};
+ super(opt);
+ this.readable = true;
+ this.writable = false;
+ if (typeof path !== 'string') {
+ throw new TypeError('path must be a string');
+ }
+ this[_errored] = false;
+ this[_fd] = typeof opt.fd === 'number' ? opt.fd : undefined;
+ this[_path] = path;
+ this[_readSize] = opt.readSize || 16 * 1024 * 1024;
+ this[_reading] = false;
+ this[_size] = typeof opt.size === 'number' ? opt.size : Infinity;
+ this[_remain] = this[_size];
+ this[_autoClose] =
+ typeof opt.autoClose === 'boolean' ? opt.autoClose : true;
+ if (typeof this[_fd] === 'number') {
+ this[_read]();
+ }
+ else {
+ this[_open]();
+ }
+ }
+ get fd() {
+ return this[_fd];
+ }
+ get path() {
+ return this[_path];
+ }
+ //@ts-ignore
+ write() {
+ throw new TypeError('this is a readable stream');
+ }
+ //@ts-ignore
+ end() {
+ throw new TypeError('this is a readable stream');
+ }
+ [_open]() {
+ fs_1.default.open(this[_path], 'r', (er, fd) => this[_onopen](er, fd));
+ }
+ [_onopen](er, fd) {
+ if (er) {
+ this[_onerror](er);
+ }
+ else {
+ this[_fd] = fd;
+ this.emit('open', fd);
+ this[_read]();
+ }
+ }
+ [_makeBuf]() {
+ return Buffer.allocUnsafe(Math.min(this[_readSize], this[_remain]));
+ }
+ [_read]() {
+ if (!this[_reading]) {
+ this[_reading] = true;
+ const buf = this[_makeBuf]();
+ /* c8 ignore start */
+ if (buf.length === 0) {
+ return process.nextTick(() => this[_onread](null, 0, buf));
+ }
+ /* c8 ignore stop */
+ fs_1.default.read(this[_fd], buf, 0, buf.length, null, (er, br, b) => this[_onread](er, br, b));
+ }
+ }
+ [_onread](er, br, buf) {
+ this[_reading] = false;
+ if (er) {
+ this[_onerror](er);
+ }
+ else if (this[_handleChunk](br, buf)) {
+ this[_read]();
+ }
+ }
+ [_close]() {
+ if (this[_autoClose] && typeof this[_fd] === 'number') {
+ const fd = this[_fd];
+ this[_fd] = undefined;
+ fs_1.default.close(fd, er => er ? this.emit('error', er) : this.emit('close'));
+ }
+ }
+ [_onerror](er) {
+ this[_reading] = true;
+ this[_close]();
+ this.emit('error', er);
+ }
+ [_handleChunk](br, buf) {
+ let ret = false;
+ // no effect if infinite
+ this[_remain] -= br;
+ if (br > 0) {
+ ret = super.write(br < buf.length ? buf.subarray(0, br) : buf);
+ }
+ if (br === 0 || this[_remain] <= 0) {
+ ret = false;
+ this[_close]();
+ super.end();
+ }
+ return ret;
+ }
+ emit(ev, ...args) {
+ switch (ev) {
+ case 'prefinish':
+ case 'finish':
+ return false;
+ case 'drain':
+ if (typeof this[_fd] === 'number') {
+ this[_read]();
+ }
+ return false;
+ case 'error':
+ if (this[_errored]) {
+ return false;
+ }
+ this[_errored] = true;
+ return super.emit(ev, ...args);
+ default:
+ return super.emit(ev, ...args);
+ }
+ }
+}
+exports.ReadStream = ReadStream;
+class ReadStreamSync extends ReadStream {
+ [_open]() {
+ let threw = true;
+ try {
+ this[_onopen](null, fs_1.default.openSync(this[_path], 'r'));
+ threw = false;
+ }
+ finally {
+ if (threw) {
+ this[_close]();
+ }
+ }
+ }
+ [_read]() {
+ let threw = true;
+ try {
+ if (!this[_reading]) {
+ this[_reading] = true;
+ do {
+ const buf = this[_makeBuf]();
+ /* c8 ignore start */
+ const br = buf.length === 0
+ ? 0
+ : fs_1.default.readSync(this[_fd], buf, 0, buf.length, null);
+ /* c8 ignore stop */
+ if (!this[_handleChunk](br, buf)) {
+ break;
+ }
+ } while (true);
+ this[_reading] = false;
+ }
+ threw = false;
+ }
+ finally {
+ if (threw) {
+ this[_close]();
+ }
+ }
+ }
+ [_close]() {
+ if (this[_autoClose] && typeof this[_fd] === 'number') {
+ const fd = this[_fd];
+ this[_fd] = undefined;
+ fs_1.default.closeSync(fd);
+ this.emit('close');
+ }
+ }
+}
+exports.ReadStreamSync = ReadStreamSync;
+class WriteStream extends events_1.default {
+ readable = false;
+ writable = true;
+ [_errored] = false;
+ [_writing] = false;
+ [_ended] = false;
+ [_queue] = [];
+ [_needDrain] = false;
+ [_path];
+ [_mode];
+ [_autoClose];
+ [_fd];
+ [_defaultFlag];
+ [_flags];
+ [_finished] = false;
+ [_pos];
+ constructor(path, opt) {
+ opt = opt || {};
+ super(opt);
+ this[_path] = path;
+ this[_fd] = typeof opt.fd === 'number' ? opt.fd : undefined;
+ this[_mode] = opt.mode === undefined ? 0o666 : opt.mode;
+ this[_pos] = typeof opt.start === 'number' ? opt.start : undefined;
+ this[_autoClose] =
+ typeof opt.autoClose === 'boolean' ? opt.autoClose : true;
+ // truncating makes no sense when writing into the middle
+ const defaultFlag = this[_pos] !== undefined ? 'r+' : 'w';
+ this[_defaultFlag] = opt.flags === undefined;
+ this[_flags] = opt.flags === undefined ? defaultFlag : opt.flags;
+ if (this[_fd] === undefined) {
+ this[_open]();
+ }
+ }
+ emit(ev, ...args) {
+ if (ev === 'error') {
+ if (this[_errored]) {
+ return false;
+ }
+ this[_errored] = true;
+ }
+ return super.emit(ev, ...args);
+ }
+ get fd() {
+ return this[_fd];
+ }
+ get path() {
+ return this[_path];
+ }
+ [_onerror](er) {
+ this[_close]();
+ this[_writing] = true;
+ this.emit('error', er);
+ }
+ [_open]() {
+ fs_1.default.open(this[_path], this[_flags], this[_mode], (er, fd) => this[_onopen](er, fd));
+ }
+ [_onopen](er, fd) {
+ if (this[_defaultFlag] &&
+ this[_flags] === 'r+' &&
+ er &&
+ er.code === 'ENOENT') {
+ this[_flags] = 'w';
+ this[_open]();
+ }
+ else if (er) {
+ this[_onerror](er);
+ }
+ else {
+ this[_fd] = fd;
+ this.emit('open', fd);
+ if (!this[_writing]) {
+ this[_flush]();
+ }
+ }
+ }
+ end(buf, enc) {
+ if (buf) {
+ //@ts-ignore
+ this.write(buf, enc);
+ }
+ this[_ended] = true;
+ // synthetic after-write logic, where drain/finish live
+ if (!this[_writing] &&
+ !this[_queue].length &&
+ typeof this[_fd] === 'number') {
+ this[_onwrite](null, 0);
+ }
+ return this;
+ }
+ write(buf, enc) {
+ if (typeof buf === 'string') {
+ buf = Buffer.from(buf, enc);
+ }
+ if (this[_ended]) {
+ this.emit('error', new Error('write() after end()'));
+ return false;
+ }
+ if (this[_fd] === undefined || this[_writing] || this[_queue].length) {
+ this[_queue].push(buf);
+ this[_needDrain] = true;
+ return false;
+ }
+ this[_writing] = true;
+ this[_write](buf);
+ return true;
+ }
+ [_write](buf) {
+ fs_1.default.write(this[_fd], buf, 0, buf.length, this[_pos], (er, bw) => this[_onwrite](er, bw));
+ }
+ [_onwrite](er, bw) {
+ if (er) {
+ this[_onerror](er);
+ }
+ else {
+ if (this[_pos] !== undefined && typeof bw === 'number') {
+ this[_pos] += bw;
+ }
+ if (this[_queue].length) {
+ this[_flush]();
+ }
+ else {
+ this[_writing] = false;
+ if (this[_ended] && !this[_finished]) {
+ this[_finished] = true;
+ this[_close]();
+ this.emit('finish');
+ }
+ else if (this[_needDrain]) {
+ this[_needDrain] = false;
+ this.emit('drain');
+ }
+ }
+ }
+ }
+ [_flush]() {
+ if (this[_queue].length === 0) {
+ if (this[_ended]) {
+ this[_onwrite](null, 0);
+ }
+ }
+ else if (this[_queue].length === 1) {
+ this[_write](this[_queue].pop());
+ }
+ else {
+ const iovec = this[_queue];
+ this[_queue] = [];
+ writev(this[_fd], iovec, this[_pos], (er, bw) => this[_onwrite](er, bw));
+ }
+ }
+ [_close]() {
+ if (this[_autoClose] && typeof this[_fd] === 'number') {
+ const fd = this[_fd];
+ this[_fd] = undefined;
+ fs_1.default.close(fd, er => er ? this.emit('error', er) : this.emit('close'));
+ }
+ }
+}
+exports.WriteStream = WriteStream;
+class WriteStreamSync extends WriteStream {
+ [_open]() {
+ let fd;
+ // only wrap in a try{} block if we know we'll retry, to avoid
+ // the rethrow obscuring the error's source frame in most cases.
+ if (this[_defaultFlag] && this[_flags] === 'r+') {
+ try {
+ fd = fs_1.default.openSync(this[_path], this[_flags], this[_mode]);
+ }
+ catch (er) {
+ if (er?.code === 'ENOENT') {
+ this[_flags] = 'w';
+ return this[_open]();
+ }
+ else {
+ throw er;
+ }
+ }
+ }
+ else {
+ fd = fs_1.default.openSync(this[_path], this[_flags], this[_mode]);
+ }
+ this[_onopen](null, fd);
+ }
+ [_close]() {
+ if (this[_autoClose] && typeof this[_fd] === 'number') {
+ const fd = this[_fd];
+ this[_fd] = undefined;
+ fs_1.default.closeSync(fd);
+ this.emit('close');
+ }
+ }
+ [_write](buf) {
+ // throw the original, but try to close if it fails
+ let threw = true;
+ try {
+ this[_onwrite](null, fs_1.default.writeSync(this[_fd], buf, 0, buf.length, this[_pos]));
+ threw = false;
+ }
+ finally {
+ if (threw) {
+ try {
+ this[_close]();
+ }
+ catch {
+ // ok error
+ }
+ }
+ }
+ }
+}
+exports.WriteStreamSync = WriteStreamSync;
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/@isaacs/fs-minipass/dist/commonjs/package.json b/deps/npm/node_modules/@isaacs/fs-minipass/dist/commonjs/package.json
new file mode 100644
index 00000000000..5bbefffbabe
--- /dev/null
+++ b/deps/npm/node_modules/@isaacs/fs-minipass/dist/commonjs/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "commonjs"
+}
diff --git a/deps/npm/node_modules/@isaacs/fs-minipass/dist/esm/index.js b/deps/npm/node_modules/@isaacs/fs-minipass/dist/esm/index.js
new file mode 100644
index 00000000000..287a0f614dc
--- /dev/null
+++ b/deps/npm/node_modules/@isaacs/fs-minipass/dist/esm/index.js
@@ -0,0 +1,420 @@
+import EE from 'events';
+import fs from 'fs';
+import { Minipass } from 'minipass';
+const writev = fs.writev;
+const _autoClose = Symbol('_autoClose');
+const _close = Symbol('_close');
+const _ended = Symbol('_ended');
+const _fd = Symbol('_fd');
+const _finished = Symbol('_finished');
+const _flags = Symbol('_flags');
+const _flush = Symbol('_flush');
+const _handleChunk = Symbol('_handleChunk');
+const _makeBuf = Symbol('_makeBuf');
+const _mode = Symbol('_mode');
+const _needDrain = Symbol('_needDrain');
+const _onerror = Symbol('_onerror');
+const _onopen = Symbol('_onopen');
+const _onread = Symbol('_onread');
+const _onwrite = Symbol('_onwrite');
+const _open = Symbol('_open');
+const _path = Symbol('_path');
+const _pos = Symbol('_pos');
+const _queue = Symbol('_queue');
+const _read = Symbol('_read');
+const _readSize = Symbol('_readSize');
+const _reading = Symbol('_reading');
+const _remain = Symbol('_remain');
+const _size = Symbol('_size');
+const _write = Symbol('_write');
+const _writing = Symbol('_writing');
+const _defaultFlag = Symbol('_defaultFlag');
+const _errored = Symbol('_errored');
+export class ReadStream extends Minipass {
+ [_errored] = false;
+ [_fd];
+ [_path];
+ [_readSize];
+ [_reading] = false;
+ [_size];
+ [_remain];
+ [_autoClose];
+ constructor(path, opt) {
+ opt = opt || {};
+ super(opt);
+ this.readable = true;
+ this.writable = false;
+ if (typeof path !== 'string') {
+ throw new TypeError('path must be a string');
+ }
+ this[_errored] = false;
+ this[_fd] = typeof opt.fd === 'number' ? opt.fd : undefined;
+ this[_path] = path;
+ this[_readSize] = opt.readSize || 16 * 1024 * 1024;
+ this[_reading] = false;
+ this[_size] = typeof opt.size === 'number' ? opt.size : Infinity;
+ this[_remain] = this[_size];
+ this[_autoClose] =
+ typeof opt.autoClose === 'boolean' ? opt.autoClose : true;
+ if (typeof this[_fd] === 'number') {
+ this[_read]();
+ }
+ else {
+ this[_open]();
+ }
+ }
+ get fd() {
+ return this[_fd];
+ }
+ get path() {
+ return this[_path];
+ }
+ //@ts-ignore
+ write() {
+ throw new TypeError('this is a readable stream');
+ }
+ //@ts-ignore
+ end() {
+ throw new TypeError('this is a readable stream');
+ }
+ [_open]() {
+ fs.open(this[_path], 'r', (er, fd) => this[_onopen](er, fd));
+ }
+ [_onopen](er, fd) {
+ if (er) {
+ this[_onerror](er);
+ }
+ else {
+ this[_fd] = fd;
+ this.emit('open', fd);
+ this[_read]();
+ }
+ }
+ [_makeBuf]() {
+ return Buffer.allocUnsafe(Math.min(this[_readSize], this[_remain]));
+ }
+ [_read]() {
+ if (!this[_reading]) {
+ this[_reading] = true;
+ const buf = this[_makeBuf]();
+ /* c8 ignore start */
+ if (buf.length === 0) {
+ return process.nextTick(() => this[_onread](null, 0, buf));
+ }
+ /* c8 ignore stop */
+ fs.read(this[_fd], buf, 0, buf.length, null, (er, br, b) => this[_onread](er, br, b));
+ }
+ }
+ [_onread](er, br, buf) {
+ this[_reading] = false;
+ if (er) {
+ this[_onerror](er);
+ }
+ else if (this[_handleChunk](br, buf)) {
+ this[_read]();
+ }
+ }
+ [_close]() {
+ if (this[_autoClose] && typeof this[_fd] === 'number') {
+ const fd = this[_fd];
+ this[_fd] = undefined;
+ fs.close(fd, er => er ? this.emit('error', er) : this.emit('close'));
+ }
+ }
+ [_onerror](er) {
+ this[_reading] = true;
+ this[_close]();
+ this.emit('error', er);
+ }
+ [_handleChunk](br, buf) {
+ let ret = false;
+ // no effect if infinite
+ this[_remain] -= br;
+ if (br > 0) {
+ ret = super.write(br < buf.length ? buf.subarray(0, br) : buf);
+ }
+ if (br === 0 || this[_remain] <= 0) {
+ ret = false;
+ this[_close]();
+ super.end();
+ }
+ return ret;
+ }
+ emit(ev, ...args) {
+ switch (ev) {
+ case 'prefinish':
+ case 'finish':
+ return false;
+ case 'drain':
+ if (typeof this[_fd] === 'number') {
+ this[_read]();
+ }
+ return false;
+ case 'error':
+ if (this[_errored]) {
+ return false;
+ }
+ this[_errored] = true;
+ return super.emit(ev, ...args);
+ default:
+ return super.emit(ev, ...args);
+ }
+ }
+}
+export class ReadStreamSync extends ReadStream {
+ [_open]() {
+ let threw = true;
+ try {
+ this[_onopen](null, fs.openSync(this[_path], 'r'));
+ threw = false;
+ }
+ finally {
+ if (threw) {
+ this[_close]();
+ }
+ }
+ }
+ [_read]() {
+ let threw = true;
+ try {
+ if (!this[_reading]) {
+ this[_reading] = true;
+ do {
+ const buf = this[_makeBuf]();
+ /* c8 ignore start */
+ const br = buf.length === 0
+ ? 0
+ : fs.readSync(this[_fd], buf, 0, buf.length, null);
+ /* c8 ignore stop */
+ if (!this[_handleChunk](br, buf)) {
+ break;
+ }
+ } while (true);
+ this[_reading] = false;
+ }
+ threw = false;
+ }
+ finally {
+ if (threw) {
+ this[_close]();
+ }
+ }
+ }
+ [_close]() {
+ if (this[_autoClose] && typeof this[_fd] === 'number') {
+ const fd = this[_fd];
+ this[_fd] = undefined;
+ fs.closeSync(fd);
+ this.emit('close');
+ }
+ }
+}
+export class WriteStream extends EE {
+ readable = false;
+ writable = true;
+ [_errored] = false;
+ [_writing] = false;
+ [_ended] = false;
+ [_queue] = [];
+ [_needDrain] = false;
+ [_path];
+ [_mode];
+ [_autoClose];
+ [_fd];
+ [_defaultFlag];
+ [_flags];
+ [_finished] = false;
+ [_pos];
+ constructor(path, opt) {
+ opt = opt || {};
+ super(opt);
+ this[_path] = path;
+ this[_fd] = typeof opt.fd === 'number' ? opt.fd : undefined;
+ this[_mode] = opt.mode === undefined ? 0o666 : opt.mode;
+ this[_pos] = typeof opt.start === 'number' ? opt.start : undefined;
+ this[_autoClose] =
+ typeof opt.autoClose === 'boolean' ? opt.autoClose : true;
+ // truncating makes no sense when writing into the middle
+ const defaultFlag = this[_pos] !== undefined ? 'r+' : 'w';
+ this[_defaultFlag] = opt.flags === undefined;
+ this[_flags] = opt.flags === undefined ? defaultFlag : opt.flags;
+ if (this[_fd] === undefined) {
+ this[_open]();
+ }
+ }
+ emit(ev, ...args) {
+ if (ev === 'error') {
+ if (this[_errored]) {
+ return false;
+ }
+ this[_errored] = true;
+ }
+ return super.emit(ev, ...args);
+ }
+ get fd() {
+ return this[_fd];
+ }
+ get path() {
+ return this[_path];
+ }
+ [_onerror](er) {
+ this[_close]();
+ this[_writing] = true;
+ this.emit('error', er);
+ }
+ [_open]() {
+ fs.open(this[_path], this[_flags], this[_mode], (er, fd) => this[_onopen](er, fd));
+ }
+ [_onopen](er, fd) {
+ if (this[_defaultFlag] &&
+ this[_flags] === 'r+' &&
+ er &&
+ er.code === 'ENOENT') {
+ this[_flags] = 'w';
+ this[_open]();
+ }
+ else if (er) {
+ this[_onerror](er);
+ }
+ else {
+ this[_fd] = fd;
+ this.emit('open', fd);
+ if (!this[_writing]) {
+ this[_flush]();
+ }
+ }
+ }
+ end(buf, enc) {
+ if (buf) {
+ //@ts-ignore
+ this.write(buf, enc);
+ }
+ this[_ended] = true;
+ // synthetic after-write logic, where drain/finish live
+ if (!this[_writing] &&
+ !this[_queue].length &&
+ typeof this[_fd] === 'number') {
+ this[_onwrite](null, 0);
+ }
+ return this;
+ }
+ write(buf, enc) {
+ if (typeof buf === 'string') {
+ buf = Buffer.from(buf, enc);
+ }
+ if (this[_ended]) {
+ this.emit('error', new Error('write() after end()'));
+ return false;
+ }
+ if (this[_fd] === undefined || this[_writing] || this[_queue].length) {
+ this[_queue].push(buf);
+ this[_needDrain] = true;
+ return false;
+ }
+ this[_writing] = true;
+ this[_write](buf);
+ return true;
+ }
+ [_write](buf) {
+ fs.write(this[_fd], buf, 0, buf.length, this[_pos], (er, bw) => this[_onwrite](er, bw));
+ }
+ [_onwrite](er, bw) {
+ if (er) {
+ this[_onerror](er);
+ }
+ else {
+ if (this[_pos] !== undefined && typeof bw === 'number') {
+ this[_pos] += bw;
+ }
+ if (this[_queue].length) {
+ this[_flush]();
+ }
+ else {
+ this[_writing] = false;
+ if (this[_ended] && !this[_finished]) {
+ this[_finished] = true;
+ this[_close]();
+ this.emit('finish');
+ }
+ else if (this[_needDrain]) {
+ this[_needDrain] = false;
+ this.emit('drain');
+ }
+ }
+ }
+ }
+ [_flush]() {
+ if (this[_queue].length === 0) {
+ if (this[_ended]) {
+ this[_onwrite](null, 0);
+ }
+ }
+ else if (this[_queue].length === 1) {
+ this[_write](this[_queue].pop());
+ }
+ else {
+ const iovec = this[_queue];
+ this[_queue] = [];
+ writev(this[_fd], iovec, this[_pos], (er, bw) => this[_onwrite](er, bw));
+ }
+ }
+ [_close]() {
+ if (this[_autoClose] && typeof this[_fd] === 'number') {
+ const fd = this[_fd];
+ this[_fd] = undefined;
+ fs.close(fd, er => er ? this.emit('error', er) : this.emit('close'));
+ }
+ }
+}
+export class WriteStreamSync extends WriteStream {
+ [_open]() {
+ let fd;
+ // only wrap in a try{} block if we know we'll retry, to avoid
+ // the rethrow obscuring the error's source frame in most cases.
+ if (this[_defaultFlag] && this[_flags] === 'r+') {
+ try {
+ fd = fs.openSync(this[_path], this[_flags], this[_mode]);
+ }
+ catch (er) {
+ if (er?.code === 'ENOENT') {
+ this[_flags] = 'w';
+ return this[_open]();
+ }
+ else {
+ throw er;
+ }
+ }
+ }
+ else {
+ fd = fs.openSync(this[_path], this[_flags], this[_mode]);
+ }
+ this[_onopen](null, fd);
+ }
+ [_close]() {
+ if (this[_autoClose] && typeof this[_fd] === 'number') {
+ const fd = this[_fd];
+ this[_fd] = undefined;
+ fs.closeSync(fd);
+ this.emit('close');
+ }
+ }
+ [_write](buf) {
+ // throw the original, but try to close if it fails
+ let threw = true;
+ try {
+ this[_onwrite](null, fs.writeSync(this[_fd], buf, 0, buf.length, this[_pos]));
+ threw = false;
+ }
+ finally {
+ if (threw) {
+ try {
+ this[_close]();
+ }
+ catch {
+ // ok error
+ }
+ }
+ }
+ }
+}
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/@isaacs/fs-minipass/dist/esm/package.json b/deps/npm/node_modules/@isaacs/fs-minipass/dist/esm/package.json
new file mode 100644
index 00000000000..3dbc1ca591c
--- /dev/null
+++ b/deps/npm/node_modules/@isaacs/fs-minipass/dist/esm/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "module"
+}
diff --git a/deps/npm/node_modules/@isaacs/fs-minipass/package.json b/deps/npm/node_modules/@isaacs/fs-minipass/package.json
new file mode 100644
index 00000000000..cc4576c4afe
--- /dev/null
+++ b/deps/npm/node_modules/@isaacs/fs-minipass/package.json
@@ -0,0 +1,72 @@
+{
+ "name": "@isaacs/fs-minipass",
+ "version": "4.0.1",
+ "main": "./dist/commonjs/index.js",
+ "scripts": {
+ "prepare": "tshy",
+ "pretest": "npm run prepare",
+ "test": "tap",
+ "preversion": "npm test",
+ "postversion": "npm publish",
+ "prepublishOnly": "git push origin --follow-tags",
+ "format": "prettier --write . --loglevel warn",
+ "typedoc": "typedoc --tsconfig .tshy/esm.json ./src/*.ts"
+ },
+ "keywords": [],
+ "author": "Isaac Z. Schlueter",
+ "license": "ISC",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/npm/fs-minipass.git"
+ },
+ "description": "fs read and write streams based on minipass",
+ "dependencies": {
+ "minipass": "^7.0.4"
+ },
+ "devDependencies": {
+ "@types/node": "^20.11.30",
+ "mutate-fs": "^2.1.1",
+ "prettier": "^3.2.5",
+ "tap": "^18.7.1",
+ "tshy": "^1.12.0",
+ "typedoc": "^0.25.12"
+ },
+ "files": [
+ "dist"
+ ],
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "tshy": {
+ "exports": {
+ "./package.json": "./package.json",
+ ".": "./src/index.ts"
+ }
+ },
+ "exports": {
+ "./package.json": "./package.json",
+ ".": {
+ "import": {
+ "types": "./dist/esm/index.d.ts",
+ "default": "./dist/esm/index.js"
+ },
+ "require": {
+ "types": "./dist/commonjs/index.d.ts",
+ "default": "./dist/commonjs/index.js"
+ }
+ }
+ },
+ "types": "./dist/commonjs/index.d.ts",
+ "type": "module",
+ "prettier": {
+ "semi": false,
+ "printWidth": 75,
+ "tabWidth": 2,
+ "useTabs": false,
+ "singleQuote": true,
+ "jsxSingleQuote": false,
+ "bracketSameLine": true,
+ "arrowParens": "avoid",
+ "endOfLine": "lf"
+ }
+}
diff --git a/deps/npm/node_modules/@npmcli/agent/package.json b/deps/npm/node_modules/@npmcli/agent/package.json
index ef5b4e3228c..4d648fb5dfe 100644
--- a/deps/npm/node_modules/@npmcli/agent/package.json
+++ b/deps/npm/node_modules/@npmcli/agent/package.json
@@ -1,17 +1,18 @@
{
"name": "@npmcli/agent",
- "version": "2.2.2",
+ "version": "3.0.0",
"description": "the http/https agent used by the npm cli",
"main": "lib/index.js",
"scripts": {
"gencerts": "bash scripts/create-cert.sh",
"test": "tap",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
"postlint": "template-oss-check",
"template-oss-apply": "template-oss-apply --force",
- "lintfix": "npm run lint -- --fix",
+ "lintfix": "npm run eslint -- --fix",
"snap": "tap",
- "posttest": "npm run lint"
+ "posttest": "npm run lint",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"author": "GitHub Inc.",
"license": "ISC",
@@ -24,11 +25,11 @@
"lib/"
],
"engines": {
- "node": "^16.14.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.21.3",
+ "version": "4.23.1",
"publish": "true"
},
"dependencies": {
@@ -39,17 +40,16 @@
"socks-proxy-agent": "^8.0.3"
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.21.3",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.1",
"minipass-fetch": "^3.0.3",
"nock": "^13.2.7",
- "semver": "^7.5.4",
- "simple-socks": "^3.1.0",
+ "socksv5": "^0.0.6",
"tap": "^16.3.0"
},
"repository": {
"type": "git",
- "url": "https://github.com/npm/agent.git"
+ "url": "git+https://github.com/npm/agent.git"
},
"tap": {
"nyc-arg": [
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js b/deps/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js
index 06d03bbce7a..6bd4e9407e7 100644
--- a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js
+++ b/deps/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js
@@ -195,7 +195,10 @@ module.exports = cls => class IdealTreeBuilder extends cls {
for (const node of this.idealTree.inventory.values()) {
if (!node.optional) {
try {
- checkEngine(node.package, npmVersion, nodeVersion, this.options.force)
+ // if devEngines is present in the root node we ignore the engines check
+ if (!(node.isRoot && node.package.devEngines)) {
+ checkEngine(node.package, npmVersion, nodeVersion, this.options.force)
+ }
} catch (err) {
if (engineStrict) {
throw err
diff --git a/deps/npm/node_modules/@npmcli/arborist/package.json b/deps/npm/node_modules/@npmcli/arborist/package.json
index 7fec2c6bea3..b1e2b21a254 100644
--- a/deps/npm/node_modules/@npmcli/arborist/package.json
+++ b/deps/npm/node_modules/@npmcli/arborist/package.json
@@ -1,49 +1,49 @@
{
"name": "@npmcli/arborist",
- "version": "7.5.4",
+ "version": "8.0.0",
"description": "Manage node_modules trees",
"dependencies": {
"@isaacs/string-locale-compare": "^1.1.0",
- "@npmcli/fs": "^3.1.1",
- "@npmcli/installed-package-contents": "^2.1.0",
- "@npmcli/map-workspaces": "^3.0.2",
- "@npmcli/metavuln-calculator": "^7.1.1",
- "@npmcli/name-from-folder": "^2.0.0",
- "@npmcli/node-gyp": "^3.0.0",
- "@npmcli/package-json": "^5.1.0",
- "@npmcli/query": "^3.1.0",
- "@npmcli/redact": "^2.0.0",
- "@npmcli/run-script": "^8.1.0",
- "bin-links": "^4.0.4",
- "cacache": "^18.0.3",
+ "@npmcli/fs": "^4.0.0",
+ "@npmcli/installed-package-contents": "^3.0.0",
+ "@npmcli/map-workspaces": "^4.0.1",
+ "@npmcli/metavuln-calculator": "^8.0.0",
+ "@npmcli/name-from-folder": "^3.0.0",
+ "@npmcli/node-gyp": "^4.0.0",
+ "@npmcli/package-json": "^6.0.1",
+ "@npmcli/query": "^4.0.0",
+ "@npmcli/redact": "^3.0.0",
+ "@npmcli/run-script": "^9.0.1",
+ "bin-links": "^5.0.0",
+ "cacache": "^19.0.1",
"common-ancestor-path": "^1.0.1",
- "hosted-git-info": "^7.0.2",
- "json-parse-even-better-errors": "^3.0.2",
+ "hosted-git-info": "^8.0.0",
+ "json-parse-even-better-errors": "^4.0.0",
"json-stringify-nice": "^1.1.4",
"lru-cache": "^10.2.2",
"minimatch": "^9.0.4",
- "nopt": "^7.2.1",
- "npm-install-checks": "^6.2.0",
- "npm-package-arg": "^11.0.2",
- "npm-pick-manifest": "^9.0.1",
- "npm-registry-fetch": "^17.0.1",
- "pacote": "^18.0.6",
- "parse-conflict-json": "^3.0.0",
- "proc-log": "^4.2.0",
- "proggy": "^2.0.0",
+ "nopt": "^8.0.0",
+ "npm-install-checks": "^7.1.0",
+ "npm-package-arg": "^12.0.0",
+ "npm-pick-manifest": "^10.0.0",
+ "npm-registry-fetch": "^18.0.1",
+ "pacote": "^19.0.0",
+ "parse-conflict-json": "^4.0.0",
+ "proc-log": "^5.0.0",
+ "proggy": "^3.0.0",
"promise-all-reject-late": "^1.0.0",
"promise-call-limit": "^3.0.1",
- "read-package-json-fast": "^3.0.2",
+ "read-package-json-fast": "^4.0.0",
"semver": "^7.3.7",
- "ssri": "^10.0.6",
+ "ssri": "^12.0.0",
"treeverse": "^3.0.0",
"walk-up-path": "^3.0.1"
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/eslint-config": "^5.0.1",
"@npmcli/template-oss": "4.23.3",
"benchmark": "^2.1.4",
- "minify-registry-metadata": "^3.0.0",
+ "minify-registry-metadata": "^4.0.0",
"nock": "^13.3.3",
"tap": "^16.3.8",
"tar-stream": "^3.0.0",
@@ -89,7 +89,7 @@
]
},
"engines": {
- "node": "^16.14.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
diff --git a/deps/npm/node_modules/@npmcli/config/package.json b/deps/npm/node_modules/@npmcli/config/package.json
index 6cf2b85438c..18c677393b5 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": "8.3.4",
+ "version": "9.0.0",
"files": [
"bin/",
"lib/"
@@ -31,23 +31,23 @@
]
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/eslint-config": "^5.0.1",
"@npmcli/mock-globals": "^1.0.0",
"@npmcli/template-oss": "4.23.3",
"tap": "^16.3.8"
},
"dependencies": {
- "@npmcli/map-workspaces": "^3.0.2",
- "@npmcli/package-json": "^5.1.1",
+ "@npmcli/map-workspaces": "^4.0.1",
+ "@npmcli/package-json": "^6.0.1",
"ci-info": "^4.0.0",
- "ini": "^4.1.2",
- "nopt": "^7.2.1",
- "proc-log": "^4.2.0",
+ "ini": "^5.0.0",
+ "nopt": "^8.0.0",
+ "proc-log": "^5.0.0",
"semver": "^7.3.5",
"walk-up-path": "^3.0.1"
},
"engines": {
- "node": "^16.14.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
diff --git a/deps/npm/node_modules/@npmcli/fs/package.json b/deps/npm/node_modules/@npmcli/fs/package.json
index 5261a11b780..e4063ec8752 100644
--- a/deps/npm/node_modules/@npmcli/fs/package.json
+++ b/deps/npm/node_modules/@npmcli/fs/package.json
@@ -1,6 +1,6 @@
{
"name": "@npmcli/fs",
- "version": "3.1.1",
+ "version": "4.0.0",
"description": "filesystem utilities for the npm cli",
"main": "lib/index.js",
"files": [
@@ -11,12 +11,13 @@
"snap": "tap",
"test": "tap",
"npmclilint": "npmcli-lint",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
- "lintfix": "npm run lint -- --fix",
+ "lint": "npm run eslint",
+ "lintfix": "npm run eslint -- --fix",
"posttest": "npm run lint",
"postsnap": "npm run lintfix --",
"postlint": "template-oss-check",
- "template-oss-apply": "template-oss-apply --force"
+ "template-oss-apply": "template-oss-apply --force",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"repository": {
"type": "git",
@@ -29,19 +30,20 @@
"author": "GitHub Inc.",
"license": "ISC",
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.22.0",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"tap": "^16.0.1"
},
"dependencies": {
"semver": "^7.3.5"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.22.0"
+ "version": "4.23.3",
+ "publish": true
},
"tap": {
"nyc-arg": [
diff --git a/deps/npm/node_modules/@npmcli/git/package.json b/deps/npm/node_modules/@npmcli/git/package.json
index b6aa4a282cc..2bc6730ba21 100644
--- a/deps/npm/node_modules/@npmcli/git/package.json
+++ b/deps/npm/node_modules/@npmcli/git/package.json
@@ -1,6 +1,6 @@
{
"name": "@npmcli/git",
- "version": "5.0.8",
+ "version": "6.0.1",
"main": "lib/index.js",
"files": [
"bin/",
@@ -14,13 +14,14 @@
"author": "GitHub Inc.",
"license": "ISC",
"scripts": {
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
"snap": "tap",
"test": "tap",
"posttest": "npm run lint",
"postlint": "template-oss-check",
- "lintfix": "npm run lint -- --fix",
- "template-oss-apply": "template-oss-apply --force"
+ "lintfix": "npm run eslint -- --fix",
+ "template-oss-apply": "template-oss-apply --force",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"tap": {
"timeout": 600,
@@ -30,29 +31,29 @@
]
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.22.0",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"npm-package-arg": "^11.0.0",
"slash": "^3.0.0",
"tap": "^16.0.1"
},
"dependencies": {
- "@npmcli/promise-spawn": "^7.0.0",
- "ini": "^4.1.3",
+ "@npmcli/promise-spawn": "^8.0.0",
+ "ini": "^5.0.0",
"lru-cache": "^10.0.1",
- "npm-pick-manifest": "^9.0.0",
- "proc-log": "^4.0.0",
+ "npm-pick-manifest": "^10.0.0",
+ "proc-log": "^5.0.0",
"promise-inflight": "^1.0.1",
"promise-retry": "^2.0.1",
"semver": "^7.3.5",
- "which": "^4.0.0"
+ "which": "^5.0.0"
},
"engines": {
- "node": "^16.14.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.22.0",
+ "version": "4.23.3",
"publish": true
}
}
diff --git a/deps/npm/node_modules/@npmcli/installed-package-contents/package.json b/deps/npm/node_modules/@npmcli/installed-package-contents/package.json
index 132256430a6..d5b68a737da 100644
--- a/deps/npm/node_modules/@npmcli/installed-package-contents/package.json
+++ b/deps/npm/node_modules/@npmcli/installed-package-contents/package.json
@@ -1,6 +1,6 @@
{
"name": "@npmcli/installed-package-contents",
- "version": "2.1.0",
+ "version": "3.0.0",
"description": "Get the list of files installed in a package in node_modules, including bundled dependencies",
"author": "GitHub Inc.",
"main": "lib/index.js",
@@ -11,35 +11,36 @@
"scripts": {
"test": "tap",
"snap": "tap",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
"postlint": "template-oss-check",
"template-oss-apply": "template-oss-apply --force",
- "lintfix": "npm run lint -- --fix",
- "posttest": "npm run lint"
+ "lintfix": "npm run eslint -- --fix",
+ "posttest": "npm run lint",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.21.4",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"tap": "^16.3.0"
},
"dependencies": {
- "npm-bundled": "^3.0.0",
- "npm-normalize-package-bin": "^3.0.0"
+ "npm-bundled": "^4.0.0",
+ "npm-normalize-package-bin": "^4.0.0"
},
"repository": {
"type": "git",
- "url": "https://github.com/npm/installed-package-contents.git"
+ "url": "git+https://github.com/npm/installed-package-contents.git"
},
"files": [
"bin/",
"lib/"
],
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.21.4",
+ "version": "4.23.3",
"publish": true
},
"tap": {
diff --git a/deps/npm/node_modules/@npmcli/map-workspaces/lib/index.js b/deps/npm/node_modules/@npmcli/map-workspaces/lib/index.js
index b20bf5de5d6..1b39d2e3f67 100644
--- a/deps/npm/node_modules/@npmcli/map-workspaces/lib/index.js
+++ b/deps/npm/node_modules/@npmcli/map-workspaces/lib/index.js
@@ -2,7 +2,7 @@ const path = require('path')
const getName = require('@npmcli/name-from-folder')
const { minimatch } = require('minimatch')
-const rpj = require('read-package-json-fast')
+const pkgJson = require('@npmcli/package-json')
const { glob } = require('glob')
function appendNegatedPatterns (allPatterns) {
@@ -67,15 +67,7 @@ function getPatterns (workspaces) {
}
function getPackageName (pkg, pathname) {
- const { name } = pkg
- return name || getName(pathname)
-}
-
-function pkgPathmame (opts) {
- return (...args) => {
- const cwd = opts.cwd ? opts.cwd : process.cwd()
- return path.join.apply(null, [cwd, ...args])
- }
+ return pkg.name || getName(pathname)
}
// make sure glob pattern only matches folders
@@ -101,16 +93,19 @@ async function mapWorkspaces (opts = {}) {
code: 'EMAPWORKSPACESPKG',
})
}
+ if (!opts.cwd) {
+ opts.cwd = process.cwd()
+ }
const { workspaces = [] } = opts.pkg
const { patterns, negatedPatterns } = getPatterns(workspaces)
const results = new Map()
- const seen = new Map()
if (!patterns.length && !negatedPatterns.length) {
return results
}
+ const seen = new Map()
const getGlobOpts = () => ({
...opts,
ignore: [
@@ -121,8 +116,6 @@ async function mapWorkspaces (opts = {}) {
],
})
- const getPackagePathname = pkgPathmame(opts)
-
let matches = await glob(patterns.map((p) => getGlobPattern(p)), getGlobOpts())
// preserves glob@8 behavior
matches = matches.sort((a, b) => a.localeCompare(b, 'en'))
@@ -138,10 +131,8 @@ async function mapWorkspaces (opts = {}) {
for (const match of orderedMatches) {
let pkg
- const packageJsonPathname = getPackagePathname(match, 'package.json')
-
try {
- pkg = await rpj(packageJsonPathname)
+ pkg = await pkgJson.normalize(path.join(opts.cwd, match))
} catch (err) {
if (err.code === 'ENOENT') {
continue
@@ -150,15 +141,14 @@ async function mapWorkspaces (opts = {}) {
}
}
- const packagePathname = path.dirname(packageJsonPathname)
- const name = getPackageName(pkg, packagePathname)
+ const name = getPackageName(pkg.content, pkg.path)
let seenPackagePathnames = seen.get(name)
if (!seenPackagePathnames) {
seenPackagePathnames = new Set()
seen.set(name, seenPackagePathnames)
}
- seenPackagePathnames.add(packagePathname)
+ seenPackagePathnames.add(pkg.path)
}
const errorMessageArray = ['must not have multiple workspaces with the same name']
@@ -200,6 +190,9 @@ mapWorkspaces.virtual = function (opts = {}) {
code: 'EMAPWORKSPACESLOCKFILE',
})
}
+ if (!opts.cwd) {
+ opts.cwd = process.cwd()
+ }
const { packages = {} } = opts.lockfile
const { workspaces = [] } = packages[''] || {}
@@ -218,10 +211,9 @@ mapWorkspaces.virtual = function (opts = {}) {
}
}
- const getPackagePathname = pkgPathmame(opts)
for (const pattern of patterns) {
for (const packageKey of minimatch.match(packageKeys, pattern)) {
- const packagePathname = getPackagePathname(packageKey)
+ const packagePathname = path.join(opts.cwd, packageKey)
const name = getPackageName(packages[packageKey], packagePathname)
results.set(packagePathname, name)
}
diff --git a/deps/npm/node_modules/@npmcli/map-workspaces/package.json b/deps/npm/node_modules/@npmcli/map-workspaces/package.json
index e6292b06bd2..f2667f25e9d 100644
--- a/deps/npm/node_modules/@npmcli/map-workspaces/package.json
+++ b/deps/npm/node_modules/@npmcli/map-workspaces/package.json
@@ -1,18 +1,18 @@
{
"name": "@npmcli/map-workspaces",
- "version": "3.0.6",
+ "version": "4.0.1",
"main": "lib/index.js",
"files": [
"bin/",
"lib/"
],
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"description": "Retrieves a name:pathname Map for a given workspaces config",
"repository": {
"type": "git",
- "url": "https://github.com/npm/map-workspaces.git"
+ "url": "git+https://github.com/npm/map-workspaces.git"
},
"keywords": [
"npm",
@@ -25,14 +25,15 @@
"author": "GitHub Inc.",
"license": "ISC",
"scripts": {
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
"pretest": "npm run lint",
"test": "tap",
"snap": "tap",
"postlint": "template-oss-check",
- "lintfix": "npm run lint -- --fix",
+ "lintfix": "npm run eslint -- --fix",
"posttest": "npm run lint",
- "template-oss-apply": "template-oss-apply --force"
+ "template-oss-apply": "template-oss-apply --force",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"tap": {
"check-coverage": true,
@@ -42,19 +43,19 @@
]
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.21.3",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"tap": "^16.0.1"
},
"dependencies": {
- "@npmcli/name-from-folder": "^2.0.0",
+ "@npmcli/name-from-folder": "^3.0.0",
+ "@npmcli/package-json": "^6.0.0",
"glob": "^10.2.2",
- "minimatch": "^9.0.0",
- "read-package-json-fast": "^3.0.0"
+ "minimatch": "^9.0.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.21.3",
+ "version": "4.23.3",
"publish": "true"
}
}
diff --git a/deps/npm/node_modules/@npmcli/metavuln-calculator/package.json b/deps/npm/node_modules/@npmcli/metavuln-calculator/package.json
index a7ec02d2ee7..d4c3cf54d83 100644
--- a/deps/npm/node_modules/@npmcli/metavuln-calculator/package.json
+++ b/deps/npm/node_modules/@npmcli/metavuln-calculator/package.json
@@ -1,6 +1,6 @@
{
"name": "@npmcli/metavuln-calculator",
- "version": "7.1.1",
+ "version": "8.0.0",
"main": "lib/index.js",
"files": [
"bin/",
@@ -18,9 +18,9 @@
"posttest": "npm run lint",
"snap": "tap",
"postsnap": "npm run lint",
- "eslint": "eslint",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
- "lintfix": "npm run lint -- --fix",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
+ "lintfix": "npm run eslint -- --fix",
"postlint": "template-oss-check",
"template-oss-apply": "template-oss-apply --force"
},
@@ -33,24 +33,24 @@
]
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.22.0",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"require-inject": "^1.4.4",
"tap": "^16.0.1"
},
"dependencies": {
- "cacache": "^18.0.0",
- "json-parse-even-better-errors": "^3.0.0",
- "pacote": "^18.0.0",
- "proc-log": "^4.1.0",
+ "cacache": "^19.0.0",
+ "json-parse-even-better-errors": "^4.0.0",
+ "pacote": "^19.0.0",
+ "proc-log": "^5.0.0",
"semver": "^7.3.5"
},
"engines": {
- "node": "^16.14.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.22.0",
+ "version": "4.23.3",
"publish": "true",
"ciVersions": [
"16.14.0",
diff --git a/deps/npm/node_modules/@npmcli/name-from-folder/package.json b/deps/npm/node_modules/@npmcli/name-from-folder/package.json
index f0aa5b16dba..323edd81d22 100644
--- a/deps/npm/node_modules/@npmcli/name-from-folder/package.json
+++ b/deps/npm/node_modules/@npmcli/name-from-folder/package.json
@@ -1,6 +1,6 @@
{
"name": "@npmcli/name-from-folder",
- "version": "2.0.0",
+ "version": "3.0.0",
"files": [
"bin/",
"lib/"
@@ -9,30 +9,32 @@
"description": "Get the package name from a folder path",
"repository": {
"type": "git",
- "url": "https://github.com/npm/name-from-folder.git"
+ "url": "git+https://github.com/npm/name-from-folder.git"
},
"author": "GitHub Inc.",
"license": "ISC",
"scripts": {
"test": "tap",
"snap": "tap",
- "lint": "eslint \"**/*.js\"",
+ "lint": "npm run eslint",
"postlint": "template-oss-check",
"template-oss-apply": "template-oss-apply --force",
- "lintfix": "npm run lint -- --fix",
- "posttest": "npm run lint"
+ "lintfix": "npm run eslint -- --fix",
+ "posttest": "npm run lint",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.1",
- "@npmcli/template-oss": "4.11.0",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"tap": "^16.3.2"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.11.0"
+ "version": "4.23.3",
+ "publish": true
},
"tap": {
"nyc-arg": [
diff --git a/deps/npm/node_modules/@npmcli/node-gyp/LICENSE b/deps/npm/node_modules/@npmcli/node-gyp/LICENSE
new file mode 100644
index 00000000000..3609cabca45
--- /dev/null
+++ b/deps/npm/node_modules/@npmcli/node-gyp/LICENSE
@@ -0,0 +1,7 @@
+ISC License:
+
+Copyright (c) 2023 by GitHub Inc.
+
+Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/@npmcli/node-gyp/package.json b/deps/npm/node_modules/@npmcli/node-gyp/package.json
index 999572bc588..3be9663a39d 100644
--- a/deps/npm/node_modules/@npmcli/node-gyp/package.json
+++ b/deps/npm/node_modules/@npmcli/node-gyp/package.json
@@ -1,19 +1,20 @@
{
"name": "@npmcli/node-gyp",
- "version": "3.0.0",
+ "version": "4.0.0",
"description": "Tools for dealing with node-gyp packages",
"scripts": {
"test": "tap",
- "lint": "eslint \"**/*.js\"",
+ "lint": "npm run eslint",
"postlint": "template-oss-check",
"template-oss-apply": "template-oss-apply --force",
- "lintfix": "npm run lint -- --fix",
+ "lintfix": "npm run eslint -- --fix",
"snap": "tap",
- "posttest": "npm run lint"
+ "posttest": "npm run lint",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"repository": {
"type": "git",
- "url": "https://github.com/npm/node-gyp.git"
+ "url": "git+https://github.com/npm/node-gyp.git"
},
"keywords": [
"npm",
@@ -28,16 +29,17 @@
"author": "GitHub Inc.",
"license": "ISC",
"devDependencies": {
- "@npmcli/eslint-config": "^3.0.1",
- "@npmcli/template-oss": "4.5.1",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"tap": "^16.0.1"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.5.1"
+ "version": "4.23.3",
+ "publish": true
},
"tap": {
"nyc-arg": [
diff --git a/deps/npm/node_modules/@npmcli/package-json/lib/normalize.js b/deps/npm/node_modules/@npmcli/package-json/lib/normalize.js
index 682d234825d..3adec0143f4 100644
--- a/deps/npm/node_modules/@npmcli/package-json/lib/normalize.js
+++ b/deps/npm/node_modules/@npmcli/package-json/lib/normalize.js
@@ -127,13 +127,9 @@ function unixifyPath (ref) {
return ref.replace(/\\|:/g, '/')
}
-function securePath (ref) {
- const secured = path.join('.', path.join('/', unixifyPath(ref)))
- return secured.startsWith('.') ? '' : secured
-}
-
function secureAndUnixifyPath (ref) {
- return unixifyPath(securePath(ref))
+ const secured = unixifyPath(path.join('.', path.join('/', unixifyPath(ref))))
+ return secured.startsWith('./') ? '' : secured
}
// We don't want the `changes` array in here by default because this is a hot
@@ -376,7 +372,7 @@ const normalize = async (pkg, { strict, steps, root, changes, allowLegacyCase })
// expand "directories.bin"
if (steps.includes('binDir') && data.directories?.bin && !data.bin) {
- const binsDir = path.resolve(pkg.path, securePath(data.directories.bin))
+ const binsDir = path.resolve(pkg.path, secureAndUnixifyPath(data.directories.bin))
const bins = await lazyLoadGlob()('**', { cwd: binsDir })
data.bin = bins.reduce((acc, binFile) => {
if (binFile && !binFile.startsWith('.')) {
diff --git a/deps/npm/node_modules/@npmcli/package-json/package.json b/deps/npm/node_modules/@npmcli/package-json/package.json
index a5ea22bdbb3..e766e8ccb4b 100644
--- a/deps/npm/node_modules/@npmcli/package-json/package.json
+++ b/deps/npm/node_modules/@npmcli/package-json/package.json
@@ -1,6 +1,6 @@
{
"name": "@npmcli/package-json",
- "version": "5.2.0",
+ "version": "6.0.1",
"description": "Programmatic API to update package.json",
"main": "lib/index.js",
"files": [
@@ -10,12 +10,13 @@
"scripts": {
"snap": "tap",
"test": "tap",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
- "lintfix": "npm run lint -- --fix",
+ "lint": "npm run eslint",
+ "lintfix": "npm run eslint -- --fix",
"posttest": "npm run lint",
"postsnap": "npm run lintfix --",
"postlint": "template-oss-check",
- "template-oss-apply": "template-oss-apply --force"
+ "template-oss-apply": "template-oss-apply --force",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"keywords": [
"npm",
@@ -24,19 +25,19 @@
"author": "GitHub Inc.",
"license": "ISC",
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.22.0",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"read-package-json": "^7.0.0",
- "read-package-json-fast": "^3.0.2",
+ "read-package-json-fast": "^4.0.0",
"tap": "^16.0.1"
},
"dependencies": {
- "@npmcli/git": "^5.0.0",
+ "@npmcli/git": "^6.0.0",
"glob": "^10.2.2",
- "hosted-git-info": "^7.0.0",
- "json-parse-even-better-errors": "^3.0.0",
- "normalize-package-data": "^6.0.0",
- "proc-log": "^4.0.0",
+ "hosted-git-info": "^8.0.0",
+ "json-parse-even-better-errors": "^4.0.0",
+ "normalize-package-data": "^7.0.0",
+ "proc-log": "^5.0.0",
"semver": "^7.5.3"
},
"repository": {
@@ -44,11 +45,11 @@
"url": "git+https://github.com/npm/package-json.git"
},
"engines": {
- "node": "^16.14.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.22.0",
+ "version": "4.23.3",
"publish": "true"
},
"tap": {
diff --git a/deps/npm/node_modules/@npmcli/promise-spawn/package.json b/deps/npm/node_modules/@npmcli/promise-spawn/package.json
index 1b633f84596..9914063f851 100644
--- a/deps/npm/node_modules/@npmcli/promise-spawn/package.json
+++ b/deps/npm/node_modules/@npmcli/promise-spawn/package.json
@@ -1,6 +1,6 @@
{
"name": "@npmcli/promise-spawn",
- "version": "7.0.2",
+ "version": "8.0.1",
"files": [
"bin/",
"lib/"
@@ -16,12 +16,13 @@
"scripts": {
"test": "tap",
"snap": "tap",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
- "lintfix": "npm run lint -- --fix",
+ "lint": "npm run eslint",
+ "lintfix": "npm run eslint -- --fix",
"posttest": "npm run lint",
"postsnap": "npm run lintfix --",
"postlint": "template-oss-check",
- "template-oss-apply": "template-oss-apply --force"
+ "template-oss-apply": "template-oss-apply --force",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"tap": {
"check-coverage": true,
@@ -31,20 +32,20 @@
]
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.22.0",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"spawk": "^1.7.1",
"tap": "^16.0.1"
},
"engines": {
- "node": "^16.14.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.22.0",
+ "version": "4.23.3",
"publish": true
},
"dependencies": {
- "which": "^4.0.0"
+ "which": "^5.0.0"
}
}
diff --git a/deps/npm/node_modules/@npmcli/query/package.json b/deps/npm/node_modules/@npmcli/query/package.json
index ad45c18c44c..14f7fbfaac0 100644
--- a/deps/npm/node_modules/@npmcli/query/package.json
+++ b/deps/npm/node_modules/@npmcli/query/package.json
@@ -1,16 +1,17 @@
{
"name": "@npmcli/query",
- "version": "3.1.0",
+ "version": "4.0.0",
"description": "npm query parser and tools",
"main": "lib/index.js",
"scripts": {
"test": "tap",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
"postlint": "template-oss-check",
"template-oss-apply": "template-oss-apply --force",
- "lintfix": "npm run lint -- --fix",
+ "lintfix": "npm run eslint -- --fix",
"snap": "tap",
- "posttest": "npm run lint"
+ "posttest": "npm run lint",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"contributors": [
{
@@ -35,24 +36,24 @@
"lib/"
],
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.21.3",
+ "version": "4.23.3",
"publish": true
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.21.3",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"tap": "^16.2.0"
},
"dependencies": {
- "postcss-selector-parser": "^6.0.10"
+ "postcss-selector-parser": "^6.1.2"
},
"repository": {
"type": "git",
- "url": "https://github.com/npm/query.git"
+ "url": "git+https://github.com/npm/query.git"
},
"tap": {
"nyc-arg": [
diff --git a/deps/npm/node_modules/@npmcli/redact/package.json b/deps/npm/node_modules/@npmcli/redact/package.json
index 831387ca541..649f82ef5ca 100644
--- a/deps/npm/node_modules/@npmcli/redact/package.json
+++ b/deps/npm/node_modules/@npmcli/redact/package.json
@@ -1,6 +1,6 @@
{
"name": "@npmcli/redact",
- "version": "2.0.1",
+ "version": "3.0.0",
"description": "Redact sensitive npm information from output",
"main": "lib/index.js",
"exports": {
@@ -10,12 +10,13 @@
},
"scripts": {
"test": "tap",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
"postlint": "template-oss-check",
"template-oss-apply": "template-oss-apply --force",
- "lintfix": "npm run lint -- --fix",
+ "lintfix": "npm run eslint -- --fix",
"snap": "tap",
- "posttest": "npm run lint"
+ "posttest": "npm run lint",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"keywords": [],
"author": "GitHub Inc.",
@@ -26,11 +27,11 @@
],
"repository": {
"type": "git",
- "url": "https://github.com/npm/redact.git"
+ "url": "git+https://github.com/npm/redact.git"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.21.3",
+ "version": "4.23.3",
"publish": true
},
"tap": {
@@ -41,11 +42,11 @@
"timeout": 120
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.2",
- "@npmcli/template-oss": "4.21.3",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"tap": "^16.3.10"
},
"engines": {
- "node": "^16.14.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
}
}
diff --git a/deps/npm/node_modules/@npmcli/run-script/package.json b/deps/npm/node_modules/@npmcli/run-script/package.json
index 8a83e726fbe..e5fd2fef62e 100644
--- a/deps/npm/node_modules/@npmcli/run-script/package.json
+++ b/deps/npm/node_modules/@npmcli/run-script/package.json
@@ -1,32 +1,32 @@
{
"name": "@npmcli/run-script",
- "version": "8.1.0",
+ "version": "9.0.1",
"description": "Run a lifecycle script for a package (descendant of npm-lifecycle)",
"author": "GitHub Inc.",
"license": "ISC",
"scripts": {
"test": "tap",
- "eslint": "eslint",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
- "lintfix": "npm run lint -- --fix",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
+ "lintfix": "npm run eslint -- --fix",
"postlint": "template-oss-check",
"snap": "tap",
"posttest": "npm run lint",
"template-oss-apply": "template-oss-apply --force"
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.21.4",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"spawk": "^1.8.1",
"tap": "^16.0.1"
},
"dependencies": {
- "@npmcli/node-gyp": "^3.0.0",
- "@npmcli/package-json": "^5.0.0",
- "@npmcli/promise-spawn": "^7.0.0",
+ "@npmcli/node-gyp": "^4.0.0",
+ "@npmcli/package-json": "^6.0.0",
+ "@npmcli/promise-spawn": "^8.0.0",
"node-gyp": "^10.0.0",
- "proc-log": "^4.0.0",
- "which": "^4.0.0"
+ "proc-log": "^5.0.0",
+ "which": "^5.0.0"
},
"files": [
"bin/",
@@ -35,14 +35,14 @@
"main": "lib/run-script.js",
"repository": {
"type": "git",
- "url": "https://github.com/npm/run-script.git"
+ "url": "git+https://github.com/npm/run-script.git"
},
"engines": {
- "node": "^16.14.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.21.4",
+ "version": "4.23.3",
"publish": "true"
},
"tap": {
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/agent/lib/agents.js b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/agent/lib/agents.js
new file mode 100644
index 00000000000..c541b930015
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/agent/lib/agents.js
@@ -0,0 +1,206 @@
+'use strict'
+
+const net = require('net')
+const tls = require('tls')
+const { once } = require('events')
+const timers = require('timers/promises')
+const { normalizeOptions, cacheOptions } = require('./options')
+const { getProxy, getProxyAgent, proxyCache } = require('./proxy.js')
+const Errors = require('./errors.js')
+const { Agent: AgentBase } = require('agent-base')
+
+module.exports = class Agent extends AgentBase {
+ #options
+ #timeouts
+ #proxy
+ #noProxy
+ #ProxyAgent
+
+ constructor (options = {}) {
+ const { timeouts, proxy, noProxy, ...normalizedOptions } = normalizeOptions(options)
+
+ super(normalizedOptions)
+
+ this.#options = normalizedOptions
+ this.#timeouts = timeouts
+
+ if (proxy) {
+ this.#proxy = new URL(proxy)
+ this.#noProxy = noProxy
+ this.#ProxyAgent = getProxyAgent(proxy)
+ }
+ }
+
+ get proxy () {
+ return this.#proxy ? { url: this.#proxy } : {}
+ }
+
+ #getProxy (options) {
+ if (!this.#proxy) {
+ return
+ }
+
+ const proxy = getProxy(`${options.protocol}//${options.host}:${options.port}`, {
+ proxy: this.#proxy,
+ noProxy: this.#noProxy,
+ })
+
+ if (!proxy) {
+ return
+ }
+
+ const cacheKey = cacheOptions({
+ ...options,
+ ...this.#options,
+ timeouts: this.#timeouts,
+ proxy,
+ })
+
+ if (proxyCache.has(cacheKey)) {
+ return proxyCache.get(cacheKey)
+ }
+
+ let ProxyAgent = this.#ProxyAgent
+ if (Array.isArray(ProxyAgent)) {
+ ProxyAgent = this.isSecureEndpoint(options) ? ProxyAgent[1] : ProxyAgent[0]
+ }
+
+ const proxyAgent = new ProxyAgent(proxy, {
+ ...this.#options,
+ socketOptions: { family: this.#options.family },
+ })
+ proxyCache.set(cacheKey, proxyAgent)
+
+ return proxyAgent
+ }
+
+ // takes an array of promises and races them against the connection timeout
+ // which will throw the necessary error if it is hit. This will return the
+ // result of the promise race.
+ async #timeoutConnection ({ promises, options, timeout }, ac = new AbortController()) {
+ if (timeout) {
+ const connectionTimeout = timers.setTimeout(timeout, null, { signal: ac.signal })
+ .then(() => {
+ throw new Errors.ConnectionTimeoutError(`${options.host}:${options.port}`)
+ }).catch((err) => {
+ if (err.name === 'AbortError') {
+ return
+ }
+ throw err
+ })
+ promises.push(connectionTimeout)
+ }
+
+ let result
+ try {
+ result = await Promise.race(promises)
+ ac.abort()
+ } catch (err) {
+ ac.abort()
+ throw err
+ }
+ return result
+ }
+
+ async connect (request, options) {
+ // if the connection does not have its own lookup function
+ // set, then use the one from our options
+ options.lookup ??= this.#options.lookup
+
+ let socket
+ let timeout = this.#timeouts.connection
+ const isSecureEndpoint = this.isSecureEndpoint(options)
+
+ const proxy = this.#getProxy(options)
+ if (proxy) {
+ // some of the proxies will wait for the socket to fully connect before
+ // returning so we have to await this while also racing it against the
+ // connection timeout.
+ const start = Date.now()
+ socket = await this.#timeoutConnection({
+ options,
+ timeout,
+ promises: [proxy.connect(request, options)],
+ })
+ // see how much time proxy.connect took and subtract it from
+ // the timeout
+ if (timeout) {
+ timeout = timeout - (Date.now() - start)
+ }
+ } else {
+ socket = (isSecureEndpoint ? tls : net).connect(options)
+ }
+
+ socket.setKeepAlive(this.keepAlive, this.keepAliveMsecs)
+ socket.setNoDelay(this.keepAlive)
+
+ const abortController = new AbortController()
+ const { signal } = abortController
+
+ const connectPromise = socket[isSecureEndpoint ? 'secureConnecting' : 'connecting']
+ ? once(socket, isSecureEndpoint ? 'secureConnect' : 'connect', { signal })
+ : Promise.resolve()
+
+ await this.#timeoutConnection({
+ options,
+ timeout,
+ promises: [
+ connectPromise,
+ once(socket, 'error', { signal }).then((err) => {
+ throw err[0]
+ }),
+ ],
+ }, abortController)
+
+ if (this.#timeouts.idle) {
+ socket.setTimeout(this.#timeouts.idle, () => {
+ socket.destroy(new Errors.IdleTimeoutError(`${options.host}:${options.port}`))
+ })
+ }
+
+ return socket
+ }
+
+ addRequest (request, options) {
+ const proxy = this.#getProxy(options)
+ // it would be better to call proxy.addRequest here but this causes the
+ // http-proxy-agent to call its super.addRequest which causes the request
+ // to be added to the agent twice. since we only support 3 agents
+ // currently (see the required agents in proxy.js) we have manually
+ // checked that the only public methods we need to call are called in the
+ // next block. this could change in the future and presumably we would get
+ // failing tests until we have properly called the necessary methods on
+ // each of our proxy agents
+ if (proxy?.setRequestProps) {
+ proxy.setRequestProps(request, options)
+ }
+
+ request.setHeader('connection', this.keepAlive ? 'keep-alive' : 'close')
+
+ if (this.#timeouts.response) {
+ let responseTimeout
+ request.once('finish', () => {
+ setTimeout(() => {
+ request.destroy(new Errors.ResponseTimeoutError(request, this.#proxy))
+ }, this.#timeouts.response)
+ })
+ request.once('response', () => {
+ clearTimeout(responseTimeout)
+ })
+ }
+
+ if (this.#timeouts.transfer) {
+ let transferTimeout
+ request.once('response', (res) => {
+ setTimeout(() => {
+ res.destroy(new Errors.TransferTimeoutError(request, this.#proxy))
+ }, this.#timeouts.transfer)
+ res.once('close', () => {
+ clearTimeout(transferTimeout)
+ })
+ })
+ }
+
+ return super.addRequest(request, options)
+ }
+}
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/agent/lib/dns.js b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/agent/lib/dns.js
new file mode 100644
index 00000000000..3c6946c566d
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/agent/lib/dns.js
@@ -0,0 +1,53 @@
+'use strict'
+
+const { LRUCache } = require('lru-cache')
+const dns = require('dns')
+
+// this is a factory so that each request can have its own opts (i.e. ttl)
+// while still sharing the cache across all requests
+const cache = new LRUCache({ max: 50 })
+
+const getOptions = ({
+ family = 0,
+ hints = dns.ADDRCONFIG,
+ all = false,
+ verbatim = undefined,
+ ttl = 5 * 60 * 1000,
+ lookup = dns.lookup,
+}) => ({
+ // hints and lookup are returned since both are top level properties to (net|tls).connect
+ hints,
+ lookup: (hostname, ...args) => {
+ const callback = args.pop() // callback is always last arg
+ const lookupOptions = args[0] ?? {}
+
+ const options = {
+ family,
+ hints,
+ all,
+ verbatim,
+ ...(typeof lookupOptions === 'number' ? { family: lookupOptions } : lookupOptions),
+ }
+
+ const key = JSON.stringify({ hostname, ...options })
+
+ if (cache.has(key)) {
+ const cached = cache.get(key)
+ return process.nextTick(callback, null, ...cached)
+ }
+
+ lookup(hostname, options, (err, ...result) => {
+ if (err) {
+ return callback(err)
+ }
+
+ cache.set(key, result, { ttl })
+ return callback(null, ...result)
+ })
+ },
+})
+
+module.exports = {
+ cache,
+ getOptions,
+}
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/agent/lib/errors.js b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/agent/lib/errors.js
new file mode 100644
index 00000000000..70475aec8eb
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/agent/lib/errors.js
@@ -0,0 +1,61 @@
+'use strict'
+
+class InvalidProxyProtocolError extends Error {
+ constructor (url) {
+ super(`Invalid protocol \`${url.protocol}\` connecting to proxy \`${url.host}\``)
+ this.code = 'EINVALIDPROXY'
+ this.proxy = url
+ }
+}
+
+class ConnectionTimeoutError extends Error {
+ constructor (host) {
+ super(`Timeout connecting to host \`${host}\``)
+ this.code = 'ECONNECTIONTIMEOUT'
+ this.host = host
+ }
+}
+
+class IdleTimeoutError extends Error {
+ constructor (host) {
+ super(`Idle timeout reached for host \`${host}\``)
+ this.code = 'EIDLETIMEOUT'
+ this.host = host
+ }
+}
+
+class ResponseTimeoutError extends Error {
+ constructor (request, proxy) {
+ let msg = 'Response timeout '
+ if (proxy) {
+ msg += `from proxy \`${proxy.host}\` `
+ }
+ msg += `connecting to host \`${request.host}\``
+ super(msg)
+ this.code = 'ERESPONSETIMEOUT'
+ this.proxy = proxy
+ this.request = request
+ }
+}
+
+class TransferTimeoutError extends Error {
+ constructor (request, proxy) {
+ let msg = 'Transfer timeout '
+ if (proxy) {
+ msg += `from proxy \`${proxy.host}\` `
+ }
+ msg += `for \`${request.host}\``
+ super(msg)
+ this.code = 'ETRANSFERTIMEOUT'
+ this.proxy = proxy
+ this.request = request
+ }
+}
+
+module.exports = {
+ InvalidProxyProtocolError,
+ ConnectionTimeoutError,
+ IdleTimeoutError,
+ ResponseTimeoutError,
+ TransferTimeoutError,
+}
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/agent/lib/index.js b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/agent/lib/index.js
new file mode 100644
index 00000000000..b33d6eaef07
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/agent/lib/index.js
@@ -0,0 +1,56 @@
+'use strict'
+
+const { LRUCache } = require('lru-cache')
+const { normalizeOptions, cacheOptions } = require('./options')
+const { getProxy, proxyCache } = require('./proxy.js')
+const dns = require('./dns.js')
+const Agent = require('./agents.js')
+
+const agentCache = new LRUCache({ max: 20 })
+
+const getAgent = (url, { agent, proxy, noProxy, ...options } = {}) => {
+ // false has meaning so this can't be a simple truthiness check
+ if (agent != null) {
+ return agent
+ }
+
+ url = new URL(url)
+
+ const proxyForUrl = getProxy(url, { proxy, noProxy })
+ const normalizedOptions = {
+ ...normalizeOptions(options),
+ proxy: proxyForUrl,
+ }
+
+ const cacheKey = cacheOptions({
+ ...normalizedOptions,
+ secureEndpoint: url.protocol === 'https:',
+ })
+
+ if (agentCache.has(cacheKey)) {
+ return agentCache.get(cacheKey)
+ }
+
+ const newAgent = new Agent(normalizedOptions)
+ agentCache.set(cacheKey, newAgent)
+
+ return newAgent
+}
+
+module.exports = {
+ getAgent,
+ Agent,
+ // these are exported for backwards compatability
+ HttpAgent: Agent,
+ HttpsAgent: Agent,
+ cache: {
+ proxy: proxyCache,
+ agent: agentCache,
+ dns: dns.cache,
+ clear: () => {
+ proxyCache.clear()
+ agentCache.clear()
+ dns.cache.clear()
+ },
+ },
+}
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/agent/lib/options.js b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/agent/lib/options.js
new file mode 100644
index 00000000000..0bf53f725f0
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/agent/lib/options.js
@@ -0,0 +1,86 @@
+'use strict'
+
+const dns = require('./dns')
+
+const normalizeOptions = (opts) => {
+ const family = parseInt(opts.family ?? '0', 10)
+ const keepAlive = opts.keepAlive ?? true
+
+ const normalized = {
+ // nodejs http agent options. these are all the defaults
+ // but kept here to increase the likelihood of cache hits
+ // https://nodejs.org/api/http.html#new-agentoptions
+ keepAliveMsecs: keepAlive ? 1000 : undefined,
+ maxSockets: opts.maxSockets ?? 15,
+ maxTotalSockets: Infinity,
+ maxFreeSockets: keepAlive ? 256 : undefined,
+ scheduling: 'fifo',
+ // then spread the rest of the options
+ ...opts,
+ // we already set these to their defaults that we want
+ family,
+ keepAlive,
+ // our custom timeout options
+ timeouts: {
+ // the standard timeout option is mapped to our idle timeout
+ // and then deleted below
+ idle: opts.timeout ?? 0,
+ connection: 0,
+ response: 0,
+ transfer: 0,
+ ...opts.timeouts,
+ },
+ // get the dns options that go at the top level of socket connection
+ ...dns.getOptions({ family, ...opts.dns }),
+ }
+
+ // remove timeout since we already used it to set our own idle timeout
+ delete normalized.timeout
+
+ return normalized
+}
+
+const createKey = (obj) => {
+ let key = ''
+ const sorted = Object.entries(obj).sort((a, b) => a[0] - b[0])
+ for (let [k, v] of sorted) {
+ if (v == null) {
+ v = 'null'
+ } else if (v instanceof URL) {
+ v = v.toString()
+ } else if (typeof v === 'object') {
+ v = createKey(v)
+ }
+ key += `${k}:${v}:`
+ }
+ return key
+}
+
+const cacheOptions = ({ secureEndpoint, ...options }) => createKey({
+ secureEndpoint: !!secureEndpoint,
+ // socket connect options
+ family: options.family,
+ hints: options.hints,
+ localAddress: options.localAddress,
+ // tls specific connect options
+ strictSsl: secureEndpoint ? !!options.rejectUnauthorized : false,
+ ca: secureEndpoint ? options.ca : null,
+ cert: secureEndpoint ? options.cert : null,
+ key: secureEndpoint ? options.key : null,
+ // http agent options
+ keepAlive: options.keepAlive,
+ keepAliveMsecs: options.keepAliveMsecs,
+ maxSockets: options.maxSockets,
+ maxTotalSockets: options.maxTotalSockets,
+ maxFreeSockets: options.maxFreeSockets,
+ scheduling: options.scheduling,
+ // timeout options
+ timeouts: options.timeouts,
+ // proxy
+ proxy: options.proxy,
+})
+
+module.exports = {
+ normalizeOptions,
+ cacheOptions,
+}
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/agent/lib/proxy.js b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/agent/lib/proxy.js
new file mode 100644
index 00000000000..6272e929e57
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/agent/lib/proxy.js
@@ -0,0 +1,88 @@
+'use strict'
+
+const { HttpProxyAgent } = require('http-proxy-agent')
+const { HttpsProxyAgent } = require('https-proxy-agent')
+const { SocksProxyAgent } = require('socks-proxy-agent')
+const { LRUCache } = require('lru-cache')
+const { InvalidProxyProtocolError } = require('./errors.js')
+
+const PROXY_CACHE = new LRUCache({ max: 20 })
+
+const SOCKS_PROTOCOLS = new Set(SocksProxyAgent.protocols)
+
+const PROXY_ENV_KEYS = new Set(['https_proxy', 'http_proxy', 'proxy', 'no_proxy'])
+
+const PROXY_ENV = Object.entries(process.env).reduce((acc, [key, value]) => {
+ key = key.toLowerCase()
+ if (PROXY_ENV_KEYS.has(key)) {
+ acc[key] = value
+ }
+ return acc
+}, {})
+
+const getProxyAgent = (url) => {
+ url = new URL(url)
+
+ const protocol = url.protocol.slice(0, -1)
+ if (SOCKS_PROTOCOLS.has(protocol)) {
+ return SocksProxyAgent
+ }
+ if (protocol === 'https' || protocol === 'http') {
+ return [HttpProxyAgent, HttpsProxyAgent]
+ }
+
+ throw new InvalidProxyProtocolError(url)
+}
+
+const isNoProxy = (url, noProxy) => {
+ if (typeof noProxy === 'string') {
+ noProxy = noProxy.split(',').map((p) => p.trim()).filter(Boolean)
+ }
+
+ if (!noProxy || !noProxy.length) {
+ return false
+ }
+
+ const hostSegments = url.hostname.split('.').reverse()
+
+ return noProxy.some((no) => {
+ const noSegments = no.split('.').filter(Boolean).reverse()
+ if (!noSegments.length) {
+ return false
+ }
+
+ for (let i = 0; i < noSegments.length; i++) {
+ if (hostSegments[i] !== noSegments[i]) {
+ return false
+ }
+ }
+
+ return true
+ })
+}
+
+const getProxy = (url, { proxy, noProxy }) => {
+ url = new URL(url)
+
+ if (!proxy) {
+ proxy = url.protocol === 'https:'
+ ? PROXY_ENV.https_proxy
+ : PROXY_ENV.https_proxy || PROXY_ENV.http_proxy || PROXY_ENV.proxy
+ }
+
+ if (!noProxy) {
+ noProxy = PROXY_ENV.no_proxy
+ }
+
+ if (!proxy || isNoProxy(url, noProxy)) {
+ return null
+ }
+
+ return new URL(proxy)
+}
+
+module.exports = {
+ getProxyAgent,
+ getProxy,
+ proxyCache: PROXY_CACHE,
+}
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/agent/package.json b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/agent/package.json
new file mode 100644
index 00000000000..ef5b4e3228c
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/agent/package.json
@@ -0,0 +1,60 @@
+{
+ "name": "@npmcli/agent",
+ "version": "2.2.2",
+ "description": "the http/https agent used by the npm cli",
+ "main": "lib/index.js",
+ "scripts": {
+ "gencerts": "bash scripts/create-cert.sh",
+ "test": "tap",
+ "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "postlint": "template-oss-check",
+ "template-oss-apply": "template-oss-apply --force",
+ "lintfix": "npm run lint -- --fix",
+ "snap": "tap",
+ "posttest": "npm run lint"
+ },
+ "author": "GitHub Inc.",
+ "license": "ISC",
+ "bugs": {
+ "url": "https://github.com/npm/agent/issues"
+ },
+ "homepage": "https://github.com/npm/agent#readme",
+ "files": [
+ "bin/",
+ "lib/"
+ ],
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ },
+ "templateOSS": {
+ "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
+ "version": "4.21.3",
+ "publish": "true"
+ },
+ "dependencies": {
+ "agent-base": "^7.1.0",
+ "http-proxy-agent": "^7.0.0",
+ "https-proxy-agent": "^7.0.1",
+ "lru-cache": "^10.0.1",
+ "socks-proxy-agent": "^8.0.3"
+ },
+ "devDependencies": {
+ "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/template-oss": "4.21.3",
+ "minipass-fetch": "^3.0.3",
+ "nock": "^13.2.7",
+ "semver": "^7.5.4",
+ "simple-socks": "^3.1.0",
+ "tap": "^16.3.0"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/npm/agent.git"
+ },
+ "tap": {
+ "nyc-arg": [
+ "--exclude",
+ "tap-snapshots/**"
+ ]
+ }
+}
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/LICENSE.md b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/LICENSE.md
new file mode 100644
index 00000000000..5fc208ff122
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/LICENSE.md
@@ -0,0 +1,20 @@
+
+
+ISC License
+
+Copyright npm, Inc.
+
+Permission to use, copy, modify, and/or distribute this
+software for any purpose with or without fee is hereby
+granted, provided that the above copyright notice and this
+permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND NPM DISCLAIMS ALL
+WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
+EVENT SHALL NPM BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
+USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/common/get-options.js b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/common/get-options.js
new file mode 100644
index 00000000000..cb5982f7907
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/common/get-options.js
@@ -0,0 +1,20 @@
+// given an input that may or may not be an object, return an object that has
+// a copy of every defined property listed in 'copy'. if the input is not an
+// object, assign it to the property named by 'wrap'
+const getOptions = (input, { copy, wrap }) => {
+ const result = {}
+
+ if (input && typeof input === 'object') {
+ for (const prop of copy) {
+ if (input[prop] !== undefined) {
+ result[prop] = input[prop]
+ }
+ }
+ } else {
+ result[wrap] = input
+ }
+
+ return result
+}
+
+module.exports = getOptions
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/common/node.js b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/common/node.js
new file mode 100644
index 00000000000..4d13bc03735
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/common/node.js
@@ -0,0 +1,9 @@
+const semver = require('semver')
+
+const satisfies = (range) => {
+ return semver.satisfies(process.version, range, { includePrerelease: true })
+}
+
+module.exports = {
+ satisfies,
+}
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/cp/LICENSE b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/cp/LICENSE
new file mode 100644
index 00000000000..93546dfb765
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/cp/LICENSE
@@ -0,0 +1,15 @@
+(The MIT License)
+
+Copyright (c) 2011-2017 JP Richardson
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files
+(the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify,
+ merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
+OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/cp/errors.js b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/cp/errors.js
new file mode 100644
index 00000000000..1cd1e05d0c5
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/cp/errors.js
@@ -0,0 +1,129 @@
+'use strict'
+const { inspect } = require('util')
+
+// adapted from node's internal/errors
+// https://github.com/nodejs/node/blob/c8a04049/lib/internal/errors.js
+
+// close copy of node's internal SystemError class.
+class SystemError {
+ constructor (code, prefix, context) {
+ // XXX context.code is undefined in all constructors used in cp/polyfill
+ // that may be a bug copied from node, maybe the constructor should use
+ // `code` not `errno`? nodejs/node#41104
+ let message = `${prefix}: ${context.syscall} returned ` +
+ `${context.code} (${context.message})`
+
+ if (context.path !== undefined) {
+ message += ` ${context.path}`
+ }
+ if (context.dest !== undefined) {
+ message += ` => ${context.dest}`
+ }
+
+ this.code = code
+ Object.defineProperties(this, {
+ name: {
+ value: 'SystemError',
+ enumerable: false,
+ writable: true,
+ configurable: true,
+ },
+ message: {
+ value: message,
+ enumerable: false,
+ writable: true,
+ configurable: true,
+ },
+ info: {
+ value: context,
+ enumerable: true,
+ configurable: true,
+ writable: false,
+ },
+ errno: {
+ get () {
+ return context.errno
+ },
+ set (value) {
+ context.errno = value
+ },
+ enumerable: true,
+ configurable: true,
+ },
+ syscall: {
+ get () {
+ return context.syscall
+ },
+ set (value) {
+ context.syscall = value
+ },
+ enumerable: true,
+ configurable: true,
+ },
+ })
+
+ if (context.path !== undefined) {
+ Object.defineProperty(this, 'path', {
+ get () {
+ return context.path
+ },
+ set (value) {
+ context.path = value
+ },
+ enumerable: true,
+ configurable: true,
+ })
+ }
+
+ if (context.dest !== undefined) {
+ Object.defineProperty(this, 'dest', {
+ get () {
+ return context.dest
+ },
+ set (value) {
+ context.dest = value
+ },
+ enumerable: true,
+ configurable: true,
+ })
+ }
+ }
+
+ toString () {
+ return `${this.name} [${this.code}]: ${this.message}`
+ }
+
+ [Symbol.for('nodejs.util.inspect.custom')] (_recurseTimes, ctx) {
+ return inspect(this, {
+ ...ctx,
+ getters: true,
+ customInspect: false,
+ })
+ }
+}
+
+function E (code, message) {
+ module.exports[code] = class NodeError extends SystemError {
+ constructor (ctx) {
+ super(code, message, ctx)
+ }
+ }
+}
+
+E('ERR_FS_CP_DIR_TO_NON_DIR', 'Cannot overwrite directory with non-directory')
+E('ERR_FS_CP_EEXIST', 'Target already exists')
+E('ERR_FS_CP_EINVAL', 'Invalid src or dest')
+E('ERR_FS_CP_FIFO_PIPE', 'Cannot copy a FIFO pipe')
+E('ERR_FS_CP_NON_DIR_TO_DIR', 'Cannot overwrite non-directory with directory')
+E('ERR_FS_CP_SOCKET', 'Cannot copy a socket file')
+E('ERR_FS_CP_SYMLINK_TO_SUBDIRECTORY', 'Cannot overwrite symlink in subdirectory of self')
+E('ERR_FS_CP_UNKNOWN', 'Cannot copy an unknown file type')
+E('ERR_FS_EISDIR', 'Path is a directory')
+
+module.exports.ERR_INVALID_ARG_TYPE = class ERR_INVALID_ARG_TYPE extends Error {
+ constructor (name, expected, actual) {
+ super()
+ this.code = 'ERR_INVALID_ARG_TYPE'
+ this.message = `The ${name} argument must be ${expected}. Received ${typeof actual}`
+ }
+}
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/cp/index.js b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/cp/index.js
new file mode 100644
index 00000000000..972ce7aa12a
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/cp/index.js
@@ -0,0 +1,22 @@
+const fs = require('fs/promises')
+const getOptions = require('../common/get-options.js')
+const node = require('../common/node.js')
+const polyfill = require('./polyfill.js')
+
+// node 16.7.0 added fs.cp
+const useNative = node.satisfies('>=16.7.0')
+
+const cp = async (src, dest, opts) => {
+ const options = getOptions(opts, {
+ copy: ['dereference', 'errorOnExist', 'filter', 'force', 'preserveTimestamps', 'recursive'],
+ })
+
+ // the polyfill is tested separately from this module, no need to hack
+ // process.version to try to trigger it just for coverage
+ // istanbul ignore next
+ return useNative
+ ? fs.cp(src, dest, options)
+ : polyfill(src, dest, options)
+}
+
+module.exports = cp
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/cp/polyfill.js b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/cp/polyfill.js
new file mode 100644
index 00000000000..80eb10de971
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/cp/polyfill.js
@@ -0,0 +1,428 @@
+// this file is a modified version of the code in node 17.2.0
+// which is, in turn, a modified version of the fs-extra module on npm
+// node core changes:
+// - Use of the assert module has been replaced with core's error system.
+// - All code related to the glob dependency has been removed.
+// - Bring your own custom fs module is not currently supported.
+// - Some basic code cleanup.
+// changes here:
+// - remove all callback related code
+// - drop sync support
+// - change assertions back to non-internal methods (see options.js)
+// - throws ENOTDIR when rmdir gets an ENOENT for a path that exists in Windows
+'use strict'
+
+const {
+ ERR_FS_CP_DIR_TO_NON_DIR,
+ ERR_FS_CP_EEXIST,
+ ERR_FS_CP_EINVAL,
+ ERR_FS_CP_FIFO_PIPE,
+ ERR_FS_CP_NON_DIR_TO_DIR,
+ ERR_FS_CP_SOCKET,
+ ERR_FS_CP_SYMLINK_TO_SUBDIRECTORY,
+ ERR_FS_CP_UNKNOWN,
+ ERR_FS_EISDIR,
+ ERR_INVALID_ARG_TYPE,
+} = require('./errors.js')
+const {
+ constants: {
+ errno: {
+ EEXIST,
+ EISDIR,
+ EINVAL,
+ ENOTDIR,
+ },
+ },
+} = require('os')
+const {
+ chmod,
+ copyFile,
+ lstat,
+ mkdir,
+ readdir,
+ readlink,
+ stat,
+ symlink,
+ unlink,
+ utimes,
+} = require('fs/promises')
+const {
+ dirname,
+ isAbsolute,
+ join,
+ parse,
+ resolve,
+ sep,
+ toNamespacedPath,
+} = require('path')
+const { fileURLToPath } = require('url')
+
+const defaultOptions = {
+ dereference: false,
+ errorOnExist: false,
+ filter: undefined,
+ force: true,
+ preserveTimestamps: false,
+ recursive: false,
+}
+
+async function cp (src, dest, opts) {
+ if (opts != null && typeof opts !== 'object') {
+ throw new ERR_INVALID_ARG_TYPE('options', ['Object'], opts)
+ }
+ return cpFn(
+ toNamespacedPath(getValidatedPath(src)),
+ toNamespacedPath(getValidatedPath(dest)),
+ { ...defaultOptions, ...opts })
+}
+
+function getValidatedPath (fileURLOrPath) {
+ const path = fileURLOrPath != null && fileURLOrPath.href
+ && fileURLOrPath.origin
+ ? fileURLToPath(fileURLOrPath)
+ : fileURLOrPath
+ return path
+}
+
+async function cpFn (src, dest, opts) {
+ // Warn about using preserveTimestamps on 32-bit node
+ // istanbul ignore next
+ if (opts.preserveTimestamps && process.arch === 'ia32') {
+ const warning = 'Using the preserveTimestamps option in 32-bit ' +
+ 'node is not recommended'
+ process.emitWarning(warning, 'TimestampPrecisionWarning')
+ }
+ const stats = await checkPaths(src, dest, opts)
+ const { srcStat, destStat } = stats
+ await checkParentPaths(src, srcStat, dest)
+ if (opts.filter) {
+ return handleFilter(checkParentDir, destStat, src, dest, opts)
+ }
+ return checkParentDir(destStat, src, dest, opts)
+}
+
+async function checkPaths (src, dest, opts) {
+ const { 0: srcStat, 1: destStat } = await getStats(src, dest, opts)
+ if (destStat) {
+ if (areIdentical(srcStat, destStat)) {
+ throw new ERR_FS_CP_EINVAL({
+ message: 'src and dest cannot be the same',
+ path: dest,
+ syscall: 'cp',
+ errno: EINVAL,
+ })
+ }
+ if (srcStat.isDirectory() && !destStat.isDirectory()) {
+ throw new ERR_FS_CP_DIR_TO_NON_DIR({
+ message: `cannot overwrite directory ${src} ` +
+ `with non-directory ${dest}`,
+ path: dest,
+ syscall: 'cp',
+ errno: EISDIR,
+ })
+ }
+ if (!srcStat.isDirectory() && destStat.isDirectory()) {
+ throw new ERR_FS_CP_NON_DIR_TO_DIR({
+ message: `cannot overwrite non-directory ${src} ` +
+ `with directory ${dest}`,
+ path: dest,
+ syscall: 'cp',
+ errno: ENOTDIR,
+ })
+ }
+ }
+
+ if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {
+ throw new ERR_FS_CP_EINVAL({
+ message: `cannot copy ${src} to a subdirectory of self ${dest}`,
+ path: dest,
+ syscall: 'cp',
+ errno: EINVAL,
+ })
+ }
+ return { srcStat, destStat }
+}
+
+function areIdentical (srcStat, destStat) {
+ return destStat.ino && destStat.dev && destStat.ino === srcStat.ino &&
+ destStat.dev === srcStat.dev
+}
+
+function getStats (src, dest, opts) {
+ const statFunc = opts.dereference ?
+ (file) => stat(file, { bigint: true }) :
+ (file) => lstat(file, { bigint: true })
+ return Promise.all([
+ statFunc(src),
+ statFunc(dest).catch((err) => {
+ // istanbul ignore next: unsure how to cover.
+ if (err.code === 'ENOENT') {
+ return null
+ }
+ // istanbul ignore next: unsure how to cover.
+ throw err
+ }),
+ ])
+}
+
+async function checkParentDir (destStat, src, dest, opts) {
+ const destParent = dirname(dest)
+ const dirExists = await pathExists(destParent)
+ if (dirExists) {
+ return getStatsForCopy(destStat, src, dest, opts)
+ }
+ await mkdir(destParent, { recursive: true })
+ return getStatsForCopy(destStat, src, dest, opts)
+}
+
+function pathExists (dest) {
+ return stat(dest).then(
+ () => true,
+ // istanbul ignore next: not sure when this would occur
+ (err) => (err.code === 'ENOENT' ? false : Promise.reject(err)))
+}
+
+// Recursively check if dest parent is a subdirectory of src.
+// It works for all file types including symlinks since it
+// checks the src and dest inodes. It starts from the deepest
+// parent and stops once it reaches the src parent or the root path.
+async function checkParentPaths (src, srcStat, dest) {
+ const srcParent = resolve(dirname(src))
+ const destParent = resolve(dirname(dest))
+ if (destParent === srcParent || destParent === parse(destParent).root) {
+ return
+ }
+ let destStat
+ try {
+ destStat = await stat(destParent, { bigint: true })
+ } catch (err) {
+ // istanbul ignore else: not sure when this would occur
+ if (err.code === 'ENOENT') {
+ return
+ }
+ // istanbul ignore next: not sure when this would occur
+ throw err
+ }
+ if (areIdentical(srcStat, destStat)) {
+ throw new ERR_FS_CP_EINVAL({
+ message: `cannot copy ${src} to a subdirectory of self ${dest}`,
+ path: dest,
+ syscall: 'cp',
+ errno: EINVAL,
+ })
+ }
+ return checkParentPaths(src, srcStat, destParent)
+}
+
+const normalizePathToArray = (path) =>
+ resolve(path).split(sep).filter(Boolean)
+
+// Return true if dest is a subdir of src, otherwise false.
+// It only checks the path strings.
+function isSrcSubdir (src, dest) {
+ const srcArr = normalizePathToArray(src)
+ const destArr = normalizePathToArray(dest)
+ return srcArr.every((cur, i) => destArr[i] === cur)
+}
+
+async function handleFilter (onInclude, destStat, src, dest, opts, cb) {
+ const include = await opts.filter(src, dest)
+ if (include) {
+ return onInclude(destStat, src, dest, opts, cb)
+ }
+}
+
+function startCopy (destStat, src, dest, opts) {
+ if (opts.filter) {
+ return handleFilter(getStatsForCopy, destStat, src, dest, opts)
+ }
+ return getStatsForCopy(destStat, src, dest, opts)
+}
+
+async function getStatsForCopy (destStat, src, dest, opts) {
+ const statFn = opts.dereference ? stat : lstat
+ const srcStat = await statFn(src)
+ // istanbul ignore else: can't portably test FIFO
+ if (srcStat.isDirectory() && opts.recursive) {
+ return onDir(srcStat, destStat, src, dest, opts)
+ } else if (srcStat.isDirectory()) {
+ throw new ERR_FS_EISDIR({
+ message: `${src} is a directory (not copied)`,
+ path: src,
+ syscall: 'cp',
+ errno: EINVAL,
+ })
+ } else if (srcStat.isFile() ||
+ srcStat.isCharacterDevice() ||
+ srcStat.isBlockDevice()) {
+ return onFile(srcStat, destStat, src, dest, opts)
+ } else if (srcStat.isSymbolicLink()) {
+ return onLink(destStat, src, dest)
+ } else if (srcStat.isSocket()) {
+ throw new ERR_FS_CP_SOCKET({
+ message: `cannot copy a socket file: ${dest}`,
+ path: dest,
+ syscall: 'cp',
+ errno: EINVAL,
+ })
+ } else if (srcStat.isFIFO()) {
+ throw new ERR_FS_CP_FIFO_PIPE({
+ message: `cannot copy a FIFO pipe: ${dest}`,
+ path: dest,
+ syscall: 'cp',
+ errno: EINVAL,
+ })
+ }
+ // istanbul ignore next: should be unreachable
+ throw new ERR_FS_CP_UNKNOWN({
+ message: `cannot copy an unknown file type: ${dest}`,
+ path: dest,
+ syscall: 'cp',
+ errno: EINVAL,
+ })
+}
+
+function onFile (srcStat, destStat, src, dest, opts) {
+ if (!destStat) {
+ return _copyFile(srcStat, src, dest, opts)
+ }
+ return mayCopyFile(srcStat, src, dest, opts)
+}
+
+async function mayCopyFile (srcStat, src, dest, opts) {
+ if (opts.force) {
+ await unlink(dest)
+ return _copyFile(srcStat, src, dest, opts)
+ } else if (opts.errorOnExist) {
+ throw new ERR_FS_CP_EEXIST({
+ message: `${dest} already exists`,
+ path: dest,
+ syscall: 'cp',
+ errno: EEXIST,
+ })
+ }
+}
+
+async function _copyFile (srcStat, src, dest, opts) {
+ await copyFile(src, dest)
+ if (opts.preserveTimestamps) {
+ return handleTimestampsAndMode(srcStat.mode, src, dest)
+ }
+ return setDestMode(dest, srcStat.mode)
+}
+
+async function handleTimestampsAndMode (srcMode, src, dest) {
+ // Make sure the file is writable before setting the timestamp
+ // otherwise open fails with EPERM when invoked with 'r+'
+ // (through utimes call)
+ if (fileIsNotWritable(srcMode)) {
+ await makeFileWritable(dest, srcMode)
+ return setDestTimestampsAndMode(srcMode, src, dest)
+ }
+ return setDestTimestampsAndMode(srcMode, src, dest)
+}
+
+function fileIsNotWritable (srcMode) {
+ return (srcMode & 0o200) === 0
+}
+
+function makeFileWritable (dest, srcMode) {
+ return setDestMode(dest, srcMode | 0o200)
+}
+
+async function setDestTimestampsAndMode (srcMode, src, dest) {
+ await setDestTimestamps(src, dest)
+ return setDestMode(dest, srcMode)
+}
+
+function setDestMode (dest, srcMode) {
+ return chmod(dest, srcMode)
+}
+
+async function setDestTimestamps (src, dest) {
+ // The initial srcStat.atime cannot be trusted
+ // because it is modified by the read(2) system call
+ // (See https://nodejs.org/api/fs.html#fs_stat_time_values)
+ const updatedSrcStat = await stat(src)
+ return utimes(dest, updatedSrcStat.atime, updatedSrcStat.mtime)
+}
+
+function onDir (srcStat, destStat, src, dest, opts) {
+ if (!destStat) {
+ return mkDirAndCopy(srcStat.mode, src, dest, opts)
+ }
+ return copyDir(src, dest, opts)
+}
+
+async function mkDirAndCopy (srcMode, src, dest, opts) {
+ await mkdir(dest)
+ await copyDir(src, dest, opts)
+ return setDestMode(dest, srcMode)
+}
+
+async function copyDir (src, dest, opts) {
+ const dir = await readdir(src)
+ for (let i = 0; i < dir.length; i++) {
+ const item = dir[i]
+ const srcItem = join(src, item)
+ const destItem = join(dest, item)
+ const { destStat } = await checkPaths(srcItem, destItem, opts)
+ await startCopy(destStat, srcItem, destItem, opts)
+ }
+}
+
+async function onLink (destStat, src, dest) {
+ let resolvedSrc = await readlink(src)
+ if (!isAbsolute(resolvedSrc)) {
+ resolvedSrc = resolve(dirname(src), resolvedSrc)
+ }
+ if (!destStat) {
+ return symlink(resolvedSrc, dest)
+ }
+ let resolvedDest
+ try {
+ resolvedDest = await readlink(dest)
+ } catch (err) {
+ // Dest exists and is a regular file or directory,
+ // Windows may throw UNKNOWN error. If dest already exists,
+ // fs throws error anyway, so no need to guard against it here.
+ // istanbul ignore next: can only test on windows
+ if (err.code === 'EINVAL' || err.code === 'UNKNOWN') {
+ return symlink(resolvedSrc, dest)
+ }
+ // istanbul ignore next: should not be possible
+ throw err
+ }
+ if (!isAbsolute(resolvedDest)) {
+ resolvedDest = resolve(dirname(dest), resolvedDest)
+ }
+ if (isSrcSubdir(resolvedSrc, resolvedDest)) {
+ throw new ERR_FS_CP_EINVAL({
+ message: `cannot copy ${resolvedSrc} to a subdirectory of self ` +
+ `${resolvedDest}`,
+ path: dest,
+ syscall: 'cp',
+ errno: EINVAL,
+ })
+ }
+ // Do not copy if src is a subdir of dest since unlinking
+ // dest in this case would result in removing src contents
+ // and therefore a broken symlink would be created.
+ const srcStat = await stat(src)
+ if (srcStat.isDirectory() && isSrcSubdir(resolvedDest, resolvedSrc)) {
+ throw new ERR_FS_CP_SYMLINK_TO_SUBDIRECTORY({
+ message: `cannot overwrite ${resolvedDest} with ${resolvedSrc}`,
+ path: dest,
+ syscall: 'cp',
+ errno: EINVAL,
+ })
+ }
+ return copyLink(resolvedSrc, dest)
+}
+
+async function copyLink (resolvedSrc, dest) {
+ await unlink(dest)
+ return symlink(resolvedSrc, dest)
+}
+
+module.exports = cp
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/index.js b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/index.js
new file mode 100644
index 00000000000..81c746304cc
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/index.js
@@ -0,0 +1,13 @@
+'use strict'
+
+const cp = require('./cp/index.js')
+const withTempDir = require('./with-temp-dir.js')
+const readdirScoped = require('./readdir-scoped.js')
+const moveFile = require('./move-file.js')
+
+module.exports = {
+ cp,
+ withTempDir,
+ readdirScoped,
+ moveFile,
+}
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/move-file.js b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/move-file.js
new file mode 100644
index 00000000000..d56e06d3846
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/move-file.js
@@ -0,0 +1,78 @@
+const { dirname, join, resolve, relative, isAbsolute } = require('path')
+const fs = require('fs/promises')
+
+const pathExists = async path => {
+ try {
+ await fs.access(path)
+ return true
+ } catch (er) {
+ return er.code !== 'ENOENT'
+ }
+}
+
+const moveFile = async (source, destination, options = {}, root = true, symlinks = []) => {
+ if (!source || !destination) {
+ throw new TypeError('`source` and `destination` file required')
+ }
+
+ options = {
+ overwrite: true,
+ ...options,
+ }
+
+ if (!options.overwrite && await pathExists(destination)) {
+ throw new Error(`The destination file exists: ${destination}`)
+ }
+
+ await fs.mkdir(dirname(destination), { recursive: true })
+
+ try {
+ await fs.rename(source, destination)
+ } catch (error) {
+ if (error.code === 'EXDEV' || error.code === 'EPERM') {
+ const sourceStat = await fs.lstat(source)
+ if (sourceStat.isDirectory()) {
+ const files = await fs.readdir(source)
+ await Promise.all(files.map((file) =>
+ moveFile(join(source, file), join(destination, file), options, false, symlinks)
+ ))
+ } else if (sourceStat.isSymbolicLink()) {
+ symlinks.push({ source, destination })
+ } else {
+ await fs.copyFile(source, destination)
+ }
+ } else {
+ throw error
+ }
+ }
+
+ if (root) {
+ await Promise.all(symlinks.map(async ({ source: symSource, destination: symDestination }) => {
+ let target = await fs.readlink(symSource)
+ // junction symlinks in windows will be absolute paths, so we need to
+ // make sure they point to the symlink destination
+ if (isAbsolute(target)) {
+ target = resolve(symDestination, relative(symSource, target))
+ }
+ // try to determine what the actual file is so we can create the correct
+ // type of symlink in windows
+ let targetStat = 'file'
+ try {
+ targetStat = await fs.stat(resolve(dirname(symSource), target))
+ if (targetStat.isDirectory()) {
+ targetStat = 'junction'
+ }
+ } catch {
+ // targetStat remains 'file'
+ }
+ await fs.symlink(
+ target,
+ symDestination,
+ targetStat
+ )
+ }))
+ await fs.rm(source, { recursive: true, force: true })
+ }
+}
+
+module.exports = moveFile
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/readdir-scoped.js b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/readdir-scoped.js
new file mode 100644
index 00000000000..cd601dfbe74
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/readdir-scoped.js
@@ -0,0 +1,20 @@
+const { readdir } = require('fs/promises')
+const { join } = require('path')
+
+const readdirScoped = async (dir) => {
+ const results = []
+
+ for (const item of await readdir(dir)) {
+ if (item.startsWith('@')) {
+ for (const scopedItem of await readdir(join(dir, item))) {
+ results.push(join(item, scopedItem))
+ }
+ } else {
+ results.push(item)
+ }
+ }
+
+ return results
+}
+
+module.exports = readdirScoped
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/with-temp-dir.js b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/with-temp-dir.js
new file mode 100644
index 00000000000..0738ac4f29e
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/lib/with-temp-dir.js
@@ -0,0 +1,39 @@
+const { join, sep } = require('path')
+
+const getOptions = require('./common/get-options.js')
+const { mkdir, mkdtemp, rm } = require('fs/promises')
+
+// create a temp directory, ensure its permissions match its parent, then call
+// the supplied function passing it the path to the directory. clean up after
+// the function finishes, whether it throws or not
+const withTempDir = async (root, fn, opts) => {
+ const options = getOptions(opts, {
+ copy: ['tmpPrefix'],
+ })
+ // create the directory
+ await mkdir(root, { recursive: true })
+
+ const target = await mkdtemp(join(`${root}${sep}`, options.tmpPrefix || ''))
+ let err
+ let result
+
+ try {
+ result = await fn(target)
+ } catch (_err) {
+ err = _err
+ }
+
+ try {
+ await rm(target, { force: true, recursive: true })
+ } catch {
+ // ignore errors
+ }
+
+ if (err) {
+ throw err
+ }
+
+ return result
+}
+
+module.exports = withTempDir
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/package.json b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/package.json
new file mode 100644
index 00000000000..5261a11b780
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs/package.json
@@ -0,0 +1,52 @@
+{
+ "name": "@npmcli/fs",
+ "version": "3.1.1",
+ "description": "filesystem utilities for the npm cli",
+ "main": "lib/index.js",
+ "files": [
+ "bin/",
+ "lib/"
+ ],
+ "scripts": {
+ "snap": "tap",
+ "test": "tap",
+ "npmclilint": "npmcli-lint",
+ "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lintfix": "npm run lint -- --fix",
+ "posttest": "npm run lint",
+ "postsnap": "npm run lintfix --",
+ "postlint": "template-oss-check",
+ "template-oss-apply": "template-oss-apply --force"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/npm/fs.git"
+ },
+ "keywords": [
+ "npm",
+ "oss"
+ ],
+ "author": "GitHub Inc.",
+ "license": "ISC",
+ "devDependencies": {
+ "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/template-oss": "4.22.0",
+ "tap": "^16.0.1"
+ },
+ "dependencies": {
+ "semver": "^7.3.5"
+ },
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ },
+ "templateOSS": {
+ "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
+ "version": "4.22.0"
+ },
+ "tap": {
+ "nyc-arg": [
+ "--exclude",
+ "tap-snapshots/**"
+ ]
+ }
+}
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/LICENSE.md b/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/LICENSE.md
new file mode 100644
index 00000000000..8d28acf866d
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/LICENSE.md
@@ -0,0 +1,16 @@
+ISC License
+
+Copyright (c) npm, Inc.
+
+Permission to use, copy, modify, and/or distribute this software for
+any purpose with or without fee is hereby granted, provided that the
+above copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE COPYRIGHT HOLDER DISCLAIMS
+ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
+CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
+USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/content/path.js b/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/content/path.js
new file mode 100644
index 00000000000..ad5a76a4f73
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/content/path.js
@@ -0,0 +1,29 @@
+'use strict'
+
+const contentVer = require('../../package.json')['cache-version'].content
+const hashToSegments = require('../util/hash-to-segments')
+const path = require('path')
+const ssri = require('ssri')
+
+// Current format of content file path:
+//
+// sha512-BaSE64Hex= ->
+// ~/.my-cache/content-v2/sha512/ba/da/55deadbeefc0ffee
+//
+module.exports = contentPath
+
+function contentPath (cache, integrity) {
+ const sri = ssri.parse(integrity, { single: true })
+ // contentPath is the *strongest* algo given
+ return path.join(
+ contentDir(cache),
+ sri.algorithm,
+ ...hashToSegments(sri.hexDigest())
+ )
+}
+
+module.exports.contentDir = contentDir
+
+function contentDir (cache) {
+ return path.join(cache, `content-v${contentVer}`)
+}
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/content/read.js b/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/content/read.js
new file mode 100644
index 00000000000..5f6192c3cec
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/content/read.js
@@ -0,0 +1,165 @@
+'use strict'
+
+const fs = require('fs/promises')
+const fsm = require('fs-minipass')
+const ssri = require('ssri')
+const contentPath = require('./path')
+const Pipeline = require('minipass-pipeline')
+
+module.exports = read
+
+const MAX_SINGLE_READ_SIZE = 64 * 1024 * 1024
+async function read (cache, integrity, opts = {}) {
+ const { size } = opts
+ const { stat, cpath, sri } = await withContentSri(cache, integrity, async (cpath, sri) => {
+ // get size
+ const stat = size ? { size } : await fs.stat(cpath)
+ return { stat, cpath, sri }
+ })
+
+ if (stat.size > MAX_SINGLE_READ_SIZE) {
+ return readPipeline(cpath, stat.size, sri, new Pipeline()).concat()
+ }
+
+ const data = await fs.readFile(cpath, { encoding: null })
+
+ if (stat.size !== data.length) {
+ throw sizeError(stat.size, data.length)
+ }
+
+ if (!ssri.checkData(data, sri)) {
+ throw integrityError(sri, cpath)
+ }
+
+ return data
+}
+
+const readPipeline = (cpath, size, sri, stream) => {
+ stream.push(
+ new fsm.ReadStream(cpath, {
+ size,
+ readSize: MAX_SINGLE_READ_SIZE,
+ }),
+ ssri.integrityStream({
+ integrity: sri,
+ size,
+ })
+ )
+ return stream
+}
+
+module.exports.stream = readStream
+module.exports.readStream = readStream
+
+function readStream (cache, integrity, opts = {}) {
+ const { size } = opts
+ const stream = new Pipeline()
+ // Set all this up to run on the stream and then just return the stream
+ Promise.resolve().then(async () => {
+ const { stat, cpath, sri } = await withContentSri(cache, integrity, async (cpath, sri) => {
+ // get size
+ const stat = size ? { size } : await fs.stat(cpath)
+ return { stat, cpath, sri }
+ })
+
+ return readPipeline(cpath, stat.size, sri, stream)
+ }).catch(err => stream.emit('error', err))
+
+ return stream
+}
+
+module.exports.copy = copy
+
+function copy (cache, integrity, dest) {
+ return withContentSri(cache, integrity, (cpath) => {
+ return fs.copyFile(cpath, dest)
+ })
+}
+
+module.exports.hasContent = hasContent
+
+async function hasContent (cache, integrity) {
+ if (!integrity) {
+ return false
+ }
+
+ try {
+ return await withContentSri(cache, integrity, async (cpath, sri) => {
+ const stat = await fs.stat(cpath)
+ return { size: stat.size, sri, stat }
+ })
+ } catch (err) {
+ if (err.code === 'ENOENT') {
+ return false
+ }
+
+ if (err.code === 'EPERM') {
+ /* istanbul ignore else */
+ if (process.platform !== 'win32') {
+ throw err
+ } else {
+ return false
+ }
+ }
+ }
+}
+
+async function withContentSri (cache, integrity, fn) {
+ const sri = ssri.parse(integrity)
+ // If `integrity` has multiple entries, pick the first digest
+ // with available local data.
+ const algo = sri.pickAlgorithm()
+ const digests = sri[algo]
+
+ if (digests.length <= 1) {
+ const cpath = contentPath(cache, digests[0])
+ return fn(cpath, digests[0])
+ } else {
+ // Can't use race here because a generic error can happen before
+ // a ENOENT error, and can happen before a valid result
+ const results = await Promise.all(digests.map(async (meta) => {
+ try {
+ return await withContentSri(cache, meta, fn)
+ } catch (err) {
+ if (err.code === 'ENOENT') {
+ return Object.assign(
+ new Error('No matching content found for ' + sri.toString()),
+ { code: 'ENOENT' }
+ )
+ }
+ return err
+ }
+ }))
+ // Return the first non error if it is found
+ const result = results.find((r) => !(r instanceof Error))
+ if (result) {
+ return result
+ }
+
+ // Throw the No matching content found error
+ const enoentError = results.find((r) => r.code === 'ENOENT')
+ if (enoentError) {
+ throw enoentError
+ }
+
+ // Throw generic error
+ throw results.find((r) => r instanceof Error)
+ }
+}
+
+function sizeError (expected, found) {
+ /* eslint-disable-next-line max-len */
+ const err = new Error(`Bad data size: expected inserted data to be ${expected} bytes, but got ${found} instead`)
+ err.expected = expected
+ err.found = found
+ err.code = 'EBADSIZE'
+ return err
+}
+
+function integrityError (sri, path) {
+ const err = new Error(`Integrity verification failed for ${sri} (${path})`)
+ err.code = 'EINTEGRITY'
+ err.sri = sri
+ err.path = path
+ return err
+}
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/content/rm.js b/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/content/rm.js
new file mode 100644
index 00000000000..ce58d679e4c
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/content/rm.js
@@ -0,0 +1,18 @@
+'use strict'
+
+const fs = require('fs/promises')
+const contentPath = require('./path')
+const { hasContent } = require('./read')
+
+module.exports = rm
+
+async function rm (cache, integrity) {
+ const content = await hasContent(cache, integrity)
+ // ~pretty~ sure we can't end up with a content lacking sri, but be safe
+ if (content && content.sri) {
+ await fs.rm(contentPath(cache, content.sri), { recursive: true, force: true })
+ return true
+ } else {
+ return false
+ }
+}
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/content/write.js b/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/content/write.js
new file mode 100644
index 00000000000..e7187abca87
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/content/write.js
@@ -0,0 +1,206 @@
+'use strict'
+
+const events = require('events')
+
+const contentPath = require('./path')
+const fs = require('fs/promises')
+const { moveFile } = require('@npmcli/fs')
+const { Minipass } = require('minipass')
+const Pipeline = require('minipass-pipeline')
+const Flush = require('minipass-flush')
+const path = require('path')
+const ssri = require('ssri')
+const uniqueFilename = require('unique-filename')
+const fsm = require('fs-minipass')
+
+module.exports = write
+
+// Cache of move operations in process so we don't duplicate
+const moveOperations = new Map()
+
+async function write (cache, data, opts = {}) {
+ const { algorithms, size, integrity } = opts
+
+ if (typeof size === 'number' && data.length !== size) {
+ throw sizeError(size, data.length)
+ }
+
+ const sri = ssri.fromData(data, algorithms ? { algorithms } : {})
+ if (integrity && !ssri.checkData(data, integrity, opts)) {
+ throw checksumError(integrity, sri)
+ }
+
+ for (const algo in sri) {
+ const tmp = await makeTmp(cache, opts)
+ const hash = sri[algo].toString()
+ try {
+ await fs.writeFile(tmp.target, data, { flag: 'wx' })
+ await moveToDestination(tmp, cache, hash, opts)
+ } finally {
+ if (!tmp.moved) {
+ await fs.rm(tmp.target, { recursive: true, force: true })
+ }
+ }
+ }
+ return { integrity: sri, size: data.length }
+}
+
+module.exports.stream = writeStream
+
+// writes proxied to the 'inputStream' that is passed to the Promise
+// 'end' is deferred until content is handled.
+class CacacheWriteStream extends Flush {
+ constructor (cache, opts) {
+ super()
+ this.opts = opts
+ this.cache = cache
+ this.inputStream = new Minipass()
+ this.inputStream.on('error', er => this.emit('error', er))
+ this.inputStream.on('drain', () => this.emit('drain'))
+ this.handleContentP = null
+ }
+
+ write (chunk, encoding, cb) {
+ if (!this.handleContentP) {
+ this.handleContentP = handleContent(
+ this.inputStream,
+ this.cache,
+ this.opts
+ )
+ this.handleContentP.catch(error => this.emit('error', error))
+ }
+ return this.inputStream.write(chunk, encoding, cb)
+ }
+
+ flush (cb) {
+ this.inputStream.end(() => {
+ if (!this.handleContentP) {
+ const e = new Error('Cache input stream was empty')
+ e.code = 'ENODATA'
+ // empty streams are probably emitting end right away.
+ // defer this one tick by rejecting a promise on it.
+ return Promise.reject(e).catch(cb)
+ }
+ // eslint-disable-next-line promise/catch-or-return
+ this.handleContentP.then(
+ (res) => {
+ res.integrity && this.emit('integrity', res.integrity)
+ // eslint-disable-next-line promise/always-return
+ res.size !== null && this.emit('size', res.size)
+ cb()
+ },
+ (er) => cb(er)
+ )
+ })
+ }
+}
+
+function writeStream (cache, opts = {}) {
+ return new CacacheWriteStream(cache, opts)
+}
+
+async function handleContent (inputStream, cache, opts) {
+ const tmp = await makeTmp(cache, opts)
+ try {
+ const res = await pipeToTmp(inputStream, cache, tmp.target, opts)
+ await moveToDestination(
+ tmp,
+ cache,
+ res.integrity,
+ opts
+ )
+ return res
+ } finally {
+ if (!tmp.moved) {
+ await fs.rm(tmp.target, { recursive: true, force: true })
+ }
+ }
+}
+
+async function pipeToTmp (inputStream, cache, tmpTarget, opts) {
+ const outStream = new fsm.WriteStream(tmpTarget, {
+ flags: 'wx',
+ })
+
+ if (opts.integrityEmitter) {
+ // we need to create these all simultaneously since they can fire in any order
+ const [integrity, size] = await Promise.all([
+ events.once(opts.integrityEmitter, 'integrity').then(res => res[0]),
+ events.once(opts.integrityEmitter, 'size').then(res => res[0]),
+ new Pipeline(inputStream, outStream).promise(),
+ ])
+ return { integrity, size }
+ }
+
+ let integrity
+ let size
+ const hashStream = ssri.integrityStream({
+ integrity: opts.integrity,
+ algorithms: opts.algorithms,
+ size: opts.size,
+ })
+ hashStream.on('integrity', i => {
+ integrity = i
+ })
+ hashStream.on('size', s => {
+ size = s
+ })
+
+ const pipeline = new Pipeline(inputStream, hashStream, outStream)
+ await pipeline.promise()
+ return { integrity, size }
+}
+
+async function makeTmp (cache, opts) {
+ const tmpTarget = uniqueFilename(path.join(cache, 'tmp'), opts.tmpPrefix)
+ await fs.mkdir(path.dirname(tmpTarget), { recursive: true })
+ return {
+ target: tmpTarget,
+ moved: false,
+ }
+}
+
+async function moveToDestination (tmp, cache, sri) {
+ const destination = contentPath(cache, sri)
+ const destDir = path.dirname(destination)
+ if (moveOperations.has(destination)) {
+ return moveOperations.get(destination)
+ }
+ moveOperations.set(
+ destination,
+ fs.mkdir(destDir, { recursive: true })
+ .then(async () => {
+ await moveFile(tmp.target, destination, { overwrite: false })
+ tmp.moved = true
+ return tmp.moved
+ })
+ .catch(err => {
+ if (!err.message.startsWith('The destination file exists')) {
+ throw Object.assign(err, { code: 'EEXIST' })
+ }
+ }).finally(() => {
+ moveOperations.delete(destination)
+ })
+
+ )
+ return moveOperations.get(destination)
+}
+
+function sizeError (expected, found) {
+ /* eslint-disable-next-line max-len */
+ const err = new Error(`Bad data size: expected inserted data to be ${expected} bytes, but got ${found} instead`)
+ err.expected = expected
+ err.found = found
+ err.code = 'EBADSIZE'
+ return err
+}
+
+function checksumError (expected, found) {
+ const err = new Error(`Integrity check failed:
+ Wanted: ${expected}
+ Found: ${found}`)
+ err.code = 'EINTEGRITY'
+ err.expected = expected
+ err.found = found
+ return err
+}
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/entry-index.js b/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/entry-index.js
new file mode 100644
index 00000000000..89c28f2f257
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/entry-index.js
@@ -0,0 +1,336 @@
+'use strict'
+
+const crypto = require('crypto')
+const {
+ appendFile,
+ mkdir,
+ readFile,
+ readdir,
+ rm,
+ writeFile,
+} = require('fs/promises')
+const { Minipass } = require('minipass')
+const path = require('path')
+const ssri = require('ssri')
+const uniqueFilename = require('unique-filename')
+
+const contentPath = require('./content/path')
+const hashToSegments = require('./util/hash-to-segments')
+const indexV = require('../package.json')['cache-version'].index
+const { moveFile } = require('@npmcli/fs')
+
+const pMap = require('p-map')
+const lsStreamConcurrency = 5
+
+module.exports.NotFoundError = class NotFoundError extends Error {
+ constructor (cache, key) {
+ super(`No cache entry for ${key} found in ${cache}`)
+ this.code = 'ENOENT'
+ this.cache = cache
+ this.key = key
+ }
+}
+
+module.exports.compact = compact
+
+async function compact (cache, key, matchFn, opts = {}) {
+ const bucket = bucketPath(cache, key)
+ const entries = await bucketEntries(bucket)
+ const newEntries = []
+ // we loop backwards because the bottom-most result is the newest
+ // since we add new entries with appendFile
+ for (let i = entries.length - 1; i >= 0; --i) {
+ const entry = entries[i]
+ // a null integrity could mean either a delete was appended
+ // or the user has simply stored an index that does not map
+ // to any content. we determine if the user wants to keep the
+ // null integrity based on the validateEntry function passed in options.
+ // if the integrity is null and no validateEntry is provided, we break
+ // as we consider the null integrity to be a deletion of everything
+ // that came before it.
+ if (entry.integrity === null && !opts.validateEntry) {
+ break
+ }
+
+ // if this entry is valid, and it is either the first entry or
+ // the newEntries array doesn't already include an entry that
+ // matches this one based on the provided matchFn, then we add
+ // it to the beginning of our list
+ if ((!opts.validateEntry || opts.validateEntry(entry) === true) &&
+ (newEntries.length === 0 ||
+ !newEntries.find((oldEntry) => matchFn(oldEntry, entry)))) {
+ newEntries.unshift(entry)
+ }
+ }
+
+ const newIndex = '\n' + newEntries.map((entry) => {
+ const stringified = JSON.stringify(entry)
+ const hash = hashEntry(stringified)
+ return `${hash}\t${stringified}`
+ }).join('\n')
+
+ const setup = async () => {
+ const target = uniqueFilename(path.join(cache, 'tmp'), opts.tmpPrefix)
+ await mkdir(path.dirname(target), { recursive: true })
+ return {
+ target,
+ moved: false,
+ }
+ }
+
+ const teardown = async (tmp) => {
+ if (!tmp.moved) {
+ return rm(tmp.target, { recursive: true, force: true })
+ }
+ }
+
+ const write = async (tmp) => {
+ await writeFile(tmp.target, newIndex, { flag: 'wx' })
+ await mkdir(path.dirname(bucket), { recursive: true })
+ // we use @npmcli/move-file directly here because we
+ // want to overwrite the existing file
+ await moveFile(tmp.target, bucket)
+ tmp.moved = true
+ }
+
+ // write the file atomically
+ const tmp = await setup()
+ try {
+ await write(tmp)
+ } finally {
+ await teardown(tmp)
+ }
+
+ // we reverse the list we generated such that the newest
+ // entries come first in order to make looping through them easier
+ // the true passed to formatEntry tells it to keep null
+ // integrity values, if they made it this far it's because
+ // validateEntry returned true, and as such we should return it
+ return newEntries.reverse().map((entry) => formatEntry(cache, entry, true))
+}
+
+module.exports.insert = insert
+
+async function insert (cache, key, integrity, opts = {}) {
+ const { metadata, size, time } = opts
+ const bucket = bucketPath(cache, key)
+ const entry = {
+ key,
+ integrity: integrity && ssri.stringify(integrity),
+ time: time || Date.now(),
+ size,
+ metadata,
+ }
+ try {
+ await mkdir(path.dirname(bucket), { recursive: true })
+ const stringified = JSON.stringify(entry)
+ // NOTE - Cleverness ahoy!
+ //
+ // This works because it's tremendously unlikely for an entry to corrupt
+ // another while still preserving the string length of the JSON in
+ // question. So, we just slap the length in there and verify it on read.
+ //
+ // Thanks to @isaacs for the whiteboarding session that ended up with
+ // this.
+ await appendFile(bucket, `\n${hashEntry(stringified)}\t${stringified}`)
+ } catch (err) {
+ if (err.code === 'ENOENT') {
+ return undefined
+ }
+
+ throw err
+ }
+ return formatEntry(cache, entry)
+}
+
+module.exports.find = find
+
+async function find (cache, key) {
+ const bucket = bucketPath(cache, key)
+ try {
+ const entries = await bucketEntries(bucket)
+ return entries.reduce((latest, next) => {
+ if (next && next.key === key) {
+ return formatEntry(cache, next)
+ } else {
+ return latest
+ }
+ }, null)
+ } catch (err) {
+ if (err.code === 'ENOENT') {
+ return null
+ } else {
+ throw err
+ }
+ }
+}
+
+module.exports.delete = del
+
+function del (cache, key, opts = {}) {
+ if (!opts.removeFully) {
+ return insert(cache, key, null, opts)
+ }
+
+ const bucket = bucketPath(cache, key)
+ return rm(bucket, { recursive: true, force: true })
+}
+
+module.exports.lsStream = lsStream
+
+function lsStream (cache) {
+ const indexDir = bucketDir(cache)
+ const stream = new Minipass({ objectMode: true })
+
+ // Set all this up to run on the stream and then just return the stream
+ Promise.resolve().then(async () => {
+ const buckets = await readdirOrEmpty(indexDir)
+ await pMap(buckets, async (bucket) => {
+ const bucketPath = path.join(indexDir, bucket)
+ const subbuckets = await readdirOrEmpty(bucketPath)
+ await pMap(subbuckets, async (subbucket) => {
+ const subbucketPath = path.join(bucketPath, subbucket)
+
+ // "/cachename//./*"
+ const subbucketEntries = await readdirOrEmpty(subbucketPath)
+ await pMap(subbucketEntries, async (entry) => {
+ const entryPath = path.join(subbucketPath, entry)
+ try {
+ const entries = await bucketEntries(entryPath)
+ // using a Map here prevents duplicate keys from showing up
+ // twice, I guess?
+ const reduced = entries.reduce((acc, entry) => {
+ acc.set(entry.key, entry)
+ return acc
+ }, new Map())
+ // reduced is a map of key => entry
+ for (const entry of reduced.values()) {
+ const formatted = formatEntry(cache, entry)
+ if (formatted) {
+ stream.write(formatted)
+ }
+ }
+ } catch (err) {
+ if (err.code === 'ENOENT') {
+ return undefined
+ }
+ throw err
+ }
+ },
+ { concurrency: lsStreamConcurrency })
+ },
+ { concurrency: lsStreamConcurrency })
+ },
+ { concurrency: lsStreamConcurrency })
+ stream.end()
+ return stream
+ }).catch(err => stream.emit('error', err))
+
+ return stream
+}
+
+module.exports.ls = ls
+
+async function ls (cache) {
+ const entries = await lsStream(cache).collect()
+ return entries.reduce((acc, xs) => {
+ acc[xs.key] = xs
+ return acc
+ }, {})
+}
+
+module.exports.bucketEntries = bucketEntries
+
+async function bucketEntries (bucket, filter) {
+ const data = await readFile(bucket, 'utf8')
+ return _bucketEntries(data, filter)
+}
+
+function _bucketEntries (data) {
+ const entries = []
+ data.split('\n').forEach((entry) => {
+ if (!entry) {
+ return
+ }
+
+ const pieces = entry.split('\t')
+ if (!pieces[1] || hashEntry(pieces[1]) !== pieces[0]) {
+ // Hash is no good! Corruption or malice? Doesn't matter!
+ // EJECT EJECT
+ return
+ }
+ let obj
+ try {
+ obj = JSON.parse(pieces[1])
+ } catch (_) {
+ // eslint-ignore-next-line no-empty-block
+ }
+ // coverage disabled here, no need to test with an entry that parses to something falsey
+ // istanbul ignore else
+ if (obj) {
+ entries.push(obj)
+ }
+ })
+ return entries
+}
+
+module.exports.bucketDir = bucketDir
+
+function bucketDir (cache) {
+ return path.join(cache, `index-v${indexV}`)
+}
+
+module.exports.bucketPath = bucketPath
+
+function bucketPath (cache, key) {
+ const hashed = hashKey(key)
+ return path.join.apply(
+ path,
+ [bucketDir(cache)].concat(hashToSegments(hashed))
+ )
+}
+
+module.exports.hashKey = hashKey
+
+function hashKey (key) {
+ return hash(key, 'sha256')
+}
+
+module.exports.hashEntry = hashEntry
+
+function hashEntry (str) {
+ return hash(str, 'sha1')
+}
+
+function hash (str, digest) {
+ return crypto
+ .createHash(digest)
+ .update(str)
+ .digest('hex')
+}
+
+function formatEntry (cache, entry, keepAll) {
+ // Treat null digests as deletions. They'll shadow any previous entries.
+ if (!entry.integrity && !keepAll) {
+ return null
+ }
+
+ return {
+ key: entry.key,
+ integrity: entry.integrity,
+ path: entry.integrity ? contentPath(cache, entry.integrity) : undefined,
+ size: entry.size,
+ time: entry.time,
+ metadata: entry.metadata,
+ }
+}
+
+function readdirOrEmpty (dir) {
+ return readdir(dir).catch((err) => {
+ if (err.code === 'ENOENT' || err.code === 'ENOTDIR') {
+ return []
+ }
+
+ throw err
+ })
+}
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/get.js b/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/get.js
new file mode 100644
index 00000000000..80ec206c7ec
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/get.js
@@ -0,0 +1,170 @@
+'use strict'
+
+const Collect = require('minipass-collect')
+const { Minipass } = require('minipass')
+const Pipeline = require('minipass-pipeline')
+
+const index = require('./entry-index')
+const memo = require('./memoization')
+const read = require('./content/read')
+
+async function getData (cache, key, opts = {}) {
+ const { integrity, memoize, size } = opts
+ const memoized = memo.get(cache, key, opts)
+ if (memoized && memoize !== false) {
+ return {
+ metadata: memoized.entry.metadata,
+ data: memoized.data,
+ integrity: memoized.entry.integrity,
+ size: memoized.entry.size,
+ }
+ }
+
+ const entry = await index.find(cache, key, opts)
+ if (!entry) {
+ throw new index.NotFoundError(cache, key)
+ }
+ const data = await read(cache, entry.integrity, { integrity, size })
+ if (memoize) {
+ memo.put(cache, entry, data, opts)
+ }
+
+ return {
+ data,
+ metadata: entry.metadata,
+ size: entry.size,
+ integrity: entry.integrity,
+ }
+}
+module.exports = getData
+
+async function getDataByDigest (cache, key, opts = {}) {
+ const { integrity, memoize, size } = opts
+ const memoized = memo.get.byDigest(cache, key, opts)
+ if (memoized && memoize !== false) {
+ return memoized
+ }
+
+ const res = await read(cache, key, { integrity, size })
+ if (memoize) {
+ memo.put.byDigest(cache, key, res, opts)
+ }
+ return res
+}
+module.exports.byDigest = getDataByDigest
+
+const getMemoizedStream = (memoized) => {
+ const stream = new Minipass()
+ stream.on('newListener', function (ev, cb) {
+ ev === 'metadata' && cb(memoized.entry.metadata)
+ ev === 'integrity' && cb(memoized.entry.integrity)
+ ev === 'size' && cb(memoized.entry.size)
+ })
+ stream.end(memoized.data)
+ return stream
+}
+
+function getStream (cache, key, opts = {}) {
+ const { memoize, size } = opts
+ const memoized = memo.get(cache, key, opts)
+ if (memoized && memoize !== false) {
+ return getMemoizedStream(memoized)
+ }
+
+ const stream = new Pipeline()
+ // Set all this up to run on the stream and then just return the stream
+ Promise.resolve().then(async () => {
+ const entry = await index.find(cache, key)
+ if (!entry) {
+ throw new index.NotFoundError(cache, key)
+ }
+
+ stream.emit('metadata', entry.metadata)
+ stream.emit('integrity', entry.integrity)
+ stream.emit('size', entry.size)
+ stream.on('newListener', function (ev, cb) {
+ ev === 'metadata' && cb(entry.metadata)
+ ev === 'integrity' && cb(entry.integrity)
+ ev === 'size' && cb(entry.size)
+ })
+
+ const src = read.readStream(
+ cache,
+ entry.integrity,
+ { ...opts, size: typeof size !== 'number' ? entry.size : size }
+ )
+
+ if (memoize) {
+ const memoStream = new Collect.PassThrough()
+ memoStream.on('collect', data => memo.put(cache, entry, data, opts))
+ stream.unshift(memoStream)
+ }
+ stream.unshift(src)
+ return stream
+ }).catch((err) => stream.emit('error', err))
+
+ return stream
+}
+
+module.exports.stream = getStream
+
+function getStreamDigest (cache, integrity, opts = {}) {
+ const { memoize } = opts
+ const memoized = memo.get.byDigest(cache, integrity, opts)
+ if (memoized && memoize !== false) {
+ const stream = new Minipass()
+ stream.end(memoized)
+ return stream
+ } else {
+ const stream = read.readStream(cache, integrity, opts)
+ if (!memoize) {
+ return stream
+ }
+
+ const memoStream = new Collect.PassThrough()
+ memoStream.on('collect', data => memo.put.byDigest(
+ cache,
+ integrity,
+ data,
+ opts
+ ))
+ return new Pipeline(stream, memoStream)
+ }
+}
+
+module.exports.stream.byDigest = getStreamDigest
+
+function info (cache, key, opts = {}) {
+ const { memoize } = opts
+ const memoized = memo.get(cache, key, opts)
+ if (memoized && memoize !== false) {
+ return Promise.resolve(memoized.entry)
+ } else {
+ return index.find(cache, key)
+ }
+}
+module.exports.info = info
+
+async function copy (cache, key, dest, opts = {}) {
+ const entry = await index.find(cache, key, opts)
+ if (!entry) {
+ throw new index.NotFoundError(cache, key)
+ }
+ await read.copy(cache, entry.integrity, dest, opts)
+ return {
+ metadata: entry.metadata,
+ size: entry.size,
+ integrity: entry.integrity,
+ }
+}
+
+module.exports.copy = copy
+
+async function copyByDigest (cache, key, dest, opts = {}) {
+ await read.copy(cache, key, dest, opts)
+ return key
+}
+
+module.exports.copy.byDigest = copyByDigest
+
+module.exports.hasContent = read.hasContent
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/index.js b/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/index.js
new file mode 100644
index 00000000000..c9b0da5f3a2
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/index.js
@@ -0,0 +1,42 @@
+'use strict'
+
+const get = require('./get.js')
+const put = require('./put.js')
+const rm = require('./rm.js')
+const verify = require('./verify.js')
+const { clearMemoized } = require('./memoization.js')
+const tmp = require('./util/tmp.js')
+const index = require('./entry-index.js')
+
+module.exports.index = {}
+module.exports.index.compact = index.compact
+module.exports.index.insert = index.insert
+
+module.exports.ls = index.ls
+module.exports.ls.stream = index.lsStream
+
+module.exports.get = get
+module.exports.get.byDigest = get.byDigest
+module.exports.get.stream = get.stream
+module.exports.get.stream.byDigest = get.stream.byDigest
+module.exports.get.copy = get.copy
+module.exports.get.copy.byDigest = get.copy.byDigest
+module.exports.get.info = get.info
+module.exports.get.hasContent = get.hasContent
+
+module.exports.put = put
+module.exports.put.stream = put.stream
+
+module.exports.rm = rm.entry
+module.exports.rm.all = rm.all
+module.exports.rm.entry = module.exports.rm
+module.exports.rm.content = rm.content
+
+module.exports.clearMemoized = clearMemoized
+
+module.exports.tmp = {}
+module.exports.tmp.mkdir = tmp.mkdir
+module.exports.tmp.withTmp = tmp.withTmp
+
+module.exports.verify = verify
+module.exports.verify.lastRun = verify.lastRun
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/memoization.js b/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/memoization.js
new file mode 100644
index 00000000000..2ecc60912e4
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/memoization.js
@@ -0,0 +1,72 @@
+'use strict'
+
+const { LRUCache } = require('lru-cache')
+
+const MEMOIZED = new LRUCache({
+ max: 500,
+ maxSize: 50 * 1024 * 1024, // 50MB
+ ttl: 3 * 60 * 1000, // 3 minutes
+ sizeCalculation: (entry, key) => key.startsWith('key:') ? entry.data.length : entry.length,
+})
+
+module.exports.clearMemoized = clearMemoized
+
+function clearMemoized () {
+ const old = {}
+ MEMOIZED.forEach((v, k) => {
+ old[k] = v
+ })
+ MEMOIZED.clear()
+ return old
+}
+
+module.exports.put = put
+
+function put (cache, entry, data, opts) {
+ pickMem(opts).set(`key:${cache}:${entry.key}`, { entry, data })
+ putDigest(cache, entry.integrity, data, opts)
+}
+
+module.exports.put.byDigest = putDigest
+
+function putDigest (cache, integrity, data, opts) {
+ pickMem(opts).set(`digest:${cache}:${integrity}`, data)
+}
+
+module.exports.get = get
+
+function get (cache, key, opts) {
+ return pickMem(opts).get(`key:${cache}:${key}`)
+}
+
+module.exports.get.byDigest = getDigest
+
+function getDigest (cache, integrity, opts) {
+ return pickMem(opts).get(`digest:${cache}:${integrity}`)
+}
+
+class ObjProxy {
+ constructor (obj) {
+ this.obj = obj
+ }
+
+ get (key) {
+ return this.obj[key]
+ }
+
+ set (key, val) {
+ this.obj[key] = val
+ }
+}
+
+function pickMem (opts) {
+ if (!opts || !opts.memoize) {
+ return MEMOIZED
+ } else if (opts.memoize.get && opts.memoize.set) {
+ return opts.memoize
+ } else if (typeof opts.memoize === 'object') {
+ return new ObjProxy(opts.memoize)
+ } else {
+ return MEMOIZED
+ }
+}
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/put.js b/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/put.js
new file mode 100644
index 00000000000..9fc932d5f6d
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/put.js
@@ -0,0 +1,80 @@
+'use strict'
+
+const index = require('./entry-index')
+const memo = require('./memoization')
+const write = require('./content/write')
+const Flush = require('minipass-flush')
+const { PassThrough } = require('minipass-collect')
+const Pipeline = require('minipass-pipeline')
+
+const putOpts = (opts) => ({
+ algorithms: ['sha512'],
+ ...opts,
+})
+
+module.exports = putData
+
+async function putData (cache, key, data, opts = {}) {
+ const { memoize } = opts
+ opts = putOpts(opts)
+ const res = await write(cache, data, opts)
+ const entry = await index.insert(cache, key, res.integrity, { ...opts, size: res.size })
+ if (memoize) {
+ memo.put(cache, entry, data, opts)
+ }
+
+ return res.integrity
+}
+
+module.exports.stream = putStream
+
+function putStream (cache, key, opts = {}) {
+ const { memoize } = opts
+ opts = putOpts(opts)
+ let integrity
+ let size
+ let error
+
+ let memoData
+ const pipeline = new Pipeline()
+ // first item in the pipeline is the memoizer, because we need
+ // that to end first and get the collected data.
+ if (memoize) {
+ const memoizer = new PassThrough().on('collect', data => {
+ memoData = data
+ })
+ pipeline.push(memoizer)
+ }
+
+ // contentStream is a write-only, not a passthrough
+ // no data comes out of it.
+ const contentStream = write.stream(cache, opts)
+ .on('integrity', (int) => {
+ integrity = int
+ })
+ .on('size', (s) => {
+ size = s
+ })
+ .on('error', (err) => {
+ error = err
+ })
+
+ pipeline.push(contentStream)
+
+ // last but not least, we write the index and emit hash and size,
+ // and memoize if we're doing that
+ pipeline.push(new Flush({
+ async flush () {
+ if (!error) {
+ const entry = await index.insert(cache, key, integrity, { ...opts, size })
+ if (memoize && memoData) {
+ memo.put(cache, entry, memoData, opts)
+ }
+ pipeline.emit('integrity', integrity)
+ pipeline.emit('size', size)
+ }
+ },
+ }))
+
+ return pipeline
+}
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/rm.js b/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/rm.js
new file mode 100644
index 00000000000..a94760c7cf2
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/rm.js
@@ -0,0 +1,31 @@
+'use strict'
+
+const { rm } = require('fs/promises')
+const glob = require('./util/glob.js')
+const index = require('./entry-index')
+const memo = require('./memoization')
+const path = require('path')
+const rmContent = require('./content/rm')
+
+module.exports = entry
+module.exports.entry = entry
+
+function entry (cache, key, opts) {
+ memo.clearMemoized()
+ return index.delete(cache, key, opts)
+}
+
+module.exports.content = content
+
+function content (cache, integrity) {
+ memo.clearMemoized()
+ return rmContent(cache, integrity)
+}
+
+module.exports.all = all
+
+async function all (cache) {
+ memo.clearMemoized()
+ const paths = await glob(path.join(cache, '*(content-*|index-*)'), { silent: true, nosort: true })
+ return Promise.all(paths.map((p) => rm(p, { recursive: true, force: true })))
+}
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/util/glob.js b/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/util/glob.js
new file mode 100644
index 00000000000..8500c1c16a4
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/util/glob.js
@@ -0,0 +1,7 @@
+'use strict'
+
+const { glob } = require('glob')
+const path = require('path')
+
+const globify = (pattern) => pattern.split(path.win32.sep).join(path.posix.sep)
+module.exports = (path, options) => glob(globify(path), options)
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/util/hash-to-segments.js b/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/util/hash-to-segments.js
new file mode 100644
index 00000000000..445599b5038
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/util/hash-to-segments.js
@@ -0,0 +1,7 @@
+'use strict'
+
+module.exports = hashToSegments
+
+function hashToSegments (hash) {
+ return [hash.slice(0, 2), hash.slice(2, 4), hash.slice(4)]
+}
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/util/tmp.js b/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/util/tmp.js
new file mode 100644
index 00000000000..0bf5302136e
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/util/tmp.js
@@ -0,0 +1,26 @@
+'use strict'
+
+const { withTempDir } = require('@npmcli/fs')
+const fs = require('fs/promises')
+const path = require('path')
+
+module.exports.mkdir = mktmpdir
+
+async function mktmpdir (cache, opts = {}) {
+ const { tmpPrefix } = opts
+ const tmpDir = path.join(cache, 'tmp')
+ await fs.mkdir(tmpDir, { recursive: true, owner: 'inherit' })
+ // do not use path.join(), it drops the trailing / if tmpPrefix is unset
+ const target = `${tmpDir}${path.sep}${tmpPrefix || ''}`
+ return fs.mkdtemp(target, { owner: 'inherit' })
+}
+
+module.exports.withTmp = withTmp
+
+function withTmp (cache, opts, cb) {
+ if (!cb) {
+ cb = opts
+ opts = {}
+ }
+ return withTempDir(path.join(cache, 'tmp'), cb, opts)
+}
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/verify.js b/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/verify.js
new file mode 100644
index 00000000000..d7423da1295
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/lib/verify.js
@@ -0,0 +1,257 @@
+'use strict'
+
+const {
+ mkdir,
+ readFile,
+ rm,
+ stat,
+ truncate,
+ writeFile,
+} = require('fs/promises')
+const pMap = require('p-map')
+const contentPath = require('./content/path')
+const fsm = require('fs-minipass')
+const glob = require('./util/glob.js')
+const index = require('./entry-index')
+const path = require('path')
+const ssri = require('ssri')
+
+const hasOwnProperty = (obj, key) =>
+ Object.prototype.hasOwnProperty.call(obj, key)
+
+const verifyOpts = (opts) => ({
+ concurrency: 20,
+ log: { silly () {} },
+ ...opts,
+})
+
+module.exports = verify
+
+async function verify (cache, opts) {
+ opts = verifyOpts(opts)
+ opts.log.silly('verify', 'verifying cache at', cache)
+
+ const steps = [
+ markStartTime,
+ fixPerms,
+ garbageCollect,
+ rebuildIndex,
+ cleanTmp,
+ writeVerifile,
+ markEndTime,
+ ]
+
+ const stats = {}
+ for (const step of steps) {
+ const label = step.name
+ const start = new Date()
+ const s = await step(cache, opts)
+ if (s) {
+ Object.keys(s).forEach((k) => {
+ stats[k] = s[k]
+ })
+ }
+ const end = new Date()
+ if (!stats.runTime) {
+ stats.runTime = {}
+ }
+ stats.runTime[label] = end - start
+ }
+ stats.runTime.total = stats.endTime - stats.startTime
+ opts.log.silly(
+ 'verify',
+ 'verification finished for',
+ cache,
+ 'in',
+ `${stats.runTime.total}ms`
+ )
+ return stats
+}
+
+async function markStartTime () {
+ return { startTime: new Date() }
+}
+
+async function markEndTime () {
+ return { endTime: new Date() }
+}
+
+async function fixPerms (cache, opts) {
+ opts.log.silly('verify', 'fixing cache permissions')
+ await mkdir(cache, { recursive: true })
+ return null
+}
+
+// Implements a naive mark-and-sweep tracing garbage collector.
+//
+// The algorithm is basically as follows:
+// 1. Read (and filter) all index entries ("pointers")
+// 2. Mark each integrity value as "live"
+// 3. Read entire filesystem tree in `content-vX/` dir
+// 4. If content is live, verify its checksum and delete it if it fails
+// 5. If content is not marked as live, rm it.
+//
+async function garbageCollect (cache, opts) {
+ opts.log.silly('verify', 'garbage collecting content')
+ const indexStream = index.lsStream(cache)
+ const liveContent = new Set()
+ indexStream.on('data', (entry) => {
+ if (opts.filter && !opts.filter(entry)) {
+ return
+ }
+
+ // integrity is stringified, re-parse it so we can get each hash
+ const integrity = ssri.parse(entry.integrity)
+ for (const algo in integrity) {
+ liveContent.add(integrity[algo].toString())
+ }
+ })
+ await new Promise((resolve, reject) => {
+ indexStream.on('end', resolve).on('error', reject)
+ })
+ const contentDir = contentPath.contentDir(cache)
+ const files = await glob(path.join(contentDir, '**'), {
+ follow: false,
+ nodir: true,
+ nosort: true,
+ })
+ const stats = {
+ verifiedContent: 0,
+ reclaimedCount: 0,
+ reclaimedSize: 0,
+ badContentCount: 0,
+ keptSize: 0,
+ }
+ await pMap(
+ files,
+ async (f) => {
+ const split = f.split(/[/\\]/)
+ const digest = split.slice(split.length - 3).join('')
+ const algo = split[split.length - 4]
+ const integrity = ssri.fromHex(digest, algo)
+ if (liveContent.has(integrity.toString())) {
+ const info = await verifyContent(f, integrity)
+ if (!info.valid) {
+ stats.reclaimedCount++
+ stats.badContentCount++
+ stats.reclaimedSize += info.size
+ } else {
+ stats.verifiedContent++
+ stats.keptSize += info.size
+ }
+ } else {
+ // No entries refer to this content. We can delete.
+ stats.reclaimedCount++
+ const s = await stat(f)
+ await rm(f, { recursive: true, force: true })
+ stats.reclaimedSize += s.size
+ }
+ return stats
+ },
+ { concurrency: opts.concurrency }
+ )
+ return stats
+}
+
+async function verifyContent (filepath, sri) {
+ const contentInfo = {}
+ try {
+ const { size } = await stat(filepath)
+ contentInfo.size = size
+ contentInfo.valid = true
+ await ssri.checkStream(new fsm.ReadStream(filepath), sri)
+ } catch (err) {
+ if (err.code === 'ENOENT') {
+ return { size: 0, valid: false }
+ }
+ if (err.code !== 'EINTEGRITY') {
+ throw err
+ }
+
+ await rm(filepath, { recursive: true, force: true })
+ contentInfo.valid = false
+ }
+ return contentInfo
+}
+
+async function rebuildIndex (cache, opts) {
+ opts.log.silly('verify', 'rebuilding index')
+ const entries = await index.ls(cache)
+ const stats = {
+ missingContent: 0,
+ rejectedEntries: 0,
+ totalEntries: 0,
+ }
+ const buckets = {}
+ for (const k in entries) {
+ /* istanbul ignore else */
+ if (hasOwnProperty(entries, k)) {
+ const hashed = index.hashKey(k)
+ const entry = entries[k]
+ const excluded = opts.filter && !opts.filter(entry)
+ excluded && stats.rejectedEntries++
+ if (buckets[hashed] && !excluded) {
+ buckets[hashed].push(entry)
+ } else if (buckets[hashed] && excluded) {
+ // skip
+ } else if (excluded) {
+ buckets[hashed] = []
+ buckets[hashed]._path = index.bucketPath(cache, k)
+ } else {
+ buckets[hashed] = [entry]
+ buckets[hashed]._path = index.bucketPath(cache, k)
+ }
+ }
+ }
+ await pMap(
+ Object.keys(buckets),
+ (key) => {
+ return rebuildBucket(cache, buckets[key], stats, opts)
+ },
+ { concurrency: opts.concurrency }
+ )
+ return stats
+}
+
+async function rebuildBucket (cache, bucket, stats) {
+ await truncate(bucket._path)
+ // This needs to be serialized because cacache explicitly
+ // lets very racy bucket conflicts clobber each other.
+ for (const entry of bucket) {
+ const content = contentPath(cache, entry.integrity)
+ try {
+ await stat(content)
+ await index.insert(cache, entry.key, entry.integrity, {
+ metadata: entry.metadata,
+ size: entry.size,
+ time: entry.time,
+ })
+ stats.totalEntries++
+ } catch (err) {
+ if (err.code === 'ENOENT') {
+ stats.rejectedEntries++
+ stats.missingContent++
+ } else {
+ throw err
+ }
+ }
+ }
+}
+
+function cleanTmp (cache, opts) {
+ opts.log.silly('verify', 'cleaning tmp directory')
+ return rm(path.join(cache, 'tmp'), { recursive: true, force: true })
+}
+
+async function writeVerifile (cache, opts) {
+ const verifile = path.join(cache, '_lastverified')
+ opts.log.silly('verify', 'writing verifile to ' + verifile)
+ return writeFile(verifile, `${Date.now()}`)
+}
+
+module.exports.lastRun = lastRun
+
+async function lastRun (cache) {
+ const data = await readFile(path.join(cache, '_lastverified'), { encoding: 'utf8' })
+ return new Date(+data)
+}
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/package.json b/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/package.json
new file mode 100644
index 00000000000..6e6219158ed
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/cacache/package.json
@@ -0,0 +1,82 @@
+{
+ "name": "cacache",
+ "version": "18.0.4",
+ "cache-version": {
+ "content": "2",
+ "index": "5"
+ },
+ "description": "Fast, fault-tolerant, cross-platform, disk-based, data-agnostic, content-addressable cache.",
+ "main": "lib/index.js",
+ "files": [
+ "bin/",
+ "lib/"
+ ],
+ "scripts": {
+ "test": "tap",
+ "snap": "tap",
+ "coverage": "tap",
+ "test-docker": "docker run -it --rm --name pacotest -v \"$PWD\":/tmp -w /tmp node:latest npm test",
+ "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "npmclilint": "npmcli-lint",
+ "lintfix": "npm run lint -- --fix",
+ "postsnap": "npm run lintfix --",
+ "postlint": "template-oss-check",
+ "posttest": "npm run lint",
+ "template-oss-apply": "template-oss-apply --force"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/npm/cacache.git"
+ },
+ "keywords": [
+ "cache",
+ "caching",
+ "content-addressable",
+ "sri",
+ "sri hash",
+ "subresource integrity",
+ "cache",
+ "storage",
+ "store",
+ "file store",
+ "filesystem",
+ "disk cache",
+ "disk storage"
+ ],
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/fs": "^3.1.0",
+ "fs-minipass": "^3.0.0",
+ "glob": "^10.2.2",
+ "lru-cache": "^10.0.1",
+ "minipass": "^7.0.3",
+ "minipass-collect": "^2.0.1",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.4",
+ "p-map": "^4.0.0",
+ "ssri": "^10.0.0",
+ "tar": "^6.1.11",
+ "unique-filename": "^3.0.0"
+ },
+ "devDependencies": {
+ "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/template-oss": "4.22.0",
+ "tap": "^16.0.0"
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ },
+ "templateOSS": {
+ "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
+ "windowsCI": false,
+ "version": "4.22.0",
+ "publish": "true"
+ },
+ "author": "GitHub Inc.",
+ "tap": {
+ "nyc-arg": [
+ "--exclude",
+ "tap-snapshots/**"
+ ]
+ }
+}
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/LICENSE b/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/LICENSE
new file mode 100644
index 00000000000..1808eb28442
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/LICENSE
@@ -0,0 +1,16 @@
+ISC License
+
+Copyright 2017-2022 (c) npm, Inc.
+
+Permission to use, copy, modify, and/or distribute this software for
+any purpose with or without fee is hereby granted, provided that the
+above copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE COPYRIGHT HOLDER DISCLAIMS
+ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
+CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
+USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/cache/entry.js b/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/cache/entry.js
new file mode 100644
index 00000000000..bfcfacbcc95
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/cache/entry.js
@@ -0,0 +1,471 @@
+const { Request, Response } = require('minipass-fetch')
+const { Minipass } = require('minipass')
+const MinipassFlush = require('minipass-flush')
+const cacache = require('cacache')
+const url = require('url')
+
+const CachingMinipassPipeline = require('../pipeline.js')
+const CachePolicy = require('./policy.js')
+const cacheKey = require('./key.js')
+const remote = require('../remote.js')
+
+const hasOwnProperty = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop)
+
+// allow list for request headers that will be written to the cache index
+// note: we will also store any request headers
+// that are named in a response's vary header
+const KEEP_REQUEST_HEADERS = [
+ 'accept-charset',
+ 'accept-encoding',
+ 'accept-language',
+ 'accept',
+ 'cache-control',
+]
+
+// allow list for response headers that will be written to the cache index
+// note: we must not store the real response's age header, or when we load
+// a cache policy based on the metadata it will think the cached response
+// is always stale
+const KEEP_RESPONSE_HEADERS = [
+ 'cache-control',
+ 'content-encoding',
+ 'content-language',
+ 'content-type',
+ 'date',
+ 'etag',
+ 'expires',
+ 'last-modified',
+ 'link',
+ 'location',
+ 'pragma',
+ 'vary',
+]
+
+// return an object containing all metadata to be written to the index
+const getMetadata = (request, response, options) => {
+ const metadata = {
+ time: Date.now(),
+ url: request.url,
+ reqHeaders: {},
+ resHeaders: {},
+
+ // options on which we must match the request and vary the response
+ options: {
+ compress: options.compress != null ? options.compress : request.compress,
+ },
+ }
+
+ // only save the status if it's not a 200 or 304
+ if (response.status !== 200 && response.status !== 304) {
+ metadata.status = response.status
+ }
+
+ for (const name of KEEP_REQUEST_HEADERS) {
+ if (request.headers.has(name)) {
+ metadata.reqHeaders[name] = request.headers.get(name)
+ }
+ }
+
+ // if the request's host header differs from the host in the url
+ // we need to keep it, otherwise it's just noise and we ignore it
+ const host = request.headers.get('host')
+ const parsedUrl = new url.URL(request.url)
+ if (host && parsedUrl.host !== host) {
+ metadata.reqHeaders.host = host
+ }
+
+ // if the response has a vary header, make sure
+ // we store the relevant request headers too
+ if (response.headers.has('vary')) {
+ const vary = response.headers.get('vary')
+ // a vary of "*" means every header causes a different response.
+ // in that scenario, we do not include any additional headers
+ // as the freshness check will always fail anyway and we don't
+ // want to bloat the cache indexes
+ if (vary !== '*') {
+ // copy any other request headers that will vary the response
+ const varyHeaders = vary.trim().toLowerCase().split(/\s*,\s*/)
+ for (const name of varyHeaders) {
+ if (request.headers.has(name)) {
+ metadata.reqHeaders[name] = request.headers.get(name)
+ }
+ }
+ }
+ }
+
+ for (const name of KEEP_RESPONSE_HEADERS) {
+ if (response.headers.has(name)) {
+ metadata.resHeaders[name] = response.headers.get(name)
+ }
+ }
+
+ for (const name of options.cacheAdditionalHeaders) {
+ if (response.headers.has(name)) {
+ metadata.resHeaders[name] = response.headers.get(name)
+ }
+ }
+
+ return metadata
+}
+
+// symbols used to hide objects that may be lazily evaluated in a getter
+const _request = Symbol('request')
+const _response = Symbol('response')
+const _policy = Symbol('policy')
+
+class CacheEntry {
+ constructor ({ entry, request, response, options }) {
+ if (entry) {
+ this.key = entry.key
+ this.entry = entry
+ // previous versions of this module didn't write an explicit timestamp in
+ // the metadata, so fall back to the entry's timestamp. we can't use the
+ // entry timestamp to determine staleness because cacache will update it
+ // when it verifies its data
+ this.entry.metadata.time = this.entry.metadata.time || this.entry.time
+ } else {
+ this.key = cacheKey(request)
+ }
+
+ this.options = options
+
+ // these properties are behind getters that lazily evaluate
+ this[_request] = request
+ this[_response] = response
+ this[_policy] = null
+ }
+
+ // returns a CacheEntry instance that satisfies the given request
+ // or undefined if no existing entry satisfies
+ static async find (request, options) {
+ try {
+ // compacts the index and returns an array of unique entries
+ var matches = await cacache.index.compact(options.cachePath, cacheKey(request), (A, B) => {
+ const entryA = new CacheEntry({ entry: A, options })
+ const entryB = new CacheEntry({ entry: B, options })
+ return entryA.policy.satisfies(entryB.request)
+ }, {
+ validateEntry: (entry) => {
+ // clean out entries with a buggy content-encoding value
+ if (entry.metadata &&
+ entry.metadata.resHeaders &&
+ entry.metadata.resHeaders['content-encoding'] === null) {
+ return false
+ }
+
+ // if an integrity is null, it needs to have a status specified
+ if (entry.integrity === null) {
+ return !!(entry.metadata && entry.metadata.status)
+ }
+
+ return true
+ },
+ })
+ } catch (err) {
+ // if the compact request fails, ignore the error and return
+ return
+ }
+
+ // a cache mode of 'reload' means to behave as though we have no cache
+ // on the way to the network. return undefined to allow cacheFetch to
+ // create a brand new request no matter what.
+ if (options.cache === 'reload') {
+ return
+ }
+
+ // find the specific entry that satisfies the request
+ let match
+ for (const entry of matches) {
+ const _entry = new CacheEntry({
+ entry,
+ options,
+ })
+
+ if (_entry.policy.satisfies(request)) {
+ match = _entry
+ break
+ }
+ }
+
+ return match
+ }
+
+ // if the user made a PUT/POST/PATCH then we invalidate our
+ // cache for the same url by deleting the index entirely
+ static async invalidate (request, options) {
+ const key = cacheKey(request)
+ try {
+ await cacache.rm.entry(options.cachePath, key, { removeFully: true })
+ } catch (err) {
+ // ignore errors
+ }
+ }
+
+ get request () {
+ if (!this[_request]) {
+ this[_request] = new Request(this.entry.metadata.url, {
+ method: 'GET',
+ headers: this.entry.metadata.reqHeaders,
+ ...this.entry.metadata.options,
+ })
+ }
+
+ return this[_request]
+ }
+
+ get response () {
+ if (!this[_response]) {
+ this[_response] = new Response(null, {
+ url: this.entry.metadata.url,
+ counter: this.options.counter,
+ status: this.entry.metadata.status || 200,
+ headers: {
+ ...this.entry.metadata.resHeaders,
+ 'content-length': this.entry.size,
+ },
+ })
+ }
+
+ return this[_response]
+ }
+
+ get policy () {
+ if (!this[_policy]) {
+ this[_policy] = new CachePolicy({
+ entry: this.entry,
+ request: this.request,
+ response: this.response,
+ options: this.options,
+ })
+ }
+
+ return this[_policy]
+ }
+
+ // wraps the response in a pipeline that stores the data
+ // in the cache while the user consumes it
+ async store (status) {
+ // if we got a status other than 200, 301, or 308,
+ // or the CachePolicy forbid storage, append the
+ // cache status header and return it untouched
+ if (
+ this.request.method !== 'GET' ||
+ ![200, 301, 308].includes(this.response.status) ||
+ !this.policy.storable()
+ ) {
+ this.response.headers.set('x-local-cache-status', 'skip')
+ return this.response
+ }
+
+ const size = this.response.headers.get('content-length')
+ const cacheOpts = {
+ algorithms: this.options.algorithms,
+ metadata: getMetadata(this.request, this.response, this.options),
+ size,
+ integrity: this.options.integrity,
+ integrityEmitter: this.response.body.hasIntegrityEmitter && this.response.body,
+ }
+
+ let body = null
+ // we only set a body if the status is a 200, redirects are
+ // stored as metadata only
+ if (this.response.status === 200) {
+ let cacheWriteResolve, cacheWriteReject
+ const cacheWritePromise = new Promise((resolve, reject) => {
+ cacheWriteResolve = resolve
+ cacheWriteReject = reject
+ }).catch((err) => {
+ body.emit('error', err)
+ })
+
+ body = new CachingMinipassPipeline({ events: ['integrity', 'size'] }, new MinipassFlush({
+ flush () {
+ return cacheWritePromise
+ },
+ }))
+ // this is always true since if we aren't reusing the one from the remote fetch, we
+ // are using the one from cacache
+ body.hasIntegrityEmitter = true
+
+ const onResume = () => {
+ const tee = new Minipass()
+ const cacheStream = cacache.put.stream(this.options.cachePath, this.key, cacheOpts)
+ // re-emit the integrity and size events on our new response body so they can be reused
+ cacheStream.on('integrity', i => body.emit('integrity', i))
+ cacheStream.on('size', s => body.emit('size', s))
+ // stick a flag on here so downstream users will know if they can expect integrity events
+ tee.pipe(cacheStream)
+ // TODO if the cache write fails, log a warning but return the response anyway
+ // eslint-disable-next-line promise/catch-or-return
+ cacheStream.promise().then(cacheWriteResolve, cacheWriteReject)
+ body.unshift(tee)
+ body.unshift(this.response.body)
+ }
+
+ body.once('resume', onResume)
+ body.once('end', () => body.removeListener('resume', onResume))
+ } else {
+ await cacache.index.insert(this.options.cachePath, this.key, null, cacheOpts)
+ }
+
+ // note: we do not set the x-local-cache-hash header because we do not know
+ // the hash value until after the write to the cache completes, which doesn't
+ // happen until after the response has been sent and it's too late to write
+ // the header anyway
+ this.response.headers.set('x-local-cache', encodeURIComponent(this.options.cachePath))
+ this.response.headers.set('x-local-cache-key', encodeURIComponent(this.key))
+ this.response.headers.set('x-local-cache-mode', 'stream')
+ this.response.headers.set('x-local-cache-status', status)
+ this.response.headers.set('x-local-cache-time', new Date().toISOString())
+ const newResponse = new Response(body, {
+ url: this.response.url,
+ status: this.response.status,
+ headers: this.response.headers,
+ counter: this.options.counter,
+ })
+ return newResponse
+ }
+
+ // use the cached data to create a response and return it
+ async respond (method, options, status) {
+ let response
+ if (method === 'HEAD' || [301, 308].includes(this.response.status)) {
+ // if the request is a HEAD, or the response is a redirect,
+ // then the metadata in the entry already includes everything
+ // we need to build a response
+ response = this.response
+ } else {
+ // we're responding with a full cached response, so create a body
+ // that reads from cacache and attach it to a new Response
+ const body = new Minipass()
+ const headers = { ...this.policy.responseHeaders() }
+
+ const onResume = () => {
+ const cacheStream = cacache.get.stream.byDigest(
+ this.options.cachePath, this.entry.integrity, { memoize: this.options.memoize }
+ )
+ cacheStream.on('error', async (err) => {
+ cacheStream.pause()
+ if (err.code === 'EINTEGRITY') {
+ await cacache.rm.content(
+ this.options.cachePath, this.entry.integrity, { memoize: this.options.memoize }
+ )
+ }
+ if (err.code === 'ENOENT' || err.code === 'EINTEGRITY') {
+ await CacheEntry.invalidate(this.request, this.options)
+ }
+ body.emit('error', err)
+ cacheStream.resume()
+ })
+ // emit the integrity and size events based on our metadata so we're consistent
+ body.emit('integrity', this.entry.integrity)
+ body.emit('size', Number(headers['content-length']))
+ cacheStream.pipe(body)
+ }
+
+ body.once('resume', onResume)
+ body.once('end', () => body.removeListener('resume', onResume))
+ response = new Response(body, {
+ url: this.entry.metadata.url,
+ counter: options.counter,
+ status: 200,
+ headers,
+ })
+ }
+
+ response.headers.set('x-local-cache', encodeURIComponent(this.options.cachePath))
+ response.headers.set('x-local-cache-hash', encodeURIComponent(this.entry.integrity))
+ response.headers.set('x-local-cache-key', encodeURIComponent(this.key))
+ response.headers.set('x-local-cache-mode', 'stream')
+ response.headers.set('x-local-cache-status', status)
+ response.headers.set('x-local-cache-time', new Date(this.entry.metadata.time).toUTCString())
+ return response
+ }
+
+ // use the provided request along with this cache entry to
+ // revalidate the stored response. returns a response, either
+ // from the cache or from the update
+ async revalidate (request, options) {
+ const revalidateRequest = new Request(request, {
+ headers: this.policy.revalidationHeaders(request),
+ })
+
+ try {
+ // NOTE: be sure to remove the headers property from the
+ // user supplied options, since we have already defined
+ // them on the new request object. if they're still in the
+ // options then those will overwrite the ones from the policy
+ var response = await remote(revalidateRequest, {
+ ...options,
+ headers: undefined,
+ })
+ } catch (err) {
+ // if the network fetch fails, return the stale
+ // cached response unless it has a cache-control
+ // of 'must-revalidate'
+ if (!this.policy.mustRevalidate) {
+ return this.respond(request.method, options, 'stale')
+ }
+
+ throw err
+ }
+
+ if (this.policy.revalidated(revalidateRequest, response)) {
+ // we got a 304, write a new index to the cache and respond from cache
+ const metadata = getMetadata(request, response, options)
+ // 304 responses do not include headers that are specific to the response data
+ // since they do not include a body, so we copy values for headers that were
+ // in the old cache entry to the new one, if the new metadata does not already
+ // include that header
+ for (const name of KEEP_RESPONSE_HEADERS) {
+ if (
+ !hasOwnProperty(metadata.resHeaders, name) &&
+ hasOwnProperty(this.entry.metadata.resHeaders, name)
+ ) {
+ metadata.resHeaders[name] = this.entry.metadata.resHeaders[name]
+ }
+ }
+
+ for (const name of options.cacheAdditionalHeaders) {
+ const inMeta = hasOwnProperty(metadata.resHeaders, name)
+ const inEntry = hasOwnProperty(this.entry.metadata.resHeaders, name)
+ const inPolicy = hasOwnProperty(this.policy.response.headers, name)
+
+ // if the header is in the existing entry, but it is not in the metadata
+ // then we need to write it to the metadata as this will refresh the on-disk cache
+ if (!inMeta && inEntry) {
+ metadata.resHeaders[name] = this.entry.metadata.resHeaders[name]
+ }
+ // if the header is in the metadata, but not in the policy, then we need to set
+ // it in the policy so that it's included in the immediate response. future
+ // responses will load a new cache entry, so we don't need to change that
+ if (!inPolicy && inMeta) {
+ this.policy.response.headers[name] = metadata.resHeaders[name]
+ }
+ }
+
+ try {
+ await cacache.index.insert(options.cachePath, this.key, this.entry.integrity, {
+ size: this.entry.size,
+ metadata,
+ })
+ } catch (err) {
+ // if updating the cache index fails, we ignore it and
+ // respond anyway
+ }
+ return this.respond(request.method, options, 'revalidated')
+ }
+
+ // if we got a modified response, create a new entry based on it
+ const newEntry = new CacheEntry({
+ request,
+ response,
+ options,
+ })
+
+ // respond with the new entry while writing it to the cache
+ return newEntry.store('updated')
+ }
+}
+
+module.exports = CacheEntry
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/cache/errors.js b/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/cache/errors.js
new file mode 100644
index 00000000000..67a66573beb
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/cache/errors.js
@@ -0,0 +1,11 @@
+class NotCachedError extends Error {
+ constructor (url) {
+ /* eslint-disable-next-line max-len */
+ super(`request to ${url} failed: cache mode is 'only-if-cached' but no cached response is available.`)
+ this.code = 'ENOTCACHED'
+ }
+}
+
+module.exports = {
+ NotCachedError,
+}
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/cache/index.js b/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/cache/index.js
new file mode 100644
index 00000000000..0de49d23fb9
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/cache/index.js
@@ -0,0 +1,49 @@
+const { NotCachedError } = require('./errors.js')
+const CacheEntry = require('./entry.js')
+const remote = require('../remote.js')
+
+// do whatever is necessary to get a Response and return it
+const cacheFetch = async (request, options) => {
+ // try to find a cached entry that satisfies this request
+ const entry = await CacheEntry.find(request, options)
+ if (!entry) {
+ // no cached result, if the cache mode is 'only-if-cached' that's a failure
+ if (options.cache === 'only-if-cached') {
+ throw new NotCachedError(request.url)
+ }
+
+ // otherwise, we make a request, store it and return it
+ const response = await remote(request, options)
+ const newEntry = new CacheEntry({ request, response, options })
+ return newEntry.store('miss')
+ }
+
+ // we have a cached response that satisfies this request, however if the cache
+ // mode is 'no-cache' then we send the revalidation request no matter what
+ if (options.cache === 'no-cache') {
+ return entry.revalidate(request, options)
+ }
+
+ // if the cached entry is not stale, or if the cache mode is 'force-cache' or
+ // 'only-if-cached' we can respond with the cached entry. set the status
+ // based on the result of needsRevalidation and respond
+ const _needsRevalidation = entry.policy.needsRevalidation(request)
+ if (options.cache === 'force-cache' ||
+ options.cache === 'only-if-cached' ||
+ !_needsRevalidation) {
+ return entry.respond(request.method, options, _needsRevalidation ? 'stale' : 'hit')
+ }
+
+ // if we got here, the cache entry is stale so revalidate it
+ return entry.revalidate(request, options)
+}
+
+cacheFetch.invalidate = async (request, options) => {
+ if (!options.cachePath) {
+ return
+ }
+
+ return CacheEntry.invalidate(request, options)
+}
+
+module.exports = cacheFetch
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/cache/key.js b/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/cache/key.js
new file mode 100644
index 00000000000..f7684d562b7
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/cache/key.js
@@ -0,0 +1,17 @@
+const { URL, format } = require('url')
+
+// options passed to url.format() when generating a key
+const formatOptions = {
+ auth: false,
+ fragment: false,
+ search: true,
+ unicode: false,
+}
+
+// returns a string to be used as the cache key for the Request
+const cacheKey = (request) => {
+ const parsed = new URL(request.url)
+ return `make-fetch-happen:request-cache:${format(parsed, formatOptions)}`
+}
+
+module.exports = cacheKey
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/cache/policy.js b/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/cache/policy.js
new file mode 100644
index 00000000000..ada3c8600da
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/cache/policy.js
@@ -0,0 +1,161 @@
+const CacheSemantics = require('http-cache-semantics')
+const Negotiator = require('negotiator')
+const ssri = require('ssri')
+
+// options passed to http-cache-semantics constructor
+const policyOptions = {
+ shared: false,
+ ignoreCargoCult: true,
+}
+
+// a fake empty response, used when only testing the
+// request for storability
+const emptyResponse = { status: 200, headers: {} }
+
+// returns a plain object representation of the Request
+const requestObject = (request) => {
+ const _obj = {
+ method: request.method,
+ url: request.url,
+ headers: {},
+ compress: request.compress,
+ }
+
+ request.headers.forEach((value, key) => {
+ _obj.headers[key] = value
+ })
+
+ return _obj
+}
+
+// returns a plain object representation of the Response
+const responseObject = (response) => {
+ const _obj = {
+ status: response.status,
+ headers: {},
+ }
+
+ response.headers.forEach((value, key) => {
+ _obj.headers[key] = value
+ })
+
+ return _obj
+}
+
+class CachePolicy {
+ constructor ({ entry, request, response, options }) {
+ this.entry = entry
+ this.request = requestObject(request)
+ this.response = responseObject(response)
+ this.options = options
+ this.policy = new CacheSemantics(this.request, this.response, policyOptions)
+
+ if (this.entry) {
+ // if we have an entry, copy the timestamp to the _responseTime
+ // this is necessary because the CacheSemantics constructor forces
+ // the value to Date.now() which means a policy created from a
+ // cache entry is likely to always identify itself as stale
+ this.policy._responseTime = this.entry.metadata.time
+ }
+ }
+
+ // static method to quickly determine if a request alone is storable
+ static storable (request, options) {
+ // no cachePath means no caching
+ if (!options.cachePath) {
+ return false
+ }
+
+ // user explicitly asked not to cache
+ if (options.cache === 'no-store') {
+ return false
+ }
+
+ // we only cache GET and HEAD requests
+ if (!['GET', 'HEAD'].includes(request.method)) {
+ return false
+ }
+
+ // otherwise, let http-cache-semantics make the decision
+ // based on the request's headers
+ const policy = new CacheSemantics(requestObject(request), emptyResponse, policyOptions)
+ return policy.storable()
+ }
+
+ // returns true if the policy satisfies the request
+ satisfies (request) {
+ const _req = requestObject(request)
+ if (this.request.headers.host !== _req.headers.host) {
+ return false
+ }
+
+ if (this.request.compress !== _req.compress) {
+ return false
+ }
+
+ const negotiatorA = new Negotiator(this.request)
+ const negotiatorB = new Negotiator(_req)
+
+ if (JSON.stringify(negotiatorA.mediaTypes()) !== JSON.stringify(negotiatorB.mediaTypes())) {
+ return false
+ }
+
+ if (JSON.stringify(negotiatorA.languages()) !== JSON.stringify(negotiatorB.languages())) {
+ return false
+ }
+
+ if (JSON.stringify(negotiatorA.encodings()) !== JSON.stringify(negotiatorB.encodings())) {
+ return false
+ }
+
+ if (this.options.integrity) {
+ return ssri.parse(this.options.integrity).match(this.entry.integrity)
+ }
+
+ return true
+ }
+
+ // returns true if the request and response allow caching
+ storable () {
+ return this.policy.storable()
+ }
+
+ // NOTE: this is a hack to avoid parsing the cache-control
+ // header ourselves, it returns true if the response's
+ // cache-control contains must-revalidate
+ get mustRevalidate () {
+ return !!this.policy._rescc['must-revalidate']
+ }
+
+ // returns true if the cached response requires revalidation
+ // for the given request
+ needsRevalidation (request) {
+ const _req = requestObject(request)
+ // force method to GET because we only cache GETs
+ // but can serve a HEAD from a cached GET
+ _req.method = 'GET'
+ return !this.policy.satisfiesWithoutRevalidation(_req)
+ }
+
+ responseHeaders () {
+ return this.policy.responseHeaders()
+ }
+
+ // returns a new object containing the appropriate headers
+ // to send a revalidation request
+ revalidationHeaders (request) {
+ const _req = requestObject(request)
+ return this.policy.revalidationHeaders(_req)
+ }
+
+ // returns true if the request/response was revalidated
+ // successfully. returns false if a new response was received
+ revalidated (request, response) {
+ const _req = requestObject(request)
+ const _res = responseObject(response)
+ const policy = this.policy.revalidatedPolicy(_req, _res)
+ return !policy.modified
+ }
+}
+
+module.exports = CachePolicy
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/fetch.js b/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/fetch.js
new file mode 100644
index 00000000000..233ba67e165
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/fetch.js
@@ -0,0 +1,118 @@
+'use strict'
+
+const { FetchError, Request, isRedirect } = require('minipass-fetch')
+const url = require('url')
+
+const CachePolicy = require('./cache/policy.js')
+const cache = require('./cache/index.js')
+const remote = require('./remote.js')
+
+// given a Request, a Response and user options
+// return true if the response is a redirect that
+// can be followed. we throw errors that will result
+// in the fetch being rejected if the redirect is
+// possible but invalid for some reason
+const canFollowRedirect = (request, response, options) => {
+ if (!isRedirect(response.status)) {
+ return false
+ }
+
+ if (options.redirect === 'manual') {
+ return false
+ }
+
+ if (options.redirect === 'error') {
+ throw new FetchError(`redirect mode is set to error: ${request.url}`,
+ 'no-redirect', { code: 'ENOREDIRECT' })
+ }
+
+ if (!response.headers.has('location')) {
+ throw new FetchError(`redirect location header missing for: ${request.url}`,
+ 'no-location', { code: 'EINVALIDREDIRECT' })
+ }
+
+ if (request.counter >= request.follow) {
+ throw new FetchError(`maximum redirect reached at: ${request.url}`,
+ 'max-redirect', { code: 'EMAXREDIRECT' })
+ }
+
+ return true
+}
+
+// given a Request, a Response, and the user's options return an object
+// with a new Request and a new options object that will be used for
+// following the redirect
+const getRedirect = (request, response, options) => {
+ const _opts = { ...options }
+ const location = response.headers.get('location')
+ const redirectUrl = new url.URL(location, /^https?:/.test(location) ? undefined : request.url)
+ // Comment below is used under the following license:
+ /**
+ * @license
+ * Copyright (c) 2010-2012 Mikeal Rogers
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an "AS
+ * IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language
+ * governing permissions and limitations under the License.
+ */
+
+ // Remove authorization if changing hostnames (but not if just
+ // changing ports or protocols). This matches the behavior of request:
+ // https://github.com/request/request/blob/b12a6245/lib/redirect.js#L134-L138
+ if (new url.URL(request.url).hostname !== redirectUrl.hostname) {
+ request.headers.delete('authorization')
+ request.headers.delete('cookie')
+ }
+
+ // for POST request with 301/302 response, or any request with 303 response,
+ // use GET when following redirect
+ if (
+ response.status === 303 ||
+ (request.method === 'POST' && [301, 302].includes(response.status))
+ ) {
+ _opts.method = 'GET'
+ _opts.body = null
+ request.headers.delete('content-length')
+ }
+
+ _opts.headers = {}
+ request.headers.forEach((value, key) => {
+ _opts.headers[key] = value
+ })
+
+ _opts.counter = ++request.counter
+ const redirectReq = new Request(url.format(redirectUrl), _opts)
+ return {
+ request: redirectReq,
+ options: _opts,
+ }
+}
+
+const fetch = async (request, options) => {
+ const response = CachePolicy.storable(request, options)
+ ? await cache(request, options)
+ : await remote(request, options)
+
+ // if the request wasn't a GET or HEAD, and the response
+ // status is between 200 and 399 inclusive, invalidate the
+ // request url
+ if (!['GET', 'HEAD'].includes(request.method) &&
+ response.status >= 200 &&
+ response.status <= 399) {
+ await cache.invalidate(request, options)
+ }
+
+ if (!canFollowRedirect(request, response, options)) {
+ return response
+ }
+
+ const redirect = getRedirect(request, response, options)
+ return fetch(redirect.request, redirect.options)
+}
+
+module.exports = fetch
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/index.js b/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/index.js
new file mode 100644
index 00000000000..2f12e8e1b61
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/index.js
@@ -0,0 +1,41 @@
+const { FetchError, Headers, Request, Response } = require('minipass-fetch')
+
+const configureOptions = require('./options.js')
+const fetch = require('./fetch.js')
+
+const makeFetchHappen = (url, opts) => {
+ const options = configureOptions(opts)
+
+ const request = new Request(url, options)
+ return fetch(request, options)
+}
+
+makeFetchHappen.defaults = (defaultUrl, defaultOptions = {}, wrappedFetch = makeFetchHappen) => {
+ if (typeof defaultUrl === 'object') {
+ defaultOptions = defaultUrl
+ defaultUrl = null
+ }
+
+ const defaultedFetch = (url, options = {}) => {
+ const finalUrl = url || defaultUrl
+ const finalOptions = {
+ ...defaultOptions,
+ ...options,
+ headers: {
+ ...defaultOptions.headers,
+ ...options.headers,
+ },
+ }
+ return wrappedFetch(finalUrl, finalOptions)
+ }
+
+ defaultedFetch.defaults = (defaultUrl1, defaultOptions1 = {}) =>
+ makeFetchHappen.defaults(defaultUrl1, defaultOptions1, defaultedFetch)
+ return defaultedFetch
+}
+
+module.exports = makeFetchHappen
+module.exports.FetchError = FetchError
+module.exports.Headers = Headers
+module.exports.Request = Request
+module.exports.Response = Response
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/options.js b/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/options.js
new file mode 100644
index 00000000000..f77511279f8
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/options.js
@@ -0,0 +1,54 @@
+const dns = require('dns')
+
+const conditionalHeaders = [
+ 'if-modified-since',
+ 'if-none-match',
+ 'if-unmodified-since',
+ 'if-match',
+ 'if-range',
+]
+
+const configureOptions = (opts) => {
+ const { strictSSL, ...options } = { ...opts }
+ options.method = options.method ? options.method.toUpperCase() : 'GET'
+ options.rejectUnauthorized = strictSSL !== false
+
+ if (!options.retry) {
+ options.retry = { retries: 0 }
+ } else if (typeof options.retry === 'string') {
+ const retries = parseInt(options.retry, 10)
+ if (isFinite(retries)) {
+ options.retry = { retries }
+ } else {
+ options.retry = { retries: 0 }
+ }
+ } else if (typeof options.retry === 'number') {
+ options.retry = { retries: options.retry }
+ } else {
+ options.retry = { retries: 0, ...options.retry }
+ }
+
+ options.dns = { ttl: 5 * 60 * 1000, lookup: dns.lookup, ...options.dns }
+
+ options.cache = options.cache || 'default'
+ if (options.cache === 'default') {
+ const hasConditionalHeader = Object.keys(options.headers || {}).some((name) => {
+ return conditionalHeaders.includes(name.toLowerCase())
+ })
+ if (hasConditionalHeader) {
+ options.cache = 'no-store'
+ }
+ }
+
+ options.cacheAdditionalHeaders = options.cacheAdditionalHeaders || []
+
+ // cacheManager is deprecated, but if it's set and
+ // cachePath is not we should copy it to the new field
+ if (options.cacheManager && !options.cachePath) {
+ options.cachePath = options.cacheManager
+ }
+
+ return options
+}
+
+module.exports = configureOptions
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/pipeline.js b/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/pipeline.js
new file mode 100644
index 00000000000..b1d221b2d0c
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/pipeline.js
@@ -0,0 +1,41 @@
+'use strict'
+
+const MinipassPipeline = require('minipass-pipeline')
+
+class CachingMinipassPipeline extends MinipassPipeline {
+ #events = []
+ #data = new Map()
+
+ constructor (opts, ...streams) {
+ // CRITICAL: do NOT pass the streams to the call to super(), this will start
+ // the flow of data and potentially cause the events we need to catch to emit
+ // before we've finished our own setup. instead we call super() with no args,
+ // finish our setup, and then push the streams into ourselves to start the
+ // data flow
+ super()
+ this.#events = opts.events
+
+ /* istanbul ignore next - coverage disabled because this is pointless to test here */
+ if (streams.length) {
+ this.push(...streams)
+ }
+ }
+
+ on (event, handler) {
+ if (this.#events.includes(event) && this.#data.has(event)) {
+ return handler(...this.#data.get(event))
+ }
+
+ return super.on(event, handler)
+ }
+
+ emit (event, ...data) {
+ if (this.#events.includes(event)) {
+ this.#data.set(event, data)
+ }
+
+ return super.emit(event, ...data)
+ }
+}
+
+module.exports = CachingMinipassPipeline
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/remote.js b/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/remote.js
new file mode 100644
index 00000000000..8554564074d
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/lib/remote.js
@@ -0,0 +1,131 @@
+const { Minipass } = require('minipass')
+const fetch = require('minipass-fetch')
+const promiseRetry = require('promise-retry')
+const ssri = require('ssri')
+const { log } = require('proc-log')
+
+const CachingMinipassPipeline = require('./pipeline.js')
+const { getAgent } = require('@npmcli/agent')
+const pkg = require('../package.json')
+
+const USER_AGENT = `${pkg.name}/${pkg.version} (+https://npm.im/${pkg.name})`
+
+const RETRY_ERRORS = [
+ 'ECONNRESET', // remote socket closed on us
+ 'ECONNREFUSED', // remote host refused to open connection
+ 'EADDRINUSE', // failed to bind to a local port (proxy?)
+ 'ETIMEDOUT', // someone in the transaction is WAY TOO SLOW
+ // from @npmcli/agent
+ 'ECONNECTIONTIMEOUT',
+ 'EIDLETIMEOUT',
+ 'ERESPONSETIMEOUT',
+ 'ETRANSFERTIMEOUT',
+ // Known codes we do NOT retry on:
+ // ENOTFOUND (getaddrinfo failure. Either bad hostname, or offline)
+ // EINVALIDPROXY // invalid protocol from @npmcli/agent
+ // EINVALIDRESPONSE // invalid status code from @npmcli/agent
+]
+
+const RETRY_TYPES = [
+ 'request-timeout',
+]
+
+// make a request directly to the remote source,
+// retrying certain classes of errors as well as
+// following redirects (through the cache if necessary)
+// and verifying response integrity
+const remoteFetch = (request, options) => {
+ const agent = getAgent(request.url, options)
+ if (!request.headers.has('connection')) {
+ request.headers.set('connection', agent ? 'keep-alive' : 'close')
+ }
+
+ if (!request.headers.has('user-agent')) {
+ request.headers.set('user-agent', USER_AGENT)
+ }
+
+ // keep our own options since we're overriding the agent
+ // and the redirect mode
+ const _opts = {
+ ...options,
+ agent,
+ redirect: 'manual',
+ }
+
+ return promiseRetry(async (retryHandler, attemptNum) => {
+ const req = new fetch.Request(request, _opts)
+ try {
+ let res = await fetch(req, _opts)
+ if (_opts.integrity && res.status === 200) {
+ // we got a 200 response and the user has specified an expected
+ // integrity value, so wrap the response in an ssri stream to verify it
+ const integrityStream = ssri.integrityStream({
+ algorithms: _opts.algorithms,
+ integrity: _opts.integrity,
+ size: _opts.size,
+ })
+ const pipeline = new CachingMinipassPipeline({
+ events: ['integrity', 'size'],
+ }, res.body, integrityStream)
+ // we also propagate the integrity and size events out to the pipeline so we can use
+ // this new response body as an integrityEmitter for cacache
+ integrityStream.on('integrity', i => pipeline.emit('integrity', i))
+ integrityStream.on('size', s => pipeline.emit('size', s))
+ res = new fetch.Response(pipeline, res)
+ // set an explicit flag so we know if our response body will emit integrity and size
+ res.body.hasIntegrityEmitter = true
+ }
+
+ res.headers.set('x-fetch-attempts', attemptNum)
+
+ // do not retry POST requests, or requests with a streaming body
+ // do retry requests with a 408, 420, 429 or 500+ status in the response
+ const isStream = Minipass.isStream(req.body)
+ const isRetriable = req.method !== 'POST' &&
+ !isStream &&
+ ([408, 420, 429].includes(res.status) || res.status >= 500)
+
+ if (isRetriable) {
+ if (typeof options.onRetry === 'function') {
+ options.onRetry(res)
+ }
+
+ /* eslint-disable-next-line max-len */
+ log.http('fetch', `${req.method} ${req.url} attempt ${attemptNum} failed with ${res.status}`)
+ return retryHandler(res)
+ }
+
+ return res
+ } catch (err) {
+ const code = (err.code === 'EPROMISERETRY')
+ ? err.retried.code
+ : err.code
+
+ // err.retried will be the thing that was thrown from above
+ // if it's a response, we just got a bad status code and we
+ // can re-throw to allow the retry
+ const isRetryError = err.retried instanceof fetch.Response ||
+ (RETRY_ERRORS.includes(code) && RETRY_TYPES.includes(err.type))
+
+ if (req.method === 'POST' || isRetryError) {
+ throw err
+ }
+
+ if (typeof options.onRetry === 'function') {
+ options.onRetry(err)
+ }
+
+ log.http('fetch', `${req.method} ${req.url} attempt ${attemptNum} failed with ${err.code}`)
+ return retryHandler(err)
+ }
+ }, options.retry).catch((err) => {
+ // don't reject for http errors, just return them
+ if (err.status >= 400 && err.type !== 'system') {
+ return err
+ }
+
+ throw err
+ })
+}
+
+module.exports = remoteFetch
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/package.json b/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/package.json
new file mode 100644
index 00000000000..7adb4d1e7f9
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen/package.json
@@ -0,0 +1,75 @@
+{
+ "name": "make-fetch-happen",
+ "version": "13.0.1",
+ "description": "Opinionated, caching, retrying fetch client",
+ "main": "lib/index.js",
+ "files": [
+ "bin/",
+ "lib/"
+ ],
+ "scripts": {
+ "test": "tap",
+ "posttest": "npm run lint",
+ "eslint": "eslint",
+ "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lintfix": "npm run lint -- --fix",
+ "postlint": "template-oss-check",
+ "snap": "tap",
+ "template-oss-apply": "template-oss-apply --force"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/npm/make-fetch-happen.git"
+ },
+ "keywords": [
+ "http",
+ "request",
+ "fetch",
+ "mean girls",
+ "caching",
+ "cache",
+ "subresource integrity"
+ ],
+ "author": "GitHub Inc.",
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/agent": "^2.0.0",
+ "cacache": "^18.0.0",
+ "http-cache-semantics": "^4.1.1",
+ "is-lambda": "^1.0.1",
+ "minipass": "^7.0.2",
+ "minipass-fetch": "^3.0.0",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.4",
+ "negotiator": "^0.6.3",
+ "proc-log": "^4.2.0",
+ "promise-retry": "^2.0.1",
+ "ssri": "^10.0.0"
+ },
+ "devDependencies": {
+ "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/template-oss": "4.21.4",
+ "nock": "^13.2.4",
+ "safe-buffer": "^5.2.1",
+ "standard-version": "^9.3.2",
+ "tap": "^16.0.0"
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ },
+ "tap": {
+ "color": 1,
+ "files": "test/*.js",
+ "check-coverage": true,
+ "timeout": 60,
+ "nyc-arg": [
+ "--exclude",
+ "tap-snapshots/**"
+ ]
+ },
+ "templateOSS": {
+ "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
+ "version": "4.21.4",
+ "publish": "true"
+ }
+}
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/LICENSE b/deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/LICENSE
new file mode 100644
index 00000000000..3c3410cdc12
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/LICENSE
@@ -0,0 +1,28 @@
+The MIT License (MIT)
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+Copyright (c) 2016 David Frank
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+---
+
+Note: This is a derivative work based on "node-fetch" by David Frank,
+modified and distributed under the terms of the MIT license above.
+https://github.com/bitinn/node-fetch
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/lib/abort-error.js b/deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/lib/abort-error.js
new file mode 100644
index 00000000000..b18f643269e
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/lib/abort-error.js
@@ -0,0 +1,17 @@
+'use strict'
+class AbortError extends Error {
+ constructor (message) {
+ super(message)
+ this.code = 'FETCH_ABORTED'
+ this.type = 'aborted'
+ Error.captureStackTrace(this, this.constructor)
+ }
+
+ get name () {
+ return 'AbortError'
+ }
+
+ // don't allow name to be overridden, but don't throw either
+ set name (s) {}
+}
+module.exports = AbortError
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/lib/blob.js b/deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/lib/blob.js
new file mode 100644
index 00000000000..121b1730102
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/lib/blob.js
@@ -0,0 +1,97 @@
+'use strict'
+const { Minipass } = require('minipass')
+const TYPE = Symbol('type')
+const BUFFER = Symbol('buffer')
+
+class Blob {
+ constructor (blobParts, options) {
+ this[TYPE] = ''
+
+ const buffers = []
+ let size = 0
+
+ if (blobParts) {
+ const a = blobParts
+ const length = Number(a.length)
+ for (let i = 0; i < length; i++) {
+ const element = a[i]
+ const buffer = element instanceof Buffer ? element
+ : ArrayBuffer.isView(element)
+ ? Buffer.from(element.buffer, element.byteOffset, element.byteLength)
+ : element instanceof ArrayBuffer ? Buffer.from(element)
+ : element instanceof Blob ? element[BUFFER]
+ : typeof element === 'string' ? Buffer.from(element)
+ : Buffer.from(String(element))
+ size += buffer.length
+ buffers.push(buffer)
+ }
+ }
+
+ this[BUFFER] = Buffer.concat(buffers, size)
+
+ const type = options && options.type !== undefined
+ && String(options.type).toLowerCase()
+ if (type && !/[^\u0020-\u007E]/.test(type)) {
+ this[TYPE] = type
+ }
+ }
+
+ get size () {
+ return this[BUFFER].length
+ }
+
+ get type () {
+ return this[TYPE]
+ }
+
+ text () {
+ return Promise.resolve(this[BUFFER].toString())
+ }
+
+ arrayBuffer () {
+ const buf = this[BUFFER]
+ const off = buf.byteOffset
+ const len = buf.byteLength
+ const ab = buf.buffer.slice(off, off + len)
+ return Promise.resolve(ab)
+ }
+
+ stream () {
+ return new Minipass().end(this[BUFFER])
+ }
+
+ slice (start, end, type) {
+ const size = this.size
+ const relativeStart = start === undefined ? 0
+ : start < 0 ? Math.max(size + start, 0)
+ : Math.min(start, size)
+ const relativeEnd = end === undefined ? size
+ : end < 0 ? Math.max(size + end, 0)
+ : Math.min(end, size)
+ const span = Math.max(relativeEnd - relativeStart, 0)
+
+ const buffer = this[BUFFER]
+ const slicedBuffer = buffer.slice(
+ relativeStart,
+ relativeStart + span
+ )
+ const blob = new Blob([], { type })
+ blob[BUFFER] = slicedBuffer
+ return blob
+ }
+
+ get [Symbol.toStringTag] () {
+ return 'Blob'
+ }
+
+ static get BUFFER () {
+ return BUFFER
+ }
+}
+
+Object.defineProperties(Blob.prototype, {
+ size: { enumerable: true },
+ type: { enumerable: true },
+})
+
+module.exports = Blob
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/lib/body.js b/deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/lib/body.js
new file mode 100644
index 00000000000..62286bd1de0
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/lib/body.js
@@ -0,0 +1,350 @@
+'use strict'
+const { Minipass } = require('minipass')
+const MinipassSized = require('minipass-sized')
+
+const Blob = require('./blob.js')
+const { BUFFER } = Blob
+const FetchError = require('./fetch-error.js')
+
+// optional dependency on 'encoding'
+let convert
+try {
+ convert = require('encoding').convert
+} catch (e) {
+ // defer error until textConverted is called
+}
+
+const INTERNALS = Symbol('Body internals')
+const CONSUME_BODY = Symbol('consumeBody')
+
+class Body {
+ constructor (bodyArg, options = {}) {
+ const { size = 0, timeout = 0 } = options
+ const body = bodyArg === undefined || bodyArg === null ? null
+ : isURLSearchParams(bodyArg) ? Buffer.from(bodyArg.toString())
+ : isBlob(bodyArg) ? bodyArg
+ : Buffer.isBuffer(bodyArg) ? bodyArg
+ : Object.prototype.toString.call(bodyArg) === '[object ArrayBuffer]'
+ ? Buffer.from(bodyArg)
+ : ArrayBuffer.isView(bodyArg)
+ ? Buffer.from(bodyArg.buffer, bodyArg.byteOffset, bodyArg.byteLength)
+ : Minipass.isStream(bodyArg) ? bodyArg
+ : Buffer.from(String(bodyArg))
+
+ this[INTERNALS] = {
+ body,
+ disturbed: false,
+ error: null,
+ }
+
+ this.size = size
+ this.timeout = timeout
+
+ if (Minipass.isStream(body)) {
+ body.on('error', er => {
+ const error = er.name === 'AbortError' ? er
+ : new FetchError(`Invalid response while trying to fetch ${
+ this.url}: ${er.message}`, 'system', er)
+ this[INTERNALS].error = error
+ })
+ }
+ }
+
+ get body () {
+ return this[INTERNALS].body
+ }
+
+ get bodyUsed () {
+ return this[INTERNALS].disturbed
+ }
+
+ arrayBuffer () {
+ return this[CONSUME_BODY]().then(buf =>
+ buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength))
+ }
+
+ blob () {
+ const ct = this.headers && this.headers.get('content-type') || ''
+ return this[CONSUME_BODY]().then(buf => Object.assign(
+ new Blob([], { type: ct.toLowerCase() }),
+ { [BUFFER]: buf }
+ ))
+ }
+
+ async json () {
+ const buf = await this[CONSUME_BODY]()
+ try {
+ return JSON.parse(buf.toString())
+ } catch (er) {
+ throw new FetchError(
+ `invalid json response body at ${this.url} reason: ${er.message}`,
+ 'invalid-json'
+ )
+ }
+ }
+
+ text () {
+ return this[CONSUME_BODY]().then(buf => buf.toString())
+ }
+
+ buffer () {
+ return this[CONSUME_BODY]()
+ }
+
+ textConverted () {
+ return this[CONSUME_BODY]().then(buf => convertBody(buf, this.headers))
+ }
+
+ [CONSUME_BODY] () {
+ if (this[INTERNALS].disturbed) {
+ return Promise.reject(new TypeError(`body used already for: ${
+ this.url}`))
+ }
+
+ this[INTERNALS].disturbed = true
+
+ if (this[INTERNALS].error) {
+ return Promise.reject(this[INTERNALS].error)
+ }
+
+ // body is null
+ if (this.body === null) {
+ return Promise.resolve(Buffer.alloc(0))
+ }
+
+ if (Buffer.isBuffer(this.body)) {
+ return Promise.resolve(this.body)
+ }
+
+ const upstream = isBlob(this.body) ? this.body.stream() : this.body
+
+ /* istanbul ignore if: should never happen */
+ if (!Minipass.isStream(upstream)) {
+ return Promise.resolve(Buffer.alloc(0))
+ }
+
+ const stream = this.size && upstream instanceof MinipassSized ? upstream
+ : !this.size && upstream instanceof Minipass &&
+ !(upstream instanceof MinipassSized) ? upstream
+ : this.size ? new MinipassSized({ size: this.size })
+ : new Minipass()
+
+ // allow timeout on slow response body, but only if the stream is still writable. this
+ // makes the timeout center on the socket stream from lib/index.js rather than the
+ // intermediary minipass stream we create to receive the data
+ const resTimeout = this.timeout && stream.writable ? setTimeout(() => {
+ stream.emit('error', new FetchError(
+ `Response timeout while trying to fetch ${
+ this.url} (over ${this.timeout}ms)`, 'body-timeout'))
+ }, this.timeout) : null
+
+ // do not keep the process open just for this timeout, even
+ // though we expect it'll get cleared eventually.
+ if (resTimeout && resTimeout.unref) {
+ resTimeout.unref()
+ }
+
+ // do the pipe in the promise, because the pipe() can send too much
+ // data through right away and upset the MP Sized object
+ return new Promise((resolve) => {
+ // if the stream is some other kind of stream, then pipe through a MP
+ // so we can collect it more easily.
+ if (stream !== upstream) {
+ upstream.on('error', er => stream.emit('error', er))
+ upstream.pipe(stream)
+ }
+ resolve()
+ }).then(() => stream.concat()).then(buf => {
+ clearTimeout(resTimeout)
+ return buf
+ }).catch(er => {
+ clearTimeout(resTimeout)
+ // request was aborted, reject with this Error
+ if (er.name === 'AbortError' || er.name === 'FetchError') {
+ throw er
+ } else if (er.name === 'RangeError') {
+ throw new FetchError(`Could not create Buffer from response body for ${
+ this.url}: ${er.message}`, 'system', er)
+ } else {
+ // other errors, such as incorrect content-encoding or content-length
+ throw new FetchError(`Invalid response body while trying to fetch ${
+ this.url}: ${er.message}`, 'system', er)
+ }
+ })
+ }
+
+ static clone (instance) {
+ if (instance.bodyUsed) {
+ throw new Error('cannot clone body after it is used')
+ }
+
+ const body = instance.body
+
+ // check that body is a stream and not form-data object
+ // NB: can't clone the form-data object without having it as a dependency
+ if (Minipass.isStream(body) && typeof body.getBoundary !== 'function') {
+ // create a dedicated tee stream so that we don't lose data
+ // potentially sitting in the body stream's buffer by writing it
+ // immediately to p1 and not having it for p2.
+ const tee = new Minipass()
+ const p1 = new Minipass()
+ const p2 = new Minipass()
+ tee.on('error', er => {
+ p1.emit('error', er)
+ p2.emit('error', er)
+ })
+ body.on('error', er => tee.emit('error', er))
+ tee.pipe(p1)
+ tee.pipe(p2)
+ body.pipe(tee)
+ // set instance body to one fork, return the other
+ instance[INTERNALS].body = p1
+ return p2
+ } else {
+ return instance.body
+ }
+ }
+
+ static extractContentType (body) {
+ return body === null || body === undefined ? null
+ : typeof body === 'string' ? 'text/plain;charset=UTF-8'
+ : isURLSearchParams(body)
+ ? 'application/x-www-form-urlencoded;charset=UTF-8'
+ : isBlob(body) ? body.type || null
+ : Buffer.isBuffer(body) ? null
+ : Object.prototype.toString.call(body) === '[object ArrayBuffer]' ? null
+ : ArrayBuffer.isView(body) ? null
+ : typeof body.getBoundary === 'function'
+ ? `multipart/form-data;boundary=${body.getBoundary()}`
+ : Minipass.isStream(body) ? null
+ : 'text/plain;charset=UTF-8'
+ }
+
+ static getTotalBytes (instance) {
+ const { body } = instance
+ return (body === null || body === undefined) ? 0
+ : isBlob(body) ? body.size
+ : Buffer.isBuffer(body) ? body.length
+ : body && typeof body.getLengthSync === 'function' && (
+ // detect form data input from form-data module
+ body._lengthRetrievers &&
+ /* istanbul ignore next */ body._lengthRetrievers.length === 0 || // 1.x
+ body.hasKnownLength && body.hasKnownLength()) // 2.x
+ ? body.getLengthSync()
+ : null
+ }
+
+ static writeToStream (dest, instance) {
+ const { body } = instance
+
+ if (body === null || body === undefined) {
+ dest.end()
+ } else if (Buffer.isBuffer(body) || typeof body === 'string') {
+ dest.end(body)
+ } else {
+ // body is stream or blob
+ const stream = isBlob(body) ? body.stream() : body
+ stream.on('error', er => dest.emit('error', er)).pipe(dest)
+ }
+
+ return dest
+ }
+}
+
+Object.defineProperties(Body.prototype, {
+ body: { enumerable: true },
+ bodyUsed: { enumerable: true },
+ arrayBuffer: { enumerable: true },
+ blob: { enumerable: true },
+ json: { enumerable: true },
+ text: { enumerable: true },
+})
+
+const isURLSearchParams = obj =>
+ // Duck-typing as a necessary condition.
+ (typeof obj !== 'object' ||
+ typeof obj.append !== 'function' ||
+ typeof obj.delete !== 'function' ||
+ typeof obj.get !== 'function' ||
+ typeof obj.getAll !== 'function' ||
+ typeof obj.has !== 'function' ||
+ typeof obj.set !== 'function') ? false
+ // Brand-checking and more duck-typing as optional condition.
+ : obj.constructor.name === 'URLSearchParams' ||
+ Object.prototype.toString.call(obj) === '[object URLSearchParams]' ||
+ typeof obj.sort === 'function'
+
+const isBlob = obj =>
+ typeof obj === 'object' &&
+ typeof obj.arrayBuffer === 'function' &&
+ typeof obj.type === 'string' &&
+ typeof obj.stream === 'function' &&
+ typeof obj.constructor === 'function' &&
+ typeof obj.constructor.name === 'string' &&
+ /^(Blob|File)$/.test(obj.constructor.name) &&
+ /^(Blob|File)$/.test(obj[Symbol.toStringTag])
+
+const convertBody = (buffer, headers) => {
+ /* istanbul ignore if */
+ if (typeof convert !== 'function') {
+ throw new Error('The package `encoding` must be installed to use the textConverted() function')
+ }
+
+ const ct = headers && headers.get('content-type')
+ let charset = 'utf-8'
+ let res
+
+ // header
+ if (ct) {
+ res = /charset=([^;]*)/i.exec(ct)
+ }
+
+ // no charset in content type, peek at response body for at most 1024 bytes
+ const str = buffer.slice(0, 1024).toString()
+
+ // html5
+ if (!res && str) {
+ res = / this.expect
+ ? 'max-size' : type
+ this.message = message
+ Error.captureStackTrace(this, this.constructor)
+ }
+
+ get name () {
+ return 'FetchError'
+ }
+
+ // don't allow name to be overwritten
+ set name (n) {}
+
+ get [Symbol.toStringTag] () {
+ return 'FetchError'
+ }
+}
+module.exports = FetchError
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/lib/headers.js b/deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/lib/headers.js
new file mode 100644
index 00000000000..dd6e854d5ba
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/lib/headers.js
@@ -0,0 +1,267 @@
+'use strict'
+const invalidTokenRegex = /[^^_`a-zA-Z\-0-9!#$%&'*+.|~]/
+const invalidHeaderCharRegex = /[^\t\x20-\x7e\x80-\xff]/
+
+const validateName = name => {
+ name = `${name}`
+ if (invalidTokenRegex.test(name) || name === '') {
+ throw new TypeError(`${name} is not a legal HTTP header name`)
+ }
+}
+
+const validateValue = value => {
+ value = `${value}`
+ if (invalidHeaderCharRegex.test(value)) {
+ throw new TypeError(`${value} is not a legal HTTP header value`)
+ }
+}
+
+const find = (map, name) => {
+ name = name.toLowerCase()
+ for (const key in map) {
+ if (key.toLowerCase() === name) {
+ return key
+ }
+ }
+ return undefined
+}
+
+const MAP = Symbol('map')
+class Headers {
+ constructor (init = undefined) {
+ this[MAP] = Object.create(null)
+ if (init instanceof Headers) {
+ const rawHeaders = init.raw()
+ const headerNames = Object.keys(rawHeaders)
+ for (const headerName of headerNames) {
+ for (const value of rawHeaders[headerName]) {
+ this.append(headerName, value)
+ }
+ }
+ return
+ }
+
+ // no-op
+ if (init === undefined || init === null) {
+ return
+ }
+
+ if (typeof init === 'object') {
+ const method = init[Symbol.iterator]
+ if (method !== null && method !== undefined) {
+ if (typeof method !== 'function') {
+ throw new TypeError('Header pairs must be iterable')
+ }
+
+ // sequence>
+ // Note: per spec we have to first exhaust the lists then process them
+ const pairs = []
+ for (const pair of init) {
+ if (typeof pair !== 'object' ||
+ typeof pair[Symbol.iterator] !== 'function') {
+ throw new TypeError('Each header pair must be iterable')
+ }
+ const arrPair = Array.from(pair)
+ if (arrPair.length !== 2) {
+ throw new TypeError('Each header pair must be a name/value tuple')
+ }
+ pairs.push(arrPair)
+ }
+
+ for (const pair of pairs) {
+ this.append(pair[0], pair[1])
+ }
+ } else {
+ // record
+ for (const key of Object.keys(init)) {
+ this.append(key, init[key])
+ }
+ }
+ } else {
+ throw new TypeError('Provided initializer must be an object')
+ }
+ }
+
+ get (name) {
+ name = `${name}`
+ validateName(name)
+ const key = find(this[MAP], name)
+ if (key === undefined) {
+ return null
+ }
+
+ return this[MAP][key].join(', ')
+ }
+
+ forEach (callback, thisArg = undefined) {
+ let pairs = getHeaders(this)
+ for (let i = 0; i < pairs.length; i++) {
+ const [name, value] = pairs[i]
+ callback.call(thisArg, value, name, this)
+ // refresh in case the callback added more headers
+ pairs = getHeaders(this)
+ }
+ }
+
+ set (name, value) {
+ name = `${name}`
+ value = `${value}`
+ validateName(name)
+ validateValue(value)
+ const key = find(this[MAP], name)
+ this[MAP][key !== undefined ? key : name] = [value]
+ }
+
+ append (name, value) {
+ name = `${name}`
+ value = `${value}`
+ validateName(name)
+ validateValue(value)
+ const key = find(this[MAP], name)
+ if (key !== undefined) {
+ this[MAP][key].push(value)
+ } else {
+ this[MAP][name] = [value]
+ }
+ }
+
+ has (name) {
+ name = `${name}`
+ validateName(name)
+ return find(this[MAP], name) !== undefined
+ }
+
+ delete (name) {
+ name = `${name}`
+ validateName(name)
+ const key = find(this[MAP], name)
+ if (key !== undefined) {
+ delete this[MAP][key]
+ }
+ }
+
+ raw () {
+ return this[MAP]
+ }
+
+ keys () {
+ return new HeadersIterator(this, 'key')
+ }
+
+ values () {
+ return new HeadersIterator(this, 'value')
+ }
+
+ [Symbol.iterator] () {
+ return new HeadersIterator(this, 'key+value')
+ }
+
+ entries () {
+ return new HeadersIterator(this, 'key+value')
+ }
+
+ get [Symbol.toStringTag] () {
+ return 'Headers'
+ }
+
+ static exportNodeCompatibleHeaders (headers) {
+ const obj = Object.assign(Object.create(null), headers[MAP])
+
+ // http.request() only supports string as Host header. This hack makes
+ // specifying custom Host header possible.
+ const hostHeaderKey = find(headers[MAP], 'Host')
+ if (hostHeaderKey !== undefined) {
+ obj[hostHeaderKey] = obj[hostHeaderKey][0]
+ }
+
+ return obj
+ }
+
+ static createHeadersLenient (obj) {
+ const headers = new Headers()
+ for (const name of Object.keys(obj)) {
+ if (invalidTokenRegex.test(name)) {
+ continue
+ }
+
+ if (Array.isArray(obj[name])) {
+ for (const val of obj[name]) {
+ if (invalidHeaderCharRegex.test(val)) {
+ continue
+ }
+
+ if (headers[MAP][name] === undefined) {
+ headers[MAP][name] = [val]
+ } else {
+ headers[MAP][name].push(val)
+ }
+ }
+ } else if (!invalidHeaderCharRegex.test(obj[name])) {
+ headers[MAP][name] = [obj[name]]
+ }
+ }
+ return headers
+ }
+}
+
+Object.defineProperties(Headers.prototype, {
+ get: { enumerable: true },
+ forEach: { enumerable: true },
+ set: { enumerable: true },
+ append: { enumerable: true },
+ has: { enumerable: true },
+ delete: { enumerable: true },
+ keys: { enumerable: true },
+ values: { enumerable: true },
+ entries: { enumerable: true },
+})
+
+const getHeaders = (headers, kind = 'key+value') =>
+ Object.keys(headers[MAP]).sort().map(
+ kind === 'key' ? k => k.toLowerCase()
+ : kind === 'value' ? k => headers[MAP][k].join(', ')
+ : k => [k.toLowerCase(), headers[MAP][k].join(', ')]
+ )
+
+const INTERNAL = Symbol('internal')
+
+class HeadersIterator {
+ constructor (target, kind) {
+ this[INTERNAL] = {
+ target,
+ kind,
+ index: 0,
+ }
+ }
+
+ get [Symbol.toStringTag] () {
+ return 'HeadersIterator'
+ }
+
+ next () {
+ /* istanbul ignore if: should be impossible */
+ if (!this || Object.getPrototypeOf(this) !== HeadersIterator.prototype) {
+ throw new TypeError('Value of `this` is not a HeadersIterator')
+ }
+
+ const { target, kind, index } = this[INTERNAL]
+ const values = getHeaders(target, kind)
+ const len = values.length
+ if (index >= len) {
+ return {
+ value: undefined,
+ done: true,
+ }
+ }
+
+ this[INTERNAL].index++
+
+ return { value: values[index], done: false }
+ }
+}
+
+// manually extend because 'extends' requires a ctor
+Object.setPrototypeOf(HeadersIterator.prototype,
+ Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())))
+
+module.exports = Headers
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/lib/index.js b/deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/lib/index.js
new file mode 100644
index 00000000000..da402161670
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/lib/index.js
@@ -0,0 +1,377 @@
+'use strict'
+const { URL } = require('url')
+const http = require('http')
+const https = require('https')
+const zlib = require('minizlib')
+const { Minipass } = require('minipass')
+
+const Body = require('./body.js')
+const { writeToStream, getTotalBytes } = Body
+const Response = require('./response.js')
+const Headers = require('./headers.js')
+const { createHeadersLenient } = Headers
+const Request = require('./request.js')
+const { getNodeRequestOptions } = Request
+const FetchError = require('./fetch-error.js')
+const AbortError = require('./abort-error.js')
+
+// XXX this should really be split up and unit-ized for easier testing
+// and better DRY implementation of data/http request aborting
+const fetch = async (url, opts) => {
+ if (/^data:/.test(url)) {
+ const request = new Request(url, opts)
+ // delay 1 promise tick so that the consumer can abort right away
+ return Promise.resolve().then(() => new Promise((resolve, reject) => {
+ let type, data
+ try {
+ const { pathname, search } = new URL(url)
+ const split = pathname.split(',')
+ if (split.length < 2) {
+ throw new Error('invalid data: URI')
+ }
+ const mime = split.shift()
+ const base64 = /;base64$/.test(mime)
+ type = base64 ? mime.slice(0, -1 * ';base64'.length) : mime
+ const rawData = decodeURIComponent(split.join(',') + search)
+ data = base64 ? Buffer.from(rawData, 'base64') : Buffer.from(rawData)
+ } catch (er) {
+ return reject(new FetchError(`[${request.method}] ${
+ request.url} invalid URL, ${er.message}`, 'system', er))
+ }
+
+ const { signal } = request
+ if (signal && signal.aborted) {
+ return reject(new AbortError('The user aborted a request.'))
+ }
+
+ const headers = { 'Content-Length': data.length }
+ if (type) {
+ headers['Content-Type'] = type
+ }
+ return resolve(new Response(data, { headers }))
+ }))
+ }
+
+ return new Promise((resolve, reject) => {
+ // build request object
+ const request = new Request(url, opts)
+ let options
+ try {
+ options = getNodeRequestOptions(request)
+ } catch (er) {
+ return reject(er)
+ }
+
+ const send = (options.protocol === 'https:' ? https : http).request
+ const { signal } = request
+ let response = null
+ const abort = () => {
+ const error = new AbortError('The user aborted a request.')
+ reject(error)
+ if (Minipass.isStream(request.body) &&
+ typeof request.body.destroy === 'function') {
+ request.body.destroy(error)
+ }
+ if (response && response.body) {
+ response.body.emit('error', error)
+ }
+ }
+
+ if (signal && signal.aborted) {
+ return abort()
+ }
+
+ const abortAndFinalize = () => {
+ abort()
+ finalize()
+ }
+
+ const finalize = () => {
+ req.abort()
+ if (signal) {
+ signal.removeEventListener('abort', abortAndFinalize)
+ }
+ clearTimeout(reqTimeout)
+ }
+
+ // send request
+ const req = send(options)
+
+ if (signal) {
+ signal.addEventListener('abort', abortAndFinalize)
+ }
+
+ let reqTimeout = null
+ if (request.timeout) {
+ req.once('socket', () => {
+ reqTimeout = setTimeout(() => {
+ reject(new FetchError(`network timeout at: ${
+ request.url}`, 'request-timeout'))
+ finalize()
+ }, request.timeout)
+ })
+ }
+
+ req.on('error', er => {
+ // if a 'response' event is emitted before the 'error' event, then by the
+ // time this handler is run it's too late to reject the Promise for the
+ // response. instead, we forward the error event to the response stream
+ // so that the error will surface to the user when they try to consume
+ // the body. this is done as a side effect of aborting the request except
+ // for in windows, where we must forward the event manually, otherwise
+ // there is no longer a ref'd socket attached to the request and the
+ // stream never ends so the event loop runs out of work and the process
+ // exits without warning.
+ // coverage skipped here due to the difficulty in testing
+ // istanbul ignore next
+ if (req.res) {
+ req.res.emit('error', er)
+ }
+ reject(new FetchError(`request to ${request.url} failed, reason: ${
+ er.message}`, 'system', er))
+ finalize()
+ })
+
+ req.on('response', res => {
+ clearTimeout(reqTimeout)
+
+ const headers = createHeadersLenient(res.headers)
+
+ // HTTP fetch step 5
+ if (fetch.isRedirect(res.statusCode)) {
+ // HTTP fetch step 5.2
+ const location = headers.get('Location')
+
+ // HTTP fetch step 5.3
+ let locationURL = null
+ try {
+ locationURL = location === null ? null : new URL(location, request.url).toString()
+ } catch {
+ // error here can only be invalid URL in Location: header
+ // do not throw when options.redirect == manual
+ // let the user extract the errorneous redirect URL
+ if (request.redirect !== 'manual') {
+ /* eslint-disable-next-line max-len */
+ reject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect'))
+ finalize()
+ return
+ }
+ }
+
+ // HTTP fetch step 5.5
+ if (request.redirect === 'error') {
+ reject(new FetchError('uri requested responds with a redirect, ' +
+ `redirect mode is set to error: ${request.url}`, 'no-redirect'))
+ finalize()
+ return
+ } else if (request.redirect === 'manual') {
+ // node-fetch-specific step: make manual redirect a bit easier to
+ // use by setting the Location header value to the resolved URL.
+ if (locationURL !== null) {
+ // handle corrupted header
+ try {
+ headers.set('Location', locationURL)
+ } catch (err) {
+ /* istanbul ignore next: nodejs server prevent invalid
+ response headers, we can't test this through normal
+ request */
+ reject(err)
+ }
+ }
+ } else if (request.redirect === 'follow' && locationURL !== null) {
+ // HTTP-redirect fetch step 5
+ if (request.counter >= request.follow) {
+ reject(new FetchError(`maximum redirect reached at: ${
+ request.url}`, 'max-redirect'))
+ finalize()
+ return
+ }
+
+ // HTTP-redirect fetch step 9
+ if (res.statusCode !== 303 &&
+ request.body &&
+ getTotalBytes(request) === null) {
+ reject(new FetchError(
+ 'Cannot follow redirect with body being a readable stream',
+ 'unsupported-redirect'
+ ))
+ finalize()
+ return
+ }
+
+ // Update host due to redirection
+ request.headers.set('host', (new URL(locationURL)).host)
+
+ // HTTP-redirect fetch step 6 (counter increment)
+ // Create a new Request object.
+ const requestOpts = {
+ headers: new Headers(request.headers),
+ follow: request.follow,
+ counter: request.counter + 1,
+ agent: request.agent,
+ compress: request.compress,
+ method: request.method,
+ body: request.body,
+ signal: request.signal,
+ timeout: request.timeout,
+ }
+
+ // if the redirect is to a new hostname, strip the authorization and cookie headers
+ const parsedOriginal = new URL(request.url)
+ const parsedRedirect = new URL(locationURL)
+ if (parsedOriginal.hostname !== parsedRedirect.hostname) {
+ requestOpts.headers.delete('authorization')
+ requestOpts.headers.delete('cookie')
+ }
+
+ // HTTP-redirect fetch step 11
+ if (res.statusCode === 303 || (
+ (res.statusCode === 301 || res.statusCode === 302) &&
+ request.method === 'POST'
+ )) {
+ requestOpts.method = 'GET'
+ requestOpts.body = undefined
+ requestOpts.headers.delete('content-length')
+ }
+
+ // HTTP-redirect fetch step 15
+ resolve(fetch(new Request(locationURL, requestOpts)))
+ finalize()
+ return
+ }
+ } // end if(isRedirect)
+
+ // prepare response
+ res.once('end', () =>
+ signal && signal.removeEventListener('abort', abortAndFinalize))
+
+ const body = new Minipass()
+ // if an error occurs, either on the response stream itself, on one of the
+ // decoder streams, or a response length timeout from the Body class, we
+ // forward the error through to our internal body stream. If we see an
+ // error event on that, we call finalize to abort the request and ensure
+ // we don't leave a socket believing a request is in flight.
+ // this is difficult to test, so lacks specific coverage.
+ body.on('error', finalize)
+ // exceedingly rare that the stream would have an error,
+ // but just in case we proxy it to the stream in use.
+ res.on('error', /* istanbul ignore next */ er => body.emit('error', er))
+ res.on('data', (chunk) => body.write(chunk))
+ res.on('end', () => body.end())
+
+ const responseOptions = {
+ url: request.url,
+ status: res.statusCode,
+ statusText: res.statusMessage,
+ headers: headers,
+ size: request.size,
+ timeout: request.timeout,
+ counter: request.counter,
+ trailer: new Promise(resolveTrailer =>
+ res.on('end', () => resolveTrailer(createHeadersLenient(res.trailers)))),
+ }
+
+ // HTTP-network fetch step 12.1.1.3
+ const codings = headers.get('Content-Encoding')
+
+ // HTTP-network fetch step 12.1.1.4: handle content codings
+
+ // in following scenarios we ignore compression support
+ // 1. compression support is disabled
+ // 2. HEAD request
+ // 3. no Content-Encoding header
+ // 4. no content response (204)
+ // 5. content not modified response (304)
+ if (!request.compress ||
+ request.method === 'HEAD' ||
+ codings === null ||
+ res.statusCode === 204 ||
+ res.statusCode === 304) {
+ response = new Response(body, responseOptions)
+ resolve(response)
+ return
+ }
+
+ // Be less strict when decoding compressed responses, since sometimes
+ // servers send slightly invalid responses that are still accepted
+ // by common browsers.
+ // Always using Z_SYNC_FLUSH is what cURL does.
+ const zlibOptions = {
+ flush: zlib.constants.Z_SYNC_FLUSH,
+ finishFlush: zlib.constants.Z_SYNC_FLUSH,
+ }
+
+ // for gzip
+ if (codings === 'gzip' || codings === 'x-gzip') {
+ const unzip = new zlib.Gunzip(zlibOptions)
+ response = new Response(
+ // exceedingly rare that the stream would have an error,
+ // but just in case we proxy it to the stream in use.
+ body.on('error', /* istanbul ignore next */ er => unzip.emit('error', er)).pipe(unzip),
+ responseOptions
+ )
+ resolve(response)
+ return
+ }
+
+ // for deflate
+ if (codings === 'deflate' || codings === 'x-deflate') {
+ // handle the infamous raw deflate response from old servers
+ // a hack for old IIS and Apache servers
+ const raw = res.pipe(new Minipass())
+ raw.once('data', chunk => {
+ // see http://stackoverflow.com/questions/37519828
+ const decoder = (chunk[0] & 0x0F) === 0x08
+ ? new zlib.Inflate()
+ : new zlib.InflateRaw()
+ // exceedingly rare that the stream would have an error,
+ // but just in case we proxy it to the stream in use.
+ body.on('error', /* istanbul ignore next */ er => decoder.emit('error', er)).pipe(decoder)
+ response = new Response(decoder, responseOptions)
+ resolve(response)
+ })
+ return
+ }
+
+ // for br
+ if (codings === 'br') {
+ // ignoring coverage so tests don't have to fake support (or lack of) for brotli
+ // istanbul ignore next
+ try {
+ var decoder = new zlib.BrotliDecompress()
+ } catch (err) {
+ reject(err)
+ finalize()
+ return
+ }
+ // exceedingly rare that the stream would have an error,
+ // but just in case we proxy it to the stream in use.
+ body.on('error', /* istanbul ignore next */ er => decoder.emit('error', er)).pipe(decoder)
+ response = new Response(decoder, responseOptions)
+ resolve(response)
+ return
+ }
+
+ // otherwise, use response as-is
+ response = new Response(body, responseOptions)
+ resolve(response)
+ })
+
+ writeToStream(req, request)
+ })
+}
+
+module.exports = fetch
+
+fetch.isRedirect = code =>
+ code === 301 ||
+ code === 302 ||
+ code === 303 ||
+ code === 307 ||
+ code === 308
+
+fetch.Headers = Headers
+fetch.Request = Request
+fetch.Response = Response
+fetch.FetchError = FetchError
+fetch.AbortError = AbortError
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/lib/request.js b/deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/lib/request.js
new file mode 100644
index 00000000000..054439e6699
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/lib/request.js
@@ -0,0 +1,282 @@
+'use strict'
+const { URL } = require('url')
+const { Minipass } = require('minipass')
+const Headers = require('./headers.js')
+const { exportNodeCompatibleHeaders } = Headers
+const Body = require('./body.js')
+const { clone, extractContentType, getTotalBytes } = Body
+
+const version = require('../package.json').version
+const defaultUserAgent =
+ `minipass-fetch/${version} (+https://github.com/isaacs/minipass-fetch)`
+
+const INTERNALS = Symbol('Request internals')
+
+const isRequest = input =>
+ typeof input === 'object' && typeof input[INTERNALS] === 'object'
+
+const isAbortSignal = signal => {
+ const proto = (
+ signal
+ && typeof signal === 'object'
+ && Object.getPrototypeOf(signal)
+ )
+ return !!(proto && proto.constructor.name === 'AbortSignal')
+}
+
+class Request extends Body {
+ constructor (input, init = {}) {
+ const parsedURL = isRequest(input) ? new URL(input.url)
+ : input && input.href ? new URL(input.href)
+ : new URL(`${input}`)
+
+ if (isRequest(input)) {
+ init = { ...input[INTERNALS], ...init }
+ } else if (!input || typeof input === 'string') {
+ input = {}
+ }
+
+ const method = (init.method || input.method || 'GET').toUpperCase()
+ const isGETHEAD = method === 'GET' || method === 'HEAD'
+
+ if ((init.body !== null && init.body !== undefined ||
+ isRequest(input) && input.body !== null) && isGETHEAD) {
+ throw new TypeError('Request with GET/HEAD method cannot have body')
+ }
+
+ const inputBody = init.body !== null && init.body !== undefined ? init.body
+ : isRequest(input) && input.body !== null ? clone(input)
+ : null
+
+ super(inputBody, {
+ timeout: init.timeout || input.timeout || 0,
+ size: init.size || input.size || 0,
+ })
+
+ const headers = new Headers(init.headers || input.headers || {})
+
+ if (inputBody !== null && inputBody !== undefined &&
+ !headers.has('Content-Type')) {
+ const contentType = extractContentType(inputBody)
+ if (contentType) {
+ headers.append('Content-Type', contentType)
+ }
+ }
+
+ const signal = 'signal' in init ? init.signal
+ : null
+
+ if (signal !== null && signal !== undefined && !isAbortSignal(signal)) {
+ throw new TypeError('Expected signal must be an instanceof AbortSignal')
+ }
+
+ // TLS specific options that are handled by node
+ const {
+ ca,
+ cert,
+ ciphers,
+ clientCertEngine,
+ crl,
+ dhparam,
+ ecdhCurve,
+ family,
+ honorCipherOrder,
+ key,
+ passphrase,
+ pfx,
+ rejectUnauthorized = process.env.NODE_TLS_REJECT_UNAUTHORIZED !== '0',
+ secureOptions,
+ secureProtocol,
+ servername,
+ sessionIdContext,
+ } = init
+
+ this[INTERNALS] = {
+ method,
+ redirect: init.redirect || input.redirect || 'follow',
+ headers,
+ parsedURL,
+ signal,
+ ca,
+ cert,
+ ciphers,
+ clientCertEngine,
+ crl,
+ dhparam,
+ ecdhCurve,
+ family,
+ honorCipherOrder,
+ key,
+ passphrase,
+ pfx,
+ rejectUnauthorized,
+ secureOptions,
+ secureProtocol,
+ servername,
+ sessionIdContext,
+ }
+
+ // node-fetch-only options
+ this.follow = init.follow !== undefined ? init.follow
+ : input.follow !== undefined ? input.follow
+ : 20
+ this.compress = init.compress !== undefined ? init.compress
+ : input.compress !== undefined ? input.compress
+ : true
+ this.counter = init.counter || input.counter || 0
+ this.agent = init.agent || input.agent
+ }
+
+ get method () {
+ return this[INTERNALS].method
+ }
+
+ get url () {
+ return this[INTERNALS].parsedURL.toString()
+ }
+
+ get headers () {
+ return this[INTERNALS].headers
+ }
+
+ get redirect () {
+ return this[INTERNALS].redirect
+ }
+
+ get signal () {
+ return this[INTERNALS].signal
+ }
+
+ clone () {
+ return new Request(this)
+ }
+
+ get [Symbol.toStringTag] () {
+ return 'Request'
+ }
+
+ static getNodeRequestOptions (request) {
+ const parsedURL = request[INTERNALS].parsedURL
+ const headers = new Headers(request[INTERNALS].headers)
+
+ // fetch step 1.3
+ if (!headers.has('Accept')) {
+ headers.set('Accept', '*/*')
+ }
+
+ // Basic fetch
+ if (!/^https?:$/.test(parsedURL.protocol)) {
+ throw new TypeError('Only HTTP(S) protocols are supported')
+ }
+
+ if (request.signal &&
+ Minipass.isStream(request.body) &&
+ typeof request.body.destroy !== 'function') {
+ throw new Error(
+ 'Cancellation of streamed requests with AbortSignal is not supported')
+ }
+
+ // HTTP-network-or-cache fetch steps 2.4-2.7
+ const contentLengthValue =
+ (request.body === null || request.body === undefined) &&
+ /^(POST|PUT)$/i.test(request.method) ? '0'
+ : request.body !== null && request.body !== undefined
+ ? getTotalBytes(request)
+ : null
+
+ if (contentLengthValue) {
+ headers.set('Content-Length', contentLengthValue + '')
+ }
+
+ // HTTP-network-or-cache fetch step 2.11
+ if (!headers.has('User-Agent')) {
+ headers.set('User-Agent', defaultUserAgent)
+ }
+
+ // HTTP-network-or-cache fetch step 2.15
+ if (request.compress && !headers.has('Accept-Encoding')) {
+ headers.set('Accept-Encoding', 'gzip,deflate')
+ }
+
+ const agent = typeof request.agent === 'function'
+ ? request.agent(parsedURL)
+ : request.agent
+
+ if (!headers.has('Connection') && !agent) {
+ headers.set('Connection', 'close')
+ }
+
+ // TLS specific options that are handled by node
+ const {
+ ca,
+ cert,
+ ciphers,
+ clientCertEngine,
+ crl,
+ dhparam,
+ ecdhCurve,
+ family,
+ honorCipherOrder,
+ key,
+ passphrase,
+ pfx,
+ rejectUnauthorized,
+ secureOptions,
+ secureProtocol,
+ servername,
+ sessionIdContext,
+ } = request[INTERNALS]
+
+ // HTTP-network fetch step 4.2
+ // chunked encoding is handled by Node.js
+
+ // we cannot spread parsedURL directly, so we have to read each property one-by-one
+ // and map them to the equivalent https?.request() method options
+ const urlProps = {
+ auth: parsedURL.username || parsedURL.password
+ ? `${parsedURL.username}:${parsedURL.password}`
+ : '',
+ host: parsedURL.host,
+ hostname: parsedURL.hostname,
+ path: `${parsedURL.pathname}${parsedURL.search}`,
+ port: parsedURL.port,
+ protocol: parsedURL.protocol,
+ }
+
+ return {
+ ...urlProps,
+ method: request.method,
+ headers: exportNodeCompatibleHeaders(headers),
+ agent,
+ ca,
+ cert,
+ ciphers,
+ clientCertEngine,
+ crl,
+ dhparam,
+ ecdhCurve,
+ family,
+ honorCipherOrder,
+ key,
+ passphrase,
+ pfx,
+ rejectUnauthorized,
+ secureOptions,
+ secureProtocol,
+ servername,
+ sessionIdContext,
+ timeout: request.timeout,
+ }
+ }
+}
+
+module.exports = Request
+
+Object.defineProperties(Request.prototype, {
+ method: { enumerable: true },
+ url: { enumerable: true },
+ headers: { enumerable: true },
+ redirect: { enumerable: true },
+ clone: { enumerable: true },
+ signal: { enumerable: true },
+})
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/lib/response.js b/deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/lib/response.js
new file mode 100644
index 00000000000..54cb52db359
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/lib/response.js
@@ -0,0 +1,90 @@
+'use strict'
+const http = require('http')
+const { STATUS_CODES } = http
+
+const Headers = require('./headers.js')
+const Body = require('./body.js')
+const { clone, extractContentType } = Body
+
+const INTERNALS = Symbol('Response internals')
+
+class Response extends Body {
+ constructor (body = null, opts = {}) {
+ super(body, opts)
+
+ const status = opts.status || 200
+ const headers = new Headers(opts.headers)
+
+ if (body !== null && body !== undefined && !headers.has('Content-Type')) {
+ const contentType = extractContentType(body)
+ if (contentType) {
+ headers.append('Content-Type', contentType)
+ }
+ }
+
+ this[INTERNALS] = {
+ url: opts.url,
+ status,
+ statusText: opts.statusText || STATUS_CODES[status],
+ headers,
+ counter: opts.counter,
+ trailer: Promise.resolve(opts.trailer || new Headers()),
+ }
+ }
+
+ get trailer () {
+ return this[INTERNALS].trailer
+ }
+
+ get url () {
+ return this[INTERNALS].url || ''
+ }
+
+ get status () {
+ return this[INTERNALS].status
+ }
+
+ get ok () {
+ return this[INTERNALS].status >= 200 && this[INTERNALS].status < 300
+ }
+
+ get redirected () {
+ return this[INTERNALS].counter > 0
+ }
+
+ get statusText () {
+ return this[INTERNALS].statusText
+ }
+
+ get headers () {
+ return this[INTERNALS].headers
+ }
+
+ clone () {
+ return new Response(clone(this), {
+ url: this.url,
+ status: this.status,
+ statusText: this.statusText,
+ headers: this.headers,
+ ok: this.ok,
+ redirected: this.redirected,
+ trailer: this.trailer,
+ })
+ }
+
+ get [Symbol.toStringTag] () {
+ return 'Response'
+ }
+}
+
+module.exports = Response
+
+Object.defineProperties(Response.prototype, {
+ url: { enumerable: true },
+ status: { enumerable: true },
+ ok: { enumerable: true },
+ redirected: { enumerable: true },
+ statusText: { enumerable: true },
+ headers: { enumerable: true },
+ clone: { enumerable: true },
+})
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/package.json b/deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/package.json
new file mode 100644
index 00000000000..d491a7fba12
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch/package.json
@@ -0,0 +1,69 @@
+{
+ "name": "minipass-fetch",
+ "version": "3.0.5",
+ "description": "An implementation of window.fetch in Node.js using Minipass streams",
+ "license": "MIT",
+ "main": "lib/index.js",
+ "scripts": {
+ "test:tls-fixtures": "./test/fixtures/tls/setup.sh",
+ "test": "tap",
+ "snap": "tap",
+ "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "postlint": "template-oss-check",
+ "lintfix": "npm run lint -- --fix",
+ "posttest": "npm run lint",
+ "template-oss-apply": "template-oss-apply --force"
+ },
+ "tap": {
+ "coverage-map": "map.js",
+ "check-coverage": true,
+ "nyc-arg": [
+ "--exclude",
+ "tap-snapshots/**"
+ ]
+ },
+ "devDependencies": {
+ "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/template-oss": "4.22.0",
+ "@ungap/url-search-params": "^0.2.2",
+ "abort-controller": "^3.0.0",
+ "abortcontroller-polyfill": "~1.7.3",
+ "encoding": "^0.1.13",
+ "form-data": "^4.0.0",
+ "nock": "^13.2.4",
+ "parted": "^0.1.1",
+ "string-to-arraybuffer": "^1.0.2",
+ "tap": "^16.0.0"
+ },
+ "dependencies": {
+ "minipass": "^7.0.3",
+ "minipass-sized": "^1.0.3",
+ "minizlib": "^2.1.2"
+ },
+ "optionalDependencies": {
+ "encoding": "^0.1.13"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/npm/minipass-fetch.git"
+ },
+ "keywords": [
+ "fetch",
+ "minipass",
+ "node-fetch",
+ "window.fetch"
+ ],
+ "files": [
+ "bin/",
+ "lib/"
+ ],
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ },
+ "author": "GitHub Inc.",
+ "templateOSS": {
+ "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
+ "version": "4.22.0",
+ "publish": "true"
+ }
+}
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/proc-log/LICENSE b/deps/npm/node_modules/@sigstore/sign/node_modules/proc-log/LICENSE
new file mode 100644
index 00000000000..83837797202
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/proc-log/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) GitHub, Inc.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/proc-log/lib/index.js b/deps/npm/node_modules/@sigstore/sign/node_modules/proc-log/lib/index.js
new file mode 100644
index 00000000000..86d90861078
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/proc-log/lib/index.js
@@ -0,0 +1,153 @@
+const META = Symbol('proc-log.meta')
+module.exports = {
+ META: META,
+ output: {
+ LEVELS: [
+ 'standard',
+ 'error',
+ 'buffer',
+ 'flush',
+ ],
+ KEYS: {
+ standard: 'standard',
+ error: 'error',
+ buffer: 'buffer',
+ flush: 'flush',
+ },
+ standard: function (...args) {
+ return process.emit('output', 'standard', ...args)
+ },
+ error: function (...args) {
+ return process.emit('output', 'error', ...args)
+ },
+ buffer: function (...args) {
+ return process.emit('output', 'buffer', ...args)
+ },
+ flush: function (...args) {
+ return process.emit('output', 'flush', ...args)
+ },
+ },
+ log: {
+ LEVELS: [
+ 'notice',
+ 'error',
+ 'warn',
+ 'info',
+ 'verbose',
+ 'http',
+ 'silly',
+ 'timing',
+ 'pause',
+ 'resume',
+ ],
+ KEYS: {
+ notice: 'notice',
+ error: 'error',
+ warn: 'warn',
+ info: 'info',
+ verbose: 'verbose',
+ http: 'http',
+ silly: 'silly',
+ timing: 'timing',
+ pause: 'pause',
+ resume: 'resume',
+ },
+ error: function (...args) {
+ return process.emit('log', 'error', ...args)
+ },
+ notice: function (...args) {
+ return process.emit('log', 'notice', ...args)
+ },
+ warn: function (...args) {
+ return process.emit('log', 'warn', ...args)
+ },
+ info: function (...args) {
+ return process.emit('log', 'info', ...args)
+ },
+ verbose: function (...args) {
+ return process.emit('log', 'verbose', ...args)
+ },
+ http: function (...args) {
+ return process.emit('log', 'http', ...args)
+ },
+ silly: function (...args) {
+ return process.emit('log', 'silly', ...args)
+ },
+ timing: function (...args) {
+ return process.emit('log', 'timing', ...args)
+ },
+ pause: function () {
+ return process.emit('log', 'pause')
+ },
+ resume: function () {
+ return process.emit('log', 'resume')
+ },
+ },
+ time: {
+ LEVELS: [
+ 'start',
+ 'end',
+ ],
+ KEYS: {
+ start: 'start',
+ end: 'end',
+ },
+ start: function (name, fn) {
+ process.emit('time', 'start', name)
+ function end () {
+ return process.emit('time', 'end', name)
+ }
+ if (typeof fn === 'function') {
+ const res = fn()
+ if (res && res.finally) {
+ return res.finally(end)
+ }
+ end()
+ return res
+ }
+ return end
+ },
+ end: function (name) {
+ return process.emit('time', 'end', name)
+ },
+ },
+ input: {
+ LEVELS: [
+ 'start',
+ 'end',
+ 'read',
+ ],
+ KEYS: {
+ start: 'start',
+ end: 'end',
+ read: 'read',
+ },
+ start: function (fn) {
+ process.emit('input', 'start')
+ function end () {
+ return process.emit('input', 'end')
+ }
+ if (typeof fn === 'function') {
+ const res = fn()
+ if (res && res.finally) {
+ return res.finally(end)
+ }
+ end()
+ return res
+ }
+ return end
+ },
+ end: function () {
+ return process.emit('input', 'end')
+ },
+ read: function (...args) {
+ let resolve, reject
+ const promise = new Promise((_resolve, _reject) => {
+ resolve = _resolve
+ reject = _reject
+ })
+ process.emit('input', 'read', resolve, reject, ...args)
+ return promise
+ },
+ },
+}
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/proc-log/package.json b/deps/npm/node_modules/@sigstore/sign/node_modules/proc-log/package.json
new file mode 100644
index 00000000000..4ab89102ecc
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/proc-log/package.json
@@ -0,0 +1,45 @@
+{
+ "name": "proc-log",
+ "version": "4.2.0",
+ "files": [
+ "bin/",
+ "lib/"
+ ],
+ "main": "lib/index.js",
+ "description": "just emit 'log' events on the process object",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/npm/proc-log.git"
+ },
+ "author": "GitHub Inc.",
+ "license": "ISC",
+ "scripts": {
+ "test": "tap",
+ "snap": "tap",
+ "posttest": "npm run lint",
+ "postsnap": "eslint index.js test/*.js --fix",
+ "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "postlint": "template-oss-check",
+ "lintfix": "npm run lint -- --fix",
+ "template-oss-apply": "template-oss-apply --force"
+ },
+ "devDependencies": {
+ "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/template-oss": "4.21.3",
+ "tap": "^16.0.1"
+ },
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ },
+ "templateOSS": {
+ "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
+ "version": "4.21.3",
+ "publish": true
+ },
+ "tap": {
+ "nyc-arg": [
+ "--exclude",
+ "tap-snapshots/**"
+ ]
+ }
+}
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/ssri/LICENSE.md b/deps/npm/node_modules/@sigstore/sign/node_modules/ssri/LICENSE.md
new file mode 100644
index 00000000000..e335388869f
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/ssri/LICENSE.md
@@ -0,0 +1,16 @@
+ISC License
+
+Copyright 2021 (c) npm, Inc.
+
+Permission to use, copy, modify, and/or distribute this software for
+any purpose with or without fee is hereby granted, provided that the
+above copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE COPYRIGHT HOLDER DISCLAIMS
+ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
+CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
+USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/ssri/lib/index.js b/deps/npm/node_modules/@sigstore/sign/node_modules/ssri/lib/index.js
new file mode 100644
index 00000000000..7d749ed480f
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/ssri/lib/index.js
@@ -0,0 +1,580 @@
+'use strict'
+
+const crypto = require('crypto')
+const { Minipass } = require('minipass')
+
+const SPEC_ALGORITHMS = ['sha512', 'sha384', 'sha256']
+const DEFAULT_ALGORITHMS = ['sha512']
+
+// TODO: this should really be a hardcoded list of algorithms we support,
+// rather than [a-z0-9].
+const BASE64_REGEX = /^[a-z0-9+/]+(?:=?=?)$/i
+const SRI_REGEX = /^([a-z0-9]+)-([^?]+)([?\S*]*)$/
+const STRICT_SRI_REGEX = /^([a-z0-9]+)-([A-Za-z0-9+/=]{44,88})(\?[\x21-\x7E]*)?$/
+const VCHAR_REGEX = /^[\x21-\x7E]+$/
+
+const getOptString = options => options?.length ? `?${options.join('?')}` : ''
+
+class IntegrityStream extends Minipass {
+ #emittedIntegrity
+ #emittedSize
+ #emittedVerified
+
+ constructor (opts) {
+ super()
+ this.size = 0
+ this.opts = opts
+
+ // may be overridden later, but set now for class consistency
+ this.#getOptions()
+
+ // options used for calculating stream. can't be changed.
+ if (opts?.algorithms) {
+ this.algorithms = [...opts.algorithms]
+ } else {
+ this.algorithms = [...DEFAULT_ALGORITHMS]
+ }
+ if (this.algorithm !== null && !this.algorithms.includes(this.algorithm)) {
+ this.algorithms.push(this.algorithm)
+ }
+
+ this.hashes = this.algorithms.map(crypto.createHash)
+ }
+
+ #getOptions () {
+ // For verification
+ this.sri = this.opts?.integrity ? parse(this.opts?.integrity, this.opts) : null
+ this.expectedSize = this.opts?.size
+
+ if (!this.sri) {
+ this.algorithm = null
+ } else if (this.sri.isHash) {
+ this.goodSri = true
+ this.algorithm = this.sri.algorithm
+ } else {
+ this.goodSri = !this.sri.isEmpty()
+ this.algorithm = this.sri.pickAlgorithm(this.opts)
+ }
+
+ this.digests = this.goodSri ? this.sri[this.algorithm] : null
+ this.optString = getOptString(this.opts?.options)
+ }
+
+ on (ev, handler) {
+ if (ev === 'size' && this.#emittedSize) {
+ return handler(this.#emittedSize)
+ }
+
+ if (ev === 'integrity' && this.#emittedIntegrity) {
+ return handler(this.#emittedIntegrity)
+ }
+
+ if (ev === 'verified' && this.#emittedVerified) {
+ return handler(this.#emittedVerified)
+ }
+
+ return super.on(ev, handler)
+ }
+
+ emit (ev, data) {
+ if (ev === 'end') {
+ this.#onEnd()
+ }
+ return super.emit(ev, data)
+ }
+
+ write (data) {
+ this.size += data.length
+ this.hashes.forEach(h => h.update(data))
+ return super.write(data)
+ }
+
+ #onEnd () {
+ if (!this.goodSri) {
+ this.#getOptions()
+ }
+ const newSri = parse(this.hashes.map((h, i) => {
+ return `${this.algorithms[i]}-${h.digest('base64')}${this.optString}`
+ }).join(' '), this.opts)
+ // Integrity verification mode
+ const match = this.goodSri && newSri.match(this.sri, this.opts)
+ if (typeof this.expectedSize === 'number' && this.size !== this.expectedSize) {
+ /* eslint-disable-next-line max-len */
+ const err = new Error(`stream size mismatch when checking ${this.sri}.\n Wanted: ${this.expectedSize}\n Found: ${this.size}`)
+ err.code = 'EBADSIZE'
+ err.found = this.size
+ err.expected = this.expectedSize
+ err.sri = this.sri
+ this.emit('error', err)
+ } else if (this.sri && !match) {
+ /* eslint-disable-next-line max-len */
+ const err = new Error(`${this.sri} integrity checksum failed when using ${this.algorithm}: wanted ${this.digests} but got ${newSri}. (${this.size} bytes)`)
+ err.code = 'EINTEGRITY'
+ err.found = newSri
+ err.expected = this.digests
+ err.algorithm = this.algorithm
+ err.sri = this.sri
+ this.emit('error', err)
+ } else {
+ this.#emittedSize = this.size
+ this.emit('size', this.size)
+ this.#emittedIntegrity = newSri
+ this.emit('integrity', newSri)
+ if (match) {
+ this.#emittedVerified = match
+ this.emit('verified', match)
+ }
+ }
+ }
+}
+
+class Hash {
+ get isHash () {
+ return true
+ }
+
+ constructor (hash, opts) {
+ const strict = opts?.strict
+ this.source = hash.trim()
+
+ // set default values so that we make V8 happy to
+ // always see a familiar object template.
+ this.digest = ''
+ this.algorithm = ''
+ this.options = []
+
+ // 3.1. Integrity metadata (called "Hash" by ssri)
+ // https://w3c.github.io/webappsec-subresource-integrity/#integrity-metadata-description
+ const match = this.source.match(
+ strict
+ ? STRICT_SRI_REGEX
+ : SRI_REGEX
+ )
+ if (!match) {
+ return
+ }
+ if (strict && !SPEC_ALGORITHMS.includes(match[1])) {
+ return
+ }
+ this.algorithm = match[1]
+ this.digest = match[2]
+
+ const rawOpts = match[3]
+ if (rawOpts) {
+ this.options = rawOpts.slice(1).split('?')
+ }
+ }
+
+ hexDigest () {
+ return this.digest && Buffer.from(this.digest, 'base64').toString('hex')
+ }
+
+ toJSON () {
+ return this.toString()
+ }
+
+ match (integrity, opts) {
+ const other = parse(integrity, opts)
+ if (!other) {
+ return false
+ }
+ if (other.isIntegrity) {
+ const algo = other.pickAlgorithm(opts, [this.algorithm])
+
+ if (!algo) {
+ return false
+ }
+
+ const foundHash = other[algo].find(hash => hash.digest === this.digest)
+
+ if (foundHash) {
+ return foundHash
+ }
+
+ return false
+ }
+ return other.digest === this.digest ? other : false
+ }
+
+ toString (opts) {
+ if (opts?.strict) {
+ // Strict mode enforces the standard as close to the foot of the
+ // letter as it can.
+ if (!(
+ // The spec has very restricted productions for algorithms.
+ // https://www.w3.org/TR/CSP2/#source-list-syntax
+ SPEC_ALGORITHMS.includes(this.algorithm) &&
+ // Usually, if someone insists on using a "different" base64, we
+ // leave it as-is, since there's multiple standards, and the
+ // specified is not a URL-safe variant.
+ // https://www.w3.org/TR/CSP2/#base64_value
+ this.digest.match(BASE64_REGEX) &&
+ // Option syntax is strictly visual chars.
+ // https://w3c.github.io/webappsec-subresource-integrity/#grammardef-option-expression
+ // https://tools.ietf.org/html/rfc5234#appendix-B.1
+ this.options.every(opt => opt.match(VCHAR_REGEX))
+ )) {
+ return ''
+ }
+ }
+ return `${this.algorithm}-${this.digest}${getOptString(this.options)}`
+ }
+}
+
+function integrityHashToString (toString, sep, opts, hashes) {
+ const toStringIsNotEmpty = toString !== ''
+
+ let shouldAddFirstSep = false
+ let complement = ''
+
+ const lastIndex = hashes.length - 1
+
+ for (let i = 0; i < lastIndex; i++) {
+ const hashString = Hash.prototype.toString.call(hashes[i], opts)
+
+ if (hashString) {
+ shouldAddFirstSep = true
+
+ complement += hashString
+ complement += sep
+ }
+ }
+
+ const finalHashString = Hash.prototype.toString.call(hashes[lastIndex], opts)
+
+ if (finalHashString) {
+ shouldAddFirstSep = true
+ complement += finalHashString
+ }
+
+ if (toStringIsNotEmpty && shouldAddFirstSep) {
+ return toString + sep + complement
+ }
+
+ return toString + complement
+}
+
+class Integrity {
+ get isIntegrity () {
+ return true
+ }
+
+ toJSON () {
+ return this.toString()
+ }
+
+ isEmpty () {
+ return Object.keys(this).length === 0
+ }
+
+ toString (opts) {
+ let sep = opts?.sep || ' '
+ let toString = ''
+
+ if (opts?.strict) {
+ // Entries must be separated by whitespace, according to spec.
+ sep = sep.replace(/\S+/g, ' ')
+
+ for (const hash of SPEC_ALGORITHMS) {
+ if (this[hash]) {
+ toString = integrityHashToString(toString, sep, opts, this[hash])
+ }
+ }
+ } else {
+ for (const hash of Object.keys(this)) {
+ toString = integrityHashToString(toString, sep, opts, this[hash])
+ }
+ }
+
+ return toString
+ }
+
+ concat (integrity, opts) {
+ const other = typeof integrity === 'string'
+ ? integrity
+ : stringify(integrity, opts)
+ return parse(`${this.toString(opts)} ${other}`, opts)
+ }
+
+ hexDigest () {
+ return parse(this, { single: true }).hexDigest()
+ }
+
+ // add additional hashes to an integrity value, but prevent
+ // *changing* an existing integrity hash.
+ merge (integrity, opts) {
+ const other = parse(integrity, opts)
+ for (const algo in other) {
+ if (this[algo]) {
+ if (!this[algo].find(hash =>
+ other[algo].find(otherhash =>
+ hash.digest === otherhash.digest))) {
+ throw new Error('hashes do not match, cannot update integrity')
+ }
+ } else {
+ this[algo] = other[algo]
+ }
+ }
+ }
+
+ match (integrity, opts) {
+ const other = parse(integrity, opts)
+ if (!other) {
+ return false
+ }
+ const algo = other.pickAlgorithm(opts, Object.keys(this))
+ return (
+ !!algo &&
+ this[algo] &&
+ other[algo] &&
+ this[algo].find(hash =>
+ other[algo].find(otherhash =>
+ hash.digest === otherhash.digest
+ )
+ )
+ ) || false
+ }
+
+ // Pick the highest priority algorithm present, optionally also limited to a
+ // set of hashes found in another integrity. When limiting it may return
+ // nothing.
+ pickAlgorithm (opts, hashes) {
+ const pickAlgorithm = opts?.pickAlgorithm || getPrioritizedHash
+ const keys = Object.keys(this).filter(k => {
+ if (hashes?.length) {
+ return hashes.includes(k)
+ }
+ return true
+ })
+ if (keys.length) {
+ return keys.reduce((acc, algo) => pickAlgorithm(acc, algo) || acc)
+ }
+ // no intersection between this and hashes,
+ return null
+ }
+}
+
+module.exports.parse = parse
+function parse (sri, opts) {
+ if (!sri) {
+ return null
+ }
+ if (typeof sri === 'string') {
+ return _parse(sri, opts)
+ } else if (sri.algorithm && sri.digest) {
+ const fullSri = new Integrity()
+ fullSri[sri.algorithm] = [sri]
+ return _parse(stringify(fullSri, opts), opts)
+ } else {
+ return _parse(stringify(sri, opts), opts)
+ }
+}
+
+function _parse (integrity, opts) {
+ // 3.4.3. Parse metadata
+ // https://w3c.github.io/webappsec-subresource-integrity/#parse-metadata
+ if (opts?.single) {
+ return new Hash(integrity, opts)
+ }
+ const hashes = integrity.trim().split(/\s+/).reduce((acc, string) => {
+ const hash = new Hash(string, opts)
+ if (hash.algorithm && hash.digest) {
+ const algo = hash.algorithm
+ if (!acc[algo]) {
+ acc[algo] = []
+ }
+ acc[algo].push(hash)
+ }
+ return acc
+ }, new Integrity())
+ return hashes.isEmpty() ? null : hashes
+}
+
+module.exports.stringify = stringify
+function stringify (obj, opts) {
+ if (obj.algorithm && obj.digest) {
+ return Hash.prototype.toString.call(obj, opts)
+ } else if (typeof obj === 'string') {
+ return stringify(parse(obj, opts), opts)
+ } else {
+ return Integrity.prototype.toString.call(obj, opts)
+ }
+}
+
+module.exports.fromHex = fromHex
+function fromHex (hexDigest, algorithm, opts) {
+ const optString = getOptString(opts?.options)
+ return parse(
+ `${algorithm}-${
+ Buffer.from(hexDigest, 'hex').toString('base64')
+ }${optString}`, opts
+ )
+}
+
+module.exports.fromData = fromData
+function fromData (data, opts) {
+ const algorithms = opts?.algorithms || [...DEFAULT_ALGORITHMS]
+ const optString = getOptString(opts?.options)
+ return algorithms.reduce((acc, algo) => {
+ const digest = crypto.createHash(algo).update(data).digest('base64')
+ const hash = new Hash(
+ `${algo}-${digest}${optString}`,
+ opts
+ )
+ /* istanbul ignore else - it would be VERY strange if the string we
+ * just calculated with an algo did not have an algo or digest.
+ */
+ if (hash.algorithm && hash.digest) {
+ const hashAlgo = hash.algorithm
+ if (!acc[hashAlgo]) {
+ acc[hashAlgo] = []
+ }
+ acc[hashAlgo].push(hash)
+ }
+ return acc
+ }, new Integrity())
+}
+
+module.exports.fromStream = fromStream
+function fromStream (stream, opts) {
+ const istream = integrityStream(opts)
+ return new Promise((resolve, reject) => {
+ stream.pipe(istream)
+ stream.on('error', reject)
+ istream.on('error', reject)
+ let sri
+ istream.on('integrity', s => {
+ sri = s
+ })
+ istream.on('end', () => resolve(sri))
+ istream.resume()
+ })
+}
+
+module.exports.checkData = checkData
+function checkData (data, sri, opts) {
+ sri = parse(sri, opts)
+ if (!sri || !Object.keys(sri).length) {
+ if (opts?.error) {
+ throw Object.assign(
+ new Error('No valid integrity hashes to check against'), {
+ code: 'EINTEGRITY',
+ }
+ )
+ } else {
+ return false
+ }
+ }
+ const algorithm = sri.pickAlgorithm(opts)
+ const digest = crypto.createHash(algorithm).update(data).digest('base64')
+ const newSri = parse({ algorithm, digest })
+ const match = newSri.match(sri, opts)
+ opts = opts || {}
+ if (match || !(opts.error)) {
+ return match
+ } else if (typeof opts.size === 'number' && (data.length !== opts.size)) {
+ /* eslint-disable-next-line max-len */
+ const err = new Error(`data size mismatch when checking ${sri}.\n Wanted: ${opts.size}\n Found: ${data.length}`)
+ err.code = 'EBADSIZE'
+ err.found = data.length
+ err.expected = opts.size
+ err.sri = sri
+ throw err
+ } else {
+ /* eslint-disable-next-line max-len */
+ const err = new Error(`Integrity checksum failed when using ${algorithm}: Wanted ${sri}, but got ${newSri}. (${data.length} bytes)`)
+ err.code = 'EINTEGRITY'
+ err.found = newSri
+ err.expected = sri
+ err.algorithm = algorithm
+ err.sri = sri
+ throw err
+ }
+}
+
+module.exports.checkStream = checkStream
+function checkStream (stream, sri, opts) {
+ opts = opts || Object.create(null)
+ opts.integrity = sri
+ sri = parse(sri, opts)
+ if (!sri || !Object.keys(sri).length) {
+ return Promise.reject(Object.assign(
+ new Error('No valid integrity hashes to check against'), {
+ code: 'EINTEGRITY',
+ }
+ ))
+ }
+ const checker = integrityStream(opts)
+ return new Promise((resolve, reject) => {
+ stream.pipe(checker)
+ stream.on('error', reject)
+ checker.on('error', reject)
+ let verified
+ checker.on('verified', s => {
+ verified = s
+ })
+ checker.on('end', () => resolve(verified))
+ checker.resume()
+ })
+}
+
+module.exports.integrityStream = integrityStream
+function integrityStream (opts = Object.create(null)) {
+ return new IntegrityStream(opts)
+}
+
+module.exports.create = createIntegrity
+function createIntegrity (opts) {
+ const algorithms = opts?.algorithms || [...DEFAULT_ALGORITHMS]
+ const optString = getOptString(opts?.options)
+
+ const hashes = algorithms.map(crypto.createHash)
+
+ return {
+ update: function (chunk, enc) {
+ hashes.forEach(h => h.update(chunk, enc))
+ return this
+ },
+ digest: function () {
+ const integrity = algorithms.reduce((acc, algo) => {
+ const digest = hashes.shift().digest('base64')
+ const hash = new Hash(
+ `${algo}-${digest}${optString}`,
+ opts
+ )
+ /* istanbul ignore else - it would be VERY strange if the hash we
+ * just calculated with an algo did not have an algo or digest.
+ */
+ if (hash.algorithm && hash.digest) {
+ const hashAlgo = hash.algorithm
+ if (!acc[hashAlgo]) {
+ acc[hashAlgo] = []
+ }
+ acc[hashAlgo].push(hash)
+ }
+ return acc
+ }, new Integrity())
+
+ return integrity
+ },
+ }
+}
+
+const NODE_HASHES = crypto.getHashes()
+
+// This is a Best Effort™ at a reasonable priority for hash algos
+const DEFAULT_PRIORITY = [
+ 'md5', 'whirlpool', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512',
+ // TODO - it's unclear _which_ of these Node will actually use as its name
+ // for the algorithm, so we guesswork it based on the OpenSSL names.
+ 'sha3',
+ 'sha3-256', 'sha3-384', 'sha3-512',
+ 'sha3_256', 'sha3_384', 'sha3_512',
+].filter(algo => NODE_HASHES.includes(algo))
+
+function getPrioritizedHash (algo1, algo2) {
+ /* eslint-disable-next-line max-len */
+ return DEFAULT_PRIORITY.indexOf(algo1.toLowerCase()) >= DEFAULT_PRIORITY.indexOf(algo2.toLowerCase())
+ ? algo1
+ : algo2
+}
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/ssri/package.json b/deps/npm/node_modules/@sigstore/sign/node_modules/ssri/package.json
new file mode 100644
index 00000000000..28395414e46
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/ssri/package.json
@@ -0,0 +1,65 @@
+{
+ "name": "ssri",
+ "version": "10.0.6",
+ "description": "Standard Subresource Integrity library -- parses, serializes, generates, and verifies integrity metadata according to the SRI spec.",
+ "main": "lib/index.js",
+ "files": [
+ "bin/",
+ "lib/"
+ ],
+ "scripts": {
+ "prerelease": "npm t",
+ "postrelease": "npm publish",
+ "posttest": "npm run lint",
+ "test": "tap",
+ "coverage": "tap",
+ "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "postlint": "template-oss-check",
+ "template-oss-apply": "template-oss-apply --force",
+ "lintfix": "npm run lint -- --fix",
+ "snap": "tap"
+ },
+ "tap": {
+ "check-coverage": true,
+ "nyc-arg": [
+ "--exclude",
+ "tap-snapshots/**"
+ ]
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/npm/ssri.git"
+ },
+ "keywords": [
+ "w3c",
+ "web",
+ "security",
+ "integrity",
+ "checksum",
+ "hashing",
+ "subresource integrity",
+ "sri",
+ "sri hash",
+ "sri string",
+ "sri generator",
+ "html"
+ ],
+ "author": "GitHub Inc.",
+ "license": "ISC",
+ "dependencies": {
+ "minipass": "^7.0.3"
+ },
+ "devDependencies": {
+ "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/template-oss": "4.22.0",
+ "tap": "^16.0.1"
+ },
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ },
+ "templateOSS": {
+ "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
+ "version": "4.22.0",
+ "publish": "true"
+ }
+}
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/unique-filename/LICENSE b/deps/npm/node_modules/@sigstore/sign/node_modules/unique-filename/LICENSE
new file mode 100644
index 00000000000..69619c125ea
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/unique-filename/LICENSE
@@ -0,0 +1,5 @@
+Copyright npm, Inc
+
+Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/unique-filename/lib/index.js b/deps/npm/node_modules/@sigstore/sign/node_modules/unique-filename/lib/index.js
new file mode 100644
index 00000000000..d067d2e7098
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/unique-filename/lib/index.js
@@ -0,0 +1,7 @@
+var path = require('path')
+
+var uniqueSlug = require('unique-slug')
+
+module.exports = function (filepath, prefix, uniq) {
+ return path.join(filepath, (prefix ? prefix + '-' : '') + uniqueSlug(uniq))
+}
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/unique-filename/package.json b/deps/npm/node_modules/@sigstore/sign/node_modules/unique-filename/package.json
new file mode 100644
index 00000000000..b2fbf066648
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/unique-filename/package.json
@@ -0,0 +1,51 @@
+{
+ "name": "unique-filename",
+ "version": "3.0.0",
+ "description": "Generate a unique filename for use in temporary directories or caches.",
+ "main": "lib/index.js",
+ "scripts": {
+ "test": "tap",
+ "lint": "eslint \"**/*.js\"",
+ "postlint": "template-oss-check",
+ "template-oss-apply": "template-oss-apply --force",
+ "lintfix": "npm run lint -- --fix",
+ "snap": "tap",
+ "posttest": "npm run lint"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/npm/unique-filename.git"
+ },
+ "keywords": [],
+ "author": "GitHub Inc.",
+ "license": "ISC",
+ "bugs": {
+ "url": "https://github.com/iarna/unique-filename/issues"
+ },
+ "homepage": "https://github.com/iarna/unique-filename",
+ "devDependencies": {
+ "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/template-oss": "4.5.1",
+ "tap": "^16.3.0"
+ },
+ "dependencies": {
+ "unique-slug": "^4.0.0"
+ },
+ "files": [
+ "bin/",
+ "lib/"
+ ],
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ },
+ "templateOSS": {
+ "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
+ "version": "4.5.1"
+ },
+ "tap": {
+ "nyc-arg": [
+ "--exclude",
+ "tap-snapshots/**"
+ ]
+ }
+}
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/unique-slug/LICENSE b/deps/npm/node_modules/@sigstore/sign/node_modules/unique-slug/LICENSE
new file mode 100644
index 00000000000..7953647e776
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/unique-slug/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright npm, Inc
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/unique-slug/lib/index.js b/deps/npm/node_modules/@sigstore/sign/node_modules/unique-slug/lib/index.js
new file mode 100644
index 00000000000..1bac84d95d7
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/unique-slug/lib/index.js
@@ -0,0 +1,11 @@
+'use strict'
+var MurmurHash3 = require('imurmurhash')
+
+module.exports = function (uniq) {
+ if (uniq) {
+ var hash = new MurmurHash3(uniq)
+ return ('00000000' + hash.result().toString(16)).slice(-8)
+ } else {
+ return (Math.random().toString(16) + '0000000').slice(2, 10)
+ }
+}
diff --git a/deps/npm/node_modules/@sigstore/sign/node_modules/unique-slug/package.json b/deps/npm/node_modules/@sigstore/sign/node_modules/unique-slug/package.json
new file mode 100644
index 00000000000..33732cdbb42
--- /dev/null
+++ b/deps/npm/node_modules/@sigstore/sign/node_modules/unique-slug/package.json
@@ -0,0 +1,47 @@
+{
+ "name": "unique-slug",
+ "version": "4.0.0",
+ "description": "Generate a unique character string suitible for use in files and URLs.",
+ "main": "lib/index.js",
+ "scripts": {
+ "test": "tap",
+ "lint": "eslint \"**/*.js\"",
+ "postlint": "template-oss-check",
+ "template-oss-apply": "template-oss-apply --force",
+ "lintfix": "npm run lint -- --fix",
+ "snap": "tap",
+ "posttest": "npm run lint"
+ },
+ "keywords": [],
+ "author": "GitHub Inc.",
+ "license": "ISC",
+ "devDependencies": {
+ "@npmcli/eslint-config": "^3.1.0",
+ "@npmcli/template-oss": "4.5.1",
+ "tap": "^16.3.0"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/npm/unique-slug.git"
+ },
+ "dependencies": {
+ "imurmurhash": "^0.1.4"
+ },
+ "files": [
+ "bin/",
+ "lib/"
+ ],
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ },
+ "templateOSS": {
+ "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
+ "version": "4.5.1"
+ },
+ "tap": {
+ "nyc-arg": [
+ "--exclude",
+ "tap-snapshots/**"
+ ]
+ }
+}
diff --git a/deps/npm/node_modules/abbrev/package.json b/deps/npm/node_modules/abbrev/package.json
index e2640044563..9dfcc0095d7 100644
--- a/deps/npm/node_modules/abbrev/package.json
+++ b/deps/npm/node_modules/abbrev/package.json
@@ -1,26 +1,27 @@
{
"name": "abbrev",
- "version": "2.0.0",
+ "version": "3.0.0",
"description": "Like ruby's abbrev module, but in js",
"author": "GitHub Inc.",
"main": "lib/index.js",
"scripts": {
"test": "tap",
- "lint": "eslint \"**/*.js\"",
+ "lint": "npm run eslint",
"postlint": "template-oss-check",
"template-oss-apply": "template-oss-apply --force",
- "lintfix": "npm run lint -- --fix",
+ "lintfix": "npm run eslint -- --fix",
"snap": "tap",
- "posttest": "npm run lint"
+ "posttest": "npm run lint",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"repository": {
"type": "git",
- "url": "https://github.com/npm/abbrev-js.git"
+ "url": "git+https://github.com/npm/abbrev-js.git"
},
"license": "ISC",
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.8.0",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"tap": "^16.3.0"
},
"tap": {
@@ -34,10 +35,11 @@
"lib/"
],
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.8.0"
+ "version": "4.23.3",
+ "publish": true
}
}
diff --git a/deps/npm/node_modules/bin-links/lib/link-gently.js b/deps/npm/node_modules/bin-links/lib/link-gently.js
index d1e955ec99b..a39d3bced57 100644
--- a/deps/npm/node_modules/bin-links/lib/link-gently.js
+++ b/deps/npm/node_modules/bin-links/lib/link-gently.js
@@ -6,10 +6,16 @@
const { resolve, dirname } = require('path')
const { lstat, mkdir, readlink, rm, symlink } = require('fs/promises')
-const throwNonEnoent = er => {
- if (er.code !== 'ENOENT') {
- throw er
+const { log } = require('proc-log')
+const throwSignificant = er => {
+ if (er.code === 'ENOENT') {
+ return
}
+ if (er.code === 'EACCES') {
+ log.warn('error adding file', er.message)
+ return
+ }
+ throw er
}
const rmOpts = {
@@ -37,8 +43,8 @@ const linkGently = async ({ path, to, from, absFrom, force }) => {
// or at least a warning, but npm has always behaved this
// way in the past, so it'd be a breaking change
return Promise.all([
- lstat(absFrom).catch(throwNonEnoent),
- lstat(to).catch(throwNonEnoent),
+ lstat(absFrom).catch(throwSignificant),
+ lstat(to).catch(throwSignificant),
]).then(([stFrom, stTo]) => {
// not present in package, skip it
if (!stFrom) {
diff --git a/deps/npm/node_modules/bin-links/package.json b/deps/npm/node_modules/bin-links/package.json
index 1872756bb4b..22858d660ae 100644
--- a/deps/npm/node_modules/bin-links/package.json
+++ b/deps/npm/node_modules/bin-links/package.json
@@ -1,16 +1,17 @@
{
"name": "bin-links",
- "version": "4.0.4",
+ "version": "5.0.0",
"description": "JavaScript package binary linker",
"main": "./lib/index.js",
"scripts": {
"snap": "tap",
"test": "tap",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
"postlint": "template-oss-check",
- "lintfix": "npm run lint -- --fix",
+ "lintfix": "npm run eslint -- --fix",
"posttest": "npm run lint",
- "template-oss-apply": "template-oss-apply --force"
+ "template-oss-apply": "template-oss-apply --force",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"repository": {
"type": "git",
@@ -23,14 +24,15 @@
],
"license": "ISC",
"dependencies": {
- "cmd-shim": "^6.0.0",
- "npm-normalize-package-bin": "^3.0.0",
- "read-cmd-shim": "^4.0.0",
- "write-file-atomic": "^5.0.0"
+ "cmd-shim": "^7.0.0",
+ "npm-normalize-package-bin": "^4.0.0",
+ "proc-log": "^5.0.0",
+ "read-cmd-shim": "^5.0.0",
+ "write-file-atomic": "^6.0.0"
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.22.0",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"require-inject": "^1.4.4",
"tap": "^16.0.1"
},
@@ -47,13 +49,13 @@
"lib/"
],
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"author": "GitHub Inc.",
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
"windowsCI": false,
- "version": "4.22.0",
+ "version": "4.23.3",
"publish": true
}
}
diff --git a/deps/npm/node_modules/cacache/lib/entry-index.js b/deps/npm/node_modules/cacache/lib/entry-index.js
index 89c28f2f257..0e09b10818d 100644
--- a/deps/npm/node_modules/cacache/lib/entry-index.js
+++ b/deps/npm/node_modules/cacache/lib/entry-index.js
@@ -19,7 +19,6 @@ const hashToSegments = require('./util/hash-to-segments')
const indexV = require('../package.json')['cache-version'].index
const { moveFile } = require('@npmcli/fs')
-const pMap = require('p-map')
const lsStreamConcurrency = 5
module.exports.NotFoundError = class NotFoundError extends Error {
@@ -184,6 +183,7 @@ function lsStream (cache) {
// Set all this up to run on the stream and then just return the stream
Promise.resolve().then(async () => {
+ const { default: pMap } = await import('p-map')
const buckets = await readdirOrEmpty(indexDir)
await pMap(buckets, async (bucket) => {
const bucketPath = path.join(indexDir, bucket)
diff --git a/deps/npm/node_modules/cacache/lib/verify.js b/deps/npm/node_modules/cacache/lib/verify.js
index d7423da1295..dcff3aa73f3 100644
--- a/deps/npm/node_modules/cacache/lib/verify.js
+++ b/deps/npm/node_modules/cacache/lib/verify.js
@@ -8,7 +8,6 @@ const {
truncate,
writeFile,
} = require('fs/promises')
-const pMap = require('p-map')
const contentPath = require('./content/path')
const fsm = require('fs-minipass')
const glob = require('./util/glob.js')
@@ -93,6 +92,7 @@ async function fixPerms (cache, opts) {
//
async function garbageCollect (cache, opts) {
opts.log.silly('verify', 'garbage collecting content')
+ const { default: pMap } = await import('p-map')
const indexStream = index.lsStream(cache)
const liveContent = new Set()
indexStream.on('data', (entry) => {
@@ -176,6 +176,7 @@ async function verifyContent (filepath, sri) {
async function rebuildIndex (cache, opts) {
opts.log.silly('verify', 'rebuilding index')
+ const { default: pMap } = await import('p-map')
const entries = await index.ls(cache)
const stats = {
missingContent: 0,
diff --git a/deps/npm/node_modules/cacache/node_modules/chownr/LICENSE.md b/deps/npm/node_modules/cacache/node_modules/chownr/LICENSE.md
new file mode 100644
index 00000000000..881248b6d7f
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/chownr/LICENSE.md
@@ -0,0 +1,63 @@
+All packages under `src/` are licensed according to the terms in
+their respective `LICENSE` or `LICENSE.md` files.
+
+The remainder of this project is licensed under the Blue Oak
+Model License, as follows:
+
+-----
+
+# Blue Oak Model License
+
+Version 1.0.0
+
+## Purpose
+
+This license gives everyone as much permission to work with
+this software as possible, while protecting contributors
+from liability.
+
+## Acceptance
+
+In order to receive this license, you must agree to its
+rules. The rules of this license are both obligations
+under that agreement and conditions to your license.
+You must not do anything with this software that triggers
+a rule that you cannot or will not follow.
+
+## Copyright
+
+Each contributor licenses you to do everything with this
+software that would otherwise infringe that contributor's
+copyright in it.
+
+## Notices
+
+You must ensure that everyone who gets a copy of
+any part of this software from you, with or without
+changes, also gets the text of this license or a link to
+.
+
+## Excuse
+
+If anyone notifies you in writing that you have not
+complied with [Notices](#notices), you can keep your
+license by taking all practical steps to comply within 30
+days after the notice. If you do not do so, your license
+ends immediately.
+
+## Patent
+
+Each contributor licenses you to do everything with this
+software that would otherwise infringe any patent claims
+they can license or become able to license.
+
+## Reliability
+
+No contributor can revoke this license.
+
+## No Liability
+
+***As far as the law allows, this software comes as is,
+without any warranty or condition, and no contributor
+will be liable to anyone for any damages related to this
+software or this license, under any kind of legal claim.***
diff --git a/deps/npm/node_modules/cacache/node_modules/chownr/dist/commonjs/index.js b/deps/npm/node_modules/cacache/node_modules/chownr/dist/commonjs/index.js
new file mode 100644
index 00000000000..6a7b68d5eac
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/chownr/dist/commonjs/index.js
@@ -0,0 +1,93 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.chownrSync = exports.chownr = void 0;
+const node_fs_1 = __importDefault(require("node:fs"));
+const node_path_1 = __importDefault(require("node:path"));
+const lchownSync = (path, uid, gid) => {
+ try {
+ return node_fs_1.default.lchownSync(path, uid, gid);
+ }
+ catch (er) {
+ if (er?.code !== 'ENOENT')
+ throw er;
+ }
+};
+const chown = (cpath, uid, gid, cb) => {
+ node_fs_1.default.lchown(cpath, uid, gid, er => {
+ // Skip ENOENT error
+ cb(er && er?.code !== 'ENOENT' ? er : null);
+ });
+};
+const chownrKid = (p, child, uid, gid, cb) => {
+ if (child.isDirectory()) {
+ (0, exports.chownr)(node_path_1.default.resolve(p, child.name), uid, gid, (er) => {
+ if (er)
+ return cb(er);
+ const cpath = node_path_1.default.resolve(p, child.name);
+ chown(cpath, uid, gid, cb);
+ });
+ }
+ else {
+ const cpath = node_path_1.default.resolve(p, child.name);
+ chown(cpath, uid, gid, cb);
+ }
+};
+const chownr = (p, uid, gid, cb) => {
+ node_fs_1.default.readdir(p, { withFileTypes: true }, (er, children) => {
+ // any error other than ENOTDIR or ENOTSUP means it's not readable,
+ // or doesn't exist. give up.
+ if (er) {
+ if (er.code === 'ENOENT')
+ return cb();
+ else if (er.code !== 'ENOTDIR' && er.code !== 'ENOTSUP')
+ return cb(er);
+ }
+ if (er || !children.length)
+ return chown(p, uid, gid, cb);
+ let len = children.length;
+ let errState = null;
+ const then = (er) => {
+ /* c8 ignore start */
+ if (errState)
+ return;
+ /* c8 ignore stop */
+ if (er)
+ return cb((errState = er));
+ if (--len === 0)
+ return chown(p, uid, gid, cb);
+ };
+ for (const child of children) {
+ chownrKid(p, child, uid, gid, then);
+ }
+ });
+};
+exports.chownr = chownr;
+const chownrKidSync = (p, child, uid, gid) => {
+ if (child.isDirectory())
+ (0, exports.chownrSync)(node_path_1.default.resolve(p, child.name), uid, gid);
+ lchownSync(node_path_1.default.resolve(p, child.name), uid, gid);
+};
+const chownrSync = (p, uid, gid) => {
+ let children;
+ try {
+ children = node_fs_1.default.readdirSync(p, { withFileTypes: true });
+ }
+ catch (er) {
+ const e = er;
+ if (e?.code === 'ENOENT')
+ return;
+ else if (e?.code === 'ENOTDIR' || e?.code === 'ENOTSUP')
+ return lchownSync(p, uid, gid);
+ else
+ throw e;
+ }
+ for (const child of children) {
+ chownrKidSync(p, child, uid, gid);
+ }
+ return lchownSync(p, uid, gid);
+};
+exports.chownrSync = chownrSync;
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/chownr/dist/commonjs/package.json b/deps/npm/node_modules/cacache/node_modules/chownr/dist/commonjs/package.json
new file mode 100644
index 00000000000..5bbefffbabe
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/chownr/dist/commonjs/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "commonjs"
+}
diff --git a/deps/npm/node_modules/cacache/node_modules/chownr/dist/esm/index.js b/deps/npm/node_modules/cacache/node_modules/chownr/dist/esm/index.js
new file mode 100644
index 00000000000..5c2815297a6
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/chownr/dist/esm/index.js
@@ -0,0 +1,85 @@
+import fs from 'node:fs';
+import path from 'node:path';
+const lchownSync = (path, uid, gid) => {
+ try {
+ return fs.lchownSync(path, uid, gid);
+ }
+ catch (er) {
+ if (er?.code !== 'ENOENT')
+ throw er;
+ }
+};
+const chown = (cpath, uid, gid, cb) => {
+ fs.lchown(cpath, uid, gid, er => {
+ // Skip ENOENT error
+ cb(er && er?.code !== 'ENOENT' ? er : null);
+ });
+};
+const chownrKid = (p, child, uid, gid, cb) => {
+ if (child.isDirectory()) {
+ chownr(path.resolve(p, child.name), uid, gid, (er) => {
+ if (er)
+ return cb(er);
+ const cpath = path.resolve(p, child.name);
+ chown(cpath, uid, gid, cb);
+ });
+ }
+ else {
+ const cpath = path.resolve(p, child.name);
+ chown(cpath, uid, gid, cb);
+ }
+};
+export const chownr = (p, uid, gid, cb) => {
+ fs.readdir(p, { withFileTypes: true }, (er, children) => {
+ // any error other than ENOTDIR or ENOTSUP means it's not readable,
+ // or doesn't exist. give up.
+ if (er) {
+ if (er.code === 'ENOENT')
+ return cb();
+ else if (er.code !== 'ENOTDIR' && er.code !== 'ENOTSUP')
+ return cb(er);
+ }
+ if (er || !children.length)
+ return chown(p, uid, gid, cb);
+ let len = children.length;
+ let errState = null;
+ const then = (er) => {
+ /* c8 ignore start */
+ if (errState)
+ return;
+ /* c8 ignore stop */
+ if (er)
+ return cb((errState = er));
+ if (--len === 0)
+ return chown(p, uid, gid, cb);
+ };
+ for (const child of children) {
+ chownrKid(p, child, uid, gid, then);
+ }
+ });
+};
+const chownrKidSync = (p, child, uid, gid) => {
+ if (child.isDirectory())
+ chownrSync(path.resolve(p, child.name), uid, gid);
+ lchownSync(path.resolve(p, child.name), uid, gid);
+};
+export const chownrSync = (p, uid, gid) => {
+ let children;
+ try {
+ children = fs.readdirSync(p, { withFileTypes: true });
+ }
+ catch (er) {
+ const e = er;
+ if (e?.code === 'ENOENT')
+ return;
+ else if (e?.code === 'ENOTDIR' || e?.code === 'ENOTSUP')
+ return lchownSync(p, uid, gid);
+ else
+ throw e;
+ }
+ for (const child of children) {
+ chownrKidSync(p, child, uid, gid);
+ }
+ return lchownSync(p, uid, gid);
+};
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/chownr/dist/esm/package.json b/deps/npm/node_modules/cacache/node_modules/chownr/dist/esm/package.json
new file mode 100644
index 00000000000..3dbc1ca591c
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/chownr/dist/esm/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "module"
+}
diff --git a/deps/npm/node_modules/cacache/node_modules/chownr/package.json b/deps/npm/node_modules/cacache/node_modules/chownr/package.json
new file mode 100644
index 00000000000..09aa6b2e2e5
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/chownr/package.json
@@ -0,0 +1,69 @@
+{
+ "author": "Isaac Z. Schlueter (http://blog.izs.me/)",
+ "name": "chownr",
+ "description": "like `chown -R`",
+ "version": "3.0.0",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/isaacs/chownr.git"
+ },
+ "files": [
+ "dist"
+ ],
+ "devDependencies": {
+ "@types/node": "^20.12.5",
+ "mkdirp": "^3.0.1",
+ "prettier": "^3.2.5",
+ "rimraf": "^5.0.5",
+ "tap": "^18.7.2",
+ "tshy": "^1.13.1",
+ "typedoc": "^0.25.12"
+ },
+ "scripts": {
+ "prepare": "tshy",
+ "pretest": "npm run prepare",
+ "test": "tap",
+ "preversion": "npm test",
+ "postversion": "npm publish",
+ "prepublishOnly": "git push origin --follow-tags",
+ "format": "prettier --write . --loglevel warn",
+ "typedoc": "typedoc --tsconfig .tshy/esm.json ./src/*.ts"
+ },
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">=18"
+ },
+ "tshy": {
+ "exports": {
+ "./package.json": "./package.json",
+ ".": "./src/index.ts"
+ }
+ },
+ "exports": {
+ "./package.json": "./package.json",
+ ".": {
+ "import": {
+ "types": "./dist/esm/index.d.ts",
+ "default": "./dist/esm/index.js"
+ },
+ "require": {
+ "types": "./dist/commonjs/index.d.ts",
+ "default": "./dist/commonjs/index.js"
+ }
+ }
+ },
+ "main": "./dist/commonjs/index.js",
+ "types": "./dist/commonjs/index.d.ts",
+ "type": "module",
+ "prettier": {
+ "semi": false,
+ "printWidth": 75,
+ "tabWidth": 2,
+ "useTabs": false,
+ "singleQuote": true,
+ "jsxSingleQuote": false,
+ "bracketSameLine": true,
+ "arrowParens": "avoid",
+ "endOfLine": "lf"
+ }
+}
diff --git a/deps/npm/node_modules/cacache/node_modules/minizlib/LICENSE b/deps/npm/node_modules/cacache/node_modules/minizlib/LICENSE
new file mode 100644
index 00000000000..49f7efe431c
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/minizlib/LICENSE
@@ -0,0 +1,26 @@
+Minizlib was created by Isaac Z. Schlueter.
+It is a derivative work of the Node.js project.
+
+"""
+Copyright (c) 2017-2023 Isaac Z. Schlueter and Contributors
+Copyright (c) 2017-2023 Node.js contributors. All rights reserved.
+Copyright (c) 2017-2023 Joyent, Inc. and other Node contributors. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+"""
diff --git a/deps/npm/node_modules/cacache/node_modules/minizlib/dist/commonjs/constants.js b/deps/npm/node_modules/cacache/node_modules/minizlib/dist/commonjs/constants.js
new file mode 100644
index 00000000000..dfc2c1957bf
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/minizlib/dist/commonjs/constants.js
@@ -0,0 +1,123 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.constants = void 0;
+// Update with any zlib constants that are added or changed in the future.
+// Node v6 didn't export this, so we just hard code the version and rely
+// on all the other hard-coded values from zlib v4736. When node v6
+// support drops, we can just export the realZlibConstants object.
+const zlib_1 = __importDefault(require("zlib"));
+/* c8 ignore start */
+const realZlibConstants = zlib_1.default.constants || { ZLIB_VERNUM: 4736 };
+/* c8 ignore stop */
+exports.constants = Object.freeze(Object.assign(Object.create(null), {
+ Z_NO_FLUSH: 0,
+ Z_PARTIAL_FLUSH: 1,
+ Z_SYNC_FLUSH: 2,
+ Z_FULL_FLUSH: 3,
+ Z_FINISH: 4,
+ Z_BLOCK: 5,
+ Z_OK: 0,
+ Z_STREAM_END: 1,
+ Z_NEED_DICT: 2,
+ Z_ERRNO: -1,
+ Z_STREAM_ERROR: -2,
+ Z_DATA_ERROR: -3,
+ Z_MEM_ERROR: -4,
+ Z_BUF_ERROR: -5,
+ Z_VERSION_ERROR: -6,
+ Z_NO_COMPRESSION: 0,
+ Z_BEST_SPEED: 1,
+ Z_BEST_COMPRESSION: 9,
+ Z_DEFAULT_COMPRESSION: -1,
+ Z_FILTERED: 1,
+ Z_HUFFMAN_ONLY: 2,
+ Z_RLE: 3,
+ Z_FIXED: 4,
+ Z_DEFAULT_STRATEGY: 0,
+ DEFLATE: 1,
+ INFLATE: 2,
+ GZIP: 3,
+ GUNZIP: 4,
+ DEFLATERAW: 5,
+ INFLATERAW: 6,
+ UNZIP: 7,
+ BROTLI_DECODE: 8,
+ BROTLI_ENCODE: 9,
+ Z_MIN_WINDOWBITS: 8,
+ Z_MAX_WINDOWBITS: 15,
+ Z_DEFAULT_WINDOWBITS: 15,
+ Z_MIN_CHUNK: 64,
+ Z_MAX_CHUNK: Infinity,
+ Z_DEFAULT_CHUNK: 16384,
+ Z_MIN_MEMLEVEL: 1,
+ Z_MAX_MEMLEVEL: 9,
+ Z_DEFAULT_MEMLEVEL: 8,
+ Z_MIN_LEVEL: -1,
+ Z_MAX_LEVEL: 9,
+ Z_DEFAULT_LEVEL: -1,
+ BROTLI_OPERATION_PROCESS: 0,
+ BROTLI_OPERATION_FLUSH: 1,
+ BROTLI_OPERATION_FINISH: 2,
+ BROTLI_OPERATION_EMIT_METADATA: 3,
+ BROTLI_MODE_GENERIC: 0,
+ BROTLI_MODE_TEXT: 1,
+ BROTLI_MODE_FONT: 2,
+ BROTLI_DEFAULT_MODE: 0,
+ BROTLI_MIN_QUALITY: 0,
+ BROTLI_MAX_QUALITY: 11,
+ BROTLI_DEFAULT_QUALITY: 11,
+ BROTLI_MIN_WINDOW_BITS: 10,
+ BROTLI_MAX_WINDOW_BITS: 24,
+ BROTLI_LARGE_MAX_WINDOW_BITS: 30,
+ BROTLI_DEFAULT_WINDOW: 22,
+ BROTLI_MIN_INPUT_BLOCK_BITS: 16,
+ BROTLI_MAX_INPUT_BLOCK_BITS: 24,
+ BROTLI_PARAM_MODE: 0,
+ BROTLI_PARAM_QUALITY: 1,
+ BROTLI_PARAM_LGWIN: 2,
+ BROTLI_PARAM_LGBLOCK: 3,
+ BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING: 4,
+ BROTLI_PARAM_SIZE_HINT: 5,
+ BROTLI_PARAM_LARGE_WINDOW: 6,
+ BROTLI_PARAM_NPOSTFIX: 7,
+ BROTLI_PARAM_NDIRECT: 8,
+ BROTLI_DECODER_RESULT_ERROR: 0,
+ BROTLI_DECODER_RESULT_SUCCESS: 1,
+ BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT: 2,
+ BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT: 3,
+ BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION: 0,
+ BROTLI_DECODER_PARAM_LARGE_WINDOW: 1,
+ BROTLI_DECODER_NO_ERROR: 0,
+ BROTLI_DECODER_SUCCESS: 1,
+ BROTLI_DECODER_NEEDS_MORE_INPUT: 2,
+ BROTLI_DECODER_NEEDS_MORE_OUTPUT: 3,
+ BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE: -1,
+ BROTLI_DECODER_ERROR_FORMAT_RESERVED: -2,
+ BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE: -3,
+ BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET: -4,
+ BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME: -5,
+ BROTLI_DECODER_ERROR_FORMAT_CL_SPACE: -6,
+ BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE: -7,
+ BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT: -8,
+ BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1: -9,
+ BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2: -10,
+ BROTLI_DECODER_ERROR_FORMAT_TRANSFORM: -11,
+ BROTLI_DECODER_ERROR_FORMAT_DICTIONARY: -12,
+ BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS: -13,
+ BROTLI_DECODER_ERROR_FORMAT_PADDING_1: -14,
+ BROTLI_DECODER_ERROR_FORMAT_PADDING_2: -15,
+ BROTLI_DECODER_ERROR_FORMAT_DISTANCE: -16,
+ BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET: -19,
+ BROTLI_DECODER_ERROR_INVALID_ARGUMENTS: -20,
+ BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES: -21,
+ BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS: -22,
+ BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP: -25,
+ BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1: -26,
+ BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2: -27,
+ BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES: -30,
+ BROTLI_DECODER_ERROR_UNREACHABLE: -31,
+}, realZlibConstants));
+//# sourceMappingURL=constants.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/minizlib/dist/commonjs/index.js b/deps/npm/node_modules/cacache/node_modules/minizlib/dist/commonjs/index.js
new file mode 100644
index 00000000000..ad65eef0495
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/minizlib/dist/commonjs/index.js
@@ -0,0 +1,352 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.BrotliDecompress = exports.BrotliCompress = exports.Brotli = exports.Unzip = exports.InflateRaw = exports.DeflateRaw = exports.Gunzip = exports.Gzip = exports.Inflate = exports.Deflate = exports.Zlib = exports.ZlibError = exports.constants = void 0;
+const assert_1 = __importDefault(require("assert"));
+const buffer_1 = require("buffer");
+const minipass_1 = require("minipass");
+const zlib_1 = __importDefault(require("zlib"));
+const constants_js_1 = require("./constants.js");
+var constants_js_2 = require("./constants.js");
+Object.defineProperty(exports, "constants", { enumerable: true, get: function () { return constants_js_2.constants; } });
+const OriginalBufferConcat = buffer_1.Buffer.concat;
+const _superWrite = Symbol('_superWrite');
+class ZlibError extends Error {
+ code;
+ errno;
+ constructor(err) {
+ super('zlib: ' + err.message);
+ this.code = err.code;
+ this.errno = err.errno;
+ /* c8 ignore next */
+ if (!this.code)
+ this.code = 'ZLIB_ERROR';
+ this.message = 'zlib: ' + err.message;
+ Error.captureStackTrace(this, this.constructor);
+ }
+ get name() {
+ return 'ZlibError';
+ }
+}
+exports.ZlibError = ZlibError;
+// the Zlib class they all inherit from
+// This thing manages the queue of requests, and returns
+// true or false if there is anything in the queue when
+// you call the .write() method.
+const _flushFlag = Symbol('flushFlag');
+class ZlibBase extends minipass_1.Minipass {
+ #sawError = false;
+ #ended = false;
+ #flushFlag;
+ #finishFlushFlag;
+ #fullFlushFlag;
+ #handle;
+ #onError;
+ get sawError() {
+ return this.#sawError;
+ }
+ get handle() {
+ return this.#handle;
+ }
+ /* c8 ignore start */
+ get flushFlag() {
+ return this.#flushFlag;
+ }
+ /* c8 ignore stop */
+ constructor(opts, mode) {
+ if (!opts || typeof opts !== 'object')
+ throw new TypeError('invalid options for ZlibBase constructor');
+ //@ts-ignore
+ super(opts);
+ /* c8 ignore start */
+ this.#flushFlag = opts.flush ?? 0;
+ this.#finishFlushFlag = opts.finishFlush ?? 0;
+ this.#fullFlushFlag = opts.fullFlushFlag ?? 0;
+ /* c8 ignore stop */
+ // this will throw if any options are invalid for the class selected
+ try {
+ // @types/node doesn't know that it exports the classes, but they're there
+ //@ts-ignore
+ this.#handle = new zlib_1.default[mode](opts);
+ }
+ catch (er) {
+ // make sure that all errors get decorated properly
+ throw new ZlibError(er);
+ }
+ this.#onError = err => {
+ // no sense raising multiple errors, since we abort on the first one.
+ if (this.#sawError)
+ return;
+ this.#sawError = true;
+ // there is no way to cleanly recover.
+ // continuing only obscures problems.
+ this.close();
+ this.emit('error', err);
+ };
+ this.#handle?.on('error', er => this.#onError(new ZlibError(er)));
+ this.once('end', () => this.close);
+ }
+ close() {
+ if (this.#handle) {
+ this.#handle.close();
+ this.#handle = undefined;
+ this.emit('close');
+ }
+ }
+ reset() {
+ if (!this.#sawError) {
+ (0, assert_1.default)(this.#handle, 'zlib binding closed');
+ //@ts-ignore
+ return this.#handle.reset?.();
+ }
+ }
+ flush(flushFlag) {
+ if (this.ended)
+ return;
+ if (typeof flushFlag !== 'number')
+ flushFlag = this.#fullFlushFlag;
+ this.write(Object.assign(buffer_1.Buffer.alloc(0), { [_flushFlag]: flushFlag }));
+ }
+ end(chunk, encoding, cb) {
+ /* c8 ignore start */
+ if (typeof chunk === 'function') {
+ cb = chunk;
+ encoding = undefined;
+ chunk = undefined;
+ }
+ if (typeof encoding === 'function') {
+ cb = encoding;
+ encoding = undefined;
+ }
+ /* c8 ignore stop */
+ if (chunk) {
+ if (encoding)
+ this.write(chunk, encoding);
+ else
+ this.write(chunk);
+ }
+ this.flush(this.#finishFlushFlag);
+ this.#ended = true;
+ return super.end(cb);
+ }
+ get ended() {
+ return this.#ended;
+ }
+ // overridden in the gzip classes to do portable writes
+ [_superWrite](data) {
+ return super.write(data);
+ }
+ write(chunk, encoding, cb) {
+ // process the chunk using the sync process
+ // then super.write() all the outputted chunks
+ if (typeof encoding === 'function')
+ (cb = encoding), (encoding = 'utf8');
+ if (typeof chunk === 'string')
+ chunk = buffer_1.Buffer.from(chunk, encoding);
+ if (this.#sawError)
+ return;
+ (0, assert_1.default)(this.#handle, 'zlib binding closed');
+ // _processChunk tries to .close() the native handle after it's done, so we
+ // intercept that by temporarily making it a no-op.
+ // diving into the node:zlib internals a bit here
+ const nativeHandle = this.#handle
+ ._handle;
+ const originalNativeClose = nativeHandle.close;
+ nativeHandle.close = () => { };
+ const originalClose = this.#handle.close;
+ this.#handle.close = () => { };
+ // It also calls `Buffer.concat()` at the end, which may be convenient
+ // for some, but which we are not interested in as it slows us down.
+ buffer_1.Buffer.concat = args => args;
+ let result = undefined;
+ try {
+ const flushFlag = typeof chunk[_flushFlag] === 'number'
+ ? chunk[_flushFlag]
+ : this.#flushFlag;
+ result = this.#handle._processChunk(chunk, flushFlag);
+ // if we don't throw, reset it back how it was
+ buffer_1.Buffer.concat = OriginalBufferConcat;
+ }
+ catch (err) {
+ // or if we do, put Buffer.concat() back before we emit error
+ // Error events call into user code, which may call Buffer.concat()
+ buffer_1.Buffer.concat = OriginalBufferConcat;
+ this.#onError(new ZlibError(err));
+ }
+ finally {
+ if (this.#handle) {
+ // Core zlib resets `_handle` to null after attempting to close the
+ // native handle. Our no-op handler prevented actual closure, but we
+ // need to restore the `._handle` property.
+ ;
+ this.#handle._handle =
+ nativeHandle;
+ nativeHandle.close = originalNativeClose;
+ this.#handle.close = originalClose;
+ // `_processChunk()` adds an 'error' listener. If we don't remove it
+ // after each call, these handlers start piling up.
+ this.#handle.removeAllListeners('error');
+ // make sure OUR error listener is still attached tho
+ }
+ }
+ if (this.#handle)
+ this.#handle.on('error', er => this.#onError(new ZlibError(er)));
+ let writeReturn;
+ if (result) {
+ if (Array.isArray(result) && result.length > 0) {
+ const r = result[0];
+ // The first buffer is always `handle._outBuffer`, which would be
+ // re-used for later invocations; so, we always have to copy that one.
+ writeReturn = this[_superWrite](buffer_1.Buffer.from(r));
+ for (let i = 1; i < result.length; i++) {
+ writeReturn = this[_superWrite](result[i]);
+ }
+ }
+ else {
+ // either a single Buffer or an empty array
+ writeReturn = this[_superWrite](buffer_1.Buffer.from(result));
+ }
+ }
+ if (cb)
+ cb();
+ return writeReturn;
+ }
+}
+class Zlib extends ZlibBase {
+ #level;
+ #strategy;
+ constructor(opts, mode) {
+ opts = opts || {};
+ opts.flush = opts.flush || constants_js_1.constants.Z_NO_FLUSH;
+ opts.finishFlush = opts.finishFlush || constants_js_1.constants.Z_FINISH;
+ opts.fullFlushFlag = constants_js_1.constants.Z_FULL_FLUSH;
+ super(opts, mode);
+ this.#level = opts.level;
+ this.#strategy = opts.strategy;
+ }
+ params(level, strategy) {
+ if (this.sawError)
+ return;
+ if (!this.handle)
+ throw new Error('cannot switch params when binding is closed');
+ // no way to test this without also not supporting params at all
+ /* c8 ignore start */
+ if (!this.handle.params)
+ throw new Error('not supported in this implementation');
+ /* c8 ignore stop */
+ if (this.#level !== level || this.#strategy !== strategy) {
+ this.flush(constants_js_1.constants.Z_SYNC_FLUSH);
+ (0, assert_1.default)(this.handle, 'zlib binding closed');
+ // .params() calls .flush(), but the latter is always async in the
+ // core zlib. We override .flush() temporarily to intercept that and
+ // flush synchronously.
+ const origFlush = this.handle.flush;
+ this.handle.flush = (flushFlag, cb) => {
+ /* c8 ignore start */
+ if (typeof flushFlag === 'function') {
+ cb = flushFlag;
+ flushFlag = this.flushFlag;
+ }
+ /* c8 ignore stop */
+ this.flush(flushFlag);
+ cb?.();
+ };
+ try {
+ ;
+ this.handle.params(level, strategy);
+ }
+ finally {
+ this.handle.flush = origFlush;
+ }
+ /* c8 ignore start */
+ if (this.handle) {
+ this.#level = level;
+ this.#strategy = strategy;
+ }
+ /* c8 ignore stop */
+ }
+ }
+}
+exports.Zlib = Zlib;
+// minimal 2-byte header
+class Deflate extends Zlib {
+ constructor(opts) {
+ super(opts, 'Deflate');
+ }
+}
+exports.Deflate = Deflate;
+class Inflate extends Zlib {
+ constructor(opts) {
+ super(opts, 'Inflate');
+ }
+}
+exports.Inflate = Inflate;
+class Gzip extends Zlib {
+ #portable;
+ constructor(opts) {
+ super(opts, 'Gzip');
+ this.#portable = opts && !!opts.portable;
+ }
+ [_superWrite](data) {
+ if (!this.#portable)
+ return super[_superWrite](data);
+ // we'll always get the header emitted in one first chunk
+ // overwrite the OS indicator byte with 0xFF
+ this.#portable = false;
+ data[9] = 255;
+ return super[_superWrite](data);
+ }
+}
+exports.Gzip = Gzip;
+class Gunzip extends Zlib {
+ constructor(opts) {
+ super(opts, 'Gunzip');
+ }
+}
+exports.Gunzip = Gunzip;
+// raw - no header
+class DeflateRaw extends Zlib {
+ constructor(opts) {
+ super(opts, 'DeflateRaw');
+ }
+}
+exports.DeflateRaw = DeflateRaw;
+class InflateRaw extends Zlib {
+ constructor(opts) {
+ super(opts, 'InflateRaw');
+ }
+}
+exports.InflateRaw = InflateRaw;
+// auto-detect header.
+class Unzip extends Zlib {
+ constructor(opts) {
+ super(opts, 'Unzip');
+ }
+}
+exports.Unzip = Unzip;
+class Brotli extends ZlibBase {
+ constructor(opts, mode) {
+ opts = opts || {};
+ opts.flush = opts.flush || constants_js_1.constants.BROTLI_OPERATION_PROCESS;
+ opts.finishFlush =
+ opts.finishFlush || constants_js_1.constants.BROTLI_OPERATION_FINISH;
+ opts.fullFlushFlag = constants_js_1.constants.BROTLI_OPERATION_FLUSH;
+ super(opts, mode);
+ }
+}
+exports.Brotli = Brotli;
+class BrotliCompress extends Brotli {
+ constructor(opts) {
+ super(opts, 'BrotliCompress');
+ }
+}
+exports.BrotliCompress = BrotliCompress;
+class BrotliDecompress extends Brotli {
+ constructor(opts) {
+ super(opts, 'BrotliDecompress');
+ }
+}
+exports.BrotliDecompress = BrotliDecompress;
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/minizlib/dist/commonjs/package.json b/deps/npm/node_modules/cacache/node_modules/minizlib/dist/commonjs/package.json
new file mode 100644
index 00000000000..5bbefffbabe
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/minizlib/dist/commonjs/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "commonjs"
+}
diff --git a/deps/npm/node_modules/cacache/node_modules/minizlib/dist/esm/constants.js b/deps/npm/node_modules/cacache/node_modules/minizlib/dist/esm/constants.js
new file mode 100644
index 00000000000..7faf40be506
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/minizlib/dist/esm/constants.js
@@ -0,0 +1,117 @@
+// Update with any zlib constants that are added or changed in the future.
+// Node v6 didn't export this, so we just hard code the version and rely
+// on all the other hard-coded values from zlib v4736. When node v6
+// support drops, we can just export the realZlibConstants object.
+import realZlib from 'zlib';
+/* c8 ignore start */
+const realZlibConstants = realZlib.constants || { ZLIB_VERNUM: 4736 };
+/* c8 ignore stop */
+export const constants = Object.freeze(Object.assign(Object.create(null), {
+ Z_NO_FLUSH: 0,
+ Z_PARTIAL_FLUSH: 1,
+ Z_SYNC_FLUSH: 2,
+ Z_FULL_FLUSH: 3,
+ Z_FINISH: 4,
+ Z_BLOCK: 5,
+ Z_OK: 0,
+ Z_STREAM_END: 1,
+ Z_NEED_DICT: 2,
+ Z_ERRNO: -1,
+ Z_STREAM_ERROR: -2,
+ Z_DATA_ERROR: -3,
+ Z_MEM_ERROR: -4,
+ Z_BUF_ERROR: -5,
+ Z_VERSION_ERROR: -6,
+ Z_NO_COMPRESSION: 0,
+ Z_BEST_SPEED: 1,
+ Z_BEST_COMPRESSION: 9,
+ Z_DEFAULT_COMPRESSION: -1,
+ Z_FILTERED: 1,
+ Z_HUFFMAN_ONLY: 2,
+ Z_RLE: 3,
+ Z_FIXED: 4,
+ Z_DEFAULT_STRATEGY: 0,
+ DEFLATE: 1,
+ INFLATE: 2,
+ GZIP: 3,
+ GUNZIP: 4,
+ DEFLATERAW: 5,
+ INFLATERAW: 6,
+ UNZIP: 7,
+ BROTLI_DECODE: 8,
+ BROTLI_ENCODE: 9,
+ Z_MIN_WINDOWBITS: 8,
+ Z_MAX_WINDOWBITS: 15,
+ Z_DEFAULT_WINDOWBITS: 15,
+ Z_MIN_CHUNK: 64,
+ Z_MAX_CHUNK: Infinity,
+ Z_DEFAULT_CHUNK: 16384,
+ Z_MIN_MEMLEVEL: 1,
+ Z_MAX_MEMLEVEL: 9,
+ Z_DEFAULT_MEMLEVEL: 8,
+ Z_MIN_LEVEL: -1,
+ Z_MAX_LEVEL: 9,
+ Z_DEFAULT_LEVEL: -1,
+ BROTLI_OPERATION_PROCESS: 0,
+ BROTLI_OPERATION_FLUSH: 1,
+ BROTLI_OPERATION_FINISH: 2,
+ BROTLI_OPERATION_EMIT_METADATA: 3,
+ BROTLI_MODE_GENERIC: 0,
+ BROTLI_MODE_TEXT: 1,
+ BROTLI_MODE_FONT: 2,
+ BROTLI_DEFAULT_MODE: 0,
+ BROTLI_MIN_QUALITY: 0,
+ BROTLI_MAX_QUALITY: 11,
+ BROTLI_DEFAULT_QUALITY: 11,
+ BROTLI_MIN_WINDOW_BITS: 10,
+ BROTLI_MAX_WINDOW_BITS: 24,
+ BROTLI_LARGE_MAX_WINDOW_BITS: 30,
+ BROTLI_DEFAULT_WINDOW: 22,
+ BROTLI_MIN_INPUT_BLOCK_BITS: 16,
+ BROTLI_MAX_INPUT_BLOCK_BITS: 24,
+ BROTLI_PARAM_MODE: 0,
+ BROTLI_PARAM_QUALITY: 1,
+ BROTLI_PARAM_LGWIN: 2,
+ BROTLI_PARAM_LGBLOCK: 3,
+ BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING: 4,
+ BROTLI_PARAM_SIZE_HINT: 5,
+ BROTLI_PARAM_LARGE_WINDOW: 6,
+ BROTLI_PARAM_NPOSTFIX: 7,
+ BROTLI_PARAM_NDIRECT: 8,
+ BROTLI_DECODER_RESULT_ERROR: 0,
+ BROTLI_DECODER_RESULT_SUCCESS: 1,
+ BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT: 2,
+ BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT: 3,
+ BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION: 0,
+ BROTLI_DECODER_PARAM_LARGE_WINDOW: 1,
+ BROTLI_DECODER_NO_ERROR: 0,
+ BROTLI_DECODER_SUCCESS: 1,
+ BROTLI_DECODER_NEEDS_MORE_INPUT: 2,
+ BROTLI_DECODER_NEEDS_MORE_OUTPUT: 3,
+ BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE: -1,
+ BROTLI_DECODER_ERROR_FORMAT_RESERVED: -2,
+ BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE: -3,
+ BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET: -4,
+ BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME: -5,
+ BROTLI_DECODER_ERROR_FORMAT_CL_SPACE: -6,
+ BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE: -7,
+ BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT: -8,
+ BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1: -9,
+ BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2: -10,
+ BROTLI_DECODER_ERROR_FORMAT_TRANSFORM: -11,
+ BROTLI_DECODER_ERROR_FORMAT_DICTIONARY: -12,
+ BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS: -13,
+ BROTLI_DECODER_ERROR_FORMAT_PADDING_1: -14,
+ BROTLI_DECODER_ERROR_FORMAT_PADDING_2: -15,
+ BROTLI_DECODER_ERROR_FORMAT_DISTANCE: -16,
+ BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET: -19,
+ BROTLI_DECODER_ERROR_INVALID_ARGUMENTS: -20,
+ BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES: -21,
+ BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS: -22,
+ BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP: -25,
+ BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1: -26,
+ BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2: -27,
+ BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES: -30,
+ BROTLI_DECODER_ERROR_UNREACHABLE: -31,
+}, realZlibConstants));
+//# sourceMappingURL=constants.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/minizlib/dist/esm/index.js b/deps/npm/node_modules/cacache/node_modules/minizlib/dist/esm/index.js
new file mode 100644
index 00000000000..a6269b505f4
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/minizlib/dist/esm/index.js
@@ -0,0 +1,333 @@
+import assert from 'assert';
+import { Buffer } from 'buffer';
+import { Minipass } from 'minipass';
+import realZlib from 'zlib';
+import { constants } from './constants.js';
+export { constants } from './constants.js';
+const OriginalBufferConcat = Buffer.concat;
+const _superWrite = Symbol('_superWrite');
+export class ZlibError extends Error {
+ code;
+ errno;
+ constructor(err) {
+ super('zlib: ' + err.message);
+ this.code = err.code;
+ this.errno = err.errno;
+ /* c8 ignore next */
+ if (!this.code)
+ this.code = 'ZLIB_ERROR';
+ this.message = 'zlib: ' + err.message;
+ Error.captureStackTrace(this, this.constructor);
+ }
+ get name() {
+ return 'ZlibError';
+ }
+}
+// the Zlib class they all inherit from
+// This thing manages the queue of requests, and returns
+// true or false if there is anything in the queue when
+// you call the .write() method.
+const _flushFlag = Symbol('flushFlag');
+class ZlibBase extends Minipass {
+ #sawError = false;
+ #ended = false;
+ #flushFlag;
+ #finishFlushFlag;
+ #fullFlushFlag;
+ #handle;
+ #onError;
+ get sawError() {
+ return this.#sawError;
+ }
+ get handle() {
+ return this.#handle;
+ }
+ /* c8 ignore start */
+ get flushFlag() {
+ return this.#flushFlag;
+ }
+ /* c8 ignore stop */
+ constructor(opts, mode) {
+ if (!opts || typeof opts !== 'object')
+ throw new TypeError('invalid options for ZlibBase constructor');
+ //@ts-ignore
+ super(opts);
+ /* c8 ignore start */
+ this.#flushFlag = opts.flush ?? 0;
+ this.#finishFlushFlag = opts.finishFlush ?? 0;
+ this.#fullFlushFlag = opts.fullFlushFlag ?? 0;
+ /* c8 ignore stop */
+ // this will throw if any options are invalid for the class selected
+ try {
+ // @types/node doesn't know that it exports the classes, but they're there
+ //@ts-ignore
+ this.#handle = new realZlib[mode](opts);
+ }
+ catch (er) {
+ // make sure that all errors get decorated properly
+ throw new ZlibError(er);
+ }
+ this.#onError = err => {
+ // no sense raising multiple errors, since we abort on the first one.
+ if (this.#sawError)
+ return;
+ this.#sawError = true;
+ // there is no way to cleanly recover.
+ // continuing only obscures problems.
+ this.close();
+ this.emit('error', err);
+ };
+ this.#handle?.on('error', er => this.#onError(new ZlibError(er)));
+ this.once('end', () => this.close);
+ }
+ close() {
+ if (this.#handle) {
+ this.#handle.close();
+ this.#handle = undefined;
+ this.emit('close');
+ }
+ }
+ reset() {
+ if (!this.#sawError) {
+ assert(this.#handle, 'zlib binding closed');
+ //@ts-ignore
+ return this.#handle.reset?.();
+ }
+ }
+ flush(flushFlag) {
+ if (this.ended)
+ return;
+ if (typeof flushFlag !== 'number')
+ flushFlag = this.#fullFlushFlag;
+ this.write(Object.assign(Buffer.alloc(0), { [_flushFlag]: flushFlag }));
+ }
+ end(chunk, encoding, cb) {
+ /* c8 ignore start */
+ if (typeof chunk === 'function') {
+ cb = chunk;
+ encoding = undefined;
+ chunk = undefined;
+ }
+ if (typeof encoding === 'function') {
+ cb = encoding;
+ encoding = undefined;
+ }
+ /* c8 ignore stop */
+ if (chunk) {
+ if (encoding)
+ this.write(chunk, encoding);
+ else
+ this.write(chunk);
+ }
+ this.flush(this.#finishFlushFlag);
+ this.#ended = true;
+ return super.end(cb);
+ }
+ get ended() {
+ return this.#ended;
+ }
+ // overridden in the gzip classes to do portable writes
+ [_superWrite](data) {
+ return super.write(data);
+ }
+ write(chunk, encoding, cb) {
+ // process the chunk using the sync process
+ // then super.write() all the outputted chunks
+ if (typeof encoding === 'function')
+ (cb = encoding), (encoding = 'utf8');
+ if (typeof chunk === 'string')
+ chunk = Buffer.from(chunk, encoding);
+ if (this.#sawError)
+ return;
+ assert(this.#handle, 'zlib binding closed');
+ // _processChunk tries to .close() the native handle after it's done, so we
+ // intercept that by temporarily making it a no-op.
+ // diving into the node:zlib internals a bit here
+ const nativeHandle = this.#handle
+ ._handle;
+ const originalNativeClose = nativeHandle.close;
+ nativeHandle.close = () => { };
+ const originalClose = this.#handle.close;
+ this.#handle.close = () => { };
+ // It also calls `Buffer.concat()` at the end, which may be convenient
+ // for some, but which we are not interested in as it slows us down.
+ Buffer.concat = args => args;
+ let result = undefined;
+ try {
+ const flushFlag = typeof chunk[_flushFlag] === 'number'
+ ? chunk[_flushFlag]
+ : this.#flushFlag;
+ result = this.#handle._processChunk(chunk, flushFlag);
+ // if we don't throw, reset it back how it was
+ Buffer.concat = OriginalBufferConcat;
+ }
+ catch (err) {
+ // or if we do, put Buffer.concat() back before we emit error
+ // Error events call into user code, which may call Buffer.concat()
+ Buffer.concat = OriginalBufferConcat;
+ this.#onError(new ZlibError(err));
+ }
+ finally {
+ if (this.#handle) {
+ // Core zlib resets `_handle` to null after attempting to close the
+ // native handle. Our no-op handler prevented actual closure, but we
+ // need to restore the `._handle` property.
+ ;
+ this.#handle._handle =
+ nativeHandle;
+ nativeHandle.close = originalNativeClose;
+ this.#handle.close = originalClose;
+ // `_processChunk()` adds an 'error' listener. If we don't remove it
+ // after each call, these handlers start piling up.
+ this.#handle.removeAllListeners('error');
+ // make sure OUR error listener is still attached tho
+ }
+ }
+ if (this.#handle)
+ this.#handle.on('error', er => this.#onError(new ZlibError(er)));
+ let writeReturn;
+ if (result) {
+ if (Array.isArray(result) && result.length > 0) {
+ const r = result[0];
+ // The first buffer is always `handle._outBuffer`, which would be
+ // re-used for later invocations; so, we always have to copy that one.
+ writeReturn = this[_superWrite](Buffer.from(r));
+ for (let i = 1; i < result.length; i++) {
+ writeReturn = this[_superWrite](result[i]);
+ }
+ }
+ else {
+ // either a single Buffer or an empty array
+ writeReturn = this[_superWrite](Buffer.from(result));
+ }
+ }
+ if (cb)
+ cb();
+ return writeReturn;
+ }
+}
+export class Zlib extends ZlibBase {
+ #level;
+ #strategy;
+ constructor(opts, mode) {
+ opts = opts || {};
+ opts.flush = opts.flush || constants.Z_NO_FLUSH;
+ opts.finishFlush = opts.finishFlush || constants.Z_FINISH;
+ opts.fullFlushFlag = constants.Z_FULL_FLUSH;
+ super(opts, mode);
+ this.#level = opts.level;
+ this.#strategy = opts.strategy;
+ }
+ params(level, strategy) {
+ if (this.sawError)
+ return;
+ if (!this.handle)
+ throw new Error('cannot switch params when binding is closed');
+ // no way to test this without also not supporting params at all
+ /* c8 ignore start */
+ if (!this.handle.params)
+ throw new Error('not supported in this implementation');
+ /* c8 ignore stop */
+ if (this.#level !== level || this.#strategy !== strategy) {
+ this.flush(constants.Z_SYNC_FLUSH);
+ assert(this.handle, 'zlib binding closed');
+ // .params() calls .flush(), but the latter is always async in the
+ // core zlib. We override .flush() temporarily to intercept that and
+ // flush synchronously.
+ const origFlush = this.handle.flush;
+ this.handle.flush = (flushFlag, cb) => {
+ /* c8 ignore start */
+ if (typeof flushFlag === 'function') {
+ cb = flushFlag;
+ flushFlag = this.flushFlag;
+ }
+ /* c8 ignore stop */
+ this.flush(flushFlag);
+ cb?.();
+ };
+ try {
+ ;
+ this.handle.params(level, strategy);
+ }
+ finally {
+ this.handle.flush = origFlush;
+ }
+ /* c8 ignore start */
+ if (this.handle) {
+ this.#level = level;
+ this.#strategy = strategy;
+ }
+ /* c8 ignore stop */
+ }
+ }
+}
+// minimal 2-byte header
+export class Deflate extends Zlib {
+ constructor(opts) {
+ super(opts, 'Deflate');
+ }
+}
+export class Inflate extends Zlib {
+ constructor(opts) {
+ super(opts, 'Inflate');
+ }
+}
+export class Gzip extends Zlib {
+ #portable;
+ constructor(opts) {
+ super(opts, 'Gzip');
+ this.#portable = opts && !!opts.portable;
+ }
+ [_superWrite](data) {
+ if (!this.#portable)
+ return super[_superWrite](data);
+ // we'll always get the header emitted in one first chunk
+ // overwrite the OS indicator byte with 0xFF
+ this.#portable = false;
+ data[9] = 255;
+ return super[_superWrite](data);
+ }
+}
+export class Gunzip extends Zlib {
+ constructor(opts) {
+ super(opts, 'Gunzip');
+ }
+}
+// raw - no header
+export class DeflateRaw extends Zlib {
+ constructor(opts) {
+ super(opts, 'DeflateRaw');
+ }
+}
+export class InflateRaw extends Zlib {
+ constructor(opts) {
+ super(opts, 'InflateRaw');
+ }
+}
+// auto-detect header.
+export class Unzip extends Zlib {
+ constructor(opts) {
+ super(opts, 'Unzip');
+ }
+}
+export class Brotli extends ZlibBase {
+ constructor(opts, mode) {
+ opts = opts || {};
+ opts.flush = opts.flush || constants.BROTLI_OPERATION_PROCESS;
+ opts.finishFlush =
+ opts.finishFlush || constants.BROTLI_OPERATION_FINISH;
+ opts.fullFlushFlag = constants.BROTLI_OPERATION_FLUSH;
+ super(opts, mode);
+ }
+}
+export class BrotliCompress extends Brotli {
+ constructor(opts) {
+ super(opts, 'BrotliCompress');
+ }
+}
+export class BrotliDecompress extends Brotli {
+ constructor(opts) {
+ super(opts, 'BrotliDecompress');
+ }
+}
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/minizlib/dist/esm/package.json b/deps/npm/node_modules/cacache/node_modules/minizlib/dist/esm/package.json
new file mode 100644
index 00000000000..3dbc1ca591c
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/minizlib/dist/esm/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "module"
+}
diff --git a/deps/npm/node_modules/cacache/node_modules/minizlib/package.json b/deps/npm/node_modules/cacache/node_modules/minizlib/package.json
new file mode 100644
index 00000000000..e94623ff43d
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/minizlib/package.json
@@ -0,0 +1,81 @@
+{
+ "name": "minizlib",
+ "version": "3.0.1",
+ "description": "A small fast zlib stream built on [minipass](http://npm.im/minipass) and Node.js's zlib binding.",
+ "main": "./dist/commonjs/index.js",
+ "dependencies": {
+ "minipass": "^7.0.4",
+ "rimraf": "^5.0.5"
+ },
+ "scripts": {
+ "prepare": "tshy",
+ "pretest": "npm run prepare",
+ "test": "tap",
+ "preversion": "npm test",
+ "postversion": "npm publish",
+ "prepublishOnly": "git push origin --follow-tags",
+ "format": "prettier --write . --loglevel warn",
+ "typedoc": "typedoc --tsconfig .tshy/esm.json ./src/*.ts"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/isaacs/minizlib.git"
+ },
+ "keywords": [
+ "zlib",
+ "gzip",
+ "gunzip",
+ "deflate",
+ "inflate",
+ "compression",
+ "zip",
+ "unzip"
+ ],
+ "author": "Isaac Z. Schlueter (http://blog.izs.me/)",
+ "license": "MIT",
+ "devDependencies": {
+ "@types/node": "^20.11.29",
+ "mkdirp": "^3.0.1",
+ "tap": "^18.7.1",
+ "tshy": "^1.12.0",
+ "typedoc": "^0.25.12"
+ },
+ "files": [
+ "dist"
+ ],
+ "engines": {
+ "node": ">= 18"
+ },
+ "tshy": {
+ "exports": {
+ "./package.json": "./package.json",
+ ".": "./src/index.ts"
+ }
+ },
+ "exports": {
+ "./package.json": "./package.json",
+ ".": {
+ "import": {
+ "types": "./dist/esm/index.d.ts",
+ "default": "./dist/esm/index.js"
+ },
+ "require": {
+ "types": "./dist/commonjs/index.d.ts",
+ "default": "./dist/commonjs/index.js"
+ }
+ }
+ },
+ "types": "./dist/commonjs/index.d.ts",
+ "type": "module",
+ "prettier": {
+ "semi": false,
+ "printWidth": 75,
+ "tabWidth": 2,
+ "useTabs": false,
+ "singleQuote": true,
+ "jsxSingleQuote": false,
+ "bracketSameLine": true,
+ "arrowParens": "avoid",
+ "endOfLine": "lf"
+ }
+}
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/LICENSE b/deps/npm/node_modules/cacache/node_modules/mkdirp/LICENSE
new file mode 100644
index 00000000000..0a034db7a73
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/LICENSE
@@ -0,0 +1,21 @@
+Copyright (c) 2011-2023 James Halliday (mail@substack.net) and Isaac Z. Schlueter (i@izs.me)
+
+This project is free software released under the MIT license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/package.json b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/package.json
new file mode 100644
index 00000000000..9d04a66e16c
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/package.json
@@ -0,0 +1,91 @@
+{
+ "name": "mkdirp",
+ "description": "Recursively mkdir, like `mkdir -p`",
+ "version": "3.0.1",
+ "keywords": [
+ "mkdir",
+ "directory",
+ "make dir",
+ "make",
+ "dir",
+ "recursive",
+ "native"
+ ],
+ "bin": "./dist/cjs/src/bin.js",
+ "main": "./dist/cjs/src/index.js",
+ "module": "./dist/mjs/index.js",
+ "types": "./dist/mjs/index.d.ts",
+ "exports": {
+ ".": {
+ "import": {
+ "types": "./dist/mjs/index.d.ts",
+ "default": "./dist/mjs/index.js"
+ },
+ "require": {
+ "types": "./dist/cjs/src/index.d.ts",
+ "default": "./dist/cjs/src/index.js"
+ }
+ }
+ },
+ "files": [
+ "dist"
+ ],
+ "scripts": {
+ "preversion": "npm test",
+ "postversion": "npm publish",
+ "prepublishOnly": "git push origin --follow-tags",
+ "preprepare": "rm -rf dist",
+ "prepare": "tsc -p tsconfig.json && tsc -p tsconfig-esm.json",
+ "postprepare": "bash fixup.sh",
+ "pretest": "npm run prepare",
+ "presnap": "npm run prepare",
+ "test": "c8 tap",
+ "snap": "c8 tap",
+ "format": "prettier --write . --loglevel warn",
+ "benchmark": "node benchmark/index.js",
+ "typedoc": "typedoc --tsconfig tsconfig-esm.json ./src/*.ts"
+ },
+ "prettier": {
+ "semi": false,
+ "printWidth": 80,
+ "tabWidth": 2,
+ "useTabs": false,
+ "singleQuote": true,
+ "jsxSingleQuote": false,
+ "bracketSameLine": true,
+ "arrowParens": "avoid",
+ "endOfLine": "lf"
+ },
+ "devDependencies": {
+ "@types/brace-expansion": "^1.1.0",
+ "@types/node": "^18.11.9",
+ "@types/tap": "^15.0.7",
+ "c8": "^7.12.0",
+ "eslint-config-prettier": "^8.6.0",
+ "prettier": "^2.8.2",
+ "tap": "^16.3.3",
+ "ts-node": "^10.9.1",
+ "typedoc": "^0.23.21",
+ "typescript": "^4.9.3"
+ },
+ "tap": {
+ "coverage": false,
+ "node-arg": [
+ "--no-warnings",
+ "--loader",
+ "ts-node/esm"
+ ],
+ "ts": false
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/isaacs/node-mkdirp.git"
+ },
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
+}
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/bin.d.ts b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/bin.d.ts
new file mode 100644
index 00000000000..34e00522865
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/bin.d.ts
@@ -0,0 +1,3 @@
+#!/usr/bin/env node
+export {};
+//# sourceMappingURL=bin.d.ts.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/bin.d.ts.map b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/bin.d.ts.map
new file mode 100644
index 00000000000..c10c656ec75
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/bin.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../../../src/bin.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/bin.js b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/bin.js
new file mode 100755
index 00000000000..757aae1fd96
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/bin.js
@@ -0,0 +1,80 @@
+#!/usr/bin/env node
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const package_json_1 = require("../package.json");
+const usage = () => `
+usage: mkdirp [DIR1,DIR2..] {OPTIONS}
+
+ Create each supplied directory including any necessary parent directories
+ that don't yet exist.
+
+ If the directory already exists, do nothing.
+
+OPTIONS are:
+
+ -m If a directory needs to be created, set the mode as an octal
+ --mode= permission string.
+
+ -v --version Print the mkdirp version number
+
+ -h --help Print this helpful banner
+
+ -p --print Print the first directories created for each path provided
+
+ --manual Use manual implementation, even if native is available
+`;
+const dirs = [];
+const opts = {};
+let doPrint = false;
+let dashdash = false;
+let manual = false;
+for (const arg of process.argv.slice(2)) {
+ if (dashdash)
+ dirs.push(arg);
+ else if (arg === '--')
+ dashdash = true;
+ else if (arg === '--manual')
+ manual = true;
+ else if (/^-h/.test(arg) || /^--help/.test(arg)) {
+ console.log(usage());
+ process.exit(0);
+ }
+ else if (arg === '-v' || arg === '--version') {
+ console.log(package_json_1.version);
+ process.exit(0);
+ }
+ else if (arg === '-p' || arg === '--print') {
+ doPrint = true;
+ }
+ else if (/^-m/.test(arg) || /^--mode=/.test(arg)) {
+ // these don't get covered in CI, but work locally
+ // weird because the tests below show as passing in the output.
+ /* c8 ignore start */
+ const mode = parseInt(arg.replace(/^(-m|--mode=)/, ''), 8);
+ if (isNaN(mode)) {
+ console.error(`invalid mode argument: ${arg}\nMust be an octal number.`);
+ process.exit(1);
+ }
+ /* c8 ignore stop */
+ opts.mode = mode;
+ }
+ else
+ dirs.push(arg);
+}
+const index_js_1 = require("./index.js");
+const impl = manual ? index_js_1.mkdirp.manual : index_js_1.mkdirp;
+if (dirs.length === 0) {
+ console.error(usage());
+}
+// these don't get covered in CI, but work locally
+/* c8 ignore start */
+Promise.all(dirs.map(dir => impl(dir, opts)))
+ .then(made => (doPrint ? made.forEach(m => m && console.log(m)) : null))
+ .catch(er => {
+ console.error(er.message);
+ if (er.code)
+ console.error(' code: ' + er.code);
+ process.exit(1);
+});
+/* c8 ignore stop */
+//# sourceMappingURL=bin.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/bin.js.map b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/bin.js.map
new file mode 100644
index 00000000000..d99295301b5
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/bin.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"bin.js","sourceRoot":"","sources":["../../../src/bin.ts"],"names":[],"mappings":";;;AAEA,kDAAyC;AAGzC,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;CAoBnB,CAAA;AAED,MAAM,IAAI,GAAa,EAAE,CAAA;AACzB,MAAM,IAAI,GAAkB,EAAE,CAAA;AAC9B,IAAI,OAAO,GAAY,KAAK,CAAA;AAC5B,IAAI,QAAQ,GAAG,KAAK,CAAA;AACpB,IAAI,MAAM,GAAG,KAAK,CAAA;AAClB,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IACvC,IAAI,QAAQ;QAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;SACvB,IAAI,GAAG,KAAK,IAAI;QAAE,QAAQ,GAAG,IAAI,CAAA;SACjC,IAAI,GAAG,KAAK,UAAU;QAAE,MAAM,GAAG,IAAI,CAAA;SACrC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAA;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;KAChB;SAAM,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,WAAW,EAAE;QAC9C,OAAO,CAAC,GAAG,CAAC,sBAAO,CAAC,CAAA;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;KAChB;SAAM,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE;QAC5C,OAAO,GAAG,IAAI,CAAA;KACf;SAAM,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QAClD,kDAAkD;QAClD,+DAA+D;QAC/D,qBAAqB;QACrB,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QAC1D,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE;YACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,GAAG,4BAA4B,CAAC,CAAA;YACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;SAChB;QACD,oBAAoB;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;KACjB;;QAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;CACtB;AAED,yCAAmC;AACnC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,iBAAM,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAM,CAAA;AAC5C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;CACvB;AAED,kDAAkD;AAClD,qBAAqB;AACrB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;KAC1C,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;KACvE,KAAK,CAAC,EAAE,CAAC,EAAE;IACV,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA;IACzB,IAAI,EAAE,CAAC,IAAI;QAAE,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA;AACJ,oBAAoB","sourcesContent":["#!/usr/bin/env node\n\nimport { version } from '../package.json'\nimport { MkdirpOptions } from './opts-arg.js'\n\nconst usage = () => `\nusage: mkdirp [DIR1,DIR2..] {OPTIONS}\n\n Create each supplied directory including any necessary parent directories\n that don't yet exist.\n\n If the directory already exists, do nothing.\n\nOPTIONS are:\n\n -m If a directory needs to be created, set the mode as an octal\n --mode= permission string.\n\n -v --version Print the mkdirp version number\n\n -h --help Print this helpful banner\n\n -p --print Print the first directories created for each path provided\n\n --manual Use manual implementation, even if native is available\n`\n\nconst dirs: string[] = []\nconst opts: MkdirpOptions = {}\nlet doPrint: boolean = false\nlet dashdash = false\nlet manual = false\nfor (const arg of process.argv.slice(2)) {\n if (dashdash) dirs.push(arg)\n else if (arg === '--') dashdash = true\n else if (arg === '--manual') manual = true\n else if (/^-h/.test(arg) || /^--help/.test(arg)) {\n console.log(usage())\n process.exit(0)\n } else if (arg === '-v' || arg === '--version') {\n console.log(version)\n process.exit(0)\n } else if (arg === '-p' || arg === '--print') {\n doPrint = true\n } else if (/^-m/.test(arg) || /^--mode=/.test(arg)) {\n // these don't get covered in CI, but work locally\n // weird because the tests below show as passing in the output.\n /* c8 ignore start */\n const mode = parseInt(arg.replace(/^(-m|--mode=)/, ''), 8)\n if (isNaN(mode)) {\n console.error(`invalid mode argument: ${arg}\\nMust be an octal number.`)\n process.exit(1)\n }\n /* c8 ignore stop */\n opts.mode = mode\n } else dirs.push(arg)\n}\n\nimport { mkdirp } from './index.js'\nconst impl = manual ? mkdirp.manual : mkdirp\nif (dirs.length === 0) {\n console.error(usage())\n}\n\n// these don't get covered in CI, but work locally\n/* c8 ignore start */\nPromise.all(dirs.map(dir => impl(dir, opts)))\n .then(made => (doPrint ? made.forEach(m => m && console.log(m)) : null))\n .catch(er => {\n console.error(er.message)\n if (er.code) console.error(' code: ' + er.code)\n process.exit(1)\n })\n/* c8 ignore stop */\n"]}
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/find-made.d.ts b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/find-made.d.ts
new file mode 100644
index 00000000000..e47794b3bb7
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/find-made.d.ts
@@ -0,0 +1,4 @@
+import { MkdirpOptionsResolved } from './opts-arg.js';
+export declare const findMade: (opts: MkdirpOptionsResolved, parent: string, path?: string) => Promise;
+export declare const findMadeSync: (opts: MkdirpOptionsResolved, parent: string, path?: string) => undefined | string;
+//# sourceMappingURL=find-made.d.ts.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/find-made.d.ts.map b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/find-made.d.ts.map
new file mode 100644
index 00000000000..00d5d1a4dbe
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/find-made.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"find-made.d.ts","sourceRoot":"","sources":["../../../src/find-made.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAErD,eAAO,MAAM,QAAQ,SACb,qBAAqB,UACnB,MAAM,SACP,MAAM,KACZ,QAAQ,SAAS,GAAG,MAAM,CAe5B,CAAA;AAED,eAAO,MAAM,YAAY,SACjB,qBAAqB,UACnB,MAAM,SACP,MAAM,KACZ,SAAS,GAAG,MAad,CAAA"}
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/find-made.js b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/find-made.js
new file mode 100644
index 00000000000..e831ef27cad
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/find-made.js
@@ -0,0 +1,35 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.findMadeSync = exports.findMade = void 0;
+const path_1 = require("path");
+const findMade = async (opts, parent, path) => {
+ // we never want the 'made' return value to be a root directory
+ if (path === parent) {
+ return;
+ }
+ return opts.statAsync(parent).then(st => (st.isDirectory() ? path : undefined), // will fail later
+ // will fail later
+ er => {
+ const fer = er;
+ return fer && fer.code === 'ENOENT'
+ ? (0, exports.findMade)(opts, (0, path_1.dirname)(parent), parent)
+ : undefined;
+ });
+};
+exports.findMade = findMade;
+const findMadeSync = (opts, parent, path) => {
+ if (path === parent) {
+ return undefined;
+ }
+ try {
+ return opts.statSync(parent).isDirectory() ? path : undefined;
+ }
+ catch (er) {
+ const fer = er;
+ return fer && fer.code === 'ENOENT'
+ ? (0, exports.findMadeSync)(opts, (0, path_1.dirname)(parent), parent)
+ : undefined;
+ }
+};
+exports.findMadeSync = findMadeSync;
+//# sourceMappingURL=find-made.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/find-made.js.map b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/find-made.js.map
new file mode 100644
index 00000000000..30a0d663988
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/find-made.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"find-made.js","sourceRoot":"","sources":["../../../src/find-made.ts"],"names":[],"mappings":";;;AAAA,+BAA8B;AAGvB,MAAM,QAAQ,GAAG,KAAK,EAC3B,IAA2B,EAC3B,MAAc,EACd,IAAa,EACgB,EAAE;IAC/B,+DAA+D;IAC/D,IAAI,IAAI,KAAK,MAAM,EAAE;QACnB,OAAM;KACP;IAED,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAChC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,kBAAkB;IAC/D,AAD6C,kBAAkB;IAC/D,EAAE,CAAC,EAAE;QACH,MAAM,GAAG,GAAG,EAA2B,CAAA;QACvC,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;YACjC,CAAC,CAAC,IAAA,gBAAQ,EAAC,IAAI,EAAE,IAAA,cAAO,EAAC,MAAM,CAAC,EAAE,MAAM,CAAC;YACzC,CAAC,CAAC,SAAS,CAAA;IACf,CAAC,CACF,CAAA;AACH,CAAC,CAAA;AAnBY,QAAA,QAAQ,YAmBpB;AAEM,MAAM,YAAY,GAAG,CAC1B,IAA2B,EAC3B,MAAc,EACd,IAAa,EACO,EAAE;IACtB,IAAI,IAAI,KAAK,MAAM,EAAE;QACnB,OAAO,SAAS,CAAA;KACjB;IAED,IAAI;QACF,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;KAC9D;IAAC,OAAO,EAAE,EAAE;QACX,MAAM,GAAG,GAAG,EAA2B,CAAA;QACvC,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;YACjC,CAAC,CAAC,IAAA,oBAAY,EAAC,IAAI,EAAE,IAAA,cAAO,EAAC,MAAM,CAAC,EAAE,MAAM,CAAC;YAC7C,CAAC,CAAC,SAAS,CAAA;KACd;AACH,CAAC,CAAA;AAjBY,QAAA,YAAY,gBAiBxB","sourcesContent":["import { dirname } from 'path'\nimport { MkdirpOptionsResolved } from './opts-arg.js'\n\nexport const findMade = async (\n opts: MkdirpOptionsResolved,\n parent: string,\n path?: string\n): Promise => {\n // we never want the 'made' return value to be a root directory\n if (path === parent) {\n return\n }\n\n return opts.statAsync(parent).then(\n st => (st.isDirectory() ? path : undefined), // will fail later\n er => {\n const fer = er as NodeJS.ErrnoException\n return fer && fer.code === 'ENOENT'\n ? findMade(opts, dirname(parent), parent)\n : undefined\n }\n )\n}\n\nexport const findMadeSync = (\n opts: MkdirpOptionsResolved,\n parent: string,\n path?: string\n): undefined | string => {\n if (path === parent) {\n return undefined\n }\n\n try {\n return opts.statSync(parent).isDirectory() ? path : undefined\n } catch (er) {\n const fer = er as NodeJS.ErrnoException\n return fer && fer.code === 'ENOENT'\n ? findMadeSync(opts, dirname(parent), parent)\n : undefined\n }\n}\n"]}
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/index.d.ts b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/index.d.ts
new file mode 100644
index 00000000000..fc9e43b3a45
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/index.d.ts
@@ -0,0 +1,39 @@
+import { MkdirpOptions } from './opts-arg.js';
+export { mkdirpManual, mkdirpManualSync } from './mkdirp-manual.js';
+export { mkdirpNative, mkdirpNativeSync } from './mkdirp-native.js';
+export { useNative, useNativeSync } from './use-native.js';
+export declare const mkdirpSync: (path: string, opts?: MkdirpOptions) => string | void;
+export declare const sync: (path: string, opts?: MkdirpOptions) => string | void;
+export declare const manual: ((path: string, options?: MkdirpOptions | undefined, made?: string | void | undefined) => Promise) & {
+ sync: (path: string, options?: MkdirpOptions | undefined, made?: string | void | undefined) => string | void | undefined;
+};
+export declare const manualSync: (path: string, options?: MkdirpOptions | undefined, made?: string | void | undefined) => string | void | undefined;
+export declare const native: ((path: string, options?: MkdirpOptions | undefined) => Promise) & {
+ sync: (path: string, options?: MkdirpOptions | undefined) => string | void | undefined;
+};
+export declare const nativeSync: (path: string, options?: MkdirpOptions | undefined) => string | void | undefined;
+export declare const mkdirp: ((path: string, opts?: MkdirpOptions) => Promise) & {
+ mkdirpSync: (path: string, opts?: MkdirpOptions) => string | void;
+ mkdirpNative: ((path: string, options?: MkdirpOptions | undefined) => Promise) & {
+ sync: (path: string, options?: MkdirpOptions | undefined) => string | void | undefined;
+ };
+ mkdirpNativeSync: (path: string, options?: MkdirpOptions | undefined) => string | void | undefined;
+ mkdirpManual: ((path: string, options?: MkdirpOptions | undefined, made?: string | void | undefined) => Promise) & {
+ sync: (path: string, options?: MkdirpOptions | undefined, made?: string | void | undefined) => string | void | undefined;
+ };
+ mkdirpManualSync: (path: string, options?: MkdirpOptions | undefined, made?: string | void | undefined) => string | void | undefined;
+ sync: (path: string, opts?: MkdirpOptions) => string | void;
+ native: ((path: string, options?: MkdirpOptions | undefined) => Promise) & {
+ sync: (path: string, options?: MkdirpOptions | undefined) => string | void | undefined;
+ };
+ nativeSync: (path: string, options?: MkdirpOptions | undefined) => string | void | undefined;
+ manual: ((path: string, options?: MkdirpOptions | undefined, made?: string | void | undefined) => Promise) & {
+ sync: (path: string, options?: MkdirpOptions | undefined, made?: string | void | undefined) => string | void | undefined;
+ };
+ manualSync: (path: string, options?: MkdirpOptions | undefined, made?: string | void | undefined) => string | void | undefined;
+ useNative: ((opts?: MkdirpOptions | undefined) => boolean) & {
+ sync: (opts?: MkdirpOptions | undefined) => boolean;
+ };
+ useNativeSync: (opts?: MkdirpOptions | undefined) => boolean;
+};
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/index.d.ts.map b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/index.d.ts.map
new file mode 100644
index 00000000000..0e915bbc9a0
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAW,MAAM,eAAe,CAAA;AAItD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACnE,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAG1D,eAAO,MAAM,UAAU,SAAU,MAAM,SAAS,aAAa,kBAM5D,CAAA;AAED,eAAO,MAAM,IAAI,SARgB,MAAM,SAAS,aAAa,kBAQ/B,CAAA;AAC9B,eAAO,MAAM,MAAM;;CAAe,CAAA;AAClC,eAAO,MAAM,UAAU,oHAAmB,CAAA;AAC1C,eAAO,MAAM,MAAM;;CAAe,CAAA;AAClC,eAAO,MAAM,UAAU,kFAAmB,CAAA;AAC1C,eAAO,MAAM,MAAM,UACJ,MAAM,SAAS,aAAa;uBAdV,MAAM,SAAS,aAAa;;;;;;;;;iBAA5B,MAAM,SAAS,aAAa;;;;;;;;;;;;;CAoC5D,CAAA"}
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/index.js b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/index.js
new file mode 100644
index 00000000000..ab9dc62cddd
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/index.js
@@ -0,0 +1,53 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.mkdirp = exports.nativeSync = exports.native = exports.manualSync = exports.manual = exports.sync = exports.mkdirpSync = exports.useNativeSync = exports.useNative = exports.mkdirpNativeSync = exports.mkdirpNative = exports.mkdirpManualSync = exports.mkdirpManual = void 0;
+const mkdirp_manual_js_1 = require("./mkdirp-manual.js");
+const mkdirp_native_js_1 = require("./mkdirp-native.js");
+const opts_arg_js_1 = require("./opts-arg.js");
+const path_arg_js_1 = require("./path-arg.js");
+const use_native_js_1 = require("./use-native.js");
+/* c8 ignore start */
+var mkdirp_manual_js_2 = require("./mkdirp-manual.js");
+Object.defineProperty(exports, "mkdirpManual", { enumerable: true, get: function () { return mkdirp_manual_js_2.mkdirpManual; } });
+Object.defineProperty(exports, "mkdirpManualSync", { enumerable: true, get: function () { return mkdirp_manual_js_2.mkdirpManualSync; } });
+var mkdirp_native_js_2 = require("./mkdirp-native.js");
+Object.defineProperty(exports, "mkdirpNative", { enumerable: true, get: function () { return mkdirp_native_js_2.mkdirpNative; } });
+Object.defineProperty(exports, "mkdirpNativeSync", { enumerable: true, get: function () { return mkdirp_native_js_2.mkdirpNativeSync; } });
+var use_native_js_2 = require("./use-native.js");
+Object.defineProperty(exports, "useNative", { enumerable: true, get: function () { return use_native_js_2.useNative; } });
+Object.defineProperty(exports, "useNativeSync", { enumerable: true, get: function () { return use_native_js_2.useNativeSync; } });
+/* c8 ignore stop */
+const mkdirpSync = (path, opts) => {
+ path = (0, path_arg_js_1.pathArg)(path);
+ const resolved = (0, opts_arg_js_1.optsArg)(opts);
+ return (0, use_native_js_1.useNativeSync)(resolved)
+ ? (0, mkdirp_native_js_1.mkdirpNativeSync)(path, resolved)
+ : (0, mkdirp_manual_js_1.mkdirpManualSync)(path, resolved);
+};
+exports.mkdirpSync = mkdirpSync;
+exports.sync = exports.mkdirpSync;
+exports.manual = mkdirp_manual_js_1.mkdirpManual;
+exports.manualSync = mkdirp_manual_js_1.mkdirpManualSync;
+exports.native = mkdirp_native_js_1.mkdirpNative;
+exports.nativeSync = mkdirp_native_js_1.mkdirpNativeSync;
+exports.mkdirp = Object.assign(async (path, opts) => {
+ path = (0, path_arg_js_1.pathArg)(path);
+ const resolved = (0, opts_arg_js_1.optsArg)(opts);
+ return (0, use_native_js_1.useNative)(resolved)
+ ? (0, mkdirp_native_js_1.mkdirpNative)(path, resolved)
+ : (0, mkdirp_manual_js_1.mkdirpManual)(path, resolved);
+}, {
+ mkdirpSync: exports.mkdirpSync,
+ mkdirpNative: mkdirp_native_js_1.mkdirpNative,
+ mkdirpNativeSync: mkdirp_native_js_1.mkdirpNativeSync,
+ mkdirpManual: mkdirp_manual_js_1.mkdirpManual,
+ mkdirpManualSync: mkdirp_manual_js_1.mkdirpManualSync,
+ sync: exports.mkdirpSync,
+ native: mkdirp_native_js_1.mkdirpNative,
+ nativeSync: mkdirp_native_js_1.mkdirpNativeSync,
+ manual: mkdirp_manual_js_1.mkdirpManual,
+ manualSync: mkdirp_manual_js_1.mkdirpManualSync,
+ useNative: use_native_js_1.useNative,
+ useNativeSync: use_native_js_1.useNativeSync,
+});
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/index.js.map b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/index.js.map
new file mode 100644
index 00000000000..fdb572677a9
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":";;;AAAA,yDAAmE;AACnE,yDAAmE;AACnE,+CAAsD;AACtD,+CAAuC;AACvC,mDAA0D;AAC1D,qBAAqB;AACrB,uDAAmE;AAA1D,gHAAA,YAAY,OAAA;AAAE,oHAAA,gBAAgB,OAAA;AACvC,uDAAmE;AAA1D,gHAAA,YAAY,OAAA;AAAE,oHAAA,gBAAgB,OAAA;AACvC,iDAA0D;AAAjD,0GAAA,SAAS,OAAA;AAAE,8GAAA,aAAa,OAAA;AACjC,oBAAoB;AAEb,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,IAAoB,EAAE,EAAE;IAC/D,IAAI,GAAG,IAAA,qBAAO,EAAC,IAAI,CAAC,CAAA;IACpB,MAAM,QAAQ,GAAG,IAAA,qBAAO,EAAC,IAAI,CAAC,CAAA;IAC9B,OAAO,IAAA,6BAAa,EAAC,QAAQ,CAAC;QAC5B,CAAC,CAAC,IAAA,mCAAgB,EAAC,IAAI,EAAE,QAAQ,CAAC;QAClC,CAAC,CAAC,IAAA,mCAAgB,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;AACtC,CAAC,CAAA;AANY,QAAA,UAAU,cAMtB;AAEY,QAAA,IAAI,GAAG,kBAAU,CAAA;AACjB,QAAA,MAAM,GAAG,+BAAY,CAAA;AACrB,QAAA,UAAU,GAAG,mCAAgB,CAAA;AAC7B,QAAA,MAAM,GAAG,+BAAY,CAAA;AACrB,QAAA,UAAU,GAAG,mCAAgB,CAAA;AAC7B,QAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CACjC,KAAK,EAAE,IAAY,EAAE,IAAoB,EAAE,EAAE;IAC3C,IAAI,GAAG,IAAA,qBAAO,EAAC,IAAI,CAAC,CAAA;IACpB,MAAM,QAAQ,GAAG,IAAA,qBAAO,EAAC,IAAI,CAAC,CAAA;IAC9B,OAAO,IAAA,yBAAS,EAAC,QAAQ,CAAC;QACxB,CAAC,CAAC,IAAA,+BAAY,EAAC,IAAI,EAAE,QAAQ,CAAC;QAC9B,CAAC,CAAC,IAAA,+BAAY,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;AAClC,CAAC,EACD;IACE,UAAU,EAAV,kBAAU;IACV,YAAY,EAAZ,+BAAY;IACZ,gBAAgB,EAAhB,mCAAgB;IAChB,YAAY,EAAZ,+BAAY;IACZ,gBAAgB,EAAhB,mCAAgB;IAEhB,IAAI,EAAE,kBAAU;IAChB,MAAM,EAAE,+BAAY;IACpB,UAAU,EAAE,mCAAgB;IAC5B,MAAM,EAAE,+BAAY;IACpB,UAAU,EAAE,mCAAgB;IAC5B,SAAS,EAAT,yBAAS;IACT,aAAa,EAAb,6BAAa;CACd,CACF,CAAA","sourcesContent":["import { mkdirpManual, mkdirpManualSync } from './mkdirp-manual.js'\nimport { mkdirpNative, mkdirpNativeSync } from './mkdirp-native.js'\nimport { MkdirpOptions, optsArg } from './opts-arg.js'\nimport { pathArg } from './path-arg.js'\nimport { useNative, useNativeSync } from './use-native.js'\n/* c8 ignore start */\nexport { mkdirpManual, mkdirpManualSync } from './mkdirp-manual.js'\nexport { mkdirpNative, mkdirpNativeSync } from './mkdirp-native.js'\nexport { useNative, useNativeSync } from './use-native.js'\n/* c8 ignore stop */\n\nexport const mkdirpSync = (path: string, opts?: MkdirpOptions) => {\n path = pathArg(path)\n const resolved = optsArg(opts)\n return useNativeSync(resolved)\n ? mkdirpNativeSync(path, resolved)\n : mkdirpManualSync(path, resolved)\n}\n\nexport const sync = mkdirpSync\nexport const manual = mkdirpManual\nexport const manualSync = mkdirpManualSync\nexport const native = mkdirpNative\nexport const nativeSync = mkdirpNativeSync\nexport const mkdirp = Object.assign(\n async (path: string, opts?: MkdirpOptions) => {\n path = pathArg(path)\n const resolved = optsArg(opts)\n return useNative(resolved)\n ? mkdirpNative(path, resolved)\n : mkdirpManual(path, resolved)\n },\n {\n mkdirpSync,\n mkdirpNative,\n mkdirpNativeSync,\n mkdirpManual,\n mkdirpManualSync,\n\n sync: mkdirpSync,\n native: mkdirpNative,\n nativeSync: mkdirpNativeSync,\n manual: mkdirpManual,\n manualSync: mkdirpManualSync,\n useNative,\n useNativeSync,\n }\n)\n"]}
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-manual.d.ts b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-manual.d.ts
new file mode 100644
index 00000000000..e49cdf9f1bd
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-manual.d.ts
@@ -0,0 +1,6 @@
+import { MkdirpOptions } from './opts-arg.js';
+export declare const mkdirpManualSync: (path: string, options?: MkdirpOptions, made?: string | undefined | void) => string | undefined | void;
+export declare const mkdirpManual: ((path: string, options?: MkdirpOptions, made?: string | undefined | void) => Promise) & {
+ sync: (path: string, options?: MkdirpOptions, made?: string | undefined | void) => string | undefined | void;
+};
+//# sourceMappingURL=mkdirp-manual.d.ts.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-manual.d.ts.map b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-manual.d.ts.map
new file mode 100644
index 00000000000..9301bab1ffb
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-manual.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"mkdirp-manual.d.ts","sourceRoot":"","sources":["../../../src/mkdirp-manual.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAW,MAAM,eAAe,CAAA;AAEtD,eAAO,MAAM,gBAAgB,SACrB,MAAM,YACF,aAAa,SAChB,MAAM,GAAG,SAAS,GAAG,IAAI,KAC/B,MAAM,GAAG,SAAS,GAAG,IAmCvB,CAAA;AAED,eAAO,MAAM,YAAY,UAEf,MAAM,YACF,aAAa,SAChB,MAAM,GAAG,SAAS,GAAG,IAAI,KAC/B,QAAQ,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;iBA7C/B,MAAM,YACF,aAAa,SAChB,MAAM,GAAG,SAAS,GAAG,IAAI,KAC/B,MAAM,GAAG,SAAS,GAAG,IAAI;CAqF3B,CAAA"}
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-manual.js b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-manual.js
new file mode 100644
index 00000000000..d9bd1d8bb5a
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-manual.js
@@ -0,0 +1,79 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.mkdirpManual = exports.mkdirpManualSync = void 0;
+const path_1 = require("path");
+const opts_arg_js_1 = require("./opts-arg.js");
+const mkdirpManualSync = (path, options, made) => {
+ const parent = (0, path_1.dirname)(path);
+ const opts = { ...(0, opts_arg_js_1.optsArg)(options), recursive: false };
+ if (parent === path) {
+ try {
+ return opts.mkdirSync(path, opts);
+ }
+ catch (er) {
+ // swallowed by recursive implementation on posix systems
+ // any other error is a failure
+ const fer = er;
+ if (fer && fer.code !== 'EISDIR') {
+ throw er;
+ }
+ return;
+ }
+ }
+ try {
+ opts.mkdirSync(path, opts);
+ return made || path;
+ }
+ catch (er) {
+ const fer = er;
+ if (fer && fer.code === 'ENOENT') {
+ return (0, exports.mkdirpManualSync)(path, opts, (0, exports.mkdirpManualSync)(parent, opts, made));
+ }
+ if (fer && fer.code !== 'EEXIST' && fer && fer.code !== 'EROFS') {
+ throw er;
+ }
+ try {
+ if (!opts.statSync(path).isDirectory())
+ throw er;
+ }
+ catch (_) {
+ throw er;
+ }
+ }
+};
+exports.mkdirpManualSync = mkdirpManualSync;
+exports.mkdirpManual = Object.assign(async (path, options, made) => {
+ const opts = (0, opts_arg_js_1.optsArg)(options);
+ opts.recursive = false;
+ const parent = (0, path_1.dirname)(path);
+ if (parent === path) {
+ return opts.mkdirAsync(path, opts).catch(er => {
+ // swallowed by recursive implementation on posix systems
+ // any other error is a failure
+ const fer = er;
+ if (fer && fer.code !== 'EISDIR') {
+ throw er;
+ }
+ });
+ }
+ return opts.mkdirAsync(path, opts).then(() => made || path, async (er) => {
+ const fer = er;
+ if (fer && fer.code === 'ENOENT') {
+ return (0, exports.mkdirpManual)(parent, opts).then((made) => (0, exports.mkdirpManual)(path, opts, made));
+ }
+ if (fer && fer.code !== 'EEXIST' && fer.code !== 'EROFS') {
+ throw er;
+ }
+ return opts.statAsync(path).then(st => {
+ if (st.isDirectory()) {
+ return made;
+ }
+ else {
+ throw er;
+ }
+ }, () => {
+ throw er;
+ });
+ });
+}, { sync: exports.mkdirpManualSync });
+//# sourceMappingURL=mkdirp-manual.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-manual.js.map b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-manual.js.map
new file mode 100644
index 00000000000..ff7ba24dca3
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-manual.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"mkdirp-manual.js","sourceRoot":"","sources":["../../../src/mkdirp-manual.ts"],"names":[],"mappings":";;;AAAA,+BAA8B;AAC9B,+CAAsD;AAE/C,MAAM,gBAAgB,GAAG,CAC9B,IAAY,EACZ,OAAuB,EACvB,IAAgC,EACL,EAAE;IAC7B,MAAM,MAAM,GAAG,IAAA,cAAO,EAAC,IAAI,CAAC,CAAA;IAC5B,MAAM,IAAI,GAAG,EAAE,GAAG,IAAA,qBAAO,EAAC,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;IAEtD,IAAI,MAAM,KAAK,IAAI,EAAE;QACnB,IAAI;YACF,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;SAClC;QAAC,OAAO,EAAE,EAAE;YACX,yDAAyD;YACzD,+BAA+B;YAC/B,MAAM,GAAG,GAAG,EAA2B,CAAA;YACvC,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;gBAChC,MAAM,EAAE,CAAA;aACT;YACD,OAAM;SACP;KACF;IAED,IAAI;QACF,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAC1B,OAAO,IAAI,IAAI,IAAI,CAAA;KACpB;IAAC,OAAO,EAAE,EAAE;QACX,MAAM,GAAG,GAAG,EAA2B,CAAA;QACvC,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;YAChC,OAAO,IAAA,wBAAgB,EAAC,IAAI,EAAE,IAAI,EAAE,IAAA,wBAAgB,EAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;SAC1E;QACD,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE;YAC/D,MAAM,EAAE,CAAA;SACT;QACD,IAAI;YACF,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE;gBAAE,MAAM,EAAE,CAAA;SACjD;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,EAAE,CAAA;SACT;KACF;AACH,CAAC,CAAA;AAvCY,QAAA,gBAAgB,oBAuC5B;AAEY,QAAA,YAAY,GAAG,MAAM,CAAC,MAAM,CACvC,KAAK,EACH,IAAY,EACZ,OAAuB,EACvB,IAAgC,EACI,EAAE;IACtC,MAAM,IAAI,GAAG,IAAA,qBAAO,EAAC,OAAO,CAAC,CAAA;IAC7B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;IACtB,MAAM,MAAM,GAAG,IAAA,cAAO,EAAC,IAAI,CAAC,CAAA;IAC5B,IAAI,MAAM,KAAK,IAAI,EAAE;QACnB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;YAC5C,yDAAyD;YACzD,+BAA+B;YAC/B,MAAM,GAAG,GAAG,EAA2B,CAAA;YACvC,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;gBAChC,MAAM,EAAE,CAAA;aACT;QACH,CAAC,CAAC,CAAA;KACH;IAED,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CACrC,GAAG,EAAE,CAAC,IAAI,IAAI,IAAI,EAClB,KAAK,EAAC,EAAE,EAAC,EAAE;QACT,MAAM,GAAG,GAAG,EAA2B,CAAA;QACvC,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;YAChC,OAAO,IAAA,oBAAY,EAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CACpC,CAAC,IAAgC,EAAE,EAAE,CAAC,IAAA,oBAAY,EAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CACrE,CAAA;SACF;QACD,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE;YACxD,MAAM,EAAE,CAAA;SACT;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAC9B,EAAE,CAAC,EAAE;YACH,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE;gBACpB,OAAO,IAAI,CAAA;aACZ;iBAAM;gBACL,MAAM,EAAE,CAAA;aACT;QACH,CAAC,EACD,GAAG,EAAE;YACH,MAAM,EAAE,CAAA;QACV,CAAC,CACF,CAAA;IACH,CAAC,CACF,CAAA;AACH,CAAC,EACD,EAAE,IAAI,EAAE,wBAAgB,EAAE,CAC3B,CAAA","sourcesContent":["import { dirname } from 'path'\nimport { MkdirpOptions, optsArg } from './opts-arg.js'\n\nexport const mkdirpManualSync = (\n path: string,\n options?: MkdirpOptions,\n made?: string | undefined | void\n): string | undefined | void => {\n const parent = dirname(path)\n const opts = { ...optsArg(options), recursive: false }\n\n if (parent === path) {\n try {\n return opts.mkdirSync(path, opts)\n } catch (er) {\n // swallowed by recursive implementation on posix systems\n // any other error is a failure\n const fer = er as NodeJS.ErrnoException\n if (fer && fer.code !== 'EISDIR') {\n throw er\n }\n return\n }\n }\n\n try {\n opts.mkdirSync(path, opts)\n return made || path\n } catch (er) {\n const fer = er as NodeJS.ErrnoException\n if (fer && fer.code === 'ENOENT') {\n return mkdirpManualSync(path, opts, mkdirpManualSync(parent, opts, made))\n }\n if (fer && fer.code !== 'EEXIST' && fer && fer.code !== 'EROFS') {\n throw er\n }\n try {\n if (!opts.statSync(path).isDirectory()) throw er\n } catch (_) {\n throw er\n }\n }\n}\n\nexport const mkdirpManual = Object.assign(\n async (\n path: string,\n options?: MkdirpOptions,\n made?: string | undefined | void\n ): Promise => {\n const opts = optsArg(options)\n opts.recursive = false\n const parent = dirname(path)\n if (parent === path) {\n return opts.mkdirAsync(path, opts).catch(er => {\n // swallowed by recursive implementation on posix systems\n // any other error is a failure\n const fer = er as NodeJS.ErrnoException\n if (fer && fer.code !== 'EISDIR') {\n throw er\n }\n })\n }\n\n return opts.mkdirAsync(path, opts).then(\n () => made || path,\n async er => {\n const fer = er as NodeJS.ErrnoException\n if (fer && fer.code === 'ENOENT') {\n return mkdirpManual(parent, opts).then(\n (made?: string | undefined | void) => mkdirpManual(path, opts, made)\n )\n }\n if (fer && fer.code !== 'EEXIST' && fer.code !== 'EROFS') {\n throw er\n }\n return opts.statAsync(path).then(\n st => {\n if (st.isDirectory()) {\n return made\n } else {\n throw er\n }\n },\n () => {\n throw er\n }\n )\n }\n )\n },\n { sync: mkdirpManualSync }\n)\n"]}
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-native.d.ts b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-native.d.ts
new file mode 100644
index 00000000000..28b64814b25
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-native.d.ts
@@ -0,0 +1,6 @@
+import { MkdirpOptions } from './opts-arg.js';
+export declare const mkdirpNativeSync: (path: string, options?: MkdirpOptions) => string | void | undefined;
+export declare const mkdirpNative: ((path: string, options?: MkdirpOptions) => Promise) & {
+ sync: (path: string, options?: MkdirpOptions) => string | void | undefined;
+};
+//# sourceMappingURL=mkdirp-native.d.ts.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-native.d.ts.map b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-native.d.ts.map
new file mode 100644
index 00000000000..379c0f6591c
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-native.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"mkdirp-native.d.ts","sourceRoot":"","sources":["../../../src/mkdirp-native.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAW,MAAM,eAAe,CAAA;AAEtD,eAAO,MAAM,gBAAgB,SACrB,MAAM,YACF,aAAa,KACtB,MAAM,GAAG,IAAI,GAAG,SAoBlB,CAAA;AAED,eAAO,MAAM,YAAY,UAEf,MAAM,YACF,aAAa,KACtB,QAAQ,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;iBA5B/B,MAAM,YACF,aAAa,KACtB,MAAM,GAAG,IAAI,GAAG,SAAS;CAgD3B,CAAA"}
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-native.js b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-native.js
new file mode 100644
index 00000000000..9f00567d7cc
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-native.js
@@ -0,0 +1,50 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.mkdirpNative = exports.mkdirpNativeSync = void 0;
+const path_1 = require("path");
+const find_made_js_1 = require("./find-made.js");
+const mkdirp_manual_js_1 = require("./mkdirp-manual.js");
+const opts_arg_js_1 = require("./opts-arg.js");
+const mkdirpNativeSync = (path, options) => {
+ const opts = (0, opts_arg_js_1.optsArg)(options);
+ opts.recursive = true;
+ const parent = (0, path_1.dirname)(path);
+ if (parent === path) {
+ return opts.mkdirSync(path, opts);
+ }
+ const made = (0, find_made_js_1.findMadeSync)(opts, path);
+ try {
+ opts.mkdirSync(path, opts);
+ return made;
+ }
+ catch (er) {
+ const fer = er;
+ if (fer && fer.code === 'ENOENT') {
+ return (0, mkdirp_manual_js_1.mkdirpManualSync)(path, opts);
+ }
+ else {
+ throw er;
+ }
+ }
+};
+exports.mkdirpNativeSync = mkdirpNativeSync;
+exports.mkdirpNative = Object.assign(async (path, options) => {
+ const opts = { ...(0, opts_arg_js_1.optsArg)(options), recursive: true };
+ const parent = (0, path_1.dirname)(path);
+ if (parent === path) {
+ return await opts.mkdirAsync(path, opts);
+ }
+ return (0, find_made_js_1.findMade)(opts, path).then((made) => opts
+ .mkdirAsync(path, opts)
+ .then(m => made || m)
+ .catch(er => {
+ const fer = er;
+ if (fer && fer.code === 'ENOENT') {
+ return (0, mkdirp_manual_js_1.mkdirpManual)(path, opts);
+ }
+ else {
+ throw er;
+ }
+ }));
+}, { sync: exports.mkdirpNativeSync });
+//# sourceMappingURL=mkdirp-native.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-native.js.map b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-native.js.map
new file mode 100644
index 00000000000..1f889ee9887
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-native.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"mkdirp-native.js","sourceRoot":"","sources":["../../../src/mkdirp-native.ts"],"names":[],"mappings":";;;AAAA,+BAA8B;AAC9B,iDAAuD;AACvD,yDAAmE;AACnE,+CAAsD;AAE/C,MAAM,gBAAgB,GAAG,CAC9B,IAAY,EACZ,OAAuB,EACI,EAAE;IAC7B,MAAM,IAAI,GAAG,IAAA,qBAAO,EAAC,OAAO,CAAC,CAAA;IAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;IACrB,MAAM,MAAM,GAAG,IAAA,cAAO,EAAC,IAAI,CAAC,CAAA;IAC5B,IAAI,MAAM,KAAK,IAAI,EAAE;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;KAClC;IAED,MAAM,IAAI,GAAG,IAAA,2BAAY,EAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IACrC,IAAI;QACF,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAC1B,OAAO,IAAI,CAAA;KACZ;IAAC,OAAO,EAAE,EAAE;QACX,MAAM,GAAG,GAAG,EAA2B,CAAA;QACvC,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;YAChC,OAAO,IAAA,mCAAgB,EAAC,IAAI,EAAE,IAAI,CAAC,CAAA;SACpC;aAAM;YACL,MAAM,EAAE,CAAA;SACT;KACF;AACH,CAAC,CAAA;AAvBY,QAAA,gBAAgB,oBAuB5B;AAEY,QAAA,YAAY,GAAG,MAAM,CAAC,MAAM,CACvC,KAAK,EACH,IAAY,EACZ,OAAuB,EACa,EAAE;IACtC,MAAM,IAAI,GAAG,EAAE,GAAG,IAAA,qBAAO,EAAC,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAA;IACrD,MAAM,MAAM,GAAG,IAAA,cAAO,EAAC,IAAI,CAAC,CAAA;IAC5B,IAAI,MAAM,KAAK,IAAI,EAAE;QACnB,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;KACzC;IAED,OAAO,IAAA,uBAAQ,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAyB,EAAE,EAAE,CAC7D,IAAI;SACD,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC;SACtB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC;SACpB,KAAK,CAAC,EAAE,CAAC,EAAE;QACV,MAAM,GAAG,GAAG,EAA2B,CAAA;QACvC,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;YAChC,OAAO,IAAA,+BAAY,EAAC,IAAI,EAAE,IAAI,CAAC,CAAA;SAChC;aAAM;YACL,MAAM,EAAE,CAAA;SACT;IACH,CAAC,CAAC,CACL,CAAA;AACH,CAAC,EACD,EAAE,IAAI,EAAE,wBAAgB,EAAE,CAC3B,CAAA","sourcesContent":["import { dirname } from 'path'\nimport { findMade, findMadeSync } from './find-made.js'\nimport { mkdirpManual, mkdirpManualSync } from './mkdirp-manual.js'\nimport { MkdirpOptions, optsArg } from './opts-arg.js'\n\nexport const mkdirpNativeSync = (\n path: string,\n options?: MkdirpOptions\n): string | void | undefined => {\n const opts = optsArg(options)\n opts.recursive = true\n const parent = dirname(path)\n if (parent === path) {\n return opts.mkdirSync(path, opts)\n }\n\n const made = findMadeSync(opts, path)\n try {\n opts.mkdirSync(path, opts)\n return made\n } catch (er) {\n const fer = er as NodeJS.ErrnoException\n if (fer && fer.code === 'ENOENT') {\n return mkdirpManualSync(path, opts)\n } else {\n throw er\n }\n }\n}\n\nexport const mkdirpNative = Object.assign(\n async (\n path: string,\n options?: MkdirpOptions\n ): Promise => {\n const opts = { ...optsArg(options), recursive: true }\n const parent = dirname(path)\n if (parent === path) {\n return await opts.mkdirAsync(path, opts)\n }\n\n return findMade(opts, path).then((made?: string | undefined) =>\n opts\n .mkdirAsync(path, opts)\n .then(m => made || m)\n .catch(er => {\n const fer = er as NodeJS.ErrnoException\n if (fer && fer.code === 'ENOENT') {\n return mkdirpManual(path, opts)\n } else {\n throw er\n }\n })\n )\n },\n { sync: mkdirpNativeSync }\n)\n"]}
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/opts-arg.d.ts b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/opts-arg.d.ts
new file mode 100644
index 00000000000..73d076b3b69
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/opts-arg.d.ts
@@ -0,0 +1,42 @@
+///
+///
+import { MakeDirectoryOptions, Stats } from 'fs';
+export interface FsProvider {
+ stat?: (path: string, callback: (err: NodeJS.ErrnoException | null, stats: Stats) => any) => any;
+ mkdir?: (path: string, opts: MakeDirectoryOptions & {
+ recursive?: boolean;
+ }, callback: (err: NodeJS.ErrnoException | null, made?: string) => any) => any;
+ statSync?: (path: string) => Stats;
+ mkdirSync?: (path: string, opts: MakeDirectoryOptions & {
+ recursive?: boolean;
+ }) => string | undefined;
+}
+interface Options extends FsProvider {
+ mode?: number | string;
+ fs?: FsProvider;
+ mkdirAsync?: (path: string, opts: MakeDirectoryOptions & {
+ recursive?: boolean;
+ }) => Promise;
+ statAsync?: (path: string) => Promise;
+}
+export type MkdirpOptions = Options | number | string;
+export interface MkdirpOptionsResolved {
+ mode: number;
+ fs: FsProvider;
+ mkdirAsync: (path: string, opts: MakeDirectoryOptions & {
+ recursive?: boolean;
+ }) => Promise;
+ statAsync: (path: string) => Promise;
+ stat: (path: string, callback: (err: NodeJS.ErrnoException | null, stats: Stats) => any) => any;
+ mkdir: (path: string, opts: MakeDirectoryOptions & {
+ recursive?: boolean;
+ }, callback: (err: NodeJS.ErrnoException | null, made?: string) => any) => any;
+ statSync: (path: string) => Stats;
+ mkdirSync: (path: string, opts: MakeDirectoryOptions & {
+ recursive?: boolean;
+ }) => string | undefined;
+ recursive?: boolean;
+}
+export declare const optsArg: (opts?: MkdirpOptions) => MkdirpOptionsResolved;
+export {};
+//# sourceMappingURL=opts-arg.d.ts.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/opts-arg.d.ts.map b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/opts-arg.d.ts.map
new file mode 100644
index 00000000000..e575161714f
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/opts-arg.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"opts-arg.d.ts","sourceRoot":"","sources":["../../../src/opts-arg.ts"],"names":[],"mappings":";;AAAA,OAAO,EACL,oBAAoB,EAIpB,KAAK,EAEN,MAAM,IAAI,CAAA;AAEX,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,CACL,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,KAAK,GAAG,KAC/D,GAAG,CAAA;IACR,KAAK,CAAC,EAAE,CACN,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,oBAAoB,GAAG;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,EACpD,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,GAAG,KAChE,GAAG,CAAA;IACR,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAA;IAClC,SAAS,CAAC,EAAE,CACV,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,oBAAoB,GAAG;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,KACjD,MAAM,GAAG,SAAS,CAAA;CACxB;AAED,UAAU,OAAQ,SAAQ,UAAU;IAClC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,EAAE,CAAC,EAAE,UAAU,CAAA;IACf,UAAU,CAAC,EAAE,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,oBAAoB,GAAG;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,KACjD,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAChC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,CAAA;CAC7C;AAED,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA;AAErD,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,UAAU,CAAA;IACd,UAAU,EAAE,CACV,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,oBAAoB,GAAG;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,KACjD,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAChC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,CAAA;IAC3C,IAAI,EAAE,CACJ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,KAAK,GAAG,KAC/D,GAAG,CAAA;IACR,KAAK,EAAE,CACL,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,oBAAoB,GAAG;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,EACpD,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,GAAG,KAChE,GAAG,CAAA;IACR,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAA;IACjC,SAAS,EAAE,CACT,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,oBAAoB,GAAG;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,KACjD,MAAM,GAAG,SAAS,CAAA;IACvB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,eAAO,MAAM,OAAO,UAAW,aAAa,KAAG,qBA2C9C,CAAA"}
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/opts-arg.js b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/opts-arg.js
new file mode 100644
index 00000000000..e8f486c0905
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/opts-arg.js
@@ -0,0 +1,38 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.optsArg = void 0;
+const fs_1 = require("fs");
+const optsArg = (opts) => {
+ if (!opts) {
+ opts = { mode: 0o777 };
+ }
+ else if (typeof opts === 'object') {
+ opts = { mode: 0o777, ...opts };
+ }
+ else if (typeof opts === 'number') {
+ opts = { mode: opts };
+ }
+ else if (typeof opts === 'string') {
+ opts = { mode: parseInt(opts, 8) };
+ }
+ else {
+ throw new TypeError('invalid options argument');
+ }
+ const resolved = opts;
+ const optsFs = opts.fs || {};
+ opts.mkdir = opts.mkdir || optsFs.mkdir || fs_1.mkdir;
+ opts.mkdirAsync = opts.mkdirAsync
+ ? opts.mkdirAsync
+ : async (path, options) => {
+ return new Promise((res, rej) => resolved.mkdir(path, options, (er, made) => er ? rej(er) : res(made)));
+ };
+ opts.stat = opts.stat || optsFs.stat || fs_1.stat;
+ opts.statAsync = opts.statAsync
+ ? opts.statAsync
+ : async (path) => new Promise((res, rej) => resolved.stat(path, (err, stats) => (err ? rej(err) : res(stats))));
+ opts.statSync = opts.statSync || optsFs.statSync || fs_1.statSync;
+ opts.mkdirSync = opts.mkdirSync || optsFs.mkdirSync || fs_1.mkdirSync;
+ return resolved;
+};
+exports.optsArg = optsArg;
+//# sourceMappingURL=opts-arg.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/opts-arg.js.map b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/opts-arg.js.map
new file mode 100644
index 00000000000..fd5590f40f5
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/opts-arg.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"opts-arg.js","sourceRoot":"","sources":["../../../src/opts-arg.ts"],"names":[],"mappings":";;;AAAA,2BAOW;AAwDJ,MAAM,OAAO,GAAG,CAAC,IAAoB,EAAyB,EAAE;IACrE,IAAI,CAAC,IAAI,EAAE;QACT,IAAI,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;KACvB;SAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QACnC,IAAI,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,CAAA;KAChC;SAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QACnC,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;KACtB;SAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QACnC,IAAI,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAA;KACnC;SAAM;QACL,MAAM,IAAI,SAAS,CAAC,0BAA0B,CAAC,CAAA;KAChD;IAED,MAAM,QAAQ,GAAG,IAA6B,CAAA;IAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,IAAI,EAAE,CAAA;IAE5B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,IAAI,UAAK,CAAA;IAEhD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;QAC/B,CAAC,CAAC,IAAI,CAAC,UAAU;QACjB,CAAC,CAAC,KAAK,EACH,IAAY,EACZ,OAAuD,EAC1B,EAAE;YAC/B,OAAO,IAAI,OAAO,CAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAClD,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CACzC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CACzB,CACF,CAAA;QACH,CAAC,CAAA;IAEL,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,SAAI,CAAA;IAC5C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;QAC7B,CAAC,CAAC,IAAI,CAAC,SAAS;QAChB,CAAC,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE,CACrB,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CACvB,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CACnE,CAAA;IAEP,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,IAAI,aAAQ,CAAA;IAC5D,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,IAAI,cAAS,CAAA;IAEhE,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA;AA3CY,QAAA,OAAO,WA2CnB","sourcesContent":["import {\n MakeDirectoryOptions,\n mkdir,\n mkdirSync,\n stat,\n Stats,\n statSync,\n} from 'fs'\n\nexport interface FsProvider {\n stat?: (\n path: string,\n callback: (err: NodeJS.ErrnoException | null, stats: Stats) => any\n ) => any\n mkdir?: (\n path: string,\n opts: MakeDirectoryOptions & { recursive?: boolean },\n callback: (err: NodeJS.ErrnoException | null, made?: string) => any\n ) => any\n statSync?: (path: string) => Stats\n mkdirSync?: (\n path: string,\n opts: MakeDirectoryOptions & { recursive?: boolean }\n ) => string | undefined\n}\n\ninterface Options extends FsProvider {\n mode?: number | string\n fs?: FsProvider\n mkdirAsync?: (\n path: string,\n opts: MakeDirectoryOptions & { recursive?: boolean }\n ) => Promise\n statAsync?: (path: string) => Promise\n}\n\nexport type MkdirpOptions = Options | number | string\n\nexport interface MkdirpOptionsResolved {\n mode: number\n fs: FsProvider\n mkdirAsync: (\n path: string,\n opts: MakeDirectoryOptions & { recursive?: boolean }\n ) => Promise\n statAsync: (path: string) => Promise\n stat: (\n path: string,\n callback: (err: NodeJS.ErrnoException | null, stats: Stats) => any\n ) => any\n mkdir: (\n path: string,\n opts: MakeDirectoryOptions & { recursive?: boolean },\n callback: (err: NodeJS.ErrnoException | null, made?: string) => any\n ) => any\n statSync: (path: string) => Stats\n mkdirSync: (\n path: string,\n opts: MakeDirectoryOptions & { recursive?: boolean }\n ) => string | undefined\n recursive?: boolean\n}\n\nexport const optsArg = (opts?: MkdirpOptions): MkdirpOptionsResolved => {\n if (!opts) {\n opts = { mode: 0o777 }\n } else if (typeof opts === 'object') {\n opts = { mode: 0o777, ...opts }\n } else if (typeof opts === 'number') {\n opts = { mode: opts }\n } else if (typeof opts === 'string') {\n opts = { mode: parseInt(opts, 8) }\n } else {\n throw new TypeError('invalid options argument')\n }\n\n const resolved = opts as MkdirpOptionsResolved\n const optsFs = opts.fs || {}\n\n opts.mkdir = opts.mkdir || optsFs.mkdir || mkdir\n\n opts.mkdirAsync = opts.mkdirAsync\n ? opts.mkdirAsync\n : async (\n path: string,\n options: MakeDirectoryOptions & { recursive?: boolean }\n ): Promise => {\n return new Promise((res, rej) =>\n resolved.mkdir(path, options, (er, made) =>\n er ? rej(er) : res(made)\n )\n )\n }\n\n opts.stat = opts.stat || optsFs.stat || stat\n opts.statAsync = opts.statAsync\n ? opts.statAsync\n : async (path: string) =>\n new Promise((res, rej) =>\n resolved.stat(path, (err, stats) => (err ? rej(err) : res(stats)))\n )\n\n opts.statSync = opts.statSync || optsFs.statSync || statSync\n opts.mkdirSync = opts.mkdirSync || optsFs.mkdirSync || mkdirSync\n\n return resolved\n}\n"]}
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/path-arg.d.ts b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/path-arg.d.ts
new file mode 100644
index 00000000000..ad0ccfc482a
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/path-arg.d.ts
@@ -0,0 +1,2 @@
+export declare const pathArg: (path: string) => string;
+//# sourceMappingURL=path-arg.d.ts.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/path-arg.d.ts.map b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/path-arg.d.ts.map
new file mode 100644
index 00000000000..3b52b077c6c
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/path-arg.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"path-arg.d.ts","sourceRoot":"","sources":["../../../src/path-arg.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,OAAO,SAAU,MAAM,WAyBnC,CAAA"}
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/path-arg.js b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/path-arg.js
new file mode 100644
index 00000000000..a6b457f6e23
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/path-arg.js
@@ -0,0 +1,28 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.pathArg = void 0;
+const platform = process.env.__TESTING_MKDIRP_PLATFORM__ || process.platform;
+const path_1 = require("path");
+const pathArg = (path) => {
+ if (/\0/.test(path)) {
+ // simulate same failure that node raises
+ throw Object.assign(new TypeError('path must be a string without null bytes'), {
+ path,
+ code: 'ERR_INVALID_ARG_VALUE',
+ });
+ }
+ path = (0, path_1.resolve)(path);
+ if (platform === 'win32') {
+ const badWinChars = /[*|"<>?:]/;
+ const { root } = (0, path_1.parse)(path);
+ if (badWinChars.test(path.substring(root.length))) {
+ throw Object.assign(new Error('Illegal characters in path.'), {
+ path,
+ code: 'EINVAL',
+ });
+ }
+ }
+ return path;
+};
+exports.pathArg = pathArg;
+//# sourceMappingURL=path-arg.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/path-arg.js.map b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/path-arg.js.map
new file mode 100644
index 00000000000..ad3b5d38cad
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/path-arg.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"path-arg.js","sourceRoot":"","sources":["../../../src/path-arg.ts"],"names":[],"mappings":";;;AAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,OAAO,CAAC,QAAQ,CAAA;AAC5E,+BAAqC;AAC9B,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,EAAE;IACtC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACnB,yCAAyC;QACzC,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,SAAS,CAAC,0CAA0C,CAAC,EACzD;YACE,IAAI;YACJ,IAAI,EAAE,uBAAuB;SAC9B,CACF,CAAA;KACF;IAED,IAAI,GAAG,IAAA,cAAO,EAAC,IAAI,CAAC,CAAA;IACpB,IAAI,QAAQ,KAAK,OAAO,EAAE;QACxB,MAAM,WAAW,GAAG,WAAW,CAAA;QAC/B,MAAM,EAAE,IAAI,EAAE,GAAG,IAAA,YAAK,EAAC,IAAI,CAAC,CAAA;QAC5B,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE;YACjD,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,EAAE;gBAC5D,IAAI;gBACJ,IAAI,EAAE,QAAQ;aACf,CAAC,CAAA;SACH;KACF;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAzBY,QAAA,OAAO,WAyBnB","sourcesContent":["const platform = process.env.__TESTING_MKDIRP_PLATFORM__ || process.platform\nimport { parse, resolve } from 'path'\nexport const pathArg = (path: string) => {\n if (/\\0/.test(path)) {\n // simulate same failure that node raises\n throw Object.assign(\n new TypeError('path must be a string without null bytes'),\n {\n path,\n code: 'ERR_INVALID_ARG_VALUE',\n }\n )\n }\n\n path = resolve(path)\n if (platform === 'win32') {\n const badWinChars = /[*|\"<>?:]/\n const { root } = parse(path)\n if (badWinChars.test(path.substring(root.length))) {\n throw Object.assign(new Error('Illegal characters in path.'), {\n path,\n code: 'EINVAL',\n })\n }\n }\n\n return path\n}\n"]}
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/use-native.d.ts b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/use-native.d.ts
new file mode 100644
index 00000000000..1c6cb619e30
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/use-native.d.ts
@@ -0,0 +1,6 @@
+import { MkdirpOptions } from './opts-arg.js';
+export declare const useNativeSync: (opts?: MkdirpOptions) => boolean;
+export declare const useNative: ((opts?: MkdirpOptions) => boolean) & {
+ sync: (opts?: MkdirpOptions) => boolean;
+};
+//# sourceMappingURL=use-native.d.ts.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/use-native.d.ts.map b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/use-native.d.ts.map
new file mode 100644
index 00000000000..7dc275e322e
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/use-native.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"use-native.d.ts","sourceRoot":"","sources":["../../../src/use-native.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAW,MAAM,eAAe,CAAA;AAMtD,eAAO,MAAM,aAAa,UAEd,aAAa,YAA0C,CAAA;AAEnE,eAAO,MAAM,SAAS,WAGR,aAAa;kBALf,aAAa;CASxB,CAAA"}
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/use-native.js b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/use-native.js
new file mode 100644
index 00000000000..550b3452688
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/use-native.js
@@ -0,0 +1,17 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.useNative = exports.useNativeSync = void 0;
+const fs_1 = require("fs");
+const opts_arg_js_1 = require("./opts-arg.js");
+const version = process.env.__TESTING_MKDIRP_NODE_VERSION__ || process.version;
+const versArr = version.replace(/^v/, '').split('.');
+const hasNative = +versArr[0] > 10 || (+versArr[0] === 10 && +versArr[1] >= 12);
+exports.useNativeSync = !hasNative
+ ? () => false
+ : (opts) => (0, opts_arg_js_1.optsArg)(opts).mkdirSync === fs_1.mkdirSync;
+exports.useNative = Object.assign(!hasNative
+ ? () => false
+ : (opts) => (0, opts_arg_js_1.optsArg)(opts).mkdir === fs_1.mkdir, {
+ sync: exports.useNativeSync,
+});
+//# sourceMappingURL=use-native.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/use-native.js.map b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/use-native.js.map
new file mode 100644
index 00000000000..9a15efebb9e
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/use-native.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"use-native.js","sourceRoot":"","sources":["../../../src/use-native.ts"],"names":[],"mappings":";;;AAAA,2BAAqC;AACrC,+CAAsD;AAEtD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,+BAA+B,IAAI,OAAO,CAAC,OAAO,CAAA;AAC9E,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AACpD,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;AAElE,QAAA,aAAa,GAAG,CAAC,SAAS;IACrC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK;IACb,CAAC,CAAC,CAAC,IAAoB,EAAE,EAAE,CAAC,IAAA,qBAAO,EAAC,IAAI,CAAC,CAAC,SAAS,KAAK,cAAS,CAAA;AAEtD,QAAA,SAAS,GAAG,MAAM,CAAC,MAAM,CACpC,CAAC,SAAS;IACR,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK;IACb,CAAC,CAAC,CAAC,IAAoB,EAAE,EAAE,CAAC,IAAA,qBAAO,EAAC,IAAI,CAAC,CAAC,KAAK,KAAK,UAAK,EAC3D;IACE,IAAI,EAAE,qBAAa;CACpB,CACF,CAAA","sourcesContent":["import { mkdir, mkdirSync } from 'fs'\nimport { MkdirpOptions, optsArg } from './opts-arg.js'\n\nconst version = process.env.__TESTING_MKDIRP_NODE_VERSION__ || process.version\nconst versArr = version.replace(/^v/, '').split('.')\nconst hasNative = +versArr[0] > 10 || (+versArr[0] === 10 && +versArr[1] >= 12)\n\nexport const useNativeSync = !hasNative\n ? () => false\n : (opts?: MkdirpOptions) => optsArg(opts).mkdirSync === mkdirSync\n\nexport const useNative = Object.assign(\n !hasNative\n ? () => false\n : (opts?: MkdirpOptions) => optsArg(opts).mkdir === mkdir,\n {\n sync: useNativeSync,\n }\n)\n"]}
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/find-made.d.ts b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/find-made.d.ts
new file mode 100644
index 00000000000..e47794b3bb7
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/find-made.d.ts
@@ -0,0 +1,4 @@
+import { MkdirpOptionsResolved } from './opts-arg.js';
+export declare const findMade: (opts: MkdirpOptionsResolved, parent: string, path?: string) => Promise;
+export declare const findMadeSync: (opts: MkdirpOptionsResolved, parent: string, path?: string) => undefined | string;
+//# sourceMappingURL=find-made.d.ts.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/find-made.d.ts.map b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/find-made.d.ts.map
new file mode 100644
index 00000000000..411aad1410e
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/find-made.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"find-made.d.ts","sourceRoot":"","sources":["../../src/find-made.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAErD,eAAO,MAAM,QAAQ,SACb,qBAAqB,UACnB,MAAM,SACP,MAAM,KACZ,QAAQ,SAAS,GAAG,MAAM,CAe5B,CAAA;AAED,eAAO,MAAM,YAAY,SACjB,qBAAqB,UACnB,MAAM,SACP,MAAM,KACZ,SAAS,GAAG,MAad,CAAA"}
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/find-made.js b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/find-made.js
new file mode 100644
index 00000000000..3e72fd59a2c
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/find-made.js
@@ -0,0 +1,30 @@
+import { dirname } from 'path';
+export const findMade = async (opts, parent, path) => {
+ // we never want the 'made' return value to be a root directory
+ if (path === parent) {
+ return;
+ }
+ return opts.statAsync(parent).then(st => (st.isDirectory() ? path : undefined), // will fail later
+ // will fail later
+ er => {
+ const fer = er;
+ return fer && fer.code === 'ENOENT'
+ ? findMade(opts, dirname(parent), parent)
+ : undefined;
+ });
+};
+export const findMadeSync = (opts, parent, path) => {
+ if (path === parent) {
+ return undefined;
+ }
+ try {
+ return opts.statSync(parent).isDirectory() ? path : undefined;
+ }
+ catch (er) {
+ const fer = er;
+ return fer && fer.code === 'ENOENT'
+ ? findMadeSync(opts, dirname(parent), parent)
+ : undefined;
+ }
+};
+//# sourceMappingURL=find-made.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/find-made.js.map b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/find-made.js.map
new file mode 100644
index 00000000000..7b58089c626
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/find-made.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"find-made.js","sourceRoot":"","sources":["../../src/find-made.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAG9B,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAC3B,IAA2B,EAC3B,MAAc,EACd,IAAa,EACgB,EAAE;IAC/B,+DAA+D;IAC/D,IAAI,IAAI,KAAK,MAAM,EAAE;QACnB,OAAM;KACP;IAED,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAChC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,kBAAkB;IAC/D,AAD6C,kBAAkB;IAC/D,EAAE,CAAC,EAAE;QACH,MAAM,GAAG,GAAG,EAA2B,CAAA;QACvC,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;YACjC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;YACzC,CAAC,CAAC,SAAS,CAAA;IACf,CAAC,CACF,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,IAA2B,EAC3B,MAAc,EACd,IAAa,EACO,EAAE;IACtB,IAAI,IAAI,KAAK,MAAM,EAAE;QACnB,OAAO,SAAS,CAAA;KACjB;IAED,IAAI;QACF,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;KAC9D;IAAC,OAAO,EAAE,EAAE;QACX,MAAM,GAAG,GAAG,EAA2B,CAAA;QACvC,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;YACjC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;YAC7C,CAAC,CAAC,SAAS,CAAA;KACd;AACH,CAAC,CAAA","sourcesContent":["import { dirname } from 'path'\nimport { MkdirpOptionsResolved } from './opts-arg.js'\n\nexport const findMade = async (\n opts: MkdirpOptionsResolved,\n parent: string,\n path?: string\n): Promise => {\n // we never want the 'made' return value to be a root directory\n if (path === parent) {\n return\n }\n\n return opts.statAsync(parent).then(\n st => (st.isDirectory() ? path : undefined), // will fail later\n er => {\n const fer = er as NodeJS.ErrnoException\n return fer && fer.code === 'ENOENT'\n ? findMade(opts, dirname(parent), parent)\n : undefined\n }\n )\n}\n\nexport const findMadeSync = (\n opts: MkdirpOptionsResolved,\n parent: string,\n path?: string\n): undefined | string => {\n if (path === parent) {\n return undefined\n }\n\n try {\n return opts.statSync(parent).isDirectory() ? path : undefined\n } catch (er) {\n const fer = er as NodeJS.ErrnoException\n return fer && fer.code === 'ENOENT'\n ? findMadeSync(opts, dirname(parent), parent)\n : undefined\n }\n}\n"]}
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/index.d.ts b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/index.d.ts
new file mode 100644
index 00000000000..fc9e43b3a45
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/index.d.ts
@@ -0,0 +1,39 @@
+import { MkdirpOptions } from './opts-arg.js';
+export { mkdirpManual, mkdirpManualSync } from './mkdirp-manual.js';
+export { mkdirpNative, mkdirpNativeSync } from './mkdirp-native.js';
+export { useNative, useNativeSync } from './use-native.js';
+export declare const mkdirpSync: (path: string, opts?: MkdirpOptions) => string | void;
+export declare const sync: (path: string, opts?: MkdirpOptions) => string | void;
+export declare const manual: ((path: string, options?: MkdirpOptions | undefined, made?: string | void | undefined) => Promise) & {
+ sync: (path: string, options?: MkdirpOptions | undefined, made?: string | void | undefined) => string | void | undefined;
+};
+export declare const manualSync: (path: string, options?: MkdirpOptions | undefined, made?: string | void | undefined) => string | void | undefined;
+export declare const native: ((path: string, options?: MkdirpOptions | undefined) => Promise) & {
+ sync: (path: string, options?: MkdirpOptions | undefined) => string | void | undefined;
+};
+export declare const nativeSync: (path: string, options?: MkdirpOptions | undefined) => string | void | undefined;
+export declare const mkdirp: ((path: string, opts?: MkdirpOptions) => Promise) & {
+ mkdirpSync: (path: string, opts?: MkdirpOptions) => string | void;
+ mkdirpNative: ((path: string, options?: MkdirpOptions | undefined) => Promise) & {
+ sync: (path: string, options?: MkdirpOptions | undefined) => string | void | undefined;
+ };
+ mkdirpNativeSync: (path: string, options?: MkdirpOptions | undefined) => string | void | undefined;
+ mkdirpManual: ((path: string, options?: MkdirpOptions | undefined, made?: string | void | undefined) => Promise) & {
+ sync: (path: string, options?: MkdirpOptions | undefined, made?: string | void | undefined) => string | void | undefined;
+ };
+ mkdirpManualSync: (path: string, options?: MkdirpOptions | undefined, made?: string | void | undefined) => string | void | undefined;
+ sync: (path: string, opts?: MkdirpOptions) => string | void;
+ native: ((path: string, options?: MkdirpOptions | undefined) => Promise) & {
+ sync: (path: string, options?: MkdirpOptions | undefined) => string | void | undefined;
+ };
+ nativeSync: (path: string, options?: MkdirpOptions | undefined) => string | void | undefined;
+ manual: ((path: string, options?: MkdirpOptions | undefined, made?: string | void | undefined) => Promise) & {
+ sync: (path: string, options?: MkdirpOptions | undefined, made?: string | void | undefined) => string | void | undefined;
+ };
+ manualSync: (path: string, options?: MkdirpOptions | undefined, made?: string | void | undefined) => string | void | undefined;
+ useNative: ((opts?: MkdirpOptions | undefined) => boolean) & {
+ sync: (opts?: MkdirpOptions | undefined) => boolean;
+ };
+ useNativeSync: (opts?: MkdirpOptions | undefined) => boolean;
+};
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/index.d.ts.map b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/index.d.ts.map
new file mode 100644
index 00000000000..cfcc7808385
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAW,MAAM,eAAe,CAAA;AAItD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACnE,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAG1D,eAAO,MAAM,UAAU,SAAU,MAAM,SAAS,aAAa,kBAM5D,CAAA;AAED,eAAO,MAAM,IAAI,SARgB,MAAM,SAAS,aAAa,kBAQ/B,CAAA;AAC9B,eAAO,MAAM,MAAM;;CAAe,CAAA;AAClC,eAAO,MAAM,UAAU,oHAAmB,CAAA;AAC1C,eAAO,MAAM,MAAM;;CAAe,CAAA;AAClC,eAAO,MAAM,UAAU,kFAAmB,CAAA;AAC1C,eAAO,MAAM,MAAM,UACJ,MAAM,SAAS,aAAa;uBAdV,MAAM,SAAS,aAAa;;;;;;;;;iBAA5B,MAAM,SAAS,aAAa;;;;;;;;;;;;;CAoC5D,CAAA"}
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/index.js b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/index.js
new file mode 100644
index 00000000000..0217ecc8cdd
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/index.js
@@ -0,0 +1,43 @@
+import { mkdirpManual, mkdirpManualSync } from './mkdirp-manual.js';
+import { mkdirpNative, mkdirpNativeSync } from './mkdirp-native.js';
+import { optsArg } from './opts-arg.js';
+import { pathArg } from './path-arg.js';
+import { useNative, useNativeSync } from './use-native.js';
+/* c8 ignore start */
+export { mkdirpManual, mkdirpManualSync } from './mkdirp-manual.js';
+export { mkdirpNative, mkdirpNativeSync } from './mkdirp-native.js';
+export { useNative, useNativeSync } from './use-native.js';
+/* c8 ignore stop */
+export const mkdirpSync = (path, opts) => {
+ path = pathArg(path);
+ const resolved = optsArg(opts);
+ return useNativeSync(resolved)
+ ? mkdirpNativeSync(path, resolved)
+ : mkdirpManualSync(path, resolved);
+};
+export const sync = mkdirpSync;
+export const manual = mkdirpManual;
+export const manualSync = mkdirpManualSync;
+export const native = mkdirpNative;
+export const nativeSync = mkdirpNativeSync;
+export const mkdirp = Object.assign(async (path, opts) => {
+ path = pathArg(path);
+ const resolved = optsArg(opts);
+ return useNative(resolved)
+ ? mkdirpNative(path, resolved)
+ : mkdirpManual(path, resolved);
+}, {
+ mkdirpSync,
+ mkdirpNative,
+ mkdirpNativeSync,
+ mkdirpManual,
+ mkdirpManualSync,
+ sync: mkdirpSync,
+ native: mkdirpNative,
+ nativeSync: mkdirpNativeSync,
+ manual: mkdirpManual,
+ manualSync: mkdirpManualSync,
+ useNative,
+ useNativeSync,
+});
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/index.js.map b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/index.js.map
new file mode 100644
index 00000000000..47a8133a070
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACnE,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACnE,OAAO,EAAiB,OAAO,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC1D,qBAAqB;AACrB,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACnE,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC1D,oBAAoB;AAEpB,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,IAAoB,EAAE,EAAE;IAC/D,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACpB,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9B,OAAO,aAAa,CAAC,QAAQ,CAAC;QAC5B,CAAC,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC;QAClC,CAAC,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;AACtC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,UAAU,CAAA;AAC9B,MAAM,CAAC,MAAM,MAAM,GAAG,YAAY,CAAA;AAClC,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,CAAA;AAC1C,MAAM,CAAC,MAAM,MAAM,GAAG,YAAY,CAAA;AAClC,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,CAAA;AAC1C,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CACjC,KAAK,EAAE,IAAY,EAAE,IAAoB,EAAE,EAAE;IAC3C,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACpB,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9B,OAAO,SAAS,CAAC,QAAQ,CAAC;QACxB,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC;QAC9B,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;AAClC,CAAC,EACD;IACE,UAAU;IACV,YAAY;IACZ,gBAAgB;IAChB,YAAY;IACZ,gBAAgB;IAEhB,IAAI,EAAE,UAAU;IAChB,MAAM,EAAE,YAAY;IACpB,UAAU,EAAE,gBAAgB;IAC5B,MAAM,EAAE,YAAY;IACpB,UAAU,EAAE,gBAAgB;IAC5B,SAAS;IACT,aAAa;CACd,CACF,CAAA","sourcesContent":["import { mkdirpManual, mkdirpManualSync } from './mkdirp-manual.js'\nimport { mkdirpNative, mkdirpNativeSync } from './mkdirp-native.js'\nimport { MkdirpOptions, optsArg } from './opts-arg.js'\nimport { pathArg } from './path-arg.js'\nimport { useNative, useNativeSync } from './use-native.js'\n/* c8 ignore start */\nexport { mkdirpManual, mkdirpManualSync } from './mkdirp-manual.js'\nexport { mkdirpNative, mkdirpNativeSync } from './mkdirp-native.js'\nexport { useNative, useNativeSync } from './use-native.js'\n/* c8 ignore stop */\n\nexport const mkdirpSync = (path: string, opts?: MkdirpOptions) => {\n path = pathArg(path)\n const resolved = optsArg(opts)\n return useNativeSync(resolved)\n ? mkdirpNativeSync(path, resolved)\n : mkdirpManualSync(path, resolved)\n}\n\nexport const sync = mkdirpSync\nexport const manual = mkdirpManual\nexport const manualSync = mkdirpManualSync\nexport const native = mkdirpNative\nexport const nativeSync = mkdirpNativeSync\nexport const mkdirp = Object.assign(\n async (path: string, opts?: MkdirpOptions) => {\n path = pathArg(path)\n const resolved = optsArg(opts)\n return useNative(resolved)\n ? mkdirpNative(path, resolved)\n : mkdirpManual(path, resolved)\n },\n {\n mkdirpSync,\n mkdirpNative,\n mkdirpNativeSync,\n mkdirpManual,\n mkdirpManualSync,\n\n sync: mkdirpSync,\n native: mkdirpNative,\n nativeSync: mkdirpNativeSync,\n manual: mkdirpManual,\n manualSync: mkdirpManualSync,\n useNative,\n useNativeSync,\n }\n)\n"]}
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-manual.d.ts b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-manual.d.ts
new file mode 100644
index 00000000000..e49cdf9f1bd
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-manual.d.ts
@@ -0,0 +1,6 @@
+import { MkdirpOptions } from './opts-arg.js';
+export declare const mkdirpManualSync: (path: string, options?: MkdirpOptions, made?: string | undefined | void) => string | undefined | void;
+export declare const mkdirpManual: ((path: string, options?: MkdirpOptions, made?: string | undefined | void) => Promise) & {
+ sync: (path: string, options?: MkdirpOptions, made?: string | undefined | void) => string | undefined | void;
+};
+//# sourceMappingURL=mkdirp-manual.d.ts.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-manual.d.ts.map b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-manual.d.ts.map
new file mode 100644
index 00000000000..ae7f243d3ca
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-manual.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"mkdirp-manual.d.ts","sourceRoot":"","sources":["../../src/mkdirp-manual.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAW,MAAM,eAAe,CAAA;AAEtD,eAAO,MAAM,gBAAgB,SACrB,MAAM,YACF,aAAa,SAChB,MAAM,GAAG,SAAS,GAAG,IAAI,KAC/B,MAAM,GAAG,SAAS,GAAG,IAmCvB,CAAA;AAED,eAAO,MAAM,YAAY,UAEf,MAAM,YACF,aAAa,SAChB,MAAM,GAAG,SAAS,GAAG,IAAI,KAC/B,QAAQ,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;iBA7C/B,MAAM,YACF,aAAa,SAChB,MAAM,GAAG,SAAS,GAAG,IAAI,KAC/B,MAAM,GAAG,SAAS,GAAG,IAAI;CAqF3B,CAAA"}
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-manual.js b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-manual.js
new file mode 100644
index 00000000000..a4d044e02d3
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-manual.js
@@ -0,0 +1,75 @@
+import { dirname } from 'path';
+import { optsArg } from './opts-arg.js';
+export const mkdirpManualSync = (path, options, made) => {
+ const parent = dirname(path);
+ const opts = { ...optsArg(options), recursive: false };
+ if (parent === path) {
+ try {
+ return opts.mkdirSync(path, opts);
+ }
+ catch (er) {
+ // swallowed by recursive implementation on posix systems
+ // any other error is a failure
+ const fer = er;
+ if (fer && fer.code !== 'EISDIR') {
+ throw er;
+ }
+ return;
+ }
+ }
+ try {
+ opts.mkdirSync(path, opts);
+ return made || path;
+ }
+ catch (er) {
+ const fer = er;
+ if (fer && fer.code === 'ENOENT') {
+ return mkdirpManualSync(path, opts, mkdirpManualSync(parent, opts, made));
+ }
+ if (fer && fer.code !== 'EEXIST' && fer && fer.code !== 'EROFS') {
+ throw er;
+ }
+ try {
+ if (!opts.statSync(path).isDirectory())
+ throw er;
+ }
+ catch (_) {
+ throw er;
+ }
+ }
+};
+export const mkdirpManual = Object.assign(async (path, options, made) => {
+ const opts = optsArg(options);
+ opts.recursive = false;
+ const parent = dirname(path);
+ if (parent === path) {
+ return opts.mkdirAsync(path, opts).catch(er => {
+ // swallowed by recursive implementation on posix systems
+ // any other error is a failure
+ const fer = er;
+ if (fer && fer.code !== 'EISDIR') {
+ throw er;
+ }
+ });
+ }
+ return opts.mkdirAsync(path, opts).then(() => made || path, async (er) => {
+ const fer = er;
+ if (fer && fer.code === 'ENOENT') {
+ return mkdirpManual(parent, opts).then((made) => mkdirpManual(path, opts, made));
+ }
+ if (fer && fer.code !== 'EEXIST' && fer.code !== 'EROFS') {
+ throw er;
+ }
+ return opts.statAsync(path).then(st => {
+ if (st.isDirectory()) {
+ return made;
+ }
+ else {
+ throw er;
+ }
+ }, () => {
+ throw er;
+ });
+ });
+}, { sync: mkdirpManualSync });
+//# sourceMappingURL=mkdirp-manual.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-manual.js.map b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-manual.js.map
new file mode 100644
index 00000000000..29eab250e12
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-manual.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"mkdirp-manual.js","sourceRoot":"","sources":["../../src/mkdirp-manual.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAC9B,OAAO,EAAiB,OAAO,EAAE,MAAM,eAAe,CAAA;AAEtD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,IAAY,EACZ,OAAuB,EACvB,IAAgC,EACL,EAAE;IAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B,MAAM,IAAI,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;IAEtD,IAAI,MAAM,KAAK,IAAI,EAAE;QACnB,IAAI;YACF,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;SAClC;QAAC,OAAO,EAAE,EAAE;YACX,yDAAyD;YACzD,+BAA+B;YAC/B,MAAM,GAAG,GAAG,EAA2B,CAAA;YACvC,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;gBAChC,MAAM,EAAE,CAAA;aACT;YACD,OAAM;SACP;KACF;IAED,IAAI;QACF,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAC1B,OAAO,IAAI,IAAI,IAAI,CAAA;KACpB;IAAC,OAAO,EAAE,EAAE;QACX,MAAM,GAAG,GAAG,EAA2B,CAAA;QACvC,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;YAChC,OAAO,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;SAC1E;QACD,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE;YAC/D,MAAM,EAAE,CAAA;SACT;QACD,IAAI;YACF,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE;gBAAE,MAAM,EAAE,CAAA;SACjD;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,EAAE,CAAA;SACT;KACF;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CACvC,KAAK,EACH,IAAY,EACZ,OAAuB,EACvB,IAAgC,EACI,EAAE;IACtC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC7B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;IACtB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B,IAAI,MAAM,KAAK,IAAI,EAAE;QACnB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;YAC5C,yDAAyD;YACzD,+BAA+B;YAC/B,MAAM,GAAG,GAAG,EAA2B,CAAA;YACvC,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;gBAChC,MAAM,EAAE,CAAA;aACT;QACH,CAAC,CAAC,CAAA;KACH;IAED,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CACrC,GAAG,EAAE,CAAC,IAAI,IAAI,IAAI,EAClB,KAAK,EAAC,EAAE,EAAC,EAAE;QACT,MAAM,GAAG,GAAG,EAA2B,CAAA;QACvC,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;YAChC,OAAO,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CACpC,CAAC,IAAgC,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CACrE,CAAA;SACF;QACD,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE;YACxD,MAAM,EAAE,CAAA;SACT;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAC9B,EAAE,CAAC,EAAE;YACH,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE;gBACpB,OAAO,IAAI,CAAA;aACZ;iBAAM;gBACL,MAAM,EAAE,CAAA;aACT;QACH,CAAC,EACD,GAAG,EAAE;YACH,MAAM,EAAE,CAAA;QACV,CAAC,CACF,CAAA;IACH,CAAC,CACF,CAAA;AACH,CAAC,EACD,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAC3B,CAAA","sourcesContent":["import { dirname } from 'path'\nimport { MkdirpOptions, optsArg } from './opts-arg.js'\n\nexport const mkdirpManualSync = (\n path: string,\n options?: MkdirpOptions,\n made?: string | undefined | void\n): string | undefined | void => {\n const parent = dirname(path)\n const opts = { ...optsArg(options), recursive: false }\n\n if (parent === path) {\n try {\n return opts.mkdirSync(path, opts)\n } catch (er) {\n // swallowed by recursive implementation on posix systems\n // any other error is a failure\n const fer = er as NodeJS.ErrnoException\n if (fer && fer.code !== 'EISDIR') {\n throw er\n }\n return\n }\n }\n\n try {\n opts.mkdirSync(path, opts)\n return made || path\n } catch (er) {\n const fer = er as NodeJS.ErrnoException\n if (fer && fer.code === 'ENOENT') {\n return mkdirpManualSync(path, opts, mkdirpManualSync(parent, opts, made))\n }\n if (fer && fer.code !== 'EEXIST' && fer && fer.code !== 'EROFS') {\n throw er\n }\n try {\n if (!opts.statSync(path).isDirectory()) throw er\n } catch (_) {\n throw er\n }\n }\n}\n\nexport const mkdirpManual = Object.assign(\n async (\n path: string,\n options?: MkdirpOptions,\n made?: string | undefined | void\n ): Promise => {\n const opts = optsArg(options)\n opts.recursive = false\n const parent = dirname(path)\n if (parent === path) {\n return opts.mkdirAsync(path, opts).catch(er => {\n // swallowed by recursive implementation on posix systems\n // any other error is a failure\n const fer = er as NodeJS.ErrnoException\n if (fer && fer.code !== 'EISDIR') {\n throw er\n }\n })\n }\n\n return opts.mkdirAsync(path, opts).then(\n () => made || path,\n async er => {\n const fer = er as NodeJS.ErrnoException\n if (fer && fer.code === 'ENOENT') {\n return mkdirpManual(parent, opts).then(\n (made?: string | undefined | void) => mkdirpManual(path, opts, made)\n )\n }\n if (fer && fer.code !== 'EEXIST' && fer.code !== 'EROFS') {\n throw er\n }\n return opts.statAsync(path).then(\n st => {\n if (st.isDirectory()) {\n return made\n } else {\n throw er\n }\n },\n () => {\n throw er\n }\n )\n }\n )\n },\n { sync: mkdirpManualSync }\n)\n"]}
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-native.d.ts b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-native.d.ts
new file mode 100644
index 00000000000..28b64814b25
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-native.d.ts
@@ -0,0 +1,6 @@
+import { MkdirpOptions } from './opts-arg.js';
+export declare const mkdirpNativeSync: (path: string, options?: MkdirpOptions) => string | void | undefined;
+export declare const mkdirpNative: ((path: string, options?: MkdirpOptions) => Promise) & {
+ sync: (path: string, options?: MkdirpOptions) => string | void | undefined;
+};
+//# sourceMappingURL=mkdirp-native.d.ts.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-native.d.ts.map b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-native.d.ts.map
new file mode 100644
index 00000000000..517dfabe7d1
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-native.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"mkdirp-native.d.ts","sourceRoot":"","sources":["../../src/mkdirp-native.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAW,MAAM,eAAe,CAAA;AAEtD,eAAO,MAAM,gBAAgB,SACrB,MAAM,YACF,aAAa,KACtB,MAAM,GAAG,IAAI,GAAG,SAoBlB,CAAA;AAED,eAAO,MAAM,YAAY,UAEf,MAAM,YACF,aAAa,KACtB,QAAQ,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;iBA5B/B,MAAM,YACF,aAAa,KACtB,MAAM,GAAG,IAAI,GAAG,SAAS;CAgD3B,CAAA"}
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-native.js b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-native.js
new file mode 100644
index 00000000000..99d10a5425d
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-native.js
@@ -0,0 +1,46 @@
+import { dirname } from 'path';
+import { findMade, findMadeSync } from './find-made.js';
+import { mkdirpManual, mkdirpManualSync } from './mkdirp-manual.js';
+import { optsArg } from './opts-arg.js';
+export const mkdirpNativeSync = (path, options) => {
+ const opts = optsArg(options);
+ opts.recursive = true;
+ const parent = dirname(path);
+ if (parent === path) {
+ return opts.mkdirSync(path, opts);
+ }
+ const made = findMadeSync(opts, path);
+ try {
+ opts.mkdirSync(path, opts);
+ return made;
+ }
+ catch (er) {
+ const fer = er;
+ if (fer && fer.code === 'ENOENT') {
+ return mkdirpManualSync(path, opts);
+ }
+ else {
+ throw er;
+ }
+ }
+};
+export const mkdirpNative = Object.assign(async (path, options) => {
+ const opts = { ...optsArg(options), recursive: true };
+ const parent = dirname(path);
+ if (parent === path) {
+ return await opts.mkdirAsync(path, opts);
+ }
+ return findMade(opts, path).then((made) => opts
+ .mkdirAsync(path, opts)
+ .then(m => made || m)
+ .catch(er => {
+ const fer = er;
+ if (fer && fer.code === 'ENOENT') {
+ return mkdirpManual(path, opts);
+ }
+ else {
+ throw er;
+ }
+ }));
+}, { sync: mkdirpNativeSync });
+//# sourceMappingURL=mkdirp-native.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-native.js.map b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-native.js.map
new file mode 100644
index 00000000000..27de32d9436
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-native.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"mkdirp-native.js","sourceRoot":"","sources":["../../src/mkdirp-native.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAC9B,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACnE,OAAO,EAAiB,OAAO,EAAE,MAAM,eAAe,CAAA;AAEtD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,IAAY,EACZ,OAAuB,EACI,EAAE;IAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;IACrB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B,IAAI,MAAM,KAAK,IAAI,EAAE;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;KAClC;IAED,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IACrC,IAAI;QACF,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAC1B,OAAO,IAAI,CAAA;KACZ;IAAC,OAAO,EAAE,EAAE;QACX,MAAM,GAAG,GAAG,EAA2B,CAAA;QACvC,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;YAChC,OAAO,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;SACpC;aAAM;YACL,MAAM,EAAE,CAAA;SACT;KACF;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CACvC,KAAK,EACH,IAAY,EACZ,OAAuB,EACa,EAAE;IACtC,MAAM,IAAI,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAA;IACrD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B,IAAI,MAAM,KAAK,IAAI,EAAE;QACnB,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;KACzC;IAED,OAAO,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAyB,EAAE,EAAE,CAC7D,IAAI;SACD,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC;SACtB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC;SACpB,KAAK,CAAC,EAAE,CAAC,EAAE;QACV,MAAM,GAAG,GAAG,EAA2B,CAAA;QACvC,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;YAChC,OAAO,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;SAChC;aAAM;YACL,MAAM,EAAE,CAAA;SACT;IACH,CAAC,CAAC,CACL,CAAA;AACH,CAAC,EACD,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAC3B,CAAA","sourcesContent":["import { dirname } from 'path'\nimport { findMade, findMadeSync } from './find-made.js'\nimport { mkdirpManual, mkdirpManualSync } from './mkdirp-manual.js'\nimport { MkdirpOptions, optsArg } from './opts-arg.js'\n\nexport const mkdirpNativeSync = (\n path: string,\n options?: MkdirpOptions\n): string | void | undefined => {\n const opts = optsArg(options)\n opts.recursive = true\n const parent = dirname(path)\n if (parent === path) {\n return opts.mkdirSync(path, opts)\n }\n\n const made = findMadeSync(opts, path)\n try {\n opts.mkdirSync(path, opts)\n return made\n } catch (er) {\n const fer = er as NodeJS.ErrnoException\n if (fer && fer.code === 'ENOENT') {\n return mkdirpManualSync(path, opts)\n } else {\n throw er\n }\n }\n}\n\nexport const mkdirpNative = Object.assign(\n async (\n path: string,\n options?: MkdirpOptions\n ): Promise => {\n const opts = { ...optsArg(options), recursive: true }\n const parent = dirname(path)\n if (parent === path) {\n return await opts.mkdirAsync(path, opts)\n }\n\n return findMade(opts, path).then((made?: string | undefined) =>\n opts\n .mkdirAsync(path, opts)\n .then(m => made || m)\n .catch(er => {\n const fer = er as NodeJS.ErrnoException\n if (fer && fer.code === 'ENOENT') {\n return mkdirpManual(path, opts)\n } else {\n throw er\n }\n })\n )\n },\n { sync: mkdirpNativeSync }\n)\n"]}
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/opts-arg.d.ts b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/opts-arg.d.ts
new file mode 100644
index 00000000000..73d076b3b69
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/opts-arg.d.ts
@@ -0,0 +1,42 @@
+///
+///
+import { MakeDirectoryOptions, Stats } from 'fs';
+export interface FsProvider {
+ stat?: (path: string, callback: (err: NodeJS.ErrnoException | null, stats: Stats) => any) => any;
+ mkdir?: (path: string, opts: MakeDirectoryOptions & {
+ recursive?: boolean;
+ }, callback: (err: NodeJS.ErrnoException | null, made?: string) => any) => any;
+ statSync?: (path: string) => Stats;
+ mkdirSync?: (path: string, opts: MakeDirectoryOptions & {
+ recursive?: boolean;
+ }) => string | undefined;
+}
+interface Options extends FsProvider {
+ mode?: number | string;
+ fs?: FsProvider;
+ mkdirAsync?: (path: string, opts: MakeDirectoryOptions & {
+ recursive?: boolean;
+ }) => Promise;
+ statAsync?: (path: string) => Promise;
+}
+export type MkdirpOptions = Options | number | string;
+export interface MkdirpOptionsResolved {
+ mode: number;
+ fs: FsProvider;
+ mkdirAsync: (path: string, opts: MakeDirectoryOptions & {
+ recursive?: boolean;
+ }) => Promise;
+ statAsync: (path: string) => Promise;
+ stat: (path: string, callback: (err: NodeJS.ErrnoException | null, stats: Stats) => any) => any;
+ mkdir: (path: string, opts: MakeDirectoryOptions & {
+ recursive?: boolean;
+ }, callback: (err: NodeJS.ErrnoException | null, made?: string) => any) => any;
+ statSync: (path: string) => Stats;
+ mkdirSync: (path: string, opts: MakeDirectoryOptions & {
+ recursive?: boolean;
+ }) => string | undefined;
+ recursive?: boolean;
+}
+export declare const optsArg: (opts?: MkdirpOptions) => MkdirpOptionsResolved;
+export {};
+//# sourceMappingURL=opts-arg.d.ts.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/opts-arg.d.ts.map b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/opts-arg.d.ts.map
new file mode 100644
index 00000000000..717deb5f9cb
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/opts-arg.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"opts-arg.d.ts","sourceRoot":"","sources":["../../src/opts-arg.ts"],"names":[],"mappings":";;AAAA,OAAO,EACL,oBAAoB,EAIpB,KAAK,EAEN,MAAM,IAAI,CAAA;AAEX,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,CACL,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,KAAK,GAAG,KAC/D,GAAG,CAAA;IACR,KAAK,CAAC,EAAE,CACN,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,oBAAoB,GAAG;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,EACpD,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,GAAG,KAChE,GAAG,CAAA;IACR,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAA;IAClC,SAAS,CAAC,EAAE,CACV,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,oBAAoB,GAAG;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,KACjD,MAAM,GAAG,SAAS,CAAA;CACxB;AAED,UAAU,OAAQ,SAAQ,UAAU;IAClC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,EAAE,CAAC,EAAE,UAAU,CAAA;IACf,UAAU,CAAC,EAAE,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,oBAAoB,GAAG;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,KACjD,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAChC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,CAAA;CAC7C;AAED,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA;AAErD,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,UAAU,CAAA;IACd,UAAU,EAAE,CACV,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,oBAAoB,GAAG;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,KACjD,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAChC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,CAAA;IAC3C,IAAI,EAAE,CACJ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,KAAK,GAAG,KAC/D,GAAG,CAAA;IACR,KAAK,EAAE,CACL,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,oBAAoB,GAAG;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,EACpD,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,GAAG,KAChE,GAAG,CAAA;IACR,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAA;IACjC,SAAS,EAAE,CACT,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,oBAAoB,GAAG;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,KACjD,MAAM,GAAG,SAAS,CAAA;IACvB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,eAAO,MAAM,OAAO,UAAW,aAAa,KAAG,qBA2C9C,CAAA"}
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/opts-arg.js b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/opts-arg.js
new file mode 100644
index 00000000000..d47e2927fee
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/opts-arg.js
@@ -0,0 +1,34 @@
+import { mkdir, mkdirSync, stat, statSync, } from 'fs';
+export const optsArg = (opts) => {
+ if (!opts) {
+ opts = { mode: 0o777 };
+ }
+ else if (typeof opts === 'object') {
+ opts = { mode: 0o777, ...opts };
+ }
+ else if (typeof opts === 'number') {
+ opts = { mode: opts };
+ }
+ else if (typeof opts === 'string') {
+ opts = { mode: parseInt(opts, 8) };
+ }
+ else {
+ throw new TypeError('invalid options argument');
+ }
+ const resolved = opts;
+ const optsFs = opts.fs || {};
+ opts.mkdir = opts.mkdir || optsFs.mkdir || mkdir;
+ opts.mkdirAsync = opts.mkdirAsync
+ ? opts.mkdirAsync
+ : async (path, options) => {
+ return new Promise((res, rej) => resolved.mkdir(path, options, (er, made) => er ? rej(er) : res(made)));
+ };
+ opts.stat = opts.stat || optsFs.stat || stat;
+ opts.statAsync = opts.statAsync
+ ? opts.statAsync
+ : async (path) => new Promise((res, rej) => resolved.stat(path, (err, stats) => (err ? rej(err) : res(stats))));
+ opts.statSync = opts.statSync || optsFs.statSync || statSync;
+ opts.mkdirSync = opts.mkdirSync || optsFs.mkdirSync || mkdirSync;
+ return resolved;
+};
+//# sourceMappingURL=opts-arg.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/opts-arg.js.map b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/opts-arg.js.map
new file mode 100644
index 00000000000..663286dc721
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/opts-arg.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"opts-arg.js","sourceRoot":"","sources":["../../src/opts-arg.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,EACL,SAAS,EACT,IAAI,EAEJ,QAAQ,GACT,MAAM,IAAI,CAAA;AAwDX,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAoB,EAAyB,EAAE;IACrE,IAAI,CAAC,IAAI,EAAE;QACT,IAAI,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;KACvB;SAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QACnC,IAAI,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,CAAA;KAChC;SAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QACnC,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;KACtB;SAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QACnC,IAAI,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAA;KACnC;SAAM;QACL,MAAM,IAAI,SAAS,CAAC,0BAA0B,CAAC,CAAA;KAChD;IAED,MAAM,QAAQ,GAAG,IAA6B,CAAA;IAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,IAAI,EAAE,CAAA;IAE5B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,IAAI,KAAK,CAAA;IAEhD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;QAC/B,CAAC,CAAC,IAAI,CAAC,UAAU;QACjB,CAAC,CAAC,KAAK,EACH,IAAY,EACZ,OAAuD,EAC1B,EAAE;YAC/B,OAAO,IAAI,OAAO,CAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAClD,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CACzC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CACzB,CACF,CAAA;QACH,CAAC,CAAA;IAEL,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,IAAI,CAAA;IAC5C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;QAC7B,CAAC,CAAC,IAAI,CAAC,SAAS;QAChB,CAAC,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE,CACrB,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CACvB,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CACnE,CAAA;IAEP,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAA;IAC5D,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,IAAI,SAAS,CAAA;IAEhE,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA","sourcesContent":["import {\n MakeDirectoryOptions,\n mkdir,\n mkdirSync,\n stat,\n Stats,\n statSync,\n} from 'fs'\n\nexport interface FsProvider {\n stat?: (\n path: string,\n callback: (err: NodeJS.ErrnoException | null, stats: Stats) => any\n ) => any\n mkdir?: (\n path: string,\n opts: MakeDirectoryOptions & { recursive?: boolean },\n callback: (err: NodeJS.ErrnoException | null, made?: string) => any\n ) => any\n statSync?: (path: string) => Stats\n mkdirSync?: (\n path: string,\n opts: MakeDirectoryOptions & { recursive?: boolean }\n ) => string | undefined\n}\n\ninterface Options extends FsProvider {\n mode?: number | string\n fs?: FsProvider\n mkdirAsync?: (\n path: string,\n opts: MakeDirectoryOptions & { recursive?: boolean }\n ) => Promise\n statAsync?: (path: string) => Promise\n}\n\nexport type MkdirpOptions = Options | number | string\n\nexport interface MkdirpOptionsResolved {\n mode: number\n fs: FsProvider\n mkdirAsync: (\n path: string,\n opts: MakeDirectoryOptions & { recursive?: boolean }\n ) => Promise\n statAsync: (path: string) => Promise\n stat: (\n path: string,\n callback: (err: NodeJS.ErrnoException | null, stats: Stats) => any\n ) => any\n mkdir: (\n path: string,\n opts: MakeDirectoryOptions & { recursive?: boolean },\n callback: (err: NodeJS.ErrnoException | null, made?: string) => any\n ) => any\n statSync: (path: string) => Stats\n mkdirSync: (\n path: string,\n opts: MakeDirectoryOptions & { recursive?: boolean }\n ) => string | undefined\n recursive?: boolean\n}\n\nexport const optsArg = (opts?: MkdirpOptions): MkdirpOptionsResolved => {\n if (!opts) {\n opts = { mode: 0o777 }\n } else if (typeof opts === 'object') {\n opts = { mode: 0o777, ...opts }\n } else if (typeof opts === 'number') {\n opts = { mode: opts }\n } else if (typeof opts === 'string') {\n opts = { mode: parseInt(opts, 8) }\n } else {\n throw new TypeError('invalid options argument')\n }\n\n const resolved = opts as MkdirpOptionsResolved\n const optsFs = opts.fs || {}\n\n opts.mkdir = opts.mkdir || optsFs.mkdir || mkdir\n\n opts.mkdirAsync = opts.mkdirAsync\n ? opts.mkdirAsync\n : async (\n path: string,\n options: MakeDirectoryOptions & { recursive?: boolean }\n ): Promise => {\n return new Promise((res, rej) =>\n resolved.mkdir(path, options, (er, made) =>\n er ? rej(er) : res(made)\n )\n )\n }\n\n opts.stat = opts.stat || optsFs.stat || stat\n opts.statAsync = opts.statAsync\n ? opts.statAsync\n : async (path: string) =>\n new Promise((res, rej) =>\n resolved.stat(path, (err, stats) => (err ? rej(err) : res(stats)))\n )\n\n opts.statSync = opts.statSync || optsFs.statSync || statSync\n opts.mkdirSync = opts.mkdirSync || optsFs.mkdirSync || mkdirSync\n\n return resolved\n}\n"]}
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/package.json b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/package.json
new file mode 100644
index 00000000000..3dbc1ca591c
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "module"
+}
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/path-arg.d.ts b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/path-arg.d.ts
new file mode 100644
index 00000000000..ad0ccfc482a
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/path-arg.d.ts
@@ -0,0 +1,2 @@
+export declare const pathArg: (path: string) => string;
+//# sourceMappingURL=path-arg.d.ts.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/path-arg.d.ts.map b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/path-arg.d.ts.map
new file mode 100644
index 00000000000..801799e766f
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/path-arg.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"path-arg.d.ts","sourceRoot":"","sources":["../../src/path-arg.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,OAAO,SAAU,MAAM,WAyBnC,CAAA"}
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/path-arg.js b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/path-arg.js
new file mode 100644
index 00000000000..03539cc5a94
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/path-arg.js
@@ -0,0 +1,24 @@
+const platform = process.env.__TESTING_MKDIRP_PLATFORM__ || process.platform;
+import { parse, resolve } from 'path';
+export const pathArg = (path) => {
+ if (/\0/.test(path)) {
+ // simulate same failure that node raises
+ throw Object.assign(new TypeError('path must be a string without null bytes'), {
+ path,
+ code: 'ERR_INVALID_ARG_VALUE',
+ });
+ }
+ path = resolve(path);
+ if (platform === 'win32') {
+ const badWinChars = /[*|"<>?:]/;
+ const { root } = parse(path);
+ if (badWinChars.test(path.substring(root.length))) {
+ throw Object.assign(new Error('Illegal characters in path.'), {
+ path,
+ code: 'EINVAL',
+ });
+ }
+ }
+ return path;
+};
+//# sourceMappingURL=path-arg.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/path-arg.js.map b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/path-arg.js.map
new file mode 100644
index 00000000000..43efe1e3a99
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/path-arg.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"path-arg.js","sourceRoot":"","sources":["../../src/path-arg.ts"],"names":[],"mappings":"AAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,OAAO,CAAC,QAAQ,CAAA;AAC5E,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AACrC,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,EAAE;IACtC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACnB,yCAAyC;QACzC,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,SAAS,CAAC,0CAA0C,CAAC,EACzD;YACE,IAAI;YACJ,IAAI,EAAE,uBAAuB;SAC9B,CACF,CAAA;KACF;IAED,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACpB,IAAI,QAAQ,KAAK,OAAO,EAAE;QACxB,MAAM,WAAW,GAAG,WAAW,CAAA;QAC/B,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;QAC5B,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE;YACjD,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,EAAE;gBAC5D,IAAI;gBACJ,IAAI,EAAE,QAAQ;aACf,CAAC,CAAA;SACH;KACF;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA","sourcesContent":["const platform = process.env.__TESTING_MKDIRP_PLATFORM__ || process.platform\nimport { parse, resolve } from 'path'\nexport const pathArg = (path: string) => {\n if (/\\0/.test(path)) {\n // simulate same failure that node raises\n throw Object.assign(\n new TypeError('path must be a string without null bytes'),\n {\n path,\n code: 'ERR_INVALID_ARG_VALUE',\n }\n )\n }\n\n path = resolve(path)\n if (platform === 'win32') {\n const badWinChars = /[*|\"<>?:]/\n const { root } = parse(path)\n if (badWinChars.test(path.substring(root.length))) {\n throw Object.assign(new Error('Illegal characters in path.'), {\n path,\n code: 'EINVAL',\n })\n }\n }\n\n return path\n}\n"]}
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/use-native.d.ts b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/use-native.d.ts
new file mode 100644
index 00000000000..1c6cb619e30
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/use-native.d.ts
@@ -0,0 +1,6 @@
+import { MkdirpOptions } from './opts-arg.js';
+export declare const useNativeSync: (opts?: MkdirpOptions) => boolean;
+export declare const useNative: ((opts?: MkdirpOptions) => boolean) & {
+ sync: (opts?: MkdirpOptions) => boolean;
+};
+//# sourceMappingURL=use-native.d.ts.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/use-native.d.ts.map b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/use-native.d.ts.map
new file mode 100644
index 00000000000..e2484228a04
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/use-native.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"use-native.d.ts","sourceRoot":"","sources":["../../src/use-native.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAW,MAAM,eAAe,CAAA;AAMtD,eAAO,MAAM,aAAa,UAEd,aAAa,YAA0C,CAAA;AAEnE,eAAO,MAAM,SAAS,WAGR,aAAa;kBALf,aAAa;CASxB,CAAA"}
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/use-native.js b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/use-native.js
new file mode 100644
index 00000000000..ad2093867eb
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/use-native.js
@@ -0,0 +1,14 @@
+import { mkdir, mkdirSync } from 'fs';
+import { optsArg } from './opts-arg.js';
+const version = process.env.__TESTING_MKDIRP_NODE_VERSION__ || process.version;
+const versArr = version.replace(/^v/, '').split('.');
+const hasNative = +versArr[0] > 10 || (+versArr[0] === 10 && +versArr[1] >= 12);
+export const useNativeSync = !hasNative
+ ? () => false
+ : (opts) => optsArg(opts).mkdirSync === mkdirSync;
+export const useNative = Object.assign(!hasNative
+ ? () => false
+ : (opts) => optsArg(opts).mkdir === mkdir, {
+ sync: useNativeSync,
+});
+//# sourceMappingURL=use-native.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/use-native.js.map b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/use-native.js.map
new file mode 100644
index 00000000000..08c616d3655
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/use-native.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"use-native.js","sourceRoot":"","sources":["../../src/use-native.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAA;AACrC,OAAO,EAAiB,OAAO,EAAE,MAAM,eAAe,CAAA;AAEtD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,+BAA+B,IAAI,OAAO,CAAC,OAAO,CAAA;AAC9E,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AACpD,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;AAE/E,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,SAAS;IACrC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK;IACb,CAAC,CAAC,CAAC,IAAoB,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CAAA;AAEnE,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CACpC,CAAC,SAAS;IACR,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK;IACb,CAAC,CAAC,CAAC,IAAoB,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,EAC3D;IACE,IAAI,EAAE,aAAa;CACpB,CACF,CAAA","sourcesContent":["import { mkdir, mkdirSync } from 'fs'\nimport { MkdirpOptions, optsArg } from './opts-arg.js'\n\nconst version = process.env.__TESTING_MKDIRP_NODE_VERSION__ || process.version\nconst versArr = version.replace(/^v/, '').split('.')\nconst hasNative = +versArr[0] > 10 || (+versArr[0] === 10 && +versArr[1] >= 12)\n\nexport const useNativeSync = !hasNative\n ? () => false\n : (opts?: MkdirpOptions) => optsArg(opts).mkdirSync === mkdirSync\n\nexport const useNative = Object.assign(\n !hasNative\n ? () => false\n : (opts?: MkdirpOptions) => optsArg(opts).mkdir === mkdir,\n {\n sync: useNativeSync,\n }\n)\n"]}
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/package.json b/deps/npm/node_modules/cacache/node_modules/mkdirp/package.json
new file mode 100644
index 00000000000..f31ac3314d6
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/package.json
@@ -0,0 +1,91 @@
+{
+ "name": "mkdirp",
+ "description": "Recursively mkdir, like `mkdir -p`",
+ "version": "3.0.1",
+ "keywords": [
+ "mkdir",
+ "directory",
+ "make dir",
+ "make",
+ "dir",
+ "recursive",
+ "native"
+ ],
+ "bin": "./dist/cjs/src/bin.js",
+ "main": "./dist/cjs/src/index.js",
+ "module": "./dist/mjs/index.js",
+ "types": "./dist/mjs/index.d.ts",
+ "exports": {
+ ".": {
+ "import": {
+ "types": "./dist/mjs/index.d.ts",
+ "default": "./dist/mjs/index.js"
+ },
+ "require": {
+ "types": "./dist/cjs/src/index.d.ts",
+ "default": "./dist/cjs/src/index.js"
+ }
+ }
+ },
+ "files": [
+ "dist"
+ ],
+ "scripts": {
+ "preversion": "npm test",
+ "postversion": "npm publish",
+ "prepublishOnly": "git push origin --follow-tags",
+ "preprepare": "rm -rf dist",
+ "prepare": "tsc -p tsconfig.json && tsc -p tsconfig-esm.json",
+ "postprepare": "bash fixup.sh",
+ "pretest": "npm run prepare",
+ "presnap": "npm run prepare",
+ "test": "c8 tap",
+ "snap": "c8 tap",
+ "format": "prettier --write . --loglevel warn",
+ "benchmark": "node benchmark/index.js",
+ "typedoc": "typedoc --tsconfig tsconfig-esm.json ./src/*.ts"
+ },
+ "prettier": {
+ "semi": false,
+ "printWidth": 80,
+ "tabWidth": 2,
+ "useTabs": false,
+ "singleQuote": true,
+ "jsxSingleQuote": false,
+ "bracketSameLine": true,
+ "arrowParens": "avoid",
+ "endOfLine": "lf"
+ },
+ "devDependencies": {
+ "@types/brace-expansion": "^1.1.0",
+ "@types/node": "^18.11.9",
+ "@types/tap": "^15.0.7",
+ "c8": "^7.12.0",
+ "eslint-config-prettier": "^8.6.0",
+ "prettier": "^2.8.2",
+ "tap": "^16.3.3",
+ "ts-node": "^10.9.1",
+ "typedoc": "^0.23.21",
+ "typescript": "^4.9.3"
+ },
+ "tap": {
+ "coverage": false,
+ "node-arg": [
+ "--no-warnings",
+ "--loader",
+ "ts-node/esm"
+ ],
+ "ts": false
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/isaacs/node-mkdirp.git"
+ },
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
+}
diff --git a/deps/npm/node_modules/cacache/node_modules/mkdirp/readme.markdown b/deps/npm/node_modules/cacache/node_modules/mkdirp/readme.markdown
new file mode 100644
index 00000000000..df654b80875
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/mkdirp/readme.markdown
@@ -0,0 +1,281 @@
+# mkdirp
+
+Like `mkdir -p`, but in Node.js!
+
+Now with a modern API and no\* bugs!
+
+\* may contain some bugs
+
+# example
+
+## pow.js
+
+```js
+// hybrid module, import or require() both work
+import { mkdirp } from 'mkdirp'
+// or:
+const { mkdirp } = require('mkdirp')
+
+// return value is a Promise resolving to the first directory created
+mkdirp('/tmp/foo/bar/baz').then(made =>
+ console.log(`made directories, starting with ${made}`)
+)
+```
+
+Output (where `/tmp/foo` already exists)
+
+```
+made directories, starting with /tmp/foo/bar
+```
+
+Or, if you don't have time to wait around for promises:
+
+```js
+import { mkdirp } from 'mkdirp'
+
+// return value is the first directory created
+const made = mkdirp.sync('/tmp/foo/bar/baz')
+console.log(`made directories, starting with ${made}`)
+```
+
+And now /tmp/foo/bar/baz exists, huzzah!
+
+# methods
+
+```js
+import { mkdirp } from 'mkdirp'
+```
+
+## `mkdirp(dir: string, opts?: MkdirpOptions) => Promise`
+
+Create a new directory and any necessary subdirectories at `dir`
+with octal permission string `opts.mode`. If `opts` is a string
+or number, it will be treated as the `opts.mode`.
+
+If `opts.mode` isn't specified, it defaults to `0o777`.
+
+Promise resolves to first directory `made` that had to be
+created, or `undefined` if everything already exists. Promise
+rejects if any errors are encountered. Note that, in the case of
+promise rejection, some directories _may_ have been created, as
+recursive directory creation is not an atomic operation.
+
+You can optionally pass in an alternate `fs` implementation by
+passing in `opts.fs`. Your implementation should have
+`opts.fs.mkdir(path, opts, cb)` and `opts.fs.stat(path, cb)`.
+
+You can also override just one or the other of `mkdir` and `stat`
+by passing in `opts.stat` or `opts.mkdir`, or providing an `fs`
+option that only overrides one of these.
+
+## `mkdirp.sync(dir: string, opts: MkdirpOptions) => string|undefined`
+
+Synchronously create a new directory and any necessary
+subdirectories at `dir` with octal permission string `opts.mode`.
+If `opts` is a string or number, it will be treated as the
+`opts.mode`.
+
+If `opts.mode` isn't specified, it defaults to `0o777`.
+
+Returns the first directory that had to be created, or undefined
+if everything already exists.
+
+You can optionally pass in an alternate `fs` implementation by
+passing in `opts.fs`. Your implementation should have
+`opts.fs.mkdirSync(path, mode)` and `opts.fs.statSync(path)`.
+
+You can also override just one or the other of `mkdirSync` and
+`statSync` by passing in `opts.statSync` or `opts.mkdirSync`, or
+providing an `fs` option that only overrides one of these.
+
+## `mkdirp.manual`, `mkdirp.manualSync`
+
+Use the manual implementation (not the native one). This is the
+default when the native implementation is not available or the
+stat/mkdir implementation is overridden.
+
+## `mkdirp.native`, `mkdirp.nativeSync`
+
+Use the native implementation (not the manual one). This is the
+default when the native implementation is available and
+stat/mkdir are not overridden.
+
+# implementation
+
+On Node.js v10.12.0 and above, use the native `fs.mkdir(p,
+{recursive:true})` option, unless `fs.mkdir`/`fs.mkdirSync` has
+been overridden by an option.
+
+## native implementation
+
+- If the path is a root directory, then pass it to the underlying
+ implementation and return the result/error. (In this case,
+ it'll either succeed or fail, but we aren't actually creating
+ any dirs.)
+- Walk up the path statting each directory, to find the first
+ path that will be created, `made`.
+- Call `fs.mkdir(path, { recursive: true })` (or `fs.mkdirSync`)
+- If error, raise it to the caller.
+- Return `made`.
+
+## manual implementation
+
+- Call underlying `fs.mkdir` implementation, with `recursive:
+false`
+- If error:
+ - If path is a root directory, raise to the caller and do not
+ handle it
+ - If ENOENT, mkdirp parent dir, store result as `made`
+ - stat(path)
+ - If error, raise original `mkdir` error
+ - If directory, return `made`
+ - Else, raise original `mkdir` error
+- else
+ - return `undefined` if a root dir, or `made` if set, or `path`
+
+## windows vs unix caveat
+
+On Windows file systems, attempts to create a root directory (ie,
+a drive letter or root UNC path) will fail. If the root
+directory exists, then it will fail with `EPERM`. If the root
+directory does not exist, then it will fail with `ENOENT`.
+
+On posix file systems, attempts to create a root directory (in
+recursive mode) will succeed silently, as it is treated like just
+another directory that already exists. (In non-recursive mode,
+of course, it fails with `EEXIST`.)
+
+In order to preserve this system-specific behavior (and because
+it's not as if we can create the parent of a root directory
+anyway), attempts to create a root directory are passed directly
+to the `fs` implementation, and any errors encountered are not
+handled.
+
+## native error caveat
+
+The native implementation (as of at least Node.js v13.4.0) does
+not provide appropriate errors in some cases (see
+[nodejs/node#31481](https://github.com/nodejs/node/issues/31481)
+and
+[nodejs/node#28015](https://github.com/nodejs/node/issues/28015)).
+
+In order to work around this issue, the native implementation
+will fall back to the manual implementation if an `ENOENT` error
+is encountered.
+
+# choosing a recursive mkdir implementation
+
+There are a few to choose from! Use the one that suits your
+needs best :D
+
+## use `fs.mkdir(path, {recursive: true}, cb)` if:
+
+- You wish to optimize performance even at the expense of other
+ factors.
+- You don't need to know the first dir created.
+- You are ok with getting `ENOENT` as the error when some other
+ problem is the actual cause.
+- You can limit your platforms to Node.js v10.12 and above.
+- You're ok with using callbacks instead of promises.
+- You don't need/want a CLI.
+- You don't need to override the `fs` methods in use.
+
+## use this module (mkdirp 1.x or 2.x) if:
+
+- You need to know the first directory that was created.
+- You wish to use the native implementation if available, but
+ fall back when it's not.
+- You prefer promise-returning APIs to callback-taking APIs.
+- You want more useful error messages than the native recursive
+ mkdir provides (at least as of Node.js v13.4), and are ok with
+ re-trying on `ENOENT` to achieve this.
+- You need (or at least, are ok with) a CLI.
+- You need to override the `fs` methods in use.
+
+## use [`make-dir`](http://npm.im/make-dir) if:
+
+- You do not need to know the first dir created (and wish to save
+ a few `stat` calls when using the native implementation for
+ this reason).
+- You wish to use the native implementation if available, but
+ fall back when it's not.
+- You prefer promise-returning APIs to callback-taking APIs.
+- You are ok with occasionally getting `ENOENT` errors for
+ failures that are actually related to something other than a
+ missing file system entry.
+- You don't need/want a CLI.
+- You need to override the `fs` methods in use.
+
+## use mkdirp 0.x if:
+
+- You need to know the first directory that was created.
+- You need (or at least, are ok with) a CLI.
+- You need to override the `fs` methods in use.
+- You're ok with using callbacks instead of promises.
+- You are not running on Windows, where the root-level ENOENT
+ errors can lead to infinite regress.
+- You think vinyl just sounds warmer and richer for some weird
+ reason.
+- You are supporting truly ancient Node.js versions, before even
+ the advent of a `Promise` language primitive. (Please don't.
+ You deserve better.)
+
+# cli
+
+This package also ships with a `mkdirp` command.
+
+```
+$ mkdirp -h
+
+usage: mkdirp [DIR1,DIR2..] {OPTIONS}
+
+ Create each supplied directory including any necessary parent directories
+ that don't yet exist.
+
+ If the directory already exists, do nothing.
+
+OPTIONS are:
+
+ -m If a directory needs to be created, set the mode as an octal
+ --mode= permission string.
+
+ -v --version Print the mkdirp version number
+
+ -h --help Print this helpful banner
+
+ -p --print Print the first directories created for each path provided
+
+ --manual Use manual implementation, even if native is available
+```
+
+# install
+
+With [npm](http://npmjs.org) do:
+
+```
+npm install mkdirp
+```
+
+to get the library locally, or
+
+```
+npm install -g mkdirp
+```
+
+to get the command everywhere, or
+
+```
+npx mkdirp ...
+```
+
+to run the command without installing it globally.
+
+# platform support
+
+This module works on node v8, but only v10 and above are officially
+supported, as Node v8 reached its LTS end of life 2020-01-01, which is in
+the past, as of this writing.
+
+# license
+
+MIT
diff --git a/deps/npm/node_modules/cacache/node_modules/p-map/index.js b/deps/npm/node_modules/cacache/node_modules/p-map/index.js
new file mode 100644
index 00000000000..2f7d91ccca4
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/p-map/index.js
@@ -0,0 +1,269 @@
+export default async function pMap(
+ iterable,
+ mapper,
+ {
+ concurrency = Number.POSITIVE_INFINITY,
+ stopOnError = true,
+ signal,
+ } = {},
+) {
+ return new Promise((resolve, reject_) => {
+ if (iterable[Symbol.iterator] === undefined && iterable[Symbol.asyncIterator] === undefined) {
+ throw new TypeError(`Expected \`input\` to be either an \`Iterable\` or \`AsyncIterable\`, got (${typeof iterable})`);
+ }
+
+ if (typeof mapper !== 'function') {
+ throw new TypeError('Mapper function is required');
+ }
+
+ if (!((Number.isSafeInteger(concurrency) && concurrency >= 1) || concurrency === Number.POSITIVE_INFINITY)) {
+ throw new TypeError(`Expected \`concurrency\` to be an integer from 1 and up or \`Infinity\`, got \`${concurrency}\` (${typeof concurrency})`);
+ }
+
+ const result = [];
+ const errors = [];
+ const skippedIndexesMap = new Map();
+ let isRejected = false;
+ let isResolved = false;
+ let isIterableDone = false;
+ let resolvingCount = 0;
+ let currentIndex = 0;
+ const iterator = iterable[Symbol.iterator] === undefined ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();
+
+ const reject = reason => {
+ isRejected = true;
+ isResolved = true;
+ reject_(reason);
+ };
+
+ if (signal) {
+ if (signal.aborted) {
+ reject(signal.reason);
+ }
+
+ signal.addEventListener('abort', () => {
+ reject(signal.reason);
+ });
+ }
+
+ const next = async () => {
+ if (isResolved) {
+ return;
+ }
+
+ const nextItem = await iterator.next();
+
+ const index = currentIndex;
+ currentIndex++;
+
+ // Note: `iterator.next()` can be called many times in parallel.
+ // This can cause multiple calls to this `next()` function to
+ // receive a `nextItem` with `done === true`.
+ // The shutdown logic that rejects/resolves must be protected
+ // so it runs only one time as the `skippedIndex` logic is
+ // non-idempotent.
+ if (nextItem.done) {
+ isIterableDone = true;
+
+ if (resolvingCount === 0 && !isResolved) {
+ if (!stopOnError && errors.length > 0) {
+ reject(new AggregateError(errors)); // eslint-disable-line unicorn/error-message
+ return;
+ }
+
+ isResolved = true;
+
+ if (skippedIndexesMap.size === 0) {
+ resolve(result);
+ return;
+ }
+
+ const pureResult = [];
+
+ // Support multiple `pMapSkip`'s.
+ for (const [index, value] of result.entries()) {
+ if (skippedIndexesMap.get(index) === pMapSkip) {
+ continue;
+ }
+
+ pureResult.push(value);
+ }
+
+ resolve(pureResult);
+ }
+
+ return;
+ }
+
+ resolvingCount++;
+
+ // Intentionally detached
+ (async () => {
+ try {
+ const element = await nextItem.value;
+
+ if (isResolved) {
+ return;
+ }
+
+ const value = await mapper(element, index);
+
+ // Use Map to stage the index of the element.
+ if (value === pMapSkip) {
+ skippedIndexesMap.set(index, value);
+ }
+
+ result[index] = value;
+
+ resolvingCount--;
+ await next();
+ } catch (error) {
+ if (stopOnError) {
+ reject(error);
+ } else {
+ errors.push(error);
+ resolvingCount--;
+
+ // In that case we can't really continue regardless of `stopOnError` state
+ // since an iterable is likely to continue throwing after it throws once.
+ // If we continue calling `next()` indefinitely we will likely end up
+ // in an infinite loop of failed iteration.
+ try {
+ await next();
+ } catch (error) {
+ reject(error);
+ }
+ }
+ }
+ })();
+ };
+
+ // Create the concurrent runners in a detached (non-awaited)
+ // promise. We need this so we can await the `next()` calls
+ // to stop creating runners before hitting the concurrency limit
+ // if the iterable has already been marked as done.
+ // NOTE: We *must* do this for async iterators otherwise we'll spin up
+ // infinite `next()` calls by default and never start the event loop.
+ (async () => {
+ for (let index = 0; index < concurrency; index++) {
+ try {
+ // eslint-disable-next-line no-await-in-loop
+ await next();
+ } catch (error) {
+ reject(error);
+ break;
+ }
+
+ if (isIterableDone || isRejected) {
+ break;
+ }
+ }
+ })();
+ });
+}
+
+export function pMapIterable(
+ iterable,
+ mapper,
+ {
+ concurrency = Number.POSITIVE_INFINITY,
+ backpressure = concurrency,
+ } = {},
+) {
+ if (iterable[Symbol.iterator] === undefined && iterable[Symbol.asyncIterator] === undefined) {
+ throw new TypeError(`Expected \`input\` to be either an \`Iterable\` or \`AsyncIterable\`, got (${typeof iterable})`);
+ }
+
+ if (typeof mapper !== 'function') {
+ throw new TypeError('Mapper function is required');
+ }
+
+ if (!((Number.isSafeInteger(concurrency) && concurrency >= 1) || concurrency === Number.POSITIVE_INFINITY)) {
+ throw new TypeError(`Expected \`concurrency\` to be an integer from 1 and up or \`Infinity\`, got \`${concurrency}\` (${typeof concurrency})`);
+ }
+
+ if (!((Number.isSafeInteger(backpressure) && backpressure >= concurrency) || backpressure === Number.POSITIVE_INFINITY)) {
+ throw new TypeError(`Expected \`backpressure\` to be an integer from \`concurrency\` (${concurrency}) and up or \`Infinity\`, got \`${backpressure}\` (${typeof backpressure})`);
+ }
+
+ return {
+ async * [Symbol.asyncIterator]() {
+ const iterator = iterable[Symbol.asyncIterator] === undefined ? iterable[Symbol.iterator]() : iterable[Symbol.asyncIterator]();
+
+ const promises = [];
+ let runningMappersCount = 0;
+ let isDone = false;
+ let index = 0;
+
+ function trySpawn() {
+ if (isDone || !(runningMappersCount < concurrency && promises.length < backpressure)) {
+ return;
+ }
+
+ const promise = (async () => {
+ const {done, value} = await iterator.next();
+
+ if (done) {
+ return {done: true};
+ }
+
+ runningMappersCount++;
+
+ // Spawn if still below concurrency and backpressure limit
+ trySpawn();
+
+ try {
+ const returnValue = await mapper(await value, index++);
+
+ runningMappersCount--;
+
+ if (returnValue === pMapSkip) {
+ const index = promises.indexOf(promise);
+
+ if (index > 0) {
+ promises.splice(index, 1);
+ }
+ }
+
+ // Spawn if still below backpressure limit and just dropped below concurrency limit
+ trySpawn();
+
+ return {done: false, value: returnValue};
+ } catch (error) {
+ isDone = true;
+ return {error};
+ }
+ })();
+
+ promises.push(promise);
+ }
+
+ trySpawn();
+
+ while (promises.length > 0) {
+ const {error, done, value} = await promises[0]; // eslint-disable-line no-await-in-loop
+
+ promises.shift();
+
+ if (error) {
+ throw error;
+ }
+
+ if (done) {
+ return;
+ }
+
+ // Spawn if just dropped below backpressure limit and below the concurrency limit
+ trySpawn();
+
+ if (value === pMapSkip) {
+ continue;
+ }
+
+ yield value;
+ }
+ },
+ };
+}
+
+export const pMapSkip = Symbol('skip');
diff --git a/deps/npm/node_modules/cacache/node_modules/p-map/license b/deps/npm/node_modules/cacache/node_modules/p-map/license
new file mode 100644
index 00000000000..fa7ceba3eb4
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/p-map/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus (https://sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/deps/npm/node_modules/cacache/node_modules/p-map/package.json b/deps/npm/node_modules/cacache/node_modules/p-map/package.json
new file mode 100644
index 00000000000..ea58f599f3a
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/p-map/package.json
@@ -0,0 +1,57 @@
+{
+ "name": "p-map",
+ "version": "7.0.2",
+ "description": "Map over promises concurrently",
+ "license": "MIT",
+ "repository": "sindresorhus/p-map",
+ "funding": "https://github.com/sponsors/sindresorhus",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "https://sindresorhus.com"
+ },
+ "type": "module",
+ "exports": {
+ "types": "./index.d.ts",
+ "default": "./index.js"
+ },
+ "sideEffects": false,
+ "engines": {
+ "node": ">=18"
+ },
+ "scripts": {
+ "test": "xo && ava && tsd"
+ },
+ "files": [
+ "index.js",
+ "index.d.ts"
+ ],
+ "keywords": [
+ "promise",
+ "map",
+ "resolved",
+ "wait",
+ "collection",
+ "iterable",
+ "iterator",
+ "race",
+ "fulfilled",
+ "async",
+ "await",
+ "promises",
+ "concurrently",
+ "concurrency",
+ "parallel",
+ "bluebird"
+ ],
+ "devDependencies": {
+ "ava": "^5.2.0",
+ "chalk": "^5.3.0",
+ "delay": "^6.0.0",
+ "in-range": "^3.0.0",
+ "random-int": "^3.0.0",
+ "time-span": "^5.1.0",
+ "tsd": "^0.29.0",
+ "xo": "^0.56.0"
+ }
+}
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/LICENSE b/deps/npm/node_modules/cacache/node_modules/tar/LICENSE
new file mode 100644
index 00000000000..19129e315fe
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/create.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/create.js
new file mode 100644
index 00000000000..3190afc4831
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/create.js
@@ -0,0 +1,83 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.create = void 0;
+const fs_minipass_1 = require("@isaacs/fs-minipass");
+const node_path_1 = __importDefault(require("node:path"));
+const list_js_1 = require("./list.js");
+const make_command_js_1 = require("./make-command.js");
+const pack_js_1 = require("./pack.js");
+const createFileSync = (opt, files) => {
+ const p = new pack_js_1.PackSync(opt);
+ const stream = new fs_minipass_1.WriteStreamSync(opt.file, {
+ mode: opt.mode || 0o666,
+ });
+ p.pipe(stream);
+ addFilesSync(p, files);
+};
+const createFile = (opt, files) => {
+ const p = new pack_js_1.Pack(opt);
+ const stream = new fs_minipass_1.WriteStream(opt.file, {
+ mode: opt.mode || 0o666,
+ });
+ p.pipe(stream);
+ const promise = new Promise((res, rej) => {
+ stream.on('error', rej);
+ stream.on('close', res);
+ p.on('error', rej);
+ });
+ addFilesAsync(p, files);
+ return promise;
+};
+const addFilesSync = (p, files) => {
+ files.forEach(file => {
+ if (file.charAt(0) === '@') {
+ (0, list_js_1.list)({
+ file: node_path_1.default.resolve(p.cwd, file.slice(1)),
+ sync: true,
+ noResume: true,
+ onReadEntry: entry => p.add(entry),
+ });
+ }
+ else {
+ p.add(file);
+ }
+ });
+ p.end();
+};
+const addFilesAsync = async (p, files) => {
+ for (let i = 0; i < files.length; i++) {
+ const file = String(files[i]);
+ if (file.charAt(0) === '@') {
+ await (0, list_js_1.list)({
+ file: node_path_1.default.resolve(String(p.cwd), file.slice(1)),
+ noResume: true,
+ onReadEntry: entry => {
+ p.add(entry);
+ },
+ });
+ }
+ else {
+ p.add(file);
+ }
+ }
+ p.end();
+};
+const createSync = (opt, files) => {
+ const p = new pack_js_1.PackSync(opt);
+ addFilesSync(p, files);
+ return p;
+};
+const createAsync = (opt, files) => {
+ const p = new pack_js_1.Pack(opt);
+ addFilesAsync(p, files);
+ return p;
+};
+exports.create = (0, make_command_js_1.makeCommand)(createFileSync, createFile, createSync, createAsync, (_opt, files) => {
+ if (!files?.length) {
+ throw new TypeError('no paths specified to add to archive');
+ }
+});
+//# sourceMappingURL=create.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/cwd-error.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/cwd-error.js
new file mode 100644
index 00000000000..d703a7772be
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/cwd-error.js
@@ -0,0 +1,18 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.CwdError = void 0;
+class CwdError extends Error {
+ path;
+ code;
+ syscall = 'chdir';
+ constructor(path, code) {
+ super(`${code}: Cannot cd into '${path}'`);
+ this.path = path;
+ this.code = code;
+ }
+ get name() {
+ return 'CwdError';
+ }
+}
+exports.CwdError = CwdError;
+//# sourceMappingURL=cwd-error.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/extract.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/extract.js
new file mode 100644
index 00000000000..f848cbcbf77
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/extract.js
@@ -0,0 +1,78 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.extract = void 0;
+// tar -x
+const fsm = __importStar(require("@isaacs/fs-minipass"));
+const node_fs_1 = __importDefault(require("node:fs"));
+const list_js_1 = require("./list.js");
+const make_command_js_1 = require("./make-command.js");
+const unpack_js_1 = require("./unpack.js");
+const extractFileSync = (opt) => {
+ const u = new unpack_js_1.UnpackSync(opt);
+ const file = opt.file;
+ const stat = node_fs_1.default.statSync(file);
+ // This trades a zero-byte read() syscall for a stat
+ // However, it will usually result in less memory allocation
+ const readSize = opt.maxReadSize || 16 * 1024 * 1024;
+ const stream = new fsm.ReadStreamSync(file, {
+ readSize: readSize,
+ size: stat.size,
+ });
+ stream.pipe(u);
+};
+const extractFile = (opt, _) => {
+ const u = new unpack_js_1.Unpack(opt);
+ const readSize = opt.maxReadSize || 16 * 1024 * 1024;
+ const file = opt.file;
+ const p = new Promise((resolve, reject) => {
+ u.on('error', reject);
+ u.on('close', resolve);
+ // This trades a zero-byte read() syscall for a stat
+ // However, it will usually result in less memory allocation
+ node_fs_1.default.stat(file, (er, stat) => {
+ if (er) {
+ reject(er);
+ }
+ else {
+ const stream = new fsm.ReadStream(file, {
+ readSize: readSize,
+ size: stat.size,
+ });
+ stream.on('error', reject);
+ stream.pipe(u);
+ }
+ });
+ });
+ return p;
+};
+exports.extract = (0, make_command_js_1.makeCommand)(extractFileSync, extractFile, opt => new unpack_js_1.UnpackSync(opt), opt => new unpack_js_1.Unpack(opt), (opt, files) => {
+ if (files?.length)
+ (0, list_js_1.filesFilter)(opt, files);
+});
+//# sourceMappingURL=extract.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/get-write-flag.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/get-write-flag.js
new file mode 100644
index 00000000000..94add8f6b22
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/get-write-flag.js
@@ -0,0 +1,29 @@
+"use strict";
+// Get the appropriate flag to use for creating files
+// We use fmap on Windows platforms for files less than
+// 512kb. This is a fairly low limit, but avoids making
+// things slower in some cases. Since most of what this
+// library is used for is extracting tarballs of many
+// relatively small files in npm packages and the like,
+// it can be a big boost on Windows platforms.
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getWriteFlag = void 0;
+const fs_1 = __importDefault(require("fs"));
+const platform = process.env.__FAKE_PLATFORM__ || process.platform;
+const isWindows = platform === 'win32';
+/* c8 ignore start */
+const { O_CREAT, O_TRUNC, O_WRONLY } = fs_1.default.constants;
+const UV_FS_O_FILEMAP = Number(process.env.__FAKE_FS_O_FILENAME__) ||
+ fs_1.default.constants.UV_FS_O_FILEMAP ||
+ 0;
+/* c8 ignore stop */
+const fMapEnabled = isWindows && !!UV_FS_O_FILEMAP;
+const fMapLimit = 512 * 1024;
+const fMapFlag = UV_FS_O_FILEMAP | O_TRUNC | O_CREAT | O_WRONLY;
+exports.getWriteFlag = !fMapEnabled ?
+ () => 'w'
+ : (size) => (size < fMapLimit ? fMapFlag : 'w');
+//# sourceMappingURL=get-write-flag.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/header.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/header.js
new file mode 100644
index 00000000000..b3a48037b84
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/header.js
@@ -0,0 +1,306 @@
+"use strict";
+// parse a 512-byte header block to a data object, or vice-versa
+// encode returns `true` if a pax extended header is needed, because
+// the data could not be faithfully encoded in a simple header.
+// (Also, check header.needPax to see if it needs a pax header.)
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Header = void 0;
+const node_path_1 = require("node:path");
+const large = __importStar(require("./large-numbers.js"));
+const types = __importStar(require("./types.js"));
+class Header {
+ cksumValid = false;
+ needPax = false;
+ nullBlock = false;
+ block;
+ path;
+ mode;
+ uid;
+ gid;
+ size;
+ cksum;
+ #type = 'Unsupported';
+ linkpath;
+ uname;
+ gname;
+ devmaj = 0;
+ devmin = 0;
+ atime;
+ ctime;
+ mtime;
+ charset;
+ comment;
+ constructor(data, off = 0, ex, gex) {
+ if (Buffer.isBuffer(data)) {
+ this.decode(data, off || 0, ex, gex);
+ }
+ else if (data) {
+ this.#slurp(data);
+ }
+ }
+ decode(buf, off, ex, gex) {
+ if (!off) {
+ off = 0;
+ }
+ if (!buf || !(buf.length >= off + 512)) {
+ throw new Error('need 512 bytes for header');
+ }
+ this.path = decString(buf, off, 100);
+ this.mode = decNumber(buf, off + 100, 8);
+ this.uid = decNumber(buf, off + 108, 8);
+ this.gid = decNumber(buf, off + 116, 8);
+ this.size = decNumber(buf, off + 124, 12);
+ this.mtime = decDate(buf, off + 136, 12);
+ this.cksum = decNumber(buf, off + 148, 12);
+ // if we have extended or global extended headers, apply them now
+ // See https://github.com/npm/node-tar/pull/187
+ // Apply global before local, so it overrides
+ if (gex)
+ this.#slurp(gex, true);
+ if (ex)
+ this.#slurp(ex);
+ // old tar versions marked dirs as a file with a trailing /
+ const t = decString(buf, off + 156, 1);
+ if (types.isCode(t)) {
+ this.#type = t || '0';
+ }
+ if (this.#type === '0' && this.path.slice(-1) === '/') {
+ this.#type = '5';
+ }
+ // tar implementations sometimes incorrectly put the stat(dir).size
+ // as the size in the tarball, even though Directory entries are
+ // not able to have any body at all. In the very rare chance that
+ // it actually DOES have a body, we weren't going to do anything with
+ // it anyway, and it'll just be a warning about an invalid header.
+ if (this.#type === '5') {
+ this.size = 0;
+ }
+ this.linkpath = decString(buf, off + 157, 100);
+ if (buf.subarray(off + 257, off + 265).toString() ===
+ 'ustar\u000000') {
+ this.uname = decString(buf, off + 265, 32);
+ this.gname = decString(buf, off + 297, 32);
+ /* c8 ignore start */
+ this.devmaj = decNumber(buf, off + 329, 8) ?? 0;
+ this.devmin = decNumber(buf, off + 337, 8) ?? 0;
+ /* c8 ignore stop */
+ if (buf[off + 475] !== 0) {
+ // definitely a prefix, definitely >130 chars.
+ const prefix = decString(buf, off + 345, 155);
+ this.path = prefix + '/' + this.path;
+ }
+ else {
+ const prefix = decString(buf, off + 345, 130);
+ if (prefix) {
+ this.path = prefix + '/' + this.path;
+ }
+ this.atime = decDate(buf, off + 476, 12);
+ this.ctime = decDate(buf, off + 488, 12);
+ }
+ }
+ let sum = 8 * 0x20;
+ for (let i = off; i < off + 148; i++) {
+ sum += buf[i];
+ }
+ for (let i = off + 156; i < off + 512; i++) {
+ sum += buf[i];
+ }
+ this.cksumValid = sum === this.cksum;
+ if (this.cksum === undefined && sum === 8 * 0x20) {
+ this.nullBlock = true;
+ }
+ }
+ #slurp(ex, gex = false) {
+ Object.assign(this, Object.fromEntries(Object.entries(ex).filter(([k, v]) => {
+ // we slurp in everything except for the path attribute in
+ // a global extended header, because that's weird. Also, any
+ // null/undefined values are ignored.
+ return !(v === null ||
+ v === undefined ||
+ (k === 'path' && gex) ||
+ (k === 'linkpath' && gex) ||
+ k === 'global');
+ })));
+ }
+ encode(buf, off = 0) {
+ if (!buf) {
+ buf = this.block = Buffer.alloc(512);
+ }
+ if (this.#type === 'Unsupported') {
+ this.#type = '0';
+ }
+ if (!(buf.length >= off + 512)) {
+ throw new Error('need 512 bytes for header');
+ }
+ const prefixSize = this.ctime || this.atime ? 130 : 155;
+ const split = splitPrefix(this.path || '', prefixSize);
+ const path = split[0];
+ const prefix = split[1];
+ this.needPax = !!split[2];
+ this.needPax = encString(buf, off, 100, path) || this.needPax;
+ this.needPax =
+ encNumber(buf, off + 100, 8, this.mode) || this.needPax;
+ this.needPax =
+ encNumber(buf, off + 108, 8, this.uid) || this.needPax;
+ this.needPax =
+ encNumber(buf, off + 116, 8, this.gid) || this.needPax;
+ this.needPax =
+ encNumber(buf, off + 124, 12, this.size) || this.needPax;
+ this.needPax =
+ encDate(buf, off + 136, 12, this.mtime) || this.needPax;
+ buf[off + 156] = this.#type.charCodeAt(0);
+ this.needPax =
+ encString(buf, off + 157, 100, this.linkpath) || this.needPax;
+ buf.write('ustar\u000000', off + 257, 8);
+ this.needPax =
+ encString(buf, off + 265, 32, this.uname) || this.needPax;
+ this.needPax =
+ encString(buf, off + 297, 32, this.gname) || this.needPax;
+ this.needPax =
+ encNumber(buf, off + 329, 8, this.devmaj) || this.needPax;
+ this.needPax =
+ encNumber(buf, off + 337, 8, this.devmin) || this.needPax;
+ this.needPax =
+ encString(buf, off + 345, prefixSize, prefix) || this.needPax;
+ if (buf[off + 475] !== 0) {
+ this.needPax =
+ encString(buf, off + 345, 155, prefix) || this.needPax;
+ }
+ else {
+ this.needPax =
+ encString(buf, off + 345, 130, prefix) || this.needPax;
+ this.needPax =
+ encDate(buf, off + 476, 12, this.atime) || this.needPax;
+ this.needPax =
+ encDate(buf, off + 488, 12, this.ctime) || this.needPax;
+ }
+ let sum = 8 * 0x20;
+ for (let i = off; i < off + 148; i++) {
+ sum += buf[i];
+ }
+ for (let i = off + 156; i < off + 512; i++) {
+ sum += buf[i];
+ }
+ this.cksum = sum;
+ encNumber(buf, off + 148, 8, this.cksum);
+ this.cksumValid = true;
+ return this.needPax;
+ }
+ get type() {
+ return (this.#type === 'Unsupported' ?
+ this.#type
+ : types.name.get(this.#type));
+ }
+ get typeKey() {
+ return this.#type;
+ }
+ set type(type) {
+ const c = String(types.code.get(type));
+ if (types.isCode(c) || c === 'Unsupported') {
+ this.#type = c;
+ }
+ else if (types.isCode(type)) {
+ this.#type = type;
+ }
+ else {
+ throw new TypeError('invalid entry type: ' + type);
+ }
+ }
+}
+exports.Header = Header;
+const splitPrefix = (p, prefixSize) => {
+ const pathSize = 100;
+ let pp = p;
+ let prefix = '';
+ let ret = undefined;
+ const root = node_path_1.posix.parse(p).root || '.';
+ if (Buffer.byteLength(pp) < pathSize) {
+ ret = [pp, prefix, false];
+ }
+ else {
+ // first set prefix to the dir, and path to the base
+ prefix = node_path_1.posix.dirname(pp);
+ pp = node_path_1.posix.basename(pp);
+ do {
+ if (Buffer.byteLength(pp) <= pathSize &&
+ Buffer.byteLength(prefix) <= prefixSize) {
+ // both fit!
+ ret = [pp, prefix, false];
+ }
+ else if (Buffer.byteLength(pp) > pathSize &&
+ Buffer.byteLength(prefix) <= prefixSize) {
+ // prefix fits in prefix, but path doesn't fit in path
+ ret = [pp.slice(0, pathSize - 1), prefix, true];
+ }
+ else {
+ // make path take a bit from prefix
+ pp = node_path_1.posix.join(node_path_1.posix.basename(prefix), pp);
+ prefix = node_path_1.posix.dirname(prefix);
+ }
+ } while (prefix !== root && ret === undefined);
+ // at this point, found no resolution, just truncate
+ if (!ret) {
+ ret = [p.slice(0, pathSize - 1), '', true];
+ }
+ }
+ return ret;
+};
+const decString = (buf, off, size) => buf
+ .subarray(off, off + size)
+ .toString('utf8')
+ .replace(/\0.*/, '');
+const decDate = (buf, off, size) => numToDate(decNumber(buf, off, size));
+const numToDate = (num) => num === undefined ? undefined : new Date(num * 1000);
+const decNumber = (buf, off, size) => Number(buf[off]) & 0x80 ?
+ large.parse(buf.subarray(off, off + size))
+ : decSmallNumber(buf, off, size);
+const nanUndef = (value) => (isNaN(value) ? undefined : value);
+const decSmallNumber = (buf, off, size) => nanUndef(parseInt(buf
+ .subarray(off, off + size)
+ .toString('utf8')
+ .replace(/\0.*$/, '')
+ .trim(), 8));
+// the maximum encodable as a null-terminated octal, by field size
+const MAXNUM = {
+ 12: 0o77777777777,
+ 8: 0o7777777,
+};
+const encNumber = (buf, off, size, num) => num === undefined ? false
+ : num > MAXNUM[size] || num < 0 ?
+ (large.encode(num, buf.subarray(off, off + size)), true)
+ : (encSmallNumber(buf, off, size, num), false);
+const encSmallNumber = (buf, off, size, num) => buf.write(octalString(num, size), off, size, 'ascii');
+const octalString = (num, size) => padOctal(Math.floor(num).toString(8), size);
+const padOctal = (str, size) => (str.length === size - 1 ?
+ str
+ : new Array(size - str.length - 1).join('0') + str + ' ') + '\0';
+const encDate = (buf, off, size, date) => date === undefined ? false : (encNumber(buf, off, size, date.getTime() / 1000));
+// enough to fill the longest string we've got
+const NULLS = new Array(156).join('\0');
+// pad with nulls, return true if it's longer or non-ascii
+const encString = (buf, off, size, str) => str === undefined ? false : ((buf.write(str + NULLS, off, size, 'utf8'),
+ str.length !== Buffer.byteLength(str) || str.length > size));
+//# sourceMappingURL=header.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/index.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/index.js
new file mode 100644
index 00000000000..e93ed5ad54a
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/index.js
@@ -0,0 +1,54 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.u = exports.types = exports.r = exports.t = exports.x = exports.c = void 0;
+__exportStar(require("./create.js"), exports);
+var create_js_1 = require("./create.js");
+Object.defineProperty(exports, "c", { enumerable: true, get: function () { return create_js_1.create; } });
+__exportStar(require("./extract.js"), exports);
+var extract_js_1 = require("./extract.js");
+Object.defineProperty(exports, "x", { enumerable: true, get: function () { return extract_js_1.extract; } });
+__exportStar(require("./header.js"), exports);
+__exportStar(require("./list.js"), exports);
+var list_js_1 = require("./list.js");
+Object.defineProperty(exports, "t", { enumerable: true, get: function () { return list_js_1.list; } });
+// classes
+__exportStar(require("./pack.js"), exports);
+__exportStar(require("./parse.js"), exports);
+__exportStar(require("./pax.js"), exports);
+__exportStar(require("./read-entry.js"), exports);
+__exportStar(require("./replace.js"), exports);
+var replace_js_1 = require("./replace.js");
+Object.defineProperty(exports, "r", { enumerable: true, get: function () { return replace_js_1.replace; } });
+exports.types = __importStar(require("./types.js"));
+__exportStar(require("./unpack.js"), exports);
+__exportStar(require("./update.js"), exports);
+var update_js_1 = require("./update.js");
+Object.defineProperty(exports, "u", { enumerable: true, get: function () { return update_js_1.update; } });
+__exportStar(require("./write-entry.js"), exports);
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/large-numbers.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/large-numbers.js
new file mode 100644
index 00000000000..5b07aa7f71b
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/large-numbers.js
@@ -0,0 +1,99 @@
+"use strict";
+// Tar can encode large and negative numbers using a leading byte of
+// 0xff for negative, and 0x80 for positive.
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.parse = exports.encode = void 0;
+const encode = (num, buf) => {
+ if (!Number.isSafeInteger(num)) {
+ // The number is so large that javascript cannot represent it with integer
+ // precision.
+ throw Error('cannot encode number outside of javascript safe integer range');
+ }
+ else if (num < 0) {
+ encodeNegative(num, buf);
+ }
+ else {
+ encodePositive(num, buf);
+ }
+ return buf;
+};
+exports.encode = encode;
+const encodePositive = (num, buf) => {
+ buf[0] = 0x80;
+ for (var i = buf.length; i > 1; i--) {
+ buf[i - 1] = num & 0xff;
+ num = Math.floor(num / 0x100);
+ }
+};
+const encodeNegative = (num, buf) => {
+ buf[0] = 0xff;
+ var flipped = false;
+ num = num * -1;
+ for (var i = buf.length; i > 1; i--) {
+ var byte = num & 0xff;
+ num = Math.floor(num / 0x100);
+ if (flipped) {
+ buf[i - 1] = onesComp(byte);
+ }
+ else if (byte === 0) {
+ buf[i - 1] = 0;
+ }
+ else {
+ flipped = true;
+ buf[i - 1] = twosComp(byte);
+ }
+ }
+};
+const parse = (buf) => {
+ const pre = buf[0];
+ const value = pre === 0x80 ? pos(buf.subarray(1, buf.length))
+ : pre === 0xff ? twos(buf)
+ : null;
+ if (value === null) {
+ throw Error('invalid base256 encoding');
+ }
+ if (!Number.isSafeInteger(value)) {
+ // The number is so large that javascript cannot represent it with integer
+ // precision.
+ throw Error('parsed number outside of javascript safe integer range');
+ }
+ return value;
+};
+exports.parse = parse;
+const twos = (buf) => {
+ var len = buf.length;
+ var sum = 0;
+ var flipped = false;
+ for (var i = len - 1; i > -1; i--) {
+ var byte = Number(buf[i]);
+ var f;
+ if (flipped) {
+ f = onesComp(byte);
+ }
+ else if (byte === 0) {
+ f = byte;
+ }
+ else {
+ flipped = true;
+ f = twosComp(byte);
+ }
+ if (f !== 0) {
+ sum -= f * Math.pow(256, len - i - 1);
+ }
+ }
+ return sum;
+};
+const pos = (buf) => {
+ var len = buf.length;
+ var sum = 0;
+ for (var i = len - 1; i > -1; i--) {
+ var byte = Number(buf[i]);
+ if (byte !== 0) {
+ sum += byte * Math.pow(256, len - i - 1);
+ }
+ }
+ return sum;
+};
+const onesComp = (byte) => (0xff ^ byte) & 0xff;
+const twosComp = (byte) => ((0xff ^ byte) + 1) & 0xff;
+//# sourceMappingURL=large-numbers.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/list.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/list.js
new file mode 100644
index 00000000000..3cd34bb4bad
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/list.js
@@ -0,0 +1,136 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.list = exports.filesFilter = void 0;
+// tar -t
+const fsm = __importStar(require("@isaacs/fs-minipass"));
+const node_fs_1 = __importDefault(require("node:fs"));
+const path_1 = require("path");
+const make_command_js_1 = require("./make-command.js");
+const parse_js_1 = require("./parse.js");
+const strip_trailing_slashes_js_1 = require("./strip-trailing-slashes.js");
+const onReadEntryFunction = (opt) => {
+ const onReadEntry = opt.onReadEntry;
+ opt.onReadEntry =
+ onReadEntry ?
+ e => {
+ onReadEntry(e);
+ e.resume();
+ }
+ : e => e.resume();
+};
+// construct a filter that limits the file entries listed
+// include child entries if a dir is included
+const filesFilter = (opt, files) => {
+ const map = new Map(files.map(f => [(0, strip_trailing_slashes_js_1.stripTrailingSlashes)(f), true]));
+ const filter = opt.filter;
+ const mapHas = (file, r = '') => {
+ const root = r || (0, path_1.parse)(file).root || '.';
+ let ret;
+ if (file === root)
+ ret = false;
+ else {
+ const m = map.get(file);
+ if (m !== undefined) {
+ ret = m;
+ }
+ else {
+ ret = mapHas((0, path_1.dirname)(file), root);
+ }
+ }
+ map.set(file, ret);
+ return ret;
+ };
+ opt.filter =
+ filter ?
+ (file, entry) => filter(file, entry) && mapHas((0, strip_trailing_slashes_js_1.stripTrailingSlashes)(file))
+ : file => mapHas((0, strip_trailing_slashes_js_1.stripTrailingSlashes)(file));
+};
+exports.filesFilter = filesFilter;
+const listFileSync = (opt) => {
+ const p = new parse_js_1.Parser(opt);
+ const file = opt.file;
+ let fd;
+ try {
+ const stat = node_fs_1.default.statSync(file);
+ const readSize = opt.maxReadSize || 16 * 1024 * 1024;
+ if (stat.size < readSize) {
+ p.end(node_fs_1.default.readFileSync(file));
+ }
+ else {
+ let pos = 0;
+ const buf = Buffer.allocUnsafe(readSize);
+ fd = node_fs_1.default.openSync(file, 'r');
+ while (pos < stat.size) {
+ const bytesRead = node_fs_1.default.readSync(fd, buf, 0, readSize, pos);
+ pos += bytesRead;
+ p.write(buf.subarray(0, bytesRead));
+ }
+ p.end();
+ }
+ }
+ finally {
+ if (typeof fd === 'number') {
+ try {
+ node_fs_1.default.closeSync(fd);
+ /* c8 ignore next */
+ }
+ catch (er) { }
+ }
+ }
+};
+const listFile = (opt, _files) => {
+ const parse = new parse_js_1.Parser(opt);
+ const readSize = opt.maxReadSize || 16 * 1024 * 1024;
+ const file = opt.file;
+ const p = new Promise((resolve, reject) => {
+ parse.on('error', reject);
+ parse.on('end', resolve);
+ node_fs_1.default.stat(file, (er, stat) => {
+ if (er) {
+ reject(er);
+ }
+ else {
+ const stream = new fsm.ReadStream(file, {
+ readSize: readSize,
+ size: stat.size,
+ });
+ stream.on('error', reject);
+ stream.pipe(parse);
+ }
+ });
+ });
+ return p;
+};
+exports.list = (0, make_command_js_1.makeCommand)(listFileSync, listFile, opt => new parse_js_1.Parser(opt), opt => new parse_js_1.Parser(opt), (opt, files) => {
+ if (files?.length)
+ (0, exports.filesFilter)(opt, files);
+ if (!opt.noResume)
+ onReadEntryFunction(opt);
+});
+//# sourceMappingURL=list.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/make-command.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/make-command.js
new file mode 100644
index 00000000000..1814319e78b
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/make-command.js
@@ -0,0 +1,61 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.makeCommand = void 0;
+const options_js_1 = require("./options.js");
+const makeCommand = (syncFile, asyncFile, syncNoFile, asyncNoFile, validate) => {
+ return Object.assign((opt_ = [], entries, cb) => {
+ if (Array.isArray(opt_)) {
+ entries = opt_;
+ opt_ = {};
+ }
+ if (typeof entries === 'function') {
+ cb = entries;
+ entries = undefined;
+ }
+ if (!entries) {
+ entries = [];
+ }
+ else {
+ entries = Array.from(entries);
+ }
+ const opt = (0, options_js_1.dealias)(opt_);
+ validate?.(opt, entries);
+ if ((0, options_js_1.isSyncFile)(opt)) {
+ if (typeof cb === 'function') {
+ throw new TypeError('callback not supported for sync tar functions');
+ }
+ return syncFile(opt, entries);
+ }
+ else if ((0, options_js_1.isAsyncFile)(opt)) {
+ const p = asyncFile(opt, entries);
+ // weirdness to make TS happy
+ const c = cb ? cb : undefined;
+ return c ? p.then(() => c(), c) : p;
+ }
+ else if ((0, options_js_1.isSyncNoFile)(opt)) {
+ if (typeof cb === 'function') {
+ throw new TypeError('callback not supported for sync tar functions');
+ }
+ return syncNoFile(opt, entries);
+ }
+ else if ((0, options_js_1.isAsyncNoFile)(opt)) {
+ if (typeof cb === 'function') {
+ throw new TypeError('callback only supported with file option');
+ }
+ return asyncNoFile(opt, entries);
+ /* c8 ignore start */
+ }
+ else {
+ throw new Error('impossible options??');
+ }
+ /* c8 ignore stop */
+ }, {
+ syncFile,
+ asyncFile,
+ syncNoFile,
+ asyncNoFile,
+ validate,
+ });
+};
+exports.makeCommand = makeCommand;
+//# sourceMappingURL=make-command.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/mkdir.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/mkdir.js
new file mode 100644
index 00000000000..2b13ecbab67
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/mkdir.js
@@ -0,0 +1,209 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.mkdirSync = exports.mkdir = void 0;
+const chownr_1 = require("chownr");
+const fs_1 = __importDefault(require("fs"));
+const mkdirp_1 = require("mkdirp");
+const node_path_1 = __importDefault(require("node:path"));
+const cwd_error_js_1 = require("./cwd-error.js");
+const normalize_windows_path_js_1 = require("./normalize-windows-path.js");
+const symlink_error_js_1 = require("./symlink-error.js");
+const cGet = (cache, key) => cache.get((0, normalize_windows_path_js_1.normalizeWindowsPath)(key));
+const cSet = (cache, key, val) => cache.set((0, normalize_windows_path_js_1.normalizeWindowsPath)(key), val);
+const checkCwd = (dir, cb) => {
+ fs_1.default.stat(dir, (er, st) => {
+ if (er || !st.isDirectory()) {
+ er = new cwd_error_js_1.CwdError(dir, er?.code || 'ENOTDIR');
+ }
+ cb(er);
+ });
+};
+/**
+ * Wrapper around mkdirp for tar's needs.
+ *
+ * The main purpose is to avoid creating directories if we know that
+ * they already exist (and track which ones exist for this purpose),
+ * and prevent entries from being extracted into symlinked folders,
+ * if `preservePaths` is not set.
+ */
+const mkdir = (dir, opt, cb) => {
+ dir = (0, normalize_windows_path_js_1.normalizeWindowsPath)(dir);
+ // if there's any overlap between mask and mode,
+ // then we'll need an explicit chmod
+ /* c8 ignore next */
+ const umask = opt.umask ?? 0o22;
+ const mode = opt.mode | 0o0700;
+ const needChmod = (mode & umask) !== 0;
+ const uid = opt.uid;
+ const gid = opt.gid;
+ const doChown = typeof uid === 'number' &&
+ typeof gid === 'number' &&
+ (uid !== opt.processUid || gid !== opt.processGid);
+ const preserve = opt.preserve;
+ const unlink = opt.unlink;
+ const cache = opt.cache;
+ const cwd = (0, normalize_windows_path_js_1.normalizeWindowsPath)(opt.cwd);
+ const done = (er, created) => {
+ if (er) {
+ cb(er);
+ }
+ else {
+ cSet(cache, dir, true);
+ if (created && doChown) {
+ (0, chownr_1.chownr)(created, uid, gid, er => done(er));
+ }
+ else if (needChmod) {
+ fs_1.default.chmod(dir, mode, cb);
+ }
+ else {
+ cb();
+ }
+ }
+ };
+ if (cache && cGet(cache, dir) === true) {
+ return done();
+ }
+ if (dir === cwd) {
+ return checkCwd(dir, done);
+ }
+ if (preserve) {
+ return (0, mkdirp_1.mkdirp)(dir, { mode }).then(made => done(null, made ?? undefined), // oh, ts
+ done);
+ }
+ const sub = (0, normalize_windows_path_js_1.normalizeWindowsPath)(node_path_1.default.relative(cwd, dir));
+ const parts = sub.split('/');
+ mkdir_(cwd, parts, mode, cache, unlink, cwd, undefined, done);
+};
+exports.mkdir = mkdir;
+const mkdir_ = (base, parts, mode, cache, unlink, cwd, created, cb) => {
+ if (!parts.length) {
+ return cb(null, created);
+ }
+ const p = parts.shift();
+ const part = (0, normalize_windows_path_js_1.normalizeWindowsPath)(node_path_1.default.resolve(base + '/' + p));
+ if (cGet(cache, part)) {
+ return mkdir_(part, parts, mode, cache, unlink, cwd, created, cb);
+ }
+ fs_1.default.mkdir(part, mode, onmkdir(part, parts, mode, cache, unlink, cwd, created, cb));
+};
+const onmkdir = (part, parts, mode, cache, unlink, cwd, created, cb) => (er) => {
+ if (er) {
+ fs_1.default.lstat(part, (statEr, st) => {
+ if (statEr) {
+ statEr.path =
+ statEr.path && (0, normalize_windows_path_js_1.normalizeWindowsPath)(statEr.path);
+ cb(statEr);
+ }
+ else if (st.isDirectory()) {
+ mkdir_(part, parts, mode, cache, unlink, cwd, created, cb);
+ }
+ else if (unlink) {
+ fs_1.default.unlink(part, er => {
+ if (er) {
+ return cb(er);
+ }
+ fs_1.default.mkdir(part, mode, onmkdir(part, parts, mode, cache, unlink, cwd, created, cb));
+ });
+ }
+ else if (st.isSymbolicLink()) {
+ return cb(new symlink_error_js_1.SymlinkError(part, part + '/' + parts.join('/')));
+ }
+ else {
+ cb(er);
+ }
+ });
+ }
+ else {
+ created = created || part;
+ mkdir_(part, parts, mode, cache, unlink, cwd, created, cb);
+ }
+};
+const checkCwdSync = (dir) => {
+ let ok = false;
+ let code = undefined;
+ try {
+ ok = fs_1.default.statSync(dir).isDirectory();
+ }
+ catch (er) {
+ code = er?.code;
+ }
+ finally {
+ if (!ok) {
+ throw new cwd_error_js_1.CwdError(dir, code ?? 'ENOTDIR');
+ }
+ }
+};
+const mkdirSync = (dir, opt) => {
+ dir = (0, normalize_windows_path_js_1.normalizeWindowsPath)(dir);
+ // if there's any overlap between mask and mode,
+ // then we'll need an explicit chmod
+ /* c8 ignore next */
+ const umask = opt.umask ?? 0o22;
+ const mode = opt.mode | 0o700;
+ const needChmod = (mode & umask) !== 0;
+ const uid = opt.uid;
+ const gid = opt.gid;
+ const doChown = typeof uid === 'number' &&
+ typeof gid === 'number' &&
+ (uid !== opt.processUid || gid !== opt.processGid);
+ const preserve = opt.preserve;
+ const unlink = opt.unlink;
+ const cache = opt.cache;
+ const cwd = (0, normalize_windows_path_js_1.normalizeWindowsPath)(opt.cwd);
+ const done = (created) => {
+ cSet(cache, dir, true);
+ if (created && doChown) {
+ (0, chownr_1.chownrSync)(created, uid, gid);
+ }
+ if (needChmod) {
+ fs_1.default.chmodSync(dir, mode);
+ }
+ };
+ if (cache && cGet(cache, dir) === true) {
+ return done();
+ }
+ if (dir === cwd) {
+ checkCwdSync(cwd);
+ return done();
+ }
+ if (preserve) {
+ return done((0, mkdirp_1.mkdirpSync)(dir, mode) ?? undefined);
+ }
+ const sub = (0, normalize_windows_path_js_1.normalizeWindowsPath)(node_path_1.default.relative(cwd, dir));
+ const parts = sub.split('/');
+ let created = undefined;
+ for (let p = parts.shift(), part = cwd; p && (part += '/' + p); p = parts.shift()) {
+ part = (0, normalize_windows_path_js_1.normalizeWindowsPath)(node_path_1.default.resolve(part));
+ if (cGet(cache, part)) {
+ continue;
+ }
+ try {
+ fs_1.default.mkdirSync(part, mode);
+ created = created || part;
+ cSet(cache, part, true);
+ }
+ catch (er) {
+ const st = fs_1.default.lstatSync(part);
+ if (st.isDirectory()) {
+ cSet(cache, part, true);
+ continue;
+ }
+ else if (unlink) {
+ fs_1.default.unlinkSync(part);
+ fs_1.default.mkdirSync(part, mode);
+ created = created || part;
+ cSet(cache, part, true);
+ continue;
+ }
+ else if (st.isSymbolicLink()) {
+ return new symlink_error_js_1.SymlinkError(part, part + '/' + parts.join('/'));
+ }
+ }
+ }
+ return done(created);
+};
+exports.mkdirSync = mkdirSync;
+//# sourceMappingURL=mkdir.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/mode-fix.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/mode-fix.js
new file mode 100644
index 00000000000..49dd727961d
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/mode-fix.js
@@ -0,0 +1,29 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.modeFix = void 0;
+const modeFix = (mode, isDir, portable) => {
+ mode &= 0o7777;
+ // in portable mode, use the minimum reasonable umask
+ // if this system creates files with 0o664 by default
+ // (as some linux distros do), then we'll write the
+ // archive with 0o644 instead. Also, don't ever create
+ // a file that is not readable/writable by the owner.
+ if (portable) {
+ mode = (mode | 0o600) & ~0o22;
+ }
+ // if dirs are readable, then they should be listable
+ if (isDir) {
+ if (mode & 0o400) {
+ mode |= 0o100;
+ }
+ if (mode & 0o40) {
+ mode |= 0o10;
+ }
+ if (mode & 0o4) {
+ mode |= 0o1;
+ }
+ }
+ return mode;
+};
+exports.modeFix = modeFix;
+//# sourceMappingURL=mode-fix.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/normalize-unicode.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/normalize-unicode.js
new file mode 100644
index 00000000000..2f08ce46d98
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/normalize-unicode.js
@@ -0,0 +1,17 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.normalizeUnicode = void 0;
+// warning: extremely hot code path.
+// This has been meticulously optimized for use
+// within npm install on large package trees.
+// Do not edit without careful benchmarking.
+const normalizeCache = Object.create(null);
+const { hasOwnProperty } = Object.prototype;
+const normalizeUnicode = (s) => {
+ if (!hasOwnProperty.call(normalizeCache, s)) {
+ normalizeCache[s] = s.normalize('NFD');
+ }
+ return normalizeCache[s];
+};
+exports.normalizeUnicode = normalizeUnicode;
+//# sourceMappingURL=normalize-unicode.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/normalize-windows-path.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/normalize-windows-path.js
new file mode 100644
index 00000000000..b0c7aaa9f2d
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/normalize-windows-path.js
@@ -0,0 +1,12 @@
+"use strict";
+// on windows, either \ or / are valid directory separators.
+// on unix, \ is a valid character in filenames.
+// so, on windows, and only on windows, we replace all \ chars with /,
+// so that we can use / as our one and only directory separator char.
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.normalizeWindowsPath = void 0;
+const platform = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform;
+exports.normalizeWindowsPath = platform !== 'win32' ?
+ (p) => p
+ : (p) => p && p.replace(/\\/g, '/');
+//# sourceMappingURL=normalize-windows-path.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/options.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/options.js
new file mode 100644
index 00000000000..4cd06505bc7
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/options.js
@@ -0,0 +1,66 @@
+"use strict";
+// turn tar(1) style args like `C` into the more verbose things like `cwd`
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.dealias = exports.isNoFile = exports.isFile = exports.isAsync = exports.isSync = exports.isAsyncNoFile = exports.isSyncNoFile = exports.isAsyncFile = exports.isSyncFile = void 0;
+const argmap = new Map([
+ ['C', 'cwd'],
+ ['f', 'file'],
+ ['z', 'gzip'],
+ ['P', 'preservePaths'],
+ ['U', 'unlink'],
+ ['strip-components', 'strip'],
+ ['stripComponents', 'strip'],
+ ['keep-newer', 'newer'],
+ ['keepNewer', 'newer'],
+ ['keep-newer-files', 'newer'],
+ ['keepNewerFiles', 'newer'],
+ ['k', 'keep'],
+ ['keep-existing', 'keep'],
+ ['keepExisting', 'keep'],
+ ['m', 'noMtime'],
+ ['no-mtime', 'noMtime'],
+ ['p', 'preserveOwner'],
+ ['L', 'follow'],
+ ['h', 'follow'],
+ ['onentry', 'onReadEntry'],
+]);
+const isSyncFile = (o) => !!o.sync && !!o.file;
+exports.isSyncFile = isSyncFile;
+const isAsyncFile = (o) => !o.sync && !!o.file;
+exports.isAsyncFile = isAsyncFile;
+const isSyncNoFile = (o) => !!o.sync && !o.file;
+exports.isSyncNoFile = isSyncNoFile;
+const isAsyncNoFile = (o) => !o.sync && !o.file;
+exports.isAsyncNoFile = isAsyncNoFile;
+const isSync = (o) => !!o.sync;
+exports.isSync = isSync;
+const isAsync = (o) => !o.sync;
+exports.isAsync = isAsync;
+const isFile = (o) => !!o.file;
+exports.isFile = isFile;
+const isNoFile = (o) => !o.file;
+exports.isNoFile = isNoFile;
+const dealiasKey = (k) => {
+ const d = argmap.get(k);
+ if (d)
+ return d;
+ return k;
+};
+const dealias = (opt = {}) => {
+ if (!opt)
+ return {};
+ const result = {};
+ for (const [key, v] of Object.entries(opt)) {
+ // TS doesn't know that aliases are going to always be the same type
+ const k = dealiasKey(key);
+ result[k] = v;
+ }
+ // affordance for deprecated noChmod -> chmod
+ if (result.chmod === undefined && result.noChmod === false) {
+ result.chmod = true;
+ }
+ delete result.noChmod;
+ return result;
+};
+exports.dealias = dealias;
+//# sourceMappingURL=options.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/pack.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/pack.js
new file mode 100644
index 00000000000..303e93063c2
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/pack.js
@@ -0,0 +1,477 @@
+"use strict";
+// A readable tar stream creator
+// Technically, this is a transform stream that you write paths into,
+// and tar format comes out of.
+// The `add()` method is like `write()` but returns this,
+// and end() return `this` as well, so you can
+// do `new Pack(opt).add('files').add('dir').end().pipe(output)
+// You could also do something like:
+// streamOfPaths().pipe(new Pack()).pipe(new fs.WriteStream('out.tar'))
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.PackSync = exports.Pack = exports.PackJob = void 0;
+const fs_1 = __importDefault(require("fs"));
+const write_entry_js_1 = require("./write-entry.js");
+class PackJob {
+ path;
+ absolute;
+ entry;
+ stat;
+ readdir;
+ pending = false;
+ ignore = false;
+ piped = false;
+ constructor(path, absolute) {
+ this.path = path || './';
+ this.absolute = absolute;
+ }
+}
+exports.PackJob = PackJob;
+const minipass_1 = require("minipass");
+const zlib = __importStar(require("minizlib"));
+const yallist_1 = require("yallist");
+const read_entry_js_1 = require("./read-entry.js");
+const warn_method_js_1 = require("./warn-method.js");
+const EOF = Buffer.alloc(1024);
+const ONSTAT = Symbol('onStat');
+const ENDED = Symbol('ended');
+const QUEUE = Symbol('queue');
+const CURRENT = Symbol('current');
+const PROCESS = Symbol('process');
+const PROCESSING = Symbol('processing');
+const PROCESSJOB = Symbol('processJob');
+const JOBS = Symbol('jobs');
+const JOBDONE = Symbol('jobDone');
+const ADDFSENTRY = Symbol('addFSEntry');
+const ADDTARENTRY = Symbol('addTarEntry');
+const STAT = Symbol('stat');
+const READDIR = Symbol('readdir');
+const ONREADDIR = Symbol('onreaddir');
+const PIPE = Symbol('pipe');
+const ENTRY = Symbol('entry');
+const ENTRYOPT = Symbol('entryOpt');
+const WRITEENTRYCLASS = Symbol('writeEntryClass');
+const WRITE = Symbol('write');
+const ONDRAIN = Symbol('ondrain');
+const path_1 = __importDefault(require("path"));
+const normalize_windows_path_js_1 = require("./normalize-windows-path.js");
+class Pack extends minipass_1.Minipass {
+ opt;
+ cwd;
+ maxReadSize;
+ preservePaths;
+ strict;
+ noPax;
+ prefix;
+ linkCache;
+ statCache;
+ file;
+ portable;
+ zip;
+ readdirCache;
+ noDirRecurse;
+ follow;
+ noMtime;
+ mtime;
+ filter;
+ jobs;
+ [WRITEENTRYCLASS];
+ onWriteEntry;
+ [QUEUE];
+ [JOBS] = 0;
+ [PROCESSING] = false;
+ [ENDED] = false;
+ constructor(opt = {}) {
+ //@ts-ignore
+ super();
+ this.opt = opt;
+ this.file = opt.file || '';
+ this.cwd = opt.cwd || process.cwd();
+ this.maxReadSize = opt.maxReadSize;
+ this.preservePaths = !!opt.preservePaths;
+ this.strict = !!opt.strict;
+ this.noPax = !!opt.noPax;
+ this.prefix = (0, normalize_windows_path_js_1.normalizeWindowsPath)(opt.prefix || '');
+ this.linkCache = opt.linkCache || new Map();
+ this.statCache = opt.statCache || new Map();
+ this.readdirCache = opt.readdirCache || new Map();
+ this.onWriteEntry = opt.onWriteEntry;
+ this[WRITEENTRYCLASS] = write_entry_js_1.WriteEntry;
+ if (typeof opt.onwarn === 'function') {
+ this.on('warn', opt.onwarn);
+ }
+ this.portable = !!opt.portable;
+ if (opt.gzip || opt.brotli) {
+ if (opt.gzip && opt.brotli) {
+ throw new TypeError('gzip and brotli are mutually exclusive');
+ }
+ if (opt.gzip) {
+ if (typeof opt.gzip !== 'object') {
+ opt.gzip = {};
+ }
+ if (this.portable) {
+ opt.gzip.portable = true;
+ }
+ this.zip = new zlib.Gzip(opt.gzip);
+ }
+ if (opt.brotli) {
+ if (typeof opt.brotli !== 'object') {
+ opt.brotli = {};
+ }
+ this.zip = new zlib.BrotliCompress(opt.brotli);
+ }
+ /* c8 ignore next */
+ if (!this.zip)
+ throw new Error('impossible');
+ const zip = this.zip;
+ zip.on('data', chunk => super.write(chunk));
+ zip.on('end', () => super.end());
+ zip.on('drain', () => this[ONDRAIN]());
+ this.on('resume', () => zip.resume());
+ }
+ else {
+ this.on('drain', this[ONDRAIN]);
+ }
+ this.noDirRecurse = !!opt.noDirRecurse;
+ this.follow = !!opt.follow;
+ this.noMtime = !!opt.noMtime;
+ if (opt.mtime)
+ this.mtime = opt.mtime;
+ this.filter =
+ typeof opt.filter === 'function' ? opt.filter : () => true;
+ this[QUEUE] = new yallist_1.Yallist();
+ this[JOBS] = 0;
+ this.jobs = Number(opt.jobs) || 4;
+ this[PROCESSING] = false;
+ this[ENDED] = false;
+ }
+ [WRITE](chunk) {
+ return super.write(chunk);
+ }
+ add(path) {
+ this.write(path);
+ return this;
+ }
+ end(path, encoding, cb) {
+ /* c8 ignore start */
+ if (typeof path === 'function') {
+ cb = path;
+ path = undefined;
+ }
+ if (typeof encoding === 'function') {
+ cb = encoding;
+ encoding = undefined;
+ }
+ /* c8 ignore stop */
+ if (path) {
+ this.add(path);
+ }
+ this[ENDED] = true;
+ this[PROCESS]();
+ /* c8 ignore next */
+ if (cb)
+ cb();
+ return this;
+ }
+ write(path) {
+ if (this[ENDED]) {
+ throw new Error('write after end');
+ }
+ if (path instanceof read_entry_js_1.ReadEntry) {
+ this[ADDTARENTRY](path);
+ }
+ else {
+ this[ADDFSENTRY](path);
+ }
+ return this.flowing;
+ }
+ [ADDTARENTRY](p) {
+ const absolute = (0, normalize_windows_path_js_1.normalizeWindowsPath)(path_1.default.resolve(this.cwd, p.path));
+ // in this case, we don't have to wait for the stat
+ if (!this.filter(p.path, p)) {
+ p.resume();
+ }
+ else {
+ const job = new PackJob(p.path, absolute);
+ job.entry = new write_entry_js_1.WriteEntryTar(p, this[ENTRYOPT](job));
+ job.entry.on('end', () => this[JOBDONE](job));
+ this[JOBS] += 1;
+ this[QUEUE].push(job);
+ }
+ this[PROCESS]();
+ }
+ [ADDFSENTRY](p) {
+ const absolute = (0, normalize_windows_path_js_1.normalizeWindowsPath)(path_1.default.resolve(this.cwd, p));
+ this[QUEUE].push(new PackJob(p, absolute));
+ this[PROCESS]();
+ }
+ [STAT](job) {
+ job.pending = true;
+ this[JOBS] += 1;
+ const stat = this.follow ? 'stat' : 'lstat';
+ fs_1.default[stat](job.absolute, (er, stat) => {
+ job.pending = false;
+ this[JOBS] -= 1;
+ if (er) {
+ this.emit('error', er);
+ }
+ else {
+ this[ONSTAT](job, stat);
+ }
+ });
+ }
+ [ONSTAT](job, stat) {
+ this.statCache.set(job.absolute, stat);
+ job.stat = stat;
+ // now we have the stat, we can filter it.
+ if (!this.filter(job.path, stat)) {
+ job.ignore = true;
+ }
+ this[PROCESS]();
+ }
+ [READDIR](job) {
+ job.pending = true;
+ this[JOBS] += 1;
+ fs_1.default.readdir(job.absolute, (er, entries) => {
+ job.pending = false;
+ this[JOBS] -= 1;
+ if (er) {
+ return this.emit('error', er);
+ }
+ this[ONREADDIR](job, entries);
+ });
+ }
+ [ONREADDIR](job, entries) {
+ this.readdirCache.set(job.absolute, entries);
+ job.readdir = entries;
+ this[PROCESS]();
+ }
+ [PROCESS]() {
+ if (this[PROCESSING]) {
+ return;
+ }
+ this[PROCESSING] = true;
+ for (let w = this[QUEUE].head; !!w && this[JOBS] < this.jobs; w = w.next) {
+ this[PROCESSJOB](w.value);
+ if (w.value.ignore) {
+ const p = w.next;
+ this[QUEUE].removeNode(w);
+ w.next = p;
+ }
+ }
+ this[PROCESSING] = false;
+ if (this[ENDED] && !this[QUEUE].length && this[JOBS] === 0) {
+ if (this.zip) {
+ this.zip.end(EOF);
+ }
+ else {
+ super.write(EOF);
+ super.end();
+ }
+ }
+ }
+ get [CURRENT]() {
+ return this[QUEUE] && this[QUEUE].head && this[QUEUE].head.value;
+ }
+ [JOBDONE](_job) {
+ this[QUEUE].shift();
+ this[JOBS] -= 1;
+ this[PROCESS]();
+ }
+ [PROCESSJOB](job) {
+ if (job.pending) {
+ return;
+ }
+ if (job.entry) {
+ if (job === this[CURRENT] && !job.piped) {
+ this[PIPE](job);
+ }
+ return;
+ }
+ if (!job.stat) {
+ const sc = this.statCache.get(job.absolute);
+ if (sc) {
+ this[ONSTAT](job, sc);
+ }
+ else {
+ this[STAT](job);
+ }
+ }
+ if (!job.stat) {
+ return;
+ }
+ // filtered out!
+ if (job.ignore) {
+ return;
+ }
+ if (!this.noDirRecurse &&
+ job.stat.isDirectory() &&
+ !job.readdir) {
+ const rc = this.readdirCache.get(job.absolute);
+ if (rc) {
+ this[ONREADDIR](job, rc);
+ }
+ else {
+ this[READDIR](job);
+ }
+ if (!job.readdir) {
+ return;
+ }
+ }
+ // we know it doesn't have an entry, because that got checked above
+ job.entry = this[ENTRY](job);
+ if (!job.entry) {
+ job.ignore = true;
+ return;
+ }
+ if (job === this[CURRENT] && !job.piped) {
+ this[PIPE](job);
+ }
+ }
+ [ENTRYOPT](job) {
+ return {
+ onwarn: (code, msg, data) => this.warn(code, msg, data),
+ noPax: this.noPax,
+ cwd: this.cwd,
+ absolute: job.absolute,
+ preservePaths: this.preservePaths,
+ maxReadSize: this.maxReadSize,
+ strict: this.strict,
+ portable: this.portable,
+ linkCache: this.linkCache,
+ statCache: this.statCache,
+ noMtime: this.noMtime,
+ mtime: this.mtime,
+ prefix: this.prefix,
+ onWriteEntry: this.onWriteEntry,
+ };
+ }
+ [ENTRY](job) {
+ this[JOBS] += 1;
+ try {
+ const e = new this[WRITEENTRYCLASS](job.path, this[ENTRYOPT](job));
+ return e
+ .on('end', () => this[JOBDONE](job))
+ .on('error', er => this.emit('error', er));
+ }
+ catch (er) {
+ this.emit('error', er);
+ }
+ }
+ [ONDRAIN]() {
+ if (this[CURRENT] && this[CURRENT].entry) {
+ this[CURRENT].entry.resume();
+ }
+ }
+ // like .pipe() but using super, because our write() is special
+ [PIPE](job) {
+ job.piped = true;
+ if (job.readdir) {
+ job.readdir.forEach(entry => {
+ const p = job.path;
+ const base = p === './' ? '' : p.replace(/\/*$/, '/');
+ this[ADDFSENTRY](base + entry);
+ });
+ }
+ const source = job.entry;
+ const zip = this.zip;
+ /* c8 ignore start */
+ if (!source)
+ throw new Error('cannot pipe without source');
+ /* c8 ignore stop */
+ if (zip) {
+ source.on('data', chunk => {
+ if (!zip.write(chunk)) {
+ source.pause();
+ }
+ });
+ }
+ else {
+ source.on('data', chunk => {
+ if (!super.write(chunk)) {
+ source.pause();
+ }
+ });
+ }
+ }
+ pause() {
+ if (this.zip) {
+ this.zip.pause();
+ }
+ return super.pause();
+ }
+ warn(code, message, data = {}) {
+ (0, warn_method_js_1.warnMethod)(this, code, message, data);
+ }
+}
+exports.Pack = Pack;
+class PackSync extends Pack {
+ sync = true;
+ constructor(opt) {
+ super(opt);
+ this[WRITEENTRYCLASS] = write_entry_js_1.WriteEntrySync;
+ }
+ // pause/resume are no-ops in sync streams.
+ pause() { }
+ resume() { }
+ [STAT](job) {
+ const stat = this.follow ? 'statSync' : 'lstatSync';
+ this[ONSTAT](job, fs_1.default[stat](job.absolute));
+ }
+ [READDIR](job) {
+ this[ONREADDIR](job, fs_1.default.readdirSync(job.absolute));
+ }
+ // gotta get it all in this tick
+ [PIPE](job) {
+ const source = job.entry;
+ const zip = this.zip;
+ if (job.readdir) {
+ job.readdir.forEach(entry => {
+ const p = job.path;
+ const base = p === './' ? '' : p.replace(/\/*$/, '/');
+ this[ADDFSENTRY](base + entry);
+ });
+ }
+ /* c8 ignore start */
+ if (!source)
+ throw new Error('Cannot pipe without source');
+ /* c8 ignore stop */
+ if (zip) {
+ source.on('data', chunk => {
+ zip.write(chunk);
+ });
+ }
+ else {
+ source.on('data', chunk => {
+ super[WRITE](chunk);
+ });
+ }
+ }
+}
+exports.PackSync = PackSync;
+//# sourceMappingURL=pack.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/package.json b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/package.json
new file mode 100644
index 00000000000..5bbefffbabe
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "commonjs"
+}
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/parse.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/parse.js
new file mode 100644
index 00000000000..1f7e5fd65e8
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/parse.js
@@ -0,0 +1,599 @@
+"use strict";
+// this[BUFFER] is the remainder of a chunk if we're waiting for
+// the full 512 bytes of a header to come in. We will Buffer.concat()
+// it to the next write(), which is a mem copy, but a small one.
+//
+// this[QUEUE] is a Yallist of entries that haven't been emitted
+// yet this can only get filled up if the user keeps write()ing after
+// a write() returns false, or does a write() with more than one entry
+//
+// We don't buffer chunks, we always parse them and either create an
+// entry, or push it into the active entry. The ReadEntry class knows
+// to throw data away if .ignore=true
+//
+// Shift entry off the buffer when it emits 'end', and emit 'entry' for
+// the next one in the list.
+//
+// At any time, we're pushing body chunks into the entry at WRITEENTRY,
+// and waiting for 'end' on the entry at READENTRY
+//
+// ignored entries get .resume() called on them straight away
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Parser = void 0;
+const events_1 = require("events");
+const minizlib_1 = require("minizlib");
+const yallist_1 = require("yallist");
+const header_js_1 = require("./header.js");
+const pax_js_1 = require("./pax.js");
+const read_entry_js_1 = require("./read-entry.js");
+const warn_method_js_1 = require("./warn-method.js");
+const maxMetaEntrySize = 1024 * 1024;
+const gzipHeader = Buffer.from([0x1f, 0x8b]);
+const STATE = Symbol('state');
+const WRITEENTRY = Symbol('writeEntry');
+const READENTRY = Symbol('readEntry');
+const NEXTENTRY = Symbol('nextEntry');
+const PROCESSENTRY = Symbol('processEntry');
+const EX = Symbol('extendedHeader');
+const GEX = Symbol('globalExtendedHeader');
+const META = Symbol('meta');
+const EMITMETA = Symbol('emitMeta');
+const BUFFER = Symbol('buffer');
+const QUEUE = Symbol('queue');
+const ENDED = Symbol('ended');
+const EMITTEDEND = Symbol('emittedEnd');
+const EMIT = Symbol('emit');
+const UNZIP = Symbol('unzip');
+const CONSUMECHUNK = Symbol('consumeChunk');
+const CONSUMECHUNKSUB = Symbol('consumeChunkSub');
+const CONSUMEBODY = Symbol('consumeBody');
+const CONSUMEMETA = Symbol('consumeMeta');
+const CONSUMEHEADER = Symbol('consumeHeader');
+const CONSUMING = Symbol('consuming');
+const BUFFERCONCAT = Symbol('bufferConcat');
+const MAYBEEND = Symbol('maybeEnd');
+const WRITING = Symbol('writing');
+const ABORTED = Symbol('aborted');
+const DONE = Symbol('onDone');
+const SAW_VALID_ENTRY = Symbol('sawValidEntry');
+const SAW_NULL_BLOCK = Symbol('sawNullBlock');
+const SAW_EOF = Symbol('sawEOF');
+const CLOSESTREAM = Symbol('closeStream');
+const noop = () => true;
+class Parser extends events_1.EventEmitter {
+ file;
+ strict;
+ maxMetaEntrySize;
+ filter;
+ brotli;
+ writable = true;
+ readable = false;
+ [QUEUE] = new yallist_1.Yallist();
+ [BUFFER];
+ [READENTRY];
+ [WRITEENTRY];
+ [STATE] = 'begin';
+ [META] = '';
+ [EX];
+ [GEX];
+ [ENDED] = false;
+ [UNZIP];
+ [ABORTED] = false;
+ [SAW_VALID_ENTRY];
+ [SAW_NULL_BLOCK] = false;
+ [SAW_EOF] = false;
+ [WRITING] = false;
+ [CONSUMING] = false;
+ [EMITTEDEND] = false;
+ constructor(opt = {}) {
+ super();
+ this.file = opt.file || '';
+ // these BADARCHIVE errors can't be detected early. listen on DONE.
+ this.on(DONE, () => {
+ if (this[STATE] === 'begin' ||
+ this[SAW_VALID_ENTRY] === false) {
+ // either less than 1 block of data, or all entries were invalid.
+ // Either way, probably not even a tarball.
+ this.warn('TAR_BAD_ARCHIVE', 'Unrecognized archive format');
+ }
+ });
+ if (opt.ondone) {
+ this.on(DONE, opt.ondone);
+ }
+ else {
+ this.on(DONE, () => {
+ this.emit('prefinish');
+ this.emit('finish');
+ this.emit('end');
+ });
+ }
+ this.strict = !!opt.strict;
+ this.maxMetaEntrySize = opt.maxMetaEntrySize || maxMetaEntrySize;
+ this.filter = typeof opt.filter === 'function' ? opt.filter : noop;
+ // Unlike gzip, brotli doesn't have any magic bytes to identify it
+ // Users need to explicitly tell us they're extracting a brotli file
+ // Or we infer from the file extension
+ const isTBR = opt.file &&
+ (opt.file.endsWith('.tar.br') || opt.file.endsWith('.tbr'));
+ // if it's a tbr file it MIGHT be brotli, but we don't know until
+ // we look at it and verify it's not a valid tar file.
+ this.brotli =
+ !opt.gzip && opt.brotli !== undefined ? opt.brotli
+ : isTBR ? undefined
+ : false;
+ // have to set this so that streams are ok piping into it
+ this.on('end', () => this[CLOSESTREAM]());
+ if (typeof opt.onwarn === 'function') {
+ this.on('warn', opt.onwarn);
+ }
+ if (typeof opt.onReadEntry === 'function') {
+ this.on('entry', opt.onReadEntry);
+ }
+ }
+ warn(code, message, data = {}) {
+ (0, warn_method_js_1.warnMethod)(this, code, message, data);
+ }
+ [CONSUMEHEADER](chunk, position) {
+ if (this[SAW_VALID_ENTRY] === undefined) {
+ this[SAW_VALID_ENTRY] = false;
+ }
+ let header;
+ try {
+ header = new header_js_1.Header(chunk, position, this[EX], this[GEX]);
+ }
+ catch (er) {
+ return this.warn('TAR_ENTRY_INVALID', er);
+ }
+ if (header.nullBlock) {
+ if (this[SAW_NULL_BLOCK]) {
+ this[SAW_EOF] = true;
+ // ending an archive with no entries. pointless, but legal.
+ if (this[STATE] === 'begin') {
+ this[STATE] = 'header';
+ }
+ this[EMIT]('eof');
+ }
+ else {
+ this[SAW_NULL_BLOCK] = true;
+ this[EMIT]('nullBlock');
+ }
+ }
+ else {
+ this[SAW_NULL_BLOCK] = false;
+ if (!header.cksumValid) {
+ this.warn('TAR_ENTRY_INVALID', 'checksum failure', { header });
+ }
+ else if (!header.path) {
+ this.warn('TAR_ENTRY_INVALID', 'path is required', { header });
+ }
+ else {
+ const type = header.type;
+ if (/^(Symbolic)?Link$/.test(type) && !header.linkpath) {
+ this.warn('TAR_ENTRY_INVALID', 'linkpath required', {
+ header,
+ });
+ }
+ else if (!/^(Symbolic)?Link$/.test(type) &&
+ !/^(Global)?ExtendedHeader$/.test(type) &&
+ header.linkpath) {
+ this.warn('TAR_ENTRY_INVALID', 'linkpath forbidden', {
+ header,
+ });
+ }
+ else {
+ const entry = (this[WRITEENTRY] = new read_entry_js_1.ReadEntry(header, this[EX], this[GEX]));
+ // we do this for meta & ignored entries as well, because they
+ // are still valid tar, or else we wouldn't know to ignore them
+ if (!this[SAW_VALID_ENTRY]) {
+ if (entry.remain) {
+ // this might be the one!
+ const onend = () => {
+ if (!entry.invalid) {
+ this[SAW_VALID_ENTRY] = true;
+ }
+ };
+ entry.on('end', onend);
+ }
+ else {
+ this[SAW_VALID_ENTRY] = true;
+ }
+ }
+ if (entry.meta) {
+ if (entry.size > this.maxMetaEntrySize) {
+ entry.ignore = true;
+ this[EMIT]('ignoredEntry', entry);
+ this[STATE] = 'ignore';
+ entry.resume();
+ }
+ else if (entry.size > 0) {
+ this[META] = '';
+ entry.on('data', c => (this[META] += c));
+ this[STATE] = 'meta';
+ }
+ }
+ else {
+ this[EX] = undefined;
+ entry.ignore =
+ entry.ignore || !this.filter(entry.path, entry);
+ if (entry.ignore) {
+ // probably valid, just not something we care about
+ this[EMIT]('ignoredEntry', entry);
+ this[STATE] = entry.remain ? 'ignore' : 'header';
+ entry.resume();
+ }
+ else {
+ if (entry.remain) {
+ this[STATE] = 'body';
+ }
+ else {
+ this[STATE] = 'header';
+ entry.end();
+ }
+ if (!this[READENTRY]) {
+ this[QUEUE].push(entry);
+ this[NEXTENTRY]();
+ }
+ else {
+ this[QUEUE].push(entry);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ [CLOSESTREAM]() {
+ queueMicrotask(() => this.emit('close'));
+ }
+ [PROCESSENTRY](entry) {
+ let go = true;
+ if (!entry) {
+ this[READENTRY] = undefined;
+ go = false;
+ }
+ else if (Array.isArray(entry)) {
+ const [ev, ...args] = entry;
+ this.emit(ev, ...args);
+ }
+ else {
+ this[READENTRY] = entry;
+ this.emit('entry', entry);
+ if (!entry.emittedEnd) {
+ entry.on('end', () => this[NEXTENTRY]());
+ go = false;
+ }
+ }
+ return go;
+ }
+ [NEXTENTRY]() {
+ do { } while (this[PROCESSENTRY](this[QUEUE].shift()));
+ if (!this[QUEUE].length) {
+ // At this point, there's nothing in the queue, but we may have an
+ // entry which is being consumed (readEntry).
+ // If we don't, then we definitely can handle more data.
+ // If we do, and either it's flowing, or it has never had any data
+ // written to it, then it needs more.
+ // The only other possibility is that it has returned false from a
+ // write() call, so we wait for the next drain to continue.
+ const re = this[READENTRY];
+ const drainNow = !re || re.flowing || re.size === re.remain;
+ if (drainNow) {
+ if (!this[WRITING]) {
+ this.emit('drain');
+ }
+ }
+ else {
+ re.once('drain', () => this.emit('drain'));
+ }
+ }
+ }
+ [CONSUMEBODY](chunk, position) {
+ // write up to but no more than writeEntry.blockRemain
+ const entry = this[WRITEENTRY];
+ /* c8 ignore start */
+ if (!entry) {
+ throw new Error('attempt to consume body without entry??');
+ }
+ const br = entry.blockRemain ?? 0;
+ /* c8 ignore stop */
+ const c = br >= chunk.length && position === 0 ?
+ chunk
+ : chunk.subarray(position, position + br);
+ entry.write(c);
+ if (!entry.blockRemain) {
+ this[STATE] = 'header';
+ this[WRITEENTRY] = undefined;
+ entry.end();
+ }
+ return c.length;
+ }
+ [CONSUMEMETA](chunk, position) {
+ const entry = this[WRITEENTRY];
+ const ret = this[CONSUMEBODY](chunk, position);
+ // if we finished, then the entry is reset
+ if (!this[WRITEENTRY] && entry) {
+ this[EMITMETA](entry);
+ }
+ return ret;
+ }
+ [EMIT](ev, data, extra) {
+ if (!this[QUEUE].length && !this[READENTRY]) {
+ this.emit(ev, data, extra);
+ }
+ else {
+ this[QUEUE].push([ev, data, extra]);
+ }
+ }
+ [EMITMETA](entry) {
+ this[EMIT]('meta', this[META]);
+ switch (entry.type) {
+ case 'ExtendedHeader':
+ case 'OldExtendedHeader':
+ this[EX] = pax_js_1.Pax.parse(this[META], this[EX], false);
+ break;
+ case 'GlobalExtendedHeader':
+ this[GEX] = pax_js_1.Pax.parse(this[META], this[GEX], true);
+ break;
+ case 'NextFileHasLongPath':
+ case 'OldGnuLongPath': {
+ const ex = this[EX] ?? Object.create(null);
+ this[EX] = ex;
+ ex.path = this[META].replace(/\0.*/, '');
+ break;
+ }
+ case 'NextFileHasLongLinkpath': {
+ const ex = this[EX] || Object.create(null);
+ this[EX] = ex;
+ ex.linkpath = this[META].replace(/\0.*/, '');
+ break;
+ }
+ /* c8 ignore start */
+ default:
+ throw new Error('unknown meta: ' + entry.type);
+ /* c8 ignore stop */
+ }
+ }
+ abort(error) {
+ this[ABORTED] = true;
+ this.emit('abort', error);
+ // always throws, even in non-strict mode
+ this.warn('TAR_ABORT', error, { recoverable: false });
+ }
+ write(chunk, encoding, cb) {
+ if (typeof encoding === 'function') {
+ cb = encoding;
+ encoding = undefined;
+ }
+ if (typeof chunk === 'string') {
+ chunk = Buffer.from(chunk,
+ /* c8 ignore next */
+ typeof encoding === 'string' ? encoding : 'utf8');
+ }
+ if (this[ABORTED]) {
+ /* c8 ignore next */
+ cb?.();
+ return false;
+ }
+ // first write, might be gzipped
+ const needSniff = this[UNZIP] === undefined ||
+ (this.brotli === undefined && this[UNZIP] === false);
+ if (needSniff && chunk) {
+ if (this[BUFFER]) {
+ chunk = Buffer.concat([this[BUFFER], chunk]);
+ this[BUFFER] = undefined;
+ }
+ if (chunk.length < gzipHeader.length) {
+ this[BUFFER] = chunk;
+ /* c8 ignore next */
+ cb?.();
+ return true;
+ }
+ // look for gzip header
+ for (let i = 0; this[UNZIP] === undefined && i < gzipHeader.length; i++) {
+ if (chunk[i] !== gzipHeader[i]) {
+ this[UNZIP] = false;
+ }
+ }
+ const maybeBrotli = this.brotli === undefined;
+ if (this[UNZIP] === false && maybeBrotli) {
+ // read the first header to see if it's a valid tar file. If so,
+ // we can safely assume that it's not actually brotli, despite the
+ // .tbr or .tar.br file extension.
+ // if we ended before getting a full chunk, yes, def brotli
+ if (chunk.length < 512) {
+ if (this[ENDED]) {
+ this.brotli = true;
+ }
+ else {
+ this[BUFFER] = chunk;
+ /* c8 ignore next */
+ cb?.();
+ return true;
+ }
+ }
+ else {
+ // if it's tar, it's pretty reliably not brotli, chances of
+ // that happening are astronomical.
+ try {
+ new header_js_1.Header(chunk.subarray(0, 512));
+ this.brotli = false;
+ }
+ catch (_) {
+ this.brotli = true;
+ }
+ }
+ }
+ if (this[UNZIP] === undefined ||
+ (this[UNZIP] === false && this.brotli)) {
+ const ended = this[ENDED];
+ this[ENDED] = false;
+ this[UNZIP] =
+ this[UNZIP] === undefined ?
+ new minizlib_1.Unzip({})
+ : new minizlib_1.BrotliDecompress({});
+ this[UNZIP].on('data', chunk => this[CONSUMECHUNK](chunk));
+ this[UNZIP].on('error', er => this.abort(er));
+ this[UNZIP].on('end', () => {
+ this[ENDED] = true;
+ this[CONSUMECHUNK]();
+ });
+ this[WRITING] = true;
+ const ret = !!this[UNZIP][ended ? 'end' : 'write'](chunk);
+ this[WRITING] = false;
+ cb?.();
+ return ret;
+ }
+ }
+ this[WRITING] = true;
+ if (this[UNZIP]) {
+ this[UNZIP].write(chunk);
+ }
+ else {
+ this[CONSUMECHUNK](chunk);
+ }
+ this[WRITING] = false;
+ // return false if there's a queue, or if the current entry isn't flowing
+ const ret = this[QUEUE].length ? false
+ : this[READENTRY] ? this[READENTRY].flowing
+ : true;
+ // if we have no queue, then that means a clogged READENTRY
+ if (!ret && !this[QUEUE].length) {
+ this[READENTRY]?.once('drain', () => this.emit('drain'));
+ }
+ /* c8 ignore next */
+ cb?.();
+ return ret;
+ }
+ [BUFFERCONCAT](c) {
+ if (c && !this[ABORTED]) {
+ this[BUFFER] =
+ this[BUFFER] ? Buffer.concat([this[BUFFER], c]) : c;
+ }
+ }
+ [MAYBEEND]() {
+ if (this[ENDED] &&
+ !this[EMITTEDEND] &&
+ !this[ABORTED] &&
+ !this[CONSUMING]) {
+ this[EMITTEDEND] = true;
+ const entry = this[WRITEENTRY];
+ if (entry && entry.blockRemain) {
+ // truncated, likely a damaged file
+ const have = this[BUFFER] ? this[BUFFER].length : 0;
+ this.warn('TAR_BAD_ARCHIVE', `Truncated input (needed ${entry.blockRemain} more bytes, only ${have} available)`, { entry });
+ if (this[BUFFER]) {
+ entry.write(this[BUFFER]);
+ }
+ entry.end();
+ }
+ this[EMIT](DONE);
+ }
+ }
+ [CONSUMECHUNK](chunk) {
+ if (this[CONSUMING] && chunk) {
+ this[BUFFERCONCAT](chunk);
+ }
+ else if (!chunk && !this[BUFFER]) {
+ this[MAYBEEND]();
+ }
+ else if (chunk) {
+ this[CONSUMING] = true;
+ if (this[BUFFER]) {
+ this[BUFFERCONCAT](chunk);
+ const c = this[BUFFER];
+ this[BUFFER] = undefined;
+ this[CONSUMECHUNKSUB](c);
+ }
+ else {
+ this[CONSUMECHUNKSUB](chunk);
+ }
+ while (this[BUFFER] &&
+ this[BUFFER]?.length >= 512 &&
+ !this[ABORTED] &&
+ !this[SAW_EOF]) {
+ const c = this[BUFFER];
+ this[BUFFER] = undefined;
+ this[CONSUMECHUNKSUB](c);
+ }
+ this[CONSUMING] = false;
+ }
+ if (!this[BUFFER] || this[ENDED]) {
+ this[MAYBEEND]();
+ }
+ }
+ [CONSUMECHUNKSUB](chunk) {
+ // we know that we are in CONSUMING mode, so anything written goes into
+ // the buffer. Advance the position and put any remainder in the buffer.
+ let position = 0;
+ const length = chunk.length;
+ while (position + 512 <= length &&
+ !this[ABORTED] &&
+ !this[SAW_EOF]) {
+ switch (this[STATE]) {
+ case 'begin':
+ case 'header':
+ this[CONSUMEHEADER](chunk, position);
+ position += 512;
+ break;
+ case 'ignore':
+ case 'body':
+ position += this[CONSUMEBODY](chunk, position);
+ break;
+ case 'meta':
+ position += this[CONSUMEMETA](chunk, position);
+ break;
+ /* c8 ignore start */
+ default:
+ throw new Error('invalid state: ' + this[STATE]);
+ /* c8 ignore stop */
+ }
+ }
+ if (position < length) {
+ if (this[BUFFER]) {
+ this[BUFFER] = Buffer.concat([
+ chunk.subarray(position),
+ this[BUFFER],
+ ]);
+ }
+ else {
+ this[BUFFER] = chunk.subarray(position);
+ }
+ }
+ }
+ end(chunk, encoding, cb) {
+ if (typeof chunk === 'function') {
+ cb = chunk;
+ encoding = undefined;
+ chunk = undefined;
+ }
+ if (typeof encoding === 'function') {
+ cb = encoding;
+ encoding = undefined;
+ }
+ if (typeof chunk === 'string') {
+ chunk = Buffer.from(chunk, encoding);
+ }
+ if (cb)
+ this.once('finish', cb);
+ if (!this[ABORTED]) {
+ if (this[UNZIP]) {
+ /* c8 ignore start */
+ if (chunk)
+ this[UNZIP].write(chunk);
+ /* c8 ignore stop */
+ this[UNZIP].end();
+ }
+ else {
+ this[ENDED] = true;
+ if (this.brotli === undefined)
+ chunk = chunk || Buffer.alloc(0);
+ if (chunk)
+ this.write(chunk);
+ this[MAYBEEND]();
+ }
+ }
+ return this;
+ }
+}
+exports.Parser = Parser;
+//# sourceMappingURL=parse.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/path-reservations.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/path-reservations.js
new file mode 100644
index 00000000000..9ff391c4409
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/path-reservations.js
@@ -0,0 +1,170 @@
+"use strict";
+// A path exclusive reservation system
+// reserve([list, of, paths], fn)
+// When the fn is first in line for all its paths, it
+// is called with a cb that clears the reservation.
+//
+// Used by async unpack to avoid clobbering paths in use,
+// while still allowing maximal safe parallelization.
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.PathReservations = void 0;
+const node_path_1 = require("node:path");
+const normalize_unicode_js_1 = require("./normalize-unicode.js");
+const strip_trailing_slashes_js_1 = require("./strip-trailing-slashes.js");
+const platform = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform;
+const isWindows = platform === 'win32';
+// return a set of parent dirs for a given path
+// '/a/b/c/d' -> ['/', '/a', '/a/b', '/a/b/c', '/a/b/c/d']
+const getDirs = (path) => {
+ const dirs = path
+ .split('/')
+ .slice(0, -1)
+ .reduce((set, path) => {
+ const s = set[set.length - 1];
+ if (s !== undefined) {
+ path = (0, node_path_1.join)(s, path);
+ }
+ set.push(path || '/');
+ return set;
+ }, []);
+ return dirs;
+};
+class PathReservations {
+ // path => [function or Set]
+ // A Set object means a directory reservation
+ // A fn is a direct reservation on that path
+ #queues = new Map();
+ // fn => {paths:[path,...], dirs:[path, ...]}
+ #reservations = new Map();
+ // functions currently running
+ #running = new Set();
+ reserve(paths, fn) {
+ paths =
+ isWindows ?
+ ['win32 parallelization disabled']
+ : paths.map(p => {
+ // don't need normPath, because we skip this entirely for windows
+ return (0, strip_trailing_slashes_js_1.stripTrailingSlashes)((0, node_path_1.join)((0, normalize_unicode_js_1.normalizeUnicode)(p))).toLowerCase();
+ });
+ const dirs = new Set(paths.map(path => getDirs(path)).reduce((a, b) => a.concat(b)));
+ this.#reservations.set(fn, { dirs, paths });
+ for (const p of paths) {
+ const q = this.#queues.get(p);
+ if (!q) {
+ this.#queues.set(p, [fn]);
+ }
+ else {
+ q.push(fn);
+ }
+ }
+ for (const dir of dirs) {
+ const q = this.#queues.get(dir);
+ if (!q) {
+ this.#queues.set(dir, [new Set([fn])]);
+ }
+ else {
+ const l = q[q.length - 1];
+ if (l instanceof Set) {
+ l.add(fn);
+ }
+ else {
+ q.push(new Set([fn]));
+ }
+ }
+ }
+ return this.#run(fn);
+ }
+ // return the queues for each path the function cares about
+ // fn => {paths, dirs}
+ #getQueues(fn) {
+ const res = this.#reservations.get(fn);
+ /* c8 ignore start */
+ if (!res) {
+ throw new Error('function does not have any path reservations');
+ }
+ /* c8 ignore stop */
+ return {
+ paths: res.paths.map((path) => this.#queues.get(path)),
+ dirs: [...res.dirs].map(path => this.#queues.get(path)),
+ };
+ }
+ // check if fn is first in line for all its paths, and is
+ // included in the first set for all its dir queues
+ check(fn) {
+ const { paths, dirs } = this.#getQueues(fn);
+ return (paths.every(q => q && q[0] === fn) &&
+ dirs.every(q => q && q[0] instanceof Set && q[0].has(fn)));
+ }
+ // run the function if it's first in line and not already running
+ #run(fn) {
+ if (this.#running.has(fn) || !this.check(fn)) {
+ return false;
+ }
+ this.#running.add(fn);
+ fn(() => this.#clear(fn));
+ return true;
+ }
+ #clear(fn) {
+ if (!this.#running.has(fn)) {
+ return false;
+ }
+ const res = this.#reservations.get(fn);
+ /* c8 ignore start */
+ if (!res) {
+ throw new Error('invalid reservation');
+ }
+ /* c8 ignore stop */
+ const { paths, dirs } = res;
+ const next = new Set();
+ for (const path of paths) {
+ const q = this.#queues.get(path);
+ /* c8 ignore start */
+ if (!q || q?.[0] !== fn) {
+ continue;
+ }
+ /* c8 ignore stop */
+ const q0 = q[1];
+ if (!q0) {
+ this.#queues.delete(path);
+ continue;
+ }
+ q.shift();
+ if (typeof q0 === 'function') {
+ next.add(q0);
+ }
+ else {
+ for (const f of q0) {
+ next.add(f);
+ }
+ }
+ }
+ for (const dir of dirs) {
+ const q = this.#queues.get(dir);
+ const q0 = q?.[0];
+ /* c8 ignore next - type safety only */
+ if (!q || !(q0 instanceof Set))
+ continue;
+ if (q0.size === 1 && q.length === 1) {
+ this.#queues.delete(dir);
+ continue;
+ }
+ else if (q0.size === 1) {
+ q.shift();
+ // next one must be a function,
+ // or else the Set would've been reused
+ const n = q[0];
+ if (typeof n === 'function') {
+ next.add(n);
+ }
+ }
+ else {
+ q0.delete(fn);
+ }
+ }
+ this.#running.delete(fn);
+ next.forEach(fn => this.#run(fn));
+ return true;
+ }
+}
+exports.PathReservations = PathReservations;
+//# sourceMappingURL=path-reservations.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/pax.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/pax.js
new file mode 100644
index 00000000000..d30c0f3efbe
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/pax.js
@@ -0,0 +1,158 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Pax = void 0;
+const node_path_1 = require("node:path");
+const header_js_1 = require("./header.js");
+class Pax {
+ atime;
+ mtime;
+ ctime;
+ charset;
+ comment;
+ gid;
+ uid;
+ gname;
+ uname;
+ linkpath;
+ dev;
+ ino;
+ nlink;
+ path;
+ size;
+ mode;
+ global;
+ constructor(obj, global = false) {
+ this.atime = obj.atime;
+ this.charset = obj.charset;
+ this.comment = obj.comment;
+ this.ctime = obj.ctime;
+ this.dev = obj.dev;
+ this.gid = obj.gid;
+ this.global = global;
+ this.gname = obj.gname;
+ this.ino = obj.ino;
+ this.linkpath = obj.linkpath;
+ this.mtime = obj.mtime;
+ this.nlink = obj.nlink;
+ this.path = obj.path;
+ this.size = obj.size;
+ this.uid = obj.uid;
+ this.uname = obj.uname;
+ }
+ encode() {
+ const body = this.encodeBody();
+ if (body === '') {
+ return Buffer.allocUnsafe(0);
+ }
+ const bodyLen = Buffer.byteLength(body);
+ // round up to 512 bytes
+ // add 512 for header
+ const bufLen = 512 * Math.ceil(1 + bodyLen / 512);
+ const buf = Buffer.allocUnsafe(bufLen);
+ // 0-fill the header section, it might not hit every field
+ for (let i = 0; i < 512; i++) {
+ buf[i] = 0;
+ }
+ new header_js_1.Header({
+ // XXX split the path
+ // then the path should be PaxHeader + basename, but less than 99,
+ // prepend with the dirname
+ /* c8 ignore start */
+ path: ('PaxHeader/' + (0, node_path_1.basename)(this.path ?? '')).slice(0, 99),
+ /* c8 ignore stop */
+ mode: this.mode || 0o644,
+ uid: this.uid,
+ gid: this.gid,
+ size: bodyLen,
+ mtime: this.mtime,
+ type: this.global ? 'GlobalExtendedHeader' : 'ExtendedHeader',
+ linkpath: '',
+ uname: this.uname || '',
+ gname: this.gname || '',
+ devmaj: 0,
+ devmin: 0,
+ atime: this.atime,
+ ctime: this.ctime,
+ }).encode(buf);
+ buf.write(body, 512, bodyLen, 'utf8');
+ // null pad after the body
+ for (let i = bodyLen + 512; i < buf.length; i++) {
+ buf[i] = 0;
+ }
+ return buf;
+ }
+ encodeBody() {
+ return (this.encodeField('path') +
+ this.encodeField('ctime') +
+ this.encodeField('atime') +
+ this.encodeField('dev') +
+ this.encodeField('ino') +
+ this.encodeField('nlink') +
+ this.encodeField('charset') +
+ this.encodeField('comment') +
+ this.encodeField('gid') +
+ this.encodeField('gname') +
+ this.encodeField('linkpath') +
+ this.encodeField('mtime') +
+ this.encodeField('size') +
+ this.encodeField('uid') +
+ this.encodeField('uname'));
+ }
+ encodeField(field) {
+ if (this[field] === undefined) {
+ return '';
+ }
+ const r = this[field];
+ const v = r instanceof Date ? r.getTime() / 1000 : r;
+ const s = ' ' +
+ (field === 'dev' || field === 'ino' || field === 'nlink' ?
+ 'SCHILY.'
+ : '') +
+ field +
+ '=' +
+ v +
+ '\n';
+ const byteLen = Buffer.byteLength(s);
+ // the digits includes the length of the digits in ascii base-10
+ // so if it's 9 characters, then adding 1 for the 9 makes it 10
+ // which makes it 11 chars.
+ let digits = Math.floor(Math.log(byteLen) / Math.log(10)) + 1;
+ if (byteLen + digits >= Math.pow(10, digits)) {
+ digits += 1;
+ }
+ const len = digits + byteLen;
+ return len + s;
+ }
+ static parse(str, ex, g = false) {
+ return new Pax(merge(parseKV(str), ex), g);
+ }
+}
+exports.Pax = Pax;
+const merge = (a, b) => b ? Object.assign({}, b, a) : a;
+const parseKV = (str) => str
+ .replace(/\n$/, '')
+ .split('\n')
+ .reduce(parseKVLine, Object.create(null));
+const parseKVLine = (set, line) => {
+ const n = parseInt(line, 10);
+ // XXX Values with \n in them will fail this.
+ // Refactor to not be a naive line-by-line parse.
+ if (n !== Buffer.byteLength(line) + 1) {
+ return set;
+ }
+ line = line.slice((n + ' ').length);
+ const kv = line.split('=');
+ const r = kv.shift();
+ if (!r) {
+ return set;
+ }
+ const k = r.replace(/^SCHILY\.(dev|ino|nlink)/, '$1');
+ const v = kv.join('=');
+ set[k] =
+ /^([A-Z]+\.)?([mac]|birth|creation)time$/.test(k) ?
+ new Date(Number(v) * 1000)
+ : /^[0-9]+$/.test(v) ? +v
+ : v;
+ return set;
+};
+//# sourceMappingURL=pax.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/read-entry.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/read-entry.js
new file mode 100644
index 00000000000..15e2d55c938
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/read-entry.js
@@ -0,0 +1,140 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ReadEntry = void 0;
+const minipass_1 = require("minipass");
+const normalize_windows_path_js_1 = require("./normalize-windows-path.js");
+class ReadEntry extends minipass_1.Minipass {
+ extended;
+ globalExtended;
+ header;
+ startBlockSize;
+ blockRemain;
+ remain;
+ type;
+ meta = false;
+ ignore = false;
+ path;
+ mode;
+ uid;
+ gid;
+ uname;
+ gname;
+ size = 0;
+ mtime;
+ atime;
+ ctime;
+ linkpath;
+ dev;
+ ino;
+ nlink;
+ invalid = false;
+ absolute;
+ unsupported = false;
+ constructor(header, ex, gex) {
+ super({});
+ // read entries always start life paused. this is to avoid the
+ // situation where Minipass's auto-ending empty streams results
+ // in an entry ending before we're ready for it.
+ this.pause();
+ this.extended = ex;
+ this.globalExtended = gex;
+ this.header = header;
+ /* c8 ignore start */
+ this.remain = header.size ?? 0;
+ /* c8 ignore stop */
+ this.startBlockSize = 512 * Math.ceil(this.remain / 512);
+ this.blockRemain = this.startBlockSize;
+ this.type = header.type;
+ switch (this.type) {
+ case 'File':
+ case 'OldFile':
+ case 'Link':
+ case 'SymbolicLink':
+ case 'CharacterDevice':
+ case 'BlockDevice':
+ case 'Directory':
+ case 'FIFO':
+ case 'ContiguousFile':
+ case 'GNUDumpDir':
+ break;
+ case 'NextFileHasLongLinkpath':
+ case 'NextFileHasLongPath':
+ case 'OldGnuLongPath':
+ case 'GlobalExtendedHeader':
+ case 'ExtendedHeader':
+ case 'OldExtendedHeader':
+ this.meta = true;
+ break;
+ // NOTE: gnutar and bsdtar treat unrecognized types as 'File'
+ // it may be worth doing the same, but with a warning.
+ default:
+ this.ignore = true;
+ }
+ /* c8 ignore start */
+ if (!header.path) {
+ throw new Error('no path provided for tar.ReadEntry');
+ }
+ /* c8 ignore stop */
+ this.path = (0, normalize_windows_path_js_1.normalizeWindowsPath)(header.path);
+ this.mode = header.mode;
+ if (this.mode) {
+ this.mode = this.mode & 0o7777;
+ }
+ this.uid = header.uid;
+ this.gid = header.gid;
+ this.uname = header.uname;
+ this.gname = header.gname;
+ this.size = this.remain;
+ this.mtime = header.mtime;
+ this.atime = header.atime;
+ this.ctime = header.ctime;
+ /* c8 ignore start */
+ this.linkpath =
+ header.linkpath ?
+ (0, normalize_windows_path_js_1.normalizeWindowsPath)(header.linkpath)
+ : undefined;
+ /* c8 ignore stop */
+ this.uname = header.uname;
+ this.gname = header.gname;
+ if (ex) {
+ this.#slurp(ex);
+ }
+ if (gex) {
+ this.#slurp(gex, true);
+ }
+ }
+ write(data) {
+ const writeLen = data.length;
+ if (writeLen > this.blockRemain) {
+ throw new Error('writing more to entry than is appropriate');
+ }
+ const r = this.remain;
+ const br = this.blockRemain;
+ this.remain = Math.max(0, r - writeLen);
+ this.blockRemain = Math.max(0, br - writeLen);
+ if (this.ignore) {
+ return true;
+ }
+ if (r >= writeLen) {
+ return super.write(data);
+ }
+ // r < writeLen
+ return super.write(data.subarray(0, r));
+ }
+ #slurp(ex, gex = false) {
+ if (ex.path)
+ ex.path = (0, normalize_windows_path_js_1.normalizeWindowsPath)(ex.path);
+ if (ex.linkpath)
+ ex.linkpath = (0, normalize_windows_path_js_1.normalizeWindowsPath)(ex.linkpath);
+ Object.assign(this, Object.fromEntries(Object.entries(ex).filter(([k, v]) => {
+ // we slurp in everything except for the path attribute in
+ // a global extended header, because that's weird. Also, any
+ // null/undefined values are ignored.
+ return !(v === null ||
+ v === undefined ||
+ (k === 'path' && gex));
+ })));
+ }
+}
+exports.ReadEntry = ReadEntry;
+//# sourceMappingURL=read-entry.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/replace.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/replace.js
new file mode 100644
index 00000000000..22eff246d4d
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/replace.js
@@ -0,0 +1,231 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.replace = void 0;
+// tar -r
+const fs_minipass_1 = require("@isaacs/fs-minipass");
+const node_fs_1 = __importDefault(require("node:fs"));
+const node_path_1 = __importDefault(require("node:path"));
+const header_js_1 = require("./header.js");
+const list_js_1 = require("./list.js");
+const make_command_js_1 = require("./make-command.js");
+const options_js_1 = require("./options.js");
+const pack_js_1 = require("./pack.js");
+// starting at the head of the file, read a Header
+// If the checksum is invalid, that's our position to start writing
+// If it is, jump forward by the specified size (round up to 512)
+// and try again.
+// Write the new Pack stream starting there.
+const replaceSync = (opt, files) => {
+ const p = new pack_js_1.PackSync(opt);
+ let threw = true;
+ let fd;
+ let position;
+ try {
+ try {
+ fd = node_fs_1.default.openSync(opt.file, 'r+');
+ }
+ catch (er) {
+ if (er?.code === 'ENOENT') {
+ fd = node_fs_1.default.openSync(opt.file, 'w+');
+ }
+ else {
+ throw er;
+ }
+ }
+ const st = node_fs_1.default.fstatSync(fd);
+ const headBuf = Buffer.alloc(512);
+ POSITION: for (position = 0; position < st.size; position += 512) {
+ for (let bufPos = 0, bytes = 0; bufPos < 512; bufPos += bytes) {
+ bytes = node_fs_1.default.readSync(fd, headBuf, bufPos, headBuf.length - bufPos, position + bufPos);
+ if (position === 0 &&
+ headBuf[0] === 0x1f &&
+ headBuf[1] === 0x8b) {
+ throw new Error('cannot append to compressed archives');
+ }
+ if (!bytes) {
+ break POSITION;
+ }
+ }
+ const h = new header_js_1.Header(headBuf);
+ if (!h.cksumValid) {
+ break;
+ }
+ const entryBlockSize = 512 * Math.ceil((h.size || 0) / 512);
+ if (position + entryBlockSize + 512 > st.size) {
+ break;
+ }
+ // the 512 for the header we just parsed will be added as well
+ // also jump ahead all the blocks for the body
+ position += entryBlockSize;
+ if (opt.mtimeCache && h.mtime) {
+ opt.mtimeCache.set(String(h.path), h.mtime);
+ }
+ }
+ threw = false;
+ streamSync(opt, p, position, fd, files);
+ }
+ finally {
+ if (threw) {
+ try {
+ node_fs_1.default.closeSync(fd);
+ }
+ catch (er) { }
+ }
+ }
+};
+const streamSync = (opt, p, position, fd, files) => {
+ const stream = new fs_minipass_1.WriteStreamSync(opt.file, {
+ fd: fd,
+ start: position,
+ });
+ p.pipe(stream);
+ addFilesSync(p, files);
+};
+const replaceAsync = (opt, files) => {
+ files = Array.from(files);
+ const p = new pack_js_1.Pack(opt);
+ const getPos = (fd, size, cb_) => {
+ const cb = (er, pos) => {
+ if (er) {
+ node_fs_1.default.close(fd, _ => cb_(er));
+ }
+ else {
+ cb_(null, pos);
+ }
+ };
+ let position = 0;
+ if (size === 0) {
+ return cb(null, 0);
+ }
+ let bufPos = 0;
+ const headBuf = Buffer.alloc(512);
+ const onread = (er, bytes) => {
+ if (er || typeof bytes === 'undefined') {
+ return cb(er);
+ }
+ bufPos += bytes;
+ if (bufPos < 512 && bytes) {
+ return node_fs_1.default.read(fd, headBuf, bufPos, headBuf.length - bufPos, position + bufPos, onread);
+ }
+ if (position === 0 &&
+ headBuf[0] === 0x1f &&
+ headBuf[1] === 0x8b) {
+ return cb(new Error('cannot append to compressed archives'));
+ }
+ // truncated header
+ if (bufPos < 512) {
+ return cb(null, position);
+ }
+ const h = new header_js_1.Header(headBuf);
+ if (!h.cksumValid) {
+ return cb(null, position);
+ }
+ /* c8 ignore next */
+ const entryBlockSize = 512 * Math.ceil((h.size ?? 0) / 512);
+ if (position + entryBlockSize + 512 > size) {
+ return cb(null, position);
+ }
+ position += entryBlockSize + 512;
+ if (position >= size) {
+ return cb(null, position);
+ }
+ if (opt.mtimeCache && h.mtime) {
+ opt.mtimeCache.set(String(h.path), h.mtime);
+ }
+ bufPos = 0;
+ node_fs_1.default.read(fd, headBuf, 0, 512, position, onread);
+ };
+ node_fs_1.default.read(fd, headBuf, 0, 512, position, onread);
+ };
+ const promise = new Promise((resolve, reject) => {
+ p.on('error', reject);
+ let flag = 'r+';
+ const onopen = (er, fd) => {
+ if (er && er.code === 'ENOENT' && flag === 'r+') {
+ flag = 'w+';
+ return node_fs_1.default.open(opt.file, flag, onopen);
+ }
+ if (er || !fd) {
+ return reject(er);
+ }
+ node_fs_1.default.fstat(fd, (er, st) => {
+ if (er) {
+ return node_fs_1.default.close(fd, () => reject(er));
+ }
+ getPos(fd, st.size, (er, position) => {
+ if (er) {
+ return reject(er);
+ }
+ const stream = new fs_minipass_1.WriteStream(opt.file, {
+ fd: fd,
+ start: position,
+ });
+ p.pipe(stream);
+ stream.on('error', reject);
+ stream.on('close', resolve);
+ addFilesAsync(p, files);
+ });
+ });
+ };
+ node_fs_1.default.open(opt.file, flag, onopen);
+ });
+ return promise;
+};
+const addFilesSync = (p, files) => {
+ files.forEach(file => {
+ if (file.charAt(0) === '@') {
+ (0, list_js_1.list)({
+ file: node_path_1.default.resolve(p.cwd, file.slice(1)),
+ sync: true,
+ noResume: true,
+ onReadEntry: entry => p.add(entry),
+ });
+ }
+ else {
+ p.add(file);
+ }
+ });
+ p.end();
+};
+const addFilesAsync = async (p, files) => {
+ for (let i = 0; i < files.length; i++) {
+ const file = String(files[i]);
+ if (file.charAt(0) === '@') {
+ await (0, list_js_1.list)({
+ file: node_path_1.default.resolve(String(p.cwd), file.slice(1)),
+ noResume: true,
+ onReadEntry: entry => p.add(entry),
+ });
+ }
+ else {
+ p.add(file);
+ }
+ }
+ p.end();
+};
+exports.replace = (0, make_command_js_1.makeCommand)(replaceSync, replaceAsync,
+/* c8 ignore start */
+() => {
+ throw new TypeError('file is required');
+}, () => {
+ throw new TypeError('file is required');
+},
+/* c8 ignore stop */
+(opt, entries) => {
+ if (!(0, options_js_1.isFile)(opt)) {
+ throw new TypeError('file is required');
+ }
+ if (opt.gzip ||
+ opt.brotli ||
+ opt.file.endsWith('.br') ||
+ opt.file.endsWith('.tbr')) {
+ throw new TypeError('cannot append to compressed archives');
+ }
+ if (!entries?.length) {
+ throw new TypeError('no paths specified to add/replace');
+ }
+});
+//# sourceMappingURL=replace.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/strip-absolute-path.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/strip-absolute-path.js
new file mode 100644
index 00000000000..bb7639c35a1
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/strip-absolute-path.js
@@ -0,0 +1,29 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.stripAbsolutePath = void 0;
+// unix absolute paths are also absolute on win32, so we use this for both
+const node_path_1 = require("node:path");
+const { isAbsolute, parse } = node_path_1.win32;
+// returns [root, stripped]
+// Note that windows will think that //x/y/z/a has a "root" of //x/y, and in
+// those cases, we want to sanitize it to x/y/z/a, not z/a, so we strip /
+// explicitly if it's the first character.
+// drive-specific relative paths on Windows get their root stripped off even
+// though they are not absolute, so `c:../foo` becomes ['c:', '../foo']
+const stripAbsolutePath = (path) => {
+ let r = '';
+ let parsed = parse(path);
+ while (isAbsolute(path) || parsed.root) {
+ // windows will think that //x/y/z has a "root" of //x/y/
+ // but strip the //?/C:/ off of //?/C:/path
+ const root = path.charAt(0) === '/' && path.slice(0, 4) !== '//?/' ?
+ '/'
+ : parsed.root;
+ path = path.slice(root.length);
+ r += root;
+ parsed = parse(path);
+ }
+ return [r, path];
+};
+exports.stripAbsolutePath = stripAbsolutePath;
+//# sourceMappingURL=strip-absolute-path.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/strip-trailing-slashes.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/strip-trailing-slashes.js
new file mode 100644
index 00000000000..6fa74ad6a4a
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/strip-trailing-slashes.js
@@ -0,0 +1,18 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.stripTrailingSlashes = void 0;
+// warning: extremely hot code path.
+// This has been meticulously optimized for use
+// within npm install on large package trees.
+// Do not edit without careful benchmarking.
+const stripTrailingSlashes = (str) => {
+ let i = str.length - 1;
+ let slashesStart = -1;
+ while (i > -1 && str.charAt(i) === '/') {
+ slashesStart = i;
+ i--;
+ }
+ return slashesStart === -1 ? str : str.slice(0, slashesStart);
+};
+exports.stripTrailingSlashes = stripTrailingSlashes;
+//# sourceMappingURL=strip-trailing-slashes.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/symlink-error.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/symlink-error.js
new file mode 100644
index 00000000000..cc19ac1a2e3
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/symlink-error.js
@@ -0,0 +1,19 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.SymlinkError = void 0;
+class SymlinkError extends Error {
+ path;
+ symlink;
+ syscall = 'symlink';
+ code = 'TAR_SYMLINK_ERROR';
+ constructor(symlink, path) {
+ super('TAR_SYMLINK_ERROR: Cannot extract through symbolic link');
+ this.symlink = symlink;
+ this.path = path;
+ }
+ get name() {
+ return 'SymlinkError';
+ }
+}
+exports.SymlinkError = SymlinkError;
+//# sourceMappingURL=symlink-error.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/types.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/types.js
new file mode 100644
index 00000000000..cb9b684e843
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/types.js
@@ -0,0 +1,50 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.code = exports.name = exports.isName = exports.isCode = void 0;
+const isCode = (c) => exports.name.has(c);
+exports.isCode = isCode;
+const isName = (c) => exports.code.has(c);
+exports.isName = isName;
+// map types from key to human-friendly name
+exports.name = new Map([
+ ['0', 'File'],
+ // same as File
+ ['', 'OldFile'],
+ ['1', 'Link'],
+ ['2', 'SymbolicLink'],
+ // Devices and FIFOs aren't fully supported
+ // they are parsed, but skipped when unpacking
+ ['3', 'CharacterDevice'],
+ ['4', 'BlockDevice'],
+ ['5', 'Directory'],
+ ['6', 'FIFO'],
+ // same as File
+ ['7', 'ContiguousFile'],
+ // pax headers
+ ['g', 'GlobalExtendedHeader'],
+ ['x', 'ExtendedHeader'],
+ // vendor-specific stuff
+ // skip
+ ['A', 'SolarisACL'],
+ // like 5, but with data, which should be skipped
+ ['D', 'GNUDumpDir'],
+ // metadata only, skip
+ ['I', 'Inode'],
+ // data = link path of next file
+ ['K', 'NextFileHasLongLinkpath'],
+ // data = path of next file
+ ['L', 'NextFileHasLongPath'],
+ // skip
+ ['M', 'ContinuationFile'],
+ // like L
+ ['N', 'OldGnuLongPath'],
+ // skip
+ ['S', 'SparseFile'],
+ // skip
+ ['V', 'TapeVolumeHeader'],
+ // like x
+ ['X', 'OldExtendedHeader'],
+]);
+// map the other direction
+exports.code = new Map(Array.from(exports.name).map(kv => [kv[1], kv[0]]));
+//# sourceMappingURL=types.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/unpack.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/unpack.js
new file mode 100644
index 00000000000..edf8acbb18c
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/unpack.js
@@ -0,0 +1,919 @@
+"use strict";
+// the PEND/UNPEND stuff tracks whether we're ready to emit end/close yet.
+// but the path reservations are required to avoid race conditions where
+// parallelized unpack ops may mess with one another, due to dependencies
+// (like a Link depending on its target) or destructive operations (like
+// clobbering an fs object to create one of a different type.)
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.UnpackSync = exports.Unpack = void 0;
+const fsm = __importStar(require("@isaacs/fs-minipass"));
+const node_assert_1 = __importDefault(require("node:assert"));
+const node_crypto_1 = require("node:crypto");
+const node_fs_1 = __importDefault(require("node:fs"));
+const node_path_1 = __importDefault(require("node:path"));
+const get_write_flag_js_1 = require("./get-write-flag.js");
+const mkdir_js_1 = require("./mkdir.js");
+const normalize_unicode_js_1 = require("./normalize-unicode.js");
+const normalize_windows_path_js_1 = require("./normalize-windows-path.js");
+const parse_js_1 = require("./parse.js");
+const strip_absolute_path_js_1 = require("./strip-absolute-path.js");
+const strip_trailing_slashes_js_1 = require("./strip-trailing-slashes.js");
+const wc = __importStar(require("./winchars.js"));
+const path_reservations_js_1 = require("./path-reservations.js");
+const ONENTRY = Symbol('onEntry');
+const CHECKFS = Symbol('checkFs');
+const CHECKFS2 = Symbol('checkFs2');
+const PRUNECACHE = Symbol('pruneCache');
+const ISREUSABLE = Symbol('isReusable');
+const MAKEFS = Symbol('makeFs');
+const FILE = Symbol('file');
+const DIRECTORY = Symbol('directory');
+const LINK = Symbol('link');
+const SYMLINK = Symbol('symlink');
+const HARDLINK = Symbol('hardlink');
+const UNSUPPORTED = Symbol('unsupported');
+const CHECKPATH = Symbol('checkPath');
+const MKDIR = Symbol('mkdir');
+const ONERROR = Symbol('onError');
+const PENDING = Symbol('pending');
+const PEND = Symbol('pend');
+const UNPEND = Symbol('unpend');
+const ENDED = Symbol('ended');
+const MAYBECLOSE = Symbol('maybeClose');
+const SKIP = Symbol('skip');
+const DOCHOWN = Symbol('doChown');
+const UID = Symbol('uid');
+const GID = Symbol('gid');
+const CHECKED_CWD = Symbol('checkedCwd');
+const platform = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform;
+const isWindows = platform === 'win32';
+const DEFAULT_MAX_DEPTH = 1024;
+// Unlinks on Windows are not atomic.
+//
+// This means that if you have a file entry, followed by another
+// file entry with an identical name, and you cannot re-use the file
+// (because it's a hardlink, or because unlink:true is set, or it's
+// Windows, which does not have useful nlink values), then the unlink
+// will be committed to the disk AFTER the new file has been written
+// over the old one, deleting the new file.
+//
+// To work around this, on Windows systems, we rename the file and then
+// delete the renamed file. It's a sloppy kludge, but frankly, I do not
+// know of a better way to do this, given windows' non-atomic unlink
+// semantics.
+//
+// See: https://github.com/npm/node-tar/issues/183
+/* c8 ignore start */
+const unlinkFile = (path, cb) => {
+ if (!isWindows) {
+ return node_fs_1.default.unlink(path, cb);
+ }
+ const name = path + '.DELETE.' + (0, node_crypto_1.randomBytes)(16).toString('hex');
+ node_fs_1.default.rename(path, name, er => {
+ if (er) {
+ return cb(er);
+ }
+ node_fs_1.default.unlink(name, cb);
+ });
+};
+/* c8 ignore stop */
+/* c8 ignore start */
+const unlinkFileSync = (path) => {
+ if (!isWindows) {
+ return node_fs_1.default.unlinkSync(path);
+ }
+ const name = path + '.DELETE.' + (0, node_crypto_1.randomBytes)(16).toString('hex');
+ node_fs_1.default.renameSync(path, name);
+ node_fs_1.default.unlinkSync(name);
+};
+/* c8 ignore stop */
+// this.gid, entry.gid, this.processUid
+const uint32 = (a, b, c) => a !== undefined && a === a >>> 0 ? a
+ : b !== undefined && b === b >>> 0 ? b
+ : c;
+// clear the cache if it's a case-insensitive unicode-squashing match.
+// we can't know if the current file system is case-sensitive or supports
+// unicode fully, so we check for similarity on the maximally compatible
+// representation. Err on the side of pruning, since all it's doing is
+// preventing lstats, and it's not the end of the world if we get a false
+// positive.
+// Note that on windows, we always drop the entire cache whenever a
+// symbolic link is encountered, because 8.3 filenames are impossible
+// to reason about, and collisions are hazards rather than just failures.
+const cacheKeyNormalize = (path) => (0, strip_trailing_slashes_js_1.stripTrailingSlashes)((0, normalize_windows_path_js_1.normalizeWindowsPath)((0, normalize_unicode_js_1.normalizeUnicode)(path))).toLowerCase();
+// remove all cache entries matching ${abs}/**
+const pruneCache = (cache, abs) => {
+ abs = cacheKeyNormalize(abs);
+ for (const path of cache.keys()) {
+ const pnorm = cacheKeyNormalize(path);
+ if (pnorm === abs || pnorm.indexOf(abs + '/') === 0) {
+ cache.delete(path);
+ }
+ }
+};
+const dropCache = (cache) => {
+ for (const key of cache.keys()) {
+ cache.delete(key);
+ }
+};
+class Unpack extends parse_js_1.Parser {
+ [ENDED] = false;
+ [CHECKED_CWD] = false;
+ [PENDING] = 0;
+ reservations = new path_reservations_js_1.PathReservations();
+ transform;
+ writable = true;
+ readable = false;
+ dirCache;
+ uid;
+ gid;
+ setOwner;
+ preserveOwner;
+ processGid;
+ processUid;
+ maxDepth;
+ forceChown;
+ win32;
+ newer;
+ keep;
+ noMtime;
+ preservePaths;
+ unlink;
+ cwd;
+ strip;
+ processUmask;
+ umask;
+ dmode;
+ fmode;
+ chmod;
+ constructor(opt = {}) {
+ opt.ondone = () => {
+ this[ENDED] = true;
+ this[MAYBECLOSE]();
+ };
+ super(opt);
+ this.transform = opt.transform;
+ this.dirCache = opt.dirCache || new Map();
+ this.chmod = !!opt.chmod;
+ if (typeof opt.uid === 'number' || typeof opt.gid === 'number') {
+ // need both or neither
+ if (typeof opt.uid !== 'number' ||
+ typeof opt.gid !== 'number') {
+ throw new TypeError('cannot set owner without number uid and gid');
+ }
+ if (opt.preserveOwner) {
+ throw new TypeError('cannot preserve owner in archive and also set owner explicitly');
+ }
+ this.uid = opt.uid;
+ this.gid = opt.gid;
+ this.setOwner = true;
+ }
+ else {
+ this.uid = undefined;
+ this.gid = undefined;
+ this.setOwner = false;
+ }
+ // default true for root
+ if (opt.preserveOwner === undefined &&
+ typeof opt.uid !== 'number') {
+ this.preserveOwner = !!(process.getuid && process.getuid() === 0);
+ }
+ else {
+ this.preserveOwner = !!opt.preserveOwner;
+ }
+ this.processUid =
+ (this.preserveOwner || this.setOwner) && process.getuid ?
+ process.getuid()
+ : undefined;
+ this.processGid =
+ (this.preserveOwner || this.setOwner) && process.getgid ?
+ process.getgid()
+ : undefined;
+ // prevent excessively deep nesting of subfolders
+ // set to `Infinity` to remove this restriction
+ this.maxDepth =
+ typeof opt.maxDepth === 'number' ?
+ opt.maxDepth
+ : DEFAULT_MAX_DEPTH;
+ // mostly just for testing, but useful in some cases.
+ // Forcibly trigger a chown on every entry, no matter what
+ this.forceChown = opt.forceChown === true;
+ // turn >| in filenames into 0xf000-higher encoded forms
+ this.win32 = !!opt.win32 || isWindows;
+ // do not unpack over files that are newer than what's in the archive
+ this.newer = !!opt.newer;
+ // do not unpack over ANY files
+ this.keep = !!opt.keep;
+ // do not set mtime/atime of extracted entries
+ this.noMtime = !!opt.noMtime;
+ // allow .., absolute path entries, and unpacking through symlinks
+ // without this, warn and skip .., relativize absolutes, and error
+ // on symlinks in extraction path
+ this.preservePaths = !!opt.preservePaths;
+ // unlink files and links before writing. This breaks existing hard
+ // links, and removes symlink directories rather than erroring
+ this.unlink = !!opt.unlink;
+ this.cwd = (0, normalize_windows_path_js_1.normalizeWindowsPath)(node_path_1.default.resolve(opt.cwd || process.cwd()));
+ this.strip = Number(opt.strip) || 0;
+ // if we're not chmodding, then we don't need the process umask
+ this.processUmask =
+ !this.chmod ? 0
+ : typeof opt.processUmask === 'number' ? opt.processUmask
+ : process.umask();
+ this.umask =
+ typeof opt.umask === 'number' ? opt.umask : this.processUmask;
+ // default mode for dirs created as parents
+ this.dmode = opt.dmode || 0o0777 & ~this.umask;
+ this.fmode = opt.fmode || 0o0666 & ~this.umask;
+ this.on('entry', entry => this[ONENTRY](entry));
+ }
+ // a bad or damaged archive is a warning for Parser, but an error
+ // when extracting. Mark those errors as unrecoverable, because
+ // the Unpack contract cannot be met.
+ warn(code, msg, data = {}) {
+ if (code === 'TAR_BAD_ARCHIVE' || code === 'TAR_ABORT') {
+ data.recoverable = false;
+ }
+ return super.warn(code, msg, data);
+ }
+ [MAYBECLOSE]() {
+ if (this[ENDED] && this[PENDING] === 0) {
+ this.emit('prefinish');
+ this.emit('finish');
+ this.emit('end');
+ }
+ }
+ [CHECKPATH](entry) {
+ const p = (0, normalize_windows_path_js_1.normalizeWindowsPath)(entry.path);
+ const parts = p.split('/');
+ if (this.strip) {
+ if (parts.length < this.strip) {
+ return false;
+ }
+ if (entry.type === 'Link') {
+ const linkparts = (0, normalize_windows_path_js_1.normalizeWindowsPath)(String(entry.linkpath)).split('/');
+ if (linkparts.length >= this.strip) {
+ entry.linkpath = linkparts.slice(this.strip).join('/');
+ }
+ else {
+ return false;
+ }
+ }
+ parts.splice(0, this.strip);
+ entry.path = parts.join('/');
+ }
+ if (isFinite(this.maxDepth) && parts.length > this.maxDepth) {
+ this.warn('TAR_ENTRY_ERROR', 'path excessively deep', {
+ entry,
+ path: p,
+ depth: parts.length,
+ maxDepth: this.maxDepth,
+ });
+ return false;
+ }
+ if (!this.preservePaths) {
+ if (parts.includes('..') ||
+ /* c8 ignore next */
+ (isWindows && /^[a-z]:\.\.$/i.test(parts[0] ?? ''))) {
+ this.warn('TAR_ENTRY_ERROR', `path contains '..'`, {
+ entry,
+ path: p,
+ });
+ return false;
+ }
+ // strip off the root
+ const [root, stripped] = (0, strip_absolute_path_js_1.stripAbsolutePath)(p);
+ if (root) {
+ entry.path = String(stripped);
+ this.warn('TAR_ENTRY_INFO', `stripping ${root} from absolute path`, {
+ entry,
+ path: p,
+ });
+ }
+ }
+ if (node_path_1.default.isAbsolute(entry.path)) {
+ entry.absolute = (0, normalize_windows_path_js_1.normalizeWindowsPath)(node_path_1.default.resolve(entry.path));
+ }
+ else {
+ entry.absolute = (0, normalize_windows_path_js_1.normalizeWindowsPath)(node_path_1.default.resolve(this.cwd, entry.path));
+ }
+ // if we somehow ended up with a path that escapes the cwd, and we are
+ // not in preservePaths mode, then something is fishy! This should have
+ // been prevented above, so ignore this for coverage.
+ /* c8 ignore start - defense in depth */
+ if (!this.preservePaths &&
+ typeof entry.absolute === 'string' &&
+ entry.absolute.indexOf(this.cwd + '/') !== 0 &&
+ entry.absolute !== this.cwd) {
+ this.warn('TAR_ENTRY_ERROR', 'path escaped extraction target', {
+ entry,
+ path: (0, normalize_windows_path_js_1.normalizeWindowsPath)(entry.path),
+ resolvedPath: entry.absolute,
+ cwd: this.cwd,
+ });
+ return false;
+ }
+ /* c8 ignore stop */
+ // an archive can set properties on the extraction directory, but it
+ // may not replace the cwd with a different kind of thing entirely.
+ if (entry.absolute === this.cwd &&
+ entry.type !== 'Directory' &&
+ entry.type !== 'GNUDumpDir') {
+ return false;
+ }
+ // only encode : chars that aren't drive letter indicators
+ if (this.win32) {
+ const { root: aRoot } = node_path_1.default.win32.parse(String(entry.absolute));
+ entry.absolute =
+ aRoot + wc.encode(String(entry.absolute).slice(aRoot.length));
+ const { root: pRoot } = node_path_1.default.win32.parse(entry.path);
+ entry.path = pRoot + wc.encode(entry.path.slice(pRoot.length));
+ }
+ return true;
+ }
+ [ONENTRY](entry) {
+ if (!this[CHECKPATH](entry)) {
+ return entry.resume();
+ }
+ node_assert_1.default.equal(typeof entry.absolute, 'string');
+ switch (entry.type) {
+ case 'Directory':
+ case 'GNUDumpDir':
+ if (entry.mode) {
+ entry.mode = entry.mode | 0o700;
+ }
+ // eslint-disable-next-line no-fallthrough
+ case 'File':
+ case 'OldFile':
+ case 'ContiguousFile':
+ case 'Link':
+ case 'SymbolicLink':
+ return this[CHECKFS](entry);
+ case 'CharacterDevice':
+ case 'BlockDevice':
+ case 'FIFO':
+ default:
+ return this[UNSUPPORTED](entry);
+ }
+ }
+ [ONERROR](er, entry) {
+ // Cwd has to exist, or else nothing works. That's serious.
+ // Other errors are warnings, which raise the error in strict
+ // mode, but otherwise continue on.
+ if (er.name === 'CwdError') {
+ this.emit('error', er);
+ }
+ else {
+ this.warn('TAR_ENTRY_ERROR', er, { entry });
+ this[UNPEND]();
+ entry.resume();
+ }
+ }
+ [MKDIR](dir, mode, cb) {
+ (0, mkdir_js_1.mkdir)((0, normalize_windows_path_js_1.normalizeWindowsPath)(dir), {
+ uid: this.uid,
+ gid: this.gid,
+ processUid: this.processUid,
+ processGid: this.processGid,
+ umask: this.processUmask,
+ preserve: this.preservePaths,
+ unlink: this.unlink,
+ cache: this.dirCache,
+ cwd: this.cwd,
+ mode: mode,
+ }, cb);
+ }
+ [DOCHOWN](entry) {
+ // in preserve owner mode, chown if the entry doesn't match process
+ // in set owner mode, chown if setting doesn't match process
+ return (this.forceChown ||
+ (this.preserveOwner &&
+ ((typeof entry.uid === 'number' &&
+ entry.uid !== this.processUid) ||
+ (typeof entry.gid === 'number' &&
+ entry.gid !== this.processGid))) ||
+ (typeof this.uid === 'number' &&
+ this.uid !== this.processUid) ||
+ (typeof this.gid === 'number' && this.gid !== this.processGid));
+ }
+ [UID](entry) {
+ return uint32(this.uid, entry.uid, this.processUid);
+ }
+ [GID](entry) {
+ return uint32(this.gid, entry.gid, this.processGid);
+ }
+ [FILE](entry, fullyDone) {
+ const mode = typeof entry.mode === 'number' ?
+ entry.mode & 0o7777
+ : this.fmode;
+ const stream = new fsm.WriteStream(String(entry.absolute), {
+ // slight lie, but it can be numeric flags
+ flags: (0, get_write_flag_js_1.getWriteFlag)(entry.size),
+ mode: mode,
+ autoClose: false,
+ });
+ stream.on('error', (er) => {
+ if (stream.fd) {
+ node_fs_1.default.close(stream.fd, () => { });
+ }
+ // flush all the data out so that we aren't left hanging
+ // if the error wasn't actually fatal. otherwise the parse
+ // is blocked, and we never proceed.
+ stream.write = () => true;
+ this[ONERROR](er, entry);
+ fullyDone();
+ });
+ let actions = 1;
+ const done = (er) => {
+ if (er) {
+ /* c8 ignore start - we should always have a fd by now */
+ if (stream.fd) {
+ node_fs_1.default.close(stream.fd, () => { });
+ }
+ /* c8 ignore stop */
+ this[ONERROR](er, entry);
+ fullyDone();
+ return;
+ }
+ if (--actions === 0) {
+ if (stream.fd !== undefined) {
+ node_fs_1.default.close(stream.fd, er => {
+ if (er) {
+ this[ONERROR](er, entry);
+ }
+ else {
+ this[UNPEND]();
+ }
+ fullyDone();
+ });
+ }
+ }
+ };
+ stream.on('finish', () => {
+ // if futimes fails, try utimes
+ // if utimes fails, fail with the original error
+ // same for fchown/chown
+ const abs = String(entry.absolute);
+ const fd = stream.fd;
+ if (typeof fd === 'number' && entry.mtime && !this.noMtime) {
+ actions++;
+ const atime = entry.atime || new Date();
+ const mtime = entry.mtime;
+ node_fs_1.default.futimes(fd, atime, mtime, er => er ?
+ node_fs_1.default.utimes(abs, atime, mtime, er2 => done(er2 && er))
+ : done());
+ }
+ if (typeof fd === 'number' && this[DOCHOWN](entry)) {
+ actions++;
+ const uid = this[UID](entry);
+ const gid = this[GID](entry);
+ if (typeof uid === 'number' && typeof gid === 'number') {
+ node_fs_1.default.fchown(fd, uid, gid, er => er ?
+ node_fs_1.default.chown(abs, uid, gid, er2 => done(er2 && er))
+ : done());
+ }
+ }
+ done();
+ });
+ const tx = this.transform ? this.transform(entry) || entry : entry;
+ if (tx !== entry) {
+ tx.on('error', (er) => {
+ this[ONERROR](er, entry);
+ fullyDone();
+ });
+ entry.pipe(tx);
+ }
+ tx.pipe(stream);
+ }
+ [DIRECTORY](entry, fullyDone) {
+ const mode = typeof entry.mode === 'number' ?
+ entry.mode & 0o7777
+ : this.dmode;
+ this[MKDIR](String(entry.absolute), mode, er => {
+ if (er) {
+ this[ONERROR](er, entry);
+ fullyDone();
+ return;
+ }
+ let actions = 1;
+ const done = () => {
+ if (--actions === 0) {
+ fullyDone();
+ this[UNPEND]();
+ entry.resume();
+ }
+ };
+ if (entry.mtime && !this.noMtime) {
+ actions++;
+ node_fs_1.default.utimes(String(entry.absolute), entry.atime || new Date(), entry.mtime, done);
+ }
+ if (this[DOCHOWN](entry)) {
+ actions++;
+ node_fs_1.default.chown(String(entry.absolute), Number(this[UID](entry)), Number(this[GID](entry)), done);
+ }
+ done();
+ });
+ }
+ [UNSUPPORTED](entry) {
+ entry.unsupported = true;
+ this.warn('TAR_ENTRY_UNSUPPORTED', `unsupported entry type: ${entry.type}`, { entry });
+ entry.resume();
+ }
+ [SYMLINK](entry, done) {
+ this[LINK](entry, String(entry.linkpath), 'symlink', done);
+ }
+ [HARDLINK](entry, done) {
+ const linkpath = (0, normalize_windows_path_js_1.normalizeWindowsPath)(node_path_1.default.resolve(this.cwd, String(entry.linkpath)));
+ this[LINK](entry, linkpath, 'link', done);
+ }
+ [PEND]() {
+ this[PENDING]++;
+ }
+ [UNPEND]() {
+ this[PENDING]--;
+ this[MAYBECLOSE]();
+ }
+ [SKIP](entry) {
+ this[UNPEND]();
+ entry.resume();
+ }
+ // Check if we can reuse an existing filesystem entry safely and
+ // overwrite it, rather than unlinking and recreating
+ // Windows doesn't report a useful nlink, so we just never reuse entries
+ [ISREUSABLE](entry, st) {
+ return (entry.type === 'File' &&
+ !this.unlink &&
+ st.isFile() &&
+ st.nlink <= 1 &&
+ !isWindows);
+ }
+ // check if a thing is there, and if so, try to clobber it
+ [CHECKFS](entry) {
+ this[PEND]();
+ const paths = [entry.path];
+ if (entry.linkpath) {
+ paths.push(entry.linkpath);
+ }
+ this.reservations.reserve(paths, done => this[CHECKFS2](entry, done));
+ }
+ [PRUNECACHE](entry) {
+ // if we are not creating a directory, and the path is in the dirCache,
+ // then that means we are about to delete the directory we created
+ // previously, and it is no longer going to be a directory, and neither
+ // is any of its children.
+ // If a symbolic link is encountered, all bets are off. There is no
+ // reasonable way to sanitize the cache in such a way we will be able to
+ // avoid having filesystem collisions. If this happens with a non-symlink
+ // entry, it'll just fail to unpack, but a symlink to a directory, using an
+ // 8.3 shortname or certain unicode attacks, can evade detection and lead
+ // to arbitrary writes to anywhere on the system.
+ if (entry.type === 'SymbolicLink') {
+ dropCache(this.dirCache);
+ }
+ else if (entry.type !== 'Directory') {
+ pruneCache(this.dirCache, String(entry.absolute));
+ }
+ }
+ [CHECKFS2](entry, fullyDone) {
+ this[PRUNECACHE](entry);
+ const done = (er) => {
+ this[PRUNECACHE](entry);
+ fullyDone(er);
+ };
+ const checkCwd = () => {
+ this[MKDIR](this.cwd, this.dmode, er => {
+ if (er) {
+ this[ONERROR](er, entry);
+ done();
+ return;
+ }
+ this[CHECKED_CWD] = true;
+ start();
+ });
+ };
+ const start = () => {
+ if (entry.absolute !== this.cwd) {
+ const parent = (0, normalize_windows_path_js_1.normalizeWindowsPath)(node_path_1.default.dirname(String(entry.absolute)));
+ if (parent !== this.cwd) {
+ return this[MKDIR](parent, this.dmode, er => {
+ if (er) {
+ this[ONERROR](er, entry);
+ done();
+ return;
+ }
+ afterMakeParent();
+ });
+ }
+ }
+ afterMakeParent();
+ };
+ const afterMakeParent = () => {
+ node_fs_1.default.lstat(String(entry.absolute), (lstatEr, st) => {
+ if (st &&
+ (this.keep ||
+ /* c8 ignore next */
+ (this.newer && st.mtime > (entry.mtime ?? st.mtime)))) {
+ this[SKIP](entry);
+ done();
+ return;
+ }
+ if (lstatEr || this[ISREUSABLE](entry, st)) {
+ return this[MAKEFS](null, entry, done);
+ }
+ if (st.isDirectory()) {
+ if (entry.type === 'Directory') {
+ const needChmod = this.chmod &&
+ entry.mode &&
+ (st.mode & 0o7777) !== entry.mode;
+ const afterChmod = (er) => this[MAKEFS](er ?? null, entry, done);
+ if (!needChmod) {
+ return afterChmod();
+ }
+ return node_fs_1.default.chmod(String(entry.absolute), Number(entry.mode), afterChmod);
+ }
+ // Not a dir entry, have to remove it.
+ // NB: the only way to end up with an entry that is the cwd
+ // itself, in such a way that == does not detect, is a
+ // tricky windows absolute path with UNC or 8.3 parts (and
+ // preservePaths:true, or else it will have been stripped).
+ // In that case, the user has opted out of path protections
+ // explicitly, so if they blow away the cwd, c'est la vie.
+ if (entry.absolute !== this.cwd) {
+ return node_fs_1.default.rmdir(String(entry.absolute), (er) => this[MAKEFS](er ?? null, entry, done));
+ }
+ }
+ // not a dir, and not reusable
+ // don't remove if the cwd, we want that error
+ if (entry.absolute === this.cwd) {
+ return this[MAKEFS](null, entry, done);
+ }
+ unlinkFile(String(entry.absolute), er => this[MAKEFS](er ?? null, entry, done));
+ });
+ };
+ if (this[CHECKED_CWD]) {
+ start();
+ }
+ else {
+ checkCwd();
+ }
+ }
+ [MAKEFS](er, entry, done) {
+ if (er) {
+ this[ONERROR](er, entry);
+ done();
+ return;
+ }
+ switch (entry.type) {
+ case 'File':
+ case 'OldFile':
+ case 'ContiguousFile':
+ return this[FILE](entry, done);
+ case 'Link':
+ return this[HARDLINK](entry, done);
+ case 'SymbolicLink':
+ return this[SYMLINK](entry, done);
+ case 'Directory':
+ case 'GNUDumpDir':
+ return this[DIRECTORY](entry, done);
+ }
+ }
+ [LINK](entry, linkpath, link, done) {
+ // XXX: get the type ('symlink' or 'junction') for windows
+ node_fs_1.default[link](linkpath, String(entry.absolute), er => {
+ if (er) {
+ this[ONERROR](er, entry);
+ }
+ else {
+ this[UNPEND]();
+ entry.resume();
+ }
+ done();
+ });
+ }
+}
+exports.Unpack = Unpack;
+const callSync = (fn) => {
+ try {
+ return [null, fn()];
+ }
+ catch (er) {
+ return [er, null];
+ }
+};
+class UnpackSync extends Unpack {
+ sync = true;
+ [MAKEFS](er, entry) {
+ return super[MAKEFS](er, entry, () => { });
+ }
+ [CHECKFS](entry) {
+ this[PRUNECACHE](entry);
+ if (!this[CHECKED_CWD]) {
+ const er = this[MKDIR](this.cwd, this.dmode);
+ if (er) {
+ return this[ONERROR](er, entry);
+ }
+ this[CHECKED_CWD] = true;
+ }
+ // don't bother to make the parent if the current entry is the cwd,
+ // we've already checked it.
+ if (entry.absolute !== this.cwd) {
+ const parent = (0, normalize_windows_path_js_1.normalizeWindowsPath)(node_path_1.default.dirname(String(entry.absolute)));
+ if (parent !== this.cwd) {
+ const mkParent = this[MKDIR](parent, this.dmode);
+ if (mkParent) {
+ return this[ONERROR](mkParent, entry);
+ }
+ }
+ }
+ const [lstatEr, st] = callSync(() => node_fs_1.default.lstatSync(String(entry.absolute)));
+ if (st &&
+ (this.keep ||
+ /* c8 ignore next */
+ (this.newer && st.mtime > (entry.mtime ?? st.mtime)))) {
+ return this[SKIP](entry);
+ }
+ if (lstatEr || this[ISREUSABLE](entry, st)) {
+ return this[MAKEFS](null, entry);
+ }
+ if (st.isDirectory()) {
+ if (entry.type === 'Directory') {
+ const needChmod = this.chmod &&
+ entry.mode &&
+ (st.mode & 0o7777) !== entry.mode;
+ const [er] = needChmod ?
+ callSync(() => {
+ node_fs_1.default.chmodSync(String(entry.absolute), Number(entry.mode));
+ })
+ : [];
+ return this[MAKEFS](er, entry);
+ }
+ // not a dir entry, have to remove it
+ const [er] = callSync(() => node_fs_1.default.rmdirSync(String(entry.absolute)));
+ this[MAKEFS](er, entry);
+ }
+ // not a dir, and not reusable.
+ // don't remove if it's the cwd, since we want that error.
+ const [er] = entry.absolute === this.cwd ?
+ []
+ : callSync(() => unlinkFileSync(String(entry.absolute)));
+ this[MAKEFS](er, entry);
+ }
+ [FILE](entry, done) {
+ const mode = typeof entry.mode === 'number' ?
+ entry.mode & 0o7777
+ : this.fmode;
+ const oner = (er) => {
+ let closeError;
+ try {
+ node_fs_1.default.closeSync(fd);
+ }
+ catch (e) {
+ closeError = e;
+ }
+ if (er || closeError) {
+ this[ONERROR](er || closeError, entry);
+ }
+ done();
+ };
+ let fd;
+ try {
+ fd = node_fs_1.default.openSync(String(entry.absolute), (0, get_write_flag_js_1.getWriteFlag)(entry.size), mode);
+ }
+ catch (er) {
+ return oner(er);
+ }
+ const tx = this.transform ? this.transform(entry) || entry : entry;
+ if (tx !== entry) {
+ tx.on('error', (er) => this[ONERROR](er, entry));
+ entry.pipe(tx);
+ }
+ tx.on('data', (chunk) => {
+ try {
+ node_fs_1.default.writeSync(fd, chunk, 0, chunk.length);
+ }
+ catch (er) {
+ oner(er);
+ }
+ });
+ tx.on('end', () => {
+ let er = null;
+ // try both, falling futimes back to utimes
+ // if either fails, handle the first error
+ if (entry.mtime && !this.noMtime) {
+ const atime = entry.atime || new Date();
+ const mtime = entry.mtime;
+ try {
+ node_fs_1.default.futimesSync(fd, atime, mtime);
+ }
+ catch (futimeser) {
+ try {
+ node_fs_1.default.utimesSync(String(entry.absolute), atime, mtime);
+ }
+ catch (utimeser) {
+ er = futimeser;
+ }
+ }
+ }
+ if (this[DOCHOWN](entry)) {
+ const uid = this[UID](entry);
+ const gid = this[GID](entry);
+ try {
+ node_fs_1.default.fchownSync(fd, Number(uid), Number(gid));
+ }
+ catch (fchowner) {
+ try {
+ node_fs_1.default.chownSync(String(entry.absolute), Number(uid), Number(gid));
+ }
+ catch (chowner) {
+ er = er || fchowner;
+ }
+ }
+ }
+ oner(er);
+ });
+ }
+ [DIRECTORY](entry, done) {
+ const mode = typeof entry.mode === 'number' ?
+ entry.mode & 0o7777
+ : this.dmode;
+ const er = this[MKDIR](String(entry.absolute), mode);
+ if (er) {
+ this[ONERROR](er, entry);
+ done();
+ return;
+ }
+ if (entry.mtime && !this.noMtime) {
+ try {
+ node_fs_1.default.utimesSync(String(entry.absolute), entry.atime || new Date(), entry.mtime);
+ /* c8 ignore next */
+ }
+ catch (er) { }
+ }
+ if (this[DOCHOWN](entry)) {
+ try {
+ node_fs_1.default.chownSync(String(entry.absolute), Number(this[UID](entry)), Number(this[GID](entry)));
+ }
+ catch (er) { }
+ }
+ done();
+ entry.resume();
+ }
+ [MKDIR](dir, mode) {
+ try {
+ return (0, mkdir_js_1.mkdirSync)((0, normalize_windows_path_js_1.normalizeWindowsPath)(dir), {
+ uid: this.uid,
+ gid: this.gid,
+ processUid: this.processUid,
+ processGid: this.processGid,
+ umask: this.processUmask,
+ preserve: this.preservePaths,
+ unlink: this.unlink,
+ cache: this.dirCache,
+ cwd: this.cwd,
+ mode: mode,
+ });
+ }
+ catch (er) {
+ return er;
+ }
+ }
+ [LINK](entry, linkpath, link, done) {
+ const ls = `${link}Sync`;
+ try {
+ node_fs_1.default[ls](linkpath, String(entry.absolute));
+ done();
+ entry.resume();
+ }
+ catch (er) {
+ return this[ONERROR](er, entry);
+ }
+ }
+}
+exports.UnpackSync = UnpackSync;
+//# sourceMappingURL=unpack.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/update.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/update.js
new file mode 100644
index 00000000000..7687896f4bf
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/update.js
@@ -0,0 +1,33 @@
+"use strict";
+// tar -u
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.update = void 0;
+const make_command_js_1 = require("./make-command.js");
+const replace_js_1 = require("./replace.js");
+// just call tar.r with the filter and mtimeCache
+exports.update = (0, make_command_js_1.makeCommand)(replace_js_1.replace.syncFile, replace_js_1.replace.asyncFile, replace_js_1.replace.syncNoFile, replace_js_1.replace.asyncNoFile, (opt, entries = []) => {
+ replace_js_1.replace.validate?.(opt, entries);
+ mtimeFilter(opt);
+});
+const mtimeFilter = (opt) => {
+ const filter = opt.filter;
+ if (!opt.mtimeCache) {
+ opt.mtimeCache = new Map();
+ }
+ opt.filter =
+ filter ?
+ (path, stat) => filter(path, stat) &&
+ !(
+ /* c8 ignore start */
+ ((opt.mtimeCache?.get(path) ?? stat.mtime ?? 0) >
+ (stat.mtime ?? 0))
+ /* c8 ignore stop */
+ )
+ : (path, stat) => !(
+ /* c8 ignore start */
+ ((opt.mtimeCache?.get(path) ?? stat.mtime ?? 0) >
+ (stat.mtime ?? 0))
+ /* c8 ignore stop */
+ );
+};
+//# sourceMappingURL=update.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/warn-method.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/warn-method.js
new file mode 100644
index 00000000000..f25502776e3
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/warn-method.js
@@ -0,0 +1,31 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.warnMethod = void 0;
+const warnMethod = (self, code, message, data = {}) => {
+ if (self.file) {
+ data.file = self.file;
+ }
+ if (self.cwd) {
+ data.cwd = self.cwd;
+ }
+ data.code =
+ (message instanceof Error &&
+ message.code) ||
+ code;
+ data.tarCode = code;
+ if (!self.strict && data.recoverable !== false) {
+ if (message instanceof Error) {
+ data = Object.assign(message, data);
+ message = message.message;
+ }
+ self.emit('warn', code, message, data);
+ }
+ else if (message instanceof Error) {
+ self.emit('error', Object.assign(message, data));
+ }
+ else {
+ self.emit('error', Object.assign(new Error(`${code}: ${message}`), data));
+ }
+};
+exports.warnMethod = warnMethod;
+//# sourceMappingURL=warn-method.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/winchars.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/winchars.js
new file mode 100644
index 00000000000..c0a44058129
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/winchars.js
@@ -0,0 +1,14 @@
+"use strict";
+// When writing files on Windows, translate the characters to their
+// 0xf000 higher-encoded versions.
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.decode = exports.encode = void 0;
+const raw = ['|', '<', '>', '?', ':'];
+const win = raw.map(char => String.fromCharCode(0xf000 + char.charCodeAt(0)));
+const toWin = new Map(raw.map((char, i) => [char, win[i]]));
+const toRaw = new Map(win.map((char, i) => [char, raw[i]]));
+const encode = (s) => raw.reduce((s, c) => s.split(c).join(toWin.get(c)), s);
+exports.encode = encode;
+const decode = (s) => win.reduce((s, c) => s.split(c).join(toRaw.get(c)), s);
+exports.decode = decode;
+//# sourceMappingURL=winchars.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/write-entry.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/write-entry.js
new file mode 100644
index 00000000000..45b7efeb795
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/commonjs/write-entry.js
@@ -0,0 +1,689 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.WriteEntryTar = exports.WriteEntrySync = exports.WriteEntry = void 0;
+const fs_1 = __importDefault(require("fs"));
+const minipass_1 = require("minipass");
+const path_1 = __importDefault(require("path"));
+const header_js_1 = require("./header.js");
+const mode_fix_js_1 = require("./mode-fix.js");
+const normalize_windows_path_js_1 = require("./normalize-windows-path.js");
+const options_js_1 = require("./options.js");
+const pax_js_1 = require("./pax.js");
+const strip_absolute_path_js_1 = require("./strip-absolute-path.js");
+const strip_trailing_slashes_js_1 = require("./strip-trailing-slashes.js");
+const warn_method_js_1 = require("./warn-method.js");
+const winchars = __importStar(require("./winchars.js"));
+const prefixPath = (path, prefix) => {
+ if (!prefix) {
+ return (0, normalize_windows_path_js_1.normalizeWindowsPath)(path);
+ }
+ path = (0, normalize_windows_path_js_1.normalizeWindowsPath)(path).replace(/^\.(\/|$)/, '');
+ return (0, strip_trailing_slashes_js_1.stripTrailingSlashes)(prefix) + '/' + path;
+};
+const maxReadSize = 16 * 1024 * 1024;
+const PROCESS = Symbol('process');
+const FILE = Symbol('file');
+const DIRECTORY = Symbol('directory');
+const SYMLINK = Symbol('symlink');
+const HARDLINK = Symbol('hardlink');
+const HEADER = Symbol('header');
+const READ = Symbol('read');
+const LSTAT = Symbol('lstat');
+const ONLSTAT = Symbol('onlstat');
+const ONREAD = Symbol('onread');
+const ONREADLINK = Symbol('onreadlink');
+const OPENFILE = Symbol('openfile');
+const ONOPENFILE = Symbol('onopenfile');
+const CLOSE = Symbol('close');
+const MODE = Symbol('mode');
+const AWAITDRAIN = Symbol('awaitDrain');
+const ONDRAIN = Symbol('ondrain');
+const PREFIX = Symbol('prefix');
+class WriteEntry extends minipass_1.Minipass {
+ path;
+ portable;
+ myuid = (process.getuid && process.getuid()) || 0;
+ // until node has builtin pwnam functions, this'll have to do
+ myuser = process.env.USER || '';
+ maxReadSize;
+ linkCache;
+ statCache;
+ preservePaths;
+ cwd;
+ strict;
+ mtime;
+ noPax;
+ noMtime;
+ prefix;
+ fd;
+ blockLen = 0;
+ blockRemain = 0;
+ buf;
+ pos = 0;
+ remain = 0;
+ length = 0;
+ offset = 0;
+ win32;
+ absolute;
+ header;
+ type;
+ linkpath;
+ stat;
+ onWriteEntry;
+ #hadError = false;
+ constructor(p, opt_ = {}) {
+ const opt = (0, options_js_1.dealias)(opt_);
+ super();
+ this.path = (0, normalize_windows_path_js_1.normalizeWindowsPath)(p);
+ // suppress atime, ctime, uid, gid, uname, gname
+ this.portable = !!opt.portable;
+ this.maxReadSize = opt.maxReadSize || maxReadSize;
+ this.linkCache = opt.linkCache || new Map();
+ this.statCache = opt.statCache || new Map();
+ this.preservePaths = !!opt.preservePaths;
+ this.cwd = (0, normalize_windows_path_js_1.normalizeWindowsPath)(opt.cwd || process.cwd());
+ this.strict = !!opt.strict;
+ this.noPax = !!opt.noPax;
+ this.noMtime = !!opt.noMtime;
+ this.mtime = opt.mtime;
+ this.prefix =
+ opt.prefix ? (0, normalize_windows_path_js_1.normalizeWindowsPath)(opt.prefix) : undefined;
+ this.onWriteEntry = opt.onWriteEntry;
+ if (typeof opt.onwarn === 'function') {
+ this.on('warn', opt.onwarn);
+ }
+ let pathWarn = false;
+ if (!this.preservePaths) {
+ const [root, stripped] = (0, strip_absolute_path_js_1.stripAbsolutePath)(this.path);
+ if (root && typeof stripped === 'string') {
+ this.path = stripped;
+ pathWarn = root;
+ }
+ }
+ this.win32 = !!opt.win32 || process.platform === 'win32';
+ if (this.win32) {
+ // force the \ to / normalization, since we might not *actually*
+ // be on windows, but want \ to be considered a path separator.
+ this.path = winchars.decode(this.path.replace(/\\/g, '/'));
+ p = p.replace(/\\/g, '/');
+ }
+ this.absolute = (0, normalize_windows_path_js_1.normalizeWindowsPath)(opt.absolute || path_1.default.resolve(this.cwd, p));
+ if (this.path === '') {
+ this.path = './';
+ }
+ if (pathWarn) {
+ this.warn('TAR_ENTRY_INFO', `stripping ${pathWarn} from absolute path`, {
+ entry: this,
+ path: pathWarn + this.path,
+ });
+ }
+ const cs = this.statCache.get(this.absolute);
+ if (cs) {
+ this[ONLSTAT](cs);
+ }
+ else {
+ this[LSTAT]();
+ }
+ }
+ warn(code, message, data = {}) {
+ return (0, warn_method_js_1.warnMethod)(this, code, message, data);
+ }
+ emit(ev, ...data) {
+ if (ev === 'error') {
+ this.#hadError = true;
+ }
+ return super.emit(ev, ...data);
+ }
+ [LSTAT]() {
+ fs_1.default.lstat(this.absolute, (er, stat) => {
+ if (er) {
+ return this.emit('error', er);
+ }
+ this[ONLSTAT](stat);
+ });
+ }
+ [ONLSTAT](stat) {
+ this.statCache.set(this.absolute, stat);
+ this.stat = stat;
+ if (!stat.isFile()) {
+ stat.size = 0;
+ }
+ this.type = getType(stat);
+ this.emit('stat', stat);
+ this[PROCESS]();
+ }
+ [PROCESS]() {
+ switch (this.type) {
+ case 'File':
+ return this[FILE]();
+ case 'Directory':
+ return this[DIRECTORY]();
+ case 'SymbolicLink':
+ return this[SYMLINK]();
+ // unsupported types are ignored.
+ default:
+ return this.end();
+ }
+ }
+ [MODE](mode) {
+ return (0, mode_fix_js_1.modeFix)(mode, this.type === 'Directory', this.portable);
+ }
+ [PREFIX](path) {
+ return prefixPath(path, this.prefix);
+ }
+ [HEADER]() {
+ /* c8 ignore start */
+ if (!this.stat) {
+ throw new Error('cannot write header before stat');
+ }
+ /* c8 ignore stop */
+ if (this.type === 'Directory' && this.portable) {
+ this.noMtime = true;
+ }
+ this.onWriteEntry?.(this);
+ this.header = new header_js_1.Header({
+ path: this[PREFIX](this.path),
+ // only apply the prefix to hard links.
+ linkpath: this.type === 'Link' && this.linkpath !== undefined ?
+ this[PREFIX](this.linkpath)
+ : this.linkpath,
+ // only the permissions and setuid/setgid/sticky bitflags
+ // not the higher-order bits that specify file type
+ mode: this[MODE](this.stat.mode),
+ uid: this.portable ? undefined : this.stat.uid,
+ gid: this.portable ? undefined : this.stat.gid,
+ size: this.stat.size,
+ mtime: this.noMtime ? undefined : this.mtime || this.stat.mtime,
+ /* c8 ignore next */
+ type: this.type === 'Unsupported' ? undefined : this.type,
+ uname: this.portable ? undefined
+ : this.stat.uid === this.myuid ? this.myuser
+ : '',
+ atime: this.portable ? undefined : this.stat.atime,
+ ctime: this.portable ? undefined : this.stat.ctime,
+ });
+ if (this.header.encode() && !this.noPax) {
+ super.write(new pax_js_1.Pax({
+ atime: this.portable ? undefined : this.header.atime,
+ ctime: this.portable ? undefined : this.header.ctime,
+ gid: this.portable ? undefined : this.header.gid,
+ mtime: this.noMtime ? undefined : (this.mtime || this.header.mtime),
+ path: this[PREFIX](this.path),
+ linkpath: this.type === 'Link' && this.linkpath !== undefined ?
+ this[PREFIX](this.linkpath)
+ : this.linkpath,
+ size: this.header.size,
+ uid: this.portable ? undefined : this.header.uid,
+ uname: this.portable ? undefined : this.header.uname,
+ dev: this.portable ? undefined : this.stat.dev,
+ ino: this.portable ? undefined : this.stat.ino,
+ nlink: this.portable ? undefined : this.stat.nlink,
+ }).encode());
+ }
+ const block = this.header?.block;
+ /* c8 ignore start */
+ if (!block) {
+ throw new Error('failed to encode header');
+ }
+ /* c8 ignore stop */
+ super.write(block);
+ }
+ [DIRECTORY]() {
+ /* c8 ignore start */
+ if (!this.stat) {
+ throw new Error('cannot create directory entry without stat');
+ }
+ /* c8 ignore stop */
+ if (this.path.slice(-1) !== '/') {
+ this.path += '/';
+ }
+ this.stat.size = 0;
+ this[HEADER]();
+ this.end();
+ }
+ [SYMLINK]() {
+ fs_1.default.readlink(this.absolute, (er, linkpath) => {
+ if (er) {
+ return this.emit('error', er);
+ }
+ this[ONREADLINK](linkpath);
+ });
+ }
+ [ONREADLINK](linkpath) {
+ this.linkpath = (0, normalize_windows_path_js_1.normalizeWindowsPath)(linkpath);
+ this[HEADER]();
+ this.end();
+ }
+ [HARDLINK](linkpath) {
+ /* c8 ignore start */
+ if (!this.stat) {
+ throw new Error('cannot create link entry without stat');
+ }
+ /* c8 ignore stop */
+ this.type = 'Link';
+ this.linkpath = (0, normalize_windows_path_js_1.normalizeWindowsPath)(path_1.default.relative(this.cwd, linkpath));
+ this.stat.size = 0;
+ this[HEADER]();
+ this.end();
+ }
+ [FILE]() {
+ /* c8 ignore start */
+ if (!this.stat) {
+ throw new Error('cannot create file entry without stat');
+ }
+ /* c8 ignore stop */
+ if (this.stat.nlink > 1) {
+ const linkKey = `${this.stat.dev}:${this.stat.ino}`;
+ const linkpath = this.linkCache.get(linkKey);
+ if (linkpath?.indexOf(this.cwd) === 0) {
+ return this[HARDLINK](linkpath);
+ }
+ this.linkCache.set(linkKey, this.absolute);
+ }
+ this[HEADER]();
+ if (this.stat.size === 0) {
+ return this.end();
+ }
+ this[OPENFILE]();
+ }
+ [OPENFILE]() {
+ fs_1.default.open(this.absolute, 'r', (er, fd) => {
+ if (er) {
+ return this.emit('error', er);
+ }
+ this[ONOPENFILE](fd);
+ });
+ }
+ [ONOPENFILE](fd) {
+ this.fd = fd;
+ if (this.#hadError) {
+ return this[CLOSE]();
+ }
+ /* c8 ignore start */
+ if (!this.stat) {
+ throw new Error('should stat before calling onopenfile');
+ }
+ /* c8 ignore start */
+ this.blockLen = 512 * Math.ceil(this.stat.size / 512);
+ this.blockRemain = this.blockLen;
+ const bufLen = Math.min(this.blockLen, this.maxReadSize);
+ this.buf = Buffer.allocUnsafe(bufLen);
+ this.offset = 0;
+ this.pos = 0;
+ this.remain = this.stat.size;
+ this.length = this.buf.length;
+ this[READ]();
+ }
+ [READ]() {
+ const { fd, buf, offset, length, pos } = this;
+ if (fd === undefined || buf === undefined) {
+ throw new Error('cannot read file without first opening');
+ }
+ fs_1.default.read(fd, buf, offset, length, pos, (er, bytesRead) => {
+ if (er) {
+ // ignoring the error from close(2) is a bad practice, but at
+ // this point we already have an error, don't need another one
+ return this[CLOSE](() => this.emit('error', er));
+ }
+ this[ONREAD](bytesRead);
+ });
+ }
+ /* c8 ignore start */
+ [CLOSE](cb = () => { }) {
+ /* c8 ignore stop */
+ if (this.fd !== undefined)
+ fs_1.default.close(this.fd, cb);
+ }
+ [ONREAD](bytesRead) {
+ if (bytesRead <= 0 && this.remain > 0) {
+ const er = Object.assign(new Error('encountered unexpected EOF'), {
+ path: this.absolute,
+ syscall: 'read',
+ code: 'EOF',
+ });
+ return this[CLOSE](() => this.emit('error', er));
+ }
+ if (bytesRead > this.remain) {
+ const er = Object.assign(new Error('did not encounter expected EOF'), {
+ path: this.absolute,
+ syscall: 'read',
+ code: 'EOF',
+ });
+ return this[CLOSE](() => this.emit('error', er));
+ }
+ /* c8 ignore start */
+ if (!this.buf) {
+ throw new Error('should have created buffer prior to reading');
+ }
+ /* c8 ignore stop */
+ // null out the rest of the buffer, if we could fit the block padding
+ // at the end of this loop, we've incremented bytesRead and this.remain
+ // to be incremented up to the blockRemain level, as if we had expected
+ // to get a null-padded file, and read it until the end. then we will
+ // decrement both remain and blockRemain by bytesRead, and know that we
+ // reached the expected EOF, without any null buffer to append.
+ if (bytesRead === this.remain) {
+ for (let i = bytesRead; i < this.length && bytesRead < this.blockRemain; i++) {
+ this.buf[i + this.offset] = 0;
+ bytesRead++;
+ this.remain++;
+ }
+ }
+ const chunk = this.offset === 0 && bytesRead === this.buf.length ?
+ this.buf
+ : this.buf.subarray(this.offset, this.offset + bytesRead);
+ const flushed = this.write(chunk);
+ if (!flushed) {
+ this[AWAITDRAIN](() => this[ONDRAIN]());
+ }
+ else {
+ this[ONDRAIN]();
+ }
+ }
+ [AWAITDRAIN](cb) {
+ this.once('drain', cb);
+ }
+ write(chunk, encoding, cb) {
+ /* c8 ignore start - just junk to comply with NodeJS.WritableStream */
+ if (typeof encoding === 'function') {
+ cb = encoding;
+ encoding = undefined;
+ }
+ if (typeof chunk === 'string') {
+ chunk = Buffer.from(chunk, typeof encoding === 'string' ? encoding : 'utf8');
+ }
+ /* c8 ignore stop */
+ if (this.blockRemain < chunk.length) {
+ const er = Object.assign(new Error('writing more data than expected'), {
+ path: this.absolute,
+ });
+ return this.emit('error', er);
+ }
+ this.remain -= chunk.length;
+ this.blockRemain -= chunk.length;
+ this.pos += chunk.length;
+ this.offset += chunk.length;
+ return super.write(chunk, null, cb);
+ }
+ [ONDRAIN]() {
+ if (!this.remain) {
+ if (this.blockRemain) {
+ super.write(Buffer.alloc(this.blockRemain));
+ }
+ return this[CLOSE](er => er ? this.emit('error', er) : this.end());
+ }
+ /* c8 ignore start */
+ if (!this.buf) {
+ throw new Error('buffer lost somehow in ONDRAIN');
+ }
+ /* c8 ignore stop */
+ if (this.offset >= this.length) {
+ // if we only have a smaller bit left to read, alloc a smaller buffer
+ // otherwise, keep it the same length it was before.
+ this.buf = Buffer.allocUnsafe(Math.min(this.blockRemain, this.buf.length));
+ this.offset = 0;
+ }
+ this.length = this.buf.length - this.offset;
+ this[READ]();
+ }
+}
+exports.WriteEntry = WriteEntry;
+class WriteEntrySync extends WriteEntry {
+ sync = true;
+ [LSTAT]() {
+ this[ONLSTAT](fs_1.default.lstatSync(this.absolute));
+ }
+ [SYMLINK]() {
+ this[ONREADLINK](fs_1.default.readlinkSync(this.absolute));
+ }
+ [OPENFILE]() {
+ this[ONOPENFILE](fs_1.default.openSync(this.absolute, 'r'));
+ }
+ [READ]() {
+ let threw = true;
+ try {
+ const { fd, buf, offset, length, pos } = this;
+ /* c8 ignore start */
+ if (fd === undefined || buf === undefined) {
+ throw new Error('fd and buf must be set in READ method');
+ }
+ /* c8 ignore stop */
+ const bytesRead = fs_1.default.readSync(fd, buf, offset, length, pos);
+ this[ONREAD](bytesRead);
+ threw = false;
+ }
+ finally {
+ // ignoring the error from close(2) is a bad practice, but at
+ // this point we already have an error, don't need another one
+ if (threw) {
+ try {
+ this[CLOSE](() => { });
+ }
+ catch (er) { }
+ }
+ }
+ }
+ [AWAITDRAIN](cb) {
+ cb();
+ }
+ /* c8 ignore start */
+ [CLOSE](cb = () => { }) {
+ /* c8 ignore stop */
+ if (this.fd !== undefined)
+ fs_1.default.closeSync(this.fd);
+ cb();
+ }
+}
+exports.WriteEntrySync = WriteEntrySync;
+class WriteEntryTar extends minipass_1.Minipass {
+ blockLen = 0;
+ blockRemain = 0;
+ buf = 0;
+ pos = 0;
+ remain = 0;
+ length = 0;
+ preservePaths;
+ portable;
+ strict;
+ noPax;
+ noMtime;
+ readEntry;
+ type;
+ prefix;
+ path;
+ mode;
+ uid;
+ gid;
+ uname;
+ gname;
+ header;
+ mtime;
+ atime;
+ ctime;
+ linkpath;
+ size;
+ onWriteEntry;
+ warn(code, message, data = {}) {
+ return (0, warn_method_js_1.warnMethod)(this, code, message, data);
+ }
+ constructor(readEntry, opt_ = {}) {
+ const opt = (0, options_js_1.dealias)(opt_);
+ super();
+ this.preservePaths = !!opt.preservePaths;
+ this.portable = !!opt.portable;
+ this.strict = !!opt.strict;
+ this.noPax = !!opt.noPax;
+ this.noMtime = !!opt.noMtime;
+ this.onWriteEntry = opt.onWriteEntry;
+ this.readEntry = readEntry;
+ const { type } = readEntry;
+ /* c8 ignore start */
+ if (type === 'Unsupported') {
+ throw new Error('writing entry that should be ignored');
+ }
+ /* c8 ignore stop */
+ this.type = type;
+ if (this.type === 'Directory' && this.portable) {
+ this.noMtime = true;
+ }
+ this.prefix = opt.prefix;
+ this.path = (0, normalize_windows_path_js_1.normalizeWindowsPath)(readEntry.path);
+ this.mode =
+ readEntry.mode !== undefined ?
+ this[MODE](readEntry.mode)
+ : undefined;
+ this.uid = this.portable ? undefined : readEntry.uid;
+ this.gid = this.portable ? undefined : readEntry.gid;
+ this.uname = this.portable ? undefined : readEntry.uname;
+ this.gname = this.portable ? undefined : readEntry.gname;
+ this.size = readEntry.size;
+ this.mtime =
+ this.noMtime ? undefined : opt.mtime || readEntry.mtime;
+ this.atime = this.portable ? undefined : readEntry.atime;
+ this.ctime = this.portable ? undefined : readEntry.ctime;
+ this.linkpath =
+ readEntry.linkpath !== undefined ?
+ (0, normalize_windows_path_js_1.normalizeWindowsPath)(readEntry.linkpath)
+ : undefined;
+ if (typeof opt.onwarn === 'function') {
+ this.on('warn', opt.onwarn);
+ }
+ let pathWarn = false;
+ if (!this.preservePaths) {
+ const [root, stripped] = (0, strip_absolute_path_js_1.stripAbsolutePath)(this.path);
+ if (root && typeof stripped === 'string') {
+ this.path = stripped;
+ pathWarn = root;
+ }
+ }
+ this.remain = readEntry.size;
+ this.blockRemain = readEntry.startBlockSize;
+ this.onWriteEntry?.(this);
+ this.header = new header_js_1.Header({
+ path: this[PREFIX](this.path),
+ linkpath: this.type === 'Link' && this.linkpath !== undefined ?
+ this[PREFIX](this.linkpath)
+ : this.linkpath,
+ // only the permissions and setuid/setgid/sticky bitflags
+ // not the higher-order bits that specify file type
+ mode: this.mode,
+ uid: this.portable ? undefined : this.uid,
+ gid: this.portable ? undefined : this.gid,
+ size: this.size,
+ mtime: this.noMtime ? undefined : this.mtime,
+ type: this.type,
+ uname: this.portable ? undefined : this.uname,
+ atime: this.portable ? undefined : this.atime,
+ ctime: this.portable ? undefined : this.ctime,
+ });
+ if (pathWarn) {
+ this.warn('TAR_ENTRY_INFO', `stripping ${pathWarn} from absolute path`, {
+ entry: this,
+ path: pathWarn + this.path,
+ });
+ }
+ if (this.header.encode() && !this.noPax) {
+ super.write(new pax_js_1.Pax({
+ atime: this.portable ? undefined : this.atime,
+ ctime: this.portable ? undefined : this.ctime,
+ gid: this.portable ? undefined : this.gid,
+ mtime: this.noMtime ? undefined : this.mtime,
+ path: this[PREFIX](this.path),
+ linkpath: this.type === 'Link' && this.linkpath !== undefined ?
+ this[PREFIX](this.linkpath)
+ : this.linkpath,
+ size: this.size,
+ uid: this.portable ? undefined : this.uid,
+ uname: this.portable ? undefined : this.uname,
+ dev: this.portable ? undefined : this.readEntry.dev,
+ ino: this.portable ? undefined : this.readEntry.ino,
+ nlink: this.portable ? undefined : this.readEntry.nlink,
+ }).encode());
+ }
+ const b = this.header?.block;
+ /* c8 ignore start */
+ if (!b)
+ throw new Error('failed to encode header');
+ /* c8 ignore stop */
+ super.write(b);
+ readEntry.pipe(this);
+ }
+ [PREFIX](path) {
+ return prefixPath(path, this.prefix);
+ }
+ [MODE](mode) {
+ return (0, mode_fix_js_1.modeFix)(mode, this.type === 'Directory', this.portable);
+ }
+ write(chunk, encoding, cb) {
+ /* c8 ignore start - just junk to comply with NodeJS.WritableStream */
+ if (typeof encoding === 'function') {
+ cb = encoding;
+ encoding = undefined;
+ }
+ if (typeof chunk === 'string') {
+ chunk = Buffer.from(chunk, typeof encoding === 'string' ? encoding : 'utf8');
+ }
+ /* c8 ignore stop */
+ const writeLen = chunk.length;
+ if (writeLen > this.blockRemain) {
+ throw new Error('writing more to entry than is appropriate');
+ }
+ this.blockRemain -= writeLen;
+ return super.write(chunk, cb);
+ }
+ end(chunk, encoding, cb) {
+ if (this.blockRemain) {
+ super.write(Buffer.alloc(this.blockRemain));
+ }
+ /* c8 ignore start - just junk to comply with NodeJS.WritableStream */
+ if (typeof chunk === 'function') {
+ cb = chunk;
+ encoding = undefined;
+ chunk = undefined;
+ }
+ if (typeof encoding === 'function') {
+ cb = encoding;
+ encoding = undefined;
+ }
+ if (typeof chunk === 'string') {
+ chunk = Buffer.from(chunk, encoding ?? 'utf8');
+ }
+ if (cb)
+ this.once('finish', cb);
+ chunk ? super.end(chunk, cb) : super.end(cb);
+ /* c8 ignore stop */
+ return this;
+ }
+}
+exports.WriteEntryTar = WriteEntryTar;
+const getType = (stat) => stat.isFile() ? 'File'
+ : stat.isDirectory() ? 'Directory'
+ : stat.isSymbolicLink() ? 'SymbolicLink'
+ : 'Unsupported';
+//# sourceMappingURL=write-entry.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/create.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/create.js
new file mode 100644
index 00000000000..512a9911d70
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/create.js
@@ -0,0 +1,77 @@
+import { WriteStream, WriteStreamSync } from '@isaacs/fs-minipass';
+import path from 'node:path';
+import { list } from './list.js';
+import { makeCommand } from './make-command.js';
+import { Pack, PackSync } from './pack.js';
+const createFileSync = (opt, files) => {
+ const p = new PackSync(opt);
+ const stream = new WriteStreamSync(opt.file, {
+ mode: opt.mode || 0o666,
+ });
+ p.pipe(stream);
+ addFilesSync(p, files);
+};
+const createFile = (opt, files) => {
+ const p = new Pack(opt);
+ const stream = new WriteStream(opt.file, {
+ mode: opt.mode || 0o666,
+ });
+ p.pipe(stream);
+ const promise = new Promise((res, rej) => {
+ stream.on('error', rej);
+ stream.on('close', res);
+ p.on('error', rej);
+ });
+ addFilesAsync(p, files);
+ return promise;
+};
+const addFilesSync = (p, files) => {
+ files.forEach(file => {
+ if (file.charAt(0) === '@') {
+ list({
+ file: path.resolve(p.cwd, file.slice(1)),
+ sync: true,
+ noResume: true,
+ onReadEntry: entry => p.add(entry),
+ });
+ }
+ else {
+ p.add(file);
+ }
+ });
+ p.end();
+};
+const addFilesAsync = async (p, files) => {
+ for (let i = 0; i < files.length; i++) {
+ const file = String(files[i]);
+ if (file.charAt(0) === '@') {
+ await list({
+ file: path.resolve(String(p.cwd), file.slice(1)),
+ noResume: true,
+ onReadEntry: entry => {
+ p.add(entry);
+ },
+ });
+ }
+ else {
+ p.add(file);
+ }
+ }
+ p.end();
+};
+const createSync = (opt, files) => {
+ const p = new PackSync(opt);
+ addFilesSync(p, files);
+ return p;
+};
+const createAsync = (opt, files) => {
+ const p = new Pack(opt);
+ addFilesAsync(p, files);
+ return p;
+};
+export const create = makeCommand(createFileSync, createFile, createSync, createAsync, (_opt, files) => {
+ if (!files?.length) {
+ throw new TypeError('no paths specified to add to archive');
+ }
+});
+//# sourceMappingURL=create.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/cwd-error.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/cwd-error.js
new file mode 100644
index 00000000000..289a066b8e0
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/cwd-error.js
@@ -0,0 +1,14 @@
+export class CwdError extends Error {
+ path;
+ code;
+ syscall = 'chdir';
+ constructor(path, code) {
+ super(`${code}: Cannot cd into '${path}'`);
+ this.path = path;
+ this.code = code;
+ }
+ get name() {
+ return 'CwdError';
+ }
+}
+//# sourceMappingURL=cwd-error.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/extract.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/extract.js
new file mode 100644
index 00000000000..2274feef26e
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/extract.js
@@ -0,0 +1,49 @@
+// tar -x
+import * as fsm from '@isaacs/fs-minipass';
+import fs from 'node:fs';
+import { filesFilter } from './list.js';
+import { makeCommand } from './make-command.js';
+import { Unpack, UnpackSync } from './unpack.js';
+const extractFileSync = (opt) => {
+ const u = new UnpackSync(opt);
+ const file = opt.file;
+ const stat = fs.statSync(file);
+ // This trades a zero-byte read() syscall for a stat
+ // However, it will usually result in less memory allocation
+ const readSize = opt.maxReadSize || 16 * 1024 * 1024;
+ const stream = new fsm.ReadStreamSync(file, {
+ readSize: readSize,
+ size: stat.size,
+ });
+ stream.pipe(u);
+};
+const extractFile = (opt, _) => {
+ const u = new Unpack(opt);
+ const readSize = opt.maxReadSize || 16 * 1024 * 1024;
+ const file = opt.file;
+ const p = new Promise((resolve, reject) => {
+ u.on('error', reject);
+ u.on('close', resolve);
+ // This trades a zero-byte read() syscall for a stat
+ // However, it will usually result in less memory allocation
+ fs.stat(file, (er, stat) => {
+ if (er) {
+ reject(er);
+ }
+ else {
+ const stream = new fsm.ReadStream(file, {
+ readSize: readSize,
+ size: stat.size,
+ });
+ stream.on('error', reject);
+ stream.pipe(u);
+ }
+ });
+ });
+ return p;
+};
+export const extract = makeCommand(extractFileSync, extractFile, opt => new UnpackSync(opt), opt => new Unpack(opt), (opt, files) => {
+ if (files?.length)
+ filesFilter(opt, files);
+});
+//# sourceMappingURL=extract.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/get-write-flag.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/get-write-flag.js
new file mode 100644
index 00000000000..2c7f3e8b28f
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/get-write-flag.js
@@ -0,0 +1,23 @@
+// Get the appropriate flag to use for creating files
+// We use fmap on Windows platforms for files less than
+// 512kb. This is a fairly low limit, but avoids making
+// things slower in some cases. Since most of what this
+// library is used for is extracting tarballs of many
+// relatively small files in npm packages and the like,
+// it can be a big boost on Windows platforms.
+import fs from 'fs';
+const platform = process.env.__FAKE_PLATFORM__ || process.platform;
+const isWindows = platform === 'win32';
+/* c8 ignore start */
+const { O_CREAT, O_TRUNC, O_WRONLY } = fs.constants;
+const UV_FS_O_FILEMAP = Number(process.env.__FAKE_FS_O_FILENAME__) ||
+ fs.constants.UV_FS_O_FILEMAP ||
+ 0;
+/* c8 ignore stop */
+const fMapEnabled = isWindows && !!UV_FS_O_FILEMAP;
+const fMapLimit = 512 * 1024;
+const fMapFlag = UV_FS_O_FILEMAP | O_TRUNC | O_CREAT | O_WRONLY;
+export const getWriteFlag = !fMapEnabled ?
+ () => 'w'
+ : (size) => (size < fMapLimit ? fMapFlag : 'w');
+//# sourceMappingURL=get-write-flag.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/header.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/header.js
new file mode 100644
index 00000000000..e15192b14b1
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/header.js
@@ -0,0 +1,279 @@
+// parse a 512-byte header block to a data object, or vice-versa
+// encode returns `true` if a pax extended header is needed, because
+// the data could not be faithfully encoded in a simple header.
+// (Also, check header.needPax to see if it needs a pax header.)
+import { posix as pathModule } from 'node:path';
+import * as large from './large-numbers.js';
+import * as types from './types.js';
+export class Header {
+ cksumValid = false;
+ needPax = false;
+ nullBlock = false;
+ block;
+ path;
+ mode;
+ uid;
+ gid;
+ size;
+ cksum;
+ #type = 'Unsupported';
+ linkpath;
+ uname;
+ gname;
+ devmaj = 0;
+ devmin = 0;
+ atime;
+ ctime;
+ mtime;
+ charset;
+ comment;
+ constructor(data, off = 0, ex, gex) {
+ if (Buffer.isBuffer(data)) {
+ this.decode(data, off || 0, ex, gex);
+ }
+ else if (data) {
+ this.#slurp(data);
+ }
+ }
+ decode(buf, off, ex, gex) {
+ if (!off) {
+ off = 0;
+ }
+ if (!buf || !(buf.length >= off + 512)) {
+ throw new Error('need 512 bytes for header');
+ }
+ this.path = decString(buf, off, 100);
+ this.mode = decNumber(buf, off + 100, 8);
+ this.uid = decNumber(buf, off + 108, 8);
+ this.gid = decNumber(buf, off + 116, 8);
+ this.size = decNumber(buf, off + 124, 12);
+ this.mtime = decDate(buf, off + 136, 12);
+ this.cksum = decNumber(buf, off + 148, 12);
+ // if we have extended or global extended headers, apply them now
+ // See https://github.com/npm/node-tar/pull/187
+ // Apply global before local, so it overrides
+ if (gex)
+ this.#slurp(gex, true);
+ if (ex)
+ this.#slurp(ex);
+ // old tar versions marked dirs as a file with a trailing /
+ const t = decString(buf, off + 156, 1);
+ if (types.isCode(t)) {
+ this.#type = t || '0';
+ }
+ if (this.#type === '0' && this.path.slice(-1) === '/') {
+ this.#type = '5';
+ }
+ // tar implementations sometimes incorrectly put the stat(dir).size
+ // as the size in the tarball, even though Directory entries are
+ // not able to have any body at all. In the very rare chance that
+ // it actually DOES have a body, we weren't going to do anything with
+ // it anyway, and it'll just be a warning about an invalid header.
+ if (this.#type === '5') {
+ this.size = 0;
+ }
+ this.linkpath = decString(buf, off + 157, 100);
+ if (buf.subarray(off + 257, off + 265).toString() ===
+ 'ustar\u000000') {
+ this.uname = decString(buf, off + 265, 32);
+ this.gname = decString(buf, off + 297, 32);
+ /* c8 ignore start */
+ this.devmaj = decNumber(buf, off + 329, 8) ?? 0;
+ this.devmin = decNumber(buf, off + 337, 8) ?? 0;
+ /* c8 ignore stop */
+ if (buf[off + 475] !== 0) {
+ // definitely a prefix, definitely >130 chars.
+ const prefix = decString(buf, off + 345, 155);
+ this.path = prefix + '/' + this.path;
+ }
+ else {
+ const prefix = decString(buf, off + 345, 130);
+ if (prefix) {
+ this.path = prefix + '/' + this.path;
+ }
+ this.atime = decDate(buf, off + 476, 12);
+ this.ctime = decDate(buf, off + 488, 12);
+ }
+ }
+ let sum = 8 * 0x20;
+ for (let i = off; i < off + 148; i++) {
+ sum += buf[i];
+ }
+ for (let i = off + 156; i < off + 512; i++) {
+ sum += buf[i];
+ }
+ this.cksumValid = sum === this.cksum;
+ if (this.cksum === undefined && sum === 8 * 0x20) {
+ this.nullBlock = true;
+ }
+ }
+ #slurp(ex, gex = false) {
+ Object.assign(this, Object.fromEntries(Object.entries(ex).filter(([k, v]) => {
+ // we slurp in everything except for the path attribute in
+ // a global extended header, because that's weird. Also, any
+ // null/undefined values are ignored.
+ return !(v === null ||
+ v === undefined ||
+ (k === 'path' && gex) ||
+ (k === 'linkpath' && gex) ||
+ k === 'global');
+ })));
+ }
+ encode(buf, off = 0) {
+ if (!buf) {
+ buf = this.block = Buffer.alloc(512);
+ }
+ if (this.#type === 'Unsupported') {
+ this.#type = '0';
+ }
+ if (!(buf.length >= off + 512)) {
+ throw new Error('need 512 bytes for header');
+ }
+ const prefixSize = this.ctime || this.atime ? 130 : 155;
+ const split = splitPrefix(this.path || '', prefixSize);
+ const path = split[0];
+ const prefix = split[1];
+ this.needPax = !!split[2];
+ this.needPax = encString(buf, off, 100, path) || this.needPax;
+ this.needPax =
+ encNumber(buf, off + 100, 8, this.mode) || this.needPax;
+ this.needPax =
+ encNumber(buf, off + 108, 8, this.uid) || this.needPax;
+ this.needPax =
+ encNumber(buf, off + 116, 8, this.gid) || this.needPax;
+ this.needPax =
+ encNumber(buf, off + 124, 12, this.size) || this.needPax;
+ this.needPax =
+ encDate(buf, off + 136, 12, this.mtime) || this.needPax;
+ buf[off + 156] = this.#type.charCodeAt(0);
+ this.needPax =
+ encString(buf, off + 157, 100, this.linkpath) || this.needPax;
+ buf.write('ustar\u000000', off + 257, 8);
+ this.needPax =
+ encString(buf, off + 265, 32, this.uname) || this.needPax;
+ this.needPax =
+ encString(buf, off + 297, 32, this.gname) || this.needPax;
+ this.needPax =
+ encNumber(buf, off + 329, 8, this.devmaj) || this.needPax;
+ this.needPax =
+ encNumber(buf, off + 337, 8, this.devmin) || this.needPax;
+ this.needPax =
+ encString(buf, off + 345, prefixSize, prefix) || this.needPax;
+ if (buf[off + 475] !== 0) {
+ this.needPax =
+ encString(buf, off + 345, 155, prefix) || this.needPax;
+ }
+ else {
+ this.needPax =
+ encString(buf, off + 345, 130, prefix) || this.needPax;
+ this.needPax =
+ encDate(buf, off + 476, 12, this.atime) || this.needPax;
+ this.needPax =
+ encDate(buf, off + 488, 12, this.ctime) || this.needPax;
+ }
+ let sum = 8 * 0x20;
+ for (let i = off; i < off + 148; i++) {
+ sum += buf[i];
+ }
+ for (let i = off + 156; i < off + 512; i++) {
+ sum += buf[i];
+ }
+ this.cksum = sum;
+ encNumber(buf, off + 148, 8, this.cksum);
+ this.cksumValid = true;
+ return this.needPax;
+ }
+ get type() {
+ return (this.#type === 'Unsupported' ?
+ this.#type
+ : types.name.get(this.#type));
+ }
+ get typeKey() {
+ return this.#type;
+ }
+ set type(type) {
+ const c = String(types.code.get(type));
+ if (types.isCode(c) || c === 'Unsupported') {
+ this.#type = c;
+ }
+ else if (types.isCode(type)) {
+ this.#type = type;
+ }
+ else {
+ throw new TypeError('invalid entry type: ' + type);
+ }
+ }
+}
+const splitPrefix = (p, prefixSize) => {
+ const pathSize = 100;
+ let pp = p;
+ let prefix = '';
+ let ret = undefined;
+ const root = pathModule.parse(p).root || '.';
+ if (Buffer.byteLength(pp) < pathSize) {
+ ret = [pp, prefix, false];
+ }
+ else {
+ // first set prefix to the dir, and path to the base
+ prefix = pathModule.dirname(pp);
+ pp = pathModule.basename(pp);
+ do {
+ if (Buffer.byteLength(pp) <= pathSize &&
+ Buffer.byteLength(prefix) <= prefixSize) {
+ // both fit!
+ ret = [pp, prefix, false];
+ }
+ else if (Buffer.byteLength(pp) > pathSize &&
+ Buffer.byteLength(prefix) <= prefixSize) {
+ // prefix fits in prefix, but path doesn't fit in path
+ ret = [pp.slice(0, pathSize - 1), prefix, true];
+ }
+ else {
+ // make path take a bit from prefix
+ pp = pathModule.join(pathModule.basename(prefix), pp);
+ prefix = pathModule.dirname(prefix);
+ }
+ } while (prefix !== root && ret === undefined);
+ // at this point, found no resolution, just truncate
+ if (!ret) {
+ ret = [p.slice(0, pathSize - 1), '', true];
+ }
+ }
+ return ret;
+};
+const decString = (buf, off, size) => buf
+ .subarray(off, off + size)
+ .toString('utf8')
+ .replace(/\0.*/, '');
+const decDate = (buf, off, size) => numToDate(decNumber(buf, off, size));
+const numToDate = (num) => num === undefined ? undefined : new Date(num * 1000);
+const decNumber = (buf, off, size) => Number(buf[off]) & 0x80 ?
+ large.parse(buf.subarray(off, off + size))
+ : decSmallNumber(buf, off, size);
+const nanUndef = (value) => (isNaN(value) ? undefined : value);
+const decSmallNumber = (buf, off, size) => nanUndef(parseInt(buf
+ .subarray(off, off + size)
+ .toString('utf8')
+ .replace(/\0.*$/, '')
+ .trim(), 8));
+// the maximum encodable as a null-terminated octal, by field size
+const MAXNUM = {
+ 12: 0o77777777777,
+ 8: 0o7777777,
+};
+const encNumber = (buf, off, size, num) => num === undefined ? false
+ : num > MAXNUM[size] || num < 0 ?
+ (large.encode(num, buf.subarray(off, off + size)), true)
+ : (encSmallNumber(buf, off, size, num), false);
+const encSmallNumber = (buf, off, size, num) => buf.write(octalString(num, size), off, size, 'ascii');
+const octalString = (num, size) => padOctal(Math.floor(num).toString(8), size);
+const padOctal = (str, size) => (str.length === size - 1 ?
+ str
+ : new Array(size - str.length - 1).join('0') + str + ' ') + '\0';
+const encDate = (buf, off, size, date) => date === undefined ? false : (encNumber(buf, off, size, date.getTime() / 1000));
+// enough to fill the longest string we've got
+const NULLS = new Array(156).join('\0');
+// pad with nulls, return true if it's longer or non-ascii
+const encString = (buf, off, size, str) => str === undefined ? false : ((buf.write(str + NULLS, off, size, 'utf8'),
+ str.length !== Buffer.byteLength(str) || str.length > size));
+//# sourceMappingURL=header.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/index.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/index.js
new file mode 100644
index 00000000000..1bac6415c8d
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/index.js
@@ -0,0 +1,20 @@
+export * from './create.js';
+export { create as c } from './create.js';
+export * from './extract.js';
+export { extract as x } from './extract.js';
+export * from './header.js';
+export * from './list.js';
+export { list as t } from './list.js';
+// classes
+export * from './pack.js';
+export * from './parse.js';
+export * from './pax.js';
+export * from './read-entry.js';
+export * from './replace.js';
+export { replace as r } from './replace.js';
+export * as types from './types.js';
+export * from './unpack.js';
+export * from './update.js';
+export { update as u } from './update.js';
+export * from './write-entry.js';
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/large-numbers.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/large-numbers.js
new file mode 100644
index 00000000000..4f2f7e5f14f
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/large-numbers.js
@@ -0,0 +1,94 @@
+// Tar can encode large and negative numbers using a leading byte of
+// 0xff for negative, and 0x80 for positive.
+export const encode = (num, buf) => {
+ if (!Number.isSafeInteger(num)) {
+ // The number is so large that javascript cannot represent it with integer
+ // precision.
+ throw Error('cannot encode number outside of javascript safe integer range');
+ }
+ else if (num < 0) {
+ encodeNegative(num, buf);
+ }
+ else {
+ encodePositive(num, buf);
+ }
+ return buf;
+};
+const encodePositive = (num, buf) => {
+ buf[0] = 0x80;
+ for (var i = buf.length; i > 1; i--) {
+ buf[i - 1] = num & 0xff;
+ num = Math.floor(num / 0x100);
+ }
+};
+const encodeNegative = (num, buf) => {
+ buf[0] = 0xff;
+ var flipped = false;
+ num = num * -1;
+ for (var i = buf.length; i > 1; i--) {
+ var byte = num & 0xff;
+ num = Math.floor(num / 0x100);
+ if (flipped) {
+ buf[i - 1] = onesComp(byte);
+ }
+ else if (byte === 0) {
+ buf[i - 1] = 0;
+ }
+ else {
+ flipped = true;
+ buf[i - 1] = twosComp(byte);
+ }
+ }
+};
+export const parse = (buf) => {
+ const pre = buf[0];
+ const value = pre === 0x80 ? pos(buf.subarray(1, buf.length))
+ : pre === 0xff ? twos(buf)
+ : null;
+ if (value === null) {
+ throw Error('invalid base256 encoding');
+ }
+ if (!Number.isSafeInteger(value)) {
+ // The number is so large that javascript cannot represent it with integer
+ // precision.
+ throw Error('parsed number outside of javascript safe integer range');
+ }
+ return value;
+};
+const twos = (buf) => {
+ var len = buf.length;
+ var sum = 0;
+ var flipped = false;
+ for (var i = len - 1; i > -1; i--) {
+ var byte = Number(buf[i]);
+ var f;
+ if (flipped) {
+ f = onesComp(byte);
+ }
+ else if (byte === 0) {
+ f = byte;
+ }
+ else {
+ flipped = true;
+ f = twosComp(byte);
+ }
+ if (f !== 0) {
+ sum -= f * Math.pow(256, len - i - 1);
+ }
+ }
+ return sum;
+};
+const pos = (buf) => {
+ var len = buf.length;
+ var sum = 0;
+ for (var i = len - 1; i > -1; i--) {
+ var byte = Number(buf[i]);
+ if (byte !== 0) {
+ sum += byte * Math.pow(256, len - i - 1);
+ }
+ }
+ return sum;
+};
+const onesComp = (byte) => (0xff ^ byte) & 0xff;
+const twosComp = (byte) => ((0xff ^ byte) + 1) & 0xff;
+//# sourceMappingURL=large-numbers.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/list.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/list.js
new file mode 100644
index 00000000000..f49068400b6
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/list.js
@@ -0,0 +1,106 @@
+// tar -t
+import * as fsm from '@isaacs/fs-minipass';
+import fs from 'node:fs';
+import { dirname, parse } from 'path';
+import { makeCommand } from './make-command.js';
+import { Parser } from './parse.js';
+import { stripTrailingSlashes } from './strip-trailing-slashes.js';
+const onReadEntryFunction = (opt) => {
+ const onReadEntry = opt.onReadEntry;
+ opt.onReadEntry =
+ onReadEntry ?
+ e => {
+ onReadEntry(e);
+ e.resume();
+ }
+ : e => e.resume();
+};
+// construct a filter that limits the file entries listed
+// include child entries if a dir is included
+export const filesFilter = (opt, files) => {
+ const map = new Map(files.map(f => [stripTrailingSlashes(f), true]));
+ const filter = opt.filter;
+ const mapHas = (file, r = '') => {
+ const root = r || parse(file).root || '.';
+ let ret;
+ if (file === root)
+ ret = false;
+ else {
+ const m = map.get(file);
+ if (m !== undefined) {
+ ret = m;
+ }
+ else {
+ ret = mapHas(dirname(file), root);
+ }
+ }
+ map.set(file, ret);
+ return ret;
+ };
+ opt.filter =
+ filter ?
+ (file, entry) => filter(file, entry) && mapHas(stripTrailingSlashes(file))
+ : file => mapHas(stripTrailingSlashes(file));
+};
+const listFileSync = (opt) => {
+ const p = new Parser(opt);
+ const file = opt.file;
+ let fd;
+ try {
+ const stat = fs.statSync(file);
+ const readSize = opt.maxReadSize || 16 * 1024 * 1024;
+ if (stat.size < readSize) {
+ p.end(fs.readFileSync(file));
+ }
+ else {
+ let pos = 0;
+ const buf = Buffer.allocUnsafe(readSize);
+ fd = fs.openSync(file, 'r');
+ while (pos < stat.size) {
+ const bytesRead = fs.readSync(fd, buf, 0, readSize, pos);
+ pos += bytesRead;
+ p.write(buf.subarray(0, bytesRead));
+ }
+ p.end();
+ }
+ }
+ finally {
+ if (typeof fd === 'number') {
+ try {
+ fs.closeSync(fd);
+ /* c8 ignore next */
+ }
+ catch (er) { }
+ }
+ }
+};
+const listFile = (opt, _files) => {
+ const parse = new Parser(opt);
+ const readSize = opt.maxReadSize || 16 * 1024 * 1024;
+ const file = opt.file;
+ const p = new Promise((resolve, reject) => {
+ parse.on('error', reject);
+ parse.on('end', resolve);
+ fs.stat(file, (er, stat) => {
+ if (er) {
+ reject(er);
+ }
+ else {
+ const stream = new fsm.ReadStream(file, {
+ readSize: readSize,
+ size: stat.size,
+ });
+ stream.on('error', reject);
+ stream.pipe(parse);
+ }
+ });
+ });
+ return p;
+};
+export const list = makeCommand(listFileSync, listFile, opt => new Parser(opt), opt => new Parser(opt), (opt, files) => {
+ if (files?.length)
+ filesFilter(opt, files);
+ if (!opt.noResume)
+ onReadEntryFunction(opt);
+});
+//# sourceMappingURL=list.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/make-command.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/make-command.js
new file mode 100644
index 00000000000..f2f737bca78
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/make-command.js
@@ -0,0 +1,57 @@
+import { dealias, isAsyncFile, isAsyncNoFile, isSyncFile, isSyncNoFile, } from './options.js';
+export const makeCommand = (syncFile, asyncFile, syncNoFile, asyncNoFile, validate) => {
+ return Object.assign((opt_ = [], entries, cb) => {
+ if (Array.isArray(opt_)) {
+ entries = opt_;
+ opt_ = {};
+ }
+ if (typeof entries === 'function') {
+ cb = entries;
+ entries = undefined;
+ }
+ if (!entries) {
+ entries = [];
+ }
+ else {
+ entries = Array.from(entries);
+ }
+ const opt = dealias(opt_);
+ validate?.(opt, entries);
+ if (isSyncFile(opt)) {
+ if (typeof cb === 'function') {
+ throw new TypeError('callback not supported for sync tar functions');
+ }
+ return syncFile(opt, entries);
+ }
+ else if (isAsyncFile(opt)) {
+ const p = asyncFile(opt, entries);
+ // weirdness to make TS happy
+ const c = cb ? cb : undefined;
+ return c ? p.then(() => c(), c) : p;
+ }
+ else if (isSyncNoFile(opt)) {
+ if (typeof cb === 'function') {
+ throw new TypeError('callback not supported for sync tar functions');
+ }
+ return syncNoFile(opt, entries);
+ }
+ else if (isAsyncNoFile(opt)) {
+ if (typeof cb === 'function') {
+ throw new TypeError('callback only supported with file option');
+ }
+ return asyncNoFile(opt, entries);
+ /* c8 ignore start */
+ }
+ else {
+ throw new Error('impossible options??');
+ }
+ /* c8 ignore stop */
+ }, {
+ syncFile,
+ asyncFile,
+ syncNoFile,
+ asyncNoFile,
+ validate,
+ });
+};
+//# sourceMappingURL=make-command.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/mkdir.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/mkdir.js
new file mode 100644
index 00000000000..13498ef0082
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/mkdir.js
@@ -0,0 +1,201 @@
+import { chownr, chownrSync } from 'chownr';
+import fs from 'fs';
+import { mkdirp, mkdirpSync } from 'mkdirp';
+import path from 'node:path';
+import { CwdError } from './cwd-error.js';
+import { normalizeWindowsPath } from './normalize-windows-path.js';
+import { SymlinkError } from './symlink-error.js';
+const cGet = (cache, key) => cache.get(normalizeWindowsPath(key));
+const cSet = (cache, key, val) => cache.set(normalizeWindowsPath(key), val);
+const checkCwd = (dir, cb) => {
+ fs.stat(dir, (er, st) => {
+ if (er || !st.isDirectory()) {
+ er = new CwdError(dir, er?.code || 'ENOTDIR');
+ }
+ cb(er);
+ });
+};
+/**
+ * Wrapper around mkdirp for tar's needs.
+ *
+ * The main purpose is to avoid creating directories if we know that
+ * they already exist (and track which ones exist for this purpose),
+ * and prevent entries from being extracted into symlinked folders,
+ * if `preservePaths` is not set.
+ */
+export const mkdir = (dir, opt, cb) => {
+ dir = normalizeWindowsPath(dir);
+ // if there's any overlap between mask and mode,
+ // then we'll need an explicit chmod
+ /* c8 ignore next */
+ const umask = opt.umask ?? 0o22;
+ const mode = opt.mode | 0o0700;
+ const needChmod = (mode & umask) !== 0;
+ const uid = opt.uid;
+ const gid = opt.gid;
+ const doChown = typeof uid === 'number' &&
+ typeof gid === 'number' &&
+ (uid !== opt.processUid || gid !== opt.processGid);
+ const preserve = opt.preserve;
+ const unlink = opt.unlink;
+ const cache = opt.cache;
+ const cwd = normalizeWindowsPath(opt.cwd);
+ const done = (er, created) => {
+ if (er) {
+ cb(er);
+ }
+ else {
+ cSet(cache, dir, true);
+ if (created && doChown) {
+ chownr(created, uid, gid, er => done(er));
+ }
+ else if (needChmod) {
+ fs.chmod(dir, mode, cb);
+ }
+ else {
+ cb();
+ }
+ }
+ };
+ if (cache && cGet(cache, dir) === true) {
+ return done();
+ }
+ if (dir === cwd) {
+ return checkCwd(dir, done);
+ }
+ if (preserve) {
+ return mkdirp(dir, { mode }).then(made => done(null, made ?? undefined), // oh, ts
+ done);
+ }
+ const sub = normalizeWindowsPath(path.relative(cwd, dir));
+ const parts = sub.split('/');
+ mkdir_(cwd, parts, mode, cache, unlink, cwd, undefined, done);
+};
+const mkdir_ = (base, parts, mode, cache, unlink, cwd, created, cb) => {
+ if (!parts.length) {
+ return cb(null, created);
+ }
+ const p = parts.shift();
+ const part = normalizeWindowsPath(path.resolve(base + '/' + p));
+ if (cGet(cache, part)) {
+ return mkdir_(part, parts, mode, cache, unlink, cwd, created, cb);
+ }
+ fs.mkdir(part, mode, onmkdir(part, parts, mode, cache, unlink, cwd, created, cb));
+};
+const onmkdir = (part, parts, mode, cache, unlink, cwd, created, cb) => (er) => {
+ if (er) {
+ fs.lstat(part, (statEr, st) => {
+ if (statEr) {
+ statEr.path =
+ statEr.path && normalizeWindowsPath(statEr.path);
+ cb(statEr);
+ }
+ else if (st.isDirectory()) {
+ mkdir_(part, parts, mode, cache, unlink, cwd, created, cb);
+ }
+ else if (unlink) {
+ fs.unlink(part, er => {
+ if (er) {
+ return cb(er);
+ }
+ fs.mkdir(part, mode, onmkdir(part, parts, mode, cache, unlink, cwd, created, cb));
+ });
+ }
+ else if (st.isSymbolicLink()) {
+ return cb(new SymlinkError(part, part + '/' + parts.join('/')));
+ }
+ else {
+ cb(er);
+ }
+ });
+ }
+ else {
+ created = created || part;
+ mkdir_(part, parts, mode, cache, unlink, cwd, created, cb);
+ }
+};
+const checkCwdSync = (dir) => {
+ let ok = false;
+ let code = undefined;
+ try {
+ ok = fs.statSync(dir).isDirectory();
+ }
+ catch (er) {
+ code = er?.code;
+ }
+ finally {
+ if (!ok) {
+ throw new CwdError(dir, code ?? 'ENOTDIR');
+ }
+ }
+};
+export const mkdirSync = (dir, opt) => {
+ dir = normalizeWindowsPath(dir);
+ // if there's any overlap between mask and mode,
+ // then we'll need an explicit chmod
+ /* c8 ignore next */
+ const umask = opt.umask ?? 0o22;
+ const mode = opt.mode | 0o700;
+ const needChmod = (mode & umask) !== 0;
+ const uid = opt.uid;
+ const gid = opt.gid;
+ const doChown = typeof uid === 'number' &&
+ typeof gid === 'number' &&
+ (uid !== opt.processUid || gid !== opt.processGid);
+ const preserve = opt.preserve;
+ const unlink = opt.unlink;
+ const cache = opt.cache;
+ const cwd = normalizeWindowsPath(opt.cwd);
+ const done = (created) => {
+ cSet(cache, dir, true);
+ if (created && doChown) {
+ chownrSync(created, uid, gid);
+ }
+ if (needChmod) {
+ fs.chmodSync(dir, mode);
+ }
+ };
+ if (cache && cGet(cache, dir) === true) {
+ return done();
+ }
+ if (dir === cwd) {
+ checkCwdSync(cwd);
+ return done();
+ }
+ if (preserve) {
+ return done(mkdirpSync(dir, mode) ?? undefined);
+ }
+ const sub = normalizeWindowsPath(path.relative(cwd, dir));
+ const parts = sub.split('/');
+ let created = undefined;
+ for (let p = parts.shift(), part = cwd; p && (part += '/' + p); p = parts.shift()) {
+ part = normalizeWindowsPath(path.resolve(part));
+ if (cGet(cache, part)) {
+ continue;
+ }
+ try {
+ fs.mkdirSync(part, mode);
+ created = created || part;
+ cSet(cache, part, true);
+ }
+ catch (er) {
+ const st = fs.lstatSync(part);
+ if (st.isDirectory()) {
+ cSet(cache, part, true);
+ continue;
+ }
+ else if (unlink) {
+ fs.unlinkSync(part);
+ fs.mkdirSync(part, mode);
+ created = created || part;
+ cSet(cache, part, true);
+ continue;
+ }
+ else if (st.isSymbolicLink()) {
+ return new SymlinkError(part, part + '/' + parts.join('/'));
+ }
+ }
+ }
+ return done(created);
+};
+//# sourceMappingURL=mkdir.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/mode-fix.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/mode-fix.js
new file mode 100644
index 00000000000..5fd3bb88c1c
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/mode-fix.js
@@ -0,0 +1,25 @@
+export const modeFix = (mode, isDir, portable) => {
+ mode &= 0o7777;
+ // in portable mode, use the minimum reasonable umask
+ // if this system creates files with 0o664 by default
+ // (as some linux distros do), then we'll write the
+ // archive with 0o644 instead. Also, don't ever create
+ // a file that is not readable/writable by the owner.
+ if (portable) {
+ mode = (mode | 0o600) & ~0o22;
+ }
+ // if dirs are readable, then they should be listable
+ if (isDir) {
+ if (mode & 0o400) {
+ mode |= 0o100;
+ }
+ if (mode & 0o40) {
+ mode |= 0o10;
+ }
+ if (mode & 0o4) {
+ mode |= 0o1;
+ }
+ }
+ return mode;
+};
+//# sourceMappingURL=mode-fix.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/normalize-unicode.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/normalize-unicode.js
new file mode 100644
index 00000000000..94e5095476d
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/normalize-unicode.js
@@ -0,0 +1,13 @@
+// warning: extremely hot code path.
+// This has been meticulously optimized for use
+// within npm install on large package trees.
+// Do not edit without careful benchmarking.
+const normalizeCache = Object.create(null);
+const { hasOwnProperty } = Object.prototype;
+export const normalizeUnicode = (s) => {
+ if (!hasOwnProperty.call(normalizeCache, s)) {
+ normalizeCache[s] = s.normalize('NFD');
+ }
+ return normalizeCache[s];
+};
+//# sourceMappingURL=normalize-unicode.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/normalize-windows-path.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/normalize-windows-path.js
new file mode 100644
index 00000000000..2d97d2b884e
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/normalize-windows-path.js
@@ -0,0 +1,9 @@
+// on windows, either \ or / are valid directory separators.
+// on unix, \ is a valid character in filenames.
+// so, on windows, and only on windows, we replace all \ chars with /,
+// so that we can use / as our one and only directory separator char.
+const platform = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform;
+export const normalizeWindowsPath = platform !== 'win32' ?
+ (p) => p
+ : (p) => p && p.replace(/\\/g, '/');
+//# sourceMappingURL=normalize-windows-path.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/options.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/options.js
new file mode 100644
index 00000000000..a006d36c23c
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/options.js
@@ -0,0 +1,54 @@
+// turn tar(1) style args like `C` into the more verbose things like `cwd`
+const argmap = new Map([
+ ['C', 'cwd'],
+ ['f', 'file'],
+ ['z', 'gzip'],
+ ['P', 'preservePaths'],
+ ['U', 'unlink'],
+ ['strip-components', 'strip'],
+ ['stripComponents', 'strip'],
+ ['keep-newer', 'newer'],
+ ['keepNewer', 'newer'],
+ ['keep-newer-files', 'newer'],
+ ['keepNewerFiles', 'newer'],
+ ['k', 'keep'],
+ ['keep-existing', 'keep'],
+ ['keepExisting', 'keep'],
+ ['m', 'noMtime'],
+ ['no-mtime', 'noMtime'],
+ ['p', 'preserveOwner'],
+ ['L', 'follow'],
+ ['h', 'follow'],
+ ['onentry', 'onReadEntry'],
+]);
+export const isSyncFile = (o) => !!o.sync && !!o.file;
+export const isAsyncFile = (o) => !o.sync && !!o.file;
+export const isSyncNoFile = (o) => !!o.sync && !o.file;
+export const isAsyncNoFile = (o) => !o.sync && !o.file;
+export const isSync = (o) => !!o.sync;
+export const isAsync = (o) => !o.sync;
+export const isFile = (o) => !!o.file;
+export const isNoFile = (o) => !o.file;
+const dealiasKey = (k) => {
+ const d = argmap.get(k);
+ if (d)
+ return d;
+ return k;
+};
+export const dealias = (opt = {}) => {
+ if (!opt)
+ return {};
+ const result = {};
+ for (const [key, v] of Object.entries(opt)) {
+ // TS doesn't know that aliases are going to always be the same type
+ const k = dealiasKey(key);
+ result[k] = v;
+ }
+ // affordance for deprecated noChmod -> chmod
+ if (result.chmod === undefined && result.noChmod === false) {
+ result.chmod = true;
+ }
+ delete result.noChmod;
+ return result;
+};
+//# sourceMappingURL=options.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/pack.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/pack.js
new file mode 100644
index 00000000000..f59f32f9420
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/pack.js
@@ -0,0 +1,445 @@
+// A readable tar stream creator
+// Technically, this is a transform stream that you write paths into,
+// and tar format comes out of.
+// The `add()` method is like `write()` but returns this,
+// and end() return `this` as well, so you can
+// do `new Pack(opt).add('files').add('dir').end().pipe(output)
+// You could also do something like:
+// streamOfPaths().pipe(new Pack()).pipe(new fs.WriteStream('out.tar'))
+import fs from 'fs';
+import { WriteEntry, WriteEntrySync, WriteEntryTar, } from './write-entry.js';
+export class PackJob {
+ path;
+ absolute;
+ entry;
+ stat;
+ readdir;
+ pending = false;
+ ignore = false;
+ piped = false;
+ constructor(path, absolute) {
+ this.path = path || './';
+ this.absolute = absolute;
+ }
+}
+import { Minipass } from 'minipass';
+import * as zlib from 'minizlib';
+import { Yallist } from 'yallist';
+import { ReadEntry } from './read-entry.js';
+import { warnMethod, } from './warn-method.js';
+const EOF = Buffer.alloc(1024);
+const ONSTAT = Symbol('onStat');
+const ENDED = Symbol('ended');
+const QUEUE = Symbol('queue');
+const CURRENT = Symbol('current');
+const PROCESS = Symbol('process');
+const PROCESSING = Symbol('processing');
+const PROCESSJOB = Symbol('processJob');
+const JOBS = Symbol('jobs');
+const JOBDONE = Symbol('jobDone');
+const ADDFSENTRY = Symbol('addFSEntry');
+const ADDTARENTRY = Symbol('addTarEntry');
+const STAT = Symbol('stat');
+const READDIR = Symbol('readdir');
+const ONREADDIR = Symbol('onreaddir');
+const PIPE = Symbol('pipe');
+const ENTRY = Symbol('entry');
+const ENTRYOPT = Symbol('entryOpt');
+const WRITEENTRYCLASS = Symbol('writeEntryClass');
+const WRITE = Symbol('write');
+const ONDRAIN = Symbol('ondrain');
+import path from 'path';
+import { normalizeWindowsPath } from './normalize-windows-path.js';
+export class Pack extends Minipass {
+ opt;
+ cwd;
+ maxReadSize;
+ preservePaths;
+ strict;
+ noPax;
+ prefix;
+ linkCache;
+ statCache;
+ file;
+ portable;
+ zip;
+ readdirCache;
+ noDirRecurse;
+ follow;
+ noMtime;
+ mtime;
+ filter;
+ jobs;
+ [WRITEENTRYCLASS];
+ onWriteEntry;
+ [QUEUE];
+ [JOBS] = 0;
+ [PROCESSING] = false;
+ [ENDED] = false;
+ constructor(opt = {}) {
+ //@ts-ignore
+ super();
+ this.opt = opt;
+ this.file = opt.file || '';
+ this.cwd = opt.cwd || process.cwd();
+ this.maxReadSize = opt.maxReadSize;
+ this.preservePaths = !!opt.preservePaths;
+ this.strict = !!opt.strict;
+ this.noPax = !!opt.noPax;
+ this.prefix = normalizeWindowsPath(opt.prefix || '');
+ this.linkCache = opt.linkCache || new Map();
+ this.statCache = opt.statCache || new Map();
+ this.readdirCache = opt.readdirCache || new Map();
+ this.onWriteEntry = opt.onWriteEntry;
+ this[WRITEENTRYCLASS] = WriteEntry;
+ if (typeof opt.onwarn === 'function') {
+ this.on('warn', opt.onwarn);
+ }
+ this.portable = !!opt.portable;
+ if (opt.gzip || opt.brotli) {
+ if (opt.gzip && opt.brotli) {
+ throw new TypeError('gzip and brotli are mutually exclusive');
+ }
+ if (opt.gzip) {
+ if (typeof opt.gzip !== 'object') {
+ opt.gzip = {};
+ }
+ if (this.portable) {
+ opt.gzip.portable = true;
+ }
+ this.zip = new zlib.Gzip(opt.gzip);
+ }
+ if (opt.brotli) {
+ if (typeof opt.brotli !== 'object') {
+ opt.brotli = {};
+ }
+ this.zip = new zlib.BrotliCompress(opt.brotli);
+ }
+ /* c8 ignore next */
+ if (!this.zip)
+ throw new Error('impossible');
+ const zip = this.zip;
+ zip.on('data', chunk => super.write(chunk));
+ zip.on('end', () => super.end());
+ zip.on('drain', () => this[ONDRAIN]());
+ this.on('resume', () => zip.resume());
+ }
+ else {
+ this.on('drain', this[ONDRAIN]);
+ }
+ this.noDirRecurse = !!opt.noDirRecurse;
+ this.follow = !!opt.follow;
+ this.noMtime = !!opt.noMtime;
+ if (opt.mtime)
+ this.mtime = opt.mtime;
+ this.filter =
+ typeof opt.filter === 'function' ? opt.filter : () => true;
+ this[QUEUE] = new Yallist();
+ this[JOBS] = 0;
+ this.jobs = Number(opt.jobs) || 4;
+ this[PROCESSING] = false;
+ this[ENDED] = false;
+ }
+ [WRITE](chunk) {
+ return super.write(chunk);
+ }
+ add(path) {
+ this.write(path);
+ return this;
+ }
+ end(path, encoding, cb) {
+ /* c8 ignore start */
+ if (typeof path === 'function') {
+ cb = path;
+ path = undefined;
+ }
+ if (typeof encoding === 'function') {
+ cb = encoding;
+ encoding = undefined;
+ }
+ /* c8 ignore stop */
+ if (path) {
+ this.add(path);
+ }
+ this[ENDED] = true;
+ this[PROCESS]();
+ /* c8 ignore next */
+ if (cb)
+ cb();
+ return this;
+ }
+ write(path) {
+ if (this[ENDED]) {
+ throw new Error('write after end');
+ }
+ if (path instanceof ReadEntry) {
+ this[ADDTARENTRY](path);
+ }
+ else {
+ this[ADDFSENTRY](path);
+ }
+ return this.flowing;
+ }
+ [ADDTARENTRY](p) {
+ const absolute = normalizeWindowsPath(path.resolve(this.cwd, p.path));
+ // in this case, we don't have to wait for the stat
+ if (!this.filter(p.path, p)) {
+ p.resume();
+ }
+ else {
+ const job = new PackJob(p.path, absolute);
+ job.entry = new WriteEntryTar(p, this[ENTRYOPT](job));
+ job.entry.on('end', () => this[JOBDONE](job));
+ this[JOBS] += 1;
+ this[QUEUE].push(job);
+ }
+ this[PROCESS]();
+ }
+ [ADDFSENTRY](p) {
+ const absolute = normalizeWindowsPath(path.resolve(this.cwd, p));
+ this[QUEUE].push(new PackJob(p, absolute));
+ this[PROCESS]();
+ }
+ [STAT](job) {
+ job.pending = true;
+ this[JOBS] += 1;
+ const stat = this.follow ? 'stat' : 'lstat';
+ fs[stat](job.absolute, (er, stat) => {
+ job.pending = false;
+ this[JOBS] -= 1;
+ if (er) {
+ this.emit('error', er);
+ }
+ else {
+ this[ONSTAT](job, stat);
+ }
+ });
+ }
+ [ONSTAT](job, stat) {
+ this.statCache.set(job.absolute, stat);
+ job.stat = stat;
+ // now we have the stat, we can filter it.
+ if (!this.filter(job.path, stat)) {
+ job.ignore = true;
+ }
+ this[PROCESS]();
+ }
+ [READDIR](job) {
+ job.pending = true;
+ this[JOBS] += 1;
+ fs.readdir(job.absolute, (er, entries) => {
+ job.pending = false;
+ this[JOBS] -= 1;
+ if (er) {
+ return this.emit('error', er);
+ }
+ this[ONREADDIR](job, entries);
+ });
+ }
+ [ONREADDIR](job, entries) {
+ this.readdirCache.set(job.absolute, entries);
+ job.readdir = entries;
+ this[PROCESS]();
+ }
+ [PROCESS]() {
+ if (this[PROCESSING]) {
+ return;
+ }
+ this[PROCESSING] = true;
+ for (let w = this[QUEUE].head; !!w && this[JOBS] < this.jobs; w = w.next) {
+ this[PROCESSJOB](w.value);
+ if (w.value.ignore) {
+ const p = w.next;
+ this[QUEUE].removeNode(w);
+ w.next = p;
+ }
+ }
+ this[PROCESSING] = false;
+ if (this[ENDED] && !this[QUEUE].length && this[JOBS] === 0) {
+ if (this.zip) {
+ this.zip.end(EOF);
+ }
+ else {
+ super.write(EOF);
+ super.end();
+ }
+ }
+ }
+ get [CURRENT]() {
+ return this[QUEUE] && this[QUEUE].head && this[QUEUE].head.value;
+ }
+ [JOBDONE](_job) {
+ this[QUEUE].shift();
+ this[JOBS] -= 1;
+ this[PROCESS]();
+ }
+ [PROCESSJOB](job) {
+ if (job.pending) {
+ return;
+ }
+ if (job.entry) {
+ if (job === this[CURRENT] && !job.piped) {
+ this[PIPE](job);
+ }
+ return;
+ }
+ if (!job.stat) {
+ const sc = this.statCache.get(job.absolute);
+ if (sc) {
+ this[ONSTAT](job, sc);
+ }
+ else {
+ this[STAT](job);
+ }
+ }
+ if (!job.stat) {
+ return;
+ }
+ // filtered out!
+ if (job.ignore) {
+ return;
+ }
+ if (!this.noDirRecurse &&
+ job.stat.isDirectory() &&
+ !job.readdir) {
+ const rc = this.readdirCache.get(job.absolute);
+ if (rc) {
+ this[ONREADDIR](job, rc);
+ }
+ else {
+ this[READDIR](job);
+ }
+ if (!job.readdir) {
+ return;
+ }
+ }
+ // we know it doesn't have an entry, because that got checked above
+ job.entry = this[ENTRY](job);
+ if (!job.entry) {
+ job.ignore = true;
+ return;
+ }
+ if (job === this[CURRENT] && !job.piped) {
+ this[PIPE](job);
+ }
+ }
+ [ENTRYOPT](job) {
+ return {
+ onwarn: (code, msg, data) => this.warn(code, msg, data),
+ noPax: this.noPax,
+ cwd: this.cwd,
+ absolute: job.absolute,
+ preservePaths: this.preservePaths,
+ maxReadSize: this.maxReadSize,
+ strict: this.strict,
+ portable: this.portable,
+ linkCache: this.linkCache,
+ statCache: this.statCache,
+ noMtime: this.noMtime,
+ mtime: this.mtime,
+ prefix: this.prefix,
+ onWriteEntry: this.onWriteEntry,
+ };
+ }
+ [ENTRY](job) {
+ this[JOBS] += 1;
+ try {
+ const e = new this[WRITEENTRYCLASS](job.path, this[ENTRYOPT](job));
+ return e
+ .on('end', () => this[JOBDONE](job))
+ .on('error', er => this.emit('error', er));
+ }
+ catch (er) {
+ this.emit('error', er);
+ }
+ }
+ [ONDRAIN]() {
+ if (this[CURRENT] && this[CURRENT].entry) {
+ this[CURRENT].entry.resume();
+ }
+ }
+ // like .pipe() but using super, because our write() is special
+ [PIPE](job) {
+ job.piped = true;
+ if (job.readdir) {
+ job.readdir.forEach(entry => {
+ const p = job.path;
+ const base = p === './' ? '' : p.replace(/\/*$/, '/');
+ this[ADDFSENTRY](base + entry);
+ });
+ }
+ const source = job.entry;
+ const zip = this.zip;
+ /* c8 ignore start */
+ if (!source)
+ throw new Error('cannot pipe without source');
+ /* c8 ignore stop */
+ if (zip) {
+ source.on('data', chunk => {
+ if (!zip.write(chunk)) {
+ source.pause();
+ }
+ });
+ }
+ else {
+ source.on('data', chunk => {
+ if (!super.write(chunk)) {
+ source.pause();
+ }
+ });
+ }
+ }
+ pause() {
+ if (this.zip) {
+ this.zip.pause();
+ }
+ return super.pause();
+ }
+ warn(code, message, data = {}) {
+ warnMethod(this, code, message, data);
+ }
+}
+export class PackSync extends Pack {
+ sync = true;
+ constructor(opt) {
+ super(opt);
+ this[WRITEENTRYCLASS] = WriteEntrySync;
+ }
+ // pause/resume are no-ops in sync streams.
+ pause() { }
+ resume() { }
+ [STAT](job) {
+ const stat = this.follow ? 'statSync' : 'lstatSync';
+ this[ONSTAT](job, fs[stat](job.absolute));
+ }
+ [READDIR](job) {
+ this[ONREADDIR](job, fs.readdirSync(job.absolute));
+ }
+ // gotta get it all in this tick
+ [PIPE](job) {
+ const source = job.entry;
+ const zip = this.zip;
+ if (job.readdir) {
+ job.readdir.forEach(entry => {
+ const p = job.path;
+ const base = p === './' ? '' : p.replace(/\/*$/, '/');
+ this[ADDFSENTRY](base + entry);
+ });
+ }
+ /* c8 ignore start */
+ if (!source)
+ throw new Error('Cannot pipe without source');
+ /* c8 ignore stop */
+ if (zip) {
+ source.on('data', chunk => {
+ zip.write(chunk);
+ });
+ }
+ else {
+ source.on('data', chunk => {
+ super[WRITE](chunk);
+ });
+ }
+ }
+}
+//# sourceMappingURL=pack.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/package.json b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/package.json
new file mode 100644
index 00000000000..3dbc1ca591c
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "module"
+}
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/parse.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/parse.js
new file mode 100644
index 00000000000..f2c802e6eef
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/parse.js
@@ -0,0 +1,595 @@
+// this[BUFFER] is the remainder of a chunk if we're waiting for
+// the full 512 bytes of a header to come in. We will Buffer.concat()
+// it to the next write(), which is a mem copy, but a small one.
+//
+// this[QUEUE] is a Yallist of entries that haven't been emitted
+// yet this can only get filled up if the user keeps write()ing after
+// a write() returns false, or does a write() with more than one entry
+//
+// We don't buffer chunks, we always parse them and either create an
+// entry, or push it into the active entry. The ReadEntry class knows
+// to throw data away if .ignore=true
+//
+// Shift entry off the buffer when it emits 'end', and emit 'entry' for
+// the next one in the list.
+//
+// At any time, we're pushing body chunks into the entry at WRITEENTRY,
+// and waiting for 'end' on the entry at READENTRY
+//
+// ignored entries get .resume() called on them straight away
+import { EventEmitter as EE } from 'events';
+import { BrotliDecompress, Unzip } from 'minizlib';
+import { Yallist } from 'yallist';
+import { Header } from './header.js';
+import { Pax } from './pax.js';
+import { ReadEntry } from './read-entry.js';
+import { warnMethod, } from './warn-method.js';
+const maxMetaEntrySize = 1024 * 1024;
+const gzipHeader = Buffer.from([0x1f, 0x8b]);
+const STATE = Symbol('state');
+const WRITEENTRY = Symbol('writeEntry');
+const READENTRY = Symbol('readEntry');
+const NEXTENTRY = Symbol('nextEntry');
+const PROCESSENTRY = Symbol('processEntry');
+const EX = Symbol('extendedHeader');
+const GEX = Symbol('globalExtendedHeader');
+const META = Symbol('meta');
+const EMITMETA = Symbol('emitMeta');
+const BUFFER = Symbol('buffer');
+const QUEUE = Symbol('queue');
+const ENDED = Symbol('ended');
+const EMITTEDEND = Symbol('emittedEnd');
+const EMIT = Symbol('emit');
+const UNZIP = Symbol('unzip');
+const CONSUMECHUNK = Symbol('consumeChunk');
+const CONSUMECHUNKSUB = Symbol('consumeChunkSub');
+const CONSUMEBODY = Symbol('consumeBody');
+const CONSUMEMETA = Symbol('consumeMeta');
+const CONSUMEHEADER = Symbol('consumeHeader');
+const CONSUMING = Symbol('consuming');
+const BUFFERCONCAT = Symbol('bufferConcat');
+const MAYBEEND = Symbol('maybeEnd');
+const WRITING = Symbol('writing');
+const ABORTED = Symbol('aborted');
+const DONE = Symbol('onDone');
+const SAW_VALID_ENTRY = Symbol('sawValidEntry');
+const SAW_NULL_BLOCK = Symbol('sawNullBlock');
+const SAW_EOF = Symbol('sawEOF');
+const CLOSESTREAM = Symbol('closeStream');
+const noop = () => true;
+export class Parser extends EE {
+ file;
+ strict;
+ maxMetaEntrySize;
+ filter;
+ brotli;
+ writable = true;
+ readable = false;
+ [QUEUE] = new Yallist();
+ [BUFFER];
+ [READENTRY];
+ [WRITEENTRY];
+ [STATE] = 'begin';
+ [META] = '';
+ [EX];
+ [GEX];
+ [ENDED] = false;
+ [UNZIP];
+ [ABORTED] = false;
+ [SAW_VALID_ENTRY];
+ [SAW_NULL_BLOCK] = false;
+ [SAW_EOF] = false;
+ [WRITING] = false;
+ [CONSUMING] = false;
+ [EMITTEDEND] = false;
+ constructor(opt = {}) {
+ super();
+ this.file = opt.file || '';
+ // these BADARCHIVE errors can't be detected early. listen on DONE.
+ this.on(DONE, () => {
+ if (this[STATE] === 'begin' ||
+ this[SAW_VALID_ENTRY] === false) {
+ // either less than 1 block of data, or all entries were invalid.
+ // Either way, probably not even a tarball.
+ this.warn('TAR_BAD_ARCHIVE', 'Unrecognized archive format');
+ }
+ });
+ if (opt.ondone) {
+ this.on(DONE, opt.ondone);
+ }
+ else {
+ this.on(DONE, () => {
+ this.emit('prefinish');
+ this.emit('finish');
+ this.emit('end');
+ });
+ }
+ this.strict = !!opt.strict;
+ this.maxMetaEntrySize = opt.maxMetaEntrySize || maxMetaEntrySize;
+ this.filter = typeof opt.filter === 'function' ? opt.filter : noop;
+ // Unlike gzip, brotli doesn't have any magic bytes to identify it
+ // Users need to explicitly tell us they're extracting a brotli file
+ // Or we infer from the file extension
+ const isTBR = opt.file &&
+ (opt.file.endsWith('.tar.br') || opt.file.endsWith('.tbr'));
+ // if it's a tbr file it MIGHT be brotli, but we don't know until
+ // we look at it and verify it's not a valid tar file.
+ this.brotli =
+ !opt.gzip && opt.brotli !== undefined ? opt.brotli
+ : isTBR ? undefined
+ : false;
+ // have to set this so that streams are ok piping into it
+ this.on('end', () => this[CLOSESTREAM]());
+ if (typeof opt.onwarn === 'function') {
+ this.on('warn', opt.onwarn);
+ }
+ if (typeof opt.onReadEntry === 'function') {
+ this.on('entry', opt.onReadEntry);
+ }
+ }
+ warn(code, message, data = {}) {
+ warnMethod(this, code, message, data);
+ }
+ [CONSUMEHEADER](chunk, position) {
+ if (this[SAW_VALID_ENTRY] === undefined) {
+ this[SAW_VALID_ENTRY] = false;
+ }
+ let header;
+ try {
+ header = new Header(chunk, position, this[EX], this[GEX]);
+ }
+ catch (er) {
+ return this.warn('TAR_ENTRY_INVALID', er);
+ }
+ if (header.nullBlock) {
+ if (this[SAW_NULL_BLOCK]) {
+ this[SAW_EOF] = true;
+ // ending an archive with no entries. pointless, but legal.
+ if (this[STATE] === 'begin') {
+ this[STATE] = 'header';
+ }
+ this[EMIT]('eof');
+ }
+ else {
+ this[SAW_NULL_BLOCK] = true;
+ this[EMIT]('nullBlock');
+ }
+ }
+ else {
+ this[SAW_NULL_BLOCK] = false;
+ if (!header.cksumValid) {
+ this.warn('TAR_ENTRY_INVALID', 'checksum failure', { header });
+ }
+ else if (!header.path) {
+ this.warn('TAR_ENTRY_INVALID', 'path is required', { header });
+ }
+ else {
+ const type = header.type;
+ if (/^(Symbolic)?Link$/.test(type) && !header.linkpath) {
+ this.warn('TAR_ENTRY_INVALID', 'linkpath required', {
+ header,
+ });
+ }
+ else if (!/^(Symbolic)?Link$/.test(type) &&
+ !/^(Global)?ExtendedHeader$/.test(type) &&
+ header.linkpath) {
+ this.warn('TAR_ENTRY_INVALID', 'linkpath forbidden', {
+ header,
+ });
+ }
+ else {
+ const entry = (this[WRITEENTRY] = new ReadEntry(header, this[EX], this[GEX]));
+ // we do this for meta & ignored entries as well, because they
+ // are still valid tar, or else we wouldn't know to ignore them
+ if (!this[SAW_VALID_ENTRY]) {
+ if (entry.remain) {
+ // this might be the one!
+ const onend = () => {
+ if (!entry.invalid) {
+ this[SAW_VALID_ENTRY] = true;
+ }
+ };
+ entry.on('end', onend);
+ }
+ else {
+ this[SAW_VALID_ENTRY] = true;
+ }
+ }
+ if (entry.meta) {
+ if (entry.size > this.maxMetaEntrySize) {
+ entry.ignore = true;
+ this[EMIT]('ignoredEntry', entry);
+ this[STATE] = 'ignore';
+ entry.resume();
+ }
+ else if (entry.size > 0) {
+ this[META] = '';
+ entry.on('data', c => (this[META] += c));
+ this[STATE] = 'meta';
+ }
+ }
+ else {
+ this[EX] = undefined;
+ entry.ignore =
+ entry.ignore || !this.filter(entry.path, entry);
+ if (entry.ignore) {
+ // probably valid, just not something we care about
+ this[EMIT]('ignoredEntry', entry);
+ this[STATE] = entry.remain ? 'ignore' : 'header';
+ entry.resume();
+ }
+ else {
+ if (entry.remain) {
+ this[STATE] = 'body';
+ }
+ else {
+ this[STATE] = 'header';
+ entry.end();
+ }
+ if (!this[READENTRY]) {
+ this[QUEUE].push(entry);
+ this[NEXTENTRY]();
+ }
+ else {
+ this[QUEUE].push(entry);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ [CLOSESTREAM]() {
+ queueMicrotask(() => this.emit('close'));
+ }
+ [PROCESSENTRY](entry) {
+ let go = true;
+ if (!entry) {
+ this[READENTRY] = undefined;
+ go = false;
+ }
+ else if (Array.isArray(entry)) {
+ const [ev, ...args] = entry;
+ this.emit(ev, ...args);
+ }
+ else {
+ this[READENTRY] = entry;
+ this.emit('entry', entry);
+ if (!entry.emittedEnd) {
+ entry.on('end', () => this[NEXTENTRY]());
+ go = false;
+ }
+ }
+ return go;
+ }
+ [NEXTENTRY]() {
+ do { } while (this[PROCESSENTRY](this[QUEUE].shift()));
+ if (!this[QUEUE].length) {
+ // At this point, there's nothing in the queue, but we may have an
+ // entry which is being consumed (readEntry).
+ // If we don't, then we definitely can handle more data.
+ // If we do, and either it's flowing, or it has never had any data
+ // written to it, then it needs more.
+ // The only other possibility is that it has returned false from a
+ // write() call, so we wait for the next drain to continue.
+ const re = this[READENTRY];
+ const drainNow = !re || re.flowing || re.size === re.remain;
+ if (drainNow) {
+ if (!this[WRITING]) {
+ this.emit('drain');
+ }
+ }
+ else {
+ re.once('drain', () => this.emit('drain'));
+ }
+ }
+ }
+ [CONSUMEBODY](chunk, position) {
+ // write up to but no more than writeEntry.blockRemain
+ const entry = this[WRITEENTRY];
+ /* c8 ignore start */
+ if (!entry) {
+ throw new Error('attempt to consume body without entry??');
+ }
+ const br = entry.blockRemain ?? 0;
+ /* c8 ignore stop */
+ const c = br >= chunk.length && position === 0 ?
+ chunk
+ : chunk.subarray(position, position + br);
+ entry.write(c);
+ if (!entry.blockRemain) {
+ this[STATE] = 'header';
+ this[WRITEENTRY] = undefined;
+ entry.end();
+ }
+ return c.length;
+ }
+ [CONSUMEMETA](chunk, position) {
+ const entry = this[WRITEENTRY];
+ const ret = this[CONSUMEBODY](chunk, position);
+ // if we finished, then the entry is reset
+ if (!this[WRITEENTRY] && entry) {
+ this[EMITMETA](entry);
+ }
+ return ret;
+ }
+ [EMIT](ev, data, extra) {
+ if (!this[QUEUE].length && !this[READENTRY]) {
+ this.emit(ev, data, extra);
+ }
+ else {
+ this[QUEUE].push([ev, data, extra]);
+ }
+ }
+ [EMITMETA](entry) {
+ this[EMIT]('meta', this[META]);
+ switch (entry.type) {
+ case 'ExtendedHeader':
+ case 'OldExtendedHeader':
+ this[EX] = Pax.parse(this[META], this[EX], false);
+ break;
+ case 'GlobalExtendedHeader':
+ this[GEX] = Pax.parse(this[META], this[GEX], true);
+ break;
+ case 'NextFileHasLongPath':
+ case 'OldGnuLongPath': {
+ const ex = this[EX] ?? Object.create(null);
+ this[EX] = ex;
+ ex.path = this[META].replace(/\0.*/, '');
+ break;
+ }
+ case 'NextFileHasLongLinkpath': {
+ const ex = this[EX] || Object.create(null);
+ this[EX] = ex;
+ ex.linkpath = this[META].replace(/\0.*/, '');
+ break;
+ }
+ /* c8 ignore start */
+ default:
+ throw new Error('unknown meta: ' + entry.type);
+ /* c8 ignore stop */
+ }
+ }
+ abort(error) {
+ this[ABORTED] = true;
+ this.emit('abort', error);
+ // always throws, even in non-strict mode
+ this.warn('TAR_ABORT', error, { recoverable: false });
+ }
+ write(chunk, encoding, cb) {
+ if (typeof encoding === 'function') {
+ cb = encoding;
+ encoding = undefined;
+ }
+ if (typeof chunk === 'string') {
+ chunk = Buffer.from(chunk,
+ /* c8 ignore next */
+ typeof encoding === 'string' ? encoding : 'utf8');
+ }
+ if (this[ABORTED]) {
+ /* c8 ignore next */
+ cb?.();
+ return false;
+ }
+ // first write, might be gzipped
+ const needSniff = this[UNZIP] === undefined ||
+ (this.brotli === undefined && this[UNZIP] === false);
+ if (needSniff && chunk) {
+ if (this[BUFFER]) {
+ chunk = Buffer.concat([this[BUFFER], chunk]);
+ this[BUFFER] = undefined;
+ }
+ if (chunk.length < gzipHeader.length) {
+ this[BUFFER] = chunk;
+ /* c8 ignore next */
+ cb?.();
+ return true;
+ }
+ // look for gzip header
+ for (let i = 0; this[UNZIP] === undefined && i < gzipHeader.length; i++) {
+ if (chunk[i] !== gzipHeader[i]) {
+ this[UNZIP] = false;
+ }
+ }
+ const maybeBrotli = this.brotli === undefined;
+ if (this[UNZIP] === false && maybeBrotli) {
+ // read the first header to see if it's a valid tar file. If so,
+ // we can safely assume that it's not actually brotli, despite the
+ // .tbr or .tar.br file extension.
+ // if we ended before getting a full chunk, yes, def brotli
+ if (chunk.length < 512) {
+ if (this[ENDED]) {
+ this.brotli = true;
+ }
+ else {
+ this[BUFFER] = chunk;
+ /* c8 ignore next */
+ cb?.();
+ return true;
+ }
+ }
+ else {
+ // if it's tar, it's pretty reliably not brotli, chances of
+ // that happening are astronomical.
+ try {
+ new Header(chunk.subarray(0, 512));
+ this.brotli = false;
+ }
+ catch (_) {
+ this.brotli = true;
+ }
+ }
+ }
+ if (this[UNZIP] === undefined ||
+ (this[UNZIP] === false && this.brotli)) {
+ const ended = this[ENDED];
+ this[ENDED] = false;
+ this[UNZIP] =
+ this[UNZIP] === undefined ?
+ new Unzip({})
+ : new BrotliDecompress({});
+ this[UNZIP].on('data', chunk => this[CONSUMECHUNK](chunk));
+ this[UNZIP].on('error', er => this.abort(er));
+ this[UNZIP].on('end', () => {
+ this[ENDED] = true;
+ this[CONSUMECHUNK]();
+ });
+ this[WRITING] = true;
+ const ret = !!this[UNZIP][ended ? 'end' : 'write'](chunk);
+ this[WRITING] = false;
+ cb?.();
+ return ret;
+ }
+ }
+ this[WRITING] = true;
+ if (this[UNZIP]) {
+ this[UNZIP].write(chunk);
+ }
+ else {
+ this[CONSUMECHUNK](chunk);
+ }
+ this[WRITING] = false;
+ // return false if there's a queue, or if the current entry isn't flowing
+ const ret = this[QUEUE].length ? false
+ : this[READENTRY] ? this[READENTRY].flowing
+ : true;
+ // if we have no queue, then that means a clogged READENTRY
+ if (!ret && !this[QUEUE].length) {
+ this[READENTRY]?.once('drain', () => this.emit('drain'));
+ }
+ /* c8 ignore next */
+ cb?.();
+ return ret;
+ }
+ [BUFFERCONCAT](c) {
+ if (c && !this[ABORTED]) {
+ this[BUFFER] =
+ this[BUFFER] ? Buffer.concat([this[BUFFER], c]) : c;
+ }
+ }
+ [MAYBEEND]() {
+ if (this[ENDED] &&
+ !this[EMITTEDEND] &&
+ !this[ABORTED] &&
+ !this[CONSUMING]) {
+ this[EMITTEDEND] = true;
+ const entry = this[WRITEENTRY];
+ if (entry && entry.blockRemain) {
+ // truncated, likely a damaged file
+ const have = this[BUFFER] ? this[BUFFER].length : 0;
+ this.warn('TAR_BAD_ARCHIVE', `Truncated input (needed ${entry.blockRemain} more bytes, only ${have} available)`, { entry });
+ if (this[BUFFER]) {
+ entry.write(this[BUFFER]);
+ }
+ entry.end();
+ }
+ this[EMIT](DONE);
+ }
+ }
+ [CONSUMECHUNK](chunk) {
+ if (this[CONSUMING] && chunk) {
+ this[BUFFERCONCAT](chunk);
+ }
+ else if (!chunk && !this[BUFFER]) {
+ this[MAYBEEND]();
+ }
+ else if (chunk) {
+ this[CONSUMING] = true;
+ if (this[BUFFER]) {
+ this[BUFFERCONCAT](chunk);
+ const c = this[BUFFER];
+ this[BUFFER] = undefined;
+ this[CONSUMECHUNKSUB](c);
+ }
+ else {
+ this[CONSUMECHUNKSUB](chunk);
+ }
+ while (this[BUFFER] &&
+ this[BUFFER]?.length >= 512 &&
+ !this[ABORTED] &&
+ !this[SAW_EOF]) {
+ const c = this[BUFFER];
+ this[BUFFER] = undefined;
+ this[CONSUMECHUNKSUB](c);
+ }
+ this[CONSUMING] = false;
+ }
+ if (!this[BUFFER] || this[ENDED]) {
+ this[MAYBEEND]();
+ }
+ }
+ [CONSUMECHUNKSUB](chunk) {
+ // we know that we are in CONSUMING mode, so anything written goes into
+ // the buffer. Advance the position and put any remainder in the buffer.
+ let position = 0;
+ const length = chunk.length;
+ while (position + 512 <= length &&
+ !this[ABORTED] &&
+ !this[SAW_EOF]) {
+ switch (this[STATE]) {
+ case 'begin':
+ case 'header':
+ this[CONSUMEHEADER](chunk, position);
+ position += 512;
+ break;
+ case 'ignore':
+ case 'body':
+ position += this[CONSUMEBODY](chunk, position);
+ break;
+ case 'meta':
+ position += this[CONSUMEMETA](chunk, position);
+ break;
+ /* c8 ignore start */
+ default:
+ throw new Error('invalid state: ' + this[STATE]);
+ /* c8 ignore stop */
+ }
+ }
+ if (position < length) {
+ if (this[BUFFER]) {
+ this[BUFFER] = Buffer.concat([
+ chunk.subarray(position),
+ this[BUFFER],
+ ]);
+ }
+ else {
+ this[BUFFER] = chunk.subarray(position);
+ }
+ }
+ }
+ end(chunk, encoding, cb) {
+ if (typeof chunk === 'function') {
+ cb = chunk;
+ encoding = undefined;
+ chunk = undefined;
+ }
+ if (typeof encoding === 'function') {
+ cb = encoding;
+ encoding = undefined;
+ }
+ if (typeof chunk === 'string') {
+ chunk = Buffer.from(chunk, encoding);
+ }
+ if (cb)
+ this.once('finish', cb);
+ if (!this[ABORTED]) {
+ if (this[UNZIP]) {
+ /* c8 ignore start */
+ if (chunk)
+ this[UNZIP].write(chunk);
+ /* c8 ignore stop */
+ this[UNZIP].end();
+ }
+ else {
+ this[ENDED] = true;
+ if (this.brotli === undefined)
+ chunk = chunk || Buffer.alloc(0);
+ if (chunk)
+ this.write(chunk);
+ this[MAYBEEND]();
+ }
+ }
+ return this;
+ }
+}
+//# sourceMappingURL=parse.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/path-reservations.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/path-reservations.js
new file mode 100644
index 00000000000..e63b9c91e9a
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/path-reservations.js
@@ -0,0 +1,166 @@
+// A path exclusive reservation system
+// reserve([list, of, paths], fn)
+// When the fn is first in line for all its paths, it
+// is called with a cb that clears the reservation.
+//
+// Used by async unpack to avoid clobbering paths in use,
+// while still allowing maximal safe parallelization.
+import { join } from 'node:path';
+import { normalizeUnicode } from './normalize-unicode.js';
+import { stripTrailingSlashes } from './strip-trailing-slashes.js';
+const platform = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform;
+const isWindows = platform === 'win32';
+// return a set of parent dirs for a given path
+// '/a/b/c/d' -> ['/', '/a', '/a/b', '/a/b/c', '/a/b/c/d']
+const getDirs = (path) => {
+ const dirs = path
+ .split('/')
+ .slice(0, -1)
+ .reduce((set, path) => {
+ const s = set[set.length - 1];
+ if (s !== undefined) {
+ path = join(s, path);
+ }
+ set.push(path || '/');
+ return set;
+ }, []);
+ return dirs;
+};
+export class PathReservations {
+ // path => [function or Set]
+ // A Set object means a directory reservation
+ // A fn is a direct reservation on that path
+ #queues = new Map();
+ // fn => {paths:[path,...], dirs:[path, ...]}
+ #reservations = new Map();
+ // functions currently running
+ #running = new Set();
+ reserve(paths, fn) {
+ paths =
+ isWindows ?
+ ['win32 parallelization disabled']
+ : paths.map(p => {
+ // don't need normPath, because we skip this entirely for windows
+ return stripTrailingSlashes(join(normalizeUnicode(p))).toLowerCase();
+ });
+ const dirs = new Set(paths.map(path => getDirs(path)).reduce((a, b) => a.concat(b)));
+ this.#reservations.set(fn, { dirs, paths });
+ for (const p of paths) {
+ const q = this.#queues.get(p);
+ if (!q) {
+ this.#queues.set(p, [fn]);
+ }
+ else {
+ q.push(fn);
+ }
+ }
+ for (const dir of dirs) {
+ const q = this.#queues.get(dir);
+ if (!q) {
+ this.#queues.set(dir, [new Set([fn])]);
+ }
+ else {
+ const l = q[q.length - 1];
+ if (l instanceof Set) {
+ l.add(fn);
+ }
+ else {
+ q.push(new Set([fn]));
+ }
+ }
+ }
+ return this.#run(fn);
+ }
+ // return the queues for each path the function cares about
+ // fn => {paths, dirs}
+ #getQueues(fn) {
+ const res = this.#reservations.get(fn);
+ /* c8 ignore start */
+ if (!res) {
+ throw new Error('function does not have any path reservations');
+ }
+ /* c8 ignore stop */
+ return {
+ paths: res.paths.map((path) => this.#queues.get(path)),
+ dirs: [...res.dirs].map(path => this.#queues.get(path)),
+ };
+ }
+ // check if fn is first in line for all its paths, and is
+ // included in the first set for all its dir queues
+ check(fn) {
+ const { paths, dirs } = this.#getQueues(fn);
+ return (paths.every(q => q && q[0] === fn) &&
+ dirs.every(q => q && q[0] instanceof Set && q[0].has(fn)));
+ }
+ // run the function if it's first in line and not already running
+ #run(fn) {
+ if (this.#running.has(fn) || !this.check(fn)) {
+ return false;
+ }
+ this.#running.add(fn);
+ fn(() => this.#clear(fn));
+ return true;
+ }
+ #clear(fn) {
+ if (!this.#running.has(fn)) {
+ return false;
+ }
+ const res = this.#reservations.get(fn);
+ /* c8 ignore start */
+ if (!res) {
+ throw new Error('invalid reservation');
+ }
+ /* c8 ignore stop */
+ const { paths, dirs } = res;
+ const next = new Set();
+ for (const path of paths) {
+ const q = this.#queues.get(path);
+ /* c8 ignore start */
+ if (!q || q?.[0] !== fn) {
+ continue;
+ }
+ /* c8 ignore stop */
+ const q0 = q[1];
+ if (!q0) {
+ this.#queues.delete(path);
+ continue;
+ }
+ q.shift();
+ if (typeof q0 === 'function') {
+ next.add(q0);
+ }
+ else {
+ for (const f of q0) {
+ next.add(f);
+ }
+ }
+ }
+ for (const dir of dirs) {
+ const q = this.#queues.get(dir);
+ const q0 = q?.[0];
+ /* c8 ignore next - type safety only */
+ if (!q || !(q0 instanceof Set))
+ continue;
+ if (q0.size === 1 && q.length === 1) {
+ this.#queues.delete(dir);
+ continue;
+ }
+ else if (q0.size === 1) {
+ q.shift();
+ // next one must be a function,
+ // or else the Set would've been reused
+ const n = q[0];
+ if (typeof n === 'function') {
+ next.add(n);
+ }
+ }
+ else {
+ q0.delete(fn);
+ }
+ }
+ this.#running.delete(fn);
+ next.forEach(fn => this.#run(fn));
+ return true;
+ }
+}
+//# sourceMappingURL=path-reservations.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/pax.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/pax.js
new file mode 100644
index 00000000000..832808f344d
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/pax.js
@@ -0,0 +1,154 @@
+import { basename } from 'node:path';
+import { Header } from './header.js';
+export class Pax {
+ atime;
+ mtime;
+ ctime;
+ charset;
+ comment;
+ gid;
+ uid;
+ gname;
+ uname;
+ linkpath;
+ dev;
+ ino;
+ nlink;
+ path;
+ size;
+ mode;
+ global;
+ constructor(obj, global = false) {
+ this.atime = obj.atime;
+ this.charset = obj.charset;
+ this.comment = obj.comment;
+ this.ctime = obj.ctime;
+ this.dev = obj.dev;
+ this.gid = obj.gid;
+ this.global = global;
+ this.gname = obj.gname;
+ this.ino = obj.ino;
+ this.linkpath = obj.linkpath;
+ this.mtime = obj.mtime;
+ this.nlink = obj.nlink;
+ this.path = obj.path;
+ this.size = obj.size;
+ this.uid = obj.uid;
+ this.uname = obj.uname;
+ }
+ encode() {
+ const body = this.encodeBody();
+ if (body === '') {
+ return Buffer.allocUnsafe(0);
+ }
+ const bodyLen = Buffer.byteLength(body);
+ // round up to 512 bytes
+ // add 512 for header
+ const bufLen = 512 * Math.ceil(1 + bodyLen / 512);
+ const buf = Buffer.allocUnsafe(bufLen);
+ // 0-fill the header section, it might not hit every field
+ for (let i = 0; i < 512; i++) {
+ buf[i] = 0;
+ }
+ new Header({
+ // XXX split the path
+ // then the path should be PaxHeader + basename, but less than 99,
+ // prepend with the dirname
+ /* c8 ignore start */
+ path: ('PaxHeader/' + basename(this.path ?? '')).slice(0, 99),
+ /* c8 ignore stop */
+ mode: this.mode || 0o644,
+ uid: this.uid,
+ gid: this.gid,
+ size: bodyLen,
+ mtime: this.mtime,
+ type: this.global ? 'GlobalExtendedHeader' : 'ExtendedHeader',
+ linkpath: '',
+ uname: this.uname || '',
+ gname: this.gname || '',
+ devmaj: 0,
+ devmin: 0,
+ atime: this.atime,
+ ctime: this.ctime,
+ }).encode(buf);
+ buf.write(body, 512, bodyLen, 'utf8');
+ // null pad after the body
+ for (let i = bodyLen + 512; i < buf.length; i++) {
+ buf[i] = 0;
+ }
+ return buf;
+ }
+ encodeBody() {
+ return (this.encodeField('path') +
+ this.encodeField('ctime') +
+ this.encodeField('atime') +
+ this.encodeField('dev') +
+ this.encodeField('ino') +
+ this.encodeField('nlink') +
+ this.encodeField('charset') +
+ this.encodeField('comment') +
+ this.encodeField('gid') +
+ this.encodeField('gname') +
+ this.encodeField('linkpath') +
+ this.encodeField('mtime') +
+ this.encodeField('size') +
+ this.encodeField('uid') +
+ this.encodeField('uname'));
+ }
+ encodeField(field) {
+ if (this[field] === undefined) {
+ return '';
+ }
+ const r = this[field];
+ const v = r instanceof Date ? r.getTime() / 1000 : r;
+ const s = ' ' +
+ (field === 'dev' || field === 'ino' || field === 'nlink' ?
+ 'SCHILY.'
+ : '') +
+ field +
+ '=' +
+ v +
+ '\n';
+ const byteLen = Buffer.byteLength(s);
+ // the digits includes the length of the digits in ascii base-10
+ // so if it's 9 characters, then adding 1 for the 9 makes it 10
+ // which makes it 11 chars.
+ let digits = Math.floor(Math.log(byteLen) / Math.log(10)) + 1;
+ if (byteLen + digits >= Math.pow(10, digits)) {
+ digits += 1;
+ }
+ const len = digits + byteLen;
+ return len + s;
+ }
+ static parse(str, ex, g = false) {
+ return new Pax(merge(parseKV(str), ex), g);
+ }
+}
+const merge = (a, b) => b ? Object.assign({}, b, a) : a;
+const parseKV = (str) => str
+ .replace(/\n$/, '')
+ .split('\n')
+ .reduce(parseKVLine, Object.create(null));
+const parseKVLine = (set, line) => {
+ const n = parseInt(line, 10);
+ // XXX Values with \n in them will fail this.
+ // Refactor to not be a naive line-by-line parse.
+ if (n !== Buffer.byteLength(line) + 1) {
+ return set;
+ }
+ line = line.slice((n + ' ').length);
+ const kv = line.split('=');
+ const r = kv.shift();
+ if (!r) {
+ return set;
+ }
+ const k = r.replace(/^SCHILY\.(dev|ino|nlink)/, '$1');
+ const v = kv.join('=');
+ set[k] =
+ /^([A-Z]+\.)?([mac]|birth|creation)time$/.test(k) ?
+ new Date(Number(v) * 1000)
+ : /^[0-9]+$/.test(v) ? +v
+ : v;
+ return set;
+};
+//# sourceMappingURL=pax.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/read-entry.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/read-entry.js
new file mode 100644
index 00000000000..23cc673e610
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/read-entry.js
@@ -0,0 +1,136 @@
+import { Minipass } from 'minipass';
+import { normalizeWindowsPath } from './normalize-windows-path.js';
+export class ReadEntry extends Minipass {
+ extended;
+ globalExtended;
+ header;
+ startBlockSize;
+ blockRemain;
+ remain;
+ type;
+ meta = false;
+ ignore = false;
+ path;
+ mode;
+ uid;
+ gid;
+ uname;
+ gname;
+ size = 0;
+ mtime;
+ atime;
+ ctime;
+ linkpath;
+ dev;
+ ino;
+ nlink;
+ invalid = false;
+ absolute;
+ unsupported = false;
+ constructor(header, ex, gex) {
+ super({});
+ // read entries always start life paused. this is to avoid the
+ // situation where Minipass's auto-ending empty streams results
+ // in an entry ending before we're ready for it.
+ this.pause();
+ this.extended = ex;
+ this.globalExtended = gex;
+ this.header = header;
+ /* c8 ignore start */
+ this.remain = header.size ?? 0;
+ /* c8 ignore stop */
+ this.startBlockSize = 512 * Math.ceil(this.remain / 512);
+ this.blockRemain = this.startBlockSize;
+ this.type = header.type;
+ switch (this.type) {
+ case 'File':
+ case 'OldFile':
+ case 'Link':
+ case 'SymbolicLink':
+ case 'CharacterDevice':
+ case 'BlockDevice':
+ case 'Directory':
+ case 'FIFO':
+ case 'ContiguousFile':
+ case 'GNUDumpDir':
+ break;
+ case 'NextFileHasLongLinkpath':
+ case 'NextFileHasLongPath':
+ case 'OldGnuLongPath':
+ case 'GlobalExtendedHeader':
+ case 'ExtendedHeader':
+ case 'OldExtendedHeader':
+ this.meta = true;
+ break;
+ // NOTE: gnutar and bsdtar treat unrecognized types as 'File'
+ // it may be worth doing the same, but with a warning.
+ default:
+ this.ignore = true;
+ }
+ /* c8 ignore start */
+ if (!header.path) {
+ throw new Error('no path provided for tar.ReadEntry');
+ }
+ /* c8 ignore stop */
+ this.path = normalizeWindowsPath(header.path);
+ this.mode = header.mode;
+ if (this.mode) {
+ this.mode = this.mode & 0o7777;
+ }
+ this.uid = header.uid;
+ this.gid = header.gid;
+ this.uname = header.uname;
+ this.gname = header.gname;
+ this.size = this.remain;
+ this.mtime = header.mtime;
+ this.atime = header.atime;
+ this.ctime = header.ctime;
+ /* c8 ignore start */
+ this.linkpath =
+ header.linkpath ?
+ normalizeWindowsPath(header.linkpath)
+ : undefined;
+ /* c8 ignore stop */
+ this.uname = header.uname;
+ this.gname = header.gname;
+ if (ex) {
+ this.#slurp(ex);
+ }
+ if (gex) {
+ this.#slurp(gex, true);
+ }
+ }
+ write(data) {
+ const writeLen = data.length;
+ if (writeLen > this.blockRemain) {
+ throw new Error('writing more to entry than is appropriate');
+ }
+ const r = this.remain;
+ const br = this.blockRemain;
+ this.remain = Math.max(0, r - writeLen);
+ this.blockRemain = Math.max(0, br - writeLen);
+ if (this.ignore) {
+ return true;
+ }
+ if (r >= writeLen) {
+ return super.write(data);
+ }
+ // r < writeLen
+ return super.write(data.subarray(0, r));
+ }
+ #slurp(ex, gex = false) {
+ if (ex.path)
+ ex.path = normalizeWindowsPath(ex.path);
+ if (ex.linkpath)
+ ex.linkpath = normalizeWindowsPath(ex.linkpath);
+ Object.assign(this, Object.fromEntries(Object.entries(ex).filter(([k, v]) => {
+ // we slurp in everything except for the path attribute in
+ // a global extended header, because that's weird. Also, any
+ // null/undefined values are ignored.
+ return !(v === null ||
+ v === undefined ||
+ (k === 'path' && gex));
+ })));
+ }
+}
+//# sourceMappingURL=read-entry.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/replace.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/replace.js
new file mode 100644
index 00000000000..c461a4c7d8b
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/replace.js
@@ -0,0 +1,225 @@
+// tar -r
+import { WriteStream, WriteStreamSync } from '@isaacs/fs-minipass';
+import fs from 'node:fs';
+import path from 'node:path';
+import { Header } from './header.js';
+import { list } from './list.js';
+import { makeCommand } from './make-command.js';
+import { isFile, } from './options.js';
+import { Pack, PackSync } from './pack.js';
+// starting at the head of the file, read a Header
+// If the checksum is invalid, that's our position to start writing
+// If it is, jump forward by the specified size (round up to 512)
+// and try again.
+// Write the new Pack stream starting there.
+const replaceSync = (opt, files) => {
+ const p = new PackSync(opt);
+ let threw = true;
+ let fd;
+ let position;
+ try {
+ try {
+ fd = fs.openSync(opt.file, 'r+');
+ }
+ catch (er) {
+ if (er?.code === 'ENOENT') {
+ fd = fs.openSync(opt.file, 'w+');
+ }
+ else {
+ throw er;
+ }
+ }
+ const st = fs.fstatSync(fd);
+ const headBuf = Buffer.alloc(512);
+ POSITION: for (position = 0; position < st.size; position += 512) {
+ for (let bufPos = 0, bytes = 0; bufPos < 512; bufPos += bytes) {
+ bytes = fs.readSync(fd, headBuf, bufPos, headBuf.length - bufPos, position + bufPos);
+ if (position === 0 &&
+ headBuf[0] === 0x1f &&
+ headBuf[1] === 0x8b) {
+ throw new Error('cannot append to compressed archives');
+ }
+ if (!bytes) {
+ break POSITION;
+ }
+ }
+ const h = new Header(headBuf);
+ if (!h.cksumValid) {
+ break;
+ }
+ const entryBlockSize = 512 * Math.ceil((h.size || 0) / 512);
+ if (position + entryBlockSize + 512 > st.size) {
+ break;
+ }
+ // the 512 for the header we just parsed will be added as well
+ // also jump ahead all the blocks for the body
+ position += entryBlockSize;
+ if (opt.mtimeCache && h.mtime) {
+ opt.mtimeCache.set(String(h.path), h.mtime);
+ }
+ }
+ threw = false;
+ streamSync(opt, p, position, fd, files);
+ }
+ finally {
+ if (threw) {
+ try {
+ fs.closeSync(fd);
+ }
+ catch (er) { }
+ }
+ }
+};
+const streamSync = (opt, p, position, fd, files) => {
+ const stream = new WriteStreamSync(opt.file, {
+ fd: fd,
+ start: position,
+ });
+ p.pipe(stream);
+ addFilesSync(p, files);
+};
+const replaceAsync = (opt, files) => {
+ files = Array.from(files);
+ const p = new Pack(opt);
+ const getPos = (fd, size, cb_) => {
+ const cb = (er, pos) => {
+ if (er) {
+ fs.close(fd, _ => cb_(er));
+ }
+ else {
+ cb_(null, pos);
+ }
+ };
+ let position = 0;
+ if (size === 0) {
+ return cb(null, 0);
+ }
+ let bufPos = 0;
+ const headBuf = Buffer.alloc(512);
+ const onread = (er, bytes) => {
+ if (er || typeof bytes === 'undefined') {
+ return cb(er);
+ }
+ bufPos += bytes;
+ if (bufPos < 512 && bytes) {
+ return fs.read(fd, headBuf, bufPos, headBuf.length - bufPos, position + bufPos, onread);
+ }
+ if (position === 0 &&
+ headBuf[0] === 0x1f &&
+ headBuf[1] === 0x8b) {
+ return cb(new Error('cannot append to compressed archives'));
+ }
+ // truncated header
+ if (bufPos < 512) {
+ return cb(null, position);
+ }
+ const h = new Header(headBuf);
+ if (!h.cksumValid) {
+ return cb(null, position);
+ }
+ /* c8 ignore next */
+ const entryBlockSize = 512 * Math.ceil((h.size ?? 0) / 512);
+ if (position + entryBlockSize + 512 > size) {
+ return cb(null, position);
+ }
+ position += entryBlockSize + 512;
+ if (position >= size) {
+ return cb(null, position);
+ }
+ if (opt.mtimeCache && h.mtime) {
+ opt.mtimeCache.set(String(h.path), h.mtime);
+ }
+ bufPos = 0;
+ fs.read(fd, headBuf, 0, 512, position, onread);
+ };
+ fs.read(fd, headBuf, 0, 512, position, onread);
+ };
+ const promise = new Promise((resolve, reject) => {
+ p.on('error', reject);
+ let flag = 'r+';
+ const onopen = (er, fd) => {
+ if (er && er.code === 'ENOENT' && flag === 'r+') {
+ flag = 'w+';
+ return fs.open(opt.file, flag, onopen);
+ }
+ if (er || !fd) {
+ return reject(er);
+ }
+ fs.fstat(fd, (er, st) => {
+ if (er) {
+ return fs.close(fd, () => reject(er));
+ }
+ getPos(fd, st.size, (er, position) => {
+ if (er) {
+ return reject(er);
+ }
+ const stream = new WriteStream(opt.file, {
+ fd: fd,
+ start: position,
+ });
+ p.pipe(stream);
+ stream.on('error', reject);
+ stream.on('close', resolve);
+ addFilesAsync(p, files);
+ });
+ });
+ };
+ fs.open(opt.file, flag, onopen);
+ });
+ return promise;
+};
+const addFilesSync = (p, files) => {
+ files.forEach(file => {
+ if (file.charAt(0) === '@') {
+ list({
+ file: path.resolve(p.cwd, file.slice(1)),
+ sync: true,
+ noResume: true,
+ onReadEntry: entry => p.add(entry),
+ });
+ }
+ else {
+ p.add(file);
+ }
+ });
+ p.end();
+};
+const addFilesAsync = async (p, files) => {
+ for (let i = 0; i < files.length; i++) {
+ const file = String(files[i]);
+ if (file.charAt(0) === '@') {
+ await list({
+ file: path.resolve(String(p.cwd), file.slice(1)),
+ noResume: true,
+ onReadEntry: entry => p.add(entry),
+ });
+ }
+ else {
+ p.add(file);
+ }
+ }
+ p.end();
+};
+export const replace = makeCommand(replaceSync, replaceAsync,
+/* c8 ignore start */
+() => {
+ throw new TypeError('file is required');
+}, () => {
+ throw new TypeError('file is required');
+},
+/* c8 ignore stop */
+(opt, entries) => {
+ if (!isFile(opt)) {
+ throw new TypeError('file is required');
+ }
+ if (opt.gzip ||
+ opt.brotli ||
+ opt.file.endsWith('.br') ||
+ opt.file.endsWith('.tbr')) {
+ throw new TypeError('cannot append to compressed archives');
+ }
+ if (!entries?.length) {
+ throw new TypeError('no paths specified to add/replace');
+ }
+});
+//# sourceMappingURL=replace.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/strip-absolute-path.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/strip-absolute-path.js
new file mode 100644
index 00000000000..cce5ff80b00
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/strip-absolute-path.js
@@ -0,0 +1,25 @@
+// unix absolute paths are also absolute on win32, so we use this for both
+import { win32 } from 'node:path';
+const { isAbsolute, parse } = win32;
+// returns [root, stripped]
+// Note that windows will think that //x/y/z/a has a "root" of //x/y, and in
+// those cases, we want to sanitize it to x/y/z/a, not z/a, so we strip /
+// explicitly if it's the first character.
+// drive-specific relative paths on Windows get their root stripped off even
+// though they are not absolute, so `c:../foo` becomes ['c:', '../foo']
+export const stripAbsolutePath = (path) => {
+ let r = '';
+ let parsed = parse(path);
+ while (isAbsolute(path) || parsed.root) {
+ // windows will think that //x/y/z has a "root" of //x/y/
+ // but strip the //?/C:/ off of //?/C:/path
+ const root = path.charAt(0) === '/' && path.slice(0, 4) !== '//?/' ?
+ '/'
+ : parsed.root;
+ path = path.slice(root.length);
+ r += root;
+ parsed = parse(path);
+ }
+ return [r, path];
+};
+//# sourceMappingURL=strip-absolute-path.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/strip-trailing-slashes.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/strip-trailing-slashes.js
new file mode 100644
index 00000000000..ace4218a754
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/strip-trailing-slashes.js
@@ -0,0 +1,14 @@
+// warning: extremely hot code path.
+// This has been meticulously optimized for use
+// within npm install on large package trees.
+// Do not edit without careful benchmarking.
+export const stripTrailingSlashes = (str) => {
+ let i = str.length - 1;
+ let slashesStart = -1;
+ while (i > -1 && str.charAt(i) === '/') {
+ slashesStart = i;
+ i--;
+ }
+ return slashesStart === -1 ? str : str.slice(0, slashesStart);
+};
+//# sourceMappingURL=strip-trailing-slashes.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/symlink-error.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/symlink-error.js
new file mode 100644
index 00000000000..d31766e2e0a
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/symlink-error.js
@@ -0,0 +1,15 @@
+export class SymlinkError extends Error {
+ path;
+ symlink;
+ syscall = 'symlink';
+ code = 'TAR_SYMLINK_ERROR';
+ constructor(symlink, path) {
+ super('TAR_SYMLINK_ERROR: Cannot extract through symbolic link');
+ this.symlink = symlink;
+ this.path = path;
+ }
+ get name() {
+ return 'SymlinkError';
+ }
+}
+//# sourceMappingURL=symlink-error.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/types.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/types.js
new file mode 100644
index 00000000000..27b982ae1e0
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/types.js
@@ -0,0 +1,45 @@
+export const isCode = (c) => name.has(c);
+export const isName = (c) => code.has(c);
+// map types from key to human-friendly name
+export const name = new Map([
+ ['0', 'File'],
+ // same as File
+ ['', 'OldFile'],
+ ['1', 'Link'],
+ ['2', 'SymbolicLink'],
+ // Devices and FIFOs aren't fully supported
+ // they are parsed, but skipped when unpacking
+ ['3', 'CharacterDevice'],
+ ['4', 'BlockDevice'],
+ ['5', 'Directory'],
+ ['6', 'FIFO'],
+ // same as File
+ ['7', 'ContiguousFile'],
+ // pax headers
+ ['g', 'GlobalExtendedHeader'],
+ ['x', 'ExtendedHeader'],
+ // vendor-specific stuff
+ // skip
+ ['A', 'SolarisACL'],
+ // like 5, but with data, which should be skipped
+ ['D', 'GNUDumpDir'],
+ // metadata only, skip
+ ['I', 'Inode'],
+ // data = link path of next file
+ ['K', 'NextFileHasLongLinkpath'],
+ // data = path of next file
+ ['L', 'NextFileHasLongPath'],
+ // skip
+ ['M', 'ContinuationFile'],
+ // like L
+ ['N', 'OldGnuLongPath'],
+ // skip
+ ['S', 'SparseFile'],
+ // skip
+ ['V', 'TapeVolumeHeader'],
+ // like x
+ ['X', 'OldExtendedHeader'],
+]);
+// map the other direction
+export const code = new Map(Array.from(name).map(kv => [kv[1], kv[0]]));
+//# sourceMappingURL=types.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/unpack.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/unpack.js
new file mode 100644
index 00000000000..6e744cfc1a6
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/unpack.js
@@ -0,0 +1,888 @@
+// the PEND/UNPEND stuff tracks whether we're ready to emit end/close yet.
+// but the path reservations are required to avoid race conditions where
+// parallelized unpack ops may mess with one another, due to dependencies
+// (like a Link depending on its target) or destructive operations (like
+// clobbering an fs object to create one of a different type.)
+import * as fsm from '@isaacs/fs-minipass';
+import assert from 'node:assert';
+import { randomBytes } from 'node:crypto';
+import fs from 'node:fs';
+import path from 'node:path';
+import { getWriteFlag } from './get-write-flag.js';
+import { mkdir, mkdirSync } from './mkdir.js';
+import { normalizeUnicode } from './normalize-unicode.js';
+import { normalizeWindowsPath } from './normalize-windows-path.js';
+import { Parser } from './parse.js';
+import { stripAbsolutePath } from './strip-absolute-path.js';
+import { stripTrailingSlashes } from './strip-trailing-slashes.js';
+import * as wc from './winchars.js';
+import { PathReservations } from './path-reservations.js';
+const ONENTRY = Symbol('onEntry');
+const CHECKFS = Symbol('checkFs');
+const CHECKFS2 = Symbol('checkFs2');
+const PRUNECACHE = Symbol('pruneCache');
+const ISREUSABLE = Symbol('isReusable');
+const MAKEFS = Symbol('makeFs');
+const FILE = Symbol('file');
+const DIRECTORY = Symbol('directory');
+const LINK = Symbol('link');
+const SYMLINK = Symbol('symlink');
+const HARDLINK = Symbol('hardlink');
+const UNSUPPORTED = Symbol('unsupported');
+const CHECKPATH = Symbol('checkPath');
+const MKDIR = Symbol('mkdir');
+const ONERROR = Symbol('onError');
+const PENDING = Symbol('pending');
+const PEND = Symbol('pend');
+const UNPEND = Symbol('unpend');
+const ENDED = Symbol('ended');
+const MAYBECLOSE = Symbol('maybeClose');
+const SKIP = Symbol('skip');
+const DOCHOWN = Symbol('doChown');
+const UID = Symbol('uid');
+const GID = Symbol('gid');
+const CHECKED_CWD = Symbol('checkedCwd');
+const platform = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform;
+const isWindows = platform === 'win32';
+const DEFAULT_MAX_DEPTH = 1024;
+// Unlinks on Windows are not atomic.
+//
+// This means that if you have a file entry, followed by another
+// file entry with an identical name, and you cannot re-use the file
+// (because it's a hardlink, or because unlink:true is set, or it's
+// Windows, which does not have useful nlink values), then the unlink
+// will be committed to the disk AFTER the new file has been written
+// over the old one, deleting the new file.
+//
+// To work around this, on Windows systems, we rename the file and then
+// delete the renamed file. It's a sloppy kludge, but frankly, I do not
+// know of a better way to do this, given windows' non-atomic unlink
+// semantics.
+//
+// See: https://github.com/npm/node-tar/issues/183
+/* c8 ignore start */
+const unlinkFile = (path, cb) => {
+ if (!isWindows) {
+ return fs.unlink(path, cb);
+ }
+ const name = path + '.DELETE.' + randomBytes(16).toString('hex');
+ fs.rename(path, name, er => {
+ if (er) {
+ return cb(er);
+ }
+ fs.unlink(name, cb);
+ });
+};
+/* c8 ignore stop */
+/* c8 ignore start */
+const unlinkFileSync = (path) => {
+ if (!isWindows) {
+ return fs.unlinkSync(path);
+ }
+ const name = path + '.DELETE.' + randomBytes(16).toString('hex');
+ fs.renameSync(path, name);
+ fs.unlinkSync(name);
+};
+/* c8 ignore stop */
+// this.gid, entry.gid, this.processUid
+const uint32 = (a, b, c) => a !== undefined && a === a >>> 0 ? a
+ : b !== undefined && b === b >>> 0 ? b
+ : c;
+// clear the cache if it's a case-insensitive unicode-squashing match.
+// we can't know if the current file system is case-sensitive or supports
+// unicode fully, so we check for similarity on the maximally compatible
+// representation. Err on the side of pruning, since all it's doing is
+// preventing lstats, and it's not the end of the world if we get a false
+// positive.
+// Note that on windows, we always drop the entire cache whenever a
+// symbolic link is encountered, because 8.3 filenames are impossible
+// to reason about, and collisions are hazards rather than just failures.
+const cacheKeyNormalize = (path) => stripTrailingSlashes(normalizeWindowsPath(normalizeUnicode(path))).toLowerCase();
+// remove all cache entries matching ${abs}/**
+const pruneCache = (cache, abs) => {
+ abs = cacheKeyNormalize(abs);
+ for (const path of cache.keys()) {
+ const pnorm = cacheKeyNormalize(path);
+ if (pnorm === abs || pnorm.indexOf(abs + '/') === 0) {
+ cache.delete(path);
+ }
+ }
+};
+const dropCache = (cache) => {
+ for (const key of cache.keys()) {
+ cache.delete(key);
+ }
+};
+export class Unpack extends Parser {
+ [ENDED] = false;
+ [CHECKED_CWD] = false;
+ [PENDING] = 0;
+ reservations = new PathReservations();
+ transform;
+ writable = true;
+ readable = false;
+ dirCache;
+ uid;
+ gid;
+ setOwner;
+ preserveOwner;
+ processGid;
+ processUid;
+ maxDepth;
+ forceChown;
+ win32;
+ newer;
+ keep;
+ noMtime;
+ preservePaths;
+ unlink;
+ cwd;
+ strip;
+ processUmask;
+ umask;
+ dmode;
+ fmode;
+ chmod;
+ constructor(opt = {}) {
+ opt.ondone = () => {
+ this[ENDED] = true;
+ this[MAYBECLOSE]();
+ };
+ super(opt);
+ this.transform = opt.transform;
+ this.dirCache = opt.dirCache || new Map();
+ this.chmod = !!opt.chmod;
+ if (typeof opt.uid === 'number' || typeof opt.gid === 'number') {
+ // need both or neither
+ if (typeof opt.uid !== 'number' ||
+ typeof opt.gid !== 'number') {
+ throw new TypeError('cannot set owner without number uid and gid');
+ }
+ if (opt.preserveOwner) {
+ throw new TypeError('cannot preserve owner in archive and also set owner explicitly');
+ }
+ this.uid = opt.uid;
+ this.gid = opt.gid;
+ this.setOwner = true;
+ }
+ else {
+ this.uid = undefined;
+ this.gid = undefined;
+ this.setOwner = false;
+ }
+ // default true for root
+ if (opt.preserveOwner === undefined &&
+ typeof opt.uid !== 'number') {
+ this.preserveOwner = !!(process.getuid && process.getuid() === 0);
+ }
+ else {
+ this.preserveOwner = !!opt.preserveOwner;
+ }
+ this.processUid =
+ (this.preserveOwner || this.setOwner) && process.getuid ?
+ process.getuid()
+ : undefined;
+ this.processGid =
+ (this.preserveOwner || this.setOwner) && process.getgid ?
+ process.getgid()
+ : undefined;
+ // prevent excessively deep nesting of subfolders
+ // set to `Infinity` to remove this restriction
+ this.maxDepth =
+ typeof opt.maxDepth === 'number' ?
+ opt.maxDepth
+ : DEFAULT_MAX_DEPTH;
+ // mostly just for testing, but useful in some cases.
+ // Forcibly trigger a chown on every entry, no matter what
+ this.forceChown = opt.forceChown === true;
+ // turn >| in filenames into 0xf000-higher encoded forms
+ this.win32 = !!opt.win32 || isWindows;
+ // do not unpack over files that are newer than what's in the archive
+ this.newer = !!opt.newer;
+ // do not unpack over ANY files
+ this.keep = !!opt.keep;
+ // do not set mtime/atime of extracted entries
+ this.noMtime = !!opt.noMtime;
+ // allow .., absolute path entries, and unpacking through symlinks
+ // without this, warn and skip .., relativize absolutes, and error
+ // on symlinks in extraction path
+ this.preservePaths = !!opt.preservePaths;
+ // unlink files and links before writing. This breaks existing hard
+ // links, and removes symlink directories rather than erroring
+ this.unlink = !!opt.unlink;
+ this.cwd = normalizeWindowsPath(path.resolve(opt.cwd || process.cwd()));
+ this.strip = Number(opt.strip) || 0;
+ // if we're not chmodding, then we don't need the process umask
+ this.processUmask =
+ !this.chmod ? 0
+ : typeof opt.processUmask === 'number' ? opt.processUmask
+ : process.umask();
+ this.umask =
+ typeof opt.umask === 'number' ? opt.umask : this.processUmask;
+ // default mode for dirs created as parents
+ this.dmode = opt.dmode || 0o0777 & ~this.umask;
+ this.fmode = opt.fmode || 0o0666 & ~this.umask;
+ this.on('entry', entry => this[ONENTRY](entry));
+ }
+ // a bad or damaged archive is a warning for Parser, but an error
+ // when extracting. Mark those errors as unrecoverable, because
+ // the Unpack contract cannot be met.
+ warn(code, msg, data = {}) {
+ if (code === 'TAR_BAD_ARCHIVE' || code === 'TAR_ABORT') {
+ data.recoverable = false;
+ }
+ return super.warn(code, msg, data);
+ }
+ [MAYBECLOSE]() {
+ if (this[ENDED] && this[PENDING] === 0) {
+ this.emit('prefinish');
+ this.emit('finish');
+ this.emit('end');
+ }
+ }
+ [CHECKPATH](entry) {
+ const p = normalizeWindowsPath(entry.path);
+ const parts = p.split('/');
+ if (this.strip) {
+ if (parts.length < this.strip) {
+ return false;
+ }
+ if (entry.type === 'Link') {
+ const linkparts = normalizeWindowsPath(String(entry.linkpath)).split('/');
+ if (linkparts.length >= this.strip) {
+ entry.linkpath = linkparts.slice(this.strip).join('/');
+ }
+ else {
+ return false;
+ }
+ }
+ parts.splice(0, this.strip);
+ entry.path = parts.join('/');
+ }
+ if (isFinite(this.maxDepth) && parts.length > this.maxDepth) {
+ this.warn('TAR_ENTRY_ERROR', 'path excessively deep', {
+ entry,
+ path: p,
+ depth: parts.length,
+ maxDepth: this.maxDepth,
+ });
+ return false;
+ }
+ if (!this.preservePaths) {
+ if (parts.includes('..') ||
+ /* c8 ignore next */
+ (isWindows && /^[a-z]:\.\.$/i.test(parts[0] ?? ''))) {
+ this.warn('TAR_ENTRY_ERROR', `path contains '..'`, {
+ entry,
+ path: p,
+ });
+ return false;
+ }
+ // strip off the root
+ const [root, stripped] = stripAbsolutePath(p);
+ if (root) {
+ entry.path = String(stripped);
+ this.warn('TAR_ENTRY_INFO', `stripping ${root} from absolute path`, {
+ entry,
+ path: p,
+ });
+ }
+ }
+ if (path.isAbsolute(entry.path)) {
+ entry.absolute = normalizeWindowsPath(path.resolve(entry.path));
+ }
+ else {
+ entry.absolute = normalizeWindowsPath(path.resolve(this.cwd, entry.path));
+ }
+ // if we somehow ended up with a path that escapes the cwd, and we are
+ // not in preservePaths mode, then something is fishy! This should have
+ // been prevented above, so ignore this for coverage.
+ /* c8 ignore start - defense in depth */
+ if (!this.preservePaths &&
+ typeof entry.absolute === 'string' &&
+ entry.absolute.indexOf(this.cwd + '/') !== 0 &&
+ entry.absolute !== this.cwd) {
+ this.warn('TAR_ENTRY_ERROR', 'path escaped extraction target', {
+ entry,
+ path: normalizeWindowsPath(entry.path),
+ resolvedPath: entry.absolute,
+ cwd: this.cwd,
+ });
+ return false;
+ }
+ /* c8 ignore stop */
+ // an archive can set properties on the extraction directory, but it
+ // may not replace the cwd with a different kind of thing entirely.
+ if (entry.absolute === this.cwd &&
+ entry.type !== 'Directory' &&
+ entry.type !== 'GNUDumpDir') {
+ return false;
+ }
+ // only encode : chars that aren't drive letter indicators
+ if (this.win32) {
+ const { root: aRoot } = path.win32.parse(String(entry.absolute));
+ entry.absolute =
+ aRoot + wc.encode(String(entry.absolute).slice(aRoot.length));
+ const { root: pRoot } = path.win32.parse(entry.path);
+ entry.path = pRoot + wc.encode(entry.path.slice(pRoot.length));
+ }
+ return true;
+ }
+ [ONENTRY](entry) {
+ if (!this[CHECKPATH](entry)) {
+ return entry.resume();
+ }
+ assert.equal(typeof entry.absolute, 'string');
+ switch (entry.type) {
+ case 'Directory':
+ case 'GNUDumpDir':
+ if (entry.mode) {
+ entry.mode = entry.mode | 0o700;
+ }
+ // eslint-disable-next-line no-fallthrough
+ case 'File':
+ case 'OldFile':
+ case 'ContiguousFile':
+ case 'Link':
+ case 'SymbolicLink':
+ return this[CHECKFS](entry);
+ case 'CharacterDevice':
+ case 'BlockDevice':
+ case 'FIFO':
+ default:
+ return this[UNSUPPORTED](entry);
+ }
+ }
+ [ONERROR](er, entry) {
+ // Cwd has to exist, or else nothing works. That's serious.
+ // Other errors are warnings, which raise the error in strict
+ // mode, but otherwise continue on.
+ if (er.name === 'CwdError') {
+ this.emit('error', er);
+ }
+ else {
+ this.warn('TAR_ENTRY_ERROR', er, { entry });
+ this[UNPEND]();
+ entry.resume();
+ }
+ }
+ [MKDIR](dir, mode, cb) {
+ mkdir(normalizeWindowsPath(dir), {
+ uid: this.uid,
+ gid: this.gid,
+ processUid: this.processUid,
+ processGid: this.processGid,
+ umask: this.processUmask,
+ preserve: this.preservePaths,
+ unlink: this.unlink,
+ cache: this.dirCache,
+ cwd: this.cwd,
+ mode: mode,
+ }, cb);
+ }
+ [DOCHOWN](entry) {
+ // in preserve owner mode, chown if the entry doesn't match process
+ // in set owner mode, chown if setting doesn't match process
+ return (this.forceChown ||
+ (this.preserveOwner &&
+ ((typeof entry.uid === 'number' &&
+ entry.uid !== this.processUid) ||
+ (typeof entry.gid === 'number' &&
+ entry.gid !== this.processGid))) ||
+ (typeof this.uid === 'number' &&
+ this.uid !== this.processUid) ||
+ (typeof this.gid === 'number' && this.gid !== this.processGid));
+ }
+ [UID](entry) {
+ return uint32(this.uid, entry.uid, this.processUid);
+ }
+ [GID](entry) {
+ return uint32(this.gid, entry.gid, this.processGid);
+ }
+ [FILE](entry, fullyDone) {
+ const mode = typeof entry.mode === 'number' ?
+ entry.mode & 0o7777
+ : this.fmode;
+ const stream = new fsm.WriteStream(String(entry.absolute), {
+ // slight lie, but it can be numeric flags
+ flags: getWriteFlag(entry.size),
+ mode: mode,
+ autoClose: false,
+ });
+ stream.on('error', (er) => {
+ if (stream.fd) {
+ fs.close(stream.fd, () => { });
+ }
+ // flush all the data out so that we aren't left hanging
+ // if the error wasn't actually fatal. otherwise the parse
+ // is blocked, and we never proceed.
+ stream.write = () => true;
+ this[ONERROR](er, entry);
+ fullyDone();
+ });
+ let actions = 1;
+ const done = (er) => {
+ if (er) {
+ /* c8 ignore start - we should always have a fd by now */
+ if (stream.fd) {
+ fs.close(stream.fd, () => { });
+ }
+ /* c8 ignore stop */
+ this[ONERROR](er, entry);
+ fullyDone();
+ return;
+ }
+ if (--actions === 0) {
+ if (stream.fd !== undefined) {
+ fs.close(stream.fd, er => {
+ if (er) {
+ this[ONERROR](er, entry);
+ }
+ else {
+ this[UNPEND]();
+ }
+ fullyDone();
+ });
+ }
+ }
+ };
+ stream.on('finish', () => {
+ // if futimes fails, try utimes
+ // if utimes fails, fail with the original error
+ // same for fchown/chown
+ const abs = String(entry.absolute);
+ const fd = stream.fd;
+ if (typeof fd === 'number' && entry.mtime && !this.noMtime) {
+ actions++;
+ const atime = entry.atime || new Date();
+ const mtime = entry.mtime;
+ fs.futimes(fd, atime, mtime, er => er ?
+ fs.utimes(abs, atime, mtime, er2 => done(er2 && er))
+ : done());
+ }
+ if (typeof fd === 'number' && this[DOCHOWN](entry)) {
+ actions++;
+ const uid = this[UID](entry);
+ const gid = this[GID](entry);
+ if (typeof uid === 'number' && typeof gid === 'number') {
+ fs.fchown(fd, uid, gid, er => er ?
+ fs.chown(abs, uid, gid, er2 => done(er2 && er))
+ : done());
+ }
+ }
+ done();
+ });
+ const tx = this.transform ? this.transform(entry) || entry : entry;
+ if (tx !== entry) {
+ tx.on('error', (er) => {
+ this[ONERROR](er, entry);
+ fullyDone();
+ });
+ entry.pipe(tx);
+ }
+ tx.pipe(stream);
+ }
+ [DIRECTORY](entry, fullyDone) {
+ const mode = typeof entry.mode === 'number' ?
+ entry.mode & 0o7777
+ : this.dmode;
+ this[MKDIR](String(entry.absolute), mode, er => {
+ if (er) {
+ this[ONERROR](er, entry);
+ fullyDone();
+ return;
+ }
+ let actions = 1;
+ const done = () => {
+ if (--actions === 0) {
+ fullyDone();
+ this[UNPEND]();
+ entry.resume();
+ }
+ };
+ if (entry.mtime && !this.noMtime) {
+ actions++;
+ fs.utimes(String(entry.absolute), entry.atime || new Date(), entry.mtime, done);
+ }
+ if (this[DOCHOWN](entry)) {
+ actions++;
+ fs.chown(String(entry.absolute), Number(this[UID](entry)), Number(this[GID](entry)), done);
+ }
+ done();
+ });
+ }
+ [UNSUPPORTED](entry) {
+ entry.unsupported = true;
+ this.warn('TAR_ENTRY_UNSUPPORTED', `unsupported entry type: ${entry.type}`, { entry });
+ entry.resume();
+ }
+ [SYMLINK](entry, done) {
+ this[LINK](entry, String(entry.linkpath), 'symlink', done);
+ }
+ [HARDLINK](entry, done) {
+ const linkpath = normalizeWindowsPath(path.resolve(this.cwd, String(entry.linkpath)));
+ this[LINK](entry, linkpath, 'link', done);
+ }
+ [PEND]() {
+ this[PENDING]++;
+ }
+ [UNPEND]() {
+ this[PENDING]--;
+ this[MAYBECLOSE]();
+ }
+ [SKIP](entry) {
+ this[UNPEND]();
+ entry.resume();
+ }
+ // Check if we can reuse an existing filesystem entry safely and
+ // overwrite it, rather than unlinking and recreating
+ // Windows doesn't report a useful nlink, so we just never reuse entries
+ [ISREUSABLE](entry, st) {
+ return (entry.type === 'File' &&
+ !this.unlink &&
+ st.isFile() &&
+ st.nlink <= 1 &&
+ !isWindows);
+ }
+ // check if a thing is there, and if so, try to clobber it
+ [CHECKFS](entry) {
+ this[PEND]();
+ const paths = [entry.path];
+ if (entry.linkpath) {
+ paths.push(entry.linkpath);
+ }
+ this.reservations.reserve(paths, done => this[CHECKFS2](entry, done));
+ }
+ [PRUNECACHE](entry) {
+ // if we are not creating a directory, and the path is in the dirCache,
+ // then that means we are about to delete the directory we created
+ // previously, and it is no longer going to be a directory, and neither
+ // is any of its children.
+ // If a symbolic link is encountered, all bets are off. There is no
+ // reasonable way to sanitize the cache in such a way we will be able to
+ // avoid having filesystem collisions. If this happens with a non-symlink
+ // entry, it'll just fail to unpack, but a symlink to a directory, using an
+ // 8.3 shortname or certain unicode attacks, can evade detection and lead
+ // to arbitrary writes to anywhere on the system.
+ if (entry.type === 'SymbolicLink') {
+ dropCache(this.dirCache);
+ }
+ else if (entry.type !== 'Directory') {
+ pruneCache(this.dirCache, String(entry.absolute));
+ }
+ }
+ [CHECKFS2](entry, fullyDone) {
+ this[PRUNECACHE](entry);
+ const done = (er) => {
+ this[PRUNECACHE](entry);
+ fullyDone(er);
+ };
+ const checkCwd = () => {
+ this[MKDIR](this.cwd, this.dmode, er => {
+ if (er) {
+ this[ONERROR](er, entry);
+ done();
+ return;
+ }
+ this[CHECKED_CWD] = true;
+ start();
+ });
+ };
+ const start = () => {
+ if (entry.absolute !== this.cwd) {
+ const parent = normalizeWindowsPath(path.dirname(String(entry.absolute)));
+ if (parent !== this.cwd) {
+ return this[MKDIR](parent, this.dmode, er => {
+ if (er) {
+ this[ONERROR](er, entry);
+ done();
+ return;
+ }
+ afterMakeParent();
+ });
+ }
+ }
+ afterMakeParent();
+ };
+ const afterMakeParent = () => {
+ fs.lstat(String(entry.absolute), (lstatEr, st) => {
+ if (st &&
+ (this.keep ||
+ /* c8 ignore next */
+ (this.newer && st.mtime > (entry.mtime ?? st.mtime)))) {
+ this[SKIP](entry);
+ done();
+ return;
+ }
+ if (lstatEr || this[ISREUSABLE](entry, st)) {
+ return this[MAKEFS](null, entry, done);
+ }
+ if (st.isDirectory()) {
+ if (entry.type === 'Directory') {
+ const needChmod = this.chmod &&
+ entry.mode &&
+ (st.mode & 0o7777) !== entry.mode;
+ const afterChmod = (er) => this[MAKEFS](er ?? null, entry, done);
+ if (!needChmod) {
+ return afterChmod();
+ }
+ return fs.chmod(String(entry.absolute), Number(entry.mode), afterChmod);
+ }
+ // Not a dir entry, have to remove it.
+ // NB: the only way to end up with an entry that is the cwd
+ // itself, in such a way that == does not detect, is a
+ // tricky windows absolute path with UNC or 8.3 parts (and
+ // preservePaths:true, or else it will have been stripped).
+ // In that case, the user has opted out of path protections
+ // explicitly, so if they blow away the cwd, c'est la vie.
+ if (entry.absolute !== this.cwd) {
+ return fs.rmdir(String(entry.absolute), (er) => this[MAKEFS](er ?? null, entry, done));
+ }
+ }
+ // not a dir, and not reusable
+ // don't remove if the cwd, we want that error
+ if (entry.absolute === this.cwd) {
+ return this[MAKEFS](null, entry, done);
+ }
+ unlinkFile(String(entry.absolute), er => this[MAKEFS](er ?? null, entry, done));
+ });
+ };
+ if (this[CHECKED_CWD]) {
+ start();
+ }
+ else {
+ checkCwd();
+ }
+ }
+ [MAKEFS](er, entry, done) {
+ if (er) {
+ this[ONERROR](er, entry);
+ done();
+ return;
+ }
+ switch (entry.type) {
+ case 'File':
+ case 'OldFile':
+ case 'ContiguousFile':
+ return this[FILE](entry, done);
+ case 'Link':
+ return this[HARDLINK](entry, done);
+ case 'SymbolicLink':
+ return this[SYMLINK](entry, done);
+ case 'Directory':
+ case 'GNUDumpDir':
+ return this[DIRECTORY](entry, done);
+ }
+ }
+ [LINK](entry, linkpath, link, done) {
+ // XXX: get the type ('symlink' or 'junction') for windows
+ fs[link](linkpath, String(entry.absolute), er => {
+ if (er) {
+ this[ONERROR](er, entry);
+ }
+ else {
+ this[UNPEND]();
+ entry.resume();
+ }
+ done();
+ });
+ }
+}
+const callSync = (fn) => {
+ try {
+ return [null, fn()];
+ }
+ catch (er) {
+ return [er, null];
+ }
+};
+export class UnpackSync extends Unpack {
+ sync = true;
+ [MAKEFS](er, entry) {
+ return super[MAKEFS](er, entry, () => { });
+ }
+ [CHECKFS](entry) {
+ this[PRUNECACHE](entry);
+ if (!this[CHECKED_CWD]) {
+ const er = this[MKDIR](this.cwd, this.dmode);
+ if (er) {
+ return this[ONERROR](er, entry);
+ }
+ this[CHECKED_CWD] = true;
+ }
+ // don't bother to make the parent if the current entry is the cwd,
+ // we've already checked it.
+ if (entry.absolute !== this.cwd) {
+ const parent = normalizeWindowsPath(path.dirname(String(entry.absolute)));
+ if (parent !== this.cwd) {
+ const mkParent = this[MKDIR](parent, this.dmode);
+ if (mkParent) {
+ return this[ONERROR](mkParent, entry);
+ }
+ }
+ }
+ const [lstatEr, st] = callSync(() => fs.lstatSync(String(entry.absolute)));
+ if (st &&
+ (this.keep ||
+ /* c8 ignore next */
+ (this.newer && st.mtime > (entry.mtime ?? st.mtime)))) {
+ return this[SKIP](entry);
+ }
+ if (lstatEr || this[ISREUSABLE](entry, st)) {
+ return this[MAKEFS](null, entry);
+ }
+ if (st.isDirectory()) {
+ if (entry.type === 'Directory') {
+ const needChmod = this.chmod &&
+ entry.mode &&
+ (st.mode & 0o7777) !== entry.mode;
+ const [er] = needChmod ?
+ callSync(() => {
+ fs.chmodSync(String(entry.absolute), Number(entry.mode));
+ })
+ : [];
+ return this[MAKEFS](er, entry);
+ }
+ // not a dir entry, have to remove it
+ const [er] = callSync(() => fs.rmdirSync(String(entry.absolute)));
+ this[MAKEFS](er, entry);
+ }
+ // not a dir, and not reusable.
+ // don't remove if it's the cwd, since we want that error.
+ const [er] = entry.absolute === this.cwd ?
+ []
+ : callSync(() => unlinkFileSync(String(entry.absolute)));
+ this[MAKEFS](er, entry);
+ }
+ [FILE](entry, done) {
+ const mode = typeof entry.mode === 'number' ?
+ entry.mode & 0o7777
+ : this.fmode;
+ const oner = (er) => {
+ let closeError;
+ try {
+ fs.closeSync(fd);
+ }
+ catch (e) {
+ closeError = e;
+ }
+ if (er || closeError) {
+ this[ONERROR](er || closeError, entry);
+ }
+ done();
+ };
+ let fd;
+ try {
+ fd = fs.openSync(String(entry.absolute), getWriteFlag(entry.size), mode);
+ }
+ catch (er) {
+ return oner(er);
+ }
+ const tx = this.transform ? this.transform(entry) || entry : entry;
+ if (tx !== entry) {
+ tx.on('error', (er) => this[ONERROR](er, entry));
+ entry.pipe(tx);
+ }
+ tx.on('data', (chunk) => {
+ try {
+ fs.writeSync(fd, chunk, 0, chunk.length);
+ }
+ catch (er) {
+ oner(er);
+ }
+ });
+ tx.on('end', () => {
+ let er = null;
+ // try both, falling futimes back to utimes
+ // if either fails, handle the first error
+ if (entry.mtime && !this.noMtime) {
+ const atime = entry.atime || new Date();
+ const mtime = entry.mtime;
+ try {
+ fs.futimesSync(fd, atime, mtime);
+ }
+ catch (futimeser) {
+ try {
+ fs.utimesSync(String(entry.absolute), atime, mtime);
+ }
+ catch (utimeser) {
+ er = futimeser;
+ }
+ }
+ }
+ if (this[DOCHOWN](entry)) {
+ const uid = this[UID](entry);
+ const gid = this[GID](entry);
+ try {
+ fs.fchownSync(fd, Number(uid), Number(gid));
+ }
+ catch (fchowner) {
+ try {
+ fs.chownSync(String(entry.absolute), Number(uid), Number(gid));
+ }
+ catch (chowner) {
+ er = er || fchowner;
+ }
+ }
+ }
+ oner(er);
+ });
+ }
+ [DIRECTORY](entry, done) {
+ const mode = typeof entry.mode === 'number' ?
+ entry.mode & 0o7777
+ : this.dmode;
+ const er = this[MKDIR](String(entry.absolute), mode);
+ if (er) {
+ this[ONERROR](er, entry);
+ done();
+ return;
+ }
+ if (entry.mtime && !this.noMtime) {
+ try {
+ fs.utimesSync(String(entry.absolute), entry.atime || new Date(), entry.mtime);
+ /* c8 ignore next */
+ }
+ catch (er) { }
+ }
+ if (this[DOCHOWN](entry)) {
+ try {
+ fs.chownSync(String(entry.absolute), Number(this[UID](entry)), Number(this[GID](entry)));
+ }
+ catch (er) { }
+ }
+ done();
+ entry.resume();
+ }
+ [MKDIR](dir, mode) {
+ try {
+ return mkdirSync(normalizeWindowsPath(dir), {
+ uid: this.uid,
+ gid: this.gid,
+ processUid: this.processUid,
+ processGid: this.processGid,
+ umask: this.processUmask,
+ preserve: this.preservePaths,
+ unlink: this.unlink,
+ cache: this.dirCache,
+ cwd: this.cwd,
+ mode: mode,
+ });
+ }
+ catch (er) {
+ return er;
+ }
+ }
+ [LINK](entry, linkpath, link, done) {
+ const ls = `${link}Sync`;
+ try {
+ fs[ls](linkpath, String(entry.absolute));
+ done();
+ entry.resume();
+ }
+ catch (er) {
+ return this[ONERROR](er, entry);
+ }
+ }
+}
+//# sourceMappingURL=unpack.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/update.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/update.js
new file mode 100644
index 00000000000..21398e97666
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/update.js
@@ -0,0 +1,30 @@
+// tar -u
+import { makeCommand } from './make-command.js';
+import { replace as r } from './replace.js';
+// just call tar.r with the filter and mtimeCache
+export const update = makeCommand(r.syncFile, r.asyncFile, r.syncNoFile, r.asyncNoFile, (opt, entries = []) => {
+ r.validate?.(opt, entries);
+ mtimeFilter(opt);
+});
+const mtimeFilter = (opt) => {
+ const filter = opt.filter;
+ if (!opt.mtimeCache) {
+ opt.mtimeCache = new Map();
+ }
+ opt.filter =
+ filter ?
+ (path, stat) => filter(path, stat) &&
+ !(
+ /* c8 ignore start */
+ ((opt.mtimeCache?.get(path) ?? stat.mtime ?? 0) >
+ (stat.mtime ?? 0))
+ /* c8 ignore stop */
+ )
+ : (path, stat) => !(
+ /* c8 ignore start */
+ ((opt.mtimeCache?.get(path) ?? stat.mtime ?? 0) >
+ (stat.mtime ?? 0))
+ /* c8 ignore stop */
+ );
+};
+//# sourceMappingURL=update.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/warn-method.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/warn-method.js
new file mode 100644
index 00000000000..13e798afefc
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/warn-method.js
@@ -0,0 +1,27 @@
+export const warnMethod = (self, code, message, data = {}) => {
+ if (self.file) {
+ data.file = self.file;
+ }
+ if (self.cwd) {
+ data.cwd = self.cwd;
+ }
+ data.code =
+ (message instanceof Error &&
+ message.code) ||
+ code;
+ data.tarCode = code;
+ if (!self.strict && data.recoverable !== false) {
+ if (message instanceof Error) {
+ data = Object.assign(message, data);
+ message = message.message;
+ }
+ self.emit('warn', code, message, data);
+ }
+ else if (message instanceof Error) {
+ self.emit('error', Object.assign(message, data));
+ }
+ else {
+ self.emit('error', Object.assign(new Error(`${code}: ${message}`), data));
+ }
+};
+//# sourceMappingURL=warn-method.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/winchars.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/winchars.js
new file mode 100644
index 00000000000..c41eb86d69a
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/winchars.js
@@ -0,0 +1,9 @@
+// When writing files on Windows, translate the characters to their
+// 0xf000 higher-encoded versions.
+const raw = ['|', '<', '>', '?', ':'];
+const win = raw.map(char => String.fromCharCode(0xf000 + char.charCodeAt(0)));
+const toWin = new Map(raw.map((char, i) => [char, win[i]]));
+const toRaw = new Map(win.map((char, i) => [char, raw[i]]));
+export const encode = (s) => raw.reduce((s, c) => s.split(c).join(toWin.get(c)), s);
+export const decode = (s) => win.reduce((s, c) => s.split(c).join(toRaw.get(c)), s);
+//# sourceMappingURL=winchars.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/write-entry.js b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/write-entry.js
new file mode 100644
index 00000000000..9028cd676b4
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/dist/esm/write-entry.js
@@ -0,0 +1,657 @@
+import fs from 'fs';
+import { Minipass } from 'minipass';
+import path from 'path';
+import { Header } from './header.js';
+import { modeFix } from './mode-fix.js';
+import { normalizeWindowsPath } from './normalize-windows-path.js';
+import { dealias, } from './options.js';
+import { Pax } from './pax.js';
+import { stripAbsolutePath } from './strip-absolute-path.js';
+import { stripTrailingSlashes } from './strip-trailing-slashes.js';
+import { warnMethod, } from './warn-method.js';
+import * as winchars from './winchars.js';
+const prefixPath = (path, prefix) => {
+ if (!prefix) {
+ return normalizeWindowsPath(path);
+ }
+ path = normalizeWindowsPath(path).replace(/^\.(\/|$)/, '');
+ return stripTrailingSlashes(prefix) + '/' + path;
+};
+const maxReadSize = 16 * 1024 * 1024;
+const PROCESS = Symbol('process');
+const FILE = Symbol('file');
+const DIRECTORY = Symbol('directory');
+const SYMLINK = Symbol('symlink');
+const HARDLINK = Symbol('hardlink');
+const HEADER = Symbol('header');
+const READ = Symbol('read');
+const LSTAT = Symbol('lstat');
+const ONLSTAT = Symbol('onlstat');
+const ONREAD = Symbol('onread');
+const ONREADLINK = Symbol('onreadlink');
+const OPENFILE = Symbol('openfile');
+const ONOPENFILE = Symbol('onopenfile');
+const CLOSE = Symbol('close');
+const MODE = Symbol('mode');
+const AWAITDRAIN = Symbol('awaitDrain');
+const ONDRAIN = Symbol('ondrain');
+const PREFIX = Symbol('prefix');
+export class WriteEntry extends Minipass {
+ path;
+ portable;
+ myuid = (process.getuid && process.getuid()) || 0;
+ // until node has builtin pwnam functions, this'll have to do
+ myuser = process.env.USER || '';
+ maxReadSize;
+ linkCache;
+ statCache;
+ preservePaths;
+ cwd;
+ strict;
+ mtime;
+ noPax;
+ noMtime;
+ prefix;
+ fd;
+ blockLen = 0;
+ blockRemain = 0;
+ buf;
+ pos = 0;
+ remain = 0;
+ length = 0;
+ offset = 0;
+ win32;
+ absolute;
+ header;
+ type;
+ linkpath;
+ stat;
+ onWriteEntry;
+ #hadError = false;
+ constructor(p, opt_ = {}) {
+ const opt = dealias(opt_);
+ super();
+ this.path = normalizeWindowsPath(p);
+ // suppress atime, ctime, uid, gid, uname, gname
+ this.portable = !!opt.portable;
+ this.maxReadSize = opt.maxReadSize || maxReadSize;
+ this.linkCache = opt.linkCache || new Map();
+ this.statCache = opt.statCache || new Map();
+ this.preservePaths = !!opt.preservePaths;
+ this.cwd = normalizeWindowsPath(opt.cwd || process.cwd());
+ this.strict = !!opt.strict;
+ this.noPax = !!opt.noPax;
+ this.noMtime = !!opt.noMtime;
+ this.mtime = opt.mtime;
+ this.prefix =
+ opt.prefix ? normalizeWindowsPath(opt.prefix) : undefined;
+ this.onWriteEntry = opt.onWriteEntry;
+ if (typeof opt.onwarn === 'function') {
+ this.on('warn', opt.onwarn);
+ }
+ let pathWarn = false;
+ if (!this.preservePaths) {
+ const [root, stripped] = stripAbsolutePath(this.path);
+ if (root && typeof stripped === 'string') {
+ this.path = stripped;
+ pathWarn = root;
+ }
+ }
+ this.win32 = !!opt.win32 || process.platform === 'win32';
+ if (this.win32) {
+ // force the \ to / normalization, since we might not *actually*
+ // be on windows, but want \ to be considered a path separator.
+ this.path = winchars.decode(this.path.replace(/\\/g, '/'));
+ p = p.replace(/\\/g, '/');
+ }
+ this.absolute = normalizeWindowsPath(opt.absolute || path.resolve(this.cwd, p));
+ if (this.path === '') {
+ this.path = './';
+ }
+ if (pathWarn) {
+ this.warn('TAR_ENTRY_INFO', `stripping ${pathWarn} from absolute path`, {
+ entry: this,
+ path: pathWarn + this.path,
+ });
+ }
+ const cs = this.statCache.get(this.absolute);
+ if (cs) {
+ this[ONLSTAT](cs);
+ }
+ else {
+ this[LSTAT]();
+ }
+ }
+ warn(code, message, data = {}) {
+ return warnMethod(this, code, message, data);
+ }
+ emit(ev, ...data) {
+ if (ev === 'error') {
+ this.#hadError = true;
+ }
+ return super.emit(ev, ...data);
+ }
+ [LSTAT]() {
+ fs.lstat(this.absolute, (er, stat) => {
+ if (er) {
+ return this.emit('error', er);
+ }
+ this[ONLSTAT](stat);
+ });
+ }
+ [ONLSTAT](stat) {
+ this.statCache.set(this.absolute, stat);
+ this.stat = stat;
+ if (!stat.isFile()) {
+ stat.size = 0;
+ }
+ this.type = getType(stat);
+ this.emit('stat', stat);
+ this[PROCESS]();
+ }
+ [PROCESS]() {
+ switch (this.type) {
+ case 'File':
+ return this[FILE]();
+ case 'Directory':
+ return this[DIRECTORY]();
+ case 'SymbolicLink':
+ return this[SYMLINK]();
+ // unsupported types are ignored.
+ default:
+ return this.end();
+ }
+ }
+ [MODE](mode) {
+ return modeFix(mode, this.type === 'Directory', this.portable);
+ }
+ [PREFIX](path) {
+ return prefixPath(path, this.prefix);
+ }
+ [HEADER]() {
+ /* c8 ignore start */
+ if (!this.stat) {
+ throw new Error('cannot write header before stat');
+ }
+ /* c8 ignore stop */
+ if (this.type === 'Directory' && this.portable) {
+ this.noMtime = true;
+ }
+ this.onWriteEntry?.(this);
+ this.header = new Header({
+ path: this[PREFIX](this.path),
+ // only apply the prefix to hard links.
+ linkpath: this.type === 'Link' && this.linkpath !== undefined ?
+ this[PREFIX](this.linkpath)
+ : this.linkpath,
+ // only the permissions and setuid/setgid/sticky bitflags
+ // not the higher-order bits that specify file type
+ mode: this[MODE](this.stat.mode),
+ uid: this.portable ? undefined : this.stat.uid,
+ gid: this.portable ? undefined : this.stat.gid,
+ size: this.stat.size,
+ mtime: this.noMtime ? undefined : this.mtime || this.stat.mtime,
+ /* c8 ignore next */
+ type: this.type === 'Unsupported' ? undefined : this.type,
+ uname: this.portable ? undefined
+ : this.stat.uid === this.myuid ? this.myuser
+ : '',
+ atime: this.portable ? undefined : this.stat.atime,
+ ctime: this.portable ? undefined : this.stat.ctime,
+ });
+ if (this.header.encode() && !this.noPax) {
+ super.write(new Pax({
+ atime: this.portable ? undefined : this.header.atime,
+ ctime: this.portable ? undefined : this.header.ctime,
+ gid: this.portable ? undefined : this.header.gid,
+ mtime: this.noMtime ? undefined : (this.mtime || this.header.mtime),
+ path: this[PREFIX](this.path),
+ linkpath: this.type === 'Link' && this.linkpath !== undefined ?
+ this[PREFIX](this.linkpath)
+ : this.linkpath,
+ size: this.header.size,
+ uid: this.portable ? undefined : this.header.uid,
+ uname: this.portable ? undefined : this.header.uname,
+ dev: this.portable ? undefined : this.stat.dev,
+ ino: this.portable ? undefined : this.stat.ino,
+ nlink: this.portable ? undefined : this.stat.nlink,
+ }).encode());
+ }
+ const block = this.header?.block;
+ /* c8 ignore start */
+ if (!block) {
+ throw new Error('failed to encode header');
+ }
+ /* c8 ignore stop */
+ super.write(block);
+ }
+ [DIRECTORY]() {
+ /* c8 ignore start */
+ if (!this.stat) {
+ throw new Error('cannot create directory entry without stat');
+ }
+ /* c8 ignore stop */
+ if (this.path.slice(-1) !== '/') {
+ this.path += '/';
+ }
+ this.stat.size = 0;
+ this[HEADER]();
+ this.end();
+ }
+ [SYMLINK]() {
+ fs.readlink(this.absolute, (er, linkpath) => {
+ if (er) {
+ return this.emit('error', er);
+ }
+ this[ONREADLINK](linkpath);
+ });
+ }
+ [ONREADLINK](linkpath) {
+ this.linkpath = normalizeWindowsPath(linkpath);
+ this[HEADER]();
+ this.end();
+ }
+ [HARDLINK](linkpath) {
+ /* c8 ignore start */
+ if (!this.stat) {
+ throw new Error('cannot create link entry without stat');
+ }
+ /* c8 ignore stop */
+ this.type = 'Link';
+ this.linkpath = normalizeWindowsPath(path.relative(this.cwd, linkpath));
+ this.stat.size = 0;
+ this[HEADER]();
+ this.end();
+ }
+ [FILE]() {
+ /* c8 ignore start */
+ if (!this.stat) {
+ throw new Error('cannot create file entry without stat');
+ }
+ /* c8 ignore stop */
+ if (this.stat.nlink > 1) {
+ const linkKey = `${this.stat.dev}:${this.stat.ino}`;
+ const linkpath = this.linkCache.get(linkKey);
+ if (linkpath?.indexOf(this.cwd) === 0) {
+ return this[HARDLINK](linkpath);
+ }
+ this.linkCache.set(linkKey, this.absolute);
+ }
+ this[HEADER]();
+ if (this.stat.size === 0) {
+ return this.end();
+ }
+ this[OPENFILE]();
+ }
+ [OPENFILE]() {
+ fs.open(this.absolute, 'r', (er, fd) => {
+ if (er) {
+ return this.emit('error', er);
+ }
+ this[ONOPENFILE](fd);
+ });
+ }
+ [ONOPENFILE](fd) {
+ this.fd = fd;
+ if (this.#hadError) {
+ return this[CLOSE]();
+ }
+ /* c8 ignore start */
+ if (!this.stat) {
+ throw new Error('should stat before calling onopenfile');
+ }
+ /* c8 ignore start */
+ this.blockLen = 512 * Math.ceil(this.stat.size / 512);
+ this.blockRemain = this.blockLen;
+ const bufLen = Math.min(this.blockLen, this.maxReadSize);
+ this.buf = Buffer.allocUnsafe(bufLen);
+ this.offset = 0;
+ this.pos = 0;
+ this.remain = this.stat.size;
+ this.length = this.buf.length;
+ this[READ]();
+ }
+ [READ]() {
+ const { fd, buf, offset, length, pos } = this;
+ if (fd === undefined || buf === undefined) {
+ throw new Error('cannot read file without first opening');
+ }
+ fs.read(fd, buf, offset, length, pos, (er, bytesRead) => {
+ if (er) {
+ // ignoring the error from close(2) is a bad practice, but at
+ // this point we already have an error, don't need another one
+ return this[CLOSE](() => this.emit('error', er));
+ }
+ this[ONREAD](bytesRead);
+ });
+ }
+ /* c8 ignore start */
+ [CLOSE](cb = () => { }) {
+ /* c8 ignore stop */
+ if (this.fd !== undefined)
+ fs.close(this.fd, cb);
+ }
+ [ONREAD](bytesRead) {
+ if (bytesRead <= 0 && this.remain > 0) {
+ const er = Object.assign(new Error('encountered unexpected EOF'), {
+ path: this.absolute,
+ syscall: 'read',
+ code: 'EOF',
+ });
+ return this[CLOSE](() => this.emit('error', er));
+ }
+ if (bytesRead > this.remain) {
+ const er = Object.assign(new Error('did not encounter expected EOF'), {
+ path: this.absolute,
+ syscall: 'read',
+ code: 'EOF',
+ });
+ return this[CLOSE](() => this.emit('error', er));
+ }
+ /* c8 ignore start */
+ if (!this.buf) {
+ throw new Error('should have created buffer prior to reading');
+ }
+ /* c8 ignore stop */
+ // null out the rest of the buffer, if we could fit the block padding
+ // at the end of this loop, we've incremented bytesRead and this.remain
+ // to be incremented up to the blockRemain level, as if we had expected
+ // to get a null-padded file, and read it until the end. then we will
+ // decrement both remain and blockRemain by bytesRead, and know that we
+ // reached the expected EOF, without any null buffer to append.
+ if (bytesRead === this.remain) {
+ for (let i = bytesRead; i < this.length && bytesRead < this.blockRemain; i++) {
+ this.buf[i + this.offset] = 0;
+ bytesRead++;
+ this.remain++;
+ }
+ }
+ const chunk = this.offset === 0 && bytesRead === this.buf.length ?
+ this.buf
+ : this.buf.subarray(this.offset, this.offset + bytesRead);
+ const flushed = this.write(chunk);
+ if (!flushed) {
+ this[AWAITDRAIN](() => this[ONDRAIN]());
+ }
+ else {
+ this[ONDRAIN]();
+ }
+ }
+ [AWAITDRAIN](cb) {
+ this.once('drain', cb);
+ }
+ write(chunk, encoding, cb) {
+ /* c8 ignore start - just junk to comply with NodeJS.WritableStream */
+ if (typeof encoding === 'function') {
+ cb = encoding;
+ encoding = undefined;
+ }
+ if (typeof chunk === 'string') {
+ chunk = Buffer.from(chunk, typeof encoding === 'string' ? encoding : 'utf8');
+ }
+ /* c8 ignore stop */
+ if (this.blockRemain < chunk.length) {
+ const er = Object.assign(new Error('writing more data than expected'), {
+ path: this.absolute,
+ });
+ return this.emit('error', er);
+ }
+ this.remain -= chunk.length;
+ this.blockRemain -= chunk.length;
+ this.pos += chunk.length;
+ this.offset += chunk.length;
+ return super.write(chunk, null, cb);
+ }
+ [ONDRAIN]() {
+ if (!this.remain) {
+ if (this.blockRemain) {
+ super.write(Buffer.alloc(this.blockRemain));
+ }
+ return this[CLOSE](er => er ? this.emit('error', er) : this.end());
+ }
+ /* c8 ignore start */
+ if (!this.buf) {
+ throw new Error('buffer lost somehow in ONDRAIN');
+ }
+ /* c8 ignore stop */
+ if (this.offset >= this.length) {
+ // if we only have a smaller bit left to read, alloc a smaller buffer
+ // otherwise, keep it the same length it was before.
+ this.buf = Buffer.allocUnsafe(Math.min(this.blockRemain, this.buf.length));
+ this.offset = 0;
+ }
+ this.length = this.buf.length - this.offset;
+ this[READ]();
+ }
+}
+export class WriteEntrySync extends WriteEntry {
+ sync = true;
+ [LSTAT]() {
+ this[ONLSTAT](fs.lstatSync(this.absolute));
+ }
+ [SYMLINK]() {
+ this[ONREADLINK](fs.readlinkSync(this.absolute));
+ }
+ [OPENFILE]() {
+ this[ONOPENFILE](fs.openSync(this.absolute, 'r'));
+ }
+ [READ]() {
+ let threw = true;
+ try {
+ const { fd, buf, offset, length, pos } = this;
+ /* c8 ignore start */
+ if (fd === undefined || buf === undefined) {
+ throw new Error('fd and buf must be set in READ method');
+ }
+ /* c8 ignore stop */
+ const bytesRead = fs.readSync(fd, buf, offset, length, pos);
+ this[ONREAD](bytesRead);
+ threw = false;
+ }
+ finally {
+ // ignoring the error from close(2) is a bad practice, but at
+ // this point we already have an error, don't need another one
+ if (threw) {
+ try {
+ this[CLOSE](() => { });
+ }
+ catch (er) { }
+ }
+ }
+ }
+ [AWAITDRAIN](cb) {
+ cb();
+ }
+ /* c8 ignore start */
+ [CLOSE](cb = () => { }) {
+ /* c8 ignore stop */
+ if (this.fd !== undefined)
+ fs.closeSync(this.fd);
+ cb();
+ }
+}
+export class WriteEntryTar extends Minipass {
+ blockLen = 0;
+ blockRemain = 0;
+ buf = 0;
+ pos = 0;
+ remain = 0;
+ length = 0;
+ preservePaths;
+ portable;
+ strict;
+ noPax;
+ noMtime;
+ readEntry;
+ type;
+ prefix;
+ path;
+ mode;
+ uid;
+ gid;
+ uname;
+ gname;
+ header;
+ mtime;
+ atime;
+ ctime;
+ linkpath;
+ size;
+ onWriteEntry;
+ warn(code, message, data = {}) {
+ return warnMethod(this, code, message, data);
+ }
+ constructor(readEntry, opt_ = {}) {
+ const opt = dealias(opt_);
+ super();
+ this.preservePaths = !!opt.preservePaths;
+ this.portable = !!opt.portable;
+ this.strict = !!opt.strict;
+ this.noPax = !!opt.noPax;
+ this.noMtime = !!opt.noMtime;
+ this.onWriteEntry = opt.onWriteEntry;
+ this.readEntry = readEntry;
+ const { type } = readEntry;
+ /* c8 ignore start */
+ if (type === 'Unsupported') {
+ throw new Error('writing entry that should be ignored');
+ }
+ /* c8 ignore stop */
+ this.type = type;
+ if (this.type === 'Directory' && this.portable) {
+ this.noMtime = true;
+ }
+ this.prefix = opt.prefix;
+ this.path = normalizeWindowsPath(readEntry.path);
+ this.mode =
+ readEntry.mode !== undefined ?
+ this[MODE](readEntry.mode)
+ : undefined;
+ this.uid = this.portable ? undefined : readEntry.uid;
+ this.gid = this.portable ? undefined : readEntry.gid;
+ this.uname = this.portable ? undefined : readEntry.uname;
+ this.gname = this.portable ? undefined : readEntry.gname;
+ this.size = readEntry.size;
+ this.mtime =
+ this.noMtime ? undefined : opt.mtime || readEntry.mtime;
+ this.atime = this.portable ? undefined : readEntry.atime;
+ this.ctime = this.portable ? undefined : readEntry.ctime;
+ this.linkpath =
+ readEntry.linkpath !== undefined ?
+ normalizeWindowsPath(readEntry.linkpath)
+ : undefined;
+ if (typeof opt.onwarn === 'function') {
+ this.on('warn', opt.onwarn);
+ }
+ let pathWarn = false;
+ if (!this.preservePaths) {
+ const [root, stripped] = stripAbsolutePath(this.path);
+ if (root && typeof stripped === 'string') {
+ this.path = stripped;
+ pathWarn = root;
+ }
+ }
+ this.remain = readEntry.size;
+ this.blockRemain = readEntry.startBlockSize;
+ this.onWriteEntry?.(this);
+ this.header = new Header({
+ path: this[PREFIX](this.path),
+ linkpath: this.type === 'Link' && this.linkpath !== undefined ?
+ this[PREFIX](this.linkpath)
+ : this.linkpath,
+ // only the permissions and setuid/setgid/sticky bitflags
+ // not the higher-order bits that specify file type
+ mode: this.mode,
+ uid: this.portable ? undefined : this.uid,
+ gid: this.portable ? undefined : this.gid,
+ size: this.size,
+ mtime: this.noMtime ? undefined : this.mtime,
+ type: this.type,
+ uname: this.portable ? undefined : this.uname,
+ atime: this.portable ? undefined : this.atime,
+ ctime: this.portable ? undefined : this.ctime,
+ });
+ if (pathWarn) {
+ this.warn('TAR_ENTRY_INFO', `stripping ${pathWarn} from absolute path`, {
+ entry: this,
+ path: pathWarn + this.path,
+ });
+ }
+ if (this.header.encode() && !this.noPax) {
+ super.write(new Pax({
+ atime: this.portable ? undefined : this.atime,
+ ctime: this.portable ? undefined : this.ctime,
+ gid: this.portable ? undefined : this.gid,
+ mtime: this.noMtime ? undefined : this.mtime,
+ path: this[PREFIX](this.path),
+ linkpath: this.type === 'Link' && this.linkpath !== undefined ?
+ this[PREFIX](this.linkpath)
+ : this.linkpath,
+ size: this.size,
+ uid: this.portable ? undefined : this.uid,
+ uname: this.portable ? undefined : this.uname,
+ dev: this.portable ? undefined : this.readEntry.dev,
+ ino: this.portable ? undefined : this.readEntry.ino,
+ nlink: this.portable ? undefined : this.readEntry.nlink,
+ }).encode());
+ }
+ const b = this.header?.block;
+ /* c8 ignore start */
+ if (!b)
+ throw new Error('failed to encode header');
+ /* c8 ignore stop */
+ super.write(b);
+ readEntry.pipe(this);
+ }
+ [PREFIX](path) {
+ return prefixPath(path, this.prefix);
+ }
+ [MODE](mode) {
+ return modeFix(mode, this.type === 'Directory', this.portable);
+ }
+ write(chunk, encoding, cb) {
+ /* c8 ignore start - just junk to comply with NodeJS.WritableStream */
+ if (typeof encoding === 'function') {
+ cb = encoding;
+ encoding = undefined;
+ }
+ if (typeof chunk === 'string') {
+ chunk = Buffer.from(chunk, typeof encoding === 'string' ? encoding : 'utf8');
+ }
+ /* c8 ignore stop */
+ const writeLen = chunk.length;
+ if (writeLen > this.blockRemain) {
+ throw new Error('writing more to entry than is appropriate');
+ }
+ this.blockRemain -= writeLen;
+ return super.write(chunk, cb);
+ }
+ end(chunk, encoding, cb) {
+ if (this.blockRemain) {
+ super.write(Buffer.alloc(this.blockRemain));
+ }
+ /* c8 ignore start - just junk to comply with NodeJS.WritableStream */
+ if (typeof chunk === 'function') {
+ cb = chunk;
+ encoding = undefined;
+ chunk = undefined;
+ }
+ if (typeof encoding === 'function') {
+ cb = encoding;
+ encoding = undefined;
+ }
+ if (typeof chunk === 'string') {
+ chunk = Buffer.from(chunk, encoding ?? 'utf8');
+ }
+ if (cb)
+ this.once('finish', cb);
+ chunk ? super.end(chunk, cb) : super.end(cb);
+ /* c8 ignore stop */
+ return this;
+ }
+}
+const getType = (stat) => stat.isFile() ? 'File'
+ : stat.isDirectory() ? 'Directory'
+ : stat.isSymbolicLink() ? 'SymbolicLink'
+ : 'Unsupported';
+//# sourceMappingURL=write-entry.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/tar/package.json b/deps/npm/node_modules/cacache/node_modules/tar/package.json
new file mode 100644
index 00000000000..0283103ee9e
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/tar/package.json
@@ -0,0 +1,325 @@
+{
+ "author": "Isaac Z. Schlueter",
+ "name": "tar",
+ "description": "tar for node",
+ "version": "7.4.3",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/isaacs/node-tar.git"
+ },
+ "scripts": {
+ "genparse": "node scripts/generate-parse-fixtures.js",
+ "snap": "tap",
+ "test": "tap",
+ "pretest": "npm run prepare",
+ "presnap": "npm run prepare",
+ "prepare": "tshy",
+ "preversion": "npm test",
+ "postversion": "npm publish",
+ "prepublishOnly": "git push origin --follow-tags",
+ "format": "prettier --write . --log-level warn",
+ "typedoc": "typedoc --tsconfig .tshy/esm.json ./src/*.ts"
+ },
+ "dependencies": {
+ "@isaacs/fs-minipass": "^4.0.0",
+ "chownr": "^3.0.0",
+ "minipass": "^7.1.2",
+ "minizlib": "^3.0.1",
+ "mkdirp": "^3.0.1",
+ "yallist": "^5.0.0"
+ },
+ "devDependencies": {
+ "chmodr": "^1.2.0",
+ "end-of-stream": "^1.4.3",
+ "events-to-array": "^2.0.3",
+ "mutate-fs": "^2.1.1",
+ "nock": "^13.5.4",
+ "prettier": "^3.2.5",
+ "rimraf": "^5.0.5",
+ "tap": "^18.7.2",
+ "tshy": "^1.13.1",
+ "typedoc": "^0.25.13"
+ },
+ "license": "ISC",
+ "engines": {
+ "node": ">=18"
+ },
+ "files": [
+ "dist"
+ ],
+ "tap": {
+ "coverage-map": "map.js",
+ "timeout": 0,
+ "typecheck": true
+ },
+ "prettier": {
+ "experimentalTernaries": true,
+ "semi": false,
+ "printWidth": 70,
+ "tabWidth": 2,
+ "useTabs": false,
+ "singleQuote": true,
+ "jsxSingleQuote": false,
+ "bracketSameLine": true,
+ "arrowParens": "avoid",
+ "endOfLine": "lf"
+ },
+ "tshy": {
+ "exports": {
+ "./package.json": "./package.json",
+ ".": "./src/index.ts",
+ "./c": "./src/create.ts",
+ "./create": "./src/create.ts",
+ "./replace": "./src/create.ts",
+ "./r": "./src/create.ts",
+ "./list": "./src/list.ts",
+ "./t": "./src/list.ts",
+ "./update": "./src/update.ts",
+ "./u": "./src/update.ts",
+ "./extract": "./src/extract.ts",
+ "./x": "./src/extract.ts",
+ "./pack": "./src/pack.ts",
+ "./unpack": "./src/unpack.ts",
+ "./parse": "./src/parse.ts",
+ "./read-entry": "./src/read-entry.ts",
+ "./write-entry": "./src/write-entry.ts",
+ "./header": "./src/header.ts",
+ "./pax": "./src/pax.ts",
+ "./types": "./src/types.ts"
+ }
+ },
+ "exports": {
+ "./package.json": "./package.json",
+ ".": {
+ "import": {
+ "source": "./src/index.ts",
+ "types": "./dist/esm/index.d.ts",
+ "default": "./dist/esm/index.js"
+ },
+ "require": {
+ "source": "./src/index.ts",
+ "types": "./dist/commonjs/index.d.ts",
+ "default": "./dist/commonjs/index.js"
+ }
+ },
+ "./c": {
+ "import": {
+ "source": "./src/create.ts",
+ "types": "./dist/esm/create.d.ts",
+ "default": "./dist/esm/create.js"
+ },
+ "require": {
+ "source": "./src/create.ts",
+ "types": "./dist/commonjs/create.d.ts",
+ "default": "./dist/commonjs/create.js"
+ }
+ },
+ "./create": {
+ "import": {
+ "source": "./src/create.ts",
+ "types": "./dist/esm/create.d.ts",
+ "default": "./dist/esm/create.js"
+ },
+ "require": {
+ "source": "./src/create.ts",
+ "types": "./dist/commonjs/create.d.ts",
+ "default": "./dist/commonjs/create.js"
+ }
+ },
+ "./replace": {
+ "import": {
+ "source": "./src/create.ts",
+ "types": "./dist/esm/create.d.ts",
+ "default": "./dist/esm/create.js"
+ },
+ "require": {
+ "source": "./src/create.ts",
+ "types": "./dist/commonjs/create.d.ts",
+ "default": "./dist/commonjs/create.js"
+ }
+ },
+ "./r": {
+ "import": {
+ "source": "./src/create.ts",
+ "types": "./dist/esm/create.d.ts",
+ "default": "./dist/esm/create.js"
+ },
+ "require": {
+ "source": "./src/create.ts",
+ "types": "./dist/commonjs/create.d.ts",
+ "default": "./dist/commonjs/create.js"
+ }
+ },
+ "./list": {
+ "import": {
+ "source": "./src/list.ts",
+ "types": "./dist/esm/list.d.ts",
+ "default": "./dist/esm/list.js"
+ },
+ "require": {
+ "source": "./src/list.ts",
+ "types": "./dist/commonjs/list.d.ts",
+ "default": "./dist/commonjs/list.js"
+ }
+ },
+ "./t": {
+ "import": {
+ "source": "./src/list.ts",
+ "types": "./dist/esm/list.d.ts",
+ "default": "./dist/esm/list.js"
+ },
+ "require": {
+ "source": "./src/list.ts",
+ "types": "./dist/commonjs/list.d.ts",
+ "default": "./dist/commonjs/list.js"
+ }
+ },
+ "./update": {
+ "import": {
+ "source": "./src/update.ts",
+ "types": "./dist/esm/update.d.ts",
+ "default": "./dist/esm/update.js"
+ },
+ "require": {
+ "source": "./src/update.ts",
+ "types": "./dist/commonjs/update.d.ts",
+ "default": "./dist/commonjs/update.js"
+ }
+ },
+ "./u": {
+ "import": {
+ "source": "./src/update.ts",
+ "types": "./dist/esm/update.d.ts",
+ "default": "./dist/esm/update.js"
+ },
+ "require": {
+ "source": "./src/update.ts",
+ "types": "./dist/commonjs/update.d.ts",
+ "default": "./dist/commonjs/update.js"
+ }
+ },
+ "./extract": {
+ "import": {
+ "source": "./src/extract.ts",
+ "types": "./dist/esm/extract.d.ts",
+ "default": "./dist/esm/extract.js"
+ },
+ "require": {
+ "source": "./src/extract.ts",
+ "types": "./dist/commonjs/extract.d.ts",
+ "default": "./dist/commonjs/extract.js"
+ }
+ },
+ "./x": {
+ "import": {
+ "source": "./src/extract.ts",
+ "types": "./dist/esm/extract.d.ts",
+ "default": "./dist/esm/extract.js"
+ },
+ "require": {
+ "source": "./src/extract.ts",
+ "types": "./dist/commonjs/extract.d.ts",
+ "default": "./dist/commonjs/extract.js"
+ }
+ },
+ "./pack": {
+ "import": {
+ "source": "./src/pack.ts",
+ "types": "./dist/esm/pack.d.ts",
+ "default": "./dist/esm/pack.js"
+ },
+ "require": {
+ "source": "./src/pack.ts",
+ "types": "./dist/commonjs/pack.d.ts",
+ "default": "./dist/commonjs/pack.js"
+ }
+ },
+ "./unpack": {
+ "import": {
+ "source": "./src/unpack.ts",
+ "types": "./dist/esm/unpack.d.ts",
+ "default": "./dist/esm/unpack.js"
+ },
+ "require": {
+ "source": "./src/unpack.ts",
+ "types": "./dist/commonjs/unpack.d.ts",
+ "default": "./dist/commonjs/unpack.js"
+ }
+ },
+ "./parse": {
+ "import": {
+ "source": "./src/parse.ts",
+ "types": "./dist/esm/parse.d.ts",
+ "default": "./dist/esm/parse.js"
+ },
+ "require": {
+ "source": "./src/parse.ts",
+ "types": "./dist/commonjs/parse.d.ts",
+ "default": "./dist/commonjs/parse.js"
+ }
+ },
+ "./read-entry": {
+ "import": {
+ "source": "./src/read-entry.ts",
+ "types": "./dist/esm/read-entry.d.ts",
+ "default": "./dist/esm/read-entry.js"
+ },
+ "require": {
+ "source": "./src/read-entry.ts",
+ "types": "./dist/commonjs/read-entry.d.ts",
+ "default": "./dist/commonjs/read-entry.js"
+ }
+ },
+ "./write-entry": {
+ "import": {
+ "source": "./src/write-entry.ts",
+ "types": "./dist/esm/write-entry.d.ts",
+ "default": "./dist/esm/write-entry.js"
+ },
+ "require": {
+ "source": "./src/write-entry.ts",
+ "types": "./dist/commonjs/write-entry.d.ts",
+ "default": "./dist/commonjs/write-entry.js"
+ }
+ },
+ "./header": {
+ "import": {
+ "source": "./src/header.ts",
+ "types": "./dist/esm/header.d.ts",
+ "default": "./dist/esm/header.js"
+ },
+ "require": {
+ "source": "./src/header.ts",
+ "types": "./dist/commonjs/header.d.ts",
+ "default": "./dist/commonjs/header.js"
+ }
+ },
+ "./pax": {
+ "import": {
+ "source": "./src/pax.ts",
+ "types": "./dist/esm/pax.d.ts",
+ "default": "./dist/esm/pax.js"
+ },
+ "require": {
+ "source": "./src/pax.ts",
+ "types": "./dist/commonjs/pax.d.ts",
+ "default": "./dist/commonjs/pax.js"
+ }
+ },
+ "./types": {
+ "import": {
+ "source": "./src/types.ts",
+ "types": "./dist/esm/types.d.ts",
+ "default": "./dist/esm/types.js"
+ },
+ "require": {
+ "source": "./src/types.ts",
+ "types": "./dist/commonjs/types.d.ts",
+ "default": "./dist/commonjs/types.js"
+ }
+ }
+ },
+ "type": "module",
+ "main": "./dist/commonjs/index.js",
+ "types": "./dist/commonjs/index.d.ts"
+}
diff --git a/deps/npm/node_modules/cacache/node_modules/yallist/LICENSE.md b/deps/npm/node_modules/cacache/node_modules/yallist/LICENSE.md
new file mode 100644
index 00000000000..881248b6d7f
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/yallist/LICENSE.md
@@ -0,0 +1,63 @@
+All packages under `src/` are licensed according to the terms in
+their respective `LICENSE` or `LICENSE.md` files.
+
+The remainder of this project is licensed under the Blue Oak
+Model License, as follows:
+
+-----
+
+# Blue Oak Model License
+
+Version 1.0.0
+
+## Purpose
+
+This license gives everyone as much permission to work with
+this software as possible, while protecting contributors
+from liability.
+
+## Acceptance
+
+In order to receive this license, you must agree to its
+rules. The rules of this license are both obligations
+under that agreement and conditions to your license.
+You must not do anything with this software that triggers
+a rule that you cannot or will not follow.
+
+## Copyright
+
+Each contributor licenses you to do everything with this
+software that would otherwise infringe that contributor's
+copyright in it.
+
+## Notices
+
+You must ensure that everyone who gets a copy of
+any part of this software from you, with or without
+changes, also gets the text of this license or a link to
+.
+
+## Excuse
+
+If anyone notifies you in writing that you have not
+complied with [Notices](#notices), you can keep your
+license by taking all practical steps to comply within 30
+days after the notice. If you do not do so, your license
+ends immediately.
+
+## Patent
+
+Each contributor licenses you to do everything with this
+software that would otherwise infringe any patent claims
+they can license or become able to license.
+
+## Reliability
+
+No contributor can revoke this license.
+
+## No Liability
+
+***As far as the law allows, this software comes as is,
+without any warranty or condition, and no contributor
+will be liable to anyone for any damages related to this
+software or this license, under any kind of legal claim.***
diff --git a/deps/npm/node_modules/cacache/node_modules/yallist/dist/commonjs/index.js b/deps/npm/node_modules/cacache/node_modules/yallist/dist/commonjs/index.js
new file mode 100644
index 00000000000..c1e1e474168
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/yallist/dist/commonjs/index.js
@@ -0,0 +1,384 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Node = exports.Yallist = void 0;
+class Yallist {
+ tail;
+ head;
+ length = 0;
+ static create(list = []) {
+ return new Yallist(list);
+ }
+ constructor(list = []) {
+ for (const item of list) {
+ this.push(item);
+ }
+ }
+ *[Symbol.iterator]() {
+ for (let walker = this.head; walker; walker = walker.next) {
+ yield walker.value;
+ }
+ }
+ removeNode(node) {
+ if (node.list !== this) {
+ throw new Error('removing node which does not belong to this list');
+ }
+ const next = node.next;
+ const prev = node.prev;
+ if (next) {
+ next.prev = prev;
+ }
+ if (prev) {
+ prev.next = next;
+ }
+ if (node === this.head) {
+ this.head = next;
+ }
+ if (node === this.tail) {
+ this.tail = prev;
+ }
+ this.length--;
+ node.next = undefined;
+ node.prev = undefined;
+ node.list = undefined;
+ return next;
+ }
+ unshiftNode(node) {
+ if (node === this.head) {
+ return;
+ }
+ if (node.list) {
+ node.list.removeNode(node);
+ }
+ const head = this.head;
+ node.list = this;
+ node.next = head;
+ if (head) {
+ head.prev = node;
+ }
+ this.head = node;
+ if (!this.tail) {
+ this.tail = node;
+ }
+ this.length++;
+ }
+ pushNode(node) {
+ if (node === this.tail) {
+ return;
+ }
+ if (node.list) {
+ node.list.removeNode(node);
+ }
+ const tail = this.tail;
+ node.list = this;
+ node.prev = tail;
+ if (tail) {
+ tail.next = node;
+ }
+ this.tail = node;
+ if (!this.head) {
+ this.head = node;
+ }
+ this.length++;
+ }
+ push(...args) {
+ for (let i = 0, l = args.length; i < l; i++) {
+ push(this, args[i]);
+ }
+ return this.length;
+ }
+ unshift(...args) {
+ for (var i = 0, l = args.length; i < l; i++) {
+ unshift(this, args[i]);
+ }
+ return this.length;
+ }
+ pop() {
+ if (!this.tail) {
+ return undefined;
+ }
+ const res = this.tail.value;
+ const t = this.tail;
+ this.tail = this.tail.prev;
+ if (this.tail) {
+ this.tail.next = undefined;
+ }
+ else {
+ this.head = undefined;
+ }
+ t.list = undefined;
+ this.length--;
+ return res;
+ }
+ shift() {
+ if (!this.head) {
+ return undefined;
+ }
+ const res = this.head.value;
+ const h = this.head;
+ this.head = this.head.next;
+ if (this.head) {
+ this.head.prev = undefined;
+ }
+ else {
+ this.tail = undefined;
+ }
+ h.list = undefined;
+ this.length--;
+ return res;
+ }
+ forEach(fn, thisp) {
+ thisp = thisp || this;
+ for (let walker = this.head, i = 0; !!walker; i++) {
+ fn.call(thisp, walker.value, i, this);
+ walker = walker.next;
+ }
+ }
+ forEachReverse(fn, thisp) {
+ thisp = thisp || this;
+ for (let walker = this.tail, i = this.length - 1; !!walker; i--) {
+ fn.call(thisp, walker.value, i, this);
+ walker = walker.prev;
+ }
+ }
+ get(n) {
+ let i = 0;
+ let walker = this.head;
+ for (; !!walker && i < n; i++) {
+ walker = walker.next;
+ }
+ if (i === n && !!walker) {
+ return walker.value;
+ }
+ }
+ getReverse(n) {
+ let i = 0;
+ let walker = this.tail;
+ for (; !!walker && i < n; i++) {
+ // abort out of the list early if we hit a cycle
+ walker = walker.prev;
+ }
+ if (i === n && !!walker) {
+ return walker.value;
+ }
+ }
+ map(fn, thisp) {
+ thisp = thisp || this;
+ const res = new Yallist();
+ for (let walker = this.head; !!walker;) {
+ res.push(fn.call(thisp, walker.value, this));
+ walker = walker.next;
+ }
+ return res;
+ }
+ mapReverse(fn, thisp) {
+ thisp = thisp || this;
+ var res = new Yallist();
+ for (let walker = this.tail; !!walker;) {
+ res.push(fn.call(thisp, walker.value, this));
+ walker = walker.prev;
+ }
+ return res;
+ }
+ reduce(fn, initial) {
+ let acc;
+ let walker = this.head;
+ if (arguments.length > 1) {
+ acc = initial;
+ }
+ else if (this.head) {
+ walker = this.head.next;
+ acc = this.head.value;
+ }
+ else {
+ throw new TypeError('Reduce of empty list with no initial value');
+ }
+ for (var i = 0; !!walker; i++) {
+ acc = fn(acc, walker.value, i);
+ walker = walker.next;
+ }
+ return acc;
+ }
+ reduceReverse(fn, initial) {
+ let acc;
+ let walker = this.tail;
+ if (arguments.length > 1) {
+ acc = initial;
+ }
+ else if (this.tail) {
+ walker = this.tail.prev;
+ acc = this.tail.value;
+ }
+ else {
+ throw new TypeError('Reduce of empty list with no initial value');
+ }
+ for (let i = this.length - 1; !!walker; i--) {
+ acc = fn(acc, walker.value, i);
+ walker = walker.prev;
+ }
+ return acc;
+ }
+ toArray() {
+ const arr = new Array(this.length);
+ for (let i = 0, walker = this.head; !!walker; i++) {
+ arr[i] = walker.value;
+ walker = walker.next;
+ }
+ return arr;
+ }
+ toArrayReverse() {
+ const arr = new Array(this.length);
+ for (let i = 0, walker = this.tail; !!walker; i++) {
+ arr[i] = walker.value;
+ walker = walker.prev;
+ }
+ return arr;
+ }
+ slice(from = 0, to = this.length) {
+ if (to < 0) {
+ to += this.length;
+ }
+ if (from < 0) {
+ from += this.length;
+ }
+ const ret = new Yallist();
+ if (to < from || to < 0) {
+ return ret;
+ }
+ if (from < 0) {
+ from = 0;
+ }
+ if (to > this.length) {
+ to = this.length;
+ }
+ let walker = this.head;
+ let i = 0;
+ for (i = 0; !!walker && i < from; i++) {
+ walker = walker.next;
+ }
+ for (; !!walker && i < to; i++, walker = walker.next) {
+ ret.push(walker.value);
+ }
+ return ret;
+ }
+ sliceReverse(from = 0, to = this.length) {
+ if (to < 0) {
+ to += this.length;
+ }
+ if (from < 0) {
+ from += this.length;
+ }
+ const ret = new Yallist();
+ if (to < from || to < 0) {
+ return ret;
+ }
+ if (from < 0) {
+ from = 0;
+ }
+ if (to > this.length) {
+ to = this.length;
+ }
+ let i = this.length;
+ let walker = this.tail;
+ for (; !!walker && i > to; i--) {
+ walker = walker.prev;
+ }
+ for (; !!walker && i > from; i--, walker = walker.prev) {
+ ret.push(walker.value);
+ }
+ return ret;
+ }
+ splice(start, deleteCount = 0, ...nodes) {
+ if (start > this.length) {
+ start = this.length - 1;
+ }
+ if (start < 0) {
+ start = this.length + start;
+ }
+ let walker = this.head;
+ for (let i = 0; !!walker && i < start; i++) {
+ walker = walker.next;
+ }
+ const ret = [];
+ for (let i = 0; !!walker && i < deleteCount; i++) {
+ ret.push(walker.value);
+ walker = this.removeNode(walker);
+ }
+ if (!walker) {
+ walker = this.tail;
+ }
+ else if (walker !== this.tail) {
+ walker = walker.prev;
+ }
+ for (const v of nodes) {
+ walker = insertAfter(this, walker, v);
+ }
+ return ret;
+ }
+ reverse() {
+ const head = this.head;
+ const tail = this.tail;
+ for (let walker = head; !!walker; walker = walker.prev) {
+ const p = walker.prev;
+ walker.prev = walker.next;
+ walker.next = p;
+ }
+ this.head = tail;
+ this.tail = head;
+ return this;
+ }
+}
+exports.Yallist = Yallist;
+// insertAfter undefined means "make the node the new head of list"
+function insertAfter(self, node, value) {
+ const prev = node;
+ const next = node ? node.next : self.head;
+ const inserted = new Node(value, prev, next, self);
+ if (inserted.next === undefined) {
+ self.tail = inserted;
+ }
+ if (inserted.prev === undefined) {
+ self.head = inserted;
+ }
+ self.length++;
+ return inserted;
+}
+function push(self, item) {
+ self.tail = new Node(item, self.tail, undefined, self);
+ if (!self.head) {
+ self.head = self.tail;
+ }
+ self.length++;
+}
+function unshift(self, item) {
+ self.head = new Node(item, undefined, self.head, self);
+ if (!self.tail) {
+ self.tail = self.head;
+ }
+ self.length++;
+}
+class Node {
+ list;
+ next;
+ prev;
+ value;
+ constructor(value, prev, next, list) {
+ this.list = list;
+ this.value = value;
+ if (prev) {
+ prev.next = this;
+ this.prev = prev;
+ }
+ else {
+ this.prev = undefined;
+ }
+ if (next) {
+ next.prev = this;
+ this.next = next;
+ }
+ else {
+ this.next = undefined;
+ }
+ }
+}
+exports.Node = Node;
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/yallist/dist/commonjs/package.json b/deps/npm/node_modules/cacache/node_modules/yallist/dist/commonjs/package.json
new file mode 100644
index 00000000000..5bbefffbabe
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/yallist/dist/commonjs/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "commonjs"
+}
diff --git a/deps/npm/node_modules/cacache/node_modules/yallist/dist/esm/index.js b/deps/npm/node_modules/cacache/node_modules/yallist/dist/esm/index.js
new file mode 100644
index 00000000000..3d81c5113b9
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/yallist/dist/esm/index.js
@@ -0,0 +1,379 @@
+export class Yallist {
+ tail;
+ head;
+ length = 0;
+ static create(list = []) {
+ return new Yallist(list);
+ }
+ constructor(list = []) {
+ for (const item of list) {
+ this.push(item);
+ }
+ }
+ *[Symbol.iterator]() {
+ for (let walker = this.head; walker; walker = walker.next) {
+ yield walker.value;
+ }
+ }
+ removeNode(node) {
+ if (node.list !== this) {
+ throw new Error('removing node which does not belong to this list');
+ }
+ const next = node.next;
+ const prev = node.prev;
+ if (next) {
+ next.prev = prev;
+ }
+ if (prev) {
+ prev.next = next;
+ }
+ if (node === this.head) {
+ this.head = next;
+ }
+ if (node === this.tail) {
+ this.tail = prev;
+ }
+ this.length--;
+ node.next = undefined;
+ node.prev = undefined;
+ node.list = undefined;
+ return next;
+ }
+ unshiftNode(node) {
+ if (node === this.head) {
+ return;
+ }
+ if (node.list) {
+ node.list.removeNode(node);
+ }
+ const head = this.head;
+ node.list = this;
+ node.next = head;
+ if (head) {
+ head.prev = node;
+ }
+ this.head = node;
+ if (!this.tail) {
+ this.tail = node;
+ }
+ this.length++;
+ }
+ pushNode(node) {
+ if (node === this.tail) {
+ return;
+ }
+ if (node.list) {
+ node.list.removeNode(node);
+ }
+ const tail = this.tail;
+ node.list = this;
+ node.prev = tail;
+ if (tail) {
+ tail.next = node;
+ }
+ this.tail = node;
+ if (!this.head) {
+ this.head = node;
+ }
+ this.length++;
+ }
+ push(...args) {
+ for (let i = 0, l = args.length; i < l; i++) {
+ push(this, args[i]);
+ }
+ return this.length;
+ }
+ unshift(...args) {
+ for (var i = 0, l = args.length; i < l; i++) {
+ unshift(this, args[i]);
+ }
+ return this.length;
+ }
+ pop() {
+ if (!this.tail) {
+ return undefined;
+ }
+ const res = this.tail.value;
+ const t = this.tail;
+ this.tail = this.tail.prev;
+ if (this.tail) {
+ this.tail.next = undefined;
+ }
+ else {
+ this.head = undefined;
+ }
+ t.list = undefined;
+ this.length--;
+ return res;
+ }
+ shift() {
+ if (!this.head) {
+ return undefined;
+ }
+ const res = this.head.value;
+ const h = this.head;
+ this.head = this.head.next;
+ if (this.head) {
+ this.head.prev = undefined;
+ }
+ else {
+ this.tail = undefined;
+ }
+ h.list = undefined;
+ this.length--;
+ return res;
+ }
+ forEach(fn, thisp) {
+ thisp = thisp || this;
+ for (let walker = this.head, i = 0; !!walker; i++) {
+ fn.call(thisp, walker.value, i, this);
+ walker = walker.next;
+ }
+ }
+ forEachReverse(fn, thisp) {
+ thisp = thisp || this;
+ for (let walker = this.tail, i = this.length - 1; !!walker; i--) {
+ fn.call(thisp, walker.value, i, this);
+ walker = walker.prev;
+ }
+ }
+ get(n) {
+ let i = 0;
+ let walker = this.head;
+ for (; !!walker && i < n; i++) {
+ walker = walker.next;
+ }
+ if (i === n && !!walker) {
+ return walker.value;
+ }
+ }
+ getReverse(n) {
+ let i = 0;
+ let walker = this.tail;
+ for (; !!walker && i < n; i++) {
+ // abort out of the list early if we hit a cycle
+ walker = walker.prev;
+ }
+ if (i === n && !!walker) {
+ return walker.value;
+ }
+ }
+ map(fn, thisp) {
+ thisp = thisp || this;
+ const res = new Yallist();
+ for (let walker = this.head; !!walker;) {
+ res.push(fn.call(thisp, walker.value, this));
+ walker = walker.next;
+ }
+ return res;
+ }
+ mapReverse(fn, thisp) {
+ thisp = thisp || this;
+ var res = new Yallist();
+ for (let walker = this.tail; !!walker;) {
+ res.push(fn.call(thisp, walker.value, this));
+ walker = walker.prev;
+ }
+ return res;
+ }
+ reduce(fn, initial) {
+ let acc;
+ let walker = this.head;
+ if (arguments.length > 1) {
+ acc = initial;
+ }
+ else if (this.head) {
+ walker = this.head.next;
+ acc = this.head.value;
+ }
+ else {
+ throw new TypeError('Reduce of empty list with no initial value');
+ }
+ for (var i = 0; !!walker; i++) {
+ acc = fn(acc, walker.value, i);
+ walker = walker.next;
+ }
+ return acc;
+ }
+ reduceReverse(fn, initial) {
+ let acc;
+ let walker = this.tail;
+ if (arguments.length > 1) {
+ acc = initial;
+ }
+ else if (this.tail) {
+ walker = this.tail.prev;
+ acc = this.tail.value;
+ }
+ else {
+ throw new TypeError('Reduce of empty list with no initial value');
+ }
+ for (let i = this.length - 1; !!walker; i--) {
+ acc = fn(acc, walker.value, i);
+ walker = walker.prev;
+ }
+ return acc;
+ }
+ toArray() {
+ const arr = new Array(this.length);
+ for (let i = 0, walker = this.head; !!walker; i++) {
+ arr[i] = walker.value;
+ walker = walker.next;
+ }
+ return arr;
+ }
+ toArrayReverse() {
+ const arr = new Array(this.length);
+ for (let i = 0, walker = this.tail; !!walker; i++) {
+ arr[i] = walker.value;
+ walker = walker.prev;
+ }
+ return arr;
+ }
+ slice(from = 0, to = this.length) {
+ if (to < 0) {
+ to += this.length;
+ }
+ if (from < 0) {
+ from += this.length;
+ }
+ const ret = new Yallist();
+ if (to < from || to < 0) {
+ return ret;
+ }
+ if (from < 0) {
+ from = 0;
+ }
+ if (to > this.length) {
+ to = this.length;
+ }
+ let walker = this.head;
+ let i = 0;
+ for (i = 0; !!walker && i < from; i++) {
+ walker = walker.next;
+ }
+ for (; !!walker && i < to; i++, walker = walker.next) {
+ ret.push(walker.value);
+ }
+ return ret;
+ }
+ sliceReverse(from = 0, to = this.length) {
+ if (to < 0) {
+ to += this.length;
+ }
+ if (from < 0) {
+ from += this.length;
+ }
+ const ret = new Yallist();
+ if (to < from || to < 0) {
+ return ret;
+ }
+ if (from < 0) {
+ from = 0;
+ }
+ if (to > this.length) {
+ to = this.length;
+ }
+ let i = this.length;
+ let walker = this.tail;
+ for (; !!walker && i > to; i--) {
+ walker = walker.prev;
+ }
+ for (; !!walker && i > from; i--, walker = walker.prev) {
+ ret.push(walker.value);
+ }
+ return ret;
+ }
+ splice(start, deleteCount = 0, ...nodes) {
+ if (start > this.length) {
+ start = this.length - 1;
+ }
+ if (start < 0) {
+ start = this.length + start;
+ }
+ let walker = this.head;
+ for (let i = 0; !!walker && i < start; i++) {
+ walker = walker.next;
+ }
+ const ret = [];
+ for (let i = 0; !!walker && i < deleteCount; i++) {
+ ret.push(walker.value);
+ walker = this.removeNode(walker);
+ }
+ if (!walker) {
+ walker = this.tail;
+ }
+ else if (walker !== this.tail) {
+ walker = walker.prev;
+ }
+ for (const v of nodes) {
+ walker = insertAfter(this, walker, v);
+ }
+ return ret;
+ }
+ reverse() {
+ const head = this.head;
+ const tail = this.tail;
+ for (let walker = head; !!walker; walker = walker.prev) {
+ const p = walker.prev;
+ walker.prev = walker.next;
+ walker.next = p;
+ }
+ this.head = tail;
+ this.tail = head;
+ return this;
+ }
+}
+// insertAfter undefined means "make the node the new head of list"
+function insertAfter(self, node, value) {
+ const prev = node;
+ const next = node ? node.next : self.head;
+ const inserted = new Node(value, prev, next, self);
+ if (inserted.next === undefined) {
+ self.tail = inserted;
+ }
+ if (inserted.prev === undefined) {
+ self.head = inserted;
+ }
+ self.length++;
+ return inserted;
+}
+function push(self, item) {
+ self.tail = new Node(item, self.tail, undefined, self);
+ if (!self.head) {
+ self.head = self.tail;
+ }
+ self.length++;
+}
+function unshift(self, item) {
+ self.head = new Node(item, undefined, self.head, self);
+ if (!self.tail) {
+ self.tail = self.head;
+ }
+ self.length++;
+}
+export class Node {
+ list;
+ next;
+ prev;
+ value;
+ constructor(value, prev, next, list) {
+ this.list = list;
+ this.value = value;
+ if (prev) {
+ prev.next = this;
+ this.prev = prev;
+ }
+ else {
+ this.prev = undefined;
+ }
+ if (next) {
+ next.prev = this;
+ this.next = next;
+ }
+ else {
+ this.next = undefined;
+ }
+ }
+}
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/cacache/node_modules/yallist/dist/esm/package.json b/deps/npm/node_modules/cacache/node_modules/yallist/dist/esm/package.json
new file mode 100644
index 00000000000..3dbc1ca591c
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/yallist/dist/esm/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "module"
+}
diff --git a/deps/npm/node_modules/cacache/node_modules/yallist/package.json b/deps/npm/node_modules/cacache/node_modules/yallist/package.json
new file mode 100644
index 00000000000..2f5247808bb
--- /dev/null
+++ b/deps/npm/node_modules/cacache/node_modules/yallist/package.json
@@ -0,0 +1,68 @@
+{
+ "name": "yallist",
+ "version": "5.0.0",
+ "description": "Yet Another Linked List",
+ "files": [
+ "dist"
+ ],
+ "devDependencies": {
+ "prettier": "^3.2.5",
+ "tap": "^18.7.2",
+ "tshy": "^1.13.1",
+ "typedoc": "^0.25.13"
+ },
+ "scripts": {
+ "preversion": "npm test",
+ "postversion": "npm publish",
+ "prepublishOnly": "git push origin --follow-tags",
+ "prepare": "tshy",
+ "pretest": "npm run prepare",
+ "presnap": "npm run prepare",
+ "test": "tap",
+ "snap": "tap",
+ "format": "prettier --write . --loglevel warn --ignore-path ../../.prettierignore --cache",
+ "typedoc": "typedoc"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/isaacs/yallist.git"
+ },
+ "author": "Isaac Z. Schlueter (http://blog.izs.me/)",
+ "license": "BlueOak-1.0.0",
+ "tshy": {
+ "exports": {
+ "./package.json": "./package.json",
+ ".": "./src/index.ts"
+ }
+ },
+ "exports": {
+ "./package.json": "./package.json",
+ ".": {
+ "import": {
+ "types": "./dist/esm/index.d.ts",
+ "default": "./dist/esm/index.js"
+ },
+ "require": {
+ "types": "./dist/commonjs/index.d.ts",
+ "default": "./dist/commonjs/index.js"
+ }
+ }
+ },
+ "main": "./dist/commonjs/index.js",
+ "types": "./dist/commonjs/index.d.ts",
+ "type": "module",
+ "prettier": {
+ "semi": false,
+ "printWidth": 70,
+ "tabWidth": 2,
+ "useTabs": false,
+ "singleQuote": true,
+ "jsxSingleQuote": false,
+ "bracketSameLine": true,
+ "arrowParens": "avoid",
+ "endOfLine": "lf"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+}
diff --git a/deps/npm/node_modules/cacache/package.json b/deps/npm/node_modules/cacache/package.json
index 6e6219158ed..ebb0f3f8ed4 100644
--- a/deps/npm/node_modules/cacache/package.json
+++ b/deps/npm/node_modules/cacache/package.json
@@ -1,6 +1,6 @@
{
"name": "cacache",
- "version": "18.0.4",
+ "version": "19.0.1",
"cache-version": {
"content": "2",
"index": "5"
@@ -16,13 +16,14 @@
"snap": "tap",
"coverage": "tap",
"test-docker": "docker run -it --rm --name pacotest -v \"$PWD\":/tmp -w /tmp node:latest npm test",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
"npmclilint": "npmcli-lint",
- "lintfix": "npm run lint -- --fix",
+ "lintfix": "npm run eslint -- --fix",
"postsnap": "npm run lintfix --",
"postlint": "template-oss-check",
"posttest": "npm run lint",
- "template-oss-apply": "template-oss-apply --force"
+ "template-oss-apply": "template-oss-apply --force",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"repository": {
"type": "git",
@@ -45,7 +46,7 @@
],
"license": "ISC",
"dependencies": {
- "@npmcli/fs": "^3.1.0",
+ "@npmcli/fs": "^4.0.0",
"fs-minipass": "^3.0.0",
"glob": "^10.2.2",
"lru-cache": "^10.0.1",
@@ -53,23 +54,23 @@
"minipass-collect": "^2.0.1",
"minipass-flush": "^1.0.5",
"minipass-pipeline": "^1.2.4",
- "p-map": "^4.0.0",
- "ssri": "^10.0.0",
- "tar": "^6.1.11",
- "unique-filename": "^3.0.0"
+ "p-map": "^7.0.2",
+ "ssri": "^12.0.0",
+ "tar": "^7.4.3",
+ "unique-filename": "^4.0.0"
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.22.0",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"tap": "^16.0.0"
},
"engines": {
- "node": "^16.14.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
"windowsCI": false,
- "version": "4.22.0",
+ "version": "4.23.3",
"publish": "true"
},
"author": "GitHub Inc.",
diff --git a/deps/npm/node_modules/cmd-shim/package.json b/deps/npm/node_modules/cmd-shim/package.json
index 094ca2df619..5f2e85d1c73 100644
--- a/deps/npm/node_modules/cmd-shim/package.json
+++ b/deps/npm/node_modules/cmd-shim/package.json
@@ -1,15 +1,16 @@
{
"name": "cmd-shim",
- "version": "6.0.3",
+ "version": "7.0.0",
"description": "Used in npm for command line application support",
"scripts": {
"test": "tap",
"snap": "tap",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
"postlint": "template-oss-check",
"template-oss-apply": "template-oss-apply --force",
- "lintfix": "npm run lint -- --fix",
- "posttest": "npm run lint"
+ "lintfix": "npm run eslint -- --fix",
+ "posttest": "npm run lint",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"repository": {
"type": "git",
@@ -17,8 +18,8 @@
},
"license": "ISC",
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.22.0",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.1",
"tap": "^16.0.1"
},
"files": [
@@ -36,12 +37,12 @@
]
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"author": "GitHub Inc.",
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.22.0",
+ "version": "4.23.1",
"publish": true
}
}
diff --git a/deps/npm/node_modules/hosted-git-info/package.json b/deps/npm/node_modules/hosted-git-info/package.json
index d7eebd474f6..3bb8bcd1f49 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": "7.0.2",
+ "version": "8.0.0",
"description": "Provides metadata and conversions from repository urls for GitHub, Bitbucket and GitLab",
"main": "./lib/index.js",
"repository": {
@@ -24,17 +24,18 @@
"snap": "tap",
"test": "tap",
"test:coverage": "tap --coverage-report=html",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
"postlint": "template-oss-check",
- "lintfix": "npm run lint -- --fix",
- "template-oss-apply": "template-oss-apply --force"
+ "lintfix": "npm run eslint -- --fix",
+ "template-oss-apply": "template-oss-apply --force",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"dependencies": {
"lru-cache": "^10.0.1"
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.22.0",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"tap": "^16.0.1"
},
"files": [
@@ -42,7 +43,7 @@
"lib/"
],
"engines": {
- "node": "^16.14.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"tap": {
"color": 1,
@@ -54,7 +55,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.22.0",
+ "version": "4.23.3",
"publish": "true"
}
}
diff --git a/deps/npm/node_modules/ignore-walk/package.json b/deps/npm/node_modules/ignore-walk/package.json
index f44a7a587a1..125fc071939 100644
--- a/deps/npm/node_modules/ignore-walk/package.json
+++ b/deps/npm/node_modules/ignore-walk/package.json
@@ -1,23 +1,24 @@
{
"name": "ignore-walk",
- "version": "6.0.5",
+ "version": "7.0.0",
"description": "Nested/recursive `.gitignore`/`.npmignore` parsing and filtering.",
"main": "lib/index.js",
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.22.0",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"mutate-fs": "^2.1.1",
"tap": "^16.0.1"
},
"scripts": {
"test": "tap",
"posttest": "npm run lint",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
- "lintfix": "npm run lint -- --fix",
+ "lint": "npm run eslint",
+ "lintfix": "npm run eslint -- --fix",
"postlint": "template-oss-check",
"template-oss-apply": "template-oss-apply --force",
"test:windows-coverage": "npm pkg set tap.statements=99 --json && npm pkg set tap.branches=98 --json && npm pkg set tap.lines=99 --json",
- "snap": "tap"
+ "snap": "tap",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"keywords": [
"ignorefile",
@@ -52,11 +53,11 @@
]
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.22.0",
+ "version": "4.23.3",
"content": "scripts/template-oss",
"publish": "true"
}
diff --git a/deps/npm/node_modules/ini/package.json b/deps/npm/node_modules/ini/package.json
index 67aa9278259..6a3995f158c 100644
--- a/deps/npm/node_modules/ini/package.json
+++ b/deps/npm/node_modules/ini/package.json
@@ -2,16 +2,16 @@
"author": "GitHub Inc.",
"name": "ini",
"description": "An ini encoder/decoder for node",
- "version": "4.1.3",
+ "version": "5.0.0",
"repository": {
"type": "git",
"url": "git+https://github.com/npm/ini.git"
},
"main": "lib/ini.js",
"scripts": {
- "eslint": "eslint",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
- "lintfix": "npm run lint -- --fix",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
+ "lintfix": "npm run eslint -- --fix",
"test": "tap",
"snap": "tap",
"posttest": "npm run lint",
@@ -19,8 +19,8 @@
"template-oss-apply": "template-oss-apply --force"
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.22.0",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"tap": "^16.0.1"
},
"license": "ISC",
@@ -29,11 +29,11 @@
"lib/"
],
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.22.0",
+ "version": "4.23.3",
"publish": "true"
},
"tap": {
diff --git a/deps/npm/node_modules/init-package-json/package.json b/deps/npm/node_modules/init-package-json/package.json
index 969e1243789..21021ab7012 100644
--- a/deps/npm/node_modules/init-package-json/package.json
+++ b/deps/npm/node_modules/init-package-json/package.json
@@ -1,15 +1,16 @@
{
"name": "init-package-json",
- "version": "6.0.3",
+ "version": "7.0.1",
"main": "lib/init-package-json.js",
"scripts": {
"test": "tap",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
"postlint": "template-oss-check",
- "lintfix": "npm run lint -- --fix",
+ "lintfix": "npm run eslint -- --fix",
"snap": "tap",
"posttest": "npm run lint",
- "template-oss-apply": "template-oss-apply --force"
+ "template-oss-apply": "template-oss-apply --force",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"repository": {
"type": "git",
@@ -19,22 +20,22 @@
"license": "ISC",
"description": "A node module to get your node module started",
"dependencies": {
- "@npmcli/package-json": "^5.0.0",
- "npm-package-arg": "^11.0.0",
- "promzard": "^1.0.0",
- "read": "^3.0.1",
+ "@npmcli/package-json": "^6.0.0",
+ "npm-package-arg": "^12.0.0",
+ "promzard": "^2.0.0",
+ "read": "^4.0.0",
"semver": "^7.3.5",
"validate-npm-package-license": "^3.0.4",
- "validate-npm-package-name": "^5.0.0"
+ "validate-npm-package-name": "^6.0.0"
},
"devDependencies": {
"@npmcli/config": "^8.2.0",
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.22.0",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"tap": "^16.0.1"
},
"engines": {
- "node": "^16.14.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"tap": {
"test-ignore": "fixtures/",
@@ -60,7 +61,7 @@
],
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.22.0",
+ "version": "4.23.3",
"publish": true
}
}
diff --git a/deps/npm/node_modules/json-parse-even-better-errors/package.json b/deps/npm/node_modules/json-parse-even-better-errors/package.json
index c7156df325f..193f0d9d459 100644
--- a/deps/npm/node_modules/json-parse-even-better-errors/package.json
+++ b/deps/npm/node_modules/json-parse-even-better-errors/package.json
@@ -1,6 +1,6 @@
{
"name": "json-parse-even-better-errors",
- "version": "3.0.2",
+ "version": "4.0.0",
"description": "JSON.parse with context information on error",
"main": "lib/index.js",
"files": [
@@ -10,11 +10,12 @@
"scripts": {
"test": "tap",
"snap": "tap",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
"postlint": "template-oss-check",
"template-oss-apply": "template-oss-apply --force",
- "lintfix": "npm run lint -- --fix",
- "posttest": "npm run lint"
+ "lintfix": "npm run eslint -- --fix",
+ "posttest": "npm run lint",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"repository": {
"type": "git",
@@ -27,8 +28,8 @@
"author": "GitHub Inc.",
"license": "MIT",
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.22.0",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"tap": "^16.3.0"
},
"tap": {
@@ -39,11 +40,11 @@
]
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.22.0",
+ "version": "4.23.3",
"publish": true
}
}
diff --git a/deps/npm/node_modules/libnpmaccess/package.json b/deps/npm/node_modules/libnpmaccess/package.json
index b9d92e4eda6..0022437adad 100644
--- a/deps/npm/node_modules/libnpmaccess/package.json
+++ b/deps/npm/node_modules/libnpmaccess/package.json
@@ -1,6 +1,6 @@
{
"name": "libnpmaccess",
- "version": "8.0.6",
+ "version": "9.0.0",
"description": "programmatic library for `npm access` commands",
"author": "GitHub Inc.",
"license": "ISC",
@@ -16,7 +16,7 @@
"eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/eslint-config": "^5.0.1",
"@npmcli/mock-registry": "^1.0.0",
"@npmcli/template-oss": "4.23.3",
"nock": "^13.3.3",
@@ -30,11 +30,11 @@
"bugs": "https://github.com/npm/libnpmaccess/issues",
"homepage": "https://npmjs.com/package/libnpmaccess",
"dependencies": {
- "npm-package-arg": "^11.0.2",
- "npm-registry-fetch": "^17.0.1"
+ "npm-package-arg": "^12.0.0",
+ "npm-registry-fetch": "^18.0.1"
},
"engines": {
- "node": "^16.14.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"files": [
"bin/",
diff --git a/deps/npm/node_modules/libnpmdiff/package.json b/deps/npm/node_modules/libnpmdiff/package.json
index 0e6d23d54d1..ccb499e78ff 100644
--- a/deps/npm/node_modules/libnpmdiff/package.json
+++ b/deps/npm/node_modules/libnpmdiff/package.json
@@ -1,6 +1,6 @@
{
"name": "libnpmdiff",
- "version": "6.1.4",
+ "version": "7.0.0",
"description": "The registry diff",
"repository": {
"type": "git",
@@ -13,7 +13,7 @@
"lib/"
],
"engines": {
- "node": "^16.14.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"keywords": [
"npm",
@@ -42,18 +42,18 @@
"eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/eslint-config": "^5.0.1",
"@npmcli/template-oss": "4.23.3",
"tap": "^16.3.8"
},
"dependencies": {
- "@npmcli/arborist": "^7.5.4",
- "@npmcli/installed-package-contents": "^2.1.0",
+ "@npmcli/arborist": "^8.0.0",
+ "@npmcli/installed-package-contents": "^3.0.0",
"binary-extensions": "^2.3.0",
"diff": "^5.1.0",
"minimatch": "^9.0.4",
- "npm-package-arg": "^11.0.2",
- "pacote": "^18.0.6",
+ "npm-package-arg": "^12.0.0",
+ "pacote": "^19.0.0",
"tar": "^6.2.1"
},
"templateOSS": {
diff --git a/deps/npm/node_modules/libnpmexec/package.json b/deps/npm/node_modules/libnpmexec/package.json
index 627af537b42..497b971a084 100644
--- a/deps/npm/node_modules/libnpmexec/package.json
+++ b/deps/npm/node_modules/libnpmexec/package.json
@@ -1,13 +1,13 @@
{
"name": "libnpmexec",
- "version": "8.1.4",
+ "version": "9.0.0",
"files": [
"bin/",
"lib/"
],
"main": "lib/index.js",
"engines": {
- "node": "^16.14.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"description": "npm exec (npx) programmatic API",
"repository": {
@@ -50,24 +50,24 @@
]
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/eslint-config": "^5.0.1",
"@npmcli/mock-registry": "^1.0.0",
"@npmcli/template-oss": "4.23.3",
- "bin-links": "^4.0.4",
+ "bin-links": "^5.0.0",
"chalk": "^5.2.0",
"just-extend": "^6.2.0",
"just-safe-set": "^4.2.1",
"tap": "^16.3.8"
},
"dependencies": {
- "@npmcli/arborist": "^7.5.4",
- "@npmcli/run-script": "^8.1.0",
+ "@npmcli/arborist": "^8.0.0",
+ "@npmcli/run-script": "^9.0.1",
"ci-info": "^4.0.0",
- "npm-package-arg": "^11.0.2",
- "pacote": "^18.0.6",
- "proc-log": "^4.2.0",
- "read": "^3.0.1",
- "read-package-json-fast": "^3.0.2",
+ "npm-package-arg": "^12.0.0",
+ "pacote": "^19.0.0",
+ "proc-log": "^5.0.0",
+ "read": "^4.0.0",
+ "read-package-json-fast": "^4.0.0",
"semver": "^7.3.7",
"walk-up-path": "^3.0.1"
},
diff --git a/deps/npm/node_modules/libnpmfund/package.json b/deps/npm/node_modules/libnpmfund/package.json
index 03fe5f9b4e5..07c1e33f2a7 100644
--- a/deps/npm/node_modules/libnpmfund/package.json
+++ b/deps/npm/node_modules/libnpmfund/package.json
@@ -1,6 +1,6 @@
{
"name": "libnpmfund",
- "version": "5.0.12",
+ "version": "6.0.0",
"main": "lib/index.js",
"files": [
"bin/",
@@ -41,15 +41,15 @@
"eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/eslint-config": "^5.0.1",
"@npmcli/template-oss": "4.23.3",
"tap": "^16.3.8"
},
"dependencies": {
- "@npmcli/arborist": "^7.5.4"
+ "@npmcli/arborist": "^8.0.0"
},
"engines": {
- "node": "^16.14.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
diff --git a/deps/npm/node_modules/libnpmhook/package.json b/deps/npm/node_modules/libnpmhook/package.json
index 741cf8a975b..09157ab08cb 100644
--- a/deps/npm/node_modules/libnpmhook/package.json
+++ b/deps/npm/node_modules/libnpmhook/package.json
@@ -1,6 +1,6 @@
{
"name": "libnpmhook",
- "version": "10.0.5",
+ "version": "11.0.0",
"description": "programmatic API for managing npm registry hooks",
"main": "lib/index.js",
"files": [
@@ -32,16 +32,16 @@
"license": "ISC",
"dependencies": {
"aproba": "^2.0.0",
- "npm-registry-fetch": "^17.0.1"
+ "npm-registry-fetch": "^18.0.1"
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/eslint-config": "^5.0.1",
"@npmcli/template-oss": "4.23.3",
"nock": "^13.3.3",
"tap": "^16.3.8"
},
"engines": {
- "node": "^16.14.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
diff --git a/deps/npm/node_modules/libnpmorg/package.json b/deps/npm/node_modules/libnpmorg/package.json
index 1076474eb97..38800308a31 100644
--- a/deps/npm/node_modules/libnpmorg/package.json
+++ b/deps/npm/node_modules/libnpmorg/package.json
@@ -1,6 +1,6 @@
{
"name": "libnpmorg",
- "version": "6.0.6",
+ "version": "7.0.0",
"description": "Programmatic api for `npm org` commands",
"author": "GitHub Inc.",
"main": "lib/index.js",
@@ -28,7 +28,7 @@
"lib/"
],
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/eslint-config": "^5.0.1",
"@npmcli/template-oss": "4.23.3",
"minipass": "^7.1.1",
"nock": "^13.3.3",
@@ -43,10 +43,10 @@
"homepage": "https://npmjs.com/package/libnpmorg",
"dependencies": {
"aproba": "^2.0.0",
- "npm-registry-fetch": "^17.0.1"
+ "npm-registry-fetch": "^18.0.1"
},
"engines": {
- "node": "^16.14.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
diff --git a/deps/npm/node_modules/libnpmpack/package.json b/deps/npm/node_modules/libnpmpack/package.json
index 588921bbfa9..35d12425b02 100644
--- a/deps/npm/node_modules/libnpmpack/package.json
+++ b/deps/npm/node_modules/libnpmpack/package.json
@@ -1,6 +1,6 @@
{
"name": "libnpmpack",
- "version": "7.0.4",
+ "version": "8.0.0",
"description": "Programmatic API for the bits behind npm pack",
"author": "GitHub Inc.",
"main": "lib/index.js",
@@ -23,7 +23,7 @@
"eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/eslint-config": "^5.0.1",
"@npmcli/template-oss": "4.23.3",
"nock": "^13.3.3",
"spawk": "^1.7.1",
@@ -37,13 +37,13 @@
"bugs": "https://github.com/npm/libnpmpack/issues",
"homepage": "https://npmjs.com/package/libnpmpack",
"dependencies": {
- "@npmcli/arborist": "^7.5.4",
- "@npmcli/run-script": "^8.1.0",
- "npm-package-arg": "^11.0.2",
- "pacote": "^18.0.6"
+ "@npmcli/arborist": "^8.0.0",
+ "@npmcli/run-script": "^9.0.1",
+ "npm-package-arg": "^12.0.0",
+ "pacote": "^19.0.0"
},
"engines": {
- "node": "^16.14.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
diff --git a/deps/npm/node_modules/libnpmpublish/package.json b/deps/npm/node_modules/libnpmpublish/package.json
index e19d82dd349..f63d50f4e7b 100644
--- a/deps/npm/node_modules/libnpmpublish/package.json
+++ b/deps/npm/node_modules/libnpmpublish/package.json
@@ -1,6 +1,6 @@
{
"name": "libnpmpublish",
- "version": "9.0.9",
+ "version": "10.0.0",
"description": "Programmatic API for the bits behind npm publish and unpublish",
"author": "GitHub Inc.",
"main": "lib/index.js",
@@ -24,7 +24,7 @@
"eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/eslint-config": "^5.0.1",
"@npmcli/mock-globals": "^1.0.0",
"@npmcli/mock-registry": "^1.0.0",
"@npmcli/template-oss": "4.23.3",
@@ -40,16 +40,16 @@
"homepage": "https://npmjs.com/package/libnpmpublish",
"dependencies": {
"ci-info": "^4.0.0",
- "normalize-package-data": "^6.0.1",
- "npm-package-arg": "^11.0.2",
- "npm-registry-fetch": "^17.0.1",
- "proc-log": "^4.2.0",
+ "normalize-package-data": "^7.0.0",
+ "npm-package-arg": "^12.0.0",
+ "npm-registry-fetch": "^18.0.1",
+ "proc-log": "^5.0.0",
"semver": "^7.3.7",
"sigstore": "^2.2.0",
- "ssri": "^10.0.6"
+ "ssri": "^12.0.0"
},
"engines": {
- "node": "^16.14.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
diff --git a/deps/npm/node_modules/libnpmsearch/package.json b/deps/npm/node_modules/libnpmsearch/package.json
index d43aaa4a454..a5d2ae42491 100644
--- a/deps/npm/node_modules/libnpmsearch/package.json
+++ b/deps/npm/node_modules/libnpmsearch/package.json
@@ -1,6 +1,6 @@
{
"name": "libnpmsearch",
- "version": "7.0.6",
+ "version": "8.0.0",
"description": "Programmatic API for searching in npm and compatible registries.",
"author": "GitHub Inc.",
"main": "lib/index.js",
@@ -26,7 +26,7 @@
"eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/eslint-config": "^5.0.1",
"@npmcli/template-oss": "4.23.3",
"nock": "^13.3.3",
"tap": "^16.3.8"
@@ -39,10 +39,10 @@
"bugs": "https://github.com/npm/libnpmsearch/issues",
"homepage": "https://npmjs.com/package/libnpmsearch",
"dependencies": {
- "npm-registry-fetch": "^17.0.1"
+ "npm-registry-fetch": "^18.0.1"
},
"engines": {
- "node": "^16.14.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
diff --git a/deps/npm/node_modules/libnpmteam/package.json b/deps/npm/node_modules/libnpmteam/package.json
index 84876996118..fd8f69669f1 100644
--- a/deps/npm/node_modules/libnpmteam/package.json
+++ b/deps/npm/node_modules/libnpmteam/package.json
@@ -1,7 +1,7 @@
{
"name": "libnpmteam",
"description": "npm Team management APIs",
- "version": "6.0.5",
+ "version": "7.0.0",
"author": "GitHub Inc.",
"license": "ISC",
"main": "lib/index.js",
@@ -16,7 +16,7 @@
"eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/eslint-config": "^5.0.1",
"@npmcli/template-oss": "4.23.3",
"nock": "^13.3.3",
"tap": "^16.3.8"
@@ -33,10 +33,10 @@
"homepage": "https://npmjs.com/package/libnpmteam",
"dependencies": {
"aproba": "^2.0.0",
- "npm-registry-fetch": "^17.0.1"
+ "npm-registry-fetch": "^18.0.1"
},
"engines": {
- "node": "^16.14.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
diff --git a/deps/npm/node_modules/libnpmversion/package.json b/deps/npm/node_modules/libnpmversion/package.json
index ccfe5a05cb3..cdc9e7bbdf7 100644
--- a/deps/npm/node_modules/libnpmversion/package.json
+++ b/deps/npm/node_modules/libnpmversion/package.json
@@ -1,6 +1,6 @@
{
"name": "libnpmversion",
- "version": "6.0.3",
+ "version": "7.0.0",
"main": "lib/index.js",
"files": [
"bin/",
@@ -32,20 +32,20 @@
]
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/eslint-config": "^5.0.1",
"@npmcli/template-oss": "4.23.3",
"require-inject": "^1.4.4",
"tap": "^16.3.8"
},
"dependencies": {
- "@npmcli/git": "^5.0.7",
- "@npmcli/run-script": "^8.1.0",
- "json-parse-even-better-errors": "^3.0.2",
- "proc-log": "^4.2.0",
+ "@npmcli/git": "^6.0.1",
+ "@npmcli/run-script": "^9.0.1",
+ "json-parse-even-better-errors": "^4.0.0",
+ "proc-log": "^5.0.0",
"semver": "^7.3.7"
},
"engines": {
- "node": "^16.14.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
diff --git a/deps/npm/node_modules/make-fetch-happen/package.json b/deps/npm/node_modules/make-fetch-happen/package.json
index 7adb4d1e7f9..0868ff6d7ef 100644
--- a/deps/npm/node_modules/make-fetch-happen/package.json
+++ b/deps/npm/node_modules/make-fetch-happen/package.json
@@ -1,6 +1,6 @@
{
"name": "make-fetch-happen",
- "version": "13.0.1",
+ "version": "14.0.1",
"description": "Opinionated, caching, retrying fetch client",
"main": "lib/index.js",
"files": [
@@ -10,16 +10,16 @@
"scripts": {
"test": "tap",
"posttest": "npm run lint",
- "eslint": "eslint",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
- "lintfix": "npm run lint -- --fix",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
+ "lintfix": "npm run eslint -- --fix",
"postlint": "template-oss-check",
"snap": "tap",
"template-oss-apply": "template-oss-apply --force"
},
"repository": {
"type": "git",
- "url": "https://github.com/npm/make-fetch-happen.git"
+ "url": "git+https://github.com/npm/make-fetch-happen.git"
},
"keywords": [
"http",
@@ -33,29 +33,28 @@
"author": "GitHub Inc.",
"license": "ISC",
"dependencies": {
- "@npmcli/agent": "^2.0.0",
- "cacache": "^18.0.0",
+ "@npmcli/agent": "^3.0.0",
+ "cacache": "^19.0.1",
"http-cache-semantics": "^4.1.1",
- "is-lambda": "^1.0.1",
"minipass": "^7.0.2",
- "minipass-fetch": "^3.0.0",
+ "minipass-fetch": "^4.0.0",
"minipass-flush": "^1.0.5",
"minipass-pipeline": "^1.2.4",
"negotiator": "^0.6.3",
- "proc-log": "^4.2.0",
+ "proc-log": "^5.0.0",
"promise-retry": "^2.0.1",
- "ssri": "^10.0.0"
+ "ssri": "^12.0.0"
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.21.4",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"nock": "^13.2.4",
"safe-buffer": "^5.2.1",
"standard-version": "^9.3.2",
"tap": "^16.0.0"
},
"engines": {
- "node": "^16.14.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"tap": {
"color": 1,
@@ -69,7 +68,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.21.4",
+ "version": "4.23.3",
"publish": "true"
}
}
diff --git a/deps/npm/node_modules/minipass-fetch/node_modules/minizlib/LICENSE b/deps/npm/node_modules/minipass-fetch/node_modules/minizlib/LICENSE
new file mode 100644
index 00000000000..49f7efe431c
--- /dev/null
+++ b/deps/npm/node_modules/minipass-fetch/node_modules/minizlib/LICENSE
@@ -0,0 +1,26 @@
+Minizlib was created by Isaac Z. Schlueter.
+It is a derivative work of the Node.js project.
+
+"""
+Copyright (c) 2017-2023 Isaac Z. Schlueter and Contributors
+Copyright (c) 2017-2023 Node.js contributors. All rights reserved.
+Copyright (c) 2017-2023 Joyent, Inc. and other Node contributors. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+"""
diff --git a/deps/npm/node_modules/minipass-fetch/node_modules/minizlib/dist/commonjs/constants.js b/deps/npm/node_modules/minipass-fetch/node_modules/minizlib/dist/commonjs/constants.js
new file mode 100644
index 00000000000..dfc2c1957bf
--- /dev/null
+++ b/deps/npm/node_modules/minipass-fetch/node_modules/minizlib/dist/commonjs/constants.js
@@ -0,0 +1,123 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.constants = void 0;
+// Update with any zlib constants that are added or changed in the future.
+// Node v6 didn't export this, so we just hard code the version and rely
+// on all the other hard-coded values from zlib v4736. When node v6
+// support drops, we can just export the realZlibConstants object.
+const zlib_1 = __importDefault(require("zlib"));
+/* c8 ignore start */
+const realZlibConstants = zlib_1.default.constants || { ZLIB_VERNUM: 4736 };
+/* c8 ignore stop */
+exports.constants = Object.freeze(Object.assign(Object.create(null), {
+ Z_NO_FLUSH: 0,
+ Z_PARTIAL_FLUSH: 1,
+ Z_SYNC_FLUSH: 2,
+ Z_FULL_FLUSH: 3,
+ Z_FINISH: 4,
+ Z_BLOCK: 5,
+ Z_OK: 0,
+ Z_STREAM_END: 1,
+ Z_NEED_DICT: 2,
+ Z_ERRNO: -1,
+ Z_STREAM_ERROR: -2,
+ Z_DATA_ERROR: -3,
+ Z_MEM_ERROR: -4,
+ Z_BUF_ERROR: -5,
+ Z_VERSION_ERROR: -6,
+ Z_NO_COMPRESSION: 0,
+ Z_BEST_SPEED: 1,
+ Z_BEST_COMPRESSION: 9,
+ Z_DEFAULT_COMPRESSION: -1,
+ Z_FILTERED: 1,
+ Z_HUFFMAN_ONLY: 2,
+ Z_RLE: 3,
+ Z_FIXED: 4,
+ Z_DEFAULT_STRATEGY: 0,
+ DEFLATE: 1,
+ INFLATE: 2,
+ GZIP: 3,
+ GUNZIP: 4,
+ DEFLATERAW: 5,
+ INFLATERAW: 6,
+ UNZIP: 7,
+ BROTLI_DECODE: 8,
+ BROTLI_ENCODE: 9,
+ Z_MIN_WINDOWBITS: 8,
+ Z_MAX_WINDOWBITS: 15,
+ Z_DEFAULT_WINDOWBITS: 15,
+ Z_MIN_CHUNK: 64,
+ Z_MAX_CHUNK: Infinity,
+ Z_DEFAULT_CHUNK: 16384,
+ Z_MIN_MEMLEVEL: 1,
+ Z_MAX_MEMLEVEL: 9,
+ Z_DEFAULT_MEMLEVEL: 8,
+ Z_MIN_LEVEL: -1,
+ Z_MAX_LEVEL: 9,
+ Z_DEFAULT_LEVEL: -1,
+ BROTLI_OPERATION_PROCESS: 0,
+ BROTLI_OPERATION_FLUSH: 1,
+ BROTLI_OPERATION_FINISH: 2,
+ BROTLI_OPERATION_EMIT_METADATA: 3,
+ BROTLI_MODE_GENERIC: 0,
+ BROTLI_MODE_TEXT: 1,
+ BROTLI_MODE_FONT: 2,
+ BROTLI_DEFAULT_MODE: 0,
+ BROTLI_MIN_QUALITY: 0,
+ BROTLI_MAX_QUALITY: 11,
+ BROTLI_DEFAULT_QUALITY: 11,
+ BROTLI_MIN_WINDOW_BITS: 10,
+ BROTLI_MAX_WINDOW_BITS: 24,
+ BROTLI_LARGE_MAX_WINDOW_BITS: 30,
+ BROTLI_DEFAULT_WINDOW: 22,
+ BROTLI_MIN_INPUT_BLOCK_BITS: 16,
+ BROTLI_MAX_INPUT_BLOCK_BITS: 24,
+ BROTLI_PARAM_MODE: 0,
+ BROTLI_PARAM_QUALITY: 1,
+ BROTLI_PARAM_LGWIN: 2,
+ BROTLI_PARAM_LGBLOCK: 3,
+ BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING: 4,
+ BROTLI_PARAM_SIZE_HINT: 5,
+ BROTLI_PARAM_LARGE_WINDOW: 6,
+ BROTLI_PARAM_NPOSTFIX: 7,
+ BROTLI_PARAM_NDIRECT: 8,
+ BROTLI_DECODER_RESULT_ERROR: 0,
+ BROTLI_DECODER_RESULT_SUCCESS: 1,
+ BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT: 2,
+ BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT: 3,
+ BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION: 0,
+ BROTLI_DECODER_PARAM_LARGE_WINDOW: 1,
+ BROTLI_DECODER_NO_ERROR: 0,
+ BROTLI_DECODER_SUCCESS: 1,
+ BROTLI_DECODER_NEEDS_MORE_INPUT: 2,
+ BROTLI_DECODER_NEEDS_MORE_OUTPUT: 3,
+ BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE: -1,
+ BROTLI_DECODER_ERROR_FORMAT_RESERVED: -2,
+ BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE: -3,
+ BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET: -4,
+ BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME: -5,
+ BROTLI_DECODER_ERROR_FORMAT_CL_SPACE: -6,
+ BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE: -7,
+ BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT: -8,
+ BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1: -9,
+ BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2: -10,
+ BROTLI_DECODER_ERROR_FORMAT_TRANSFORM: -11,
+ BROTLI_DECODER_ERROR_FORMAT_DICTIONARY: -12,
+ BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS: -13,
+ BROTLI_DECODER_ERROR_FORMAT_PADDING_1: -14,
+ BROTLI_DECODER_ERROR_FORMAT_PADDING_2: -15,
+ BROTLI_DECODER_ERROR_FORMAT_DISTANCE: -16,
+ BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET: -19,
+ BROTLI_DECODER_ERROR_INVALID_ARGUMENTS: -20,
+ BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES: -21,
+ BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS: -22,
+ BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP: -25,
+ BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1: -26,
+ BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2: -27,
+ BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES: -30,
+ BROTLI_DECODER_ERROR_UNREACHABLE: -31,
+}, realZlibConstants));
+//# sourceMappingURL=constants.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/minipass-fetch/node_modules/minizlib/dist/commonjs/index.js b/deps/npm/node_modules/minipass-fetch/node_modules/minizlib/dist/commonjs/index.js
new file mode 100644
index 00000000000..ad65eef0495
--- /dev/null
+++ b/deps/npm/node_modules/minipass-fetch/node_modules/minizlib/dist/commonjs/index.js
@@ -0,0 +1,352 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.BrotliDecompress = exports.BrotliCompress = exports.Brotli = exports.Unzip = exports.InflateRaw = exports.DeflateRaw = exports.Gunzip = exports.Gzip = exports.Inflate = exports.Deflate = exports.Zlib = exports.ZlibError = exports.constants = void 0;
+const assert_1 = __importDefault(require("assert"));
+const buffer_1 = require("buffer");
+const minipass_1 = require("minipass");
+const zlib_1 = __importDefault(require("zlib"));
+const constants_js_1 = require("./constants.js");
+var constants_js_2 = require("./constants.js");
+Object.defineProperty(exports, "constants", { enumerable: true, get: function () { return constants_js_2.constants; } });
+const OriginalBufferConcat = buffer_1.Buffer.concat;
+const _superWrite = Symbol('_superWrite');
+class ZlibError extends Error {
+ code;
+ errno;
+ constructor(err) {
+ super('zlib: ' + err.message);
+ this.code = err.code;
+ this.errno = err.errno;
+ /* c8 ignore next */
+ if (!this.code)
+ this.code = 'ZLIB_ERROR';
+ this.message = 'zlib: ' + err.message;
+ Error.captureStackTrace(this, this.constructor);
+ }
+ get name() {
+ return 'ZlibError';
+ }
+}
+exports.ZlibError = ZlibError;
+// the Zlib class they all inherit from
+// This thing manages the queue of requests, and returns
+// true or false if there is anything in the queue when
+// you call the .write() method.
+const _flushFlag = Symbol('flushFlag');
+class ZlibBase extends minipass_1.Minipass {
+ #sawError = false;
+ #ended = false;
+ #flushFlag;
+ #finishFlushFlag;
+ #fullFlushFlag;
+ #handle;
+ #onError;
+ get sawError() {
+ return this.#sawError;
+ }
+ get handle() {
+ return this.#handle;
+ }
+ /* c8 ignore start */
+ get flushFlag() {
+ return this.#flushFlag;
+ }
+ /* c8 ignore stop */
+ constructor(opts, mode) {
+ if (!opts || typeof opts !== 'object')
+ throw new TypeError('invalid options for ZlibBase constructor');
+ //@ts-ignore
+ super(opts);
+ /* c8 ignore start */
+ this.#flushFlag = opts.flush ?? 0;
+ this.#finishFlushFlag = opts.finishFlush ?? 0;
+ this.#fullFlushFlag = opts.fullFlushFlag ?? 0;
+ /* c8 ignore stop */
+ // this will throw if any options are invalid for the class selected
+ try {
+ // @types/node doesn't know that it exports the classes, but they're there
+ //@ts-ignore
+ this.#handle = new zlib_1.default[mode](opts);
+ }
+ catch (er) {
+ // make sure that all errors get decorated properly
+ throw new ZlibError(er);
+ }
+ this.#onError = err => {
+ // no sense raising multiple errors, since we abort on the first one.
+ if (this.#sawError)
+ return;
+ this.#sawError = true;
+ // there is no way to cleanly recover.
+ // continuing only obscures problems.
+ this.close();
+ this.emit('error', err);
+ };
+ this.#handle?.on('error', er => this.#onError(new ZlibError(er)));
+ this.once('end', () => this.close);
+ }
+ close() {
+ if (this.#handle) {
+ this.#handle.close();
+ this.#handle = undefined;
+ this.emit('close');
+ }
+ }
+ reset() {
+ if (!this.#sawError) {
+ (0, assert_1.default)(this.#handle, 'zlib binding closed');
+ //@ts-ignore
+ return this.#handle.reset?.();
+ }
+ }
+ flush(flushFlag) {
+ if (this.ended)
+ return;
+ if (typeof flushFlag !== 'number')
+ flushFlag = this.#fullFlushFlag;
+ this.write(Object.assign(buffer_1.Buffer.alloc(0), { [_flushFlag]: flushFlag }));
+ }
+ end(chunk, encoding, cb) {
+ /* c8 ignore start */
+ if (typeof chunk === 'function') {
+ cb = chunk;
+ encoding = undefined;
+ chunk = undefined;
+ }
+ if (typeof encoding === 'function') {
+ cb = encoding;
+ encoding = undefined;
+ }
+ /* c8 ignore stop */
+ if (chunk) {
+ if (encoding)
+ this.write(chunk, encoding);
+ else
+ this.write(chunk);
+ }
+ this.flush(this.#finishFlushFlag);
+ this.#ended = true;
+ return super.end(cb);
+ }
+ get ended() {
+ return this.#ended;
+ }
+ // overridden in the gzip classes to do portable writes
+ [_superWrite](data) {
+ return super.write(data);
+ }
+ write(chunk, encoding, cb) {
+ // process the chunk using the sync process
+ // then super.write() all the outputted chunks
+ if (typeof encoding === 'function')
+ (cb = encoding), (encoding = 'utf8');
+ if (typeof chunk === 'string')
+ chunk = buffer_1.Buffer.from(chunk, encoding);
+ if (this.#sawError)
+ return;
+ (0, assert_1.default)(this.#handle, 'zlib binding closed');
+ // _processChunk tries to .close() the native handle after it's done, so we
+ // intercept that by temporarily making it a no-op.
+ // diving into the node:zlib internals a bit here
+ const nativeHandle = this.#handle
+ ._handle;
+ const originalNativeClose = nativeHandle.close;
+ nativeHandle.close = () => { };
+ const originalClose = this.#handle.close;
+ this.#handle.close = () => { };
+ // It also calls `Buffer.concat()` at the end, which may be convenient
+ // for some, but which we are not interested in as it slows us down.
+ buffer_1.Buffer.concat = args => args;
+ let result = undefined;
+ try {
+ const flushFlag = typeof chunk[_flushFlag] === 'number'
+ ? chunk[_flushFlag]
+ : this.#flushFlag;
+ result = this.#handle._processChunk(chunk, flushFlag);
+ // if we don't throw, reset it back how it was
+ buffer_1.Buffer.concat = OriginalBufferConcat;
+ }
+ catch (err) {
+ // or if we do, put Buffer.concat() back before we emit error
+ // Error events call into user code, which may call Buffer.concat()
+ buffer_1.Buffer.concat = OriginalBufferConcat;
+ this.#onError(new ZlibError(err));
+ }
+ finally {
+ if (this.#handle) {
+ // Core zlib resets `_handle` to null after attempting to close the
+ // native handle. Our no-op handler prevented actual closure, but we
+ // need to restore the `._handle` property.
+ ;
+ this.#handle._handle =
+ nativeHandle;
+ nativeHandle.close = originalNativeClose;
+ this.#handle.close = originalClose;
+ // `_processChunk()` adds an 'error' listener. If we don't remove it
+ // after each call, these handlers start piling up.
+ this.#handle.removeAllListeners('error');
+ // make sure OUR error listener is still attached tho
+ }
+ }
+ if (this.#handle)
+ this.#handle.on('error', er => this.#onError(new ZlibError(er)));
+ let writeReturn;
+ if (result) {
+ if (Array.isArray(result) && result.length > 0) {
+ const r = result[0];
+ // The first buffer is always `handle._outBuffer`, which would be
+ // re-used for later invocations; so, we always have to copy that one.
+ writeReturn = this[_superWrite](buffer_1.Buffer.from(r));
+ for (let i = 1; i < result.length; i++) {
+ writeReturn = this[_superWrite](result[i]);
+ }
+ }
+ else {
+ // either a single Buffer or an empty array
+ writeReturn = this[_superWrite](buffer_1.Buffer.from(result));
+ }
+ }
+ if (cb)
+ cb();
+ return writeReturn;
+ }
+}
+class Zlib extends ZlibBase {
+ #level;
+ #strategy;
+ constructor(opts, mode) {
+ opts = opts || {};
+ opts.flush = opts.flush || constants_js_1.constants.Z_NO_FLUSH;
+ opts.finishFlush = opts.finishFlush || constants_js_1.constants.Z_FINISH;
+ opts.fullFlushFlag = constants_js_1.constants.Z_FULL_FLUSH;
+ super(opts, mode);
+ this.#level = opts.level;
+ this.#strategy = opts.strategy;
+ }
+ params(level, strategy) {
+ if (this.sawError)
+ return;
+ if (!this.handle)
+ throw new Error('cannot switch params when binding is closed');
+ // no way to test this without also not supporting params at all
+ /* c8 ignore start */
+ if (!this.handle.params)
+ throw new Error('not supported in this implementation');
+ /* c8 ignore stop */
+ if (this.#level !== level || this.#strategy !== strategy) {
+ this.flush(constants_js_1.constants.Z_SYNC_FLUSH);
+ (0, assert_1.default)(this.handle, 'zlib binding closed');
+ // .params() calls .flush(), but the latter is always async in the
+ // core zlib. We override .flush() temporarily to intercept that and
+ // flush synchronously.
+ const origFlush = this.handle.flush;
+ this.handle.flush = (flushFlag, cb) => {
+ /* c8 ignore start */
+ if (typeof flushFlag === 'function') {
+ cb = flushFlag;
+ flushFlag = this.flushFlag;
+ }
+ /* c8 ignore stop */
+ this.flush(flushFlag);
+ cb?.();
+ };
+ try {
+ ;
+ this.handle.params(level, strategy);
+ }
+ finally {
+ this.handle.flush = origFlush;
+ }
+ /* c8 ignore start */
+ if (this.handle) {
+ this.#level = level;
+ this.#strategy = strategy;
+ }
+ /* c8 ignore stop */
+ }
+ }
+}
+exports.Zlib = Zlib;
+// minimal 2-byte header
+class Deflate extends Zlib {
+ constructor(opts) {
+ super(opts, 'Deflate');
+ }
+}
+exports.Deflate = Deflate;
+class Inflate extends Zlib {
+ constructor(opts) {
+ super(opts, 'Inflate');
+ }
+}
+exports.Inflate = Inflate;
+class Gzip extends Zlib {
+ #portable;
+ constructor(opts) {
+ super(opts, 'Gzip');
+ this.#portable = opts && !!opts.portable;
+ }
+ [_superWrite](data) {
+ if (!this.#portable)
+ return super[_superWrite](data);
+ // we'll always get the header emitted in one first chunk
+ // overwrite the OS indicator byte with 0xFF
+ this.#portable = false;
+ data[9] = 255;
+ return super[_superWrite](data);
+ }
+}
+exports.Gzip = Gzip;
+class Gunzip extends Zlib {
+ constructor(opts) {
+ super(opts, 'Gunzip');
+ }
+}
+exports.Gunzip = Gunzip;
+// raw - no header
+class DeflateRaw extends Zlib {
+ constructor(opts) {
+ super(opts, 'DeflateRaw');
+ }
+}
+exports.DeflateRaw = DeflateRaw;
+class InflateRaw extends Zlib {
+ constructor(opts) {
+ super(opts, 'InflateRaw');
+ }
+}
+exports.InflateRaw = InflateRaw;
+// auto-detect header.
+class Unzip extends Zlib {
+ constructor(opts) {
+ super(opts, 'Unzip');
+ }
+}
+exports.Unzip = Unzip;
+class Brotli extends ZlibBase {
+ constructor(opts, mode) {
+ opts = opts || {};
+ opts.flush = opts.flush || constants_js_1.constants.BROTLI_OPERATION_PROCESS;
+ opts.finishFlush =
+ opts.finishFlush || constants_js_1.constants.BROTLI_OPERATION_FINISH;
+ opts.fullFlushFlag = constants_js_1.constants.BROTLI_OPERATION_FLUSH;
+ super(opts, mode);
+ }
+}
+exports.Brotli = Brotli;
+class BrotliCompress extends Brotli {
+ constructor(opts) {
+ super(opts, 'BrotliCompress');
+ }
+}
+exports.BrotliCompress = BrotliCompress;
+class BrotliDecompress extends Brotli {
+ constructor(opts) {
+ super(opts, 'BrotliDecompress');
+ }
+}
+exports.BrotliDecompress = BrotliDecompress;
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/minipass-fetch/node_modules/minizlib/dist/commonjs/package.json b/deps/npm/node_modules/minipass-fetch/node_modules/minizlib/dist/commonjs/package.json
new file mode 100644
index 00000000000..5bbefffbabe
--- /dev/null
+++ b/deps/npm/node_modules/minipass-fetch/node_modules/minizlib/dist/commonjs/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "commonjs"
+}
diff --git a/deps/npm/node_modules/minipass-fetch/node_modules/minizlib/dist/esm/constants.js b/deps/npm/node_modules/minipass-fetch/node_modules/minizlib/dist/esm/constants.js
new file mode 100644
index 00000000000..7faf40be506
--- /dev/null
+++ b/deps/npm/node_modules/minipass-fetch/node_modules/minizlib/dist/esm/constants.js
@@ -0,0 +1,117 @@
+// Update with any zlib constants that are added or changed in the future.
+// Node v6 didn't export this, so we just hard code the version and rely
+// on all the other hard-coded values from zlib v4736. When node v6
+// support drops, we can just export the realZlibConstants object.
+import realZlib from 'zlib';
+/* c8 ignore start */
+const realZlibConstants = realZlib.constants || { ZLIB_VERNUM: 4736 };
+/* c8 ignore stop */
+export const constants = Object.freeze(Object.assign(Object.create(null), {
+ Z_NO_FLUSH: 0,
+ Z_PARTIAL_FLUSH: 1,
+ Z_SYNC_FLUSH: 2,
+ Z_FULL_FLUSH: 3,
+ Z_FINISH: 4,
+ Z_BLOCK: 5,
+ Z_OK: 0,
+ Z_STREAM_END: 1,
+ Z_NEED_DICT: 2,
+ Z_ERRNO: -1,
+ Z_STREAM_ERROR: -2,
+ Z_DATA_ERROR: -3,
+ Z_MEM_ERROR: -4,
+ Z_BUF_ERROR: -5,
+ Z_VERSION_ERROR: -6,
+ Z_NO_COMPRESSION: 0,
+ Z_BEST_SPEED: 1,
+ Z_BEST_COMPRESSION: 9,
+ Z_DEFAULT_COMPRESSION: -1,
+ Z_FILTERED: 1,
+ Z_HUFFMAN_ONLY: 2,
+ Z_RLE: 3,
+ Z_FIXED: 4,
+ Z_DEFAULT_STRATEGY: 0,
+ DEFLATE: 1,
+ INFLATE: 2,
+ GZIP: 3,
+ GUNZIP: 4,
+ DEFLATERAW: 5,
+ INFLATERAW: 6,
+ UNZIP: 7,
+ BROTLI_DECODE: 8,
+ BROTLI_ENCODE: 9,
+ Z_MIN_WINDOWBITS: 8,
+ Z_MAX_WINDOWBITS: 15,
+ Z_DEFAULT_WINDOWBITS: 15,
+ Z_MIN_CHUNK: 64,
+ Z_MAX_CHUNK: Infinity,
+ Z_DEFAULT_CHUNK: 16384,
+ Z_MIN_MEMLEVEL: 1,
+ Z_MAX_MEMLEVEL: 9,
+ Z_DEFAULT_MEMLEVEL: 8,
+ Z_MIN_LEVEL: -1,
+ Z_MAX_LEVEL: 9,
+ Z_DEFAULT_LEVEL: -1,
+ BROTLI_OPERATION_PROCESS: 0,
+ BROTLI_OPERATION_FLUSH: 1,
+ BROTLI_OPERATION_FINISH: 2,
+ BROTLI_OPERATION_EMIT_METADATA: 3,
+ BROTLI_MODE_GENERIC: 0,
+ BROTLI_MODE_TEXT: 1,
+ BROTLI_MODE_FONT: 2,
+ BROTLI_DEFAULT_MODE: 0,
+ BROTLI_MIN_QUALITY: 0,
+ BROTLI_MAX_QUALITY: 11,
+ BROTLI_DEFAULT_QUALITY: 11,
+ BROTLI_MIN_WINDOW_BITS: 10,
+ BROTLI_MAX_WINDOW_BITS: 24,
+ BROTLI_LARGE_MAX_WINDOW_BITS: 30,
+ BROTLI_DEFAULT_WINDOW: 22,
+ BROTLI_MIN_INPUT_BLOCK_BITS: 16,
+ BROTLI_MAX_INPUT_BLOCK_BITS: 24,
+ BROTLI_PARAM_MODE: 0,
+ BROTLI_PARAM_QUALITY: 1,
+ BROTLI_PARAM_LGWIN: 2,
+ BROTLI_PARAM_LGBLOCK: 3,
+ BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING: 4,
+ BROTLI_PARAM_SIZE_HINT: 5,
+ BROTLI_PARAM_LARGE_WINDOW: 6,
+ BROTLI_PARAM_NPOSTFIX: 7,
+ BROTLI_PARAM_NDIRECT: 8,
+ BROTLI_DECODER_RESULT_ERROR: 0,
+ BROTLI_DECODER_RESULT_SUCCESS: 1,
+ BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT: 2,
+ BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT: 3,
+ BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION: 0,
+ BROTLI_DECODER_PARAM_LARGE_WINDOW: 1,
+ BROTLI_DECODER_NO_ERROR: 0,
+ BROTLI_DECODER_SUCCESS: 1,
+ BROTLI_DECODER_NEEDS_MORE_INPUT: 2,
+ BROTLI_DECODER_NEEDS_MORE_OUTPUT: 3,
+ BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE: -1,
+ BROTLI_DECODER_ERROR_FORMAT_RESERVED: -2,
+ BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE: -3,
+ BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET: -4,
+ BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME: -5,
+ BROTLI_DECODER_ERROR_FORMAT_CL_SPACE: -6,
+ BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE: -7,
+ BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT: -8,
+ BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1: -9,
+ BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2: -10,
+ BROTLI_DECODER_ERROR_FORMAT_TRANSFORM: -11,
+ BROTLI_DECODER_ERROR_FORMAT_DICTIONARY: -12,
+ BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS: -13,
+ BROTLI_DECODER_ERROR_FORMAT_PADDING_1: -14,
+ BROTLI_DECODER_ERROR_FORMAT_PADDING_2: -15,
+ BROTLI_DECODER_ERROR_FORMAT_DISTANCE: -16,
+ BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET: -19,
+ BROTLI_DECODER_ERROR_INVALID_ARGUMENTS: -20,
+ BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES: -21,
+ BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS: -22,
+ BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP: -25,
+ BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1: -26,
+ BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2: -27,
+ BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES: -30,
+ BROTLI_DECODER_ERROR_UNREACHABLE: -31,
+}, realZlibConstants));
+//# sourceMappingURL=constants.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/minipass-fetch/node_modules/minizlib/dist/esm/index.js b/deps/npm/node_modules/minipass-fetch/node_modules/minizlib/dist/esm/index.js
new file mode 100644
index 00000000000..a6269b505f4
--- /dev/null
+++ b/deps/npm/node_modules/minipass-fetch/node_modules/minizlib/dist/esm/index.js
@@ -0,0 +1,333 @@
+import assert from 'assert';
+import { Buffer } from 'buffer';
+import { Minipass } from 'minipass';
+import realZlib from 'zlib';
+import { constants } from './constants.js';
+export { constants } from './constants.js';
+const OriginalBufferConcat = Buffer.concat;
+const _superWrite = Symbol('_superWrite');
+export class ZlibError extends Error {
+ code;
+ errno;
+ constructor(err) {
+ super('zlib: ' + err.message);
+ this.code = err.code;
+ this.errno = err.errno;
+ /* c8 ignore next */
+ if (!this.code)
+ this.code = 'ZLIB_ERROR';
+ this.message = 'zlib: ' + err.message;
+ Error.captureStackTrace(this, this.constructor);
+ }
+ get name() {
+ return 'ZlibError';
+ }
+}
+// the Zlib class they all inherit from
+// This thing manages the queue of requests, and returns
+// true or false if there is anything in the queue when
+// you call the .write() method.
+const _flushFlag = Symbol('flushFlag');
+class ZlibBase extends Minipass {
+ #sawError = false;
+ #ended = false;
+ #flushFlag;
+ #finishFlushFlag;
+ #fullFlushFlag;
+ #handle;
+ #onError;
+ get sawError() {
+ return this.#sawError;
+ }
+ get handle() {
+ return this.#handle;
+ }
+ /* c8 ignore start */
+ get flushFlag() {
+ return this.#flushFlag;
+ }
+ /* c8 ignore stop */
+ constructor(opts, mode) {
+ if (!opts || typeof opts !== 'object')
+ throw new TypeError('invalid options for ZlibBase constructor');
+ //@ts-ignore
+ super(opts);
+ /* c8 ignore start */
+ this.#flushFlag = opts.flush ?? 0;
+ this.#finishFlushFlag = opts.finishFlush ?? 0;
+ this.#fullFlushFlag = opts.fullFlushFlag ?? 0;
+ /* c8 ignore stop */
+ // this will throw if any options are invalid for the class selected
+ try {
+ // @types/node doesn't know that it exports the classes, but they're there
+ //@ts-ignore
+ this.#handle = new realZlib[mode](opts);
+ }
+ catch (er) {
+ // make sure that all errors get decorated properly
+ throw new ZlibError(er);
+ }
+ this.#onError = err => {
+ // no sense raising multiple errors, since we abort on the first one.
+ if (this.#sawError)
+ return;
+ this.#sawError = true;
+ // there is no way to cleanly recover.
+ // continuing only obscures problems.
+ this.close();
+ this.emit('error', err);
+ };
+ this.#handle?.on('error', er => this.#onError(new ZlibError(er)));
+ this.once('end', () => this.close);
+ }
+ close() {
+ if (this.#handle) {
+ this.#handle.close();
+ this.#handle = undefined;
+ this.emit('close');
+ }
+ }
+ reset() {
+ if (!this.#sawError) {
+ assert(this.#handle, 'zlib binding closed');
+ //@ts-ignore
+ return this.#handle.reset?.();
+ }
+ }
+ flush(flushFlag) {
+ if (this.ended)
+ return;
+ if (typeof flushFlag !== 'number')
+ flushFlag = this.#fullFlushFlag;
+ this.write(Object.assign(Buffer.alloc(0), { [_flushFlag]: flushFlag }));
+ }
+ end(chunk, encoding, cb) {
+ /* c8 ignore start */
+ if (typeof chunk === 'function') {
+ cb = chunk;
+ encoding = undefined;
+ chunk = undefined;
+ }
+ if (typeof encoding === 'function') {
+ cb = encoding;
+ encoding = undefined;
+ }
+ /* c8 ignore stop */
+ if (chunk) {
+ if (encoding)
+ this.write(chunk, encoding);
+ else
+ this.write(chunk);
+ }
+ this.flush(this.#finishFlushFlag);
+ this.#ended = true;
+ return super.end(cb);
+ }
+ get ended() {
+ return this.#ended;
+ }
+ // overridden in the gzip classes to do portable writes
+ [_superWrite](data) {
+ return super.write(data);
+ }
+ write(chunk, encoding, cb) {
+ // process the chunk using the sync process
+ // then super.write() all the outputted chunks
+ if (typeof encoding === 'function')
+ (cb = encoding), (encoding = 'utf8');
+ if (typeof chunk === 'string')
+ chunk = Buffer.from(chunk, encoding);
+ if (this.#sawError)
+ return;
+ assert(this.#handle, 'zlib binding closed');
+ // _processChunk tries to .close() the native handle after it's done, so we
+ // intercept that by temporarily making it a no-op.
+ // diving into the node:zlib internals a bit here
+ const nativeHandle = this.#handle
+ ._handle;
+ const originalNativeClose = nativeHandle.close;
+ nativeHandle.close = () => { };
+ const originalClose = this.#handle.close;
+ this.#handle.close = () => { };
+ // It also calls `Buffer.concat()` at the end, which may be convenient
+ // for some, but which we are not interested in as it slows us down.
+ Buffer.concat = args => args;
+ let result = undefined;
+ try {
+ const flushFlag = typeof chunk[_flushFlag] === 'number'
+ ? chunk[_flushFlag]
+ : this.#flushFlag;
+ result = this.#handle._processChunk(chunk, flushFlag);
+ // if we don't throw, reset it back how it was
+ Buffer.concat = OriginalBufferConcat;
+ }
+ catch (err) {
+ // or if we do, put Buffer.concat() back before we emit error
+ // Error events call into user code, which may call Buffer.concat()
+ Buffer.concat = OriginalBufferConcat;
+ this.#onError(new ZlibError(err));
+ }
+ finally {
+ if (this.#handle) {
+ // Core zlib resets `_handle` to null after attempting to close the
+ // native handle. Our no-op handler prevented actual closure, but we
+ // need to restore the `._handle` property.
+ ;
+ this.#handle._handle =
+ nativeHandle;
+ nativeHandle.close = originalNativeClose;
+ this.#handle.close = originalClose;
+ // `_processChunk()` adds an 'error' listener. If we don't remove it
+ // after each call, these handlers start piling up.
+ this.#handle.removeAllListeners('error');
+ // make sure OUR error listener is still attached tho
+ }
+ }
+ if (this.#handle)
+ this.#handle.on('error', er => this.#onError(new ZlibError(er)));
+ let writeReturn;
+ if (result) {
+ if (Array.isArray(result) && result.length > 0) {
+ const r = result[0];
+ // The first buffer is always `handle._outBuffer`, which would be
+ // re-used for later invocations; so, we always have to copy that one.
+ writeReturn = this[_superWrite](Buffer.from(r));
+ for (let i = 1; i < result.length; i++) {
+ writeReturn = this[_superWrite](result[i]);
+ }
+ }
+ else {
+ // either a single Buffer or an empty array
+ writeReturn = this[_superWrite](Buffer.from(result));
+ }
+ }
+ if (cb)
+ cb();
+ return writeReturn;
+ }
+}
+export class Zlib extends ZlibBase {
+ #level;
+ #strategy;
+ constructor(opts, mode) {
+ opts = opts || {};
+ opts.flush = opts.flush || constants.Z_NO_FLUSH;
+ opts.finishFlush = opts.finishFlush || constants.Z_FINISH;
+ opts.fullFlushFlag = constants.Z_FULL_FLUSH;
+ super(opts, mode);
+ this.#level = opts.level;
+ this.#strategy = opts.strategy;
+ }
+ params(level, strategy) {
+ if (this.sawError)
+ return;
+ if (!this.handle)
+ throw new Error('cannot switch params when binding is closed');
+ // no way to test this without also not supporting params at all
+ /* c8 ignore start */
+ if (!this.handle.params)
+ throw new Error('not supported in this implementation');
+ /* c8 ignore stop */
+ if (this.#level !== level || this.#strategy !== strategy) {
+ this.flush(constants.Z_SYNC_FLUSH);
+ assert(this.handle, 'zlib binding closed');
+ // .params() calls .flush(), but the latter is always async in the
+ // core zlib. We override .flush() temporarily to intercept that and
+ // flush synchronously.
+ const origFlush = this.handle.flush;
+ this.handle.flush = (flushFlag, cb) => {
+ /* c8 ignore start */
+ if (typeof flushFlag === 'function') {
+ cb = flushFlag;
+ flushFlag = this.flushFlag;
+ }
+ /* c8 ignore stop */
+ this.flush(flushFlag);
+ cb?.();
+ };
+ try {
+ ;
+ this.handle.params(level, strategy);
+ }
+ finally {
+ this.handle.flush = origFlush;
+ }
+ /* c8 ignore start */
+ if (this.handle) {
+ this.#level = level;
+ this.#strategy = strategy;
+ }
+ /* c8 ignore stop */
+ }
+ }
+}
+// minimal 2-byte header
+export class Deflate extends Zlib {
+ constructor(opts) {
+ super(opts, 'Deflate');
+ }
+}
+export class Inflate extends Zlib {
+ constructor(opts) {
+ super(opts, 'Inflate');
+ }
+}
+export class Gzip extends Zlib {
+ #portable;
+ constructor(opts) {
+ super(opts, 'Gzip');
+ this.#portable = opts && !!opts.portable;
+ }
+ [_superWrite](data) {
+ if (!this.#portable)
+ return super[_superWrite](data);
+ // we'll always get the header emitted in one first chunk
+ // overwrite the OS indicator byte with 0xFF
+ this.#portable = false;
+ data[9] = 255;
+ return super[_superWrite](data);
+ }
+}
+export class Gunzip extends Zlib {
+ constructor(opts) {
+ super(opts, 'Gunzip');
+ }
+}
+// raw - no header
+export class DeflateRaw extends Zlib {
+ constructor(opts) {
+ super(opts, 'DeflateRaw');
+ }
+}
+export class InflateRaw extends Zlib {
+ constructor(opts) {
+ super(opts, 'InflateRaw');
+ }
+}
+// auto-detect header.
+export class Unzip extends Zlib {
+ constructor(opts) {
+ super(opts, 'Unzip');
+ }
+}
+export class Brotli extends ZlibBase {
+ constructor(opts, mode) {
+ opts = opts || {};
+ opts.flush = opts.flush || constants.BROTLI_OPERATION_PROCESS;
+ opts.finishFlush =
+ opts.finishFlush || constants.BROTLI_OPERATION_FINISH;
+ opts.fullFlushFlag = constants.BROTLI_OPERATION_FLUSH;
+ super(opts, mode);
+ }
+}
+export class BrotliCompress extends Brotli {
+ constructor(opts) {
+ super(opts, 'BrotliCompress');
+ }
+}
+export class BrotliDecompress extends Brotli {
+ constructor(opts) {
+ super(opts, 'BrotliDecompress');
+ }
+}
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/minipass-fetch/node_modules/minizlib/dist/esm/package.json b/deps/npm/node_modules/minipass-fetch/node_modules/minizlib/dist/esm/package.json
new file mode 100644
index 00000000000..3dbc1ca591c
--- /dev/null
+++ b/deps/npm/node_modules/minipass-fetch/node_modules/minizlib/dist/esm/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "module"
+}
diff --git a/deps/npm/node_modules/minipass-fetch/node_modules/minizlib/package.json b/deps/npm/node_modules/minipass-fetch/node_modules/minizlib/package.json
new file mode 100644
index 00000000000..e94623ff43d
--- /dev/null
+++ b/deps/npm/node_modules/minipass-fetch/node_modules/minizlib/package.json
@@ -0,0 +1,81 @@
+{
+ "name": "minizlib",
+ "version": "3.0.1",
+ "description": "A small fast zlib stream built on [minipass](http://npm.im/minipass) and Node.js's zlib binding.",
+ "main": "./dist/commonjs/index.js",
+ "dependencies": {
+ "minipass": "^7.0.4",
+ "rimraf": "^5.0.5"
+ },
+ "scripts": {
+ "prepare": "tshy",
+ "pretest": "npm run prepare",
+ "test": "tap",
+ "preversion": "npm test",
+ "postversion": "npm publish",
+ "prepublishOnly": "git push origin --follow-tags",
+ "format": "prettier --write . --loglevel warn",
+ "typedoc": "typedoc --tsconfig .tshy/esm.json ./src/*.ts"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/isaacs/minizlib.git"
+ },
+ "keywords": [
+ "zlib",
+ "gzip",
+ "gunzip",
+ "deflate",
+ "inflate",
+ "compression",
+ "zip",
+ "unzip"
+ ],
+ "author": "Isaac Z. Schlueter (http://blog.izs.me/)",
+ "license": "MIT",
+ "devDependencies": {
+ "@types/node": "^20.11.29",
+ "mkdirp": "^3.0.1",
+ "tap": "^18.7.1",
+ "tshy": "^1.12.0",
+ "typedoc": "^0.25.12"
+ },
+ "files": [
+ "dist"
+ ],
+ "engines": {
+ "node": ">= 18"
+ },
+ "tshy": {
+ "exports": {
+ "./package.json": "./package.json",
+ ".": "./src/index.ts"
+ }
+ },
+ "exports": {
+ "./package.json": "./package.json",
+ ".": {
+ "import": {
+ "types": "./dist/esm/index.d.ts",
+ "default": "./dist/esm/index.js"
+ },
+ "require": {
+ "types": "./dist/commonjs/index.d.ts",
+ "default": "./dist/commonjs/index.js"
+ }
+ }
+ },
+ "types": "./dist/commonjs/index.d.ts",
+ "type": "module",
+ "prettier": {
+ "semi": false,
+ "printWidth": 75,
+ "tabWidth": 2,
+ "useTabs": false,
+ "singleQuote": true,
+ "jsxSingleQuote": false,
+ "bracketSameLine": true,
+ "arrowParens": "avoid",
+ "endOfLine": "lf"
+ }
+}
diff --git a/deps/npm/node_modules/minipass-fetch/package.json b/deps/npm/node_modules/minipass-fetch/package.json
index d491a7fba12..6e248345980 100644
--- a/deps/npm/node_modules/minipass-fetch/package.json
+++ b/deps/npm/node_modules/minipass-fetch/package.json
@@ -1,6 +1,6 @@
{
"name": "minipass-fetch",
- "version": "3.0.5",
+ "version": "4.0.0",
"description": "An implementation of window.fetch in Node.js using Minipass streams",
"license": "MIT",
"main": "lib/index.js",
@@ -8,11 +8,12 @@
"test:tls-fixtures": "./test/fixtures/tls/setup.sh",
"test": "tap",
"snap": "tap",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
"postlint": "template-oss-check",
- "lintfix": "npm run lint -- --fix",
+ "lintfix": "npm run eslint -- --fix",
"posttest": "npm run lint",
- "template-oss-apply": "template-oss-apply --force"
+ "template-oss-apply": "template-oss-apply --force",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"tap": {
"coverage-map": "map.js",
@@ -23,8 +24,8 @@
]
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.22.0",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"@ungap/url-search-params": "^0.2.2",
"abort-controller": "^3.0.0",
"abortcontroller-polyfill": "~1.7.3",
@@ -38,7 +39,7 @@
"dependencies": {
"minipass": "^7.0.3",
"minipass-sized": "^1.0.3",
- "minizlib": "^2.1.2"
+ "minizlib": "^3.0.1"
},
"optionalDependencies": {
"encoding": "^0.1.13"
@@ -58,12 +59,12 @@
"lib/"
],
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"author": "GitHub Inc.",
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.22.0",
+ "version": "4.23.3",
"publish": "true"
}
}
diff --git a/deps/npm/node_modules/mute-stream/package.json b/deps/npm/node_modules/mute-stream/package.json
index 37b2f5070ed..3725daf0810 100644
--- a/deps/npm/node_modules/mute-stream/package.json
+++ b/deps/npm/node_modules/mute-stream/package.json
@@ -1,24 +1,25 @@
{
"name": "mute-stream",
- "version": "1.0.0",
+ "version": "2.0.0",
"main": "lib/index.js",
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.11.0",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"tap": "^16.3.0"
},
"scripts": {
"test": "tap",
- "lint": "eslint \"**/*.js\"",
+ "lint": "npm run eslint",
"postlint": "template-oss-check",
"template-oss-apply": "template-oss-apply --force",
- "lintfix": "npm run lint -- --fix",
+ "lintfix": "npm run eslint -- --fix",
"snap": "tap",
- "posttest": "npm run lint"
+ "posttest": "npm run lint",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"repository": {
"type": "git",
- "url": "https://github.com/npm/mute-stream.git"
+ "url": "git+https://github.com/npm/mute-stream.git"
},
"keywords": [
"mute",
@@ -43,10 +44,11 @@
]
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.11.0"
+ "version": "4.23.3",
+ "publish": true
}
}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/@npmcli/agent/lib/agents.js b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/agent/lib/agents.js
new file mode 100644
index 00000000000..c541b930015
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/agent/lib/agents.js
@@ -0,0 +1,206 @@
+'use strict'
+
+const net = require('net')
+const tls = require('tls')
+const { once } = require('events')
+const timers = require('timers/promises')
+const { normalizeOptions, cacheOptions } = require('./options')
+const { getProxy, getProxyAgent, proxyCache } = require('./proxy.js')
+const Errors = require('./errors.js')
+const { Agent: AgentBase } = require('agent-base')
+
+module.exports = class Agent extends AgentBase {
+ #options
+ #timeouts
+ #proxy
+ #noProxy
+ #ProxyAgent
+
+ constructor (options = {}) {
+ const { timeouts, proxy, noProxy, ...normalizedOptions } = normalizeOptions(options)
+
+ super(normalizedOptions)
+
+ this.#options = normalizedOptions
+ this.#timeouts = timeouts
+
+ if (proxy) {
+ this.#proxy = new URL(proxy)
+ this.#noProxy = noProxy
+ this.#ProxyAgent = getProxyAgent(proxy)
+ }
+ }
+
+ get proxy () {
+ return this.#proxy ? { url: this.#proxy } : {}
+ }
+
+ #getProxy (options) {
+ if (!this.#proxy) {
+ return
+ }
+
+ const proxy = getProxy(`${options.protocol}//${options.host}:${options.port}`, {
+ proxy: this.#proxy,
+ noProxy: this.#noProxy,
+ })
+
+ if (!proxy) {
+ return
+ }
+
+ const cacheKey = cacheOptions({
+ ...options,
+ ...this.#options,
+ timeouts: this.#timeouts,
+ proxy,
+ })
+
+ if (proxyCache.has(cacheKey)) {
+ return proxyCache.get(cacheKey)
+ }
+
+ let ProxyAgent = this.#ProxyAgent
+ if (Array.isArray(ProxyAgent)) {
+ ProxyAgent = this.isSecureEndpoint(options) ? ProxyAgent[1] : ProxyAgent[0]
+ }
+
+ const proxyAgent = new ProxyAgent(proxy, {
+ ...this.#options,
+ socketOptions: { family: this.#options.family },
+ })
+ proxyCache.set(cacheKey, proxyAgent)
+
+ return proxyAgent
+ }
+
+ // takes an array of promises and races them against the connection timeout
+ // which will throw the necessary error if it is hit. This will return the
+ // result of the promise race.
+ async #timeoutConnection ({ promises, options, timeout }, ac = new AbortController()) {
+ if (timeout) {
+ const connectionTimeout = timers.setTimeout(timeout, null, { signal: ac.signal })
+ .then(() => {
+ throw new Errors.ConnectionTimeoutError(`${options.host}:${options.port}`)
+ }).catch((err) => {
+ if (err.name === 'AbortError') {
+ return
+ }
+ throw err
+ })
+ promises.push(connectionTimeout)
+ }
+
+ let result
+ try {
+ result = await Promise.race(promises)
+ ac.abort()
+ } catch (err) {
+ ac.abort()
+ throw err
+ }
+ return result
+ }
+
+ async connect (request, options) {
+ // if the connection does not have its own lookup function
+ // set, then use the one from our options
+ options.lookup ??= this.#options.lookup
+
+ let socket
+ let timeout = this.#timeouts.connection
+ const isSecureEndpoint = this.isSecureEndpoint(options)
+
+ const proxy = this.#getProxy(options)
+ if (proxy) {
+ // some of the proxies will wait for the socket to fully connect before
+ // returning so we have to await this while also racing it against the
+ // connection timeout.
+ const start = Date.now()
+ socket = await this.#timeoutConnection({
+ options,
+ timeout,
+ promises: [proxy.connect(request, options)],
+ })
+ // see how much time proxy.connect took and subtract it from
+ // the timeout
+ if (timeout) {
+ timeout = timeout - (Date.now() - start)
+ }
+ } else {
+ socket = (isSecureEndpoint ? tls : net).connect(options)
+ }
+
+ socket.setKeepAlive(this.keepAlive, this.keepAliveMsecs)
+ socket.setNoDelay(this.keepAlive)
+
+ const abortController = new AbortController()
+ const { signal } = abortController
+
+ const connectPromise = socket[isSecureEndpoint ? 'secureConnecting' : 'connecting']
+ ? once(socket, isSecureEndpoint ? 'secureConnect' : 'connect', { signal })
+ : Promise.resolve()
+
+ await this.#timeoutConnection({
+ options,
+ timeout,
+ promises: [
+ connectPromise,
+ once(socket, 'error', { signal }).then((err) => {
+ throw err[0]
+ }),
+ ],
+ }, abortController)
+
+ if (this.#timeouts.idle) {
+ socket.setTimeout(this.#timeouts.idle, () => {
+ socket.destroy(new Errors.IdleTimeoutError(`${options.host}:${options.port}`))
+ })
+ }
+
+ return socket
+ }
+
+ addRequest (request, options) {
+ const proxy = this.#getProxy(options)
+ // it would be better to call proxy.addRequest here but this causes the
+ // http-proxy-agent to call its super.addRequest which causes the request
+ // to be added to the agent twice. since we only support 3 agents
+ // currently (see the required agents in proxy.js) we have manually
+ // checked that the only public methods we need to call are called in the
+ // next block. this could change in the future and presumably we would get
+ // failing tests until we have properly called the necessary methods on
+ // each of our proxy agents
+ if (proxy?.setRequestProps) {
+ proxy.setRequestProps(request, options)
+ }
+
+ request.setHeader('connection', this.keepAlive ? 'keep-alive' : 'close')
+
+ if (this.#timeouts.response) {
+ let responseTimeout
+ request.once('finish', () => {
+ setTimeout(() => {
+ request.destroy(new Errors.ResponseTimeoutError(request, this.#proxy))
+ }, this.#timeouts.response)
+ })
+ request.once('response', () => {
+ clearTimeout(responseTimeout)
+ })
+ }
+
+ if (this.#timeouts.transfer) {
+ let transferTimeout
+ request.once('response', (res) => {
+ setTimeout(() => {
+ res.destroy(new Errors.TransferTimeoutError(request, this.#proxy))
+ }, this.#timeouts.transfer)
+ res.once('close', () => {
+ clearTimeout(transferTimeout)
+ })
+ })
+ }
+
+ return super.addRequest(request, options)
+ }
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/@npmcli/agent/lib/dns.js b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/agent/lib/dns.js
new file mode 100644
index 00000000000..3c6946c566d
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/agent/lib/dns.js
@@ -0,0 +1,53 @@
+'use strict'
+
+const { LRUCache } = require('lru-cache')
+const dns = require('dns')
+
+// this is a factory so that each request can have its own opts (i.e. ttl)
+// while still sharing the cache across all requests
+const cache = new LRUCache({ max: 50 })
+
+const getOptions = ({
+ family = 0,
+ hints = dns.ADDRCONFIG,
+ all = false,
+ verbatim = undefined,
+ ttl = 5 * 60 * 1000,
+ lookup = dns.lookup,
+}) => ({
+ // hints and lookup are returned since both are top level properties to (net|tls).connect
+ hints,
+ lookup: (hostname, ...args) => {
+ const callback = args.pop() // callback is always last arg
+ const lookupOptions = args[0] ?? {}
+
+ const options = {
+ family,
+ hints,
+ all,
+ verbatim,
+ ...(typeof lookupOptions === 'number' ? { family: lookupOptions } : lookupOptions),
+ }
+
+ const key = JSON.stringify({ hostname, ...options })
+
+ if (cache.has(key)) {
+ const cached = cache.get(key)
+ return process.nextTick(callback, null, ...cached)
+ }
+
+ lookup(hostname, options, (err, ...result) => {
+ if (err) {
+ return callback(err)
+ }
+
+ cache.set(key, result, { ttl })
+ return callback(null, ...result)
+ })
+ },
+})
+
+module.exports = {
+ cache,
+ getOptions,
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/@npmcli/agent/lib/errors.js b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/agent/lib/errors.js
new file mode 100644
index 00000000000..70475aec8eb
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/agent/lib/errors.js
@@ -0,0 +1,61 @@
+'use strict'
+
+class InvalidProxyProtocolError extends Error {
+ constructor (url) {
+ super(`Invalid protocol \`${url.protocol}\` connecting to proxy \`${url.host}\``)
+ this.code = 'EINVALIDPROXY'
+ this.proxy = url
+ }
+}
+
+class ConnectionTimeoutError extends Error {
+ constructor (host) {
+ super(`Timeout connecting to host \`${host}\``)
+ this.code = 'ECONNECTIONTIMEOUT'
+ this.host = host
+ }
+}
+
+class IdleTimeoutError extends Error {
+ constructor (host) {
+ super(`Idle timeout reached for host \`${host}\``)
+ this.code = 'EIDLETIMEOUT'
+ this.host = host
+ }
+}
+
+class ResponseTimeoutError extends Error {
+ constructor (request, proxy) {
+ let msg = 'Response timeout '
+ if (proxy) {
+ msg += `from proxy \`${proxy.host}\` `
+ }
+ msg += `connecting to host \`${request.host}\``
+ super(msg)
+ this.code = 'ERESPONSETIMEOUT'
+ this.proxy = proxy
+ this.request = request
+ }
+}
+
+class TransferTimeoutError extends Error {
+ constructor (request, proxy) {
+ let msg = 'Transfer timeout '
+ if (proxy) {
+ msg += `from proxy \`${proxy.host}\` `
+ }
+ msg += `for \`${request.host}\``
+ super(msg)
+ this.code = 'ETRANSFERTIMEOUT'
+ this.proxy = proxy
+ this.request = request
+ }
+}
+
+module.exports = {
+ InvalidProxyProtocolError,
+ ConnectionTimeoutError,
+ IdleTimeoutError,
+ ResponseTimeoutError,
+ TransferTimeoutError,
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/@npmcli/agent/lib/index.js b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/agent/lib/index.js
new file mode 100644
index 00000000000..b33d6eaef07
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/agent/lib/index.js
@@ -0,0 +1,56 @@
+'use strict'
+
+const { LRUCache } = require('lru-cache')
+const { normalizeOptions, cacheOptions } = require('./options')
+const { getProxy, proxyCache } = require('./proxy.js')
+const dns = require('./dns.js')
+const Agent = require('./agents.js')
+
+const agentCache = new LRUCache({ max: 20 })
+
+const getAgent = (url, { agent, proxy, noProxy, ...options } = {}) => {
+ // false has meaning so this can't be a simple truthiness check
+ if (agent != null) {
+ return agent
+ }
+
+ url = new URL(url)
+
+ const proxyForUrl = getProxy(url, { proxy, noProxy })
+ const normalizedOptions = {
+ ...normalizeOptions(options),
+ proxy: proxyForUrl,
+ }
+
+ const cacheKey = cacheOptions({
+ ...normalizedOptions,
+ secureEndpoint: url.protocol === 'https:',
+ })
+
+ if (agentCache.has(cacheKey)) {
+ return agentCache.get(cacheKey)
+ }
+
+ const newAgent = new Agent(normalizedOptions)
+ agentCache.set(cacheKey, newAgent)
+
+ return newAgent
+}
+
+module.exports = {
+ getAgent,
+ Agent,
+ // these are exported for backwards compatability
+ HttpAgent: Agent,
+ HttpsAgent: Agent,
+ cache: {
+ proxy: proxyCache,
+ agent: agentCache,
+ dns: dns.cache,
+ clear: () => {
+ proxyCache.clear()
+ agentCache.clear()
+ dns.cache.clear()
+ },
+ },
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/@npmcli/agent/lib/options.js b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/agent/lib/options.js
new file mode 100644
index 00000000000..0bf53f725f0
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/agent/lib/options.js
@@ -0,0 +1,86 @@
+'use strict'
+
+const dns = require('./dns')
+
+const normalizeOptions = (opts) => {
+ const family = parseInt(opts.family ?? '0', 10)
+ const keepAlive = opts.keepAlive ?? true
+
+ const normalized = {
+ // nodejs http agent options. these are all the defaults
+ // but kept here to increase the likelihood of cache hits
+ // https://nodejs.org/api/http.html#new-agentoptions
+ keepAliveMsecs: keepAlive ? 1000 : undefined,
+ maxSockets: opts.maxSockets ?? 15,
+ maxTotalSockets: Infinity,
+ maxFreeSockets: keepAlive ? 256 : undefined,
+ scheduling: 'fifo',
+ // then spread the rest of the options
+ ...opts,
+ // we already set these to their defaults that we want
+ family,
+ keepAlive,
+ // our custom timeout options
+ timeouts: {
+ // the standard timeout option is mapped to our idle timeout
+ // and then deleted below
+ idle: opts.timeout ?? 0,
+ connection: 0,
+ response: 0,
+ transfer: 0,
+ ...opts.timeouts,
+ },
+ // get the dns options that go at the top level of socket connection
+ ...dns.getOptions({ family, ...opts.dns }),
+ }
+
+ // remove timeout since we already used it to set our own idle timeout
+ delete normalized.timeout
+
+ return normalized
+}
+
+const createKey = (obj) => {
+ let key = ''
+ const sorted = Object.entries(obj).sort((a, b) => a[0] - b[0])
+ for (let [k, v] of sorted) {
+ if (v == null) {
+ v = 'null'
+ } else if (v instanceof URL) {
+ v = v.toString()
+ } else if (typeof v === 'object') {
+ v = createKey(v)
+ }
+ key += `${k}:${v}:`
+ }
+ return key
+}
+
+const cacheOptions = ({ secureEndpoint, ...options }) => createKey({
+ secureEndpoint: !!secureEndpoint,
+ // socket connect options
+ family: options.family,
+ hints: options.hints,
+ localAddress: options.localAddress,
+ // tls specific connect options
+ strictSsl: secureEndpoint ? !!options.rejectUnauthorized : false,
+ ca: secureEndpoint ? options.ca : null,
+ cert: secureEndpoint ? options.cert : null,
+ key: secureEndpoint ? options.key : null,
+ // http agent options
+ keepAlive: options.keepAlive,
+ keepAliveMsecs: options.keepAliveMsecs,
+ maxSockets: options.maxSockets,
+ maxTotalSockets: options.maxTotalSockets,
+ maxFreeSockets: options.maxFreeSockets,
+ scheduling: options.scheduling,
+ // timeout options
+ timeouts: options.timeouts,
+ // proxy
+ proxy: options.proxy,
+})
+
+module.exports = {
+ normalizeOptions,
+ cacheOptions,
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/@npmcli/agent/lib/proxy.js b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/agent/lib/proxy.js
new file mode 100644
index 00000000000..6272e929e57
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/agent/lib/proxy.js
@@ -0,0 +1,88 @@
+'use strict'
+
+const { HttpProxyAgent } = require('http-proxy-agent')
+const { HttpsProxyAgent } = require('https-proxy-agent')
+const { SocksProxyAgent } = require('socks-proxy-agent')
+const { LRUCache } = require('lru-cache')
+const { InvalidProxyProtocolError } = require('./errors.js')
+
+const PROXY_CACHE = new LRUCache({ max: 20 })
+
+const SOCKS_PROTOCOLS = new Set(SocksProxyAgent.protocols)
+
+const PROXY_ENV_KEYS = new Set(['https_proxy', 'http_proxy', 'proxy', 'no_proxy'])
+
+const PROXY_ENV = Object.entries(process.env).reduce((acc, [key, value]) => {
+ key = key.toLowerCase()
+ if (PROXY_ENV_KEYS.has(key)) {
+ acc[key] = value
+ }
+ return acc
+}, {})
+
+const getProxyAgent = (url) => {
+ url = new URL(url)
+
+ const protocol = url.protocol.slice(0, -1)
+ if (SOCKS_PROTOCOLS.has(protocol)) {
+ return SocksProxyAgent
+ }
+ if (protocol === 'https' || protocol === 'http') {
+ return [HttpProxyAgent, HttpsProxyAgent]
+ }
+
+ throw new InvalidProxyProtocolError(url)
+}
+
+const isNoProxy = (url, noProxy) => {
+ if (typeof noProxy === 'string') {
+ noProxy = noProxy.split(',').map((p) => p.trim()).filter(Boolean)
+ }
+
+ if (!noProxy || !noProxy.length) {
+ return false
+ }
+
+ const hostSegments = url.hostname.split('.').reverse()
+
+ return noProxy.some((no) => {
+ const noSegments = no.split('.').filter(Boolean).reverse()
+ if (!noSegments.length) {
+ return false
+ }
+
+ for (let i = 0; i < noSegments.length; i++) {
+ if (hostSegments[i] !== noSegments[i]) {
+ return false
+ }
+ }
+
+ return true
+ })
+}
+
+const getProxy = (url, { proxy, noProxy }) => {
+ url = new URL(url)
+
+ if (!proxy) {
+ proxy = url.protocol === 'https:'
+ ? PROXY_ENV.https_proxy
+ : PROXY_ENV.https_proxy || PROXY_ENV.http_proxy || PROXY_ENV.proxy
+ }
+
+ if (!noProxy) {
+ noProxy = PROXY_ENV.no_proxy
+ }
+
+ if (!proxy || isNoProxy(url, noProxy)) {
+ return null
+ }
+
+ return new URL(proxy)
+}
+
+module.exports = {
+ getProxyAgent,
+ getProxy,
+ proxyCache: PROXY_CACHE,
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/@npmcli/agent/package.json b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/agent/package.json
new file mode 100644
index 00000000000..ef5b4e3228c
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/agent/package.json
@@ -0,0 +1,60 @@
+{
+ "name": "@npmcli/agent",
+ "version": "2.2.2",
+ "description": "the http/https agent used by the npm cli",
+ "main": "lib/index.js",
+ "scripts": {
+ "gencerts": "bash scripts/create-cert.sh",
+ "test": "tap",
+ "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "postlint": "template-oss-check",
+ "template-oss-apply": "template-oss-apply --force",
+ "lintfix": "npm run lint -- --fix",
+ "snap": "tap",
+ "posttest": "npm run lint"
+ },
+ "author": "GitHub Inc.",
+ "license": "ISC",
+ "bugs": {
+ "url": "https://github.com/npm/agent/issues"
+ },
+ "homepage": "https://github.com/npm/agent#readme",
+ "files": [
+ "bin/",
+ "lib/"
+ ],
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ },
+ "templateOSS": {
+ "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
+ "version": "4.21.3",
+ "publish": "true"
+ },
+ "dependencies": {
+ "agent-base": "^7.1.0",
+ "http-proxy-agent": "^7.0.0",
+ "https-proxy-agent": "^7.0.1",
+ "lru-cache": "^10.0.1",
+ "socks-proxy-agent": "^8.0.3"
+ },
+ "devDependencies": {
+ "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/template-oss": "4.21.3",
+ "minipass-fetch": "^3.0.3",
+ "nock": "^13.2.7",
+ "semver": "^7.5.4",
+ "simple-socks": "^3.1.0",
+ "tap": "^16.3.0"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/npm/agent.git"
+ },
+ "tap": {
+ "nyc-arg": [
+ "--exclude",
+ "tap-snapshots/**"
+ ]
+ }
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/LICENSE.md b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/LICENSE.md
new file mode 100644
index 00000000000..5fc208ff122
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/LICENSE.md
@@ -0,0 +1,20 @@
+
+
+ISC License
+
+Copyright npm, Inc.
+
+Permission to use, copy, modify, and/or distribute this
+software for any purpose with or without fee is hereby
+granted, provided that the above copyright notice and this
+permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND NPM DISCLAIMS ALL
+WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
+EVENT SHALL NPM BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
+USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/common/get-options.js b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/common/get-options.js
new file mode 100644
index 00000000000..cb5982f7907
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/common/get-options.js
@@ -0,0 +1,20 @@
+// given an input that may or may not be an object, return an object that has
+// a copy of every defined property listed in 'copy'. if the input is not an
+// object, assign it to the property named by 'wrap'
+const getOptions = (input, { copy, wrap }) => {
+ const result = {}
+
+ if (input && typeof input === 'object') {
+ for (const prop of copy) {
+ if (input[prop] !== undefined) {
+ result[prop] = input[prop]
+ }
+ }
+ } else {
+ result[wrap] = input
+ }
+
+ return result
+}
+
+module.exports = getOptions
diff --git a/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/common/node.js b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/common/node.js
new file mode 100644
index 00000000000..4d13bc03735
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/common/node.js
@@ -0,0 +1,9 @@
+const semver = require('semver')
+
+const satisfies = (range) => {
+ return semver.satisfies(process.version, range, { includePrerelease: true })
+}
+
+module.exports = {
+ satisfies,
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/cp/LICENSE b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/cp/LICENSE
new file mode 100644
index 00000000000..93546dfb765
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/cp/LICENSE
@@ -0,0 +1,15 @@
+(The MIT License)
+
+Copyright (c) 2011-2017 JP Richardson
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files
+(the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify,
+ merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
+OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/cp/errors.js b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/cp/errors.js
new file mode 100644
index 00000000000..1cd1e05d0c5
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/cp/errors.js
@@ -0,0 +1,129 @@
+'use strict'
+const { inspect } = require('util')
+
+// adapted from node's internal/errors
+// https://github.com/nodejs/node/blob/c8a04049/lib/internal/errors.js
+
+// close copy of node's internal SystemError class.
+class SystemError {
+ constructor (code, prefix, context) {
+ // XXX context.code is undefined in all constructors used in cp/polyfill
+ // that may be a bug copied from node, maybe the constructor should use
+ // `code` not `errno`? nodejs/node#41104
+ let message = `${prefix}: ${context.syscall} returned ` +
+ `${context.code} (${context.message})`
+
+ if (context.path !== undefined) {
+ message += ` ${context.path}`
+ }
+ if (context.dest !== undefined) {
+ message += ` => ${context.dest}`
+ }
+
+ this.code = code
+ Object.defineProperties(this, {
+ name: {
+ value: 'SystemError',
+ enumerable: false,
+ writable: true,
+ configurable: true,
+ },
+ message: {
+ value: message,
+ enumerable: false,
+ writable: true,
+ configurable: true,
+ },
+ info: {
+ value: context,
+ enumerable: true,
+ configurable: true,
+ writable: false,
+ },
+ errno: {
+ get () {
+ return context.errno
+ },
+ set (value) {
+ context.errno = value
+ },
+ enumerable: true,
+ configurable: true,
+ },
+ syscall: {
+ get () {
+ return context.syscall
+ },
+ set (value) {
+ context.syscall = value
+ },
+ enumerable: true,
+ configurable: true,
+ },
+ })
+
+ if (context.path !== undefined) {
+ Object.defineProperty(this, 'path', {
+ get () {
+ return context.path
+ },
+ set (value) {
+ context.path = value
+ },
+ enumerable: true,
+ configurable: true,
+ })
+ }
+
+ if (context.dest !== undefined) {
+ Object.defineProperty(this, 'dest', {
+ get () {
+ return context.dest
+ },
+ set (value) {
+ context.dest = value
+ },
+ enumerable: true,
+ configurable: true,
+ })
+ }
+ }
+
+ toString () {
+ return `${this.name} [${this.code}]: ${this.message}`
+ }
+
+ [Symbol.for('nodejs.util.inspect.custom')] (_recurseTimes, ctx) {
+ return inspect(this, {
+ ...ctx,
+ getters: true,
+ customInspect: false,
+ })
+ }
+}
+
+function E (code, message) {
+ module.exports[code] = class NodeError extends SystemError {
+ constructor (ctx) {
+ super(code, message, ctx)
+ }
+ }
+}
+
+E('ERR_FS_CP_DIR_TO_NON_DIR', 'Cannot overwrite directory with non-directory')
+E('ERR_FS_CP_EEXIST', 'Target already exists')
+E('ERR_FS_CP_EINVAL', 'Invalid src or dest')
+E('ERR_FS_CP_FIFO_PIPE', 'Cannot copy a FIFO pipe')
+E('ERR_FS_CP_NON_DIR_TO_DIR', 'Cannot overwrite non-directory with directory')
+E('ERR_FS_CP_SOCKET', 'Cannot copy a socket file')
+E('ERR_FS_CP_SYMLINK_TO_SUBDIRECTORY', 'Cannot overwrite symlink in subdirectory of self')
+E('ERR_FS_CP_UNKNOWN', 'Cannot copy an unknown file type')
+E('ERR_FS_EISDIR', 'Path is a directory')
+
+module.exports.ERR_INVALID_ARG_TYPE = class ERR_INVALID_ARG_TYPE extends Error {
+ constructor (name, expected, actual) {
+ super()
+ this.code = 'ERR_INVALID_ARG_TYPE'
+ this.message = `The ${name} argument must be ${expected}. Received ${typeof actual}`
+ }
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/cp/index.js b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/cp/index.js
new file mode 100644
index 00000000000..972ce7aa12a
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/cp/index.js
@@ -0,0 +1,22 @@
+const fs = require('fs/promises')
+const getOptions = require('../common/get-options.js')
+const node = require('../common/node.js')
+const polyfill = require('./polyfill.js')
+
+// node 16.7.0 added fs.cp
+const useNative = node.satisfies('>=16.7.0')
+
+const cp = async (src, dest, opts) => {
+ const options = getOptions(opts, {
+ copy: ['dereference', 'errorOnExist', 'filter', 'force', 'preserveTimestamps', 'recursive'],
+ })
+
+ // the polyfill is tested separately from this module, no need to hack
+ // process.version to try to trigger it just for coverage
+ // istanbul ignore next
+ return useNative
+ ? fs.cp(src, dest, options)
+ : polyfill(src, dest, options)
+}
+
+module.exports = cp
diff --git a/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/cp/polyfill.js b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/cp/polyfill.js
new file mode 100644
index 00000000000..80eb10de971
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/cp/polyfill.js
@@ -0,0 +1,428 @@
+// this file is a modified version of the code in node 17.2.0
+// which is, in turn, a modified version of the fs-extra module on npm
+// node core changes:
+// - Use of the assert module has been replaced with core's error system.
+// - All code related to the glob dependency has been removed.
+// - Bring your own custom fs module is not currently supported.
+// - Some basic code cleanup.
+// changes here:
+// - remove all callback related code
+// - drop sync support
+// - change assertions back to non-internal methods (see options.js)
+// - throws ENOTDIR when rmdir gets an ENOENT for a path that exists in Windows
+'use strict'
+
+const {
+ ERR_FS_CP_DIR_TO_NON_DIR,
+ ERR_FS_CP_EEXIST,
+ ERR_FS_CP_EINVAL,
+ ERR_FS_CP_FIFO_PIPE,
+ ERR_FS_CP_NON_DIR_TO_DIR,
+ ERR_FS_CP_SOCKET,
+ ERR_FS_CP_SYMLINK_TO_SUBDIRECTORY,
+ ERR_FS_CP_UNKNOWN,
+ ERR_FS_EISDIR,
+ ERR_INVALID_ARG_TYPE,
+} = require('./errors.js')
+const {
+ constants: {
+ errno: {
+ EEXIST,
+ EISDIR,
+ EINVAL,
+ ENOTDIR,
+ },
+ },
+} = require('os')
+const {
+ chmod,
+ copyFile,
+ lstat,
+ mkdir,
+ readdir,
+ readlink,
+ stat,
+ symlink,
+ unlink,
+ utimes,
+} = require('fs/promises')
+const {
+ dirname,
+ isAbsolute,
+ join,
+ parse,
+ resolve,
+ sep,
+ toNamespacedPath,
+} = require('path')
+const { fileURLToPath } = require('url')
+
+const defaultOptions = {
+ dereference: false,
+ errorOnExist: false,
+ filter: undefined,
+ force: true,
+ preserveTimestamps: false,
+ recursive: false,
+}
+
+async function cp (src, dest, opts) {
+ if (opts != null && typeof opts !== 'object') {
+ throw new ERR_INVALID_ARG_TYPE('options', ['Object'], opts)
+ }
+ return cpFn(
+ toNamespacedPath(getValidatedPath(src)),
+ toNamespacedPath(getValidatedPath(dest)),
+ { ...defaultOptions, ...opts })
+}
+
+function getValidatedPath (fileURLOrPath) {
+ const path = fileURLOrPath != null && fileURLOrPath.href
+ && fileURLOrPath.origin
+ ? fileURLToPath(fileURLOrPath)
+ : fileURLOrPath
+ return path
+}
+
+async function cpFn (src, dest, opts) {
+ // Warn about using preserveTimestamps on 32-bit node
+ // istanbul ignore next
+ if (opts.preserveTimestamps && process.arch === 'ia32') {
+ const warning = 'Using the preserveTimestamps option in 32-bit ' +
+ 'node is not recommended'
+ process.emitWarning(warning, 'TimestampPrecisionWarning')
+ }
+ const stats = await checkPaths(src, dest, opts)
+ const { srcStat, destStat } = stats
+ await checkParentPaths(src, srcStat, dest)
+ if (opts.filter) {
+ return handleFilter(checkParentDir, destStat, src, dest, opts)
+ }
+ return checkParentDir(destStat, src, dest, opts)
+}
+
+async function checkPaths (src, dest, opts) {
+ const { 0: srcStat, 1: destStat } = await getStats(src, dest, opts)
+ if (destStat) {
+ if (areIdentical(srcStat, destStat)) {
+ throw new ERR_FS_CP_EINVAL({
+ message: 'src and dest cannot be the same',
+ path: dest,
+ syscall: 'cp',
+ errno: EINVAL,
+ })
+ }
+ if (srcStat.isDirectory() && !destStat.isDirectory()) {
+ throw new ERR_FS_CP_DIR_TO_NON_DIR({
+ message: `cannot overwrite directory ${src} ` +
+ `with non-directory ${dest}`,
+ path: dest,
+ syscall: 'cp',
+ errno: EISDIR,
+ })
+ }
+ if (!srcStat.isDirectory() && destStat.isDirectory()) {
+ throw new ERR_FS_CP_NON_DIR_TO_DIR({
+ message: `cannot overwrite non-directory ${src} ` +
+ `with directory ${dest}`,
+ path: dest,
+ syscall: 'cp',
+ errno: ENOTDIR,
+ })
+ }
+ }
+
+ if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {
+ throw new ERR_FS_CP_EINVAL({
+ message: `cannot copy ${src} to a subdirectory of self ${dest}`,
+ path: dest,
+ syscall: 'cp',
+ errno: EINVAL,
+ })
+ }
+ return { srcStat, destStat }
+}
+
+function areIdentical (srcStat, destStat) {
+ return destStat.ino && destStat.dev && destStat.ino === srcStat.ino &&
+ destStat.dev === srcStat.dev
+}
+
+function getStats (src, dest, opts) {
+ const statFunc = opts.dereference ?
+ (file) => stat(file, { bigint: true }) :
+ (file) => lstat(file, { bigint: true })
+ return Promise.all([
+ statFunc(src),
+ statFunc(dest).catch((err) => {
+ // istanbul ignore next: unsure how to cover.
+ if (err.code === 'ENOENT') {
+ return null
+ }
+ // istanbul ignore next: unsure how to cover.
+ throw err
+ }),
+ ])
+}
+
+async function checkParentDir (destStat, src, dest, opts) {
+ const destParent = dirname(dest)
+ const dirExists = await pathExists(destParent)
+ if (dirExists) {
+ return getStatsForCopy(destStat, src, dest, opts)
+ }
+ await mkdir(destParent, { recursive: true })
+ return getStatsForCopy(destStat, src, dest, opts)
+}
+
+function pathExists (dest) {
+ return stat(dest).then(
+ () => true,
+ // istanbul ignore next: not sure when this would occur
+ (err) => (err.code === 'ENOENT' ? false : Promise.reject(err)))
+}
+
+// Recursively check if dest parent is a subdirectory of src.
+// It works for all file types including symlinks since it
+// checks the src and dest inodes. It starts from the deepest
+// parent and stops once it reaches the src parent or the root path.
+async function checkParentPaths (src, srcStat, dest) {
+ const srcParent = resolve(dirname(src))
+ const destParent = resolve(dirname(dest))
+ if (destParent === srcParent || destParent === parse(destParent).root) {
+ return
+ }
+ let destStat
+ try {
+ destStat = await stat(destParent, { bigint: true })
+ } catch (err) {
+ // istanbul ignore else: not sure when this would occur
+ if (err.code === 'ENOENT') {
+ return
+ }
+ // istanbul ignore next: not sure when this would occur
+ throw err
+ }
+ if (areIdentical(srcStat, destStat)) {
+ throw new ERR_FS_CP_EINVAL({
+ message: `cannot copy ${src} to a subdirectory of self ${dest}`,
+ path: dest,
+ syscall: 'cp',
+ errno: EINVAL,
+ })
+ }
+ return checkParentPaths(src, srcStat, destParent)
+}
+
+const normalizePathToArray = (path) =>
+ resolve(path).split(sep).filter(Boolean)
+
+// Return true if dest is a subdir of src, otherwise false.
+// It only checks the path strings.
+function isSrcSubdir (src, dest) {
+ const srcArr = normalizePathToArray(src)
+ const destArr = normalizePathToArray(dest)
+ return srcArr.every((cur, i) => destArr[i] === cur)
+}
+
+async function handleFilter (onInclude, destStat, src, dest, opts, cb) {
+ const include = await opts.filter(src, dest)
+ if (include) {
+ return onInclude(destStat, src, dest, opts, cb)
+ }
+}
+
+function startCopy (destStat, src, dest, opts) {
+ if (opts.filter) {
+ return handleFilter(getStatsForCopy, destStat, src, dest, opts)
+ }
+ return getStatsForCopy(destStat, src, dest, opts)
+}
+
+async function getStatsForCopy (destStat, src, dest, opts) {
+ const statFn = opts.dereference ? stat : lstat
+ const srcStat = await statFn(src)
+ // istanbul ignore else: can't portably test FIFO
+ if (srcStat.isDirectory() && opts.recursive) {
+ return onDir(srcStat, destStat, src, dest, opts)
+ } else if (srcStat.isDirectory()) {
+ throw new ERR_FS_EISDIR({
+ message: `${src} is a directory (not copied)`,
+ path: src,
+ syscall: 'cp',
+ errno: EINVAL,
+ })
+ } else if (srcStat.isFile() ||
+ srcStat.isCharacterDevice() ||
+ srcStat.isBlockDevice()) {
+ return onFile(srcStat, destStat, src, dest, opts)
+ } else if (srcStat.isSymbolicLink()) {
+ return onLink(destStat, src, dest)
+ } else if (srcStat.isSocket()) {
+ throw new ERR_FS_CP_SOCKET({
+ message: `cannot copy a socket file: ${dest}`,
+ path: dest,
+ syscall: 'cp',
+ errno: EINVAL,
+ })
+ } else if (srcStat.isFIFO()) {
+ throw new ERR_FS_CP_FIFO_PIPE({
+ message: `cannot copy a FIFO pipe: ${dest}`,
+ path: dest,
+ syscall: 'cp',
+ errno: EINVAL,
+ })
+ }
+ // istanbul ignore next: should be unreachable
+ throw new ERR_FS_CP_UNKNOWN({
+ message: `cannot copy an unknown file type: ${dest}`,
+ path: dest,
+ syscall: 'cp',
+ errno: EINVAL,
+ })
+}
+
+function onFile (srcStat, destStat, src, dest, opts) {
+ if (!destStat) {
+ return _copyFile(srcStat, src, dest, opts)
+ }
+ return mayCopyFile(srcStat, src, dest, opts)
+}
+
+async function mayCopyFile (srcStat, src, dest, opts) {
+ if (opts.force) {
+ await unlink(dest)
+ return _copyFile(srcStat, src, dest, opts)
+ } else if (opts.errorOnExist) {
+ throw new ERR_FS_CP_EEXIST({
+ message: `${dest} already exists`,
+ path: dest,
+ syscall: 'cp',
+ errno: EEXIST,
+ })
+ }
+}
+
+async function _copyFile (srcStat, src, dest, opts) {
+ await copyFile(src, dest)
+ if (opts.preserveTimestamps) {
+ return handleTimestampsAndMode(srcStat.mode, src, dest)
+ }
+ return setDestMode(dest, srcStat.mode)
+}
+
+async function handleTimestampsAndMode (srcMode, src, dest) {
+ // Make sure the file is writable before setting the timestamp
+ // otherwise open fails with EPERM when invoked with 'r+'
+ // (through utimes call)
+ if (fileIsNotWritable(srcMode)) {
+ await makeFileWritable(dest, srcMode)
+ return setDestTimestampsAndMode(srcMode, src, dest)
+ }
+ return setDestTimestampsAndMode(srcMode, src, dest)
+}
+
+function fileIsNotWritable (srcMode) {
+ return (srcMode & 0o200) === 0
+}
+
+function makeFileWritable (dest, srcMode) {
+ return setDestMode(dest, srcMode | 0o200)
+}
+
+async function setDestTimestampsAndMode (srcMode, src, dest) {
+ await setDestTimestamps(src, dest)
+ return setDestMode(dest, srcMode)
+}
+
+function setDestMode (dest, srcMode) {
+ return chmod(dest, srcMode)
+}
+
+async function setDestTimestamps (src, dest) {
+ // The initial srcStat.atime cannot be trusted
+ // because it is modified by the read(2) system call
+ // (See https://nodejs.org/api/fs.html#fs_stat_time_values)
+ const updatedSrcStat = await stat(src)
+ return utimes(dest, updatedSrcStat.atime, updatedSrcStat.mtime)
+}
+
+function onDir (srcStat, destStat, src, dest, opts) {
+ if (!destStat) {
+ return mkDirAndCopy(srcStat.mode, src, dest, opts)
+ }
+ return copyDir(src, dest, opts)
+}
+
+async function mkDirAndCopy (srcMode, src, dest, opts) {
+ await mkdir(dest)
+ await copyDir(src, dest, opts)
+ return setDestMode(dest, srcMode)
+}
+
+async function copyDir (src, dest, opts) {
+ const dir = await readdir(src)
+ for (let i = 0; i < dir.length; i++) {
+ const item = dir[i]
+ const srcItem = join(src, item)
+ const destItem = join(dest, item)
+ const { destStat } = await checkPaths(srcItem, destItem, opts)
+ await startCopy(destStat, srcItem, destItem, opts)
+ }
+}
+
+async function onLink (destStat, src, dest) {
+ let resolvedSrc = await readlink(src)
+ if (!isAbsolute(resolvedSrc)) {
+ resolvedSrc = resolve(dirname(src), resolvedSrc)
+ }
+ if (!destStat) {
+ return symlink(resolvedSrc, dest)
+ }
+ let resolvedDest
+ try {
+ resolvedDest = await readlink(dest)
+ } catch (err) {
+ // Dest exists and is a regular file or directory,
+ // Windows may throw UNKNOWN error. If dest already exists,
+ // fs throws error anyway, so no need to guard against it here.
+ // istanbul ignore next: can only test on windows
+ if (err.code === 'EINVAL' || err.code === 'UNKNOWN') {
+ return symlink(resolvedSrc, dest)
+ }
+ // istanbul ignore next: should not be possible
+ throw err
+ }
+ if (!isAbsolute(resolvedDest)) {
+ resolvedDest = resolve(dirname(dest), resolvedDest)
+ }
+ if (isSrcSubdir(resolvedSrc, resolvedDest)) {
+ throw new ERR_FS_CP_EINVAL({
+ message: `cannot copy ${resolvedSrc} to a subdirectory of self ` +
+ `${resolvedDest}`,
+ path: dest,
+ syscall: 'cp',
+ errno: EINVAL,
+ })
+ }
+ // Do not copy if src is a subdir of dest since unlinking
+ // dest in this case would result in removing src contents
+ // and therefore a broken symlink would be created.
+ const srcStat = await stat(src)
+ if (srcStat.isDirectory() && isSrcSubdir(resolvedDest, resolvedSrc)) {
+ throw new ERR_FS_CP_SYMLINK_TO_SUBDIRECTORY({
+ message: `cannot overwrite ${resolvedDest} with ${resolvedSrc}`,
+ path: dest,
+ syscall: 'cp',
+ errno: EINVAL,
+ })
+ }
+ return copyLink(resolvedSrc, dest)
+}
+
+async function copyLink (resolvedSrc, dest) {
+ await unlink(dest)
+ return symlink(resolvedSrc, dest)
+}
+
+module.exports = cp
diff --git a/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/index.js b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/index.js
new file mode 100644
index 00000000000..81c746304cc
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/index.js
@@ -0,0 +1,13 @@
+'use strict'
+
+const cp = require('./cp/index.js')
+const withTempDir = require('./with-temp-dir.js')
+const readdirScoped = require('./readdir-scoped.js')
+const moveFile = require('./move-file.js')
+
+module.exports = {
+ cp,
+ withTempDir,
+ readdirScoped,
+ moveFile,
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/move-file.js b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/move-file.js
new file mode 100644
index 00000000000..d56e06d3846
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/move-file.js
@@ -0,0 +1,78 @@
+const { dirname, join, resolve, relative, isAbsolute } = require('path')
+const fs = require('fs/promises')
+
+const pathExists = async path => {
+ try {
+ await fs.access(path)
+ return true
+ } catch (er) {
+ return er.code !== 'ENOENT'
+ }
+}
+
+const moveFile = async (source, destination, options = {}, root = true, symlinks = []) => {
+ if (!source || !destination) {
+ throw new TypeError('`source` and `destination` file required')
+ }
+
+ options = {
+ overwrite: true,
+ ...options,
+ }
+
+ if (!options.overwrite && await pathExists(destination)) {
+ throw new Error(`The destination file exists: ${destination}`)
+ }
+
+ await fs.mkdir(dirname(destination), { recursive: true })
+
+ try {
+ await fs.rename(source, destination)
+ } catch (error) {
+ if (error.code === 'EXDEV' || error.code === 'EPERM') {
+ const sourceStat = await fs.lstat(source)
+ if (sourceStat.isDirectory()) {
+ const files = await fs.readdir(source)
+ await Promise.all(files.map((file) =>
+ moveFile(join(source, file), join(destination, file), options, false, symlinks)
+ ))
+ } else if (sourceStat.isSymbolicLink()) {
+ symlinks.push({ source, destination })
+ } else {
+ await fs.copyFile(source, destination)
+ }
+ } else {
+ throw error
+ }
+ }
+
+ if (root) {
+ await Promise.all(symlinks.map(async ({ source: symSource, destination: symDestination }) => {
+ let target = await fs.readlink(symSource)
+ // junction symlinks in windows will be absolute paths, so we need to
+ // make sure they point to the symlink destination
+ if (isAbsolute(target)) {
+ target = resolve(symDestination, relative(symSource, target))
+ }
+ // try to determine what the actual file is so we can create the correct
+ // type of symlink in windows
+ let targetStat = 'file'
+ try {
+ targetStat = await fs.stat(resolve(dirname(symSource), target))
+ if (targetStat.isDirectory()) {
+ targetStat = 'junction'
+ }
+ } catch {
+ // targetStat remains 'file'
+ }
+ await fs.symlink(
+ target,
+ symDestination,
+ targetStat
+ )
+ }))
+ await fs.rm(source, { recursive: true, force: true })
+ }
+}
+
+module.exports = moveFile
diff --git a/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/readdir-scoped.js b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/readdir-scoped.js
new file mode 100644
index 00000000000..cd601dfbe74
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/readdir-scoped.js
@@ -0,0 +1,20 @@
+const { readdir } = require('fs/promises')
+const { join } = require('path')
+
+const readdirScoped = async (dir) => {
+ const results = []
+
+ for (const item of await readdir(dir)) {
+ if (item.startsWith('@')) {
+ for (const scopedItem of await readdir(join(dir, item))) {
+ results.push(join(item, scopedItem))
+ }
+ } else {
+ results.push(item)
+ }
+ }
+
+ return results
+}
+
+module.exports = readdirScoped
diff --git a/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/with-temp-dir.js b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/with-temp-dir.js
new file mode 100644
index 00000000000..0738ac4f29e
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/lib/with-temp-dir.js
@@ -0,0 +1,39 @@
+const { join, sep } = require('path')
+
+const getOptions = require('./common/get-options.js')
+const { mkdir, mkdtemp, rm } = require('fs/promises')
+
+// create a temp directory, ensure its permissions match its parent, then call
+// the supplied function passing it the path to the directory. clean up after
+// the function finishes, whether it throws or not
+const withTempDir = async (root, fn, opts) => {
+ const options = getOptions(opts, {
+ copy: ['tmpPrefix'],
+ })
+ // create the directory
+ await mkdir(root, { recursive: true })
+
+ const target = await mkdtemp(join(`${root}${sep}`, options.tmpPrefix || ''))
+ let err
+ let result
+
+ try {
+ result = await fn(target)
+ } catch (_err) {
+ err = _err
+ }
+
+ try {
+ await rm(target, { force: true, recursive: true })
+ } catch {
+ // ignore errors
+ }
+
+ if (err) {
+ throw err
+ }
+
+ return result
+}
+
+module.exports = withTempDir
diff --git a/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/package.json b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/package.json
new file mode 100644
index 00000000000..5261a11b780
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/@npmcli/fs/package.json
@@ -0,0 +1,52 @@
+{
+ "name": "@npmcli/fs",
+ "version": "3.1.1",
+ "description": "filesystem utilities for the npm cli",
+ "main": "lib/index.js",
+ "files": [
+ "bin/",
+ "lib/"
+ ],
+ "scripts": {
+ "snap": "tap",
+ "test": "tap",
+ "npmclilint": "npmcli-lint",
+ "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lintfix": "npm run lint -- --fix",
+ "posttest": "npm run lint",
+ "postsnap": "npm run lintfix --",
+ "postlint": "template-oss-check",
+ "template-oss-apply": "template-oss-apply --force"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/npm/fs.git"
+ },
+ "keywords": [
+ "npm",
+ "oss"
+ ],
+ "author": "GitHub Inc.",
+ "license": "ISC",
+ "devDependencies": {
+ "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/template-oss": "4.22.0",
+ "tap": "^16.0.1"
+ },
+ "dependencies": {
+ "semver": "^7.3.5"
+ },
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ },
+ "templateOSS": {
+ "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
+ "version": "4.22.0"
+ },
+ "tap": {
+ "nyc-arg": [
+ "--exclude",
+ "tap-snapshots/**"
+ ]
+ }
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/abbrev/LICENSE b/deps/npm/node_modules/node-gyp/node_modules/abbrev/LICENSE
new file mode 100644
index 00000000000..9bcfa9d7d8d
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/abbrev/LICENSE
@@ -0,0 +1,46 @@
+This software is dual-licensed under the ISC and MIT licenses.
+You may use this software under EITHER of the following licenses.
+
+----------
+
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+----------
+
+Copyright Isaac Z. Schlueter and Contributors
+All rights reserved.
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
diff --git a/deps/npm/node_modules/node-gyp/node_modules/abbrev/lib/index.js b/deps/npm/node_modules/node-gyp/node_modules/abbrev/lib/index.js
new file mode 100644
index 00000000000..9f48801f049
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/abbrev/lib/index.js
@@ -0,0 +1,50 @@
+module.exports = abbrev
+
+function abbrev (...args) {
+ let list = args.length === 1 || Array.isArray(args[0]) ? args[0] : args
+
+ for (let i = 0, l = list.length; i < l; i++) {
+ list[i] = typeof list[i] === 'string' ? list[i] : String(list[i])
+ }
+
+ // sort them lexicographically, so that they're next to their nearest kin
+ list = list.sort(lexSort)
+
+ // walk through each, seeing how much it has in common with the next and previous
+ const abbrevs = {}
+ let prev = ''
+ for (let ii = 0, ll = list.length; ii < ll; ii++) {
+ const current = list[ii]
+ const next = list[ii + 1] || ''
+ let nextMatches = true
+ let prevMatches = true
+ if (current === next) {
+ continue
+ }
+ let j = 0
+ const cl = current.length
+ for (; j < cl; j++) {
+ const curChar = current.charAt(j)
+ nextMatches = nextMatches && curChar === next.charAt(j)
+ prevMatches = prevMatches && curChar === prev.charAt(j)
+ if (!nextMatches && !prevMatches) {
+ j++
+ break
+ }
+ }
+ prev = current
+ if (j === cl) {
+ abbrevs[current] = current
+ continue
+ }
+ for (let a = current.slice(0, j); j <= cl; j++) {
+ abbrevs[a] = current
+ a += current.charAt(j)
+ }
+ }
+ return abbrevs
+}
+
+function lexSort (a, b) {
+ return a === b ? 0 : a > b ? 1 : -1
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/abbrev/package.json b/deps/npm/node_modules/node-gyp/node_modules/abbrev/package.json
new file mode 100644
index 00000000000..e2640044563
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/abbrev/package.json
@@ -0,0 +1,43 @@
+{
+ "name": "abbrev",
+ "version": "2.0.0",
+ "description": "Like ruby's abbrev module, but in js",
+ "author": "GitHub Inc.",
+ "main": "lib/index.js",
+ "scripts": {
+ "test": "tap",
+ "lint": "eslint \"**/*.js\"",
+ "postlint": "template-oss-check",
+ "template-oss-apply": "template-oss-apply --force",
+ "lintfix": "npm run lint -- --fix",
+ "snap": "tap",
+ "posttest": "npm run lint"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/npm/abbrev-js.git"
+ },
+ "license": "ISC",
+ "devDependencies": {
+ "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/template-oss": "4.8.0",
+ "tap": "^16.3.0"
+ },
+ "tap": {
+ "nyc-arg": [
+ "--exclude",
+ "tap-snapshots/**"
+ ]
+ },
+ "files": [
+ "bin/",
+ "lib/"
+ ],
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ },
+ "templateOSS": {
+ "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
+ "version": "4.8.0"
+ }
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/cacache/LICENSE.md b/deps/npm/node_modules/node-gyp/node_modules/cacache/LICENSE.md
new file mode 100644
index 00000000000..8d28acf866d
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/cacache/LICENSE.md
@@ -0,0 +1,16 @@
+ISC License
+
+Copyright (c) npm, Inc.
+
+Permission to use, copy, modify, and/or distribute this software for
+any purpose with or without fee is hereby granted, provided that the
+above copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE COPYRIGHT HOLDER DISCLAIMS
+ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
+CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
+USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/content/path.js b/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/content/path.js
new file mode 100644
index 00000000000..ad5a76a4f73
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/content/path.js
@@ -0,0 +1,29 @@
+'use strict'
+
+const contentVer = require('../../package.json')['cache-version'].content
+const hashToSegments = require('../util/hash-to-segments')
+const path = require('path')
+const ssri = require('ssri')
+
+// Current format of content file path:
+//
+// sha512-BaSE64Hex= ->
+// ~/.my-cache/content-v2/sha512/ba/da/55deadbeefc0ffee
+//
+module.exports = contentPath
+
+function contentPath (cache, integrity) {
+ const sri = ssri.parse(integrity, { single: true })
+ // contentPath is the *strongest* algo given
+ return path.join(
+ contentDir(cache),
+ sri.algorithm,
+ ...hashToSegments(sri.hexDigest())
+ )
+}
+
+module.exports.contentDir = contentDir
+
+function contentDir (cache) {
+ return path.join(cache, `content-v${contentVer}`)
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/content/read.js b/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/content/read.js
new file mode 100644
index 00000000000..5f6192c3cec
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/content/read.js
@@ -0,0 +1,165 @@
+'use strict'
+
+const fs = require('fs/promises')
+const fsm = require('fs-minipass')
+const ssri = require('ssri')
+const contentPath = require('./path')
+const Pipeline = require('minipass-pipeline')
+
+module.exports = read
+
+const MAX_SINGLE_READ_SIZE = 64 * 1024 * 1024
+async function read (cache, integrity, opts = {}) {
+ const { size } = opts
+ const { stat, cpath, sri } = await withContentSri(cache, integrity, async (cpath, sri) => {
+ // get size
+ const stat = size ? { size } : await fs.stat(cpath)
+ return { stat, cpath, sri }
+ })
+
+ if (stat.size > MAX_SINGLE_READ_SIZE) {
+ return readPipeline(cpath, stat.size, sri, new Pipeline()).concat()
+ }
+
+ const data = await fs.readFile(cpath, { encoding: null })
+
+ if (stat.size !== data.length) {
+ throw sizeError(stat.size, data.length)
+ }
+
+ if (!ssri.checkData(data, sri)) {
+ throw integrityError(sri, cpath)
+ }
+
+ return data
+}
+
+const readPipeline = (cpath, size, sri, stream) => {
+ stream.push(
+ new fsm.ReadStream(cpath, {
+ size,
+ readSize: MAX_SINGLE_READ_SIZE,
+ }),
+ ssri.integrityStream({
+ integrity: sri,
+ size,
+ })
+ )
+ return stream
+}
+
+module.exports.stream = readStream
+module.exports.readStream = readStream
+
+function readStream (cache, integrity, opts = {}) {
+ const { size } = opts
+ const stream = new Pipeline()
+ // Set all this up to run on the stream and then just return the stream
+ Promise.resolve().then(async () => {
+ const { stat, cpath, sri } = await withContentSri(cache, integrity, async (cpath, sri) => {
+ // get size
+ const stat = size ? { size } : await fs.stat(cpath)
+ return { stat, cpath, sri }
+ })
+
+ return readPipeline(cpath, stat.size, sri, stream)
+ }).catch(err => stream.emit('error', err))
+
+ return stream
+}
+
+module.exports.copy = copy
+
+function copy (cache, integrity, dest) {
+ return withContentSri(cache, integrity, (cpath) => {
+ return fs.copyFile(cpath, dest)
+ })
+}
+
+module.exports.hasContent = hasContent
+
+async function hasContent (cache, integrity) {
+ if (!integrity) {
+ return false
+ }
+
+ try {
+ return await withContentSri(cache, integrity, async (cpath, sri) => {
+ const stat = await fs.stat(cpath)
+ return { size: stat.size, sri, stat }
+ })
+ } catch (err) {
+ if (err.code === 'ENOENT') {
+ return false
+ }
+
+ if (err.code === 'EPERM') {
+ /* istanbul ignore else */
+ if (process.platform !== 'win32') {
+ throw err
+ } else {
+ return false
+ }
+ }
+ }
+}
+
+async function withContentSri (cache, integrity, fn) {
+ const sri = ssri.parse(integrity)
+ // If `integrity` has multiple entries, pick the first digest
+ // with available local data.
+ const algo = sri.pickAlgorithm()
+ const digests = sri[algo]
+
+ if (digests.length <= 1) {
+ const cpath = contentPath(cache, digests[0])
+ return fn(cpath, digests[0])
+ } else {
+ // Can't use race here because a generic error can happen before
+ // a ENOENT error, and can happen before a valid result
+ const results = await Promise.all(digests.map(async (meta) => {
+ try {
+ return await withContentSri(cache, meta, fn)
+ } catch (err) {
+ if (err.code === 'ENOENT') {
+ return Object.assign(
+ new Error('No matching content found for ' + sri.toString()),
+ { code: 'ENOENT' }
+ )
+ }
+ return err
+ }
+ }))
+ // Return the first non error if it is found
+ const result = results.find((r) => !(r instanceof Error))
+ if (result) {
+ return result
+ }
+
+ // Throw the No matching content found error
+ const enoentError = results.find((r) => r.code === 'ENOENT')
+ if (enoentError) {
+ throw enoentError
+ }
+
+ // Throw generic error
+ throw results.find((r) => r instanceof Error)
+ }
+}
+
+function sizeError (expected, found) {
+ /* eslint-disable-next-line max-len */
+ const err = new Error(`Bad data size: expected inserted data to be ${expected} bytes, but got ${found} instead`)
+ err.expected = expected
+ err.found = found
+ err.code = 'EBADSIZE'
+ return err
+}
+
+function integrityError (sri, path) {
+ const err = new Error(`Integrity verification failed for ${sri} (${path})`)
+ err.code = 'EINTEGRITY'
+ err.sri = sri
+ err.path = path
+ return err
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/content/rm.js b/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/content/rm.js
new file mode 100644
index 00000000000..ce58d679e4c
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/content/rm.js
@@ -0,0 +1,18 @@
+'use strict'
+
+const fs = require('fs/promises')
+const contentPath = require('./path')
+const { hasContent } = require('./read')
+
+module.exports = rm
+
+async function rm (cache, integrity) {
+ const content = await hasContent(cache, integrity)
+ // ~pretty~ sure we can't end up with a content lacking sri, but be safe
+ if (content && content.sri) {
+ await fs.rm(contentPath(cache, content.sri), { recursive: true, force: true })
+ return true
+ } else {
+ return false
+ }
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/content/write.js b/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/content/write.js
new file mode 100644
index 00000000000..e7187abca87
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/content/write.js
@@ -0,0 +1,206 @@
+'use strict'
+
+const events = require('events')
+
+const contentPath = require('./path')
+const fs = require('fs/promises')
+const { moveFile } = require('@npmcli/fs')
+const { Minipass } = require('minipass')
+const Pipeline = require('minipass-pipeline')
+const Flush = require('minipass-flush')
+const path = require('path')
+const ssri = require('ssri')
+const uniqueFilename = require('unique-filename')
+const fsm = require('fs-minipass')
+
+module.exports = write
+
+// Cache of move operations in process so we don't duplicate
+const moveOperations = new Map()
+
+async function write (cache, data, opts = {}) {
+ const { algorithms, size, integrity } = opts
+
+ if (typeof size === 'number' && data.length !== size) {
+ throw sizeError(size, data.length)
+ }
+
+ const sri = ssri.fromData(data, algorithms ? { algorithms } : {})
+ if (integrity && !ssri.checkData(data, integrity, opts)) {
+ throw checksumError(integrity, sri)
+ }
+
+ for (const algo in sri) {
+ const tmp = await makeTmp(cache, opts)
+ const hash = sri[algo].toString()
+ try {
+ await fs.writeFile(tmp.target, data, { flag: 'wx' })
+ await moveToDestination(tmp, cache, hash, opts)
+ } finally {
+ if (!tmp.moved) {
+ await fs.rm(tmp.target, { recursive: true, force: true })
+ }
+ }
+ }
+ return { integrity: sri, size: data.length }
+}
+
+module.exports.stream = writeStream
+
+// writes proxied to the 'inputStream' that is passed to the Promise
+// 'end' is deferred until content is handled.
+class CacacheWriteStream extends Flush {
+ constructor (cache, opts) {
+ super()
+ this.opts = opts
+ this.cache = cache
+ this.inputStream = new Minipass()
+ this.inputStream.on('error', er => this.emit('error', er))
+ this.inputStream.on('drain', () => this.emit('drain'))
+ this.handleContentP = null
+ }
+
+ write (chunk, encoding, cb) {
+ if (!this.handleContentP) {
+ this.handleContentP = handleContent(
+ this.inputStream,
+ this.cache,
+ this.opts
+ )
+ this.handleContentP.catch(error => this.emit('error', error))
+ }
+ return this.inputStream.write(chunk, encoding, cb)
+ }
+
+ flush (cb) {
+ this.inputStream.end(() => {
+ if (!this.handleContentP) {
+ const e = new Error('Cache input stream was empty')
+ e.code = 'ENODATA'
+ // empty streams are probably emitting end right away.
+ // defer this one tick by rejecting a promise on it.
+ return Promise.reject(e).catch(cb)
+ }
+ // eslint-disable-next-line promise/catch-or-return
+ this.handleContentP.then(
+ (res) => {
+ res.integrity && this.emit('integrity', res.integrity)
+ // eslint-disable-next-line promise/always-return
+ res.size !== null && this.emit('size', res.size)
+ cb()
+ },
+ (er) => cb(er)
+ )
+ })
+ }
+}
+
+function writeStream (cache, opts = {}) {
+ return new CacacheWriteStream(cache, opts)
+}
+
+async function handleContent (inputStream, cache, opts) {
+ const tmp = await makeTmp(cache, opts)
+ try {
+ const res = await pipeToTmp(inputStream, cache, tmp.target, opts)
+ await moveToDestination(
+ tmp,
+ cache,
+ res.integrity,
+ opts
+ )
+ return res
+ } finally {
+ if (!tmp.moved) {
+ await fs.rm(tmp.target, { recursive: true, force: true })
+ }
+ }
+}
+
+async function pipeToTmp (inputStream, cache, tmpTarget, opts) {
+ const outStream = new fsm.WriteStream(tmpTarget, {
+ flags: 'wx',
+ })
+
+ if (opts.integrityEmitter) {
+ // we need to create these all simultaneously since they can fire in any order
+ const [integrity, size] = await Promise.all([
+ events.once(opts.integrityEmitter, 'integrity').then(res => res[0]),
+ events.once(opts.integrityEmitter, 'size').then(res => res[0]),
+ new Pipeline(inputStream, outStream).promise(),
+ ])
+ return { integrity, size }
+ }
+
+ let integrity
+ let size
+ const hashStream = ssri.integrityStream({
+ integrity: opts.integrity,
+ algorithms: opts.algorithms,
+ size: opts.size,
+ })
+ hashStream.on('integrity', i => {
+ integrity = i
+ })
+ hashStream.on('size', s => {
+ size = s
+ })
+
+ const pipeline = new Pipeline(inputStream, hashStream, outStream)
+ await pipeline.promise()
+ return { integrity, size }
+}
+
+async function makeTmp (cache, opts) {
+ const tmpTarget = uniqueFilename(path.join(cache, 'tmp'), opts.tmpPrefix)
+ await fs.mkdir(path.dirname(tmpTarget), { recursive: true })
+ return {
+ target: tmpTarget,
+ moved: false,
+ }
+}
+
+async function moveToDestination (tmp, cache, sri) {
+ const destination = contentPath(cache, sri)
+ const destDir = path.dirname(destination)
+ if (moveOperations.has(destination)) {
+ return moveOperations.get(destination)
+ }
+ moveOperations.set(
+ destination,
+ fs.mkdir(destDir, { recursive: true })
+ .then(async () => {
+ await moveFile(tmp.target, destination, { overwrite: false })
+ tmp.moved = true
+ return tmp.moved
+ })
+ .catch(err => {
+ if (!err.message.startsWith('The destination file exists')) {
+ throw Object.assign(err, { code: 'EEXIST' })
+ }
+ }).finally(() => {
+ moveOperations.delete(destination)
+ })
+
+ )
+ return moveOperations.get(destination)
+}
+
+function sizeError (expected, found) {
+ /* eslint-disable-next-line max-len */
+ const err = new Error(`Bad data size: expected inserted data to be ${expected} bytes, but got ${found} instead`)
+ err.expected = expected
+ err.found = found
+ err.code = 'EBADSIZE'
+ return err
+}
+
+function checksumError (expected, found) {
+ const err = new Error(`Integrity check failed:
+ Wanted: ${expected}
+ Found: ${found}`)
+ err.code = 'EINTEGRITY'
+ err.expected = expected
+ err.found = found
+ return err
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/entry-index.js b/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/entry-index.js
new file mode 100644
index 00000000000..89c28f2f257
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/entry-index.js
@@ -0,0 +1,336 @@
+'use strict'
+
+const crypto = require('crypto')
+const {
+ appendFile,
+ mkdir,
+ readFile,
+ readdir,
+ rm,
+ writeFile,
+} = require('fs/promises')
+const { Minipass } = require('minipass')
+const path = require('path')
+const ssri = require('ssri')
+const uniqueFilename = require('unique-filename')
+
+const contentPath = require('./content/path')
+const hashToSegments = require('./util/hash-to-segments')
+const indexV = require('../package.json')['cache-version'].index
+const { moveFile } = require('@npmcli/fs')
+
+const pMap = require('p-map')
+const lsStreamConcurrency = 5
+
+module.exports.NotFoundError = class NotFoundError extends Error {
+ constructor (cache, key) {
+ super(`No cache entry for ${key} found in ${cache}`)
+ this.code = 'ENOENT'
+ this.cache = cache
+ this.key = key
+ }
+}
+
+module.exports.compact = compact
+
+async function compact (cache, key, matchFn, opts = {}) {
+ const bucket = bucketPath(cache, key)
+ const entries = await bucketEntries(bucket)
+ const newEntries = []
+ // we loop backwards because the bottom-most result is the newest
+ // since we add new entries with appendFile
+ for (let i = entries.length - 1; i >= 0; --i) {
+ const entry = entries[i]
+ // a null integrity could mean either a delete was appended
+ // or the user has simply stored an index that does not map
+ // to any content. we determine if the user wants to keep the
+ // null integrity based on the validateEntry function passed in options.
+ // if the integrity is null and no validateEntry is provided, we break
+ // as we consider the null integrity to be a deletion of everything
+ // that came before it.
+ if (entry.integrity === null && !opts.validateEntry) {
+ break
+ }
+
+ // if this entry is valid, and it is either the first entry or
+ // the newEntries array doesn't already include an entry that
+ // matches this one based on the provided matchFn, then we add
+ // it to the beginning of our list
+ if ((!opts.validateEntry || opts.validateEntry(entry) === true) &&
+ (newEntries.length === 0 ||
+ !newEntries.find((oldEntry) => matchFn(oldEntry, entry)))) {
+ newEntries.unshift(entry)
+ }
+ }
+
+ const newIndex = '\n' + newEntries.map((entry) => {
+ const stringified = JSON.stringify(entry)
+ const hash = hashEntry(stringified)
+ return `${hash}\t${stringified}`
+ }).join('\n')
+
+ const setup = async () => {
+ const target = uniqueFilename(path.join(cache, 'tmp'), opts.tmpPrefix)
+ await mkdir(path.dirname(target), { recursive: true })
+ return {
+ target,
+ moved: false,
+ }
+ }
+
+ const teardown = async (tmp) => {
+ if (!tmp.moved) {
+ return rm(tmp.target, { recursive: true, force: true })
+ }
+ }
+
+ const write = async (tmp) => {
+ await writeFile(tmp.target, newIndex, { flag: 'wx' })
+ await mkdir(path.dirname(bucket), { recursive: true })
+ // we use @npmcli/move-file directly here because we
+ // want to overwrite the existing file
+ await moveFile(tmp.target, bucket)
+ tmp.moved = true
+ }
+
+ // write the file atomically
+ const tmp = await setup()
+ try {
+ await write(tmp)
+ } finally {
+ await teardown(tmp)
+ }
+
+ // we reverse the list we generated such that the newest
+ // entries come first in order to make looping through them easier
+ // the true passed to formatEntry tells it to keep null
+ // integrity values, if they made it this far it's because
+ // validateEntry returned true, and as such we should return it
+ return newEntries.reverse().map((entry) => formatEntry(cache, entry, true))
+}
+
+module.exports.insert = insert
+
+async function insert (cache, key, integrity, opts = {}) {
+ const { metadata, size, time } = opts
+ const bucket = bucketPath(cache, key)
+ const entry = {
+ key,
+ integrity: integrity && ssri.stringify(integrity),
+ time: time || Date.now(),
+ size,
+ metadata,
+ }
+ try {
+ await mkdir(path.dirname(bucket), { recursive: true })
+ const stringified = JSON.stringify(entry)
+ // NOTE - Cleverness ahoy!
+ //
+ // This works because it's tremendously unlikely for an entry to corrupt
+ // another while still preserving the string length of the JSON in
+ // question. So, we just slap the length in there and verify it on read.
+ //
+ // Thanks to @isaacs for the whiteboarding session that ended up with
+ // this.
+ await appendFile(bucket, `\n${hashEntry(stringified)}\t${stringified}`)
+ } catch (err) {
+ if (err.code === 'ENOENT') {
+ return undefined
+ }
+
+ throw err
+ }
+ return formatEntry(cache, entry)
+}
+
+module.exports.find = find
+
+async function find (cache, key) {
+ const bucket = bucketPath(cache, key)
+ try {
+ const entries = await bucketEntries(bucket)
+ return entries.reduce((latest, next) => {
+ if (next && next.key === key) {
+ return formatEntry(cache, next)
+ } else {
+ return latest
+ }
+ }, null)
+ } catch (err) {
+ if (err.code === 'ENOENT') {
+ return null
+ } else {
+ throw err
+ }
+ }
+}
+
+module.exports.delete = del
+
+function del (cache, key, opts = {}) {
+ if (!opts.removeFully) {
+ return insert(cache, key, null, opts)
+ }
+
+ const bucket = bucketPath(cache, key)
+ return rm(bucket, { recursive: true, force: true })
+}
+
+module.exports.lsStream = lsStream
+
+function lsStream (cache) {
+ const indexDir = bucketDir(cache)
+ const stream = new Minipass({ objectMode: true })
+
+ // Set all this up to run on the stream and then just return the stream
+ Promise.resolve().then(async () => {
+ const buckets = await readdirOrEmpty(indexDir)
+ await pMap(buckets, async (bucket) => {
+ const bucketPath = path.join(indexDir, bucket)
+ const subbuckets = await readdirOrEmpty(bucketPath)
+ await pMap(subbuckets, async (subbucket) => {
+ const subbucketPath = path.join(bucketPath, subbucket)
+
+ // "/cachename//./*"
+ const subbucketEntries = await readdirOrEmpty(subbucketPath)
+ await pMap(subbucketEntries, async (entry) => {
+ const entryPath = path.join(subbucketPath, entry)
+ try {
+ const entries = await bucketEntries(entryPath)
+ // using a Map here prevents duplicate keys from showing up
+ // twice, I guess?
+ const reduced = entries.reduce((acc, entry) => {
+ acc.set(entry.key, entry)
+ return acc
+ }, new Map())
+ // reduced is a map of key => entry
+ for (const entry of reduced.values()) {
+ const formatted = formatEntry(cache, entry)
+ if (formatted) {
+ stream.write(formatted)
+ }
+ }
+ } catch (err) {
+ if (err.code === 'ENOENT') {
+ return undefined
+ }
+ throw err
+ }
+ },
+ { concurrency: lsStreamConcurrency })
+ },
+ { concurrency: lsStreamConcurrency })
+ },
+ { concurrency: lsStreamConcurrency })
+ stream.end()
+ return stream
+ }).catch(err => stream.emit('error', err))
+
+ return stream
+}
+
+module.exports.ls = ls
+
+async function ls (cache) {
+ const entries = await lsStream(cache).collect()
+ return entries.reduce((acc, xs) => {
+ acc[xs.key] = xs
+ return acc
+ }, {})
+}
+
+module.exports.bucketEntries = bucketEntries
+
+async function bucketEntries (bucket, filter) {
+ const data = await readFile(bucket, 'utf8')
+ return _bucketEntries(data, filter)
+}
+
+function _bucketEntries (data) {
+ const entries = []
+ data.split('\n').forEach((entry) => {
+ if (!entry) {
+ return
+ }
+
+ const pieces = entry.split('\t')
+ if (!pieces[1] || hashEntry(pieces[1]) !== pieces[0]) {
+ // Hash is no good! Corruption or malice? Doesn't matter!
+ // EJECT EJECT
+ return
+ }
+ let obj
+ try {
+ obj = JSON.parse(pieces[1])
+ } catch (_) {
+ // eslint-ignore-next-line no-empty-block
+ }
+ // coverage disabled here, no need to test with an entry that parses to something falsey
+ // istanbul ignore else
+ if (obj) {
+ entries.push(obj)
+ }
+ })
+ return entries
+}
+
+module.exports.bucketDir = bucketDir
+
+function bucketDir (cache) {
+ return path.join(cache, `index-v${indexV}`)
+}
+
+module.exports.bucketPath = bucketPath
+
+function bucketPath (cache, key) {
+ const hashed = hashKey(key)
+ return path.join.apply(
+ path,
+ [bucketDir(cache)].concat(hashToSegments(hashed))
+ )
+}
+
+module.exports.hashKey = hashKey
+
+function hashKey (key) {
+ return hash(key, 'sha256')
+}
+
+module.exports.hashEntry = hashEntry
+
+function hashEntry (str) {
+ return hash(str, 'sha1')
+}
+
+function hash (str, digest) {
+ return crypto
+ .createHash(digest)
+ .update(str)
+ .digest('hex')
+}
+
+function formatEntry (cache, entry, keepAll) {
+ // Treat null digests as deletions. They'll shadow any previous entries.
+ if (!entry.integrity && !keepAll) {
+ return null
+ }
+
+ return {
+ key: entry.key,
+ integrity: entry.integrity,
+ path: entry.integrity ? contentPath(cache, entry.integrity) : undefined,
+ size: entry.size,
+ time: entry.time,
+ metadata: entry.metadata,
+ }
+}
+
+function readdirOrEmpty (dir) {
+ return readdir(dir).catch((err) => {
+ if (err.code === 'ENOENT' || err.code === 'ENOTDIR') {
+ return []
+ }
+
+ throw err
+ })
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/get.js b/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/get.js
new file mode 100644
index 00000000000..80ec206c7ec
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/get.js
@@ -0,0 +1,170 @@
+'use strict'
+
+const Collect = require('minipass-collect')
+const { Minipass } = require('minipass')
+const Pipeline = require('minipass-pipeline')
+
+const index = require('./entry-index')
+const memo = require('./memoization')
+const read = require('./content/read')
+
+async function getData (cache, key, opts = {}) {
+ const { integrity, memoize, size } = opts
+ const memoized = memo.get(cache, key, opts)
+ if (memoized && memoize !== false) {
+ return {
+ metadata: memoized.entry.metadata,
+ data: memoized.data,
+ integrity: memoized.entry.integrity,
+ size: memoized.entry.size,
+ }
+ }
+
+ const entry = await index.find(cache, key, opts)
+ if (!entry) {
+ throw new index.NotFoundError(cache, key)
+ }
+ const data = await read(cache, entry.integrity, { integrity, size })
+ if (memoize) {
+ memo.put(cache, entry, data, opts)
+ }
+
+ return {
+ data,
+ metadata: entry.metadata,
+ size: entry.size,
+ integrity: entry.integrity,
+ }
+}
+module.exports = getData
+
+async function getDataByDigest (cache, key, opts = {}) {
+ const { integrity, memoize, size } = opts
+ const memoized = memo.get.byDigest(cache, key, opts)
+ if (memoized && memoize !== false) {
+ return memoized
+ }
+
+ const res = await read(cache, key, { integrity, size })
+ if (memoize) {
+ memo.put.byDigest(cache, key, res, opts)
+ }
+ return res
+}
+module.exports.byDigest = getDataByDigest
+
+const getMemoizedStream = (memoized) => {
+ const stream = new Minipass()
+ stream.on('newListener', function (ev, cb) {
+ ev === 'metadata' && cb(memoized.entry.metadata)
+ ev === 'integrity' && cb(memoized.entry.integrity)
+ ev === 'size' && cb(memoized.entry.size)
+ })
+ stream.end(memoized.data)
+ return stream
+}
+
+function getStream (cache, key, opts = {}) {
+ const { memoize, size } = opts
+ const memoized = memo.get(cache, key, opts)
+ if (memoized && memoize !== false) {
+ return getMemoizedStream(memoized)
+ }
+
+ const stream = new Pipeline()
+ // Set all this up to run on the stream and then just return the stream
+ Promise.resolve().then(async () => {
+ const entry = await index.find(cache, key)
+ if (!entry) {
+ throw new index.NotFoundError(cache, key)
+ }
+
+ stream.emit('metadata', entry.metadata)
+ stream.emit('integrity', entry.integrity)
+ stream.emit('size', entry.size)
+ stream.on('newListener', function (ev, cb) {
+ ev === 'metadata' && cb(entry.metadata)
+ ev === 'integrity' && cb(entry.integrity)
+ ev === 'size' && cb(entry.size)
+ })
+
+ const src = read.readStream(
+ cache,
+ entry.integrity,
+ { ...opts, size: typeof size !== 'number' ? entry.size : size }
+ )
+
+ if (memoize) {
+ const memoStream = new Collect.PassThrough()
+ memoStream.on('collect', data => memo.put(cache, entry, data, opts))
+ stream.unshift(memoStream)
+ }
+ stream.unshift(src)
+ return stream
+ }).catch((err) => stream.emit('error', err))
+
+ return stream
+}
+
+module.exports.stream = getStream
+
+function getStreamDigest (cache, integrity, opts = {}) {
+ const { memoize } = opts
+ const memoized = memo.get.byDigest(cache, integrity, opts)
+ if (memoized && memoize !== false) {
+ const stream = new Minipass()
+ stream.end(memoized)
+ return stream
+ } else {
+ const stream = read.readStream(cache, integrity, opts)
+ if (!memoize) {
+ return stream
+ }
+
+ const memoStream = new Collect.PassThrough()
+ memoStream.on('collect', data => memo.put.byDigest(
+ cache,
+ integrity,
+ data,
+ opts
+ ))
+ return new Pipeline(stream, memoStream)
+ }
+}
+
+module.exports.stream.byDigest = getStreamDigest
+
+function info (cache, key, opts = {}) {
+ const { memoize } = opts
+ const memoized = memo.get(cache, key, opts)
+ if (memoized && memoize !== false) {
+ return Promise.resolve(memoized.entry)
+ } else {
+ return index.find(cache, key)
+ }
+}
+module.exports.info = info
+
+async function copy (cache, key, dest, opts = {}) {
+ const entry = await index.find(cache, key, opts)
+ if (!entry) {
+ throw new index.NotFoundError(cache, key)
+ }
+ await read.copy(cache, entry.integrity, dest, opts)
+ return {
+ metadata: entry.metadata,
+ size: entry.size,
+ integrity: entry.integrity,
+ }
+}
+
+module.exports.copy = copy
+
+async function copyByDigest (cache, key, dest, opts = {}) {
+ await read.copy(cache, key, dest, opts)
+ return key
+}
+
+module.exports.copy.byDigest = copyByDigest
+
+module.exports.hasContent = read.hasContent
diff --git a/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/index.js b/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/index.js
new file mode 100644
index 00000000000..c9b0da5f3a2
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/index.js
@@ -0,0 +1,42 @@
+'use strict'
+
+const get = require('./get.js')
+const put = require('./put.js')
+const rm = require('./rm.js')
+const verify = require('./verify.js')
+const { clearMemoized } = require('./memoization.js')
+const tmp = require('./util/tmp.js')
+const index = require('./entry-index.js')
+
+module.exports.index = {}
+module.exports.index.compact = index.compact
+module.exports.index.insert = index.insert
+
+module.exports.ls = index.ls
+module.exports.ls.stream = index.lsStream
+
+module.exports.get = get
+module.exports.get.byDigest = get.byDigest
+module.exports.get.stream = get.stream
+module.exports.get.stream.byDigest = get.stream.byDigest
+module.exports.get.copy = get.copy
+module.exports.get.copy.byDigest = get.copy.byDigest
+module.exports.get.info = get.info
+module.exports.get.hasContent = get.hasContent
+
+module.exports.put = put
+module.exports.put.stream = put.stream
+
+module.exports.rm = rm.entry
+module.exports.rm.all = rm.all
+module.exports.rm.entry = module.exports.rm
+module.exports.rm.content = rm.content
+
+module.exports.clearMemoized = clearMemoized
+
+module.exports.tmp = {}
+module.exports.tmp.mkdir = tmp.mkdir
+module.exports.tmp.withTmp = tmp.withTmp
+
+module.exports.verify = verify
+module.exports.verify.lastRun = verify.lastRun
diff --git a/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/memoization.js b/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/memoization.js
new file mode 100644
index 00000000000..2ecc60912e4
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/memoization.js
@@ -0,0 +1,72 @@
+'use strict'
+
+const { LRUCache } = require('lru-cache')
+
+const MEMOIZED = new LRUCache({
+ max: 500,
+ maxSize: 50 * 1024 * 1024, // 50MB
+ ttl: 3 * 60 * 1000, // 3 minutes
+ sizeCalculation: (entry, key) => key.startsWith('key:') ? entry.data.length : entry.length,
+})
+
+module.exports.clearMemoized = clearMemoized
+
+function clearMemoized () {
+ const old = {}
+ MEMOIZED.forEach((v, k) => {
+ old[k] = v
+ })
+ MEMOIZED.clear()
+ return old
+}
+
+module.exports.put = put
+
+function put (cache, entry, data, opts) {
+ pickMem(opts).set(`key:${cache}:${entry.key}`, { entry, data })
+ putDigest(cache, entry.integrity, data, opts)
+}
+
+module.exports.put.byDigest = putDigest
+
+function putDigest (cache, integrity, data, opts) {
+ pickMem(opts).set(`digest:${cache}:${integrity}`, data)
+}
+
+module.exports.get = get
+
+function get (cache, key, opts) {
+ return pickMem(opts).get(`key:${cache}:${key}`)
+}
+
+module.exports.get.byDigest = getDigest
+
+function getDigest (cache, integrity, opts) {
+ return pickMem(opts).get(`digest:${cache}:${integrity}`)
+}
+
+class ObjProxy {
+ constructor (obj) {
+ this.obj = obj
+ }
+
+ get (key) {
+ return this.obj[key]
+ }
+
+ set (key, val) {
+ this.obj[key] = val
+ }
+}
+
+function pickMem (opts) {
+ if (!opts || !opts.memoize) {
+ return MEMOIZED
+ } else if (opts.memoize.get && opts.memoize.set) {
+ return opts.memoize
+ } else if (typeof opts.memoize === 'object') {
+ return new ObjProxy(opts.memoize)
+ } else {
+ return MEMOIZED
+ }
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/put.js b/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/put.js
new file mode 100644
index 00000000000..9fc932d5f6d
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/put.js
@@ -0,0 +1,80 @@
+'use strict'
+
+const index = require('./entry-index')
+const memo = require('./memoization')
+const write = require('./content/write')
+const Flush = require('minipass-flush')
+const { PassThrough } = require('minipass-collect')
+const Pipeline = require('minipass-pipeline')
+
+const putOpts = (opts) => ({
+ algorithms: ['sha512'],
+ ...opts,
+})
+
+module.exports = putData
+
+async function putData (cache, key, data, opts = {}) {
+ const { memoize } = opts
+ opts = putOpts(opts)
+ const res = await write(cache, data, opts)
+ const entry = await index.insert(cache, key, res.integrity, { ...opts, size: res.size })
+ if (memoize) {
+ memo.put(cache, entry, data, opts)
+ }
+
+ return res.integrity
+}
+
+module.exports.stream = putStream
+
+function putStream (cache, key, opts = {}) {
+ const { memoize } = opts
+ opts = putOpts(opts)
+ let integrity
+ let size
+ let error
+
+ let memoData
+ const pipeline = new Pipeline()
+ // first item in the pipeline is the memoizer, because we need
+ // that to end first and get the collected data.
+ if (memoize) {
+ const memoizer = new PassThrough().on('collect', data => {
+ memoData = data
+ })
+ pipeline.push(memoizer)
+ }
+
+ // contentStream is a write-only, not a passthrough
+ // no data comes out of it.
+ const contentStream = write.stream(cache, opts)
+ .on('integrity', (int) => {
+ integrity = int
+ })
+ .on('size', (s) => {
+ size = s
+ })
+ .on('error', (err) => {
+ error = err
+ })
+
+ pipeline.push(contentStream)
+
+ // last but not least, we write the index and emit hash and size,
+ // and memoize if we're doing that
+ pipeline.push(new Flush({
+ async flush () {
+ if (!error) {
+ const entry = await index.insert(cache, key, integrity, { ...opts, size })
+ if (memoize && memoData) {
+ memo.put(cache, entry, memoData, opts)
+ }
+ pipeline.emit('integrity', integrity)
+ pipeline.emit('size', size)
+ }
+ },
+ }))
+
+ return pipeline
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/rm.js b/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/rm.js
new file mode 100644
index 00000000000..a94760c7cf2
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/rm.js
@@ -0,0 +1,31 @@
+'use strict'
+
+const { rm } = require('fs/promises')
+const glob = require('./util/glob.js')
+const index = require('./entry-index')
+const memo = require('./memoization')
+const path = require('path')
+const rmContent = require('./content/rm')
+
+module.exports = entry
+module.exports.entry = entry
+
+function entry (cache, key, opts) {
+ memo.clearMemoized()
+ return index.delete(cache, key, opts)
+}
+
+module.exports.content = content
+
+function content (cache, integrity) {
+ memo.clearMemoized()
+ return rmContent(cache, integrity)
+}
+
+module.exports.all = all
+
+async function all (cache) {
+ memo.clearMemoized()
+ const paths = await glob(path.join(cache, '*(content-*|index-*)'), { silent: true, nosort: true })
+ return Promise.all(paths.map((p) => rm(p, { recursive: true, force: true })))
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/util/glob.js b/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/util/glob.js
new file mode 100644
index 00000000000..8500c1c16a4
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/util/glob.js
@@ -0,0 +1,7 @@
+'use strict'
+
+const { glob } = require('glob')
+const path = require('path')
+
+const globify = (pattern) => pattern.split(path.win32.sep).join(path.posix.sep)
+module.exports = (path, options) => glob(globify(path), options)
diff --git a/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/util/hash-to-segments.js b/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/util/hash-to-segments.js
new file mode 100644
index 00000000000..445599b5038
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/util/hash-to-segments.js
@@ -0,0 +1,7 @@
+'use strict'
+
+module.exports = hashToSegments
+
+function hashToSegments (hash) {
+ return [hash.slice(0, 2), hash.slice(2, 4), hash.slice(4)]
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/util/tmp.js b/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/util/tmp.js
new file mode 100644
index 00000000000..0bf5302136e
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/util/tmp.js
@@ -0,0 +1,26 @@
+'use strict'
+
+const { withTempDir } = require('@npmcli/fs')
+const fs = require('fs/promises')
+const path = require('path')
+
+module.exports.mkdir = mktmpdir
+
+async function mktmpdir (cache, opts = {}) {
+ const { tmpPrefix } = opts
+ const tmpDir = path.join(cache, 'tmp')
+ await fs.mkdir(tmpDir, { recursive: true, owner: 'inherit' })
+ // do not use path.join(), it drops the trailing / if tmpPrefix is unset
+ const target = `${tmpDir}${path.sep}${tmpPrefix || ''}`
+ return fs.mkdtemp(target, { owner: 'inherit' })
+}
+
+module.exports.withTmp = withTmp
+
+function withTmp (cache, opts, cb) {
+ if (!cb) {
+ cb = opts
+ opts = {}
+ }
+ return withTempDir(path.join(cache, 'tmp'), cb, opts)
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/verify.js b/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/verify.js
new file mode 100644
index 00000000000..d7423da1295
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/cacache/lib/verify.js
@@ -0,0 +1,257 @@
+'use strict'
+
+const {
+ mkdir,
+ readFile,
+ rm,
+ stat,
+ truncate,
+ writeFile,
+} = require('fs/promises')
+const pMap = require('p-map')
+const contentPath = require('./content/path')
+const fsm = require('fs-minipass')
+const glob = require('./util/glob.js')
+const index = require('./entry-index')
+const path = require('path')
+const ssri = require('ssri')
+
+const hasOwnProperty = (obj, key) =>
+ Object.prototype.hasOwnProperty.call(obj, key)
+
+const verifyOpts = (opts) => ({
+ concurrency: 20,
+ log: { silly () {} },
+ ...opts,
+})
+
+module.exports = verify
+
+async function verify (cache, opts) {
+ opts = verifyOpts(opts)
+ opts.log.silly('verify', 'verifying cache at', cache)
+
+ const steps = [
+ markStartTime,
+ fixPerms,
+ garbageCollect,
+ rebuildIndex,
+ cleanTmp,
+ writeVerifile,
+ markEndTime,
+ ]
+
+ const stats = {}
+ for (const step of steps) {
+ const label = step.name
+ const start = new Date()
+ const s = await step(cache, opts)
+ if (s) {
+ Object.keys(s).forEach((k) => {
+ stats[k] = s[k]
+ })
+ }
+ const end = new Date()
+ if (!stats.runTime) {
+ stats.runTime = {}
+ }
+ stats.runTime[label] = end - start
+ }
+ stats.runTime.total = stats.endTime - stats.startTime
+ opts.log.silly(
+ 'verify',
+ 'verification finished for',
+ cache,
+ 'in',
+ `${stats.runTime.total}ms`
+ )
+ return stats
+}
+
+async function markStartTime () {
+ return { startTime: new Date() }
+}
+
+async function markEndTime () {
+ return { endTime: new Date() }
+}
+
+async function fixPerms (cache, opts) {
+ opts.log.silly('verify', 'fixing cache permissions')
+ await mkdir(cache, { recursive: true })
+ return null
+}
+
+// Implements a naive mark-and-sweep tracing garbage collector.
+//
+// The algorithm is basically as follows:
+// 1. Read (and filter) all index entries ("pointers")
+// 2. Mark each integrity value as "live"
+// 3. Read entire filesystem tree in `content-vX/` dir
+// 4. If content is live, verify its checksum and delete it if it fails
+// 5. If content is not marked as live, rm it.
+//
+async function garbageCollect (cache, opts) {
+ opts.log.silly('verify', 'garbage collecting content')
+ const indexStream = index.lsStream(cache)
+ const liveContent = new Set()
+ indexStream.on('data', (entry) => {
+ if (opts.filter && !opts.filter(entry)) {
+ return
+ }
+
+ // integrity is stringified, re-parse it so we can get each hash
+ const integrity = ssri.parse(entry.integrity)
+ for (const algo in integrity) {
+ liveContent.add(integrity[algo].toString())
+ }
+ })
+ await new Promise((resolve, reject) => {
+ indexStream.on('end', resolve).on('error', reject)
+ })
+ const contentDir = contentPath.contentDir(cache)
+ const files = await glob(path.join(contentDir, '**'), {
+ follow: false,
+ nodir: true,
+ nosort: true,
+ })
+ const stats = {
+ verifiedContent: 0,
+ reclaimedCount: 0,
+ reclaimedSize: 0,
+ badContentCount: 0,
+ keptSize: 0,
+ }
+ await pMap(
+ files,
+ async (f) => {
+ const split = f.split(/[/\\]/)
+ const digest = split.slice(split.length - 3).join('')
+ const algo = split[split.length - 4]
+ const integrity = ssri.fromHex(digest, algo)
+ if (liveContent.has(integrity.toString())) {
+ const info = await verifyContent(f, integrity)
+ if (!info.valid) {
+ stats.reclaimedCount++
+ stats.badContentCount++
+ stats.reclaimedSize += info.size
+ } else {
+ stats.verifiedContent++
+ stats.keptSize += info.size
+ }
+ } else {
+ // No entries refer to this content. We can delete.
+ stats.reclaimedCount++
+ const s = await stat(f)
+ await rm(f, { recursive: true, force: true })
+ stats.reclaimedSize += s.size
+ }
+ return stats
+ },
+ { concurrency: opts.concurrency }
+ )
+ return stats
+}
+
+async function verifyContent (filepath, sri) {
+ const contentInfo = {}
+ try {
+ const { size } = await stat(filepath)
+ contentInfo.size = size
+ contentInfo.valid = true
+ await ssri.checkStream(new fsm.ReadStream(filepath), sri)
+ } catch (err) {
+ if (err.code === 'ENOENT') {
+ return { size: 0, valid: false }
+ }
+ if (err.code !== 'EINTEGRITY') {
+ throw err
+ }
+
+ await rm(filepath, { recursive: true, force: true })
+ contentInfo.valid = false
+ }
+ return contentInfo
+}
+
+async function rebuildIndex (cache, opts) {
+ opts.log.silly('verify', 'rebuilding index')
+ const entries = await index.ls(cache)
+ const stats = {
+ missingContent: 0,
+ rejectedEntries: 0,
+ totalEntries: 0,
+ }
+ const buckets = {}
+ for (const k in entries) {
+ /* istanbul ignore else */
+ if (hasOwnProperty(entries, k)) {
+ const hashed = index.hashKey(k)
+ const entry = entries[k]
+ const excluded = opts.filter && !opts.filter(entry)
+ excluded && stats.rejectedEntries++
+ if (buckets[hashed] && !excluded) {
+ buckets[hashed].push(entry)
+ } else if (buckets[hashed] && excluded) {
+ // skip
+ } else if (excluded) {
+ buckets[hashed] = []
+ buckets[hashed]._path = index.bucketPath(cache, k)
+ } else {
+ buckets[hashed] = [entry]
+ buckets[hashed]._path = index.bucketPath(cache, k)
+ }
+ }
+ }
+ await pMap(
+ Object.keys(buckets),
+ (key) => {
+ return rebuildBucket(cache, buckets[key], stats, opts)
+ },
+ { concurrency: opts.concurrency }
+ )
+ return stats
+}
+
+async function rebuildBucket (cache, bucket, stats) {
+ await truncate(bucket._path)
+ // This needs to be serialized because cacache explicitly
+ // lets very racy bucket conflicts clobber each other.
+ for (const entry of bucket) {
+ const content = contentPath(cache, entry.integrity)
+ try {
+ await stat(content)
+ await index.insert(cache, entry.key, entry.integrity, {
+ metadata: entry.metadata,
+ size: entry.size,
+ time: entry.time,
+ })
+ stats.totalEntries++
+ } catch (err) {
+ if (err.code === 'ENOENT') {
+ stats.rejectedEntries++
+ stats.missingContent++
+ } else {
+ throw err
+ }
+ }
+ }
+}
+
+function cleanTmp (cache, opts) {
+ opts.log.silly('verify', 'cleaning tmp directory')
+ return rm(path.join(cache, 'tmp'), { recursive: true, force: true })
+}
+
+async function writeVerifile (cache, opts) {
+ const verifile = path.join(cache, '_lastverified')
+ opts.log.silly('verify', 'writing verifile to ' + verifile)
+ return writeFile(verifile, `${Date.now()}`)
+}
+
+module.exports.lastRun = lastRun
+
+async function lastRun (cache) {
+ const data = await readFile(path.join(cache, '_lastverified'), { encoding: 'utf8' })
+ return new Date(+data)
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/cacache/package.json b/deps/npm/node_modules/node-gyp/node_modules/cacache/package.json
new file mode 100644
index 00000000000..6e6219158ed
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/cacache/package.json
@@ -0,0 +1,82 @@
+{
+ "name": "cacache",
+ "version": "18.0.4",
+ "cache-version": {
+ "content": "2",
+ "index": "5"
+ },
+ "description": "Fast, fault-tolerant, cross-platform, disk-based, data-agnostic, content-addressable cache.",
+ "main": "lib/index.js",
+ "files": [
+ "bin/",
+ "lib/"
+ ],
+ "scripts": {
+ "test": "tap",
+ "snap": "tap",
+ "coverage": "tap",
+ "test-docker": "docker run -it --rm --name pacotest -v \"$PWD\":/tmp -w /tmp node:latest npm test",
+ "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "npmclilint": "npmcli-lint",
+ "lintfix": "npm run lint -- --fix",
+ "postsnap": "npm run lintfix --",
+ "postlint": "template-oss-check",
+ "posttest": "npm run lint",
+ "template-oss-apply": "template-oss-apply --force"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/npm/cacache.git"
+ },
+ "keywords": [
+ "cache",
+ "caching",
+ "content-addressable",
+ "sri",
+ "sri hash",
+ "subresource integrity",
+ "cache",
+ "storage",
+ "store",
+ "file store",
+ "filesystem",
+ "disk cache",
+ "disk storage"
+ ],
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/fs": "^3.1.0",
+ "fs-minipass": "^3.0.0",
+ "glob": "^10.2.2",
+ "lru-cache": "^10.0.1",
+ "minipass": "^7.0.3",
+ "minipass-collect": "^2.0.1",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.4",
+ "p-map": "^4.0.0",
+ "ssri": "^10.0.0",
+ "tar": "^6.1.11",
+ "unique-filename": "^3.0.0"
+ },
+ "devDependencies": {
+ "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/template-oss": "4.22.0",
+ "tap": "^16.0.0"
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ },
+ "templateOSS": {
+ "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
+ "windowsCI": false,
+ "version": "4.22.0",
+ "publish": "true"
+ },
+ "author": "GitHub Inc.",
+ "tap": {
+ "nyc-arg": [
+ "--exclude",
+ "tap-snapshots/**"
+ ]
+ }
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/isexe/LICENSE b/deps/npm/node_modules/node-gyp/node_modules/isexe/LICENSE
new file mode 100644
index 00000000000..c925dbe826b
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/isexe/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) 2016-2022 Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/node-gyp/node_modules/isexe/dist/cjs/index.js b/deps/npm/node_modules/node-gyp/node_modules/isexe/dist/cjs/index.js
new file mode 100644
index 00000000000..cefcb66b5c5
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/isexe/dist/cjs/index.js
@@ -0,0 +1,46 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.sync = exports.isexe = exports.posix = exports.win32 = void 0;
+const posix = __importStar(require("./posix.js"));
+exports.posix = posix;
+const win32 = __importStar(require("./win32.js"));
+exports.win32 = win32;
+__exportStar(require("./options.js"), exports);
+const platform = process.env._ISEXE_TEST_PLATFORM_ || process.platform;
+const impl = platform === 'win32' ? win32 : posix;
+/**
+ * Determine whether a path is executable on the current platform.
+ */
+exports.isexe = impl.isexe;
+/**
+ * Synchronously determine whether a path is executable on the
+ * current platform.
+ */
+exports.sync = impl.sync;
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/node-gyp/node_modules/isexe/dist/cjs/options.js b/deps/npm/node_modules/node-gyp/node_modules/isexe/dist/cjs/options.js
new file mode 100644
index 00000000000..0dfad0762cc
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/isexe/dist/cjs/options.js
@@ -0,0 +1,3 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=options.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/node-gyp/node_modules/isexe/dist/cjs/package.json b/deps/npm/node_modules/node-gyp/node_modules/isexe/dist/cjs/package.json
new file mode 100644
index 00000000000..5bbefffbabe
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/isexe/dist/cjs/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "commonjs"
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/isexe/dist/cjs/posix.js b/deps/npm/node_modules/node-gyp/node_modules/isexe/dist/cjs/posix.js
new file mode 100644
index 00000000000..3bc5e79d700
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/isexe/dist/cjs/posix.js
@@ -0,0 +1,67 @@
+"use strict";
+/**
+ * This is the Posix implementation of isexe, which uses the file
+ * mode and uid/gid values.
+ *
+ * @module
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.sync = exports.isexe = void 0;
+const fs_1 = require("fs");
+const promises_1 = require("fs/promises");
+/**
+ * Determine whether a path is executable according to the mode and
+ * current (or specified) user and group IDs.
+ */
+const isexe = async (path, options = {}) => {
+ const { ignoreErrors = false } = options;
+ try {
+ return checkStat(await (0, promises_1.stat)(path), options);
+ }
+ catch (e) {
+ const er = e;
+ if (ignoreErrors || er.code === 'EACCES')
+ return false;
+ throw er;
+ }
+};
+exports.isexe = isexe;
+/**
+ * Synchronously determine whether a path is executable according to
+ * the mode and current (or specified) user and group IDs.
+ */
+const sync = (path, options = {}) => {
+ const { ignoreErrors = false } = options;
+ try {
+ return checkStat((0, fs_1.statSync)(path), options);
+ }
+ catch (e) {
+ const er = e;
+ if (ignoreErrors || er.code === 'EACCES')
+ return false;
+ throw er;
+ }
+};
+exports.sync = sync;
+const checkStat = (stat, options) => stat.isFile() && checkMode(stat, options);
+const checkMode = (stat, options) => {
+ const myUid = options.uid ?? process.getuid?.();
+ const myGroups = options.groups ?? process.getgroups?.() ?? [];
+ const myGid = options.gid ?? process.getgid?.() ?? myGroups[0];
+ if (myUid === undefined || myGid === undefined) {
+ throw new Error('cannot get uid or gid');
+ }
+ const groups = new Set([myGid, ...myGroups]);
+ const mod = stat.mode;
+ const uid = stat.uid;
+ const gid = stat.gid;
+ const u = parseInt('100', 8);
+ const g = parseInt('010', 8);
+ const o = parseInt('001', 8);
+ const ug = u | g;
+ return !!(mod & o ||
+ (mod & g && groups.has(gid)) ||
+ (mod & u && uid === myUid) ||
+ (mod & ug && myUid === 0));
+};
+//# sourceMappingURL=posix.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/node-gyp/node_modules/isexe/dist/cjs/win32.js b/deps/npm/node_modules/node-gyp/node_modules/isexe/dist/cjs/win32.js
new file mode 100644
index 00000000000..fa7a4d2f7d2
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/isexe/dist/cjs/win32.js
@@ -0,0 +1,62 @@
+"use strict";
+/**
+ * This is the Windows implementation of isexe, which uses the file
+ * extension and PATHEXT setting.
+ *
+ * @module
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.sync = exports.isexe = void 0;
+const fs_1 = require("fs");
+const promises_1 = require("fs/promises");
+/**
+ * Determine whether a path is executable based on the file extension
+ * and PATHEXT environment variable (or specified pathExt option)
+ */
+const isexe = async (path, options = {}) => {
+ const { ignoreErrors = false } = options;
+ try {
+ return checkStat(await (0, promises_1.stat)(path), path, options);
+ }
+ catch (e) {
+ const er = e;
+ if (ignoreErrors || er.code === 'EACCES')
+ return false;
+ throw er;
+ }
+};
+exports.isexe = isexe;
+/**
+ * Synchronously determine whether a path is executable based on the file
+ * extension and PATHEXT environment variable (or specified pathExt option)
+ */
+const sync = (path, options = {}) => {
+ const { ignoreErrors = false } = options;
+ try {
+ return checkStat((0, fs_1.statSync)(path), path, options);
+ }
+ catch (e) {
+ const er = e;
+ if (ignoreErrors || er.code === 'EACCES')
+ return false;
+ throw er;
+ }
+};
+exports.sync = sync;
+const checkPathExt = (path, options) => {
+ const { pathExt = process.env.PATHEXT || '' } = options;
+ const peSplit = pathExt.split(';');
+ if (peSplit.indexOf('') !== -1) {
+ return true;
+ }
+ for (let i = 0; i < peSplit.length; i++) {
+ const p = peSplit[i].toLowerCase();
+ const ext = path.substring(path.length - p.length).toLowerCase();
+ if (p && ext === p) {
+ return true;
+ }
+ }
+ return false;
+};
+const checkStat = (stat, path, options) => stat.isFile() && checkPathExt(path, options);
+//# sourceMappingURL=win32.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/node-gyp/node_modules/isexe/dist/mjs/index.js b/deps/npm/node_modules/node-gyp/node_modules/isexe/dist/mjs/index.js
new file mode 100644
index 00000000000..1e309acd735
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/isexe/dist/mjs/index.js
@@ -0,0 +1,16 @@
+import * as posix from './posix.js';
+import * as win32 from './win32.js';
+export * from './options.js';
+export { win32, posix };
+const platform = process.env._ISEXE_TEST_PLATFORM_ || process.platform;
+const impl = platform === 'win32' ? win32 : posix;
+/**
+ * Determine whether a path is executable on the current platform.
+ */
+export const isexe = impl.isexe;
+/**
+ * Synchronously determine whether a path is executable on the
+ * current platform.
+ */
+export const sync = impl.sync;
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/node-gyp/node_modules/isexe/dist/mjs/options.js b/deps/npm/node_modules/node-gyp/node_modules/isexe/dist/mjs/options.js
new file mode 100644
index 00000000000..e9ded40bd5b
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/isexe/dist/mjs/options.js
@@ -0,0 +1,2 @@
+export {};
+//# sourceMappingURL=options.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/node-gyp/node_modules/isexe/dist/mjs/package.json b/deps/npm/node_modules/node-gyp/node_modules/isexe/dist/mjs/package.json
new file mode 100644
index 00000000000..3dbc1ca591c
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/isexe/dist/mjs/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "module"
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/isexe/dist/mjs/posix.js b/deps/npm/node_modules/node-gyp/node_modules/isexe/dist/mjs/posix.js
new file mode 100644
index 00000000000..c453776c045
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/isexe/dist/mjs/posix.js
@@ -0,0 +1,62 @@
+/**
+ * This is the Posix implementation of isexe, which uses the file
+ * mode and uid/gid values.
+ *
+ * @module
+ */
+import { statSync } from 'fs';
+import { stat } from 'fs/promises';
+/**
+ * Determine whether a path is executable according to the mode and
+ * current (or specified) user and group IDs.
+ */
+export const isexe = async (path, options = {}) => {
+ const { ignoreErrors = false } = options;
+ try {
+ return checkStat(await stat(path), options);
+ }
+ catch (e) {
+ const er = e;
+ if (ignoreErrors || er.code === 'EACCES')
+ return false;
+ throw er;
+ }
+};
+/**
+ * Synchronously determine whether a path is executable according to
+ * the mode and current (or specified) user and group IDs.
+ */
+export const sync = (path, options = {}) => {
+ const { ignoreErrors = false } = options;
+ try {
+ return checkStat(statSync(path), options);
+ }
+ catch (e) {
+ const er = e;
+ if (ignoreErrors || er.code === 'EACCES')
+ return false;
+ throw er;
+ }
+};
+const checkStat = (stat, options) => stat.isFile() && checkMode(stat, options);
+const checkMode = (stat, options) => {
+ const myUid = options.uid ?? process.getuid?.();
+ const myGroups = options.groups ?? process.getgroups?.() ?? [];
+ const myGid = options.gid ?? process.getgid?.() ?? myGroups[0];
+ if (myUid === undefined || myGid === undefined) {
+ throw new Error('cannot get uid or gid');
+ }
+ const groups = new Set([myGid, ...myGroups]);
+ const mod = stat.mode;
+ const uid = stat.uid;
+ const gid = stat.gid;
+ const u = parseInt('100', 8);
+ const g = parseInt('010', 8);
+ const o = parseInt('001', 8);
+ const ug = u | g;
+ return !!(mod & o ||
+ (mod & g && groups.has(gid)) ||
+ (mod & u && uid === myUid) ||
+ (mod & ug && myUid === 0));
+};
+//# sourceMappingURL=posix.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/node-gyp/node_modules/isexe/dist/mjs/win32.js b/deps/npm/node_modules/node-gyp/node_modules/isexe/dist/mjs/win32.js
new file mode 100644
index 00000000000..a354ee2a511
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/isexe/dist/mjs/win32.js
@@ -0,0 +1,57 @@
+/**
+ * This is the Windows implementation of isexe, which uses the file
+ * extension and PATHEXT setting.
+ *
+ * @module
+ */
+import { statSync } from 'fs';
+import { stat } from 'fs/promises';
+/**
+ * Determine whether a path is executable based on the file extension
+ * and PATHEXT environment variable (or specified pathExt option)
+ */
+export const isexe = async (path, options = {}) => {
+ const { ignoreErrors = false } = options;
+ try {
+ return checkStat(await stat(path), path, options);
+ }
+ catch (e) {
+ const er = e;
+ if (ignoreErrors || er.code === 'EACCES')
+ return false;
+ throw er;
+ }
+};
+/**
+ * Synchronously determine whether a path is executable based on the file
+ * extension and PATHEXT environment variable (or specified pathExt option)
+ */
+export const sync = (path, options = {}) => {
+ const { ignoreErrors = false } = options;
+ try {
+ return checkStat(statSync(path), path, options);
+ }
+ catch (e) {
+ const er = e;
+ if (ignoreErrors || er.code === 'EACCES')
+ return false;
+ throw er;
+ }
+};
+const checkPathExt = (path, options) => {
+ const { pathExt = process.env.PATHEXT || '' } = options;
+ const peSplit = pathExt.split(';');
+ if (peSplit.indexOf('') !== -1) {
+ return true;
+ }
+ for (let i = 0; i < peSplit.length; i++) {
+ const p = peSplit[i].toLowerCase();
+ const ext = path.substring(path.length - p.length).toLowerCase();
+ if (p && ext === p) {
+ return true;
+ }
+ }
+ return false;
+};
+const checkStat = (stat, path, options) => stat.isFile() && checkPathExt(path, options);
+//# sourceMappingURL=win32.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/node-gyp/node_modules/isexe/package.json b/deps/npm/node_modules/node-gyp/node_modules/isexe/package.json
new file mode 100644
index 00000000000..a0e2cd04bfd
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/isexe/package.json
@@ -0,0 +1,96 @@
+{
+ "name": "isexe",
+ "version": "3.1.1",
+ "description": "Minimal module to check if a file is executable.",
+ "main": "./dist/cjs/index.js",
+ "module": "./dist/mjs/index.js",
+ "types": "./dist/cjs/index.js",
+ "files": [
+ "dist"
+ ],
+ "exports": {
+ ".": {
+ "import": {
+ "types": "./dist/mjs/index.d.ts",
+ "default": "./dist/mjs/index.js"
+ },
+ "require": {
+ "types": "./dist/cjs/index.d.ts",
+ "default": "./dist/cjs/index.js"
+ }
+ },
+ "./posix": {
+ "import": {
+ "types": "./dist/mjs/posix.d.ts",
+ "default": "./dist/mjs/posix.js"
+ },
+ "require": {
+ "types": "./dist/cjs/posix.d.ts",
+ "default": "./dist/cjs/posix.js"
+ }
+ },
+ "./win32": {
+ "import": {
+ "types": "./dist/mjs/win32.d.ts",
+ "default": "./dist/mjs/win32.js"
+ },
+ "require": {
+ "types": "./dist/cjs/win32.d.ts",
+ "default": "./dist/cjs/win32.js"
+ }
+ },
+ "./package.json": "./package.json"
+ },
+ "devDependencies": {
+ "@types/node": "^20.4.5",
+ "@types/tap": "^15.0.8",
+ "c8": "^8.0.1",
+ "mkdirp": "^0.5.1",
+ "prettier": "^2.8.8",
+ "rimraf": "^2.5.0",
+ "sync-content": "^1.0.2",
+ "tap": "^16.3.8",
+ "ts-node": "^10.9.1",
+ "typedoc": "^0.24.8",
+ "typescript": "^5.1.6"
+ },
+ "scripts": {
+ "preversion": "npm test",
+ "postversion": "npm publish",
+ "prepublishOnly": "git push origin --follow-tags",
+ "prepare": "tsc -p tsconfig/cjs.json && tsc -p tsconfig/esm.json && bash ./scripts/fixup.sh",
+ "pretest": "npm run prepare",
+ "presnap": "npm run prepare",
+ "test": "c8 tap",
+ "snap": "c8 tap",
+ "format": "prettier --write . --loglevel warn --ignore-path ../../.prettierignore --cache",
+ "typedoc": "typedoc --tsconfig tsconfig/esm.json ./src/*.ts"
+ },
+ "author": "Isaac Z. Schlueter (http://blog.izs.me/)",
+ "license": "ISC",
+ "tap": {
+ "coverage": false,
+ "node-arg": [
+ "--enable-source-maps",
+ "--no-warnings",
+ "--loader",
+ "ts-node/esm"
+ ],
+ "ts": false
+ },
+ "prettier": {
+ "semi": false,
+ "printWidth": 75,
+ "tabWidth": 2,
+ "useTabs": false,
+ "singleQuote": true,
+ "jsxSingleQuote": false,
+ "bracketSameLine": true,
+ "arrowParens": "avoid",
+ "endOfLine": "lf"
+ },
+ "repository": "https://github.com/isaacs/isexe",
+ "engines": {
+ "node": ">=16"
+ }
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/LICENSE b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/LICENSE
new file mode 100644
index 00000000000..1808eb28442
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/LICENSE
@@ -0,0 +1,16 @@
+ISC License
+
+Copyright 2017-2022 (c) npm, Inc.
+
+Permission to use, copy, modify, and/or distribute this software for
+any purpose with or without fee is hereby granted, provided that the
+above copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE COPYRIGHT HOLDER DISCLAIMS
+ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
+CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
+USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/cache/entry.js b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/cache/entry.js
new file mode 100644
index 00000000000..bfcfacbcc95
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/cache/entry.js
@@ -0,0 +1,471 @@
+const { Request, Response } = require('minipass-fetch')
+const { Minipass } = require('minipass')
+const MinipassFlush = require('minipass-flush')
+const cacache = require('cacache')
+const url = require('url')
+
+const CachingMinipassPipeline = require('../pipeline.js')
+const CachePolicy = require('./policy.js')
+const cacheKey = require('./key.js')
+const remote = require('../remote.js')
+
+const hasOwnProperty = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop)
+
+// allow list for request headers that will be written to the cache index
+// note: we will also store any request headers
+// that are named in a response's vary header
+const KEEP_REQUEST_HEADERS = [
+ 'accept-charset',
+ 'accept-encoding',
+ 'accept-language',
+ 'accept',
+ 'cache-control',
+]
+
+// allow list for response headers that will be written to the cache index
+// note: we must not store the real response's age header, or when we load
+// a cache policy based on the metadata it will think the cached response
+// is always stale
+const KEEP_RESPONSE_HEADERS = [
+ 'cache-control',
+ 'content-encoding',
+ 'content-language',
+ 'content-type',
+ 'date',
+ 'etag',
+ 'expires',
+ 'last-modified',
+ 'link',
+ 'location',
+ 'pragma',
+ 'vary',
+]
+
+// return an object containing all metadata to be written to the index
+const getMetadata = (request, response, options) => {
+ const metadata = {
+ time: Date.now(),
+ url: request.url,
+ reqHeaders: {},
+ resHeaders: {},
+
+ // options on which we must match the request and vary the response
+ options: {
+ compress: options.compress != null ? options.compress : request.compress,
+ },
+ }
+
+ // only save the status if it's not a 200 or 304
+ if (response.status !== 200 && response.status !== 304) {
+ metadata.status = response.status
+ }
+
+ for (const name of KEEP_REQUEST_HEADERS) {
+ if (request.headers.has(name)) {
+ metadata.reqHeaders[name] = request.headers.get(name)
+ }
+ }
+
+ // if the request's host header differs from the host in the url
+ // we need to keep it, otherwise it's just noise and we ignore it
+ const host = request.headers.get('host')
+ const parsedUrl = new url.URL(request.url)
+ if (host && parsedUrl.host !== host) {
+ metadata.reqHeaders.host = host
+ }
+
+ // if the response has a vary header, make sure
+ // we store the relevant request headers too
+ if (response.headers.has('vary')) {
+ const vary = response.headers.get('vary')
+ // a vary of "*" means every header causes a different response.
+ // in that scenario, we do not include any additional headers
+ // as the freshness check will always fail anyway and we don't
+ // want to bloat the cache indexes
+ if (vary !== '*') {
+ // copy any other request headers that will vary the response
+ const varyHeaders = vary.trim().toLowerCase().split(/\s*,\s*/)
+ for (const name of varyHeaders) {
+ if (request.headers.has(name)) {
+ metadata.reqHeaders[name] = request.headers.get(name)
+ }
+ }
+ }
+ }
+
+ for (const name of KEEP_RESPONSE_HEADERS) {
+ if (response.headers.has(name)) {
+ metadata.resHeaders[name] = response.headers.get(name)
+ }
+ }
+
+ for (const name of options.cacheAdditionalHeaders) {
+ if (response.headers.has(name)) {
+ metadata.resHeaders[name] = response.headers.get(name)
+ }
+ }
+
+ return metadata
+}
+
+// symbols used to hide objects that may be lazily evaluated in a getter
+const _request = Symbol('request')
+const _response = Symbol('response')
+const _policy = Symbol('policy')
+
+class CacheEntry {
+ constructor ({ entry, request, response, options }) {
+ if (entry) {
+ this.key = entry.key
+ this.entry = entry
+ // previous versions of this module didn't write an explicit timestamp in
+ // the metadata, so fall back to the entry's timestamp. we can't use the
+ // entry timestamp to determine staleness because cacache will update it
+ // when it verifies its data
+ this.entry.metadata.time = this.entry.metadata.time || this.entry.time
+ } else {
+ this.key = cacheKey(request)
+ }
+
+ this.options = options
+
+ // these properties are behind getters that lazily evaluate
+ this[_request] = request
+ this[_response] = response
+ this[_policy] = null
+ }
+
+ // returns a CacheEntry instance that satisfies the given request
+ // or undefined if no existing entry satisfies
+ static async find (request, options) {
+ try {
+ // compacts the index and returns an array of unique entries
+ var matches = await cacache.index.compact(options.cachePath, cacheKey(request), (A, B) => {
+ const entryA = new CacheEntry({ entry: A, options })
+ const entryB = new CacheEntry({ entry: B, options })
+ return entryA.policy.satisfies(entryB.request)
+ }, {
+ validateEntry: (entry) => {
+ // clean out entries with a buggy content-encoding value
+ if (entry.metadata &&
+ entry.metadata.resHeaders &&
+ entry.metadata.resHeaders['content-encoding'] === null) {
+ return false
+ }
+
+ // if an integrity is null, it needs to have a status specified
+ if (entry.integrity === null) {
+ return !!(entry.metadata && entry.metadata.status)
+ }
+
+ return true
+ },
+ })
+ } catch (err) {
+ // if the compact request fails, ignore the error and return
+ return
+ }
+
+ // a cache mode of 'reload' means to behave as though we have no cache
+ // on the way to the network. return undefined to allow cacheFetch to
+ // create a brand new request no matter what.
+ if (options.cache === 'reload') {
+ return
+ }
+
+ // find the specific entry that satisfies the request
+ let match
+ for (const entry of matches) {
+ const _entry = new CacheEntry({
+ entry,
+ options,
+ })
+
+ if (_entry.policy.satisfies(request)) {
+ match = _entry
+ break
+ }
+ }
+
+ return match
+ }
+
+ // if the user made a PUT/POST/PATCH then we invalidate our
+ // cache for the same url by deleting the index entirely
+ static async invalidate (request, options) {
+ const key = cacheKey(request)
+ try {
+ await cacache.rm.entry(options.cachePath, key, { removeFully: true })
+ } catch (err) {
+ // ignore errors
+ }
+ }
+
+ get request () {
+ if (!this[_request]) {
+ this[_request] = new Request(this.entry.metadata.url, {
+ method: 'GET',
+ headers: this.entry.metadata.reqHeaders,
+ ...this.entry.metadata.options,
+ })
+ }
+
+ return this[_request]
+ }
+
+ get response () {
+ if (!this[_response]) {
+ this[_response] = new Response(null, {
+ url: this.entry.metadata.url,
+ counter: this.options.counter,
+ status: this.entry.metadata.status || 200,
+ headers: {
+ ...this.entry.metadata.resHeaders,
+ 'content-length': this.entry.size,
+ },
+ })
+ }
+
+ return this[_response]
+ }
+
+ get policy () {
+ if (!this[_policy]) {
+ this[_policy] = new CachePolicy({
+ entry: this.entry,
+ request: this.request,
+ response: this.response,
+ options: this.options,
+ })
+ }
+
+ return this[_policy]
+ }
+
+ // wraps the response in a pipeline that stores the data
+ // in the cache while the user consumes it
+ async store (status) {
+ // if we got a status other than 200, 301, or 308,
+ // or the CachePolicy forbid storage, append the
+ // cache status header and return it untouched
+ if (
+ this.request.method !== 'GET' ||
+ ![200, 301, 308].includes(this.response.status) ||
+ !this.policy.storable()
+ ) {
+ this.response.headers.set('x-local-cache-status', 'skip')
+ return this.response
+ }
+
+ const size = this.response.headers.get('content-length')
+ const cacheOpts = {
+ algorithms: this.options.algorithms,
+ metadata: getMetadata(this.request, this.response, this.options),
+ size,
+ integrity: this.options.integrity,
+ integrityEmitter: this.response.body.hasIntegrityEmitter && this.response.body,
+ }
+
+ let body = null
+ // we only set a body if the status is a 200, redirects are
+ // stored as metadata only
+ if (this.response.status === 200) {
+ let cacheWriteResolve, cacheWriteReject
+ const cacheWritePromise = new Promise((resolve, reject) => {
+ cacheWriteResolve = resolve
+ cacheWriteReject = reject
+ }).catch((err) => {
+ body.emit('error', err)
+ })
+
+ body = new CachingMinipassPipeline({ events: ['integrity', 'size'] }, new MinipassFlush({
+ flush () {
+ return cacheWritePromise
+ },
+ }))
+ // this is always true since if we aren't reusing the one from the remote fetch, we
+ // are using the one from cacache
+ body.hasIntegrityEmitter = true
+
+ const onResume = () => {
+ const tee = new Minipass()
+ const cacheStream = cacache.put.stream(this.options.cachePath, this.key, cacheOpts)
+ // re-emit the integrity and size events on our new response body so they can be reused
+ cacheStream.on('integrity', i => body.emit('integrity', i))
+ cacheStream.on('size', s => body.emit('size', s))
+ // stick a flag on here so downstream users will know if they can expect integrity events
+ tee.pipe(cacheStream)
+ // TODO if the cache write fails, log a warning but return the response anyway
+ // eslint-disable-next-line promise/catch-or-return
+ cacheStream.promise().then(cacheWriteResolve, cacheWriteReject)
+ body.unshift(tee)
+ body.unshift(this.response.body)
+ }
+
+ body.once('resume', onResume)
+ body.once('end', () => body.removeListener('resume', onResume))
+ } else {
+ await cacache.index.insert(this.options.cachePath, this.key, null, cacheOpts)
+ }
+
+ // note: we do not set the x-local-cache-hash header because we do not know
+ // the hash value until after the write to the cache completes, which doesn't
+ // happen until after the response has been sent and it's too late to write
+ // the header anyway
+ this.response.headers.set('x-local-cache', encodeURIComponent(this.options.cachePath))
+ this.response.headers.set('x-local-cache-key', encodeURIComponent(this.key))
+ this.response.headers.set('x-local-cache-mode', 'stream')
+ this.response.headers.set('x-local-cache-status', status)
+ this.response.headers.set('x-local-cache-time', new Date().toISOString())
+ const newResponse = new Response(body, {
+ url: this.response.url,
+ status: this.response.status,
+ headers: this.response.headers,
+ counter: this.options.counter,
+ })
+ return newResponse
+ }
+
+ // use the cached data to create a response and return it
+ async respond (method, options, status) {
+ let response
+ if (method === 'HEAD' || [301, 308].includes(this.response.status)) {
+ // if the request is a HEAD, or the response is a redirect,
+ // then the metadata in the entry already includes everything
+ // we need to build a response
+ response = this.response
+ } else {
+ // we're responding with a full cached response, so create a body
+ // that reads from cacache and attach it to a new Response
+ const body = new Minipass()
+ const headers = { ...this.policy.responseHeaders() }
+
+ const onResume = () => {
+ const cacheStream = cacache.get.stream.byDigest(
+ this.options.cachePath, this.entry.integrity, { memoize: this.options.memoize }
+ )
+ cacheStream.on('error', async (err) => {
+ cacheStream.pause()
+ if (err.code === 'EINTEGRITY') {
+ await cacache.rm.content(
+ this.options.cachePath, this.entry.integrity, { memoize: this.options.memoize }
+ )
+ }
+ if (err.code === 'ENOENT' || err.code === 'EINTEGRITY') {
+ await CacheEntry.invalidate(this.request, this.options)
+ }
+ body.emit('error', err)
+ cacheStream.resume()
+ })
+ // emit the integrity and size events based on our metadata so we're consistent
+ body.emit('integrity', this.entry.integrity)
+ body.emit('size', Number(headers['content-length']))
+ cacheStream.pipe(body)
+ }
+
+ body.once('resume', onResume)
+ body.once('end', () => body.removeListener('resume', onResume))
+ response = new Response(body, {
+ url: this.entry.metadata.url,
+ counter: options.counter,
+ status: 200,
+ headers,
+ })
+ }
+
+ response.headers.set('x-local-cache', encodeURIComponent(this.options.cachePath))
+ response.headers.set('x-local-cache-hash', encodeURIComponent(this.entry.integrity))
+ response.headers.set('x-local-cache-key', encodeURIComponent(this.key))
+ response.headers.set('x-local-cache-mode', 'stream')
+ response.headers.set('x-local-cache-status', status)
+ response.headers.set('x-local-cache-time', new Date(this.entry.metadata.time).toUTCString())
+ return response
+ }
+
+ // use the provided request along with this cache entry to
+ // revalidate the stored response. returns a response, either
+ // from the cache or from the update
+ async revalidate (request, options) {
+ const revalidateRequest = new Request(request, {
+ headers: this.policy.revalidationHeaders(request),
+ })
+
+ try {
+ // NOTE: be sure to remove the headers property from the
+ // user supplied options, since we have already defined
+ // them on the new request object. if they're still in the
+ // options then those will overwrite the ones from the policy
+ var response = await remote(revalidateRequest, {
+ ...options,
+ headers: undefined,
+ })
+ } catch (err) {
+ // if the network fetch fails, return the stale
+ // cached response unless it has a cache-control
+ // of 'must-revalidate'
+ if (!this.policy.mustRevalidate) {
+ return this.respond(request.method, options, 'stale')
+ }
+
+ throw err
+ }
+
+ if (this.policy.revalidated(revalidateRequest, response)) {
+ // we got a 304, write a new index to the cache and respond from cache
+ const metadata = getMetadata(request, response, options)
+ // 304 responses do not include headers that are specific to the response data
+ // since they do not include a body, so we copy values for headers that were
+ // in the old cache entry to the new one, if the new metadata does not already
+ // include that header
+ for (const name of KEEP_RESPONSE_HEADERS) {
+ if (
+ !hasOwnProperty(metadata.resHeaders, name) &&
+ hasOwnProperty(this.entry.metadata.resHeaders, name)
+ ) {
+ metadata.resHeaders[name] = this.entry.metadata.resHeaders[name]
+ }
+ }
+
+ for (const name of options.cacheAdditionalHeaders) {
+ const inMeta = hasOwnProperty(metadata.resHeaders, name)
+ const inEntry = hasOwnProperty(this.entry.metadata.resHeaders, name)
+ const inPolicy = hasOwnProperty(this.policy.response.headers, name)
+
+ // if the header is in the existing entry, but it is not in the metadata
+ // then we need to write it to the metadata as this will refresh the on-disk cache
+ if (!inMeta && inEntry) {
+ metadata.resHeaders[name] = this.entry.metadata.resHeaders[name]
+ }
+ // if the header is in the metadata, but not in the policy, then we need to set
+ // it in the policy so that it's included in the immediate response. future
+ // responses will load a new cache entry, so we don't need to change that
+ if (!inPolicy && inMeta) {
+ this.policy.response.headers[name] = metadata.resHeaders[name]
+ }
+ }
+
+ try {
+ await cacache.index.insert(options.cachePath, this.key, this.entry.integrity, {
+ size: this.entry.size,
+ metadata,
+ })
+ } catch (err) {
+ // if updating the cache index fails, we ignore it and
+ // respond anyway
+ }
+ return this.respond(request.method, options, 'revalidated')
+ }
+
+ // if we got a modified response, create a new entry based on it
+ const newEntry = new CacheEntry({
+ request,
+ response,
+ options,
+ })
+
+ // respond with the new entry while writing it to the cache
+ return newEntry.store('updated')
+ }
+}
+
+module.exports = CacheEntry
diff --git a/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/cache/errors.js b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/cache/errors.js
new file mode 100644
index 00000000000..67a66573beb
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/cache/errors.js
@@ -0,0 +1,11 @@
+class NotCachedError extends Error {
+ constructor (url) {
+ /* eslint-disable-next-line max-len */
+ super(`request to ${url} failed: cache mode is 'only-if-cached' but no cached response is available.`)
+ this.code = 'ENOTCACHED'
+ }
+}
+
+module.exports = {
+ NotCachedError,
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/cache/index.js b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/cache/index.js
new file mode 100644
index 00000000000..0de49d23fb9
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/cache/index.js
@@ -0,0 +1,49 @@
+const { NotCachedError } = require('./errors.js')
+const CacheEntry = require('./entry.js')
+const remote = require('../remote.js')
+
+// do whatever is necessary to get a Response and return it
+const cacheFetch = async (request, options) => {
+ // try to find a cached entry that satisfies this request
+ const entry = await CacheEntry.find(request, options)
+ if (!entry) {
+ // no cached result, if the cache mode is 'only-if-cached' that's a failure
+ if (options.cache === 'only-if-cached') {
+ throw new NotCachedError(request.url)
+ }
+
+ // otherwise, we make a request, store it and return it
+ const response = await remote(request, options)
+ const newEntry = new CacheEntry({ request, response, options })
+ return newEntry.store('miss')
+ }
+
+ // we have a cached response that satisfies this request, however if the cache
+ // mode is 'no-cache' then we send the revalidation request no matter what
+ if (options.cache === 'no-cache') {
+ return entry.revalidate(request, options)
+ }
+
+ // if the cached entry is not stale, or if the cache mode is 'force-cache' or
+ // 'only-if-cached' we can respond with the cached entry. set the status
+ // based on the result of needsRevalidation and respond
+ const _needsRevalidation = entry.policy.needsRevalidation(request)
+ if (options.cache === 'force-cache' ||
+ options.cache === 'only-if-cached' ||
+ !_needsRevalidation) {
+ return entry.respond(request.method, options, _needsRevalidation ? 'stale' : 'hit')
+ }
+
+ // if we got here, the cache entry is stale so revalidate it
+ return entry.revalidate(request, options)
+}
+
+cacheFetch.invalidate = async (request, options) => {
+ if (!options.cachePath) {
+ return
+ }
+
+ return CacheEntry.invalidate(request, options)
+}
+
+module.exports = cacheFetch
diff --git a/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/cache/key.js b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/cache/key.js
new file mode 100644
index 00000000000..f7684d562b7
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/cache/key.js
@@ -0,0 +1,17 @@
+const { URL, format } = require('url')
+
+// options passed to url.format() when generating a key
+const formatOptions = {
+ auth: false,
+ fragment: false,
+ search: true,
+ unicode: false,
+}
+
+// returns a string to be used as the cache key for the Request
+const cacheKey = (request) => {
+ const parsed = new URL(request.url)
+ return `make-fetch-happen:request-cache:${format(parsed, formatOptions)}`
+}
+
+module.exports = cacheKey
diff --git a/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/cache/policy.js b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/cache/policy.js
new file mode 100644
index 00000000000..ada3c8600da
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/cache/policy.js
@@ -0,0 +1,161 @@
+const CacheSemantics = require('http-cache-semantics')
+const Negotiator = require('negotiator')
+const ssri = require('ssri')
+
+// options passed to http-cache-semantics constructor
+const policyOptions = {
+ shared: false,
+ ignoreCargoCult: true,
+}
+
+// a fake empty response, used when only testing the
+// request for storability
+const emptyResponse = { status: 200, headers: {} }
+
+// returns a plain object representation of the Request
+const requestObject = (request) => {
+ const _obj = {
+ method: request.method,
+ url: request.url,
+ headers: {},
+ compress: request.compress,
+ }
+
+ request.headers.forEach((value, key) => {
+ _obj.headers[key] = value
+ })
+
+ return _obj
+}
+
+// returns a plain object representation of the Response
+const responseObject = (response) => {
+ const _obj = {
+ status: response.status,
+ headers: {},
+ }
+
+ response.headers.forEach((value, key) => {
+ _obj.headers[key] = value
+ })
+
+ return _obj
+}
+
+class CachePolicy {
+ constructor ({ entry, request, response, options }) {
+ this.entry = entry
+ this.request = requestObject(request)
+ this.response = responseObject(response)
+ this.options = options
+ this.policy = new CacheSemantics(this.request, this.response, policyOptions)
+
+ if (this.entry) {
+ // if we have an entry, copy the timestamp to the _responseTime
+ // this is necessary because the CacheSemantics constructor forces
+ // the value to Date.now() which means a policy created from a
+ // cache entry is likely to always identify itself as stale
+ this.policy._responseTime = this.entry.metadata.time
+ }
+ }
+
+ // static method to quickly determine if a request alone is storable
+ static storable (request, options) {
+ // no cachePath means no caching
+ if (!options.cachePath) {
+ return false
+ }
+
+ // user explicitly asked not to cache
+ if (options.cache === 'no-store') {
+ return false
+ }
+
+ // we only cache GET and HEAD requests
+ if (!['GET', 'HEAD'].includes(request.method)) {
+ return false
+ }
+
+ // otherwise, let http-cache-semantics make the decision
+ // based on the request's headers
+ const policy = new CacheSemantics(requestObject(request), emptyResponse, policyOptions)
+ return policy.storable()
+ }
+
+ // returns true if the policy satisfies the request
+ satisfies (request) {
+ const _req = requestObject(request)
+ if (this.request.headers.host !== _req.headers.host) {
+ return false
+ }
+
+ if (this.request.compress !== _req.compress) {
+ return false
+ }
+
+ const negotiatorA = new Negotiator(this.request)
+ const negotiatorB = new Negotiator(_req)
+
+ if (JSON.stringify(negotiatorA.mediaTypes()) !== JSON.stringify(negotiatorB.mediaTypes())) {
+ return false
+ }
+
+ if (JSON.stringify(negotiatorA.languages()) !== JSON.stringify(negotiatorB.languages())) {
+ return false
+ }
+
+ if (JSON.stringify(negotiatorA.encodings()) !== JSON.stringify(negotiatorB.encodings())) {
+ return false
+ }
+
+ if (this.options.integrity) {
+ return ssri.parse(this.options.integrity).match(this.entry.integrity)
+ }
+
+ return true
+ }
+
+ // returns true if the request and response allow caching
+ storable () {
+ return this.policy.storable()
+ }
+
+ // NOTE: this is a hack to avoid parsing the cache-control
+ // header ourselves, it returns true if the response's
+ // cache-control contains must-revalidate
+ get mustRevalidate () {
+ return !!this.policy._rescc['must-revalidate']
+ }
+
+ // returns true if the cached response requires revalidation
+ // for the given request
+ needsRevalidation (request) {
+ const _req = requestObject(request)
+ // force method to GET because we only cache GETs
+ // but can serve a HEAD from a cached GET
+ _req.method = 'GET'
+ return !this.policy.satisfiesWithoutRevalidation(_req)
+ }
+
+ responseHeaders () {
+ return this.policy.responseHeaders()
+ }
+
+ // returns a new object containing the appropriate headers
+ // to send a revalidation request
+ revalidationHeaders (request) {
+ const _req = requestObject(request)
+ return this.policy.revalidationHeaders(_req)
+ }
+
+ // returns true if the request/response was revalidated
+ // successfully. returns false if a new response was received
+ revalidated (request, response) {
+ const _req = requestObject(request)
+ const _res = responseObject(response)
+ const policy = this.policy.revalidatedPolicy(_req, _res)
+ return !policy.modified
+ }
+}
+
+module.exports = CachePolicy
diff --git a/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/fetch.js b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/fetch.js
new file mode 100644
index 00000000000..233ba67e165
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/fetch.js
@@ -0,0 +1,118 @@
+'use strict'
+
+const { FetchError, Request, isRedirect } = require('minipass-fetch')
+const url = require('url')
+
+const CachePolicy = require('./cache/policy.js')
+const cache = require('./cache/index.js')
+const remote = require('./remote.js')
+
+// given a Request, a Response and user options
+// return true if the response is a redirect that
+// can be followed. we throw errors that will result
+// in the fetch being rejected if the redirect is
+// possible but invalid for some reason
+const canFollowRedirect = (request, response, options) => {
+ if (!isRedirect(response.status)) {
+ return false
+ }
+
+ if (options.redirect === 'manual') {
+ return false
+ }
+
+ if (options.redirect === 'error') {
+ throw new FetchError(`redirect mode is set to error: ${request.url}`,
+ 'no-redirect', { code: 'ENOREDIRECT' })
+ }
+
+ if (!response.headers.has('location')) {
+ throw new FetchError(`redirect location header missing for: ${request.url}`,
+ 'no-location', { code: 'EINVALIDREDIRECT' })
+ }
+
+ if (request.counter >= request.follow) {
+ throw new FetchError(`maximum redirect reached at: ${request.url}`,
+ 'max-redirect', { code: 'EMAXREDIRECT' })
+ }
+
+ return true
+}
+
+// given a Request, a Response, and the user's options return an object
+// with a new Request and a new options object that will be used for
+// following the redirect
+const getRedirect = (request, response, options) => {
+ const _opts = { ...options }
+ const location = response.headers.get('location')
+ const redirectUrl = new url.URL(location, /^https?:/.test(location) ? undefined : request.url)
+ // Comment below is used under the following license:
+ /**
+ * @license
+ * Copyright (c) 2010-2012 Mikeal Rogers
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an "AS
+ * IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language
+ * governing permissions and limitations under the License.
+ */
+
+ // Remove authorization if changing hostnames (but not if just
+ // changing ports or protocols). This matches the behavior of request:
+ // https://github.com/request/request/blob/b12a6245/lib/redirect.js#L134-L138
+ if (new url.URL(request.url).hostname !== redirectUrl.hostname) {
+ request.headers.delete('authorization')
+ request.headers.delete('cookie')
+ }
+
+ // for POST request with 301/302 response, or any request with 303 response,
+ // use GET when following redirect
+ if (
+ response.status === 303 ||
+ (request.method === 'POST' && [301, 302].includes(response.status))
+ ) {
+ _opts.method = 'GET'
+ _opts.body = null
+ request.headers.delete('content-length')
+ }
+
+ _opts.headers = {}
+ request.headers.forEach((value, key) => {
+ _opts.headers[key] = value
+ })
+
+ _opts.counter = ++request.counter
+ const redirectReq = new Request(url.format(redirectUrl), _opts)
+ return {
+ request: redirectReq,
+ options: _opts,
+ }
+}
+
+const fetch = async (request, options) => {
+ const response = CachePolicy.storable(request, options)
+ ? await cache(request, options)
+ : await remote(request, options)
+
+ // if the request wasn't a GET or HEAD, and the response
+ // status is between 200 and 399 inclusive, invalidate the
+ // request url
+ if (!['GET', 'HEAD'].includes(request.method) &&
+ response.status >= 200 &&
+ response.status <= 399) {
+ await cache.invalidate(request, options)
+ }
+
+ if (!canFollowRedirect(request, response, options)) {
+ return response
+ }
+
+ const redirect = getRedirect(request, response, options)
+ return fetch(redirect.request, redirect.options)
+}
+
+module.exports = fetch
diff --git a/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/index.js b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/index.js
new file mode 100644
index 00000000000..2f12e8e1b61
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/index.js
@@ -0,0 +1,41 @@
+const { FetchError, Headers, Request, Response } = require('minipass-fetch')
+
+const configureOptions = require('./options.js')
+const fetch = require('./fetch.js')
+
+const makeFetchHappen = (url, opts) => {
+ const options = configureOptions(opts)
+
+ const request = new Request(url, options)
+ return fetch(request, options)
+}
+
+makeFetchHappen.defaults = (defaultUrl, defaultOptions = {}, wrappedFetch = makeFetchHappen) => {
+ if (typeof defaultUrl === 'object') {
+ defaultOptions = defaultUrl
+ defaultUrl = null
+ }
+
+ const defaultedFetch = (url, options = {}) => {
+ const finalUrl = url || defaultUrl
+ const finalOptions = {
+ ...defaultOptions,
+ ...options,
+ headers: {
+ ...defaultOptions.headers,
+ ...options.headers,
+ },
+ }
+ return wrappedFetch(finalUrl, finalOptions)
+ }
+
+ defaultedFetch.defaults = (defaultUrl1, defaultOptions1 = {}) =>
+ makeFetchHappen.defaults(defaultUrl1, defaultOptions1, defaultedFetch)
+ return defaultedFetch
+}
+
+module.exports = makeFetchHappen
+module.exports.FetchError = FetchError
+module.exports.Headers = Headers
+module.exports.Request = Request
+module.exports.Response = Response
diff --git a/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/options.js b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/options.js
new file mode 100644
index 00000000000..f77511279f8
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/options.js
@@ -0,0 +1,54 @@
+const dns = require('dns')
+
+const conditionalHeaders = [
+ 'if-modified-since',
+ 'if-none-match',
+ 'if-unmodified-since',
+ 'if-match',
+ 'if-range',
+]
+
+const configureOptions = (opts) => {
+ const { strictSSL, ...options } = { ...opts }
+ options.method = options.method ? options.method.toUpperCase() : 'GET'
+ options.rejectUnauthorized = strictSSL !== false
+
+ if (!options.retry) {
+ options.retry = { retries: 0 }
+ } else if (typeof options.retry === 'string') {
+ const retries = parseInt(options.retry, 10)
+ if (isFinite(retries)) {
+ options.retry = { retries }
+ } else {
+ options.retry = { retries: 0 }
+ }
+ } else if (typeof options.retry === 'number') {
+ options.retry = { retries: options.retry }
+ } else {
+ options.retry = { retries: 0, ...options.retry }
+ }
+
+ options.dns = { ttl: 5 * 60 * 1000, lookup: dns.lookup, ...options.dns }
+
+ options.cache = options.cache || 'default'
+ if (options.cache === 'default') {
+ const hasConditionalHeader = Object.keys(options.headers || {}).some((name) => {
+ return conditionalHeaders.includes(name.toLowerCase())
+ })
+ if (hasConditionalHeader) {
+ options.cache = 'no-store'
+ }
+ }
+
+ options.cacheAdditionalHeaders = options.cacheAdditionalHeaders || []
+
+ // cacheManager is deprecated, but if it's set and
+ // cachePath is not we should copy it to the new field
+ if (options.cacheManager && !options.cachePath) {
+ options.cachePath = options.cacheManager
+ }
+
+ return options
+}
+
+module.exports = configureOptions
diff --git a/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/pipeline.js b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/pipeline.js
new file mode 100644
index 00000000000..b1d221b2d0c
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/pipeline.js
@@ -0,0 +1,41 @@
+'use strict'
+
+const MinipassPipeline = require('minipass-pipeline')
+
+class CachingMinipassPipeline extends MinipassPipeline {
+ #events = []
+ #data = new Map()
+
+ constructor (opts, ...streams) {
+ // CRITICAL: do NOT pass the streams to the call to super(), this will start
+ // the flow of data and potentially cause the events we need to catch to emit
+ // before we've finished our own setup. instead we call super() with no args,
+ // finish our setup, and then push the streams into ourselves to start the
+ // data flow
+ super()
+ this.#events = opts.events
+
+ /* istanbul ignore next - coverage disabled because this is pointless to test here */
+ if (streams.length) {
+ this.push(...streams)
+ }
+ }
+
+ on (event, handler) {
+ if (this.#events.includes(event) && this.#data.has(event)) {
+ return handler(...this.#data.get(event))
+ }
+
+ return super.on(event, handler)
+ }
+
+ emit (event, ...data) {
+ if (this.#events.includes(event)) {
+ this.#data.set(event, data)
+ }
+
+ return super.emit(event, ...data)
+ }
+}
+
+module.exports = CachingMinipassPipeline
diff --git a/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/remote.js b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/remote.js
new file mode 100644
index 00000000000..8554564074d
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/lib/remote.js
@@ -0,0 +1,131 @@
+const { Minipass } = require('minipass')
+const fetch = require('minipass-fetch')
+const promiseRetry = require('promise-retry')
+const ssri = require('ssri')
+const { log } = require('proc-log')
+
+const CachingMinipassPipeline = require('./pipeline.js')
+const { getAgent } = require('@npmcli/agent')
+const pkg = require('../package.json')
+
+const USER_AGENT = `${pkg.name}/${pkg.version} (+https://npm.im/${pkg.name})`
+
+const RETRY_ERRORS = [
+ 'ECONNRESET', // remote socket closed on us
+ 'ECONNREFUSED', // remote host refused to open connection
+ 'EADDRINUSE', // failed to bind to a local port (proxy?)
+ 'ETIMEDOUT', // someone in the transaction is WAY TOO SLOW
+ // from @npmcli/agent
+ 'ECONNECTIONTIMEOUT',
+ 'EIDLETIMEOUT',
+ 'ERESPONSETIMEOUT',
+ 'ETRANSFERTIMEOUT',
+ // Known codes we do NOT retry on:
+ // ENOTFOUND (getaddrinfo failure. Either bad hostname, or offline)
+ // EINVALIDPROXY // invalid protocol from @npmcli/agent
+ // EINVALIDRESPONSE // invalid status code from @npmcli/agent
+]
+
+const RETRY_TYPES = [
+ 'request-timeout',
+]
+
+// make a request directly to the remote source,
+// retrying certain classes of errors as well as
+// following redirects (through the cache if necessary)
+// and verifying response integrity
+const remoteFetch = (request, options) => {
+ const agent = getAgent(request.url, options)
+ if (!request.headers.has('connection')) {
+ request.headers.set('connection', agent ? 'keep-alive' : 'close')
+ }
+
+ if (!request.headers.has('user-agent')) {
+ request.headers.set('user-agent', USER_AGENT)
+ }
+
+ // keep our own options since we're overriding the agent
+ // and the redirect mode
+ const _opts = {
+ ...options,
+ agent,
+ redirect: 'manual',
+ }
+
+ return promiseRetry(async (retryHandler, attemptNum) => {
+ const req = new fetch.Request(request, _opts)
+ try {
+ let res = await fetch(req, _opts)
+ if (_opts.integrity && res.status === 200) {
+ // we got a 200 response and the user has specified an expected
+ // integrity value, so wrap the response in an ssri stream to verify it
+ const integrityStream = ssri.integrityStream({
+ algorithms: _opts.algorithms,
+ integrity: _opts.integrity,
+ size: _opts.size,
+ })
+ const pipeline = new CachingMinipassPipeline({
+ events: ['integrity', 'size'],
+ }, res.body, integrityStream)
+ // we also propagate the integrity and size events out to the pipeline so we can use
+ // this new response body as an integrityEmitter for cacache
+ integrityStream.on('integrity', i => pipeline.emit('integrity', i))
+ integrityStream.on('size', s => pipeline.emit('size', s))
+ res = new fetch.Response(pipeline, res)
+ // set an explicit flag so we know if our response body will emit integrity and size
+ res.body.hasIntegrityEmitter = true
+ }
+
+ res.headers.set('x-fetch-attempts', attemptNum)
+
+ // do not retry POST requests, or requests with a streaming body
+ // do retry requests with a 408, 420, 429 or 500+ status in the response
+ const isStream = Minipass.isStream(req.body)
+ const isRetriable = req.method !== 'POST' &&
+ !isStream &&
+ ([408, 420, 429].includes(res.status) || res.status >= 500)
+
+ if (isRetriable) {
+ if (typeof options.onRetry === 'function') {
+ options.onRetry(res)
+ }
+
+ /* eslint-disable-next-line max-len */
+ log.http('fetch', `${req.method} ${req.url} attempt ${attemptNum} failed with ${res.status}`)
+ return retryHandler(res)
+ }
+
+ return res
+ } catch (err) {
+ const code = (err.code === 'EPROMISERETRY')
+ ? err.retried.code
+ : err.code
+
+ // err.retried will be the thing that was thrown from above
+ // if it's a response, we just got a bad status code and we
+ // can re-throw to allow the retry
+ const isRetryError = err.retried instanceof fetch.Response ||
+ (RETRY_ERRORS.includes(code) && RETRY_TYPES.includes(err.type))
+
+ if (req.method === 'POST' || isRetryError) {
+ throw err
+ }
+
+ if (typeof options.onRetry === 'function') {
+ options.onRetry(err)
+ }
+
+ log.http('fetch', `${req.method} ${req.url} attempt ${attemptNum} failed with ${err.code}`)
+ return retryHandler(err)
+ }
+ }, options.retry).catch((err) => {
+ // don't reject for http errors, just return them
+ if (err.status >= 400 && err.type !== 'system') {
+ return err
+ }
+
+ throw err
+ })
+}
+
+module.exports = remoteFetch
diff --git a/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/package.json b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/package.json
new file mode 100644
index 00000000000..7adb4d1e7f9
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/make-fetch-happen/package.json
@@ -0,0 +1,75 @@
+{
+ "name": "make-fetch-happen",
+ "version": "13.0.1",
+ "description": "Opinionated, caching, retrying fetch client",
+ "main": "lib/index.js",
+ "files": [
+ "bin/",
+ "lib/"
+ ],
+ "scripts": {
+ "test": "tap",
+ "posttest": "npm run lint",
+ "eslint": "eslint",
+ "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lintfix": "npm run lint -- --fix",
+ "postlint": "template-oss-check",
+ "snap": "tap",
+ "template-oss-apply": "template-oss-apply --force"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/npm/make-fetch-happen.git"
+ },
+ "keywords": [
+ "http",
+ "request",
+ "fetch",
+ "mean girls",
+ "caching",
+ "cache",
+ "subresource integrity"
+ ],
+ "author": "GitHub Inc.",
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/agent": "^2.0.0",
+ "cacache": "^18.0.0",
+ "http-cache-semantics": "^4.1.1",
+ "is-lambda": "^1.0.1",
+ "minipass": "^7.0.2",
+ "minipass-fetch": "^3.0.0",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.4",
+ "negotiator": "^0.6.3",
+ "proc-log": "^4.2.0",
+ "promise-retry": "^2.0.1",
+ "ssri": "^10.0.0"
+ },
+ "devDependencies": {
+ "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/template-oss": "4.21.4",
+ "nock": "^13.2.4",
+ "safe-buffer": "^5.2.1",
+ "standard-version": "^9.3.2",
+ "tap": "^16.0.0"
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ },
+ "tap": {
+ "color": 1,
+ "files": "test/*.js",
+ "check-coverage": true,
+ "timeout": 60,
+ "nyc-arg": [
+ "--exclude",
+ "tap-snapshots/**"
+ ]
+ },
+ "templateOSS": {
+ "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
+ "version": "4.21.4",
+ "publish": "true"
+ }
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/LICENSE b/deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/LICENSE
new file mode 100644
index 00000000000..3c3410cdc12
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/LICENSE
@@ -0,0 +1,28 @@
+The MIT License (MIT)
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+Copyright (c) 2016 David Frank
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+---
+
+Note: This is a derivative work based on "node-fetch" by David Frank,
+modified and distributed under the terms of the MIT license above.
+https://github.com/bitinn/node-fetch
diff --git a/deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/lib/abort-error.js b/deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/lib/abort-error.js
new file mode 100644
index 00000000000..b18f643269e
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/lib/abort-error.js
@@ -0,0 +1,17 @@
+'use strict'
+class AbortError extends Error {
+ constructor (message) {
+ super(message)
+ this.code = 'FETCH_ABORTED'
+ this.type = 'aborted'
+ Error.captureStackTrace(this, this.constructor)
+ }
+
+ get name () {
+ return 'AbortError'
+ }
+
+ // don't allow name to be overridden, but don't throw either
+ set name (s) {}
+}
+module.exports = AbortError
diff --git a/deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/lib/blob.js b/deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/lib/blob.js
new file mode 100644
index 00000000000..121b1730102
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/lib/blob.js
@@ -0,0 +1,97 @@
+'use strict'
+const { Minipass } = require('minipass')
+const TYPE = Symbol('type')
+const BUFFER = Symbol('buffer')
+
+class Blob {
+ constructor (blobParts, options) {
+ this[TYPE] = ''
+
+ const buffers = []
+ let size = 0
+
+ if (blobParts) {
+ const a = blobParts
+ const length = Number(a.length)
+ for (let i = 0; i < length; i++) {
+ const element = a[i]
+ const buffer = element instanceof Buffer ? element
+ : ArrayBuffer.isView(element)
+ ? Buffer.from(element.buffer, element.byteOffset, element.byteLength)
+ : element instanceof ArrayBuffer ? Buffer.from(element)
+ : element instanceof Blob ? element[BUFFER]
+ : typeof element === 'string' ? Buffer.from(element)
+ : Buffer.from(String(element))
+ size += buffer.length
+ buffers.push(buffer)
+ }
+ }
+
+ this[BUFFER] = Buffer.concat(buffers, size)
+
+ const type = options && options.type !== undefined
+ && String(options.type).toLowerCase()
+ if (type && !/[^\u0020-\u007E]/.test(type)) {
+ this[TYPE] = type
+ }
+ }
+
+ get size () {
+ return this[BUFFER].length
+ }
+
+ get type () {
+ return this[TYPE]
+ }
+
+ text () {
+ return Promise.resolve(this[BUFFER].toString())
+ }
+
+ arrayBuffer () {
+ const buf = this[BUFFER]
+ const off = buf.byteOffset
+ const len = buf.byteLength
+ const ab = buf.buffer.slice(off, off + len)
+ return Promise.resolve(ab)
+ }
+
+ stream () {
+ return new Minipass().end(this[BUFFER])
+ }
+
+ slice (start, end, type) {
+ const size = this.size
+ const relativeStart = start === undefined ? 0
+ : start < 0 ? Math.max(size + start, 0)
+ : Math.min(start, size)
+ const relativeEnd = end === undefined ? size
+ : end < 0 ? Math.max(size + end, 0)
+ : Math.min(end, size)
+ const span = Math.max(relativeEnd - relativeStart, 0)
+
+ const buffer = this[BUFFER]
+ const slicedBuffer = buffer.slice(
+ relativeStart,
+ relativeStart + span
+ )
+ const blob = new Blob([], { type })
+ blob[BUFFER] = slicedBuffer
+ return blob
+ }
+
+ get [Symbol.toStringTag] () {
+ return 'Blob'
+ }
+
+ static get BUFFER () {
+ return BUFFER
+ }
+}
+
+Object.defineProperties(Blob.prototype, {
+ size: { enumerable: true },
+ type: { enumerable: true },
+})
+
+module.exports = Blob
diff --git a/deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/lib/body.js b/deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/lib/body.js
new file mode 100644
index 00000000000..62286bd1de0
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/lib/body.js
@@ -0,0 +1,350 @@
+'use strict'
+const { Minipass } = require('minipass')
+const MinipassSized = require('minipass-sized')
+
+const Blob = require('./blob.js')
+const { BUFFER } = Blob
+const FetchError = require('./fetch-error.js')
+
+// optional dependency on 'encoding'
+let convert
+try {
+ convert = require('encoding').convert
+} catch (e) {
+ // defer error until textConverted is called
+}
+
+const INTERNALS = Symbol('Body internals')
+const CONSUME_BODY = Symbol('consumeBody')
+
+class Body {
+ constructor (bodyArg, options = {}) {
+ const { size = 0, timeout = 0 } = options
+ const body = bodyArg === undefined || bodyArg === null ? null
+ : isURLSearchParams(bodyArg) ? Buffer.from(bodyArg.toString())
+ : isBlob(bodyArg) ? bodyArg
+ : Buffer.isBuffer(bodyArg) ? bodyArg
+ : Object.prototype.toString.call(bodyArg) === '[object ArrayBuffer]'
+ ? Buffer.from(bodyArg)
+ : ArrayBuffer.isView(bodyArg)
+ ? Buffer.from(bodyArg.buffer, bodyArg.byteOffset, bodyArg.byteLength)
+ : Minipass.isStream(bodyArg) ? bodyArg
+ : Buffer.from(String(bodyArg))
+
+ this[INTERNALS] = {
+ body,
+ disturbed: false,
+ error: null,
+ }
+
+ this.size = size
+ this.timeout = timeout
+
+ if (Minipass.isStream(body)) {
+ body.on('error', er => {
+ const error = er.name === 'AbortError' ? er
+ : new FetchError(`Invalid response while trying to fetch ${
+ this.url}: ${er.message}`, 'system', er)
+ this[INTERNALS].error = error
+ })
+ }
+ }
+
+ get body () {
+ return this[INTERNALS].body
+ }
+
+ get bodyUsed () {
+ return this[INTERNALS].disturbed
+ }
+
+ arrayBuffer () {
+ return this[CONSUME_BODY]().then(buf =>
+ buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength))
+ }
+
+ blob () {
+ const ct = this.headers && this.headers.get('content-type') || ''
+ return this[CONSUME_BODY]().then(buf => Object.assign(
+ new Blob([], { type: ct.toLowerCase() }),
+ { [BUFFER]: buf }
+ ))
+ }
+
+ async json () {
+ const buf = await this[CONSUME_BODY]()
+ try {
+ return JSON.parse(buf.toString())
+ } catch (er) {
+ throw new FetchError(
+ `invalid json response body at ${this.url} reason: ${er.message}`,
+ 'invalid-json'
+ )
+ }
+ }
+
+ text () {
+ return this[CONSUME_BODY]().then(buf => buf.toString())
+ }
+
+ buffer () {
+ return this[CONSUME_BODY]()
+ }
+
+ textConverted () {
+ return this[CONSUME_BODY]().then(buf => convertBody(buf, this.headers))
+ }
+
+ [CONSUME_BODY] () {
+ if (this[INTERNALS].disturbed) {
+ return Promise.reject(new TypeError(`body used already for: ${
+ this.url}`))
+ }
+
+ this[INTERNALS].disturbed = true
+
+ if (this[INTERNALS].error) {
+ return Promise.reject(this[INTERNALS].error)
+ }
+
+ // body is null
+ if (this.body === null) {
+ return Promise.resolve(Buffer.alloc(0))
+ }
+
+ if (Buffer.isBuffer(this.body)) {
+ return Promise.resolve(this.body)
+ }
+
+ const upstream = isBlob(this.body) ? this.body.stream() : this.body
+
+ /* istanbul ignore if: should never happen */
+ if (!Minipass.isStream(upstream)) {
+ return Promise.resolve(Buffer.alloc(0))
+ }
+
+ const stream = this.size && upstream instanceof MinipassSized ? upstream
+ : !this.size && upstream instanceof Minipass &&
+ !(upstream instanceof MinipassSized) ? upstream
+ : this.size ? new MinipassSized({ size: this.size })
+ : new Minipass()
+
+ // allow timeout on slow response body, but only if the stream is still writable. this
+ // makes the timeout center on the socket stream from lib/index.js rather than the
+ // intermediary minipass stream we create to receive the data
+ const resTimeout = this.timeout && stream.writable ? setTimeout(() => {
+ stream.emit('error', new FetchError(
+ `Response timeout while trying to fetch ${
+ this.url} (over ${this.timeout}ms)`, 'body-timeout'))
+ }, this.timeout) : null
+
+ // do not keep the process open just for this timeout, even
+ // though we expect it'll get cleared eventually.
+ if (resTimeout && resTimeout.unref) {
+ resTimeout.unref()
+ }
+
+ // do the pipe in the promise, because the pipe() can send too much
+ // data through right away and upset the MP Sized object
+ return new Promise((resolve) => {
+ // if the stream is some other kind of stream, then pipe through a MP
+ // so we can collect it more easily.
+ if (stream !== upstream) {
+ upstream.on('error', er => stream.emit('error', er))
+ upstream.pipe(stream)
+ }
+ resolve()
+ }).then(() => stream.concat()).then(buf => {
+ clearTimeout(resTimeout)
+ return buf
+ }).catch(er => {
+ clearTimeout(resTimeout)
+ // request was aborted, reject with this Error
+ if (er.name === 'AbortError' || er.name === 'FetchError') {
+ throw er
+ } else if (er.name === 'RangeError') {
+ throw new FetchError(`Could not create Buffer from response body for ${
+ this.url}: ${er.message}`, 'system', er)
+ } else {
+ // other errors, such as incorrect content-encoding or content-length
+ throw new FetchError(`Invalid response body while trying to fetch ${
+ this.url}: ${er.message}`, 'system', er)
+ }
+ })
+ }
+
+ static clone (instance) {
+ if (instance.bodyUsed) {
+ throw new Error('cannot clone body after it is used')
+ }
+
+ const body = instance.body
+
+ // check that body is a stream and not form-data object
+ // NB: can't clone the form-data object without having it as a dependency
+ if (Minipass.isStream(body) && typeof body.getBoundary !== 'function') {
+ // create a dedicated tee stream so that we don't lose data
+ // potentially sitting in the body stream's buffer by writing it
+ // immediately to p1 and not having it for p2.
+ const tee = new Minipass()
+ const p1 = new Minipass()
+ const p2 = new Minipass()
+ tee.on('error', er => {
+ p1.emit('error', er)
+ p2.emit('error', er)
+ })
+ body.on('error', er => tee.emit('error', er))
+ tee.pipe(p1)
+ tee.pipe(p2)
+ body.pipe(tee)
+ // set instance body to one fork, return the other
+ instance[INTERNALS].body = p1
+ return p2
+ } else {
+ return instance.body
+ }
+ }
+
+ static extractContentType (body) {
+ return body === null || body === undefined ? null
+ : typeof body === 'string' ? 'text/plain;charset=UTF-8'
+ : isURLSearchParams(body)
+ ? 'application/x-www-form-urlencoded;charset=UTF-8'
+ : isBlob(body) ? body.type || null
+ : Buffer.isBuffer(body) ? null
+ : Object.prototype.toString.call(body) === '[object ArrayBuffer]' ? null
+ : ArrayBuffer.isView(body) ? null
+ : typeof body.getBoundary === 'function'
+ ? `multipart/form-data;boundary=${body.getBoundary()}`
+ : Minipass.isStream(body) ? null
+ : 'text/plain;charset=UTF-8'
+ }
+
+ static getTotalBytes (instance) {
+ const { body } = instance
+ return (body === null || body === undefined) ? 0
+ : isBlob(body) ? body.size
+ : Buffer.isBuffer(body) ? body.length
+ : body && typeof body.getLengthSync === 'function' && (
+ // detect form data input from form-data module
+ body._lengthRetrievers &&
+ /* istanbul ignore next */ body._lengthRetrievers.length === 0 || // 1.x
+ body.hasKnownLength && body.hasKnownLength()) // 2.x
+ ? body.getLengthSync()
+ : null
+ }
+
+ static writeToStream (dest, instance) {
+ const { body } = instance
+
+ if (body === null || body === undefined) {
+ dest.end()
+ } else if (Buffer.isBuffer(body) || typeof body === 'string') {
+ dest.end(body)
+ } else {
+ // body is stream or blob
+ const stream = isBlob(body) ? body.stream() : body
+ stream.on('error', er => dest.emit('error', er)).pipe(dest)
+ }
+
+ return dest
+ }
+}
+
+Object.defineProperties(Body.prototype, {
+ body: { enumerable: true },
+ bodyUsed: { enumerable: true },
+ arrayBuffer: { enumerable: true },
+ blob: { enumerable: true },
+ json: { enumerable: true },
+ text: { enumerable: true },
+})
+
+const isURLSearchParams = obj =>
+ // Duck-typing as a necessary condition.
+ (typeof obj !== 'object' ||
+ typeof obj.append !== 'function' ||
+ typeof obj.delete !== 'function' ||
+ typeof obj.get !== 'function' ||
+ typeof obj.getAll !== 'function' ||
+ typeof obj.has !== 'function' ||
+ typeof obj.set !== 'function') ? false
+ // Brand-checking and more duck-typing as optional condition.
+ : obj.constructor.name === 'URLSearchParams' ||
+ Object.prototype.toString.call(obj) === '[object URLSearchParams]' ||
+ typeof obj.sort === 'function'
+
+const isBlob = obj =>
+ typeof obj === 'object' &&
+ typeof obj.arrayBuffer === 'function' &&
+ typeof obj.type === 'string' &&
+ typeof obj.stream === 'function' &&
+ typeof obj.constructor === 'function' &&
+ typeof obj.constructor.name === 'string' &&
+ /^(Blob|File)$/.test(obj.constructor.name) &&
+ /^(Blob|File)$/.test(obj[Symbol.toStringTag])
+
+const convertBody = (buffer, headers) => {
+ /* istanbul ignore if */
+ if (typeof convert !== 'function') {
+ throw new Error('The package `encoding` must be installed to use the textConverted() function')
+ }
+
+ const ct = headers && headers.get('content-type')
+ let charset = 'utf-8'
+ let res
+
+ // header
+ if (ct) {
+ res = /charset=([^;]*)/i.exec(ct)
+ }
+
+ // no charset in content type, peek at response body for at most 1024 bytes
+ const str = buffer.slice(0, 1024).toString()
+
+ // html5
+ if (!res && str) {
+ res = / this.expect
+ ? 'max-size' : type
+ this.message = message
+ Error.captureStackTrace(this, this.constructor)
+ }
+
+ get name () {
+ return 'FetchError'
+ }
+
+ // don't allow name to be overwritten
+ set name (n) {}
+
+ get [Symbol.toStringTag] () {
+ return 'FetchError'
+ }
+}
+module.exports = FetchError
diff --git a/deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/lib/headers.js b/deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/lib/headers.js
new file mode 100644
index 00000000000..dd6e854d5ba
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/lib/headers.js
@@ -0,0 +1,267 @@
+'use strict'
+const invalidTokenRegex = /[^^_`a-zA-Z\-0-9!#$%&'*+.|~]/
+const invalidHeaderCharRegex = /[^\t\x20-\x7e\x80-\xff]/
+
+const validateName = name => {
+ name = `${name}`
+ if (invalidTokenRegex.test(name) || name === '') {
+ throw new TypeError(`${name} is not a legal HTTP header name`)
+ }
+}
+
+const validateValue = value => {
+ value = `${value}`
+ if (invalidHeaderCharRegex.test(value)) {
+ throw new TypeError(`${value} is not a legal HTTP header value`)
+ }
+}
+
+const find = (map, name) => {
+ name = name.toLowerCase()
+ for (const key in map) {
+ if (key.toLowerCase() === name) {
+ return key
+ }
+ }
+ return undefined
+}
+
+const MAP = Symbol('map')
+class Headers {
+ constructor (init = undefined) {
+ this[MAP] = Object.create(null)
+ if (init instanceof Headers) {
+ const rawHeaders = init.raw()
+ const headerNames = Object.keys(rawHeaders)
+ for (const headerName of headerNames) {
+ for (const value of rawHeaders[headerName]) {
+ this.append(headerName, value)
+ }
+ }
+ return
+ }
+
+ // no-op
+ if (init === undefined || init === null) {
+ return
+ }
+
+ if (typeof init === 'object') {
+ const method = init[Symbol.iterator]
+ if (method !== null && method !== undefined) {
+ if (typeof method !== 'function') {
+ throw new TypeError('Header pairs must be iterable')
+ }
+
+ // sequence>
+ // Note: per spec we have to first exhaust the lists then process them
+ const pairs = []
+ for (const pair of init) {
+ if (typeof pair !== 'object' ||
+ typeof pair[Symbol.iterator] !== 'function') {
+ throw new TypeError('Each header pair must be iterable')
+ }
+ const arrPair = Array.from(pair)
+ if (arrPair.length !== 2) {
+ throw new TypeError('Each header pair must be a name/value tuple')
+ }
+ pairs.push(arrPair)
+ }
+
+ for (const pair of pairs) {
+ this.append(pair[0], pair[1])
+ }
+ } else {
+ // record
+ for (const key of Object.keys(init)) {
+ this.append(key, init[key])
+ }
+ }
+ } else {
+ throw new TypeError('Provided initializer must be an object')
+ }
+ }
+
+ get (name) {
+ name = `${name}`
+ validateName(name)
+ const key = find(this[MAP], name)
+ if (key === undefined) {
+ return null
+ }
+
+ return this[MAP][key].join(', ')
+ }
+
+ forEach (callback, thisArg = undefined) {
+ let pairs = getHeaders(this)
+ for (let i = 0; i < pairs.length; i++) {
+ const [name, value] = pairs[i]
+ callback.call(thisArg, value, name, this)
+ // refresh in case the callback added more headers
+ pairs = getHeaders(this)
+ }
+ }
+
+ set (name, value) {
+ name = `${name}`
+ value = `${value}`
+ validateName(name)
+ validateValue(value)
+ const key = find(this[MAP], name)
+ this[MAP][key !== undefined ? key : name] = [value]
+ }
+
+ append (name, value) {
+ name = `${name}`
+ value = `${value}`
+ validateName(name)
+ validateValue(value)
+ const key = find(this[MAP], name)
+ if (key !== undefined) {
+ this[MAP][key].push(value)
+ } else {
+ this[MAP][name] = [value]
+ }
+ }
+
+ has (name) {
+ name = `${name}`
+ validateName(name)
+ return find(this[MAP], name) !== undefined
+ }
+
+ delete (name) {
+ name = `${name}`
+ validateName(name)
+ const key = find(this[MAP], name)
+ if (key !== undefined) {
+ delete this[MAP][key]
+ }
+ }
+
+ raw () {
+ return this[MAP]
+ }
+
+ keys () {
+ return new HeadersIterator(this, 'key')
+ }
+
+ values () {
+ return new HeadersIterator(this, 'value')
+ }
+
+ [Symbol.iterator] () {
+ return new HeadersIterator(this, 'key+value')
+ }
+
+ entries () {
+ return new HeadersIterator(this, 'key+value')
+ }
+
+ get [Symbol.toStringTag] () {
+ return 'Headers'
+ }
+
+ static exportNodeCompatibleHeaders (headers) {
+ const obj = Object.assign(Object.create(null), headers[MAP])
+
+ // http.request() only supports string as Host header. This hack makes
+ // specifying custom Host header possible.
+ const hostHeaderKey = find(headers[MAP], 'Host')
+ if (hostHeaderKey !== undefined) {
+ obj[hostHeaderKey] = obj[hostHeaderKey][0]
+ }
+
+ return obj
+ }
+
+ static createHeadersLenient (obj) {
+ const headers = new Headers()
+ for (const name of Object.keys(obj)) {
+ if (invalidTokenRegex.test(name)) {
+ continue
+ }
+
+ if (Array.isArray(obj[name])) {
+ for (const val of obj[name]) {
+ if (invalidHeaderCharRegex.test(val)) {
+ continue
+ }
+
+ if (headers[MAP][name] === undefined) {
+ headers[MAP][name] = [val]
+ } else {
+ headers[MAP][name].push(val)
+ }
+ }
+ } else if (!invalidHeaderCharRegex.test(obj[name])) {
+ headers[MAP][name] = [obj[name]]
+ }
+ }
+ return headers
+ }
+}
+
+Object.defineProperties(Headers.prototype, {
+ get: { enumerable: true },
+ forEach: { enumerable: true },
+ set: { enumerable: true },
+ append: { enumerable: true },
+ has: { enumerable: true },
+ delete: { enumerable: true },
+ keys: { enumerable: true },
+ values: { enumerable: true },
+ entries: { enumerable: true },
+})
+
+const getHeaders = (headers, kind = 'key+value') =>
+ Object.keys(headers[MAP]).sort().map(
+ kind === 'key' ? k => k.toLowerCase()
+ : kind === 'value' ? k => headers[MAP][k].join(', ')
+ : k => [k.toLowerCase(), headers[MAP][k].join(', ')]
+ )
+
+const INTERNAL = Symbol('internal')
+
+class HeadersIterator {
+ constructor (target, kind) {
+ this[INTERNAL] = {
+ target,
+ kind,
+ index: 0,
+ }
+ }
+
+ get [Symbol.toStringTag] () {
+ return 'HeadersIterator'
+ }
+
+ next () {
+ /* istanbul ignore if: should be impossible */
+ if (!this || Object.getPrototypeOf(this) !== HeadersIterator.prototype) {
+ throw new TypeError('Value of `this` is not a HeadersIterator')
+ }
+
+ const { target, kind, index } = this[INTERNAL]
+ const values = getHeaders(target, kind)
+ const len = values.length
+ if (index >= len) {
+ return {
+ value: undefined,
+ done: true,
+ }
+ }
+
+ this[INTERNAL].index++
+
+ return { value: values[index], done: false }
+ }
+}
+
+// manually extend because 'extends' requires a ctor
+Object.setPrototypeOf(HeadersIterator.prototype,
+ Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())))
+
+module.exports = Headers
diff --git a/deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/lib/index.js b/deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/lib/index.js
new file mode 100644
index 00000000000..da402161670
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/lib/index.js
@@ -0,0 +1,377 @@
+'use strict'
+const { URL } = require('url')
+const http = require('http')
+const https = require('https')
+const zlib = require('minizlib')
+const { Minipass } = require('minipass')
+
+const Body = require('./body.js')
+const { writeToStream, getTotalBytes } = Body
+const Response = require('./response.js')
+const Headers = require('./headers.js')
+const { createHeadersLenient } = Headers
+const Request = require('./request.js')
+const { getNodeRequestOptions } = Request
+const FetchError = require('./fetch-error.js')
+const AbortError = require('./abort-error.js')
+
+// XXX this should really be split up and unit-ized for easier testing
+// and better DRY implementation of data/http request aborting
+const fetch = async (url, opts) => {
+ if (/^data:/.test(url)) {
+ const request = new Request(url, opts)
+ // delay 1 promise tick so that the consumer can abort right away
+ return Promise.resolve().then(() => new Promise((resolve, reject) => {
+ let type, data
+ try {
+ const { pathname, search } = new URL(url)
+ const split = pathname.split(',')
+ if (split.length < 2) {
+ throw new Error('invalid data: URI')
+ }
+ const mime = split.shift()
+ const base64 = /;base64$/.test(mime)
+ type = base64 ? mime.slice(0, -1 * ';base64'.length) : mime
+ const rawData = decodeURIComponent(split.join(',') + search)
+ data = base64 ? Buffer.from(rawData, 'base64') : Buffer.from(rawData)
+ } catch (er) {
+ return reject(new FetchError(`[${request.method}] ${
+ request.url} invalid URL, ${er.message}`, 'system', er))
+ }
+
+ const { signal } = request
+ if (signal && signal.aborted) {
+ return reject(new AbortError('The user aborted a request.'))
+ }
+
+ const headers = { 'Content-Length': data.length }
+ if (type) {
+ headers['Content-Type'] = type
+ }
+ return resolve(new Response(data, { headers }))
+ }))
+ }
+
+ return new Promise((resolve, reject) => {
+ // build request object
+ const request = new Request(url, opts)
+ let options
+ try {
+ options = getNodeRequestOptions(request)
+ } catch (er) {
+ return reject(er)
+ }
+
+ const send = (options.protocol === 'https:' ? https : http).request
+ const { signal } = request
+ let response = null
+ const abort = () => {
+ const error = new AbortError('The user aborted a request.')
+ reject(error)
+ if (Minipass.isStream(request.body) &&
+ typeof request.body.destroy === 'function') {
+ request.body.destroy(error)
+ }
+ if (response && response.body) {
+ response.body.emit('error', error)
+ }
+ }
+
+ if (signal && signal.aborted) {
+ return abort()
+ }
+
+ const abortAndFinalize = () => {
+ abort()
+ finalize()
+ }
+
+ const finalize = () => {
+ req.abort()
+ if (signal) {
+ signal.removeEventListener('abort', abortAndFinalize)
+ }
+ clearTimeout(reqTimeout)
+ }
+
+ // send request
+ const req = send(options)
+
+ if (signal) {
+ signal.addEventListener('abort', abortAndFinalize)
+ }
+
+ let reqTimeout = null
+ if (request.timeout) {
+ req.once('socket', () => {
+ reqTimeout = setTimeout(() => {
+ reject(new FetchError(`network timeout at: ${
+ request.url}`, 'request-timeout'))
+ finalize()
+ }, request.timeout)
+ })
+ }
+
+ req.on('error', er => {
+ // if a 'response' event is emitted before the 'error' event, then by the
+ // time this handler is run it's too late to reject the Promise for the
+ // response. instead, we forward the error event to the response stream
+ // so that the error will surface to the user when they try to consume
+ // the body. this is done as a side effect of aborting the request except
+ // for in windows, where we must forward the event manually, otherwise
+ // there is no longer a ref'd socket attached to the request and the
+ // stream never ends so the event loop runs out of work and the process
+ // exits without warning.
+ // coverage skipped here due to the difficulty in testing
+ // istanbul ignore next
+ if (req.res) {
+ req.res.emit('error', er)
+ }
+ reject(new FetchError(`request to ${request.url} failed, reason: ${
+ er.message}`, 'system', er))
+ finalize()
+ })
+
+ req.on('response', res => {
+ clearTimeout(reqTimeout)
+
+ const headers = createHeadersLenient(res.headers)
+
+ // HTTP fetch step 5
+ if (fetch.isRedirect(res.statusCode)) {
+ // HTTP fetch step 5.2
+ const location = headers.get('Location')
+
+ // HTTP fetch step 5.3
+ let locationURL = null
+ try {
+ locationURL = location === null ? null : new URL(location, request.url).toString()
+ } catch {
+ // error here can only be invalid URL in Location: header
+ // do not throw when options.redirect == manual
+ // let the user extract the errorneous redirect URL
+ if (request.redirect !== 'manual') {
+ /* eslint-disable-next-line max-len */
+ reject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect'))
+ finalize()
+ return
+ }
+ }
+
+ // HTTP fetch step 5.5
+ if (request.redirect === 'error') {
+ reject(new FetchError('uri requested responds with a redirect, ' +
+ `redirect mode is set to error: ${request.url}`, 'no-redirect'))
+ finalize()
+ return
+ } else if (request.redirect === 'manual') {
+ // node-fetch-specific step: make manual redirect a bit easier to
+ // use by setting the Location header value to the resolved URL.
+ if (locationURL !== null) {
+ // handle corrupted header
+ try {
+ headers.set('Location', locationURL)
+ } catch (err) {
+ /* istanbul ignore next: nodejs server prevent invalid
+ response headers, we can't test this through normal
+ request */
+ reject(err)
+ }
+ }
+ } else if (request.redirect === 'follow' && locationURL !== null) {
+ // HTTP-redirect fetch step 5
+ if (request.counter >= request.follow) {
+ reject(new FetchError(`maximum redirect reached at: ${
+ request.url}`, 'max-redirect'))
+ finalize()
+ return
+ }
+
+ // HTTP-redirect fetch step 9
+ if (res.statusCode !== 303 &&
+ request.body &&
+ getTotalBytes(request) === null) {
+ reject(new FetchError(
+ 'Cannot follow redirect with body being a readable stream',
+ 'unsupported-redirect'
+ ))
+ finalize()
+ return
+ }
+
+ // Update host due to redirection
+ request.headers.set('host', (new URL(locationURL)).host)
+
+ // HTTP-redirect fetch step 6 (counter increment)
+ // Create a new Request object.
+ const requestOpts = {
+ headers: new Headers(request.headers),
+ follow: request.follow,
+ counter: request.counter + 1,
+ agent: request.agent,
+ compress: request.compress,
+ method: request.method,
+ body: request.body,
+ signal: request.signal,
+ timeout: request.timeout,
+ }
+
+ // if the redirect is to a new hostname, strip the authorization and cookie headers
+ const parsedOriginal = new URL(request.url)
+ const parsedRedirect = new URL(locationURL)
+ if (parsedOriginal.hostname !== parsedRedirect.hostname) {
+ requestOpts.headers.delete('authorization')
+ requestOpts.headers.delete('cookie')
+ }
+
+ // HTTP-redirect fetch step 11
+ if (res.statusCode === 303 || (
+ (res.statusCode === 301 || res.statusCode === 302) &&
+ request.method === 'POST'
+ )) {
+ requestOpts.method = 'GET'
+ requestOpts.body = undefined
+ requestOpts.headers.delete('content-length')
+ }
+
+ // HTTP-redirect fetch step 15
+ resolve(fetch(new Request(locationURL, requestOpts)))
+ finalize()
+ return
+ }
+ } // end if(isRedirect)
+
+ // prepare response
+ res.once('end', () =>
+ signal && signal.removeEventListener('abort', abortAndFinalize))
+
+ const body = new Minipass()
+ // if an error occurs, either on the response stream itself, on one of the
+ // decoder streams, or a response length timeout from the Body class, we
+ // forward the error through to our internal body stream. If we see an
+ // error event on that, we call finalize to abort the request and ensure
+ // we don't leave a socket believing a request is in flight.
+ // this is difficult to test, so lacks specific coverage.
+ body.on('error', finalize)
+ // exceedingly rare that the stream would have an error,
+ // but just in case we proxy it to the stream in use.
+ res.on('error', /* istanbul ignore next */ er => body.emit('error', er))
+ res.on('data', (chunk) => body.write(chunk))
+ res.on('end', () => body.end())
+
+ const responseOptions = {
+ url: request.url,
+ status: res.statusCode,
+ statusText: res.statusMessage,
+ headers: headers,
+ size: request.size,
+ timeout: request.timeout,
+ counter: request.counter,
+ trailer: new Promise(resolveTrailer =>
+ res.on('end', () => resolveTrailer(createHeadersLenient(res.trailers)))),
+ }
+
+ // HTTP-network fetch step 12.1.1.3
+ const codings = headers.get('Content-Encoding')
+
+ // HTTP-network fetch step 12.1.1.4: handle content codings
+
+ // in following scenarios we ignore compression support
+ // 1. compression support is disabled
+ // 2. HEAD request
+ // 3. no Content-Encoding header
+ // 4. no content response (204)
+ // 5. content not modified response (304)
+ if (!request.compress ||
+ request.method === 'HEAD' ||
+ codings === null ||
+ res.statusCode === 204 ||
+ res.statusCode === 304) {
+ response = new Response(body, responseOptions)
+ resolve(response)
+ return
+ }
+
+ // Be less strict when decoding compressed responses, since sometimes
+ // servers send slightly invalid responses that are still accepted
+ // by common browsers.
+ // Always using Z_SYNC_FLUSH is what cURL does.
+ const zlibOptions = {
+ flush: zlib.constants.Z_SYNC_FLUSH,
+ finishFlush: zlib.constants.Z_SYNC_FLUSH,
+ }
+
+ // for gzip
+ if (codings === 'gzip' || codings === 'x-gzip') {
+ const unzip = new zlib.Gunzip(zlibOptions)
+ response = new Response(
+ // exceedingly rare that the stream would have an error,
+ // but just in case we proxy it to the stream in use.
+ body.on('error', /* istanbul ignore next */ er => unzip.emit('error', er)).pipe(unzip),
+ responseOptions
+ )
+ resolve(response)
+ return
+ }
+
+ // for deflate
+ if (codings === 'deflate' || codings === 'x-deflate') {
+ // handle the infamous raw deflate response from old servers
+ // a hack for old IIS and Apache servers
+ const raw = res.pipe(new Minipass())
+ raw.once('data', chunk => {
+ // see http://stackoverflow.com/questions/37519828
+ const decoder = (chunk[0] & 0x0F) === 0x08
+ ? new zlib.Inflate()
+ : new zlib.InflateRaw()
+ // exceedingly rare that the stream would have an error,
+ // but just in case we proxy it to the stream in use.
+ body.on('error', /* istanbul ignore next */ er => decoder.emit('error', er)).pipe(decoder)
+ response = new Response(decoder, responseOptions)
+ resolve(response)
+ })
+ return
+ }
+
+ // for br
+ if (codings === 'br') {
+ // ignoring coverage so tests don't have to fake support (or lack of) for brotli
+ // istanbul ignore next
+ try {
+ var decoder = new zlib.BrotliDecompress()
+ } catch (err) {
+ reject(err)
+ finalize()
+ return
+ }
+ // exceedingly rare that the stream would have an error,
+ // but just in case we proxy it to the stream in use.
+ body.on('error', /* istanbul ignore next */ er => decoder.emit('error', er)).pipe(decoder)
+ response = new Response(decoder, responseOptions)
+ resolve(response)
+ return
+ }
+
+ // otherwise, use response as-is
+ response = new Response(body, responseOptions)
+ resolve(response)
+ })
+
+ writeToStream(req, request)
+ })
+}
+
+module.exports = fetch
+
+fetch.isRedirect = code =>
+ code === 301 ||
+ code === 302 ||
+ code === 303 ||
+ code === 307 ||
+ code === 308
+
+fetch.Headers = Headers
+fetch.Request = Request
+fetch.Response = Response
+fetch.FetchError = FetchError
+fetch.AbortError = AbortError
diff --git a/deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/lib/request.js b/deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/lib/request.js
new file mode 100644
index 00000000000..054439e6699
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/lib/request.js
@@ -0,0 +1,282 @@
+'use strict'
+const { URL } = require('url')
+const { Minipass } = require('minipass')
+const Headers = require('./headers.js')
+const { exportNodeCompatibleHeaders } = Headers
+const Body = require('./body.js')
+const { clone, extractContentType, getTotalBytes } = Body
+
+const version = require('../package.json').version
+const defaultUserAgent =
+ `minipass-fetch/${version} (+https://github.com/isaacs/minipass-fetch)`
+
+const INTERNALS = Symbol('Request internals')
+
+const isRequest = input =>
+ typeof input === 'object' && typeof input[INTERNALS] === 'object'
+
+const isAbortSignal = signal => {
+ const proto = (
+ signal
+ && typeof signal === 'object'
+ && Object.getPrototypeOf(signal)
+ )
+ return !!(proto && proto.constructor.name === 'AbortSignal')
+}
+
+class Request extends Body {
+ constructor (input, init = {}) {
+ const parsedURL = isRequest(input) ? new URL(input.url)
+ : input && input.href ? new URL(input.href)
+ : new URL(`${input}`)
+
+ if (isRequest(input)) {
+ init = { ...input[INTERNALS], ...init }
+ } else if (!input || typeof input === 'string') {
+ input = {}
+ }
+
+ const method = (init.method || input.method || 'GET').toUpperCase()
+ const isGETHEAD = method === 'GET' || method === 'HEAD'
+
+ if ((init.body !== null && init.body !== undefined ||
+ isRequest(input) && input.body !== null) && isGETHEAD) {
+ throw new TypeError('Request with GET/HEAD method cannot have body')
+ }
+
+ const inputBody = init.body !== null && init.body !== undefined ? init.body
+ : isRequest(input) && input.body !== null ? clone(input)
+ : null
+
+ super(inputBody, {
+ timeout: init.timeout || input.timeout || 0,
+ size: init.size || input.size || 0,
+ })
+
+ const headers = new Headers(init.headers || input.headers || {})
+
+ if (inputBody !== null && inputBody !== undefined &&
+ !headers.has('Content-Type')) {
+ const contentType = extractContentType(inputBody)
+ if (contentType) {
+ headers.append('Content-Type', contentType)
+ }
+ }
+
+ const signal = 'signal' in init ? init.signal
+ : null
+
+ if (signal !== null && signal !== undefined && !isAbortSignal(signal)) {
+ throw new TypeError('Expected signal must be an instanceof AbortSignal')
+ }
+
+ // TLS specific options that are handled by node
+ const {
+ ca,
+ cert,
+ ciphers,
+ clientCertEngine,
+ crl,
+ dhparam,
+ ecdhCurve,
+ family,
+ honorCipherOrder,
+ key,
+ passphrase,
+ pfx,
+ rejectUnauthorized = process.env.NODE_TLS_REJECT_UNAUTHORIZED !== '0',
+ secureOptions,
+ secureProtocol,
+ servername,
+ sessionIdContext,
+ } = init
+
+ this[INTERNALS] = {
+ method,
+ redirect: init.redirect || input.redirect || 'follow',
+ headers,
+ parsedURL,
+ signal,
+ ca,
+ cert,
+ ciphers,
+ clientCertEngine,
+ crl,
+ dhparam,
+ ecdhCurve,
+ family,
+ honorCipherOrder,
+ key,
+ passphrase,
+ pfx,
+ rejectUnauthorized,
+ secureOptions,
+ secureProtocol,
+ servername,
+ sessionIdContext,
+ }
+
+ // node-fetch-only options
+ this.follow = init.follow !== undefined ? init.follow
+ : input.follow !== undefined ? input.follow
+ : 20
+ this.compress = init.compress !== undefined ? init.compress
+ : input.compress !== undefined ? input.compress
+ : true
+ this.counter = init.counter || input.counter || 0
+ this.agent = init.agent || input.agent
+ }
+
+ get method () {
+ return this[INTERNALS].method
+ }
+
+ get url () {
+ return this[INTERNALS].parsedURL.toString()
+ }
+
+ get headers () {
+ return this[INTERNALS].headers
+ }
+
+ get redirect () {
+ return this[INTERNALS].redirect
+ }
+
+ get signal () {
+ return this[INTERNALS].signal
+ }
+
+ clone () {
+ return new Request(this)
+ }
+
+ get [Symbol.toStringTag] () {
+ return 'Request'
+ }
+
+ static getNodeRequestOptions (request) {
+ const parsedURL = request[INTERNALS].parsedURL
+ const headers = new Headers(request[INTERNALS].headers)
+
+ // fetch step 1.3
+ if (!headers.has('Accept')) {
+ headers.set('Accept', '*/*')
+ }
+
+ // Basic fetch
+ if (!/^https?:$/.test(parsedURL.protocol)) {
+ throw new TypeError('Only HTTP(S) protocols are supported')
+ }
+
+ if (request.signal &&
+ Minipass.isStream(request.body) &&
+ typeof request.body.destroy !== 'function') {
+ throw new Error(
+ 'Cancellation of streamed requests with AbortSignal is not supported')
+ }
+
+ // HTTP-network-or-cache fetch steps 2.4-2.7
+ const contentLengthValue =
+ (request.body === null || request.body === undefined) &&
+ /^(POST|PUT)$/i.test(request.method) ? '0'
+ : request.body !== null && request.body !== undefined
+ ? getTotalBytes(request)
+ : null
+
+ if (contentLengthValue) {
+ headers.set('Content-Length', contentLengthValue + '')
+ }
+
+ // HTTP-network-or-cache fetch step 2.11
+ if (!headers.has('User-Agent')) {
+ headers.set('User-Agent', defaultUserAgent)
+ }
+
+ // HTTP-network-or-cache fetch step 2.15
+ if (request.compress && !headers.has('Accept-Encoding')) {
+ headers.set('Accept-Encoding', 'gzip,deflate')
+ }
+
+ const agent = typeof request.agent === 'function'
+ ? request.agent(parsedURL)
+ : request.agent
+
+ if (!headers.has('Connection') && !agent) {
+ headers.set('Connection', 'close')
+ }
+
+ // TLS specific options that are handled by node
+ const {
+ ca,
+ cert,
+ ciphers,
+ clientCertEngine,
+ crl,
+ dhparam,
+ ecdhCurve,
+ family,
+ honorCipherOrder,
+ key,
+ passphrase,
+ pfx,
+ rejectUnauthorized,
+ secureOptions,
+ secureProtocol,
+ servername,
+ sessionIdContext,
+ } = request[INTERNALS]
+
+ // HTTP-network fetch step 4.2
+ // chunked encoding is handled by Node.js
+
+ // we cannot spread parsedURL directly, so we have to read each property one-by-one
+ // and map them to the equivalent https?.request() method options
+ const urlProps = {
+ auth: parsedURL.username || parsedURL.password
+ ? `${parsedURL.username}:${parsedURL.password}`
+ : '',
+ host: parsedURL.host,
+ hostname: parsedURL.hostname,
+ path: `${parsedURL.pathname}${parsedURL.search}`,
+ port: parsedURL.port,
+ protocol: parsedURL.protocol,
+ }
+
+ return {
+ ...urlProps,
+ method: request.method,
+ headers: exportNodeCompatibleHeaders(headers),
+ agent,
+ ca,
+ cert,
+ ciphers,
+ clientCertEngine,
+ crl,
+ dhparam,
+ ecdhCurve,
+ family,
+ honorCipherOrder,
+ key,
+ passphrase,
+ pfx,
+ rejectUnauthorized,
+ secureOptions,
+ secureProtocol,
+ servername,
+ sessionIdContext,
+ timeout: request.timeout,
+ }
+ }
+}
+
+module.exports = Request
+
+Object.defineProperties(Request.prototype, {
+ method: { enumerable: true },
+ url: { enumerable: true },
+ headers: { enumerable: true },
+ redirect: { enumerable: true },
+ clone: { enumerable: true },
+ signal: { enumerable: true },
+})
diff --git a/deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/lib/response.js b/deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/lib/response.js
new file mode 100644
index 00000000000..54cb52db359
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/lib/response.js
@@ -0,0 +1,90 @@
+'use strict'
+const http = require('http')
+const { STATUS_CODES } = http
+
+const Headers = require('./headers.js')
+const Body = require('./body.js')
+const { clone, extractContentType } = Body
+
+const INTERNALS = Symbol('Response internals')
+
+class Response extends Body {
+ constructor (body = null, opts = {}) {
+ super(body, opts)
+
+ const status = opts.status || 200
+ const headers = new Headers(opts.headers)
+
+ if (body !== null && body !== undefined && !headers.has('Content-Type')) {
+ const contentType = extractContentType(body)
+ if (contentType) {
+ headers.append('Content-Type', contentType)
+ }
+ }
+
+ this[INTERNALS] = {
+ url: opts.url,
+ status,
+ statusText: opts.statusText || STATUS_CODES[status],
+ headers,
+ counter: opts.counter,
+ trailer: Promise.resolve(opts.trailer || new Headers()),
+ }
+ }
+
+ get trailer () {
+ return this[INTERNALS].trailer
+ }
+
+ get url () {
+ return this[INTERNALS].url || ''
+ }
+
+ get status () {
+ return this[INTERNALS].status
+ }
+
+ get ok () {
+ return this[INTERNALS].status >= 200 && this[INTERNALS].status < 300
+ }
+
+ get redirected () {
+ return this[INTERNALS].counter > 0
+ }
+
+ get statusText () {
+ return this[INTERNALS].statusText
+ }
+
+ get headers () {
+ return this[INTERNALS].headers
+ }
+
+ clone () {
+ return new Response(clone(this), {
+ url: this.url,
+ status: this.status,
+ statusText: this.statusText,
+ headers: this.headers,
+ ok: this.ok,
+ redirected: this.redirected,
+ trailer: this.trailer,
+ })
+ }
+
+ get [Symbol.toStringTag] () {
+ return 'Response'
+ }
+}
+
+module.exports = Response
+
+Object.defineProperties(Response.prototype, {
+ url: { enumerable: true },
+ status: { enumerable: true },
+ ok: { enumerable: true },
+ redirected: { enumerable: true },
+ statusText: { enumerable: true },
+ headers: { enumerable: true },
+ clone: { enumerable: true },
+})
diff --git a/deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/package.json b/deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/package.json
new file mode 100644
index 00000000000..d491a7fba12
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/minipass-fetch/package.json
@@ -0,0 +1,69 @@
+{
+ "name": "minipass-fetch",
+ "version": "3.0.5",
+ "description": "An implementation of window.fetch in Node.js using Minipass streams",
+ "license": "MIT",
+ "main": "lib/index.js",
+ "scripts": {
+ "test:tls-fixtures": "./test/fixtures/tls/setup.sh",
+ "test": "tap",
+ "snap": "tap",
+ "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "postlint": "template-oss-check",
+ "lintfix": "npm run lint -- --fix",
+ "posttest": "npm run lint",
+ "template-oss-apply": "template-oss-apply --force"
+ },
+ "tap": {
+ "coverage-map": "map.js",
+ "check-coverage": true,
+ "nyc-arg": [
+ "--exclude",
+ "tap-snapshots/**"
+ ]
+ },
+ "devDependencies": {
+ "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/template-oss": "4.22.0",
+ "@ungap/url-search-params": "^0.2.2",
+ "abort-controller": "^3.0.0",
+ "abortcontroller-polyfill": "~1.7.3",
+ "encoding": "^0.1.13",
+ "form-data": "^4.0.0",
+ "nock": "^13.2.4",
+ "parted": "^0.1.1",
+ "string-to-arraybuffer": "^1.0.2",
+ "tap": "^16.0.0"
+ },
+ "dependencies": {
+ "minipass": "^7.0.3",
+ "minipass-sized": "^1.0.3",
+ "minizlib": "^2.1.2"
+ },
+ "optionalDependencies": {
+ "encoding": "^0.1.13"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/npm/minipass-fetch.git"
+ },
+ "keywords": [
+ "fetch",
+ "minipass",
+ "node-fetch",
+ "window.fetch"
+ ],
+ "files": [
+ "bin/",
+ "lib/"
+ ],
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ },
+ "author": "GitHub Inc.",
+ "templateOSS": {
+ "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
+ "version": "4.22.0",
+ "publish": "true"
+ }
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/nopt/LICENSE b/deps/npm/node_modules/node-gyp/node_modules/nopt/LICENSE
new file mode 100644
index 00000000000..19129e315fe
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/nopt/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/node-gyp/node_modules/nopt/README.md b/deps/npm/node_modules/node-gyp/node_modules/nopt/README.md
new file mode 100644
index 00000000000..a99531c0465
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/nopt/README.md
@@ -0,0 +1,213 @@
+If you want to write an option parser, and have it be good, there are
+two ways to do it. The Right Way, and the Wrong Way.
+
+The Wrong Way is to sit down and write an option parser. We've all done
+that.
+
+The Right Way is to write some complex configurable program with so many
+options that you hit the limit of your frustration just trying to
+manage them all, and defer it with duct-tape solutions until you see
+exactly to the core of the problem, and finally snap and write an
+awesome option parser.
+
+If you want to write an option parser, don't write an option parser.
+Write a package manager, or a source control system, or a service
+restarter, or an operating system. You probably won't end up with a
+good one of those, but if you don't give up, and you are relentless and
+diligent enough in your procrastination, you may just end up with a very
+nice option parser.
+
+## USAGE
+
+```javascript
+// my-program.js
+var nopt = require("nopt")
+ , Stream = require("stream").Stream
+ , path = require("path")
+ , knownOpts = { "foo" : [String, null]
+ , "bar" : [Stream, Number]
+ , "baz" : path
+ , "bloo" : [ "big", "medium", "small" ]
+ , "flag" : Boolean
+ , "pick" : Boolean
+ , "many1" : [String, Array]
+ , "many2" : [path, Array]
+ }
+ , shortHands = { "foofoo" : ["--foo", "Mr. Foo"]
+ , "b7" : ["--bar", "7"]
+ , "m" : ["--bloo", "medium"]
+ , "p" : ["--pick"]
+ , "f" : ["--flag"]
+ }
+ // everything is optional.
+ // knownOpts and shorthands default to {}
+ // arg list defaults to process.argv
+ // slice defaults to 2
+ , parsed = nopt(knownOpts, shortHands, process.argv, 2)
+console.log(parsed)
+```
+
+This would give you support for any of the following:
+
+```console
+$ node my-program.js --foo "blerp" --no-flag
+{ "foo" : "blerp", "flag" : false }
+
+$ node my-program.js ---bar 7 --foo "Mr. Hand" --flag
+{ bar: 7, foo: "Mr. Hand", flag: true }
+
+$ node my-program.js --foo "blerp" -f -----p
+{ foo: "blerp", flag: true, pick: true }
+
+$ node my-program.js -fp --foofoo
+{ foo: "Mr. Foo", flag: true, pick: true }
+
+$ node my-program.js --foofoo -- -fp # -- stops the flag parsing.
+{ foo: "Mr. Foo", argv: { remain: ["-fp"] } }
+
+$ node my-program.js --blatzk -fp # unknown opts are ok.
+{ blatzk: true, flag: true, pick: true }
+
+$ node my-program.js --blatzk=1000 -fp # but you need to use = if they have a value
+{ blatzk: 1000, flag: true, pick: true }
+
+$ node my-program.js --no-blatzk -fp # unless they start with "no-"
+{ blatzk: false, flag: true, pick: true }
+
+$ node my-program.js --baz b/a/z # known paths are resolved.
+{ baz: "/Users/isaacs/b/a/z" }
+
+# if Array is one of the types, then it can take many
+# values, and will always be an array. The other types provided
+# specify what types are allowed in the list.
+
+$ node my-program.js --many1 5 --many1 null --many1 foo
+{ many1: ["5", "null", "foo"] }
+
+$ node my-program.js --many2 foo --many2 bar
+{ many2: ["/path/to/foo", "path/to/bar"] }
+```
+
+Read the tests at the bottom of `lib/nopt.js` for more examples of
+what this puppy can do.
+
+## Types
+
+The following types are supported, and defined on `nopt.typeDefs`
+
+* String: A normal string. No parsing is done.
+* path: A file system path. Gets resolved against cwd if not absolute.
+* url: A url. If it doesn't parse, it isn't accepted.
+* Number: Must be numeric.
+* Date: Must parse as a date. If it does, and `Date` is one of the options,
+ then it will return a Date object, not a string.
+* Boolean: Must be either `true` or `false`. If an option is a boolean,
+ then it does not need a value, and its presence will imply `true` as
+ the value. To negate boolean flags, do `--no-whatever` or `--whatever
+ false`
+* NaN: Means that the option is strictly not allowed. Any value will
+ fail.
+* Stream: An object matching the "Stream" class in node. Valuable
+ for use when validating programmatically. (npm uses this to let you
+ supply any WriteStream on the `outfd` and `logfd` config options.)
+* Array: If `Array` is specified as one of the types, then the value
+ will be parsed as a list of options. This means that multiple values
+ can be specified, and that the value will always be an array.
+
+If a type is an array of values not on this list, then those are
+considered valid values. For instance, in the example above, the
+`--bloo` option can only be one of `"big"`, `"medium"`, or `"small"`,
+and any other value will be rejected.
+
+When parsing unknown fields, `"true"`, `"false"`, and `"null"` will be
+interpreted as their JavaScript equivalents.
+
+You can also mix types and values, or multiple types, in a list. For
+instance `{ blah: [Number, null] }` would allow a value to be set to
+either a Number or null. When types are ordered, this implies a
+preference, and the first type that can be used to properly interpret
+the value will be used.
+
+To define a new type, add it to `nopt.typeDefs`. Each item in that
+hash is an object with a `type` member and a `validate` method. The
+`type` member is an object that matches what goes in the type list. The
+`validate` method is a function that gets called with `validate(data,
+key, val)`. Validate methods should assign `data[key]` to the valid
+value of `val` if it can be handled properly, or return boolean
+`false` if it cannot.
+
+You can also call `nopt.clean(data, types, typeDefs)` to clean up a
+config object and remove its invalid properties.
+
+## Error Handling
+
+By default, nopt outputs a warning to standard error when invalid values for
+known options are found. You can change this behavior by assigning a method
+to `nopt.invalidHandler`. This method will be called with
+the offending `nopt.invalidHandler(key, val, types)`.
+
+If no `nopt.invalidHandler` is assigned, then it will console.error
+its whining. If it is assigned to boolean `false` then the warning is
+suppressed.
+
+## Abbreviations
+
+Yes, they are supported. If you define options like this:
+
+```javascript
+{ "foolhardyelephants" : Boolean
+, "pileofmonkeys" : Boolean }
+```
+
+Then this will work:
+
+```bash
+node program.js --foolhar --pil
+node program.js --no-f --pileofmon
+# etc.
+```
+
+## Shorthands
+
+Shorthands are a hash of shorter option names to a snippet of args that
+they expand to.
+
+If multiple one-character shorthands are all combined, and the
+combination does not unambiguously match any other option or shorthand,
+then they will be broken up into their constituent parts. For example:
+
+```json
+{ "s" : ["--loglevel", "silent"]
+, "g" : "--global"
+, "f" : "--force"
+, "p" : "--parseable"
+, "l" : "--long"
+}
+```
+
+```bash
+npm ls -sgflp
+# just like doing this:
+npm ls --loglevel silent --global --force --long --parseable
+```
+
+## The Rest of the args
+
+The config object returned by nopt is given a special member called
+`argv`, which is an object with the following fields:
+
+* `remain`: The remaining args after all the parsing has occurred.
+* `original`: The args as they originally appeared.
+* `cooked`: The args after flags and shorthands are expanded.
+
+## Slicing
+
+Node programs are called with more or less the exact argv as it appears
+in C land, after the v8 and node-specific options have been plucked off.
+As such, `argv[0]` is always `node` and `argv[1]` is always the
+JavaScript program being run.
+
+That's usually not very useful to you. So they're sliced off by
+default. If you want them, then you can pass in `0` as the last
+argument, or any other number that you'd like to slice off the start of
+the list.
diff --git a/deps/npm/node_modules/node-gyp/node_modules/nopt/bin/nopt.js b/deps/npm/node_modules/node-gyp/node_modules/nopt/bin/nopt.js
new file mode 100755
index 00000000000..6ed2082064b
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/nopt/bin/nopt.js
@@ -0,0 +1,29 @@
+#!/usr/bin/env node
+const nopt = require('../lib/nopt')
+const path = require('path')
+console.log('parsed', nopt({
+ num: Number,
+ bool: Boolean,
+ help: Boolean,
+ list: Array,
+ 'num-list': [Number, Array],
+ 'str-list': [String, Array],
+ 'bool-list': [Boolean, Array],
+ str: String,
+ clear: Boolean,
+ config: Boolean,
+ length: Number,
+ file: path,
+}, {
+ s: ['--str', 'astring'],
+ b: ['--bool'],
+ nb: ['--no-bool'],
+ tft: ['--bool-list', '--no-bool-list', '--bool-list', 'true'],
+ '?': ['--help'],
+ h: ['--help'],
+ H: ['--help'],
+ n: ['--num', '125'],
+ c: ['--config'],
+ l: ['--length'],
+ f: ['--file'],
+}, process.argv, 2))
diff --git a/deps/npm/node_modules/node-gyp/node_modules/nopt/lib/debug.js b/deps/npm/node_modules/node-gyp/node_modules/nopt/lib/debug.js
new file mode 100644
index 00000000000..544ab382ca8
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/nopt/lib/debug.js
@@ -0,0 +1,5 @@
+/* istanbul ignore next */
+module.exports = process.env.DEBUG_NOPT || process.env.NOPT_DEBUG
+ // eslint-disable-next-line no-console
+ ? (...a) => console.error(...a)
+ : () => {}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/nopt/lib/nopt-lib.js b/deps/npm/node_modules/node-gyp/node_modules/nopt/lib/nopt-lib.js
new file mode 100644
index 00000000000..d3d1de0255b
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/nopt/lib/nopt-lib.js
@@ -0,0 +1,479 @@
+const abbrev = require('abbrev')
+const debug = require('./debug')
+const defaultTypeDefs = require('./type-defs')
+
+const hasOwn = (o, k) => Object.prototype.hasOwnProperty.call(o, k)
+
+const getType = (k, { types, dynamicTypes }) => {
+ let hasType = hasOwn(types, k)
+ let type = types[k]
+ if (!hasType && typeof dynamicTypes === 'function') {
+ const matchedType = dynamicTypes(k)
+ if (matchedType !== undefined) {
+ type = matchedType
+ hasType = true
+ }
+ }
+ return [hasType, type]
+}
+
+const isTypeDef = (type, def) => def && type === def
+const hasTypeDef = (type, def) => def && type.indexOf(def) !== -1
+const doesNotHaveTypeDef = (type, def) => def && !hasTypeDef(type, def)
+
+function nopt (args, {
+ types,
+ shorthands,
+ typeDefs,
+ invalidHandler,
+ typeDefault,
+ dynamicTypes,
+} = {}) {
+ debug(types, shorthands, args, typeDefs)
+
+ const data = {}
+ const argv = {
+ remain: [],
+ cooked: args,
+ original: args.slice(0),
+ }
+
+ parse(args, data, argv.remain, { typeDefs, types, dynamicTypes, shorthands })
+
+ // now data is full
+ clean(data, { types, dynamicTypes, typeDefs, invalidHandler, typeDefault })
+ data.argv = argv
+
+ Object.defineProperty(data.argv, 'toString', {
+ value: function () {
+ return this.original.map(JSON.stringify).join(' ')
+ },
+ enumerable: false,
+ })
+
+ return data
+}
+
+function clean (data, {
+ types = {},
+ typeDefs = {},
+ dynamicTypes,
+ invalidHandler,
+ typeDefault,
+} = {}) {
+ const StringType = typeDefs.String?.type
+ const NumberType = typeDefs.Number?.type
+ const ArrayType = typeDefs.Array?.type
+ const BooleanType = typeDefs.Boolean?.type
+ const DateType = typeDefs.Date?.type
+
+ const hasTypeDefault = typeof typeDefault !== 'undefined'
+ if (!hasTypeDefault) {
+ typeDefault = [false, true, null]
+ if (StringType) {
+ typeDefault.push(StringType)
+ }
+ if (ArrayType) {
+ typeDefault.push(ArrayType)
+ }
+ }
+
+ const remove = {}
+
+ Object.keys(data).forEach((k) => {
+ if (k === 'argv') {
+ return
+ }
+ let val = data[k]
+ debug('val=%j', val)
+ const isArray = Array.isArray(val)
+ let [hasType, rawType] = getType(k, { types, dynamicTypes })
+ let type = rawType
+ if (!isArray) {
+ val = [val]
+ }
+ if (!type) {
+ type = typeDefault
+ }
+ if (isTypeDef(type, ArrayType)) {
+ type = typeDefault.concat(ArrayType)
+ }
+ if (!Array.isArray(type)) {
+ type = [type]
+ }
+
+ debug('val=%j', val)
+ debug('types=', type)
+ val = val.map((v) => {
+ // if it's an unknown value, then parse false/true/null/numbers/dates
+ if (typeof v === 'string') {
+ debug('string %j', v)
+ v = v.trim()
+ if ((v === 'null' && ~type.indexOf(null))
+ || (v === 'true' &&
+ (~type.indexOf(true) || hasTypeDef(type, BooleanType)))
+ || (v === 'false' &&
+ (~type.indexOf(false) || hasTypeDef(type, BooleanType)))) {
+ v = JSON.parse(v)
+ debug('jsonable %j', v)
+ } else if (hasTypeDef(type, NumberType) && !isNaN(v)) {
+ debug('convert to number', v)
+ v = +v
+ } else if (hasTypeDef(type, DateType) && !isNaN(Date.parse(v))) {
+ debug('convert to date', v)
+ v = new Date(v)
+ }
+ }
+
+ if (!hasType) {
+ if (!hasTypeDefault) {
+ return v
+ }
+ // if the default type has been passed in then we want to validate the
+ // unknown data key instead of bailing out earlier. we also set the raw
+ // type which is passed to the invalid handler so that it can be
+ // determined if during validation if it is unknown vs invalid
+ rawType = typeDefault
+ }
+
+ // allow `--no-blah` to set 'blah' to null if null is allowed
+ if (v === false && ~type.indexOf(null) &&
+ !(~type.indexOf(false) || hasTypeDef(type, BooleanType))) {
+ v = null
+ }
+
+ const d = {}
+ d[k] = v
+ debug('prevalidated val', d, v, rawType)
+ if (!validate(d, k, v, rawType, { typeDefs })) {
+ if (invalidHandler) {
+ invalidHandler(k, v, rawType, data)
+ } else if (invalidHandler !== false) {
+ debug('invalid: ' + k + '=' + v, rawType)
+ }
+ return remove
+ }
+ debug('validated v', d, v, rawType)
+ return d[k]
+ }).filter((v) => v !== remove)
+
+ // if we allow Array specifically, then an empty array is how we
+ // express 'no value here', not null. Allow it.
+ if (!val.length && doesNotHaveTypeDef(type, ArrayType)) {
+ debug('VAL HAS NO LENGTH, DELETE IT', val, k, type.indexOf(ArrayType))
+ delete data[k]
+ } else if (isArray) {
+ debug(isArray, data[k], val)
+ data[k] = val
+ } else {
+ data[k] = val[0]
+ }
+
+ debug('k=%s val=%j', k, val, data[k])
+ })
+}
+
+function validate (data, k, val, type, { typeDefs } = {}) {
+ const ArrayType = typeDefs?.Array?.type
+ // arrays are lists of types.
+ if (Array.isArray(type)) {
+ for (let i = 0, l = type.length; i < l; i++) {
+ if (isTypeDef(type[i], ArrayType)) {
+ continue
+ }
+ if (validate(data, k, val, type[i], { typeDefs })) {
+ return true
+ }
+ }
+ delete data[k]
+ return false
+ }
+
+ // an array of anything?
+ if (isTypeDef(type, ArrayType)) {
+ return true
+ }
+
+ // Original comment:
+ // NaN is poisonous. Means that something is not allowed.
+ // New comment: Changing this to an isNaN check breaks a lot of tests.
+ // Something is being assumed here that is not actually what happens in
+ // practice. Fixing it is outside the scope of getting linting to pass in
+ // this repo. Leaving as-is for now.
+ /* eslint-disable-next-line no-self-compare */
+ if (type !== type) {
+ debug('Poison NaN', k, val, type)
+ delete data[k]
+ return false
+ }
+
+ // explicit list of values
+ if (val === type) {
+ debug('Explicitly allowed %j', val)
+ data[k] = val
+ return true
+ }
+
+ // now go through the list of typeDefs, validate against each one.
+ let ok = false
+ const types = Object.keys(typeDefs)
+ for (let i = 0, l = types.length; i < l; i++) {
+ debug('test type %j %j %j', k, val, types[i])
+ const t = typeDefs[types[i]]
+ if (t && (
+ (type && type.name && t.type && t.type.name) ?
+ (type.name === t.type.name) :
+ (type === t.type)
+ )) {
+ const d = {}
+ ok = t.validate(d, k, val) !== false
+ val = d[k]
+ if (ok) {
+ data[k] = val
+ break
+ }
+ }
+ }
+ debug('OK? %j (%j %j %j)', ok, k, val, types[types.length - 1])
+
+ if (!ok) {
+ delete data[k]
+ }
+ return ok
+}
+
+function parse (args, data, remain, {
+ types = {},
+ typeDefs = {},
+ shorthands = {},
+ dynamicTypes,
+} = {}) {
+ const StringType = typeDefs.String?.type
+ const NumberType = typeDefs.Number?.type
+ const ArrayType = typeDefs.Array?.type
+ const BooleanType = typeDefs.Boolean?.type
+
+ debug('parse', args, data, remain)
+
+ const abbrevs = abbrev(Object.keys(types))
+ debug('abbrevs=%j', abbrevs)
+ const shortAbbr = abbrev(Object.keys(shorthands))
+
+ for (let i = 0; i < args.length; i++) {
+ let arg = args[i]
+ debug('arg', arg)
+
+ if (arg.match(/^-{2,}$/)) {
+ // done with keys.
+ // the rest are args.
+ remain.push.apply(remain, args.slice(i + 1))
+ args[i] = '--'
+ break
+ }
+ let hadEq = false
+ if (arg.charAt(0) === '-' && arg.length > 1) {
+ const at = arg.indexOf('=')
+ if (at > -1) {
+ hadEq = true
+ const v = arg.slice(at + 1)
+ arg = arg.slice(0, at)
+ args.splice(i, 1, arg, v)
+ }
+
+ // see if it's a shorthand
+ // if so, splice and back up to re-parse it.
+ const shRes = resolveShort(arg, shortAbbr, abbrevs, { shorthands })
+ debug('arg=%j shRes=%j', arg, shRes)
+ if (shRes) {
+ args.splice.apply(args, [i, 1].concat(shRes))
+ if (arg !== shRes[0]) {
+ i--
+ continue
+ }
+ }
+ arg = arg.replace(/^-+/, '')
+ let no = null
+ while (arg.toLowerCase().indexOf('no-') === 0) {
+ no = !no
+ arg = arg.slice(3)
+ }
+
+ if (abbrevs[arg]) {
+ arg = abbrevs[arg]
+ }
+
+ let [hasType, argType] = getType(arg, { types, dynamicTypes })
+ let isTypeArray = Array.isArray(argType)
+ if (isTypeArray && argType.length === 1) {
+ isTypeArray = false
+ argType = argType[0]
+ }
+
+ let isArray = isTypeDef(argType, ArrayType) ||
+ isTypeArray && hasTypeDef(argType, ArrayType)
+
+ // allow unknown things to be arrays if specified multiple times.
+ if (!hasType && hasOwn(data, arg)) {
+ if (!Array.isArray(data[arg])) {
+ data[arg] = [data[arg]]
+ }
+ isArray = true
+ }
+
+ let val
+ let la = args[i + 1]
+
+ const isBool = typeof no === 'boolean' ||
+ isTypeDef(argType, BooleanType) ||
+ isTypeArray && hasTypeDef(argType, BooleanType) ||
+ (typeof argType === 'undefined' && !hadEq) ||
+ (la === 'false' &&
+ (argType === null ||
+ isTypeArray && ~argType.indexOf(null)))
+
+ if (isBool) {
+ // just set and move along
+ val = !no
+ // however, also support --bool true or --bool false
+ if (la === 'true' || la === 'false') {
+ val = JSON.parse(la)
+ la = null
+ if (no) {
+ val = !val
+ }
+ i++
+ }
+
+ // also support "foo":[Boolean, "bar"] and "--foo bar"
+ if (isTypeArray && la) {
+ if (~argType.indexOf(la)) {
+ // an explicit type
+ val = la
+ i++
+ } else if (la === 'null' && ~argType.indexOf(null)) {
+ // null allowed
+ val = null
+ i++
+ } else if (!la.match(/^-{2,}[^-]/) &&
+ !isNaN(la) &&
+ hasTypeDef(argType, NumberType)) {
+ // number
+ val = +la
+ i++
+ } else if (!la.match(/^-[^-]/) && hasTypeDef(argType, StringType)) {
+ // string
+ val = la
+ i++
+ }
+ }
+
+ if (isArray) {
+ (data[arg] = data[arg] || []).push(val)
+ } else {
+ data[arg] = val
+ }
+
+ continue
+ }
+
+ if (isTypeDef(argType, StringType)) {
+ if (la === undefined) {
+ la = ''
+ } else if (la.match(/^-{1,2}[^-]+/)) {
+ la = ''
+ i--
+ }
+ }
+
+ if (la && la.match(/^-{2,}$/)) {
+ la = undefined
+ i--
+ }
+
+ val = la === undefined ? true : la
+ if (isArray) {
+ (data[arg] = data[arg] || []).push(val)
+ } else {
+ data[arg] = val
+ }
+
+ i++
+ continue
+ }
+ remain.push(arg)
+ }
+}
+
+const SINGLES = Symbol('singles')
+const singleCharacters = (arg, shorthands) => {
+ let singles = shorthands[SINGLES]
+ if (!singles) {
+ singles = Object.keys(shorthands).filter((s) => s.length === 1).reduce((l, r) => {
+ l[r] = true
+ return l
+ }, {})
+ shorthands[SINGLES] = singles
+ debug('shorthand singles', singles)
+ }
+ const chrs = arg.split('').filter((c) => singles[c])
+ return chrs.join('') === arg ? chrs : null
+}
+
+function resolveShort (arg, ...rest) {
+ const { types = {}, shorthands = {} } = rest.length ? rest.pop() : {}
+ const shortAbbr = rest[0] ?? abbrev(Object.keys(shorthands))
+ const abbrevs = rest[1] ?? abbrev(Object.keys(types))
+
+ // handle single-char shorthands glommed together, like
+ // npm ls -glp, but only if there is one dash, and only if
+ // all of the chars are single-char shorthands, and it's
+ // not a match to some other abbrev.
+ arg = arg.replace(/^-+/, '')
+
+ // if it's an exact known option, then don't go any further
+ if (abbrevs[arg] === arg) {
+ return null
+ }
+
+ // if it's an exact known shortopt, same deal
+ if (shorthands[arg]) {
+ // make it an array, if it's a list of words
+ if (shorthands[arg] && !Array.isArray(shorthands[arg])) {
+ shorthands[arg] = shorthands[arg].split(/\s+/)
+ }
+
+ return shorthands[arg]
+ }
+
+ // first check to see if this arg is a set of single-char shorthands
+ const chrs = singleCharacters(arg, shorthands)
+ if (chrs) {
+ return chrs.map((c) => shorthands[c]).reduce((l, r) => l.concat(r), [])
+ }
+
+ // if it's an arg abbrev, and not a literal shorthand, then prefer the arg
+ if (abbrevs[arg] && !shorthands[arg]) {
+ return null
+ }
+
+ // if it's an abbr for a shorthand, then use that
+ if (shortAbbr[arg]) {
+ arg = shortAbbr[arg]
+ }
+
+ // make it an array, if it's a list of words
+ if (shorthands[arg] && !Array.isArray(shorthands[arg])) {
+ shorthands[arg] = shorthands[arg].split(/\s+/)
+ }
+
+ return shorthands[arg]
+}
+
+module.exports = {
+ nopt,
+ clean,
+ parse,
+ validate,
+ resolveShort,
+ typeDefs: defaultTypeDefs,
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/nopt/lib/nopt.js b/deps/npm/node_modules/node-gyp/node_modules/nopt/lib/nopt.js
new file mode 100644
index 00000000000..37f01a08783
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/nopt/lib/nopt.js
@@ -0,0 +1,30 @@
+const lib = require('./nopt-lib')
+const defaultTypeDefs = require('./type-defs')
+
+// This is the version of nopt's API that requires setting typeDefs and invalidHandler
+// on the required `nopt` object since it is a singleton. To not do a breaking change
+// an API that requires all options be passed in is located in `nopt-lib.js` and
+// exported here as lib.
+// TODO(breaking): make API only work in non-singleton mode
+
+module.exports = exports = nopt
+exports.clean = clean
+exports.typeDefs = defaultTypeDefs
+exports.lib = lib
+
+function nopt (types, shorthands, args = process.argv, slice = 2) {
+ return lib.nopt(args.slice(slice), {
+ types: types || {},
+ shorthands: shorthands || {},
+ typeDefs: exports.typeDefs,
+ invalidHandler: exports.invalidHandler,
+ })
+}
+
+function clean (data, types, typeDefs = exports.typeDefs) {
+ return lib.clean(data, {
+ types: types || {},
+ typeDefs,
+ invalidHandler: exports.invalidHandler,
+ })
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/nopt/lib/type-defs.js b/deps/npm/node_modules/node-gyp/node_modules/nopt/lib/type-defs.js
new file mode 100644
index 00000000000..608352ee248
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/nopt/lib/type-defs.js
@@ -0,0 +1,91 @@
+const url = require('url')
+const path = require('path')
+const Stream = require('stream').Stream
+const os = require('os')
+const debug = require('./debug')
+
+function validateString (data, k, val) {
+ data[k] = String(val)
+}
+
+function validatePath (data, k, val) {
+ if (val === true) {
+ return false
+ }
+ if (val === null) {
+ return true
+ }
+
+ val = String(val)
+
+ const isWin = process.platform === 'win32'
+ const homePattern = isWin ? /^~(\/|\\)/ : /^~\//
+ const home = os.homedir()
+
+ if (home && val.match(homePattern)) {
+ data[k] = path.resolve(home, val.slice(2))
+ } else {
+ data[k] = path.resolve(val)
+ }
+ return true
+}
+
+function validateNumber (data, k, val) {
+ debug('validate Number %j %j %j', k, val, isNaN(val))
+ if (isNaN(val)) {
+ return false
+ }
+ data[k] = +val
+}
+
+function validateDate (data, k, val) {
+ const s = Date.parse(val)
+ debug('validate Date %j %j %j', k, val, s)
+ if (isNaN(s)) {
+ return false
+ }
+ data[k] = new Date(val)
+}
+
+function validateBoolean (data, k, val) {
+ if (typeof val === 'string') {
+ if (!isNaN(val)) {
+ val = !!(+val)
+ } else if (val === 'null' || val === 'false') {
+ val = false
+ } else {
+ val = true
+ }
+ } else {
+ val = !!val
+ }
+ data[k] = val
+}
+
+function validateUrl (data, k, val) {
+ // Changing this would be a breaking change in the npm cli
+ /* eslint-disable-next-line node/no-deprecated-api */
+ val = url.parse(String(val))
+ if (!val.host) {
+ return false
+ }
+ data[k] = val.href
+}
+
+function validateStream (data, k, val) {
+ if (!(val instanceof Stream)) {
+ return false
+ }
+ data[k] = val
+}
+
+module.exports = {
+ String: { type: String, validate: validateString },
+ Boolean: { type: Boolean, validate: validateBoolean },
+ url: { type: url, validate: validateUrl },
+ Number: { type: Number, validate: validateNumber },
+ path: { type: path, validate: validatePath },
+ Stream: { type: Stream, validate: validateStream },
+ Date: { type: Date, validate: validateDate },
+ Array: { type: Array },
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/nopt/package.json b/deps/npm/node_modules/node-gyp/node_modules/nopt/package.json
new file mode 100644
index 00000000000..37b770ad487
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/nopt/package.json
@@ -0,0 +1,51 @@
+{
+ "name": "nopt",
+ "version": "7.2.1",
+ "description": "Option parsing for Node, supporting types, shorthands, etc. Used by npm.",
+ "author": "GitHub Inc.",
+ "main": "lib/nopt.js",
+ "scripts": {
+ "test": "tap",
+ "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "postlint": "template-oss-check",
+ "template-oss-apply": "template-oss-apply --force",
+ "lintfix": "npm run lint -- --fix",
+ "snap": "tap",
+ "posttest": "npm run lint"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/npm/nopt.git"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ },
+ "license": "ISC",
+ "dependencies": {
+ "abbrev": "^2.0.0"
+ },
+ "devDependencies": {
+ "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/template-oss": "4.22.0",
+ "tap": "^16.3.0"
+ },
+ "tap": {
+ "nyc-arg": [
+ "--exclude",
+ "tap-snapshots/**"
+ ]
+ },
+ "files": [
+ "bin/",
+ "lib/"
+ ],
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ },
+ "templateOSS": {
+ "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
+ "windowsCI": false,
+ "version": "4.22.0",
+ "publish": true
+ }
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/proc-log/LICENSE b/deps/npm/node_modules/node-gyp/node_modules/proc-log/LICENSE
new file mode 100644
index 00000000000..83837797202
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/proc-log/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) GitHub, Inc.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/node-gyp/node_modules/proc-log/lib/index.js b/deps/npm/node_modules/node-gyp/node_modules/proc-log/lib/index.js
new file mode 100644
index 00000000000..86d90861078
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/proc-log/lib/index.js
@@ -0,0 +1,153 @@
+const META = Symbol('proc-log.meta')
+module.exports = {
+ META: META,
+ output: {
+ LEVELS: [
+ 'standard',
+ 'error',
+ 'buffer',
+ 'flush',
+ ],
+ KEYS: {
+ standard: 'standard',
+ error: 'error',
+ buffer: 'buffer',
+ flush: 'flush',
+ },
+ standard: function (...args) {
+ return process.emit('output', 'standard', ...args)
+ },
+ error: function (...args) {
+ return process.emit('output', 'error', ...args)
+ },
+ buffer: function (...args) {
+ return process.emit('output', 'buffer', ...args)
+ },
+ flush: function (...args) {
+ return process.emit('output', 'flush', ...args)
+ },
+ },
+ log: {
+ LEVELS: [
+ 'notice',
+ 'error',
+ 'warn',
+ 'info',
+ 'verbose',
+ 'http',
+ 'silly',
+ 'timing',
+ 'pause',
+ 'resume',
+ ],
+ KEYS: {
+ notice: 'notice',
+ error: 'error',
+ warn: 'warn',
+ info: 'info',
+ verbose: 'verbose',
+ http: 'http',
+ silly: 'silly',
+ timing: 'timing',
+ pause: 'pause',
+ resume: 'resume',
+ },
+ error: function (...args) {
+ return process.emit('log', 'error', ...args)
+ },
+ notice: function (...args) {
+ return process.emit('log', 'notice', ...args)
+ },
+ warn: function (...args) {
+ return process.emit('log', 'warn', ...args)
+ },
+ info: function (...args) {
+ return process.emit('log', 'info', ...args)
+ },
+ verbose: function (...args) {
+ return process.emit('log', 'verbose', ...args)
+ },
+ http: function (...args) {
+ return process.emit('log', 'http', ...args)
+ },
+ silly: function (...args) {
+ return process.emit('log', 'silly', ...args)
+ },
+ timing: function (...args) {
+ return process.emit('log', 'timing', ...args)
+ },
+ pause: function () {
+ return process.emit('log', 'pause')
+ },
+ resume: function () {
+ return process.emit('log', 'resume')
+ },
+ },
+ time: {
+ LEVELS: [
+ 'start',
+ 'end',
+ ],
+ KEYS: {
+ start: 'start',
+ end: 'end',
+ },
+ start: function (name, fn) {
+ process.emit('time', 'start', name)
+ function end () {
+ return process.emit('time', 'end', name)
+ }
+ if (typeof fn === 'function') {
+ const res = fn()
+ if (res && res.finally) {
+ return res.finally(end)
+ }
+ end()
+ return res
+ }
+ return end
+ },
+ end: function (name) {
+ return process.emit('time', 'end', name)
+ },
+ },
+ input: {
+ LEVELS: [
+ 'start',
+ 'end',
+ 'read',
+ ],
+ KEYS: {
+ start: 'start',
+ end: 'end',
+ read: 'read',
+ },
+ start: function (fn) {
+ process.emit('input', 'start')
+ function end () {
+ return process.emit('input', 'end')
+ }
+ if (typeof fn === 'function') {
+ const res = fn()
+ if (res && res.finally) {
+ return res.finally(end)
+ }
+ end()
+ return res
+ }
+ return end
+ },
+ end: function () {
+ return process.emit('input', 'end')
+ },
+ read: function (...args) {
+ let resolve, reject
+ const promise = new Promise((_resolve, _reject) => {
+ resolve = _resolve
+ reject = _reject
+ })
+ process.emit('input', 'read', resolve, reject, ...args)
+ return promise
+ },
+ },
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/proc-log/package.json b/deps/npm/node_modules/node-gyp/node_modules/proc-log/package.json
new file mode 100644
index 00000000000..4ab89102ecc
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/proc-log/package.json
@@ -0,0 +1,45 @@
+{
+ "name": "proc-log",
+ "version": "4.2.0",
+ "files": [
+ "bin/",
+ "lib/"
+ ],
+ "main": "lib/index.js",
+ "description": "just emit 'log' events on the process object",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/npm/proc-log.git"
+ },
+ "author": "GitHub Inc.",
+ "license": "ISC",
+ "scripts": {
+ "test": "tap",
+ "snap": "tap",
+ "posttest": "npm run lint",
+ "postsnap": "eslint index.js test/*.js --fix",
+ "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "postlint": "template-oss-check",
+ "lintfix": "npm run lint -- --fix",
+ "template-oss-apply": "template-oss-apply --force"
+ },
+ "devDependencies": {
+ "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/template-oss": "4.21.3",
+ "tap": "^16.0.1"
+ },
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ },
+ "templateOSS": {
+ "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
+ "version": "4.21.3",
+ "publish": true
+ },
+ "tap": {
+ "nyc-arg": [
+ "--exclude",
+ "tap-snapshots/**"
+ ]
+ }
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/ssri/LICENSE.md b/deps/npm/node_modules/node-gyp/node_modules/ssri/LICENSE.md
new file mode 100644
index 00000000000..e335388869f
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/ssri/LICENSE.md
@@ -0,0 +1,16 @@
+ISC License
+
+Copyright 2021 (c) npm, Inc.
+
+Permission to use, copy, modify, and/or distribute this software for
+any purpose with or without fee is hereby granted, provided that the
+above copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE COPYRIGHT HOLDER DISCLAIMS
+ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
+CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
+USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/node-gyp/node_modules/ssri/lib/index.js b/deps/npm/node_modules/node-gyp/node_modules/ssri/lib/index.js
new file mode 100644
index 00000000000..7d749ed480f
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/ssri/lib/index.js
@@ -0,0 +1,580 @@
+'use strict'
+
+const crypto = require('crypto')
+const { Minipass } = require('minipass')
+
+const SPEC_ALGORITHMS = ['sha512', 'sha384', 'sha256']
+const DEFAULT_ALGORITHMS = ['sha512']
+
+// TODO: this should really be a hardcoded list of algorithms we support,
+// rather than [a-z0-9].
+const BASE64_REGEX = /^[a-z0-9+/]+(?:=?=?)$/i
+const SRI_REGEX = /^([a-z0-9]+)-([^?]+)([?\S*]*)$/
+const STRICT_SRI_REGEX = /^([a-z0-9]+)-([A-Za-z0-9+/=]{44,88})(\?[\x21-\x7E]*)?$/
+const VCHAR_REGEX = /^[\x21-\x7E]+$/
+
+const getOptString = options => options?.length ? `?${options.join('?')}` : ''
+
+class IntegrityStream extends Minipass {
+ #emittedIntegrity
+ #emittedSize
+ #emittedVerified
+
+ constructor (opts) {
+ super()
+ this.size = 0
+ this.opts = opts
+
+ // may be overridden later, but set now for class consistency
+ this.#getOptions()
+
+ // options used for calculating stream. can't be changed.
+ if (opts?.algorithms) {
+ this.algorithms = [...opts.algorithms]
+ } else {
+ this.algorithms = [...DEFAULT_ALGORITHMS]
+ }
+ if (this.algorithm !== null && !this.algorithms.includes(this.algorithm)) {
+ this.algorithms.push(this.algorithm)
+ }
+
+ this.hashes = this.algorithms.map(crypto.createHash)
+ }
+
+ #getOptions () {
+ // For verification
+ this.sri = this.opts?.integrity ? parse(this.opts?.integrity, this.opts) : null
+ this.expectedSize = this.opts?.size
+
+ if (!this.sri) {
+ this.algorithm = null
+ } else if (this.sri.isHash) {
+ this.goodSri = true
+ this.algorithm = this.sri.algorithm
+ } else {
+ this.goodSri = !this.sri.isEmpty()
+ this.algorithm = this.sri.pickAlgorithm(this.opts)
+ }
+
+ this.digests = this.goodSri ? this.sri[this.algorithm] : null
+ this.optString = getOptString(this.opts?.options)
+ }
+
+ on (ev, handler) {
+ if (ev === 'size' && this.#emittedSize) {
+ return handler(this.#emittedSize)
+ }
+
+ if (ev === 'integrity' && this.#emittedIntegrity) {
+ return handler(this.#emittedIntegrity)
+ }
+
+ if (ev === 'verified' && this.#emittedVerified) {
+ return handler(this.#emittedVerified)
+ }
+
+ return super.on(ev, handler)
+ }
+
+ emit (ev, data) {
+ if (ev === 'end') {
+ this.#onEnd()
+ }
+ return super.emit(ev, data)
+ }
+
+ write (data) {
+ this.size += data.length
+ this.hashes.forEach(h => h.update(data))
+ return super.write(data)
+ }
+
+ #onEnd () {
+ if (!this.goodSri) {
+ this.#getOptions()
+ }
+ const newSri = parse(this.hashes.map((h, i) => {
+ return `${this.algorithms[i]}-${h.digest('base64')}${this.optString}`
+ }).join(' '), this.opts)
+ // Integrity verification mode
+ const match = this.goodSri && newSri.match(this.sri, this.opts)
+ if (typeof this.expectedSize === 'number' && this.size !== this.expectedSize) {
+ /* eslint-disable-next-line max-len */
+ const err = new Error(`stream size mismatch when checking ${this.sri}.\n Wanted: ${this.expectedSize}\n Found: ${this.size}`)
+ err.code = 'EBADSIZE'
+ err.found = this.size
+ err.expected = this.expectedSize
+ err.sri = this.sri
+ this.emit('error', err)
+ } else if (this.sri && !match) {
+ /* eslint-disable-next-line max-len */
+ const err = new Error(`${this.sri} integrity checksum failed when using ${this.algorithm}: wanted ${this.digests} but got ${newSri}. (${this.size} bytes)`)
+ err.code = 'EINTEGRITY'
+ err.found = newSri
+ err.expected = this.digests
+ err.algorithm = this.algorithm
+ err.sri = this.sri
+ this.emit('error', err)
+ } else {
+ this.#emittedSize = this.size
+ this.emit('size', this.size)
+ this.#emittedIntegrity = newSri
+ this.emit('integrity', newSri)
+ if (match) {
+ this.#emittedVerified = match
+ this.emit('verified', match)
+ }
+ }
+ }
+}
+
+class Hash {
+ get isHash () {
+ return true
+ }
+
+ constructor (hash, opts) {
+ const strict = opts?.strict
+ this.source = hash.trim()
+
+ // set default values so that we make V8 happy to
+ // always see a familiar object template.
+ this.digest = ''
+ this.algorithm = ''
+ this.options = []
+
+ // 3.1. Integrity metadata (called "Hash" by ssri)
+ // https://w3c.github.io/webappsec-subresource-integrity/#integrity-metadata-description
+ const match = this.source.match(
+ strict
+ ? STRICT_SRI_REGEX
+ : SRI_REGEX
+ )
+ if (!match) {
+ return
+ }
+ if (strict && !SPEC_ALGORITHMS.includes(match[1])) {
+ return
+ }
+ this.algorithm = match[1]
+ this.digest = match[2]
+
+ const rawOpts = match[3]
+ if (rawOpts) {
+ this.options = rawOpts.slice(1).split('?')
+ }
+ }
+
+ hexDigest () {
+ return this.digest && Buffer.from(this.digest, 'base64').toString('hex')
+ }
+
+ toJSON () {
+ return this.toString()
+ }
+
+ match (integrity, opts) {
+ const other = parse(integrity, opts)
+ if (!other) {
+ return false
+ }
+ if (other.isIntegrity) {
+ const algo = other.pickAlgorithm(opts, [this.algorithm])
+
+ if (!algo) {
+ return false
+ }
+
+ const foundHash = other[algo].find(hash => hash.digest === this.digest)
+
+ if (foundHash) {
+ return foundHash
+ }
+
+ return false
+ }
+ return other.digest === this.digest ? other : false
+ }
+
+ toString (opts) {
+ if (opts?.strict) {
+ // Strict mode enforces the standard as close to the foot of the
+ // letter as it can.
+ if (!(
+ // The spec has very restricted productions for algorithms.
+ // https://www.w3.org/TR/CSP2/#source-list-syntax
+ SPEC_ALGORITHMS.includes(this.algorithm) &&
+ // Usually, if someone insists on using a "different" base64, we
+ // leave it as-is, since there's multiple standards, and the
+ // specified is not a URL-safe variant.
+ // https://www.w3.org/TR/CSP2/#base64_value
+ this.digest.match(BASE64_REGEX) &&
+ // Option syntax is strictly visual chars.
+ // https://w3c.github.io/webappsec-subresource-integrity/#grammardef-option-expression
+ // https://tools.ietf.org/html/rfc5234#appendix-B.1
+ this.options.every(opt => opt.match(VCHAR_REGEX))
+ )) {
+ return ''
+ }
+ }
+ return `${this.algorithm}-${this.digest}${getOptString(this.options)}`
+ }
+}
+
+function integrityHashToString (toString, sep, opts, hashes) {
+ const toStringIsNotEmpty = toString !== ''
+
+ let shouldAddFirstSep = false
+ let complement = ''
+
+ const lastIndex = hashes.length - 1
+
+ for (let i = 0; i < lastIndex; i++) {
+ const hashString = Hash.prototype.toString.call(hashes[i], opts)
+
+ if (hashString) {
+ shouldAddFirstSep = true
+
+ complement += hashString
+ complement += sep
+ }
+ }
+
+ const finalHashString = Hash.prototype.toString.call(hashes[lastIndex], opts)
+
+ if (finalHashString) {
+ shouldAddFirstSep = true
+ complement += finalHashString
+ }
+
+ if (toStringIsNotEmpty && shouldAddFirstSep) {
+ return toString + sep + complement
+ }
+
+ return toString + complement
+}
+
+class Integrity {
+ get isIntegrity () {
+ return true
+ }
+
+ toJSON () {
+ return this.toString()
+ }
+
+ isEmpty () {
+ return Object.keys(this).length === 0
+ }
+
+ toString (opts) {
+ let sep = opts?.sep || ' '
+ let toString = ''
+
+ if (opts?.strict) {
+ // Entries must be separated by whitespace, according to spec.
+ sep = sep.replace(/\S+/g, ' ')
+
+ for (const hash of SPEC_ALGORITHMS) {
+ if (this[hash]) {
+ toString = integrityHashToString(toString, sep, opts, this[hash])
+ }
+ }
+ } else {
+ for (const hash of Object.keys(this)) {
+ toString = integrityHashToString(toString, sep, opts, this[hash])
+ }
+ }
+
+ return toString
+ }
+
+ concat (integrity, opts) {
+ const other = typeof integrity === 'string'
+ ? integrity
+ : stringify(integrity, opts)
+ return parse(`${this.toString(opts)} ${other}`, opts)
+ }
+
+ hexDigest () {
+ return parse(this, { single: true }).hexDigest()
+ }
+
+ // add additional hashes to an integrity value, but prevent
+ // *changing* an existing integrity hash.
+ merge (integrity, opts) {
+ const other = parse(integrity, opts)
+ for (const algo in other) {
+ if (this[algo]) {
+ if (!this[algo].find(hash =>
+ other[algo].find(otherhash =>
+ hash.digest === otherhash.digest))) {
+ throw new Error('hashes do not match, cannot update integrity')
+ }
+ } else {
+ this[algo] = other[algo]
+ }
+ }
+ }
+
+ match (integrity, opts) {
+ const other = parse(integrity, opts)
+ if (!other) {
+ return false
+ }
+ const algo = other.pickAlgorithm(opts, Object.keys(this))
+ return (
+ !!algo &&
+ this[algo] &&
+ other[algo] &&
+ this[algo].find(hash =>
+ other[algo].find(otherhash =>
+ hash.digest === otherhash.digest
+ )
+ )
+ ) || false
+ }
+
+ // Pick the highest priority algorithm present, optionally also limited to a
+ // set of hashes found in another integrity. When limiting it may return
+ // nothing.
+ pickAlgorithm (opts, hashes) {
+ const pickAlgorithm = opts?.pickAlgorithm || getPrioritizedHash
+ const keys = Object.keys(this).filter(k => {
+ if (hashes?.length) {
+ return hashes.includes(k)
+ }
+ return true
+ })
+ if (keys.length) {
+ return keys.reduce((acc, algo) => pickAlgorithm(acc, algo) || acc)
+ }
+ // no intersection between this and hashes,
+ return null
+ }
+}
+
+module.exports.parse = parse
+function parse (sri, opts) {
+ if (!sri) {
+ return null
+ }
+ if (typeof sri === 'string') {
+ return _parse(sri, opts)
+ } else if (sri.algorithm && sri.digest) {
+ const fullSri = new Integrity()
+ fullSri[sri.algorithm] = [sri]
+ return _parse(stringify(fullSri, opts), opts)
+ } else {
+ return _parse(stringify(sri, opts), opts)
+ }
+}
+
+function _parse (integrity, opts) {
+ // 3.4.3. Parse metadata
+ // https://w3c.github.io/webappsec-subresource-integrity/#parse-metadata
+ if (opts?.single) {
+ return new Hash(integrity, opts)
+ }
+ const hashes = integrity.trim().split(/\s+/).reduce((acc, string) => {
+ const hash = new Hash(string, opts)
+ if (hash.algorithm && hash.digest) {
+ const algo = hash.algorithm
+ if (!acc[algo]) {
+ acc[algo] = []
+ }
+ acc[algo].push(hash)
+ }
+ return acc
+ }, new Integrity())
+ return hashes.isEmpty() ? null : hashes
+}
+
+module.exports.stringify = stringify
+function stringify (obj, opts) {
+ if (obj.algorithm && obj.digest) {
+ return Hash.prototype.toString.call(obj, opts)
+ } else if (typeof obj === 'string') {
+ return stringify(parse(obj, opts), opts)
+ } else {
+ return Integrity.prototype.toString.call(obj, opts)
+ }
+}
+
+module.exports.fromHex = fromHex
+function fromHex (hexDigest, algorithm, opts) {
+ const optString = getOptString(opts?.options)
+ return parse(
+ `${algorithm}-${
+ Buffer.from(hexDigest, 'hex').toString('base64')
+ }${optString}`, opts
+ )
+}
+
+module.exports.fromData = fromData
+function fromData (data, opts) {
+ const algorithms = opts?.algorithms || [...DEFAULT_ALGORITHMS]
+ const optString = getOptString(opts?.options)
+ return algorithms.reduce((acc, algo) => {
+ const digest = crypto.createHash(algo).update(data).digest('base64')
+ const hash = new Hash(
+ `${algo}-${digest}${optString}`,
+ opts
+ )
+ /* istanbul ignore else - it would be VERY strange if the string we
+ * just calculated with an algo did not have an algo or digest.
+ */
+ if (hash.algorithm && hash.digest) {
+ const hashAlgo = hash.algorithm
+ if (!acc[hashAlgo]) {
+ acc[hashAlgo] = []
+ }
+ acc[hashAlgo].push(hash)
+ }
+ return acc
+ }, new Integrity())
+}
+
+module.exports.fromStream = fromStream
+function fromStream (stream, opts) {
+ const istream = integrityStream(opts)
+ return new Promise((resolve, reject) => {
+ stream.pipe(istream)
+ stream.on('error', reject)
+ istream.on('error', reject)
+ let sri
+ istream.on('integrity', s => {
+ sri = s
+ })
+ istream.on('end', () => resolve(sri))
+ istream.resume()
+ })
+}
+
+module.exports.checkData = checkData
+function checkData (data, sri, opts) {
+ sri = parse(sri, opts)
+ if (!sri || !Object.keys(sri).length) {
+ if (opts?.error) {
+ throw Object.assign(
+ new Error('No valid integrity hashes to check against'), {
+ code: 'EINTEGRITY',
+ }
+ )
+ } else {
+ return false
+ }
+ }
+ const algorithm = sri.pickAlgorithm(opts)
+ const digest = crypto.createHash(algorithm).update(data).digest('base64')
+ const newSri = parse({ algorithm, digest })
+ const match = newSri.match(sri, opts)
+ opts = opts || {}
+ if (match || !(opts.error)) {
+ return match
+ } else if (typeof opts.size === 'number' && (data.length !== opts.size)) {
+ /* eslint-disable-next-line max-len */
+ const err = new Error(`data size mismatch when checking ${sri}.\n Wanted: ${opts.size}\n Found: ${data.length}`)
+ err.code = 'EBADSIZE'
+ err.found = data.length
+ err.expected = opts.size
+ err.sri = sri
+ throw err
+ } else {
+ /* eslint-disable-next-line max-len */
+ const err = new Error(`Integrity checksum failed when using ${algorithm}: Wanted ${sri}, but got ${newSri}. (${data.length} bytes)`)
+ err.code = 'EINTEGRITY'
+ err.found = newSri
+ err.expected = sri
+ err.algorithm = algorithm
+ err.sri = sri
+ throw err
+ }
+}
+
+module.exports.checkStream = checkStream
+function checkStream (stream, sri, opts) {
+ opts = opts || Object.create(null)
+ opts.integrity = sri
+ sri = parse(sri, opts)
+ if (!sri || !Object.keys(sri).length) {
+ return Promise.reject(Object.assign(
+ new Error('No valid integrity hashes to check against'), {
+ code: 'EINTEGRITY',
+ }
+ ))
+ }
+ const checker = integrityStream(opts)
+ return new Promise((resolve, reject) => {
+ stream.pipe(checker)
+ stream.on('error', reject)
+ checker.on('error', reject)
+ let verified
+ checker.on('verified', s => {
+ verified = s
+ })
+ checker.on('end', () => resolve(verified))
+ checker.resume()
+ })
+}
+
+module.exports.integrityStream = integrityStream
+function integrityStream (opts = Object.create(null)) {
+ return new IntegrityStream(opts)
+}
+
+module.exports.create = createIntegrity
+function createIntegrity (opts) {
+ const algorithms = opts?.algorithms || [...DEFAULT_ALGORITHMS]
+ const optString = getOptString(opts?.options)
+
+ const hashes = algorithms.map(crypto.createHash)
+
+ return {
+ update: function (chunk, enc) {
+ hashes.forEach(h => h.update(chunk, enc))
+ return this
+ },
+ digest: function () {
+ const integrity = algorithms.reduce((acc, algo) => {
+ const digest = hashes.shift().digest('base64')
+ const hash = new Hash(
+ `${algo}-${digest}${optString}`,
+ opts
+ )
+ /* istanbul ignore else - it would be VERY strange if the hash we
+ * just calculated with an algo did not have an algo or digest.
+ */
+ if (hash.algorithm && hash.digest) {
+ const hashAlgo = hash.algorithm
+ if (!acc[hashAlgo]) {
+ acc[hashAlgo] = []
+ }
+ acc[hashAlgo].push(hash)
+ }
+ return acc
+ }, new Integrity())
+
+ return integrity
+ },
+ }
+}
+
+const NODE_HASHES = crypto.getHashes()
+
+// This is a Best Effort™ at a reasonable priority for hash algos
+const DEFAULT_PRIORITY = [
+ 'md5', 'whirlpool', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512',
+ // TODO - it's unclear _which_ of these Node will actually use as its name
+ // for the algorithm, so we guesswork it based on the OpenSSL names.
+ 'sha3',
+ 'sha3-256', 'sha3-384', 'sha3-512',
+ 'sha3_256', 'sha3_384', 'sha3_512',
+].filter(algo => NODE_HASHES.includes(algo))
+
+function getPrioritizedHash (algo1, algo2) {
+ /* eslint-disable-next-line max-len */
+ return DEFAULT_PRIORITY.indexOf(algo1.toLowerCase()) >= DEFAULT_PRIORITY.indexOf(algo2.toLowerCase())
+ ? algo1
+ : algo2
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/ssri/package.json b/deps/npm/node_modules/node-gyp/node_modules/ssri/package.json
new file mode 100644
index 00000000000..28395414e46
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/ssri/package.json
@@ -0,0 +1,65 @@
+{
+ "name": "ssri",
+ "version": "10.0.6",
+ "description": "Standard Subresource Integrity library -- parses, serializes, generates, and verifies integrity metadata according to the SRI spec.",
+ "main": "lib/index.js",
+ "files": [
+ "bin/",
+ "lib/"
+ ],
+ "scripts": {
+ "prerelease": "npm t",
+ "postrelease": "npm publish",
+ "posttest": "npm run lint",
+ "test": "tap",
+ "coverage": "tap",
+ "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "postlint": "template-oss-check",
+ "template-oss-apply": "template-oss-apply --force",
+ "lintfix": "npm run lint -- --fix",
+ "snap": "tap"
+ },
+ "tap": {
+ "check-coverage": true,
+ "nyc-arg": [
+ "--exclude",
+ "tap-snapshots/**"
+ ]
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/npm/ssri.git"
+ },
+ "keywords": [
+ "w3c",
+ "web",
+ "security",
+ "integrity",
+ "checksum",
+ "hashing",
+ "subresource integrity",
+ "sri",
+ "sri hash",
+ "sri string",
+ "sri generator",
+ "html"
+ ],
+ "author": "GitHub Inc.",
+ "license": "ISC",
+ "dependencies": {
+ "minipass": "^7.0.3"
+ },
+ "devDependencies": {
+ "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/template-oss": "4.22.0",
+ "tap": "^16.0.1"
+ },
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ },
+ "templateOSS": {
+ "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
+ "version": "4.22.0",
+ "publish": "true"
+ }
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/unique-filename/LICENSE b/deps/npm/node_modules/node-gyp/node_modules/unique-filename/LICENSE
new file mode 100644
index 00000000000..69619c125ea
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/unique-filename/LICENSE
@@ -0,0 +1,5 @@
+Copyright npm, Inc
+
+Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/node-gyp/node_modules/unique-filename/lib/index.js b/deps/npm/node_modules/node-gyp/node_modules/unique-filename/lib/index.js
new file mode 100644
index 00000000000..d067d2e7098
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/unique-filename/lib/index.js
@@ -0,0 +1,7 @@
+var path = require('path')
+
+var uniqueSlug = require('unique-slug')
+
+module.exports = function (filepath, prefix, uniq) {
+ return path.join(filepath, (prefix ? prefix + '-' : '') + uniqueSlug(uniq))
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/unique-filename/package.json b/deps/npm/node_modules/node-gyp/node_modules/unique-filename/package.json
new file mode 100644
index 00000000000..b2fbf066648
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/unique-filename/package.json
@@ -0,0 +1,51 @@
+{
+ "name": "unique-filename",
+ "version": "3.0.0",
+ "description": "Generate a unique filename for use in temporary directories or caches.",
+ "main": "lib/index.js",
+ "scripts": {
+ "test": "tap",
+ "lint": "eslint \"**/*.js\"",
+ "postlint": "template-oss-check",
+ "template-oss-apply": "template-oss-apply --force",
+ "lintfix": "npm run lint -- --fix",
+ "snap": "tap",
+ "posttest": "npm run lint"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/npm/unique-filename.git"
+ },
+ "keywords": [],
+ "author": "GitHub Inc.",
+ "license": "ISC",
+ "bugs": {
+ "url": "https://github.com/iarna/unique-filename/issues"
+ },
+ "homepage": "https://github.com/iarna/unique-filename",
+ "devDependencies": {
+ "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/template-oss": "4.5.1",
+ "tap": "^16.3.0"
+ },
+ "dependencies": {
+ "unique-slug": "^4.0.0"
+ },
+ "files": [
+ "bin/",
+ "lib/"
+ ],
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ },
+ "templateOSS": {
+ "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
+ "version": "4.5.1"
+ },
+ "tap": {
+ "nyc-arg": [
+ "--exclude",
+ "tap-snapshots/**"
+ ]
+ }
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/unique-slug/LICENSE b/deps/npm/node_modules/node-gyp/node_modules/unique-slug/LICENSE
new file mode 100644
index 00000000000..7953647e776
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/unique-slug/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright npm, Inc
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/node-gyp/node_modules/unique-slug/lib/index.js b/deps/npm/node_modules/node-gyp/node_modules/unique-slug/lib/index.js
new file mode 100644
index 00000000000..1bac84d95d7
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/unique-slug/lib/index.js
@@ -0,0 +1,11 @@
+'use strict'
+var MurmurHash3 = require('imurmurhash')
+
+module.exports = function (uniq) {
+ if (uniq) {
+ var hash = new MurmurHash3(uniq)
+ return ('00000000' + hash.result().toString(16)).slice(-8)
+ } else {
+ return (Math.random().toString(16) + '0000000').slice(2, 10)
+ }
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/unique-slug/package.json b/deps/npm/node_modules/node-gyp/node_modules/unique-slug/package.json
new file mode 100644
index 00000000000..33732cdbb42
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/unique-slug/package.json
@@ -0,0 +1,47 @@
+{
+ "name": "unique-slug",
+ "version": "4.0.0",
+ "description": "Generate a unique character string suitible for use in files and URLs.",
+ "main": "lib/index.js",
+ "scripts": {
+ "test": "tap",
+ "lint": "eslint \"**/*.js\"",
+ "postlint": "template-oss-check",
+ "template-oss-apply": "template-oss-apply --force",
+ "lintfix": "npm run lint -- --fix",
+ "snap": "tap",
+ "posttest": "npm run lint"
+ },
+ "keywords": [],
+ "author": "GitHub Inc.",
+ "license": "ISC",
+ "devDependencies": {
+ "@npmcli/eslint-config": "^3.1.0",
+ "@npmcli/template-oss": "4.5.1",
+ "tap": "^16.3.0"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/npm/unique-slug.git"
+ },
+ "dependencies": {
+ "imurmurhash": "^0.1.4"
+ },
+ "files": [
+ "bin/",
+ "lib/"
+ ],
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ },
+ "templateOSS": {
+ "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
+ "version": "4.5.1"
+ },
+ "tap": {
+ "nyc-arg": [
+ "--exclude",
+ "tap-snapshots/**"
+ ]
+ }
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/which/LICENSE b/deps/npm/node_modules/node-gyp/node_modules/which/LICENSE
new file mode 100644
index 00000000000..19129e315fe
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/which/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/node-gyp/node_modules/which/README.md b/deps/npm/node_modules/node-gyp/node_modules/which/README.md
new file mode 100644
index 00000000000..942bf1e0932
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/which/README.md
@@ -0,0 +1,51 @@
+# which
+
+Like the unix `which` utility.
+
+Finds the first instance of a specified executable in the PATH
+environment variable. Does not cache the results, so `hash -r` is not
+needed when the PATH changes.
+
+## USAGE
+
+```javascript
+const which = require('which')
+
+// async usage
+// rejects if not found
+const resolved = await which('node')
+
+// if nothrow option is used, returns null if not found
+const resolvedOrNull = await which('node', { nothrow: true })
+
+// sync usage
+// throws if not found
+const resolved = which.sync('node')
+
+// if nothrow option is used, returns null if not found
+const resolvedOrNull = which.sync('node', { nothrow: true })
+
+// Pass options to override the PATH and PATHEXT environment vars.
+await which('node', { path: someOtherPath, pathExt: somePathExt })
+```
+
+## CLI USAGE
+
+Just like the BSD `which(1)` binary but using `node-which`.
+
+```
+usage: node-which [-as] program ...
+```
+
+You can learn more about why the binary is `node-which` and not `which`
+[here](https://github.com/npm/node-which/pull/67)
+
+## OPTIONS
+
+You may pass an options object as the second argument.
+
+- `path`: Use instead of the `PATH` environment variable.
+- `pathExt`: Use instead of the `PATHEXT` environment variable.
+- `all`: Return all matches, instead of just the first one. Note that
+ this means the function returns an array of strings instead of a
+ single string.
diff --git a/deps/npm/node_modules/node-gyp/node_modules/which/bin/which.js b/deps/npm/node_modules/node-gyp/node_modules/which/bin/which.js
new file mode 100755
index 00000000000..6df16f21acf
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/which/bin/which.js
@@ -0,0 +1,52 @@
+#!/usr/bin/env node
+
+const which = require('../lib')
+const argv = process.argv.slice(2)
+
+const usage = (err) => {
+ if (err) {
+ console.error(`which: ${err}`)
+ }
+ console.error('usage: which [-as] program ...')
+ process.exit(1)
+}
+
+if (!argv.length) {
+ return usage()
+}
+
+let dashdash = false
+const [commands, flags] = argv.reduce((acc, arg) => {
+ if (dashdash || arg === '--') {
+ dashdash = true
+ return acc
+ }
+
+ if (!/^-/.test(arg)) {
+ acc[0].push(arg)
+ return acc
+ }
+
+ for (const flag of arg.slice(1).split('')) {
+ if (flag === 's') {
+ acc[1].silent = true
+ } else if (flag === 'a') {
+ acc[1].all = true
+ } else {
+ usage(`illegal option -- ${flag}`)
+ }
+ }
+
+ return acc
+}, [[], {}])
+
+for (const command of commands) {
+ try {
+ const res = which.sync(command, { all: flags.all })
+ if (!flags.silent) {
+ console.log([].concat(res).join('\n'))
+ }
+ } catch (err) {
+ process.exitCode = 1
+ }
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/which/lib/index.js b/deps/npm/node_modules/node-gyp/node_modules/which/lib/index.js
new file mode 100644
index 00000000000..2fd358baf88
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/which/lib/index.js
@@ -0,0 +1,111 @@
+const { isexe, sync: isexeSync } = require('isexe')
+const { join, delimiter, sep, posix } = require('path')
+
+const isWindows = process.platform === 'win32'
+
+// used to check for slashed in commands passed in. always checks for the posix
+// seperator on all platforms, and checks for the current separator when not on
+// a posix platform. don't use the isWindows check for this since that is mocked
+// in tests but we still need the code to actually work when called. that is also
+// why it is ignored from coverage.
+/* istanbul ignore next */
+const rSlash = new RegExp(`[${posix.sep}${sep === posix.sep ? '' : sep}]`.replace(/(\\)/g, '\\$1'))
+const rRel = new RegExp(`^\\.${rSlash.source}`)
+
+const getNotFoundError = (cmd) =>
+ Object.assign(new Error(`not found: ${cmd}`), { code: 'ENOENT' })
+
+const getPathInfo = (cmd, {
+ path: optPath = process.env.PATH,
+ pathExt: optPathExt = process.env.PATHEXT,
+ delimiter: optDelimiter = delimiter,
+}) => {
+ // If it has a slash, then we don't bother searching the pathenv.
+ // just check the file itself, and that's it.
+ const pathEnv = cmd.match(rSlash) ? [''] : [
+ // windows always checks the cwd first
+ ...(isWindows ? [process.cwd()] : []),
+ ...(optPath || /* istanbul ignore next: very unusual */ '').split(optDelimiter),
+ ]
+
+ if (isWindows) {
+ const pathExtExe = optPathExt ||
+ ['.EXE', '.CMD', '.BAT', '.COM'].join(optDelimiter)
+ const pathExt = pathExtExe.split(optDelimiter).flatMap((item) => [item, item.toLowerCase()])
+ if (cmd.includes('.') && pathExt[0] !== '') {
+ pathExt.unshift('')
+ }
+ return { pathEnv, pathExt, pathExtExe }
+ }
+
+ return { pathEnv, pathExt: [''] }
+}
+
+const getPathPart = (raw, cmd) => {
+ const pathPart = /^".*"$/.test(raw) ? raw.slice(1, -1) : raw
+ const prefix = !pathPart && rRel.test(cmd) ? cmd.slice(0, 2) : ''
+ return prefix + join(pathPart, cmd)
+}
+
+const which = async (cmd, opt = {}) => {
+ const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt)
+ const found = []
+
+ for (const envPart of pathEnv) {
+ const p = getPathPart(envPart, cmd)
+
+ for (const ext of pathExt) {
+ const withExt = p + ext
+ const is = await isexe(withExt, { pathExt: pathExtExe, ignoreErrors: true })
+ if (is) {
+ if (!opt.all) {
+ return withExt
+ }
+ found.push(withExt)
+ }
+ }
+ }
+
+ if (opt.all && found.length) {
+ return found
+ }
+
+ if (opt.nothrow) {
+ return null
+ }
+
+ throw getNotFoundError(cmd)
+}
+
+const whichSync = (cmd, opt = {}) => {
+ const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt)
+ const found = []
+
+ for (const pathEnvPart of pathEnv) {
+ const p = getPathPart(pathEnvPart, cmd)
+
+ for (const ext of pathExt) {
+ const withExt = p + ext
+ const is = isexeSync(withExt, { pathExt: pathExtExe, ignoreErrors: true })
+ if (is) {
+ if (!opt.all) {
+ return withExt
+ }
+ found.push(withExt)
+ }
+ }
+ }
+
+ if (opt.all && found.length) {
+ return found
+ }
+
+ if (opt.nothrow) {
+ return null
+ }
+
+ throw getNotFoundError(cmd)
+}
+
+module.exports = which
+which.sync = whichSync
diff --git a/deps/npm/node_modules/node-gyp/node_modules/which/package.json b/deps/npm/node_modules/node-gyp/node_modules/which/package.json
new file mode 100644
index 00000000000..515bfb22ca0
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/which/package.json
@@ -0,0 +1,57 @@
+{
+ "author": "GitHub Inc.",
+ "name": "which",
+ "description": "Like which(1) unix command. Find the first instance of an executable in the PATH.",
+ "version": "4.0.0",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/npm/node-which.git"
+ },
+ "main": "lib/index.js",
+ "bin": {
+ "node-which": "./bin/which.js"
+ },
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^3.1.1"
+ },
+ "devDependencies": {
+ "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/template-oss": "4.18.0",
+ "tap": "^16.3.0"
+ },
+ "scripts": {
+ "test": "tap",
+ "lint": "eslint \"**/*.js\"",
+ "postlint": "template-oss-check",
+ "template-oss-apply": "template-oss-apply --force",
+ "lintfix": "npm run lint -- --fix",
+ "snap": "tap",
+ "posttest": "npm run lint"
+ },
+ "files": [
+ "bin/",
+ "lib/"
+ ],
+ "tap": {
+ "check-coverage": true,
+ "nyc-arg": [
+ "--exclude",
+ "tap-snapshots/**"
+ ]
+ },
+ "engines": {
+ "node": "^16.13.0 || >=18.0.0"
+ },
+ "templateOSS": {
+ "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
+ "ciVersions": [
+ "16.13.0",
+ "16.x",
+ "18.0.0",
+ "18.x"
+ ],
+ "version": "4.18.0",
+ "publish": "true"
+ }
+}
diff --git a/deps/npm/node_modules/nopt/node_modules/abbrev/LICENSE b/deps/npm/node_modules/nopt/node_modules/abbrev/LICENSE
new file mode 100644
index 00000000000..9bcfa9d7d8d
--- /dev/null
+++ b/deps/npm/node_modules/nopt/node_modules/abbrev/LICENSE
@@ -0,0 +1,46 @@
+This software is dual-licensed under the ISC and MIT licenses.
+You may use this software under EITHER of the following licenses.
+
+----------
+
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+----------
+
+Copyright Isaac Z. Schlueter and Contributors
+All rights reserved.
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
diff --git a/deps/npm/node_modules/nopt/node_modules/abbrev/lib/index.js b/deps/npm/node_modules/nopt/node_modules/abbrev/lib/index.js
new file mode 100644
index 00000000000..9f48801f049
--- /dev/null
+++ b/deps/npm/node_modules/nopt/node_modules/abbrev/lib/index.js
@@ -0,0 +1,50 @@
+module.exports = abbrev
+
+function abbrev (...args) {
+ let list = args.length === 1 || Array.isArray(args[0]) ? args[0] : args
+
+ for (let i = 0, l = list.length; i < l; i++) {
+ list[i] = typeof list[i] === 'string' ? list[i] : String(list[i])
+ }
+
+ // sort them lexicographically, so that they're next to their nearest kin
+ list = list.sort(lexSort)
+
+ // walk through each, seeing how much it has in common with the next and previous
+ const abbrevs = {}
+ let prev = ''
+ for (let ii = 0, ll = list.length; ii < ll; ii++) {
+ const current = list[ii]
+ const next = list[ii + 1] || ''
+ let nextMatches = true
+ let prevMatches = true
+ if (current === next) {
+ continue
+ }
+ let j = 0
+ const cl = current.length
+ for (; j < cl; j++) {
+ const curChar = current.charAt(j)
+ nextMatches = nextMatches && curChar === next.charAt(j)
+ prevMatches = prevMatches && curChar === prev.charAt(j)
+ if (!nextMatches && !prevMatches) {
+ j++
+ break
+ }
+ }
+ prev = current
+ if (j === cl) {
+ abbrevs[current] = current
+ continue
+ }
+ for (let a = current.slice(0, j); j <= cl; j++) {
+ abbrevs[a] = current
+ a += current.charAt(j)
+ }
+ }
+ return abbrevs
+}
+
+function lexSort (a, b) {
+ return a === b ? 0 : a > b ? 1 : -1
+}
diff --git a/deps/npm/node_modules/nopt/node_modules/abbrev/package.json b/deps/npm/node_modules/nopt/node_modules/abbrev/package.json
new file mode 100644
index 00000000000..e2640044563
--- /dev/null
+++ b/deps/npm/node_modules/nopt/node_modules/abbrev/package.json
@@ -0,0 +1,43 @@
+{
+ "name": "abbrev",
+ "version": "2.0.0",
+ "description": "Like ruby's abbrev module, but in js",
+ "author": "GitHub Inc.",
+ "main": "lib/index.js",
+ "scripts": {
+ "test": "tap",
+ "lint": "eslint \"**/*.js\"",
+ "postlint": "template-oss-check",
+ "template-oss-apply": "template-oss-apply --force",
+ "lintfix": "npm run lint -- --fix",
+ "snap": "tap",
+ "posttest": "npm run lint"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/npm/abbrev-js.git"
+ },
+ "license": "ISC",
+ "devDependencies": {
+ "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/template-oss": "4.8.0",
+ "tap": "^16.3.0"
+ },
+ "tap": {
+ "nyc-arg": [
+ "--exclude",
+ "tap-snapshots/**"
+ ]
+ },
+ "files": [
+ "bin/",
+ "lib/"
+ ],
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ },
+ "templateOSS": {
+ "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
+ "version": "4.8.0"
+ }
+}
diff --git a/deps/npm/node_modules/nopt/package.json b/deps/npm/node_modules/nopt/package.json
index 37b770ad487..508b8e28b59 100644
--- a/deps/npm/node_modules/nopt/package.json
+++ b/deps/npm/node_modules/nopt/package.json
@@ -1,17 +1,18 @@
{
"name": "nopt",
- "version": "7.2.1",
+ "version": "8.0.0",
"description": "Option parsing for Node, supporting types, shorthands, etc. Used by npm.",
"author": "GitHub Inc.",
"main": "lib/nopt.js",
"scripts": {
"test": "tap",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
"postlint": "template-oss-check",
"template-oss-apply": "template-oss-apply --force",
- "lintfix": "npm run lint -- --fix",
+ "lintfix": "npm run eslint -- --fix",
"snap": "tap",
- "posttest": "npm run lint"
+ "posttest": "npm run lint",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"repository": {
"type": "git",
@@ -25,8 +26,8 @@
"abbrev": "^2.0.0"
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.22.0",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"tap": "^16.3.0"
},
"tap": {
@@ -40,12 +41,12 @@
"lib/"
],
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
"windowsCI": false,
- "version": "4.22.0",
+ "version": "4.23.3",
"publish": true
}
}
diff --git a/deps/npm/node_modules/normalize-package-data/package.json b/deps/npm/node_modules/normalize-package-data/package.json
index 04a7647abe6..a849ea3a848 100644
--- a/deps/npm/node_modules/normalize-package-data/package.json
+++ b/deps/npm/node_modules/normalize-package-data/package.json
@@ -1,6 +1,6 @@
{
"name": "normalize-package-data",
- "version": "6.0.2",
+ "version": "7.0.0",
"author": "GitHub Inc.",
"description": "Normalizes data that can be found in package.json files.",
"license": "BSD-2-Clause",
@@ -12,22 +12,23 @@
"scripts": {
"test": "tap",
"npmclilint": "npmcli-lint",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
- "lintfix": "npm run lint -- --fix",
+ "lint": "npm run eslint",
+ "lintfix": "npm run eslint -- --fix",
"posttest": "npm run lint",
"postsnap": "npm run lintfix --",
"postlint": "template-oss-check",
"snap": "tap",
- "template-oss-apply": "template-oss-apply --force"
+ "template-oss-apply": "template-oss-apply --force",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"dependencies": {
- "hosted-git-info": "^7.0.0",
+ "hosted-git-info": "^8.0.0",
"semver": "^7.3.5",
"validate-npm-package-license": "^3.0.4"
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.22.0",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"tap": "^16.0.1"
},
"files": [
@@ -35,11 +36,11 @@
"lib/"
],
"engines": {
- "node": "^16.14.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.22.0",
+ "version": "4.23.3",
"publish": "true"
},
"tap": {
diff --git a/deps/npm/node_modules/npm-audit-report/package.json b/deps/npm/node_modules/npm-audit-report/package.json
index 492071c1faf..22b16099e23 100644
--- a/deps/npm/node_modules/npm-audit-report/package.json
+++ b/deps/npm/node_modules/npm-audit-report/package.json
@@ -1,16 +1,17 @@
{
"name": "npm-audit-report",
- "version": "5.0.0",
+ "version": "6.0.0",
"description": "Given a response from the npm security api, render it into a variety of security reports",
"main": "lib/index.js",
"scripts": {
"test": "tap",
"snap": "tap",
- "lint": "eslint \"**/*.js\"",
+ "lint": "npm run eslint",
"postlint": "template-oss-check",
"template-oss-apply": "template-oss-apply --force",
- "lintfix": "npm run lint -- --fix",
- "posttest": "npm run lint"
+ "lintfix": "npm run eslint -- --fix",
+ "posttest": "npm run lint",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"tap": {
"check-coverage": true,
@@ -29,8 +30,8 @@
"author": "GitHub Inc.",
"license": "ISC",
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.14.1",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"chalk": "^5.2.0",
"tap": "^16.0.0"
},
@@ -40,7 +41,7 @@
},
"repository": {
"type": "git",
- "url": "https://github.com/npm/npm-audit-report.git"
+ "url": "git+https://github.com/npm/npm-audit-report.git"
},
"bugs": {
"url": "https://github.com/npm/npm-audit-report/issues"
@@ -51,10 +52,11 @@
"lib/"
],
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.14.1"
+ "version": "4.23.3",
+ "publish": true
}
}
diff --git a/deps/npm/node_modules/npm-bundled/package.json b/deps/npm/node_modules/npm-bundled/package.json
index 2744ca6af67..c5daf35dbaa 100644
--- a/deps/npm/node_modules/npm-bundled/package.json
+++ b/deps/npm/node_modules/npm-bundled/package.json
@@ -1,6 +1,6 @@
{
"name": "npm-bundled",
- "version": "3.0.1",
+ "version": "4.0.0",
"description": "list things in node_modules that are bundledDependencies, or transitive dependencies thereof",
"main": "lib/index.js",
"repository": {
@@ -10,33 +10,34 @@
"author": "GitHub Inc.",
"license": "ISC",
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.22.0",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"mutate-fs": "^2.1.1",
"tap": "^16.3.0"
},
"scripts": {
"test": "tap",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
"postlint": "template-oss-check",
"template-oss-apply": "template-oss-apply --force",
- "lintfix": "npm run lint -- --fix",
+ "lintfix": "npm run eslint -- --fix",
"snap": "tap",
- "posttest": "npm run lint"
+ "posttest": "npm run lint",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"files": [
"bin/",
"lib/"
],
"dependencies": {
- "npm-normalize-package-bin": "^3.0.0"
+ "npm-normalize-package-bin": "^4.0.0"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.22.0",
+ "version": "4.23.3",
"publish": true
},
"tap": {
diff --git a/deps/npm/node_modules/npm-install-checks/lib/current-env.js b/deps/npm/node_modules/npm-install-checks/lib/current-env.js
new file mode 100644
index 00000000000..9babde1f277
--- /dev/null
+++ b/deps/npm/node_modules/npm-install-checks/lib/current-env.js
@@ -0,0 +1,63 @@
+const process = require('node:process')
+const nodeOs = require('node:os')
+
+function isMusl (file) {
+ return file.includes('libc.musl-') || file.includes('ld-musl-')
+}
+
+function os () {
+ return process.platform
+}
+
+function cpu () {
+ return process.arch
+}
+
+function libc (osName) {
+ // this is to make it faster on non linux machines
+ if (osName !== 'linux') {
+ return undefined
+ }
+ let family
+ const originalExclude = process.report.excludeNetwork
+ process.report.excludeNetwork = true
+ const report = process.report.getReport()
+ process.report.excludeNetwork = originalExclude
+ if (report.header?.glibcVersionRuntime) {
+ family = 'glibc'
+ } else if (Array.isArray(report.sharedObjects) && report.sharedObjects.some(isMusl)) {
+ family = 'musl'
+ }
+ return family
+}
+
+function devEngines (env = {}) {
+ const osName = env.os || os()
+ return {
+ cpu: {
+ name: env.cpu || cpu(),
+ },
+ libc: {
+ name: env.libc || libc(osName),
+ },
+ os: {
+ name: osName,
+ version: env.osVersion || nodeOs.release(),
+ },
+ packageManager: {
+ name: 'npm',
+ version: env.npmVersion,
+ },
+ runtime: {
+ name: 'node',
+ version: env.nodeVersion || process.version,
+ },
+ }
+}
+
+module.exports = {
+ cpu,
+ libc,
+ os,
+ devEngines,
+}
diff --git a/deps/npm/node_modules/npm-install-checks/lib/dev-engines.js b/deps/npm/node_modules/npm-install-checks/lib/dev-engines.js
new file mode 100644
index 00000000000..ac5a182330d
--- /dev/null
+++ b/deps/npm/node_modules/npm-install-checks/lib/dev-engines.js
@@ -0,0 +1,145 @@
+const satisfies = require('semver/functions/satisfies')
+const validRange = require('semver/ranges/valid')
+
+const recognizedOnFail = [
+ 'ignore',
+ 'warn',
+ 'error',
+ 'download',
+]
+
+const recognizedProperties = [
+ 'name',
+ 'version',
+ 'onFail',
+]
+
+const recognizedEngines = [
+ 'packageManager',
+ 'runtime',
+ 'cpu',
+ 'libc',
+ 'os',
+]
+
+/** checks a devEngine dependency */
+function checkDependency (wanted, current, opts) {
+ const { engine } = opts
+
+ if ((typeof wanted !== 'object' || wanted === null) || Array.isArray(wanted)) {
+ throw new Error(`Invalid non-object value for "${engine}"`)
+ }
+
+ const properties = Object.keys(wanted)
+
+ for (const prop of properties) {
+ if (!recognizedProperties.includes(prop)) {
+ throw new Error(`Invalid property "${prop}" for "${engine}"`)
+ }
+ }
+
+ if (!properties.includes('name')) {
+ throw new Error(`Missing "name" property for "${engine}"`)
+ }
+
+ if (typeof wanted.name !== 'string') {
+ throw new Error(`Invalid non-string value for "name" within "${engine}"`)
+ }
+
+ if (typeof current.name !== 'string' || current.name === '') {
+ throw new Error(`Unable to determine "name" for "${engine}"`)
+ }
+
+ if (properties.includes('onFail')) {
+ if (typeof wanted.onFail !== 'string') {
+ throw new Error(`Invalid non-string value for "onFail" within "${engine}"`)
+ }
+ if (!recognizedOnFail.includes(wanted.onFail)) {
+ throw new Error(`Invalid onFail value "${wanted.onFail}" for "${engine}"`)
+ }
+ }
+
+ if (wanted.name !== current.name) {
+ return new Error(
+ `Invalid name "${wanted.name}" does not match "${current.name}" for "${engine}"`
+ )
+ }
+
+ if (properties.includes('version')) {
+ if (typeof wanted.version !== 'string') {
+ throw new Error(`Invalid non-string value for "version" within "${engine}"`)
+ }
+ if (typeof current.version !== 'string' || current.version === '') {
+ throw new Error(`Unable to determine "version" for "${engine}" "${wanted.name}"`)
+ }
+ if (validRange(wanted.version)) {
+ if (!satisfies(current.version, wanted.version, opts.semver)) {
+ return new Error(
+ // eslint-disable-next-line max-len
+ `Invalid semver version "${wanted.version}" does not match "${current.version}" for "${engine}"`
+ )
+ }
+ } else if (wanted.version !== current.version) {
+ return new Error(
+ `Invalid version "${wanted.version}" does not match "${current.version}" for "${engine}"`
+ )
+ }
+ }
+}
+
+/** checks devEngines package property and returns array of warnings / errors */
+function checkDevEngines (wanted, current = {}, opts = {}) {
+ if ((typeof wanted !== 'object' || wanted === null) || Array.isArray(wanted)) {
+ throw new Error(`Invalid non-object value for devEngines`)
+ }
+
+ const errors = []
+
+ for (const engine of Object.keys(wanted)) {
+ if (!recognizedEngines.includes(engine)) {
+ throw new Error(`Invalid property "${engine}"`)
+ }
+ const dependencyAsAuthored = wanted[engine]
+ const dependencies = [dependencyAsAuthored].flat()
+ const currentEngine = current[engine] || {}
+
+ // this accounts for empty array eg { runtime: [] } and ignores it
+ if (dependencies.length === 0) {
+ continue
+ }
+
+ const depErrors = []
+ for (const dep of dependencies) {
+ const result = checkDependency(dep, currentEngine, { ...opts, engine })
+ if (result) {
+ depErrors.push(result)
+ }
+ }
+
+ const invalid = depErrors.length === dependencies.length
+
+ if (invalid) {
+ const lastDependency = dependencies[dependencies.length - 1]
+ let onFail = lastDependency.onFail || 'error'
+ if (onFail === 'download') {
+ onFail = 'error'
+ }
+
+ const err = Object.assign(new Error(`Invalid engine "${engine}"`), {
+ errors: depErrors,
+ engine,
+ isWarn: onFail === 'warn',
+ isError: onFail === 'error',
+ current: currentEngine,
+ required: dependencyAsAuthored,
+ })
+
+ errors.push(err)
+ }
+ }
+ return errors
+}
+
+module.exports = {
+ checkDevEngines,
+}
diff --git a/deps/npm/node_modules/npm-install-checks/lib/index.js b/deps/npm/node_modules/npm-install-checks/lib/index.js
index 545472b61dc..71702920873 100644
--- a/deps/npm/node_modules/npm-install-checks/lib/index.js
+++ b/deps/npm/node_modules/npm-install-checks/lib/index.js
@@ -1,4 +1,6 @@
const semver = require('semver')
+const currentEnv = require('./current-env')
+const { checkDevEngines } = require('./dev-engines')
const checkEngine = (target, npmVer, nodeVer, force = false) => {
const nodev = force ? null : nodeVer
@@ -20,44 +22,29 @@ const checkEngine = (target, npmVer, nodeVer, force = false) => {
}
}
-const isMusl = (file) => file.includes('libc.musl-') || file.includes('ld-musl-')
-
const checkPlatform = (target, force = false, environment = {}) => {
if (force) {
return
}
- const platform = environment.os || process.platform
- const arch = environment.cpu || process.arch
- const osOk = target.os ? checkList(platform, target.os) : true
- const cpuOk = target.cpu ? checkList(arch, target.cpu) : true
+ const os = environment.os || currentEnv.os()
+ const cpu = environment.cpu || currentEnv.cpu()
+ const libc = environment.libc || currentEnv.libc(os)
- let libcOk = true
- let libcFamily = null
- if (target.libc) {
- // libc checks only work in linux, any value is a failure if we aren't
- if (environment.libc) {
- libcOk = checkList(environment.libc, target.libc)
- } else if (platform !== 'linux') {
- libcOk = false
- } else {
- const report = process.report.getReport()
- if (report.header?.glibcVersionRuntime) {
- libcFamily = 'glibc'
- } else if (Array.isArray(report.sharedObjects) && report.sharedObjects.some(isMusl)) {
- libcFamily = 'musl'
- }
- libcOk = libcFamily ? checkList(libcFamily, target.libc) : false
- }
+ const osOk = target.os ? checkList(os, target.os) : true
+ const cpuOk = target.cpu ? checkList(cpu, target.cpu) : true
+ let libcOk = target.libc ? checkList(libc, target.libc) : true
+ if (target.libc && !libc) {
+ libcOk = false
}
if (!osOk || !cpuOk || !libcOk) {
throw Object.assign(new Error('Unsupported platform'), {
pkgid: target._id,
current: {
- os: platform,
- cpu: arch,
- libc: libcFamily,
+ os,
+ cpu,
+ libc,
},
required: {
os: target.os,
@@ -98,4 +85,6 @@ const checkList = (value, list) => {
module.exports = {
checkEngine,
checkPlatform,
+ checkDevEngines,
+ currentEnv,
}
diff --git a/deps/npm/node_modules/npm-install-checks/package.json b/deps/npm/node_modules/npm-install-checks/package.json
index 11a3b87750e..e9e69575a6d 100644
--- a/deps/npm/node_modules/npm-install-checks/package.json
+++ b/deps/npm/node_modules/npm-install-checks/package.json
@@ -1,28 +1,29 @@
{
"name": "npm-install-checks",
- "version": "6.3.0",
+ "version": "7.1.0",
"description": "Check the engines and platform fields in package.json",
"main": "lib/index.js",
"dependencies": {
"semver": "^7.1.1"
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.19.0",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"tap": "^16.0.1"
},
"scripts": {
"test": "tap",
- "lint": "eslint \"**/*.js\"",
+ "lint": "npm run eslint",
"postlint": "template-oss-check",
"template-oss-apply": "template-oss-apply --force",
- "lintfix": "npm run lint -- --fix",
+ "lintfix": "npm run eslint -- --fix",
"snap": "tap",
- "posttest": "npm run lint"
+ "posttest": "npm run lint",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"repository": {
"type": "git",
- "url": "https://github.com/npm/npm-install-checks.git"
+ "url": "git+https://github.com/npm/npm-install-checks.git"
},
"keywords": [
"npm,",
@@ -34,12 +35,12 @@
"lib/"
],
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"author": "GitHub Inc.",
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.19.0",
+ "version": "4.23.3",
"publish": "true"
},
"tap": {
diff --git a/deps/npm/node_modules/npm-normalize-package-bin/package.json b/deps/npm/node_modules/npm-normalize-package-bin/package.json
index 5ea50dc2a47..a1aeef0e1e7 100644
--- a/deps/npm/node_modules/npm-normalize-package-bin/package.json
+++ b/deps/npm/node_modules/npm-normalize-package-bin/package.json
@@ -1,26 +1,27 @@
{
"name": "npm-normalize-package-bin",
- "version": "3.0.1",
+ "version": "4.0.0",
"description": "Turn any flavor of allowable package.json bin into a normalized object",
"main": "lib/index.js",
"repository": {
"type": "git",
- "url": "https://github.com/npm/npm-normalize-package-bin.git"
+ "url": "git+https://github.com/npm/npm-normalize-package-bin.git"
},
"author": "GitHub Inc.",
"license": "ISC",
"scripts": {
"test": "tap",
"snap": "tap",
- "lint": "eslint \"**/*.js\"",
+ "lint": "npm run eslint",
"postlint": "template-oss-check",
"template-oss-apply": "template-oss-apply --force",
- "lintfix": "npm run lint -- --fix",
- "posttest": "npm run lint"
+ "lintfix": "npm run eslint -- --fix",
+ "posttest": "npm run lint",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.14.1",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"tap": "^16.3.0"
},
"files": [
@@ -28,11 +29,11 @@
"lib/"
],
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.14.1",
+ "version": "4.23.3",
"publish": "true"
},
"tap": {
diff --git a/deps/npm/node_modules/npm-package-arg/package.json b/deps/npm/node_modules/npm-package-arg/package.json
index d3f6fd7cf0a..80baa3d32a5 100644
--- a/deps/npm/node_modules/npm-package-arg/package.json
+++ b/deps/npm/node_modules/npm-package-arg/package.json
@@ -1,6 +1,6 @@
{
"name": "npm-package-arg",
- "version": "11.0.3",
+ "version": "12.0.0",
"description": "Parse the things that can be arguments to `npm install`",
"main": "./lib/npa.js",
"directories": {
@@ -11,14 +11,14 @@
"lib/"
],
"dependencies": {
- "hosted-git-info": "^7.0.0",
- "proc-log": "^4.0.0",
+ "hosted-git-info": "^8.0.0",
+ "proc-log": "^5.0.0",
"semver": "^7.3.5",
- "validate-npm-package-name": "^5.0.0"
+ "validate-npm-package-name": "^6.0.0"
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.23.1",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"tap": "^16.0.1"
},
"scripts": {
@@ -44,7 +44,7 @@
},
"homepage": "https://github.com/npm/npm-package-arg",
"engines": {
- "node": "^16.14.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"tap": {
"branches": 97,
@@ -55,7 +55,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.23.1",
+ "version": "4.23.3",
"publish": true
}
}
diff --git a/deps/npm/node_modules/npm-packlist/package.json b/deps/npm/node_modules/npm-packlist/package.json
index 8c3a16e741a..d7e0a4fd5a8 100644
--- a/deps/npm/node_modules/npm-packlist/package.json
+++ b/deps/npm/node_modules/npm-packlist/package.json
@@ -1,13 +1,13 @@
{
"name": "npm-packlist",
- "version": "8.0.2",
+ "version": "9.0.0",
"description": "Get a list of the files to add from a folder into an npm package",
"directories": {
"test": "test"
},
"main": "lib/index.js",
"dependencies": {
- "ignore-walk": "^6.0.4"
+ "ignore-walk": "^7.0.0"
},
"author": "GitHub Inc.",
"license": "ISC",
@@ -16,9 +16,9 @@
"lib/"
],
"devDependencies": {
- "@npmcli/arborist": "^6.0.0 || ^6.0.0-pre.0",
+ "@npmcli/arborist": "^7.5.4",
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.21.2",
+ "@npmcli/template-oss": "4.23.3",
"mutate-fs": "^2.1.1",
"tap": "^16.0.1"
},
@@ -27,16 +27,16 @@
"posttest": "npm run lint",
"snap": "tap",
"postsnap": "npm run lintfix --",
- "eslint": "eslint",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
- "lintfix": "npm run lint -- --fix",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
+ "lintfix": "npm run eslint -- --fix",
"npmclilint": "npmcli-lint",
"postlint": "template-oss-check",
"template-oss-apply": "template-oss-apply --force"
},
"repository": {
"type": "git",
- "url": "https://github.com/npm/npm-packlist.git"
+ "url": "git+https://github.com/npm/npm-packlist.git"
},
"tap": {
"test-env": [
@@ -51,11 +51,11 @@
]
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.21.2",
+ "version": "4.23.3",
"publish": true
}
}
diff --git a/deps/npm/node_modules/npm-pick-manifest/package.json b/deps/npm/node_modules/npm-pick-manifest/package.json
index 4c0dd50630d..5763088c250 100644
--- a/deps/npm/node_modules/npm-pick-manifest/package.json
+++ b/deps/npm/node_modules/npm-pick-manifest/package.json
@@ -1,6 +1,6 @@
{
"name": "npm-pick-manifest",
- "version": "9.1.0",
+ "version": "10.0.0",
"description": "Resolves a matching manifest from a package metadata document according to standard npm semver resolution rules.",
"main": "./lib",
"files": [
@@ -9,13 +9,14 @@
],
"scripts": {
"coverage": "tap",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
"test": "tap",
"posttest": "npm run lint",
"postlint": "template-oss-check",
- "lintfix": "npm run lint -- --fix",
+ "lintfix": "npm run eslint -- --fix",
"snap": "tap",
- "template-oss-apply": "template-oss-apply --force"
+ "template-oss-apply": "template-oss-apply --force",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"repository": {
"type": "git",
@@ -29,14 +30,14 @@
"author": "GitHub Inc.",
"license": "ISC",
"dependencies": {
- "npm-install-checks": "^6.0.0",
- "npm-normalize-package-bin": "^3.0.0",
- "npm-package-arg": "^11.0.0",
+ "npm-install-checks": "^7.1.0",
+ "npm-normalize-package-bin": "^4.0.0",
+ "npm-package-arg": "^12.0.0",
"semver": "^7.3.5"
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.22.0",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"tap": "^16.0.1"
},
"tap": {
@@ -47,11 +48,11 @@
]
},
"engines": {
- "node": "^16.14.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.22.0",
+ "version": "4.23.3",
"publish": true
}
}
diff --git a/deps/npm/node_modules/npm-profile/lib/index.js b/deps/npm/node_modules/npm-profile/lib/index.js
index 69e4e49b1fc..83ab5e1b46b 100644
--- a/deps/npm/node_modules/npm-profile/lib/index.js
+++ b/deps/npm/node_modules/npm-profile/lib/index.js
@@ -119,7 +119,7 @@ const webAuthCheckLogin = async (doneUrl, opts, { signal } = {}) => {
if (res.status === 202) {
const retry = +res.headers.get('retry-after') * 1000
if (retry > 0) {
- await timers.setTimeout(retry, null, { ref: false, signal })
+ await timers.setTimeout(retry, null, { signal })
}
return webAuthCheckLogin(doneUrl, opts, { signal })
}
diff --git a/deps/npm/node_modules/npm-profile/package.json b/deps/npm/node_modules/npm-profile/package.json
index ff93911716f..72a19a08231 100644
--- a/deps/npm/node_modules/npm-profile/package.json
+++ b/deps/npm/node_modules/npm-profile/package.json
@@ -1,26 +1,26 @@
{
"name": "npm-profile",
- "version": "10.0.0",
+ "version": "11.0.1",
"description": "Library for updating an npmjs.com profile",
"keywords": [],
"author": "GitHub Inc.",
"license": "ISC",
"dependencies": {
- "npm-registry-fetch": "^17.0.1",
- "proc-log": "^4.0.0"
+ "npm-registry-fetch": "^18.0.0",
+ "proc-log": "^5.0.0"
},
"main": "./lib/index.js",
"repository": {
"type": "git",
- "url": "https://github.com/npm/npm-profile.git"
+ "url": "git+https://github.com/npm/npm-profile.git"
},
"files": [
"bin/",
"lib/"
],
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.21.4",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"nock": "^13.2.4",
"tap": "^16.0.1"
},
@@ -28,10 +28,11 @@
"posttest": "npm run lint",
"test": "tap",
"snap": "tap",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
"postlint": "template-oss-check",
- "lintfix": "npm run lint -- --fix",
- "template-oss-apply": "template-oss-apply --force"
+ "lintfix": "npm run eslint -- --fix",
+ "template-oss-apply": "template-oss-apply --force",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"tap": {
"check-coverage": true,
@@ -41,11 +42,11 @@
]
},
"engines": {
- "node": ">=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.21.4",
+ "version": "4.23.3",
"publish": true
}
}
diff --git a/deps/npm/node_modules/npm-registry-fetch/node_modules/minizlib/LICENSE b/deps/npm/node_modules/npm-registry-fetch/node_modules/minizlib/LICENSE
new file mode 100644
index 00000000000..49f7efe431c
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-fetch/node_modules/minizlib/LICENSE
@@ -0,0 +1,26 @@
+Minizlib was created by Isaac Z. Schlueter.
+It is a derivative work of the Node.js project.
+
+"""
+Copyright (c) 2017-2023 Isaac Z. Schlueter and Contributors
+Copyright (c) 2017-2023 Node.js contributors. All rights reserved.
+Copyright (c) 2017-2023 Joyent, Inc. and other Node contributors. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+"""
diff --git a/deps/npm/node_modules/npm-registry-fetch/node_modules/minizlib/dist/commonjs/constants.js b/deps/npm/node_modules/npm-registry-fetch/node_modules/minizlib/dist/commonjs/constants.js
new file mode 100644
index 00000000000..dfc2c1957bf
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-fetch/node_modules/minizlib/dist/commonjs/constants.js
@@ -0,0 +1,123 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.constants = void 0;
+// Update with any zlib constants that are added or changed in the future.
+// Node v6 didn't export this, so we just hard code the version and rely
+// on all the other hard-coded values from zlib v4736. When node v6
+// support drops, we can just export the realZlibConstants object.
+const zlib_1 = __importDefault(require("zlib"));
+/* c8 ignore start */
+const realZlibConstants = zlib_1.default.constants || { ZLIB_VERNUM: 4736 };
+/* c8 ignore stop */
+exports.constants = Object.freeze(Object.assign(Object.create(null), {
+ Z_NO_FLUSH: 0,
+ Z_PARTIAL_FLUSH: 1,
+ Z_SYNC_FLUSH: 2,
+ Z_FULL_FLUSH: 3,
+ Z_FINISH: 4,
+ Z_BLOCK: 5,
+ Z_OK: 0,
+ Z_STREAM_END: 1,
+ Z_NEED_DICT: 2,
+ Z_ERRNO: -1,
+ Z_STREAM_ERROR: -2,
+ Z_DATA_ERROR: -3,
+ Z_MEM_ERROR: -4,
+ Z_BUF_ERROR: -5,
+ Z_VERSION_ERROR: -6,
+ Z_NO_COMPRESSION: 0,
+ Z_BEST_SPEED: 1,
+ Z_BEST_COMPRESSION: 9,
+ Z_DEFAULT_COMPRESSION: -1,
+ Z_FILTERED: 1,
+ Z_HUFFMAN_ONLY: 2,
+ Z_RLE: 3,
+ Z_FIXED: 4,
+ Z_DEFAULT_STRATEGY: 0,
+ DEFLATE: 1,
+ INFLATE: 2,
+ GZIP: 3,
+ GUNZIP: 4,
+ DEFLATERAW: 5,
+ INFLATERAW: 6,
+ UNZIP: 7,
+ BROTLI_DECODE: 8,
+ BROTLI_ENCODE: 9,
+ Z_MIN_WINDOWBITS: 8,
+ Z_MAX_WINDOWBITS: 15,
+ Z_DEFAULT_WINDOWBITS: 15,
+ Z_MIN_CHUNK: 64,
+ Z_MAX_CHUNK: Infinity,
+ Z_DEFAULT_CHUNK: 16384,
+ Z_MIN_MEMLEVEL: 1,
+ Z_MAX_MEMLEVEL: 9,
+ Z_DEFAULT_MEMLEVEL: 8,
+ Z_MIN_LEVEL: -1,
+ Z_MAX_LEVEL: 9,
+ Z_DEFAULT_LEVEL: -1,
+ BROTLI_OPERATION_PROCESS: 0,
+ BROTLI_OPERATION_FLUSH: 1,
+ BROTLI_OPERATION_FINISH: 2,
+ BROTLI_OPERATION_EMIT_METADATA: 3,
+ BROTLI_MODE_GENERIC: 0,
+ BROTLI_MODE_TEXT: 1,
+ BROTLI_MODE_FONT: 2,
+ BROTLI_DEFAULT_MODE: 0,
+ BROTLI_MIN_QUALITY: 0,
+ BROTLI_MAX_QUALITY: 11,
+ BROTLI_DEFAULT_QUALITY: 11,
+ BROTLI_MIN_WINDOW_BITS: 10,
+ BROTLI_MAX_WINDOW_BITS: 24,
+ BROTLI_LARGE_MAX_WINDOW_BITS: 30,
+ BROTLI_DEFAULT_WINDOW: 22,
+ BROTLI_MIN_INPUT_BLOCK_BITS: 16,
+ BROTLI_MAX_INPUT_BLOCK_BITS: 24,
+ BROTLI_PARAM_MODE: 0,
+ BROTLI_PARAM_QUALITY: 1,
+ BROTLI_PARAM_LGWIN: 2,
+ BROTLI_PARAM_LGBLOCK: 3,
+ BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING: 4,
+ BROTLI_PARAM_SIZE_HINT: 5,
+ BROTLI_PARAM_LARGE_WINDOW: 6,
+ BROTLI_PARAM_NPOSTFIX: 7,
+ BROTLI_PARAM_NDIRECT: 8,
+ BROTLI_DECODER_RESULT_ERROR: 0,
+ BROTLI_DECODER_RESULT_SUCCESS: 1,
+ BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT: 2,
+ BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT: 3,
+ BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION: 0,
+ BROTLI_DECODER_PARAM_LARGE_WINDOW: 1,
+ BROTLI_DECODER_NO_ERROR: 0,
+ BROTLI_DECODER_SUCCESS: 1,
+ BROTLI_DECODER_NEEDS_MORE_INPUT: 2,
+ BROTLI_DECODER_NEEDS_MORE_OUTPUT: 3,
+ BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE: -1,
+ BROTLI_DECODER_ERROR_FORMAT_RESERVED: -2,
+ BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE: -3,
+ BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET: -4,
+ BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME: -5,
+ BROTLI_DECODER_ERROR_FORMAT_CL_SPACE: -6,
+ BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE: -7,
+ BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT: -8,
+ BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1: -9,
+ BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2: -10,
+ BROTLI_DECODER_ERROR_FORMAT_TRANSFORM: -11,
+ BROTLI_DECODER_ERROR_FORMAT_DICTIONARY: -12,
+ BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS: -13,
+ BROTLI_DECODER_ERROR_FORMAT_PADDING_1: -14,
+ BROTLI_DECODER_ERROR_FORMAT_PADDING_2: -15,
+ BROTLI_DECODER_ERROR_FORMAT_DISTANCE: -16,
+ BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET: -19,
+ BROTLI_DECODER_ERROR_INVALID_ARGUMENTS: -20,
+ BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES: -21,
+ BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS: -22,
+ BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP: -25,
+ BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1: -26,
+ BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2: -27,
+ BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES: -30,
+ BROTLI_DECODER_ERROR_UNREACHABLE: -31,
+}, realZlibConstants));
+//# sourceMappingURL=constants.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/npm-registry-fetch/node_modules/minizlib/dist/commonjs/index.js b/deps/npm/node_modules/npm-registry-fetch/node_modules/minizlib/dist/commonjs/index.js
new file mode 100644
index 00000000000..ad65eef0495
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-fetch/node_modules/minizlib/dist/commonjs/index.js
@@ -0,0 +1,352 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.BrotliDecompress = exports.BrotliCompress = exports.Brotli = exports.Unzip = exports.InflateRaw = exports.DeflateRaw = exports.Gunzip = exports.Gzip = exports.Inflate = exports.Deflate = exports.Zlib = exports.ZlibError = exports.constants = void 0;
+const assert_1 = __importDefault(require("assert"));
+const buffer_1 = require("buffer");
+const minipass_1 = require("minipass");
+const zlib_1 = __importDefault(require("zlib"));
+const constants_js_1 = require("./constants.js");
+var constants_js_2 = require("./constants.js");
+Object.defineProperty(exports, "constants", { enumerable: true, get: function () { return constants_js_2.constants; } });
+const OriginalBufferConcat = buffer_1.Buffer.concat;
+const _superWrite = Symbol('_superWrite');
+class ZlibError extends Error {
+ code;
+ errno;
+ constructor(err) {
+ super('zlib: ' + err.message);
+ this.code = err.code;
+ this.errno = err.errno;
+ /* c8 ignore next */
+ if (!this.code)
+ this.code = 'ZLIB_ERROR';
+ this.message = 'zlib: ' + err.message;
+ Error.captureStackTrace(this, this.constructor);
+ }
+ get name() {
+ return 'ZlibError';
+ }
+}
+exports.ZlibError = ZlibError;
+// the Zlib class they all inherit from
+// This thing manages the queue of requests, and returns
+// true or false if there is anything in the queue when
+// you call the .write() method.
+const _flushFlag = Symbol('flushFlag');
+class ZlibBase extends minipass_1.Minipass {
+ #sawError = false;
+ #ended = false;
+ #flushFlag;
+ #finishFlushFlag;
+ #fullFlushFlag;
+ #handle;
+ #onError;
+ get sawError() {
+ return this.#sawError;
+ }
+ get handle() {
+ return this.#handle;
+ }
+ /* c8 ignore start */
+ get flushFlag() {
+ return this.#flushFlag;
+ }
+ /* c8 ignore stop */
+ constructor(opts, mode) {
+ if (!opts || typeof opts !== 'object')
+ throw new TypeError('invalid options for ZlibBase constructor');
+ //@ts-ignore
+ super(opts);
+ /* c8 ignore start */
+ this.#flushFlag = opts.flush ?? 0;
+ this.#finishFlushFlag = opts.finishFlush ?? 0;
+ this.#fullFlushFlag = opts.fullFlushFlag ?? 0;
+ /* c8 ignore stop */
+ // this will throw if any options are invalid for the class selected
+ try {
+ // @types/node doesn't know that it exports the classes, but they're there
+ //@ts-ignore
+ this.#handle = new zlib_1.default[mode](opts);
+ }
+ catch (er) {
+ // make sure that all errors get decorated properly
+ throw new ZlibError(er);
+ }
+ this.#onError = err => {
+ // no sense raising multiple errors, since we abort on the first one.
+ if (this.#sawError)
+ return;
+ this.#sawError = true;
+ // there is no way to cleanly recover.
+ // continuing only obscures problems.
+ this.close();
+ this.emit('error', err);
+ };
+ this.#handle?.on('error', er => this.#onError(new ZlibError(er)));
+ this.once('end', () => this.close);
+ }
+ close() {
+ if (this.#handle) {
+ this.#handle.close();
+ this.#handle = undefined;
+ this.emit('close');
+ }
+ }
+ reset() {
+ if (!this.#sawError) {
+ (0, assert_1.default)(this.#handle, 'zlib binding closed');
+ //@ts-ignore
+ return this.#handle.reset?.();
+ }
+ }
+ flush(flushFlag) {
+ if (this.ended)
+ return;
+ if (typeof flushFlag !== 'number')
+ flushFlag = this.#fullFlushFlag;
+ this.write(Object.assign(buffer_1.Buffer.alloc(0), { [_flushFlag]: flushFlag }));
+ }
+ end(chunk, encoding, cb) {
+ /* c8 ignore start */
+ if (typeof chunk === 'function') {
+ cb = chunk;
+ encoding = undefined;
+ chunk = undefined;
+ }
+ if (typeof encoding === 'function') {
+ cb = encoding;
+ encoding = undefined;
+ }
+ /* c8 ignore stop */
+ if (chunk) {
+ if (encoding)
+ this.write(chunk, encoding);
+ else
+ this.write(chunk);
+ }
+ this.flush(this.#finishFlushFlag);
+ this.#ended = true;
+ return super.end(cb);
+ }
+ get ended() {
+ return this.#ended;
+ }
+ // overridden in the gzip classes to do portable writes
+ [_superWrite](data) {
+ return super.write(data);
+ }
+ write(chunk, encoding, cb) {
+ // process the chunk using the sync process
+ // then super.write() all the outputted chunks
+ if (typeof encoding === 'function')
+ (cb = encoding), (encoding = 'utf8');
+ if (typeof chunk === 'string')
+ chunk = buffer_1.Buffer.from(chunk, encoding);
+ if (this.#sawError)
+ return;
+ (0, assert_1.default)(this.#handle, 'zlib binding closed');
+ // _processChunk tries to .close() the native handle after it's done, so we
+ // intercept that by temporarily making it a no-op.
+ // diving into the node:zlib internals a bit here
+ const nativeHandle = this.#handle
+ ._handle;
+ const originalNativeClose = nativeHandle.close;
+ nativeHandle.close = () => { };
+ const originalClose = this.#handle.close;
+ this.#handle.close = () => { };
+ // It also calls `Buffer.concat()` at the end, which may be convenient
+ // for some, but which we are not interested in as it slows us down.
+ buffer_1.Buffer.concat = args => args;
+ let result = undefined;
+ try {
+ const flushFlag = typeof chunk[_flushFlag] === 'number'
+ ? chunk[_flushFlag]
+ : this.#flushFlag;
+ result = this.#handle._processChunk(chunk, flushFlag);
+ // if we don't throw, reset it back how it was
+ buffer_1.Buffer.concat = OriginalBufferConcat;
+ }
+ catch (err) {
+ // or if we do, put Buffer.concat() back before we emit error
+ // Error events call into user code, which may call Buffer.concat()
+ buffer_1.Buffer.concat = OriginalBufferConcat;
+ this.#onError(new ZlibError(err));
+ }
+ finally {
+ if (this.#handle) {
+ // Core zlib resets `_handle` to null after attempting to close the
+ // native handle. Our no-op handler prevented actual closure, but we
+ // need to restore the `._handle` property.
+ ;
+ this.#handle._handle =
+ nativeHandle;
+ nativeHandle.close = originalNativeClose;
+ this.#handle.close = originalClose;
+ // `_processChunk()` adds an 'error' listener. If we don't remove it
+ // after each call, these handlers start piling up.
+ this.#handle.removeAllListeners('error');
+ // make sure OUR error listener is still attached tho
+ }
+ }
+ if (this.#handle)
+ this.#handle.on('error', er => this.#onError(new ZlibError(er)));
+ let writeReturn;
+ if (result) {
+ if (Array.isArray(result) && result.length > 0) {
+ const r = result[0];
+ // The first buffer is always `handle._outBuffer`, which would be
+ // re-used for later invocations; so, we always have to copy that one.
+ writeReturn = this[_superWrite](buffer_1.Buffer.from(r));
+ for (let i = 1; i < result.length; i++) {
+ writeReturn = this[_superWrite](result[i]);
+ }
+ }
+ else {
+ // either a single Buffer or an empty array
+ writeReturn = this[_superWrite](buffer_1.Buffer.from(result));
+ }
+ }
+ if (cb)
+ cb();
+ return writeReturn;
+ }
+}
+class Zlib extends ZlibBase {
+ #level;
+ #strategy;
+ constructor(opts, mode) {
+ opts = opts || {};
+ opts.flush = opts.flush || constants_js_1.constants.Z_NO_FLUSH;
+ opts.finishFlush = opts.finishFlush || constants_js_1.constants.Z_FINISH;
+ opts.fullFlushFlag = constants_js_1.constants.Z_FULL_FLUSH;
+ super(opts, mode);
+ this.#level = opts.level;
+ this.#strategy = opts.strategy;
+ }
+ params(level, strategy) {
+ if (this.sawError)
+ return;
+ if (!this.handle)
+ throw new Error('cannot switch params when binding is closed');
+ // no way to test this without also not supporting params at all
+ /* c8 ignore start */
+ if (!this.handle.params)
+ throw new Error('not supported in this implementation');
+ /* c8 ignore stop */
+ if (this.#level !== level || this.#strategy !== strategy) {
+ this.flush(constants_js_1.constants.Z_SYNC_FLUSH);
+ (0, assert_1.default)(this.handle, 'zlib binding closed');
+ // .params() calls .flush(), but the latter is always async in the
+ // core zlib. We override .flush() temporarily to intercept that and
+ // flush synchronously.
+ const origFlush = this.handle.flush;
+ this.handle.flush = (flushFlag, cb) => {
+ /* c8 ignore start */
+ if (typeof flushFlag === 'function') {
+ cb = flushFlag;
+ flushFlag = this.flushFlag;
+ }
+ /* c8 ignore stop */
+ this.flush(flushFlag);
+ cb?.();
+ };
+ try {
+ ;
+ this.handle.params(level, strategy);
+ }
+ finally {
+ this.handle.flush = origFlush;
+ }
+ /* c8 ignore start */
+ if (this.handle) {
+ this.#level = level;
+ this.#strategy = strategy;
+ }
+ /* c8 ignore stop */
+ }
+ }
+}
+exports.Zlib = Zlib;
+// minimal 2-byte header
+class Deflate extends Zlib {
+ constructor(opts) {
+ super(opts, 'Deflate');
+ }
+}
+exports.Deflate = Deflate;
+class Inflate extends Zlib {
+ constructor(opts) {
+ super(opts, 'Inflate');
+ }
+}
+exports.Inflate = Inflate;
+class Gzip extends Zlib {
+ #portable;
+ constructor(opts) {
+ super(opts, 'Gzip');
+ this.#portable = opts && !!opts.portable;
+ }
+ [_superWrite](data) {
+ if (!this.#portable)
+ return super[_superWrite](data);
+ // we'll always get the header emitted in one first chunk
+ // overwrite the OS indicator byte with 0xFF
+ this.#portable = false;
+ data[9] = 255;
+ return super[_superWrite](data);
+ }
+}
+exports.Gzip = Gzip;
+class Gunzip extends Zlib {
+ constructor(opts) {
+ super(opts, 'Gunzip');
+ }
+}
+exports.Gunzip = Gunzip;
+// raw - no header
+class DeflateRaw extends Zlib {
+ constructor(opts) {
+ super(opts, 'DeflateRaw');
+ }
+}
+exports.DeflateRaw = DeflateRaw;
+class InflateRaw extends Zlib {
+ constructor(opts) {
+ super(opts, 'InflateRaw');
+ }
+}
+exports.InflateRaw = InflateRaw;
+// auto-detect header.
+class Unzip extends Zlib {
+ constructor(opts) {
+ super(opts, 'Unzip');
+ }
+}
+exports.Unzip = Unzip;
+class Brotli extends ZlibBase {
+ constructor(opts, mode) {
+ opts = opts || {};
+ opts.flush = opts.flush || constants_js_1.constants.BROTLI_OPERATION_PROCESS;
+ opts.finishFlush =
+ opts.finishFlush || constants_js_1.constants.BROTLI_OPERATION_FINISH;
+ opts.fullFlushFlag = constants_js_1.constants.BROTLI_OPERATION_FLUSH;
+ super(opts, mode);
+ }
+}
+exports.Brotli = Brotli;
+class BrotliCompress extends Brotli {
+ constructor(opts) {
+ super(opts, 'BrotliCompress');
+ }
+}
+exports.BrotliCompress = BrotliCompress;
+class BrotliDecompress extends Brotli {
+ constructor(opts) {
+ super(opts, 'BrotliDecompress');
+ }
+}
+exports.BrotliDecompress = BrotliDecompress;
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/npm-registry-fetch/node_modules/minizlib/dist/commonjs/package.json b/deps/npm/node_modules/npm-registry-fetch/node_modules/minizlib/dist/commonjs/package.json
new file mode 100644
index 00000000000..5bbefffbabe
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-fetch/node_modules/minizlib/dist/commonjs/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "commonjs"
+}
diff --git a/deps/npm/node_modules/npm-registry-fetch/node_modules/minizlib/dist/esm/constants.js b/deps/npm/node_modules/npm-registry-fetch/node_modules/minizlib/dist/esm/constants.js
new file mode 100644
index 00000000000..7faf40be506
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-fetch/node_modules/minizlib/dist/esm/constants.js
@@ -0,0 +1,117 @@
+// Update with any zlib constants that are added or changed in the future.
+// Node v6 didn't export this, so we just hard code the version and rely
+// on all the other hard-coded values from zlib v4736. When node v6
+// support drops, we can just export the realZlibConstants object.
+import realZlib from 'zlib';
+/* c8 ignore start */
+const realZlibConstants = realZlib.constants || { ZLIB_VERNUM: 4736 };
+/* c8 ignore stop */
+export const constants = Object.freeze(Object.assign(Object.create(null), {
+ Z_NO_FLUSH: 0,
+ Z_PARTIAL_FLUSH: 1,
+ Z_SYNC_FLUSH: 2,
+ Z_FULL_FLUSH: 3,
+ Z_FINISH: 4,
+ Z_BLOCK: 5,
+ Z_OK: 0,
+ Z_STREAM_END: 1,
+ Z_NEED_DICT: 2,
+ Z_ERRNO: -1,
+ Z_STREAM_ERROR: -2,
+ Z_DATA_ERROR: -3,
+ Z_MEM_ERROR: -4,
+ Z_BUF_ERROR: -5,
+ Z_VERSION_ERROR: -6,
+ Z_NO_COMPRESSION: 0,
+ Z_BEST_SPEED: 1,
+ Z_BEST_COMPRESSION: 9,
+ Z_DEFAULT_COMPRESSION: -1,
+ Z_FILTERED: 1,
+ Z_HUFFMAN_ONLY: 2,
+ Z_RLE: 3,
+ Z_FIXED: 4,
+ Z_DEFAULT_STRATEGY: 0,
+ DEFLATE: 1,
+ INFLATE: 2,
+ GZIP: 3,
+ GUNZIP: 4,
+ DEFLATERAW: 5,
+ INFLATERAW: 6,
+ UNZIP: 7,
+ BROTLI_DECODE: 8,
+ BROTLI_ENCODE: 9,
+ Z_MIN_WINDOWBITS: 8,
+ Z_MAX_WINDOWBITS: 15,
+ Z_DEFAULT_WINDOWBITS: 15,
+ Z_MIN_CHUNK: 64,
+ Z_MAX_CHUNK: Infinity,
+ Z_DEFAULT_CHUNK: 16384,
+ Z_MIN_MEMLEVEL: 1,
+ Z_MAX_MEMLEVEL: 9,
+ Z_DEFAULT_MEMLEVEL: 8,
+ Z_MIN_LEVEL: -1,
+ Z_MAX_LEVEL: 9,
+ Z_DEFAULT_LEVEL: -1,
+ BROTLI_OPERATION_PROCESS: 0,
+ BROTLI_OPERATION_FLUSH: 1,
+ BROTLI_OPERATION_FINISH: 2,
+ BROTLI_OPERATION_EMIT_METADATA: 3,
+ BROTLI_MODE_GENERIC: 0,
+ BROTLI_MODE_TEXT: 1,
+ BROTLI_MODE_FONT: 2,
+ BROTLI_DEFAULT_MODE: 0,
+ BROTLI_MIN_QUALITY: 0,
+ BROTLI_MAX_QUALITY: 11,
+ BROTLI_DEFAULT_QUALITY: 11,
+ BROTLI_MIN_WINDOW_BITS: 10,
+ BROTLI_MAX_WINDOW_BITS: 24,
+ BROTLI_LARGE_MAX_WINDOW_BITS: 30,
+ BROTLI_DEFAULT_WINDOW: 22,
+ BROTLI_MIN_INPUT_BLOCK_BITS: 16,
+ BROTLI_MAX_INPUT_BLOCK_BITS: 24,
+ BROTLI_PARAM_MODE: 0,
+ BROTLI_PARAM_QUALITY: 1,
+ BROTLI_PARAM_LGWIN: 2,
+ BROTLI_PARAM_LGBLOCK: 3,
+ BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING: 4,
+ BROTLI_PARAM_SIZE_HINT: 5,
+ BROTLI_PARAM_LARGE_WINDOW: 6,
+ BROTLI_PARAM_NPOSTFIX: 7,
+ BROTLI_PARAM_NDIRECT: 8,
+ BROTLI_DECODER_RESULT_ERROR: 0,
+ BROTLI_DECODER_RESULT_SUCCESS: 1,
+ BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT: 2,
+ BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT: 3,
+ BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION: 0,
+ BROTLI_DECODER_PARAM_LARGE_WINDOW: 1,
+ BROTLI_DECODER_NO_ERROR: 0,
+ BROTLI_DECODER_SUCCESS: 1,
+ BROTLI_DECODER_NEEDS_MORE_INPUT: 2,
+ BROTLI_DECODER_NEEDS_MORE_OUTPUT: 3,
+ BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE: -1,
+ BROTLI_DECODER_ERROR_FORMAT_RESERVED: -2,
+ BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE: -3,
+ BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET: -4,
+ BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME: -5,
+ BROTLI_DECODER_ERROR_FORMAT_CL_SPACE: -6,
+ BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE: -7,
+ BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT: -8,
+ BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1: -9,
+ BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2: -10,
+ BROTLI_DECODER_ERROR_FORMAT_TRANSFORM: -11,
+ BROTLI_DECODER_ERROR_FORMAT_DICTIONARY: -12,
+ BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS: -13,
+ BROTLI_DECODER_ERROR_FORMAT_PADDING_1: -14,
+ BROTLI_DECODER_ERROR_FORMAT_PADDING_2: -15,
+ BROTLI_DECODER_ERROR_FORMAT_DISTANCE: -16,
+ BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET: -19,
+ BROTLI_DECODER_ERROR_INVALID_ARGUMENTS: -20,
+ BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES: -21,
+ BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS: -22,
+ BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP: -25,
+ BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1: -26,
+ BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2: -27,
+ BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES: -30,
+ BROTLI_DECODER_ERROR_UNREACHABLE: -31,
+}, realZlibConstants));
+//# sourceMappingURL=constants.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/npm-registry-fetch/node_modules/minizlib/dist/esm/index.js b/deps/npm/node_modules/npm-registry-fetch/node_modules/minizlib/dist/esm/index.js
new file mode 100644
index 00000000000..a6269b505f4
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-fetch/node_modules/minizlib/dist/esm/index.js
@@ -0,0 +1,333 @@
+import assert from 'assert';
+import { Buffer } from 'buffer';
+import { Minipass } from 'minipass';
+import realZlib from 'zlib';
+import { constants } from './constants.js';
+export { constants } from './constants.js';
+const OriginalBufferConcat = Buffer.concat;
+const _superWrite = Symbol('_superWrite');
+export class ZlibError extends Error {
+ code;
+ errno;
+ constructor(err) {
+ super('zlib: ' + err.message);
+ this.code = err.code;
+ this.errno = err.errno;
+ /* c8 ignore next */
+ if (!this.code)
+ this.code = 'ZLIB_ERROR';
+ this.message = 'zlib: ' + err.message;
+ Error.captureStackTrace(this, this.constructor);
+ }
+ get name() {
+ return 'ZlibError';
+ }
+}
+// the Zlib class they all inherit from
+// This thing manages the queue of requests, and returns
+// true or false if there is anything in the queue when
+// you call the .write() method.
+const _flushFlag = Symbol('flushFlag');
+class ZlibBase extends Minipass {
+ #sawError = false;
+ #ended = false;
+ #flushFlag;
+ #finishFlushFlag;
+ #fullFlushFlag;
+ #handle;
+ #onError;
+ get sawError() {
+ return this.#sawError;
+ }
+ get handle() {
+ return this.#handle;
+ }
+ /* c8 ignore start */
+ get flushFlag() {
+ return this.#flushFlag;
+ }
+ /* c8 ignore stop */
+ constructor(opts, mode) {
+ if (!opts || typeof opts !== 'object')
+ throw new TypeError('invalid options for ZlibBase constructor');
+ //@ts-ignore
+ super(opts);
+ /* c8 ignore start */
+ this.#flushFlag = opts.flush ?? 0;
+ this.#finishFlushFlag = opts.finishFlush ?? 0;
+ this.#fullFlushFlag = opts.fullFlushFlag ?? 0;
+ /* c8 ignore stop */
+ // this will throw if any options are invalid for the class selected
+ try {
+ // @types/node doesn't know that it exports the classes, but they're there
+ //@ts-ignore
+ this.#handle = new realZlib[mode](opts);
+ }
+ catch (er) {
+ // make sure that all errors get decorated properly
+ throw new ZlibError(er);
+ }
+ this.#onError = err => {
+ // no sense raising multiple errors, since we abort on the first one.
+ if (this.#sawError)
+ return;
+ this.#sawError = true;
+ // there is no way to cleanly recover.
+ // continuing only obscures problems.
+ this.close();
+ this.emit('error', err);
+ };
+ this.#handle?.on('error', er => this.#onError(new ZlibError(er)));
+ this.once('end', () => this.close);
+ }
+ close() {
+ if (this.#handle) {
+ this.#handle.close();
+ this.#handle = undefined;
+ this.emit('close');
+ }
+ }
+ reset() {
+ if (!this.#sawError) {
+ assert(this.#handle, 'zlib binding closed');
+ //@ts-ignore
+ return this.#handle.reset?.();
+ }
+ }
+ flush(flushFlag) {
+ if (this.ended)
+ return;
+ if (typeof flushFlag !== 'number')
+ flushFlag = this.#fullFlushFlag;
+ this.write(Object.assign(Buffer.alloc(0), { [_flushFlag]: flushFlag }));
+ }
+ end(chunk, encoding, cb) {
+ /* c8 ignore start */
+ if (typeof chunk === 'function') {
+ cb = chunk;
+ encoding = undefined;
+ chunk = undefined;
+ }
+ if (typeof encoding === 'function') {
+ cb = encoding;
+ encoding = undefined;
+ }
+ /* c8 ignore stop */
+ if (chunk) {
+ if (encoding)
+ this.write(chunk, encoding);
+ else
+ this.write(chunk);
+ }
+ this.flush(this.#finishFlushFlag);
+ this.#ended = true;
+ return super.end(cb);
+ }
+ get ended() {
+ return this.#ended;
+ }
+ // overridden in the gzip classes to do portable writes
+ [_superWrite](data) {
+ return super.write(data);
+ }
+ write(chunk, encoding, cb) {
+ // process the chunk using the sync process
+ // then super.write() all the outputted chunks
+ if (typeof encoding === 'function')
+ (cb = encoding), (encoding = 'utf8');
+ if (typeof chunk === 'string')
+ chunk = Buffer.from(chunk, encoding);
+ if (this.#sawError)
+ return;
+ assert(this.#handle, 'zlib binding closed');
+ // _processChunk tries to .close() the native handle after it's done, so we
+ // intercept that by temporarily making it a no-op.
+ // diving into the node:zlib internals a bit here
+ const nativeHandle = this.#handle
+ ._handle;
+ const originalNativeClose = nativeHandle.close;
+ nativeHandle.close = () => { };
+ const originalClose = this.#handle.close;
+ this.#handle.close = () => { };
+ // It also calls `Buffer.concat()` at the end, which may be convenient
+ // for some, but which we are not interested in as it slows us down.
+ Buffer.concat = args => args;
+ let result = undefined;
+ try {
+ const flushFlag = typeof chunk[_flushFlag] === 'number'
+ ? chunk[_flushFlag]
+ : this.#flushFlag;
+ result = this.#handle._processChunk(chunk, flushFlag);
+ // if we don't throw, reset it back how it was
+ Buffer.concat = OriginalBufferConcat;
+ }
+ catch (err) {
+ // or if we do, put Buffer.concat() back before we emit error
+ // Error events call into user code, which may call Buffer.concat()
+ Buffer.concat = OriginalBufferConcat;
+ this.#onError(new ZlibError(err));
+ }
+ finally {
+ if (this.#handle) {
+ // Core zlib resets `_handle` to null after attempting to close the
+ // native handle. Our no-op handler prevented actual closure, but we
+ // need to restore the `._handle` property.
+ ;
+ this.#handle._handle =
+ nativeHandle;
+ nativeHandle.close = originalNativeClose;
+ this.#handle.close = originalClose;
+ // `_processChunk()` adds an 'error' listener. If we don't remove it
+ // after each call, these handlers start piling up.
+ this.#handle.removeAllListeners('error');
+ // make sure OUR error listener is still attached tho
+ }
+ }
+ if (this.#handle)
+ this.#handle.on('error', er => this.#onError(new ZlibError(er)));
+ let writeReturn;
+ if (result) {
+ if (Array.isArray(result) && result.length > 0) {
+ const r = result[0];
+ // The first buffer is always `handle._outBuffer`, which would be
+ // re-used for later invocations; so, we always have to copy that one.
+ writeReturn = this[_superWrite](Buffer.from(r));
+ for (let i = 1; i < result.length; i++) {
+ writeReturn = this[_superWrite](result[i]);
+ }
+ }
+ else {
+ // either a single Buffer or an empty array
+ writeReturn = this[_superWrite](Buffer.from(result));
+ }
+ }
+ if (cb)
+ cb();
+ return writeReturn;
+ }
+}
+export class Zlib extends ZlibBase {
+ #level;
+ #strategy;
+ constructor(opts, mode) {
+ opts = opts || {};
+ opts.flush = opts.flush || constants.Z_NO_FLUSH;
+ opts.finishFlush = opts.finishFlush || constants.Z_FINISH;
+ opts.fullFlushFlag = constants.Z_FULL_FLUSH;
+ super(opts, mode);
+ this.#level = opts.level;
+ this.#strategy = opts.strategy;
+ }
+ params(level, strategy) {
+ if (this.sawError)
+ return;
+ if (!this.handle)
+ throw new Error('cannot switch params when binding is closed');
+ // no way to test this without also not supporting params at all
+ /* c8 ignore start */
+ if (!this.handle.params)
+ throw new Error('not supported in this implementation');
+ /* c8 ignore stop */
+ if (this.#level !== level || this.#strategy !== strategy) {
+ this.flush(constants.Z_SYNC_FLUSH);
+ assert(this.handle, 'zlib binding closed');
+ // .params() calls .flush(), but the latter is always async in the
+ // core zlib. We override .flush() temporarily to intercept that and
+ // flush synchronously.
+ const origFlush = this.handle.flush;
+ this.handle.flush = (flushFlag, cb) => {
+ /* c8 ignore start */
+ if (typeof flushFlag === 'function') {
+ cb = flushFlag;
+ flushFlag = this.flushFlag;
+ }
+ /* c8 ignore stop */
+ this.flush(flushFlag);
+ cb?.();
+ };
+ try {
+ ;
+ this.handle.params(level, strategy);
+ }
+ finally {
+ this.handle.flush = origFlush;
+ }
+ /* c8 ignore start */
+ if (this.handle) {
+ this.#level = level;
+ this.#strategy = strategy;
+ }
+ /* c8 ignore stop */
+ }
+ }
+}
+// minimal 2-byte header
+export class Deflate extends Zlib {
+ constructor(opts) {
+ super(opts, 'Deflate');
+ }
+}
+export class Inflate extends Zlib {
+ constructor(opts) {
+ super(opts, 'Inflate');
+ }
+}
+export class Gzip extends Zlib {
+ #portable;
+ constructor(opts) {
+ super(opts, 'Gzip');
+ this.#portable = opts && !!opts.portable;
+ }
+ [_superWrite](data) {
+ if (!this.#portable)
+ return super[_superWrite](data);
+ // we'll always get the header emitted in one first chunk
+ // overwrite the OS indicator byte with 0xFF
+ this.#portable = false;
+ data[9] = 255;
+ return super[_superWrite](data);
+ }
+}
+export class Gunzip extends Zlib {
+ constructor(opts) {
+ super(opts, 'Gunzip');
+ }
+}
+// raw - no header
+export class DeflateRaw extends Zlib {
+ constructor(opts) {
+ super(opts, 'DeflateRaw');
+ }
+}
+export class InflateRaw extends Zlib {
+ constructor(opts) {
+ super(opts, 'InflateRaw');
+ }
+}
+// auto-detect header.
+export class Unzip extends Zlib {
+ constructor(opts) {
+ super(opts, 'Unzip');
+ }
+}
+export class Brotli extends ZlibBase {
+ constructor(opts, mode) {
+ opts = opts || {};
+ opts.flush = opts.flush || constants.BROTLI_OPERATION_PROCESS;
+ opts.finishFlush =
+ opts.finishFlush || constants.BROTLI_OPERATION_FINISH;
+ opts.fullFlushFlag = constants.BROTLI_OPERATION_FLUSH;
+ super(opts, mode);
+ }
+}
+export class BrotliCompress extends Brotli {
+ constructor(opts) {
+ super(opts, 'BrotliCompress');
+ }
+}
+export class BrotliDecompress extends Brotli {
+ constructor(opts) {
+ super(opts, 'BrotliDecompress');
+ }
+}
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/npm-registry-fetch/node_modules/minizlib/dist/esm/package.json b/deps/npm/node_modules/npm-registry-fetch/node_modules/minizlib/dist/esm/package.json
new file mode 100644
index 00000000000..3dbc1ca591c
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-fetch/node_modules/minizlib/dist/esm/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "module"
+}
diff --git a/deps/npm/node_modules/npm-registry-fetch/node_modules/minizlib/package.json b/deps/npm/node_modules/npm-registry-fetch/node_modules/minizlib/package.json
new file mode 100644
index 00000000000..e94623ff43d
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-fetch/node_modules/minizlib/package.json
@@ -0,0 +1,81 @@
+{
+ "name": "minizlib",
+ "version": "3.0.1",
+ "description": "A small fast zlib stream built on [minipass](http://npm.im/minipass) and Node.js's zlib binding.",
+ "main": "./dist/commonjs/index.js",
+ "dependencies": {
+ "minipass": "^7.0.4",
+ "rimraf": "^5.0.5"
+ },
+ "scripts": {
+ "prepare": "tshy",
+ "pretest": "npm run prepare",
+ "test": "tap",
+ "preversion": "npm test",
+ "postversion": "npm publish",
+ "prepublishOnly": "git push origin --follow-tags",
+ "format": "prettier --write . --loglevel warn",
+ "typedoc": "typedoc --tsconfig .tshy/esm.json ./src/*.ts"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/isaacs/minizlib.git"
+ },
+ "keywords": [
+ "zlib",
+ "gzip",
+ "gunzip",
+ "deflate",
+ "inflate",
+ "compression",
+ "zip",
+ "unzip"
+ ],
+ "author": "Isaac Z. Schlueter (http://blog.izs.me/)",
+ "license": "MIT",
+ "devDependencies": {
+ "@types/node": "^20.11.29",
+ "mkdirp": "^3.0.1",
+ "tap": "^18.7.1",
+ "tshy": "^1.12.0",
+ "typedoc": "^0.25.12"
+ },
+ "files": [
+ "dist"
+ ],
+ "engines": {
+ "node": ">= 18"
+ },
+ "tshy": {
+ "exports": {
+ "./package.json": "./package.json",
+ ".": "./src/index.ts"
+ }
+ },
+ "exports": {
+ "./package.json": "./package.json",
+ ".": {
+ "import": {
+ "types": "./dist/esm/index.d.ts",
+ "default": "./dist/esm/index.js"
+ },
+ "require": {
+ "types": "./dist/commonjs/index.d.ts",
+ "default": "./dist/commonjs/index.js"
+ }
+ }
+ },
+ "types": "./dist/commonjs/index.d.ts",
+ "type": "module",
+ "prettier": {
+ "semi": false,
+ "printWidth": 75,
+ "tabWidth": 2,
+ "useTabs": false,
+ "singleQuote": true,
+ "jsxSingleQuote": false,
+ "bracketSameLine": true,
+ "arrowParens": "avoid",
+ "endOfLine": "lf"
+ }
+}
diff --git a/deps/npm/node_modules/npm-registry-fetch/package.json b/deps/npm/node_modules/npm-registry-fetch/package.json
index 07ea620d153..559473b964a 100644
--- a/deps/npm/node_modules/npm-registry-fetch/package.json
+++ b/deps/npm/node_modules/npm-registry-fetch/package.json
@@ -1,6 +1,6 @@
{
"name": "npm-registry-fetch",
- "version": "17.1.0",
+ "version": "18.0.1",
"description": "Fetch-based http client for use with npm registry APIs",
"main": "lib",
"files": [
@@ -8,9 +8,9 @@
"lib/"
],
"scripts": {
- "eslint": "eslint",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
- "lintfix": "npm run lint -- --fix",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
+ "lintfix": "npm run eslint -- --fix",
"test": "tap",
"posttest": "npm run lint",
"npmclilint": "npmcli-lint",
@@ -31,22 +31,22 @@
"author": "GitHub Inc.",
"license": "ISC",
"dependencies": {
- "@npmcli/redact": "^2.0.0",
+ "@npmcli/redact": "^3.0.0",
"jsonparse": "^1.3.1",
- "make-fetch-happen": "^13.0.0",
+ "make-fetch-happen": "^14.0.0",
"minipass": "^7.0.2",
- "minipass-fetch": "^3.0.0",
- "minizlib": "^2.1.2",
- "npm-package-arg": "^11.0.0",
- "proc-log": "^4.0.0"
+ "minipass-fetch": "^4.0.0",
+ "minizlib": "^3.0.1",
+ "npm-package-arg": "^12.0.0",
+ "proc-log": "^5.0.0"
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.22.0",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"cacache": "^18.0.0",
"nock": "^13.2.4",
"require-inject": "^1.4.4",
- "ssri": "^10.0.0",
+ "ssri": "^12.0.0",
"tap": "^16.0.1"
},
"tap": {
@@ -58,11 +58,11 @@
]
},
"engines": {
- "node": "^16.14.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.22.0",
+ "version": "4.23.3",
"publish": "true"
}
}
diff --git a/deps/npm/node_modules/npm-user-validate/package.json b/deps/npm/node_modules/npm-user-validate/package.json
index 15a1305356e..8c66f8f3e47 100644
--- a/deps/npm/node_modules/npm-user-validate/package.json
+++ b/deps/npm/node_modules/npm-user-validate/package.json
@@ -1,21 +1,22 @@
{
"name": "npm-user-validate",
- "version": "2.0.1",
+ "version": "3.0.0",
"description": "User validations for npm",
"main": "lib/index.js",
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.1",
- "@npmcli/template-oss": "4.22.0",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"tap": "^16.3.2"
},
"scripts": {
"test": "tap",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
"postlint": "template-oss-check",
"template-oss-apply": "template-oss-apply --force",
- "lintfix": "npm run lint -- --fix",
+ "lintfix": "npm run eslint -- --fix",
"snap": "tap",
- "posttest": "npm run lint"
+ "posttest": "npm run lint",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"repository": {
"type": "git",
@@ -33,11 +34,11 @@
"lib/"
],
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.22.0",
+ "version": "4.23.3",
"publish": true
},
"tap": {
diff --git a/deps/npm/node_modules/pacote/package.json b/deps/npm/node_modules/pacote/package.json
index caadaf2db50..0eb8261af96 100644
--- a/deps/npm/node_modules/pacote/package.json
+++ b/deps/npm/node_modules/pacote/package.json
@@ -1,6 +1,6 @@
{
"name": "pacote",
- "version": "18.0.6",
+ "version": "19.0.0",
"description": "JavaScript package downloader",
"author": "GitHub Inc.",
"bin": {
@@ -11,11 +11,12 @@
"scripts": {
"test": "tap",
"snap": "tap",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
"postlint": "template-oss-check",
- "lintfix": "npm run lint -- --fix",
+ "lintfix": "npm run eslint -- --fix",
"posttest": "npm run lint",
- "template-oss-apply": "template-oss-apply --force"
+ "template-oss-apply": "template-oss-apply --force",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"tap": {
"timeout": 300,
@@ -26,9 +27,9 @@
},
"devDependencies": {
"@npmcli/arborist": "^7.1.0",
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.22.0",
- "hosted-git-info": "^7.0.0",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
+ "hosted-git-info": "^8.0.0",
"mutate-fs": "^2.1.1",
"nock": "^13.2.4",
"npm-registry-mock": "^1.3.2",
@@ -44,26 +45,26 @@
"git"
],
"dependencies": {
- "@npmcli/git": "^5.0.0",
- "@npmcli/installed-package-contents": "^2.0.1",
- "@npmcli/package-json": "^5.1.0",
- "@npmcli/promise-spawn": "^7.0.0",
- "@npmcli/run-script": "^8.0.0",
- "cacache": "^18.0.0",
+ "@npmcli/git": "^6.0.0",
+ "@npmcli/installed-package-contents": "^3.0.0",
+ "@npmcli/package-json": "^6.0.0",
+ "@npmcli/promise-spawn": "^8.0.0",
+ "@npmcli/run-script": "^9.0.0",
+ "cacache": "^19.0.0",
"fs-minipass": "^3.0.0",
"minipass": "^7.0.2",
- "npm-package-arg": "^11.0.0",
- "npm-packlist": "^8.0.0",
- "npm-pick-manifest": "^9.0.0",
- "npm-registry-fetch": "^17.0.0",
- "proc-log": "^4.0.0",
+ "npm-package-arg": "^12.0.0",
+ "npm-packlist": "^9.0.0",
+ "npm-pick-manifest": "^10.0.0",
+ "npm-registry-fetch": "^18.0.0",
+ "proc-log": "^5.0.0",
"promise-retry": "^2.0.1",
"sigstore": "^2.2.0",
- "ssri": "^10.0.0",
+ "ssri": "^12.0.0",
"tar": "^6.1.11"
},
"engines": {
- "node": "^16.14.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"repository": {
"type": "git",
@@ -71,7 +72,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.22.0",
+ "version": "4.23.3",
"windowsCI": false,
"publish": "true"
}
diff --git a/deps/npm/node_modules/parse-conflict-json/package.json b/deps/npm/node_modules/parse-conflict-json/package.json
index 32584d3e640..824ca8ed2bd 100644
--- a/deps/npm/node_modules/parse-conflict-json/package.json
+++ b/deps/npm/node_modules/parse-conflict-json/package.json
@@ -1,6 +1,6 @@
{
"name": "parse-conflict-json",
- "version": "3.0.1",
+ "version": "4.0.0",
"description": "Parse a JSON string that has git merge conflicts, resolving if possible",
"author": "GitHub Inc.",
"license": "ISC",
@@ -8,11 +8,12 @@
"scripts": {
"test": "tap",
"snap": "tap",
- "lint": "eslint \"**/*.js\"",
+ "lint": "npm run eslint",
"postlint": "template-oss-check",
- "lintfix": "npm run lint -- --fix",
+ "lintfix": "npm run eslint -- --fix",
"posttest": "npm run lint",
- "template-oss-apply": "template-oss-apply --force"
+ "template-oss-apply": "template-oss-apply --force",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"tap": {
"check-coverage": true,
@@ -22,28 +23,29 @@
]
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.12.0",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"tap": "^16.0.1"
},
"dependencies": {
- "json-parse-even-better-errors": "^3.0.0",
+ "json-parse-even-better-errors": "^4.0.0",
"just-diff": "^6.0.0",
"just-diff-apply": "^5.2.0"
},
"repository": {
"type": "git",
- "url": "https://github.com/npm/parse-conflict-json.git"
+ "url": "git+https://github.com/npm/parse-conflict-json.git"
},
"files": [
"bin/",
"lib/"
],
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.12.0"
+ "version": "4.23.3",
+ "publish": true
}
}
diff --git a/deps/npm/node_modules/proc-log/package.json b/deps/npm/node_modules/proc-log/package.json
index 4ab89102ecc..957209d3954 100644
--- a/deps/npm/node_modules/proc-log/package.json
+++ b/deps/npm/node_modules/proc-log/package.json
@@ -1,6 +1,6 @@
{
"name": "proc-log",
- "version": "4.2.0",
+ "version": "5.0.0",
"files": [
"bin/",
"lib/"
@@ -9,7 +9,7 @@
"description": "just emit 'log' events on the process object",
"repository": {
"type": "git",
- "url": "https://github.com/npm/proc-log.git"
+ "url": "git+https://github.com/npm/proc-log.git"
},
"author": "GitHub Inc.",
"license": "ISC",
@@ -18,22 +18,23 @@
"snap": "tap",
"posttest": "npm run lint",
"postsnap": "eslint index.js test/*.js --fix",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
"postlint": "template-oss-check",
- "lintfix": "npm run lint -- --fix",
- "template-oss-apply": "template-oss-apply --force"
+ "lintfix": "npm run eslint -- --fix",
+ "template-oss-apply": "template-oss-apply --force",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.21.3",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"tap": "^16.0.1"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.21.3",
+ "version": "4.23.3",
"publish": true
},
"tap": {
diff --git a/deps/npm/node_modules/proggy/package.json b/deps/npm/node_modules/proggy/package.json
index 4940fc9d002..01ac44b4af1 100644
--- a/deps/npm/node_modules/proggy/package.json
+++ b/deps/npm/node_modules/proggy/package.json
@@ -1,6 +1,6 @@
{
"name": "proggy",
- "version": "2.0.0",
+ "version": "3.0.0",
"files": [
"bin/",
"lib/"
@@ -9,7 +9,7 @@
"description": "Progress bar updates at a distance",
"repository": {
"type": "git",
- "url": "https://github.com/npm/proggy.git"
+ "url": "git+https://github.com/npm/proggy.git"
},
"author": "GitHub Inc.",
"license": "ISC",
@@ -18,17 +18,18 @@
"posttest": "npm run lint",
"snap": "tap",
"postsnap": "eslint lib test --fix",
- "lint": "eslint \"**/*.js\"",
+ "lint": "npm run eslint",
"postlint": "template-oss-check",
- "lintfix": "npm run lint -- --fix",
- "template-oss-apply": "template-oss-apply --force"
+ "lintfix": "npm run eslint -- --fix",
+ "template-oss-apply": "template-oss-apply --force",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"devDependencies": {
- "@npmcli/eslint-config": "^3.0.1",
- "@npmcli/template-oss": "4.5.1",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"chalk": "^4.1.2",
"cli-progress": "^3.10.0",
- "npmlog": "^6.0.1",
+ "npmlog": "^7.0.0",
"tap": "^16.0.1"
},
"tap": {
@@ -39,10 +40,11 @@
]
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.5.1"
+ "version": "4.23.3",
+ "publish": true
}
}
diff --git a/deps/npm/node_modules/promzard/package.json b/deps/npm/node_modules/promzard/package.json
index 71b0ed439a4..c224a4b458e 100644
--- a/deps/npm/node_modules/promzard/package.json
+++ b/deps/npm/node_modules/promzard/package.json
@@ -2,28 +2,29 @@
"author": "GitHub Inc.",
"name": "promzard",
"description": "prompting wizardly",
- "version": "1.0.2",
+ "version": "2.0.0",
"repository": {
"url": "git+https://github.com/npm/promzard.git",
"type": "git"
},
"dependencies": {
- "read": "^3.0.1"
+ "read": "^4.0.0"
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.22.0",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"tap": "^16.3.0"
},
"main": "lib/index.js",
"scripts": {
"test": "tap",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
"postlint": "template-oss-check",
"template-oss-apply": "template-oss-apply --force",
- "lintfix": "npm run lint -- --fix",
+ "lintfix": "npm run eslint -- --fix",
"snap": "tap",
- "posttest": "npm run lint"
+ "posttest": "npm run lint",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"license": "ISC",
"files": [
@@ -31,11 +32,11 @@
"lib/"
],
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.22.0",
+ "version": "4.23.3",
"publish": true
},
"tap": {
diff --git a/deps/npm/node_modules/read-cmd-shim/package.json b/deps/npm/node_modules/read-cmd-shim/package.json
index 401ee3d7101..3b16802df3c 100644
--- a/deps/npm/node_modules/read-cmd-shim/package.json
+++ b/deps/npm/node_modules/read-cmd-shim/package.json
@@ -1,23 +1,23 @@
{
"name": "read-cmd-shim",
- "version": "4.0.0",
+ "version": "5.0.0",
"description": "Figure out what a cmd-shim is pointing at. This acts as the equivalent of fs.readlink.",
"main": "lib/index.js",
"devDependencies": {
- "@npmcli/eslint-config": "^3.0.1",
- "@npmcli/template-oss": "4.5.1",
- "cmd-shim": "^5.0.0",
- "rimraf": "^3.0.0",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
+ "cmd-shim": "^7.0.0",
"tap": "^16.0.1"
},
"scripts": {
"test": "tap",
- "lint": "eslint \"**/*.js\"",
+ "lint": "npm run eslint",
"postlint": "template-oss-check",
"template-oss-apply": "template-oss-apply --force",
- "lintfix": "npm run lint -- --fix",
+ "lintfix": "npm run eslint -- --fix",
"snap": "tap",
- "posttest": "npm run lint"
+ "posttest": "npm run lint",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"tap": {
"check-coverage": true,
@@ -28,7 +28,7 @@
},
"repository": {
"type": "git",
- "url": "https://github.com/npm/read-cmd-shim.git"
+ "url": "git+https://github.com/npm/read-cmd-shim.git"
},
"license": "ISC",
"homepage": "https://github.com/npm/read-cmd-shim#readme",
@@ -38,10 +38,11 @@
],
"author": "GitHub Inc.",
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.5.1"
+ "version": "4.23.3",
+ "publish": true
}
}
diff --git a/deps/npm/node_modules/read-package-json-fast/package.json b/deps/npm/node_modules/read-package-json-fast/package.json
index 4964bb0a934..20208329e24 100644
--- a/deps/npm/node_modules/read-package-json-fast/package.json
+++ b/deps/npm/node_modules/read-package-json-fast/package.json
@@ -1,6 +1,6 @@
{
"name": "read-package-json-fast",
- "version": "3.0.2",
+ "version": "4.0.0",
"description": "Like read-package-json, but faster",
"main": "lib/index.js",
"author": "GitHub Inc.",
@@ -8,27 +8,28 @@
"scripts": {
"test": "tap",
"snap": "tap",
- "lint": "eslint \"**/*.js\"",
+ "lint": "npm run eslint",
"postlint": "template-oss-check",
"template-oss-apply": "template-oss-apply --force",
- "lintfix": "npm run lint -- --fix",
- "posttest": "npm run lint"
+ "lintfix": "npm run eslint -- --fix",
+ "posttest": "npm run lint",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.11.0",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"tap": "^16.3.0"
},
"dependencies": {
- "json-parse-even-better-errors": "^3.0.0",
- "npm-normalize-package-bin": "^3.0.0"
+ "json-parse-even-better-errors": "^4.0.0",
+ "npm-normalize-package-bin": "^4.0.0"
},
"repository": {
"type": "git",
- "url": "https://github.com/npm/read-package-json-fast.git"
+ "url": "git+https://github.com/npm/read-package-json-fast.git"
},
"files": [
"bin/",
@@ -36,7 +37,8 @@
],
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.11.0"
+ "version": "4.23.3",
+ "publish": true
},
"tap": {
"nyc-arg": [
diff --git a/deps/npm/node_modules/read/dist/commonjs/read.js b/deps/npm/node_modules/read/dist/commonjs/read.js
index bab433d8a11..c0600d2b4e8 100644
--- a/deps/npm/node_modules/read/dist/commonjs/read.js
+++ b/deps/npm/node_modules/read/dist/commonjs/read.js
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
-exports.read = void 0;
+exports.read = read;
const mute_stream_1 = __importDefault(require("mute-stream"));
const readline_1 = require("readline");
async function read({ default: def, input = process.stdin, output = process.stdout, completer, prompt = '', silent, timeout, edit, terminal, replace, }) {
@@ -91,5 +91,4 @@ async function read({ default: def, input = process.stdin, output = process.stdo
/* c8 ignore stop */
});
}
-exports.read = read;
//# sourceMappingURL=read.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/read/package.json b/deps/npm/node_modules/read/package.json
index 799362f40f1..337f7d26d4d 100644
--- a/deps/npm/node_modules/read/package.json
+++ b/deps/npm/node_modules/read/package.json
@@ -1,6 +1,6 @@
{
"name": "read",
- "version": "3.0.1",
+ "version": "4.0.0",
"exports": {
"./package.json": "./package.json",
".": {
@@ -22,29 +22,29 @@
}
},
"dependencies": {
- "mute-stream": "^1.0.0"
+ "mute-stream": "^2.0.0"
},
"devDependencies": {
- "@npmcli/eslint-config": "^4.0.2",
- "@npmcli/template-oss": "4.20.0",
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.23.3",
"@types/mute-stream": "^0.0.4",
"@types/tap": "^15.0.11",
- "@typescript-eslint/parser": "^6.11.0",
- "c8": "^8.0.1",
+ "@typescript-eslint/parser": "^8.0.1",
+ "c8": "^10.1.2",
"eslint-import-resolver-typescript": "^3.6.1",
"tap": "^16.3.9",
"ts-node": "^10.9.1",
- "tshy": "^1.8.0",
+ "tshy": "^3.0.2",
"typescript": "^5.2.2"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"author": "GitHub Inc.",
"description": "read(1) for node programs",
"repository": {
"type": "git",
- "url": "https://github.com/npm/read.git"
+ "url": "git+https://github.com/npm/read.git"
},
"license": "ISC",
"scripts": {
@@ -52,19 +52,19 @@
"pretest": "npm run prepare",
"presnap": "npm run prepare",
"test": "c8 tap",
- "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
+ "lint": "npm run eslint",
"postlint": "template-oss-check",
"template-oss-apply": "template-oss-apply --force",
- "lintfix": "npm run lint -- --fix",
+ "lintfix": "npm run eslint -- --fix",
"snap": "c8 tap",
- "posttest": "npm run lint"
+ "posttest": "npm run lint",
+ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.20.0",
+ "version": "4.23.3",
"publish": true,
- "typescript": true,
- "content": "./scripts/template-oss"
+ "typescript": true
},
"main": "./dist/commonjs/read.js",
"types": "./dist/commonjs/read.d.ts",
@@ -83,5 +83,6 @@
},
"files": [
"dist/"
- ]
+ ],
+ "module": "./dist/esm/read.js"
}
diff --git a/deps/npm/node_modules/rimraf/LICENSE b/deps/npm/node_modules/rimraf/LICENSE
new file mode 100644
index 00000000000..1493534e60d
--- /dev/null
+++ b/deps/npm/node_modules/rimraf/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) 2011-2023 Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/rimraf/README.md b/deps/npm/node_modules/rimraf/README.md
new file mode 100644
index 00000000000..7ab1a5d6d77
--- /dev/null
+++ b/deps/npm/node_modules/rimraf/README.md
@@ -0,0 +1,220 @@
+The [UNIX command]() `rm -rf` for node
+in a cross-platform implementation.
+
+Install with `npm install rimraf`.
+
+## Major Changes
+
+### v4 to v5
+
+- There is no default export anymore. Import the functions directly
+ using, e.g., `import { rimrafSync } from 'rimraf'`.
+
+### v3 to v4
+
+- The function returns a `Promise` instead of taking a callback.
+- Globbing requires the `--glob` CLI option or `glob` option property
+ to be set. (Removed in 4.0 and 4.1, opt-in support added in 4.2.)
+- Functions take arrays of paths, as well as a single path.
+- Native implementation used by default when available, except on
+ Windows, where this implementation is faster and more reliable.
+- New implementation on Windows, falling back to "move then
+ remove" strategy when exponential backoff for `EBUSY` fails to
+ resolve the situation.
+- Simplified implementation on POSIX, since the Windows
+ affordances are not necessary there.
+- As of 4.3, return/resolve value is boolean instead of undefined.
+
+## API
+
+Hybrid module, load either with `import` or `require()`.
+
+```js
+// 'rimraf' export is the one you probably want, but other
+// strategies exported as well.
+import { rimraf, rimrafSync, native, nativeSync } from 'rimraf'
+// or
+const { rimraf, rimrafSync, native, nativeSync } = require('rimraf')
+```
+
+All removal functions return a boolean indicating that all
+entries were successfully removed.
+
+The only case in which this will not return `true` is if
+something was omitted from the removal via a `filter` option.
+
+### `rimraf(f, [opts]) -> Promise`
+
+This first parameter is a path or array of paths. The second
+argument is an options object.
+
+Options:
+
+- `preserveRoot`: If set to boolean `false`, then allow the
+ recursive removal of the root directory. Otherwise, this is
+ not allowed.
+- `tmp`: Windows only. Temp folder to place files and
+ folders for the "move then remove" fallback. Must be on the
+ same physical device as the path being deleted. Defaults to
+ `os.tmpdir()` when that is on the same drive letter as the path
+ being deleted, or `${drive}:\temp` if present, or `${drive}:\`
+ if not.
+- `maxRetries`: Windows and Native only. Maximum number of
+ retry attempts in case of `EBUSY`, `EMFILE`, and `ENFILE`
+ errors. Default `10` for Windows implementation, `0` for Native
+ implementation.
+- `backoff`: Windows only. Rate of exponential backoff for async
+ removal in case of `EBUSY`, `EMFILE`, and `ENFILE` errors.
+ Should be a number greater than 1. Default `1.2`
+- `maxBackoff`: Windows only. Maximum total backoff time in ms to
+ attempt asynchronous retries in case of `EBUSY`, `EMFILE`, and
+ `ENFILE` errors. Default `200`. With the default `1.2` backoff
+ rate, this results in 14 retries, with the final retry being
+ delayed 33ms.
+- `retryDelay`: Native only. Time to wait between retries, using
+ linear backoff. Default `100`.
+- `signal` Pass in an AbortSignal to cancel the directory
+ removal. This is useful when removing large folder structures,
+ if you'd like to limit the time spent.
+
+ Using a `signal` option prevents the use of Node's built-in
+ `fs.rm` because that implementation does not support abort
+ signals.
+
+- `glob` Boolean flag to treat path as glob pattern, or an object
+ specifying [`glob` options](https://github.com/isaacs/node-glob).
+- `filter` Method that returns a boolean indicating whether that
+ path should be deleted. With async `rimraf` methods, this may
+ return a Promise that resolves to a boolean. (Since Promises
+ are truthy, returning a Promise from a sync filter is the same
+ as just not filtering anything.)
+
+ The first argument to the filter is the path string. The
+ second argument is either a `Dirent` or `Stats` object for that
+ path. (The first path explored will be a `Stats`, the rest
+ will be `Dirent`.)
+
+ If a filter method is provided, it will _only_ remove entries
+ if the filter returns (or resolves to) a truthy value. Omitting
+ a directory will still allow its children to be removed, unless
+ they are also filtered out, but any parents of a filtered entry
+ will not be removed, since the directory will not be empty in
+ that case.
+
+ Using a filter method prevents the use of Node's built-in
+ `fs.rm` because that implementation does not support filtering.
+
+Any other options are provided to the native Node.js `fs.rm` implementation
+when that is used.
+
+This will attempt to choose the best implementation, based on the Node.js
+version and `process.platform`. To force a specific implementation, use
+one of the other functions provided.
+
+### `rimraf.sync(f, [opts])`
`rimraf.rimrafSync(f, [opts])`
+
+Synchronous form of `rimraf()`
+
+Note that, unlike many file system operations, the synchronous form will
+typically be significantly _slower_ than the async form, because recursive
+deletion is extremely parallelizable.
+
+### `rimraf.native(f, [opts])`
+
+Uses the built-in `fs.rm` implementation that Node.js provides. This is
+used by default on Node.js versions greater than or equal to `14.14.0`.
+
+### `rimraf.native.sync(f, [opts])`
`rimraf.nativeSync(f, [opts])`
+
+Synchronous form of `rimraf.native`
+
+### `rimraf.manual(f, [opts])`
+
+Use the JavaScript implementation appropriate for your operating system.
+
+### `rimraf.manual.sync(f, [opts])`
`rimraf.manualSync(f, opts)`
+
+Synchronous form of `rimraf.manual()`
+
+### `rimraf.windows(f, [opts])`
+
+JavaScript implementation of file removal appropriate for Windows
+platforms. Works around `unlink` and `rmdir` not being atomic
+operations, and `EPERM` when deleting files with certain
+permission modes.
+
+First deletes all non-directory files within the tree, and then
+removes all directories, which should ideally be empty by that
+time. When an `ENOTEMPTY` is raised in the second pass, falls
+back to the `rimraf.moveRemove` strategy as needed.
+
+### `rimraf.windows.sync(path, [opts])`
`rimraf.windowsSync(path, [opts])`
+
+Synchronous form of `rimraf.windows()`
+
+### `rimraf.moveRemove(path, [opts])`
+
+Moves all files and folders to the parent directory of `path`
+with a temporary filename prior to attempting to remove them.
+
+Note that, in cases where the operation fails, this _may_ leave
+files lying around in the parent directory with names like
+`.file-basename.txt.0.123412341`. Until the Windows kernel
+provides a way to perform atomic `unlink` and `rmdir` operations,
+this is, unfortunately, unavoidable.
+
+To move files to a different temporary directory other than the
+parent, provide `opts.tmp`. Note that this _must_ be on the same
+physical device as the folder being deleted, or else the
+operation will fail.
+
+This is the slowest strategy, but most reliable on Windows
+platforms. Used as a last-ditch fallback by `rimraf.windows()`.
+
+### `rimraf.moveRemove.sync(path, [opts])`
`rimraf.moveRemoveSync(path, [opts])`
+
+Synchronous form of `rimraf.moveRemove()`
+
+### Command Line Interface
+
+```
+rimraf version 4.3.0
+
+Usage: rimraf [ ...]
+Deletes all files and folders at "path", recursively.
+
+Options:
+ -- Treat all subsequent arguments as paths
+ -h --help Display this usage info
+ --preserve-root Do not remove '/' recursively (default)
+ --no-preserve-root Do not treat '/' specially
+ -G --no-glob Treat arguments as literal paths, not globs (default)
+ -g --glob Treat arguments as glob patterns
+ -v --verbose Be verbose when deleting files, showing them as
+ they are removed. Not compatible with --impl=native
+ -V --no-verbose Be silent when deleting files, showing nothing as
+ they are removed (default)
+ -i --interactive Ask for confirmation before deleting anything
+ Not compatible with --impl=native
+ -I --no-interactive Do not ask for confirmation before deleting
+
+ --impl= Specify the implementation to use:
+ rimraf: choose the best option (default)
+ native: the built-in implementation in Node.js
+ manual: the platform-specific JS implementation
+ posix: the Posix JS implementation
+ windows: the Windows JS implementation (falls back to
+ move-remove on ENOTEMPTY)
+ move-remove: a slow reliable Windows fallback
+
+Implementation-specific options:
+ --tmp= Temp file folder for 'move-remove' implementation
+ --max-retries= maxRetries for 'native' and 'windows' implementations
+ --retry-delay= retryDelay for 'native' implementation, default 100
+ --backoff= Exponential backoff factor for retries (default: 1.2)
+```
+
+## mkdirp
+
+If you need to _create_ a directory recursively, check out
+[mkdirp](https://github.com/isaacs/node-mkdirp).
diff --git a/deps/npm/node_modules/rimraf/dist/commonjs/default-tmp.d.ts b/deps/npm/node_modules/rimraf/dist/commonjs/default-tmp.d.ts
new file mode 100644
index 00000000000..a68e925b249
--- /dev/null
+++ b/deps/npm/node_modules/rimraf/dist/commonjs/default-tmp.d.ts
@@ -0,0 +1,3 @@
+export declare const defaultTmp: (path: string) => Promise;
+export declare const defaultTmpSync: (path: string) => string;
+//# sourceMappingURL=default-tmp.d.ts.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/rimraf/dist/commonjs/default-tmp.d.ts.map b/deps/npm/node_modules/rimraf/dist/commonjs/default-tmp.d.ts.map
new file mode 100644
index 00000000000..d0b35f27862
--- /dev/null
+++ b/deps/npm/node_modules/rimraf/dist/commonjs/default-tmp.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"default-tmp.d.ts","sourceRoot":"","sources":["../../src/default-tmp.ts"],"names":[],"mappings":"AAiEA,eAAO,MAAM,UAAU,SAnCc,MAAM,oBAoCe,CAAA;AAC1D,eAAO,MAAM,cAAc,SArBQ,MAAM,WAsByB,CAAA"}
\ No newline at end of file
diff --git a/deps/npm/node_modules/rimraf/dist/commonjs/default-tmp.js b/deps/npm/node_modules/rimraf/dist/commonjs/default-tmp.js
new file mode 100644
index 00000000000..ae908788196
--- /dev/null
+++ b/deps/npm/node_modules/rimraf/dist/commonjs/default-tmp.js
@@ -0,0 +1,61 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.defaultTmpSync = exports.defaultTmp = void 0;
+// The default temporary folder location for use in the windows algorithm.
+// It's TEMPting to use dirname(path), since that's guaranteed to be on the
+// same device. However, this means that:
+// rimraf(path).then(() => rimraf(dirname(path)))
+// will often fail with EBUSY, because the parent dir contains
+// marked-for-deletion directory entries (which do not show up in readdir).
+// The approach here is to use os.tmpdir() if it's on the same drive letter,
+// or resolve(path, '\\temp') if it exists, or the root of the drive if not.
+// On Posix (not that you'd be likely to use the windows algorithm there),
+// it uses os.tmpdir() always.
+const os_1 = require("os");
+const path_1 = require("path");
+const fs_js_1 = require("./fs.js");
+const platform_js_1 = __importDefault(require("./platform.js"));
+const { stat } = fs_js_1.promises;
+const isDirSync = (path) => {
+ try {
+ return (0, fs_js_1.statSync)(path).isDirectory();
+ }
+ catch (er) {
+ return false;
+ }
+};
+const isDir = (path) => stat(path).then(st => st.isDirectory(), () => false);
+const win32DefaultTmp = async (path) => {
+ const { root } = (0, path_1.parse)(path);
+ const tmp = (0, os_1.tmpdir)();
+ const { root: tmpRoot } = (0, path_1.parse)(tmp);
+ if (root.toLowerCase() === tmpRoot.toLowerCase()) {
+ return tmp;
+ }
+ const driveTmp = (0, path_1.resolve)(root, '/temp');
+ if (await isDir(driveTmp)) {
+ return driveTmp;
+ }
+ return root;
+};
+const win32DefaultTmpSync = (path) => {
+ const { root } = (0, path_1.parse)(path);
+ const tmp = (0, os_1.tmpdir)();
+ const { root: tmpRoot } = (0, path_1.parse)(tmp);
+ if (root.toLowerCase() === tmpRoot.toLowerCase()) {
+ return tmp;
+ }
+ const driveTmp = (0, path_1.resolve)(root, '/temp');
+ if (isDirSync(driveTmp)) {
+ return driveTmp;
+ }
+ return root;
+};
+const posixDefaultTmp = async () => (0, os_1.tmpdir)();
+const posixDefaultTmpSync = () => (0, os_1.tmpdir)();
+exports.defaultTmp = platform_js_1.default === 'win32' ? win32DefaultTmp : posixDefaultTmp;
+exports.defaultTmpSync = platform_js_1.default === 'win32' ? win32DefaultTmpSync : posixDefaultTmpSync;
+//# sourceMappingURL=default-tmp.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/rimraf/dist/commonjs/default-tmp.js.map b/deps/npm/node_modules/rimraf/dist/commonjs/default-tmp.js.map
new file mode 100644
index 00000000000..4984afb1b21
--- /dev/null
+++ b/deps/npm/node_modules/rimraf/dist/commonjs/default-tmp.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"default-tmp.js","sourceRoot":"","sources":["../../src/default-tmp.ts"],"names":[],"mappings":";;;;;;AAAA,0EAA0E;AAC1E,2EAA2E;AAC3E,0CAA0C;AAC1C,iDAAiD;AACjD,8DAA8D;AAC9D,2EAA2E;AAC3E,4EAA4E;AAC5E,4EAA4E;AAC5E,0EAA0E;AAC1E,8BAA8B;AAC9B,2BAA2B;AAC3B,+BAAqC;AACrC,mCAA4C;AAC5C,gEAAoC;AACpC,MAAM,EAAE,IAAI,EAAE,GAAG,gBAAQ,CAAA;AAEzB,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,EAAE;IACjC,IAAI,CAAC;QACH,OAAO,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;IACrC,CAAC;IAAC,OAAO,EAAE,EAAE,CAAC;QACZ,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC,CAAA;AAED,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE,CAC7B,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CACb,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,EACtB,GAAG,EAAE,CAAC,KAAK,CACZ,CAAA;AAEH,MAAM,eAAe,GAAG,KAAK,EAAE,IAAY,EAAE,EAAE;IAC7C,MAAM,EAAE,IAAI,EAAE,GAAG,IAAA,YAAK,EAAC,IAAI,CAAC,CAAA;IAC5B,MAAM,GAAG,GAAG,IAAA,WAAM,GAAE,CAAA;IACpB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAA,YAAK,EAAC,GAAG,CAAC,CAAA;IACpC,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;QACjD,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,MAAM,QAAQ,GAAG,IAAA,cAAO,EAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACvC,IAAI,MAAM,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAE,EAAE;IAC3C,MAAM,EAAE,IAAI,EAAE,GAAG,IAAA,YAAK,EAAC,IAAI,CAAC,CAAA;IAC5B,MAAM,GAAG,GAAG,IAAA,WAAM,GAAE,CAAA;IACpB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAA,YAAK,EAAC,GAAG,CAAC,CAAA;IACpC,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;QACjD,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,MAAM,QAAQ,GAAG,IAAA,cAAO,EAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACvC,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxB,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED,MAAM,eAAe,GAAG,KAAK,IAAI,EAAE,CAAC,IAAA,WAAM,GAAE,CAAA;AAC5C,MAAM,mBAAmB,GAAG,GAAG,EAAE,CAAC,IAAA,WAAM,GAAE,CAAA;AAE7B,QAAA,UAAU,GACrB,qBAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,CAAA;AAC7C,QAAA,cAAc,GACzB,qBAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAA","sourcesContent":["// The default temporary folder location for use in the windows algorithm.\n// It's TEMPting to use dirname(path), since that's guaranteed to be on the\n// same device. However, this means that:\n// rimraf(path).then(() => rimraf(dirname(path)))\n// will often fail with EBUSY, because the parent dir contains\n// marked-for-deletion directory entries (which do not show up in readdir).\n// The approach here is to use os.tmpdir() if it's on the same drive letter,\n// or resolve(path, '\\\\temp') if it exists, or the root of the drive if not.\n// On Posix (not that you'd be likely to use the windows algorithm there),\n// it uses os.tmpdir() always.\nimport { tmpdir } from 'os'\nimport { parse, resolve } from 'path'\nimport { promises, statSync } from './fs.js'\nimport platform from './platform.js'\nconst { stat } = promises\n\nconst isDirSync = (path: string) => {\n try {\n return statSync(path).isDirectory()\n } catch (er) {\n return false\n }\n}\n\nconst isDir = (path: string) =>\n stat(path).then(\n st => st.isDirectory(),\n () => false,\n )\n\nconst win32DefaultTmp = async (path: string) => {\n const { root } = parse(path)\n const tmp = tmpdir()\n const { root: tmpRoot } = parse(tmp)\n if (root.toLowerCase() === tmpRoot.toLowerCase()) {\n return tmp\n }\n\n const driveTmp = resolve(root, '/temp')\n if (await isDir(driveTmp)) {\n return driveTmp\n }\n\n return root\n}\n\nconst win32DefaultTmpSync = (path: string) => {\n const { root } = parse(path)\n const tmp = tmpdir()\n const { root: tmpRoot } = parse(tmp)\n if (root.toLowerCase() === tmpRoot.toLowerCase()) {\n return tmp\n }\n\n const driveTmp = resolve(root, '/temp')\n if (isDirSync(driveTmp)) {\n return driveTmp\n }\n\n return root\n}\n\nconst posixDefaultTmp = async () => tmpdir()\nconst posixDefaultTmpSync = () => tmpdir()\n\nexport const defaultTmp =\n platform === 'win32' ? win32DefaultTmp : posixDefaultTmp\nexport const defaultTmpSync =\n platform === 'win32' ? win32DefaultTmpSync : posixDefaultTmpSync\n"]}
\ No newline at end of file
diff --git a/deps/npm/node_modules/rimraf/dist/commonjs/fix-eperm.d.ts b/deps/npm/node_modules/rimraf/dist/commonjs/fix-eperm.d.ts
new file mode 100644
index 00000000000..20e76a82c49
--- /dev/null
+++ b/deps/npm/node_modules/rimraf/dist/commonjs/fix-eperm.d.ts
@@ -0,0 +1,3 @@
+export declare const fixEPERM: (fn: (path: string) => Promise) => (path: string) => Promise;
+export declare const fixEPERMSync: (fn: (path: string) => any) => (path: string) => any;
+//# sourceMappingURL=fix-eperm.d.ts.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/rimraf/dist/commonjs/fix-eperm.d.ts.map b/deps/npm/node_modules/rimraf/dist/commonjs/fix-eperm.d.ts.map
new file mode 100644
index 00000000000..ac17d6f4e06
--- /dev/null
+++ b/deps/npm/node_modules/rimraf/dist/commonjs/fix-eperm.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"fix-eperm.d.ts","sourceRoot":"","sources":["../../src/fix-eperm.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,QAAQ,OACd,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,YAAkB,MAAM,iBAsB1D,CAAA;AAEH,eAAO,MAAM,YAAY,OAAQ,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,YAAY,MAAM,QAsBvE,CAAA"}
\ No newline at end of file
diff --git a/deps/npm/node_modules/rimraf/dist/commonjs/fix-eperm.js b/deps/npm/node_modules/rimraf/dist/commonjs/fix-eperm.js
new file mode 100644
index 00000000000..7baecb7c958
--- /dev/null
+++ b/deps/npm/node_modules/rimraf/dist/commonjs/fix-eperm.js
@@ -0,0 +1,58 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.fixEPERMSync = exports.fixEPERM = void 0;
+const fs_js_1 = require("./fs.js");
+const { chmod } = fs_js_1.promises;
+const fixEPERM = (fn) => async (path) => {
+ try {
+ return await fn(path);
+ }
+ catch (er) {
+ const fer = er;
+ if (fer?.code === 'ENOENT') {
+ return;
+ }
+ if (fer?.code === 'EPERM') {
+ try {
+ await chmod(path, 0o666);
+ }
+ catch (er2) {
+ const fer2 = er2;
+ if (fer2?.code === 'ENOENT') {
+ return;
+ }
+ throw er;
+ }
+ return await fn(path);
+ }
+ throw er;
+ }
+};
+exports.fixEPERM = fixEPERM;
+const fixEPERMSync = (fn) => (path) => {
+ try {
+ return fn(path);
+ }
+ catch (er) {
+ const fer = er;
+ if (fer?.code === 'ENOENT') {
+ return;
+ }
+ if (fer?.code === 'EPERM') {
+ try {
+ (0, fs_js_1.chmodSync)(path, 0o666);
+ }
+ catch (er2) {
+ const fer2 = er2;
+ if (fer2?.code === 'ENOENT') {
+ return;
+ }
+ throw er;
+ }
+ return fn(path);
+ }
+ throw er;
+ }
+};
+exports.fixEPERMSync = fixEPERMSync;
+//# sourceMappingURL=fix-eperm.js.map
\ No newline at end of file
diff --git a/deps/npm/node_modules/rimraf/dist/commonjs/fix-eperm.js.map b/deps/npm/node_modules/rimraf/dist/commonjs/fix-eperm.js.map
new file mode 100644
index 00000000000..250ea5d5b4c
--- /dev/null
+++ b/deps/npm/node_modules/rimraf/dist/commonjs/fix-eperm.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"fix-eperm.js","sourceRoot":"","sources":["../../src/fix-eperm.ts"],"names":[],"mappings":";;;AAAA,mCAA6C;AAC7C,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAQ,CAAA;AAEnB,MAAM,QAAQ,GACnB,CAAC,EAAkC,EAAE,EAAE,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;IAC7D,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,CAAC,IAAI,CAAC,CAAA;IACvB,CAAC;IAAC,OAAO,EAAE,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,EAA2B,CAAA;QACvC,IAAI,GAAG,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3B,OAAM;QACR,CAAC;QACD,IAAI,GAAG,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACH,MAAM,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YAC1B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,IAAI,GAAG,GAA4B,CAAA;gBACzC,IAAI,IAAI,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC5B,OAAM;gBACR,CAAC;gBACD,MAAM,EAAE,CAAA;YACV,CAAC;YACD,OAAO,MAAM,EAAE,CAAC,IAAI,CAAC,CAAA;QACvB,CAAC;QACD,MAAM,EAAE,CAAA;IACV,CAAC;AACH,CAAC,CAAA;AAvBU,QAAA,QAAQ,YAuBlB;AAEI,MAAM,YAAY,GAAG,CAAC,EAAyB,EAAE,EAAE,CAAC,CAAC,IAAY,EAAE,EAAE;IAC1E,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,IAAI,CAAC,CAAA;IACjB,CAAC;IAAC,OAAO,EAAE,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,EAA2B,CAAA;QACvC,IAAI,GAAG,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3B,OAAM;QACR,CAAC;QACD,IAAI,GAAG,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACH,IAAA,iBAAS,EAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YACxB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,IAAI,GAAG,GAA4B,CAAA;gBACzC,IAAI,IAAI,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC5B,OAAM;gBACR,CAAC;gBACD,MAAM,EAAE,CAAA;YACV,CAAC;YACD,OAAO,EAAE,CAAC,IAAI,CAAC,CAAA;QACjB,CAAC;QACD,MAAM,EAAE,CAAA;IACV,CAAC;AACH,CAAC,CAAA;AAtBY,QAAA,YAAY,gBAsBxB","sourcesContent":["import { chmodSync, promises } from './fs.js'\nconst { chmod } = promises\n\nexport const fixEPERM =\n (fn: (path: string) => Promise) => async (path: string) => {\n try {\n return await fn(path)\n } catch (er) {\n const fer = er as NodeJS.ErrnoException\n if (fer?.code === 'ENOENT') {\n return\n }\n if (fer?.code === 'EPERM') {\n try {\n await chmod(path, 0o666)\n } catch (er2) {\n const fer2 = er2 as NodeJS.ErrnoException\n if (fer2?.code === 'ENOENT') {\n return\n }\n throw er\n }\n return await fn(path)\n }\n throw er\n }\n }\n\nexport const fixEPERMSync = (fn: (path: string) => any) => (path: string) => {\n try {\n return fn(path)\n } catch (er) {\n const fer = er as NodeJS.ErrnoException\n if (fer?.code === 'ENOENT') {\n return\n }\n if (fer?.code === 'EPERM') {\n try {\n chmodSync(path, 0o666)\n } catch (er2) {\n const fer2 = er2 as NodeJS.ErrnoException\n if (fer2?.code === 'ENOENT') {\n return\n }\n throw er\n }\n return fn(path)\n }\n throw er\n }\n}\n"]}
\ No newline at end of file
diff --git a/deps/npm/node_modules/rimraf/dist/commonjs/fs.d.ts b/deps/npm/node_modules/rimraf/dist/commonjs/fs.d.ts
new file mode 100644
index 00000000000..9e4e95b4e7a
--- /dev/null
+++ b/deps/npm/node_modules/rimraf/dist/commonjs/fs.d.ts
@@ -0,0 +1,17 @@
+import fs, { Dirent } from 'fs';
+export { chmodSync, mkdirSync, renameSync, rmdirSync, rmSync, statSync, lstatSync, unlinkSync, } from 'fs';
+export declare const readdirSync: (path: fs.PathLike) => Dirent[];
+export declare const promises: {
+ chmod: (path: fs.PathLike, mode: fs.Mode) => Promise;
+ mkdir: (path: fs.PathLike, options?: fs.Mode | (fs.MakeDirectoryOptions & {
+ recursive?: boolean | null;
+ }) | undefined | null) => Promise;
+ readdir: (path: fs.PathLike) => Promise;
+ rename: (oldPath: fs.PathLike, newPath: fs.PathLike) => Promise;
+ rm: (path: fs.PathLike, options: fs.RmOptions) => Promise;
+ rmdir: (path: fs.PathLike) => Promise