summaryrefslogtreecommitdiff
path: root/deps
diff options
context:
space:
mode:
authornpm CLI robot <npm-cli+bot@github.com>2023-05-07 03:37:34 -0700
committerGitHub <noreply@github.com>2023-05-07 10:37:34 +0000
commitb7c82a3480a0c3699ab97a5d8b4c0588709a38ff (patch)
treea5376e298f8a5fdce83ed64afb33d3362cac1df2 /deps
parent9f39a9d2cbab6864e897ff471bdd2eefababdaa2 (diff)
downloadnode-new-b7c82a3480a0c3699ab97a5d8b4c0588709a38ff.tar.gz
deps: upgrade npm to 9.6.6
PR-URL: https://github.com/nodejs/node/pull/47862 Reviewed-By: Debadree Chatterjee <debadree333@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Tobias Nießen <tniessen@tnie.de> Reviewed-By: Luke Karrys <luke@lukekarrys.com>
Diffstat (limited to 'deps')
-rw-r--r--deps/npm/docs/content/commands/npm-ci.md34
-rw-r--r--deps/npm/docs/content/commands/npm-config.md2
-rw-r--r--deps/npm/docs/content/commands/npm-install-ci-test.md34
-rw-r--r--deps/npm/docs/content/commands/npm-ls.md2
-rw-r--r--deps/npm/docs/content/commands/npm-publish.md3
-rw-r--r--deps/npm/docs/content/commands/npm.md2
-rw-r--r--deps/npm/docs/content/configuring-npm/folders.md2
-rw-r--r--deps/npm/docs/content/using-npm/config.md3
-rw-r--r--deps/npm/docs/output/commands/npm-ci.html32
-rw-r--r--deps/npm/docs/output/commands/npm-config.html2
-rw-r--r--deps/npm/docs/output/commands/npm-install-ci-test.html32
-rw-r--r--deps/npm/docs/output/commands/npm-ls.html2
-rw-r--r--deps/npm/docs/output/commands/npm-publish.html3
-rw-r--r--deps/npm/docs/output/commands/npm.html2
-rw-r--r--deps/npm/docs/output/configuring-npm/folders.html2
-rw-r--r--deps/npm/docs/output/using-npm/config.html3
-rw-r--r--deps/npm/lib/commands/audit.js3
-rw-r--r--deps/npm/lib/commands/cache.js3
-rw-r--r--deps/npm/lib/commands/ci.js20
-rw-r--r--deps/npm/lib/commands/config.js8
-rw-r--r--deps/npm/lib/commands/dedupe.js2
-rw-r--r--deps/npm/lib/commands/diff.js3
-rw-r--r--deps/npm/lib/commands/explain.js4
-rw-r--r--deps/npm/lib/commands/fund.js5
-rw-r--r--deps/npm/lib/commands/help-search.js2
-rw-r--r--deps/npm/lib/commands/help.js2
-rw-r--r--deps/npm/lib/commands/install.js3
-rw-r--r--deps/npm/lib/commands/link.js5
-rw-r--r--deps/npm/lib/commands/ls.js6
-rw-r--r--deps/npm/lib/commands/outdated.js3
-rw-r--r--deps/npm/lib/commands/prune.js2
-rw-r--r--deps/npm/lib/commands/query.js3
-rw-r--r--deps/npm/lib/commands/rebuild.js4
-rw-r--r--deps/npm/lib/commands/search.js2
-rw-r--r--deps/npm/lib/commands/shrinkwrap.js2
-rw-r--r--deps/npm/lib/commands/uninstall.js2
-rw-r--r--deps/npm/lib/commands/update.js4
-rw-r--r--deps/npm/lib/npm.js5
-rw-r--r--deps/npm/lib/package-url-cmd.js2
-rw-r--r--deps/npm/lib/utils/completion/installed-deep.js2
-rw-r--r--deps/npm/lib/utils/config/definitions.js3
-rw-r--r--deps/npm/lib/utils/format-search-stream.js2
-rw-r--r--deps/npm/lib/utils/log-file.js8
-rw-r--r--deps/npm/lib/utils/update-notifier.js88
-rw-r--r--deps/npm/lib/workspaces/get-workspaces.js2
-rw-r--r--deps/npm/lib/workspaces/update-workspaces.js2
-rw-r--r--deps/npm/man/man1/npm-access.12
-rw-r--r--deps/npm/man/man1/npm-adduser.12
-rw-r--r--deps/npm/man/man1/npm-audit.12
-rw-r--r--deps/npm/man/man1/npm-bugs.12
-rw-r--r--deps/npm/man/man1/npm-cache.12
-rw-r--r--deps/npm/man/man1/npm-ci.145
-rw-r--r--deps/npm/man/man1/npm-completion.12
-rw-r--r--deps/npm/man/man1/npm-config.14
-rw-r--r--deps/npm/man/man1/npm-dedupe.12
-rw-r--r--deps/npm/man/man1/npm-deprecate.12
-rw-r--r--deps/npm/man/man1/npm-diff.12
-rw-r--r--deps/npm/man/man1/npm-dist-tag.12
-rw-r--r--deps/npm/man/man1/npm-docs.12
-rw-r--r--deps/npm/man/man1/npm-doctor.12
-rw-r--r--deps/npm/man/man1/npm-edit.12
-rw-r--r--deps/npm/man/man1/npm-exec.12
-rw-r--r--deps/npm/man/man1/npm-explain.12
-rw-r--r--deps/npm/man/man1/npm-explore.12
-rw-r--r--deps/npm/man/man1/npm-find-dupes.12
-rw-r--r--deps/npm/man/man1/npm-fund.12
-rw-r--r--deps/npm/man/man1/npm-help-search.12
-rw-r--r--deps/npm/man/man1/npm-help.12
-rw-r--r--deps/npm/man/man1/npm-hook.12
-rw-r--r--deps/npm/man/man1/npm-init.12
-rw-r--r--deps/npm/man/man1/npm-install-ci-test.145
-rw-r--r--deps/npm/man/man1/npm-install-test.12
-rw-r--r--deps/npm/man/man1/npm-install.12
-rw-r--r--deps/npm/man/man1/npm-link.12
-rw-r--r--deps/npm/man/man1/npm-login.12
-rw-r--r--deps/npm/man/man1/npm-logout.12
-rw-r--r--deps/npm/man/man1/npm-ls.14
-rw-r--r--deps/npm/man/man1/npm-org.12
-rw-r--r--deps/npm/man/man1/npm-outdated.12
-rw-r--r--deps/npm/man/man1/npm-owner.12
-rw-r--r--deps/npm/man/man1/npm-pack.12
-rw-r--r--deps/npm/man/man1/npm-ping.12
-rw-r--r--deps/npm/man/man1/npm-pkg.12
-rw-r--r--deps/npm/man/man1/npm-prefix.12
-rw-r--r--deps/npm/man/man1/npm-profile.12
-rw-r--r--deps/npm/man/man1/npm-prune.12
-rw-r--r--deps/npm/man/man1/npm-publish.14
-rw-r--r--deps/npm/man/man1/npm-query.12
-rw-r--r--deps/npm/man/man1/npm-rebuild.12
-rw-r--r--deps/npm/man/man1/npm-repo.12
-rw-r--r--deps/npm/man/man1/npm-restart.12
-rw-r--r--deps/npm/man/man1/npm-root.12
-rw-r--r--deps/npm/man/man1/npm-run-script.12
-rw-r--r--deps/npm/man/man1/npm-search.12
-rw-r--r--deps/npm/man/man1/npm-shrinkwrap.12
-rw-r--r--deps/npm/man/man1/npm-star.12
-rw-r--r--deps/npm/man/man1/npm-stars.12
-rw-r--r--deps/npm/man/man1/npm-start.12
-rw-r--r--deps/npm/man/man1/npm-stop.12
-rw-r--r--deps/npm/man/man1/npm-team.12
-rw-r--r--deps/npm/man/man1/npm-test.12
-rw-r--r--deps/npm/man/man1/npm-token.12
-rw-r--r--deps/npm/man/man1/npm-uninstall.12
-rw-r--r--deps/npm/man/man1/npm-unpublish.12
-rw-r--r--deps/npm/man/man1/npm-unstar.12
-rw-r--r--deps/npm/man/man1/npm-update.12
-rw-r--r--deps/npm/man/man1/npm-version.12
-rw-r--r--deps/npm/man/man1/npm-view.12
-rw-r--r--deps/npm/man/man1/npm-whoami.12
-rw-r--r--deps/npm/man/man1/npm.14
-rw-r--r--deps/npm/man/man1/npx.12
-rw-r--r--deps/npm/man/man5/folders.54
-rw-r--r--deps/npm/man/man5/install.52
-rw-r--r--deps/npm/man/man5/npm-global.54
-rw-r--r--deps/npm/man/man5/npm-json.52
-rw-r--r--deps/npm/man/man5/npm-shrinkwrap-json.52
-rw-r--r--deps/npm/man/man5/npmrc.52
-rw-r--r--deps/npm/man/man5/package-json.52
-rw-r--r--deps/npm/man/man5/package-lock-json.52
-rw-r--r--deps/npm/man/man7/config.74
-rw-r--r--deps/npm/man/man7/dependency-selectors.72
-rw-r--r--deps/npm/man/man7/developers.72
-rw-r--r--deps/npm/man/man7/logging.72
-rw-r--r--deps/npm/man/man7/orgs.72
-rw-r--r--deps/npm/man/man7/package-spec.72
-rw-r--r--deps/npm/man/man7/registry.72
-rw-r--r--deps/npm/man/man7/removal.72
-rw-r--r--deps/npm/man/man7/scope.72
-rw-r--r--deps/npm/man/man7/scripts.72
-rw-r--r--deps/npm/man/man7/workspaces.72
-rw-r--r--deps/npm/node_modules/@isaacs/cliui/LICENSE.txt14
-rw-r--r--deps/npm/node_modules/@isaacs/cliui/build/index.cjs317
-rw-r--r--deps/npm/node_modules/@isaacs/cliui/build/index.d.cts43
-rw-r--r--deps/npm/node_modules/@isaacs/cliui/build/lib/index.js302
-rw-r--r--deps/npm/node_modules/@isaacs/cliui/index.mjs14
-rw-r--r--deps/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex/index.js8
-rw-r--r--deps/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex/license9
-rw-r--r--deps/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex/package.json58
-rw-r--r--deps/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/LICENSE-MIT.txt20
-rw-r--r--deps/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/RGI_Emoji.js6
-rw-r--r--deps/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/es2015/RGI_Emoji.js6
-rw-r--r--deps/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/es2015/index.js6
-rw-r--r--deps/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/es2015/text.js6
-rw-r--r--deps/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/index.js6
-rw-r--r--deps/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/package.json52
-rw-r--r--deps/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/text.js6
-rw-r--r--deps/npm/node_modules/@isaacs/cliui/node_modules/string-width/index.js54
-rw-r--r--deps/npm/node_modules/@isaacs/cliui/node_modules/string-width/license9
-rw-r--r--deps/npm/node_modules/@isaacs/cliui/node_modules/string-width/package.json59
-rw-r--r--deps/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi/index.js9
-rw-r--r--deps/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi/license9
-rw-r--r--deps/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi/package.json57
-rw-r--r--deps/npm/node_modules/@isaacs/cliui/package.json86
-rw-r--r--deps/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js540
-rw-r--r--deps/npm/node_modules/@npmcli/arborist/lib/arborist/index.js3
-rw-r--r--deps/npm/node_modules/@npmcli/arborist/lib/arborist/load-actual.js213
-rw-r--r--deps/npm/node_modules/@npmcli/arborist/lib/arborist/load-virtual.js136
-rw-r--r--deps/npm/node_modules/@npmcli/arborist/lib/arborist/reify.js3
-rw-r--r--deps/npm/node_modules/@npmcli/arborist/lib/arborist/set-workspaces.js (renamed from deps/npm/node_modules/@npmcli/arborist/lib/arborist/load-workspaces.js)4
-rw-r--r--deps/npm/node_modules/@npmcli/arborist/lib/calc-dep-flags.js24
-rw-r--r--deps/npm/node_modules/@npmcli/arborist/lib/dep-valid.js24
-rw-r--r--deps/npm/node_modules/@npmcli/arborist/lib/edge.js329
-rw-r--r--deps/npm/node_modules/@npmcli/arborist/lib/from-path.js36
-rw-r--r--deps/npm/node_modules/@npmcli/arborist/lib/inventory.js123
-rw-r--r--deps/npm/node_modules/@npmcli/arborist/lib/node.js149
-rw-r--r--deps/npm/node_modules/@npmcli/arborist/lib/query-selector-all.js2
-rw-r--r--deps/npm/node_modules/@npmcli/arborist/package.json10
-rw-r--r--deps/npm/node_modules/@npmcli/config/lib/index.js137
-rw-r--r--deps/npm/node_modules/@npmcli/config/package.json10
-rw-r--r--deps/npm/node_modules/@npmcli/map-workspaces/lib/index.js4
-rw-r--r--deps/npm/node_modules/@npmcli/map-workspaces/package.json11
-rw-r--r--deps/npm/node_modules/@npmcli/metavuln-calculator/lib/advisory.js4
-rw-r--r--deps/npm/node_modules/@npmcli/metavuln-calculator/package.json9
-rw-r--r--deps/npm/node_modules/@npmcli/run-script/package.json8
-rw-r--r--deps/npm/node_modules/@pkgjs/parseargs/LICENSE201
-rw-r--r--deps/npm/node_modules/@pkgjs/parseargs/examples/is-default-value.js25
-rw-r--r--deps/npm/node_modules/@pkgjs/parseargs/examples/limit-long-syntax.js35
-rw-r--r--deps/npm/node_modules/@pkgjs/parseargs/examples/negate.js43
-rw-r--r--deps/npm/node_modules/@pkgjs/parseargs/examples/no-repeated-options.js31
-rw-r--r--deps/npm/node_modules/@pkgjs/parseargs/examples/ordered-options.mjs41
-rw-r--r--deps/npm/node_modules/@pkgjs/parseargs/examples/simple-hard-coded.js26
-rw-r--r--deps/npm/node_modules/@pkgjs/parseargs/index.js396
-rw-r--r--deps/npm/node_modules/@pkgjs/parseargs/internal/errors.js47
-rw-r--r--deps/npm/node_modules/@pkgjs/parseargs/internal/primordials.js393
-rw-r--r--deps/npm/node_modules/@pkgjs/parseargs/internal/util.js14
-rw-r--r--deps/npm/node_modules/@pkgjs/parseargs/internal/validators.js89
-rw-r--r--deps/npm/node_modules/@pkgjs/parseargs/package.json36
-rw-r--r--deps/npm/node_modules/@pkgjs/parseargs/utils.js198
-rw-r--r--deps/npm/node_modules/@tufjs/canonical-json/LICENSE21
-rw-r--r--deps/npm/node_modules/@tufjs/canonical-json/lib/index.js64
-rw-r--r--deps/npm/node_modules/@tufjs/canonical-json/package.json39
-rw-r--r--deps/npm/node_modules/@tufjs/models/dist/metadata.js4
-rw-r--r--deps/npm/node_modules/@tufjs/models/dist/role.js4
-rw-r--r--deps/npm/node_modules/@tufjs/models/dist/utils/json.js62
-rw-r--r--deps/npm/node_modules/@tufjs/models/dist/utils/verify.js4
-rw-r--r--deps/npm/node_modules/@tufjs/models/package.json10
-rw-r--r--deps/npm/node_modules/cacache/lib/content/write.js36
-rw-r--r--deps/npm/node_modules/cacache/lib/entry-index.js6
-rw-r--r--deps/npm/node_modules/cacache/lib/get.js2
-rw-r--r--deps/npm/node_modules/cacache/lib/util/glob.js2
-rw-r--r--deps/npm/node_modules/cacache/lib/util/move-file.js56
-rw-r--r--deps/npm/node_modules/cacache/lib/verify.js7
-rw-r--r--deps/npm/node_modules/cacache/package.json12
-rw-r--r--deps/npm/node_modules/cross-spawn/LICENSE21
-rw-r--r--deps/npm/node_modules/cross-spawn/index.js39
-rw-r--r--deps/npm/node_modules/cross-spawn/lib/enoent.js59
-rw-r--r--deps/npm/node_modules/cross-spawn/lib/parse.js91
-rw-r--r--deps/npm/node_modules/cross-spawn/lib/util/escape.js45
-rw-r--r--deps/npm/node_modules/cross-spawn/lib/util/readShebang.js23
-rw-r--r--deps/npm/node_modules/cross-spawn/lib/util/resolveCommand.js52
-rw-r--r--deps/npm/node_modules/cross-spawn/node_modules/which/LICENSE15
-rw-r--r--deps/npm/node_modules/cross-spawn/node_modules/which/README.md54
-rwxr-xr-xdeps/npm/node_modules/cross-spawn/node_modules/which/bin/node-which52
-rw-r--r--deps/npm/node_modules/cross-spawn/node_modules/which/package.json43
-rw-r--r--deps/npm/node_modules/cross-spawn/node_modules/which/which.js125
-rw-r--r--deps/npm/node_modules/cross-spawn/package.json73
-rw-r--r--deps/npm/node_modules/eastasianwidth/eastasianwidth.js311
-rw-r--r--deps/npm/node_modules/eastasianwidth/package.json18
-rw-r--r--deps/npm/node_modules/foreground-child/LICENSE15
-rw-r--r--deps/npm/node_modules/foreground-child/dist/cjs/all-signals.js58
-rw-r--r--deps/npm/node_modules/foreground-child/dist/cjs/index.js154
-rw-r--r--deps/npm/node_modules/foreground-child/dist/cjs/package.json3
-rw-r--r--deps/npm/node_modules/foreground-child/dist/cjs/watchdog.js43
-rw-r--r--deps/npm/node_modules/foreground-child/dist/mjs/all-signals.js52
-rw-r--r--deps/npm/node_modules/foreground-child/dist/mjs/index.js146
-rw-r--r--deps/npm/node_modules/foreground-child/dist/mjs/package.json3
-rw-r--r--deps/npm/node_modules/foreground-child/dist/mjs/watchdog.js39
-rw-r--r--deps/npm/node_modules/foreground-child/package.json83
-rw-r--r--deps/npm/node_modules/fs-minipass/lib/index.js4
-rw-r--r--deps/npm/node_modules/fs-minipass/package.json9
-rw-r--r--deps/npm/node_modules/gauge/lib/index.js2
-rw-r--r--deps/npm/node_modules/gauge/package.json11
-rw-r--r--deps/npm/node_modules/glob/README.md1212
-rw-r--r--deps/npm/node_modules/glob/dist/cjs/index-cjs.js7
-rw-r--r--deps/npm/node_modules/glob/dist/cjs/package.json98
-rw-r--r--deps/npm/node_modules/glob/dist/cjs/src/bin.d.ts3
-rw-r--r--deps/npm/node_modules/glob/dist/cjs/src/bin.d.ts.map1
-rwxr-xr-xdeps/npm/node_modules/glob/dist/cjs/src/bin.js260
-rw-r--r--deps/npm/node_modules/glob/dist/cjs/src/bin.js.map1
-rw-r--r--deps/npm/node_modules/glob/dist/cjs/src/glob.d.ts344
-rw-r--r--deps/npm/node_modules/glob/dist/cjs/src/glob.d.ts.map1
-rw-r--r--deps/npm/node_modules/glob/dist/cjs/src/glob.js (renamed from deps/npm/node_modules/glob/dist/cjs/glob.js)1
-rw-r--r--deps/npm/node_modules/glob/dist/cjs/src/glob.js.map1
-rw-r--r--deps/npm/node_modules/glob/dist/cjs/src/has-magic.d.ts14
-rw-r--r--deps/npm/node_modules/glob/dist/cjs/src/has-magic.d.ts.map1
-rw-r--r--deps/npm/node_modules/glob/dist/cjs/src/has-magic.js (renamed from deps/npm/node_modules/glob/dist/cjs/has-magic.js)0
-rw-r--r--deps/npm/node_modules/glob/dist/cjs/src/has-magic.js.map1
-rw-r--r--deps/npm/node_modules/glob/dist/cjs/src/ignore.d.ts20
-rw-r--r--deps/npm/node_modules/glob/dist/cjs/src/ignore.d.ts.map1
-rw-r--r--deps/npm/node_modules/glob/dist/cjs/src/ignore.js (renamed from deps/npm/node_modules/glob/dist/cjs/ignore.js)0
-rw-r--r--deps/npm/node_modules/glob/dist/cjs/src/ignore.js.map1
-rw-r--r--deps/npm/node_modules/glob/dist/cjs/src/index.d.ts95
-rw-r--r--deps/npm/node_modules/glob/dist/cjs/src/index.d.ts.map1
-rw-r--r--deps/npm/node_modules/glob/dist/cjs/src/index.js (renamed from deps/npm/node_modules/glob/dist/cjs/index.js)10
-rw-r--r--deps/npm/node_modules/glob/dist/cjs/src/index.js.map1
-rw-r--r--deps/npm/node_modules/glob/dist/cjs/src/pattern.d.ts77
-rw-r--r--deps/npm/node_modules/glob/dist/cjs/src/pattern.d.ts.map1
-rw-r--r--deps/npm/node_modules/glob/dist/cjs/src/pattern.js (renamed from deps/npm/node_modules/glob/dist/cjs/pattern.js)0
-rw-r--r--deps/npm/node_modules/glob/dist/cjs/src/pattern.js.map1
-rw-r--r--deps/npm/node_modules/glob/dist/cjs/src/processor.d.ts59
-rw-r--r--deps/npm/node_modules/glob/dist/cjs/src/processor.d.ts.map1
-rw-r--r--deps/npm/node_modules/glob/dist/cjs/src/processor.js (renamed from deps/npm/node_modules/glob/dist/cjs/processor.js)0
-rw-r--r--deps/npm/node_modules/glob/dist/cjs/src/processor.js.map1
-rw-r--r--deps/npm/node_modules/glob/dist/cjs/src/walker.d.ts96
-rw-r--r--deps/npm/node_modules/glob/dist/cjs/src/walker.d.ts.map1
-rw-r--r--deps/npm/node_modules/glob/dist/cjs/src/walker.js (renamed from deps/npm/node_modules/glob/dist/cjs/walker.js)16
-rw-r--r--deps/npm/node_modules/glob/dist/cjs/src/walker.js.map1
-rw-r--r--deps/npm/node_modules/glob/dist/mjs/glob.d.ts344
-rw-r--r--deps/npm/node_modules/glob/dist/mjs/glob.d.ts.map1
-rw-r--r--deps/npm/node_modules/glob/dist/mjs/glob.js1
-rw-r--r--deps/npm/node_modules/glob/dist/mjs/glob.js.map1
-rw-r--r--deps/npm/node_modules/glob/dist/mjs/has-magic.d.ts14
-rw-r--r--deps/npm/node_modules/glob/dist/mjs/has-magic.d.ts.map1
-rw-r--r--deps/npm/node_modules/glob/dist/mjs/has-magic.js.map1
-rw-r--r--deps/npm/node_modules/glob/dist/mjs/ignore.d.ts20
-rw-r--r--deps/npm/node_modules/glob/dist/mjs/ignore.d.ts.map1
-rw-r--r--deps/npm/node_modules/glob/dist/mjs/ignore.js.map1
-rw-r--r--deps/npm/node_modules/glob/dist/mjs/index.d.ts95
-rw-r--r--deps/npm/node_modules/glob/dist/mjs/index.d.ts.map1
-rw-r--r--deps/npm/node_modules/glob/dist/mjs/index.js7
-rw-r--r--deps/npm/node_modules/glob/dist/mjs/index.js.map1
-rw-r--r--deps/npm/node_modules/glob/dist/mjs/package.json1
-rw-r--r--deps/npm/node_modules/glob/dist/mjs/pattern.d.ts77
-rw-r--r--deps/npm/node_modules/glob/dist/mjs/pattern.d.ts.map1
-rw-r--r--deps/npm/node_modules/glob/dist/mjs/pattern.js.map1
-rw-r--r--deps/npm/node_modules/glob/dist/mjs/processor.d.ts59
-rw-r--r--deps/npm/node_modules/glob/dist/mjs/processor.d.ts.map1
-rw-r--r--deps/npm/node_modules/glob/dist/mjs/processor.js.map1
-rw-r--r--deps/npm/node_modules/glob/dist/mjs/walker.d.ts96
-rw-r--r--deps/npm/node_modules/glob/dist/mjs/walker.d.ts.map1
-rw-r--r--deps/npm/node_modules/glob/dist/mjs/walker.js11
-rw-r--r--deps/npm/node_modules/glob/dist/mjs/walker.js.map1
-rw-r--r--deps/npm/node_modules/glob/package.json18
-rw-r--r--deps/npm/node_modules/ignore-walk/package.json11
-rw-r--r--deps/npm/node_modules/ini/lib/ini.js115
-rw-r--r--deps/npm/node_modules/ini/package.json20
-rw-r--r--deps/npm/node_modules/is-core-module/core.json5
-rw-r--r--deps/npm/node_modules/is-core-module/package.json9
-rw-r--r--deps/npm/node_modules/jackspeak/LICENSE.md55
-rw-r--r--deps/npm/node_modules/jackspeak/dist/cjs/index.js723
-rw-r--r--deps/npm/node_modules/jackspeak/dist/cjs/package.json3
-rw-r--r--deps/npm/node_modules/jackspeak/dist/cjs/parse-args.js42
-rw-r--r--deps/npm/node_modules/jackspeak/dist/mjs/index.js713
-rw-r--r--deps/npm/node_modules/jackspeak/dist/mjs/package.json3
-rw-r--r--deps/npm/node_modules/jackspeak/dist/mjs/parse-args.js19
-rw-r--r--deps/npm/node_modules/jackspeak/package.json98
-rw-r--r--deps/npm/node_modules/libnpmaccess/package.json4
-rw-r--r--deps/npm/node_modules/libnpmdiff/lib/untar.js2
-rw-r--r--deps/npm/node_modules/libnpmdiff/package.json10
-rw-r--r--deps/npm/node_modules/libnpmexec/lib/file-exists.js2
-rw-r--r--deps/npm/node_modules/libnpmexec/lib/index.js20
-rw-r--r--deps/npm/node_modules/libnpmexec/package.json10
-rw-r--r--deps/npm/node_modules/libnpmfund/package.json8
-rw-r--r--deps/npm/node_modules/libnpmhook/package.json4
-rw-r--r--deps/npm/node_modules/libnpmorg/package.json8
-rw-r--r--deps/npm/node_modules/libnpmpack/package.json8
-rw-r--r--deps/npm/node_modules/libnpmpublish/package.json8
-rw-r--r--deps/npm/node_modules/libnpmsearch/package.json4
-rw-r--r--deps/npm/node_modules/libnpmteam/package.json4
-rw-r--r--deps/npm/node_modules/libnpmversion/package.json4
-rw-r--r--deps/npm/node_modules/make-fetch-happen/lib/cache/entry.js27
-rw-r--r--deps/npm/node_modules/make-fetch-happen/lib/options.js2
-rw-r--r--deps/npm/node_modules/make-fetch-happen/lib/remote.js2
-rw-r--r--deps/npm/node_modules/make-fetch-happen/package.json9
-rw-r--r--deps/npm/node_modules/minimatch/dist/cjs/_parse.js300
-rw-r--r--deps/npm/node_modules/minimatch/dist/cjs/ast.js566
-rw-r--r--deps/npm/node_modules/minimatch/dist/cjs/extglob.js4
-rw-r--r--deps/npm/node_modules/minimatch/dist/cjs/index-cjs.js7
-rw-r--r--deps/npm/node_modules/minimatch/dist/cjs/index.js369
-rw-r--r--deps/npm/node_modules/minimatch/dist/cjs/parse.js650
-rw-r--r--deps/npm/node_modules/minimatch/dist/mjs/_parse.js296
-rw-r--r--deps/npm/node_modules/minimatch/dist/mjs/ast.js562
-rw-r--r--deps/npm/node_modules/minimatch/dist/mjs/extglob.js3
-rw-r--r--deps/npm/node_modules/minimatch/dist/mjs/index.js358
-rw-r--r--deps/npm/node_modules/minimatch/dist/mjs/parse.js646
-rw-r--r--deps/npm/node_modules/minimatch/package.json10
-rw-r--r--deps/npm/node_modules/minipass-fetch/lib/blob.js2
-rw-r--r--deps/npm/node_modules/minipass-fetch/lib/body.js2
-rw-r--r--deps/npm/node_modules/minipass-fetch/lib/index.js18
-rw-r--r--deps/npm/node_modules/minipass-fetch/lib/request.js3
-rw-r--r--deps/npm/node_modules/minipass-fetch/package.json9
-rw-r--r--deps/npm/node_modules/minipass/index.js2
-rw-r--r--deps/npm/node_modules/minipass/index.mjs3
-rw-r--r--deps/npm/node_modules/minipass/package.json2
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/signal-exit/LICENSE.txt16
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/signal-exit/index.js (renamed from deps/npm/node_modules/signal-exit/index.js)0
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/signal-exit/package.json38
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/signal-exit/signals.js (renamed from deps/npm/node_modules/signal-exit/signals.js)0
-rw-r--r--deps/npm/node_modules/npm-install-checks/lib/index.js2
-rw-r--r--deps/npm/node_modules/npm-install-checks/package.json7
-rw-r--r--deps/npm/node_modules/npm-normalize-package-bin/lib/index.js2
-rw-r--r--deps/npm/node_modules/npm-normalize-package-bin/package.json9
-rw-r--r--deps/npm/node_modules/npm-registry-fetch/lib/clean-url.js3
-rw-r--r--deps/npm/node_modules/npm-registry-fetch/lib/index.js2
-rw-r--r--deps/npm/node_modules/npm-registry-fetch/package.json11
-rw-r--r--deps/npm/node_modules/pacote/README.md7
-rw-r--r--deps/npm/node_modules/pacote/lib/dir.js2
-rw-r--r--deps/npm/node_modules/pacote/lib/fetcher.js2
-rw-r--r--deps/npm/node_modules/pacote/lib/git.js2
-rw-r--r--deps/npm/node_modules/pacote/lib/remote.js2
-rw-r--r--deps/npm/node_modules/pacote/package.json13
-rw-r--r--deps/npm/node_modules/path-key/index.js16
-rw-r--r--deps/npm/node_modules/path-key/license9
-rw-r--r--deps/npm/node_modules/path-key/package.json39
-rw-r--r--deps/npm/node_modules/path-scurry/dist/cjs/index.js113
-rw-r--r--deps/npm/node_modules/path-scurry/dist/mjs/index.js102
-rw-r--r--deps/npm/node_modules/path-scurry/node_modules/lru-cache/LICENSE15
-rw-r--r--deps/npm/node_modules/path-scurry/node_modules/lru-cache/dist/cjs/index.js1395
-rw-r--r--deps/npm/node_modules/path-scurry/node_modules/lru-cache/dist/cjs/index.min.js2
-rw-r--r--deps/npm/node_modules/path-scurry/node_modules/lru-cache/dist/cjs/package.json3
-rw-r--r--deps/npm/node_modules/path-scurry/node_modules/lru-cache/dist/mjs/index.js1391
-rw-r--r--deps/npm/node_modules/path-scurry/node_modules/lru-cache/dist/mjs/index.min.js2
-rw-r--r--deps/npm/node_modules/path-scurry/node_modules/lru-cache/dist/mjs/package.json3
-rw-r--r--deps/npm/node_modules/path-scurry/node_modules/lru-cache/package.json109
-rw-r--r--deps/npm/node_modules/path-scurry/package.json10
-rw-r--r--deps/npm/node_modules/postcss-selector-parser/dist/index.js11
-rw-r--r--deps/npm/node_modules/postcss-selector-parser/dist/parser.js297
-rw-r--r--deps/npm/node_modules/postcss-selector-parser/dist/processor.js60
-rw-r--r--deps/npm/node_modules/postcss-selector-parser/dist/selectors/attribute.js142
-rw-r--r--deps/npm/node_modules/postcss-selector-parser/dist/selectors/className.js23
-rw-r--r--deps/npm/node_modules/postcss-selector-parser/dist/selectors/combinator.js12
-rw-r--r--deps/npm/node_modules/postcss-selector-parser/dist/selectors/comment.js12
-rw-r--r--deps/npm/node_modules/postcss-selector-parser/dist/selectors/constructors.js37
-rw-r--r--deps/npm/node_modules/postcss-selector-parser/dist/selectors/container.js101
-rw-r--r--deps/npm/node_modules/postcss-selector-parser/dist/selectors/guards.js22
-rw-r--r--deps/npm/node_modules/postcss-selector-parser/dist/selectors/id.js14
-rw-r--r--deps/npm/node_modules/postcss-selector-parser/dist/selectors/index.js6
-rw-r--r--deps/npm/node_modules/postcss-selector-parser/dist/selectors/namespace.js25
-rw-r--r--deps/npm/node_modules/postcss-selector-parser/dist/selectors/nesting.js12
-rw-r--r--deps/npm/node_modules/postcss-selector-parser/dist/selectors/node.js65
-rw-r--r--deps/npm/node_modules/postcss-selector-parser/dist/selectors/pseudo.js14
-rw-r--r--deps/npm/node_modules/postcss-selector-parser/dist/selectors/root.js20
-rw-r--r--deps/npm/node_modules/postcss-selector-parser/dist/selectors/selector.js12
-rw-r--r--deps/npm/node_modules/postcss-selector-parser/dist/selectors/string.js12
-rw-r--r--deps/npm/node_modules/postcss-selector-parser/dist/selectors/tag.js12
-rw-r--r--deps/npm/node_modules/postcss-selector-parser/dist/selectors/types.js2
-rw-r--r--deps/npm/node_modules/postcss-selector-parser/dist/selectors/universal.js12
-rw-r--r--deps/npm/node_modules/postcss-selector-parser/dist/sortAscending.js2
-rw-r--r--deps/npm/node_modules/postcss-selector-parser/dist/tokenTypes.js33
-rw-r--r--deps/npm/node_modules/postcss-selector-parser/dist/tokenize.js90
-rw-r--r--deps/npm/node_modules/postcss-selector-parser/dist/util/ensureObject.js5
-rw-r--r--deps/npm/node_modules/postcss-selector-parser/dist/util/getProp.js6
-rw-r--r--deps/npm/node_modules/postcss-selector-parser/dist/util/index.js11
-rw-r--r--deps/npm/node_modules/postcss-selector-parser/dist/util/stripComments.js6
-rw-r--r--deps/npm/node_modules/postcss-selector-parser/dist/util/unesc.js41
-rw-r--r--deps/npm/node_modules/postcss-selector-parser/package.json17
-rw-r--r--deps/npm/node_modules/read-package-json/lib/read-json.js11
-rw-r--r--deps/npm/node_modules/read-package-json/package.json9
-rw-r--r--deps/npm/node_modules/read/lib/read.js6
-rw-r--r--deps/npm/node_modules/read/package.json7
-rw-r--r--deps/npm/node_modules/semver/README.md66
-rwxr-xr-xdeps/npm/node_modules/semver/bin/semver.js18
-rw-r--r--deps/npm/node_modules/semver/classes/comparator.js70
-rw-r--r--deps/npm/node_modules/semver/classes/range.js8
-rw-r--r--deps/npm/node_modules/semver/classes/semver.js41
-rw-r--r--deps/npm/node_modules/semver/functions/diff.js65
-rw-r--r--deps/npm/node_modules/semver/functions/inc.js5
-rw-r--r--deps/npm/node_modules/semver/functions/parse.js27
-rw-r--r--deps/npm/node_modules/semver/index.js1
-rw-r--r--deps/npm/node_modules/semver/internal/constants.js17
-rw-r--r--deps/npm/node_modules/semver/internal/parse-options.js24
-rw-r--r--deps/npm/node_modules/semver/package.json13
-rw-r--r--deps/npm/node_modules/semver/ranges/intersects.js2
-rw-r--r--deps/npm/node_modules/semver/ranges/subset.js9
-rw-r--r--deps/npm/node_modules/shebang-command/index.js19
-rw-r--r--deps/npm/node_modules/shebang-command/license9
-rw-r--r--deps/npm/node_modules/shebang-command/package.json34
-rw-r--r--deps/npm/node_modules/shebang-regex/index.js2
-rw-r--r--deps/npm/node_modules/shebang-regex/license9
-rw-r--r--deps/npm/node_modules/shebang-regex/package.json35
-rw-r--r--deps/npm/node_modules/signal-exit/LICENSE.txt2
-rw-r--r--deps/npm/node_modules/signal-exit/dist/cjs/browser.js10
-rw-r--r--deps/npm/node_modules/signal-exit/dist/cjs/index.js273
-rw-r--r--deps/npm/node_modules/signal-exit/dist/cjs/package.json3
-rw-r--r--deps/npm/node_modules/signal-exit/dist/cjs/signals.js42
-rw-r--r--deps/npm/node_modules/signal-exit/dist/mjs/browser.js4
-rw-r--r--deps/npm/node_modules/signal-exit/dist/mjs/index.js269
-rw-r--r--deps/npm/node_modules/signal-exit/dist/mjs/package.json3
-rw-r--r--deps/npm/node_modules/signal-exit/dist/mjs/signals.js39
-rw-r--r--deps/npm/node_modules/signal-exit/package.json106
-rw-r--r--deps/npm/node_modules/sigstore/README.md36
-rw-r--r--deps/npm/node_modules/sigstore/dist/ca/format.d.ts2
-rw-r--r--deps/npm/node_modules/sigstore/dist/ca/index.js10
-rw-r--r--deps/npm/node_modules/sigstore/dist/ca/verify/signer.js14
-rw-r--r--deps/npm/node_modules/sigstore/dist/cli/index.js19
-rw-r--r--deps/npm/node_modules/sigstore/dist/config.d.ts44
-rw-r--r--deps/npm/node_modules/sigstore/dist/config.js145
-rw-r--r--deps/npm/node_modules/sigstore/dist/error.d.ts11
-rw-r--r--deps/npm/node_modules/sigstore/dist/error.js12
-rw-r--r--deps/npm/node_modules/sigstore/dist/external/error.d.ts (renamed from deps/npm/node_modules/sigstore/dist/client/error.d.ts)0
-rw-r--r--deps/npm/node_modules/sigstore/dist/external/error.js (renamed from deps/npm/node_modules/sigstore/dist/client/error.js)0
-rw-r--r--deps/npm/node_modules/sigstore/dist/external/fulcio.d.ts (renamed from deps/npm/node_modules/sigstore/dist/client/fulcio.d.ts)0
-rw-r--r--deps/npm/node_modules/sigstore/dist/external/fulcio.js (renamed from deps/npm/node_modules/sigstore/dist/client/fulcio.js)0
-rw-r--r--deps/npm/node_modules/sigstore/dist/external/index.d.ts (renamed from deps/npm/node_modules/sigstore/dist/client/index.d.ts)1
-rw-r--r--deps/npm/node_modules/sigstore/dist/external/index.js (renamed from deps/npm/node_modules/sigstore/dist/client/index.js)4
-rw-r--r--deps/npm/node_modules/sigstore/dist/external/rekor.d.ts (renamed from deps/npm/node_modules/sigstore/dist/client/rekor.d.ts)0
-rw-r--r--deps/npm/node_modules/sigstore/dist/external/rekor.js (renamed from deps/npm/node_modules/sigstore/dist/client/rekor.js)0
-rw-r--r--deps/npm/node_modules/sigstore/dist/identity/ci.js12
-rw-r--r--deps/npm/node_modules/sigstore/dist/sigstore-utils.d.ts7
-rw-r--r--deps/npm/node_modules/sigstore/dist/sigstore-utils.js41
-rw-r--r--deps/npm/node_modules/sigstore/dist/sigstore.d.ts41
-rw-r--r--deps/npm/node_modules/sigstore/dist/sigstore.js140
-rw-r--r--deps/npm/node_modules/sigstore/dist/tlog/index.js21
-rw-r--r--deps/npm/node_modules/sigstore/dist/tuf/index.d.ts4
-rw-r--r--deps/npm/node_modules/sigstore/dist/tuf/index.js19
-rw-r--r--deps/npm/node_modules/sigstore/dist/tuf/target.d.ts2
-rw-r--r--deps/npm/node_modules/sigstore/dist/tuf/target.js48
-rw-r--r--deps/npm/node_modules/sigstore/dist/types/sigstore/index.d.ts3
-rw-r--r--deps/npm/node_modules/sigstore/dist/types/sigstore/index.js5
-rw-r--r--deps/npm/node_modules/sigstore/dist/x509/ext.d.ts1
-rw-r--r--deps/npm/node_modules/sigstore/dist/x509/ext.js3
-rw-r--r--deps/npm/node_modules/sigstore/package.json6
-rw-r--r--deps/npm/node_modules/ssri/lib/index.js86
-rw-r--r--deps/npm/node_modules/ssri/package.json8
-rw-r--r--deps/npm/node_modules/string-width-cjs/index.js47
-rw-r--r--deps/npm/node_modules/string-width-cjs/license9
-rw-r--r--deps/npm/node_modules/string-width-cjs/package.json56
-rw-r--r--deps/npm/node_modules/strip-ansi-cjs/index.js4
-rw-r--r--deps/npm/node_modules/strip-ansi-cjs/license9
-rw-r--r--deps/npm/node_modules/strip-ansi-cjs/package.json54
-rw-r--r--deps/npm/node_modules/tar/lib/pack.js4
-rw-r--r--deps/npm/node_modules/tar/lib/read-entry.js4
-rw-r--r--deps/npm/node_modules/tar/lib/write-entry.js6
-rw-r--r--deps/npm/node_modules/tar/package.json10
-rw-r--r--deps/npm/node_modules/tuf-js/dist/updater.js30
-rw-r--r--deps/npm/node_modules/tuf-js/dist/utils/url.js14
-rw-r--r--deps/npm/node_modules/tuf-js/package.json14
-rw-r--r--deps/npm/node_modules/walk-up-path/dist/cjs/index.js18
-rw-r--r--deps/npm/node_modules/walk-up-path/dist/cjs/package.json3
-rw-r--r--deps/npm/node_modules/walk-up-path/dist/mjs/index.js14
-rw-r--r--deps/npm/node_modules/walk-up-path/dist/mjs/package.json3
-rw-r--r--deps/npm/node_modules/walk-up-path/index.js11
-rw-r--r--deps/npm/node_modules/walk-up-path/package.json60
-rw-r--r--deps/npm/node_modules/which/README.md7
-rw-r--r--deps/npm/node_modules/which/lib/index.js9
-rw-r--r--deps/npm/node_modules/which/package.json7
-rwxr-xr-xdeps/npm/node_modules/wrap-ansi-cjs/index.js216
-rw-r--r--deps/npm/node_modules/wrap-ansi-cjs/license9
-rw-r--r--deps/npm/node_modules/wrap-ansi-cjs/package.json62
-rwxr-xr-xdeps/npm/node_modules/wrap-ansi/index.js214
-rw-r--r--deps/npm/node_modules/wrap-ansi/license9
-rw-r--r--deps/npm/node_modules/wrap-ansi/node_modules/ansi-regex/index.js8
-rw-r--r--deps/npm/node_modules/wrap-ansi/node_modules/ansi-regex/license9
-rw-r--r--deps/npm/node_modules/wrap-ansi/node_modules/ansi-regex/package.json58
-rw-r--r--deps/npm/node_modules/wrap-ansi/node_modules/ansi-styles/index.js223
-rw-r--r--deps/npm/node_modules/wrap-ansi/node_modules/ansi-styles/license9
-rw-r--r--deps/npm/node_modules/wrap-ansi/node_modules/ansi-styles/package.json54
-rw-r--r--deps/npm/node_modules/wrap-ansi/node_modules/emoji-regex/LICENSE-MIT.txt20
-rw-r--r--deps/npm/node_modules/wrap-ansi/node_modules/emoji-regex/RGI_Emoji.js6
-rw-r--r--deps/npm/node_modules/wrap-ansi/node_modules/emoji-regex/es2015/RGI_Emoji.js6
-rw-r--r--deps/npm/node_modules/wrap-ansi/node_modules/emoji-regex/es2015/index.js6
-rw-r--r--deps/npm/node_modules/wrap-ansi/node_modules/emoji-regex/es2015/text.js6
-rw-r--r--deps/npm/node_modules/wrap-ansi/node_modules/emoji-regex/index.js6
-rw-r--r--deps/npm/node_modules/wrap-ansi/node_modules/emoji-regex/package.json52
-rw-r--r--deps/npm/node_modules/wrap-ansi/node_modules/emoji-regex/text.js6
-rw-r--r--deps/npm/node_modules/wrap-ansi/node_modules/string-width/index.js54
-rw-r--r--deps/npm/node_modules/wrap-ansi/node_modules/string-width/license9
-rw-r--r--deps/npm/node_modules/wrap-ansi/node_modules/string-width/package.json59
-rw-r--r--deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/index.js9
-rw-r--r--deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/license9
-rw-r--r--deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/package.json57
-rw-r--r--deps/npm/node_modules/wrap-ansi/package.json69
-rw-r--r--deps/npm/node_modules/write-file-atomic/lib/index.js2
-rw-r--r--deps/npm/node_modules/write-file-atomic/package.json13
-rw-r--r--deps/npm/package.json60
-rw-r--r--deps/npm/tap-snapshots/test/lib/docs.js.test.cjs13
-rw-r--r--deps/npm/tap-snapshots/test/lib/utils/error-message.js.test.cjs2
-rw-r--r--deps/npm/test/lib/cli.js2
-rw-r--r--deps/npm/test/lib/commands/config.js4
-rw-r--r--deps/npm/test/lib/utils/completion/installed-deep.js1
-rw-r--r--deps/npm/test/lib/utils/exit-handler.js2
-rw-r--r--deps/npm/test/lib/utils/log-file.js4
-rw-r--r--deps/npm/test/lib/utils/replace-info.js6
533 files changed, 18469 insertions, 5703 deletions
diff --git a/deps/npm/docs/content/commands/npm-ci.md b/deps/npm/docs/content/commands/npm-ci.md
index 48c018e050..5757bf1b29 100644
--- a/deps/npm/docs/content/commands/npm-ci.md
+++ b/deps/npm/docs/content/commands/npm-ci.md
@@ -72,40 +72,6 @@ cache:
### Configuration
-#### `save`
-
-* Default: `true` unless when using `npm update` where it defaults to `false`
-* Type: Boolean
-
-Save installed packages to a `package.json` file as dependencies.
-
-When used with the `npm rm` command, removes the dependency from
-`package.json`.
-
-Will also prevent writing to `package-lock.json` if set to `false`.
-
-#### `save-exact`
-
-* Default: false
-* Type: Boolean
-
-Dependencies saved to package.json will be configured with an exact version
-rather than using npm's default semver range operator.
-
-#### `global`
-
-* Default: false
-* Type: Boolean
-
-Operates in "global" mode, so that packages are installed into the `prefix`
-folder instead of the current working directory. See
-[folders](/configuring-npm/folders) for more on the differences in behavior.
-
-* packages are installed into the `{prefix}/lib/node_modules` folder, instead
- of the current working directory.
-* bin files are linked to `{prefix}/bin`
-* man pages are linked to `{prefix}/share/man`
-
#### `install-strategy`
* Default: "hoisted"
diff --git a/deps/npm/docs/content/commands/npm-config.md b/deps/npm/docs/content/commands/npm-config.md
index fe87abac90..69370fd5de 100644
--- a/deps/npm/docs/content/commands/npm-config.md
+++ b/deps/npm/docs/content/commands/npm-config.md
@@ -46,7 +46,7 @@ npm set key=value [key=value...]
Sets each of the config keys to the value provided.
-If value is omitted, then it sets it to an empty string.
+If value is omitted, the key will be removed from your config file entirely.
Note: for backwards compatibility, `npm config set key value` is supported
as an alias for `npm config set key=value`.
diff --git a/deps/npm/docs/content/commands/npm-install-ci-test.md b/deps/npm/docs/content/commands/npm-install-ci-test.md
index 5a8095787a..c5fe98be70 100644
--- a/deps/npm/docs/content/commands/npm-install-ci-test.md
+++ b/deps/npm/docs/content/commands/npm-install-ci-test.md
@@ -18,40 +18,6 @@ This command runs `npm ci` followed immediately by `npm test`.
### Configuration
-#### `save`
-
-* Default: `true` unless when using `npm update` where it defaults to `false`
-* Type: Boolean
-
-Save installed packages to a `package.json` file as dependencies.
-
-When used with the `npm rm` command, removes the dependency from
-`package.json`.
-
-Will also prevent writing to `package-lock.json` if set to `false`.
-
-#### `save-exact`
-
-* Default: false
-* Type: Boolean
-
-Dependencies saved to package.json will be configured with an exact version
-rather than using npm's default semver range operator.
-
-#### `global`
-
-* Default: false
-* Type: Boolean
-
-Operates in "global" mode, so that packages are installed into the `prefix`
-folder instead of the current working directory. See
-[folders](/configuring-npm/folders) for more on the differences in behavior.
-
-* packages are installed into the `{prefix}/lib/node_modules` folder, instead
- of the current working directory.
-* bin files are linked to `{prefix}/bin`
-* man pages are linked to `{prefix}/share/man`
-
#### `install-strategy`
* Default: "hoisted"
diff --git a/deps/npm/docs/content/commands/npm-ls.md b/deps/npm/docs/content/commands/npm-ls.md
index 5fd8b033c9..b712738b3d 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@9.6.4 /path/to/npm
+npm@9.6.6 /path/to/npm
└─┬ init-package-json@0.0.4
└── promzard@0.1.5
```
diff --git a/deps/npm/docs/content/commands/npm-publish.md b/deps/npm/docs/content/commands/npm-publish.md
index ec1cf3755b..334209490b 100644
--- a/deps/npm/docs/content/commands/npm-publish.md
+++ b/deps/npm/docs/content/commands/npm-publish.md
@@ -199,7 +199,8 @@ This value is not exported to the environment for child processes.
* Default: false
* Type: Boolean
-Indicates that a provenance statement should be generated.
+When publishing from a supported cloud CI/CD system, the package will be
+publicly linked to where it was built and published from.
### See Also
diff --git a/deps/npm/docs/content/commands/npm.md b/deps/npm/docs/content/commands/npm.md
index 579b7771c0..91356999e3 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
-9.6.4
+9.6.6
### Description
diff --git a/deps/npm/docs/content/configuring-npm/folders.md b/deps/npm/docs/content/configuring-npm/folders.md
index 6f230539dd..b15a5a9421 100644
--- a/deps/npm/docs/content/configuring-npm/folders.md
+++ b/deps/npm/docs/content/configuring-npm/folders.md
@@ -72,7 +72,7 @@ Man pages are not installed on Windows systems.
#### Cache
See [`npm cache`](/commands/npm-cache). Cache files are stored in `~/.npm` on Posix, or
-`%AppData%/npm-cache` on Windows.
+`%LocalAppData%/npm-cache` on Windows.
This is controlled by the [`cache` config](/using-npm/config#cache) param.
diff --git a/deps/npm/docs/content/using-npm/config.md b/deps/npm/docs/content/using-npm/config.md
index 9352491221..ae46b1eb43 100644
--- a/deps/npm/docs/content/using-npm/config.md
+++ b/deps/npm/docs/content/using-npm/config.md
@@ -1010,7 +1010,8 @@ Set to `false` to suppress the progress bar.
* Default: false
* Type: Boolean
-Indicates that a provenance statement should be generated.
+When publishing from a supported cloud CI/CD system, the package will be
+publicly linked to where it was built and published from.
#### `proxy`
diff --git a/deps/npm/docs/output/commands/npm-ci.html b/deps/npm/docs/output/commands/npm-ci.html
index cd2c21a3c2..12dc2c58a7 100644
--- a/deps/npm/docs/output/commands/npm-ci.html
+++ b/deps/npm/docs/output/commands/npm-ci.html
@@ -142,7 +142,7 @@ npm command-line interface
<section id="table_of_contents">
<h2 id="table-of-contents">Table of contents</h2>
-<div id="_table_of_contents"><ul><li><a href="#synopsis">Synopsis</a></li><li><a href="#description">Description</a></li><li><a href="#example">Example</a></li><li><a href="#configuration">Configuration</a></li><ul><li><a href="#save"><code>save</code></a></li><li><a href="#save-exact"><code>save-exact</code></a></li><li><a href="#global"><code>global</code></a></li><li><a href="#install-strategy"><code>install-strategy</code></a></li><li><a href="#legacy-bundling"><code>legacy-bundling</code></a></li><li><a href="#global-style"><code>global-style</code></a></li><li><a href="#omit"><code>omit</code></a></li><li><a href="#strict-peer-deps"><code>strict-peer-deps</code></a></li><li><a href="#package-lock"><code>package-lock</code></a></li><li><a href="#foreground-scripts"><code>foreground-scripts</code></a></li><li><a href="#ignore-scripts"><code>ignore-scripts</code></a></li><li><a href="#audit"><code>audit</code></a></li><li><a href="#bin-links"><code>bin-links</code></a></li><li><a href="#fund"><code>fund</code></a></li><li><a href="#dry-run"><code>dry-run</code></a></li><li><a href="#workspace"><code>workspace</code></a></li><li><a href="#workspaces"><code>workspaces</code></a></li><li><a href="#include-workspace-root"><code>include-workspace-root</code></a></li><li><a href="#install-links"><code>install-links</code></a></li></ul><li><a href="#see-also">See Also</a></li></ul></div>
+<div id="_table_of_contents"><ul><li><a href="#synopsis">Synopsis</a></li><li><a href="#description">Description</a></li><li><a href="#example">Example</a></li><li><a href="#configuration">Configuration</a></li><ul><li><a href="#install-strategy"><code>install-strategy</code></a></li><li><a href="#legacy-bundling"><code>legacy-bundling</code></a></li><li><a href="#global-style"><code>global-style</code></a></li><li><a href="#omit"><code>omit</code></a></li><li><a href="#strict-peer-deps"><code>strict-peer-deps</code></a></li><li><a href="#package-lock"><code>package-lock</code></a></li><li><a href="#foreground-scripts"><code>foreground-scripts</code></a></li><li><a href="#ignore-scripts"><code>ignore-scripts</code></a></li><li><a href="#audit"><code>audit</code></a></li><li><a href="#bin-links"><code>bin-links</code></a></li><li><a href="#fund"><code>fund</code></a></li><li><a href="#dry-run"><code>dry-run</code></a></li><li><a href="#workspace"><code>workspace</code></a></li><li><a href="#workspaces"><code>workspaces</code></a></li><li><a href="#include-workspace-root"><code>include-workspace-root</code></a></li><li><a href="#install-links"><code>install-links</code></a></li></ul><li><a href="#see-also">See Also</a></li></ul></div>
</section>
<div id="_content"><h3 id="synopsis">Synopsis</h3>
@@ -196,36 +196,6 @@ cache:
- "$HOME/.npm"
</code></pre>
<h3 id="configuration">Configuration</h3>
-<h4 id="save"><code>save</code></h4>
-<ul>
-<li>Default: <code>true</code> unless when using <code>npm update</code> where it defaults to <code>false</code></li>
-<li>Type: Boolean</li>
-</ul>
-<p>Save installed packages to a <code>package.json</code> file as dependencies.</p>
-<p>When used with the <code>npm rm</code> command, removes the dependency from
-<code>package.json</code>.</p>
-<p>Will also prevent writing to <code>package-lock.json</code> if set to <code>false</code>.</p>
-<h4 id="save-exact"><code>save-exact</code></h4>
-<ul>
-<li>Default: false</li>
-<li>Type: Boolean</li>
-</ul>
-<p>Dependencies saved to package.json will be configured with an exact version
-rather than using npm's default semver range operator.</p>
-<h4 id="global"><code>global</code></h4>
-<ul>
-<li>Default: false</li>
-<li>Type: Boolean</li>
-</ul>
-<p>Operates in "global" mode, so that packages are installed into the <code>prefix</code>
-folder instead of the current working directory. See
-<a href="../configuring-npm/folders.html">folders</a> for more on the differences in behavior.</p>
-<ul>
-<li>packages are installed into the <code>{prefix}/lib/node_modules</code> folder, instead
-of the current working directory.</li>
-<li>bin files are linked to <code>{prefix}/bin</code></li>
-<li>man pages are linked to <code>{prefix}/share/man</code></li>
-</ul>
<h4 id="install-strategy"><code>install-strategy</code></h4>
<ul>
<li>Default: "hoisted"</li>
diff --git a/deps/npm/docs/output/commands/npm-config.html b/deps/npm/docs/output/commands/npm-config.html
index 33195d8d03..d4c8bb541a 100644
--- a/deps/npm/docs/output/commands/npm-config.html
+++ b/deps/npm/docs/output/commands/npm-config.html
@@ -172,7 +172,7 @@ of the user and global npmrc files.</p>
npm set key=value [key=value...]
</code></pre>
<p>Sets each of the config keys to the value provided.</p>
-<p>If value is omitted, then it sets it to an empty string.</p>
+<p>If value is omitted, the key will be removed from your config file entirely.</p>
<p>Note: for backwards compatibility, <code>npm config set key value</code> is supported
as an alias for <code>npm config set key=value</code>.</p>
<h4 id="get">get</h4>
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 20b001f4e8..1afa069a3d 100644
--- a/deps/npm/docs/output/commands/npm-install-ci-test.html
+++ b/deps/npm/docs/output/commands/npm-install-ci-test.html
@@ -142,7 +142,7 @@ npm command-line interface
<section id="table_of_contents">
<h2 id="table-of-contents">Table of contents</h2>
-<div id="_table_of_contents"><ul><li><a href="#synopsis">Synopsis</a></li><li><a href="#description">Description</a></li><li><a href="#configuration">Configuration</a></li><ul><li><a href="#save"><code>save</code></a></li><li><a href="#save-exact"><code>save-exact</code></a></li><li><a href="#global"><code>global</code></a></li><li><a href="#install-strategy"><code>install-strategy</code></a></li><li><a href="#legacy-bundling"><code>legacy-bundling</code></a></li><li><a href="#global-style"><code>global-style</code></a></li><li><a href="#omit"><code>omit</code></a></li><li><a href="#strict-peer-deps"><code>strict-peer-deps</code></a></li><li><a href="#package-lock"><code>package-lock</code></a></li><li><a href="#foreground-scripts"><code>foreground-scripts</code></a></li><li><a href="#ignore-scripts"><code>ignore-scripts</code></a></li><li><a href="#audit"><code>audit</code></a></li><li><a href="#bin-links"><code>bin-links</code></a></li><li><a href="#fund"><code>fund</code></a></li><li><a href="#dry-run"><code>dry-run</code></a></li><li><a href="#workspace"><code>workspace</code></a></li><li><a href="#workspaces"><code>workspaces</code></a></li><li><a href="#include-workspace-root"><code>include-workspace-root</code></a></li><li><a href="#install-links"><code>install-links</code></a></li></ul><li><a href="#see-also">See Also</a></li></ul></div>
+<div id="_table_of_contents"><ul><li><a href="#synopsis">Synopsis</a></li><li><a href="#description">Description</a></li><li><a href="#configuration">Configuration</a></li><ul><li><a href="#install-strategy"><code>install-strategy</code></a></li><li><a href="#legacy-bundling"><code>legacy-bundling</code></a></li><li><a href="#global-style"><code>global-style</code></a></li><li><a href="#omit"><code>omit</code></a></li><li><a href="#strict-peer-deps"><code>strict-peer-deps</code></a></li><li><a href="#package-lock"><code>package-lock</code></a></li><li><a href="#foreground-scripts"><code>foreground-scripts</code></a></li><li><a href="#ignore-scripts"><code>ignore-scripts</code></a></li><li><a href="#audit"><code>audit</code></a></li><li><a href="#bin-links"><code>bin-links</code></a></li><li><a href="#fund"><code>fund</code></a></li><li><a href="#dry-run"><code>dry-run</code></a></li><li><a href="#workspace"><code>workspace</code></a></li><li><a href="#workspaces"><code>workspaces</code></a></li><li><a href="#include-workspace-root"><code>include-workspace-root</code></a></li><li><a href="#install-links"><code>install-links</code></a></li></ul><li><a href="#see-also">See Also</a></li></ul></div>
</section>
<div id="_content"><h3 id="synopsis">Synopsis</h3>
@@ -153,36 +153,6 @@ aliases: cit, clean-install-test, sit
<h3 id="description">Description</h3>
<p>This command runs <code>npm ci</code> followed immediately by <code>npm test</code>.</p>
<h3 id="configuration">Configuration</h3>
-<h4 id="save"><code>save</code></h4>
-<ul>
-<li>Default: <code>true</code> unless when using <code>npm update</code> where it defaults to <code>false</code></li>
-<li>Type: Boolean</li>
-</ul>
-<p>Save installed packages to a <code>package.json</code> file as dependencies.</p>
-<p>When used with the <code>npm rm</code> command, removes the dependency from
-<code>package.json</code>.</p>
-<p>Will also prevent writing to <code>package-lock.json</code> if set to <code>false</code>.</p>
-<h4 id="save-exact"><code>save-exact</code></h4>
-<ul>
-<li>Default: false</li>
-<li>Type: Boolean</li>
-</ul>
-<p>Dependencies saved to package.json will be configured with an exact version
-rather than using npm's default semver range operator.</p>
-<h4 id="global"><code>global</code></h4>
-<ul>
-<li>Default: false</li>
-<li>Type: Boolean</li>
-</ul>
-<p>Operates in "global" mode, so that packages are installed into the <code>prefix</code>
-folder instead of the current working directory. See
-<a href="../configuring-npm/folders.html">folders</a> for more on the differences in behavior.</p>
-<ul>
-<li>packages are installed into the <code>{prefix}/lib/node_modules</code> folder, instead
-of the current working directory.</li>
-<li>bin files are linked to <code>{prefix}/bin</code></li>
-<li>man pages are linked to <code>{prefix}/share/man</code></li>
-</ul>
<h4 id="install-strategy"><code>install-strategy</code></h4>
<ul>
<li>Default: "hoisted"</li>
diff --git a/deps/npm/docs/output/commands/npm-ls.html b/deps/npm/docs/output/commands/npm-ls.html
index fc3101558f..5fa3e0c1cc 100644
--- a/deps/npm/docs/output/commands/npm-ls.html
+++ b/deps/npm/docs/output/commands/npm-ls.html
@@ -160,7 +160,7 @@ tree at all, use <a href="../commands/npm-explain.html"><code>npm explain</code>
the results to only the paths to the packages named. Note that nested
packages will <em>also</em> show the paths to the specified packages. For
example, running <code>npm ls promzard</code> in npm's source tree will show:</p>
-<pre><code class="language-bash">npm@9.6.4 /path/to/npm
+<pre><code class="language-bash">npm@9.6.6 /path/to/npm
└─┬ init-package-json@0.0.4
└── promzard@0.1.5
</code></pre>
diff --git a/deps/npm/docs/output/commands/npm-publish.html b/deps/npm/docs/output/commands/npm-publish.html
index 000fc78712..6ebc39d627 100644
--- a/deps/npm/docs/output/commands/npm-publish.html
+++ b/deps/npm/docs/output/commands/npm-publish.html
@@ -311,7 +311,8 @@ the specified workspaces, and not on the root project.</p>
<li>Default: false</li>
<li>Type: Boolean</li>
</ul>
-<p>Indicates that a provenance statement should be generated.</p>
+<p>When publishing from a supported cloud CI/CD system, the package will be
+publicly linked to where it was built and published from.</p>
<h3 id="see-also">See Also</h3>
<ul>
<li><a href="../using-npm/package-spec.html">package spec</a></li>
diff --git a/deps/npm/docs/output/commands/npm.html b/deps/npm/docs/output/commands/npm.html
index 72218f072d..18c1361e59 100644
--- a/deps/npm/docs/output/commands/npm.html
+++ b/deps/npm/docs/output/commands/npm.html
@@ -150,7 +150,7 @@ npm command-line interface
</code></pre>
<p>Note: This command is unaware of workspaces.</p>
<h3 id="version">Version</h3>
-<p>9.6.4</p>
+<p>9.6.6</p>
<h3 id="description">Description</h3>
<p>npm is the package manager for the Node JavaScript platform. It puts
modules in place so that node can find them, and manages dependency
diff --git a/deps/npm/docs/output/configuring-npm/folders.html b/deps/npm/docs/output/configuring-npm/folders.html
index e0ebcb5cc0..cb97ac6ad2 100644
--- a/deps/npm/docs/output/configuring-npm/folders.html
+++ b/deps/npm/docs/output/configuring-npm/folders.html
@@ -194,7 +194,7 @@ when you run <code>npm test</code>.)</p>
<p>Man pages are not installed on Windows systems.</p>
<h4 id="cache">Cache</h4>
<p>See <a href="../commands/npm-cache.html"><code>npm cache</code></a>. Cache files are stored in <code>~/.npm</code> on Posix, or
-<code>%AppData%/npm-cache</code> on Windows.</p>
+<code>%LocalAppData%/npm-cache</code> on Windows.</p>
<p>This is controlled by the <a href="../using-npm/config#cache.html"><code>cache</code> config</a> param.</p>
<h4 id="temp-files">Temp Files</h4>
<p>Temporary files are stored by default in the folder specified by the
diff --git a/deps/npm/docs/output/using-npm/config.html b/deps/npm/docs/output/using-npm/config.html
index 3887fe1a56..5d62af0a4c 100644
--- a/deps/npm/docs/output/using-npm/config.html
+++ b/deps/npm/docs/output/using-npm/config.html
@@ -994,7 +994,8 @@ operations, if <code>process.stderr</code> is a TTY.</p>
<li>Default: false</li>
<li>Type: Boolean</li>
</ul>
-<p>Indicates that a provenance statement should be generated.</p>
+<p>When publishing from a supported cloud CI/CD system, the package will be
+publicly linked to where it was built and published from.</p>
<h4 id="proxy"><code>proxy</code></h4>
<ul>
<li>Default: null</li>
diff --git a/deps/npm/lib/commands/audit.js b/deps/npm/lib/commands/audit.js
index dab871669e..7b75ecbf2e 100644
--- a/deps/npm/lib/commands/audit.js
+++ b/deps/npm/lib/commands/audit.js
@@ -1,4 +1,3 @@
-const Arborist = require('@npmcli/arborist')
const auditReport = require('npm-audit-report')
const fetch = require('npm-registry-fetch')
const localeCompare = require('@isaacs/string-locale-compare')('en')
@@ -413,6 +412,7 @@ class Audit extends ArboristWorkspaceCmd {
async auditAdvisories (args) {
const reporter = this.npm.config.get('json') ? 'json' : 'detail'
+ const Arborist = require('@npmcli/arborist')
const opts = {
...this.npm.flatOptions,
audit: true,
@@ -445,6 +445,7 @@ class Audit extends ArboristWorkspaceCmd {
}
log.verbose('loading installed dependencies')
+ const Arborist = require('@npmcli/arborist')
const opts = {
...this.npm.flatOptions,
path: this.npm.prefix,
diff --git a/deps/npm/lib/commands/cache.js b/deps/npm/lib/commands/cache.js
index 0ab40b9ed4..9965f7085d 100644
--- a/deps/npm/lib/commands/cache.js
+++ b/deps/npm/lib/commands/cache.js
@@ -1,5 +1,4 @@
const cacache = require('cacache')
-const Arborist = require('@npmcli/arborist')
const pacote = require('pacote')
const fs = require('fs/promises')
const { join } = require('path')
@@ -162,7 +161,7 @@ class Cache extends BaseCommand {
return pacote.tarball.stream(spec, stream => {
stream.resume()
return stream.promise()
- }, { ...this.npm.flatOptions, Arborist })
+ }, { ...this.npm.flatOptions })
}))
}
diff --git a/deps/npm/lib/commands/ci.js b/deps/npm/lib/commands/ci.js
index 4dd7898dc6..97c292e8c5 100644
--- a/deps/npm/lib/commands/ci.js
+++ b/deps/npm/lib/commands/ci.js
@@ -1,4 +1,3 @@
-const Arborist = require('@npmcli/arborist')
const reifyFinish = require('../utils/reify-finish.js')
const runScript = require('@npmcli/run-script')
const fs = require('fs/promises')
@@ -6,13 +5,27 @@ const log = require('../utils/log-shim.js')
const validateLockfile = require('../utils/validate-lockfile.js')
const ArboristWorkspaceCmd = require('../arborist-cmd.js')
-const Install = require('./install.js')
class CI extends ArboristWorkspaceCmd {
static description = 'Clean install a project'
static name = 'ci'
- static params = Install.params
+ // These are in the order they will show up in when running "-h"
+ static params = [
+ 'install-strategy',
+ 'legacy-bundling',
+ 'global-style',
+ 'omit',
+ 'strict-peer-deps',
+ 'package-lock',
+ 'foreground-scripts',
+ 'ignore-scripts',
+ 'audit',
+ 'bin-links',
+ 'fund',
+ 'dry-run',
+ ...super.params,
+ ]
async exec () {
if (this.npm.global) {
@@ -22,6 +35,7 @@ class CI extends ArboristWorkspaceCmd {
}
const where = this.npm.prefix
+ const Arborist = require('@npmcli/arborist')
const opts = {
...this.npm.flatOptions,
packageLock: true, // npm ci should never skip lock files
diff --git a/deps/npm/lib/commands/config.js b/deps/npm/lib/commands/config.js
index ac5a74d01f..dfd44015cd 100644
--- a/deps/npm/lib/commands/config.js
+++ b/deps/npm/lib/commands/config.js
@@ -163,7 +163,13 @@ class Config extends BaseCommand {
`The \`${baseKey}\` option is deprecated, and can not be set in this way${deprecated}`
)
}
- this.npm.config.set(key, val || '', where)
+
+ if (val === '') {
+ this.npm.config.delete(key, where)
+ } else {
+ this.npm.config.set(key, val, where)
+ }
+
if (!this.npm.config.validate(where)) {
log.warn('config', 'omitting invalid config values')
}
diff --git a/deps/npm/lib/commands/dedupe.js b/deps/npm/lib/commands/dedupe.js
index 0cc0e80709..d4e8d0e8c8 100644
--- a/deps/npm/lib/commands/dedupe.js
+++ b/deps/npm/lib/commands/dedupe.js
@@ -1,5 +1,4 @@
// dedupe duplicated packages, or find them in the tree
-const Arborist = require('@npmcli/arborist')
const reifyFinish = require('../utils/reify-finish.js')
const ArboristWorkspaceCmd = require('../arborist-cmd.js')
@@ -31,6 +30,7 @@ class Dedupe extends ArboristWorkspaceCmd {
const dryRun = this.npm.config.get('dry-run')
const where = this.npm.prefix
+ const Arborist = require('@npmcli/arborist')
const opts = {
...this.npm.flatOptions,
path: where,
diff --git a/deps/npm/lib/commands/diff.js b/deps/npm/lib/commands/diff.js
index 1f4bfd3eb1..3924166af0 100644
--- a/deps/npm/lib/commands/diff.js
+++ b/deps/npm/lib/commands/diff.js
@@ -2,7 +2,6 @@ const { resolve } = require('path')
const semver = require('semver')
const libnpmdiff = require('libnpmdiff')
const npa = require('npm-package-arg')
-const Arborist = require('@npmcli/arborist')
const pacote = require('pacote')
const pickManifest = require('npm-pick-manifest')
const log = require('../utils/log-shim')
@@ -146,6 +145,7 @@ class Diff extends BaseCommand {
if (spec.registry) {
let actualTree
let node
+ const Arborist = require('@npmcli/arborist')
try {
const opts = {
...this.npm.flatOptions,
@@ -257,6 +257,7 @@ class Diff extends BaseCommand {
async findVersionsByPackageName (specs) {
let actualTree
+ const Arborist = require('@npmcli/arborist')
try {
const opts = {
...this.npm.flatOptions,
diff --git a/deps/npm/lib/commands/explain.js b/deps/npm/lib/commands/explain.js
index 44c32c0e56..a72514fb97 100644
--- a/deps/npm/lib/commands/explain.js
+++ b/deps/npm/lib/commands/explain.js
@@ -1,6 +1,4 @@
const { explainNode } = require('../utils/explain-dep.js')
-const completion = require('../utils/completion/installed-deep.js')
-const Arborist = require('@npmcli/arborist')
const npa = require('npm-package-arg')
const semver = require('semver')
const { relative, resolve } = require('path')
@@ -21,6 +19,7 @@ class Explain extends ArboristWorkspaceCmd {
// TODO
/* istanbul ignore next */
async completion (opts) {
+ const completion = require('../utils/completion/installed-deep.js')
return completion(this.npm, opts)
}
@@ -29,6 +28,7 @@ class Explain extends ArboristWorkspaceCmd {
throw this.usageError()
}
+ const Arborist = require('@npmcli/arborist')
const arb = new Arborist({ path: this.npm.prefix, ...this.npm.flatOptions })
const tree = await arb.loadActual()
diff --git a/deps/npm/lib/commands/fund.js b/deps/npm/lib/commands/fund.js
index 479ff487ec..1e8981967f 100644
--- a/deps/npm/lib/commands/fund.js
+++ b/deps/npm/lib/commands/fund.js
@@ -1,12 +1,10 @@
const archy = require('archy')
-const Arborist = require('@npmcli/arborist')
const pacote = require('pacote')
const semver = require('semver')
const npa = require('npm-package-arg')
const { depth } = require('treeverse')
const { readTree: getFundingInfo, normalizeFunding, isValidFunding } = require('libnpmfund')
-const completion = require('../utils/completion/installed-deep.js')
const openUrl = require('../utils/open-url.js')
const ArboristWorkspaceCmd = require('../arborist-cmd.js')
@@ -39,6 +37,7 @@ class Fund extends ArboristWorkspaceCmd {
// TODO
/* istanbul ignore next */
async completion (opts) {
+ const completion = require('../utils/completion/installed-deep.js')
return completion(this.npm, opts)
}
@@ -64,6 +63,7 @@ class Fund extends ArboristWorkspaceCmd {
}
const where = this.npm.prefix
+ const Arborist = require('@npmcli/arborist')
const arb = new Arborist({ ...this.npm.flatOptions, path: where })
const tree = await arb.loadActual()
@@ -80,6 +80,7 @@ class Fund extends ArboristWorkspaceCmd {
// TODO: add !workspacesEnabled option handling to libnpmfund
const fundingInfo = getFundingInfo(tree, {
...this.flatOptions,
+ Arborist,
workspaces: this.workspaceNames,
})
diff --git a/deps/npm/lib/commands/help-search.js b/deps/npm/lib/commands/help-search.js
index 0a706be70a..273807c746 100644
--- a/deps/npm/lib/commands/help-search.js
+++ b/deps/npm/lib/commands/help-search.js
@@ -1,6 +1,6 @@
const { readFile } = require('fs/promises')
const path = require('path')
-const glob = require('glob')
+const { glob } = require('glob')
const BaseCommand = require('../base-command.js')
const globify = pattern => pattern.split('\\').join('/')
diff --git a/deps/npm/lib/commands/help.js b/deps/npm/lib/commands/help.js
index d89f3f6436..4b40ef37af 100644
--- a/deps/npm/lib/commands/help.js
+++ b/deps/npm/lib/commands/help.js
@@ -1,7 +1,7 @@
const spawn = require('@npmcli/promise-spawn')
const path = require('path')
const openUrl = require('../utils/open-url.js')
-const glob = require('glob')
+const { glob } = require('glob')
const localeCompare = require('@isaacs/string-locale-compare')('en')
const globify = pattern => pattern.split('\\').join('/')
diff --git a/deps/npm/lib/commands/install.js b/deps/npm/lib/commands/install.js
index 246d7fdf8f..99f5b326f7 100644
--- a/deps/npm/lib/commands/install.js
+++ b/deps/npm/lib/commands/install.js
@@ -5,7 +5,6 @@ const readdir = util.promisify(fs.readdir)
const reifyFinish = require('../utils/reify-finish.js')
const log = require('../utils/log-shim.js')
const { resolve, join } = require('path')
-const Arborist = require('@npmcli/arborist')
const runScript = require('@npmcli/run-script')
const pacote = require('pacote')
const checks = require('npm-install-checks')
@@ -16,6 +15,7 @@ class Install extends ArboristWorkspaceCmd {
static name = 'install'
// These are in the order they will show up in when running "-h"
+ // If adding to this list, consider adding also to ci.js
static params = [
'save',
'save-exact',
@@ -135,6 +135,7 @@ class Install extends ArboristWorkspaceCmd {
throw this.usageError()
}
+ const Arborist = require('@npmcli/arborist')
const opts = {
...this.npm.flatOptions,
auditLevel: null,
diff --git a/deps/npm/lib/commands/link.js b/deps/npm/lib/commands/link.js
index 6d8027f2b9..61ae5a9808 100644
--- a/deps/npm/lib/commands/link.js
+++ b/deps/npm/lib/commands/link.js
@@ -3,7 +3,6 @@ const util = require('util')
const readdir = util.promisify(fs.readdir)
const { resolve } = require('path')
-const Arborist = require('@npmcli/arborist')
const npa = require('npm-package-arg')
const rpj = require('read-package-json-fast')
const semver = require('semver')
@@ -67,8 +66,10 @@ class Link extends ArboristWorkspaceCmd {
// load current packages from the global space,
// and then add symlinks installs locally
const globalTop = resolve(this.npm.globalDir, '..')
+ const Arborist = require('@npmcli/arborist')
const globalOpts = {
...this.npm.flatOptions,
+ Arborist,
path: globalTop,
global: true,
prune: false,
@@ -138,8 +139,10 @@ class Link extends ArboristWorkspaceCmd {
const paths = wsp && wsp.length ? wsp : [this.npm.prefix]
const add = paths.map(path => `file:${path.replace(/#/g, '%23')}`)
const globalTop = resolve(this.npm.globalDir, '..')
+ const Arborist = require('@npmcli/arborist')
const arb = new Arborist({
...this.npm.flatOptions,
+ Arborist,
path: globalTop,
global: true,
})
diff --git a/deps/npm/lib/commands/ls.js b/deps/npm/lib/commands/ls.js
index a737f44b73..eb9114802d 100644
--- a/deps/npm/lib/commands/ls.js
+++ b/deps/npm/lib/commands/ls.js
@@ -3,12 +3,9 @@ const relativePrefix = `.${sep}`
const { EOL } = require('os')
const archy = require('archy')
-const Arborist = require('@npmcli/arborist')
const { breadth } = require('treeverse')
const npa = require('npm-package-arg')
-const completion = require('../utils/completion/installed-deep.js')
-
const _depth = Symbol('depth')
const _dedupe = Symbol('dedupe')
const _filteredBy = Symbol('filteredBy')
@@ -44,6 +41,7 @@ class LS extends ArboristWorkspaceCmd {
// TODO
/* istanbul ignore next */
async completion (opts) {
+ const completion = require('../utils/completion/installed-deep.js')
return completion(this.npm, opts)
}
@@ -63,6 +61,8 @@ class LS extends ArboristWorkspaceCmd {
const path = global ? resolve(this.npm.globalDir, '..') : this.npm.prefix
+ const Arborist = require('@npmcli/arborist')
+
const arb = new Arborist({
global,
...this.npm.flatOptions,
diff --git a/deps/npm/lib/commands/outdated.js b/deps/npm/lib/commands/outdated.js
index 49626ebd5e..419fb5f5c7 100644
--- a/deps/npm/lib/commands/outdated.js
+++ b/deps/npm/lib/commands/outdated.js
@@ -6,8 +6,6 @@ const npa = require('npm-package-arg')
const pickManifest = require('npm-pick-manifest')
const localeCompare = require('@isaacs/string-locale-compare')('en')
-const Arborist = require('@npmcli/arborist')
-
const ansiTrim = require('../utils/ansi-trim.js')
const ArboristWorkspaceCmd = require('../arborist-cmd.js')
@@ -30,6 +28,7 @@ class Outdated extends ArboristWorkspaceCmd {
? global
: this.npm.prefix
+ const Arborist = require('@npmcli/arborist')
const arb = new Arborist({
...this.npm.flatOptions,
path: where,
diff --git a/deps/npm/lib/commands/prune.js b/deps/npm/lib/commands/prune.js
index ee2c30553f..12136e20e4 100644
--- a/deps/npm/lib/commands/prune.js
+++ b/deps/npm/lib/commands/prune.js
@@ -1,5 +1,4 @@
// prune extraneous packages
-const Arborist = require('@npmcli/arborist')
const reifyFinish = require('../utils/reify-finish.js')
const ArboristWorkspaceCmd = require('../arborist-cmd.js')
@@ -19,6 +18,7 @@ class Prune extends ArboristWorkspaceCmd {
async exec () {
const where = this.npm.prefix
+ const Arborist = require('@npmcli/arborist')
const opts = {
...this.npm.flatOptions,
path: where,
diff --git a/deps/npm/lib/commands/query.js b/deps/npm/lib/commands/query.js
index b5f4d8e57d..ba39f004fa 100644
--- a/deps/npm/lib/commands/query.js
+++ b/deps/npm/lib/commands/query.js
@@ -1,7 +1,6 @@
'use strict'
const { resolve } = require('path')
-const Arborist = require('@npmcli/arborist')
const BaseCommand = require('../base-command.js')
class QuerySelectorItem {
@@ -58,6 +57,7 @@ class Query extends BaseCommand {
async exec (args) {
// one dir up from wherever node_modules lives
const where = resolve(this.npm.dir, '..')
+ const Arborist = require('@npmcli/arborist')
const opts = {
...this.npm.flatOptions,
path: where,
@@ -73,6 +73,7 @@ class Query extends BaseCommand {
async execWorkspaces (args) {
await this.setWorkspaces()
+ const Arborist = require('@npmcli/arborist')
const opts = {
...this.npm.flatOptions,
path: this.npm.prefix,
diff --git a/deps/npm/lib/commands/rebuild.js b/deps/npm/lib/commands/rebuild.js
index df791106fd..527447e427 100644
--- a/deps/npm/lib/commands/rebuild.js
+++ b/deps/npm/lib/commands/rebuild.js
@@ -1,8 +1,6 @@
const { resolve } = require('path')
-const Arborist = require('@npmcli/arborist')
const npa = require('npm-package-arg')
const semver = require('semver')
-const completion = require('../utils/completion/installed-deep.js')
const ArboristWorkspaceCmd = require('../arborist-cmd.js')
class Rebuild extends ArboristWorkspaceCmd {
@@ -21,12 +19,14 @@ class Rebuild extends ArboristWorkspaceCmd {
// TODO
/* istanbul ignore next */
async completion (opts) {
+ const completion = require('../utils/completion/installed-deep.js')
return completion(this.npm, opts)
}
async exec (args) {
const globalTop = resolve(this.npm.globalDir, '..')
const where = this.npm.global ? globalTop : this.npm.prefix
+ const Arborist = require('@npmcli/arborist')
const arb = new Arborist({
...this.npm.flatOptions,
path: where,
diff --git a/deps/npm/lib/commands/search.js b/deps/npm/lib/commands/search.js
index 7419e97454..5fb0a12bce 100644
--- a/deps/npm/lib/commands/search.js
+++ b/deps/npm/lib/commands/search.js
@@ -1,4 +1,4 @@
-const Minipass = require('minipass')
+const { Minipass } = require('minipass')
const Pipeline = require('minipass-pipeline')
const libSearch = require('libnpmsearch')
const log = require('../utils/log-shim.js')
diff --git a/deps/npm/lib/commands/shrinkwrap.js b/deps/npm/lib/commands/shrinkwrap.js
index a240f03935..c6d817d480 100644
--- a/deps/npm/lib/commands/shrinkwrap.js
+++ b/deps/npm/lib/commands/shrinkwrap.js
@@ -1,6 +1,5 @@
const { resolve, basename } = require('path')
const { unlink } = require('fs').promises
-const Arborist = require('@npmcli/arborist')
const log = require('../utils/log-shim')
const BaseCommand = require('../base-command.js')
class Shrinkwrap extends BaseCommand {
@@ -21,6 +20,7 @@ class Shrinkwrap extends BaseCommand {
throw er
}
+ const Arborist = require('@npmcli/arborist')
const path = this.npm.prefix
const sw = resolve(path, 'npm-shrinkwrap.json')
const arb = new Arborist({ ...this.npm.flatOptions, path })
diff --git a/deps/npm/lib/commands/uninstall.js b/deps/npm/lib/commands/uninstall.js
index 8c44f2e321..e5373119ec 100644
--- a/deps/npm/lib/commands/uninstall.js
+++ b/deps/npm/lib/commands/uninstall.js
@@ -1,5 +1,4 @@
const { resolve } = require('path')
-const Arborist = require('@npmcli/arborist')
const rpj = require('read-package-json-fast')
const reifyFinish = require('../utils/reify-finish.js')
@@ -42,6 +41,7 @@ class Uninstall extends ArboristWorkspaceCmd {
? resolve(this.npm.globalDir, '..')
: this.npm.localPrefix
+ const Arborist = require('@npmcli/arborist')
const opts = {
...this.npm.flatOptions,
path,
diff --git a/deps/npm/lib/commands/update.js b/deps/npm/lib/commands/update.js
index fd30bcb41e..26be5ad681 100644
--- a/deps/npm/lib/commands/update.js
+++ b/deps/npm/lib/commands/update.js
@@ -1,10 +1,8 @@
const path = require('path')
-const Arborist = require('@npmcli/arborist')
const log = require('../utils/log-shim.js')
const reifyFinish = require('../utils/reify-finish.js')
-const completion = require('../utils/completion/installed-deep.js')
const ArboristWorkspaceCmd = require('../arborist-cmd.js')
class Update extends ArboristWorkspaceCmd {
@@ -34,6 +32,7 @@ class Update extends ArboristWorkspaceCmd {
// TODO
/* istanbul ignore next */
async completion (opts) {
+ const completion = require('../utils/completion/installed-deep.js')
return completion(this.npm, opts)
}
@@ -53,6 +52,7 @@ class Update extends ArboristWorkspaceCmd {
'https://github.com/npm/rfcs/blob/latest/implemented/0019-remove-update-depth-option.md')
}
+ const Arborist = require('@npmcli/arborist')
const opts = {
...this.npm.flatOptions,
path: where,
diff --git a/deps/npm/lib/npm.js b/deps/npm/lib/npm.js
index 5a347a2fd6..eebb453dbb 100644
--- a/deps/npm/lib/npm.js
+++ b/deps/npm/lib/npm.js
@@ -1,4 +1,3 @@
-const Arborist = require('@npmcli/arborist')
const EventEmitter = require('events')
const { resolve, dirname, join } = require('path')
const Config = require('@npmcli/config')
@@ -310,10 +309,6 @@ class Npm extends EventEmitter {
get flatOptions () {
const { flat } = this.config
- // the Arborist constructor is used almost everywhere we call pacote, it's
- // easiest to attach it to flatOptions so it goes everywhere without having
- // to touch every call
- flat.Arborist = Arborist
flat.nodeVersion = process.version
flat.npmVersion = pkg.version
if (this.command) {
diff --git a/deps/npm/lib/package-url-cmd.js b/deps/npm/lib/package-url-cmd.js
index 20e6a16fe1..250b46eeed 100644
--- a/deps/npm/lib/package-url-cmd.js
+++ b/deps/npm/lib/package-url-cmd.js
@@ -2,7 +2,6 @@
const pacote = require('pacote')
const hostedGitInfo = require('hosted-git-info')
-const Arborist = require('@npmcli/arborist')
const openUrl = require('./utils/open-url.js')
const log = require('./utils/log-shim')
@@ -33,7 +32,6 @@ class PackageUrlCommand extends BaseCommand {
...this.npm.flatOptions,
where: this.npm.localPrefix,
fullMetadata: true,
- Arborist,
}
const mani = await pacote.manifest(arg, opts)
const url = this.getUrl(arg, mani)
diff --git a/deps/npm/lib/utils/completion/installed-deep.js b/deps/npm/lib/utils/completion/installed-deep.js
index 7098d81fe7..045708f74b 100644
--- a/deps/npm/lib/utils/completion/installed-deep.js
+++ b/deps/npm/lib/utils/completion/installed-deep.js
@@ -1,8 +1,8 @@
const { resolve } = require('path')
-const Arborist = require('@npmcli/arborist')
const localeCompare = require('@isaacs/string-locale-compare')('en')
const installedDeep = async (npm) => {
+ const Arborist = require('@npmcli/arborist')
const {
depth,
global,
diff --git a/deps/npm/lib/utils/config/definitions.js b/deps/npm/lib/utils/config/definitions.js
index 4b9eb1f64c..373989dbea 100644
--- a/deps/npm/lib/utils/config/definitions.js
+++ b/deps/npm/lib/utils/config/definitions.js
@@ -1624,7 +1624,8 @@ define('provenance', {
default: false,
type: Boolean,
description: `
- Indicates that a provenance statement should be generated.
+ When publishing from a supported cloud CI/CD system, the package will be
+ publicly linked to where it was built and published from.
`,
flatten,
})
diff --git a/deps/npm/lib/utils/format-search-stream.js b/deps/npm/lib/utils/format-search-stream.js
index 2a2dadd5c3..21929cce7d 100644
--- a/deps/npm/lib/utils/format-search-stream.js
+++ b/deps/npm/lib/utils/format-search-stream.js
@@ -1,4 +1,4 @@
-const Minipass = require('minipass')
+const { Minipass } = require('minipass')
const columnify = require('columnify')
// This module consumes package data in the following format:
diff --git a/deps/npm/lib/utils/log-file.js b/deps/npm/lib/utils/log-file.js
index 93114e9430..84f8698363 100644
--- a/deps/npm/lib/utils/log-file.js
+++ b/deps/npm/lib/utils/log-file.js
@@ -1,8 +1,8 @@
const os = require('os')
const { join, dirname, basename } = require('path')
const { format } = require('util')
-const glob = require('glob')
-const MiniPass = require('minipass')
+const { glob } = require('glob')
+const { Minipass } = require('minipass')
const fsMiniPass = require('fs-minipass')
const fs = require('fs/promises')
const log = require('./log-shim')
@@ -56,7 +56,7 @@ class LogFiles {
}
on () {
- this.#logStream = new MiniPass()
+ this.#logStream = new Minipass()
process.on('log', this.#logHandler)
}
@@ -103,7 +103,7 @@ class LogFiles {
}
get #isBuffered () {
- return this.#logStream instanceof MiniPass
+ return this.#logStream instanceof Minipass
}
#endStream (output) {
diff --git a/deps/npm/lib/utils/update-notifier.js b/deps/npm/lib/utils/update-notifier.js
index cb9184bcdb..2c839bfeff 100644
--- a/deps/npm/lib/utils/update-notifier.js
+++ b/deps/npm/lib/utils/update-notifier.js
@@ -2,20 +2,11 @@
// but not in CI, and not if we're doing that already.
// Check daily for betas, and weekly otherwise.
-const pacote = require('pacote')
const ciInfo = require('ci-info')
const semver = require('semver')
const { stat, writeFile } = require('fs/promises')
const { resolve } = require('path')
-const SKIP = Symbol('SKIP')
-
-const isGlobalNpmUpdate = npm => {
- return npm.flatOptions.global &&
- ['install', 'update'].includes(npm.command) &&
- npm.argv.some(arg => /^npm(@|$)/.test(arg))
-}
-
// update check frequency
const DAILY = 1000 * 60 * 60 * 24
const WEEKLY = DAILY * 7
@@ -24,39 +15,10 @@ const WEEKLY = DAILY * 7
const lastCheckedFile = npm =>
resolve(npm.flatOptions.cache, '../_update-notifier-last-checked')
-const checkTimeout = async (npm, duration) => {
- const t = new Date(Date.now() - duration)
- const f = lastCheckedFile(npm)
- // if we don't have a file, then definitely check it.
- const st = await stat(f).catch(() => ({ mtime: t - 1 }))
- return t > st.mtime
-}
-
-const updateNotifier = async (npm, spec = 'latest') => {
- // never check for updates in CI, when updating npm already, or opted out
- if (!npm.config.get('update-notifier') ||
- isGlobalNpmUpdate(npm) ||
- ciInfo.isCI) {
- return SKIP
- }
-
- // if we're on a prerelease train, then updates are coming fast
- // check for a new one daily. otherwise, weekly.
- const { version } = npm
- const current = semver.parse(version)
-
- // if we're on a beta train, always get the next beta
- if (current.prerelease.length) {
- spec = `^${version}`
- }
-
- // while on a beta train, get updates daily
- const duration = spec !== 'latest' ? DAILY : WEEKLY
-
- // if we've already checked within the specified duration, don't check again
- if (!(await checkTimeout(npm, duration))) {
- return null
- }
+// Actual check for updates. This is a separate function so that we only load
+// this if we are doing the actual update
+const updateCheck = async (npm, spec, version, current) => {
+ const pacote = require('pacote')
const mani = await pacote.manifest(`npm@${spec}`, {
// always prefer latest, even if doing --tag=whatever on the cmd
@@ -112,15 +74,49 @@ const updateNotifier = async (npm, spec = 'latest') => {
return message
}
+const updateNotifier = async (npm, spec = 'latest') => {
+ // if we're on a prerelease train, then updates are coming fast
+ // check for a new one daily. otherwise, weekly.
+ const { version } = npm
+ const current = semver.parse(version)
+
+ // if we're on a beta train, always get the next beta
+ if (current.prerelease.length) {
+ spec = `^${version}`
+ }
+
+ // while on a beta train, get updates daily
+ const duration = spec !== 'latest' ? DAILY : WEEKLY
+
+ const t = new Date(Date.now() - duration)
+ // if we don't have a file, then definitely check it.
+ const st = await stat(lastCheckedFile(npm)).catch(() => ({ mtime: t - 1 }))
+
+ // if we've already checked within the specified duration, don't check again
+ if (!(t > st.mtime)) {
+ return null
+ }
+
+ return updateCheck(npm, spec, version, current)
+}
+
// only update the notification timeout if we actually finished checking
module.exports = async npm => {
- const notification = await updateNotifier(npm)
-
- // dont write the file if we skipped checking altogether
- if (notification === SKIP) {
+ if (
+ // opted out
+ !npm.config.get('update-notifier')
+ // global npm update
+ || (npm.flatOptions.global &&
+ ['install', 'update'].includes(npm.command) &&
+ npm.argv.some(arg => /^npm(@|$)/.test(arg)))
+ // CI
+ || ciInfo.isCI
+ ) {
return null
}
+ const notification = await updateNotifier(npm)
+
// intentional. do not await this. it's a best-effort update. if this
// fails, it's ok. might be using /dev/null as the cache or something weird
// like that.
diff --git a/deps/npm/lib/workspaces/get-workspaces.js b/deps/npm/lib/workspaces/get-workspaces.js
index 2ac043d5f3..7065533596 100644
--- a/deps/npm/lib/workspaces/get-workspaces.js
+++ b/deps/npm/lib/workspaces/get-workspaces.js
@@ -1,6 +1,6 @@
const { resolve, relative } = require('path')
const mapWorkspaces = require('@npmcli/map-workspaces')
-const minimatch = require('minimatch')
+const { minimatch } = require('minimatch')
const rpj = require('read-package-json-fast')
// minimatch wants forward slashes only for glob patterns
diff --git a/deps/npm/lib/workspaces/update-workspaces.js b/deps/npm/lib/workspaces/update-workspaces.js
index d22abda7c5..892f366e99 100644
--- a/deps/npm/lib/workspaces/update-workspaces.js
+++ b/deps/npm/lib/workspaces/update-workspaces.js
@@ -1,6 +1,5 @@
'use strict'
-const Arborist = require('@npmcli/arborist')
const reifyFinish = require('../utils/reify-finish.js')
async function updateWorkspaces ({
@@ -31,6 +30,7 @@ async function updateWorkspaces ({
path: localPrefix,
save,
}
+ const Arborist = require('@npmcli/arborist')
const arb = new Arborist(opts)
await arb.reify({ ...opts, update: workspaces })
diff --git a/deps/npm/man/man1/npm-access.1 b/deps/npm/man/man1/npm-access.1
index ad44219bb7..8b8d996a11 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" "April 2023" "" ""
+.TH "NPM-ACCESS" "1" "May 2023" "" ""
.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 d1d05d721d..4653d85c7f 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" "April 2023" "" ""
+.TH "NPM-ADDUSER" "1" "May 2023" "" ""
.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 a14786b54b..270c517ef1 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" "April 2023" "" ""
+.TH "NPM-AUDIT" "1" "May 2023" "" ""
.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 adcfcb3bc2..efd8922d66 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" "April 2023" "" ""
+.TH "NPM-BUGS" "1" "May 2023" "" ""
.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 358451123e..2757922d47 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" "April 2023" "" ""
+.TH "NPM-CACHE" "1" "May 2023" "" ""
.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 ee05baa607..4728ef4cb9 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" "April 2023" "" ""
+.TH "NPM-CI" "1" "May 2023" "" ""
.SH "NAME"
\fBnpm-ci\fR - Clean install a project
.SS "Synopsis"
@@ -66,49 +66,6 @@ cache:
.fi
.RE
.SS "Configuration"
-.SS "\fBsave\fR"
-.RS 0
-.IP \(bu 4
-Default: \fBtrue\fR unless when using \fBnpm update\fR where it defaults to \fBfalse\fR
-.IP \(bu 4
-Type: Boolean
-.RE 0
-
-.P
-Save installed packages to a \fBpackage.json\fR file as dependencies.
-.P
-When used with the \fBnpm rm\fR command, removes the dependency from \fBpackage.json\fR.
-.P
-Will also prevent writing to \fBpackage-lock.json\fR if set to \fBfalse\fR.
-.SS "\fBsave-exact\fR"
-.RS 0
-.IP \(bu 4
-Default: false
-.IP \(bu 4
-Type: Boolean
-.RE 0
-
-.P
-Dependencies saved to package.json will be configured with an exact version rather than using npm's default semver range operator.
-.SS "\fBglobal\fR"
-.RS 0
-.IP \(bu 4
-Default: false
-.IP \(bu 4
-Type: Boolean
-.RE 0
-
-.P
-Operates in "global" mode, so that packages are installed into the \fBprefix\fR folder instead of the current working directory. See npm help folders for more on the differences in behavior.
-.RS 0
-.IP \(bu 4
-packages are installed into the \fB{prefix}/lib/node_modules\fR folder, instead of the current working directory.
-.IP \(bu 4
-bin files are linked to \fB{prefix}/bin\fR
-.IP \(bu 4
-man pages are linked to \fB{prefix}/share/man\fR
-.RE 0
-
.SS "\fBinstall-strategy\fR"
.RS 0
.IP \(bu 4
diff --git a/deps/npm/man/man1/npm-completion.1 b/deps/npm/man/man1/npm-completion.1
index 15df619487..18a006978e 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" "April 2023" "" ""
+.TH "NPM-COMPLETION" "1" "May 2023" "" ""
.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 4280f90744..a860ea4a95 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" "April 2023" "" ""
+.TH "NPM-CONFIG" "1" "May 2023" "" ""
.SH "NAME"
\fBnpm-config\fR - Manage the npm configuration files
.SS "Synopsis"
@@ -40,7 +40,7 @@ npm set key=value \[lB]key=value...\[rB]
.P
Sets each of the config keys to the value provided.
.P
-If value is omitted, then it sets it to an empty string.
+If value is omitted, the key will be removed from your config file entirely.
.P
Note: for backwards compatibility, \fBnpm config set key value\fR is supported as an alias for \fBnpm config set key=value\fR.
.SS "get"
diff --git a/deps/npm/man/man1/npm-dedupe.1 b/deps/npm/man/man1/npm-dedupe.1
index 3e2596f766..8cbe55011c 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" "April 2023" "" ""
+.TH "NPM-DEDUPE" "1" "May 2023" "" ""
.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 1395f1d600..f4b4087a42 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" "April 2023" "" ""
+.TH "NPM-DEPRECATE" "1" "May 2023" "" ""
.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 a612fa58f4..906e1776f5 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" "April 2023" "" ""
+.TH "NPM-DIFF" "1" "May 2023" "" ""
.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 eaeeb0262b..50dc8e3908 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" "April 2023" "" ""
+.TH "NPM-DIST-TAG" "1" "May 2023" "" ""
.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 4dabed0f7a..be212b1f01 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" "April 2023" "" ""
+.TH "NPM-DOCS" "1" "May 2023" "" ""
.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 5a16b939db..1592de0c32 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" "April 2023" "" ""
+.TH "NPM-DOCTOR" "1" "May 2023" "" ""
.SH "NAME"
\fBnpm-doctor\fR - Check your npm environment
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-edit.1 b/deps/npm/man/man1/npm-edit.1
index d2eefdd483..1c428d2c2a 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" "April 2023" "" ""
+.TH "NPM-EDIT" "1" "May 2023" "" ""
.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 86e514ce33..d1260e2184 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" "April 2023" "" ""
+.TH "NPM-EXEC" "1" "May 2023" "" ""
.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 852408d0e5..d206176d92 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" "April 2023" "" ""
+.TH "NPM-EXPLAIN" "1" "May 2023" "" ""
.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 a70274d2f5..39fe060038 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" "April 2023" "" ""
+.TH "NPM-EXPLORE" "1" "May 2023" "" ""
.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 f9e61d4e96..efb00a7eba 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" "April 2023" "" ""
+.TH "NPM-FIND-DUPES" "1" "May 2023" "" ""
.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 790166b3e4..fe3adb8a7b 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" "April 2023" "" ""
+.TH "NPM-FUND" "1" "May 2023" "" ""
.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 88cb8e5c1d..e46f4b3d2f 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" "April 2023" "" ""
+.TH "NPM-HELP-SEARCH" "1" "May 2023" "" ""
.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 12fb76cce0..b95a78b18b 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" "April 2023" "" ""
+.TH "NPM-HELP" "1" "May 2023" "" ""
.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 c1a484b788..99cc0585ff 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" "April 2023" "" ""
+.TH "NPM-HOOK" "1" "May 2023" "" ""
.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 bb7c95eedb..ec4f8c5c1e 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" "April 2023" "" ""
+.TH "NPM-INIT" "1" "May 2023" "" ""
.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 abfe022914..96b310cdf9 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" "April 2023" "" ""
+.TH "NPM-INSTALL-CI-TEST" "1" "May 2023" "" ""
.SH "NAME"
\fBnpm-install-ci-test\fR - Install a project with a clean slate and run tests
.SS "Synopsis"
@@ -14,49 +14,6 @@ aliases: cit, clean-install-test, sit
.P
This command runs \fBnpm ci\fR followed immediately by \fBnpm test\fR.
.SS "Configuration"
-.SS "\fBsave\fR"
-.RS 0
-.IP \(bu 4
-Default: \fBtrue\fR unless when using \fBnpm update\fR where it defaults to \fBfalse\fR
-.IP \(bu 4
-Type: Boolean
-.RE 0
-
-.P
-Save installed packages to a \fBpackage.json\fR file as dependencies.
-.P
-When used with the \fBnpm rm\fR command, removes the dependency from \fBpackage.json\fR.
-.P
-Will also prevent writing to \fBpackage-lock.json\fR if set to \fBfalse\fR.
-.SS "\fBsave-exact\fR"
-.RS 0
-.IP \(bu 4
-Default: false
-.IP \(bu 4
-Type: Boolean
-.RE 0
-
-.P
-Dependencies saved to package.json will be configured with an exact version rather than using npm's default semver range operator.
-.SS "\fBglobal\fR"
-.RS 0
-.IP \(bu 4
-Default: false
-.IP \(bu 4
-Type: Boolean
-.RE 0
-
-.P
-Operates in "global" mode, so that packages are installed into the \fBprefix\fR folder instead of the current working directory. See npm help folders for more on the differences in behavior.
-.RS 0
-.IP \(bu 4
-packages are installed into the \fB{prefix}/lib/node_modules\fR folder, instead of the current working directory.
-.IP \(bu 4
-bin files are linked to \fB{prefix}/bin\fR
-.IP \(bu 4
-man pages are linked to \fB{prefix}/share/man\fR
-.RE 0
-
.SS "\fBinstall-strategy\fR"
.RS 0
.IP \(bu 4
diff --git a/deps/npm/man/man1/npm-install-test.1 b/deps/npm/man/man1/npm-install-test.1
index 334ce2e888..a403b55b15 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" "April 2023" "" ""
+.TH "NPM-INSTALL-TEST" "1" "May 2023" "" ""
.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 0f90d4870e..8359b949f1 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" "April 2023" "" ""
+.TH "NPM-INSTALL" "1" "May 2023" "" ""
.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 75abfdc34f..ebe0a7c70d 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" "April 2023" "" ""
+.TH "NPM-LINK" "1" "May 2023" "" ""
.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 889b203d57..61b9c2ae23 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" "April 2023" "" ""
+.TH "NPM-LOGIN" "1" "May 2023" "" ""
.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 63f9da4118..546a04044e 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" "April 2023" "" ""
+.TH "NPM-LOGOUT" "1" "May 2023" "" ""
.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 3c8ef9c5c9..07e8c22eeb 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" "April 2023" "" ""
+.TH "NPM-LS" "1" "May 2023" "" ""
.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@9.6.4 /path/to/npm
+npm@9.6.6 /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 cf10076ece..8a69570f2d 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" "April 2023" "" ""
+.TH "NPM-ORG" "1" "May 2023" "" ""
.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 3440ff7ac3..96527eec8b 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" "April 2023" "" ""
+.TH "NPM-OUTDATED" "1" "May 2023" "" ""
.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 a9be47f4d4..68997c98c1 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" "April 2023" "" ""
+.TH "NPM-OWNER" "1" "May 2023" "" ""
.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 e1fb88fddb..40e1ac2e38 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" "April 2023" "" ""
+.TH "NPM-PACK" "1" "May 2023" "" ""
.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 b8ebccbd5a..db6f0a79d6 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" "April 2023" "" ""
+.TH "NPM-PING" "1" "May 2023" "" ""
.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 5cb8362e45..42e6834e7e 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" "April 2023" "" ""
+.TH "NPM-PKG" "1" "May 2023" "" ""
.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 840968f8ec..a1d4ee3dbc 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" "April 2023" "" ""
+.TH "NPM-PREFIX" "1" "May 2023" "" ""
.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 749fcf86f1..b4f3595ff6 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" "April 2023" "" ""
+.TH "NPM-PROFILE" "1" "May 2023" "" ""
.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 d7f19ddebc..98d181fe62 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" "April 2023" "" ""
+.TH "NPM-PRUNE" "1" "May 2023" "" ""
.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 b5b6aadc51..5f7ccce98d 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" "April 2023" "" ""
+.TH "NPM-PUBLISH" "1" "May 2023" "" ""
.SH "NAME"
\fBnpm-publish\fR - Publish a package
.SS "Synopsis"
@@ -181,7 +181,7 @@ Type: Boolean
.RE 0
.P
-Indicates that a provenance statement should be generated.
+When publishing from a supported cloud CI/CD system, the package will be publicly linked to where it was built and published from.
.SS "See Also"
.RS 0
.IP \(bu 4
diff --git a/deps/npm/man/man1/npm-query.1 b/deps/npm/man/man1/npm-query.1
index cbf55b52eb..0cd80c479c 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" "April 2023" "" ""
+.TH "NPM-QUERY" "1" "May 2023" "" ""
.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 bfd5e27663..5153e22977 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" "April 2023" "" ""
+.TH "NPM-REBUILD" "1" "May 2023" "" ""
.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 704a576ba0..960699c619 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" "April 2023" "" ""
+.TH "NPM-REPO" "1" "May 2023" "" ""
.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 0226bb1e45..21ae38d01c 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" "April 2023" "" ""
+.TH "NPM-RESTART" "1" "May 2023" "" ""
.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 00df257f6e..6a53d9e695 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" "April 2023" "" ""
+.TH "NPM-ROOT" "1" "May 2023" "" ""
.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 2001cd4e38..0838720edb 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" "April 2023" "" ""
+.TH "NPM-RUN-SCRIPT" "1" "May 2023" "" ""
.SH "NAME"
\fBnpm-run-script\fR - Run arbitrary package scripts
.SS "Synopsis"
diff --git a/deps/npm/man/man1/npm-search.1 b/deps/npm/man/man1/npm-search.1
index cae1242ed0..18024e5e9c 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" "April 2023" "" ""
+.TH "NPM-SEARCH" "1" "May 2023" "" ""
.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 53c1d66b3b..312c444488 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" "April 2023" "" ""
+.TH "NPM-SHRINKWRAP" "1" "May 2023" "" ""
.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 f82452e1d1..f293aa8a34 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" "April 2023" "" ""
+.TH "NPM-STAR" "1" "May 2023" "" ""
.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 1b4544410b..c7812e1e92 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" "April 2023" "" ""
+.TH "NPM-STARS" "1" "May 2023" "" ""
.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 889d41fc16..06dbfc0142 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" "April 2023" "" ""
+.TH "NPM-START" "1" "May 2023" "" ""
.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 5f4dd7550d..cdc7d807cf 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" "April 2023" "" ""
+.TH "NPM-STOP" "1" "May 2023" "" ""
.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 fe8372f0c4..84b82d9a2c 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" "April 2023" "" ""
+.TH "NPM-TEAM" "1" "May 2023" "" ""
.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 0e1ca4e4eb..9832f0b5f0 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" "April 2023" "" ""
+.TH "NPM-TEST" "1" "May 2023" "" ""
.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 4cb6607992..d0593123ac 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" "April 2023" "" ""
+.TH "NPM-TOKEN" "1" "May 2023" "" ""
.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 319be77e96..7e0237c768 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" "April 2023" "" ""
+.TH "NPM-UNINSTALL" "1" "May 2023" "" ""
.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 2cfefbc36a..21ac3b0722 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" "April 2023" "" ""
+.TH "NPM-UNPUBLISH" "1" "May 2023" "" ""
.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 9c06517d5e..70242ed196 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" "April 2023" "" ""
+.TH "NPM-UNSTAR" "1" "May 2023" "" ""
.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 f162153c75..82e3ff9b19 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" "April 2023" "" ""
+.TH "NPM-UPDATE" "1" "May 2023" "" ""
.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 6c31270dcd..620d6d56fe 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" "April 2023" "" ""
+.TH "NPM-VERSION" "1" "May 2023" "" ""
.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 4ca9436a8b..5733d82cfc 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" "April 2023" "" ""
+.TH "NPM-VIEW" "1" "May 2023" "" ""
.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 6a9790237e..add5aac5a2 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" "April 2023" "" ""
+.TH "NPM-WHOAMI" "1" "May 2023" "" ""
.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 02023347f3..9dcf8d2caa 100644
--- a/deps/npm/man/man1/npm.1
+++ b/deps/npm/man/man1/npm.1
@@ -1,4 +1,4 @@
-.TH "NPM" "1" "April 2023" "" ""
+.TH "NPM" "1" "May 2023" "" ""
.SH "NAME"
\fBnpm\fR - javascript package manager
.SS "Synopsis"
@@ -12,7 +12,7 @@ npm
Note: This command is unaware of workspaces.
.SS "Version"
.P
-9.6.4
+9.6.6
.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 d461eac557..c392079457 100644
--- a/deps/npm/man/man1/npx.1
+++ b/deps/npm/man/man1/npx.1
@@ -1,4 +1,4 @@
-.TH "NPX" "1" "April 2023" "" ""
+.TH "NPX" "1" "May 2023" "" ""
.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 384c59dd08..934e3af20f 100644
--- a/deps/npm/man/man5/folders.5
+++ b/deps/npm/man/man5/folders.5
@@ -1,4 +1,4 @@
-.TH "FOLDERS" "5" "April 2023" "" ""
+.TH "FOLDERS" "5" "May 2023" "" ""
.SH "NAME"
\fBfolders\fR - Folder Structures Used by npm
.SS "Description"
@@ -48,7 +48,7 @@ When in local mode, man pages are not installed.
Man pages are not installed on Windows systems.
.SS "Cache"
.P
-See npm help cache. Cache files are stored in \fB~/.npm\fR on Posix, or \fB%AppData%/npm-cache\fR on Windows.
+See npm help cache. Cache files are stored in \fB~/.npm\fR on Posix, or \fB%LocalAppData%/npm-cache\fR on Windows.
.P
This is controlled by the \fB\fBcache\fR config\fR \fI\(la/using-npm/config#cache\(ra\fR param.
.SS "Temp Files"
diff --git a/deps/npm/man/man5/install.5 b/deps/npm/man/man5/install.5
index 8abb6970a3..de38edb1b1 100644
--- a/deps/npm/man/man5/install.5
+++ b/deps/npm/man/man5/install.5
@@ -1,4 +1,4 @@
-.TH "INSTALL" "5" "April 2023" "" ""
+.TH "INSTALL" "5" "May 2023" "" ""
.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 384c59dd08..934e3af20f 100644
--- a/deps/npm/man/man5/npm-global.5
+++ b/deps/npm/man/man5/npm-global.5
@@ -1,4 +1,4 @@
-.TH "FOLDERS" "5" "April 2023" "" ""
+.TH "FOLDERS" "5" "May 2023" "" ""
.SH "NAME"
\fBfolders\fR - Folder Structures Used by npm
.SS "Description"
@@ -48,7 +48,7 @@ When in local mode, man pages are not installed.
Man pages are not installed on Windows systems.
.SS "Cache"
.P
-See npm help cache. Cache files are stored in \fB~/.npm\fR on Posix, or \fB%AppData%/npm-cache\fR on Windows.
+See npm help cache. Cache files are stored in \fB~/.npm\fR on Posix, or \fB%LocalAppData%/npm-cache\fR on Windows.
.P
This is controlled by the \fB\fBcache\fR config\fR \fI\(la/using-npm/config#cache\(ra\fR param.
.SS "Temp Files"
diff --git a/deps/npm/man/man5/npm-json.5 b/deps/npm/man/man5/npm-json.5
index a2a7d60a66..290a10e369 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" "April 2023" "" ""
+.TH "PACKAGE.JSON" "5" "May 2023" "" ""
.SH "NAME"
\fBpackage.json\fR - Specifics of npm's package.json handling
.SS "Description"
diff --git a/deps/npm/man/man5/npm-shrinkwrap-json.5 b/deps/npm/man/man5/npm-shrinkwrap-json.5
index 0d2ecc15b4..f3ab3eda6a 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" "April 2023" "" ""
+.TH "NPM-SHRINKWRAP.JSON" "5" "May 2023" "" ""
.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 82e3c704ed..c04212f9e2 100644
--- a/deps/npm/man/man5/npmrc.5
+++ b/deps/npm/man/man5/npmrc.5
@@ -1,4 +1,4 @@
-.TH "NPMRC" "5" "April 2023" "" ""
+.TH "NPMRC" "5" "May 2023" "" ""
.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 a2a7d60a66..290a10e369 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" "April 2023" "" ""
+.TH "PACKAGE.JSON" "5" "May 2023" "" ""
.SH "NAME"
\fBpackage.json\fR - Specifics of npm's package.json handling
.SS "Description"
diff --git a/deps/npm/man/man5/package-lock-json.5 b/deps/npm/man/man5/package-lock-json.5
index 3406d41da7..0f529dc9bb 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" "April 2023" "" ""
+.TH "PACKAGE-LOCK.JSON" "5" "May 2023" "" ""
.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 421caf7e08..471e2d9a9a 100644
--- a/deps/npm/man/man7/config.7
+++ b/deps/npm/man/man7/config.7
@@ -1,4 +1,4 @@
-.TH "CONFIG" "7" "April 2023" "" ""
+.TH "CONFIG" "7" "May 2023" "" ""
.SH "NAME"
\fBconfig\fR - More than you probably want to know about npm configuration
.SS "Description"
@@ -1177,7 +1177,7 @@ Type: Boolean
.RE 0
.P
-Indicates that a provenance statement should be generated.
+When publishing from a supported cloud CI/CD system, the package will be publicly linked to where it was built and published from.
.SS "\fBproxy\fR"
.RS 0
.IP \(bu 4
diff --git a/deps/npm/man/man7/dependency-selectors.7 b/deps/npm/man/man7/dependency-selectors.7
index 2702ee7bae..d84c647c93 100644
--- a/deps/npm/man/man7/dependency-selectors.7
+++ b/deps/npm/man/man7/dependency-selectors.7
@@ -1,4 +1,4 @@
-.TH "QUERYING" "7" "April 2023" "" ""
+.TH "QUERYING" "7" "May 2023" "" ""
.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 db06642263..9d1c568bd7 100644
--- a/deps/npm/man/man7/developers.7
+++ b/deps/npm/man/man7/developers.7
@@ -1,4 +1,4 @@
-.TH "DEVELOPERS" "7" "April 2023" "" ""
+.TH "DEVELOPERS" "7" "May 2023" "" ""
.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 302edf7429..f8f0e9a9e0 100644
--- a/deps/npm/man/man7/logging.7
+++ b/deps/npm/man/man7/logging.7
@@ -1,4 +1,4 @@
-.TH "LOGGING" "7" "April 2023" "" ""
+.TH "LOGGING" "7" "May 2023" "" ""
.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 909ae76026..7e67161fb6 100644
--- a/deps/npm/man/man7/orgs.7
+++ b/deps/npm/man/man7/orgs.7
@@ -1,4 +1,4 @@
-.TH "ORGS" "7" "April 2023" "" ""
+.TH "ORGS" "7" "May 2023" "" ""
.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 c5d8347458..21342529c5 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" "April 2023" "" ""
+.TH "PACKAGE-SPEC" "7" "May 2023" "" ""
.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 fe1fe2d1c4..b27bdd4029 100644
--- a/deps/npm/man/man7/registry.7
+++ b/deps/npm/man/man7/registry.7
@@ -1,4 +1,4 @@
-.TH "REGISTRY" "7" "April 2023" "" ""
+.TH "REGISTRY" "7" "May 2023" "" ""
.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 60bc180f7b..1f9dfcf016 100644
--- a/deps/npm/man/man7/removal.7
+++ b/deps/npm/man/man7/removal.7
@@ -1,4 +1,4 @@
-.TH "REMOVAL" "7" "April 2023" "" ""
+.TH "REMOVAL" "7" "May 2023" "" ""
.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 8b7b1a48ff..00f2240aed 100644
--- a/deps/npm/man/man7/scope.7
+++ b/deps/npm/man/man7/scope.7
@@ -1,4 +1,4 @@
-.TH "SCOPE" "7" "April 2023" "" ""
+.TH "SCOPE" "7" "May 2023" "" ""
.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 7f6bdcdeb1..00ae221f4b 100644
--- a/deps/npm/man/man7/scripts.7
+++ b/deps/npm/man/man7/scripts.7
@@ -1,4 +1,4 @@
-.TH "SCRIPTS" "7" "April 2023" "" ""
+.TH "SCRIPTS" "7" "May 2023" "" ""
.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 0b315f31e4..896e40c294 100644
--- a/deps/npm/man/man7/workspaces.7
+++ b/deps/npm/man/man7/workspaces.7
@@ -1,4 +1,4 @@
-.TH "WORKSPACES" "7" "April 2023" "" ""
+.TH "WORKSPACES" "7" "May 2023" "" ""
.SH "NAME"
\fBworkspaces\fR - Working with workspaces
.SS "Description"
diff --git a/deps/npm/node_modules/@isaacs/cliui/LICENSE.txt b/deps/npm/node_modules/@isaacs/cliui/LICENSE.txt
new file mode 100644
index 0000000000..c7e27478a3
--- /dev/null
+++ b/deps/npm/node_modules/@isaacs/cliui/LICENSE.txt
@@ -0,0 +1,14 @@
+Copyright (c) 2015, 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/cliui/build/index.cjs b/deps/npm/node_modules/@isaacs/cliui/build/index.cjs
new file mode 100644
index 0000000000..aca2b8507a
--- /dev/null
+++ b/deps/npm/node_modules/@isaacs/cliui/build/index.cjs
@@ -0,0 +1,317 @@
+'use strict';
+
+const align = {
+ right: alignRight,
+ center: alignCenter
+};
+const top = 0;
+const right = 1;
+const bottom = 2;
+const left = 3;
+class UI {
+ constructor(opts) {
+ var _a;
+ this.width = opts.width;
+ /* c8 ignore start */
+ this.wrap = (_a = opts.wrap) !== null && _a !== void 0 ? _a : true;
+ /* c8 ignore stop */
+ this.rows = [];
+ }
+ span(...args) {
+ const cols = this.div(...args);
+ cols.span = true;
+ }
+ resetOutput() {
+ this.rows = [];
+ }
+ div(...args) {
+ if (args.length === 0) {
+ this.div('');
+ }
+ if (this.wrap && this.shouldApplyLayoutDSL(...args) && typeof args[0] === 'string') {
+ return this.applyLayoutDSL(args[0]);
+ }
+ const cols = args.map(arg => {
+ if (typeof arg === 'string') {
+ return this.colFromString(arg);
+ }
+ return arg;
+ });
+ this.rows.push(cols);
+ return cols;
+ }
+ shouldApplyLayoutDSL(...args) {
+ return args.length === 1 && typeof args[0] === 'string' &&
+ /[\t\n]/.test(args[0]);
+ }
+ applyLayoutDSL(str) {
+ const rows = str.split('\n').map(row => row.split('\t'));
+ let leftColumnWidth = 0;
+ // simple heuristic for layout, make sure the
+ // second column lines up along the left-hand.
+ // don't allow the first column to take up more
+ // than 50% of the screen.
+ rows.forEach(columns => {
+ if (columns.length > 1 && mixin.stringWidth(columns[0]) > leftColumnWidth) {
+ leftColumnWidth = Math.min(Math.floor(this.width * 0.5), mixin.stringWidth(columns[0]));
+ }
+ });
+ // generate a table:
+ // replacing ' ' with padding calculations.
+ // using the algorithmically generated width.
+ rows.forEach(columns => {
+ this.div(...columns.map((r, i) => {
+ return {
+ text: r.trim(),
+ padding: this.measurePadding(r),
+ width: (i === 0 && columns.length > 1) ? leftColumnWidth : undefined
+ };
+ }));
+ });
+ return this.rows[this.rows.length - 1];
+ }
+ colFromString(text) {
+ return {
+ text,
+ padding: this.measurePadding(text)
+ };
+ }
+ measurePadding(str) {
+ // measure padding without ansi escape codes
+ const noAnsi = mixin.stripAnsi(str);
+ return [0, noAnsi.match(/\s*$/)[0].length, 0, noAnsi.match(/^\s*/)[0].length];
+ }
+ toString() {
+ const lines = [];
+ this.rows.forEach(row => {
+ this.rowToString(row, lines);
+ });
+ // don't display any lines with the
+ // hidden flag set.
+ return lines
+ .filter(line => !line.hidden)
+ .map(line => line.text)
+ .join('\n');
+ }
+ rowToString(row, lines) {
+ this.rasterize(row).forEach((rrow, r) => {
+ let str = '';
+ rrow.forEach((col, c) => {
+ const { width } = row[c]; // the width with padding.
+ const wrapWidth = this.negatePadding(row[c]); // the width without padding.
+ let ts = col; // temporary string used during alignment/padding.
+ if (wrapWidth > mixin.stringWidth(col)) {
+ ts += ' '.repeat(wrapWidth - mixin.stringWidth(col));
+ }
+ // align the string within its column.
+ if (row[c].align && row[c].align !== 'left' && this.wrap) {
+ const fn = align[row[c].align];
+ ts = fn(ts, wrapWidth);
+ if (mixin.stringWidth(ts) < wrapWidth) {
+ /* c8 ignore start */
+ const w = width || 0;
+ /* c8 ignore stop */
+ ts += ' '.repeat(w - mixin.stringWidth(ts) - 1);
+ }
+ }
+ // apply border and padding to string.
+ const padding = row[c].padding || [0, 0, 0, 0];
+ if (padding[left]) {
+ str += ' '.repeat(padding[left]);
+ }
+ str += addBorder(row[c], ts, '| ');
+ str += ts;
+ str += addBorder(row[c], ts, ' |');
+ if (padding[right]) {
+ str += ' '.repeat(padding[right]);
+ }
+ // if prior row is span, try to render the
+ // current row on the prior line.
+ if (r === 0 && lines.length > 0) {
+ str = this.renderInline(str, lines[lines.length - 1]);
+ }
+ });
+ // remove trailing whitespace.
+ lines.push({
+ text: str.replace(/ +$/, ''),
+ span: row.span
+ });
+ });
+ return lines;
+ }
+ // if the full 'source' can render in
+ // the target line, do so.
+ renderInline(source, previousLine) {
+ const match = source.match(/^ */);
+ /* c8 ignore start */
+ const leadingWhitespace = match ? match[0].length : 0;
+ /* c8 ignore stop */
+ const target = previousLine.text;
+ const targetTextWidth = mixin.stringWidth(target.trimEnd());
+ if (!previousLine.span) {
+ return source;
+ }
+ // if we're not applying wrapping logic,
+ // just always append to the span.
+ if (!this.wrap) {
+ previousLine.hidden = true;
+ return target + source;
+ }
+ if (leadingWhitespace < targetTextWidth) {
+ return source;
+ }
+ previousLine.hidden = true;
+ return target.trimEnd() + ' '.repeat(leadingWhitespace - targetTextWidth) + source.trimStart();
+ }
+ rasterize(row) {
+ const rrows = [];
+ const widths = this.columnWidths(row);
+ let wrapped;
+ // word wrap all columns, and create
+ // a data-structure that is easy to rasterize.
+ row.forEach((col, c) => {
+ // leave room for left and right padding.
+ col.width = widths[c];
+ if (this.wrap) {
+ wrapped = mixin.wrap(col.text, this.negatePadding(col), { hard: true }).split('\n');
+ }
+ else {
+ wrapped = col.text.split('\n');
+ }
+ if (col.border) {
+ wrapped.unshift('.' + '-'.repeat(this.negatePadding(col) + 2) + '.');
+ wrapped.push("'" + '-'.repeat(this.negatePadding(col) + 2) + "'");
+ }
+ // add top and bottom padding.
+ if (col.padding) {
+ wrapped.unshift(...new Array(col.padding[top] || 0).fill(''));
+ wrapped.push(...new Array(col.padding[bottom] || 0).fill(''));
+ }
+ wrapped.forEach((str, r) => {
+ if (!rrows[r]) {
+ rrows.push([]);
+ }
+ const rrow = rrows[r];
+ for (let i = 0; i < c; i++) {
+ if (rrow[i] === undefined) {
+ rrow.push('');
+ }
+ }
+ rrow.push(str);
+ });
+ });
+ return rrows;
+ }
+ negatePadding(col) {
+ /* c8 ignore start */
+ let wrapWidth = col.width || 0;
+ /* c8 ignore stop */
+ if (col.padding) {
+ wrapWidth -= (col.padding[left] || 0) + (col.padding[right] || 0);
+ }
+ if (col.border) {
+ wrapWidth -= 4;
+ }
+ return wrapWidth;
+ }
+ columnWidths(row) {
+ if (!this.wrap) {
+ return row.map(col => {
+ return col.width || mixin.stringWidth(col.text);
+ });
+ }
+ let unset = row.length;
+ let remainingWidth = this.width;
+ // column widths can be set in config.
+ const widths = row.map(col => {
+ if (col.width) {
+ unset--;
+ remainingWidth -= col.width;
+ return col.width;
+ }
+ return undefined;
+ });
+ // any unset widths should be calculated.
+ /* c8 ignore start */
+ const unsetWidth = unset ? Math.floor(remainingWidth / unset) : 0;
+ /* c8 ignore stop */
+ return widths.map((w, i) => {
+ if (w === undefined) {
+ return Math.max(unsetWidth, _minWidth(row[i]));
+ }
+ return w;
+ });
+ }
+}
+function addBorder(col, ts, style) {
+ if (col.border) {
+ if (/[.']-+[.']/.test(ts)) {
+ return '';
+ }
+ if (ts.trim().length !== 0) {
+ return style;
+ }
+ return ' ';
+ }
+ return '';
+}
+// calculates the minimum width of
+// a column, based on padding preferences.
+function _minWidth(col) {
+ const padding = col.padding || [];
+ const minWidth = 1 + (padding[left] || 0) + (padding[right] || 0);
+ if (col.border) {
+ return minWidth + 4;
+ }
+ return minWidth;
+}
+function getWindowWidth() {
+ /* c8 ignore start */
+ if (typeof process === 'object' && process.stdout && process.stdout.columns) {
+ return process.stdout.columns;
+ }
+ return 80;
+}
+/* c8 ignore stop */
+function alignRight(str, width) {
+ str = str.trim();
+ const strWidth = mixin.stringWidth(str);
+ if (strWidth < width) {
+ return ' '.repeat(width - strWidth) + str;
+ }
+ return str;
+}
+function alignCenter(str, width) {
+ str = str.trim();
+ const strWidth = mixin.stringWidth(str);
+ /* c8 ignore start */
+ if (strWidth >= width) {
+ return str;
+ }
+ /* c8 ignore stop */
+ return ' '.repeat((width - strWidth) >> 1) + str;
+}
+let mixin;
+function cliui(opts, _mixin) {
+ mixin = _mixin;
+ return new UI({
+ /* c8 ignore start */
+ width: (opts === null || opts === void 0 ? void 0 : opts.width) || getWindowWidth(),
+ wrap: opts === null || opts === void 0 ? void 0 : opts.wrap
+ /* c8 ignore stop */
+ });
+}
+
+// Bootstrap cliui with CommonJS dependencies:
+const stringWidth = require('string-width-cjs');
+const stripAnsi = require('strip-ansi-cjs');
+const wrap = require('wrap-ansi-cjs');
+function ui(opts) {
+ return cliui(opts, {
+ stringWidth,
+ stripAnsi,
+ wrap
+ });
+}
+
+module.exports = ui;
diff --git a/deps/npm/node_modules/@isaacs/cliui/build/index.d.cts b/deps/npm/node_modules/@isaacs/cliui/build/index.d.cts
new file mode 100644
index 0000000000..4567f945e8
--- /dev/null
+++ b/deps/npm/node_modules/@isaacs/cliui/build/index.d.cts
@@ -0,0 +1,43 @@
+interface UIOptions {
+ width: number;
+ wrap?: boolean;
+ rows?: string[];
+}
+interface Column {
+ text: string;
+ width?: number;
+ align?: "right" | "left" | "center";
+ padding: number[];
+ border?: boolean;
+}
+interface ColumnArray extends Array<Column> {
+ span: boolean;
+}
+interface Line {
+ hidden?: boolean;
+ text: string;
+ span?: boolean;
+}
+declare class UI {
+ width: number;
+ wrap: boolean;
+ rows: ColumnArray[];
+ constructor(opts: UIOptions);
+ span(...args: ColumnArray): void;
+ resetOutput(): void;
+ div(...args: (Column | string)[]): ColumnArray;
+ private shouldApplyLayoutDSL;
+ private applyLayoutDSL;
+ private colFromString;
+ private measurePadding;
+ toString(): string;
+ rowToString(row: ColumnArray, lines: Line[]): Line[];
+ // if the full 'source' can render in
+ // the target line, do so.
+ private renderInline;
+ private rasterize;
+ private negatePadding;
+ private columnWidths;
+}
+declare function ui(opts: UIOptions): UI;
+export { ui as default };
diff --git a/deps/npm/node_modules/@isaacs/cliui/build/lib/index.js b/deps/npm/node_modules/@isaacs/cliui/build/lib/index.js
new file mode 100644
index 0000000000..587b5ecd3e
--- /dev/null
+++ b/deps/npm/node_modules/@isaacs/cliui/build/lib/index.js
@@ -0,0 +1,302 @@
+'use strict';
+const align = {
+ right: alignRight,
+ center: alignCenter
+};
+const top = 0;
+const right = 1;
+const bottom = 2;
+const left = 3;
+export class UI {
+ constructor(opts) {
+ var _a;
+ this.width = opts.width;
+ /* c8 ignore start */
+ this.wrap = (_a = opts.wrap) !== null && _a !== void 0 ? _a : true;
+ /* c8 ignore stop */
+ this.rows = [];
+ }
+ span(...args) {
+ const cols = this.div(...args);
+ cols.span = true;
+ }
+ resetOutput() {
+ this.rows = [];
+ }
+ div(...args) {
+ if (args.length === 0) {
+ this.div('');
+ }
+ if (this.wrap && this.shouldApplyLayoutDSL(...args) && typeof args[0] === 'string') {
+ return this.applyLayoutDSL(args[0]);
+ }
+ const cols = args.map(arg => {
+ if (typeof arg === 'string') {
+ return this.colFromString(arg);
+ }
+ return arg;
+ });
+ this.rows.push(cols);
+ return cols;
+ }
+ shouldApplyLayoutDSL(...args) {
+ return args.length === 1 && typeof args[0] === 'string' &&
+ /[\t\n]/.test(args[0]);
+ }
+ applyLayoutDSL(str) {
+ const rows = str.split('\n').map(row => row.split('\t'));
+ let leftColumnWidth = 0;
+ // simple heuristic for layout, make sure the
+ // second column lines up along the left-hand.
+ // don't allow the first column to take up more
+ // than 50% of the screen.
+ rows.forEach(columns => {
+ if (columns.length > 1 && mixin.stringWidth(columns[0]) > leftColumnWidth) {
+ leftColumnWidth = Math.min(Math.floor(this.width * 0.5), mixin.stringWidth(columns[0]));
+ }
+ });
+ // generate a table:
+ // replacing ' ' with padding calculations.
+ // using the algorithmically generated width.
+ rows.forEach(columns => {
+ this.div(...columns.map((r, i) => {
+ return {
+ text: r.trim(),
+ padding: this.measurePadding(r),
+ width: (i === 0 && columns.length > 1) ? leftColumnWidth : undefined
+ };
+ }));
+ });
+ return this.rows[this.rows.length - 1];
+ }
+ colFromString(text) {
+ return {
+ text,
+ padding: this.measurePadding(text)
+ };
+ }
+ measurePadding(str) {
+ // measure padding without ansi escape codes
+ const noAnsi = mixin.stripAnsi(str);
+ return [0, noAnsi.match(/\s*$/)[0].length, 0, noAnsi.match(/^\s*/)[0].length];
+ }
+ toString() {
+ const lines = [];
+ this.rows.forEach(row => {
+ this.rowToString(row, lines);
+ });
+ // don't display any lines with the
+ // hidden flag set.
+ return lines
+ .filter(line => !line.hidden)
+ .map(line => line.text)
+ .join('\n');
+ }
+ rowToString(row, lines) {
+ this.rasterize(row).forEach((rrow, r) => {
+ let str = '';
+ rrow.forEach((col, c) => {
+ const { width } = row[c]; // the width with padding.
+ const wrapWidth = this.negatePadding(row[c]); // the width without padding.
+ let ts = col; // temporary string used during alignment/padding.
+ if (wrapWidth > mixin.stringWidth(col)) {
+ ts += ' '.repeat(wrapWidth - mixin.stringWidth(col));
+ }
+ // align the string within its column.
+ if (row[c].align && row[c].align !== 'left' && this.wrap) {
+ const fn = align[row[c].align];
+ ts = fn(ts, wrapWidth);
+ if (mixin.stringWidth(ts) < wrapWidth) {
+ /* c8 ignore start */
+ const w = width || 0;
+ /* c8 ignore stop */
+ ts += ' '.repeat(w - mixin.stringWidth(ts) - 1);
+ }
+ }
+ // apply border and padding to string.
+ const padding = row[c].padding || [0, 0, 0, 0];
+ if (padding[left]) {
+ str += ' '.repeat(padding[left]);
+ }
+ str += addBorder(row[c], ts, '| ');
+ str += ts;
+ str += addBorder(row[c], ts, ' |');
+ if (padding[right]) {
+ str += ' '.repeat(padding[right]);
+ }
+ // if prior row is span, try to render the
+ // current row on the prior line.
+ if (r === 0 && lines.length > 0) {
+ str = this.renderInline(str, lines[lines.length - 1]);
+ }
+ });
+ // remove trailing whitespace.
+ lines.push({
+ text: str.replace(/ +$/, ''),
+ span: row.span
+ });
+ });
+ return lines;
+ }
+ // if the full 'source' can render in
+ // the target line, do so.
+ renderInline(source, previousLine) {
+ const match = source.match(/^ */);
+ /* c8 ignore start */
+ const leadingWhitespace = match ? match[0].length : 0;
+ /* c8 ignore stop */
+ const target = previousLine.text;
+ const targetTextWidth = mixin.stringWidth(target.trimEnd());
+ if (!previousLine.span) {
+ return source;
+ }
+ // if we're not applying wrapping logic,
+ // just always append to the span.
+ if (!this.wrap) {
+ previousLine.hidden = true;
+ return target + source;
+ }
+ if (leadingWhitespace < targetTextWidth) {
+ return source;
+ }
+ previousLine.hidden = true;
+ return target.trimEnd() + ' '.repeat(leadingWhitespace - targetTextWidth) + source.trimStart();
+ }
+ rasterize(row) {
+ const rrows = [];
+ const widths = this.columnWidths(row);
+ let wrapped;
+ // word wrap all columns, and create
+ // a data-structure that is easy to rasterize.
+ row.forEach((col, c) => {
+ // leave room for left and right padding.
+ col.width = widths[c];
+ if (this.wrap) {
+ wrapped = mixin.wrap(col.text, this.negatePadding(col), { hard: true }).split('\n');
+ }
+ else {
+ wrapped = col.text.split('\n');
+ }
+ if (col.border) {
+ wrapped.unshift('.' + '-'.repeat(this.negatePadding(col) + 2) + '.');
+ wrapped.push("'" + '-'.repeat(this.negatePadding(col) + 2) + "'");
+ }
+ // add top and bottom padding.
+ if (col.padding) {
+ wrapped.unshift(...new Array(col.padding[top] || 0).fill(''));
+ wrapped.push(...new Array(col.padding[bottom] || 0).fill(''));
+ }
+ wrapped.forEach((str, r) => {
+ if (!rrows[r]) {
+ rrows.push([]);
+ }
+ const rrow = rrows[r];
+ for (let i = 0; i < c; i++) {
+ if (rrow[i] === undefined) {
+ rrow.push('');
+ }
+ }
+ rrow.push(str);
+ });
+ });
+ return rrows;
+ }
+ negatePadding(col) {
+ /* c8 ignore start */
+ let wrapWidth = col.width || 0;
+ /* c8 ignore stop */
+ if (col.padding) {
+ wrapWidth -= (col.padding[left] || 0) + (col.padding[right] || 0);
+ }
+ if (col.border) {
+ wrapWidth -= 4;
+ }
+ return wrapWidth;
+ }
+ columnWidths(row) {
+ if (!this.wrap) {
+ return row.map(col => {
+ return col.width || mixin.stringWidth(col.text);
+ });
+ }
+ let unset = row.length;
+ let remainingWidth = this.width;
+ // column widths can be set in config.
+ const widths = row.map(col => {
+ if (col.width) {
+ unset--;
+ remainingWidth -= col.width;
+ return col.width;
+ }
+ return undefined;
+ });
+ // any unset widths should be calculated.
+ /* c8 ignore start */
+ const unsetWidth = unset ? Math.floor(remainingWidth / unset) : 0;
+ /* c8 ignore stop */
+ return widths.map((w, i) => {
+ if (w === undefined) {
+ return Math.max(unsetWidth, _minWidth(row[i]));
+ }
+ return w;
+ });
+ }
+}
+function addBorder(col, ts, style) {
+ if (col.border) {
+ if (/[.']-+[.']/.test(ts)) {
+ return '';
+ }
+ if (ts.trim().length !== 0) {
+ return style;
+ }
+ return ' ';
+ }
+ return '';
+}
+// calculates the minimum width of
+// a column, based on padding preferences.
+function _minWidth(col) {
+ const padding = col.padding || [];
+ const minWidth = 1 + (padding[left] || 0) + (padding[right] || 0);
+ if (col.border) {
+ return minWidth + 4;
+ }
+ return minWidth;
+}
+function getWindowWidth() {
+ /* c8 ignore start */
+ if (typeof process === 'object' && process.stdout && process.stdout.columns) {
+ return process.stdout.columns;
+ }
+ return 80;
+}
+/* c8 ignore stop */
+function alignRight(str, width) {
+ str = str.trim();
+ const strWidth = mixin.stringWidth(str);
+ if (strWidth < width) {
+ return ' '.repeat(width - strWidth) + str;
+ }
+ return str;
+}
+function alignCenter(str, width) {
+ str = str.trim();
+ const strWidth = mixin.stringWidth(str);
+ /* c8 ignore start */
+ if (strWidth >= width) {
+ return str;
+ }
+ /* c8 ignore stop */
+ return ' '.repeat((width - strWidth) >> 1) + str;
+}
+let mixin;
+export function cliui(opts, _mixin) {
+ mixin = _mixin;
+ return new UI({
+ /* c8 ignore start */
+ width: (opts === null || opts === void 0 ? void 0 : opts.width) || getWindowWidth(),
+ wrap: opts === null || opts === void 0 ? void 0 : opts.wrap
+ /* c8 ignore stop */
+ });
+}
diff --git a/deps/npm/node_modules/@isaacs/cliui/index.mjs b/deps/npm/node_modules/@isaacs/cliui/index.mjs
new file mode 100644
index 0000000000..5177519af3
--- /dev/null
+++ b/deps/npm/node_modules/@isaacs/cliui/index.mjs
@@ -0,0 +1,14 @@
+// Bootstrap cliui with ESM dependencies:
+import { cliui } from './build/lib/index.js'
+
+import stringWidth from 'string-width'
+import stripAnsi from 'strip-ansi'
+import wrap from 'wrap-ansi'
+
+export default function ui (opts) {
+ return cliui(opts, {
+ stringWidth,
+ stripAnsi,
+ wrap
+ })
+}
diff --git a/deps/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex/index.js b/deps/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex/index.js
new file mode 100644
index 0000000000..130a0929b8
--- /dev/null
+++ b/deps/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex/index.js
@@ -0,0 +1,8 @@
+export default function ansiRegex({onlyFirst = false} = {}) {
+ const pattern = [
+ '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
+ '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))'
+ ].join('|');
+
+ return new RegExp(pattern, onlyFirst ? undefined : 'g');
+}
diff --git a/deps/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex/license b/deps/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex/license
new file mode 100644
index 0000000000..fa7ceba3eb
--- /dev/null
+++ b/deps/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (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/@isaacs/cliui/node_modules/ansi-regex/package.json b/deps/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex/package.json
new file mode 100644
index 0000000000..7bbb563bf2
--- /dev/null
+++ b/deps/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex/package.json
@@ -0,0 +1,58 @@
+{
+ "name": "ansi-regex",
+ "version": "6.0.1",
+ "description": "Regular expression for matching ANSI escape codes",
+ "license": "MIT",
+ "repository": "chalk/ansi-regex",
+ "funding": "https://github.com/chalk/ansi-regex?sponsor=1",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "https://sindresorhus.com"
+ },
+ "type": "module",
+ "exports": "./index.js",
+ "engines": {
+ "node": ">=12"
+ },
+ "scripts": {
+ "test": "xo && ava && tsd",
+ "view-supported": "node fixtures/view-codes.js"
+ },
+ "files": [
+ "index.js",
+ "index.d.ts"
+ ],
+ "keywords": [
+ "ansi",
+ "styles",
+ "color",
+ "colour",
+ "colors",
+ "terminal",
+ "console",
+ "cli",
+ "string",
+ "tty",
+ "escape",
+ "formatting",
+ "rgb",
+ "256",
+ "shell",
+ "xterm",
+ "command-line",
+ "text",
+ "regex",
+ "regexp",
+ "re",
+ "match",
+ "test",
+ "find",
+ "pattern"
+ ],
+ "devDependencies": {
+ "ava": "^3.15.0",
+ "tsd": "^0.14.0",
+ "xo": "^0.38.2"
+ }
+}
diff --git a/deps/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/LICENSE-MIT.txt b/deps/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/LICENSE-MIT.txt
new file mode 100644
index 0000000000..a41e0a7ef9
--- /dev/null
+++ b/deps/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/LICENSE-MIT.txt
@@ -0,0 +1,20 @@
+Copyright Mathias Bynens <https://mathiasbynens.be/>
+
+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/@isaacs/cliui/node_modules/emoji-regex/RGI_Emoji.js b/deps/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/RGI_Emoji.js
new file mode 100644
index 0000000000..3fbe924100
--- /dev/null
+++ b/deps/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/RGI_Emoji.js
@@ -0,0 +1,6 @@
+"use strict";
+
+module.exports = function () {
+ // https://mths.be/emoji
+ return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]/g;
+};
diff --git a/deps/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/es2015/RGI_Emoji.js b/deps/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/es2015/RGI_Emoji.js
new file mode 100644
index 0000000000..ecf32f1779
--- /dev/null
+++ b/deps/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/es2015/RGI_Emoji.js
@@ -0,0 +1,6 @@
+"use strict";
+
+module.exports = () => {
+ // https://mths.be/emoji
+ return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0077}\u{E006C}\u{E0073}|\u{E0073}\u{E0063}\u{E0074}|\u{E0065}\u{E006E}\u{E0067})\u{E007F}|(?:\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FC}-\u{1F3FF}]|\u{1F468}(?:\u{1F3FB}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]))?|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u{1F466}\u{1F467}])|\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC})?|(?:\u{1F469}(?:\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}]))|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]\u200D\u{1F91D}\u200D\u{1F9D1})[\u{1F3FB}-\u{1F3FF}]|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F469}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F9D1}(?:\u200D(?:\u{1F91D}\u200D\u{1F9D1}|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F9D1}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F636}\u200D\u{1F32B}|\u{1F3F3}\uFE0F\u200D\u26A7|\u{1F43B}\u200D\u2744|(?:[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u{1F3F4}\u200D\u2620|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F202}\u{1F237}\u{1F321}\u{1F324}-\u{1F32C}\u{1F336}\u{1F37D}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}\u{1F39F}\u{1F3CD}\u{1F3CE}\u{1F3D4}-\u{1F3DF}\u{1F3F5}\u{1F3F7}\u{1F43F}\u{1F4FD}\u{1F549}\u{1F54A}\u{1F56F}\u{1F570}\u{1F573}\u{1F576}-\u{1F579}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}\u{1F6CB}\u{1F6CD}-\u{1F6CF}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6F0}\u{1F6F3}])\uFE0F|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F469}\u200D\u{1F467}|\u{1F469}\u200D\u{1F466}|\u{1F635}\u200D\u{1F4AB}|\u{1F62E}\u200D\u{1F4A8}|\u{1F415}\u200D\u{1F9BA}|\u{1F9D1}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F469}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F1FD}\u{1F1F0}|\u{1F1F6}\u{1F1E6}|\u{1F1F4}\u{1F1F2}|\u{1F408}\u200D\u2B1B|\u2764\uFE0F\u200D[\u{1F525}\u{1FA79}]|\u{1F441}\uFE0F|\u{1F3F3}\uFE0F|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]|\u{1F3F4}|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270C\u270D\u{1F574}\u{1F590}][\uFE0F\u{1F3FB}-\u{1F3FF}]|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F408}\u{1F415}\u{1F43B}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F62E}\u{1F635}\u{1F636}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F384}\u{1F386}-\u{1F393}\u{1F3A0}-\u{1F3C1}\u{1F3C5}\u{1F3C6}\u{1F3C8}\u{1F3C9}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F8}-\u{1F407}\u{1F409}-\u{1F414}\u{1F416}-\u{1F43A}\u{1F43C}-\u{1F43E}\u{1F440}\u{1F444}\u{1F445}\u{1F451}-\u{1F465}\u{1F46A}\u{1F479}-\u{1F47B}\u{1F47D}-\u{1F480}\u{1F484}\u{1F488}-\u{1F48E}\u{1F490}\u{1F492}-\u{1F4A9}\u{1F4AB}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F5A4}\u{1F5FB}-\u{1F62D}\u{1F62F}-\u{1F634}\u{1F637}-\u{1F644}\u{1F648}-\u{1F64A}\u{1F680}-\u{1F6A2}\u{1F6A4}-\u{1F6B3}\u{1F6B7}-\u{1F6BF}\u{1F6C1}-\u{1F6C5}\u{1F6D0}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90D}\u{1F90E}\u{1F910}-\u{1F917}\u{1F91D}\u{1F920}-\u{1F925}\u{1F927}-\u{1F92F}\u{1F93A}\u{1F93F}-\u{1F945}\u{1F947}-\u{1F976}\u{1F978}\u{1F97A}-\u{1F9B4}\u{1F9B7}\u{1F9BA}\u{1F9BC}-\u{1F9CB}\u{1F9D0}\u{1F9E0}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]/gu;
+};
diff --git a/deps/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/es2015/index.js b/deps/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/es2015/index.js
new file mode 100644
index 0000000000..1a4fc8d0dc
--- /dev/null
+++ b/deps/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/es2015/index.js
@@ -0,0 +1,6 @@
+"use strict";
+
+module.exports = () => {
+ // https://mths.be/emoji
+ return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0077}\u{E006C}\u{E0073}|\u{E0073}\u{E0063}\u{E0074}|\u{E0065}\u{E006E}\u{E0067})\u{E007F}|(?:\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FC}-\u{1F3FF}]|\u{1F468}(?:\u{1F3FB}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]))?|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u{1F466}\u{1F467}])|\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC})?|(?:\u{1F469}(?:\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}]))|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]\u200D\u{1F91D}\u200D\u{1F9D1})[\u{1F3FB}-\u{1F3FF}]|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F469}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F9D1}(?:\u200D(?:\u{1F91D}\u200D\u{1F9D1}|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F9D1}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F636}\u200D\u{1F32B}|\u{1F3F3}\uFE0F\u200D\u26A7|\u{1F43B}\u200D\u2744|(?:[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u{1F3F4}\u200D\u2620|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F202}\u{1F237}\u{1F321}\u{1F324}-\u{1F32C}\u{1F336}\u{1F37D}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}\u{1F39F}\u{1F3CD}\u{1F3CE}\u{1F3D4}-\u{1F3DF}\u{1F3F5}\u{1F3F7}\u{1F43F}\u{1F4FD}\u{1F549}\u{1F54A}\u{1F56F}\u{1F570}\u{1F573}\u{1F576}-\u{1F579}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}\u{1F6CB}\u{1F6CD}-\u{1F6CF}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6F0}\u{1F6F3}])\uFE0F|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F469}\u200D\u{1F467}|\u{1F469}\u200D\u{1F466}|\u{1F635}\u200D\u{1F4AB}|\u{1F62E}\u200D\u{1F4A8}|\u{1F415}\u200D\u{1F9BA}|\u{1F9D1}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F469}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F1FD}\u{1F1F0}|\u{1F1F6}\u{1F1E6}|\u{1F1F4}\u{1F1F2}|\u{1F408}\u200D\u2B1B|\u2764\uFE0F\u200D[\u{1F525}\u{1FA79}]|\u{1F441}\uFE0F|\u{1F3F3}\uFE0F|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]|\u{1F3F4}|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270C\u270D\u{1F574}\u{1F590}][\uFE0F\u{1F3FB}-\u{1F3FF}]|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F408}\u{1F415}\u{1F43B}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F62E}\u{1F635}\u{1F636}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F384}\u{1F386}-\u{1F393}\u{1F3A0}-\u{1F3C1}\u{1F3C5}\u{1F3C6}\u{1F3C8}\u{1F3C9}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F8}-\u{1F407}\u{1F409}-\u{1F414}\u{1F416}-\u{1F43A}\u{1F43C}-\u{1F43E}\u{1F440}\u{1F444}\u{1F445}\u{1F451}-\u{1F465}\u{1F46A}\u{1F479}-\u{1F47B}\u{1F47D}-\u{1F480}\u{1F484}\u{1F488}-\u{1F48E}\u{1F490}\u{1F492}-\u{1F4A9}\u{1F4AB}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F5A4}\u{1F5FB}-\u{1F62D}\u{1F62F}-\u{1F634}\u{1F637}-\u{1F644}\u{1F648}-\u{1F64A}\u{1F680}-\u{1F6A2}\u{1F6A4}-\u{1F6B3}\u{1F6B7}-\u{1F6BF}\u{1F6C1}-\u{1F6C5}\u{1F6D0}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90D}\u{1F90E}\u{1F910}-\u{1F917}\u{1F91D}\u{1F920}-\u{1F925}\u{1F927}-\u{1F92F}\u{1F93A}\u{1F93F}-\u{1F945}\u{1F947}-\u{1F976}\u{1F978}\u{1F97A}-\u{1F9B4}\u{1F9B7}\u{1F9BA}\u{1F9BC}-\u{1F9CB}\u{1F9D0}\u{1F9E0}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90C}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F978}\u{1F97A}-\u{1F9CB}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90C}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F978}\u{1F97A}-\u{1F9CB}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]\uFE0F|[\u261D\u26F9\u270A-\u270D\u{1F385}\u{1F3C2}-\u{1F3C4}\u{1F3C7}\u{1F3CA}-\u{1F3CC}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}-\u{1F478}\u{1F47C}\u{1F481}-\u{1F483}\u{1F485}-\u{1F487}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F574}\u{1F575}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F645}-\u{1F647}\u{1F64B}-\u{1F64F}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91F}\u{1F926}\u{1F930}-\u{1F939}\u{1F93C}-\u{1F93E}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9B8}\u{1F9B9}\u{1F9BB}\u{1F9CD}-\u{1F9CF}\u{1F9D1}-\u{1F9DD}]/gu;
+};
diff --git a/deps/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/es2015/text.js b/deps/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/es2015/text.js
new file mode 100644
index 0000000000..8e9f985758
--- /dev/null
+++ b/deps/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/es2015/text.js
@@ -0,0 +1,6 @@
+"use strict";
+
+module.exports = () => {
+ // https://mths.be/emoji
+ return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0077}\u{E006C}\u{E0073}|\u{E0073}\u{E0063}\u{E0074}|\u{E0065}\u{E006E}\u{E0067})\u{E007F}|(?:\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FC}-\u{1F3FF}]|\u{1F468}(?:\u{1F3FB}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]))?|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u{1F466}\u{1F467}])|\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC})?|(?:\u{1F469}(?:\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}]))|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]\u200D\u{1F91D}\u200D\u{1F9D1})[\u{1F3FB}-\u{1F3FF}]|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F469}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F9D1}(?:\u200D(?:\u{1F91D}\u200D\u{1F9D1}|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F9D1}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F636}\u200D\u{1F32B}|\u{1F3F3}\uFE0F\u200D\u26A7|\u{1F43B}\u200D\u2744|(?:[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u{1F3F4}\u200D\u2620|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F202}\u{1F237}\u{1F321}\u{1F324}-\u{1F32C}\u{1F336}\u{1F37D}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}\u{1F39F}\u{1F3CD}\u{1F3CE}\u{1F3D4}-\u{1F3DF}\u{1F3F5}\u{1F3F7}\u{1F43F}\u{1F4FD}\u{1F549}\u{1F54A}\u{1F56F}\u{1F570}\u{1F573}\u{1F576}-\u{1F579}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}\u{1F6CB}\u{1F6CD}-\u{1F6CF}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6F0}\u{1F6F3}])\uFE0F|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F469}\u200D\u{1F467}|\u{1F469}\u200D\u{1F466}|\u{1F635}\u200D\u{1F4AB}|\u{1F62E}\u200D\u{1F4A8}|\u{1F415}\u200D\u{1F9BA}|\u{1F9D1}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F469}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F1FD}\u{1F1F0}|\u{1F1F6}\u{1F1E6}|\u{1F1F4}\u{1F1F2}|\u{1F408}\u200D\u2B1B|\u2764\uFE0F\u200D[\u{1F525}\u{1FA79}]|\u{1F441}\uFE0F|\u{1F3F3}\uFE0F|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]|\u{1F3F4}|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270C\u270D\u{1F574}\u{1F590}][\uFE0F\u{1F3FB}-\u{1F3FF}]|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F408}\u{1F415}\u{1F43B}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F62E}\u{1F635}\u{1F636}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F384}\u{1F386}-\u{1F393}\u{1F3A0}-\u{1F3C1}\u{1F3C5}\u{1F3C6}\u{1F3C8}\u{1F3C9}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F8}-\u{1F407}\u{1F409}-\u{1F414}\u{1F416}-\u{1F43A}\u{1F43C}-\u{1F43E}\u{1F440}\u{1F444}\u{1F445}\u{1F451}-\u{1F465}\u{1F46A}\u{1F479}-\u{1F47B}\u{1F47D}-\u{1F480}\u{1F484}\u{1F488}-\u{1F48E}\u{1F490}\u{1F492}-\u{1F4A9}\u{1F4AB}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F5A4}\u{1F5FB}-\u{1F62D}\u{1F62F}-\u{1F634}\u{1F637}-\u{1F644}\u{1F648}-\u{1F64A}\u{1F680}-\u{1F6A2}\u{1F6A4}-\u{1F6B3}\u{1F6B7}-\u{1F6BF}\u{1F6C1}-\u{1F6C5}\u{1F6D0}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90D}\u{1F90E}\u{1F910}-\u{1F917}\u{1F91D}\u{1F920}-\u{1F925}\u{1F927}-\u{1F92F}\u{1F93A}\u{1F93F}-\u{1F945}\u{1F947}-\u{1F976}\u{1F978}\u{1F97A}-\u{1F9B4}\u{1F9B7}\u{1F9BA}\u{1F9BC}-\u{1F9CB}\u{1F9D0}\u{1F9E0}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90C}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F978}\u{1F97A}-\u{1F9CB}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]\uFE0F?/gu;
+};
diff --git a/deps/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/index.js b/deps/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/index.js
new file mode 100644
index 0000000000..c0490d4c95
--- /dev/null
+++ b/deps/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/index.js
@@ -0,0 +1,6 @@
+"use strict";
+
+module.exports = function () {
+ // https://mths.be/emoji
+ return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g;
+};
diff --git a/deps/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/package.json b/deps/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/package.json
new file mode 100644
index 0000000000..eac892a16a
--- /dev/null
+++ b/deps/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/package.json
@@ -0,0 +1,52 @@
+{
+ "name": "emoji-regex",
+ "version": "9.2.2",
+ "description": "A regular expression to match all Emoji-only symbols as per the Unicode Standard.",
+ "homepage": "https://mths.be/emoji-regex",
+ "main": "index.js",
+ "types": "index.d.ts",
+ "keywords": [
+ "unicode",
+ "regex",
+ "regexp",
+ "regular expressions",
+ "code points",
+ "symbols",
+ "characters",
+ "emoji"
+ ],
+ "license": "MIT",
+ "author": {
+ "name": "Mathias Bynens",
+ "url": "https://mathiasbynens.be/"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/mathiasbynens/emoji-regex.git"
+ },
+ "bugs": "https://github.com/mathiasbynens/emoji-regex/issues",
+ "files": [
+ "LICENSE-MIT.txt",
+ "index.js",
+ "index.d.ts",
+ "RGI_Emoji.js",
+ "RGI_Emoji.d.ts",
+ "text.js",
+ "text.d.ts",
+ "es2015"
+ ],
+ "scripts": {
+ "build": "rm -rf -- es2015; babel src -d .; NODE_ENV=es2015 babel src es2015_types -D -d ./es2015; node script/inject-sequences.js",
+ "test": "mocha",
+ "test:watch": "npm run test -- --watch"
+ },
+ "devDependencies": {
+ "@babel/cli": "^7.4.4",
+ "@babel/core": "^7.4.4",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
+ "@babel/preset-env": "^7.4.4",
+ "@unicode/unicode-13.0.0": "^1.0.3",
+ "mocha": "^6.1.4",
+ "regexgen": "^1.3.0"
+ }
+}
diff --git a/deps/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/text.js b/deps/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/text.js
new file mode 100644
index 0000000000..9bc63ce747
--- /dev/null
+++ b/deps/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/text.js
@@ -0,0 +1,6 @@
+"use strict";
+
+module.exports = function () {
+ // https://mths.be/emoji
+ return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F?/g;
+};
diff --git a/deps/npm/node_modules/@isaacs/cliui/node_modules/string-width/index.js b/deps/npm/node_modules/@isaacs/cliui/node_modules/string-width/index.js
new file mode 100644
index 0000000000..9294488f88
--- /dev/null
+++ b/deps/npm/node_modules/@isaacs/cliui/node_modules/string-width/index.js
@@ -0,0 +1,54 @@
+import stripAnsi from 'strip-ansi';
+import eastAsianWidth from 'eastasianwidth';
+import emojiRegex from 'emoji-regex';
+
+export default function stringWidth(string, options = {}) {
+ if (typeof string !== 'string' || string.length === 0) {
+ return 0;
+ }
+
+ options = {
+ ambiguousIsNarrow: true,
+ ...options
+ };
+
+ string = stripAnsi(string);
+
+ if (string.length === 0) {
+ return 0;
+ }
+
+ string = string.replace(emojiRegex(), ' ');
+
+ const ambiguousCharacterWidth = options.ambiguousIsNarrow ? 1 : 2;
+ let width = 0;
+
+ for (const character of string) {
+ const codePoint = character.codePointAt(0);
+
+ // Ignore control characters
+ if (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) {
+ continue;
+ }
+
+ // Ignore combining characters
+ if (codePoint >= 0x300 && codePoint <= 0x36F) {
+ continue;
+ }
+
+ const code = eastAsianWidth.eastAsianWidth(character);
+ switch (code) {
+ case 'F':
+ case 'W':
+ width += 2;
+ break;
+ case 'A':
+ width += ambiguousCharacterWidth;
+ break;
+ default:
+ width += 1;
+ }
+ }
+
+ return width;
+}
diff --git a/deps/npm/node_modules/@isaacs/cliui/node_modules/string-width/license b/deps/npm/node_modules/@isaacs/cliui/node_modules/string-width/license
new file mode 100644
index 0000000000..fa7ceba3eb
--- /dev/null
+++ b/deps/npm/node_modules/@isaacs/cliui/node_modules/string-width/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (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/@isaacs/cliui/node_modules/string-width/package.json b/deps/npm/node_modules/@isaacs/cliui/node_modules/string-width/package.json
new file mode 100644
index 0000000000..f46d6770f9
--- /dev/null
+++ b/deps/npm/node_modules/@isaacs/cliui/node_modules/string-width/package.json
@@ -0,0 +1,59 @@
+{
+ "name": "string-width",
+ "version": "5.1.2",
+ "description": "Get the visual width of a string - the number of columns required to display it",
+ "license": "MIT",
+ "repository": "sindresorhus/string-width",
+ "funding": "https://github.com/sponsors/sindresorhus",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "https://sindresorhus.com"
+ },
+ "type": "module",
+ "exports": "./index.js",
+ "engines": {
+ "node": ">=12"
+ },
+ "scripts": {
+ "test": "xo && ava && tsd"
+ },
+ "files": [
+ "index.js",
+ "index.d.ts"
+ ],
+ "keywords": [
+ "string",
+ "character",
+ "unicode",
+ "width",
+ "visual",
+ "column",
+ "columns",
+ "fullwidth",
+ "full-width",
+ "full",
+ "ansi",
+ "escape",
+ "codes",
+ "cli",
+ "command-line",
+ "terminal",
+ "console",
+ "cjk",
+ "chinese",
+ "japanese",
+ "korean",
+ "fixed-width"
+ ],
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "devDependencies": {
+ "ava": "^3.15.0",
+ "tsd": "^0.14.0",
+ "xo": "^0.38.2"
+ }
+}
diff --git a/deps/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi/index.js b/deps/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi/index.js
new file mode 100644
index 0000000000..ef3c095f5f
--- /dev/null
+++ b/deps/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi/index.js
@@ -0,0 +1,9 @@
+import ansiRegex from 'ansi-regex';
+
+export default function stripAnsi(string) {
+ if (typeof string !== 'string') {
+ throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``);
+ }
+
+ return string.replace(ansiRegex(), '');
+}
diff --git a/deps/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi/license b/deps/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi/license
new file mode 100644
index 0000000000..fa7ceba3eb
--- /dev/null
+++ b/deps/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (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/@isaacs/cliui/node_modules/strip-ansi/package.json b/deps/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi/package.json
new file mode 100644
index 0000000000..0de0586f7e
--- /dev/null
+++ b/deps/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi/package.json
@@ -0,0 +1,57 @@
+{
+ "name": "strip-ansi",
+ "version": "7.0.1",
+ "description": "Strip ANSI escape codes from a string",
+ "license": "MIT",
+ "repository": "chalk/strip-ansi",
+ "funding": "https://github.com/chalk/strip-ansi?sponsor=1",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "https://sindresorhus.com"
+ },
+ "type": "module",
+ "exports": "./index.js",
+ "engines": {
+ "node": ">=12"
+ },
+ "scripts": {
+ "test": "xo && ava && tsd"
+ },
+ "files": [
+ "index.js",
+ "index.d.ts"
+ ],
+ "keywords": [
+ "strip",
+ "trim",
+ "remove",
+ "ansi",
+ "styles",
+ "color",
+ "colour",
+ "colors",
+ "terminal",
+ "console",
+ "string",
+ "tty",
+ "escape",
+ "formatting",
+ "rgb",
+ "256",
+ "shell",
+ "xterm",
+ "log",
+ "logging",
+ "command-line",
+ "text"
+ ],
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "devDependencies": {
+ "ava": "^3.15.0",
+ "tsd": "^0.17.0",
+ "xo": "^0.44.0"
+ }
+}
diff --git a/deps/npm/node_modules/@isaacs/cliui/package.json b/deps/npm/node_modules/@isaacs/cliui/package.json
new file mode 100644
index 0000000000..7a952532de
--- /dev/null
+++ b/deps/npm/node_modules/@isaacs/cliui/package.json
@@ -0,0 +1,86 @@
+{
+ "name": "@isaacs/cliui",
+ "version": "8.0.2",
+ "description": "easily create complex multi-column command-line-interfaces",
+ "main": "build/index.cjs",
+ "exports": {
+ ".": [
+ {
+ "import": "./index.mjs",
+ "require": "./build/index.cjs"
+ },
+ "./build/index.cjs"
+ ]
+ },
+ "type": "module",
+ "module": "./index.mjs",
+ "scripts": {
+ "check": "standardx '**/*.ts' && standardx '**/*.js' && standardx '**/*.cjs'",
+ "fix": "standardx --fix '**/*.ts' && standardx --fix '**/*.js' && standardx --fix '**/*.cjs'",
+ "pretest": "rimraf build && tsc -p tsconfig.test.json && cross-env NODE_ENV=test npm run build:cjs",
+ "test": "c8 mocha ./test/*.cjs",
+ "test:esm": "c8 mocha ./test/**/*.mjs",
+ "postest": "check",
+ "coverage": "c8 report --check-coverage",
+ "precompile": "rimraf build",
+ "compile": "tsc",
+ "postcompile": "npm run build:cjs",
+ "build:cjs": "rollup -c",
+ "prepare": "npm run compile"
+ },
+ "repository": "yargs/cliui",
+ "standard": {
+ "ignore": [
+ "**/example/**"
+ ],
+ "globals": [
+ "it"
+ ]
+ },
+ "keywords": [
+ "cli",
+ "command-line",
+ "layout",
+ "design",
+ "console",
+ "wrap",
+ "table"
+ ],
+ "author": "Ben Coe <ben@npmjs.com>",
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^5.1.2",
+ "string-width-cjs": "npm:string-width@^4.2.0",
+ "strip-ansi": "^7.0.1",
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+ "wrap-ansi": "^8.1.0",
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ },
+ "devDependencies": {
+ "@types/node": "^14.0.27",
+ "@typescript-eslint/eslint-plugin": "^4.0.0",
+ "@typescript-eslint/parser": "^4.0.0",
+ "c8": "^7.3.0",
+ "chai": "^4.2.0",
+ "chalk": "^4.1.0",
+ "cross-env": "^7.0.2",
+ "eslint": "^7.6.0",
+ "eslint-plugin-import": "^2.22.0",
+ "eslint-plugin-node": "^11.1.0",
+ "gts": "^3.0.0",
+ "mocha": "^10.0.0",
+ "rimraf": "^3.0.2",
+ "rollup": "^2.23.1",
+ "rollup-plugin-ts": "^3.0.2",
+ "standardx": "^7.0.0",
+ "typescript": "^4.0.0"
+ },
+ "files": [
+ "build",
+ "index.mjs",
+ "!*.d.ts"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+}
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 0d936d8ef7..d04ddf27b6 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
@@ -31,75 +31,75 @@ const Link = require('../link.js')
const addRmPkgDeps = require('../add-rm-pkg-deps.js')
const optionalSet = require('../optional-set.js')
const { checkEngine, checkPlatform } = require('npm-install-checks')
-
const relpath = require('../relpath.js')
+const resetDepFlags = require('../reset-dep-flags.js')
// note: some of these symbols are shared so we can hit
// them with unit tests and reuse them across mixins
-const _complete = Symbol('complete')
-const _depsSeen = Symbol('depsSeen')
-const _depsQueue = Symbol('depsQueue')
-const _currentDep = Symbol('currentDep')
const _updateAll = Symbol.for('updateAll')
-const _mutateTree = Symbol('mutateTree')
const _flagsSuspect = Symbol.for('flagsSuspect')
const _workspaces = Symbol.for('workspaces')
-const _prune = Symbol('prune')
-const _preferDedupe = Symbol('preferDedupe')
-const _parseSettings = Symbol('parseSettings')
-const _initTree = Symbol('initTree')
-const _applyUserRequests = Symbol('applyUserRequests')
-const _applyUserRequestsToNode = Symbol('applyUserRequestsToNode')
-const _inflateAncientLockfile = Symbol('inflateAncientLockfile')
-const _buildDeps = Symbol('buildDeps')
-const _buildDepStep = Symbol('buildDepStep')
-const _nodeFromEdge = Symbol('nodeFromEdge')
-const _nodeFromSpec = Symbol('nodeFromSpec')
-const _fetchManifest = Symbol('fetchManifest')
-const _problemEdges = Symbol('problemEdges')
-const _manifests = Symbol('manifests')
-const _loadWorkspaces = Symbol.for('loadWorkspaces')
-const _linkFromSpec = Symbol('linkFromSpec')
-const _loadPeerSet = Symbol('loadPeerSet')
+const _setWorkspaces = Symbol.for('setWorkspaces')
const _updateNames = Symbol.for('updateNames')
-const _fixDepFlags = Symbol('fixDepFlags')
-const _resolveLinks = Symbol('resolveLinks')
-const _rootNodeFromPackage = Symbol('rootNodeFromPackage')
-const _add = Symbol('add')
const _resolvedAdd = Symbol.for('resolvedAdd')
-const _queueNamedUpdates = Symbol('queueNamedUpdates')
-const _queueVulnDependents = Symbol('queueVulnDependents')
-const _avoidRange = Symbol('avoidRange')
-const _shouldUpdateNode = Symbol('shouldUpdateNode')
-const resetDepFlags = require('../reset-dep-flags.js')
-const _loadFailures = Symbol('loadFailures')
-const _pruneFailedOptional = Symbol('pruneFailedOptional')
-const _linkNodes = Symbol('linkNodes')
-const _follow = Symbol('follow')
-const _installStrategy = Symbol('installStrategy')
-const _globalRootNode = Symbol('globalRootNode')
const _usePackageLock = Symbol.for('usePackageLock')
const _rpcache = Symbol.for('realpathCache')
const _stcache = Symbol.for('statCache')
-const _strictPeerDeps = Symbol('strictPeerDeps')
-const _checkEngineAndPlatform = Symbol('checkEngineAndPlatform')
-const _virtualRoots = Symbol('virtualRoots')
-const _virtualRoot = Symbol('virtualRoot')
const _includeWorkspaceRoot = Symbol.for('includeWorkspaceRoot')
-const _failPeerConflict = Symbol('failPeerConflict')
-const _explainPeerConflict = Symbol('explainPeerConflict')
-const _edgesOverridden = Symbol('edgesOverridden')
// exposed symbol for unit testing the placeDep method directly
const _peerSetSource = Symbol.for('peerSetSource')
// used by Reify mixin
const _force = Symbol.for('force')
-const _explicitRequests = Symbol('explicitRequests')
const _global = Symbol.for('global')
const _idealTreePrune = Symbol.for('idealTreePrune')
+// Push items in, pop them sorted by depth and then path
+class DepsQueue {
+ #deps = []
+ #sorted = true
+
+ get length () {
+ return this.#deps.length
+ }
+
+ push (item) {
+ if (!this.#deps.includes(item)) {
+ this.#sorted = false
+ this.#deps.push(item)
+ }
+ }
+
+ pop () {
+ if (!this.#sorted) {
+ // sort physically shallower deps up to the front of the queue, because
+ // they'll affect things deeper in, then alphabetical
+ this.#deps.sort((a, b) =>
+ (a.depth - b.depth) || localeCompare(a.path, b.path))
+ this.#sorted = true
+ }
+ return this.#deps.shift()
+ }
+}
+
module.exports = cls => class IdealTreeBuilder extends cls {
+ #complete
+ #currentDep = null
+ #depsQueue = new DepsQueue()
+ #depsSeen = new Set()
+ #explicitRequests = new Set()
+ #follow
+ #installStrategy
+ #linkNodes = new Set()
+ #loadFailures = new Set()
+ #manifests = new Map()
+ #mutateTree = false
+ #preferDedupe = false
+ #prune
+ #strictPeerDeps
+ #virtualRoots = new Map()
+
constructor (options) {
super(options)
@@ -123,7 +123,7 @@ module.exports = cls => class IdealTreeBuilder extends cls {
this[_workspaces] = workspaces || []
this[_force] = !!force
- this[_strictPeerDeps] = !!strictPeerDeps
+ this.#strictPeerDeps = !!strictPeerDeps
this.idealTree = idealTree
this.installLinks = installLinks
@@ -131,38 +131,27 @@ module.exports = cls => class IdealTreeBuilder extends cls {
this[_usePackageLock] = packageLock
this[_global] = !!global
- this[_installStrategy] = global ? 'shallow' : installStrategy
- this[_follow] = !!follow
+ this.#installStrategy = global ? 'shallow' : installStrategy
+ this.#follow = !!follow
if (this[_workspaces].length && this[_global]) {
throw new Error('Cannot operate on workspaces in global mode')
}
- this[_explicitRequests] = new Set()
- this[_preferDedupe] = false
- this[_depsSeen] = new Set()
- this[_depsQueue] = []
- this[_currentDep] = null
- this[_updateNames] = []
this[_updateAll] = false
- this[_mutateTree] = false
- this[_loadFailures] = new Set()
- this[_linkNodes] = new Set()
- this[_manifests] = new Map()
- this[_edgesOverridden] = new Set()
+ this[_updateNames] = []
this[_resolvedAdd] = []
// a map of each module in a peer set to the thing that depended on
// that set of peers in the first place. Use a WeakMap so that we
// don't hold onto references for nodes that are garbage collected.
this[_peerSetSource] = new WeakMap()
- this[_virtualRoots] = new Map()
this[_includeWorkspaceRoot] = includeWorkspaceRoot
}
get explicitRequests () {
- return new Set(this[_explicitRequests])
+ return new Set(this.#explicitRequests)
}
// public method
@@ -195,19 +184,19 @@ module.exports = cls => class IdealTreeBuilder extends cls {
// from there, we start adding nodes to it to satisfy the deps requested
// by the package.json in the root.
- this[_parseSettings](options)
+ this.#parseSettings(options)
// start tracker block
this.addTracker('idealTree')
try {
- await this[_initTree]()
- await this[_inflateAncientLockfile]()
- await this[_applyUserRequests](options)
- await this[_buildDeps]()
- await this[_fixDepFlags]()
- await this[_pruneFailedOptional]()
- await this[_checkEngineAndPlatform]()
+ await this.#initTree()
+ await this.#inflateAncientLockfile()
+ await this.#applyUserRequests(options)
+ await this.#buildDeps()
+ await this.#fixDepFlags()
+ await this.#pruneFailedOptional()
+ await this.#checkEngineAndPlatform()
} finally {
process.emit('timeEnd', 'idealTree')
this.finishTracker('idealTree')
@@ -216,7 +205,7 @@ module.exports = cls => class IdealTreeBuilder extends cls {
return treeCheck(this.idealTree)
}
- async [_checkEngineAndPlatform] () {
+ async #checkEngineAndPlatform () {
const { engineStrict, npmVersion, nodeVersion } = this.options
for (const node of this.idealTree.inventory.values()) {
if (!node.optional) {
@@ -237,7 +226,7 @@ module.exports = cls => class IdealTreeBuilder extends cls {
}
}
- [_parseSettings] (options) {
+ #parseSettings (options) {
const update = options.update === true ? { all: true }
: Array.isArray(options.update) ? { names: options.update }
: options.update || {}
@@ -246,8 +235,8 @@ module.exports = cls => class IdealTreeBuilder extends cls {
update.names = []
}
- this[_complete] = !!options.complete
- this[_preferDedupe] = !!options.preferDedupe
+ this.#complete = !!options.complete
+ this.#preferDedupe = !!options.preferDedupe
// validates list of update names, they must
// be dep names only, no semver ranges are supported
@@ -267,11 +256,11 @@ module.exports = cls => class IdealTreeBuilder extends cls {
this[_updateAll] = update.all
// we prune by default unless explicitly set to boolean false
- this[_prune] = options.prune !== false
+ this.#prune = options.prune !== false
// set if we add anything, but also set here if we know we'll make
// changes and thus have to maybe prune later.
- this[_mutateTree] = !!(
+ this.#mutateTree = !!(
options.add ||
options.rm ||
update.all ||
@@ -281,20 +270,23 @@ module.exports = cls => class IdealTreeBuilder extends cls {
// load the initial tree, either the virtualTree from a shrinkwrap,
// or just the root node from a package.json
- [_initTree] () {
+ async #initTree () {
process.emit('time', 'idealTree:init')
- return (
- this[_global] ? this[_globalRootNode]()
- : rpj(this.path + '/package.json').then(
- pkg => this[_rootNodeFromPackage](pkg),
- er => {
- if (er.code === 'EJSONPARSE') {
- throw er
- }
- return this[_rootNodeFromPackage]({})
+ let root
+ if (this[_global]) {
+ root = await this.#globalRootNode()
+ } else {
+ try {
+ const pkg = await rpj(this.path + '/package.json')
+ root = await this.#rootNodeFromPackage(pkg)
+ } catch (err) {
+ if (err.code === 'EJSONPARSE') {
+ throw err
}
- ))
- .then(root => this[_loadWorkspaces](root))
+ root = await this.#rootNodeFromPackage({})
+ }
+ }
+ return this[_setWorkspaces](root)
// ok to not have a virtual tree. probably initial install.
// When updating all, we load the shrinkwrap, but don't bother
// to build out the full virtual tree from it, since we'll be
@@ -336,12 +328,18 @@ module.exports = cls => class IdealTreeBuilder extends cls {
// the depsQueue so that we'll fix it later
depth({
tree,
- getChildren: (node) => [...node.edgesOut.values()].map(edge => edge.to),
+ getChildren: (node) => {
+ const children = []
+ for (const edge of node.edgesOut.values()) {
+ children.push(edge.to)
+ }
+ return children
+ },
filter: node => node,
visit: node => {
for (const edge of node.edgesOut.values()) {
if (!edge.valid) {
- this[_depsQueue].push(node)
+ this.#depsQueue.push(node)
break // no need to continue the loop after the first hit
}
}
@@ -356,8 +354,8 @@ module.exports = cls => class IdealTreeBuilder extends cls {
})
}
- async [_globalRootNode] () {
- const root = await this[_rootNodeFromPackage]({ dependencies: {} })
+ async #globalRootNode () {
+ const root = await this.#rootNodeFromPackage({ dependencies: {} })
// this is a gross kludge to handle the fact that we don't save
// metadata on the root node in global installs, because the "root"
// node is something like /usr/local/lib.
@@ -371,7 +369,7 @@ module.exports = cls => class IdealTreeBuilder extends cls {
return root
}
- async [_rootNodeFromPackage] (pkg) {
+ async #rootNodeFromPackage (pkg) {
// if the path doesn't exist, then we explode at this point. Note that
// this is not a problem for reify(), since it creates the root path
// before ever loading trees.
@@ -414,19 +412,19 @@ module.exports = cls => class IdealTreeBuilder extends cls {
// process the add/rm requests by modifying the root node, and the
// update.names request by queueing nodes dependent on those named.
- async [_applyUserRequests] (options) {
+ async #applyUserRequests (options) {
process.emit('time', 'idealTree:userRequests')
const tree = this.idealTree.target
if (!this[_workspaces].length) {
- await this[_applyUserRequestsToNode](tree, options)
+ await this.#applyUserRequestsToNode(tree, options)
} else {
const nodes = this.workspaceNodes(tree, this[_workspaces])
if (this[_includeWorkspaceRoot]) {
nodes.push(tree)
}
const appliedRequests = nodes.map(
- node => this[_applyUserRequestsToNode](node, options)
+ node => this.#applyUserRequestsToNode(node, options)
)
await Promise.all(appliedRequests)
}
@@ -434,12 +432,12 @@ module.exports = cls => class IdealTreeBuilder extends cls {
process.emit('timeEnd', 'idealTree:userRequests')
}
- async [_applyUserRequestsToNode] (tree, options) {
+ async #applyUserRequestsToNode (tree, options) {
// If we have a list of package names to update, and we know it's
// going to update them wherever they are, add any paths into those
// named nodes to the buildIdealTree queue.
if (!this[_global] && this[_updateNames].length) {
- this[_queueNamedUpdates]()
+ this.#queueNamedUpdates()
}
// global updates only update the globalTop nodes, but we need to know
@@ -448,7 +446,8 @@ module.exports = cls => class IdealTreeBuilder extends cls {
if (this[_global] && (this[_updateAll] || this[_updateNames].length)) {
const nm = resolve(this.path, 'node_modules')
const paths = await readdirScoped(nm).catch(() => [])
- for (const name of paths.map((p) => p.replace(/\\/g, '/'))) {
+ for (const p of paths) {
+ const name = p.replace(/\\/g, '/')
tree.package.dependencies = tree.package.dependencies || {}
const updateName = this[_updateNames].includes(name)
if (this[_updateAll] || updateName) {
@@ -470,7 +469,7 @@ module.exports = cls => class IdealTreeBuilder extends cls {
}
if (this.auditReport && this.auditReport.size > 0) {
- await this[_queueVulnDependents](options)
+ await this.#queueVulnDependents(options)
}
const { add, rm } = options
@@ -478,12 +477,12 @@ module.exports = cls => class IdealTreeBuilder extends cls {
if (rm && rm.length) {
addRmPkgDeps.rm(tree.package, rm)
for (const name of rm) {
- this[_explicitRequests].add({ from: tree, name, action: 'DELETE' })
+ this.#explicitRequests.add({ from: tree, name, action: 'DELETE' })
}
}
if (add && add.length) {
- await this[_add](tree, options)
+ await this.#add(tree, options)
}
// triggers a refresh of all edgesOut. this has to be done BEFORE
@@ -495,19 +494,19 @@ module.exports = cls => class IdealTreeBuilder extends cls {
for (const spec of this[_resolvedAdd]) {
if (spec.tree === tree) {
- this[_explicitRequests].add(tree.edgesOut.get(spec.name))
+ this.#explicitRequests.add(tree.edgesOut.get(spec.name))
}
}
for (const name of globalExplicitUpdateNames) {
- this[_explicitRequests].add(tree.edgesOut.get(name))
+ this.#explicitRequests.add(tree.edgesOut.get(name))
}
- this[_depsQueue].push(tree)
+ this.#depsQueue.push(tree)
}
// This returns a promise because we might not have the name yet, and need to
// call pacote.manifest to find the name.
- async [_add] (tree, { add, saveType = null, saveBundle = false }) {
+ async #add (tree, { add, saveType = null, saveBundle = false }) {
// If we have a link it will need to be added relative to the target's path
const path = tree.target.path
@@ -564,7 +563,7 @@ module.exports = cls => class IdealTreeBuilder extends cls {
// what's in the bundle at each published manifest. Without that, we
// can't possibly fix bundled deps without breaking a ton of other stuff,
// and leaving the user subject to getting it overwritten later anyway.
- async [_queueVulnDependents] (options) {
+ async #queueVulnDependents (options) {
for (const vuln of this.auditReport.values()) {
for (const node of vuln.nodes) {
const bundler = node.getBundler()
@@ -584,7 +583,7 @@ module.exports = cls => class IdealTreeBuilder extends cls {
for (const edge of node.edgesIn) {
this.addTracker('idealTree', edge.from.name, edge.from.location)
- this[_depsQueue].push(edge.from)
+ this.#depsQueue.push(edge.from)
}
}
}
@@ -629,7 +628,7 @@ module.exports = cls => class IdealTreeBuilder extends cls {
log.warn('audit', `Updating ${fixName} to ${version}, ` +
`which is ${breakingMessage}.`)
- await this[_add](node, { add: [`${fixName}@${version}`] })
+ await this.#add(node, { add: [`${fixName}@${version}`] })
nodesTouched.add(node)
}
}
@@ -639,7 +638,7 @@ module.exports = cls => class IdealTreeBuilder extends cls {
}
}
- [_avoidRange] (name) {
+ #avoidRange (name) {
if (!this.auditReport) {
return null
}
@@ -650,7 +649,7 @@ module.exports = cls => class IdealTreeBuilder extends cls {
return vuln.range
}
- [_queueNamedUpdates] () {
+ #queueNamedUpdates () {
// ignore top nodes, since they are not loaded the same way, and
// probably have their own project associated with them.
@@ -661,25 +660,19 @@ module.exports = cls => class IdealTreeBuilder extends cls {
// XXX this could be faster by doing a series of inventory.query('name')
// calls rather than walking over everything in the tree.
- const set = this.idealTree.inventory
- .filter(n => this[_shouldUpdateNode](n))
- // XXX add any invalid edgesOut to the queue
- for (const node of set) {
- for (const edge of node.edgesIn) {
- this.addTracker('idealTree', edge.from.name, edge.from.location)
- this[_depsQueue].push(edge.from)
+ for (const node of this.idealTree.inventory.values()) {
+ // XXX add any invalid edgesOut to the queue
+ if (this[_updateNames].includes(node.name) &&
+ !node.isTop && !node.inDepBundle && !node.inShrinkwrap) {
+ for (const edge of node.edgesIn) {
+ this.addTracker('idealTree', edge.from.name, edge.from.location)
+ this.#depsQueue.push(edge.from)
+ }
}
}
}
- [_shouldUpdateNode] (node) {
- return this[_updateNames].includes(node.name) &&
- !node.isTop &&
- !node.inDepBundle &&
- !node.inShrinkwrap
- }
-
- async [_inflateAncientLockfile] () {
+ async #inflateAncientLockfile () {
const { meta, inventory } = this.idealTree
const ancient = meta.ancientLockfile
const old = meta.loadedFromDisk && !(meta.originalLockfileVersion >= 2)
@@ -764,38 +757,33 @@ This is a one-time fix-up, please be patient...
// at this point we have a virtual tree with the actual root node's
// package deps, which may be partly or entirely incomplete, invalid
// or extraneous.
- [_buildDeps] () {
+ #buildDeps () {
process.emit('time', 'idealTree:buildDeps')
const tree = this.idealTree.target
tree.assertRootOverrides()
- this[_depsQueue].push(tree)
+ this.#depsQueue.push(tree)
// XXX also push anything that depends on a node with a name
// in the override list
log.silly('idealTree', 'buildDeps')
this.addTracker('idealTree', tree.name, '')
- return this[_buildDepStep]()
+ return this.#buildDepStep()
.then(() => process.emit('timeEnd', 'idealTree:buildDeps'))
}
- async [_buildDepStep] () {
+ async #buildDepStep () {
// removes tracker of previous dependency in the queue
- if (this[_currentDep]) {
- const { location, name } = this[_currentDep]
+ if (this.#currentDep) {
+ const { location, name } = this.#currentDep
process.emit('timeEnd', `idealTree:${location || '#root'}`)
this.finishTracker('idealTree', name, location)
- this[_currentDep] = null
+ this.#currentDep = null
}
- if (!this[_depsQueue].length) {
- return this[_resolveLinks]()
+ if (!this.#depsQueue.length) {
+ return this.#resolveLinks()
}
- // sort physically shallower deps up to the front of the queue,
- // because they'll affect things deeper in, then alphabetical
- this[_depsQueue].sort((a, b) =>
- (a.depth - b.depth) || localeCompare(a.path, b.path))
-
- const node = this[_depsQueue].shift()
+ const node = this.#depsQueue.pop()
const bd = node.package.bundleDependencies
const hasBundle = bd && Array.isArray(bd) && bd.length
const { hasShrinkwrap } = node
@@ -804,14 +792,14 @@ This is a one-time fix-up, please be patient...
// tree, skip over it and process the rest of the queue. If a node has
// a shrinkwrap, also skip it, because it's going to get its deps
// satisfied by whatever's in that file anyway.
- if (this[_depsSeen].has(node) ||
+ if (this.#depsSeen.has(node) ||
node.root !== this.idealTree ||
- hasShrinkwrap && !this[_complete]) {
- return this[_buildDepStep]()
+ hasShrinkwrap && !this.#complete) {
+ return this.#buildDepStep()
}
- this[_depsSeen].add(node)
- this[_currentDep] = node
+ this.#depsSeen.add(node)
+ this.#currentDep = node
process.emit('time', `idealTree:${node.location || '#root'}`)
// if we're loading a _complete_ ideal tree, for a --package-lock-only
@@ -821,7 +809,7 @@ This is a one-time fix-up, please be patient...
// ideal tree by reading bundles/shrinkwraps in place.
// Don't bother if the node is from the actual tree and hasn't
// been resolved, because we can't fetch it anyway, could be anything!
- const crackOpen = this[_complete] &&
+ const crackOpen = this.#complete &&
node !== this.idealTree &&
node.resolved &&
(hasBundle || hasShrinkwrap)
@@ -891,7 +879,7 @@ This is a one-time fix-up, please be patient...
const tasks = []
const peerSource = this[_peerSetSource].get(node) || node
- for (const edge of this[_problemEdges](node)) {
+ for (const edge of this.#problemEdges(node)) {
if (edge.peerConflicted) {
continue
}
@@ -902,7 +890,7 @@ This is a one-time fix-up, please be patient...
// so we VR the node itself if the edge is not a peer
const source = edge.peer ? peerSource : node
- const virtualRoot = this[_virtualRoot](source, true)
+ const virtualRoot = this.#virtualRoot(source, true)
// reuse virtual root if we already have one, but don't
// try to do the override ahead of time, since we MAY be able
// to create a more correct tree than the virtual root could.
@@ -926,7 +914,7 @@ This is a one-time fix-up, please be patient...
const required = new Set([edge.from])
const parent = edge.peer ? virtualRoot : null
const dep = vrDep && vrDep.satisfies(edge) ? vrDep
- : await this[_nodeFromEdge](edge, parent, null, required)
+ : await this.#nodeFromEdge(edge, parent, null, required)
/* istanbul ignore next */
debug(() => {
@@ -938,25 +926,24 @@ This is a one-time fix-up, please be patient...
tasks.push({ edge, dep })
}
- const placeDeps = tasks
- .sort((a, b) => localeCompare(a.edge.name, b.edge.name))
- .map(({ edge, dep }) => new PlaceDep({
+ const placeDeps = tasks.sort((a, b) => localeCompare(a.edge.name, b.edge.name))
+
+ const promises = []
+ for (const { edge, dep } of placeDeps) {
+ const pd = new PlaceDep({
edge,
dep,
auditReport: this.auditReport,
- explicitRequest: this[_explicitRequests].has(edge),
+ explicitRequest: this.#explicitRequests.has(edge),
force: this[_force],
installLinks: this.installLinks,
- installStrategy: this[_installStrategy],
+ installStrategy: this.#installStrategy,
legacyPeerDeps: this.legacyPeerDeps,
- preferDedupe: this[_preferDedupe],
- strictPeerDeps: this[_strictPeerDeps],
+ preferDedupe: this.#preferDedupe,
+ strictPeerDeps: this.#strictPeerDeps,
updateNames: this[_updateNames],
- }))
-
- const promises = []
- for (const pd of placeDeps) {
+ })
// placing a dep is actually a tree of placing the dep itself
// and all of its peer group that aren't already met by the tree
depth({
@@ -971,18 +958,18 @@ This is a one-time fix-up, please be patient...
// we placed something, that means we changed the tree
if (placed.errors.length) {
- this[_loadFailures].add(placed)
+ this.#loadFailures.add(placed)
}
- this[_mutateTree] = true
+ this.#mutateTree = true
if (cpd.canPlaceSelf === OK) {
for (const edgeIn of placed.edgesIn) {
if (edgeIn === edge) {
continue
}
const { from, valid, peerConflicted } = edgeIn
- if (!peerConflicted && !valid && !this[_depsSeen].has(from)) {
+ if (!peerConflicted && !valid && !this.#depsSeen.has(from)) {
this.addTracker('idealTree', from.name, from.location)
- this[_depsQueue].push(edgeIn.from)
+ this.#depsQueue.push(edgeIn.from)
}
}
} else {
@@ -1000,8 +987,8 @@ This is a one-time fix-up, please be patient...
if (!valid && !peerConflicted) {
// if it's already been visited, we have to re-visit
// otherwise, just enqueue normally.
- this[_depsSeen].delete(edgeIn.from)
- this[_depsQueue].push(edgeIn.from)
+ this.#depsSeen.delete(edgeIn.from)
+ this.#depsQueue.push(edgeIn.from)
}
}
}
@@ -1018,45 +1005,48 @@ This is a one-time fix-up, please be patient...
// lastly, also check for the missing deps of the node we placed,
// and any holes created by pruning out conflicted peer sets.
- this[_depsQueue].push(placed)
+ this.#depsQueue.push(placed)
for (const dep of pd.needEvaluation) {
- this[_depsSeen].delete(dep)
- this[_depsQueue].push(dep)
+ this.#depsSeen.delete(dep)
+ this.#depsQueue.push(dep)
}
// pre-fetch any problem edges, since we'll need these soon
// if it fails at this point, though, dont' worry because it
// may well be an optional dep that has gone missing. it'll
// fail later anyway.
- promises.push(...this[_problemEdges](placed).map(e =>
- this[_fetchManifest](npa.resolve(e.name, e.spec, fromPath(placed, e)))
- .catch(er => null)))
+ for (const e of this.#problemEdges(placed)) {
+ promises.push(
+ this.#fetchManifest(npa.resolve(e.name, e.spec, fromPath(placed, e)))
+ .catch(er => null)
+ )
+ }
},
})
}
for (const { to } of node.edgesOut.values()) {
if (to && to.isLink && to.target) {
- this[_linkNodes].add(to)
+ this.#linkNodes.add(to)
}
}
await Promise.all(promises)
- return this[_buildDepStep]()
+ return this.#buildDepStep()
}
// loads a node from an edge, and then loads its peer deps (and their
// peer deps, on down the line) into a virtual root parent.
- async [_nodeFromEdge] (edge, parent_, secondEdge, required) {
+ async #nodeFromEdge (edge, parent_, secondEdge, required) {
// create a virtual root node with the same deps as the node that
// is requesting this one, so that we can get all the peer deps in
// a context where they're likely to be resolvable.
// Note that the virtual root will also have virtual copies of the
// targets of any child Links, so that they resolve appropriately.
- const parent = parent_ || this[_virtualRoot](edge.from)
+ const parent = parent_ || this.#virtualRoot(edge.from)
const spec = npa.resolve(edge.name, edge.spec, edge.from.path)
- const first = await this[_nodeFromSpec](edge.name, spec, parent, edge)
+ const first = await this.#nodeFromSpec(edge.name, spec, parent, edge)
// we might have a case where the parent has a peer dependency on
// `foo@*` which resolves to v2, but another dep in the set has a
@@ -1071,7 +1061,7 @@ This is a one-time fix-up, please be patient...
secondEdge.from.path
)
const second = secondEdge && !secondEdge.valid
- ? await this[_nodeFromSpec](edge.name, spec2, parent, secondEdge)
+ ? await this.#nodeFromSpec(edge.name, spec2, parent, secondEdge)
: null
// pick the second one if they're both happy with that, otherwise first
@@ -1098,12 +1088,12 @@ This is a one-time fix-up, please be patient...
}
// otherwise, we have to make sure that our peers can go along with us.
- return this[_loadPeerSet](node, required)
+ return this.#loadPeerSet(node, required)
}
- [_virtualRoot] (node, reuse = false) {
- if (reuse && this[_virtualRoots].has(node)) {
- return this[_virtualRoots].get(node)
+ #virtualRoot (node, reuse = false) {
+ if (reuse && this.#virtualRoots.has(node)) {
+ return this.#virtualRoots.get(node)
}
const vr = new Node({
@@ -1126,11 +1116,11 @@ This is a one-time fix-up, please be patient...
}
}
- this[_virtualRoots].set(node, vr)
+ this.#virtualRoots.set(node, vr)
return vr
}
- [_problemEdges] (node) {
+ #problemEdges (node) {
// skip over any bundled deps, they're not our problem.
// Note that this WILL fetch bundled meta-deps which are also dependencies
// but not listed as bundled deps. When reifying, we first unpack any
@@ -1145,85 +1135,90 @@ This is a one-time fix-up, please be patient...
: node.package.bundleDependencies
const bundled = new Set(bd || [])
- return [...node.edgesOut.values()]
- .filter(edge => {
- // If it's included in a bundle, we take whatever is specified.
- if (bundled.has(edge.name)) {
- return false
- }
-
- // If it's already been logged as a load failure, skip it.
- if (edge.to && this[_loadFailures].has(edge.to)) {
- return false
- }
+ const problems = []
+ for (const edge of node.edgesOut.values()) {
+ // If it's included in a bundle, we take whatever is specified.
+ if (bundled.has(edge.name)) {
+ continue
+ }
- // If it's shrinkwrapped, we use what the shrinkwap wants.
- if (edge.to && edge.to.inShrinkwrap) {
- return false
- }
+ // If it's already been logged as a load failure, skip it.
+ if (edge.to && this.#loadFailures.has(edge.to)) {
+ continue
+ }
- // If the edge has no destination, that's a problem, unless
- // if it's peerOptional and not explicitly requested.
- if (!edge.to) {
- return edge.type !== 'peerOptional' ||
- this[_explicitRequests].has(edge)
- }
+ // If it's shrinkwrapped, we use what the shrinkwap wants.
+ if (edge.to && edge.to.inShrinkwrap) {
+ continue
+ }
- // If the edge has an error, there's a problem.
- if (!edge.valid) {
- return true
+ // If the edge has no destination, that's a problem, unless
+ // if it's peerOptional and not explicitly requested.
+ if (!edge.to) {
+ if (edge.type !== 'peerOptional' ||
+ this.#explicitRequests.has(edge)) {
+ problems.push(edge)
}
+ continue
+ }
- // If the edge is a workspace, and it's valid, leave it alone
- if (edge.to.isWorkspace) {
- return false
- }
+ // If the edge has an error, there's a problem.
+ if (!edge.valid) {
+ problems.push(edge)
+ continue
+ }
- // user explicitly asked to update this package by name, problem
- if (this[_updateNames].includes(edge.name)) {
- return true
- }
+ // If the edge is a workspace, and it's valid, leave it alone
+ if (edge.to.isWorkspace) {
+ continue
+ }
- // fixing a security vulnerability with this package, problem
- if (this.auditReport && this.auditReport.isVulnerable(edge.to)) {
- return true
- }
+ // user explicitly asked to update this package by name, problem
+ if (this[_updateNames].includes(edge.name)) {
+ problems.push(edge)
+ continue
+ }
- // user has explicitly asked to install this package, problem
- if (this[_explicitRequests].has(edge)) {
- return true
- }
+ // fixing a security vulnerability with this package, problem
+ if (this.auditReport && this.auditReport.isVulnerable(edge.to)) {
+ problems.push(edge)
+ continue
+ }
- // No problems!
- return false
- })
+ // user has explicitly asked to install this package, problem
+ if (this.#explicitRequests.has(edge)) {
+ problems.push(edge)
+ continue
+ }
+ }
+ return problems
}
- async [_fetchManifest] (spec) {
+ async #fetchManifest (spec) {
const options = {
...this.options,
- avoid: this[_avoidRange](spec.name),
+ avoid: this.#avoidRange(spec.name),
}
// get the intended spec and stored metadata from yarn.lock file,
// if available and valid.
spec = this.idealTree.meta.checkYarnLock(spec, options)
- if (this[_manifests].has(spec.raw)) {
- return this[_manifests].get(spec.raw)
+ if (this.#manifests.has(spec.raw)) {
+ return this.#manifests.get(spec.raw)
} else {
const cleanRawSpec = cleanUrl(spec.rawSpec)
log.silly('fetch manifest', spec.raw.replace(spec.rawSpec, cleanRawSpec))
const p = pacote.manifest(spec, options)
.then(mani => {
- this[_manifests].set(spec.raw, mani)
+ this.#manifests.set(spec.raw, mani)
return mani
})
- this[_manifests].set(spec.raw, p)
+ this.#manifests.set(spec.raw, p)
return p
}
}
- [_nodeFromSpec] (name, spec, parent, edge) {
+ #nodeFromSpec (name, spec, parent, edge) {
// pacote will slap integrity on its options, so we have to clone
// the object so it doesn't get mutated.
// Don't bother to load the manifest for link deps, because the target
@@ -1234,7 +1229,7 @@ This is a one-time fix-up, please be patient...
// spec is a directory, link it unless installLinks is set or it's a workspace
// TODO post arborist refactor, will need to check for installStrategy=linked
if (spec.type === 'directory' && (isWorkspace || !installLinks)) {
- return this[_linkFromSpec](name, spec, parent, edge)
+ return this.#linkFromSpec(name, spec, parent, edge)
}
// if the spec matches a workspace name, then see if the workspace node will
@@ -1249,7 +1244,7 @@ This is a one-time fix-up, please be patient...
// spec isn't a directory, and either isn't a workspace or the workspace we have
// doesn't satisfy the edge. try to fetch a manifest and build a node from that.
- return this[_fetchManifest](spec)
+ return this.#fetchManifest(spec)
.then(pkg => new Node({ name, pkg, parent, installLinks, legacyPeerDeps }), error => {
error.requiredBy = edge.from.location || '.'
@@ -1263,17 +1258,17 @@ This is a one-time fix-up, please be patient...
installLinks,
legacyPeerDeps,
})
- this[_loadFailures].add(n)
+ this.#loadFailures.add(n)
return n
})
}
- [_linkFromSpec] (name, spec, parent, edge) {
+ #linkFromSpec (name, spec, parent, edge) {
const realpath = spec.fetchSpec
const { installLinks, legacyPeerDeps } = this
return rpj(realpath + '/package.json').catch(() => ({})).then(pkg => {
const link = new Link({ name, parent, realpath, pkg, installLinks, legacyPeerDeps })
- this[_linkNodes].add(link)
+ this.#linkNodes.add(link)
return link
})
}
@@ -1291,7 +1286,7 @@ This is a one-time fix-up, please be patient...
// gets placed first. In non-strict mode, we behave strictly if the
// virtual root is based on the root project, and allow non-peer parent
// deps to override, but throw if no preference can be determined.
- async [_loadPeerSet] (node, required) {
+ async #loadPeerSet (node, required) {
const peerEdges = [...node.edgesOut.values()]
// we typically only install non-optional peers, but we have to
// factor them into the peerSet so that we can avoid conflicts
@@ -1307,12 +1302,12 @@ This is a one-time fix-up, please be patient...
const parentEdge = node.parent.edgesOut.get(edge.name)
const { isProjectRoot, isWorkspace } = node.parent.sourceReference
const isMine = isProjectRoot || isWorkspace
- const conflictOK = this[_force] || !isMine && !this[_strictPeerDeps]
+ const conflictOK = this[_force] || !isMine && !this.#strictPeerDeps
if (!edge.to) {
if (!parentEdge) {
// easy, just put the thing there
- await this[_nodeFromEdge](edge, node.parent, null, required)
+ await this.#nodeFromEdge(edge, node.parent, null, required)
continue
} else {
// if the parent's edge is very broad like >=1, and the edge in
@@ -1323,7 +1318,7 @@ This is a one-time fix-up, please be patient...
// a conflict. this is always a problem in strict mode, never
// in force mode, and a problem in non-strict mode if this isn't
// on behalf of our project. in all such cases, we warn at least.
- const dep = await this[_nodeFromEdge](
+ const dep = await this.#nodeFromEdge(
parentEdge,
node.parent,
edge,
@@ -1344,7 +1339,7 @@ This is a one-time fix-up, please be patient...
}
// problem
- this[_failPeerConflict](edge, parentEdge)
+ this.#failPeerConflict(edge, parentEdge)
}
}
@@ -1352,9 +1347,9 @@ This is a one-time fix-up, please be patient...
// See if the thing we WOULD be happy with is also going to satisfy
// the other dependents on the current node.
const current = edge.to
- const dep = await this[_nodeFromEdge](edge, null, null, required)
+ const dep = await this.#nodeFromEdge(edge, null, null, required)
if (dep.canReplace(current)) {
- await this[_nodeFromEdge](edge, node.parent, null, required)
+ await this.#nodeFromEdge(edge, node.parent, null, required)
continue
}
@@ -1371,17 +1366,17 @@ This is a one-time fix-up, please be patient...
}
// ok, it's the root, or we're in unforced strict mode, so this is bad
- this[_failPeerConflict](edge, parentEdge)
+ this.#failPeerConflict(edge, parentEdge)
}
return node
}
- [_failPeerConflict] (edge, currentEdge) {
- const expl = this[_explainPeerConflict](edge, currentEdge)
+ #failPeerConflict (edge, currentEdge) {
+ const expl = this.#explainPeerConflict(edge, currentEdge)
throw Object.assign(new Error('unable to resolve dependency tree'), expl)
}
- [_explainPeerConflict] (edge, currentEdge) {
+ #explainPeerConflict (edge, currentEdge) {
const node = edge.from
const curNode = node.resolve(edge.name)
const current = curNode.explain()
@@ -1393,12 +1388,12 @@ This is a one-time fix-up, please be patient...
// the tree handling logic.
currentEdge: currentEdge ? currentEdge.explain() : null,
edge: edge.explain(),
- strictPeerDeps: this[_strictPeerDeps],
+ strictPeerDeps: this.#strictPeerDeps,
force: this[_force],
}
}
- // go through all the links in the this[_linkNodes] set
+ // go through all the links in the this.#linkNodes set
// for each one:
// - if outside the root, ignore it, assume it's fine, it's not our problem
// - if a node in the tree already, assign the target to that node.
@@ -1406,9 +1401,9 @@ This is a one-time fix-up, please be patient...
// and add it to the _depsQueue
//
// call buildDepStep if anything was added to the queue, otherwise we're done
- [_resolveLinks] () {
- for (const link of this[_linkNodes]) {
- this[_linkNodes].delete(link)
+ #resolveLinks () {
+ for (const link of this.#linkNodes) {
+ this.#linkNodes.delete(link)
// link we never ended up placing, skip it
if (link.root !== this.idealTree) {
@@ -1419,34 +1414,34 @@ This is a one-time fix-up, please be patient...
const external = !link.target.isDescendantOf(tree)
// outside the root, somebody else's problem, ignore it
- if (external && !this[_follow]) {
+ if (external && !this.#follow) {
continue
}
// didn't find a parent for it or it has not been seen yet
// so go ahead and process it.
const unseenLink = (link.target.parent || link.target.fsParent) &&
- !this[_depsSeen].has(link.target)
+ !this.#depsSeen.has(link.target)
- if (this[_follow] &&
+ if (this.#follow &&
!link.target.parent &&
!link.target.fsParent ||
unseenLink) {
this.addTracker('idealTree', link.target.name, link.target.location)
- this[_depsQueue].push(link.target)
+ this.#depsQueue.push(link.target)
}
}
- if (this[_depsQueue].length) {
- return this[_buildDepStep]()
+ if (this.#depsQueue.length) {
+ return this.#buildDepStep()
}
}
- [_fixDepFlags] () {
+ #fixDepFlags () {
process.emit('time', 'idealTree:fixDepFlags')
const metaFromDisk = this.idealTree.meta.loadedFromDisk
const flagsSuspect = this[_flagsSuspect]
- const mutateTree = this[_mutateTree]
+ const mutateTree = this.#mutateTree
// if the options set prune:false, then we don't prune, but we still
// mark the extraneous items in the tree if we modified it at all.
// If we did no modifications, we just iterate over the extraneous nodes.
@@ -1481,21 +1476,28 @@ This is a one-time fix-up, please be patient...
// then the tree is suspect. Prune what is marked as extraneous.
// otherwise, don't bother.
const needPrune = metaFromDisk && (mutateTree || flagsSuspect)
- if (this[_prune] && needPrune) {
+ if (this.#prune && needPrune) {
this[_idealTreePrune]()
+ for (const node of this.idealTree.inventory.values()) {
+ if (node.extraneous) {
+ node.parent = null
+ }
+ }
}
process.emit('timeEnd', 'idealTree:fixDepFlags')
}
[_idealTreePrune] () {
- for (const node of this.idealTree.inventory.filter(n => n.extraneous)) {
- node.parent = null
+ for (const node of this.idealTree.inventory.values()) {
+ if (node.extraneous) {
+ node.parent = null
+ }
}
}
- [_pruneFailedOptional] () {
- for (const node of this[_loadFailures]) {
+ #pruneFailedOptional () {
+ for (const node of this.#loadFailures) {
if (!node.optional) {
throw node.errors[0]
}
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/index.js b/deps/npm/node_modules/@npmcli/arborist/lib/arborist/index.js
index afcc3ec271..ec25117c2a 100644
--- a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/index.js
+++ b/deps/npm/node_modules/@npmcli/arborist/lib/arborist/index.js
@@ -37,7 +37,7 @@ const mixins = [
require('./deduper.js'),
require('./audit.js'),
require('./build-ideal-tree.js'),
- require('./load-workspaces.js'),
+ require('./set-workspaces.js'),
require('./load-actual.js'),
require('./load-virtual.js'),
require('./rebuild.js'),
@@ -71,6 +71,7 @@ class Arborist extends Base {
this.options = {
nodeVersion: process.version,
...options,
+ Arborist: this.constructor,
path: options.path || '.',
cache: options.cache || `${homedir()}/.npm/_cacache`,
packumentCache: options.packumentCache || new Map(),
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/load-actual.js b/deps/npm/node_modules/@npmcli/arborist/lib/arborist/load-actual.js
index 6c3f917c6a..8c4e148464 100644
--- a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/load-actual.js
+++ b/deps/npm/node_modules/@npmcli/arborist/lib/arborist/load-actual.js
@@ -4,7 +4,7 @@ const { relative, dirname, resolve, join, normalize } = require('path')
const rpj = require('read-package-json-fast')
const { readdirScoped } = require('@npmcli/fs')
-const walkUp = require('walk-up-path')
+const { walkUp } = require('walk-up-path')
const ancestorPath = require('common-ancestor-path')
const treeCheck = require('../tree-check.js')
@@ -17,28 +17,31 @@ const realpath = require('../realpath.js')
// public symbols
const _changePath = Symbol.for('_changePath')
const _global = Symbol.for('global')
-const _loadWorkspaces = Symbol.for('loadWorkspaces')
+const _setWorkspaces = Symbol.for('setWorkspaces')
const _rpcache = Symbol.for('realpathCache')
const _stcache = Symbol.for('statCache')
-// private symbols
-const _actualTree = Symbol('actualTree')
-const _actualTreeLoaded = Symbol('actualTreeLoaded')
-const _actualTreePromise = Symbol('actualTreePromise')
-const _cache = Symbol('nodeLoadingCache')
-const _filter = Symbol('filter')
-const _findMissingEdges = Symbol('findMissingEdges')
-const _loadActual = Symbol('loadActual')
-const _loadFSChildren = Symbol('loadFSChildren')
-const _loadFSNode = Symbol('loadFSNode')
-const _loadFSTree = Symbol('loadFSTree')
-const _newLink = Symbol('newLink')
-const _newNode = Symbol('newNode')
-const _topNodes = Symbol('linkTargets')
-const _transplant = Symbol('transplant')
-const _transplantFilter = Symbol('transplantFilter')
-
module.exports = cls => class ActualLoader extends cls {
+ #actualTree
+ // ensure when walking the tree that we don't call loadTree on the same
+ // actual node more than one time.
+ #actualTreeLoaded = new Set()
+ #actualTreePromise
+
+ // cache of nodes when loading the actualTree, so that we avoid loaded the
+ // same node multiple times when symlinks attack.
+ #cache = new Map()
+ #filter
+
+ // cache of link targets for setting fsParent links
+ // We don't do fsParent as a magic getter/setter, because it'd be too costly
+ // to keep up to date along the walk.
+ // And, we know that it can ONLY be relevant when the node is a target of a
+ // link, otherwise it'd be in a node_modules folder, so take advantage of
+ // that to limit the scans later.
+ #topNodes = new Set()
+ #transplantFilter
+
constructor (options) {
super(options)
@@ -47,27 +50,11 @@ module.exports = cls => class ActualLoader extends cls {
// the tree of nodes on disk
this.actualTree = options.actualTree
- // ensure when walking the tree that we don't call loadTree on the
- // same actual node more than one time.
- this[_actualTreeLoaded] = new Set()
-
// caches for cached realpath calls
const cwd = process.cwd()
// assume that the cwd is real enough for our purposes
this[_rpcache] = new Map([[cwd, cwd]])
this[_stcache] = new Map()
-
- // cache of nodes when loading the actualTree, so that we avoid
- // loaded the same node multiple times when symlinks attack.
- this[_cache] = new Map()
-
- // cache of link targets for setting fsParent links
- // We don't do fsParent as a magic getter/setter, because
- // it'd be too costly to keep up to date along the walk.
- // And, we know that it can ONLY be relevant when the node
- // is a target of a link, otherwise it'd be in a node_modules
- // folder, so take advantage of that to limit the scans later.
- this[_topNodes] = new Set()
}
// public method
@@ -81,12 +68,12 @@ module.exports = cls => class ActualLoader extends cls {
if (this.actualTree) {
return this.actualTree
}
- if (!this[_actualTreePromise]) {
+ if (!this.#actualTreePromise) {
// allow the user to set options on the ctor as well.
// XXX: deprecate separate method options objects.
options = { ...this.options, ...options }
- this[_actualTreePromise] = this[_loadActual](options)
+ this.#actualTreePromise = this.#loadActual(options)
.then(tree => {
// reset all deps to extraneous prior to recalc
if (!options.root) {
@@ -102,14 +89,15 @@ module.exports = cls => class ActualLoader extends cls {
return this.actualTree
})
}
- return this[_actualTreePromise]
+ return this.#actualTreePromise
}
+
// return the promise so that we don't ever have more than one going at the
// same time. This is so that buildIdealTree can default to the actualTree
// if no shrinkwrap present, but reify() can still call buildIdealTree and
// loadActual in parallel safely.
- async [_loadActual] (options) {
+ async #loadActual (options) {
// mostly realpath to throw if the root doesn't exist
const {
global = false,
@@ -119,8 +107,8 @@ module.exports = cls => class ActualLoader extends cls {
ignoreMissing = false,
forceActual = false,
} = options
- this[_filter] = filter
- this[_transplantFilter] = transplantFilter
+ this.#filter = filter
+ this.#transplantFilter = transplantFilter
if (global) {
const real = await realpath(this.path, this[_rpcache], this[_stcache])
@@ -132,19 +120,19 @@ module.exports = cls => class ActualLoader extends cls {
loadOverrides: true,
}
if (this.path === real) {
- this[_actualTree] = this[_newNode](params)
+ this.#actualTree = this.#newNode(params)
} else {
- this[_actualTree] = await this[_newLink](params)
+ this.#actualTree = await this.#newLink(params)
}
} else {
// not in global mode, hidden lockfile is allowed, load root pkg too
- this[_actualTree] = await this[_loadFSNode]({
+ this.#actualTree = await this.#loadFSNode({
path: this.path,
real: await realpath(this.path, this[_rpcache], this[_stcache]),
loadOverrides: true,
})
- this[_actualTree].assertRootOverrides()
+ this.#actualTree.assertRootOverrides()
// if forceActual is set, don't even try the hidden lockfile
if (!forceActual) {
@@ -152,48 +140,48 @@ module.exports = cls => class ActualLoader extends cls {
// in the folder, or if any of the entries in the hidden lockfile are
// missing.
const meta = await Shrinkwrap.load({
- path: this[_actualTree].path,
+ path: this.#actualTree.path,
hiddenLockfile: true,
resolveOptions: this.options,
})
if (meta.loadedFromDisk) {
- this[_actualTree].meta = meta
+ this.#actualTree.meta = meta
// have to load on a new Arborist object, so we don't assign
// the virtualTree on this one! Also, the weird reference is because
// we can't easily get a ref to Arborist in this module, without
// creating a circular reference, since this class is a mixin used
// to build up the Arborist class itself.
await new this.constructor({ ...this.options }).loadVirtual({
- root: this[_actualTree],
+ root: this.#actualTree,
})
- await this[_loadWorkspaces](this[_actualTree])
+ await this[_setWorkspaces](this.#actualTree)
- this[_transplant](root)
- return this[_actualTree]
+ this.#transplant(root)
+ return this.#actualTree
}
}
const meta = await Shrinkwrap.load({
- path: this[_actualTree].path,
+ path: this.#actualTree.path,
lockfileVersion: this.options.lockfileVersion,
resolveOptions: this.options,
})
- this[_actualTree].meta = meta
+ this.#actualTree.meta = meta
}
- await this[_loadFSTree](this[_actualTree])
- await this[_loadWorkspaces](this[_actualTree])
+ await this.#loadFSTree(this.#actualTree)
+ await this[_setWorkspaces](this.#actualTree)
// if there are workspace targets without Link nodes created, load
// the targets, so that we know what they are.
- if (this[_actualTree].workspaces && this[_actualTree].workspaces.size) {
+ if (this.#actualTree.workspaces && this.#actualTree.workspaces.size) {
const promises = []
- for (const path of this[_actualTree].workspaces.values()) {
- if (!this[_cache].has(path)) {
+ for (const path of this.#actualTree.workspaces.values()) {
+ if (!this.#cache.has(path)) {
// workspace overrides use the root overrides
- const p = this[_loadFSNode]({ path, root: this[_actualTree], useRootOverrides: true })
- .then(node => this[_loadFSTree](node))
+ const p = this.#loadFSNode({ path, root: this.#actualTree, useRootOverrides: true })
+ .then(node => this.#loadFSTree(node))
promises.push(p)
}
}
@@ -201,32 +189,32 @@ module.exports = cls => class ActualLoader extends cls {
}
if (!ignoreMissing) {
- await this[_findMissingEdges]()
+ await this.#findMissingEdges()
}
// try to find a node that is the parent in a fs tree sense, but not a
// node_modules tree sense, of any link targets. this allows us to
// resolve deps that node will find, but a legacy npm view of the
// world would not have noticed.
- for (const path of this[_topNodes]) {
- const node = this[_cache].get(path)
+ for (const path of this.#topNodes) {
+ const node = this.#cache.get(path)
if (node && !node.parent && !node.fsParent) {
for (const p of walkUp(dirname(path))) {
- if (this[_cache].has(p)) {
- node.fsParent = this[_cache].get(p)
+ if (this.#cache.has(p)) {
+ node.fsParent = this.#cache.get(p)
break
}
}
}
}
- this[_transplant](root)
+ this.#transplant(root)
if (global) {
// need to depend on the children, or else all of them
// will end up being flagged as extraneous, since the
// global root isn't a "real" project
- const tree = this[_actualTree]
+ const tree = this.#actualTree
const actualRoot = tree.isLink ? tree.target : tree
const { dependencies = {} } = actualRoot.package
for (const [name, kid] of actualRoot.children.entries()) {
@@ -235,30 +223,30 @@ module.exports = cls => class ActualLoader extends cls {
}
actualRoot.package = { ...actualRoot.package, dependencies }
}
- return this[_actualTree]
+ return this.#actualTree
}
- [_transplant] (root) {
- if (!root || root === this[_actualTree]) {
+ #transplant (root) {
+ if (!root || root === this.#actualTree) {
return
}
- this[_actualTree][_changePath](root.path)
- for (const node of this[_actualTree].children.values()) {
- if (!this[_transplantFilter](node)) {
+ this.#actualTree[_changePath](root.path)
+ for (const node of this.#actualTree.children.values()) {
+ if (!this.#transplantFilter(node)) {
node.root = null
}
}
- root.replace(this[_actualTree])
- for (const node of this[_actualTree].fsChildren) {
- node.root = this[_transplantFilter](node) ? root : null
+ root.replace(this.#actualTree)
+ for (const node of this.#actualTree.fsChildren) {
+ node.root = this.#transplantFilter(node) ? root : null
}
- this[_actualTree] = root
+ this.#actualTree = root
}
- async [_loadFSNode] ({ path, parent, real, root, loadOverrides, useRootOverrides }) {
+ async #loadFSNode ({ path, parent, real, root, loadOverrides, useRootOverrides }) {
if (!real) {
try {
real = await realpath(path, this[_rpcache], this[_stcache])
@@ -275,7 +263,7 @@ module.exports = cls => class ActualLoader extends cls {
}
}
- const cached = this[_cache].get(path)
+ const cached = this.#cache.get(path)
let node
// missing edges get a dummy node, assign the parent and return it
if (cached && !cached.dummy) {
@@ -306,67 +294,67 @@ module.exports = cls => class ActualLoader extends cls {
// Node which will attach it to its errors array (Link passes it along to
// its target node)
if (normalize(path) === real) {
- node = this[_newNode](params)
+ node = this.#newNode(params)
} else {
- node = await this[_newLink](params)
+ node = await this.#newLink(params)
}
}
- this[_cache].set(path, node)
+ this.#cache.set(path, node)
return node
}
- [_newNode] (options) {
+ #newNode (options) {
// check it for an fsParent if it's a tree top. there's a decent chance
// it'll get parented later, making the fsParent scan a no-op, but better
// safe than sorry, since it's cheap.
const { parent, realpath } = options
if (!parent) {
- this[_topNodes].add(realpath)
+ this.#topNodes.add(realpath)
}
return new Node(options)
}
- async [_newLink] (options) {
+ async #newLink (options) {
const { realpath } = options
- this[_topNodes].add(realpath)
- const target = this[_cache].get(realpath)
+ this.#topNodes.add(realpath)
+ const target = this.#cache.get(realpath)
const link = new Link({ ...options, target })
if (!target) {
// Link set its target itself in this case
- this[_cache].set(realpath, link.target)
+ this.#cache.set(realpath, link.target)
// if a link target points at a node outside of the root tree's
// node_modules hierarchy, then load that node as well.
- await this[_loadFSTree](link.target)
+ await this.#loadFSTree(link.target)
}
return link
}
- async [_loadFSTree] (node) {
- const did = this[_actualTreeLoaded]
+ async #loadFSTree (node) {
+ const did = this.#actualTreeLoaded
if (!did.has(node.target.realpath)) {
did.add(node.target.realpath)
- await this[_loadFSChildren](node.target)
+ await this.#loadFSChildren(node.target)
return Promise.all(
[...node.target.children.entries()]
.filter(([name, kid]) => !did.has(kid.realpath))
- .map(([name, kid]) => this[_loadFSTree](kid))
+ .map(([name, kid]) => this.#loadFSTree(kid))
)
}
}
// create child nodes for all the entries in node_modules
// and attach them to the node as a parent
- async [_loadFSChildren] (node) {
+ async #loadFSChildren (node) {
const nm = resolve(node.realpath, 'node_modules')
try {
const kids = await readdirScoped(nm).then(paths => paths.map(p => p.replace(/\\/g, '/')))
return Promise.all(
// ignore . dirs and retired scoped package folders
kids.filter(kid => !/^(@[^/]+\/)?\./.test(kid))
- .filter(kid => this[_filter](node, kid))
- .map(kid => this[_loadFSNode]({
+ .filter(kid => this.#filter(node, kid))
+ .map(kid => this.#loadFSNode({
parent: node,
path: resolve(nm, kid),
})))
@@ -375,7 +363,7 @@ module.exports = cls => class ActualLoader extends cls {
}
}
- async [_findMissingEdges] () {
+ async #findMissingEdges () {
// try to resolve any missing edges by walking up the directory tree,
// checking for the package in each node_modules folder. stop at the
// root directory.
@@ -385,7 +373,7 @@ module.exports = cls => class ActualLoader extends cls {
// because people sometimes develop in ~/projects/node_modules/...
// so we'd end up loading a massive tree with lots of unrelated junk.
const nmContents = new Map()
- const tree = this[_actualTree]
+ const tree = this.#actualTree
for (const node of tree.inventory.values()) {
const ancestor = ancestorPath(node.realpath, this.path)
@@ -410,28 +398,37 @@ module.exports = cls => class ActualLoader extends cls {
break
}
- const entries = nmContents.get(p) || await readdirScoped(p + '/node_modules')
- .catch(() => []).then(paths => paths.map(p => p.replace(/\\/g, '/')))
- nmContents.set(p, entries)
+ let entries
+ if (!nmContents.has(p)) {
+ entries = await readdirScoped(p + '/node_modules')
+ .catch(() => []).then(paths => paths.map(p => p.replace(/\\/g, '/')))
+ nmContents.set(p, entries)
+ } else {
+ entries = nmContents.get(p)
+ }
+
if (!entries.includes(name)) {
continue
}
- const d = this[_cache].has(p) ? await this[_cache].get(p)
- : new Node({ path: p, root: node.root, dummy: true })
- // not a promise
- this[_cache].set(p, d)
+ let d
+ if (!this.#cache.has(p)) {
+ d = new Node({ path: p, root: node.root, dummy: true })
+ this.#cache.set(p, d)
+ } else {
+ d = this.#cache.get(p)
+ }
if (d.dummy) {
// it's a placeholder, so likely would not have loaded this dep,
// unless another dep in the tree also needs it.
const depPath = normalize(`${p}/node_modules/${name}`)
- const cached = this[_cache].get(depPath)
+ const cached = this.#cache.get(depPath)
if (!cached || cached.dummy) {
- depPromises.push(this[_loadFSNode]({
+ depPromises.push(this.#loadFSNode({
path: depPath,
root: node.root,
parent: d,
- }).then(node => this[_loadFSTree](node)))
+ }).then(node => this.#loadFSTree(node)))
}
}
break
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/load-virtual.js b/deps/npm/node_modules/@npmcli/arborist/lib/arborist/load-virtual.js
index b2a6ec2315..9b681a47a8 100644
--- a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/load-virtual.js
+++ b/deps/npm/node_modules/@npmcli/arborist/lib/arborist/load-virtual.js
@@ -1,5 +1,4 @@
// mixin providing the loadVirtual method
-const localeCompare = require('@isaacs/string-locale-compare')('en')
const mapWorkspaces = require('@npmcli/map-workspaces')
const { resolve } = require('path')
@@ -14,23 +13,12 @@ const calcDepFlags = require('../calc-dep-flags.js')
const rpj = require('read-package-json-fast')
const treeCheck = require('../tree-check.js')
-const loadFromShrinkwrap = Symbol('loadFromShrinkwrap')
-const resolveNodes = Symbol('resolveNodes')
-const resolveLinks = Symbol('resolveLinks')
-const assignBundles = Symbol('assignBundles')
-const loadRoot = Symbol('loadRoot')
-const loadNode = Symbol('loadVirtualNode')
-const loadLink = Symbol('loadVirtualLink')
-const loadWorkspaces = Symbol.for('loadWorkspaces')
const flagsSuspect = Symbol.for('flagsSuspect')
-const reCalcDepFlags = Symbol('reCalcDepFlags')
-const checkRootEdges = Symbol('checkRootEdges')
-const rootOptionProvided = Symbol('rootOptionProvided')
-
-const depsToEdges = (type, deps) =>
- Object.entries(deps).map(d => [type, ...d])
+const setWorkspaces = Symbol.for('setWorkspaces')
module.exports = cls => class VirtualLoader extends cls {
+ #rootOptionProvided
+
constructor (options) {
super(options)
@@ -50,7 +38,7 @@ module.exports = cls => class VirtualLoader extends cls {
options = { ...this.options, ...options }
if (options.root && options.root.meta) {
- await this[loadFromShrinkwrap](options.root.meta, options.root)
+ await this.#loadFromShrinkwrap(options.root.meta, options.root)
return treeCheck(this.virtualTree)
}
@@ -67,24 +55,24 @@ module.exports = cls => class VirtualLoader extends cls {
// when building the ideal tree, we pass in a root node to this function
// otherwise, load it from the root package json or the lockfile
const {
- root = await this[loadRoot](s),
+ root = await this.#loadRoot(s),
} = options
- this[rootOptionProvided] = options.root
+ this.#rootOptionProvided = options.root
- await this[loadFromShrinkwrap](s, root)
+ await this.#loadFromShrinkwrap(s, root)
root.assertRootOverrides()
return treeCheck(this.virtualTree)
}
- async [loadRoot] (s) {
+ async #loadRoot (s) {
const pj = this.path + '/package.json'
const pkg = await rpj(pj).catch(() => s.data.packages['']) || {}
- return this[loadWorkspaces](this[loadNode]('', pkg, true))
+ return this[setWorkspaces](this.#loadNode('', pkg, true))
}
- async [loadFromShrinkwrap] (s, root) {
- if (!this[rootOptionProvided]) {
+ async #loadFromShrinkwrap (s, root) {
+ if (!this.#rootOptionProvided) {
// root is never any of these things, but might be a brand new
// baby Node object that never had its dep flags calculated.
root.extraneous = false
@@ -96,41 +84,37 @@ module.exports = cls => class VirtualLoader extends cls {
this[flagsSuspect] = true
}
- this[checkRootEdges](s, root)
+ this.#checkRootEdges(s, root)
root.meta = s
this.virtualTree = root
- const { links, nodes } = this[resolveNodes](s, root)
- await this[resolveLinks](links, nodes)
+ const { links, nodes } = this.#resolveNodes(s, root)
+ await this.#resolveLinks(links, nodes)
if (!(s.originalLockfileVersion >= 2)) {
- this[assignBundles](nodes)
+ this.#assignBundles(nodes)
}
if (this[flagsSuspect]) {
- this[reCalcDepFlags](nodes.values())
- }
- return root
- }
-
- [reCalcDepFlags] (nodes) {
- // reset all dep flags
- // can't use inventory here, because virtualTree might not be root
- for (const node of nodes) {
- if (node.isRoot || node === this[rootOptionProvided]) {
- continue
+ // reset all dep flags
+ // can't use inventory here, because virtualTree might not be root
+ for (const node of nodes.values()) {
+ if (node.isRoot || node === this.#rootOptionProvided) {
+ continue
+ }
+ node.extraneous = true
+ node.dev = true
+ node.optional = true
+ node.devOptional = true
+ node.peer = true
}
- node.extraneous = true
- node.dev = true
- node.optional = true
- node.devOptional = true
- node.peer = true
+ calcDepFlags(this.virtualTree, !this.#rootOptionProvided)
}
- calcDepFlags(this.virtualTree, !this[rootOptionProvided])
+ return root
}
// check the lockfile deps, and see if they match. if they do not
// then we have to reset dep flags at the end. for example, if the
// user manually edits their package.json file, then we need to know
// that the idealTree is no longer entirely trustworthy.
- [checkRootEdges] (s, root) {
+ #checkRootEdges (s, root) {
// loaded virtually from tree, no chance of being out of sync
// ancient lockfiles are critically damaged by this process,
// so we need to just hope for the best in those cases.
@@ -144,6 +128,7 @@ module.exports = cls => class VirtualLoader extends cls {
const optional = lock.optionalDependencies || {}
const peer = lock.peerDependencies || {}
const peerOptional = {}
+
if (lock.peerDependenciesMeta) {
for (const [name, meta] of Object.entries(lock.peerDependenciesMeta)) {
if (meta.optional && peer[name] !== undefined) {
@@ -152,50 +137,45 @@ module.exports = cls => class VirtualLoader extends cls {
}
}
}
+
for (const name of Object.keys(optional)) {
delete prod[name]
}
- const lockWS = []
+ const lockWS = {}
const workspaces = mapWorkspaces.virtual({
cwd: this.path,
lockfile: s.data,
})
+
for (const [name, path] of workspaces.entries()) {
- lockWS.push(['workspace', name, `file:${path.replace(/#/g, '%23')}`])
+ lockWS[name] = `file:${path.replace(/#/g, '%23')}`
}
- const lockEdges = [
- ...depsToEdges('prod', prod),
- ...depsToEdges('dev', dev),
- ...depsToEdges('optional', optional),
- ...depsToEdges('peer', peer),
- ...depsToEdges('peerOptional', peerOptional),
- ...lockWS,
- ].sort(([atype, aname], [btype, bname]) =>
- localeCompare(atype, btype) || localeCompare(aname, bname))
-
- const rootEdges = [...root.edgesOut.values()]
- .map(e => [e.type, e.name, e.spec])
- .sort(([atype, aname], [btype, bname]) =>
- localeCompare(atype, btype) || localeCompare(aname, bname))
-
- if (rootEdges.length !== lockEdges.length) {
- // something added or removed
- return this[flagsSuspect] = true
- }
+ // Should rootNames exclude optional?
+ const rootNames = new Set(root.edgesOut.keys())
- for (let i = 0; i < lockEdges.length; i++) {
- if (rootEdges[i][0] !== lockEdges[i][0] ||
- rootEdges[i][1] !== lockEdges[i][1] ||
- rootEdges[i][2] !== lockEdges[i][2]) {
- return this[flagsSuspect] = true
+ const lockByType = ({ dev, optional, peer, peerOptional, prod, workspace: lockWS })
+
+ // Find anything in shrinkwrap deps that doesn't match root's type or spec
+ for (const type in lockByType) {
+ const deps = lockByType[type]
+ for (const name in deps) {
+ const edge = root.edgesOut.get(name)
+ if (!edge || edge.type !== type || edge.spec !== deps[name]) {
+ return this[flagsSuspect] = true
+ }
+ rootNames.delete(name)
}
}
+ // Something was in root that's not accounted for in shrinkwrap
+ if (rootNames.size) {
+ return this[flagsSuspect] = true
+ }
}
// separate out link metadatas, and create Node objects for nodes
- [resolveNodes] (s, root) {
+ #resolveNodes (s, root) {
const links = new Map()
const nodes = new Map([['', root]])
for (const [location, meta] of Object.entries(s.data.packages)) {
@@ -207,7 +187,7 @@ module.exports = cls => class VirtualLoader extends cls {
if (meta.link) {
links.set(location, meta)
} else {
- nodes.set(location, this[loadNode](location, meta))
+ nodes.set(location, this.#loadNode(location, meta))
}
}
return { links, nodes }
@@ -215,12 +195,12 @@ module.exports = cls => class VirtualLoader extends cls {
// links is the set of metadata, and nodes is the map of non-Link nodes
// Set the targets to nodes in the set, if we have them (we might not)
- async [resolveLinks] (links, nodes) {
+ async #resolveLinks (links, nodes) {
for (const [location, meta] of links.entries()) {
const targetPath = resolve(this.path, meta.resolved)
const targetLoc = relpath(this.path, targetPath)
const target = nodes.get(targetLoc)
- const link = this[loadLink](location, targetLoc, target, meta)
+ const link = this.#loadLink(location, targetLoc, target, meta)
nodes.set(location, link)
nodes.set(targetLoc, link.target)
@@ -236,7 +216,7 @@ module.exports = cls => class VirtualLoader extends cls {
}
}
- [assignBundles] (nodes) {
+ #assignBundles (nodes) {
for (const [location, node] of nodes) {
// Skip assignment of parentage for the root package
if (!location || node.isLink && !node.target.location) {
@@ -265,7 +245,7 @@ module.exports = cls => class VirtualLoader extends cls {
}
}
- [loadNode] (location, sw, loadOverrides) {
+ #loadNode (location, sw, loadOverrides) {
const p = this.virtualTree ? this.virtualTree.realpath : this.path
const path = resolve(p, location)
// shrinkwrap doesn't include package name unless necessary
@@ -303,7 +283,7 @@ module.exports = cls => class VirtualLoader extends cls {
return node
}
- [loadLink] (location, targetLoc, target, meta) {
+ #loadLink (location, targetLoc, target, meta) {
const path = resolve(this.path, location)
const link = new Link({
installLinks: this.installLinks,
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/reify.js b/deps/npm/node_modules/@npmcli/arborist/lib/arborist/reify.js
index 760fa977ec..0057d38f11 100644
--- a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/reify.js
+++ b/deps/npm/node_modules/@npmcli/arborist/lib/arborist/reify.js
@@ -6,7 +6,7 @@ const { subset, intersects } = require('semver')
const npa = require('npm-package-arg')
const semver = require('semver')
const debug = require('../debug.js')
-const walkUp = require('walk-up-path')
+const { walkUp } = require('walk-up-path')
const log = require('proc-log')
const hgi = require('hosted-git-info')
const rpj = require('read-package-json-fast')
@@ -702,7 +702,6 @@ module.exports = cls => class Reifier extends cls {
})
await pacote.extract(res, node.path, {
...this.options,
- Arborist: this.constructor,
resolved: node.resolved,
integrity: node.integrity,
})
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/load-workspaces.js b/deps/npm/node_modules/@npmcli/arborist/lib/arborist/set-workspaces.js
index effa5a0cda..27a12708a7 100644
--- a/deps/npm/node_modules/@npmcli/arborist/lib/arborist/load-workspaces.js
+++ b/deps/npm/node_modules/@npmcli/arborist/lib/arborist/set-workspaces.js
@@ -1,10 +1,10 @@
const mapWorkspaces = require('@npmcli/map-workspaces')
// shared ref used by other mixins/Arborist
-const _loadWorkspaces = Symbol.for('loadWorkspaces')
+const _setWorkspaces = Symbol.for('setWorkspaces')
module.exports = cls => class MapWorkspaces extends cls {
- async [_loadWorkspaces] (node) {
+ async [_setWorkspaces] (node) {
const workspaces = await mapWorkspaces({
cwd: node.path,
pkg: node.package,
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/calc-dep-flags.js b/deps/npm/node_modules/@npmcli/arborist/lib/calc-dep-flags.js
index 2f33981419..45ed956247 100644
--- a/deps/npm/node_modules/@npmcli/arborist/lib/calc-dep-flags.js
+++ b/deps/npm/node_modules/@npmcli/arborist/lib/calc-dep-flags.js
@@ -51,14 +51,12 @@ const calcDepFlagsStep = (node) => {
// however, for convenience and to save an extra rewalk, we leave
// it set when we are in *either* tree, and then omit it from the
// package-lock if either dev or optional are set.
- const unsetDevOpt = !node.devOptional && !node.dev && !node.optional &&
- !dev && !optional
+ const unsetDevOpt = !node.devOptional && !node.dev && !node.optional && !dev && !optional
// if we are not in the devOpt tree, then we're also not in
// either the dev or opt trees
const unsetDev = unsetDevOpt || !node.dev && !dev
- const unsetOpt = unsetDevOpt ||
- !node.optional && !optional
+ const unsetOpt = unsetDevOpt || !node.optional && !optional
const unsetPeer = !node.peer && !peer
if (unsetPeer) {
@@ -91,8 +89,7 @@ const resetParents = (node, flag) => {
}
}
-// typically a short walk, since it only traverses deps that
-// have the flag set.
+// typically a short walk, since it only traverses deps that have the flag set.
const unsetFlag = (node, flag) => {
if (node[flag]) {
node[flag] = false
@@ -104,10 +101,17 @@ const unsetFlag = (node, flag) => {
node.target.extraneous = node.target[flag] = false
}
},
- getChildren: node => [...node.target.edgesOut.values()]
- .filter(edge => edge.to && edge.to[flag] &&
- (flag !== 'peer' && edge.type === 'peer' || edge.type === 'prod'))
- .map(edge => edge.to),
+ getChildren: node => {
+ const children = []
+ for (const edge of node.target.edgesOut.values()) {
+ if (edge.to && edge.to[flag] &&
+ (flag !== 'peer' && edge.type === 'peer' || edge.type === 'prod')
+ ) {
+ children.push(edge.to)
+ }
+ }
+ return children
+ },
})
}
}
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/dep-valid.js b/deps/npm/node_modules/@npmcli/arborist/lib/dep-valid.js
index 9c1bc7d3f2..4afb5e47cf 100644
--- a/deps/npm/node_modules/@npmcli/arborist/lib/dep-valid.js
+++ b/deps/npm/node_modules/@npmcli/arborist/lib/dep-valid.js
@@ -84,15 +84,21 @@ const depValid = (child, requested, requestor) => {
const reqHost = requested.hosted
const reqCommit = /^[a-fA-F0-9]{40}$/.test(requested.gitCommittish || '')
const nc = { noCommittish: !reqCommit }
- const sameRepo =
- resHost ? reqHost && reqHost.ssh(nc) === resHost.ssh(nc)
- : resRepo.fetchSpec === requested.fetchSpec
-
- return !sameRepo ? false
- : !requested.gitRange ? true
- : semver.satisfies(child.package.version, requested.gitRange, {
- loose: true,
- })
+ if (!resHost) {
+ if (resRepo.fetchSpec !== requested.fetchSpec) {
+ return false
+ }
+ } else {
+ if (reqHost?.ssh(nc) !== resHost.ssh(nc)) {
+ return false
+ }
+ }
+ if (!requested.gitRange) {
+ return true
+ }
+ return semver.satisfies(child.package.version, requested.gitRange, {
+ loose: true,
+ })
}
default: // unpossible, just being cautious
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/edge.js b/deps/npm/node_modules/@npmcli/arborist/lib/edge.js
index 84078ba050..cc9698ad6c 100644
--- a/deps/npm/node_modules/@npmcli/arborist/lib/edge.js
+++ b/deps/npm/node_modules/@npmcli/arborist/lib/edge.js
@@ -4,194 +4,210 @@
const util = require('util')
const npa = require('npm-package-arg')
const depValid = require('./dep-valid.js')
-const _from = Symbol('_from')
-const _to = Symbol('_to')
-const _type = Symbol('_type')
-const _spec = Symbol('_spec')
-const _accept = Symbol('_accept')
-const _name = Symbol('_name')
-const _error = Symbol('_error')
-const _loadError = Symbol('_loadError')
-const _setFrom = Symbol('_setFrom')
-const _explain = Symbol('_explain')
-const _explanation = Symbol('_explanation')
-
-const types = new Set([
- 'prod',
- 'dev',
- 'optional',
- 'peer',
- 'peerOptional',
- 'workspace',
-])
-
-class ArboristEdge {}
-const printableEdge = (edge) => {
- const edgeFrom = edge.from && edge.from.location
- const edgeTo = edge.to && edge.to.location
- const override = edge.overrides && edge.overrides.value
-
- return Object.assign(new ArboristEdge(), {
- name: edge.name,
- spec: edge.spec,
- type: edge.type,
- ...(edgeFrom != null ? { from: edgeFrom } : {}),
- ...(edgeTo ? { to: edgeTo } : {}),
- ...(edge.error ? { error: edge.error } : {}),
- ...(edge.peerConflicted ? { peerConflicted: true } : {}),
- ...(override ? { overridden: override } : {}),
- })
+
+class ArboristEdge {
+ constructor (edge) {
+ this.name = edge.name
+ this.spec = edge.spec
+ this.type = edge.type
+
+ const edgeFrom = edge.from?.location
+ const edgeTo = edge.to?.location
+ const override = edge.overrides?.value
+
+ if (edgeFrom != null) {
+ this.from = edgeFrom
+ }
+ if (edgeTo) {
+ this.to = edgeTo
+ }
+ if (edge.error) {
+ this.error = edge.error
+ }
+ if (edge.peerConflicted) {
+ this.peerConflicted = true
+ }
+ if (override) {
+ this.overridden = override
+ }
+ }
}
class Edge {
+ #accept
+ #error
+ #explanation
+ #from
+ #name
+ #spec
+ #to
+ #type
+
+ static types = Object.freeze([
+ 'prod',
+ 'dev',
+ 'optional',
+ 'peer',
+ 'peerOptional',
+ 'workspace',
+ ])
+
+ // XXX where is this used?
+ static errors = Object.freeze([
+ 'DETACHED',
+ 'MISSING',
+ 'PEER LOCAL',
+ 'INVALID',
+ ])
+
constructor (options) {
const { type, name, spec, accept, from, overrides } = options
+ // XXX are all of these error states even possible?
if (typeof spec !== 'string') {
throw new TypeError('must provide string spec')
}
-
+ if (!Edge.types.includes(type)) {
+ throw new TypeError(`invalid type: ${type}\n(valid types are: ${Edge.types.join(', ')})`)
+ }
if (type === 'workspace' && npa(spec).type !== 'directory') {
throw new TypeError('workspace edges must be a symlink')
}
-
- this[_spec] = spec
-
- if (overrides !== undefined) {
- this.overrides = overrides
+ if (typeof name !== 'string') {
+ throw new TypeError('must provide dependency name')
+ }
+ if (!from) {
+ throw new TypeError('must provide "from" node')
}
-
if (accept !== undefined) {
if (typeof accept !== 'string') {
throw new TypeError('accept field must be a string if provided')
}
- this[_accept] = accept || '*'
+ this.#accept = accept || '*'
}
-
- if (typeof name !== 'string') {
- throw new TypeError('must provide dependency name')
+ if (overrides !== undefined) {
+ this.overrides = overrides
}
- this[_name] = name
- if (!types.has(type)) {
- throw new TypeError(
- `invalid type: ${type}\n` +
- `(valid types are: ${Edge.types.join(', ')})`)
- }
- this[_type] = type
- if (!from) {
- throw new TypeError('must provide "from" node')
- }
- this[_setFrom](from)
- this[_error] = this[_loadError]()
+ this.#name = name
+ this.#type = type
+ this.#spec = spec
+ this.#explanation = null
+ this.#from = from
+
+ from.edgesOut.get(this.#name)?.detach()
+ from.addEdgeOut(this)
+
+ this.reload(true)
this.peerConflicted = false
}
satisfiedBy (node) {
- if (node.name !== this.name) {
+ if (node.name !== this.#name) {
return false
}
// NOTE: this condition means we explicitly do not support overriding
// bundled or shrinkwrapped dependencies
- const spec = (node.hasShrinkwrap || node.inShrinkwrap || node.inBundle)
- ? this.rawSpec
- : this.spec
- return depValid(node, spec, this.accept, this.from)
- }
-
- explain (seen = []) {
- if (this[_explanation]) {
- return this[_explanation]
+ if (node.hasShrinkwrap || node.inShrinkwrap || node.inBundle) {
+ return depValid(node, this.rawSpec, this.#accept, this.#from)
}
-
- return this[_explanation] = this[_explain](seen)
+ return depValid(node, this.spec, this.#accept, this.#from)
}
// return the edge data, and an explanation of how that edge came to be here
- [_explain] (seen) {
- const { error, from, bundled } = this
- return {
- type: this.type,
- name: this.name,
- spec: this.spec,
- ...(this.rawSpec !== this.spec ? {
- rawSpec: this.rawSpec,
- overridden: true,
- } : {}),
- ...(bundled ? { bundled } : {}),
- ...(error ? { error } : {}),
- ...(from ? { from: from.explain(null, seen) } : {}),
+ explain (seen = []) {
+ if (!this.#explanation) {
+ const explanation = {
+ type: this.#type,
+ name: this.#name,
+ spec: this.spec,
+ }
+ if (this.rawSpec !== this.spec) {
+ explanation.rawSpec = this.rawSpec
+ explanation.overridden = true
+ }
+ if (this.bundled) {
+ explanation.bundled = this.bundled
+ }
+ if (this.error) {
+ explanation.error = this.error
+ }
+ if (this.#from) {
+ explanation.from = this.#from.explain(null, seen)
+ }
+ this.#explanation = explanation
}
+ return this.#explanation
}
get bundled () {
- if (!this.from) {
- return false
- }
- const { package: { bundleDependencies = [] } } = this.from
- return bundleDependencies.includes(this.name)
+ return !!this.#from?.package?.bundleDependencies?.includes(this.#name)
}
get workspace () {
- return this[_type] === 'workspace'
+ return this.#type === 'workspace'
}
get prod () {
- return this[_type] === 'prod'
+ return this.#type === 'prod'
}
get dev () {
- return this[_type] === 'dev'
+ return this.#type === 'dev'
}
get optional () {
- return this[_type] === 'optional' || this[_type] === 'peerOptional'
+ return this.#type === 'optional' || this.#type === 'peerOptional'
}
get peer () {
- return this[_type] === 'peer' || this[_type] === 'peerOptional'
+ return this.#type === 'peer' || this.#type === 'peerOptional'
}
get type () {
- return this[_type]
+ return this.#type
}
get name () {
- return this[_name]
+ return this.#name
}
get rawSpec () {
- return this[_spec]
+ return this.#spec
}
get spec () {
- if (this.overrides?.value && this.overrides.value !== '*' && this.overrides.name === this.name) {
+ if (this.overrides?.value && this.overrides.value !== '*' && this.overrides.name === this.#name) {
if (this.overrides.value.startsWith('$')) {
const ref = this.overrides.value.slice(1)
// we may be a virtual root, if we are we want to resolve reference overrides
// from the real root, not the virtual one
- const pkg = this.from.sourceReference
- ? this.from.sourceReference.root.package
- : this.from.root.package
- const overrideSpec = (pkg.devDependencies && pkg.devDependencies[ref]) ||
- (pkg.optionalDependencies && pkg.optionalDependencies[ref]) ||
- (pkg.dependencies && pkg.dependencies[ref]) ||
- (pkg.peerDependencies && pkg.peerDependencies[ref])
-
- if (overrideSpec) {
- return overrideSpec
+ const pkg = this.#from.sourceReference
+ ? this.#from.sourceReference.root.package
+ : this.#from.root.package
+ if (pkg.devDependencies?.[ref]) {
+ return pkg.devDependencies[ref]
+ }
+ if (pkg.optionalDependencies?.[ref]) {
+ return pkg.optionalDependencies[ref]
+ }
+ if (pkg.dependencies?.[ref]) {
+ return pkg.dependencies[ref]
+ }
+ if (pkg.peerDependencies?.[ref]) {
+ return pkg.peerDependencies[ref]
}
throw new Error(`Unable to resolve reference ${this.overrides.value}`)
}
return this.overrides.value
}
- return this[_spec]
+ return this.#spec
}
get accept () {
- return this[_accept]
+ return this.#accept
}
get valid () {
@@ -211,71 +227,70 @@ class Edge {
}
get error () {
- this[_error] = this[_error] || this[_loadError]()
- return this[_error] === 'OK' ? null : this[_error]
- }
-
- [_loadError] () {
- return !this[_to] ? (this.optional ? null : 'MISSING')
- : this.peer && this.from === this.to.parent && !this.from.isTop ? 'PEER LOCAL'
- : !this.satisfiedBy(this.to) ? 'INVALID'
- : 'OK'
+ if (!this.#error) {
+ if (!this.#to) {
+ if (this.optional) {
+ this.#error = null
+ } else {
+ this.#error = 'MISSING'
+ }
+ } else if (this.peer && this.#from === this.#to.parent && !this.#from.isTop) {
+ this.#error = 'PEER LOCAL'
+ } else if (!this.satisfiedBy(this.#to)) {
+ this.#error = 'INVALID'
+ } else {
+ this.#error = 'OK'
+ }
+ }
+ if (this.#error === 'OK') {
+ return null
+ }
+ return this.#error
}
reload (hard = false) {
- this[_explanation] = null
- if (this[_from].overrides) {
- this.overrides = this[_from].overrides.getEdgeRule(this)
+ this.#explanation = null
+ if (this.#from.overrides) {
+ this.overrides = this.#from.overrides.getEdgeRule(this)
} else {
delete this.overrides
}
- const newTo = this[_from].resolve(this.name)
- if (newTo !== this[_to]) {
- if (this[_to]) {
- this[_to].edgesIn.delete(this)
+ const newTo = this.#from.resolve(this.#name)
+ if (newTo !== this.#to) {
+ if (this.#to) {
+ this.#to.edgesIn.delete(this)
}
- this[_to] = newTo
- this[_error] = this[_loadError]()
- if (this[_to]) {
- this[_to].addEdgeIn(this)
+ this.#to = newTo
+ this.#error = null
+ if (this.#to) {
+ this.#to.addEdgeIn(this)
}
} else if (hard) {
- this[_error] = this[_loadError]()
+ this.#error = null
}
}
detach () {
- this[_explanation] = null
- if (this[_to]) {
- this[_to].edgesIn.delete(this)
+ this.#explanation = null
+ if (this.#to) {
+ this.#to.edgesIn.delete(this)
}
- this[_from].edgesOut.delete(this.name)
- this[_to] = null
- this[_error] = 'DETACHED'
- this[_from] = null
- }
-
- [_setFrom] (node) {
- this[_explanation] = null
- this[_from] = node
- if (node.edgesOut.has(this.name)) {
- node.edgesOut.get(this.name).detach()
- }
-
- node.addEdgeOut(this)
- this.reload()
+ this.#from.edgesOut.delete(this.#name)
+ this.#to = null
+ this.#error = 'DETACHED'
+ this.#from = null
}
get from () {
- return this[_from]
+ return this.#from
}
get to () {
- return this[_to]
+ return this.#to
}
toJSON () {
- return printableEdge(this)
+ return new ArboristEdge(this)
}
[util.inspect.custom] () {
@@ -283,12 +298,4 @@ class Edge {
}
}
-Edge.types = [...types]
-Edge.errors = [
- 'DETACHED',
- 'MISSING',
- 'PEER LOCAL',
- 'INVALID',
-]
-
module.exports = Edge
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/from-path.js b/deps/npm/node_modules/@npmcli/arborist/lib/from-path.js
index 1006f73af3..761f15125b 100644
--- a/deps/npm/node_modules/@npmcli/arborist/lib/from-path.js
+++ b/deps/npm/node_modules/@npmcli/arborist/lib/from-path.js
@@ -1,24 +1,30 @@
-// file dependencies need their dependencies resolved based on the
-// location where the tarball was found, not the location where they
-// end up getting installed. directory (ie, symlink) deps also need
-// to be resolved based on their targets, but that's what realpath is
+// file dependencies need their dependencies resolved based on the location
+// where the tarball was found, not the location where they end up getting
+// installed. directory (ie, symlink) deps also need to be resolved based on
+// their targets, but that's what realpath is
const { dirname } = require('path')
const npa = require('npm-package-arg')
-const fromPath = (node, spec, edge) => {
+const fromPath = (node, edge) => {
if (edge && edge.overrides && edge.overrides.name === edge.name && edge.overrides.value) {
- // fromPath could be called with a node that has a virtual root, if that happens
- // we want to make sure we get the real root node when overrides are in use. this
- // is to allow things like overriding a dependency with a tarball file that's a
- // relative path from the project root
- return node.sourceReference
- ? node.sourceReference.root.realpath
- : node.root.realpath
+ // fromPath could be called with a node that has a virtual root, if that
+ // happens we want to make sure we get the real root node when overrides
+ // are in use. this is to allow things like overriding a dependency with a
+ // tarball file that's a relative path from the project root
+ if (node.sourceReference) {
+ return node.sourceReference.root.realpath
+ }
+ return node.root.realpath
}
- return spec && spec.type === 'file' ? dirname(spec.fetchSpec)
- : node.realpath
+ if (node.resolved) {
+ const spec = npa(node.resolved)
+ if (spec?.type === 'file') {
+ return dirname(spec.fetchSpec)
+ }
+ }
+ return node.realpath
}
-module.exports = (node, edge) => fromPath(node, node.resolved && npa(node.resolved), edge)
+module.exports = fromPath
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/inventory.js b/deps/npm/node_modules/@npmcli/arborist/lib/inventory.js
index 34b6f98a8b..0885034666 100644
--- a/deps/npm/node_modules/@npmcli/arborist/lib/inventory.js
+++ b/deps/npm/node_modules/@npmcli/arborist/lib/inventory.js
@@ -1,45 +1,28 @@
-// a class to manage an inventory and set of indexes of
-// a set of objects based on specific fields.
-// primary is the primary index key.
-// keys is the set of fields to be able to query.
-const _primaryKey = Symbol('_primaryKey')
-const _index = Symbol('_index')
-const defaultKeys = ['name', 'license', 'funding', 'realpath', 'packageName']
+// a class to manage an inventory and set of indexes of a set of objects based
+// on specific fields.
const { hasOwnProperty } = Object.prototype
const debug = require('./debug.js')
-// handling for the outdated "licenses" array, just pick the first one
-// also support the alternative spelling "licence"
-const getLicense = pkg => {
- if (pkg) {
- const lic = pkg.license || pkg.licence
- if (lic) {
- return lic
- }
- const lics = pkg.licenses || pkg.licences
- if (Array.isArray(lics)) {
- return lics[0]
- }
- }
-}
-
+const keys = ['name', 'license', 'funding', 'realpath', 'packageName']
class Inventory extends Map {
- constructor (opt = {}) {
- const { primary, keys } = opt
+ #index
+
+ constructor () {
super()
- this[_primaryKey] = primary || 'location'
- this[_index] = (keys || defaultKeys).reduce((index, i) => {
- index.set(i, new Map())
- return index
- }, new Map())
+ this.#index = new Map()
+ for (const key of keys) {
+ this.#index.set(key, new Map())
+ }
}
+ // XXX where is this used?
get primaryKey () {
- return this[_primaryKey]
+ return 'location'
}
+ // XXX where is this used?
get indexes () {
- return [...this[_index].keys()]
+ return [...keys]
}
* filter (fn) {
@@ -63,28 +46,49 @@ class Inventory extends Map {
return
}
- const current = super.get(node[this.primaryKey])
+ const current = super.get(node.location)
if (current) {
if (current === node) {
return
}
this.delete(current)
}
- super.set(node[this.primaryKey], node)
- for (const [key, map] of this[_index].entries()) {
- // if the node has the value, but it's false, then use that
- const val_ = hasOwnProperty.call(node, key) ? node[key]
- : key === 'license' ? getLicense(node.package)
- : node[key] ? node[key]
- : node.package && node.package[key]
- const val = typeof val_ === 'string' ? val_
- : !val_ || typeof val_ !== 'object' ? val_
- : key === 'license' ? val_.type
- : key === 'funding' ? val_.url
- : /* istanbul ignore next - not used */ val_
- const set = map.get(val) || new Set()
- set.add(node)
- map.set(val, set)
+ super.set(node.location, node)
+ for (const [key, map] of this.#index.entries()) {
+ let val
+ if (hasOwnProperty.call(node, key)) {
+ // if the node has the value, use it even if it's false
+ val = node[key]
+ } else if (key === 'license' && node.package) {
+ // handling for the outdated "licenses" array, just pick the first one
+ // also support the alternative spelling "licence"
+ if (node.package.license) {
+ val = node.package.license
+ } else if (node.package.licence) {
+ val = node.package.licence
+ } else if (Array.isArray(node.package.licenses)) {
+ val = node.package.licenses[0]
+ } else if (Array.isArray(node.package.licences)) {
+ val = node.package.licences[0]
+ }
+ } else if (node[key]) {
+ val = node[key]
+ } else {
+ val = node.package?.[key]
+ }
+ if (val && typeof val === 'object') {
+ // We currently only use license and funding
+ /* istanbul ignore next - not used */
+ if (key === 'license') {
+ val = val.type
+ } else if (key === 'funding') {
+ val = val.url
+ }
+ }
+ if (!map.has(val)) {
+ map.set(val, new Set())
+ }
+ map.get(val).add(node)
}
}
@@ -93,10 +97,14 @@ class Inventory extends Map {
return
}
- super.delete(node[this.primaryKey])
- for (const [key, map] of this[_index].entries()) {
- const val = node[key] !== undefined ? node[key]
- : (node[key] || (node.package && node.package[key]))
+ super.delete(node.location)
+ for (const [key, map] of this.#index.entries()) {
+ let val
+ if (node[key] !== undefined) {
+ val = node[key]
+ } else {
+ val = node.package?.[key]
+ }
const set = map.get(val)
if (set) {
set.delete(node)
@@ -108,13 +116,18 @@ class Inventory extends Map {
}
query (key, val) {
- const map = this[_index].get(key)
- return map && (arguments.length === 2 ? map.get(val) : map.keys()) ||
- new Set()
+ const map = this.#index.get(key)
+ if (arguments.length === 2) {
+ if (map.has(val)) {
+ return map.get(val)
+ }
+ return new Set()
+ }
+ return map.keys()
}
has (node) {
- return super.get(node[this.primaryKey]) === node
+ return super.get(node.location) === node
}
set (k, v) {
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/node.js b/deps/npm/node_modules/@npmcli/arborist/lib/node.js
index b21a3d8e3d..bdc021b7c1 100644
--- a/deps/npm/node_modules/@npmcli/arborist/lib/node.js
+++ b/deps/npm/node_modules/@npmcli/arborist/lib/node.js
@@ -39,7 +39,7 @@ const npa = require('npm-package-arg')
const debug = require('./debug.js')
const gatherDepSet = require('./gather-dep-set.js')
const treeCheck = require('./tree-check.js')
-const walkUp = require('walk-up-path')
+const { walkUp } = require('walk-up-path')
const { resolve, relative, dirname, basename } = require('path')
const util = require('util')
@@ -47,21 +47,15 @@ const _package = Symbol('_package')
const _parent = Symbol('_parent')
const _target = Symbol.for('_target')
const _fsParent = Symbol('_fsParent')
-const _loadDepType = Symbol('_loadDepType')
-const _loadWorkspaces = Symbol('_loadWorkspaces')
const _reloadNamedEdges = Symbol('_reloadNamedEdges')
// overridden by Link class
const _loadDeps = Symbol.for('Arborist.Node._loadDeps')
-const _root = Symbol('_root')
const _refreshLocation = Symbol.for('_refreshLocation')
const _changePath = Symbol.for('_changePath')
// used by Link class as well
const _delistFromMeta = Symbol.for('_delistFromMeta')
-const _global = Symbol.for('global')
-const _workspaces = Symbol('_workspaces')
const _explain = Symbol('_explain')
const _explanation = Symbol('_explanation')
-const _meta = Symbol('_meta')
const relpath = require('./relpath.js')
const consistentResolve = require('./consistent-resolve.js')
@@ -72,6 +66,11 @@ const CaseInsensitiveMap = require('./case-insensitive-map.js')
const querySelectorAll = require('./query-selector-all.js')
class Node {
+ #global
+ #meta
+ #root
+ #workspaces
+
constructor (options) {
// NB: path can be null if it's a link target
const {
@@ -109,9 +108,9 @@ class Node {
this.queryContext = {}
// true if part of a global install
- this[_global] = global
+ this.#global = global
- this[_workspaces] = null
+ this.#workspaces = null
this.errors = error ? [error] : []
this.isInStore = isInStore
@@ -165,7 +164,7 @@ class Node {
this.children = new CaseInsensitiveMap()
this.fsChildren = new Set()
- this.inventory = new Inventory({})
+ this.inventory = new Inventory()
this.tops = new Set()
this.linksIn = new Set(linksIn || [])
@@ -262,18 +261,21 @@ class Node {
}
get meta () {
- return this[_meta]
+ return this.#meta
}
set meta (meta) {
- this[_meta] = meta
+ this.#meta = meta
if (meta) {
meta.add(this)
}
}
get global () {
- return this.root[_global]
+ if (this.#root === this) {
+ return this.#global
+ }
+ return this.#root.global
}
// true for packages installed directly in the global node_modules folder
@@ -282,21 +284,21 @@ class Node {
}
get workspaces () {
- return this[_workspaces]
+ return this.#workspaces
}
set workspaces (workspaces) {
// deletes edges if they already exists
- if (this[_workspaces]) {
- for (const name of this[_workspaces].keys()) {
+ if (this.#workspaces) {
+ for (const name of this.#workspaces.keys()) {
if (!workspaces.has(name)) {
this.edgesOut.get(name).detach()
}
}
}
- this[_workspaces] = workspaces
- this[_loadWorkspaces]()
+ this.#workspaces = workspaces
+ this.#loadWorkspaces()
this[_loadDeps]()
}
@@ -367,7 +369,7 @@ class Node {
pkg = {}
}
this[_package] = pkg
- this[_loadWorkspaces]()
+ this.#loadWorkspaces()
this[_loadDeps]()
// do a hard reload, since the dependents may now be valid or invalid
// as a result of the package change.
@@ -569,12 +571,12 @@ class Node {
// this allows us to do new Node({...}) and then set the root later.
// just make the assignment so we don't lose it, and move on.
if (!this.path || !root.realpath || !root.path) {
- this[_root] = root
+ this.#root = root
return
}
// temporarily become a root node
- this[_root] = this
+ this.#root = this
// break all linksIn, we're going to re-set them if needed later
for (const link of this.linksIn) {
@@ -618,7 +620,7 @@ class Node {
current.root = null
}
- this[_root] = root
+ this.#root = root
// set this.location and add to inventory
this[_refreshLocation]()
@@ -684,22 +686,22 @@ class Node {
// the node at nm/a, which might have the root node as a fsParent.
// we can't rely on the public setter here, because it calls into
// this function to set up these references!
- const nmloc = `${this.location}${this.location ? '/' : ''}node_modules/`
- const isChild = n => n.location === nmloc + n.name
// check dirname so that /foo isn't treated as the fsparent of /foo-bar
- const isFsChild = n => {
- return dirname(n.path).startsWith(this.path) &&
- n !== this &&
- !n.parent &&
- (!n.fsParent ||
- n.fsParent === this ||
- dirname(this.path).startsWith(n.fsParent.path))
- }
- const isKid = n => isChild(n) || isFsChild(n)
-
+ const nmloc = `${this.location}${this.location ? '/' : ''}node_modules/`
// only walk top nodes, since anything else already has a parent.
for (const child of root.tops) {
- if (!isKid(child)) {
+ const isChild = child.location === nmloc + child.name
+ const isFsChild =
+ dirname(child.path).startsWith(this.path) &&
+ child !== this &&
+ !child.parent &&
+ (
+ !child.fsParent ||
+ child.fsParent === this ||
+ dirname(this.path).startsWith(child.fsParent.path)
+ )
+
+ if (!isChild && !isFsChild) {
continue
}
@@ -712,7 +714,7 @@ class Node {
child.fsParent.fsChildren.delete(child)
}
child[_fsParent] = null
- if (isChild(child)) {
+ if (isChild) {
this.children.set(child.name, child)
child[_parent] = this
root.tops.delete(child)
@@ -823,19 +825,21 @@ class Node {
}
// tree should always be valid upon root setter completion.
treeCheck(this)
- treeCheck(root)
+ if (this !== root) {
+ treeCheck(root)
+ }
}
get root () {
- return this[_root] || this
+ return this.#root || this
}
- [_loadWorkspaces] () {
- if (!this[_workspaces]) {
+ #loadWorkspaces () {
+ if (!this.#workspaces) {
return
}
- for (const [name, path] of this[_workspaces].entries()) {
+ for (const [name, path] of this.#workspaces.entries()) {
new Edge({ from: this, name, spec: `file:${path.replace(/#/g, '%23')}`, type: 'workspace' })
}
}
@@ -851,23 +855,24 @@ class Node {
// but don't have a 'path' field, only a 'realpath', because we
// don't know their canonical location. We don't need their devDeps.
const pd = this.package.peerDependencies
+ const ad = this.package.acceptDependencies || {}
if (pd && typeof pd === 'object' && !this.legacyPeerDeps) {
const pm = this.package.peerDependenciesMeta || {}
const peerDependencies = {}
const peerOptional = {}
for (const [name, dep] of Object.entries(pd)) {
- if (pm[name] && pm[name].optional) {
+ if (pm[name]?.optional) {
peerOptional[name] = dep
} else {
peerDependencies[name] = dep
}
}
- this[_loadDepType](peerDependencies, 'peer')
- this[_loadDepType](peerOptional, 'peerOptional')
+ this.#loadDepType(peerDependencies, 'peer', ad)
+ this.#loadDepType(peerOptional, 'peerOptional', ad)
}
- this[_loadDepType](this.package.dependencies, 'prod')
- this[_loadDepType](this.package.optionalDependencies, 'optional')
+ this.#loadDepType(this.package.dependencies, 'prod', ad)
+ this.#loadDepType(this.package.optionalDependencies, 'optional', ad)
const { globalTop, isTop, path, sourceReference } = this
const {
@@ -878,12 +883,11 @@ class Node {
const thisDev = isTop && !globalTop && path
const srcDev = !sourceReference || srcTop && !srcGlobalTop && srcPath
if (thisDev && srcDev) {
- this[_loadDepType](this.package.devDependencies, 'dev')
+ this.#loadDepType(this.package.devDependencies, 'dev', ad)
}
}
- [_loadDepType] (deps, type) {
- const ad = this.package.acceptDependencies || {}
+ #loadDepType (deps, type, ad) {
// Because of the order in which _loadDeps runs, we always want to
// prioritize a new edge over an existing one
for (const [name, spec] of Object.entries(deps || {})) {
@@ -895,14 +899,8 @@ class Node {
}
get fsParent () {
- const parent = this[_fsParent]
- /* istanbul ignore next - should be impossible */
- debug(() => {
- if (parent === this) {
- throw new Error('node set to its own fsParent')
- }
- })
- return parent
+ // in debug setter prevents fsParent from being this
+ return this[_fsParent]
}
set fsParent (fsParent) {
@@ -997,7 +995,7 @@ class Node {
// root dependency brings peer deps along with it. In that case, we
// will go ahead and create the invalid state, and then try to resolve
// it with more tree construction, because it's a user request.
- canReplaceWith (node, ignorePeers = []) {
+ canReplaceWith (node, ignorePeers) {
if (node.name !== this.name) {
return false
}
@@ -1010,7 +1008,6 @@ class Node {
if (node.overrides !== this.overrides) {
return false
}
-
ignorePeers = new Set(ignorePeers)
// gather up all the deps of this node and that are only depended
@@ -1022,11 +1019,10 @@ class Node {
// when replacing peer sets, we need to be able to replace the entire
// peer group, which means we ignore incoming edges from other peers
// within the replacement set.
- const ignored = !this.isTop &&
+ if (!this.isTop &&
edge.from.parent === this.parent &&
edge.peer &&
- ignorePeers.has(edge.from.name)
- if (ignored) {
+ ignorePeers.has(edge.from.name)) {
continue
}
@@ -1156,9 +1152,7 @@ class Node {
// something case-insensitively, so merely setting name and path won't
// have the desired effect. just set the path so it'll collide in the
// parent's children map, and leave it at that.
- const nameMatch = node.parent &&
- node.parent.children.get(this.name) === node
- if (nameMatch) {
+ if (node.parent?.children.get(this.name) === node) {
this.path = resolve(node.parent.path, 'node_modules', this.name)
} else {
this.path = node.path
@@ -1193,14 +1187,8 @@ class Node {
}
get parent () {
- const parent = this[_parent]
- /* istanbul ignore next - should be impossible */
- debug(() => {
- if (parent === this) {
- throw new Error('node set to its own parent')
- }
- })
- return parent
+ // setter prevents _parent from being this
+ return this[_parent]
}
// This setter keeps everything in order when we move a node from
@@ -1405,7 +1393,10 @@ class Node {
}
get depth () {
- return this.isTop ? 0 : this.parent.depth + 1
+ if (this.isTop) {
+ return 0
+ }
+ return this.parent.depth + 1
}
get isTop () {
@@ -1413,7 +1404,10 @@ class Node {
}
get top () {
- return this.isTop ? this : this.parent.top
+ if (this.isTop) {
+ return this
+ }
+ return this.parent.top
}
get isFsTop () {
@@ -1421,7 +1415,10 @@ class Node {
}
get fsTop () {
- return this.isFsTop ? this : this.fsParent.fsTop
+ if (this.isFsTop) {
+ return this
+ }
+ return this.fsParent.fsTop
}
get resolveParent () {
diff --git a/deps/npm/node_modules/@npmcli/arborist/lib/query-selector-all.js b/deps/npm/node_modules/@npmcli/arborist/lib/query-selector-all.js
index 5d21c92df7..36334e5a85 100644
--- a/deps/npm/node_modules/@npmcli/arborist/lib/query-selector-all.js
+++ b/deps/npm/node_modules/@npmcli/arborist/lib/query-selector-all.js
@@ -4,7 +4,7 @@ const { resolve } = require('path')
const { parser, arrayDelimiter } = require('@npmcli/query')
const localeCompare = require('@isaacs/string-locale-compare')('en')
const log = require('proc-log')
-const minimatch = require('minimatch')
+const { minimatch } = require('minimatch')
const npa = require('npm-package-arg')
const pacote = require('pacote')
const semver = require('semver')
diff --git a/deps/npm/node_modules/@npmcli/arborist/package.json b/deps/npm/node_modules/@npmcli/arborist/package.json
index f5706d414e..bba6a2e9e5 100644
--- a/deps/npm/node_modules/@npmcli/arborist/package.json
+++ b/deps/npm/node_modules/@npmcli/arborist/package.json
@@ -1,6 +1,6 @@
{
"name": "@npmcli/arborist",
- "version": "6.2.7",
+ "version": "6.2.9",
"description": "Manage node_modules trees",
"dependencies": {
"@isaacs/string-locale-compare": "^1.1.0",
@@ -19,7 +19,7 @@
"hosted-git-info": "^6.1.1",
"json-parse-even-better-errors": "^3.0.0",
"json-stringify-nice": "^1.1.4",
- "minimatch": "^7.4.2",
+ "minimatch": "^9.0.0",
"nopt": "^7.0.0",
"npm-install-checks": "^6.0.0",
"npm-package-arg": "^10.1.0",
@@ -35,11 +35,11 @@
"semver": "^7.3.7",
"ssri": "^10.0.1",
"treeverse": "^3.0.0",
- "walk-up-path": "^1.0.0"
+ "walk-up-path": "^3.0.1"
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.12.1",
+ "@npmcli/template-oss": "4.14.1",
"benchmark": "^2.1.4",
"chalk": "^4.1.0",
"minify-registry-metadata": "^3.0.0",
@@ -98,7 +98,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.12.1",
+ "version": "4.14.1",
"content": "../../scripts/template-oss/index.js"
}
}
diff --git a/deps/npm/node_modules/@npmcli/config/lib/index.js b/deps/npm/node_modules/@npmcli/config/lib/index.js
index 6520e5616f..9bba1d6977 100644
--- a/deps/npm/node_modules/@npmcli/config/lib/index.js
+++ b/deps/npm/node_modules/@npmcli/config/lib/index.js
@@ -1,5 +1,5 @@
// TODO: set the scope config from package.json or explicit cli config
-const walkUp = require('walk-up-path')
+const { walkUp } = require('walk-up-path')
const ini = require('ini')
const nopt = require('nopt')
const mapWorkspaces = require('@npmcli/map-workspaces')
@@ -72,16 +72,12 @@ const confTypes = new Set([
'cli',
])
-const _loaded = Symbol('loaded')
-const _get = Symbol('get')
-const _find = Symbol('find')
-const _loadObject = Symbol('loadObject')
-const _loadFile = Symbol('loadFile')
-const _checkDeprecated = Symbol('checkDeprecated')
-const _flatten = Symbol('flatten')
-const _flatOptions = Symbol('flatOptions')
-
class Config {
+ #loaded = false
+ #flatten
+ // populated the first time we flatten the object
+ #flatOptions = null
+
static get typeDefs () {
return typeDefs
}
@@ -113,9 +109,7 @@ class Config {
}
}
- // populated the first time we flatten the object
- this[_flatOptions] = null
- this[_flatten] = flatten
+ this.#flatten = flatten
this.types = types
this.shorthands = shorthands
this.defaults = defaults
@@ -159,15 +153,15 @@ class Config {
}
Object.freeze(this.list)
- this[_loaded] = false
+ this.#loaded = false
}
get loaded () {
- return this[_loaded]
+ return this.#loaded
}
get prefix () {
- return this[_get]('global') ? this.globalPrefix : this.localPrefix
+ return this.#get('global') ? this.globalPrefix : this.localPrefix
}
// return the location where key is found.
@@ -175,10 +169,7 @@ class Config {
if (!this.loaded) {
throw new Error('call config.load() before reading values')
}
- return this[_find](key)
- }
- [_find] (key) {
// have to look in reverse order
const entries = [...this.data.entries()]
for (let i = entries.length - 1; i > -1; i--) {
@@ -194,12 +185,12 @@ class Config {
if (!this.loaded) {
throw new Error('call config.load() before reading values')
}
- return this[_get](key, where)
+ return this.#get(key, where)
}
// we need to get values sometimes, so use this internal one to do so
// while in the process of loading.
- [_get] (key, where = null) {
+ #get (key, where = null) {
if (where !== null && !confTypes.has(where)) {
throw new Error('invalid config location param: ' + where)
}
@@ -214,32 +205,35 @@ class Config {
if (!confTypes.has(where)) {
throw new Error('invalid config location param: ' + where)
}
- this[_checkDeprecated](key)
- const { data } = this.data.get(where)
+ this.#checkDeprecated(key)
+ const { data, raw } = this.data.get(where)
data[key] = val
+ if (['global', 'user', 'project'].includes(where)) {
+ raw[key] = val
+ }
// this is now dirty, the next call to this.valid will have to check it
this.data.get(where)[_valid] = null
// the flat options are invalidated, regenerate next time they're needed
- this[_flatOptions] = null
+ this.#flatOptions = null
}
get flat () {
- if (this[_flatOptions]) {
- return this[_flatOptions]
+ if (this.#flatOptions) {
+ return this.#flatOptions
}
// create the object for flat options passed to deps
process.emit('time', 'config:load:flatten')
- this[_flatOptions] = {}
+ this.#flatOptions = {}
// walk from least priority to highest
for (const { data } of this.data.values()) {
- this[_flatten](data, this[_flatOptions])
+ this.#flatten(data, this.#flatOptions)
}
process.emit('timeEnd', 'config:load:flatten')
- return this[_flatOptions]
+ return this.#flatOptions
}
delete (key, where = 'cli') {
@@ -249,7 +243,11 @@ class Config {
if (!confTypes.has(where)) {
throw new Error('invalid config location param: ' + where)
}
- delete this.data.get(where).data[key]
+ const { data, raw } = this.data.get(where)
+ delete data[key]
+ if (['global', 'user', 'project'].includes(where)) {
+ delete raw[key]
+ }
}
async load () {
@@ -290,8 +288,8 @@ class Config {
process.emit('timeEnd', 'config:load:global')
// set this before calling setEnvs, so that we don't have to share
- // symbols, as that module also does a bunch of get operations
- this[_loaded] = true
+ // private attributes, as that module also does a bunch of get operations
+ this.#loaded = true
// set proper globalPrefix now that everything is loaded
this.globalPrefix = this.get('prefix')
@@ -307,7 +305,7 @@ class Config {
this.loadGlobalPrefix()
this.loadHome()
- this[_loadObject]({
+ this.#loadObject({
...this.defaults,
prefix: this.globalPrefix,
}, 'default', 'default values')
@@ -316,13 +314,13 @@ class Config {
// the metrics-registry defaults to the current resolved value of
// the registry, unless overridden somewhere else.
- settableGetter(data, 'metrics-registry', () => this[_get]('registry'))
+ settableGetter(data, 'metrics-registry', () => this.#get('registry'))
// if the prefix is set on cli, env, or userconfig, then we need to
// default the globalconfig file to that location, instead of the default
// global prefix. It's weird that `npm get globalconfig --prefix=/foo`
// returns `/foo/etc/npmrc`, but better to not change it at this point.
- settableGetter(data, 'globalconfig', () => resolve(this[_get]('prefix'), 'etc/npmrc'))
+ settableGetter(data, 'globalconfig', () => resolve(this.#get('prefix'), 'etc/npmrc'))
}
loadHome () {
@@ -363,7 +361,7 @@ class Config {
}
conf[key] = envVal
}
- this[_loadObject](conf, 'env', 'environment')
+ this.#loadObject(conf, 'env', 'environment')
}
loadCLI () {
@@ -373,7 +371,7 @@ class Config {
nopt.invalidHandler = null
this.parsedArgv = conf.argv
delete conf.argv
- this[_loadObject](conf, 'cli', 'command line options')
+ this.#loadObject(conf, 'cli', 'command line options')
}
get valid () {
@@ -541,7 +539,8 @@ class Config {
log.warn('invalid config', msg, desc)
}
- [_loadObject] (obj, where, source, er = null) {
+ #loadObject (obj, where, source, er = null) {
+ // obj is the raw data read from the file
const conf = this.data.get(where)
if (conf.source) {
const m = `double-loading "${where}" configs from ${source}, ` +
@@ -568,14 +567,14 @@ class Config {
const k = envReplace(key, this.env)
const v = this.parseField(value, k)
if (where !== 'default') {
- this[_checkDeprecated](k, where, obj, [key, value])
+ this.#checkDeprecated(k, where, obj, [key, value])
}
conf.data[k] = v
}
}
}
- [_checkDeprecated] (key, where, obj, kv) {
+ #checkDeprecated (key, where, obj, kv) {
// XXX(npm9+) make this throw an error
if (this.deprecated[key]) {
log.warn('config', key, this.deprecated[key])
@@ -587,18 +586,18 @@ class Config {
return parseField(f, key, this, listElement)
}
- async [_loadFile] (file, type) {
+ async #loadFile (file, type) {
process.emit('time', 'config:load:file:' + file)
// only catch the error from readFile, not from the loadObject call
await readFile(file, 'utf8').then(
- data => this[_loadObject](ini.parse(data), type, file),
- er => this[_loadObject](null, type, file, er)
+ data => this.#loadObject(ini.parse(data), type, file),
+ er => this.#loadObject(null, type, file, er)
)
process.emit('timeEnd', 'config:load:file:' + file)
}
loadBuiltinConfig () {
- return this[_loadFile](resolve(this.npmPath, 'npmrc'), 'builtin')
+ return this.#loadFile(resolve(this.npmPath, 'npmrc'), 'builtin')
}
async loadProjectConfig () {
@@ -613,7 +612,7 @@ class Config {
this.localPackage = await fileExists(this.localPrefix, 'package.json')
}
- if (this[_get]('global') === true || this[_get]('location') === 'global') {
+ if (this.#get('global') === true || this.#get('location') === 'global') {
this.data.get('project').source = '(global mode enabled, ignored)'
this.sources.set(this.data.get('project').source, 'project')
return
@@ -625,8 +624,8 @@ class Config {
// up loading the "project" config where the "userconfig" will be,
// which causes some calamaties. So, we only load project config if
// it doesn't match what the userconfig will be.
- if (projectFile !== this[_get]('userconfig')) {
- return this[_loadFile](projectFile, 'project')
+ if (projectFile !== this.#get('userconfig')) {
+ return this.#loadFile(projectFile, 'project')
} else {
this.data.get('project').source = '(same as "user" config, ignored)'
this.sources.set(this.data.get('project').source, 'project')
@@ -634,14 +633,14 @@ class Config {
}
async loadLocalPrefix () {
- const cliPrefix = this[_get]('prefix', 'cli')
+ const cliPrefix = this.#get('prefix', 'cli')
if (cliPrefix) {
this.localPrefix = cliPrefix
return
}
- const cliWorkspaces = this[_get]('workspaces', 'cli')
- const isGlobal = this[_get]('global') || this[_get]('location') === 'global'
+ const cliWorkspaces = this.#get('workspaces', 'cli')
+ const isGlobal = this.#get('global') || this.#get('location') === 'global'
for (const p of walkUp(this.cwd)) {
// HACK: this is an option set in tests to stop the local prefix from being set
@@ -701,11 +700,11 @@ class Config {
}
loadUserConfig () {
- return this[_loadFile](this[_get]('userconfig'), 'user')
+ return this.#loadFile(this.#get('userconfig'), 'user')
}
loadGlobalConfig () {
- return this[_loadFile](this[_get]('globalconfig'), 'global')
+ return this.#loadFile(this.#get('globalconfig'), 'global')
}
async save (where) {
@@ -717,7 +716,6 @@ class Config {
}
const conf = this.data.get(where)
- conf[_raw] = { ...conf.data }
conf[_loadError] = null
if (where === 'user') {
@@ -730,7 +728,9 @@ class Config {
}
}
- const iniData = ini.stringify(conf.data).trim() + '\n'
+ // We need the actual raw data before we called parseField so that we are
+ // saving the same content back to the file
+ const iniData = ini.stringify(conf.raw).trim() + '\n'
if (!iniData.trim()) {
// ignore the unlink error (eg, if file doesn't exist)
await unlink(conf.source).catch(er => {})
@@ -870,22 +870,21 @@ class Config {
}
}
-const _data = Symbol('data')
-const _raw = Symbol('raw')
const _loadError = Symbol('loadError')
-const _source = Symbol('source')
const _valid = Symbol('valid')
+
class ConfigData {
+ #data
+ #source = null
+ #raw = null
constructor (parent) {
- this[_data] = Object.create(parent && parent.data)
- this[_source] = null
- this[_loadError] = null
- this[_raw] = null
+ this.#data = Object.create(parent && parent.data)
+ this.#raw = {}
this[_valid] = true
}
get data () {
- return this[_data]
+ return this.#data
}
get valid () {
@@ -893,18 +892,18 @@ class ConfigData {
}
set source (s) {
- if (this[_source]) {
+ if (this.#source) {
throw new Error('cannot set ConfigData source more than once')
}
- this[_source] = s
+ this.#source = s
}
get source () {
- return this[_source]
+ return this.#source
}
set loadError (e) {
- if (this[_loadError] || this[_raw]) {
+ if (this[_loadError] || (Object.keys(this.#raw).length)) {
throw new Error('cannot set ConfigData loadError after load')
}
this[_loadError] = e
@@ -915,14 +914,14 @@ class ConfigData {
}
set raw (r) {
- if (this[_raw] || this[_loadError]) {
+ if (Object.keys(this.#raw).length || this[_loadError]) {
throw new Error('cannot set ConfigData raw after load')
}
- this[_raw] = r
+ this.#raw = r
}
get raw () {
- return this[_raw]
+ return this.#raw
}
}
diff --git a/deps/npm/node_modules/@npmcli/config/package.json b/deps/npm/node_modules/@npmcli/config/package.json
index d61e4fab83..f34d20f1e4 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": "6.1.5",
+ "version": "6.1.6",
"files": [
"bin/",
"lib/"
@@ -33,23 +33,23 @@
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.12.1",
+ "@npmcli/template-oss": "4.14.1",
"tap": "^16.3.4"
},
"dependencies": {
"@npmcli/map-workspaces": "^3.0.2",
- "ini": "^3.0.0",
+ "ini": "^4.1.0",
"nopt": "^7.0.0",
"proc-log": "^3.0.0",
"read-package-json-fast": "^3.0.2",
"semver": "^7.3.5",
- "walk-up-path": "^1.0.0"
+ "walk-up-path": "^3.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.12.1"
+ "version": "4.14.1"
}
}
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 cd9b65db53..501dad870a 100644
--- a/deps/npm/node_modules/@npmcli/map-workspaces/lib/index.js
+++ b/deps/npm/node_modules/@npmcli/map-workspaces/lib/index.js
@@ -1,9 +1,9 @@
const path = require('path')
const getName = require('@npmcli/name-from-folder')
-const minimatch = require('minimatch')
+const { minimatch } = require('minimatch')
const rpj = require('read-package-json-fast')
-const glob = require('glob')
+const { glob } = require('glob')
function appendNegatedPatterns (patterns) {
const results = []
diff --git a/deps/npm/node_modules/@npmcli/map-workspaces/package.json b/deps/npm/node_modules/@npmcli/map-workspaces/package.json
index 35b7e3fde2..64cb7f9d3f 100644
--- a/deps/npm/node_modules/@npmcli/map-workspaces/package.json
+++ b/deps/npm/node_modules/@npmcli/map-workspaces/package.json
@@ -1,6 +1,6 @@
{
"name": "@npmcli/map-workspaces",
- "version": "3.0.3",
+ "version": "3.0.4",
"main": "lib/index.js",
"files": [
"bin/",
@@ -43,17 +43,18 @@
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.12.0",
+ "@npmcli/template-oss": "4.14.1",
"tap": "^16.0.1"
},
"dependencies": {
"@npmcli/name-from-folder": "^2.0.0",
- "glob": "^9.3.1",
- "minimatch": "^7.4.2",
+ "glob": "^10.2.2",
+ "minimatch": "^9.0.0",
"read-package-json-fast": "^3.0.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.12.0"
+ "version": "4.14.1",
+ "publish": "true"
}
}
diff --git a/deps/npm/node_modules/@npmcli/metavuln-calculator/lib/advisory.js b/deps/npm/node_modules/@npmcli/metavuln-calculator/lib/advisory.js
index 1f479a90dd..01f6a66fc2 100644
--- a/deps/npm/node_modules/@npmcli/metavuln-calculator/lib/advisory.js
+++ b/deps/npm/node_modules/@npmcli/metavuln-calculator/lib/advisory.js
@@ -106,7 +106,7 @@ class Advisory {
this[_packument] = packument
- const pakuVersions = Object.keys(packument.versions)
+ const pakuVersions = Object.keys(packument.versions || {})
const allVersions = new Set([...pakuVersions, ...this.versions])
const versionsAdded = []
const versionsRemoved = []
@@ -242,7 +242,7 @@ class Advisory {
// check the dependency of this version on the vulnerable dep
// if we got a version that's not in the packument, fall back on
// the spec provided, if possible.
- const mani = this[_packument].versions[version] || {
+ const mani = this[_packument]?.versions?.[version] || {
dependencies: {
[this.dependency]: spec,
},
diff --git a/deps/npm/node_modules/@npmcli/metavuln-calculator/package.json b/deps/npm/node_modules/@npmcli/metavuln-calculator/package.json
index baf59c47fc..18ebb68c4b 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": "5.0.0",
+ "version": "5.0.1",
"main": "lib/index.js",
"files": [
"bin/",
@@ -33,8 +33,8 @@
]
},
"devDependencies": {
- "@npmcli/eslint-config": "^3.0.1",
- "@npmcli/template-oss": "4.5.1",
+ "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/template-oss": "4.13.0",
"require-inject": "^1.4.4",
"tap": "^16.0.1"
},
@@ -49,6 +49,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.5.1"
+ "version": "4.13.0",
+ "publish": "true"
}
}
diff --git a/deps/npm/node_modules/@npmcli/run-script/package.json b/deps/npm/node_modules/@npmcli/run-script/package.json
index dbae5733a3..cdcf6fb0fc 100644
--- a/deps/npm/node_modules/@npmcli/run-script/package.json
+++ b/deps/npm/node_modules/@npmcli/run-script/package.json
@@ -1,6 +1,6 @@
{
"name": "@npmcli/run-script",
- "version": "6.0.0",
+ "version": "6.0.1",
"description": "Run a lifecycle script for a package (descendant of npm-lifecycle)",
"author": "GitHub Inc.",
"license": "ISC",
@@ -16,8 +16,7 @@
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.8.0",
- "minipass": "^3.1.6",
+ "@npmcli/template-oss": "4.14.1",
"require-inject": "^1.4.4",
"tap": "^16.0.1"
},
@@ -42,7 +41,8 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.8.0"
+ "version": "4.14.1",
+ "publish": "true"
},
"tap": {
"nyc-arg": [
diff --git a/deps/npm/node_modules/@pkgjs/parseargs/LICENSE b/deps/npm/node_modules/@pkgjs/parseargs/LICENSE
new file mode 100644
index 0000000000..261eeb9e9f
--- /dev/null
+++ b/deps/npm/node_modules/@pkgjs/parseargs/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/deps/npm/node_modules/@pkgjs/parseargs/examples/is-default-value.js b/deps/npm/node_modules/@pkgjs/parseargs/examples/is-default-value.js
new file mode 100644
index 0000000000..0a67972b71
--- /dev/null
+++ b/deps/npm/node_modules/@pkgjs/parseargs/examples/is-default-value.js
@@ -0,0 +1,25 @@
+'use strict';
+
+// This example shows how to understand if a default value is used or not.
+
+// 1. const { parseArgs } = require('node:util'); // from node
+// 2. const { parseArgs } = require('@pkgjs/parseargs'); // from package
+const { parseArgs } = require('..'); // in repo
+
+const options = {
+ file: { short: 'f', type: 'string', default: 'FOO' },
+};
+
+const { values, tokens } = parseArgs({ options, tokens: true });
+
+const isFileDefault = !tokens.some((token) => token.kind === 'option' &&
+ token.name === 'file'
+);
+
+console.log(values);
+console.log(`Is the file option [${values.file}] the default value? ${isFileDefault}`);
+
+// Try the following:
+// node is-default-value.js
+// node is-default-value.js -f FILE
+// node is-default-value.js --file FILE
diff --git a/deps/npm/node_modules/@pkgjs/parseargs/examples/limit-long-syntax.js b/deps/npm/node_modules/@pkgjs/parseargs/examples/limit-long-syntax.js
new file mode 100644
index 0000000000..943e643ee9
--- /dev/null
+++ b/deps/npm/node_modules/@pkgjs/parseargs/examples/limit-long-syntax.js
@@ -0,0 +1,35 @@
+'use strict';
+
+// This is an example of using tokens to add a custom behaviour.
+//
+// Require the use of `=` for long options and values by blocking
+// the use of space separated values.
+// So allow `--foo=bar`, and not allow `--foo bar`.
+//
+// Note: this is not a common behaviour, most CLIs allow both forms.
+
+// 1. const { parseArgs } = require('node:util'); // from node
+// 2. const { parseArgs } = require('@pkgjs/parseargs'); // from package
+const { parseArgs } = require('..'); // in repo
+
+const options = {
+ file: { short: 'f', type: 'string' },
+ log: { type: 'string' },
+};
+
+const { values, tokens } = parseArgs({ options, tokens: true });
+
+const badToken = tokens.find((token) => token.kind === 'option' &&
+ token.value != null &&
+ token.rawName.startsWith('--') &&
+ !token.inlineValue
+);
+if (badToken) {
+ throw new Error(`Option value for '${badToken.rawName}' must be inline, like '${badToken.rawName}=VALUE'`);
+}
+
+console.log(values);
+
+// Try the following:
+// node limit-long-syntax.js -f FILE --log=LOG
+// node limit-long-syntax.js --file FILE
diff --git a/deps/npm/node_modules/@pkgjs/parseargs/examples/negate.js b/deps/npm/node_modules/@pkgjs/parseargs/examples/negate.js
new file mode 100644
index 0000000000..b6634690a4
--- /dev/null
+++ b/deps/npm/node_modules/@pkgjs/parseargs/examples/negate.js
@@ -0,0 +1,43 @@
+'use strict';
+
+// This example is used in the documentation.
+
+// How might I add my own support for --no-foo?
+
+// 1. const { parseArgs } = require('node:util'); // from node
+// 2. const { parseArgs } = require('@pkgjs/parseargs'); // from package
+const { parseArgs } = require('..'); // in repo
+
+const options = {
+ 'color': { type: 'boolean' },
+ 'no-color': { type: 'boolean' },
+ 'logfile': { type: 'string' },
+ 'no-logfile': { type: 'boolean' },
+};
+const { values, tokens } = parseArgs({ options, tokens: true });
+
+// Reprocess the option tokens and overwrite the returned values.
+tokens
+ .filter((token) => token.kind === 'option')
+ .forEach((token) => {
+ if (token.name.startsWith('no-')) {
+ // Store foo:false for --no-foo
+ const positiveName = token.name.slice(3);
+ values[positiveName] = false;
+ delete values[token.name];
+ } else {
+ // Resave value so last one wins if both --foo and --no-foo.
+ values[token.name] = token.value ?? true;
+ }
+ });
+
+const color = values.color;
+const logfile = values.logfile ?? 'default.log';
+
+console.log({ logfile, color });
+
+// Try the following:
+// node negate.js
+// node negate.js --no-logfile --no-color
+// negate.js --logfile=test.log --color
+// node negate.js --no-logfile --logfile=test.log --color --no-color
diff --git a/deps/npm/node_modules/@pkgjs/parseargs/examples/no-repeated-options.js b/deps/npm/node_modules/@pkgjs/parseargs/examples/no-repeated-options.js
new file mode 100644
index 0000000000..0c324688af
--- /dev/null
+++ b/deps/npm/node_modules/@pkgjs/parseargs/examples/no-repeated-options.js
@@ -0,0 +1,31 @@
+'use strict';
+
+// This is an example of using tokens to add a custom behaviour.
+//
+// Throw an error if an option is used more than once.
+
+// 1. const { parseArgs } = require('node:util'); // from node
+// 2. const { parseArgs } = require('@pkgjs/parseargs'); // from package
+const { parseArgs } = require('..'); // in repo
+
+const options = {
+ ding: { type: 'boolean', short: 'd' },
+ beep: { type: 'boolean', short: 'b' }
+};
+const { values, tokens } = parseArgs({ options, tokens: true });
+
+const seenBefore = new Set();
+tokens.forEach((token) => {
+ if (token.kind !== 'option') return;
+ if (seenBefore.has(token.name)) {
+ throw new Error(`option '${token.name}' used multiple times`);
+ }
+ seenBefore.add(token.name);
+});
+
+console.log(values);
+
+// Try the following:
+// node no-repeated-options --ding --beep
+// node no-repeated-options --beep -b
+// node no-repeated-options -ddd
diff --git a/deps/npm/node_modules/@pkgjs/parseargs/examples/ordered-options.mjs b/deps/npm/node_modules/@pkgjs/parseargs/examples/ordered-options.mjs
new file mode 100644
index 0000000000..8ab7367b8b
--- /dev/null
+++ b/deps/npm/node_modules/@pkgjs/parseargs/examples/ordered-options.mjs
@@ -0,0 +1,41 @@
+// This is an example of using tokens to add a custom behaviour.
+//
+// This adds a option order check so that --some-unstable-option
+// may only be used after --enable-experimental-options
+//
+// Note: this is not a common behaviour, the order of different options
+// does not usually matter.
+
+import { parseArgs } from '../index.js';
+
+function findTokenIndex(tokens, target) {
+ return tokens.findIndex((token) => token.kind === 'option' &&
+ token.name === target
+ );
+}
+
+const experimentalName = 'enable-experimental-options';
+const unstableName = 'some-unstable-option';
+
+const options = {
+ [experimentalName]: { type: 'boolean' },
+ [unstableName]: { type: 'boolean' },
+};
+
+const { values, tokens } = parseArgs({ options, tokens: true });
+
+const experimentalIndex = findTokenIndex(tokens, experimentalName);
+const unstableIndex = findTokenIndex(tokens, unstableName);
+if (unstableIndex !== -1 &&
+ ((experimentalIndex === -1) || (unstableIndex < experimentalIndex))) {
+ throw new Error(`'--${experimentalName}' must be specified before '--${unstableName}'`);
+}
+
+console.log(values);
+
+/* eslint-disable max-len */
+// Try the following:
+// node ordered-options.mjs
+// node ordered-options.mjs --some-unstable-option
+// node ordered-options.mjs --some-unstable-option --enable-experimental-options
+// node ordered-options.mjs --enable-experimental-options --some-unstable-option
diff --git a/deps/npm/node_modules/@pkgjs/parseargs/examples/simple-hard-coded.js b/deps/npm/node_modules/@pkgjs/parseargs/examples/simple-hard-coded.js
new file mode 100644
index 0000000000..eff04c2a60
--- /dev/null
+++ b/deps/npm/node_modules/@pkgjs/parseargs/examples/simple-hard-coded.js
@@ -0,0 +1,26 @@
+'use strict';
+
+// This example is used in the documentation.
+
+// 1. const { parseArgs } = require('node:util'); // from node
+// 2. const { parseArgs } = require('@pkgjs/parseargs'); // from package
+const { parseArgs } = require('..'); // in repo
+
+const args = ['-f', '--bar', 'b'];
+const options = {
+ foo: {
+ type: 'boolean',
+ short: 'f'
+ },
+ bar: {
+ type: 'string'
+ }
+};
+const {
+ values,
+ positionals
+} = parseArgs({ args, options });
+console.log(values, positionals);
+
+// Try the following:
+// node simple-hard-coded.js
diff --git a/deps/npm/node_modules/@pkgjs/parseargs/index.js b/deps/npm/node_modules/@pkgjs/parseargs/index.js
new file mode 100644
index 0000000000..b1004c7b72
--- /dev/null
+++ b/deps/npm/node_modules/@pkgjs/parseargs/index.js
@@ -0,0 +1,396 @@
+'use strict';
+
+const {
+ ArrayPrototypeForEach,
+ ArrayPrototypeIncludes,
+ ArrayPrototypeMap,
+ ArrayPrototypePush,
+ ArrayPrototypePushApply,
+ ArrayPrototypeShift,
+ ArrayPrototypeSlice,
+ ArrayPrototypeUnshiftApply,
+ ObjectEntries,
+ ObjectPrototypeHasOwnProperty: ObjectHasOwn,
+ StringPrototypeCharAt,
+ StringPrototypeIndexOf,
+ StringPrototypeSlice,
+ StringPrototypeStartsWith,
+} = require('./internal/primordials');
+
+const {
+ validateArray,
+ validateBoolean,
+ validateBooleanArray,
+ validateObject,
+ validateString,
+ validateStringArray,
+ validateUnion,
+} = require('./internal/validators');
+
+const {
+ kEmptyObject,
+} = require('./internal/util');
+
+const {
+ findLongOptionForShort,
+ isLoneLongOption,
+ isLoneShortOption,
+ isLongOptionAndValue,
+ isOptionValue,
+ isOptionLikeValue,
+ isShortOptionAndValue,
+ isShortOptionGroup,
+ useDefaultValueOption,
+ objectGetOwn,
+ optionsGetOwn,
+} = require('./utils');
+
+const {
+ codes: {
+ ERR_INVALID_ARG_VALUE,
+ ERR_PARSE_ARGS_INVALID_OPTION_VALUE,
+ ERR_PARSE_ARGS_UNKNOWN_OPTION,
+ ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL,
+ },
+} = require('./internal/errors');
+
+function getMainArgs() {
+ // Work out where to slice process.argv for user supplied arguments.
+
+ // Check node options for scenarios where user CLI args follow executable.
+ const execArgv = process.execArgv;
+ if (ArrayPrototypeIncludes(execArgv, '-e') ||
+ ArrayPrototypeIncludes(execArgv, '--eval') ||
+ ArrayPrototypeIncludes(execArgv, '-p') ||
+ ArrayPrototypeIncludes(execArgv, '--print')) {
+ return ArrayPrototypeSlice(process.argv, 1);
+ }
+
+ // Normally first two arguments are executable and script, then CLI arguments
+ return ArrayPrototypeSlice(process.argv, 2);
+}
+
+/**
+ * In strict mode, throw for possible usage errors like --foo --bar
+ *
+ * @param {object} token - from tokens as available from parseArgs
+ */
+function checkOptionLikeValue(token) {
+ if (!token.inlineValue && isOptionLikeValue(token.value)) {
+ // Only show short example if user used short option.
+ const example = StringPrototypeStartsWith(token.rawName, '--') ?
+ `'${token.rawName}=-XYZ'` :
+ `'--${token.name}=-XYZ' or '${token.rawName}-XYZ'`;
+ const errorMessage = `Option '${token.rawName}' argument is ambiguous.
+Did you forget to specify the option argument for '${token.rawName}'?
+To specify an option argument starting with a dash use ${example}.`;
+ throw new ERR_PARSE_ARGS_INVALID_OPTION_VALUE(errorMessage);
+ }
+}
+
+/**
+ * In strict mode, throw for usage errors.
+ *
+ * @param {object} config - from config passed to parseArgs
+ * @param {object} token - from tokens as available from parseArgs
+ */
+function checkOptionUsage(config, token) {
+ if (!ObjectHasOwn(config.options, token.name)) {
+ throw new ERR_PARSE_ARGS_UNKNOWN_OPTION(
+ token.rawName, config.allowPositionals);
+ }
+
+ const short = optionsGetOwn(config.options, token.name, 'short');
+ const shortAndLong = `${short ? `-${short}, ` : ''}--${token.name}`;
+ const type = optionsGetOwn(config.options, token.name, 'type');
+ if (type === 'string' && typeof token.value !== 'string') {
+ throw new ERR_PARSE_ARGS_INVALID_OPTION_VALUE(`Option '${shortAndLong} <value>' argument missing`);
+ }
+ // (Idiomatic test for undefined||null, expecting undefined.)
+ if (type === 'boolean' && token.value != null) {
+ throw new ERR_PARSE_ARGS_INVALID_OPTION_VALUE(`Option '${shortAndLong}' does not take an argument`);
+ }
+}
+
+
+/**
+ * Store the option value in `values`.
+ *
+ * @param {string} longOption - long option name e.g. 'foo'
+ * @param {string|undefined} optionValue - value from user args
+ * @param {object} options - option configs, from parseArgs({ options })
+ * @param {object} values - option values returned in `values` by parseArgs
+ */
+function storeOption(longOption, optionValue, options, values) {
+ if (longOption === '__proto__') {
+ return; // No. Just no.
+ }
+
+ // We store based on the option value rather than option type,
+ // preserving the users intent for author to deal with.
+ const newValue = optionValue ?? true;
+ if (optionsGetOwn(options, longOption, 'multiple')) {
+ // Always store value in array, including for boolean.
+ // values[longOption] starts out not present,
+ // first value is added as new array [newValue],
+ // subsequent values are pushed to existing array.
+ // (note: values has null prototype, so simpler usage)
+ if (values[longOption]) {
+ ArrayPrototypePush(values[longOption], newValue);
+ } else {
+ values[longOption] = [newValue];
+ }
+ } else {
+ values[longOption] = newValue;
+ }
+}
+
+/**
+ * Store the default option value in `values`.
+ *
+ * @param {string} longOption - long option name e.g. 'foo'
+ * @param {string
+ * | boolean
+ * | string[]
+ * | boolean[]} optionValue - default value from option config
+ * @param {object} values - option values returned in `values` by parseArgs
+ */
+function storeDefaultOption(longOption, optionValue, values) {
+ if (longOption === '__proto__') {
+ return; // No. Just no.
+ }
+
+ values[longOption] = optionValue;
+}
+
+/**
+ * Process args and turn into identified tokens:
+ * - option (along with value, if any)
+ * - positional
+ * - option-terminator
+ *
+ * @param {string[]} args - from parseArgs({ args }) or mainArgs
+ * @param {object} options - option configs, from parseArgs({ options })
+ */
+function argsToTokens(args, options) {
+ const tokens = [];
+ let index = -1;
+ let groupCount = 0;
+
+ const remainingArgs = ArrayPrototypeSlice(args);
+ while (remainingArgs.length > 0) {
+ const arg = ArrayPrototypeShift(remainingArgs);
+ const nextArg = remainingArgs[0];
+ if (groupCount > 0)
+ groupCount--;
+ else
+ index++;
+
+ // Check if `arg` is an options terminator.
+ // Guideline 10 in https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html
+ if (arg === '--') {
+ // Everything after a bare '--' is considered a positional argument.
+ ArrayPrototypePush(tokens, { kind: 'option-terminator', index });
+ ArrayPrototypePushApply(
+ tokens, ArrayPrototypeMap(remainingArgs, (arg) => {
+ return { kind: 'positional', index: ++index, value: arg };
+ })
+ );
+ break; // Finished processing args, leave while loop.
+ }
+
+ if (isLoneShortOption(arg)) {
+ // e.g. '-f'
+ const shortOption = StringPrototypeCharAt(arg, 1);
+ const longOption = findLongOptionForShort(shortOption, options);
+ let value;
+ let inlineValue;
+ if (optionsGetOwn(options, longOption, 'type') === 'string' &&
+ isOptionValue(nextArg)) {
+ // e.g. '-f', 'bar'
+ value = ArrayPrototypeShift(remainingArgs);
+ inlineValue = false;
+ }
+ ArrayPrototypePush(
+ tokens,
+ { kind: 'option', name: longOption, rawName: arg,
+ index, value, inlineValue });
+ if (value != null) ++index;
+ continue;
+ }
+
+ if (isShortOptionGroup(arg, options)) {
+ // Expand -fXzy to -f -X -z -y
+ const expanded = [];
+ for (let index = 1; index < arg.length; index++) {
+ const shortOption = StringPrototypeCharAt(arg, index);
+ const longOption = findLongOptionForShort(shortOption, options);
+ if (optionsGetOwn(options, longOption, 'type') !== 'string' ||
+ index === arg.length - 1) {
+ // Boolean option, or last short in group. Well formed.
+ ArrayPrototypePush(expanded, `-${shortOption}`);
+ } else {
+ // String option in middle. Yuck.
+ // Expand -abfFILE to -a -b -fFILE
+ ArrayPrototypePush(expanded, `-${StringPrototypeSlice(arg, index)}`);
+ break; // finished short group
+ }
+ }
+ ArrayPrototypeUnshiftApply(remainingArgs, expanded);
+ groupCount = expanded.length;
+ continue;
+ }
+
+ if (isShortOptionAndValue(arg, options)) {
+ // e.g. -fFILE
+ const shortOption = StringPrototypeCharAt(arg, 1);
+ const longOption = findLongOptionForShort(shortOption, options);
+ const value = StringPrototypeSlice(arg, 2);
+ ArrayPrototypePush(
+ tokens,
+ { kind: 'option', name: longOption, rawName: `-${shortOption}`,
+ index, value, inlineValue: true });
+ continue;
+ }
+
+ if (isLoneLongOption(arg)) {
+ // e.g. '--foo'
+ const longOption = StringPrototypeSlice(arg, 2);
+ let value;
+ let inlineValue;
+ if (optionsGetOwn(options, longOption, 'type') === 'string' &&
+ isOptionValue(nextArg)) {
+ // e.g. '--foo', 'bar'
+ value = ArrayPrototypeShift(remainingArgs);
+ inlineValue = false;
+ }
+ ArrayPrototypePush(
+ tokens,
+ { kind: 'option', name: longOption, rawName: arg,
+ index, value, inlineValue });
+ if (value != null) ++index;
+ continue;
+ }
+
+ if (isLongOptionAndValue(arg)) {
+ // e.g. --foo=bar
+ const equalIndex = StringPrototypeIndexOf(arg, '=');
+ const longOption = StringPrototypeSlice(arg, 2, equalIndex);
+ const value = StringPrototypeSlice(arg, equalIndex + 1);
+ ArrayPrototypePush(
+ tokens,
+ { kind: 'option', name: longOption, rawName: `--${longOption}`,
+ index, value, inlineValue: true });
+ continue;
+ }
+
+ ArrayPrototypePush(tokens, { kind: 'positional', index, value: arg });
+ }
+
+ return tokens;
+}
+
+const parseArgs = (config = kEmptyObject) => {
+ const args = objectGetOwn(config, 'args') ?? getMainArgs();
+ const strict = objectGetOwn(config, 'strict') ?? true;
+ const allowPositionals = objectGetOwn(config, 'allowPositionals') ?? !strict;
+ const returnTokens = objectGetOwn(config, 'tokens') ?? false;
+ const options = objectGetOwn(config, 'options') ?? { __proto__: null };
+ // Bundle these up for passing to strict-mode checks.
+ const parseConfig = { args, strict, options, allowPositionals };
+
+ // Validate input configuration.
+ validateArray(args, 'args');
+ validateBoolean(strict, 'strict');
+ validateBoolean(allowPositionals, 'allowPositionals');
+ validateBoolean(returnTokens, 'tokens');
+ validateObject(options, 'options');
+ ArrayPrototypeForEach(
+ ObjectEntries(options),
+ ({ 0: longOption, 1: optionConfig }) => {
+ validateObject(optionConfig, `options.${longOption}`);
+
+ // type is required
+ const optionType = objectGetOwn(optionConfig, 'type');
+ validateUnion(optionType, `options.${longOption}.type`, ['string', 'boolean']);
+
+ if (ObjectHasOwn(optionConfig, 'short')) {
+ const shortOption = optionConfig.short;
+ validateString(shortOption, `options.${longOption}.short`);
+ if (shortOption.length !== 1) {
+ throw new ERR_INVALID_ARG_VALUE(
+ `options.${longOption}.short`,
+ shortOption,
+ 'must be a single character'
+ );
+ }
+ }
+
+ const multipleOption = objectGetOwn(optionConfig, 'multiple');
+ if (ObjectHasOwn(optionConfig, 'multiple')) {
+ validateBoolean(multipleOption, `options.${longOption}.multiple`);
+ }
+
+ const defaultValue = objectGetOwn(optionConfig, 'default');
+ if (defaultValue !== undefined) {
+ let validator;
+ switch (optionType) {
+ case 'string':
+ validator = multipleOption ? validateStringArray : validateString;
+ break;
+
+ case 'boolean':
+ validator = multipleOption ? validateBooleanArray : validateBoolean;
+ break;
+ }
+ validator(defaultValue, `options.${longOption}.default`);
+ }
+ }
+ );
+
+ // Phase 1: identify tokens
+ const tokens = argsToTokens(args, options);
+
+ // Phase 2: process tokens into parsed option values and positionals
+ const result = {
+ values: { __proto__: null },
+ positionals: [],
+ };
+ if (returnTokens) {
+ result.tokens = tokens;
+ }
+ ArrayPrototypeForEach(tokens, (token) => {
+ if (token.kind === 'option') {
+ if (strict) {
+ checkOptionUsage(parseConfig, token);
+ checkOptionLikeValue(token);
+ }
+ storeOption(token.name, token.value, options, result.values);
+ } else if (token.kind === 'positional') {
+ if (!allowPositionals) {
+ throw new ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL(token.value);
+ }
+ ArrayPrototypePush(result.positionals, token.value);
+ }
+ });
+
+ // Phase 3: fill in default values for missing args
+ ArrayPrototypeForEach(ObjectEntries(options), ({ 0: longOption,
+ 1: optionConfig }) => {
+ const mustSetDefault = useDefaultValueOption(longOption,
+ optionConfig,
+ result.values);
+ if (mustSetDefault) {
+ storeDefaultOption(longOption,
+ objectGetOwn(optionConfig, 'default'),
+ result.values);
+ }
+ });
+
+
+ return result;
+};
+
+module.exports = {
+ parseArgs,
+};
diff --git a/deps/npm/node_modules/@pkgjs/parseargs/internal/errors.js b/deps/npm/node_modules/@pkgjs/parseargs/internal/errors.js
new file mode 100644
index 0000000000..e1b237b5b1
--- /dev/null
+++ b/deps/npm/node_modules/@pkgjs/parseargs/internal/errors.js
@@ -0,0 +1,47 @@
+'use strict';
+
+class ERR_INVALID_ARG_TYPE extends TypeError {
+ constructor(name, expected, actual) {
+ super(`${name} must be ${expected} got ${actual}`);
+ this.code = 'ERR_INVALID_ARG_TYPE';
+ }
+}
+
+class ERR_INVALID_ARG_VALUE extends TypeError {
+ constructor(arg1, arg2, expected) {
+ super(`The property ${arg1} ${expected}. Received '${arg2}'`);
+ this.code = 'ERR_INVALID_ARG_VALUE';
+ }
+}
+
+class ERR_PARSE_ARGS_INVALID_OPTION_VALUE extends Error {
+ constructor(message) {
+ super(message);
+ this.code = 'ERR_PARSE_ARGS_INVALID_OPTION_VALUE';
+ }
+}
+
+class ERR_PARSE_ARGS_UNKNOWN_OPTION extends Error {
+ constructor(option, allowPositionals) {
+ const suggestDashDash = allowPositionals ? `. To specify a positional argument starting with a '-', place it at the end of the command after '--', as in '-- ${JSON.stringify(option)}` : '';
+ super(`Unknown option '${option}'${suggestDashDash}`);
+ this.code = 'ERR_PARSE_ARGS_UNKNOWN_OPTION';
+ }
+}
+
+class ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL extends Error {
+ constructor(positional) {
+ super(`Unexpected argument '${positional}'. This command does not take positional arguments`);
+ this.code = 'ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL';
+ }
+}
+
+module.exports = {
+ codes: {
+ ERR_INVALID_ARG_TYPE,
+ ERR_INVALID_ARG_VALUE,
+ ERR_PARSE_ARGS_INVALID_OPTION_VALUE,
+ ERR_PARSE_ARGS_UNKNOWN_OPTION,
+ ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL,
+ }
+};
diff --git a/deps/npm/node_modules/@pkgjs/parseargs/internal/primordials.js b/deps/npm/node_modules/@pkgjs/parseargs/internal/primordials.js
new file mode 100644
index 0000000000..63e23ab117
--- /dev/null
+++ b/deps/npm/node_modules/@pkgjs/parseargs/internal/primordials.js
@@ -0,0 +1,393 @@
+/*
+This file is copied from https://github.com/nodejs/node/blob/v14.19.3/lib/internal/per_context/primordials.js
+under the following license:
+
+Copyright Node.js 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.
+*/
+
+'use strict';
+
+/* eslint-disable node-core/prefer-primordials */
+
+// This file subclasses and stores the JS builtins that come from the VM
+// so that Node.js's builtin modules do not need to later look these up from
+// the global proxy, which can be mutated by users.
+
+// Use of primordials have sometimes a dramatic impact on performance, please
+// benchmark all changes made in performance-sensitive areas of the codebase.
+// See: https://github.com/nodejs/node/pull/38248
+
+const primordials = {};
+
+const {
+ defineProperty: ReflectDefineProperty,
+ getOwnPropertyDescriptor: ReflectGetOwnPropertyDescriptor,
+ ownKeys: ReflectOwnKeys,
+} = Reflect;
+
+// `uncurryThis` is equivalent to `func => Function.prototype.call.bind(func)`.
+// It is using `bind.bind(call)` to avoid using `Function.prototype.bind`
+// and `Function.prototype.call` after it may have been mutated by users.
+const { apply, bind, call } = Function.prototype;
+const uncurryThis = bind.bind(call);
+primordials.uncurryThis = uncurryThis;
+
+// `applyBind` is equivalent to `func => Function.prototype.apply.bind(func)`.
+// It is using `bind.bind(apply)` to avoid using `Function.prototype.bind`
+// and `Function.prototype.apply` after it may have been mutated by users.
+const applyBind = bind.bind(apply);
+primordials.applyBind = applyBind;
+
+// Methods that accept a variable number of arguments, and thus it's useful to
+// also create `${prefix}${key}Apply`, which uses `Function.prototype.apply`,
+// instead of `Function.prototype.call`, and thus doesn't require iterator
+// destructuring.
+const varargsMethods = [
+ // 'ArrayPrototypeConcat' is omitted, because it performs the spread
+ // on its own for arrays and array-likes with a truthy
+ // @@isConcatSpreadable symbol property.
+ 'ArrayOf',
+ 'ArrayPrototypePush',
+ 'ArrayPrototypeUnshift',
+ // 'FunctionPrototypeCall' is omitted, since there's 'ReflectApply'
+ // and 'FunctionPrototypeApply'.
+ 'MathHypot',
+ 'MathMax',
+ 'MathMin',
+ 'StringPrototypeConcat',
+ 'TypedArrayOf',
+];
+
+function getNewKey(key) {
+ return typeof key === 'symbol' ?
+ `Symbol${key.description[7].toUpperCase()}${key.description.slice(8)}` :
+ `${key[0].toUpperCase()}${key.slice(1)}`;
+}
+
+function copyAccessor(dest, prefix, key, { enumerable, get, set }) {
+ ReflectDefineProperty(dest, `${prefix}Get${key}`, {
+ value: uncurryThis(get),
+ enumerable
+ });
+ if (set !== undefined) {
+ ReflectDefineProperty(dest, `${prefix}Set${key}`, {
+ value: uncurryThis(set),
+ enumerable
+ });
+ }
+}
+
+function copyPropsRenamed(src, dest, prefix) {
+ for (const key of ReflectOwnKeys(src)) {
+ const newKey = getNewKey(key);
+ const desc = ReflectGetOwnPropertyDescriptor(src, key);
+ if ('get' in desc) {
+ copyAccessor(dest, prefix, newKey, desc);
+ } else {
+ const name = `${prefix}${newKey}`;
+ ReflectDefineProperty(dest, name, desc);
+ if (varargsMethods.includes(name)) {
+ ReflectDefineProperty(dest, `${name}Apply`, {
+ // `src` is bound as the `this` so that the static `this` points
+ // to the object it was defined on,
+ // e.g.: `ArrayOfApply` gets a `this` of `Array`:
+ value: applyBind(desc.value, src),
+ });
+ }
+ }
+ }
+}
+
+function copyPropsRenamedBound(src, dest, prefix) {
+ for (const key of ReflectOwnKeys(src)) {
+ const newKey = getNewKey(key);
+ const desc = ReflectGetOwnPropertyDescriptor(src, key);
+ if ('get' in desc) {
+ copyAccessor(dest, prefix, newKey, desc);
+ } else {
+ const { value } = desc;
+ if (typeof value === 'function') {
+ desc.value = value.bind(src);
+ }
+
+ const name = `${prefix}${newKey}`;
+ ReflectDefineProperty(dest, name, desc);
+ if (varargsMethods.includes(name)) {
+ ReflectDefineProperty(dest, `${name}Apply`, {
+ value: applyBind(value, src),
+ });
+ }
+ }
+ }
+}
+
+function copyPrototype(src, dest, prefix) {
+ for (const key of ReflectOwnKeys(src)) {
+ const newKey = getNewKey(key);
+ const desc = ReflectGetOwnPropertyDescriptor(src, key);
+ if ('get' in desc) {
+ copyAccessor(dest, prefix, newKey, desc);
+ } else {
+ const { value } = desc;
+ if (typeof value === 'function') {
+ desc.value = uncurryThis(value);
+ }
+
+ const name = `${prefix}${newKey}`;
+ ReflectDefineProperty(dest, name, desc);
+ if (varargsMethods.includes(name)) {
+ ReflectDefineProperty(dest, `${name}Apply`, {
+ value: applyBind(value),
+ });
+ }
+ }
+ }
+}
+
+// Create copies of configurable value properties of the global object
+[
+ 'Proxy',
+ 'globalThis',
+].forEach((name) => {
+ // eslint-disable-next-line no-restricted-globals
+ primordials[name] = globalThis[name];
+});
+
+// Create copies of URI handling functions
+[
+ decodeURI,
+ decodeURIComponent,
+ encodeURI,
+ encodeURIComponent,
+].forEach((fn) => {
+ primordials[fn.name] = fn;
+});
+
+// Create copies of the namespace objects
+[
+ 'JSON',
+ 'Math',
+ 'Proxy',
+ 'Reflect',
+].forEach((name) => {
+ // eslint-disable-next-line no-restricted-globals
+ copyPropsRenamed(global[name], primordials, name);
+});
+
+// Create copies of intrinsic objects
+[
+ 'Array',
+ 'ArrayBuffer',
+ 'BigInt',
+ 'BigInt64Array',
+ 'BigUint64Array',
+ 'Boolean',
+ 'DataView',
+ 'Date',
+ 'Error',
+ 'EvalError',
+ 'Float32Array',
+ 'Float64Array',
+ 'Function',
+ 'Int16Array',
+ 'Int32Array',
+ 'Int8Array',
+ 'Map',
+ 'Number',
+ 'Object',
+ 'RangeError',
+ 'ReferenceError',
+ 'RegExp',
+ 'Set',
+ 'String',
+ 'Symbol',
+ 'SyntaxError',
+ 'TypeError',
+ 'URIError',
+ 'Uint16Array',
+ 'Uint32Array',
+ 'Uint8Array',
+ 'Uint8ClampedArray',
+ 'WeakMap',
+ 'WeakSet',
+].forEach((name) => {
+ // eslint-disable-next-line no-restricted-globals
+ const original = global[name];
+ primordials[name] = original;
+ copyPropsRenamed(original, primordials, name);
+ copyPrototype(original.prototype, primordials, `${name}Prototype`);
+});
+
+// Create copies of intrinsic objects that require a valid `this` to call
+// static methods.
+// Refs: https://www.ecma-international.org/ecma-262/#sec-promise.all
+[
+ 'Promise',
+].forEach((name) => {
+ // eslint-disable-next-line no-restricted-globals
+ const original = global[name];
+ primordials[name] = original;
+ copyPropsRenamedBound(original, primordials, name);
+ copyPrototype(original.prototype, primordials, `${name}Prototype`);
+});
+
+// Create copies of abstract intrinsic objects that are not directly exposed
+// on the global object.
+// Refs: https://tc39.es/ecma262/#sec-%typedarray%-intrinsic-object
+[
+ { name: 'TypedArray', original: Reflect.getPrototypeOf(Uint8Array) },
+ { name: 'ArrayIterator', original: {
+ prototype: Reflect.getPrototypeOf(Array.prototype[Symbol.iterator]()),
+ } },
+ { name: 'StringIterator', original: {
+ prototype: Reflect.getPrototypeOf(String.prototype[Symbol.iterator]()),
+ } },
+].forEach(({ name, original }) => {
+ primordials[name] = original;
+ // The static %TypedArray% methods require a valid `this`, but can't be bound,
+ // as they need a subclass constructor as the receiver:
+ copyPrototype(original, primordials, name);
+ copyPrototype(original.prototype, primordials, `${name}Prototype`);
+});
+
+/* eslint-enable node-core/prefer-primordials */
+
+const {
+ ArrayPrototypeForEach,
+ FunctionPrototypeCall,
+ Map,
+ ObjectFreeze,
+ ObjectSetPrototypeOf,
+ Set,
+ SymbolIterator,
+ WeakMap,
+ WeakSet,
+} = primordials;
+
+// Because these functions are used by `makeSafe`, which is exposed
+// on the `primordials` object, it's important to use const references
+// to the primordials that they use:
+const createSafeIterator = (factory, next) => {
+ class SafeIterator {
+ constructor(iterable) {
+ this._iterator = factory(iterable);
+ }
+ next() {
+ return next(this._iterator);
+ }
+ [SymbolIterator]() {
+ return this;
+ }
+ }
+ ObjectSetPrototypeOf(SafeIterator.prototype, null);
+ ObjectFreeze(SafeIterator.prototype);
+ ObjectFreeze(SafeIterator);
+ return SafeIterator;
+};
+
+primordials.SafeArrayIterator = createSafeIterator(
+ primordials.ArrayPrototypeSymbolIterator,
+ primordials.ArrayIteratorPrototypeNext
+);
+primordials.SafeStringIterator = createSafeIterator(
+ primordials.StringPrototypeSymbolIterator,
+ primordials.StringIteratorPrototypeNext
+);
+
+const copyProps = (src, dest) => {
+ ArrayPrototypeForEach(ReflectOwnKeys(src), (key) => {
+ if (!ReflectGetOwnPropertyDescriptor(dest, key)) {
+ ReflectDefineProperty(
+ dest,
+ key,
+ ReflectGetOwnPropertyDescriptor(src, key));
+ }
+ });
+};
+
+const makeSafe = (unsafe, safe) => {
+ if (SymbolIterator in unsafe.prototype) {
+ const dummy = new unsafe();
+ let next; // We can reuse the same `next` method.
+
+ ArrayPrototypeForEach(ReflectOwnKeys(unsafe.prototype), (key) => {
+ if (!ReflectGetOwnPropertyDescriptor(safe.prototype, key)) {
+ const desc = ReflectGetOwnPropertyDescriptor(unsafe.prototype, key);
+ if (
+ typeof desc.value === 'function' &&
+ desc.value.length === 0 &&
+ SymbolIterator in (FunctionPrototypeCall(desc.value, dummy) ?? {})
+ ) {
+ const createIterator = uncurryThis(desc.value);
+ next = next ?? uncurryThis(createIterator(dummy).next);
+ const SafeIterator = createSafeIterator(createIterator, next);
+ desc.value = function() {
+ return new SafeIterator(this);
+ };
+ }
+ ReflectDefineProperty(safe.prototype, key, desc);
+ }
+ });
+ } else {
+ copyProps(unsafe.prototype, safe.prototype);
+ }
+ copyProps(unsafe, safe);
+
+ ObjectSetPrototypeOf(safe.prototype, null);
+ ObjectFreeze(safe.prototype);
+ ObjectFreeze(safe);
+ return safe;
+};
+primordials.makeSafe = makeSafe;
+
+// Subclass the constructors because we need to use their prototype
+// methods later.
+// Defining the `constructor` is necessary here to avoid the default
+// constructor which uses the user-mutable `%ArrayIteratorPrototype%.next`.
+primordials.SafeMap = makeSafe(
+ Map,
+ class SafeMap extends Map {
+ constructor(i) { super(i); } // eslint-disable-line no-useless-constructor
+ }
+);
+primordials.SafeWeakMap = makeSafe(
+ WeakMap,
+ class SafeWeakMap extends WeakMap {
+ constructor(i) { super(i); } // eslint-disable-line no-useless-constructor
+ }
+);
+primordials.SafeSet = makeSafe(
+ Set,
+ class SafeSet extends Set {
+ constructor(i) { super(i); } // eslint-disable-line no-useless-constructor
+ }
+);
+primordials.SafeWeakSet = makeSafe(
+ WeakSet,
+ class SafeWeakSet extends WeakSet {
+ constructor(i) { super(i); } // eslint-disable-line no-useless-constructor
+ }
+);
+
+ObjectSetPrototypeOf(primordials, null);
+ObjectFreeze(primordials);
+
+module.exports = primordials;
diff --git a/deps/npm/node_modules/@pkgjs/parseargs/internal/util.js b/deps/npm/node_modules/@pkgjs/parseargs/internal/util.js
new file mode 100644
index 0000000000..b9b8fe5b8d
--- /dev/null
+++ b/deps/npm/node_modules/@pkgjs/parseargs/internal/util.js
@@ -0,0 +1,14 @@
+'use strict';
+
+// This is a placeholder for util.js in node.js land.
+
+const {
+ ObjectCreate,
+ ObjectFreeze,
+} = require('./primordials');
+
+const kEmptyObject = ObjectFreeze(ObjectCreate(null));
+
+module.exports = {
+ kEmptyObject,
+};
diff --git a/deps/npm/node_modules/@pkgjs/parseargs/internal/validators.js b/deps/npm/node_modules/@pkgjs/parseargs/internal/validators.js
new file mode 100644
index 0000000000..b5ac4fb501
--- /dev/null
+++ b/deps/npm/node_modules/@pkgjs/parseargs/internal/validators.js
@@ -0,0 +1,89 @@
+'use strict';
+
+// This file is a proxy of the original file located at:
+// https://github.com/nodejs/node/blob/main/lib/internal/validators.js
+// Every addition or modification to this file must be evaluated
+// during the PR review.
+
+const {
+ ArrayIsArray,
+ ArrayPrototypeIncludes,
+ ArrayPrototypeJoin,
+} = require('./primordials');
+
+const {
+ codes: {
+ ERR_INVALID_ARG_TYPE
+ }
+} = require('./errors');
+
+function validateString(value, name) {
+ if (typeof value !== 'string') {
+ throw new ERR_INVALID_ARG_TYPE(name, 'String', value);
+ }
+}
+
+function validateUnion(value, name, union) {
+ if (!ArrayPrototypeIncludes(union, value)) {
+ throw new ERR_INVALID_ARG_TYPE(name, `('${ArrayPrototypeJoin(union, '|')}')`, value);
+ }
+}
+
+function validateBoolean(value, name) {
+ if (typeof value !== 'boolean') {
+ throw new ERR_INVALID_ARG_TYPE(name, 'Boolean', value);
+ }
+}
+
+function validateArray(value, name) {
+ if (!ArrayIsArray(value)) {
+ throw new ERR_INVALID_ARG_TYPE(name, 'Array', value);
+ }
+}
+
+function validateStringArray(value, name) {
+ validateArray(value, name);
+ for (let i = 0; i < value.length; i++) {
+ validateString(value[i], `${name}[${i}]`);
+ }
+}
+
+function validateBooleanArray(value, name) {
+ validateArray(value, name);
+ for (let i = 0; i < value.length; i++) {
+ validateBoolean(value[i], `${name}[${i}]`);
+ }
+}
+
+/**
+ * @param {unknown} value
+ * @param {string} name
+ * @param {{
+ * allowArray?: boolean,
+ * allowFunction?: boolean,
+ * nullable?: boolean
+ * }} [options]
+ */
+function validateObject(value, name, options) {
+ const useDefaultOptions = options == null;
+ const allowArray = useDefaultOptions ? false : options.allowArray;
+ const allowFunction = useDefaultOptions ? false : options.allowFunction;
+ const nullable = useDefaultOptions ? false : options.nullable;
+ if ((!nullable && value === null) ||
+ (!allowArray && ArrayIsArray(value)) ||
+ (typeof value !== 'object' && (
+ !allowFunction || typeof value !== 'function'
+ ))) {
+ throw new ERR_INVALID_ARG_TYPE(name, 'Object', value);
+ }
+}
+
+module.exports = {
+ validateArray,
+ validateObject,
+ validateString,
+ validateStringArray,
+ validateUnion,
+ validateBoolean,
+ validateBooleanArray,
+};
diff --git a/deps/npm/node_modules/@pkgjs/parseargs/package.json b/deps/npm/node_modules/@pkgjs/parseargs/package.json
new file mode 100644
index 0000000000..0bcc05c0d4
--- /dev/null
+++ b/deps/npm/node_modules/@pkgjs/parseargs/package.json
@@ -0,0 +1,36 @@
+{
+ "name": "@pkgjs/parseargs",
+ "version": "0.11.0",
+ "description": "Polyfill of future proposal for `util.parseArgs()`",
+ "engines": {
+ "node": ">=14"
+ },
+ "main": "index.js",
+ "exports": {
+ ".": "./index.js",
+ "./package.json": "./package.json"
+ },
+ "scripts": {
+ "coverage": "c8 --check-coverage tape 'test/*.js'",
+ "test": "c8 tape 'test/*.js'",
+ "posttest": "eslint .",
+ "fix": "npm run posttest -- --fix"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git@github.com:pkgjs/parseargs.git"
+ },
+ "keywords": [],
+ "author": "",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/pkgjs/parseargs/issues"
+ },
+ "homepage": "https://github.com/pkgjs/parseargs#readme",
+ "devDependencies": {
+ "c8": "^7.10.0",
+ "eslint": "^8.2.0",
+ "eslint-plugin-node-core": "iansu/eslint-plugin-node-core",
+ "tape": "^5.2.2"
+ }
+}
diff --git a/deps/npm/node_modules/@pkgjs/parseargs/utils.js b/deps/npm/node_modules/@pkgjs/parseargs/utils.js
new file mode 100644
index 0000000000..d7f420a233
--- /dev/null
+++ b/deps/npm/node_modules/@pkgjs/parseargs/utils.js
@@ -0,0 +1,198 @@
+'use strict';
+
+const {
+ ArrayPrototypeFind,
+ ObjectEntries,
+ ObjectPrototypeHasOwnProperty: ObjectHasOwn,
+ StringPrototypeCharAt,
+ StringPrototypeIncludes,
+ StringPrototypeStartsWith,
+} = require('./internal/primordials');
+
+const {
+ validateObject,
+} = require('./internal/validators');
+
+// These are internal utilities to make the parsing logic easier to read, and
+// add lots of detail for the curious. They are in a separate file to allow
+// unit testing, although that is not essential (this could be rolled into
+// main file and just tested implicitly via API).
+//
+// These routines are for internal use, not for export to client.
+
+/**
+ * Return the named property, but only if it is an own property.
+ */
+function objectGetOwn(obj, prop) {
+ if (ObjectHasOwn(obj, prop))
+ return obj[prop];
+}
+
+/**
+ * Return the named options property, but only if it is an own property.
+ */
+function optionsGetOwn(options, longOption, prop) {
+ if (ObjectHasOwn(options, longOption))
+ return objectGetOwn(options[longOption], prop);
+}
+
+/**
+ * Determines if the argument may be used as an option value.
+ * @example
+ * isOptionValue('V') // returns true
+ * isOptionValue('-v') // returns true (greedy)
+ * isOptionValue('--foo') // returns true (greedy)
+ * isOptionValue(undefined) // returns false
+ */
+function isOptionValue(value) {
+ if (value == null) return false;
+
+ // Open Group Utility Conventions are that an option-argument
+ // is the argument after the option, and may start with a dash.
+ return true; // greedy!
+}
+
+/**
+ * Detect whether there is possible confusion and user may have omitted
+ * the option argument, like `--port --verbose` when `port` of type:string.
+ * In strict mode we throw errors if value is option-like.
+ */
+function isOptionLikeValue(value) {
+ if (value == null) return false;
+
+ return value.length > 1 && StringPrototypeCharAt(value, 0) === '-';
+}
+
+/**
+ * Determines if `arg` is just a short option.
+ * @example '-f'
+ */
+function isLoneShortOption(arg) {
+ return arg.length === 2 &&
+ StringPrototypeCharAt(arg, 0) === '-' &&
+ StringPrototypeCharAt(arg, 1) !== '-';
+}
+
+/**
+ * Determines if `arg` is a lone long option.
+ * @example
+ * isLoneLongOption('a') // returns false
+ * isLoneLongOption('-a') // returns false
+ * isLoneLongOption('--foo') // returns true
+ * isLoneLongOption('--foo=bar') // returns false
+ */
+function isLoneLongOption(arg) {
+ return arg.length > 2 &&
+ StringPrototypeStartsWith(arg, '--') &&
+ !StringPrototypeIncludes(arg, '=', 3);
+}
+
+/**
+ * Determines if `arg` is a long option and value in the same argument.
+ * @example
+ * isLongOptionAndValue('--foo') // returns false
+ * isLongOptionAndValue('--foo=bar') // returns true
+ */
+function isLongOptionAndValue(arg) {
+ return arg.length > 2 &&
+ StringPrototypeStartsWith(arg, '--') &&
+ StringPrototypeIncludes(arg, '=', 3);
+}
+
+/**
+ * Determines if `arg` is a short option group.
+ *
+ * See Guideline 5 of the [Open Group Utility Conventions](https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html).
+ * One or more options without option-arguments, followed by at most one
+ * option that takes an option-argument, should be accepted when grouped
+ * behind one '-' delimiter.
+ * @example
+ * isShortOptionGroup('-a', {}) // returns false
+ * isShortOptionGroup('-ab', {}) // returns true
+ * // -fb is an option and a value, not a short option group
+ * isShortOptionGroup('-fb', {
+ * options: { f: { type: 'string' } }
+ * }) // returns false
+ * isShortOptionGroup('-bf', {
+ * options: { f: { type: 'string' } }
+ * }) // returns true
+ * // -bfb is an edge case, return true and caller sorts it out
+ * isShortOptionGroup('-bfb', {
+ * options: { f: { type: 'string' } }
+ * }) // returns true
+ */
+function isShortOptionGroup(arg, options) {
+ if (arg.length <= 2) return false;
+ if (StringPrototypeCharAt(arg, 0) !== '-') return false;
+ if (StringPrototypeCharAt(arg, 1) === '-') return false;
+
+ const firstShort = StringPrototypeCharAt(arg, 1);
+ const longOption = findLongOptionForShort(firstShort, options);
+ return optionsGetOwn(options, longOption, 'type') !== 'string';
+}
+
+/**
+ * Determine if arg is a short string option followed by its value.
+ * @example
+ * isShortOptionAndValue('-a', {}); // returns false
+ * isShortOptionAndValue('-ab', {}); // returns false
+ * isShortOptionAndValue('-fFILE', {
+ * options: { foo: { short: 'f', type: 'string' }}
+ * }) // returns true
+ */
+function isShortOptionAndValue(arg, options) {
+ validateObject(options, 'options');
+
+ if (arg.length <= 2) return false;
+ if (StringPrototypeCharAt(arg, 0) !== '-') return false;
+ if (StringPrototypeCharAt(arg, 1) === '-') return false;
+
+ const shortOption = StringPrototypeCharAt(arg, 1);
+ const longOption = findLongOptionForShort(shortOption, options);
+ return optionsGetOwn(options, longOption, 'type') === 'string';
+}
+
+/**
+ * Find the long option associated with a short option. Looks for a configured
+ * `short` and returns the short option itself if a long option is not found.
+ * @example
+ * findLongOptionForShort('a', {}) // returns 'a'
+ * findLongOptionForShort('b', {
+ * options: { bar: { short: 'b' } }
+ * }) // returns 'bar'
+ */
+function findLongOptionForShort(shortOption, options) {
+ validateObject(options, 'options');
+ const longOptionEntry = ArrayPrototypeFind(
+ ObjectEntries(options),
+ ({ 1: optionConfig }) => objectGetOwn(optionConfig, 'short') === shortOption
+ );
+ return longOptionEntry?.[0] ?? shortOption;
+}
+
+/**
+ * Check if the given option includes a default value
+ * and that option has not been set by the input args.
+ *
+ * @param {string} longOption - long option name e.g. 'foo'
+ * @param {object} optionConfig - the option configuration properties
+ * @param {object} values - option values returned in `values` by parseArgs
+ */
+function useDefaultValueOption(longOption, optionConfig, values) {
+ return objectGetOwn(optionConfig, 'default') !== undefined &&
+ values[longOption] === undefined;
+}
+
+module.exports = {
+ findLongOptionForShort,
+ isLoneLongOption,
+ isLoneShortOption,
+ isLongOptionAndValue,
+ isOptionValue,
+ isOptionLikeValue,
+ isShortOptionAndValue,
+ isShortOptionGroup,
+ useDefaultValueOption,
+ objectGetOwn,
+ optionsGetOwn,
+};
diff --git a/deps/npm/node_modules/@tufjs/canonical-json/LICENSE b/deps/npm/node_modules/@tufjs/canonical-json/LICENSE
new file mode 100644
index 0000000000..420700f5d3
--- /dev/null
+++ b/deps/npm/node_modules/@tufjs/canonical-json/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2022 GitHub and the TUF Contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/deps/npm/node_modules/@tufjs/canonical-json/lib/index.js b/deps/npm/node_modules/@tufjs/canonical-json/lib/index.js
new file mode 100644
index 0000000000..d480696de1
--- /dev/null
+++ b/deps/npm/node_modules/@tufjs/canonical-json/lib/index.js
@@ -0,0 +1,64 @@
+const COMMA = ',';
+const COLON = ':';
+const LEFT_SQUARE_BRACKET = '[';
+const RIGHT_SQUARE_BRACKET = ']';
+const LEFT_CURLY_BRACKET = '{';
+const RIGHT_CURLY_BRACKET = '}';
+
+// Recursively encodes the supplied object according to the canonical JSON form
+// as specified at http://wiki.laptop.org/go/Canonical_JSON. It's a restricted
+// dialect of JSON in which keys are lexically sorted, floats are not allowed,
+// and only double quotes and backslashes are escaped.
+function canonicalize(object) {
+ const buffer = [];
+ if (typeof object === 'string') {
+ buffer.push(canonicalizeString(object));
+ } else if (typeof object === 'boolean') {
+ buffer.push(JSON.stringify(object));
+ } else if (Number.isInteger(object)) {
+ buffer.push(JSON.stringify(object));
+ } else if (object === null) {
+ buffer.push(JSON.stringify(object));
+ } else if (Array.isArray(object)) {
+ buffer.push(LEFT_SQUARE_BRACKET);
+ let first = true;
+ object.forEach((element) => {
+ if (!first) {
+ buffer.push(COMMA);
+ }
+ first = false;
+ buffer.push(canonicalize(element));
+ });
+ buffer.push(RIGHT_SQUARE_BRACKET);
+ } else if (typeof object === 'object') {
+ buffer.push(LEFT_CURLY_BRACKET);
+ let first = true;
+ Object.keys(object)
+ .sort()
+ .forEach((property) => {
+ if (!first) {
+ buffer.push(COMMA);
+ }
+ first = false;
+ buffer.push(canonicalizeString(property));
+ buffer.push(COLON);
+ buffer.push(canonicalize(object[property]));
+ });
+ buffer.push(RIGHT_CURLY_BRACKET);
+ } else {
+ throw new TypeError('cannot encode ' + object.toString());
+ }
+
+ return buffer.join('');
+}
+
+// String canonicalization consists of escaping backslash (\) and double
+// quote (") characters and wrapping the resulting string in double quotes.
+function canonicalizeString(string) {
+ const escapedString = string.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
+ return '"' + escapedString + '"';
+}
+
+module.exports = {
+ canonicalize,
+};
diff --git a/deps/npm/node_modules/@tufjs/canonical-json/package.json b/deps/npm/node_modules/@tufjs/canonical-json/package.json
new file mode 100644
index 0000000000..688c9b93c3
--- /dev/null
+++ b/deps/npm/node_modules/@tufjs/canonical-json/package.json
@@ -0,0 +1,39 @@
+{
+ "name": "@tufjs/canonical-json",
+ "version": "1.0.0",
+ "description": "OLPC JSON canonicalization",
+ "main": "lib/index.js",
+ "typings": "lib/index.d.ts",
+ "license": "MIT",
+ "keywords": [
+ "json",
+ "canonical",
+ "canonicalize",
+ "canonicalization",
+ "crypto",
+ "signature",
+ "olpc"
+ ],
+ "author": "bdehamer@github.com",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/theupdateframework/tuf-js.git"
+ },
+ "homepage": "https://github.com/theupdateframework/tuf-js/packages/canonical-json#readme",
+ "bugs": {
+ "url": "https://github.com/theupdateframework/tuf-js/issues"
+ },
+ "files": [
+ "lib/"
+ ],
+ "scripts": {
+ "test": "jest"
+ },
+ "devDependencies": {
+ "@types/node": "^18.14.1",
+ "typescript": "^4.9.5"
+ },
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+}
diff --git a/deps/npm/node_modules/@tufjs/models/dist/metadata.js b/deps/npm/node_modules/@tufjs/models/dist/metadata.js
index 945d3a42a7..9668b6f14f 100644
--- a/deps/npm/node_modules/@tufjs/models/dist/metadata.js
+++ b/deps/npm/node_modules/@tufjs/models/dist/metadata.js
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Metadata = void 0;
+const canonical_json_1 = require("@tufjs/canonical-json");
const util_1 = __importDefault(require("util"));
const base_1 = require("./base");
const error_1 = require("./error");
@@ -13,7 +14,6 @@ const snapshot_1 = require("./snapshot");
const targets_1 = require("./targets");
const timestamp_1 = require("./timestamp");
const utils_1 = require("./utils");
-const json_1 = require("./utils/json");
/***
* A container for signed TUF metadata.
*
@@ -45,7 +45,7 @@ class Metadata {
this.unrecognizedFields = unrecognizedFields || {};
}
sign(signer, append = true) {
- const bytes = (0, json_1.canonicalize)(this.signed.toJSON());
+ const bytes = Buffer.from((0, canonical_json_1.canonicalize)(this.signed.toJSON()));
const signature = signer(bytes);
if (!append) {
this.signatures = {};
diff --git a/deps/npm/node_modules/@tufjs/models/dist/role.js b/deps/npm/node_modules/@tufjs/models/dist/role.js
index 143c5dc608..f7ddbc6fe3 100644
--- a/deps/npm/node_modules/@tufjs/models/dist/role.js
+++ b/deps/npm/node_modules/@tufjs/models/dist/role.js
@@ -5,7 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.SuccinctRoles = exports.DelegatedRole = exports.Role = exports.TOP_LEVEL_ROLE_NAMES = void 0;
const crypto_1 = __importDefault(require("crypto"));
-const minimatch_1 = __importDefault(require("minimatch"));
+const minimatch_1 = require("minimatch");
const util_1 = __importDefault(require("util"));
const error_1 = require("./error");
const utils_1 = require("./utils");
@@ -167,7 +167,7 @@ function isTargetInPathPattern(target, pattern) {
if (patternParts.length != targetParts.length) {
return false;
}
- return zip(targetParts, patternParts).every(([targetPart, patternPart]) => (0, minimatch_1.default)(targetPart, patternPart));
+ return zip(targetParts, patternParts).every(([targetPart, patternPart]) => (0, minimatch_1.minimatch)(targetPart, patternPart));
}
/**
* Succinctly defines a hash bin delegation graph.
diff --git a/deps/npm/node_modules/@tufjs/models/dist/utils/json.js b/deps/npm/node_modules/@tufjs/models/dist/utils/json.js
deleted file mode 100644
index 30f82ea4c3..0000000000
--- a/deps/npm/node_modules/@tufjs/models/dist/utils/json.js
+++ /dev/null
@@ -1,62 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.canonicalize = void 0;
-const QUOTATION_MARK = Buffer.from('"');
-const COMMA = Buffer.from(',');
-const COLON = Buffer.from(':');
-const LEFT_SQUARE_BRACKET = Buffer.from('[');
-const RIGHT_SQUARE_BRACKET = Buffer.from(']');
-const LEFT_CURLY_BRACKET = Buffer.from('{');
-const RIGHT_CURLY_BRACKET = Buffer.from('}');
-// eslint-disable-next-line @typescript-eslint/no-explicit-any
-function canonicalize(object) {
- let buffer = Buffer.from('');
- if (object === null || typeof object !== 'object' || object.toJSON != null) {
- // Primitives or toJSONable objects
- if (typeof object === 'string') {
- buffer = Buffer.concat([
- buffer,
- QUOTATION_MARK,
- Buffer.from(object),
- QUOTATION_MARK,
- ]);
- }
- else {
- buffer = Buffer.concat([buffer, Buffer.from(JSON.stringify(object))]);
- }
- }
- else if (Array.isArray(object)) {
- // Array - maintain element order
- buffer = Buffer.concat([buffer, LEFT_SQUARE_BRACKET]);
- let first = true;
- object.forEach((element) => {
- if (!first) {
- buffer = Buffer.concat([buffer, COMMA]);
- }
- first = false;
- // recursive call
- buffer = Buffer.concat([buffer, canonicalize(element)]);
- });
- buffer = Buffer.concat([buffer, RIGHT_SQUARE_BRACKET]);
- }
- else {
- // Object - Sort properties before serializing
- buffer = Buffer.concat([buffer, LEFT_CURLY_BRACKET]);
- let first = true;
- Object.keys(object)
- .sort()
- .forEach((property) => {
- if (!first) {
- buffer = Buffer.concat([buffer, COMMA]);
- }
- first = false;
- buffer = Buffer.concat([buffer, Buffer.from(JSON.stringify(property))]);
- buffer = Buffer.concat([buffer, COLON]);
- // recursive call
- buffer = Buffer.concat([buffer, canonicalize(object[property])]);
- });
- buffer = Buffer.concat([buffer, RIGHT_CURLY_BRACKET]);
- }
- return buffer;
-}
-exports.canonicalize = canonicalize;
diff --git a/deps/npm/node_modules/@tufjs/models/dist/utils/verify.js b/deps/npm/node_modules/@tufjs/models/dist/utils/verify.js
index d3b2e7515d..8232b6f6a9 100644
--- a/deps/npm/node_modules/@tufjs/models/dist/utils/verify.js
+++ b/deps/npm/node_modules/@tufjs/models/dist/utils/verify.js
@@ -4,10 +4,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.verifySignature = void 0;
+const canonical_json_1 = require("@tufjs/canonical-json");
const crypto_1 = __importDefault(require("crypto"));
-const json_1 = require("./json");
const verifySignature = (metaDataSignedData, key, signature) => {
- const canonicalData = (0, json_1.canonicalize)(metaDataSignedData) || '';
+ const canonicalData = Buffer.from((0, canonical_json_1.canonicalize)(metaDataSignedData));
return crypto_1.default.verify(undefined, canonicalData, key, Buffer.from(signature, 'hex'));
};
exports.verifySignature = verifySignature;
diff --git a/deps/npm/node_modules/@tufjs/models/package.json b/deps/npm/node_modules/@tufjs/models/package.json
index d8b2a189a1..6711ee0dab 100644
--- a/deps/npm/node_modules/@tufjs/models/package.json
+++ b/deps/npm/node_modules/@tufjs/models/package.json
@@ -1,6 +1,6 @@
{
"name": "@tufjs/models",
- "version": "1.0.1",
+ "version": "1.0.4",
"description": "TUF metadata models",
"main": "dist/index.js",
"types": "dist/index.d.ts",
@@ -28,12 +28,12 @@
},
"homepage": "https://github.com/theupdateframework/tuf-js/tree/main/packages/models#readme",
"devDependencies": {
- "@types/minimatch": "^5.1.2",
- "@types/node": "^18.15.3",
- "typescript": "^4.9.5"
+ "@types/node": "^18.16.3",
+ "typescript": "^5.0.4"
},
"dependencies": {
- "minimatch": "^7.4.2"
+ "@tufjs/canonical-json": "1.0.0",
+ "minimatch": "^9.0.0"
},
"engines": {
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
diff --git a/deps/npm/node_modules/cacache/lib/content/write.js b/deps/npm/node_modules/cacache/lib/content/write.js
index d799ae8837..b6f5c5623b 100644
--- a/deps/npm/node_modules/cacache/lib/content/write.js
+++ b/deps/npm/node_modules/cacache/lib/content/write.js
@@ -4,8 +4,8 @@ const events = require('events')
const contentPath = require('./path')
const fs = require('fs/promises')
-const moveFile = require('../util/move-file')
-const Minipass = require('minipass')
+const { moveFile } = require('@npmcli/fs')
+const { Minipass } = require('minipass')
const Pipeline = require('minipass-pipeline')
const Flush = require('minipass-flush')
const path = require('path')
@@ -17,9 +17,6 @@ module.exports = write
async function write (cache, data, opts = {}) {
const { algorithms, size, integrity } = opts
- if (algorithms && algorithms.length > 1) {
- throw new Error('opts.algorithms only supports a single algorithm for now')
- }
if (typeof size === 'number' && data.length !== size) {
throw sizeError(size, data.length)
@@ -30,16 +27,19 @@ async function write (cache, data, opts = {}) {
throw checksumError(integrity, sri)
}
- const tmp = await makeTmp(cache, opts)
- try {
- await fs.writeFile(tmp.target, data, { flag: 'wx' })
- await moveToDestination(tmp, cache, sri, opts)
- return { integrity: sri, size: data.length }
- } finally {
- if (!tmp.moved) {
- await fs.rm(tmp.target, { recursive: true, force: true })
+ 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
@@ -161,8 +161,14 @@ async function moveToDestination (tmp, cache, sri, opts) {
const destDir = path.dirname(destination)
await fs.mkdir(destDir, { recursive: true })
- await moveFile(tmp.target, destination)
- tmp.moved = true
+ try {
+ await moveFile(tmp.target, destination, { overwrite: false })
+ tmp.moved = true
+ } catch (err) {
+ if (!err.message.startsWith('The destination file exists')) {
+ throw Object.assign(err, { code: 'EEXIST' })
+ }
+ }
}
function sizeError (expected, found) {
diff --git a/deps/npm/node_modules/cacache/lib/entry-index.js b/deps/npm/node_modules/cacache/lib/entry-index.js
index add15e3a22..722a37af5c 100644
--- a/deps/npm/node_modules/cacache/lib/entry-index.js
+++ b/deps/npm/node_modules/cacache/lib/entry-index.js
@@ -9,7 +9,7 @@ const {
rm,
writeFile,
} = require('fs/promises')
-const Minipass = require('minipass')
+const { Minipass } = require('minipass')
const path = require('path')
const ssri = require('ssri')
const uniqueFilename = require('unique-filename')
@@ -109,12 +109,12 @@ async function compact (cache, key, matchFn, opts = {}) {
module.exports.insert = insert
async function insert (cache, key, integrity, opts = {}) {
- const { metadata, size } = opts
+ const { metadata, size, time } = opts
const bucket = bucketPath(cache, key)
const entry = {
key,
integrity: integrity && ssri.stringify(integrity),
- time: Date.now(),
+ time: time || Date.now(),
size,
metadata,
}
diff --git a/deps/npm/node_modules/cacache/lib/get.js b/deps/npm/node_modules/cacache/lib/get.js
index 272ddb6292..80ec206c7e 100644
--- a/deps/npm/node_modules/cacache/lib/get.js
+++ b/deps/npm/node_modules/cacache/lib/get.js
@@ -1,7 +1,7 @@
'use strict'
const Collect = require('minipass-collect')
-const Minipass = require('minipass')
+const { Minipass } = require('minipass')
const Pipeline = require('minipass-pipeline')
const index = require('./entry-index')
diff --git a/deps/npm/node_modules/cacache/lib/util/glob.js b/deps/npm/node_modules/cacache/lib/util/glob.js
index 38b5459c59..3132a4da65 100644
--- a/deps/npm/node_modules/cacache/lib/util/glob.js
+++ b/deps/npm/node_modules/cacache/lib/util/glob.js
@@ -1,6 +1,6 @@
'use strict'
-const glob = require('glob')
+const { glob } = require('glob')
const globify = (pattern) => pattern.split('//').join('/')
module.exports = (path, options) => glob(globify(path), options)
diff --git a/deps/npm/node_modules/cacache/lib/util/move-file.js b/deps/npm/node_modules/cacache/lib/util/move-file.js
deleted file mode 100644
index eb3ba76107..0000000000
--- a/deps/npm/node_modules/cacache/lib/util/move-file.js
+++ /dev/null
@@ -1,56 +0,0 @@
-'use strict'
-
-const fs = require('fs/promises')
-const { moveFile: move } = require('@npmcli/fs')
-const pinflight = require('promise-inflight')
-
-module.exports = moveFile
-
-async function moveFile (src, dest) {
- const isWindows = process.platform === 'win32'
-
- // This isn't quite an fs.rename -- the assumption is that
- // if `dest` already exists, and we get certain errors while
- // trying to move it, we should just not bother.
- //
- // In the case of cache corruption, users will receive an
- // EINTEGRITY error elsewhere, and can remove the offending
- // content their own way.
- //
- // Note that, as the name suggests, this strictly only supports file moves.
- try {
- await fs.link(src, dest)
- } catch (err) {
- if (isWindows && err.code === 'EPERM') {
- // XXX This is a really weird way to handle this situation, as it
- // results in the src file being deleted even though the dest
- // might not exist. Since we pretty much always write files to
- // deterministic locations based on content hash, this is likely
- // ok (or at worst, just ends in a future cache miss). But it would
- // be worth investigating at some time in the future if this is
- // really what we want to do here.
- } else if (err.code === 'EEXIST' || err.code === 'EBUSY') {
- // file already exists, so whatever
- } else {
- throw err
- }
- }
- try {
- await Promise.all([
- fs.unlink(src),
- !isWindows && fs.chmod(dest, '0444'),
- ])
- } catch (e) {
- return pinflight('cacache-move-file:' + dest, async () => {
- await fs.stat(dest).catch((err) => {
- if (err.code !== 'ENOENT') {
- // Something else is wrong here. Bail bail bail
- throw err
- }
- })
- // file doesn't already exist! let's try a rename -> copy fallback
- // only delete if it successfully copies
- return move(src, dest)
- })
- }
-}
diff --git a/deps/npm/node_modules/cacache/lib/verify.js b/deps/npm/node_modules/cacache/lib/verify.js
index 33f566c12a..62e85c9464 100644
--- a/deps/npm/node_modules/cacache/lib/verify.js
+++ b/deps/npm/node_modules/cacache/lib/verify.js
@@ -100,7 +100,11 @@ async function garbageCollect (cache, opts) {
return
}
- liveContent.add(entry.integrity.toString())
+ // 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)
@@ -220,6 +224,7 @@ async function rebuildBucket (cache, bucket, stats, opts) {
await index.insert(cache, entry.key, entry.integrity, {
metadata: entry.metadata,
size: entry.size,
+ time: entry.time,
})
stats.totalEntries++
} catch (err) {
diff --git a/deps/npm/node_modules/cacache/package.json b/deps/npm/node_modules/cacache/package.json
index e3a0ab6a61..b8ee783388 100644
--- a/deps/npm/node_modules/cacache/package.json
+++ b/deps/npm/node_modules/cacache/package.json
@@ -1,6 +1,6 @@
{
"name": "cacache",
- "version": "17.0.5",
+ "version": "17.1.0",
"cache-version": {
"content": "2",
"index": "5"
@@ -47,21 +47,20 @@
"dependencies": {
"@npmcli/fs": "^3.1.0",
"fs-minipass": "^3.0.0",
- "glob": "^9.3.1",
+ "glob": "^10.2.2",
"lru-cache": "^7.7.1",
- "minipass": "^4.0.0",
+ "minipass": "^5.0.0",
"minipass-collect": "^1.0.2",
"minipass-flush": "^1.0.5",
"minipass-pipeline": "^1.2.4",
"p-map": "^4.0.0",
- "promise-inflight": "^1.0.1",
"ssri": "^10.0.0",
"tar": "^6.1.11",
"unique-filename": "^3.0.0"
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.12.0",
+ "@npmcli/template-oss": "4.14.1",
"tap": "^16.0.0"
},
"engines": {
@@ -70,7 +69,8 @@
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
"windowsCI": false,
- "version": "4.12.0"
+ "version": "4.14.1",
+ "publish": "true"
},
"author": "GitHub Inc.",
"tap": {
diff --git a/deps/npm/node_modules/cross-spawn/LICENSE b/deps/npm/node_modules/cross-spawn/LICENSE
new file mode 100644
index 0000000000..8407b9a30f
--- /dev/null
+++ b/deps/npm/node_modules/cross-spawn/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2018 Made With MOXY Lda <hello@moxy.studio>
+
+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/cross-spawn/index.js b/deps/npm/node_modules/cross-spawn/index.js
new file mode 100644
index 0000000000..5509742ca9
--- /dev/null
+++ b/deps/npm/node_modules/cross-spawn/index.js
@@ -0,0 +1,39 @@
+'use strict';
+
+const cp = require('child_process');
+const parse = require('./lib/parse');
+const enoent = require('./lib/enoent');
+
+function spawn(command, args, options) {
+ // Parse the arguments
+ const parsed = parse(command, args, options);
+
+ // Spawn the child process
+ const spawned = cp.spawn(parsed.command, parsed.args, parsed.options);
+
+ // Hook into child process "exit" event to emit an error if the command
+ // does not exists, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16
+ enoent.hookChildProcess(spawned, parsed);
+
+ return spawned;
+}
+
+function spawnSync(command, args, options) {
+ // Parse the arguments
+ const parsed = parse(command, args, options);
+
+ // Spawn the child process
+ const result = cp.spawnSync(parsed.command, parsed.args, parsed.options);
+
+ // Analyze if the command does not exist, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16
+ result.error = result.error || enoent.verifyENOENTSync(result.status, parsed);
+
+ return result;
+}
+
+module.exports = spawn;
+module.exports.spawn = spawn;
+module.exports.sync = spawnSync;
+
+module.exports._parse = parse;
+module.exports._enoent = enoent;
diff --git a/deps/npm/node_modules/cross-spawn/lib/enoent.js b/deps/npm/node_modules/cross-spawn/lib/enoent.js
new file mode 100644
index 0000000000..14df9b623d
--- /dev/null
+++ b/deps/npm/node_modules/cross-spawn/lib/enoent.js
@@ -0,0 +1,59 @@
+'use strict';
+
+const isWin = process.platform === 'win32';
+
+function notFoundError(original, syscall) {
+ return Object.assign(new Error(`${syscall} ${original.command} ENOENT`), {
+ code: 'ENOENT',
+ errno: 'ENOENT',
+ syscall: `${syscall} ${original.command}`,
+ path: original.command,
+ spawnargs: original.args,
+ });
+}
+
+function hookChildProcess(cp, parsed) {
+ if (!isWin) {
+ return;
+ }
+
+ const originalEmit = cp.emit;
+
+ cp.emit = function (name, arg1) {
+ // If emitting "exit" event and exit code is 1, we need to check if
+ // the command exists and emit an "error" instead
+ // See https://github.com/IndigoUnited/node-cross-spawn/issues/16
+ if (name === 'exit') {
+ const err = verifyENOENT(arg1, parsed, 'spawn');
+
+ if (err) {
+ return originalEmit.call(cp, 'error', err);
+ }
+ }
+
+ return originalEmit.apply(cp, arguments); // eslint-disable-line prefer-rest-params
+ };
+}
+
+function verifyENOENT(status, parsed) {
+ if (isWin && status === 1 && !parsed.file) {
+ return notFoundError(parsed.original, 'spawn');
+ }
+
+ return null;
+}
+
+function verifyENOENTSync(status, parsed) {
+ if (isWin && status === 1 && !parsed.file) {
+ return notFoundError(parsed.original, 'spawnSync');
+ }
+
+ return null;
+}
+
+module.exports = {
+ hookChildProcess,
+ verifyENOENT,
+ verifyENOENTSync,
+ notFoundError,
+};
diff --git a/deps/npm/node_modules/cross-spawn/lib/parse.js b/deps/npm/node_modules/cross-spawn/lib/parse.js
new file mode 100644
index 0000000000..0129d74774
--- /dev/null
+++ b/deps/npm/node_modules/cross-spawn/lib/parse.js
@@ -0,0 +1,91 @@
+'use strict';
+
+const path = require('path');
+const resolveCommand = require('./util/resolveCommand');
+const escape = require('./util/escape');
+const readShebang = require('./util/readShebang');
+
+const isWin = process.platform === 'win32';
+const isExecutableRegExp = /\.(?:com|exe)$/i;
+const isCmdShimRegExp = /node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;
+
+function detectShebang(parsed) {
+ parsed.file = resolveCommand(parsed);
+
+ const shebang = parsed.file && readShebang(parsed.file);
+
+ if (shebang) {
+ parsed.args.unshift(parsed.file);
+ parsed.command = shebang;
+
+ return resolveCommand(parsed);
+ }
+
+ return parsed.file;
+}
+
+function parseNonShell(parsed) {
+ if (!isWin) {
+ return parsed;
+ }
+
+ // Detect & add support for shebangs
+ const commandFile = detectShebang(parsed);
+
+ // We don't need a shell if the command filename is an executable
+ const needsShell = !isExecutableRegExp.test(commandFile);
+
+ // If a shell is required, use cmd.exe and take care of escaping everything correctly
+ // Note that `forceShell` is an hidden option used only in tests
+ if (parsed.options.forceShell || needsShell) {
+ // Need to double escape meta chars if the command is a cmd-shim located in `node_modules/.bin/`
+ // The cmd-shim simply calls execute the package bin file with NodeJS, proxying any argument
+ // Because the escape of metachars with ^ gets interpreted when the cmd.exe is first called,
+ // we need to double escape them
+ const needsDoubleEscapeMetaChars = isCmdShimRegExp.test(commandFile);
+
+ // Normalize posix paths into OS compatible paths (e.g.: foo/bar -> foo\bar)
+ // This is necessary otherwise it will always fail with ENOENT in those cases
+ parsed.command = path.normalize(parsed.command);
+
+ // Escape command & arguments
+ parsed.command = escape.command(parsed.command);
+ parsed.args = parsed.args.map((arg) => escape.argument(arg, needsDoubleEscapeMetaChars));
+
+ const shellCommand = [parsed.command].concat(parsed.args).join(' ');
+
+ parsed.args = ['/d', '/s', '/c', `"${shellCommand}"`];
+ parsed.command = process.env.comspec || 'cmd.exe';
+ parsed.options.windowsVerbatimArguments = true; // Tell node's spawn that the arguments are already escaped
+ }
+
+ return parsed;
+}
+
+function parse(command, args, options) {
+ // Normalize arguments, similar to nodejs
+ if (args && !Array.isArray(args)) {
+ options = args;
+ args = null;
+ }
+
+ args = args ? args.slice(0) : []; // Clone array to avoid changing the original
+ options = Object.assign({}, options); // Clone object to avoid changing the original
+
+ // Build our parsed object
+ const parsed = {
+ command,
+ args,
+ options,
+ file: undefined,
+ original: {
+ command,
+ args,
+ },
+ };
+
+ // Delegate further parsing to shell or non-shell
+ return options.shell ? parsed : parseNonShell(parsed);
+}
+
+module.exports = parse;
diff --git a/deps/npm/node_modules/cross-spawn/lib/util/escape.js b/deps/npm/node_modules/cross-spawn/lib/util/escape.js
new file mode 100644
index 0000000000..b0bb84c3a1
--- /dev/null
+++ b/deps/npm/node_modules/cross-spawn/lib/util/escape.js
@@ -0,0 +1,45 @@
+'use strict';
+
+// See http://www.robvanderwoude.com/escapechars.php
+const metaCharsRegExp = /([()\][%!^"`<>&|;, *?])/g;
+
+function escapeCommand(arg) {
+ // Escape meta chars
+ arg = arg.replace(metaCharsRegExp, '^$1');
+
+ return arg;
+}
+
+function escapeArgument(arg, doubleEscapeMetaChars) {
+ // Convert to string
+ arg = `${arg}`;
+
+ // Algorithm below is based on https://qntm.org/cmd
+
+ // Sequence of backslashes followed by a double quote:
+ // double up all the backslashes and escape the double quote
+ arg = arg.replace(/(\\*)"/g, '$1$1\\"');
+
+ // Sequence of backslashes followed by the end of the string
+ // (which will become a double quote later):
+ // double up all the backslashes
+ arg = arg.replace(/(\\*)$/, '$1$1');
+
+ // All other backslashes occur literally
+
+ // Quote the whole thing:
+ arg = `"${arg}"`;
+
+ // Escape meta chars
+ arg = arg.replace(metaCharsRegExp, '^$1');
+
+ // Double escape meta chars if necessary
+ if (doubleEscapeMetaChars) {
+ arg = arg.replace(metaCharsRegExp, '^$1');
+ }
+
+ return arg;
+}
+
+module.exports.command = escapeCommand;
+module.exports.argument = escapeArgument;
diff --git a/deps/npm/node_modules/cross-spawn/lib/util/readShebang.js b/deps/npm/node_modules/cross-spawn/lib/util/readShebang.js
new file mode 100644
index 0000000000..5e83733fef
--- /dev/null
+++ b/deps/npm/node_modules/cross-spawn/lib/util/readShebang.js
@@ -0,0 +1,23 @@
+'use strict';
+
+const fs = require('fs');
+const shebangCommand = require('shebang-command');
+
+function readShebang(command) {
+ // Read the first 150 bytes from the file
+ const size = 150;
+ const buffer = Buffer.alloc(size);
+
+ let fd;
+
+ try {
+ fd = fs.openSync(command, 'r');
+ fs.readSync(fd, buffer, 0, size, 0);
+ fs.closeSync(fd);
+ } catch (e) { /* Empty */ }
+
+ // Attempt to extract shebang (null is returned if not a shebang)
+ return shebangCommand(buffer.toString());
+}
+
+module.exports = readShebang;
diff --git a/deps/npm/node_modules/cross-spawn/lib/util/resolveCommand.js b/deps/npm/node_modules/cross-spawn/lib/util/resolveCommand.js
new file mode 100644
index 0000000000..7972455008
--- /dev/null
+++ b/deps/npm/node_modules/cross-spawn/lib/util/resolveCommand.js
@@ -0,0 +1,52 @@
+'use strict';
+
+const path = require('path');
+const which = require('which');
+const getPathKey = require('path-key');
+
+function resolveCommandAttempt(parsed, withoutPathExt) {
+ const env = parsed.options.env || process.env;
+ const cwd = process.cwd();
+ const hasCustomCwd = parsed.options.cwd != null;
+ // Worker threads do not have process.chdir()
+ const shouldSwitchCwd = hasCustomCwd && process.chdir !== undefined && !process.chdir.disabled;
+
+ // If a custom `cwd` was specified, we need to change the process cwd
+ // because `which` will do stat calls but does not support a custom cwd
+ if (shouldSwitchCwd) {
+ try {
+ process.chdir(parsed.options.cwd);
+ } catch (err) {
+ /* Empty */
+ }
+ }
+
+ let resolved;
+
+ try {
+ resolved = which.sync(parsed.command, {
+ path: env[getPathKey({ env })],
+ pathExt: withoutPathExt ? path.delimiter : undefined,
+ });
+ } catch (e) {
+ /* Empty */
+ } finally {
+ if (shouldSwitchCwd) {
+ process.chdir(cwd);
+ }
+ }
+
+ // If we successfully resolved, ensure that an absolute path is returned
+ // Note that when a custom `cwd` was used, we need to resolve to an absolute path based on it
+ if (resolved) {
+ resolved = path.resolve(hasCustomCwd ? parsed.options.cwd : '', resolved);
+ }
+
+ return resolved;
+}
+
+function resolveCommand(parsed) {
+ return resolveCommandAttempt(parsed) || resolveCommandAttempt(parsed, true);
+}
+
+module.exports = resolveCommand;
diff --git a/deps/npm/node_modules/cross-spawn/node_modules/which/LICENSE b/deps/npm/node_modules/cross-spawn/node_modules/which/LICENSE
new file mode 100644
index 0000000000..19129e315f
--- /dev/null
+++ b/deps/npm/node_modules/cross-spawn/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/cross-spawn/node_modules/which/README.md b/deps/npm/node_modules/cross-spawn/node_modules/which/README.md
new file mode 100644
index 0000000000..cd833509f3
--- /dev/null
+++ b/deps/npm/node_modules/cross-spawn/node_modules/which/README.md
@@ -0,0 +1,54 @@
+# 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
+var which = require('which')
+
+// async usage
+which('node', function (er, resolvedPath) {
+ // er is returned if no "node" is found on the PATH
+ // if it is found, then the absolute path to the exec is returned
+})
+
+// or promise
+which('node').then(resolvedPath => { ... }).catch(er => { ... not found ... })
+
+// sync usage
+// throws if not found
+var resolved = which.sync('node')
+
+// if nothrow option is used, returns null if not found
+resolved = which.sync('node', {nothrow: true})
+
+// Pass options to override the PATH and PATHEXT environment vars.
+which('node', { path: someOtherPath }, function (er, resolved) {
+ if (er)
+ throw er
+ console.log('found at %j', resolved)
+})
+```
+
+## CLI USAGE
+
+Same as the BSD `which(1)` binary.
+
+```
+usage: which [-as] program ...
+```
+
+## 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/cross-spawn/node_modules/which/bin/node-which b/deps/npm/node_modules/cross-spawn/node_modules/which/bin/node-which
new file mode 100755
index 0000000000..7cee3729ee
--- /dev/null
+++ b/deps/npm/node_modules/cross-spawn/node_modules/which/bin/node-which
@@ -0,0 +1,52 @@
+#!/usr/bin/env node
+var which = require("../")
+if (process.argv.length < 3)
+ usage()
+
+function usage () {
+ console.error('usage: which [-as] program ...')
+ process.exit(1)
+}
+
+var all = false
+var silent = false
+var dashdash = false
+var args = process.argv.slice(2).filter(function (arg) {
+ if (dashdash || !/^-/.test(arg))
+ return true
+
+ if (arg === '--') {
+ dashdash = true
+ return false
+ }
+
+ var flags = arg.substr(1).split('')
+ for (var f = 0; f < flags.length; f++) {
+ var flag = flags[f]
+ switch (flag) {
+ case 's':
+ silent = true
+ break
+ case 'a':
+ all = true
+ break
+ default:
+ console.error('which: illegal option -- ' + flag)
+ usage()
+ }
+ }
+ return false
+})
+
+process.exit(args.reduce(function (pv, current) {
+ try {
+ var f = which.sync(current, { all: all })
+ if (all)
+ f = f.join('\n')
+ if (!silent)
+ console.log(f)
+ return pv;
+ } catch (e) {
+ return 1;
+ }
+}, 0))
diff --git a/deps/npm/node_modules/cross-spawn/node_modules/which/package.json b/deps/npm/node_modules/cross-spawn/node_modules/which/package.json
new file mode 100644
index 0000000000..97ad7fbabc
--- /dev/null
+++ b/deps/npm/node_modules/cross-spawn/node_modules/which/package.json
@@ -0,0 +1,43 @@
+{
+ "author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me)",
+ "name": "which",
+ "description": "Like which(1) unix command. Find the first instance of an executable in the PATH.",
+ "version": "2.0.2",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/isaacs/node-which.git"
+ },
+ "main": "which.js",
+ "bin": {
+ "node-which": "./bin/node-which"
+ },
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "devDependencies": {
+ "mkdirp": "^0.5.0",
+ "rimraf": "^2.6.2",
+ "tap": "^14.6.9"
+ },
+ "scripts": {
+ "test": "tap",
+ "preversion": "npm test",
+ "postversion": "npm publish",
+ "prepublish": "npm run changelog",
+ "prechangelog": "bash gen-changelog.sh",
+ "changelog": "git add CHANGELOG.md",
+ "postchangelog": "git commit -m 'update changelog - '${npm_package_version}",
+ "postpublish": "git push origin --follow-tags"
+ },
+ "files": [
+ "which.js",
+ "bin/node-which"
+ ],
+ "tap": {
+ "check-coverage": true
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+}
diff --git a/deps/npm/node_modules/cross-spawn/node_modules/which/which.js b/deps/npm/node_modules/cross-spawn/node_modules/which/which.js
new file mode 100644
index 0000000000..82afffd214
--- /dev/null
+++ b/deps/npm/node_modules/cross-spawn/node_modules/which/which.js
@@ -0,0 +1,125 @@
+const isWindows = process.platform === 'win32' ||
+ process.env.OSTYPE === 'cygwin' ||
+ process.env.OSTYPE === 'msys'
+
+const path = require('path')
+const COLON = isWindows ? ';' : ':'
+const isexe = require('isexe')
+
+const getNotFoundError = (cmd) =>
+ Object.assign(new Error(`not found: ${cmd}`), { code: 'ENOENT' })
+
+const getPathInfo = (cmd, opt) => {
+ const colon = opt.colon || COLON
+
+ // 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(/\//) || isWindows && cmd.match(/\\/) ? ['']
+ : (
+ [
+ // windows always checks the cwd first
+ ...(isWindows ? [process.cwd()] : []),
+ ...(opt.path || process.env.PATH ||
+ /* istanbul ignore next: very unusual */ '').split(colon),
+ ]
+ )
+ const pathExtExe = isWindows
+ ? opt.pathExt || process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM'
+ : ''
+ const pathExt = isWindows ? pathExtExe.split(colon) : ['']
+
+ if (isWindows) {
+ if (cmd.indexOf('.') !== -1 && pathExt[0] !== '')
+ pathExt.unshift('')
+ }
+
+ return {
+ pathEnv,
+ pathExt,
+ pathExtExe,
+ }
+}
+
+const which = (cmd, opt, cb) => {
+ if (typeof opt === 'function') {
+ cb = opt
+ opt = {}
+ }
+ if (!opt)
+ opt = {}
+
+ const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt)
+ const found = []
+
+ const step = i => new Promise((resolve, reject) => {
+ if (i === pathEnv.length)
+ return opt.all && found.length ? resolve(found)
+ : reject(getNotFoundError(cmd))
+
+ const ppRaw = pathEnv[i]
+ const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw
+
+ const pCmd = path.join(pathPart, cmd)
+ const p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd
+ : pCmd
+
+ resolve(subStep(p, i, 0))
+ })
+
+ const subStep = (p, i, ii) => new Promise((resolve, reject) => {
+ if (ii === pathExt.length)
+ return resolve(step(i + 1))
+ const ext = pathExt[ii]
+ isexe(p + ext, { pathExt: pathExtExe }, (er, is) => {
+ if (!er && is) {
+ if (opt.all)
+ found.push(p + ext)
+ else
+ return resolve(p + ext)
+ }
+ return resolve(subStep(p, i, ii + 1))
+ })
+ })
+
+ return cb ? step(0).then(res => cb(null, res), cb) : step(0)
+}
+
+const whichSync = (cmd, opt) => {
+ opt = opt || {}
+
+ const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt)
+ const found = []
+
+ for (let i = 0; i < pathEnv.length; i ++) {
+ const ppRaw = pathEnv[i]
+ const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw
+
+ const pCmd = path.join(pathPart, cmd)
+ const p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd
+ : pCmd
+
+ for (let j = 0; j < pathExt.length; j ++) {
+ const cur = p + pathExt[j]
+ try {
+ const is = isexe.sync(cur, { pathExt: pathExtExe })
+ if (is) {
+ if (opt.all)
+ found.push(cur)
+ else
+ return cur
+ }
+ } catch (ex) {}
+ }
+ }
+
+ 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/cross-spawn/package.json b/deps/npm/node_modules/cross-spawn/package.json
new file mode 100644
index 0000000000..232ff97e04
--- /dev/null
+++ b/deps/npm/node_modules/cross-spawn/package.json
@@ -0,0 +1,73 @@
+{
+ "name": "cross-spawn",
+ "version": "7.0.3",
+ "description": "Cross platform child_process#spawn and child_process#spawnSync",
+ "keywords": [
+ "spawn",
+ "spawnSync",
+ "windows",
+ "cross-platform",
+ "path-ext",
+ "shebang",
+ "cmd",
+ "execute"
+ ],
+ "author": "André Cruz <andre@moxy.studio>",
+ "homepage": "https://github.com/moxystudio/node-cross-spawn",
+ "repository": {
+ "type": "git",
+ "url": "git@github.com:moxystudio/node-cross-spawn.git"
+ },
+ "license": "MIT",
+ "main": "index.js",
+ "files": [
+ "lib"
+ ],
+ "scripts": {
+ "lint": "eslint .",
+ "test": "jest --env node --coverage",
+ "prerelease": "npm t && npm run lint",
+ "release": "standard-version",
+ "postrelease": "git push --follow-tags origin HEAD && npm publish"
+ },
+ "husky": {
+ "hooks": {
+ "commit-msg": "commitlint -E HUSKY_GIT_PARAMS",
+ "pre-commit": "lint-staged"
+ }
+ },
+ "lint-staged": {
+ "*.js": [
+ "eslint --fix",
+ "git add"
+ ]
+ },
+ "commitlint": {
+ "extends": [
+ "@commitlint/config-conventional"
+ ]
+ },
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "devDependencies": {
+ "@commitlint/cli": "^8.1.0",
+ "@commitlint/config-conventional": "^8.1.0",
+ "babel-core": "^6.26.3",
+ "babel-jest": "^24.9.0",
+ "babel-preset-moxy": "^3.1.0",
+ "eslint": "^5.16.0",
+ "eslint-config-moxy": "^7.1.0",
+ "husky": "^3.0.5",
+ "jest": "^24.9.0",
+ "lint-staged": "^9.2.5",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^3.0.0",
+ "standard-version": "^7.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+}
diff --git a/deps/npm/node_modules/eastasianwidth/eastasianwidth.js b/deps/npm/node_modules/eastasianwidth/eastasianwidth.js
new file mode 100644
index 0000000000..7d0aa0f6ec
--- /dev/null
+++ b/deps/npm/node_modules/eastasianwidth/eastasianwidth.js
@@ -0,0 +1,311 @@
+var eaw = {};
+
+if ('undefined' == typeof module) {
+ window.eastasianwidth = eaw;
+} else {
+ module.exports = eaw;
+}
+
+eaw.eastAsianWidth = function(character) {
+ var x = character.charCodeAt(0);
+ var y = (character.length == 2) ? character.charCodeAt(1) : 0;
+ var codePoint = x;
+ if ((0xD800 <= x && x <= 0xDBFF) && (0xDC00 <= y && y <= 0xDFFF)) {
+ x &= 0x3FF;
+ y &= 0x3FF;
+ codePoint = (x << 10) | y;
+ codePoint += 0x10000;
+ }
+
+ if ((0x3000 == codePoint) ||
+ (0xFF01 <= codePoint && codePoint <= 0xFF60) ||
+ (0xFFE0 <= codePoint && codePoint <= 0xFFE6)) {
+ return 'F';
+ }
+ if ((0x20A9 == codePoint) ||
+ (0xFF61 <= codePoint && codePoint <= 0xFFBE) ||
+ (0xFFC2 <= codePoint && codePoint <= 0xFFC7) ||
+ (0xFFCA <= codePoint && codePoint <= 0xFFCF) ||
+ (0xFFD2 <= codePoint && codePoint <= 0xFFD7) ||
+ (0xFFDA <= codePoint && codePoint <= 0xFFDC) ||
+ (0xFFE8 <= codePoint && codePoint <= 0xFFEE)) {
+ return 'H';
+ }
+ if ((0x1100 <= codePoint && codePoint <= 0x115F) ||
+ (0x11A3 <= codePoint && codePoint <= 0x11A7) ||
+ (0x11FA <= codePoint && codePoint <= 0x11FF) ||
+ (0x2329 <= codePoint && codePoint <= 0x232A) ||
+ (0x2E80 <= codePoint && codePoint <= 0x2E99) ||
+ (0x2E9B <= codePoint && codePoint <= 0x2EF3) ||
+ (0x2F00 <= codePoint && codePoint <= 0x2FD5) ||
+ (0x2FF0 <= codePoint && codePoint <= 0x2FFB) ||
+ (0x3001 <= codePoint && codePoint <= 0x303E) ||
+ (0x3041 <= codePoint && codePoint <= 0x3096) ||
+ (0x3099 <= codePoint && codePoint <= 0x30FF) ||
+ (0x3105 <= codePoint && codePoint <= 0x312D) ||
+ (0x3131 <= codePoint && codePoint <= 0x318E) ||
+ (0x3190 <= codePoint && codePoint <= 0x31BA) ||
+ (0x31C0 <= codePoint && codePoint <= 0x31E3) ||
+ (0x31F0 <= codePoint && codePoint <= 0x321E) ||
+ (0x3220 <= codePoint && codePoint <= 0x3247) ||
+ (0x3250 <= codePoint && codePoint <= 0x32FE) ||
+ (0x3300 <= codePoint && codePoint <= 0x4DBF) ||
+ (0x4E00 <= codePoint && codePoint <= 0xA48C) ||
+ (0xA490 <= codePoint && codePoint <= 0xA4C6) ||
+ (0xA960 <= codePoint && codePoint <= 0xA97C) ||
+ (0xAC00 <= codePoint && codePoint <= 0xD7A3) ||
+ (0xD7B0 <= codePoint && codePoint <= 0xD7C6) ||
+ (0xD7CB <= codePoint && codePoint <= 0xD7FB) ||
+ (0xF900 <= codePoint && codePoint <= 0xFAFF) ||
+ (0xFE10 <= codePoint && codePoint <= 0xFE19) ||
+ (0xFE30 <= codePoint && codePoint <= 0xFE52) ||
+ (0xFE54 <= codePoint && codePoint <= 0xFE66) ||
+ (0xFE68 <= codePoint && codePoint <= 0xFE6B) ||
+ (0x1B000 <= codePoint && codePoint <= 0x1B001) ||
+ (0x1F200 <= codePoint && codePoint <= 0x1F202) ||
+ (0x1F210 <= codePoint && codePoint <= 0x1F23A) ||
+ (0x1F240 <= codePoint && codePoint <= 0x1F248) ||
+ (0x1F250 <= codePoint && codePoint <= 0x1F251) ||
+ (0x20000 <= codePoint && codePoint <= 0x2F73F) ||
+ (0x2B740 <= codePoint && codePoint <= 0x2FFFD) ||
+ (0x30000 <= codePoint && codePoint <= 0x3FFFD)) {
+ return 'W';
+ }
+ if ((0x0020 <= codePoint && codePoint <= 0x007E) ||
+ (0x00A2 <= codePoint && codePoint <= 0x00A3) ||
+ (0x00A5 <= codePoint && codePoint <= 0x00A6) ||
+ (0x00AC == codePoint) ||
+ (0x00AF == codePoint) ||
+ (0x27E6 <= codePoint && codePoint <= 0x27ED) ||
+ (0x2985 <= codePoint && codePoint <= 0x2986)) {
+ return 'Na';
+ }
+ if ((0x00A1 == codePoint) ||
+ (0x00A4 == codePoint) ||
+ (0x00A7 <= codePoint && codePoint <= 0x00A8) ||
+ (0x00AA == codePoint) ||
+ (0x00AD <= codePoint && codePoint <= 0x00AE) ||
+ (0x00B0 <= codePoint && codePoint <= 0x00B4) ||
+ (0x00B6 <= codePoint && codePoint <= 0x00BA) ||
+ (0x00BC <= codePoint && codePoint <= 0x00BF) ||
+ (0x00C6 == codePoint) ||
+ (0x00D0 == codePoint) ||
+ (0x00D7 <= codePoint && codePoint <= 0x00D8) ||
+ (0x00DE <= codePoint && codePoint <= 0x00E1) ||
+ (0x00E6 == codePoint) ||
+ (0x00E8 <= codePoint && codePoint <= 0x00EA) ||
+ (0x00EC <= codePoint && codePoint <= 0x00ED) ||
+ (0x00F0 == codePoint) ||
+ (0x00F2 <= codePoint && codePoint <= 0x00F3) ||
+ (0x00F7 <= codePoint && codePoint <= 0x00FA) ||
+ (0x00FC == codePoint) ||
+ (0x00FE == codePoint) ||
+ (0x0101 == codePoint) ||
+ (0x0111 == codePoint) ||
+ (0x0113 == codePoint) ||
+ (0x011B == codePoint) ||
+ (0x0126 <= codePoint && codePoint <= 0x0127) ||
+ (0x012B == codePoint) ||
+ (0x0131 <= codePoint && codePoint <= 0x0133) ||
+ (0x0138 == codePoint) ||
+ (0x013F <= codePoint && codePoint <= 0x0142) ||
+ (0x0144 == codePoint) ||
+ (0x0148 <= codePoint && codePoint <= 0x014B) ||
+ (0x014D == codePoint) ||
+ (0x0152 <= codePoint && codePoint <= 0x0153) ||
+ (0x0166 <= codePoint && codePoint <= 0x0167) ||
+ (0x016B == codePoint) ||
+ (0x01CE == codePoint) ||
+ (0x01D0 == codePoint) ||
+ (0x01D2 == codePoint) ||
+ (0x01D4 == codePoint) ||
+ (0x01D6 == codePoint) ||
+ (0x01D8 == codePoint) ||
+ (0x01DA == codePoint) ||
+ (0x01DC == codePoint) ||
+ (0x0251 == codePoint) ||
+ (0x0261 == codePoint) ||
+ (0x02C4 == codePoint) ||
+ (0x02C7 == codePoint) ||
+ (0x02C9 <= codePoint && codePoint <= 0x02CB) ||
+ (0x02CD == codePoint) ||
+ (0x02D0 == codePoint) ||
+ (0x02D8 <= codePoint && codePoint <= 0x02DB) ||
+ (0x02DD == codePoint) ||
+ (0x02DF == codePoint) ||
+ (0x0300 <= codePoint && codePoint <= 0x036F) ||
+ (0x0391 <= codePoint && codePoint <= 0x03A1) ||
+ (0x03A3 <= codePoint && codePoint <= 0x03A9) ||
+ (0x03B1 <= codePoint && codePoint <= 0x03C1) ||
+ (0x03C3 <= codePoint && codePoint <= 0x03C9) ||
+ (0x0401 == codePoint) ||
+ (0x0410 <= codePoint && codePoint <= 0x044F) ||
+ (0x0451 == codePoint) ||
+ (0x2010 == codePoint) ||
+ (0x2013 <= codePoint && codePoint <= 0x2016) ||
+ (0x2018 <= codePoint && codePoint <= 0x2019) ||
+ (0x201C <= codePoint && codePoint <= 0x201D) ||
+ (0x2020 <= codePoint && codePoint <= 0x2022) ||
+ (0x2024 <= codePoint && codePoint <= 0x2027) ||
+ (0x2030 == codePoint) ||
+ (0x2032 <= codePoint && codePoint <= 0x2033) ||
+ (0x2035 == codePoint) ||
+ (0x203B == codePoint) ||
+ (0x203E == codePoint) ||
+ (0x2074 == codePoint) ||
+ (0x207F == codePoint) ||
+ (0x2081 <= codePoint && codePoint <= 0x2084) ||
+ (0x20AC == codePoint) ||
+ (0x2103 == codePoint) ||
+ (0x2105 == codePoint) ||
+ (0x2109 == codePoint) ||
+ (0x2113 == codePoint) ||
+ (0x2116 == codePoint) ||
+ (0x2121 <= codePoint && codePoint <= 0x2122) ||
+ (0x2126 == codePoint) ||
+ (0x212B == codePoint) ||
+ (0x2153 <= codePoint && codePoint <= 0x2154) ||
+ (0x215B <= codePoint && codePoint <= 0x215E) ||
+ (0x2160 <= codePoint && codePoint <= 0x216B) ||
+ (0x2170 <= codePoint && codePoint <= 0x2179) ||
+ (0x2189 == codePoint) ||
+ (0x2190 <= codePoint && codePoint <= 0x2199) ||
+ (0x21B8 <= codePoint && codePoint <= 0x21B9) ||
+ (0x21D2 == codePoint) ||
+ (0x21D4 == codePoint) ||
+ (0x21E7 == codePoint) ||
+ (0x2200 == codePoint) ||
+ (0x2202 <= codePoint && codePoint <= 0x2203) ||
+ (0x2207 <= codePoint && codePoint <= 0x2208) ||
+ (0x220B == codePoint) ||
+ (0x220F == codePoint) ||
+ (0x2211 == codePoint) ||
+ (0x2215 == codePoint) ||
+ (0x221A == codePoint) ||
+ (0x221D <= codePoint && codePoint <= 0x2220) ||
+ (0x2223 == codePoint) ||
+ (0x2225 == codePoint) ||
+ (0x2227 <= codePoint && codePoint <= 0x222C) ||
+ (0x222E == codePoint) ||
+ (0x2234 <= codePoint && codePoint <= 0x2237) ||
+ (0x223C <= codePoint && codePoint <= 0x223D) ||
+ (0x2248 == codePoint) ||
+ (0x224C == codePoint) ||
+ (0x2252 == codePoint) ||
+ (0x2260 <= codePoint && codePoint <= 0x2261) ||
+ (0x2264 <= codePoint && codePoint <= 0x2267) ||
+ (0x226A <= codePoint && codePoint <= 0x226B) ||
+ (0x226E <= codePoint && codePoint <= 0x226F) ||
+ (0x2282 <= codePoint && codePoint <= 0x2283) ||
+ (0x2286 <= codePoint && codePoint <= 0x2287) ||
+ (0x2295 == codePoint) ||
+ (0x2299 == codePoint) ||
+ (0x22A5 == codePoint) ||
+ (0x22BF == codePoint) ||
+ (0x2312 == codePoint) ||
+ (0x2460 <= codePoint && codePoint <= 0x24E9) ||
+ (0x24EB <= codePoint && codePoint <= 0x254B) ||
+ (0x2550 <= codePoint && codePoint <= 0x2573) ||
+ (0x2580 <= codePoint && codePoint <= 0x258F) ||
+ (0x2592 <= codePoint && codePoint <= 0x2595) ||
+ (0x25A0 <= codePoint && codePoint <= 0x25A1) ||
+ (0x25A3 <= codePoint && codePoint <= 0x25A9) ||
+ (0x25B2 <= codePoint && codePoint <= 0x25B3) ||
+ (0x25B6 <= codePoint && codePoint <= 0x25B7) ||
+ (0x25BC <= codePoint && codePoint <= 0x25BD) ||
+ (0x25C0 <= codePoint && codePoint <= 0x25C1) ||
+ (0x25C6 <= codePoint && codePoint <= 0x25C8) ||
+ (0x25CB == codePoint) ||
+ (0x25CE <= codePoint && codePoint <= 0x25D1) ||
+ (0x25E2 <= codePoint && codePoint <= 0x25E5) ||
+ (0x25EF == codePoint) ||
+ (0x2605 <= codePoint && codePoint <= 0x2606) ||
+ (0x2609 == codePoint) ||
+ (0x260E <= codePoint && codePoint <= 0x260F) ||
+ (0x2614 <= codePoint && codePoint <= 0x2615) ||
+ (0x261C == codePoint) ||
+ (0x261E == codePoint) ||
+ (0x2640 == codePoint) ||
+ (0x2642 == codePoint) ||
+ (0x2660 <= codePoint && codePoint <= 0x2661) ||
+ (0x2663 <= codePoint && codePoint <= 0x2665) ||
+ (0x2667 <= codePoint && codePoint <= 0x266A) ||
+ (0x266C <= codePoint && codePoint <= 0x266D) ||
+ (0x266F == codePoint) ||
+ (0x269E <= codePoint && codePoint <= 0x269F) ||
+ (0x26BE <= codePoint && codePoint <= 0x26BF) ||
+ (0x26C4 <= codePoint && codePoint <= 0x26CD) ||
+ (0x26CF <= codePoint && codePoint <= 0x26E1) ||
+ (0x26E3 == codePoint) ||
+ (0x26E8 <= codePoint && codePoint <= 0x26FF) ||
+ (0x273D == codePoint) ||
+ (0x2757 == codePoint) ||
+ (0x2776 <= codePoint && codePoint <= 0x277F) ||
+ (0x2B55 <= codePoint && codePoint <= 0x2B59) ||
+ (0x3248 <= codePoint && codePoint <= 0x324F) ||
+ (0xE000 <= codePoint && codePoint <= 0xF8FF) ||
+ (0xFE00 <= codePoint && codePoint <= 0xFE0F) ||
+ (0xFFFD == codePoint) ||
+ (0x1F100 <= codePoint && codePoint <= 0x1F10A) ||
+ (0x1F110 <= codePoint && codePoint <= 0x1F12D) ||
+ (0x1F130 <= codePoint && codePoint <= 0x1F169) ||
+ (0x1F170 <= codePoint && codePoint <= 0x1F19A) ||
+ (0xE0100 <= codePoint && codePoint <= 0xE01EF) ||
+ (0xF0000 <= codePoint && codePoint <= 0xFFFFD) ||
+ (0x100000 <= codePoint && codePoint <= 0x10FFFD)) {
+ return 'A';
+ }
+
+ return 'N';
+};
+
+eaw.characterLength = function(character) {
+ var code = this.eastAsianWidth(character);
+ if (code == 'F' || code == 'W' || code == 'A') {
+ return 2;
+ } else {
+ return 1;
+ }
+};
+
+// Split a string considering surrogate-pairs.
+function stringToArray(string) {
+ return string.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g) || [];
+}
+
+eaw.length = function(string) {
+ var characters = stringToArray(string);
+ var len = 0;
+ for (var i = 0; i < characters.length; i++) {
+ len = len + this.characterLength(characters[i]);
+ }
+ return len;
+};
+
+eaw.slice = function(text, start, end) {
+ textLen = eaw.length(text)
+ start = start ? start : 0;
+ end = end ? end : 1;
+ if (start < 0) {
+ start = textLen + start;
+ }
+ if (end < 0) {
+ end = textLen + end;
+ }
+ var result = '';
+ var eawLen = 0;
+ var chars = stringToArray(text);
+ for (var i = 0; i < chars.length; i++) {
+ var char = chars[i];
+ var charLen = eaw.length(char);
+ if (eawLen >= start - (charLen == 2 ? 1 : 0)) {
+ if (eawLen + charLen <= end) {
+ result += char;
+ } else {
+ break;
+ }
+ }
+ eawLen += charLen;
+ }
+ return result;
+};
diff --git a/deps/npm/node_modules/eastasianwidth/package.json b/deps/npm/node_modules/eastasianwidth/package.json
new file mode 100644
index 0000000000..cb7ac6ab3b
--- /dev/null
+++ b/deps/npm/node_modules/eastasianwidth/package.json
@@ -0,0 +1,18 @@
+{
+ "name": "eastasianwidth",
+ "version": "0.2.0",
+ "description": "Get East Asian Width from a character.",
+ "main": "eastasianwidth.js",
+ "files": [
+ "eastasianwidth.js"
+ ],
+ "scripts": {
+ "test": "mocha"
+ },
+ "repository": "git://github.com/komagata/eastasianwidth.git",
+ "author": "Masaki Komagata",
+ "license": "MIT",
+ "devDependencies": {
+ "mocha": "~1.9.0"
+ }
+}
diff --git a/deps/npm/node_modules/foreground-child/LICENSE b/deps/npm/node_modules/foreground-child/LICENSE
new file mode 100644
index 0000000000..2d80720fe6
--- /dev/null
+++ b/deps/npm/node_modules/foreground-child/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) 2015-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/foreground-child/dist/cjs/all-signals.js b/deps/npm/node_modules/foreground-child/dist/cjs/all-signals.js
new file mode 100644
index 0000000000..b5ee4638bb
--- /dev/null
+++ b/deps/npm/node_modules/foreground-child/dist/cjs/all-signals.js
@@ -0,0 +1,58 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.allSignals = void 0;
+const node_constants_1 = __importDefault(require("node:constants"));
+exports.allSignals =
+// this is the full list of signals that Node will let us do anything with
+Object.keys(node_constants_1.default).filter(k => k.startsWith('SIG') &&
+ // https://github.com/tapjs/signal-exit/issues/21
+ k !== 'SIGPROF' &&
+ // no sense trying to listen for SIGKILL, it's impossible
+ k !== 'SIGKILL');
+// These are some obscure signals that are reported by kill -l
+// on macOS, Linux, or Windows, but which don't have any mapping
+// in Node.js. No sense trying if they're just going to throw
+// every time on every platform.
+//
+// 'SIGEMT',
+// 'SIGLOST',
+// 'SIGPOLL',
+// 'SIGRTMAX',
+// 'SIGRTMAX-1',
+// 'SIGRTMAX-10',
+// 'SIGRTMAX-11',
+// 'SIGRTMAX-12',
+// 'SIGRTMAX-13',
+// 'SIGRTMAX-14',
+// 'SIGRTMAX-15',
+// 'SIGRTMAX-2',
+// 'SIGRTMAX-3',
+// 'SIGRTMAX-4',
+// 'SIGRTMAX-5',
+// 'SIGRTMAX-6',
+// 'SIGRTMAX-7',
+// 'SIGRTMAX-8',
+// 'SIGRTMAX-9',
+// 'SIGRTMIN',
+// 'SIGRTMIN+1',
+// 'SIGRTMIN+10',
+// 'SIGRTMIN+11',
+// 'SIGRTMIN+12',
+// 'SIGRTMIN+13',
+// 'SIGRTMIN+14',
+// 'SIGRTMIN+15',
+// 'SIGRTMIN+16',
+// 'SIGRTMIN+2',
+// 'SIGRTMIN+3',
+// 'SIGRTMIN+4',
+// 'SIGRTMIN+5',
+// 'SIGRTMIN+6',
+// 'SIGRTMIN+7',
+// 'SIGRTMIN+8',
+// 'SIGRTMIN+9',
+// 'SIGSTKFLT',
+// 'SIGUNUSED',
+//# sourceMappingURL=all-signals.js.map \ No newline at end of file
diff --git a/deps/npm/node_modules/foreground-child/dist/cjs/index.js b/deps/npm/node_modules/foreground-child/dist/cjs/index.js
new file mode 100644
index 0000000000..d522c981fa
--- /dev/null
+++ b/deps/npm/node_modules/foreground-child/dist/cjs/index.js
@@ -0,0 +1,154 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.foregroundChild = exports.normalizeFgArgs = void 0;
+const child_process_1 = require("child_process");
+const cross_spawn_1 = __importDefault(require("cross-spawn"));
+const signal_exit_1 = require("signal-exit");
+const all_signals_js_1 = require("./all-signals.js");
+const watchdog_js_1 = require("./watchdog.js");
+/* c8 ignore start */
+const spawn = process?.platform === 'win32' ? cross_spawn_1.default : child_process_1.spawn;
+/**
+ * Normalizes the arguments passed to `foregroundChild`.
+ *
+ * Exposed for testing.
+ *
+ * @internal
+ */
+const normalizeFgArgs = (fgArgs) => {
+ let [program, args = [], spawnOpts = {}, cleanup = () => { }] = fgArgs;
+ if (typeof args === 'function') {
+ cleanup = args;
+ spawnOpts = {};
+ args = [];
+ }
+ else if (!!args && typeof args === 'object' && !Array.isArray(args)) {
+ if (typeof spawnOpts === 'function')
+ cleanup = spawnOpts;
+ spawnOpts = args;
+ args = [];
+ }
+ else if (typeof spawnOpts === 'function') {
+ cleanup = spawnOpts;
+ spawnOpts = {};
+ }
+ if (Array.isArray(program)) {
+ const [pp, ...pa] = program;
+ program = pp;
+ args = pa;
+ }
+ return [program, args, { ...spawnOpts }, cleanup];
+};
+exports.normalizeFgArgs = normalizeFgArgs;
+function foregroundChild(...fgArgs) {
+ const [program, args, spawnOpts, cleanup] = (0, exports.normalizeFgArgs)(fgArgs);
+ spawnOpts.stdio = [0, 1, 2];
+ if (process.send) {
+ spawnOpts.stdio.push('ipc');
+ }
+ const child = spawn(program, args, spawnOpts);
+ const unproxySignals = proxySignals(child);
+ const childHangup = () => {
+ try {
+ child.kill('SIGHUP');
+ /* c8 ignore start */
+ }
+ catch (_) {
+ // SIGHUP is weird on windows
+ child.kill('SIGTERM');
+ }
+ /* c8 ignore stop */
+ };
+ const removeOnExit = (0, signal_exit_1.onExit)(childHangup);
+ const dog = (0, watchdog_js_1.watchdog)(child);
+ let done = false;
+ child.on('close', async (code, signal) => {
+ dog.kill('SIGKILL');
+ /* c8 ignore start */
+ if (done) {
+ return;
+ }
+ /* c8 ignore stop */
+ done = true;
+ const result = cleanup(code, signal);
+ const res = isPromise(result) ? await result : result;
+ removeOnExit();
+ unproxySignals();
+ if (res === false)
+ return;
+ else if (typeof res === 'string') {
+ signal = res;
+ code = null;
+ }
+ else if (typeof res === 'number') {
+ code = res;
+ signal = null;
+ }
+ if (signal) {
+ // If there is nothing else keeping the event loop alive,
+ // then there's a race between a graceful exit and getting
+ // the signal to this process. Put this timeout here to
+ // make sure we're still alive to get the signal, and thus
+ // exit with the intended signal code.
+ /* istanbul ignore next */
+ setTimeout(() => { }, 2000);
+ try {
+ process.kill(process.pid, signal);
+ /* c8 ignore start */
+ }
+ catch (_) {
+ process.kill(process.pid, 'SIGTERM');
+ }
+ /* c8 ignore stop */
+ }
+ else {
+ process.exit(code || 0);
+ }
+ });
+ if (process.send) {
+ process.removeAllListeners('message');
+ child.on('message', (message, sendHandle) => {
+ process.send?.(message, sendHandle);
+ });
+ process.on('message', (message, sendHandle) => {
+ child.send(message, sendHandle);
+ });
+ }
+ return child;
+}
+exports.foregroundChild = foregroundChild;
+/**
+ * Starts forwarding signals to `child` through `parent`.
+ */
+const proxySignals = (child) => {
+ const listeners = new Map();
+ for (const sig of all_signals_js_1.allSignals) {
+ const listener = () => {
+ // some signals can only be received, not sent
+ try {
+ child.kill(sig);
+ /* c8 ignore start */
+ }
+ catch (_) { }
+ /* c8 ignore stop */
+ };
+ try {
+ // if it's a signal this system doesn't recognize, skip it
+ process.on(sig, listener);
+ listeners.set(sig, listener);
+ /* c8 ignore start */
+ }
+ catch (_) { }
+ /* c8 ignore stop */
+ }
+ return () => {
+ for (const [sig, listener] of listeners) {
+ process.removeListener(sig, listener);
+ }
+ };
+};
+const isPromise = (o) => !!o && typeof o === 'object' && typeof o.then === 'function';
+//# sourceMappingURL=index.js.map \ No newline at end of file
diff --git a/deps/npm/node_modules/foreground-child/dist/cjs/package.json b/deps/npm/node_modules/foreground-child/dist/cjs/package.json
new file mode 100644
index 0000000000..5bbefffbab
--- /dev/null
+++ b/deps/npm/node_modules/foreground-child/dist/cjs/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "commonjs"
+}
diff --git a/deps/npm/node_modules/foreground-child/dist/cjs/watchdog.js b/deps/npm/node_modules/foreground-child/dist/cjs/watchdog.js
new file mode 100644
index 0000000000..5f553ac1ae
--- /dev/null
+++ b/deps/npm/node_modules/foreground-child/dist/cjs/watchdog.js
@@ -0,0 +1,43 @@
+"use strict";
+// this spawns a child process that listens for SIGHUP when the
+// parent process exits, and after 200ms, sends a SIGKILL to the
+// child, in case it did not terminate.
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.watchdog = void 0;
+const child_process_1 = require("child_process");
+const watchdogCode = String.raw `
+const pid = parseInt(process.argv[1], 10)
+process.title = 'node (foreground-child watchdog pid=' + pid + ')'
+if (!isNaN(pid)) {
+ let barked = false
+ // keepalive
+ const interval = setInterval(() => {}, 60000)
+ const bark = () => {
+ clearInterval(interval)
+ if (barked) return
+ barked = true
+ process.removeListener('SIGHUP', bark)
+ setTimeout(() => {
+ try {
+ process.kill(pid, 'SIGKILL')
+ setTimeout(() => process.exit(), 200)
+ } catch (_) {}
+ }, 500)
+ })
+ process.on('SIGHUP', bark)
+}
+`;
+const watchdog = (child) => {
+ let dogExited = false;
+ const dog = (0, child_process_1.spawn)(process.execPath, ['-e', watchdogCode, String(child.pid)], {
+ stdio: 'ignore',
+ });
+ dog.on('exit', () => (dogExited = true));
+ child.on('exit', () => {
+ if (!dogExited)
+ dog.kill('SIGTERM');
+ });
+ return dog;
+};
+exports.watchdog = watchdog;
+//# sourceMappingURL=watchdog.js.map \ No newline at end of file
diff --git a/deps/npm/node_modules/foreground-child/dist/mjs/all-signals.js b/deps/npm/node_modules/foreground-child/dist/mjs/all-signals.js
new file mode 100644
index 0000000000..6b24993d22
--- /dev/null
+++ b/deps/npm/node_modules/foreground-child/dist/mjs/all-signals.js
@@ -0,0 +1,52 @@
+import constants from 'node:constants';
+export const allSignals =
+// this is the full list of signals that Node will let us do anything with
+Object.keys(constants).filter(k => k.startsWith('SIG') &&
+ // https://github.com/tapjs/signal-exit/issues/21
+ k !== 'SIGPROF' &&
+ // no sense trying to listen for SIGKILL, it's impossible
+ k !== 'SIGKILL');
+// These are some obscure signals that are reported by kill -l
+// on macOS, Linux, or Windows, but which don't have any mapping
+// in Node.js. No sense trying if they're just going to throw
+// every time on every platform.
+//
+// 'SIGEMT',
+// 'SIGLOST',
+// 'SIGPOLL',
+// 'SIGRTMAX',
+// 'SIGRTMAX-1',
+// 'SIGRTMAX-10',
+// 'SIGRTMAX-11',
+// 'SIGRTMAX-12',
+// 'SIGRTMAX-13',
+// 'SIGRTMAX-14',
+// 'SIGRTMAX-15',
+// 'SIGRTMAX-2',
+// 'SIGRTMAX-3',
+// 'SIGRTMAX-4',
+// 'SIGRTMAX-5',
+// 'SIGRTMAX-6',
+// 'SIGRTMAX-7',
+// 'SIGRTMAX-8',
+// 'SIGRTMAX-9',
+// 'SIGRTMIN',
+// 'SIGRTMIN+1',
+// 'SIGRTMIN+10',
+// 'SIGRTMIN+11',
+// 'SIGRTMIN+12',
+// 'SIGRTMIN+13',
+// 'SIGRTMIN+14',
+// 'SIGRTMIN+15',
+// 'SIGRTMIN+16',
+// 'SIGRTMIN+2',
+// 'SIGRTMIN+3',
+// 'SIGRTMIN+4',
+// 'SIGRTMIN+5',
+// 'SIGRTMIN+6',
+// 'SIGRTMIN+7',
+// 'SIGRTMIN+8',
+// 'SIGRTMIN+9',
+// 'SIGSTKFLT',
+// 'SIGUNUSED',
+//# sourceMappingURL=all-signals.js.map \ No newline at end of file
diff --git a/deps/npm/node_modules/foreground-child/dist/mjs/index.js b/deps/npm/node_modules/foreground-child/dist/mjs/index.js
new file mode 100644
index 0000000000..405b395931
--- /dev/null
+++ b/deps/npm/node_modules/foreground-child/dist/mjs/index.js
@@ -0,0 +1,146 @@
+import { spawn as nodeSpawn, } from 'child_process';
+import crossSpawn from 'cross-spawn';
+import { onExit } from 'signal-exit';
+import { allSignals } from './all-signals.js';
+import { watchdog } from './watchdog.js';
+/* c8 ignore start */
+const spawn = process?.platform === 'win32' ? crossSpawn : nodeSpawn;
+/**
+ * Normalizes the arguments passed to `foregroundChild`.
+ *
+ * Exposed for testing.
+ *
+ * @internal
+ */
+export const normalizeFgArgs = (fgArgs) => {
+ let [program, args = [], spawnOpts = {}, cleanup = () => { }] = fgArgs;
+ if (typeof args === 'function') {
+ cleanup = args;
+ spawnOpts = {};
+ args = [];
+ }
+ else if (!!args && typeof args === 'object' && !Array.isArray(args)) {
+ if (typeof spawnOpts === 'function')
+ cleanup = spawnOpts;
+ spawnOpts = args;
+ args = [];
+ }
+ else if (typeof spawnOpts === 'function') {
+ cleanup = spawnOpts;
+ spawnOpts = {};
+ }
+ if (Array.isArray(program)) {
+ const [pp, ...pa] = program;
+ program = pp;
+ args = pa;
+ }
+ return [program, args, { ...spawnOpts }, cleanup];
+};
+export function foregroundChild(...fgArgs) {
+ const [program, args, spawnOpts, cleanup] = normalizeFgArgs(fgArgs);
+ spawnOpts.stdio = [0, 1, 2];
+ if (process.send) {
+ spawnOpts.stdio.push('ipc');
+ }
+ const child = spawn(program, args, spawnOpts);
+ const unproxySignals = proxySignals(child);
+ const childHangup = () => {
+ try {
+ child.kill('SIGHUP');
+ /* c8 ignore start */
+ }
+ catch (_) {
+ // SIGHUP is weird on windows
+ child.kill('SIGTERM');
+ }
+ /* c8 ignore stop */
+ };
+ const removeOnExit = onExit(childHangup);
+ const dog = watchdog(child);
+ let done = false;
+ child.on('close', async (code, signal) => {
+ dog.kill('SIGKILL');
+ /* c8 ignore start */
+ if (done) {
+ return;
+ }
+ /* c8 ignore stop */
+ done = true;
+ const result = cleanup(code, signal);
+ const res = isPromise(result) ? await result : result;
+ removeOnExit();
+ unproxySignals();
+ if (res === false)
+ return;
+ else if (typeof res === 'string') {
+ signal = res;
+ code = null;
+ }
+ else if (typeof res === 'number') {
+ code = res;
+ signal = null;
+ }
+ if (signal) {
+ // If there is nothing else keeping the event loop alive,
+ // then there's a race between a graceful exit and getting
+ // the signal to this process. Put this timeout here to
+ // make sure we're still alive to get the signal, and thus
+ // exit with the intended signal code.
+ /* istanbul ignore next */
+ setTimeout(() => { }, 2000);
+ try {
+ process.kill(process.pid, signal);
+ /* c8 ignore start */
+ }
+ catch (_) {
+ process.kill(process.pid, 'SIGTERM');
+ }
+ /* c8 ignore stop */
+ }
+ else {
+ process.exit(code || 0);
+ }
+ });
+ if (process.send) {
+ process.removeAllListeners('message');
+ child.on('message', (message, sendHandle) => {
+ process.send?.(message, sendHandle);
+ });
+ process.on('message', (message, sendHandle) => {
+ child.send(message, sendHandle);
+ });
+ }
+ return child;
+}
+/**
+ * Starts forwarding signals to `child` through `parent`.
+ */
+const proxySignals = (child) => {
+ const listeners = new Map();
+ for (const sig of allSignals) {
+ const listener = () => {
+ // some signals can only be received, not sent
+ try {
+ child.kill(sig);
+ /* c8 ignore start */
+ }
+ catch (_) { }
+ /* c8 ignore stop */
+ };
+ try {
+ // if it's a signal this system doesn't recognize, skip it
+ process.on(sig, listener);
+ listeners.set(sig, listener);
+ /* c8 ignore start */
+ }
+ catch (_) { }
+ /* c8 ignore stop */
+ }
+ return () => {
+ for (const [sig, listener] of listeners) {
+ process.removeListener(sig, listener);
+ }
+ };
+};
+const isPromise = (o) => !!o && typeof o === 'object' && typeof o.then === 'function';
+//# sourceMappingURL=index.js.map \ No newline at end of file
diff --git a/deps/npm/node_modules/foreground-child/dist/mjs/package.json b/deps/npm/node_modules/foreground-child/dist/mjs/package.json
new file mode 100644
index 0000000000..3dbc1ca591
--- /dev/null
+++ b/deps/npm/node_modules/foreground-child/dist/mjs/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "module"
+}
diff --git a/deps/npm/node_modules/foreground-child/dist/mjs/watchdog.js b/deps/npm/node_modules/foreground-child/dist/mjs/watchdog.js
new file mode 100644
index 0000000000..3b897a6c4c
--- /dev/null
+++ b/deps/npm/node_modules/foreground-child/dist/mjs/watchdog.js
@@ -0,0 +1,39 @@
+// this spawns a child process that listens for SIGHUP when the
+// parent process exits, and after 200ms, sends a SIGKILL to the
+// child, in case it did not terminate.
+import { spawn } from 'child_process';
+const watchdogCode = String.raw `
+const pid = parseInt(process.argv[1], 10)
+process.title = 'node (foreground-child watchdog pid=' + pid + ')'
+if (!isNaN(pid)) {
+ let barked = false
+ // keepalive
+ const interval = setInterval(() => {}, 60000)
+ const bark = () => {
+ clearInterval(interval)
+ if (barked) return
+ barked = true
+ process.removeListener('SIGHUP', bark)
+ setTimeout(() => {
+ try {
+ process.kill(pid, 'SIGKILL')
+ setTimeout(() => process.exit(), 200)
+ } catch (_) {}
+ }, 500)
+ })
+ process.on('SIGHUP', bark)
+}
+`;
+export const watchdog = (child) => {
+ let dogExited = false;
+ const dog = spawn(process.execPath, ['-e', watchdogCode, String(child.pid)], {
+ stdio: 'ignore',
+ });
+ dog.on('exit', () => (dogExited = true));
+ child.on('exit', () => {
+ if (!dogExited)
+ dog.kill('SIGTERM');
+ });
+ return dog;
+};
+//# sourceMappingURL=watchdog.js.map \ No newline at end of file
diff --git a/deps/npm/node_modules/foreground-child/package.json b/deps/npm/node_modules/foreground-child/package.json
new file mode 100644
index 0000000000..dfda32847d
--- /dev/null
+++ b/deps/npm/node_modules/foreground-child/package.json
@@ -0,0 +1,83 @@
+{
+ "name": "foreground-child",
+ "version": "3.1.1",
+ "description": "Run a child as if it's the foreground process. Give it stdio. Exit when it exits.",
+ "main": "./dist/cjs/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/index.d.ts",
+ "default": "./dist/cjs/index.js"
+ }
+ }
+ },
+ "files": [
+ "dist"
+ ],
+ "engines": {
+ "node": ">=14"
+ },
+ "dependencies": {
+ "cross-spawn": "^7.0.0",
+ "signal-exit": "^4.0.1"
+ },
+ "scripts": {
+ "preversion": "npm test",
+ "postversion": "npm publish",
+ "prepublishOnly": "git push origin --follow-tags",
+ "prepare": "tsc -p tsconfig.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",
+ "typedoc": "typedoc --tsconfig tsconfig-esm.json ./src/*.ts"
+ },
+ "prettier": {
+ "semi": false,
+ "printWidth": 75,
+ "tabWidth": 2,
+ "useTabs": false,
+ "singleQuote": true,
+ "jsxSingleQuote": false,
+ "bracketSameLine": true,
+ "arrowParens": "avoid",
+ "endOfLine": "lf"
+ },
+ "tap": {
+ "coverage": false,
+ "jobs": 1,
+ "node-arg": [
+ "--no-warnings",
+ "--loader",
+ "ts-node/esm"
+ ],
+ "ts": false
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/tapjs/foreground-child.git"
+ },
+ "author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)",
+ "license": "ISC",
+ "devDependencies": {
+ "@types/cross-spawn": "^6.0.2",
+ "@types/node": "^18.15.11",
+ "@types/tap": "^15.0.8",
+ "c8": "^7.13.0",
+ "prettier": "^2.8.6",
+ "tap": "^16.3.4",
+ "ts-node": "^10.9.1",
+ "typedoc": "^0.24.2",
+ "typescript": "^5.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+}
diff --git a/deps/npm/node_modules/fs-minipass/lib/index.js b/deps/npm/node_modules/fs-minipass/lib/index.js
index f9d5082a4d..3b84ff6614 100644
--- a/deps/npm/node_modules/fs-minipass/lib/index.js
+++ b/deps/npm/node_modules/fs-minipass/lib/index.js
@@ -1,5 +1,5 @@
'use strict'
-const MiniPass = require('minipass')
+const { Minipass } = require('minipass')
const EE = require('events').EventEmitter
const fs = require('fs')
@@ -34,7 +34,7 @@ const _writing = Symbol('_writing')
const _defaultFlag = Symbol('_defaultFlag')
const _errored = Symbol('_errored')
-class ReadStream extends MiniPass {
+class ReadStream extends Minipass {
constructor (path, opt) {
opt = opt || {}
super(opt)
diff --git a/deps/npm/node_modules/fs-minipass/package.json b/deps/npm/node_modules/fs-minipass/package.json
index cba0d0cbc2..3d1fa3dbc1 100644
--- a/deps/npm/node_modules/fs-minipass/package.json
+++ b/deps/npm/node_modules/fs-minipass/package.json
@@ -1,6 +1,6 @@
{
"name": "fs-minipass",
- "version": "3.0.1",
+ "version": "3.0.2",
"main": "lib/index.js",
"scripts": {
"test": "tap",
@@ -24,11 +24,11 @@
"homepage": "https://github.com/npm/fs-minipass#readme",
"description": "fs read and write streams based on minipass",
"dependencies": {
- "minipass": "^4.0.0"
+ "minipass": "^5.0.0"
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.1",
- "@npmcli/template-oss": "4.11.3",
+ "@npmcli/template-oss": "4.14.1",
"mutate-fs": "^2.1.1",
"tap": "^16.3.2"
},
@@ -48,6 +48,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.11.3"
+ "version": "4.14.1",
+ "publish": "true"
}
}
diff --git a/deps/npm/node_modules/gauge/lib/index.js b/deps/npm/node_modules/gauge/lib/index.js
index 37fc5ac60a..be94f53f3b 100644
--- a/deps/npm/node_modules/gauge/lib/index.js
+++ b/deps/npm/node_modules/gauge/lib/index.js
@@ -2,7 +2,7 @@
var Plumbing = require('./plumbing.js')
var hasUnicode = require('has-unicode')
var hasColor = require('./has-color.js')
-var onExit = require('signal-exit')
+var onExit = require('signal-exit').onExit
var defaultThemes = require('./themes')
var setInterval = require('./set-interval.js')
var process = require('./process.js')
diff --git a/deps/npm/node_modules/gauge/package.json b/deps/npm/node_modules/gauge/package.json
index 9e62510298..449d9dd3ed 100644
--- a/deps/npm/node_modules/gauge/package.json
+++ b/deps/npm/node_modules/gauge/package.json
@@ -1,6 +1,6 @@
{
"name": "gauge",
- "version": "5.0.0",
+ "version": "5.0.1",
"description": "A terminal based horizontal gauge",
"main": "lib",
"scripts": {
@@ -32,14 +32,14 @@
"color-support": "^1.1.3",
"console-control-strings": "^1.1.0",
"has-unicode": "^2.0.1",
- "signal-exit": "^3.0.7",
+ "signal-exit": "^4.0.1",
"string-width": "^4.2.3",
"strip-ansi": "^6.0.1",
"wide-align": "^1.1.5"
},
"devDependencies": {
- "@npmcli/eslint-config": "^3.0.1",
- "@npmcli/template-oss": "4.5.1",
+ "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/template-oss": "4.14.1",
"readable-stream": "^4.0.0",
"tap": "^16.0.1"
},
@@ -62,6 +62,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.5.1"
+ "version": "4.14.1",
+ "publish": "true"
}
}
diff --git a/deps/npm/node_modules/glob/README.md b/deps/npm/node_modules/glob/README.md
new file mode 100644
index 0000000000..892013baae
--- /dev/null
+++ b/deps/npm/node_modules/glob/README.md
@@ -0,0 +1,1212 @@
+# Glob
+
+Match files using the patterns the shell uses.
+
+The most correct and second fastest glob implementation in
+JavaScript. (See **Comparison to Other JavaScript Glob
+Implementations** at the bottom of this readme.)
+
+![a fun cartoon logo made of glob characters](https://github.com/isaacs/node-glob/raw/main/logo/glob.png)
+
+## Usage
+
+Install with npm
+
+```
+npm i glob
+```
+
+**Note** the npm package name is _not_ `node-glob` that's a
+different thing that was abandoned years ago. Just `glob`.
+
+```js
+// load using import
+import { glob, globSync, globStream, globStreamSync, Glob } from 'glob'
+// or using commonjs, that's fine, too
+const {
+ glob,
+ globSync,
+ globStream,
+ globStreamSync,
+ Glob,
+} = require('glob')
+
+// the main glob() and globSync() resolve/return array of filenames
+
+// all js files, but don't look in node_modules
+const jsfiles = await glob('**/*.js', { ignore: 'node_modules/**' })
+
+// pass in a signal to cancel the glob walk
+const stopAfter100ms = await glob('**/*.css', {
+ signal: AbortSignal.timeout(100),
+})
+
+// multiple patterns supported as well
+const images = await glob(['css/*.{png,jpeg}', 'public/*.{png,jpeg}'])
+
+// but of course you can do that with the glob pattern also
+// the sync function is the same, just returns a string[] instead
+// of Promise<string[]>
+const imagesAlt = globSync('{css,public}/*.{png,jpeg}')
+
+// you can also stream them, this is a Minipass stream
+const filesStream = globStream(['**/*.dat', 'logs/**/*.log'])
+
+// construct a Glob object if you wanna do it that way, which
+// allows for much faster walks if you have to look in the same
+// folder multiple times.
+const g = new Glob('**/foo')
+// glob objects are async iterators, can also do globIterate() or
+// g.iterate(), same deal
+for await (const file of g) {
+ console.log('found a foo file:', file)
+}
+// pass a glob as the glob options to reuse its settings and caches
+const g2 = new Glob('**/bar', g)
+// sync iteration works as well
+for (const file of g2) {
+ console.log('found a bar file:', file)
+}
+
+// you can also pass withFileTypes: true to get Path objects
+// these are like a Dirent, but with some more added powers
+// check out http://npm.im/path-scurry for more info on their API
+const g3 = new Glob('**/baz/**', { withFileTypes: true })
+g3.stream().on('data', path => {
+ console.log(
+ 'got a path object',
+ path.fullpath(),
+ path.isDirectory(),
+ path.readdirSync().map(e => e.name)
+ )
+})
+
+// if you use stat:true and withFileTypes, you can sort results
+// by things like modified time, filter by permission mode, etc.
+// All Stats fields will be available in that case. Slightly
+// slower, though.
+// For example:
+const results = await glob('**', { stat: true, withFileTypes: true })
+
+const timeSortedFiles = results
+ .sort((a, b) => a.mtimeMS - b.mtimeMS)
+ .map(path => path.fullpath())
+
+const groupReadableFiles = results
+ .filter(path => path.mode & 0o040)
+ .map(path => path.fullpath())
+
+// custom ignores can be done like this, for example by saying
+// you'll ignore all markdown files, and all folders named 'docs'
+const customIgnoreResults = await glob('**', {
+ ignore: {
+ ignored: p => /\.md$/.test(p.name),
+ childrenIgnored: p => p.isNamed('docs'),
+ },
+})
+
+// another fun use case, only return files with the same name as
+// their parent folder, plus either `.ts` or `.js`
+const folderNamedModules = await glob('**/*.{ts,js}', {
+ ignore: {
+ ignored: p => {
+ const pp = p.parent
+ return !(p.isNamed(pp.name + '.ts') || p.isNamed(pp.name + '.js'))
+ },
+ },
+})
+
+// find all files edited in the last hour, to do this, we ignore
+// all of them that are more than an hour old
+const newFiles = await glob('**', {
+ // need stat so we have mtime
+ stat: true,
+ // only want the files, not the dirs
+ nodir: true,
+ ignore: {
+ ignored: p => {
+ return new Date() - p.mtime > 60 * 60 * 1000
+ },
+ // could add similar childrenIgnored here as well, but
+ // directory mtime is inconsistent across platforms, so
+ // probably better not to, unless you know the system
+ // tracks this reliably.
+ },
+})
+```
+
+**Note** Glob patterns should always use `/` as a path separator,
+even on Windows systems, as `\` is used to escape glob
+characters. If you wish to use `\` as a path separator _instead
+of_ using it as an escape character on Windows platforms, you may
+set `windowsPathsNoEscape:true` in the options. In this mode,
+special glob characters cannot be escaped, making it impossible
+to match a literal `*` `?` and so on in filenames.
+
+## Command Line Interface
+
+```
+$ glob -h
+
+Usage:
+ glob [options] [<pattern> [<pattern> ...]]
+
+Expand the positional glob expression arguments into any matching file system
+paths found.
+
+ -c<command> --cmd=<command>
+ Run the command provided, passing the glob expression
+ matches as arguments.
+
+ -A --all By default, the glob cli command will not expand any
+ arguments that are an exact match to a file on disk.
+
+ This prevents double-expanding, in case the shell
+ expands an argument whose filename is a glob
+ expression.
+
+ For example, if 'app/*.ts' would match 'app/[id].ts',
+ then on Windows powershell or cmd.exe, 'glob app/*.ts'
+ will expand to 'app/[id].ts', as expected. However, in
+ posix shells such as bash or zsh, the shell will first
+ expand 'app/*.ts' to a list of filenames. Then glob
+ will look for a file matching 'app/[id].ts' (ie,
+ 'app/i.ts' or 'app/d.ts'), which is unexpected.
+
+ Setting '--all' prevents this behavior, causing glob to
+ treat ALL patterns as glob expressions to be expanded,
+ even if they are an exact match to a file on disk.
+
+ When setting this option, be sure to enquote arguments
+ so that the shell will not expand them prior to passing
+ them to the glob command process.
+
+ -a --absolute Expand to absolute paths
+ -d --dot-relative Prepend './' on relative matches
+ -m --mark Append a / on any directories matched
+ -x --posix Always resolve to posix style paths, using '/' as the
+ directory separator, even on Windows. Drive letter
+ absolute matches on Windows will be expanded to their
+ full resolved UNC maths, eg instead of 'C:\foo\bar', it
+ will expand to '//?/C:/foo/bar'.
+
+ -f --follow Follow symlinked directories when expanding '**'
+ -R --realpath Call 'fs.realpath' on all of the results. In the case
+ of an entry that cannot be resolved, the entry is
+ omitted. This incurs a slight performance penalty, of
+ course, because of the added system calls.
+
+ -s --stat Call 'fs.lstat' on all entries, whether required or not
+ to determine if it's a valid match.
+
+ -b --match-base Perform a basename-only match if the pattern does not
+ contain any slash characters. That is, '*.js' would be
+ treated as equivalent to '**/*.js', matching js files
+ in all directories.
+
+ --dot Allow patterns to match files/directories that start
+ with '.', even if the pattern does not start with '.'
+
+ --nobrace Do not expand {...} patterns
+ --nocase Perform a case-insensitive match. This defaults to
+ 'true' on macOS and Windows platforms, and false on all
+ others.
+
+ Note: 'nocase' should only be explicitly set when it is
+ known that the filesystem's case sensitivity differs
+ from the platform default. If set 'true' on
+ case-insensitive file systems, then the walk may return
+ more or less results than expected.
+
+ --nodir Do not match directories, only files.
+
+ Note: to *only* match directories, append a '/' at the
+ end of the pattern.
+
+ --noext Do not expand extglob patterns, such as '+(a|b)'
+ --noglobstar Do not expand '**' against multiple path portions. Ie,
+ treat it as a normal '*' instead.
+
+ --windows-path-no-escape
+ Use '\' as a path separator *only*, and *never* as an
+ escape character. If set, all '\' characters are
+ replaced with '/' in the pattern.
+
+ -D<n> --max-depth=<n> Maximum depth to traverse from the current working
+ directory
+
+ -C<cwd> --cwd=<cwd> Current working directory to execute/match in
+ -r<root> --root=<root> A string path resolved against the 'cwd', which is used
+ as the starting point for absolute patterns that start
+ with '/' (but not drive letters or UNC paths on
+ Windows).
+
+ Note that this *doesn't* necessarily limit the walk to
+ the 'root' directory, and doesn't affect the cwd
+ starting point for non-absolute patterns. A pattern
+ containing '..' will still be able to traverse out of
+ the root directory, if it is not an actual root
+ directory on the filesystem, and any non-absolute
+ patterns will still be matched in the 'cwd'.
+
+ To start absolute and non-absolute patterns in the same
+ path, you can use '--root=' to set it to the empty
+ string. However, be aware that on Windows systems, a
+ pattern like 'x:/*' or '//host/share/*' will *always*
+ start in the 'x:/' or '//host/share/' directory,
+ regardless of the --root setting.
+
+ --platform=<platform> Defaults to the value of 'process.platform' if
+ available, or 'linux' if not. Setting --platform=win32
+ on non-Windows systems may cause strange behavior!
+
+ -i<ignore> --ignore=<ignore>
+ Glob patterns to ignore Can be set multiple times
+ -v --debug Output a huge amount of noisy debug information about
+ patterns as they are parsed and used to match files.
+
+ -h --help Show this usage information
+```
+
+## `glob(pattern: string | string[], options?: GlobOptions) => Promise<string[] | Path[]>`
+
+Perform an asynchronous glob search for the pattern(s) specified.
+Returns
+[Path](https://isaacs.github.io/path-scurry/classes/PathBase)
+objects if the `withFileTypes` option is set to `true`. See below
+for full options field desciptions.
+
+## `globSync(pattern: string | string[], options?: GlobOptions) => string[] | Path[]`
+
+Synchronous form of `glob()`.
+
+Alias: `glob.sync()`
+
+## `globIterate(pattern: string | string[], options?: GlobOptions) => AsyncGenerator<string>`
+
+Return an async iterator for walking glob pattern matches.
+
+Alias: `glob.iterate()`
+
+## `globIterateSync(pattern: string | string[], options?: GlobOptions) => Generator<string>`
+
+Return a sync iterator for walking glob pattern matches.
+
+Alias: `glob.iterate.sync()`, `glob.sync.iterate()`
+
+## `globStream(pattern: string | string[], options?: GlobOptions) => Minipass<string | Path>`
+
+Return a stream that emits all the strings or `Path` objects and
+then emits `end` when completed.
+
+Alias: `glob.stream()`
+
+## `globStreamSync(pattern: string | string[], options?: GlobOptions) => Minipass<string | Path>`
+
+Syncronous form of `globStream()`. Will read all the matches as
+fast as you consume them, even all in a single tick if you
+consume them immediately, but will still respond to backpressure
+if they're not consumed immediately.
+
+Alias: `glob.stream.sync()`, `glob.sync.stream()`
+
+## `hasMagic(pattern: string | string[], options?: GlobOptions) => boolean`
+
+Returns `true` if the provided pattern contains any "magic" glob
+characters, given the options provided.
+
+Brace expansion is not considered "magic" unless the
+`magicalBraces` option is set, as brace expansion just turns one
+string into an array of strings. So a pattern like `'x{a,b}y'`
+would return `false`, because `'xay'` and `'xby'` both do not
+contain any magic glob characters, and it's treated the same as
+if you had called it on `['xay', 'xby']`. When
+`magicalBraces:true` is in the options, brace expansion _is_
+treated as a pattern having magic.
+
+## `escape(pattern: string, options?: GlobOptions) => string`
+
+Escape all magic characters in a glob pattern, so that it will
+only ever match literal strings
+
+If the `windowsPathsNoEscape` option is used, then characters are
+escaped by wrapping in `[]`, because a magic character wrapped in
+a character class can only be satisfied by that exact character.
+
+Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot
+be escaped or unescaped.
+
+## `unescape(pattern: string, options?: GlobOptions) => string`
+
+Un-escape a glob string that may contain some escaped characters.
+
+If the `windowsPathsNoEscape` option is used, then square-brace
+escapes are removed, but not backslash escapes. For example, it
+will turn the string `'[*]'` into `*`, but it will not turn
+`'\\*'` into `'*'`, because `\` is a path separator in
+`windowsPathsNoEscape` mode.
+
+When `windowsPathsNoEscape` is not set, then both brace escapes
+and backslash escapes are removed.
+
+Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot
+be escaped or unescaped.
+
+## Class `Glob`
+
+An object that can perform glob pattern traversals.
+
+### `const g = new Glob(pattern: string | string[], options: GlobOptions)`
+
+See full options descriptions below.
+
+Note that a previous `Glob` object can be passed as the
+`GlobOptions` to another `Glob` instantiation to re-use settings
+and caches with a new pattern.
+
+Traversal functions can be called multiple times to run the walk
+again.
+
+### `g.stream()`
+
+Stream results asynchronously,
+
+### `g.streamSync()`
+
+Stream results synchronously.
+
+### `g.iterate()`
+
+Default async iteration function. Returns an AsyncGenerator that
+iterates over the results.
+
+### `g.iterateSync()`
+
+Default sync iteration function. Returns a Generator that
+iterates over the results.
+
+### `g.walk()`
+
+Returns a Promise that resolves to the results array.
+
+### `g.walkSync()`
+
+Returns a results array.
+
+### Properties
+
+All options are stored as properties on the `Glob` object.
+
+- `opts` The options provided to the constructor.
+- `patterns` An array of parsed immutable `Pattern` objects.
+
+## Options
+
+Exported as `GlobOptions` TypeScript interface. A `GlobOptions`
+object may be provided to any of the exported methods, and must
+be provided to the `Glob` constructor.
+
+All options are optional, boolean, and false by default, unless
+otherwise noted.
+
+All resolved options are added to the Glob object as properties.
+
+If you are running many `glob` operations, you can pass a Glob
+object as the `options` argument to a subsequent operation to
+share the previously loaded cache.
+
+- `cwd` String path or `file://` string or URL object. The
+ current working directory in which to search. Defaults to
+ `process.cwd()`. See also: "Windows, CWDs, Drive Letters, and
+ UNC Paths", below.
+
+ This option may be eiher a string path or a `file://` URL
+ object or string.
+
+- `root` A string path resolved against the `cwd` option, which
+ is used as the starting point for absolute patterns that start
+ with `/`, (but not drive letters or UNC paths on Windows).
+
+ Note that this _doesn't_ necessarily limit the walk to the
+ `root` directory, and doesn't affect the cwd starting point for
+ non-absolute patterns. A pattern containing `..` will still be
+ able to traverse out of the root directory, if it is not an
+ actual root directory on the filesystem, and any non-absolute
+ patterns will be matched in the `cwd`. For example, the
+ pattern `/../*` with `{root:'/some/path'}` will return all
+ files in `/some`, not all files in `/some/path`. The pattern
+ `*` with `{root:'/some/path'}` will return all the entries in
+ the cwd, not the entries in `/some/path`.
+
+ To start absolute and non-absolute patterns in the same
+ path, you can use `{root:''}`. However, be aware that on
+ Windows systems, a pattern like `x:/*` or `//host/share/*` will
+ _always_ start in the `x:/` or `//host/share` directory,
+ regardless of the `root` setting.
+
+- `windowsPathsNoEscape` Use `\\` as a path separator _only_, and
+ _never_ as an escape character. If set, all `\\` characters are
+ replaced with `/` in the pattern.
+
+ Note that this makes it **impossible** to match against paths
+ containing literal glob pattern characters, but allows matching
+ with patterns constructed using `path.join()` and
+ `path.resolve()` on Windows platforms, mimicking the (buggy!)
+ behavior of Glob v7 and before on Windows. Please use with
+ caution, and be mindful of [the caveat below about Windows
+ paths](#windows). (For legacy reasons, this is also set if
+ `allowWindowsEscape` is set to the exact value `false`.)
+
+- `dot` Include `.dot` files in normal matches and `globstar`
+ matches. Note that an explicit dot in a portion of the pattern
+ will always match dot files.
+
+- `magicalBraces` Treat brace expansion like `{a,b}` as a "magic"
+ pattern. Has no effect if {@link nobrace} is set.
+
+ Only has effect on the {@link hasMagic} function, no effect on
+ glob pattern matching itself.
+
+- `dotRelative` Prepend all relative path strings with `./` (or
+ `.\` on Windows).
+
+ Without this option, returned relative paths are "bare", so
+ instead of returning `'./foo/bar'`, they are returned as
+ `'foo/bar'`.
+
+ Relative patterns starting with `'../'` are not prepended with
+ `./`, even if this option is set.
+
+- `mark` Add a `/` character to directory matches. Note that this
+ requires additional stat calls.
+
+- `nobrace` Do not expand `{a,b}` and `{1..3}` brace sets.
+
+- `noglobstar` Do not match `**` against multiple filenames. (Ie,
+ treat it as a normal `*` instead.)
+
+- `noext` Do not match "extglob" patterns such as `+(a|b)`.
+
+- `nocase` Perform a case-insensitive match. This defaults to
+ `true` on macOS and Windows systems, and `false` on all others.
+
+ **Note** `nocase` should only be explicitly set when it is
+ known that the filesystem's case sensitivity differs from the
+ platform default. If set `true` on case-sensitive file
+ systems, or `false` on case-insensitive file systems, then the
+ walk may return more or less results than expected.
+
+- `maxDepth` Specify a number to limit the depth of the directory
+ traversal to this many levels below the `cwd`.
+
+- `matchBase` Perform a basename-only match if the pattern does
+ not contain any slash characters. That is, `*.js` would be
+ treated as equivalent to `**/*.js`, matching all js files in
+ all directories.
+
+- `nodir` Do not match directories, only files. (Note: to match
+ _only_ directories, put a `/` at the end of the pattern.)
+
+- `stat` Call `lstat()` on all entries, whether required or not
+ to determine whether it's a valid match. When used with
+ `withFileTypes`, this means that matches will include data such
+ as modified time, permissions, and so on. Note that this will
+ incur a performance cost due to the added system calls.
+
+- `ignore` string or string[], or an object with `ignore` and
+ `ignoreChildren` methods.
+
+ If a string or string[] is provided, then this is treated as a
+ glob pattern or array of glob patterns to exclude from matches.
+ To ignore all children within a directory, as well as the entry
+ itself, append `'/**'` to the ignore pattern.
+
+ **Note** `ignore` patterns are _always_ in `dot:true` mode,
+ regardless of any other settings.
+
+ If an object is provided that has `ignored(path)` and/or
+ `childrenIgnored(path)` methods, then these methods will be
+ called to determine whether any Path is a match or if its
+ children should be traversed, respectively.
+
+- `follow` Follow symlinked directories when expanding `**`
+ patterns. This can result in a lot of duplicate references in
+ the presence of cyclic links, and make performance quite bad.
+
+ By default, a `**` in a pattern will follow 1 symbolic link if
+ it is not the first item in the pattern, or none if it is the
+ first item in the pattern, following the same behavior as Bash.
+
+- `realpath` Set to true to call `fs.realpath` on all of the
+ results. In the case of an entry that cannot be resolved, the
+ entry is omitted. This incurs a slight performance penalty, of
+ course, because of the added system calls.
+
+- `absolute` Set to true to always receive absolute paths for
+ matched files. Set to `false` to always receive relative paths
+ for matched files.
+
+ By default, when this option is not set, absolute paths are
+ returned for patterns that are absolute, and otherwise paths
+ are returned that are relative to the `cwd` setting.
+
+ This does _not_ make an extra system call to get the realpath,
+ it only does string path resolution.
+
+ `absolute` may not be used along with `withFileTypes`.
+
+- `posix` Set to true to use `/` as the path separator in
+ returned results. On posix systems, this has no effect. On
+ Windows systems, this will return `/` delimited path results,
+ and absolute paths will be returned in their full resolved UNC
+ path form, eg insted of `'C:\\foo\\bar'`, it will return
+ `//?/C:/foo/bar`.
+
+- `platform` Defaults to value of `process.platform` if
+ available, or `'linux'` if not. Setting `platform:'win32'` on
+ non-Windows systems may cause strange behavior.
+
+- `withFileTypes` Return [PathScurry](http://npm.im/path-scurry)
+ `Path` objects instead of strings. These are similar to a
+ NodeJS `Dirent` object, but with additional methods and
+ properties.
+
+ `withFileTypes` may not be used along with `absolute`.
+
+- `signal` An AbortSignal which will cancel the Glob walk when
+ triggered.
+
+- `fs` An override object to pass in custom filesystem methods.
+ See [PathScurry docs](http://npm.im/path-scurry) for what can
+ be overridden.
+
+- `scurry` A [PathScurry](http://npm.im/path-scurry) object used
+ to traverse the file system. If the `nocase` option is set
+ explicitly, then any provided `scurry` object must match this
+ setting.
+
+## Glob Primer
+
+Much more information about glob pattern expansion can be found
+by running `man bash` and searching for `Pattern Matching`.
+
+"Globs" are the patterns you type when you do stuff like `ls
+*.js` on the command line, or put `build/*` in a `.gitignore`
+file.
+
+Before parsing the path part patterns, braced sections are
+expanded into a set. Braced sections start with `{` and end with
+`}`, with 2 or more comma-delimited sections within. Braced
+sections may contain slash characters, so `a{/b/c,bcd}` would
+expand into `a/b/c` and `abcd`.
+
+The following characters have special magic meaning when used in
+a path portion. With the exception of `**`, none of these match
+path separators (ie, `/` on all platforms, and `\` on Windows).
+
+- `*` Matches 0 or more characters in a single path portion.
+ When alone in a path portion, it must match at least 1
+ character. If `dot:true` is not specified, then `*` will not
+ match against a `.` character at the start of a path portion.
+- `?` Matches 1 character. If `dot:true` is not specified, then
+ `?` will not match against a `.` character at the start of a
+ path portion.
+- `[...]` Matches a range of characters, similar to a RegExp
+ range. If the first character of the range is `!` or `^` then
+ it matches any character not in the range. If the first
+ character is `]`, then it will be considered the same as `\]`,
+ rather than the end of the character class.
+- `!(pattern|pattern|pattern)` Matches anything that does not
+ match any of the patterns provided. May _not_ contain `/`
+ characters. Similar to `*`, if alone in a path portion, then
+ the path portion must have at least one character.
+- `?(pattern|pattern|pattern)` Matches zero or one occurrence of
+ the patterns provided. May _not_ contain `/` characters.
+- `+(pattern|pattern|pattern)` Matches one or more occurrences of
+ the patterns provided. May _not_ contain `/` characters.
+- `*(a|b|c)` Matches zero or more occurrences of the patterns
+ provided. May _not_ contain `/` characters.
+- `@(pattern|pat*|pat?erN)` Matches exactly one of the patterns
+ provided. May _not_ contain `/` characters.
+- `**` If a "globstar" is alone in a path portion, then it
+ matches zero or more directories and subdirectories searching
+ for matches. It does not crawl symlinked directories, unless
+ `{follow:true}` is passed in the options object. A pattern
+ like `a/b/**` will only match `a/b` if it is a directory.
+ Follows 1 symbolic link if not the first item in the pattern,
+ or 0 if it is the first item, unless `follow:true` is set, in
+ which case it follows all symbolic links.
+
+`[:class:]` patterns are supported by this implementation, but
+`[=c=]` and `[.symbol.]` style class patterns are not.
+
+### Dots
+
+If a file or directory path portion has a `.` as the first
+character, then it will not match any glob pattern unless that
+pattern's corresponding path part also has a `.` as its first
+character.
+
+For example, the pattern `a/.*/c` would match the file at
+`a/.b/c`. However the pattern `a/*/c` would not, because `*` does
+not start with a dot character.
+
+You can make glob treat dots as normal characters by setting
+`dot:true` in the options.
+
+### Basename Matching
+
+If you set `matchBase:true` in the options, and the pattern has
+no slashes in it, then it will seek for any file anywhere in the
+tree with a matching basename. For example, `*.js` would match
+`test/simple/basic.js`.
+
+### Empty Sets
+
+If no matching files are found, then an empty array is returned.
+This differs from the shell, where the pattern itself is
+returned. For example:
+
+```sh
+$ echo a*s*d*f
+a*s*d*f
+```
+
+## Comparisons to other fnmatch/glob implementations
+
+While strict compliance with the existing standards is a
+worthwhile goal, some discrepancies exist between node-glob and
+other implementations, and are intentional.
+
+The double-star character `**` is supported by default, unless
+the `noglobstar` flag is set. This is supported in the manner of
+bsdglob and bash 5, where `**` only has special significance if
+it is the only thing in a path part. That is, `a/**/b` will match
+`a/x/y/b`, but `a/**b` will not.
+
+Note that symlinked directories are not traversed as part of a
+`**`, though their contents may match against subsequent portions
+of the pattern. This prevents infinite loops and duplicates and
+the like. You can force glob to traverse symlinks with `**` by
+setting `{follow:true}` in the options.
+
+There is no equivalent of the `nonull` option. A pattern that
+does not find any matches simply resolves to nothing. (An empty
+array, immediately ended stream, etc.)
+
+If brace expansion is not disabled, then it is performed before
+any other interpretation of the glob pattern. Thus, a pattern
+like `+(a|{b),c)}`, which would not be valid in bash or zsh, is
+expanded **first** into the set of `+(a|b)` and `+(a|c)`, and
+those patterns are checked for validity. Since those two are
+valid, matching proceeds.
+
+The character class patterns `[:class:]` (posix standard named
+classes) style class patterns are supported and unicode-aware,
+but `[=c=]` (locale-specific character collation weight), and
+`[.symbol.]` (collating symbol), are not.
+
+### Repeated Slashes
+
+Unlike Bash and zsh, repeated `/` are always coalesced into a
+single path separator.
+
+### Comments and Negation
+
+Previously, this module let you mark a pattern as a "comment" if
+it started with a `#` character, or a "negated" pattern if it
+started with a `!` character.
+
+These options were deprecated in version 5, and removed in
+version 6.
+
+To specify things that should not match, use the `ignore` option.
+
+## Windows
+
+**Please only use forward-slashes in glob expressions.**
+
+Though windows uses either `/` or `\` as its path separator, only
+`/` characters are used by this glob implementation. You must use
+forward-slashes **only** in glob expressions. Back-slashes will
+always be interpreted as escape characters, not path separators.
+
+Results from absolute patterns such as `/foo/*` are mounted onto
+the root setting using `path.join`. On windows, this will by
+default result in `/foo/*` matching `C:\foo\bar.txt`.
+
+To automatically coerce all `\` characters to `/` in pattern
+strings, **thus making it impossible to escape literal glob
+characters**, you may set the `windowsPathsNoEscape` option to
+`true`.
+
+### Windows, CWDs, Drive Letters, and UNC Paths
+
+On posix systems, when a pattern starts with `/`, any `cwd`
+option is ignored, and the traversal starts at `/`, plus any
+non-magic path portions specified in the pattern.
+
+On Windows systems, the behavior is similar, but the concept of
+an "absolute path" is somewhat more involved.
+
+#### UNC Paths
+
+A UNC path may be used as the start of a pattern on Windows
+platforms. For example, a pattern like: `//?/x:/*` will return
+all file entries in the root of the `x:` drive. A pattern like
+`//ComputerName/Share/*` will return all files in the associated
+share.
+
+UNC path roots are always compared case insensitively.
+
+#### Drive Letters
+
+A pattern starting with a drive letter, like `c:/*`, will search
+in that drive, regardless of any `cwd` option provided.
+
+If the pattern starts with `/`, and is not a UNC path, and there
+is an explicit `cwd` option set with a drive letter, then the
+drive letter in the `cwd` is used as the root of the directory
+traversal.
+
+For example, `glob('/tmp', { cwd: 'c:/any/thing' })` will return
+`['c:/tmp']` as the result.
+
+If an explicit `cwd` option is not provided, and the pattern
+starts with `/`, then the traversal will run on the root of the
+drive provided as the `cwd` option. (That is, it is the result of
+`path.resolve('/')`.)
+
+## Race Conditions
+
+Glob searching, by its very nature, is susceptible to race
+conditions, since it relies on directory walking.
+
+As a result, it is possible that a file that exists when glob
+looks for it may have been deleted or modified by the time it
+returns the result.
+
+By design, this implementation caches all readdir calls that it
+makes, in order to cut down on system overhead. However, this
+also makes it even more susceptible to races, especially if the
+cache object is reused between glob calls.
+
+Users are thus advised not to use a glob result as a guarantee of
+filesystem state in the face of rapid changes. For the vast
+majority of operations, this is never a problem.
+
+### See Also:
+
+- `man sh`
+- `man bash` [Pattern
+ Matching](https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html)
+- `man 3 fnmatch`
+- `man 5 gitignore`
+- [minimatch documentation](https://github.com/isaacs/minimatch)
+
+## Glob Logo
+
+Glob's logo was created by [Tanya
+Brassie](http://tanyabrassie.com/). Logo files can be found
+[here](https://github.com/isaacs/node-glob/tree/master/logo).
+
+The logo is licensed under a [Creative Commons
+Attribution-ShareAlike 4.0 International
+License](https://creativecommons.org/licenses/by-sa/4.0/).
+
+## Contributing
+
+Any change to behavior (including bugfixes) must come with a
+test.
+
+Patches that fail tests or reduce performance will be rejected.
+
+```sh
+# to run tests
+npm test
+
+# to re-generate test fixtures
+npm run test-regen
+
+# run the benchmarks
+npm run bench
+
+# to profile javascript
+npm run prof
+```
+
+## Comparison to Other JavaScript Glob Implementations
+
+**tl;dr**
+
+- If you want glob matching that is as faithful as possible to
+ Bash pattern expansion semantics, and as fast as possible
+ within that constraint, _use this module_.
+- If you are reasonably sure that the patterns you will encounter
+ are relatively simple, and want the absolutely fastest glob
+ matcher out there, _use [fast-glob](http://npm.im/fast-glob)_.
+- If you are reasonably sure that the patterns you will encounter
+ are relatively simple, and want the convenience of
+ automatically respecting `.gitignore` files, _use
+ [globby](http://npm.im/globby)_.
+
+There are some other glob matcher libraries on npm, but these
+three are (in my opinion, as of 2023) the best.
+
+---
+
+**full explanation**
+
+Every library reflects a set of opinions and priorities in the
+trade-offs it makes. Other than this library, I can personally
+recommend both [globby](http://npm.im/globby) and
+[fast-glob](http://npm.im/fast-glob), though they differ in their
+benefits and drawbacks.
+
+Both have very nice APIs and are reasonably fast.
+
+`fast-glob` is, as far as I am aware, the fastest glob
+implementation in JavaScript today. However, there are many
+cases where the choices that `fast-glob` makes in pursuit of
+speed mean that its results differ from the results returned by
+Bash and other sh-like shells, which may be surprising.
+
+In my testing, `fast-glob` is around 10-20% faster than this
+module when walking over 200k files nested 4 directories
+deep[1](#fn-webscale). However, there are some inconsistencies
+with Bash matching behavior that this module does not suffer
+from:
+
+- `**` only matches files, not directories
+- `..` path portions are not handled unless they appear at the
+ start of the pattern
+- `./!(<pattern>)` will not match any files that _start_ with
+ `<pattern>`, even if they do not match `<pattern>`. For
+ example, `!(9).txt` will not match `9999.txt`.
+- Some brace patterns in the middle of a pattern will result in
+ failing to find certain matches.
+- Extglob patterns are allowed to contain `/` characters.
+
+Globby exhibits all of the same pattern semantics as fast-glob,
+(as it is a wrapper around fast-glob) and is slightly slower than
+node-glob (by about 10-20% in the benchmark test set, or in other
+words, anywhere from 20-50% slower than fast-glob). However, it
+adds some API conveniences that may be worth the costs.
+
+- Support for `.gitignore` and other ignore files.
+- Support for negated globs (ie, patterns starting with `!`
+ rather than using a separate `ignore` option).
+
+The priority of this module is "correctness" in the sense of
+performing a glob pattern expansion as faithfully as possible to
+the behavior of Bash and other sh-like shells, with as much speed
+as possible.
+
+Note that prior versions of `node-glob` are _not_ on this list.
+Former versions of this module are far too slow for any cases
+where performance matters at all, and were designed with APIs
+that are extremely dated by current JavaScript standards.
+
+---
+
+<small id="fn-webscale">[1]: In the cases where this module
+returns results and `fast-glob` doesn't, it's even faster, of
+course.</small>
+
+![lumpy space princess saying 'oh my GLOB'](https://github.com/isaacs/node-glob/raw/main/oh-my-glob.gif)
+
+### Benchmark Results
+
+First number is time, smaller is better.
+
+Second number is the count of results returned.
+
+```
+--- pattern: '**' ---
+~~ sync ~~
+node fast-glob sync 0m0.598s 200364
+node globby sync 0m0.765s 200364
+node current globSync mjs 0m0.683s 222656
+node current glob syncStream 0m0.649s 222656
+~~ async ~~
+node fast-glob async 0m0.350s 200364
+node globby async 0m0.509s 200364
+node current glob async mjs 0m0.463s 222656
+node current glob stream 0m0.411s 222656
+
+--- pattern: '**/..' ---
+~~ sync ~~
+node fast-glob sync 0m0.486s 0
+node globby sync 0m0.769s 200364
+node current globSync mjs 0m0.564s 2242
+node current glob syncStream 0m0.583s 2242
+~~ async ~~
+node fast-glob async 0m0.283s 0
+node globby async 0m0.512s 200364
+node current glob async mjs 0m0.299s 2242
+node current glob stream 0m0.312s 2242
+
+--- pattern: './**/0/**/0/**/0/**/0/**/*.txt' ---
+~~ sync ~~
+node fast-glob sync 0m0.490s 10
+node globby sync 0m0.517s 10
+node current globSync mjs 0m0.540s 10
+node current glob syncStream 0m0.550s 10
+~~ async ~~
+node fast-glob async 0m0.290s 10
+node globby async 0m0.296s 10
+node current glob async mjs 0m0.278s 10
+node current glob stream 0m0.302s 10
+
+--- pattern: './**/[01]/**/[12]/**/[23]/**/[45]/**/*.txt' ---
+~~ sync ~~
+node fast-glob sync 0m0.500s 160
+node globby sync 0m0.528s 160
+node current globSync mjs 0m0.556s 160
+node current glob syncStream 0m0.573s 160
+~~ async ~~
+node fast-glob async 0m0.283s 160
+node globby async 0m0.301s 160
+node current glob async mjs 0m0.306s 160
+node current glob stream 0m0.322s 160
+
+--- pattern: './**/0/**/0/**/*.txt' ---
+~~ sync ~~
+node fast-glob sync 0m0.502s 5230
+node globby sync 0m0.527s 5230
+node current globSync mjs 0m0.544s 5230
+node current glob syncStream 0m0.557s 5230
+~~ async ~~
+node fast-glob async 0m0.285s 5230
+node globby async 0m0.305s 5230
+node current glob async mjs 0m0.304s 5230
+node current glob stream 0m0.310s 5230
+
+--- pattern: '**/*.txt' ---
+~~ sync ~~
+node fast-glob sync 0m0.580s 200023
+node globby sync 0m0.771s 200023
+node current globSync mjs 0m0.685s 200023
+node current glob syncStream 0m0.649s 200023
+~~ async ~~
+node fast-glob async 0m0.349s 200023
+node globby async 0m0.509s 200023
+node current glob async mjs 0m0.427s 200023
+node current glob stream 0m0.388s 200023
+
+--- pattern: '{**/*.txt,**/?/**/*.txt,**/?/**/?/**/*.txt,**/?/**/?/**/?/**/*.txt,**/?/**/?/**/?/**/?/**/*.txt}' ---
+~~ sync ~~
+node fast-glob sync 0m0.589s 200023
+node globby sync 0m0.771s 200023
+node current globSync mjs 0m0.716s 200023
+node current glob syncStream 0m0.684s 200023
+~~ async ~~
+node fast-glob async 0m0.351s 200023
+node globby async 0m0.518s 200023
+node current glob async mjs 0m0.462s 200023
+node current glob stream 0m0.468s 200023
+
+--- pattern: '**/5555/0000/*.txt' ---
+~~ sync ~~
+node fast-glob sync 0m0.496s 1000
+node globby sync 0m0.519s 1000
+node current globSync mjs 0m0.539s 1000
+node current glob syncStream 0m0.567s 1000
+~~ async ~~
+node fast-glob async 0m0.285s 1000
+node globby async 0m0.299s 1000
+node current glob async mjs 0m0.305s 1000
+node current glob stream 0m0.301s 1000
+
+--- pattern: './**/0/**/../[01]/**/0/../**/0/*.txt' ---
+~~ sync ~~
+node fast-glob sync 0m0.484s 0
+node globby sync 0m0.507s 0
+node current globSync mjs 0m0.577s 4880
+node current glob syncStream 0m0.586s 4880
+~~ async ~~
+node fast-glob async 0m0.280s 0
+node globby async 0m0.298s 0
+node current glob async mjs 0m0.327s 4880
+node current glob stream 0m0.324s 4880
+
+--- pattern: '**/????/????/????/????/*.txt' ---
+~~ sync ~~
+node fast-glob sync 0m0.547s 100000
+node globby sync 0m0.673s 100000
+node current globSync mjs 0m0.626s 100000
+node current glob syncStream 0m0.618s 100000
+~~ async ~~
+node fast-glob async 0m0.315s 100000
+node globby async 0m0.414s 100000
+node current glob async mjs 0m0.366s 100000
+node current glob stream 0m0.345s 100000
+
+--- pattern: './{**/?{/**/?{/**/?{/**/?,,,,},,,,},,,,},,,}/**/*.txt' ---
+~~ sync ~~
+node fast-glob sync 0m0.588s 100000
+node globby sync 0m0.670s 100000
+node current globSync mjs 0m0.717s 200023
+node current glob syncStream 0m0.687s 200023
+~~ async ~~
+node fast-glob async 0m0.343s 100000
+node globby async 0m0.418s 100000
+node current glob async mjs 0m0.519s 200023
+node current glob stream 0m0.451s 200023
+
+--- pattern: '**/!(0|9).txt' ---
+~~ sync ~~
+node fast-glob sync 0m0.573s 160023
+node globby sync 0m0.731s 160023
+node current globSync mjs 0m0.680s 180023
+node current glob syncStream 0m0.659s 180023
+~~ async ~~
+node fast-glob async 0m0.345s 160023
+node globby async 0m0.476s 160023
+node current glob async mjs 0m0.427s 180023
+node current glob stream 0m0.388s 180023
+
+--- pattern: './{*/**/../{*/**/../{*/**/../{*/**/../{*/**,,,,},,,,},,,,},,,,},,,,}/*.txt' ---
+~~ sync ~~
+node fast-glob sync 0m0.483s 0
+node globby sync 0m0.512s 0
+node current globSync mjs 0m0.811s 200023
+node current glob syncStream 0m0.773s 200023
+~~ async ~~
+node fast-glob async 0m0.280s 0
+node globby async 0m0.299s 0
+node current glob async mjs 0m0.617s 200023
+node current glob stream 0m0.568s 200023
+
+--- pattern: './*/**/../*/**/../*/**/../*/**/../*/**/../*/**/../*/**/../*/**/*.txt' ---
+~~ sync ~~
+node fast-glob sync 0m0.485s 0
+node globby sync 0m0.507s 0
+node current globSync mjs 0m0.759s 200023
+node current glob syncStream 0m0.740s 200023
+~~ async ~~
+node fast-glob async 0m0.281s 0
+node globby async 0m0.297s 0
+node current glob async mjs 0m0.544s 200023
+node current glob stream 0m0.464s 200023
+
+--- pattern: './*/**/../*/**/../*/**/../*/**/../*/**/*.txt' ---
+~~ sync ~~
+node fast-glob sync 0m0.486s 0
+node globby sync 0m0.513s 0
+node current globSync mjs 0m0.734s 200023
+node current glob syncStream 0m0.696s 200023
+~~ async ~~
+node fast-glob async 0m0.286s 0
+node globby async 0m0.296s 0
+node current glob async mjs 0m0.506s 200023
+node current glob stream 0m0.483s 200023
+
+--- pattern: './0/**/../1/**/../2/**/../3/**/../4/**/../5/**/../6/**/../7/**/*.txt' ---
+~~ sync ~~
+node fast-glob sync 0m0.060s 0
+node globby sync 0m0.074s 0
+node current globSync mjs 0m0.067s 0
+node current glob syncStream 0m0.066s 0
+~~ async ~~
+node fast-glob async 0m0.060s 0
+node globby async 0m0.075s 0
+node current glob async mjs 0m0.066s 0
+node current glob stream 0m0.067s 0
+
+--- pattern: './**/?/**/?/**/?/**/?/**/*.txt' ---
+~~ sync ~~
+node fast-glob sync 0m0.568s 100000
+node globby sync 0m0.651s 100000
+node current globSync mjs 0m0.619s 100000
+node current glob syncStream 0m0.617s 100000
+~~ async ~~
+node fast-glob async 0m0.332s 100000
+node globby async 0m0.409s 100000
+node current glob async mjs 0m0.372s 100000
+node current glob stream 0m0.351s 100000
+
+--- pattern: '**/*/**/*/**/*/**/*/**' ---
+~~ sync ~~
+node fast-glob sync 0m0.603s 200113
+node globby sync 0m0.798s 200113
+node current globSync mjs 0m0.730s 222137
+node current glob syncStream 0m0.693s 222137
+~~ async ~~
+node fast-glob async 0m0.356s 200113
+node globby async 0m0.525s 200113
+node current glob async mjs 0m0.508s 222137
+node current glob stream 0m0.455s 222137
+
+--- pattern: './**/*/**/*/**/*/**/*/**/*.txt' ---
+~~ sync ~~
+node fast-glob sync 0m0.622s 200000
+node globby sync 0m0.792s 200000
+node current globSync mjs 0m0.722s 200000
+node current glob syncStream 0m0.695s 200000
+~~ async ~~
+node fast-glob async 0m0.369s 200000
+node globby async 0m0.527s 200000
+node current glob async mjs 0m0.502s 200000
+node current glob stream 0m0.481s 200000
+
+--- pattern: '**/*.txt' ---
+~~ sync ~~
+node fast-glob sync 0m0.588s 200023
+node globby sync 0m0.771s 200023
+node current globSync mjs 0m0.684s 200023
+node current glob syncStream 0m0.658s 200023
+~~ async ~~
+node fast-glob async 0m0.352s 200023
+node globby async 0m0.516s 200023
+node current glob async mjs 0m0.432s 200023
+node current glob stream 0m0.384s 200023
+
+--- pattern: './**/**/**/**/**/**/**/**/*.txt' ---
+~~ sync ~~
+node fast-glob sync 0m0.589s 200023
+node globby sync 0m0.766s 200023
+node current globSync mjs 0m0.682s 200023
+node current glob syncStream 0m0.652s 200023
+~~ async ~~
+node fast-glob async 0m0.352s 200023
+node globby async 0m0.523s 200023
+node current glob async mjs 0m0.436s 200023
+node current glob stream 0m0.380s 200023
+
+--- pattern: '**/*/*.txt' ---
+~~ sync ~~
+node fast-glob sync 0m0.592s 200023
+node globby sync 0m0.776s 200023
+node current globSync mjs 0m0.691s 200023
+node current glob syncStream 0m0.659s 200023
+~~ async ~~
+node fast-glob async 0m0.357s 200023
+node globby async 0m0.513s 200023
+node current glob async mjs 0m0.471s 200023
+node current glob stream 0m0.424s 200023
+
+--- pattern: '**/*/**/*.txt' ---
+~~ sync ~~
+node fast-glob sync 0m0.585s 200023
+node globby sync 0m0.766s 200023
+node current globSync mjs 0m0.694s 200023
+node current glob syncStream 0m0.664s 200023
+~~ async ~~
+node fast-glob async 0m0.350s 200023
+node globby async 0m0.514s 200023
+node current glob async mjs 0m0.472s 200023
+node current glob stream 0m0.424s 200023
+
+--- pattern: '**/[0-9]/**/*.txt' ---
+~~ sync ~~
+node fast-glob sync 0m0.544s 100000
+node globby sync 0m0.636s 100000
+node current globSync mjs 0m0.626s 100000
+node current glob syncStream 0m0.621s 100000
+~~ async ~~
+node fast-glob async 0m0.322s 100000
+node globby async 0m0.404s 100000
+node current glob async mjs 0m0.360s 100000
+node current glob stream 0m0.352s 100000
+```
diff --git a/deps/npm/node_modules/glob/dist/cjs/index-cjs.js b/deps/npm/node_modules/glob/dist/cjs/index-cjs.js
deleted file mode 100644
index e2b324783e..0000000000
--- a/deps/npm/node_modules/glob/dist/cjs/index-cjs.js
+++ /dev/null
@@ -1,7 +0,0 @@
-"use strict";
-var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-const index_js_1 = __importDefault(require("./index.js"));
-module.exports = Object.assign(index_js_1.default, { default: index_js_1.default, glob: index_js_1.default });
-//# sourceMappingURL=index-cjs.js.map \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/cjs/package.json b/deps/npm/node_modules/glob/dist/cjs/package.json
index 5bbefffbab..e225638de7 100644
--- a/deps/npm/node_modules/glob/dist/cjs/package.json
+++ b/deps/npm/node_modules/glob/dist/cjs/package.json
@@ -1,3 +1,99 @@
{
- "type": "commonjs"
+ "author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)",
+ "name": "glob",
+ "description": "the most correct and second fastest glob implementation in JavaScript",
+ "version": "10.2.2",
+ "bin": "./dist/cjs/src/bin.js",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/isaacs/node-glob.git"
+ },
+ "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",
+ "typedoc": "typedoc --tsconfig tsconfig-esm.json ./src/*.ts",
+ "prepublish": "npm run benchclean",
+ "profclean": "rm -f v8.log profile.txt",
+ "test-regen": "npm run profclean && TEST_REGEN=1 node --no-warnings --loader ts-node/esm test/00-setup.ts",
+ "prebench": "npm run prepare",
+ "bench": "bash benchmark.sh",
+ "preprof": "npm run prepare",
+ "prof": "bash prof.sh",
+ "benchclean": "node benchclean.js"
+ },
+ "prettier": {
+ "semi": false,
+ "printWidth": 75,
+ "tabWidth": 2,
+ "useTabs": false,
+ "singleQuote": true,
+ "jsxSingleQuote": false,
+ "bracketSameLine": true,
+ "arrowParens": "avoid",
+ "endOfLine": "lf"
+ },
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^2.0.3",
+ "minimatch": "^9.0.0",
+ "minipass": "^5.0.0",
+ "path-scurry": "^1.7.0"
+ },
+ "devDependencies": {
+ "@types/node": "^18.11.18",
+ "@types/tap": "^15.0.7",
+ "c8": "^7.12.0",
+ "memfs": "^3.4.13",
+ "mkdirp": "^2.1.4",
+ "prettier": "^2.8.3",
+ "rimraf": "^4.1.3",
+ "tap": "^16.3.4",
+ "ts-node": "^10.9.1",
+ "typedoc": "^0.23.24",
+ "typescript": "^4.9.4"
+ },
+ "tap": {
+ "before": "test/00-setup.ts",
+ "coverage": false,
+ "node-arg": [
+ "--no-warnings",
+ "--loader",
+ "ts-node/esm"
+ ],
+ "ts": false
+ },
+ "license": "ISC",
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
}
diff --git a/deps/npm/node_modules/glob/dist/cjs/src/bin.d.ts b/deps/npm/node_modules/glob/dist/cjs/src/bin.d.ts
new file mode 100644
index 0000000000..34e0052286
--- /dev/null
+++ b/deps/npm/node_modules/glob/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/glob/dist/cjs/src/bin.d.ts.map b/deps/npm/node_modules/glob/dist/cjs/src/bin.d.ts.map
new file mode 100644
index 0000000000..c10c656ec7
--- /dev/null
+++ b/deps/npm/node_modules/glob/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/glob/dist/cjs/src/bin.js b/deps/npm/node_modules/glob/dist/cjs/src/bin.js
new file mode 100755
index 0000000000..733358c736
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/cjs/src/bin.js
@@ -0,0 +1,260 @@
+#!/usr/bin/env node
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const foreground_child_1 = require("foreground-child");
+const fs_1 = require("fs");
+const jackspeak_1 = require("jackspeak");
+const index_js_1 = require("./index.js");
+const package_json_1 = require("../package.json");
+const j = (0, jackspeak_1.jack)({
+ usage: 'glob [options] [<pattern> [<pattern> ...]]'
+})
+ .description(`
+ Glob v${package_json_1.version}
+
+ Expand the positional glob expression arguments into any matching file
+ system paths found.
+ `)
+ .opt({
+ cmd: {
+ short: 'c',
+ hint: 'command',
+ description: `Run the command provided, passing the glob expression
+ matches as arguments.`,
+ },
+})
+ .flag({
+ all: {
+ short: 'A',
+ description: `By default, the glob cli command will not expand any
+ arguments that are an exact match to a file on disk.
+
+ This prevents double-expanding, in case the shell expands
+ an argument whose filename is a glob expression.
+
+ For example, if 'app/*.ts' would match 'app/[id].ts', then
+ on Windows powershell or cmd.exe, 'glob app/*.ts' will
+ expand to 'app/[id].ts', as expected. However, in posix
+ shells such as bash or zsh, the shell will first expand
+ 'app/*.ts' to a list of filenames. Then glob will look
+ for a file matching 'app/[id].ts' (ie, 'app/i.ts' or
+ 'app/d.ts'), which is unexpected.
+
+ Setting '--all' prevents this behavior, causing glob
+ to treat ALL patterns as glob expressions to be expanded,
+ even if they are an exact match to a file on disk.
+
+ When setting this option, be sure to enquote arguments
+ so that the shell will not expand them prior to passing
+ them to the glob command process.
+ `,
+ },
+ absolute: {
+ short: 'a',
+ description: 'Expand to absolute paths',
+ },
+ 'dot-relative': {
+ short: 'd',
+ description: `Prepend './' on relative matches`,
+ },
+ mark: {
+ short: 'm',
+ description: `Append a / on any directories matched`,
+ },
+ posix: {
+ short: 'x',
+ description: `Always resolve to posix style paths, using '/' as the
+ directory separator, even on Windows. Drive letter
+ absolute matches on Windows will be expanded to their
+ full resolved UNC maths, eg instead of 'C:\\foo\\bar',
+ it will expand to '//?/C:/foo/bar'.
+ `,
+ },
+ follow: {
+ short: 'f',
+ description: `Follow symlinked directories when expanding '**'`,
+ },
+ realpath: {
+ short: 'R',
+ description: `Call 'fs.realpath' on all of the results. In the case
+ of an entry that cannot be resolved, the entry is
+ omitted. This incurs a slight performance penalty, of
+ course, because of the added system calls.`,
+ },
+ stat: {
+ short: 's',
+ description: `Call 'fs.lstat' on all entries, whether required or not
+ to determine if it's a valid match.`,
+ },
+ 'match-base': {
+ short: 'b',
+ description: `Perform a basename-only match if the pattern does not
+ contain any slash characters. That is, '*.js' would be
+ treated as equivalent to '**/*.js', matching js files
+ in all directories.
+ `,
+ },
+ dot: {
+ description: `Allow patterns to match files/directories that start
+ with '.', even if the pattern does not start with '.'
+ `,
+ },
+ nobrace: {
+ description: 'Do not expand {...} patterns',
+ },
+ nocase: {
+ description: `Perform a case-insensitive match. This defaults to
+ 'true' on macOS and Windows platforms, and false on
+ all others.
+
+ Note: 'nocase' should only be explicitly set when it is
+ known that the filesystem's case sensitivity differs
+ from the platform default. If set 'true' on
+ case-insensitive file systems, then the walk may return
+ more or less results than expected.
+ `,
+ },
+ nodir: {
+ description: `Do not match directories, only files.
+
+ Note: to *only* match directories, append a '/' at the
+ end of the pattern.
+ `,
+ },
+ noext: {
+ description: `Do not expand extglob patterns, such as '+(a|b)'`,
+ },
+ noglobstar: {
+ description: `Do not expand '**' against multiple path portions.
+ Ie, treat it as a normal '*' instead.`,
+ },
+ 'windows-path-no-escape': {
+ description: `Use '\\' as a path separator *only*, and *never* as an
+ escape character. If set, all '\\' characters are
+ replaced with '/' in the pattern.`,
+ },
+})
+ .num({
+ 'max-depth': {
+ short: 'D',
+ description: `Maximum depth to traverse from the current
+ working directory`,
+ },
+})
+ .opt({
+ cwd: {
+ short: 'C',
+ description: 'Current working directory to execute/match in',
+ default: process.cwd(),
+ },
+ root: {
+ short: 'r',
+ description: `A string path resolved against the 'cwd', which is
+ used as the starting point for absolute patterns that
+ start with '/' (but not drive letters or UNC paths
+ on Windows).
+
+ Note that this *doesn't* necessarily limit the walk to
+ the 'root' directory, and doesn't affect the cwd
+ starting point for non-absolute patterns. A pattern
+ containing '..' will still be able to traverse out of
+ the root directory, if it is not an actual root directory
+ on the filesystem, and any non-absolute patterns will
+ still be matched in the 'cwd'.
+
+ To start absolute and non-absolute patterns in the same
+ path, you can use '--root=' to set it to the empty
+ string. However, be aware that on Windows systems, a
+ pattern like 'x:/*' or '//host/share/*' will *always*
+ start in the 'x:/' or '//host/share/' directory,
+ regardless of the --root setting.
+ `,
+ },
+ platform: {
+ description: `Defaults to the value of 'process.platform' if
+ available, or 'linux' if not. Setting --platform=win32
+ on non-Windows systems may cause strange behavior!`,
+ validate: v => new Set([
+ 'aix',
+ 'android',
+ 'darwin',
+ 'freebsd',
+ 'haiku',
+ 'linux',
+ 'openbsd',
+ 'sunos',
+ 'win32',
+ 'cygwin',
+ 'netbsd',
+ ]).has(v),
+ },
+})
+ .optList({
+ ignore: {
+ short: 'i',
+ description: `Glob patterns to ignore`,
+ },
+})
+ .flag({
+ debug: {
+ short: 'v',
+ description: `Output a huge amount of noisy debug information about
+ patterns as they are parsed and used to match files.`,
+ },
+})
+ .flag({
+ help: {
+ short: 'h',
+ description: 'Show this usage information',
+ },
+});
+try {
+ const { positionals, values } = j.parse();
+ if (values.help) {
+ console.log(j.usage());
+ process.exit(0);
+ }
+ if (positionals.length === 0)
+ throw 'No patterns provided';
+ const patterns = values.all
+ ? positionals
+ : positionals.filter(p => !(0, fs_1.existsSync)(p));
+ const matches = values.all ? [] : positionals.filter(p => (0, fs_1.existsSync)(p));
+ const stream = (0, index_js_1.globStream)(patterns, {
+ absolute: values.absolute,
+ cwd: values.cwd,
+ dot: values.dot,
+ dotRelative: values['dot-relative'],
+ follow: values.follow,
+ ignore: values.ignore,
+ mark: values.mark,
+ matchBase: values['match-base'],
+ maxDepth: values['max-depth'],
+ nobrace: values.nobrace,
+ nocase: values.nocase,
+ nodir: values.nodir,
+ noext: values.noext,
+ noglobstar: values.noglobstar,
+ platform: values.platform,
+ realpath: values.realpath,
+ root: values.root,
+ stat: values.stat,
+ debug: values.debug,
+ posix: values.posix,
+ });
+ const cmd = values.cmd;
+ if (!cmd) {
+ matches.forEach(m => console.log(m));
+ stream.on('data', f => console.log(f));
+ }
+ else {
+ stream.on('data', f => matches.push(f));
+ stream.on('end', () => (0, foreground_child_1.foregroundChild)(cmd, matches, { shell: true }));
+ }
+}
+catch (e) {
+ console.error(j.usage());
+ console.error(e instanceof Error ? e.message : String(e));
+ process.exit(1);
+}
+//# sourceMappingURL=bin.js.map \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/cjs/src/bin.js.map b/deps/npm/node_modules/glob/dist/cjs/src/bin.js.map
new file mode 100644
index 0000000000..abd2aa47d8
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/cjs/src/bin.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"bin.js","sourceRoot":"","sources":["../../../src/bin.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\nimport { foregroundChild } from 'foreground-child'\nimport { existsSync } from 'fs'\nimport { jack } from 'jackspeak'\nimport { globStream } from './index.js'\nimport { version } from '../package.json'\n\nconst j = jack({\n usage: 'glob [options] [<pattern> [<pattern> ...]]'\n})\n .description(\n `\n Glob v${version}\n\n Expand the positional glob expression arguments into any matching file\n system paths found.\n `\n )\n .opt({\n cmd: {\n short: 'c',\n hint: 'command',\n description: `Run the command provided, passing the glob expression\n matches as arguments.`,\n },\n })\n .flag({\n all: {\n short: 'A',\n description: `By default, the glob cli command will not expand any\n arguments that are an exact match to a file on disk.\n\n This prevents double-expanding, in case the shell expands\n an argument whose filename is a glob expression.\n\n For example, if 'app/*.ts' would match 'app/[id].ts', then\n on Windows powershell or cmd.exe, 'glob app/*.ts' will\n expand to 'app/[id].ts', as expected. However, in posix\n shells such as bash or zsh, the shell will first expand\n 'app/*.ts' to a list of filenames. Then glob will look\n for a file matching 'app/[id].ts' (ie, 'app/i.ts' or\n 'app/d.ts'), which is unexpected.\n\n Setting '--all' prevents this behavior, causing glob\n to treat ALL patterns as glob expressions to be expanded,\n even if they are an exact match to a file on disk.\n\n When setting this option, be sure to enquote arguments\n so that the shell will not expand them prior to passing\n them to the glob command process.\n `,\n },\n absolute: {\n short: 'a',\n description: 'Expand to absolute paths',\n },\n 'dot-relative': {\n short: 'd',\n description: `Prepend './' on relative matches`,\n },\n mark: {\n short: 'm',\n description: `Append a / on any directories matched`,\n },\n posix: {\n short: 'x',\n description: `Always resolve to posix style paths, using '/' as the\n directory separator, even on Windows. Drive letter\n absolute matches on Windows will be expanded to their\n full resolved UNC maths, eg instead of 'C:\\\\foo\\\\bar',\n it will expand to '//?/C:/foo/bar'.\n `,\n },\n\n follow: {\n short: 'f',\n description: `Follow symlinked directories when expanding '**'`,\n },\n realpath: {\n short: 'R',\n description: `Call 'fs.realpath' on all of the results. In the case\n of an entry that cannot be resolved, the entry is\n omitted. This incurs a slight performance penalty, of\n course, because of the added system calls.`,\n },\n stat: {\n short: 's',\n description: `Call 'fs.lstat' on all entries, whether required or not\n to determine if it's a valid match.`,\n },\n 'match-base': {\n short: 'b',\n description: `Perform a basename-only match if the pattern does not\n contain any slash characters. That is, '*.js' would be\n treated as equivalent to '**/*.js', matching js files\n in all directories.\n `,\n },\n\n dot: {\n description: `Allow patterns to match files/directories that start\n with '.', even if the pattern does not start with '.'\n `,\n },\n nobrace: {\n description: 'Do not expand {...} patterns',\n },\n nocase: {\n description: `Perform a case-insensitive match. This defaults to\n 'true' on macOS and Windows platforms, and false on\n all others.\n\n Note: 'nocase' should only be explicitly set when it is\n known that the filesystem's case sensitivity differs\n from the platform default. If set 'true' on\n case-insensitive file systems, then the walk may return\n more or less results than expected.\n `,\n },\n nodir: {\n description: `Do not match directories, only files.\n\n Note: to *only* match directories, append a '/' at the\n end of the pattern.\n `,\n },\n noext: {\n description: `Do not expand extglob patterns, such as '+(a|b)'`,\n },\n noglobstar: {\n description: `Do not expand '**' against multiple path portions.\n Ie, treat it as a normal '*' instead.`,\n },\n 'windows-path-no-escape': {\n description: `Use '\\\\' as a path separator *only*, and *never* as an\n escape character. If set, all '\\\\' characters are\n replaced with '/' in the pattern.`,\n },\n })\n .num({\n 'max-depth': {\n short: 'D',\n description: `Maximum depth to traverse from the current\n working directory`,\n },\n })\n .opt({\n cwd: {\n short: 'C',\n description: 'Current working directory to execute/match in',\n default: process.cwd(),\n },\n root: {\n short: 'r',\n description: `A string path resolved against the 'cwd', which is\n used as the starting point for absolute patterns that\n start with '/' (but not drive letters or UNC paths\n on Windows).\n\n Note that this *doesn't* necessarily limit the walk to\n the 'root' directory, and doesn't affect the cwd\n starting point for non-absolute patterns. A pattern\n containing '..' will still be able to traverse out of\n the root directory, if it is not an actual root directory\n on the filesystem, and any non-absolute patterns will\n still be matched in the 'cwd'.\n\n To start absolute and non-absolute patterns in the same\n path, you can use '--root=' to set it to the empty\n string. However, be aware that on Windows systems, a\n pattern like 'x:/*' or '//host/share/*' will *always*\n start in the 'x:/' or '//host/share/' directory,\n regardless of the --root setting.\n `,\n },\n platform: {\n description: `Defaults to the value of 'process.platform' if\n available, or 'linux' if not. Setting --platform=win32\n on non-Windows systems may cause strange behavior!`,\n validate: v =>\n new Set([\n 'aix',\n 'android',\n 'darwin',\n 'freebsd',\n 'haiku',\n 'linux',\n 'openbsd',\n 'sunos',\n 'win32',\n 'cygwin',\n 'netbsd',\n ]).has(v),\n },\n })\n .optList({\n ignore: {\n short: 'i',\n description: `Glob patterns to ignore`,\n },\n })\n .flag({\n debug: {\n short: 'v',\n description: `Output a huge amount of noisy debug information about\n patterns as they are parsed and used to match files.`,\n },\n })\n .flag({\n help: {\n short: 'h',\n description: 'Show this usage information',\n },\n })\n\ntry {\n const { positionals, values } = j.parse()\n if (values.help) {\n console.log(j.usage())\n process.exit(0)\n }\n if (positionals.length === 0) throw 'No patterns provided'\n const patterns = values.all\n ? positionals\n : positionals.filter(p => !existsSync(p))\n const matches = values.all ? [] : positionals.filter(p => existsSync(p))\n const stream = globStream(patterns, {\n absolute: values.absolute,\n cwd: values.cwd,\n dot: values.dot,\n dotRelative: values['dot-relative'],\n follow: values.follow,\n ignore: values.ignore,\n mark: values.mark,\n matchBase: values['match-base'],\n maxDepth: values['max-depth'],\n nobrace: values.nobrace,\n nocase: values.nocase,\n nodir: values.nodir,\n noext: values.noext,\n noglobstar: values.noglobstar,\n platform: values.platform as undefined | NodeJS.Platform,\n realpath: values.realpath,\n root: values.root,\n stat: values.stat,\n debug: values.debug,\n posix: values.posix,\n })\n\n const cmd = values.cmd\n if (!cmd) {\n matches.forEach(m => console.log(m))\n stream.on('data', f => console.log(f))\n } else {\n stream.on('data', f => matches.push(f))\n stream.on('end', () => foregroundChild(cmd, matches, { shell: true }))\n }\n} catch (e) {\n console.error(j.usage())\n console.error(e instanceof Error ? e.message : String(e))\n process.exit(1)\n}\n"]} \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/cjs/src/glob.d.ts b/deps/npm/node_modules/glob/dist/cjs/src/glob.d.ts
new file mode 100644
index 0000000000..a8b3da7722
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/cjs/src/glob.d.ts
@@ -0,0 +1,344 @@
+/// <reference types="node" />
+import { Minimatch } from 'minimatch';
+import { Minipass } from 'minipass';
+import { FSOption, Path, PathScurry } from 'path-scurry';
+import { IgnoreLike } from './ignore.js';
+import { Pattern } from './pattern.js';
+export type MatchSet = Minimatch['set'];
+export type GlobParts = Exclude<Minimatch['globParts'], undefined>;
+/**
+ * A `GlobOptions` object may be provided to any of the exported methods, and
+ * must be provided to the `Glob` constructor.
+ *
+ * All options are optional, boolean, and false by default, unless otherwise
+ * noted.
+ *
+ * All resolved options are added to the Glob object as properties.
+ *
+ * If you are running many `glob` operations, you can pass a Glob object as the
+ * `options` argument to a subsequent operation to share the previously loaded
+ * cache.
+ */
+export interface GlobOptions {
+ /**
+ * Set to `true` to always receive absolute paths for
+ * matched files. Set to `false` to always return relative paths.
+ *
+ * When this option is not set, absolute paths are returned for patterns
+ * that are absolute, and otherwise paths are returned that are relative
+ * to the `cwd` setting.
+ *
+ * This does _not_ make an extra system call to get
+ * the realpath, it only does string path resolution.
+ *
+ * Conflicts with {@link withFileTypes}
+ */
+ absolute?: boolean;
+ /**
+ * Set to false to enable {@link windowsPathsNoEscape}
+ *
+ * @deprecated
+ */
+ allowWindowsEscape?: boolean;
+ /**
+ * The current working directory in which to search. Defaults to
+ * `process.cwd()`.
+ *
+ * May be eiher a string path or a `file://` URL object or string.
+ */
+ cwd?: string | URL;
+ /**
+ * Include `.dot` files in normal matches and `globstar`
+ * matches. Note that an explicit dot in a portion of the pattern
+ * will always match dot files.
+ */
+ dot?: boolean;
+ /**
+ * Prepend all relative path strings with `./` (or `.\` on Windows).
+ *
+ * Without this option, returned relative paths are "bare", so instead of
+ * returning `'./foo/bar'`, they are returned as `'foo/bar'`.
+ *
+ * Relative patterns starting with `'../'` are not prepended with `./`, even
+ * if this option is set.
+ */
+ dotRelative?: boolean;
+ /**
+ * Follow symlinked directories when expanding `**`
+ * patterns. This can result in a lot of duplicate references in
+ * the presence of cyclic links, and make performance quite bad.
+ *
+ * By default, a `**` in a pattern will follow 1 symbolic link if
+ * it is not the first item in the pattern, or none if it is the
+ * first item in the pattern, following the same behavior as Bash.
+ */
+ follow?: boolean;
+ /**
+ * string or string[], or an object with `ignore` and `ignoreChildren`
+ * methods.
+ *
+ * If a string or string[] is provided, then this is treated as a glob
+ * pattern or array of glob patterns to exclude from matches. To ignore all
+ * children within a directory, as well as the entry itself, append `'/**'`
+ * to the ignore pattern.
+ *
+ * **Note** `ignore` patterns are _always_ in `dot:true` mode, regardless of
+ * any other settings.
+ *
+ * If an object is provided that has `ignored(path)` and/or
+ * `childrenIgnored(path)` methods, then these methods will be called to
+ * determine whether any Path is a match or if its children should be
+ * traversed, respectively.
+ */
+ ignore?: string | string[] | IgnoreLike;
+ /**
+ * Treat brace expansion like `{a,b}` as a "magic" pattern. Has no
+ * effect if {@link nobrace} is set.
+ *
+ * Only has effect on the {@link hasMagic} function.
+ */
+ magicalBraces?: boolean;
+ /**
+ * Add a `/` character to directory matches. Note that this requires
+ * additional stat calls in some cases.
+ */
+ mark?: boolean;
+ /**
+ * Perform a basename-only match if the pattern does not contain any slash
+ * characters. That is, `*.js` would be treated as equivalent to
+ * `**\/*.js`, matching all js files in all directories.
+ */
+ matchBase?: boolean;
+ /**
+ * Limit the directory traversal to a given depth below the cwd.
+ * Note that this does NOT prevent traversal to sibling folders,
+ * root patterns, and so on. It only limits the maximum folder depth
+ * that the walk will descend, relative to the cwd.
+ */
+ maxDepth?: number;
+ /**
+ * Do not expand `{a,b}` and `{1..3}` brace sets.
+ */
+ nobrace?: boolean;
+ /**
+ * Perform a case-insensitive match. This defaults to `true` on macOS and
+ * Windows systems, and `false` on all others.
+ *
+ * **Note** `nocase` should only be explicitly set when it is
+ * known that the filesystem's case sensitivity differs from the
+ * platform default. If set `true` on case-sensitive file
+ * systems, or `false` on case-insensitive file systems, then the
+ * walk may return more or less results than expected.
+ */
+ nocase?: boolean;
+ /**
+ * Do not match directories, only files. (Note: to match
+ * _only_ directories, put a `/` at the end of the pattern.)
+ */
+ nodir?: boolean;
+ /**
+ * Do not match "extglob" patterns such as `+(a|b)`.
+ */
+ noext?: boolean;
+ /**
+ * Do not match `**` against multiple filenames. (Ie, treat it as a normal
+ * `*` instead.)
+ *
+ * Conflicts with {@link matchBase}
+ */
+ noglobstar?: boolean;
+ /**
+ * Defaults to value of `process.platform` if available, or `'linux'` if
+ * not. Setting `platform:'win32'` on non-Windows systems may cause strange
+ * behavior.
+ */
+ platform?: NodeJS.Platform;
+ /**
+ * Set to true to call `fs.realpath` on all of the
+ * results. In the case of an entry that cannot be resolved, the
+ * entry is omitted. This incurs a slight performance penalty, of
+ * course, because of the added system calls.
+ */
+ realpath?: boolean;
+ /**
+ *
+ * A string path resolved against the `cwd` option, which
+ * is used as the starting point for absolute patterns that start
+ * with `/`, (but not drive letters or UNC paths on Windows).
+ *
+ * Note that this _doesn't_ necessarily limit the walk to the
+ * `root` directory, and doesn't affect the cwd starting point for
+ * non-absolute patterns. A pattern containing `..` will still be
+ * able to traverse out of the root directory, if it is not an
+ * actual root directory on the filesystem, and any non-absolute
+ * patterns will be matched in the `cwd`. For example, the
+ * pattern `/../*` with `{root:'/some/path'}` will return all
+ * files in `/some`, not all files in `/some/path`. The pattern
+ * `*` with `{root:'/some/path'}` will return all the entries in
+ * the cwd, not the entries in `/some/path`.
+ *
+ * To start absolute and non-absolute patterns in the same
+ * path, you can use `{root:''}`. However, be aware that on
+ * Windows systems, a pattern like `x:/*` or `//host/share/*` will
+ * _always_ start in the `x:/` or `//host/share` directory,
+ * regardless of the `root` setting.
+ */
+ root?: string;
+ /**
+ * A [PathScurry](http://npm.im/path-scurry) object used
+ * to traverse the file system. If the `nocase` option is set
+ * explicitly, then any provided `scurry` object must match this
+ * setting.
+ */
+ scurry?: PathScurry;
+ /**
+ * Call `lstat()` on all entries, whether required or not to determine
+ * if it's a valid match. When used with {@link withFileTypes}, this means
+ * that matches will include data such as modified time, permissions, and
+ * so on. Note that this will incur a performance cost due to the added
+ * system calls.
+ */
+ stat?: boolean;
+ /**
+ * An AbortSignal which will cancel the Glob walk when
+ * triggered.
+ */
+ signal?: AbortSignal;
+ /**
+ * Use `\\` as a path separator _only_, and
+ * _never_ as an escape character. If set, all `\\` characters are
+ * replaced with `/` in the pattern.
+ *
+ * Note that this makes it **impossible** to match against paths
+ * containing literal glob pattern characters, but allows matching
+ * with patterns constructed using `path.join()` and
+ * `path.resolve()` on Windows platforms, mimicking the (buggy!)
+ * behavior of Glob v7 and before on Windows. Please use with
+ * caution, and be mindful of [the caveat below about Windows
+ * paths](#windows). (For legacy reasons, this is also set if
+ * `allowWindowsEscape` is set to the exact value `false`.)
+ */
+ windowsPathsNoEscape?: boolean;
+ /**
+ * Return [PathScurry](http://npm.im/path-scurry)
+ * `Path` objects instead of strings. These are similar to a
+ * NodeJS `Dirent` object, but with additional methods and
+ * properties.
+ *
+ * Conflicts with {@link absolute}
+ */
+ withFileTypes?: boolean;
+ /**
+ * An fs implementation to override some or all of the defaults. See
+ * http://npm.im/path-scurry for details about what can be overridden.
+ */
+ fs?: FSOption;
+ /**
+ * Just passed along to Minimatch. Note that this makes all pattern
+ * matching operations slower and *extremely* noisy.
+ */
+ debug?: boolean;
+ /**
+ * Return `/` delimited paths, even on Windows.
+ *
+ * On posix systems, this has no effect. But, on Windows, it means that
+ * paths will be `/` delimited, and absolute paths will be their full
+ * resolved UNC forms, eg instead of `'C:\\foo\\bar'`, it would return
+ * `'//?/C:/foo/bar'`
+ */
+ posix?: boolean;
+}
+export type GlobOptionsWithFileTypesTrue = GlobOptions & {
+ withFileTypes: true;
+ absolute?: undefined;
+ mark?: undefined;
+ posix?: undefined;
+};
+export type GlobOptionsWithFileTypesFalse = GlobOptions & {
+ withFileTypes?: false;
+};
+export type GlobOptionsWithFileTypesUnset = GlobOptions & {
+ withFileTypes?: undefined;
+};
+export type Result<Opts> = Opts extends GlobOptionsWithFileTypesTrue ? Path : Opts extends GlobOptionsWithFileTypesFalse ? string : Opts extends GlobOptionsWithFileTypesUnset ? string : string | Path;
+export type Results<Opts> = Result<Opts>[];
+export type FileTypes<Opts> = Opts extends GlobOptionsWithFileTypesTrue ? true : Opts extends GlobOptionsWithFileTypesFalse ? false : Opts extends GlobOptionsWithFileTypesUnset ? false : boolean;
+/**
+ * An object that can perform glob pattern traversals.
+ */
+export declare class Glob<Opts extends GlobOptions> implements GlobOptions {
+ absolute?: boolean;
+ cwd: string;
+ root?: string;
+ dot: boolean;
+ dotRelative: boolean;
+ follow: boolean;
+ ignore?: string | string[] | IgnoreLike;
+ magicalBraces: boolean;
+ mark?: boolean;
+ matchBase: boolean;
+ maxDepth: number;
+ nobrace: boolean;
+ nocase: boolean;
+ nodir: boolean;
+ noext: boolean;
+ noglobstar: boolean;
+ pattern: string[];
+ platform: NodeJS.Platform;
+ realpath: boolean;
+ scurry: PathScurry;
+ stat: boolean;
+ signal?: AbortSignal;
+ windowsPathsNoEscape: boolean;
+ withFileTypes: FileTypes<Opts>;
+ /**
+ * The options provided to the constructor.
+ */
+ opts: Opts;
+ /**
+ * An array of parsed immutable {@link Pattern} objects.
+ */
+ patterns: Pattern[];
+ /**
+ * All options are stored as properties on the `Glob` object.
+ *
+ * See {@link GlobOptions} for full options descriptions.
+ *
+ * Note that a previous `Glob` object can be passed as the
+ * `GlobOptions` to another `Glob` instantiation to re-use settings
+ * and caches with a new pattern.
+ *
+ * Traversal functions can be called multiple times to run the walk
+ * again.
+ */
+ constructor(pattern: string | string[], opts: Opts);
+ /**
+ * Returns a Promise that resolves to the results array.
+ */
+ walk(): Promise<Results<Opts>>;
+ /**
+ * synchronous {@link Glob.walk}
+ */
+ walkSync(): Results<Opts>;
+ /**
+ * Stream results asynchronously.
+ */
+ stream(): Minipass<Result<Opts>, Result<Opts>>;
+ /**
+ * Stream results synchronously.
+ */
+ streamSync(): Minipass<Result<Opts>, Result<Opts>>;
+ /**
+ * Default sync iteration function. Returns a Generator that
+ * iterates over the results.
+ */
+ iterateSync(): Generator<Result<Opts>, void, void>;
+ [Symbol.iterator](): Generator<Result<Opts>, void, void>;
+ /**
+ * Default async iteration function. Returns an AsyncGenerator that
+ * iterates over the results.
+ */
+ iterate(): AsyncGenerator<Result<Opts>, void, void>;
+ [Symbol.asyncIterator](): AsyncGenerator<Result<Opts>, void, void>;
+}
+//# sourceMappingURL=glob.d.ts.map \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/cjs/src/glob.d.ts.map b/deps/npm/node_modules/glob/dist/cjs/src/glob.d.ts.map
new file mode 100644
index 0000000000..bd44bbf49d
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/cjs/src/glob.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../../../src/glob.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/cjs/glob.js b/deps/npm/node_modules/glob/dist/cjs/src/glob.js
index 5e1d25ed4b..a05d9f0eb3 100644
--- a/deps/npm/node_modules/glob/dist/cjs/glob.js
+++ b/deps/npm/node_modules/glob/dist/cjs/src/glob.js
@@ -144,6 +144,7 @@ class Glob {
optimizationLevel: 2,
platform: this.platform,
windowsPathsNoEscape: this.windowsPathsNoEscape,
+ debug: !!this.opts.debug,
};
const mms = this.pattern.map(p => new minimatch_1.Minimatch(p, mmo));
const [matchSet, globParts] = mms.reduce((set, m) => {
diff --git a/deps/npm/node_modules/glob/dist/cjs/src/glob.js.map b/deps/npm/node_modules/glob/dist/cjs/src/glob.js.map
new file mode 100644
index 0000000000..aae70b0e44
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/cjs/src/glob.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"glob.js","sourceRoot":"","sources":["../../../src/glob.ts"],"names":[],"mappings":"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","sourcesContent":["import { Minimatch, MinimatchOptions } from 'minimatch'\nimport { Minipass } from 'minipass'\nimport {\n FSOption,\n Path,\n PathScurry,\n PathScurryDarwin,\n PathScurryPosix,\n PathScurryWin32,\n} from 'path-scurry'\nimport { fileURLToPath } from 'url'\nimport { IgnoreLike } from './ignore.js'\nimport { Pattern } from './pattern.js'\nimport { GlobStream, GlobWalker } from './walker.js'\n\nexport type MatchSet = Minimatch['set']\nexport type GlobParts = Exclude<Minimatch['globParts'], undefined>\n\n// if no process global, just call it linux.\n// so we default to case-sensitive, / separators\nconst defaultPlatform: NodeJS.Platform =\n typeof process === 'object' &&\n process &&\n typeof process.platform === 'string'\n ? process.platform\n : 'linux'\n\n/**\n * A `GlobOptions` object may be provided to any of the exported methods, and\n * must be provided to the `Glob` constructor.\n *\n * All options are optional, boolean, and false by default, unless otherwise\n * noted.\n *\n * All resolved options are added to the Glob object as properties.\n *\n * If you are running many `glob` operations, you can pass a Glob object as the\n * `options` argument to a subsequent operation to share the previously loaded\n * cache.\n */\nexport interface GlobOptions {\n /**\n * Set to `true` to always receive absolute paths for\n * matched files. Set to `false` to always return relative paths.\n *\n * When this option is not set, absolute paths are returned for patterns\n * that are absolute, and otherwise paths are returned that are relative\n * to the `cwd` setting.\n *\n * This does _not_ make an extra system call to get\n * the realpath, it only does string path resolution.\n *\n * Conflicts with {@link withFileTypes}\n */\n absolute?: boolean\n\n /**\n * Set to false to enable {@link windowsPathsNoEscape}\n *\n * @deprecated\n */\n allowWindowsEscape?: boolean\n\n /**\n * The current working directory in which to search. Defaults to\n * `process.cwd()`.\n *\n * May be eiher a string path or a `file://` URL object or string.\n */\n cwd?: string | URL\n\n /**\n * Include `.dot` files in normal matches and `globstar`\n * matches. Note that an explicit dot in a portion of the pattern\n * will always match dot files.\n */\n dot?: boolean\n\n /**\n * Prepend all relative path strings with `./` (or `.\\` on Windows).\n *\n * Without this option, returned relative paths are \"bare\", so instead of\n * returning `'./foo/bar'`, they are returned as `'foo/bar'`.\n *\n * Relative patterns starting with `'../'` are not prepended with `./`, even\n * if this option is set.\n */\n dotRelative?: boolean\n\n /**\n * Follow symlinked directories when expanding `**`\n * patterns. This can result in a lot of duplicate references in\n * the presence of cyclic links, and make performance quite bad.\n *\n * By default, a `**` in a pattern will follow 1 symbolic link if\n * it is not the first item in the pattern, or none if it is the\n * first item in the pattern, following the same behavior as Bash.\n */\n follow?: boolean\n\n /**\n * string or string[], or an object with `ignore` and `ignoreChildren`\n * methods.\n *\n * If a string or string[] is provided, then this is treated as a glob\n * pattern or array of glob patterns to exclude from matches. To ignore all\n * children within a directory, as well as the entry itself, append `'/**'`\n * to the ignore pattern.\n *\n * **Note** `ignore` patterns are _always_ in `dot:true` mode, regardless of\n * any other settings.\n *\n * If an object is provided that has `ignored(path)` and/or\n * `childrenIgnored(path)` methods, then these methods will be called to\n * determine whether any Path is a match or if its children should be\n * traversed, respectively.\n */\n ignore?: string | string[] | IgnoreLike\n\n /**\n * Treat brace expansion like `{a,b}` as a \"magic\" pattern. Has no\n * effect if {@link nobrace} is set.\n *\n * Only has effect on the {@link hasMagic} function.\n */\n magicalBraces?: boolean\n\n /**\n * Add a `/` character to directory matches. Note that this requires\n * additional stat calls in some cases.\n */\n mark?: boolean\n\n /**\n * Perform a basename-only match if the pattern does not contain any slash\n * characters. That is, `*.js` would be treated as equivalent to\n * `**\\/*.js`, matching all js files in all directories.\n */\n matchBase?: boolean\n\n /**\n * Limit the directory traversal to a given depth below the cwd.\n * Note that this does NOT prevent traversal to sibling folders,\n * root patterns, and so on. It only limits the maximum folder depth\n * that the walk will descend, relative to the cwd.\n */\n maxDepth?: number\n\n /**\n * Do not expand `{a,b}` and `{1..3}` brace sets.\n */\n nobrace?: boolean\n\n /**\n * Perform a case-insensitive match. This defaults to `true` on macOS and\n * Windows systems, and `false` on all others.\n *\n * **Note** `nocase` should only be explicitly set when it is\n * known that the filesystem's case sensitivity differs from the\n * platform default. If set `true` on case-sensitive file\n * systems, or `false` on case-insensitive file systems, then the\n * walk may return more or less results than expected.\n */\n nocase?: boolean\n\n /**\n * Do not match directories, only files. (Note: to match\n * _only_ directories, put a `/` at the end of the pattern.)\n */\n nodir?: boolean\n\n /**\n * Do not match \"extglob\" patterns such as `+(a|b)`.\n */\n noext?: boolean\n\n /**\n * Do not match `**` against multiple filenames. (Ie, treat it as a normal\n * `*` instead.)\n *\n * Conflicts with {@link matchBase}\n */\n noglobstar?: boolean\n\n /**\n * Defaults to value of `process.platform` if available, or `'linux'` if\n * not. Setting `platform:'win32'` on non-Windows systems may cause strange\n * behavior.\n */\n platform?: NodeJS.Platform\n\n /**\n * Set to true to call `fs.realpath` on all of the\n * results. In the case of an entry that cannot be resolved, the\n * entry is omitted. This incurs a slight performance penalty, of\n * course, because of the added system calls.\n */\n realpath?: boolean\n\n /**\n *\n * A string path resolved against the `cwd` option, which\n * is used as the starting point for absolute patterns that start\n * with `/`, (but not drive letters or UNC paths on Windows).\n *\n * Note that this _doesn't_ necessarily limit the walk to the\n * `root` directory, and doesn't affect the cwd starting point for\n * non-absolute patterns. A pattern containing `..` will still be\n * able to traverse out of the root directory, if it is not an\n * actual root directory on the filesystem, and any non-absolute\n * patterns will be matched in the `cwd`. For example, the\n * pattern `/../*` with `{root:'/some/path'}` will return all\n * files in `/some`, not all files in `/some/path`. The pattern\n * `*` with `{root:'/some/path'}` will return all the entries in\n * the cwd, not the entries in `/some/path`.\n *\n * To start absolute and non-absolute patterns in the same\n * path, you can use `{root:''}`. However, be aware that on\n * Windows systems, a pattern like `x:/*` or `//host/share/*` will\n * _always_ start in the `x:/` or `//host/share` directory,\n * regardless of the `root` setting.\n */\n root?: string\n\n /**\n * A [PathScurry](http://npm.im/path-scurry) object used\n * to traverse the file system. If the `nocase` option is set\n * explicitly, then any provided `scurry` object must match this\n * setting.\n */\n scurry?: PathScurry\n\n /**\n * Call `lstat()` on all entries, whether required or not to determine\n * if it's a valid match. When used with {@link withFileTypes}, this means\n * that matches will include data such as modified time, permissions, and\n * so on. Note that this will incur a performance cost due to the added\n * system calls.\n */\n stat?: boolean\n\n /**\n * An AbortSignal which will cancel the Glob walk when\n * triggered.\n */\n signal?: AbortSignal\n\n /**\n * Use `\\\\` as a path separator _only_, and\n * _never_ as an escape character. If set, all `\\\\` characters are\n * replaced with `/` in the pattern.\n *\n * Note that this makes it **impossible** to match against paths\n * containing literal glob pattern characters, but allows matching\n * with patterns constructed using `path.join()` and\n * `path.resolve()` on Windows platforms, mimicking the (buggy!)\n * behavior of Glob v7 and before on Windows. Please use with\n * caution, and be mindful of [the caveat below about Windows\n * paths](#windows). (For legacy reasons, this is also set if\n * `allowWindowsEscape` is set to the exact value `false`.)\n */\n windowsPathsNoEscape?: boolean\n\n /**\n * Return [PathScurry](http://npm.im/path-scurry)\n * `Path` objects instead of strings. These are similar to a\n * NodeJS `Dirent` object, but with additional methods and\n * properties.\n *\n * Conflicts with {@link absolute}\n */\n withFileTypes?: boolean\n\n /**\n * An fs implementation to override some or all of the defaults. See\n * http://npm.im/path-scurry for details about what can be overridden.\n */\n fs?: FSOption\n\n /**\n * Just passed along to Minimatch. Note that this makes all pattern\n * matching operations slower and *extremely* noisy.\n */\n debug?: boolean\n\n /**\n * Return `/` delimited paths, even on Windows.\n *\n * On posix systems, this has no effect. But, on Windows, it means that\n * paths will be `/` delimited, and absolute paths will be their full\n * resolved UNC forms, eg instead of `'C:\\\\foo\\\\bar'`, it would return\n * `'//?/C:/foo/bar'`\n */\n posix?: boolean\n}\n\nexport type GlobOptionsWithFileTypesTrue = GlobOptions & {\n withFileTypes: true\n // string options not relevant if returning Path objects.\n absolute?: undefined\n mark?: undefined\n posix?: undefined\n}\n\nexport type GlobOptionsWithFileTypesFalse = GlobOptions & {\n withFileTypes?: false\n}\n\nexport type GlobOptionsWithFileTypesUnset = GlobOptions & {\n withFileTypes?: undefined\n}\n\nexport type Result<Opts> = Opts extends GlobOptionsWithFileTypesTrue\n ? Path\n : Opts extends GlobOptionsWithFileTypesFalse\n ? string\n : Opts extends GlobOptionsWithFileTypesUnset\n ? string\n : string | Path\nexport type Results<Opts> = Result<Opts>[]\n\nexport type FileTypes<Opts> = Opts extends GlobOptionsWithFileTypesTrue\n ? true\n : Opts extends GlobOptionsWithFileTypesFalse\n ? false\n : Opts extends GlobOptionsWithFileTypesUnset\n ? false\n : boolean\n\n/**\n * An object that can perform glob pattern traversals.\n */\nexport class Glob<Opts extends GlobOptions> implements GlobOptions {\n absolute?: boolean\n cwd: string\n root?: string\n dot: boolean\n dotRelative: boolean\n follow: boolean\n ignore?: string | string[] | IgnoreLike\n magicalBraces: boolean\n mark?: boolean\n matchBase: boolean\n maxDepth: number\n nobrace: boolean\n nocase: boolean\n nodir: boolean\n noext: boolean\n noglobstar: boolean\n pattern: string[]\n platform: NodeJS.Platform\n realpath: boolean\n scurry: PathScurry\n stat: boolean\n signal?: AbortSignal\n windowsPathsNoEscape: boolean\n withFileTypes: FileTypes<Opts>\n\n /**\n * The options provided to the constructor.\n */\n opts: Opts\n\n /**\n * An array of parsed immutable {@link Pattern} objects.\n */\n patterns: Pattern[]\n\n /**\n * All options are stored as properties on the `Glob` object.\n *\n * See {@link GlobOptions} for full options descriptions.\n *\n * Note that a previous `Glob` object can be passed as the\n * `GlobOptions` to another `Glob` instantiation to re-use settings\n * and caches with a new pattern.\n *\n * Traversal functions can be called multiple times to run the walk\n * again.\n */\n constructor(pattern: string | string[], opts: Opts) {\n this.withFileTypes = !!opts.withFileTypes as FileTypes<Opts>\n this.signal = opts.signal\n this.follow = !!opts.follow\n this.dot = !!opts.dot\n this.dotRelative = !!opts.dotRelative\n this.nodir = !!opts.nodir\n this.mark = !!opts.mark\n if (!opts.cwd) {\n this.cwd = ''\n } else if (opts.cwd instanceof URL || opts.cwd.startsWith('file://')) {\n opts.cwd = fileURLToPath(opts.cwd)\n }\n this.cwd = opts.cwd || ''\n this.root = opts.root\n this.magicalBraces = !!opts.magicalBraces\n this.nobrace = !!opts.nobrace\n this.noext = !!opts.noext\n this.realpath = !!opts.realpath\n this.absolute = opts.absolute\n\n this.noglobstar = !!opts.noglobstar\n this.matchBase = !!opts.matchBase\n this.maxDepth =\n typeof opts.maxDepth === 'number' ? opts.maxDepth : Infinity\n this.stat = !!opts.stat\n this.ignore = opts.ignore\n\n if (this.withFileTypes && this.absolute !== undefined) {\n throw new Error('cannot set absolute and withFileTypes:true')\n }\n\n if (typeof pattern === 'string') {\n pattern = [pattern]\n }\n\n this.windowsPathsNoEscape =\n !!opts.windowsPathsNoEscape ||\n (opts as GlobOptions).allowWindowsEscape === false\n\n if (this.windowsPathsNoEscape) {\n pattern = pattern.map(p => p.replace(/\\\\/g, '/'))\n }\n\n if (this.matchBase) {\n if (opts.noglobstar) {\n throw new TypeError('base matching requires globstar')\n }\n pattern = pattern.map(p => (p.includes('/') ? p : `./**/${p}`))\n }\n\n this.pattern = pattern\n\n this.platform = opts.platform || defaultPlatform\n this.opts = { ...opts, platform: this.platform }\n if (opts.scurry) {\n this.scurry = opts.scurry\n if (\n opts.nocase !== undefined &&\n opts.nocase !== opts.scurry.nocase\n ) {\n throw new Error('nocase option contradicts provided scurry option')\n }\n } else {\n const Scurry =\n opts.platform === 'win32'\n ? PathScurryWin32\n : opts.platform === 'darwin'\n ? PathScurryDarwin\n : opts.platform\n ? PathScurryPosix\n : PathScurry\n this.scurry = new Scurry(this.cwd, {\n nocase: opts.nocase,\n fs: opts.fs,\n })\n }\n this.nocase = this.scurry.nocase\n\n const mmo: MinimatchOptions = {\n // default nocase based on platform\n ...opts,\n dot: this.dot,\n matchBase: this.matchBase,\n nobrace: this.nobrace,\n nocase: this.nocase,\n nocaseMagicOnly: true,\n nocomment: true,\n noext: this.noext,\n nonegate: true,\n optimizationLevel: 2,\n platform: this.platform,\n windowsPathsNoEscape: this.windowsPathsNoEscape,\n debug: !!this.opts.debug,\n }\n\n const mms = this.pattern.map(p => new Minimatch(p, mmo))\n const [matchSet, globParts] = mms.reduce(\n (set: [MatchSet, GlobParts], m) => {\n set[0].push(...m.set)\n set[1].push(...m.globParts)\n return set\n },\n [[], []]\n )\n this.patterns = matchSet.map((set, i) => {\n return new Pattern(set, globParts[i], 0, this.platform)\n })\n }\n\n /**\n * Returns a Promise that resolves to the results array.\n */\n async walk(): Promise<Results<Opts>>\n async walk(): Promise<(string | Path)[]> {\n // Walkers always return array of Path objects, so we just have to\n // coerce them into the right shape. It will have already called\n // realpath() if the option was set to do so, so we know that's cached.\n // start out knowing the cwd, at least\n return [\n ...(await new GlobWalker(this.patterns, this.scurry.cwd, {\n ...this.opts,\n maxDepth:\n this.maxDepth !== Infinity\n ? this.maxDepth + this.scurry.cwd.depth()\n : Infinity,\n platform: this.platform,\n nocase: this.nocase,\n }).walk()),\n ]\n }\n\n /**\n * synchronous {@link Glob.walk}\n */\n walkSync(): Results<Opts>\n walkSync(): (string | Path)[] {\n return [\n ...new GlobWalker(this.patterns, this.scurry.cwd, {\n ...this.opts,\n maxDepth:\n this.maxDepth !== Infinity\n ? this.maxDepth + this.scurry.cwd.depth()\n : Infinity,\n platform: this.platform,\n nocase: this.nocase,\n }).walkSync(),\n ]\n }\n\n /**\n * Stream results asynchronously.\n */\n stream(): Minipass<Result<Opts>, Result<Opts>>\n stream(): Minipass<string | Path, string | Path> {\n return new GlobStream(this.patterns, this.scurry.cwd, {\n ...this.opts,\n maxDepth:\n this.maxDepth !== Infinity\n ? this.maxDepth + this.scurry.cwd.depth()\n : Infinity,\n platform: this.platform,\n nocase: this.nocase,\n }).stream()\n }\n\n /**\n * Stream results synchronously.\n */\n streamSync(): Minipass<Result<Opts>, Result<Opts>>\n streamSync(): Minipass<string | Path, string | Path> {\n return new GlobStream(this.patterns, this.scurry.cwd, {\n ...this.opts,\n maxDepth:\n this.maxDepth !== Infinity\n ? this.maxDepth + this.scurry.cwd.depth()\n : Infinity,\n platform: this.platform,\n nocase: this.nocase,\n }).streamSync()\n }\n\n /**\n * Default sync iteration function. Returns a Generator that\n * iterates over the results.\n */\n iterateSync(): Generator<Result<Opts>, void, void> {\n return this.streamSync()[Symbol.iterator]()\n }\n [Symbol.iterator]() {\n return this.iterateSync()\n }\n\n /**\n * Default async iteration function. Returns an AsyncGenerator that\n * iterates over the results.\n */\n iterate(): AsyncGenerator<Result<Opts>, void, void> {\n return this.stream()[Symbol.asyncIterator]()\n }\n [Symbol.asyncIterator]() {\n return this.iterate()\n }\n}\n"]} \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/cjs/src/has-magic.d.ts b/deps/npm/node_modules/glob/dist/cjs/src/has-magic.d.ts
new file mode 100644
index 0000000000..8aec3bd972
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/cjs/src/has-magic.d.ts
@@ -0,0 +1,14 @@
+import { GlobOptions } from './glob.js';
+/**
+ * Return true if the patterns provided contain any magic glob characters,
+ * given the options provided.
+ *
+ * Brace expansion is not considered "magic" unless the `magicalBraces` option
+ * is set, as brace expansion just turns one string into an array of strings.
+ * So a pattern like `'x{a,b}y'` would return `false`, because `'xay'` and
+ * `'xby'` both do not contain any magic glob characters, and it's treated the
+ * same as if you had called it on `['xay', 'xby']`. When `magicalBraces:true`
+ * is in the options, brace expansion _is_ treated as a pattern having magic.
+ */
+export declare const hasMagic: (pattern: string | string[], options?: GlobOptions) => boolean;
+//# sourceMappingURL=has-magic.d.ts.map \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/cjs/src/has-magic.d.ts.map b/deps/npm/node_modules/glob/dist/cjs/src/has-magic.d.ts.map
new file mode 100644
index 0000000000..dd5053f80b
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/cjs/src/has-magic.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"has-magic.d.ts","sourceRoot":"","sources":["../../../src/has-magic.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAEvC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,QAAQ,YACV,MAAM,GAAG,MAAM,EAAE,YACjB,WAAW,KACnB,OAQF,CAAA"} \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/cjs/has-magic.js b/deps/npm/node_modules/glob/dist/cjs/src/has-magic.js
index 0918bd57e0..0918bd57e0 100644
--- a/deps/npm/node_modules/glob/dist/cjs/has-magic.js
+++ b/deps/npm/node_modules/glob/dist/cjs/src/has-magic.js
diff --git a/deps/npm/node_modules/glob/dist/cjs/src/has-magic.js.map b/deps/npm/node_modules/glob/dist/cjs/src/has-magic.js.map
new file mode 100644
index 0000000000..9b73cfad7d
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/cjs/src/has-magic.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"has-magic.js","sourceRoot":"","sources":["../../../src/has-magic.ts"],"names":[],"mappings":";;;AAAA,yCAAqC;AAGrC;;;;;;;;;;GAUG;AACI,MAAM,QAAQ,GAAG,CACtB,OAA0B,EAC1B,UAAuB,EAAE,EAChB,EAAE;IACX,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,OAAO,GAAG,CAAC,OAAO,CAAC,CAAA;KACpB;IACD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE;QACvB,IAAI,IAAI,qBAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE;YAAE,OAAO,IAAI,CAAA;KACtD;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAXY,QAAA,QAAQ,YAWpB","sourcesContent":["import { Minimatch } from 'minimatch'\nimport { GlobOptions } from './glob.js'\n\n/**\n * Return true if the patterns provided contain any magic glob characters,\n * given the options provided.\n *\n * Brace expansion is not considered \"magic\" unless the `magicalBraces` option\n * is set, as brace expansion just turns one string into an array of strings.\n * So a pattern like `'x{a,b}y'` would return `false`, because `'xay'` and\n * `'xby'` both do not contain any magic glob characters, and it's treated the\n * same as if you had called it on `['xay', 'xby']`. When `magicalBraces:true`\n * is in the options, brace expansion _is_ treated as a pattern having magic.\n */\nexport const hasMagic = (\n pattern: string | string[],\n options: GlobOptions = {}\n): boolean => {\n if (!Array.isArray(pattern)) {\n pattern = [pattern]\n }\n for (const p of pattern) {\n if (new Minimatch(p, options).hasMagic()) return true\n }\n return false\n}\n"]} \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/cjs/src/ignore.d.ts b/deps/npm/node_modules/glob/dist/cjs/src/ignore.d.ts
new file mode 100644
index 0000000000..e9d74f3b5e
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/cjs/src/ignore.d.ts
@@ -0,0 +1,20 @@
+import { Minimatch } from 'minimatch';
+import { Path } from 'path-scurry';
+import { GlobWalkerOpts } from './walker.js';
+export interface IgnoreLike {
+ ignored?: (p: Path) => boolean;
+ childrenIgnored?: (p: Path) => boolean;
+}
+/**
+ * Class used to process ignored patterns
+ */
+export declare class Ignore implements IgnoreLike {
+ relative: Minimatch[];
+ relativeChildren: Minimatch[];
+ absolute: Minimatch[];
+ absoluteChildren: Minimatch[];
+ constructor(ignored: string[], { nobrace, nocase, noext, noglobstar, platform, }: GlobWalkerOpts);
+ ignored(p: Path): boolean;
+ childrenIgnored(p: Path): boolean;
+}
+//# sourceMappingURL=ignore.d.ts.map \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/cjs/src/ignore.d.ts.map b/deps/npm/node_modules/glob/dist/cjs/src/ignore.d.ts.map
new file mode 100644
index 0000000000..3d604838d1
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/cjs/src/ignore.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ignore.d.ts","sourceRoot":"","sources":["../../../src/ignore.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,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;CACvC;AASD;;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;gBAG3B,OAAO,EAAE,MAAM,EAAE,EACjB,EACE,OAAO,EACP,MAAM,EACN,KAAK,EACL,UAAU,EACV,QAA0B,GAC3B,EAAE,cAAc;IAiDnB,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/cjs/ignore.js b/deps/npm/node_modules/glob/dist/cjs/src/ignore.js
index 0cbcca335e..0cbcca335e 100644
--- a/deps/npm/node_modules/glob/dist/cjs/ignore.js
+++ b/deps/npm/node_modules/glob/dist/cjs/src/ignore.js
diff --git a/deps/npm/node_modules/glob/dist/cjs/src/ignore.js.map b/deps/npm/node_modules/glob/dist/cjs/src/ignore.js.map
new file mode 100644
index 0000000000..7595b4c68f
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/cjs/src/ignore.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ignore.js","sourceRoot":"","sources":["../../../src/ignore.ts"],"names":[],"mappings":"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","sourcesContent":["// give it a pattern, and it'll be able to tell you if\n// a given path should be ignored.\n// Ignoring a path ignores its children if the pattern ends in /**\n// Ignores are always parsed in dot:true mode\n\nimport { Minimatch } from 'minimatch'\nimport { Path } from 'path-scurry'\nimport { Pattern } from './pattern.js'\nimport { GlobWalkerOpts } from './walker.js'\n\nexport interface IgnoreLike {\n ignored?: (p: Path) => boolean\n childrenIgnored?: (p: Path) => boolean\n}\n\nconst defaultPlatform: NodeJS.Platform =\n typeof process === 'object' &&\n process &&\n typeof process.platform === 'string'\n ? process.platform\n : 'linux'\n\n/**\n * Class used to process ignored patterns\n */\nexport class Ignore implements IgnoreLike {\n relative: Minimatch[]\n relativeChildren: Minimatch[]\n absolute: Minimatch[]\n absoluteChildren: Minimatch[]\n\n constructor(\n ignored: string[],\n {\n nobrace,\n nocase,\n noext,\n noglobstar,\n platform = defaultPlatform,\n }: GlobWalkerOpts\n ) {\n this.relative = []\n this.absolute = []\n this.relativeChildren = []\n this.absoluteChildren = []\n const mmopts = {\n dot: true,\n nobrace,\n nocase,\n noext,\n noglobstar,\n optimizationLevel: 2,\n platform,\n nocomment: true,\n nonegate: true,\n }\n\n // this is a little weird, but it gives us a clean set of optimized\n // minimatch matchers, without getting tripped up if one of them\n // ends in /** inside a brace section, and it's only inefficient at\n // the start of the walk, not along it.\n // It'd be nice if the Pattern class just had a .test() method, but\n // handling globstars is a bit of a pita, and that code already lives\n // in minimatch anyway.\n // Another way would be if maybe Minimatch could take its set/globParts\n // as an option, and then we could at least just use Pattern to test\n // for absolute-ness.\n // Yet another way, Minimatch could take an array of glob strings, and\n // a cwd option, and do the right thing.\n for (const ign of ignored) {\n const mm = new Minimatch(ign, mmopts)\n for (let i = 0; i < mm.set.length; i++) {\n const parsed = mm.set[i]\n const globParts = mm.globParts[i]\n const p = new Pattern(parsed, globParts, 0, platform)\n const m = new Minimatch(p.globString(), mmopts)\n const children = globParts[globParts.length - 1] === '**'\n const absolute = p.isAbsolute()\n if (absolute) this.absolute.push(m)\n else this.relative.push(m)\n if (children) {\n if (absolute) this.absoluteChildren.push(m)\n else this.relativeChildren.push(m)\n }\n }\n }\n }\n\n ignored(p: Path): boolean {\n const fullpath = p.fullpath()\n const fullpaths = `${fullpath}/`\n const relative = p.relative() || '.'\n const relatives = `${relative}/`\n for (const m of this.relative) {\n if (m.match(relative) || m.match(relatives)) return true\n }\n for (const m of this.absolute) {\n if (m.match(fullpath) || m.match(fullpaths)) return true\n }\n return false\n }\n\n childrenIgnored(p: Path): boolean {\n const fullpath = p.fullpath() + '/'\n const relative = (p.relative() || '.') + '/'\n for (const m of this.relativeChildren) {\n if (m.match(relative)) return true\n }\n for (const m of this.absoluteChildren) {\n if (m.match(fullpath)) true\n }\n return false\n }\n}\n"]} \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/cjs/src/index.d.ts b/deps/npm/node_modules/glob/dist/cjs/src/index.d.ts
new file mode 100644
index 0000000000..669bf12e6d
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/cjs/src/index.d.ts
@@ -0,0 +1,95 @@
+import { Minipass } from 'minipass';
+import { Path } from 'path-scurry';
+import type { GlobOptions, GlobOptionsWithFileTypesFalse, GlobOptionsWithFileTypesTrue, GlobOptionsWithFileTypesUnset } from './glob.js';
+import { Glob } from './glob.js';
+/**
+ * Syncronous form of {@link globStream}. Will read all the matches as fast as
+ * you consume them, even all in a single tick if you consume them immediately,
+ * but will still respond to backpressure if they're not consumed immediately.
+ */
+export declare function globStreamSync(pattern: string | string[], options: GlobOptionsWithFileTypesTrue): Minipass<Path, Path>;
+export declare function globStreamSync(pattern: string | string[], options: GlobOptionsWithFileTypesFalse): Minipass<string, string>;
+export declare function globStreamSync(pattern: string | string[], options: GlobOptionsWithFileTypesUnset): Minipass<string, string>;
+export declare function globStreamSync(pattern: string | string[], options: GlobOptions): Minipass<Path, Path> | Minipass<string, string>;
+/**
+ * Return a stream that emits all the strings or `Path` objects and
+ * then emits `end` when completed.
+ */
+export declare function globStream(pattern: string | string[], options: GlobOptionsWithFileTypesFalse): Minipass<string, string>;
+export declare function globStream(pattern: string | string[], options: GlobOptionsWithFileTypesTrue): Minipass<Path, Path>;
+export declare function globStream(pattern: string | string[], options?: GlobOptionsWithFileTypesUnset | undefined): Minipass<string, string>;
+export declare function globStream(pattern: string | string[], options: GlobOptions): Minipass<Path, Path> | Minipass<string, string>;
+/**
+ * Synchronous form of {@link glob}
+ */
+export declare function globSync(pattern: string | string[], options: GlobOptionsWithFileTypesFalse): string[];
+export declare function globSync(pattern: string | string[], options: GlobOptionsWithFileTypesTrue): Path[];
+export declare function globSync(pattern: string | string[], options?: GlobOptionsWithFileTypesUnset | undefined): string[];
+export declare function globSync(pattern: string | string[], options: GlobOptions): Path[] | string[];
+/**
+ * Perform an asynchronous glob search for the pattern(s) specified. Returns
+ * [Path](https://isaacs.github.io/path-scurry/classes/PathBase) objects if the
+ * {@link withFileTypes} option is set to `true`. See {@link GlobOptions} for
+ * full option descriptions.
+ */
+declare function glob_(pattern: string | string[], options?: GlobOptionsWithFileTypesUnset | undefined): Promise<string[]>;
+declare function glob_(pattern: string | string[], options: GlobOptionsWithFileTypesTrue): Promise<Path[]>;
+declare function glob_(pattern: string | string[], options: GlobOptionsWithFileTypesFalse): Promise<string[]>;
+declare function glob_(pattern: string | string[], options: GlobOptions): Promise<Path[] | string[]>;
+/**
+ * Return a sync iterator for walking glob pattern matches.
+ */
+export declare function globIterateSync(pattern: string | string[], options?: GlobOptionsWithFileTypesUnset | undefined): Generator<string, void, void>;
+export declare function globIterateSync(pattern: string | string[], options: GlobOptionsWithFileTypesTrue): Generator<Path, void, void>;
+export declare function globIterateSync(pattern: string | string[], options: GlobOptionsWithFileTypesFalse): Generator<string, void, void>;
+export declare function globIterateSync(pattern: string | string[], options: GlobOptions): Generator<Path, void, void> | Generator<string, void, void>;
+/**
+ * Return an async iterator for walking glob pattern matches.
+ */
+export declare function globIterate(pattern: string | string[], options?: GlobOptionsWithFileTypesUnset | undefined): AsyncGenerator<string, void, void>;
+export declare function globIterate(pattern: string | string[], options: GlobOptionsWithFileTypesTrue): AsyncGenerator<Path, void, void>;
+export declare function globIterate(pattern: string | string[], options: GlobOptionsWithFileTypesFalse): AsyncGenerator<string, void, void>;
+export declare function globIterate(pattern: string | string[], options: GlobOptions): AsyncGenerator<Path, void, void> | AsyncGenerator<string, void, void>;
+export declare const streamSync: typeof globStreamSync;
+export declare const stream: typeof globStream & {
+ sync: typeof globStreamSync;
+};
+export declare const iterateSync: typeof globIterateSync;
+export declare const iterate: typeof globIterate & {
+ sync: typeof globIterateSync;
+};
+export declare const sync: typeof globSync & {
+ stream: typeof globStreamSync;
+ iterate: typeof globIterateSync;
+};
+export { escape, unescape } from 'minimatch';
+export { Glob } from './glob.js';
+export type { GlobOptions, GlobOptionsWithFileTypesFalse, GlobOptionsWithFileTypesTrue, GlobOptionsWithFileTypesUnset, } from './glob.js';
+export { hasMagic } from './has-magic.js';
+export type { IgnoreLike } from './ignore.js';
+export type { MatchStream } from './walker.js';
+export declare const glob: typeof glob_ & {
+ glob: typeof glob_;
+ globSync: typeof globSync;
+ sync: typeof globSync & {
+ stream: typeof globStreamSync;
+ iterate: typeof globIterateSync;
+ };
+ globStream: typeof globStream;
+ stream: typeof globStream & {
+ sync: typeof globStreamSync;
+ };
+ globStreamSync: typeof globStreamSync;
+ streamSync: typeof globStreamSync;
+ globIterate: typeof globIterate;
+ iterate: typeof globIterate & {
+ sync: typeof globIterateSync;
+ };
+ globIterateSync: typeof globIterateSync;
+ iterateSync: typeof globIterateSync;
+ Glob: typeof Glob;
+ hasMagic: (pattern: string | string[], options?: GlobOptions) => boolean;
+ escape: (s: string, { windowsPathsNoEscape, }?: Pick<import("minimatch").MinimatchOptions, "windowsPathsNoEscape"> | undefined) => string;
+ unescape: (s: string, { windowsPathsNoEscape, }?: Pick<import("minimatch").MinimatchOptions, "windowsPathsNoEscape"> | undefined) => string;
+};
+//# sourceMappingURL=index.d.ts.map \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/cjs/src/index.d.ts.map b/deps/npm/node_modules/glob/dist/cjs/src/index.d.ts.map
new file mode 100644
index 0000000000..4e9ba085ce
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/cjs/src/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/cjs/index.js b/deps/npm/node_modules/glob/dist/cjs/src/index.js
index 0b6842da93..71c31c03dd 100644
--- a/deps/npm/node_modules/glob/dist/cjs/index.js
+++ b/deps/npm/node_modules/glob/dist/cjs/src/index.js
@@ -1,6 +1,6 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
-exports.hasMagic = exports.Glob = exports.unescape = exports.escape = exports.sync = exports.iterate = exports.iterateSync = exports.stream = exports.streamSync = exports.globIterate = exports.globIterateSync = exports.glob = exports.globSync = exports.globStream = exports.globStreamSync = void 0;
+exports.glob = exports.hasMagic = exports.Glob = exports.unescape = exports.escape = exports.sync = exports.iterate = exports.iterateSync = exports.stream = exports.streamSync = exports.globIterate = exports.globIterateSync = exports.globSync = exports.globStream = exports.globStreamSync = void 0;
const minimatch_1 = require("minimatch");
const glob_js_1 = require("./glob.js");
const has_magic_js_1 = require("./has-magic.js");
@@ -16,10 +16,9 @@ function globSync(pattern, options = {}) {
return new glob_js_1.Glob(pattern, options).walkSync();
}
exports.globSync = globSync;
-async function glob(pattern, options = {}) {
+async function glob_(pattern, options = {}) {
return new glob_js_1.Glob(pattern, options).walk();
}
-exports.glob = glob;
function globIterateSync(pattern, options = {}) {
return new glob_js_1.Glob(pattern, options).iterateSync();
}
@@ -48,8 +47,8 @@ Object.defineProperty(exports, "Glob", { enumerable: true, get: function () { re
var has_magic_js_2 = require("./has-magic.js");
Object.defineProperty(exports, "hasMagic", { enumerable: true, get: function () { return has_magic_js_2.hasMagic; } });
/* c8 ignore stop */
-exports.default = Object.assign(glob, {
- glob,
+exports.glob = Object.assign(glob_, {
+ glob: glob_,
globSync,
sync: exports.sync,
globStream,
@@ -65,4 +64,5 @@ exports.default = Object.assign(glob, {
escape: minimatch_1.escape,
unescape: minimatch_1.unescape,
});
+exports.glob.glob = exports.glob;
//# sourceMappingURL=index.js.map \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/cjs/src/index.js.map b/deps/npm/node_modules/glob/dist/cjs/src/index.js.map
new file mode 100644
index 0000000000..060338fbd1
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/cjs/src/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":";;;AAAA,yCAA4C;AAS5C,uCAAgC;AAChC,iDAAyC;AAuBzC,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;AAEF,qBAAqB;AACrB,uCAA4C;AAAnC,mGAAA,MAAM,OAAA;AAAE,qGAAA,QAAQ,OAAA;AACzB,qCAAgC;AAAvB,+FAAA,IAAI,OAAA;AAOb,+CAAyC;AAAhC,wGAAA,QAAQ,OAAA;AAGjB,oBAAoB;AAEP,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\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<Path, Path>\nexport function globStreamSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse\n): Minipass<string, string>\nexport function globStreamSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesUnset\n): Minipass<string, string>\nexport function globStreamSync(\n pattern: string | string[],\n options: GlobOptions\n): Minipass<Path, Path> | Minipass<string, string>\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<string, string>\nexport function globStream(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue\n): Minipass<Path, Path>\nexport function globStream(\n pattern: string | string[],\n options?: GlobOptionsWithFileTypesUnset | undefined\n): Minipass<string, string>\nexport function globStream(\n pattern: string | string[],\n options: GlobOptions\n): Minipass<Path, Path> | Minipass<string, string>\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<string[]>\nasync function glob_(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue\n): Promise<Path[]>\nasync function glob_(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse\n): Promise<string[]>\nasync function glob_(\n pattern: string | string[],\n options: GlobOptions\n): Promise<Path[] | string[]>\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<string, void, void>\nexport function globIterateSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue\n): Generator<Path, void, void>\nexport function globIterateSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse\n): Generator<string, void, void>\nexport function globIterateSync(\n pattern: string | string[],\n options: GlobOptions\n): Generator<Path, void, void> | Generator<string, void, void>\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<string, void, void>\nexport function globIterate(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue\n): AsyncGenerator<Path, void, void>\nexport function globIterate(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse\n): AsyncGenerator<string, void, void>\nexport function globIterate(\n pattern: string | string[],\n options: GlobOptions\n): AsyncGenerator<Path, void, void> | AsyncGenerator<string, void, void>\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\n/* c8 ignore start */\nexport { escape, unescape } from 'minimatch'\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 type { IgnoreLike } from './ignore.js'\nexport type { MatchStream } from './walker.js'\n/* c8 ignore stop */\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/cjs/src/pattern.d.ts b/deps/npm/node_modules/glob/dist/cjs/src/pattern.d.ts
new file mode 100644
index 0000000000..109cc4e7a5
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/cjs/src/pattern.d.ts
@@ -0,0 +1,77 @@
+/// <reference types="node" />
+import { GLOBSTAR } from 'minimatch';
+export type MMPattern = string | RegExp | typeof GLOBSTAR;
+export type PatternList = [p: MMPattern, ...rest: MMPattern[]];
+export type UNCPatternList = [
+ p0: '',
+ p1: '',
+ p2: string,
+ p3: string,
+ ...rest: MMPattern[]
+];
+export type DrivePatternList = [p0: string, ...rest: MMPattern[]];
+export type AbsolutePatternList = [p0: '', ...rest: MMPattern[]];
+export type GlobList = [p: string, ...rest: string[]];
+/**
+ * An immutable-ish view on an array of glob parts and their parsed
+ * results
+ */
+export declare class Pattern {
+ #private;
+ readonly length: number;
+ constructor(patternList: MMPattern[], globList: string[], index: number, platform: NodeJS.Platform);
+ /**
+ * The first entry in the parsed list of patterns
+ */
+ pattern(): MMPattern;
+ /**
+ * true of if pattern() returns a string
+ */
+ isString(): boolean;
+ /**
+ * true of if pattern() returns GLOBSTAR
+ */
+ isGlobstar(): boolean;
+ /**
+ * true if pattern() returns a regexp
+ */
+ isRegExp(): boolean;
+ /**
+ * The /-joined set of glob parts that make up this pattern
+ */
+ globString(): string;
+ /**
+ * true if there are more pattern parts after this one
+ */
+ hasMore(): boolean;
+ /**
+ * The rest of the pattern after this part, or null if this is the end
+ */
+ rest(): Pattern | null;
+ /**
+ * true if the pattern represents a //unc/path/ on windows
+ */
+ isUNC(): boolean;
+ /**
+ * True if the pattern starts with a drive letter on Windows
+ */
+ isDrive(): boolean;
+ /**
+ * True if the pattern is rooted on an absolute path
+ */
+ isAbsolute(): boolean;
+ /**
+ * consume the root of the pattern, and return it
+ */
+ root(): string;
+ /**
+ * Check to see if the current globstar pattern is allowed to follow
+ * a symbolic link.
+ */
+ checkFollowGlobstar(): boolean;
+ /**
+ * Mark that the current globstar pattern is following a symbolic link
+ */
+ markFollowGlobstar(): boolean;
+}
+//# sourceMappingURL=pattern.d.ts.map \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/cjs/src/pattern.d.ts.map b/deps/npm/node_modules/glob/dist/cjs/src/pattern.d.ts.map
new file mode 100644
index 0000000000..48430f63db
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/cjs/src/pattern.d.ts.map
@@ -0,0 +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;IAOd;;;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/cjs/pattern.js b/deps/npm/node_modules/glob/dist/cjs/src/pattern.js
index 181371293d..181371293d 100644
--- a/deps/npm/node_modules/glob/dist/cjs/pattern.js
+++ b/deps/npm/node_modules/glob/dist/cjs/src/pattern.js
diff --git a/deps/npm/node_modules/glob/dist/cjs/src/pattern.js.map b/deps/npm/node_modules/glob/dist/cjs/src/pattern.js.map
new file mode 100644
index 0000000000..ba5293ff9f
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/cjs/src/pattern.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"pattern.js","sourceRoot":"","sources":["../../../src/pattern.ts"],"names":[],"mappings":"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","sourcesContent":["// this is just a very light wrapper around 2 arrays with an offset index\n\nimport { GLOBSTAR } from 'minimatch'\nexport type MMPattern = string | RegExp | typeof GLOBSTAR\n\n// an array of length >= 1\nexport type PatternList = [p: MMPattern, ...rest: MMPattern[]]\nexport type UNCPatternList = [\n p0: '',\n p1: '',\n p2: string,\n p3: string,\n ...rest: MMPattern[]\n]\nexport type DrivePatternList = [p0: string, ...rest: MMPattern[]]\nexport type AbsolutePatternList = [p0: '', ...rest: MMPattern[]]\nexport type GlobList = [p: string, ...rest: string[]]\n\nconst isPatternList = (pl: MMPattern[]): pl is PatternList =>\n pl.length >= 1\nconst isGlobList = (gl: string[]): gl is GlobList => gl.length >= 1\n\n/**\n * An immutable-ish view on an array of glob parts and their parsed\n * results\n */\nexport class Pattern {\n readonly #patternList: PatternList\n readonly #globList: GlobList\n readonly #index: number\n readonly length: number\n readonly #platform: NodeJS.Platform\n #rest?: Pattern | null\n #globString?: string\n #isDrive?: boolean\n #isUNC?: boolean\n #isAbsolute?: boolean\n #followGlobstar: boolean = true\n\n constructor(\n patternList: MMPattern[],\n globList: string[],\n index: number,\n platform: NodeJS.Platform\n ) {\n if (!isPatternList(patternList)) {\n throw new TypeError('empty pattern list')\n }\n if (!isGlobList(globList)) {\n throw new TypeError('empty glob list')\n }\n if (globList.length !== patternList.length) {\n throw new TypeError('mismatched pattern list and glob list lengths')\n }\n this.length = patternList.length\n if (index < 0 || index >= this.length) {\n throw new TypeError('index out of range')\n }\n this.#patternList = patternList\n this.#globList = globList\n this.#index = index\n this.#platform = platform\n\n // normalize root entries of absolute patterns on initial creation.\n if (this.#index === 0) {\n // c: => ['c:/']\n // C:/ => ['C:/']\n // C:/x => ['C:/', 'x']\n // //host/share => ['//host/share/']\n // //host/share/ => ['//host/share/']\n // //host/share/x => ['//host/share/', 'x']\n // /etc => ['/', 'etc']\n // / => ['/']\n if (this.isUNC()) {\n // '' / '' / 'host' / 'share'\n const [p0, p1, p2, p3, ...prest] = this.#patternList\n const [g0, g1, g2, g3, ...grest] = this.#globList\n if (prest[0] === '') {\n // ends in /\n prest.shift()\n grest.shift()\n }\n const p = [p0, p1, p2, p3, ''].join('/')\n const g = [g0, g1, g2, g3, ''].join('/')\n this.#patternList = [p, ...prest]\n this.#globList = [g, ...grest]\n this.length = this.#patternList.length\n } else if (this.isDrive() || this.isAbsolute()) {\n const [p1, ...prest] = this.#patternList\n const [g1, ...grest] = this.#globList\n if (prest[0] === '') {\n // ends in /\n prest.shift()\n grest.shift()\n }\n const p = (p1 as string) + '/'\n const g = g1 + '/'\n this.#patternList = [p, ...prest]\n this.#globList = [g, ...grest]\n this.length = this.#patternList.length\n }\n }\n }\n\n /**\n * The first entry in the parsed list of patterns\n */\n pattern(): MMPattern {\n return this.#patternList[this.#index]\n }\n\n /**\n * true of if pattern() returns a string\n */\n isString(): boolean {\n return typeof this.#patternList[this.#index] === 'string'\n }\n /**\n * true of if pattern() returns GLOBSTAR\n */\n isGlobstar(): boolean {\n return this.#patternList[this.#index] === GLOBSTAR\n }\n /**\n * true if pattern() returns a regexp\n */\n isRegExp(): boolean {\n return this.#patternList[this.#index] instanceof RegExp\n }\n\n /**\n * The /-joined set of glob parts that make up this pattern\n */\n globString(): string {\n return (this.#globString =\n this.#globString ||\n (this.#index === 0\n ? this.isAbsolute()\n ? this.#globList[0] + this.#globList.slice(1).join('/')\n : this.#globList.join('/')\n : this.#globList.slice(this.#index).join('/')))\n }\n\n /**\n * true if there are more pattern parts after this one\n */\n hasMore(): boolean {\n return this.length > this.#index + 1\n }\n\n /**\n * The rest of the pattern after this part, or null if this is the end\n */\n rest(): Pattern | null {\n if (this.#rest !== undefined) return this.#rest\n if (!this.hasMore()) return (this.#rest = null)\n this.#rest = new Pattern(\n this.#patternList,\n this.#globList,\n this.#index + 1,\n this.#platform\n )\n this.#rest.#isAbsolute = this.#isAbsolute\n this.#rest.#isUNC = this.#isUNC\n this.#rest.#isDrive = this.#isDrive\n return this.#rest\n }\n\n /**\n * true if the pattern represents a //unc/path/ on windows\n */\n isUNC(): boolean {\n const pl = this.#patternList\n return this.#isUNC !== undefined\n ? this.#isUNC\n : (this.#isUNC =\n this.#platform === 'win32' &&\n this.#index === 0 &&\n pl[0] === '' &&\n pl[1] === '' &&\n typeof pl[2] === 'string' &&\n !!pl[2] &&\n typeof pl[3] === 'string' &&\n !!pl[3])\n }\n\n // pattern like C:/...\n // split = ['C:', ...]\n // XXX: would be nice to handle patterns like `c:*` to test the cwd\n // in c: for *, but I don't know of a way to even figure out what that\n // cwd is without actually chdir'ing into it?\n /**\n * True if the pattern starts with a drive letter on Windows\n */\n isDrive(): boolean {\n const pl = this.#patternList\n return this.#isDrive !== undefined\n ? this.#isDrive\n : (this.#isDrive =\n this.#platform === 'win32' &&\n this.#index === 0 &&\n this.length > 1 &&\n typeof pl[0] === 'string' &&\n /^[a-z]:$/i.test(pl[0]))\n }\n\n // pattern = '/' or '/...' or '/x/...'\n // split = ['', ''] or ['', ...] or ['', 'x', ...]\n // Drive and UNC both considered absolute on windows\n /**\n * True if the pattern is rooted on an absolute path\n */\n isAbsolute(): boolean {\n const pl = this.#patternList\n return this.#isAbsolute !== undefined\n ? this.#isAbsolute\n : (this.#isAbsolute =\n (pl[0] === '' && pl.length > 1) ||\n this.isDrive() ||\n this.isUNC())\n }\n\n /**\n * consume the root of the pattern, and return it\n */\n root(): string {\n const p = this.#patternList[0]\n return typeof p === 'string' && this.isAbsolute() && this.#index === 0\n ? p\n : ''\n }\n\n /**\n * Check to see if the current globstar pattern is allowed to follow\n * a symbolic link.\n */\n checkFollowGlobstar(): boolean {\n return !(\n this.#index === 0 ||\n !this.isGlobstar() ||\n !this.#followGlobstar\n )\n }\n\n /**\n * Mark that the current globstar pattern is following a symbolic link\n */\n markFollowGlobstar(): boolean {\n if (this.#index === 0 || !this.isGlobstar() || !this.#followGlobstar)\n return false\n this.#followGlobstar = false\n return true\n }\n}\n"]} \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/cjs/src/processor.d.ts b/deps/npm/node_modules/glob/dist/cjs/src/processor.d.ts
new file mode 100644
index 0000000000..ccedfbf282
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/cjs/src/processor.d.ts
@@ -0,0 +1,59 @@
+import { MMRegExp } from 'minimatch';
+import { Path } from 'path-scurry';
+import { Pattern } from './pattern.js';
+import { GlobWalkerOpts } from './walker.js';
+/**
+ * A cache of which patterns have been processed for a given Path
+ */
+export declare class HasWalkedCache {
+ store: Map<string, Set<string>>;
+ constructor(store?: Map<string, Set<string>>);
+ copy(): HasWalkedCache;
+ hasWalked(target: Path, pattern: Pattern): boolean | undefined;
+ storeWalked(target: Path, pattern: Pattern): void;
+}
+/**
+ * A record of which paths have been matched in a given walk step,
+ * and whether they only are considered a match if they are a directory,
+ * and whether their absolute or relative path should be returned.
+ */
+export declare class MatchRecord {
+ store: Map<Path, number>;
+ add(target: Path, absolute: boolean, ifDir: boolean): void;
+ entries(): [Path, boolean, boolean][];
+}
+/**
+ * A collection of patterns that must be processed in a subsequent step
+ * for a given path.
+ */
+export declare class SubWalks {
+ store: Map<Path, Pattern[]>;
+ add(target: Path, pattern: Pattern): void;
+ get(target: Path): Pattern[];
+ entries(): [Path, Pattern[]][];
+ keys(): Path[];
+}
+/**
+ * The class that processes patterns for a given path.
+ *
+ * Handles child entry filtering, and determining whether a path's
+ * directory contents must be read.
+ */
+export declare class Processor {
+ hasWalkedCache: HasWalkedCache;
+ matches: MatchRecord;
+ subwalks: SubWalks;
+ patterns?: Pattern[];
+ follow: boolean;
+ dot: boolean;
+ opts: GlobWalkerOpts;
+ constructor(opts: GlobWalkerOpts, hasWalkedCache?: HasWalkedCache);
+ processPatterns(target: Path, patterns: Pattern[]): this;
+ subwalkTargets(): Path[];
+ child(): Processor;
+ filterEntries(parent: Path, entries: Path[]): Processor;
+ testGlobstar(e: Path, pattern: Pattern, rest: Pattern | null, absolute: boolean): void;
+ testRegExp(e: Path, p: MMRegExp, rest: Pattern | null, absolute: boolean): void;
+ testString(e: Path, p: string, rest: Pattern | null, absolute: boolean): void;
+}
+//# sourceMappingURL=processor.d.ts.map \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/cjs/src/processor.d.ts.map b/deps/npm/node_modules/glob/dist/cjs/src/processor.d.ts.map
new file mode 100644
index 0000000000..ca6c63ca26
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/cjs/src/processor.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"processor.d.ts","sourceRoot":"","sources":["../../../src/processor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAY,QAAQ,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAClC,OAAO,EAAa,OAAO,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C;;GAEG;AACH,qBAAa,cAAc;IACzB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;gBACnB,KAAK,GAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAa;IAGvD,IAAI;IAGJ,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO;IAGxC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO;CAM3C;AAED;;;;GAIG;AACH,qBAAa,WAAW;IACtB,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAY;IACpC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;IAMnD,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;CAOtC;AAED;;;GAGG;AACH,qBAAa,QAAQ;IACnB,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAY;IACvC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO;IAWlC,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,EAAE;IAS5B,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE;IAG9B,IAAI,IAAI,IAAI,EAAE;CAGf;AAED;;;;;GAKG;AACH,qBAAa,SAAS;IACpB,cAAc,EAAE,cAAc,CAAA;IAC9B,OAAO,cAAoB;IAC3B,QAAQ,WAAiB;IACzB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAA;IACpB,MAAM,EAAE,OAAO,CAAA;IACf,GAAG,EAAE,OAAO,CAAA;IACZ,IAAI,EAAE,cAAc,CAAA;gBAER,IAAI,EAAE,cAAc,EAAE,cAAc,CAAC,EAAE,cAAc;IASjE,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE;IAwGjD,cAAc,IAAI,IAAI,EAAE;IAIxB,KAAK;IAQL,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,SAAS;IAqBvD,YAAY,CACV,CAAC,EAAE,IAAI,EACP,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,OAAO,GAAG,IAAI,EACpB,QAAQ,EAAE,OAAO;IA8CnB,UAAU,CACR,CAAC,EAAE,IAAI,EACP,CAAC,EAAE,QAAQ,EACX,IAAI,EAAE,OAAO,GAAG,IAAI,EACpB,QAAQ,EAAE,OAAO;IAUnB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,EAAE,QAAQ,EAAE,OAAO;CASvE"} \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/cjs/processor.js b/deps/npm/node_modules/glob/dist/cjs/src/processor.js
index bd067e9b90..bd067e9b90 100644
--- a/deps/npm/node_modules/glob/dist/cjs/processor.js
+++ b/deps/npm/node_modules/glob/dist/cjs/src/processor.js
diff --git a/deps/npm/node_modules/glob/dist/cjs/src/processor.js.map b/deps/npm/node_modules/glob/dist/cjs/src/processor.js.map
new file mode 100644
index 0000000000..bcbac1f723
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/cjs/src/processor.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"processor.js","sourceRoot":"","sources":["../../../src/processor.ts"],"names":[],"mappings":"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","sourcesContent":["// synchronous utility for filtering entries and calculating subwalks\n\nimport { GLOBSTAR, MMRegExp } from 'minimatch'\nimport { Path } from 'path-scurry'\nimport { MMPattern, Pattern } from './pattern.js'\nimport { GlobWalkerOpts } from './walker.js'\n\n/**\n * A cache of which patterns have been processed for a given Path\n */\nexport class HasWalkedCache {\n store: Map<string, Set<string>>\n constructor(store: Map<string, Set<string>> = new Map()) {\n this.store = store\n }\n copy() {\n return new HasWalkedCache(new Map(this.store))\n }\n hasWalked(target: Path, pattern: Pattern) {\n return this.store.get(target.fullpath())?.has(pattern.globString())\n }\n storeWalked(target: Path, pattern: Pattern) {\n const fullpath = target.fullpath()\n const cached = this.store.get(fullpath)\n if (cached) cached.add(pattern.globString())\n else this.store.set(fullpath, new Set([pattern.globString()]))\n }\n}\n\n/**\n * A record of which paths have been matched in a given walk step,\n * and whether they only are considered a match if they are a directory,\n * and whether their absolute or relative path should be returned.\n */\nexport class MatchRecord {\n store: Map<Path, number> = new Map()\n add(target: Path, absolute: boolean, ifDir: boolean) {\n const n = (absolute ? 2 : 0) | (ifDir ? 1 : 0)\n const current = this.store.get(target)\n this.store.set(target, current === undefined ? n : n & current)\n }\n // match, absolute, ifdir\n entries(): [Path, boolean, boolean][] {\n return [...this.store.entries()].map(([path, n]) => [\n path,\n !!(n & 2),\n !!(n & 1),\n ])\n }\n}\n\n/**\n * A collection of patterns that must be processed in a subsequent step\n * for a given path.\n */\nexport class SubWalks {\n store: Map<Path, Pattern[]> = new Map()\n add(target: Path, pattern: Pattern) {\n if (!target.canReaddir()) {\n return\n }\n const subs = this.store.get(target)\n if (subs) {\n if (!subs.find(p => p.globString() === pattern.globString())) {\n subs.push(pattern)\n }\n } else this.store.set(target, [pattern])\n }\n get(target: Path): Pattern[] {\n const subs = this.store.get(target)\n /* c8 ignore start */\n if (!subs) {\n throw new Error('attempting to walk unknown path')\n }\n /* c8 ignore stop */\n return subs\n }\n entries(): [Path, Pattern[]][] {\n return this.keys().map(k => [k, this.store.get(k) as Pattern[]])\n }\n keys(): Path[] {\n return [...this.store.keys()].filter(t => t.canReaddir())\n }\n}\n\n/**\n * The class that processes patterns for a given path.\n *\n * Handles child entry filtering, and determining whether a path's\n * directory contents must be read.\n */\nexport class Processor {\n hasWalkedCache: HasWalkedCache\n matches = new MatchRecord()\n subwalks = new SubWalks()\n patterns?: Pattern[]\n follow: boolean\n dot: boolean\n opts: GlobWalkerOpts\n\n constructor(opts: GlobWalkerOpts, hasWalkedCache?: HasWalkedCache) {\n this.opts = opts\n this.follow = !!opts.follow\n this.dot = !!opts.dot\n this.hasWalkedCache = hasWalkedCache\n ? hasWalkedCache.copy()\n : new HasWalkedCache()\n }\n\n processPatterns(target: Path, patterns: Pattern[]) {\n this.patterns = patterns\n const processingSet: [Path, Pattern][] = patterns.map(p => [target, p])\n\n // map of paths to the magic-starting subwalks they need to walk\n // first item in patterns is the filter\n\n for (let [t, pattern] of processingSet) {\n this.hasWalkedCache.storeWalked(t, pattern)\n\n const root = pattern.root()\n const absolute = pattern.isAbsolute() && this.opts.absolute !== false\n\n // start absolute patterns at root\n if (root) {\n t = t.resolve(\n root === '/' && this.opts.root !== undefined\n ? this.opts.root\n : root\n )\n const rest = pattern.rest()\n if (!rest) {\n this.matches.add(t, true, false)\n continue\n } else {\n pattern = rest\n }\n }\n\n if (t.isENOENT()) continue\n\n let p: MMPattern\n let rest: Pattern | null\n let changed = false\n while (\n typeof (p = pattern.pattern()) === 'string' &&\n (rest = pattern.rest())\n ) {\n const c = t.resolve(p)\n // we can be reasonably sure that .. is a readable dir\n if (c.isUnknown() && p !== '..') break\n t = c\n pattern = rest\n changed = true\n }\n p = pattern.pattern()\n rest = pattern.rest()\n if (changed) {\n if (this.hasWalkedCache.hasWalked(t, pattern)) continue\n this.hasWalkedCache.storeWalked(t, pattern)\n }\n\n // now we have either a final string for a known entry,\n // more strings for an unknown entry,\n // or a pattern starting with magic, mounted on t.\n if (typeof p === 'string') {\n // must be final entry\n if (!rest) {\n const ifDir = p === '..' || p === '' || p === '.'\n this.matches.add(t.resolve(p), absolute, ifDir)\n } else {\n this.subwalks.add(t, pattern)\n }\n continue\n } else if (p === GLOBSTAR) {\n // if no rest, match and subwalk pattern\n // if rest, process rest and subwalk pattern\n // if it's a symlink, but we didn't get here by way of a\n // globstar match (meaning it's the first time THIS globstar\n // has traversed a symlink), then we follow it. Otherwise, stop.\n if (\n !t.isSymbolicLink() ||\n this.follow ||\n pattern.checkFollowGlobstar()\n ) {\n this.subwalks.add(t, pattern)\n }\n const rp = rest?.pattern()\n const rrest = rest?.rest()\n if (!rest || ((rp === '' || rp === '.') && !rrest)) {\n // only HAS to be a dir if it ends in **/ or **/.\n // but ending in ** will match files as well.\n this.matches.add(t, absolute, rp === '' || rp === '.')\n } else {\n if (rp === '..') {\n // this would mean you're matching **/.. at the fs root,\n // and no thanks, I'm not gonna test that specific case.\n /* c8 ignore start */\n const tp = t.parent || t\n /* c8 ignore stop */\n if (!rrest) this.matches.add(tp, absolute, true)\n else if (!this.hasWalkedCache.hasWalked(tp, rrest)) {\n this.subwalks.add(tp, rrest)\n }\n }\n }\n } else if (p instanceof RegExp) {\n this.subwalks.add(t, pattern)\n }\n }\n\n return this\n }\n\n subwalkTargets(): Path[] {\n return this.subwalks.keys()\n }\n\n child() {\n return new Processor(this.opts, this.hasWalkedCache)\n }\n\n // return a new Processor containing the subwalks for each\n // child entry, and a set of matches, and\n // a hasWalkedCache that's a copy of this one\n // then we're going to call\n filterEntries(parent: Path, entries: Path[]): Processor {\n const patterns = this.subwalks.get(parent)\n // put matches and entry walks into the results processor\n const results = this.child()\n for (const e of entries) {\n for (const pattern of patterns) {\n const absolute = pattern.isAbsolute()\n const p = pattern.pattern()\n const rest = pattern.rest()\n if (p === GLOBSTAR) {\n results.testGlobstar(e, pattern, rest, absolute)\n } else if (p instanceof RegExp) {\n results.testRegExp(e, p, rest, absolute)\n } else {\n results.testString(e, p, rest, absolute)\n }\n }\n }\n return results\n }\n\n testGlobstar(\n e: Path,\n pattern: Pattern,\n rest: Pattern | null,\n absolute: boolean\n ) {\n if (this.dot || !e.name.startsWith('.')) {\n if (!pattern.hasMore()) {\n this.matches.add(e, absolute, false)\n }\n if (e.canReaddir()) {\n // if we're in follow mode or it's not a symlink, just keep\n // testing the same pattern. If there's more after the globstar,\n // then this symlink consumes the globstar. If not, then we can\n // follow at most ONE symlink along the way, so we mark it, which\n // also checks to ensure that it wasn't already marked.\n if (this.follow || !e.isSymbolicLink()) {\n this.subwalks.add(e, pattern)\n } else if (e.isSymbolicLink()) {\n if (rest && pattern.checkFollowGlobstar()) {\n this.subwalks.add(e, rest)\n } else if (pattern.markFollowGlobstar()) {\n this.subwalks.add(e, pattern)\n }\n }\n }\n }\n // if the NEXT thing matches this entry, then also add\n // the rest.\n if (rest) {\n const rp = rest.pattern()\n if (\n typeof rp === 'string' &&\n // dots and empty were handled already\n rp !== '..' &&\n rp !== '' &&\n rp !== '.'\n ) {\n this.testString(e, rp, rest.rest(), absolute)\n } else if (rp === '..') {\n /* c8 ignore start */\n const ep = e.parent || e\n /* c8 ignore stop */\n this.subwalks.add(ep, rest)\n } else if (rp instanceof RegExp) {\n this.testRegExp(e, rp, rest.rest(), absolute)\n }\n }\n }\n\n testRegExp(\n e: Path,\n p: MMRegExp,\n rest: Pattern | null,\n absolute: boolean\n ) {\n if (!p.test(e.name)) return\n if (!rest) {\n this.matches.add(e, absolute, false)\n } else {\n this.subwalks.add(e, rest)\n }\n }\n\n testString(e: Path, p: string, rest: Pattern | null, absolute: boolean) {\n // should never happen?\n if (!e.isNamed(p)) return\n if (!rest) {\n this.matches.add(e, absolute, false)\n } else {\n this.subwalks.add(e, rest)\n }\n }\n}\n"]} \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/cjs/src/walker.d.ts b/deps/npm/node_modules/glob/dist/cjs/src/walker.d.ts
new file mode 100644
index 0000000000..5c1a041497
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/cjs/src/walker.d.ts
@@ -0,0 +1,96 @@
+/// <reference types="node" />
+/**
+ * Single-use utility classes to provide functionality to the {@link Glob}
+ * methods.
+ *
+ * @module
+ */
+import { Minipass } from 'minipass';
+import { Path } from 'path-scurry';
+import { IgnoreLike } from './ignore.js';
+import { Pattern } from './pattern.js';
+import { Processor } from './processor.js';
+export interface GlobWalkerOpts {
+ absolute?: boolean;
+ allowWindowsEscape?: boolean;
+ cwd?: string | URL;
+ dot?: boolean;
+ dotRelative?: boolean;
+ follow?: boolean;
+ ignore?: string | string[] | IgnoreLike;
+ mark?: boolean;
+ matchBase?: boolean;
+ maxDepth?: number;
+ nobrace?: boolean;
+ nocase?: boolean;
+ nodir?: boolean;
+ noext?: boolean;
+ noglobstar?: boolean;
+ platform?: NodeJS.Platform;
+ posix?: boolean;
+ realpath?: boolean;
+ root?: string;
+ stat?: boolean;
+ signal?: AbortSignal;
+ windowsPathsNoEscape?: boolean;
+ withFileTypes?: boolean;
+}
+export type GWOFileTypesTrue = GlobWalkerOpts & {
+ withFileTypes: true;
+};
+export type GWOFileTypesFalse = GlobWalkerOpts & {
+ withFileTypes: false;
+};
+export type GWOFileTypesUnset = GlobWalkerOpts & {
+ withFileTypes?: undefined;
+};
+export type Result<O extends GlobWalkerOpts> = O extends GWOFileTypesTrue ? Path : O extends GWOFileTypesFalse ? string : O extends GWOFileTypesUnset ? string : Path | string;
+export type Matches<O extends GlobWalkerOpts> = O extends GWOFileTypesTrue ? Set<Path> : O extends GWOFileTypesFalse ? Set<string> : O extends GWOFileTypesUnset ? Set<string> : Set<Path | string>;
+export type MatchStream<O extends GlobWalkerOpts> = O extends GWOFileTypesTrue ? Minipass<Path, Path> : O extends GWOFileTypesFalse ? Minipass<string, string> : O extends GWOFileTypesUnset ? Minipass<string, string> : Minipass<Path | string, Path | string>;
+/**
+ * basic walking utilities that all the glob walker types use
+ */
+export declare abstract class GlobUtil<O extends GlobWalkerOpts = GlobWalkerOpts> {
+ #private;
+ path: Path;
+ patterns: Pattern[];
+ opts: O;
+ seen: Set<Path>;
+ paused: boolean;
+ aborted: boolean;
+ signal?: AbortSignal;
+ maxDepth: number;
+ constructor(patterns: Pattern[], path: Path, opts: O);
+ pause(): void;
+ resume(): void;
+ onResume(fn: () => any): void;
+ matchCheck(e: Path, ifDir: boolean): Promise<Path | undefined>;
+ matchCheckTest(e: Path | undefined, ifDir: boolean): Path | undefined;
+ matchCheckSync(e: Path, ifDir: boolean): Path | undefined;
+ abstract matchEmit(p: Result<O>): void;
+ abstract matchEmit(p: string | Path): void;
+ matchFinish(e: Path, absolute: boolean): void;
+ match(e: Path, absolute: boolean, ifDir: boolean): Promise<void>;
+ matchSync(e: Path, absolute: boolean, ifDir: boolean): void;
+ walkCB(target: Path, patterns: Pattern[], cb: () => any): void;
+ walkCB2(target: Path, patterns: Pattern[], processor: Processor, cb: () => any): any;
+ walkCB3(target: Path, entries: Path[], processor: Processor, cb: () => any): void;
+ walkCBSync(target: Path, patterns: Pattern[], cb: () => any): void;
+ walkCB2Sync(target: Path, patterns: Pattern[], processor: Processor, cb: () => any): any;
+ walkCB3Sync(target: Path, entries: Path[], processor: Processor, cb: () => any): void;
+}
+export declare class GlobWalker<O extends GlobWalkerOpts = GlobWalkerOpts> extends GlobUtil<O> {
+ matches: O extends GWOFileTypesTrue ? Set<Path> : O extends GWOFileTypesFalse ? Set<string> : O extends GWOFileTypesUnset ? Set<string> : Set<Path | string>;
+ constructor(patterns: Pattern[], path: Path, opts: O);
+ matchEmit(e: Result<O>): void;
+ walk(): Promise<Matches<O>>;
+ walkSync(): Matches<O>;
+}
+export declare class GlobStream<O extends GlobWalkerOpts = GlobWalkerOpts> extends GlobUtil<O> {
+ results: O extends GWOFileTypesTrue ? Minipass<Path, Path> : O extends GWOFileTypesFalse ? Minipass<string, string> : O extends GWOFileTypesUnset ? Minipass<string, string> : Minipass<Path | string, Path | string>;
+ constructor(patterns: Pattern[], path: Path, opts: O);
+ matchEmit(e: Result<O>): void;
+ stream(): MatchStream<O>;
+ streamSync(): MatchStream<O>;
+}
+//# sourceMappingURL=walker.d.ts.map \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/cjs/src/walker.d.ts.map b/deps/npm/node_modules/glob/dist/cjs/src/walker.d.ts.map
new file mode 100644
index 0000000000..dda062358f
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/cjs/src/walker.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"walker.d.ts","sourceRoot":"","sources":["../../../src/walker.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/cjs/walker.js b/deps/npm/node_modules/glob/dist/cjs/src/walker.js
index 8c31172cc9..9651ce1164 100644
--- a/deps/npm/node_modules/glob/dist/cjs/walker.js
+++ b/deps/npm/node_modules/glob/dist/cjs/src/walker.js
@@ -1,7 +1,4 @@
"use strict";
-var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
Object.defineProperty(exports, "__esModule", { value: true });
exports.GlobStream = exports.GlobWalker = exports.GlobUtil = void 0;
/**
@@ -10,7 +7,7 @@ exports.GlobStream = exports.GlobWalker = exports.GlobUtil = void 0;
*
* @module
*/
-const minipass_1 = __importDefault(require("minipass"));
+const minipass_1 = require("minipass");
const ignore_js_1 = require("./ignore.js");
const processor_js_1 = require("./processor.js");
const makeIgnore = (ignore, opts) => typeof ignore === 'string'
@@ -37,7 +34,7 @@ class GlobUtil {
this.patterns = patterns;
this.path = path;
this.opts = opts;
- this.#sep = opts.platform === 'win32' ? '\\' : '/';
+ this.#sep = !opts.posix && opts.platform === 'win32' ? '\\' : '/';
if (opts.ignore) {
this.#ignore = makeIgnore(opts.ignore, opts);
}
@@ -134,14 +131,15 @@ class GlobUtil {
this.matchEmit(e);
}
else if (abs) {
- this.matchEmit(e.fullpath() + mark);
+ const abs = this.opts.posix ? e.fullpathPosix() : e.fullpath();
+ this.matchEmit(abs + mark);
}
else {
- const rel = e.relative();
+ const rel = this.opts.posix ? e.relativePosix() : e.relative();
const pre = this.opts.dotRelative && !rel.startsWith('..' + this.#sep)
? '.' + this.#sep
: '';
- this.matchEmit(!rel && mark ? '.' + mark : pre + rel + mark);
+ this.matchEmit(!rel ? '.' + mark : pre + rel + mark);
}
}
async match(e, absolute, ifDir) {
@@ -324,7 +322,7 @@ class GlobStream extends GlobUtil {
results;
constructor(patterns, path, opts) {
super(patterns, path, opts);
- this.results = new minipass_1.default({
+ this.results = new minipass_1.Minipass({
signal: this.signal,
objectMode: true,
});
diff --git a/deps/npm/node_modules/glob/dist/cjs/src/walker.js.map b/deps/npm/node_modules/glob/dist/cjs/src/walker.js.map
new file mode 100644
index 0000000000..a7af398939
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/cjs/src/walker.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"walker.js","sourceRoot":"","sources":["../../../src/walker.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Single-use utility classes to provide functionality to the {@link Glob}\n * methods.\n *\n * @module\n */\nimport { Minipass } from 'minipass'\nimport { Path } from 'path-scurry'\nimport { Ignore, IgnoreLike } from './ignore.js'\n\n// XXX can we somehow make it so that it NEVER processes a given path more than\n// once, enough that the match set tracking is no longer needed? that'd speed\n// things up a lot. Or maybe bring back nounique, and skip it in that case?\n\n// a single minimatch set entry with 1 or more parts\nimport { Pattern } from './pattern.js'\nimport { Processor } from './processor.js'\n\nexport interface GlobWalkerOpts {\n absolute?: boolean\n allowWindowsEscape?: boolean\n cwd?: string | URL\n dot?: boolean\n dotRelative?: boolean\n follow?: boolean\n ignore?: string | string[] | IgnoreLike\n mark?: boolean\n matchBase?: boolean\n // Note: maxDepth here means \"maximum actual Path.depth()\",\n // not \"maximum depth beyond cwd\"\n maxDepth?: number\n nobrace?: boolean\n nocase?: boolean\n nodir?: boolean\n noext?: boolean\n noglobstar?: boolean\n platform?: NodeJS.Platform\n posix?: boolean\n realpath?: boolean\n root?: string\n stat?: boolean\n signal?: AbortSignal\n windowsPathsNoEscape?: boolean\n withFileTypes?: boolean\n}\n\nexport type GWOFileTypesTrue = GlobWalkerOpts & {\n withFileTypes: true\n}\nexport type GWOFileTypesFalse = GlobWalkerOpts & {\n withFileTypes: false\n}\nexport type GWOFileTypesUnset = GlobWalkerOpts & {\n withFileTypes?: undefined\n}\n\nexport type Result<O extends GlobWalkerOpts> = O extends GWOFileTypesTrue\n ? Path\n : O extends GWOFileTypesFalse\n ? string\n : O extends GWOFileTypesUnset\n ? string\n : Path | string\n\nexport type Matches<O extends GlobWalkerOpts> = O extends GWOFileTypesTrue\n ? Set<Path>\n : O extends GWOFileTypesFalse\n ? Set<string>\n : O extends GWOFileTypesUnset\n ? Set<string>\n : Set<Path | string>\n\nexport type MatchStream<O extends GlobWalkerOpts> =\n O extends GWOFileTypesTrue\n ? Minipass<Path, Path>\n : O extends GWOFileTypesFalse\n ? Minipass<string, string>\n : O extends GWOFileTypesUnset\n ? Minipass<string, string>\n : Minipass<Path | string, Path | string>\n\nconst makeIgnore = (\n ignore: string | string[] | IgnoreLike,\n opts: GlobWalkerOpts\n): IgnoreLike =>\n typeof ignore === 'string'\n ? new Ignore([ignore], opts)\n : Array.isArray(ignore)\n ? new Ignore(ignore, opts)\n : ignore\n\n/**\n * basic walking utilities that all the glob walker types use\n */\nexport abstract class GlobUtil<O extends GlobWalkerOpts = GlobWalkerOpts> {\n path: Path\n patterns: Pattern[]\n opts: O\n seen: Set<Path> = new Set<Path>()\n paused: boolean = false\n aborted: boolean = false\n #onResume: (() => any)[] = []\n #ignore?: IgnoreLike\n #sep: '\\\\' | '/'\n signal?: AbortSignal\n maxDepth: number\n\n constructor(patterns: Pattern[], path: Path, opts: O)\n constructor(patterns: Pattern[], path: Path, opts: O) {\n this.patterns = patterns\n this.path = path\n this.opts = opts\n this.#sep = !opts.posix && opts.platform === 'win32' ? '\\\\' : '/'\n if (opts.ignore) {\n this.#ignore = makeIgnore(opts.ignore, opts)\n }\n // ignore, always set with maxDepth, but it's optional on the\n // GlobOptions type\n /* c8 ignore start */\n this.maxDepth = opts.maxDepth || Infinity\n /* c8 ignore stop */\n if (opts.signal) {\n this.signal = opts.signal\n this.signal.addEventListener('abort', () => {\n this.#onResume.length = 0\n })\n }\n }\n\n #ignored(path: Path): boolean {\n return this.seen.has(path) || !!this.#ignore?.ignored?.(path)\n }\n #childrenIgnored(path: Path): boolean {\n return !!this.#ignore?.childrenIgnored?.(path)\n }\n\n // backpressure mechanism\n pause() {\n this.paused = true\n }\n resume() {\n /* c8 ignore start */\n if (this.signal?.aborted) return\n /* c8 ignore stop */\n this.paused = false\n let fn: (() => any) | undefined = undefined\n while (!this.paused && (fn = this.#onResume.shift())) {\n fn()\n }\n }\n onResume(fn: () => any) {\n if (this.signal?.aborted) return\n /* c8 ignore start */\n if (!this.paused) {\n fn()\n } else {\n /* c8 ignore stop */\n this.#onResume.push(fn)\n }\n }\n\n // do the requisite realpath/stat checking, and return the path\n // to add or undefined to filter it out.\n async matchCheck(e: Path, ifDir: boolean): Promise<Path | undefined> {\n if (ifDir && this.opts.nodir) return undefined\n let rpc: Path | undefined\n if (this.opts.realpath) {\n rpc = e.realpathCached() || (await e.realpath())\n if (!rpc) return undefined\n e = rpc\n }\n const needStat = e.isUnknown() || this.opts.stat\n return this.matchCheckTest(needStat ? await e.lstat() : e, ifDir)\n }\n\n matchCheckTest(e: Path | undefined, ifDir: boolean): Path | undefined {\n return e &&\n (this.maxDepth === Infinity || e.depth() <= this.maxDepth) &&\n (!ifDir || e.canReaddir()) &&\n (!this.opts.nodir || !e.isDirectory()) &&\n !this.#ignored(e)\n ? e\n : undefined\n }\n\n matchCheckSync(e: Path, ifDir: boolean): Path | undefined {\n if (ifDir && this.opts.nodir) return undefined\n let rpc: Path | undefined\n if (this.opts.realpath) {\n rpc = e.realpathCached() || e.realpathSync()\n if (!rpc) return undefined\n e = rpc\n }\n const needStat = e.isUnknown() || this.opts.stat\n return this.matchCheckTest(needStat ? e.lstatSync() : e, ifDir)\n }\n\n abstract matchEmit(p: Result<O>): void\n abstract matchEmit(p: string | Path): void\n\n matchFinish(e: Path, absolute: boolean) {\n if (this.#ignored(e)) return\n const abs =\n this.opts.absolute === undefined ? absolute : this.opts.absolute\n this.seen.add(e)\n const mark = this.opts.mark && e.isDirectory() ? this.#sep : ''\n // ok, we have what we need!\n if (this.opts.withFileTypes) {\n this.matchEmit(e)\n } else if (abs) {\n const abs = this.opts.posix ? e.fullpathPosix() : e.fullpath()\n this.matchEmit(abs + mark)\n } else {\n const rel = this.opts.posix ? e.relativePosix() : e.relative()\n const pre =\n this.opts.dotRelative && !rel.startsWith('..' + this.#sep)\n ? '.' + this.#sep\n : ''\n this.matchEmit(!rel ? '.' + mark : pre + rel + mark)\n }\n }\n\n async match(e: Path, absolute: boolean, ifDir: boolean): Promise<void> {\n const p = await this.matchCheck(e, ifDir)\n if (p) this.matchFinish(p, absolute)\n }\n\n matchSync(e: Path, absolute: boolean, ifDir: boolean): void {\n const p = this.matchCheckSync(e, ifDir)\n if (p) this.matchFinish(p, absolute)\n }\n\n walkCB(target: Path, patterns: Pattern[], cb: () => any) {\n /* c8 ignore start */\n if (this.signal?.aborted) cb()\n /* c8 ignore stop */\n this.walkCB2(target, patterns, new Processor(this.opts), cb)\n }\n\n walkCB2(\n target: Path,\n patterns: Pattern[],\n processor: Processor,\n cb: () => any\n ) {\n if (this.#childrenIgnored(target)) return cb()\n if (this.signal?.aborted) cb()\n if (this.paused) {\n this.onResume(() => this.walkCB2(target, patterns, processor, cb))\n return\n }\n processor.processPatterns(target, patterns)\n\n // done processing. all of the above is sync, can be abstracted out.\n // subwalks is a map of paths to the entry filters they need\n // matches is a map of paths to [absolute, ifDir] tuples.\n let tasks = 1\n const next = () => {\n if (--tasks === 0) cb()\n }\n\n for (const [m, absolute, ifDir] of processor.matches.entries()) {\n if (this.#ignored(m)) continue\n tasks++\n this.match(m, absolute, ifDir).then(() => next())\n }\n\n for (const t of processor.subwalkTargets()) {\n if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) {\n continue\n }\n tasks++\n const childrenCached = t.readdirCached()\n if (t.calledReaddir())\n this.walkCB3(t, childrenCached, processor, next)\n else {\n t.readdirCB(\n (_, entries) => this.walkCB3(t, entries, processor, next),\n true\n )\n }\n }\n\n next()\n }\n\n walkCB3(\n target: Path,\n entries: Path[],\n processor: Processor,\n cb: () => any\n ) {\n processor = processor.filterEntries(target, entries)\n\n let tasks = 1\n const next = () => {\n if (--tasks === 0) cb()\n }\n\n for (const [m, absolute, ifDir] of processor.matches.entries()) {\n if (this.#ignored(m)) continue\n tasks++\n this.match(m, absolute, ifDir).then(() => next())\n }\n for (const [target, patterns] of processor.subwalks.entries()) {\n tasks++\n this.walkCB2(target, patterns, processor.child(), next)\n }\n\n next()\n }\n\n walkCBSync(target: Path, patterns: Pattern[], cb: () => any) {\n /* c8 ignore start */\n if (this.signal?.aborted) cb()\n /* c8 ignore stop */\n this.walkCB2Sync(target, patterns, new Processor(this.opts), cb)\n }\n\n walkCB2Sync(\n target: Path,\n patterns: Pattern[],\n processor: Processor,\n cb: () => any\n ) {\n if (this.#childrenIgnored(target)) return cb()\n if (this.signal?.aborted) cb()\n if (this.paused) {\n this.onResume(() =>\n this.walkCB2Sync(target, patterns, processor, cb)\n )\n return\n }\n processor.processPatterns(target, patterns)\n\n // done processing. all of the above is sync, can be abstracted out.\n // subwalks is a map of paths to the entry filters they need\n // matches is a map of paths to [absolute, ifDir] tuples.\n let tasks = 1\n const next = () => {\n if (--tasks === 0) cb()\n }\n\n for (const [m, absolute, ifDir] of processor.matches.entries()) {\n if (this.#ignored(m)) continue\n this.matchSync(m, absolute, ifDir)\n }\n\n for (const t of processor.subwalkTargets()) {\n if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) {\n continue\n }\n tasks++\n const children = t.readdirSync()\n this.walkCB3Sync(t, children, processor, next)\n }\n\n next()\n }\n\n walkCB3Sync(\n target: Path,\n entries: Path[],\n processor: Processor,\n cb: () => any\n ) {\n processor = processor.filterEntries(target, entries)\n\n let tasks = 1\n const next = () => {\n if (--tasks === 0) cb()\n }\n\n for (const [m, absolute, ifDir] of processor.matches.entries()) {\n if (this.#ignored(m)) continue\n this.matchSync(m, absolute, ifDir)\n }\n for (const [target, patterns] of processor.subwalks.entries()) {\n tasks++\n this.walkCB2Sync(target, patterns, processor.child(), next)\n }\n\n next()\n }\n}\n\nexport class GlobWalker<\n O extends GlobWalkerOpts = GlobWalkerOpts\n> extends GlobUtil<O> {\n matches: O extends GWOFileTypesTrue\n ? Set<Path>\n : O extends GWOFileTypesFalse\n ? Set<string>\n : O extends GWOFileTypesUnset\n ? Set<string>\n : Set<Path | string>\n\n constructor(patterns: Pattern[], path: Path, opts: O) {\n super(patterns, path, opts)\n this.matches = new Set() as Matches<O>\n }\n\n matchEmit(e: Result<O>): void\n matchEmit(e: Path | string): void {\n this.matches.add(e)\n }\n\n async walk(): Promise<Matches<O>> {\n if (this.signal?.aborted) throw this.signal.reason\n if (this.path.isUnknown()) {\n await this.path.lstat()\n }\n await new Promise((res, rej) => {\n this.walkCB(this.path, this.patterns, () => {\n if (this.signal?.aborted) {\n rej(this.signal.reason)\n } else {\n res(this.matches)\n }\n })\n })\n return this.matches\n }\n\n walkSync(): Matches<O> {\n if (this.signal?.aborted) throw this.signal.reason\n if (this.path.isUnknown()) {\n this.path.lstatSync()\n }\n // nothing for the callback to do, because this never pauses\n this.walkCBSync(this.path, this.patterns, () => {\n if (this.signal?.aborted) throw this.signal.reason\n })\n return this.matches\n }\n}\n\nexport class GlobStream<\n O extends GlobWalkerOpts = GlobWalkerOpts\n> extends GlobUtil<O> {\n results: O extends GWOFileTypesTrue\n ? Minipass<Path, Path>\n : O extends GWOFileTypesFalse\n ? Minipass<string, string>\n : O extends GWOFileTypesUnset\n ? Minipass<string, string>\n : Minipass<Path | string, Path | string>\n\n constructor(patterns: Pattern[], path: Path, opts: O) {\n super(patterns, path, opts)\n this.results = new Minipass({\n signal: this.signal,\n objectMode: true,\n }) as MatchStream<O>\n this.results.on('drain', () => this.resume())\n this.results.on('resume', () => this.resume())\n }\n\n matchEmit(e: Result<O>): void\n matchEmit(e: Path | string): void {\n this.results.write(e)\n if (!this.results.flowing) this.pause()\n }\n\n stream(): MatchStream<O> {\n const target = this.path\n if (target.isUnknown()) {\n target.lstat().then(() => {\n this.walkCB(target, this.patterns, () => this.results.end())\n })\n } else {\n this.walkCB(target, this.patterns, () => this.results.end())\n }\n return this.results\n }\n\n streamSync(): MatchStream<O> {\n if (this.path.isUnknown()) {\n this.path.lstatSync()\n }\n this.walkCBSync(this.path, this.patterns, () => this.results.end())\n return this.results\n }\n}\n"]} \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/mjs/glob.d.ts b/deps/npm/node_modules/glob/dist/mjs/glob.d.ts
new file mode 100644
index 0000000000..a8b3da7722
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/mjs/glob.d.ts
@@ -0,0 +1,344 @@
+/// <reference types="node" />
+import { Minimatch } from 'minimatch';
+import { Minipass } from 'minipass';
+import { FSOption, Path, PathScurry } from 'path-scurry';
+import { IgnoreLike } from './ignore.js';
+import { Pattern } from './pattern.js';
+export type MatchSet = Minimatch['set'];
+export type GlobParts = Exclude<Minimatch['globParts'], undefined>;
+/**
+ * A `GlobOptions` object may be provided to any of the exported methods, and
+ * must be provided to the `Glob` constructor.
+ *
+ * All options are optional, boolean, and false by default, unless otherwise
+ * noted.
+ *
+ * All resolved options are added to the Glob object as properties.
+ *
+ * If you are running many `glob` operations, you can pass a Glob object as the
+ * `options` argument to a subsequent operation to share the previously loaded
+ * cache.
+ */
+export interface GlobOptions {
+ /**
+ * Set to `true` to always receive absolute paths for
+ * matched files. Set to `false` to always return relative paths.
+ *
+ * When this option is not set, absolute paths are returned for patterns
+ * that are absolute, and otherwise paths are returned that are relative
+ * to the `cwd` setting.
+ *
+ * This does _not_ make an extra system call to get
+ * the realpath, it only does string path resolution.
+ *
+ * Conflicts with {@link withFileTypes}
+ */
+ absolute?: boolean;
+ /**
+ * Set to false to enable {@link windowsPathsNoEscape}
+ *
+ * @deprecated
+ */
+ allowWindowsEscape?: boolean;
+ /**
+ * The current working directory in which to search. Defaults to
+ * `process.cwd()`.
+ *
+ * May be eiher a string path or a `file://` URL object or string.
+ */
+ cwd?: string | URL;
+ /**
+ * Include `.dot` files in normal matches and `globstar`
+ * matches. Note that an explicit dot in a portion of the pattern
+ * will always match dot files.
+ */
+ dot?: boolean;
+ /**
+ * Prepend all relative path strings with `./` (or `.\` on Windows).
+ *
+ * Without this option, returned relative paths are "bare", so instead of
+ * returning `'./foo/bar'`, they are returned as `'foo/bar'`.
+ *
+ * Relative patterns starting with `'../'` are not prepended with `./`, even
+ * if this option is set.
+ */
+ dotRelative?: boolean;
+ /**
+ * Follow symlinked directories when expanding `**`
+ * patterns. This can result in a lot of duplicate references in
+ * the presence of cyclic links, and make performance quite bad.
+ *
+ * By default, a `**` in a pattern will follow 1 symbolic link if
+ * it is not the first item in the pattern, or none if it is the
+ * first item in the pattern, following the same behavior as Bash.
+ */
+ follow?: boolean;
+ /**
+ * string or string[], or an object with `ignore` and `ignoreChildren`
+ * methods.
+ *
+ * If a string or string[] is provided, then this is treated as a glob
+ * pattern or array of glob patterns to exclude from matches. To ignore all
+ * children within a directory, as well as the entry itself, append `'/**'`
+ * to the ignore pattern.
+ *
+ * **Note** `ignore` patterns are _always_ in `dot:true` mode, regardless of
+ * any other settings.
+ *
+ * If an object is provided that has `ignored(path)` and/or
+ * `childrenIgnored(path)` methods, then these methods will be called to
+ * determine whether any Path is a match or if its children should be
+ * traversed, respectively.
+ */
+ ignore?: string | string[] | IgnoreLike;
+ /**
+ * Treat brace expansion like `{a,b}` as a "magic" pattern. Has no
+ * effect if {@link nobrace} is set.
+ *
+ * Only has effect on the {@link hasMagic} function.
+ */
+ magicalBraces?: boolean;
+ /**
+ * Add a `/` character to directory matches. Note that this requires
+ * additional stat calls in some cases.
+ */
+ mark?: boolean;
+ /**
+ * Perform a basename-only match if the pattern does not contain any slash
+ * characters. That is, `*.js` would be treated as equivalent to
+ * `**\/*.js`, matching all js files in all directories.
+ */
+ matchBase?: boolean;
+ /**
+ * Limit the directory traversal to a given depth below the cwd.
+ * Note that this does NOT prevent traversal to sibling folders,
+ * root patterns, and so on. It only limits the maximum folder depth
+ * that the walk will descend, relative to the cwd.
+ */
+ maxDepth?: number;
+ /**
+ * Do not expand `{a,b}` and `{1..3}` brace sets.
+ */
+ nobrace?: boolean;
+ /**
+ * Perform a case-insensitive match. This defaults to `true` on macOS and
+ * Windows systems, and `false` on all others.
+ *
+ * **Note** `nocase` should only be explicitly set when it is
+ * known that the filesystem's case sensitivity differs from the
+ * platform default. If set `true` on case-sensitive file
+ * systems, or `false` on case-insensitive file systems, then the
+ * walk may return more or less results than expected.
+ */
+ nocase?: boolean;
+ /**
+ * Do not match directories, only files. (Note: to match
+ * _only_ directories, put a `/` at the end of the pattern.)
+ */
+ nodir?: boolean;
+ /**
+ * Do not match "extglob" patterns such as `+(a|b)`.
+ */
+ noext?: boolean;
+ /**
+ * Do not match `**` against multiple filenames. (Ie, treat it as a normal
+ * `*` instead.)
+ *
+ * Conflicts with {@link matchBase}
+ */
+ noglobstar?: boolean;
+ /**
+ * Defaults to value of `process.platform` if available, or `'linux'` if
+ * not. Setting `platform:'win32'` on non-Windows systems may cause strange
+ * behavior.
+ */
+ platform?: NodeJS.Platform;
+ /**
+ * Set to true to call `fs.realpath` on all of the
+ * results. In the case of an entry that cannot be resolved, the
+ * entry is omitted. This incurs a slight performance penalty, of
+ * course, because of the added system calls.
+ */
+ realpath?: boolean;
+ /**
+ *
+ * A string path resolved against the `cwd` option, which
+ * is used as the starting point for absolute patterns that start
+ * with `/`, (but not drive letters or UNC paths on Windows).
+ *
+ * Note that this _doesn't_ necessarily limit the walk to the
+ * `root` directory, and doesn't affect the cwd starting point for
+ * non-absolute patterns. A pattern containing `..` will still be
+ * able to traverse out of the root directory, if it is not an
+ * actual root directory on the filesystem, and any non-absolute
+ * patterns will be matched in the `cwd`. For example, the
+ * pattern `/../*` with `{root:'/some/path'}` will return all
+ * files in `/some`, not all files in `/some/path`. The pattern
+ * `*` with `{root:'/some/path'}` will return all the entries in
+ * the cwd, not the entries in `/some/path`.
+ *
+ * To start absolute and non-absolute patterns in the same
+ * path, you can use `{root:''}`. However, be aware that on
+ * Windows systems, a pattern like `x:/*` or `//host/share/*` will
+ * _always_ start in the `x:/` or `//host/share` directory,
+ * regardless of the `root` setting.
+ */
+ root?: string;
+ /**
+ * A [PathScurry](http://npm.im/path-scurry) object used
+ * to traverse the file system. If the `nocase` option is set
+ * explicitly, then any provided `scurry` object must match this
+ * setting.
+ */
+ scurry?: PathScurry;
+ /**
+ * Call `lstat()` on all entries, whether required or not to determine
+ * if it's a valid match. When used with {@link withFileTypes}, this means
+ * that matches will include data such as modified time, permissions, and
+ * so on. Note that this will incur a performance cost due to the added
+ * system calls.
+ */
+ stat?: boolean;
+ /**
+ * An AbortSignal which will cancel the Glob walk when
+ * triggered.
+ */
+ signal?: AbortSignal;
+ /**
+ * Use `\\` as a path separator _only_, and
+ * _never_ as an escape character. If set, all `\\` characters are
+ * replaced with `/` in the pattern.
+ *
+ * Note that this makes it **impossible** to match against paths
+ * containing literal glob pattern characters, but allows matching
+ * with patterns constructed using `path.join()` and
+ * `path.resolve()` on Windows platforms, mimicking the (buggy!)
+ * behavior of Glob v7 and before on Windows. Please use with
+ * caution, and be mindful of [the caveat below about Windows
+ * paths](#windows). (For legacy reasons, this is also set if
+ * `allowWindowsEscape` is set to the exact value `false`.)
+ */
+ windowsPathsNoEscape?: boolean;
+ /**
+ * Return [PathScurry](http://npm.im/path-scurry)
+ * `Path` objects instead of strings. These are similar to a
+ * NodeJS `Dirent` object, but with additional methods and
+ * properties.
+ *
+ * Conflicts with {@link absolute}
+ */
+ withFileTypes?: boolean;
+ /**
+ * An fs implementation to override some or all of the defaults. See
+ * http://npm.im/path-scurry for details about what can be overridden.
+ */
+ fs?: FSOption;
+ /**
+ * Just passed along to Minimatch. Note that this makes all pattern
+ * matching operations slower and *extremely* noisy.
+ */
+ debug?: boolean;
+ /**
+ * Return `/` delimited paths, even on Windows.
+ *
+ * On posix systems, this has no effect. But, on Windows, it means that
+ * paths will be `/` delimited, and absolute paths will be their full
+ * resolved UNC forms, eg instead of `'C:\\foo\\bar'`, it would return
+ * `'//?/C:/foo/bar'`
+ */
+ posix?: boolean;
+}
+export type GlobOptionsWithFileTypesTrue = GlobOptions & {
+ withFileTypes: true;
+ absolute?: undefined;
+ mark?: undefined;
+ posix?: undefined;
+};
+export type GlobOptionsWithFileTypesFalse = GlobOptions & {
+ withFileTypes?: false;
+};
+export type GlobOptionsWithFileTypesUnset = GlobOptions & {
+ withFileTypes?: undefined;
+};
+export type Result<Opts> = Opts extends GlobOptionsWithFileTypesTrue ? Path : Opts extends GlobOptionsWithFileTypesFalse ? string : Opts extends GlobOptionsWithFileTypesUnset ? string : string | Path;
+export type Results<Opts> = Result<Opts>[];
+export type FileTypes<Opts> = Opts extends GlobOptionsWithFileTypesTrue ? true : Opts extends GlobOptionsWithFileTypesFalse ? false : Opts extends GlobOptionsWithFileTypesUnset ? false : boolean;
+/**
+ * An object that can perform glob pattern traversals.
+ */
+export declare class Glob<Opts extends GlobOptions> implements GlobOptions {
+ absolute?: boolean;
+ cwd: string;
+ root?: string;
+ dot: boolean;
+ dotRelative: boolean;
+ follow: boolean;
+ ignore?: string | string[] | IgnoreLike;
+ magicalBraces: boolean;
+ mark?: boolean;
+ matchBase: boolean;
+ maxDepth: number;
+ nobrace: boolean;
+ nocase: boolean;
+ nodir: boolean;
+ noext: boolean;
+ noglobstar: boolean;
+ pattern: string[];
+ platform: NodeJS.Platform;
+ realpath: boolean;
+ scurry: PathScurry;
+ stat: boolean;
+ signal?: AbortSignal;
+ windowsPathsNoEscape: boolean;
+ withFileTypes: FileTypes<Opts>;
+ /**
+ * The options provided to the constructor.
+ */
+ opts: Opts;
+ /**
+ * An array of parsed immutable {@link Pattern} objects.
+ */
+ patterns: Pattern[];
+ /**
+ * All options are stored as properties on the `Glob` object.
+ *
+ * See {@link GlobOptions} for full options descriptions.
+ *
+ * Note that a previous `Glob` object can be passed as the
+ * `GlobOptions` to another `Glob` instantiation to re-use settings
+ * and caches with a new pattern.
+ *
+ * Traversal functions can be called multiple times to run the walk
+ * again.
+ */
+ constructor(pattern: string | string[], opts: Opts);
+ /**
+ * Returns a Promise that resolves to the results array.
+ */
+ walk(): Promise<Results<Opts>>;
+ /**
+ * synchronous {@link Glob.walk}
+ */
+ walkSync(): Results<Opts>;
+ /**
+ * Stream results asynchronously.
+ */
+ stream(): Minipass<Result<Opts>, Result<Opts>>;
+ /**
+ * Stream results synchronously.
+ */
+ streamSync(): Minipass<Result<Opts>, Result<Opts>>;
+ /**
+ * Default sync iteration function. Returns a Generator that
+ * iterates over the results.
+ */
+ iterateSync(): Generator<Result<Opts>, void, void>;
+ [Symbol.iterator](): Generator<Result<Opts>, void, void>;
+ /**
+ * Default async iteration function. Returns an AsyncGenerator that
+ * iterates over the results.
+ */
+ iterate(): AsyncGenerator<Result<Opts>, void, void>;
+ [Symbol.asyncIterator](): AsyncGenerator<Result<Opts>, void, void>;
+}
+//# sourceMappingURL=glob.d.ts.map \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/mjs/glob.d.ts.map b/deps/npm/node_modules/glob/dist/mjs/glob.d.ts.map
new file mode 100644
index 0000000000..e542368223
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/mjs/glob.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../../src/glob.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/mjs/glob.js b/deps/npm/node_modules/glob/dist/mjs/glob.js
index e1eaf6f4f5..a246019cd3 100644
--- a/deps/npm/node_modules/glob/dist/mjs/glob.js
+++ b/deps/npm/node_modules/glob/dist/mjs/glob.js
@@ -141,6 +141,7 @@ export class Glob {
optimizationLevel: 2,
platform: this.platform,
windowsPathsNoEscape: this.windowsPathsNoEscape,
+ debug: !!this.opts.debug,
};
const mms = this.pattern.map(p => new Minimatch(p, mmo));
const [matchSet, globParts] = mms.reduce((set, m) => {
diff --git a/deps/npm/node_modules/glob/dist/mjs/glob.js.map b/deps/npm/node_modules/glob/dist/mjs/glob.js.map
new file mode 100644
index 0000000000..8917735ad9
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/mjs/glob.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"glob.js","sourceRoot":"","sources":["../../src/glob.ts"],"names":[],"mappings":"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","sourcesContent":["import { Minimatch, MinimatchOptions } from 'minimatch'\nimport { Minipass } from 'minipass'\nimport {\n FSOption,\n Path,\n PathScurry,\n PathScurryDarwin,\n PathScurryPosix,\n PathScurryWin32,\n} from 'path-scurry'\nimport { fileURLToPath } from 'url'\nimport { IgnoreLike } from './ignore.js'\nimport { Pattern } from './pattern.js'\nimport { GlobStream, GlobWalker } from './walker.js'\n\nexport type MatchSet = Minimatch['set']\nexport type GlobParts = Exclude<Minimatch['globParts'], undefined>\n\n// if no process global, just call it linux.\n// so we default to case-sensitive, / separators\nconst defaultPlatform: NodeJS.Platform =\n typeof process === 'object' &&\n process &&\n typeof process.platform === 'string'\n ? process.platform\n : 'linux'\n\n/**\n * A `GlobOptions` object may be provided to any of the exported methods, and\n * must be provided to the `Glob` constructor.\n *\n * All options are optional, boolean, and false by default, unless otherwise\n * noted.\n *\n * All resolved options are added to the Glob object as properties.\n *\n * If you are running many `glob` operations, you can pass a Glob object as the\n * `options` argument to a subsequent operation to share the previously loaded\n * cache.\n */\nexport interface GlobOptions {\n /**\n * Set to `true` to always receive absolute paths for\n * matched files. Set to `false` to always return relative paths.\n *\n * When this option is not set, absolute paths are returned for patterns\n * that are absolute, and otherwise paths are returned that are relative\n * to the `cwd` setting.\n *\n * This does _not_ make an extra system call to get\n * the realpath, it only does string path resolution.\n *\n * Conflicts with {@link withFileTypes}\n */\n absolute?: boolean\n\n /**\n * Set to false to enable {@link windowsPathsNoEscape}\n *\n * @deprecated\n */\n allowWindowsEscape?: boolean\n\n /**\n * The current working directory in which to search. Defaults to\n * `process.cwd()`.\n *\n * May be eiher a string path or a `file://` URL object or string.\n */\n cwd?: string | URL\n\n /**\n * Include `.dot` files in normal matches and `globstar`\n * matches. Note that an explicit dot in a portion of the pattern\n * will always match dot files.\n */\n dot?: boolean\n\n /**\n * Prepend all relative path strings with `./` (or `.\\` on Windows).\n *\n * Without this option, returned relative paths are \"bare\", so instead of\n * returning `'./foo/bar'`, they are returned as `'foo/bar'`.\n *\n * Relative patterns starting with `'../'` are not prepended with `./`, even\n * if this option is set.\n */\n dotRelative?: boolean\n\n /**\n * Follow symlinked directories when expanding `**`\n * patterns. This can result in a lot of duplicate references in\n * the presence of cyclic links, and make performance quite bad.\n *\n * By default, a `**` in a pattern will follow 1 symbolic link if\n * it is not the first item in the pattern, or none if it is the\n * first item in the pattern, following the same behavior as Bash.\n */\n follow?: boolean\n\n /**\n * string or string[], or an object with `ignore` and `ignoreChildren`\n * methods.\n *\n * If a string or string[] is provided, then this is treated as a glob\n * pattern or array of glob patterns to exclude from matches. To ignore all\n * children within a directory, as well as the entry itself, append `'/**'`\n * to the ignore pattern.\n *\n * **Note** `ignore` patterns are _always_ in `dot:true` mode, regardless of\n * any other settings.\n *\n * If an object is provided that has `ignored(path)` and/or\n * `childrenIgnored(path)` methods, then these methods will be called to\n * determine whether any Path is a match or if its children should be\n * traversed, respectively.\n */\n ignore?: string | string[] | IgnoreLike\n\n /**\n * Treat brace expansion like `{a,b}` as a \"magic\" pattern. Has no\n * effect if {@link nobrace} is set.\n *\n * Only has effect on the {@link hasMagic} function.\n */\n magicalBraces?: boolean\n\n /**\n * Add a `/` character to directory matches. Note that this requires\n * additional stat calls in some cases.\n */\n mark?: boolean\n\n /**\n * Perform a basename-only match if the pattern does not contain any slash\n * characters. That is, `*.js` would be treated as equivalent to\n * `**\\/*.js`, matching all js files in all directories.\n */\n matchBase?: boolean\n\n /**\n * Limit the directory traversal to a given depth below the cwd.\n * Note that this does NOT prevent traversal to sibling folders,\n * root patterns, and so on. It only limits the maximum folder depth\n * that the walk will descend, relative to the cwd.\n */\n maxDepth?: number\n\n /**\n * Do not expand `{a,b}` and `{1..3}` brace sets.\n */\n nobrace?: boolean\n\n /**\n * Perform a case-insensitive match. This defaults to `true` on macOS and\n * Windows systems, and `false` on all others.\n *\n * **Note** `nocase` should only be explicitly set when it is\n * known that the filesystem's case sensitivity differs from the\n * platform default. If set `true` on case-sensitive file\n * systems, or `false` on case-insensitive file systems, then the\n * walk may return more or less results than expected.\n */\n nocase?: boolean\n\n /**\n * Do not match directories, only files. (Note: to match\n * _only_ directories, put a `/` at the end of the pattern.)\n */\n nodir?: boolean\n\n /**\n * Do not match \"extglob\" patterns such as `+(a|b)`.\n */\n noext?: boolean\n\n /**\n * Do not match `**` against multiple filenames. (Ie, treat it as a normal\n * `*` instead.)\n *\n * Conflicts with {@link matchBase}\n */\n noglobstar?: boolean\n\n /**\n * Defaults to value of `process.platform` if available, or `'linux'` if\n * not. Setting `platform:'win32'` on non-Windows systems may cause strange\n * behavior.\n */\n platform?: NodeJS.Platform\n\n /**\n * Set to true to call `fs.realpath` on all of the\n * results. In the case of an entry that cannot be resolved, the\n * entry is omitted. This incurs a slight performance penalty, of\n * course, because of the added system calls.\n */\n realpath?: boolean\n\n /**\n *\n * A string path resolved against the `cwd` option, which\n * is used as the starting point for absolute patterns that start\n * with `/`, (but not drive letters or UNC paths on Windows).\n *\n * Note that this _doesn't_ necessarily limit the walk to the\n * `root` directory, and doesn't affect the cwd starting point for\n * non-absolute patterns. A pattern containing `..` will still be\n * able to traverse out of the root directory, if it is not an\n * actual root directory on the filesystem, and any non-absolute\n * patterns will be matched in the `cwd`. For example, the\n * pattern `/../*` with `{root:'/some/path'}` will return all\n * files in `/some`, not all files in `/some/path`. The pattern\n * `*` with `{root:'/some/path'}` will return all the entries in\n * the cwd, not the entries in `/some/path`.\n *\n * To start absolute and non-absolute patterns in the same\n * path, you can use `{root:''}`. However, be aware that on\n * Windows systems, a pattern like `x:/*` or `//host/share/*` will\n * _always_ start in the `x:/` or `//host/share` directory,\n * regardless of the `root` setting.\n */\n root?: string\n\n /**\n * A [PathScurry](http://npm.im/path-scurry) object used\n * to traverse the file system. If the `nocase` option is set\n * explicitly, then any provided `scurry` object must match this\n * setting.\n */\n scurry?: PathScurry\n\n /**\n * Call `lstat()` on all entries, whether required or not to determine\n * if it's a valid match. When used with {@link withFileTypes}, this means\n * that matches will include data such as modified time, permissions, and\n * so on. Note that this will incur a performance cost due to the added\n * system calls.\n */\n stat?: boolean\n\n /**\n * An AbortSignal which will cancel the Glob walk when\n * triggered.\n */\n signal?: AbortSignal\n\n /**\n * Use `\\\\` as a path separator _only_, and\n * _never_ as an escape character. If set, all `\\\\` characters are\n * replaced with `/` in the pattern.\n *\n * Note that this makes it **impossible** to match against paths\n * containing literal glob pattern characters, but allows matching\n * with patterns constructed using `path.join()` and\n * `path.resolve()` on Windows platforms, mimicking the (buggy!)\n * behavior of Glob v7 and before on Windows. Please use with\n * caution, and be mindful of [the caveat below about Windows\n * paths](#windows). (For legacy reasons, this is also set if\n * `allowWindowsEscape` is set to the exact value `false`.)\n */\n windowsPathsNoEscape?: boolean\n\n /**\n * Return [PathScurry](http://npm.im/path-scurry)\n * `Path` objects instead of strings. These are similar to a\n * NodeJS `Dirent` object, but with additional methods and\n * properties.\n *\n * Conflicts with {@link absolute}\n */\n withFileTypes?: boolean\n\n /**\n * An fs implementation to override some or all of the defaults. See\n * http://npm.im/path-scurry for details about what can be overridden.\n */\n fs?: FSOption\n\n /**\n * Just passed along to Minimatch. Note that this makes all pattern\n * matching operations slower and *extremely* noisy.\n */\n debug?: boolean\n\n /**\n * Return `/` delimited paths, even on Windows.\n *\n * On posix systems, this has no effect. But, on Windows, it means that\n * paths will be `/` delimited, and absolute paths will be their full\n * resolved UNC forms, eg instead of `'C:\\\\foo\\\\bar'`, it would return\n * `'//?/C:/foo/bar'`\n */\n posix?: boolean\n}\n\nexport type GlobOptionsWithFileTypesTrue = GlobOptions & {\n withFileTypes: true\n // string options not relevant if returning Path objects.\n absolute?: undefined\n mark?: undefined\n posix?: undefined\n}\n\nexport type GlobOptionsWithFileTypesFalse = GlobOptions & {\n withFileTypes?: false\n}\n\nexport type GlobOptionsWithFileTypesUnset = GlobOptions & {\n withFileTypes?: undefined\n}\n\nexport type Result<Opts> = Opts extends GlobOptionsWithFileTypesTrue\n ? Path\n : Opts extends GlobOptionsWithFileTypesFalse\n ? string\n : Opts extends GlobOptionsWithFileTypesUnset\n ? string\n : string | Path\nexport type Results<Opts> = Result<Opts>[]\n\nexport type FileTypes<Opts> = Opts extends GlobOptionsWithFileTypesTrue\n ? true\n : Opts extends GlobOptionsWithFileTypesFalse\n ? false\n : Opts extends GlobOptionsWithFileTypesUnset\n ? false\n : boolean\n\n/**\n * An object that can perform glob pattern traversals.\n */\nexport class Glob<Opts extends GlobOptions> implements GlobOptions {\n absolute?: boolean\n cwd: string\n root?: string\n dot: boolean\n dotRelative: boolean\n follow: boolean\n ignore?: string | string[] | IgnoreLike\n magicalBraces: boolean\n mark?: boolean\n matchBase: boolean\n maxDepth: number\n nobrace: boolean\n nocase: boolean\n nodir: boolean\n noext: boolean\n noglobstar: boolean\n pattern: string[]\n platform: NodeJS.Platform\n realpath: boolean\n scurry: PathScurry\n stat: boolean\n signal?: AbortSignal\n windowsPathsNoEscape: boolean\n withFileTypes: FileTypes<Opts>\n\n /**\n * The options provided to the constructor.\n */\n opts: Opts\n\n /**\n * An array of parsed immutable {@link Pattern} objects.\n */\n patterns: Pattern[]\n\n /**\n * All options are stored as properties on the `Glob` object.\n *\n * See {@link GlobOptions} for full options descriptions.\n *\n * Note that a previous `Glob` object can be passed as the\n * `GlobOptions` to another `Glob` instantiation to re-use settings\n * and caches with a new pattern.\n *\n * Traversal functions can be called multiple times to run the walk\n * again.\n */\n constructor(pattern: string | string[], opts: Opts) {\n this.withFileTypes = !!opts.withFileTypes as FileTypes<Opts>\n this.signal = opts.signal\n this.follow = !!opts.follow\n this.dot = !!opts.dot\n this.dotRelative = !!opts.dotRelative\n this.nodir = !!opts.nodir\n this.mark = !!opts.mark\n if (!opts.cwd) {\n this.cwd = ''\n } else if (opts.cwd instanceof URL || opts.cwd.startsWith('file://')) {\n opts.cwd = fileURLToPath(opts.cwd)\n }\n this.cwd = opts.cwd || ''\n this.root = opts.root\n this.magicalBraces = !!opts.magicalBraces\n this.nobrace = !!opts.nobrace\n this.noext = !!opts.noext\n this.realpath = !!opts.realpath\n this.absolute = opts.absolute\n\n this.noglobstar = !!opts.noglobstar\n this.matchBase = !!opts.matchBase\n this.maxDepth =\n typeof opts.maxDepth === 'number' ? opts.maxDepth : Infinity\n this.stat = !!opts.stat\n this.ignore = opts.ignore\n\n if (this.withFileTypes && this.absolute !== undefined) {\n throw new Error('cannot set absolute and withFileTypes:true')\n }\n\n if (typeof pattern === 'string') {\n pattern = [pattern]\n }\n\n this.windowsPathsNoEscape =\n !!opts.windowsPathsNoEscape ||\n (opts as GlobOptions).allowWindowsEscape === false\n\n if (this.windowsPathsNoEscape) {\n pattern = pattern.map(p => p.replace(/\\\\/g, '/'))\n }\n\n if (this.matchBase) {\n if (opts.noglobstar) {\n throw new TypeError('base matching requires globstar')\n }\n pattern = pattern.map(p => (p.includes('/') ? p : `./**/${p}`))\n }\n\n this.pattern = pattern\n\n this.platform = opts.platform || defaultPlatform\n this.opts = { ...opts, platform: this.platform }\n if (opts.scurry) {\n this.scurry = opts.scurry\n if (\n opts.nocase !== undefined &&\n opts.nocase !== opts.scurry.nocase\n ) {\n throw new Error('nocase option contradicts provided scurry option')\n }\n } else {\n const Scurry =\n opts.platform === 'win32'\n ? PathScurryWin32\n : opts.platform === 'darwin'\n ? PathScurryDarwin\n : opts.platform\n ? PathScurryPosix\n : PathScurry\n this.scurry = new Scurry(this.cwd, {\n nocase: opts.nocase,\n fs: opts.fs,\n })\n }\n this.nocase = this.scurry.nocase\n\n const mmo: MinimatchOptions = {\n // default nocase based on platform\n ...opts,\n dot: this.dot,\n matchBase: this.matchBase,\n nobrace: this.nobrace,\n nocase: this.nocase,\n nocaseMagicOnly: true,\n nocomment: true,\n noext: this.noext,\n nonegate: true,\n optimizationLevel: 2,\n platform: this.platform,\n windowsPathsNoEscape: this.windowsPathsNoEscape,\n debug: !!this.opts.debug,\n }\n\n const mms = this.pattern.map(p => new Minimatch(p, mmo))\n const [matchSet, globParts] = mms.reduce(\n (set: [MatchSet, GlobParts], m) => {\n set[0].push(...m.set)\n set[1].push(...m.globParts)\n return set\n },\n [[], []]\n )\n this.patterns = matchSet.map((set, i) => {\n return new Pattern(set, globParts[i], 0, this.platform)\n })\n }\n\n /**\n * Returns a Promise that resolves to the results array.\n */\n async walk(): Promise<Results<Opts>>\n async walk(): Promise<(string | Path)[]> {\n // Walkers always return array of Path objects, so we just have to\n // coerce them into the right shape. It will have already called\n // realpath() if the option was set to do so, so we know that's cached.\n // start out knowing the cwd, at least\n return [\n ...(await new GlobWalker(this.patterns, this.scurry.cwd, {\n ...this.opts,\n maxDepth:\n this.maxDepth !== Infinity\n ? this.maxDepth + this.scurry.cwd.depth()\n : Infinity,\n platform: this.platform,\n nocase: this.nocase,\n }).walk()),\n ]\n }\n\n /**\n * synchronous {@link Glob.walk}\n */\n walkSync(): Results<Opts>\n walkSync(): (string | Path)[] {\n return [\n ...new GlobWalker(this.patterns, this.scurry.cwd, {\n ...this.opts,\n maxDepth:\n this.maxDepth !== Infinity\n ? this.maxDepth + this.scurry.cwd.depth()\n : Infinity,\n platform: this.platform,\n nocase: this.nocase,\n }).walkSync(),\n ]\n }\n\n /**\n * Stream results asynchronously.\n */\n stream(): Minipass<Result<Opts>, Result<Opts>>\n stream(): Minipass<string | Path, string | Path> {\n return new GlobStream(this.patterns, this.scurry.cwd, {\n ...this.opts,\n maxDepth:\n this.maxDepth !== Infinity\n ? this.maxDepth + this.scurry.cwd.depth()\n : Infinity,\n platform: this.platform,\n nocase: this.nocase,\n }).stream()\n }\n\n /**\n * Stream results synchronously.\n */\n streamSync(): Minipass<Result<Opts>, Result<Opts>>\n streamSync(): Minipass<string | Path, string | Path> {\n return new GlobStream(this.patterns, this.scurry.cwd, {\n ...this.opts,\n maxDepth:\n this.maxDepth !== Infinity\n ? this.maxDepth + this.scurry.cwd.depth()\n : Infinity,\n platform: this.platform,\n nocase: this.nocase,\n }).streamSync()\n }\n\n /**\n * Default sync iteration function. Returns a Generator that\n * iterates over the results.\n */\n iterateSync(): Generator<Result<Opts>, void, void> {\n return this.streamSync()[Symbol.iterator]()\n }\n [Symbol.iterator]() {\n return this.iterateSync()\n }\n\n /**\n * Default async iteration function. Returns an AsyncGenerator that\n * iterates over the results.\n */\n iterate(): AsyncGenerator<Result<Opts>, void, void> {\n return this.stream()[Symbol.asyncIterator]()\n }\n [Symbol.asyncIterator]() {\n return this.iterate()\n }\n}\n"]} \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/mjs/has-magic.d.ts b/deps/npm/node_modules/glob/dist/mjs/has-magic.d.ts
new file mode 100644
index 0000000000..8aec3bd972
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/mjs/has-magic.d.ts
@@ -0,0 +1,14 @@
+import { GlobOptions } from './glob.js';
+/**
+ * Return true if the patterns provided contain any magic glob characters,
+ * given the options provided.
+ *
+ * Brace expansion is not considered "magic" unless the `magicalBraces` option
+ * is set, as brace expansion just turns one string into an array of strings.
+ * So a pattern like `'x{a,b}y'` would return `false`, because `'xay'` and
+ * `'xby'` both do not contain any magic glob characters, and it's treated the
+ * same as if you had called it on `['xay', 'xby']`. When `magicalBraces:true`
+ * is in the options, brace expansion _is_ treated as a pattern having magic.
+ */
+export declare const hasMagic: (pattern: string | string[], options?: GlobOptions) => boolean;
+//# sourceMappingURL=has-magic.d.ts.map \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/mjs/has-magic.d.ts.map b/deps/npm/node_modules/glob/dist/mjs/has-magic.d.ts.map
new file mode 100644
index 0000000000..b24dd4ec47
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/mjs/has-magic.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"has-magic.d.ts","sourceRoot":"","sources":["../../src/has-magic.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAEvC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,QAAQ,YACV,MAAM,GAAG,MAAM,EAAE,YACjB,WAAW,KACnB,OAQF,CAAA"} \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/mjs/has-magic.js.map b/deps/npm/node_modules/glob/dist/mjs/has-magic.js.map
new file mode 100644
index 0000000000..27fd78dbae
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/mjs/has-magic.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"has-magic.js","sourceRoot":"","sources":["../../src/has-magic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAGrC;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,OAA0B,EAC1B,UAAuB,EAAE,EAChB,EAAE;IACX,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,OAAO,GAAG,CAAC,OAAO,CAAC,CAAA;KACpB;IACD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE;QACvB,IAAI,IAAI,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE;YAAE,OAAO,IAAI,CAAA;KACtD;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA","sourcesContent":["import { Minimatch } from 'minimatch'\nimport { GlobOptions } from './glob.js'\n\n/**\n * Return true if the patterns provided contain any magic glob characters,\n * given the options provided.\n *\n * Brace expansion is not considered \"magic\" unless the `magicalBraces` option\n * is set, as brace expansion just turns one string into an array of strings.\n * So a pattern like `'x{a,b}y'` would return `false`, because `'xay'` and\n * `'xby'` both do not contain any magic glob characters, and it's treated the\n * same as if you had called it on `['xay', 'xby']`. When `magicalBraces:true`\n * is in the options, brace expansion _is_ treated as a pattern having magic.\n */\nexport const hasMagic = (\n pattern: string | string[],\n options: GlobOptions = {}\n): boolean => {\n if (!Array.isArray(pattern)) {\n pattern = [pattern]\n }\n for (const p of pattern) {\n if (new Minimatch(p, options).hasMagic()) return true\n }\n return false\n}\n"]} \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/mjs/ignore.d.ts b/deps/npm/node_modules/glob/dist/mjs/ignore.d.ts
new file mode 100644
index 0000000000..e9d74f3b5e
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/mjs/ignore.d.ts
@@ -0,0 +1,20 @@
+import { Minimatch } from 'minimatch';
+import { Path } from 'path-scurry';
+import { GlobWalkerOpts } from './walker.js';
+export interface IgnoreLike {
+ ignored?: (p: Path) => boolean;
+ childrenIgnored?: (p: Path) => boolean;
+}
+/**
+ * Class used to process ignored patterns
+ */
+export declare class Ignore implements IgnoreLike {
+ relative: Minimatch[];
+ relativeChildren: Minimatch[];
+ absolute: Minimatch[];
+ absoluteChildren: Minimatch[];
+ constructor(ignored: string[], { nobrace, nocase, noext, noglobstar, platform, }: GlobWalkerOpts);
+ ignored(p: Path): boolean;
+ childrenIgnored(p: Path): boolean;
+}
+//# sourceMappingURL=ignore.d.ts.map \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/mjs/ignore.d.ts.map b/deps/npm/node_modules/glob/dist/mjs/ignore.d.ts.map
new file mode 100644
index 0000000000..e0018cf935
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/mjs/ignore.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ignore.d.ts","sourceRoot":"","sources":["../../src/ignore.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,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;CACvC;AASD;;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;gBAG3B,OAAO,EAAE,MAAM,EAAE,EACjB,EACE,OAAO,EACP,MAAM,EACN,KAAK,EACL,UAAU,EACV,QAA0B,GAC3B,EAAE,cAAc;IAiDnB,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/mjs/ignore.js.map b/deps/npm/node_modules/glob/dist/mjs/ignore.js.map
new file mode 100644
index 0000000000..1038b71239
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/mjs/ignore.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ignore.js","sourceRoot":"","sources":["../../src/ignore.ts"],"names":[],"mappings":"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","sourcesContent":["// give it a pattern, and it'll be able to tell you if\n// a given path should be ignored.\n// Ignoring a path ignores its children if the pattern ends in /**\n// Ignores are always parsed in dot:true mode\n\nimport { Minimatch } from 'minimatch'\nimport { Path } from 'path-scurry'\nimport { Pattern } from './pattern.js'\nimport { GlobWalkerOpts } from './walker.js'\n\nexport interface IgnoreLike {\n ignored?: (p: Path) => boolean\n childrenIgnored?: (p: Path) => boolean\n}\n\nconst defaultPlatform: NodeJS.Platform =\n typeof process === 'object' &&\n process &&\n typeof process.platform === 'string'\n ? process.platform\n : 'linux'\n\n/**\n * Class used to process ignored patterns\n */\nexport class Ignore implements IgnoreLike {\n relative: Minimatch[]\n relativeChildren: Minimatch[]\n absolute: Minimatch[]\n absoluteChildren: Minimatch[]\n\n constructor(\n ignored: string[],\n {\n nobrace,\n nocase,\n noext,\n noglobstar,\n platform = defaultPlatform,\n }: GlobWalkerOpts\n ) {\n this.relative = []\n this.absolute = []\n this.relativeChildren = []\n this.absoluteChildren = []\n const mmopts = {\n dot: true,\n nobrace,\n nocase,\n noext,\n noglobstar,\n optimizationLevel: 2,\n platform,\n nocomment: true,\n nonegate: true,\n }\n\n // this is a little weird, but it gives us a clean set of optimized\n // minimatch matchers, without getting tripped up if one of them\n // ends in /** inside a brace section, and it's only inefficient at\n // the start of the walk, not along it.\n // It'd be nice if the Pattern class just had a .test() method, but\n // handling globstars is a bit of a pita, and that code already lives\n // in minimatch anyway.\n // Another way would be if maybe Minimatch could take its set/globParts\n // as an option, and then we could at least just use Pattern to test\n // for absolute-ness.\n // Yet another way, Minimatch could take an array of glob strings, and\n // a cwd option, and do the right thing.\n for (const ign of ignored) {\n const mm = new Minimatch(ign, mmopts)\n for (let i = 0; i < mm.set.length; i++) {\n const parsed = mm.set[i]\n const globParts = mm.globParts[i]\n const p = new Pattern(parsed, globParts, 0, platform)\n const m = new Minimatch(p.globString(), mmopts)\n const children = globParts[globParts.length - 1] === '**'\n const absolute = p.isAbsolute()\n if (absolute) this.absolute.push(m)\n else this.relative.push(m)\n if (children) {\n if (absolute) this.absoluteChildren.push(m)\n else this.relativeChildren.push(m)\n }\n }\n }\n }\n\n ignored(p: Path): boolean {\n const fullpath = p.fullpath()\n const fullpaths = `${fullpath}/`\n const relative = p.relative() || '.'\n const relatives = `${relative}/`\n for (const m of this.relative) {\n if (m.match(relative) || m.match(relatives)) return true\n }\n for (const m of this.absolute) {\n if (m.match(fullpath) || m.match(fullpaths)) return true\n }\n return false\n }\n\n childrenIgnored(p: Path): boolean {\n const fullpath = p.fullpath() + '/'\n const relative = (p.relative() || '.') + '/'\n for (const m of this.relativeChildren) {\n if (m.match(relative)) return true\n }\n for (const m of this.absoluteChildren) {\n if (m.match(fullpath)) true\n }\n return false\n }\n}\n"]} \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/mjs/index.d.ts b/deps/npm/node_modules/glob/dist/mjs/index.d.ts
new file mode 100644
index 0000000000..669bf12e6d
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/mjs/index.d.ts
@@ -0,0 +1,95 @@
+import { Minipass } from 'minipass';
+import { Path } from 'path-scurry';
+import type { GlobOptions, GlobOptionsWithFileTypesFalse, GlobOptionsWithFileTypesTrue, GlobOptionsWithFileTypesUnset } from './glob.js';
+import { Glob } from './glob.js';
+/**
+ * Syncronous form of {@link globStream}. Will read all the matches as fast as
+ * you consume them, even all in a single tick if you consume them immediately,
+ * but will still respond to backpressure if they're not consumed immediately.
+ */
+export declare function globStreamSync(pattern: string | string[], options: GlobOptionsWithFileTypesTrue): Minipass<Path, Path>;
+export declare function globStreamSync(pattern: string | string[], options: GlobOptionsWithFileTypesFalse): Minipass<string, string>;
+export declare function globStreamSync(pattern: string | string[], options: GlobOptionsWithFileTypesUnset): Minipass<string, string>;
+export declare function globStreamSync(pattern: string | string[], options: GlobOptions): Minipass<Path, Path> | Minipass<string, string>;
+/**
+ * Return a stream that emits all the strings or `Path` objects and
+ * then emits `end` when completed.
+ */
+export declare function globStream(pattern: string | string[], options: GlobOptionsWithFileTypesFalse): Minipass<string, string>;
+export declare function globStream(pattern: string | string[], options: GlobOptionsWithFileTypesTrue): Minipass<Path, Path>;
+export declare function globStream(pattern: string | string[], options?: GlobOptionsWithFileTypesUnset | undefined): Minipass<string, string>;
+export declare function globStream(pattern: string | string[], options: GlobOptions): Minipass<Path, Path> | Minipass<string, string>;
+/**
+ * Synchronous form of {@link glob}
+ */
+export declare function globSync(pattern: string | string[], options: GlobOptionsWithFileTypesFalse): string[];
+export declare function globSync(pattern: string | string[], options: GlobOptionsWithFileTypesTrue): Path[];
+export declare function globSync(pattern: string | string[], options?: GlobOptionsWithFileTypesUnset | undefined): string[];
+export declare function globSync(pattern: string | string[], options: GlobOptions): Path[] | string[];
+/**
+ * Perform an asynchronous glob search for the pattern(s) specified. Returns
+ * [Path](https://isaacs.github.io/path-scurry/classes/PathBase) objects if the
+ * {@link withFileTypes} option is set to `true`. See {@link GlobOptions} for
+ * full option descriptions.
+ */
+declare function glob_(pattern: string | string[], options?: GlobOptionsWithFileTypesUnset | undefined): Promise<string[]>;
+declare function glob_(pattern: string | string[], options: GlobOptionsWithFileTypesTrue): Promise<Path[]>;
+declare function glob_(pattern: string | string[], options: GlobOptionsWithFileTypesFalse): Promise<string[]>;
+declare function glob_(pattern: string | string[], options: GlobOptions): Promise<Path[] | string[]>;
+/**
+ * Return a sync iterator for walking glob pattern matches.
+ */
+export declare function globIterateSync(pattern: string | string[], options?: GlobOptionsWithFileTypesUnset | undefined): Generator<string, void, void>;
+export declare function globIterateSync(pattern: string | string[], options: GlobOptionsWithFileTypesTrue): Generator<Path, void, void>;
+export declare function globIterateSync(pattern: string | string[], options: GlobOptionsWithFileTypesFalse): Generator<string, void, void>;
+export declare function globIterateSync(pattern: string | string[], options: GlobOptions): Generator<Path, void, void> | Generator<string, void, void>;
+/**
+ * Return an async iterator for walking glob pattern matches.
+ */
+export declare function globIterate(pattern: string | string[], options?: GlobOptionsWithFileTypesUnset | undefined): AsyncGenerator<string, void, void>;
+export declare function globIterate(pattern: string | string[], options: GlobOptionsWithFileTypesTrue): AsyncGenerator<Path, void, void>;
+export declare function globIterate(pattern: string | string[], options: GlobOptionsWithFileTypesFalse): AsyncGenerator<string, void, void>;
+export declare function globIterate(pattern: string | string[], options: GlobOptions): AsyncGenerator<Path, void, void> | AsyncGenerator<string, void, void>;
+export declare const streamSync: typeof globStreamSync;
+export declare const stream: typeof globStream & {
+ sync: typeof globStreamSync;
+};
+export declare const iterateSync: typeof globIterateSync;
+export declare const iterate: typeof globIterate & {
+ sync: typeof globIterateSync;
+};
+export declare const sync: typeof globSync & {
+ stream: typeof globStreamSync;
+ iterate: typeof globIterateSync;
+};
+export { escape, unescape } from 'minimatch';
+export { Glob } from './glob.js';
+export type { GlobOptions, GlobOptionsWithFileTypesFalse, GlobOptionsWithFileTypesTrue, GlobOptionsWithFileTypesUnset, } from './glob.js';
+export { hasMagic } from './has-magic.js';
+export type { IgnoreLike } from './ignore.js';
+export type { MatchStream } from './walker.js';
+export declare const glob: typeof glob_ & {
+ glob: typeof glob_;
+ globSync: typeof globSync;
+ sync: typeof globSync & {
+ stream: typeof globStreamSync;
+ iterate: typeof globIterateSync;
+ };
+ globStream: typeof globStream;
+ stream: typeof globStream & {
+ sync: typeof globStreamSync;
+ };
+ globStreamSync: typeof globStreamSync;
+ streamSync: typeof globStreamSync;
+ globIterate: typeof globIterate;
+ iterate: typeof globIterate & {
+ sync: typeof globIterateSync;
+ };
+ globIterateSync: typeof globIterateSync;
+ iterateSync: typeof globIterateSync;
+ Glob: typeof Glob;
+ hasMagic: (pattern: string | string[], options?: GlobOptions) => boolean;
+ escape: (s: string, { windowsPathsNoEscape, }?: Pick<import("minimatch").MinimatchOptions, "windowsPathsNoEscape"> | undefined) => string;
+ unescape: (s: string, { windowsPathsNoEscape, }?: Pick<import("minimatch").MinimatchOptions, "windowsPathsNoEscape"> | undefined) => string;
+};
+//# sourceMappingURL=index.d.ts.map \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/mjs/index.d.ts.map b/deps/npm/node_modules/glob/dist/mjs/index.d.ts.map
new file mode 100644
index 0000000000..c60290eb11
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/mjs/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/mjs/index.js b/deps/npm/node_modules/glob/dist/mjs/index.js
index df9deead11..7b270117e7 100644
--- a/deps/npm/node_modules/glob/dist/mjs/index.js
+++ b/deps/npm/node_modules/glob/dist/mjs/index.js
@@ -10,7 +10,7 @@ export function globStream(pattern, options = {}) {
export function globSync(pattern, options = {}) {
return new Glob(pattern, options).walkSync();
}
-export async function glob(pattern, options = {}) {
+async function glob_(pattern, options = {}) {
return new Glob(pattern, options).walk();
}
export function globIterateSync(pattern, options = {}) {
@@ -35,8 +35,8 @@ export { escape, unescape } from 'minimatch';
export { Glob } from './glob.js';
export { hasMagic } from './has-magic.js';
/* c8 ignore stop */
-export default Object.assign(glob, {
- glob,
+export const glob = Object.assign(glob_, {
+ glob: glob_,
globSync,
sync,
globStream,
@@ -52,4 +52,5 @@ export default Object.assign(glob, {
escape,
unescape,
});
+glob.glob = glob;
//# sourceMappingURL=index.js.map \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/mjs/index.js.map b/deps/npm/node_modules/glob/dist/mjs/index.js.map
new file mode 100644
index 0000000000..2d4fc07727
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/mjs/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAS5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAuBzC,MAAM,UAAU,cAAc,CAC5B,OAA0B,EAC1B,UAAuB,EAAE;IAEzB,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,UAAU,EAAE,CAAA;AAChD,CAAC;AAsBD,MAAM,UAAU,UAAU,CACxB,OAA0B,EAC1B,UAAuB,EAAE;IAEzB,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,CAAA;AAC5C,CAAC;AAqBD,MAAM,UAAU,QAAQ,CACtB,OAA0B,EAC1B,UAAuB,EAAE;IAEzB,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAA;AAC9C,CAAC;AAwBD,KAAK,UAAU,KAAK,CAClB,OAA0B,EAC1B,UAAuB,EAAE;IAEzB,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAA;AAC1C,CAAC;AAqBD,MAAM,UAAU,eAAe,CAC7B,OAA0B,EAC1B,UAAuB,EAAE;IAEzB,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;AACjD,CAAC;AAqBD,MAAM,UAAU,WAAW,CACzB,OAA0B,EAC1B,UAAuB,EAAE;IAEzB,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,OAAO,EAAE,CAAA;AAC7C,CAAC;AAED,iEAAiE;AACjE,MAAM,CAAC,MAAM,UAAU,GAAG,cAAc,CAAA;AACxC,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAA;AACzE,MAAM,CAAC,MAAM,WAAW,GAAG,eAAe,CAAA;AAC1C,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE;IAChD,IAAI,EAAE,eAAe;CACtB,CAAC,CAAA;AACF,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;IAC1C,MAAM,EAAE,cAAc;IACtB,OAAO,EAAE,eAAe;CACzB,CAAC,CAAA;AAEF,qBAAqB;AACrB,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAOhC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAGzC,oBAAoB;AAEpB,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;IACvC,IAAI,EAAE,KAAK;IACX,QAAQ;IACR,IAAI;IACJ,UAAU;IACV,MAAM;IACN,cAAc;IACd,UAAU;IACV,WAAW;IACX,OAAO;IACP,eAAe;IACf,WAAW;IACX,IAAI;IACJ,QAAQ;IACR,MAAM;IACN,QAAQ;CACT,CAAC,CAAA;AACF,IAAI,CAAC,IAAI,GAAG,IAAI,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\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<Path, Path>\nexport function globStreamSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse\n): Minipass<string, string>\nexport function globStreamSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesUnset\n): Minipass<string, string>\nexport function globStreamSync(\n pattern: string | string[],\n options: GlobOptions\n): Minipass<Path, Path> | Minipass<string, string>\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<string, string>\nexport function globStream(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue\n): Minipass<Path, Path>\nexport function globStream(\n pattern: string | string[],\n options?: GlobOptionsWithFileTypesUnset | undefined\n): Minipass<string, string>\nexport function globStream(\n pattern: string | string[],\n options: GlobOptions\n): Minipass<Path, Path> | Minipass<string, string>\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<string[]>\nasync function glob_(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue\n): Promise<Path[]>\nasync function glob_(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse\n): Promise<string[]>\nasync function glob_(\n pattern: string | string[],\n options: GlobOptions\n): Promise<Path[] | string[]>\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<string, void, void>\nexport function globIterateSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue\n): Generator<Path, void, void>\nexport function globIterateSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse\n): Generator<string, void, void>\nexport function globIterateSync(\n pattern: string | string[],\n options: GlobOptions\n): Generator<Path, void, void> | Generator<string, void, void>\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<string, void, void>\nexport function globIterate(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue\n): AsyncGenerator<Path, void, void>\nexport function globIterate(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse\n): AsyncGenerator<string, void, void>\nexport function globIterate(\n pattern: string | string[],\n options: GlobOptions\n): AsyncGenerator<Path, void, void> | AsyncGenerator<string, void, void>\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\n/* c8 ignore start */\nexport { escape, unescape } from 'minimatch'\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 type { IgnoreLike } from './ignore.js'\nexport type { MatchStream } from './walker.js'\n/* c8 ignore stop */\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/mjs/package.json b/deps/npm/node_modules/glob/dist/mjs/package.json
index 3dbc1ca591..ff3441b459 100644
--- a/deps/npm/node_modules/glob/dist/mjs/package.json
+++ b/deps/npm/node_modules/glob/dist/mjs/package.json
@@ -1,3 +1,4 @@
{
+ "version": "10.2.1",
"type": "module"
}
diff --git a/deps/npm/node_modules/glob/dist/mjs/pattern.d.ts b/deps/npm/node_modules/glob/dist/mjs/pattern.d.ts
new file mode 100644
index 0000000000..109cc4e7a5
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/mjs/pattern.d.ts
@@ -0,0 +1,77 @@
+/// <reference types="node" />
+import { GLOBSTAR } from 'minimatch';
+export type MMPattern = string | RegExp | typeof GLOBSTAR;
+export type PatternList = [p: MMPattern, ...rest: MMPattern[]];
+export type UNCPatternList = [
+ p0: '',
+ p1: '',
+ p2: string,
+ p3: string,
+ ...rest: MMPattern[]
+];
+export type DrivePatternList = [p0: string, ...rest: MMPattern[]];
+export type AbsolutePatternList = [p0: '', ...rest: MMPattern[]];
+export type GlobList = [p: string, ...rest: string[]];
+/**
+ * An immutable-ish view on an array of glob parts and their parsed
+ * results
+ */
+export declare class Pattern {
+ #private;
+ readonly length: number;
+ constructor(patternList: MMPattern[], globList: string[], index: number, platform: NodeJS.Platform);
+ /**
+ * The first entry in the parsed list of patterns
+ */
+ pattern(): MMPattern;
+ /**
+ * true of if pattern() returns a string
+ */
+ isString(): boolean;
+ /**
+ * true of if pattern() returns GLOBSTAR
+ */
+ isGlobstar(): boolean;
+ /**
+ * true if pattern() returns a regexp
+ */
+ isRegExp(): boolean;
+ /**
+ * The /-joined set of glob parts that make up this pattern
+ */
+ globString(): string;
+ /**
+ * true if there are more pattern parts after this one
+ */
+ hasMore(): boolean;
+ /**
+ * The rest of the pattern after this part, or null if this is the end
+ */
+ rest(): Pattern | null;
+ /**
+ * true if the pattern represents a //unc/path/ on windows
+ */
+ isUNC(): boolean;
+ /**
+ * True if the pattern starts with a drive letter on Windows
+ */
+ isDrive(): boolean;
+ /**
+ * True if the pattern is rooted on an absolute path
+ */
+ isAbsolute(): boolean;
+ /**
+ * consume the root of the pattern, and return it
+ */
+ root(): string;
+ /**
+ * Check to see if the current globstar pattern is allowed to follow
+ * a symbolic link.
+ */
+ checkFollowGlobstar(): boolean;
+ /**
+ * Mark that the current globstar pattern is following a symbolic link
+ */
+ markFollowGlobstar(): boolean;
+}
+//# sourceMappingURL=pattern.d.ts.map \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/mjs/pattern.d.ts.map b/deps/npm/node_modules/glob/dist/mjs/pattern.d.ts.map
new file mode 100644
index 0000000000..1430a77dad
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/mjs/pattern.d.ts.map
@@ -0,0 +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;IAOd;;;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/mjs/pattern.js.map b/deps/npm/node_modules/glob/dist/mjs/pattern.js.map
new file mode 100644
index 0000000000..bb039c1421
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/mjs/pattern.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"pattern.js","sourceRoot":"","sources":["../../src/pattern.ts"],"names":[],"mappings":"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","sourcesContent":["// this is just a very light wrapper around 2 arrays with an offset index\n\nimport { GLOBSTAR } from 'minimatch'\nexport type MMPattern = string | RegExp | typeof GLOBSTAR\n\n// an array of length >= 1\nexport type PatternList = [p: MMPattern, ...rest: MMPattern[]]\nexport type UNCPatternList = [\n p0: '',\n p1: '',\n p2: string,\n p3: string,\n ...rest: MMPattern[]\n]\nexport type DrivePatternList = [p0: string, ...rest: MMPattern[]]\nexport type AbsolutePatternList = [p0: '', ...rest: MMPattern[]]\nexport type GlobList = [p: string, ...rest: string[]]\n\nconst isPatternList = (pl: MMPattern[]): pl is PatternList =>\n pl.length >= 1\nconst isGlobList = (gl: string[]): gl is GlobList => gl.length >= 1\n\n/**\n * An immutable-ish view on an array of glob parts and their parsed\n * results\n */\nexport class Pattern {\n readonly #patternList: PatternList\n readonly #globList: GlobList\n readonly #index: number\n readonly length: number\n readonly #platform: NodeJS.Platform\n #rest?: Pattern | null\n #globString?: string\n #isDrive?: boolean\n #isUNC?: boolean\n #isAbsolute?: boolean\n #followGlobstar: boolean = true\n\n constructor(\n patternList: MMPattern[],\n globList: string[],\n index: number,\n platform: NodeJS.Platform\n ) {\n if (!isPatternList(patternList)) {\n throw new TypeError('empty pattern list')\n }\n if (!isGlobList(globList)) {\n throw new TypeError('empty glob list')\n }\n if (globList.length !== patternList.length) {\n throw new TypeError('mismatched pattern list and glob list lengths')\n }\n this.length = patternList.length\n if (index < 0 || index >= this.length) {\n throw new TypeError('index out of range')\n }\n this.#patternList = patternList\n this.#globList = globList\n this.#index = index\n this.#platform = platform\n\n // normalize root entries of absolute patterns on initial creation.\n if (this.#index === 0) {\n // c: => ['c:/']\n // C:/ => ['C:/']\n // C:/x => ['C:/', 'x']\n // //host/share => ['//host/share/']\n // //host/share/ => ['//host/share/']\n // //host/share/x => ['//host/share/', 'x']\n // /etc => ['/', 'etc']\n // / => ['/']\n if (this.isUNC()) {\n // '' / '' / 'host' / 'share'\n const [p0, p1, p2, p3, ...prest] = this.#patternList\n const [g0, g1, g2, g3, ...grest] = this.#globList\n if (prest[0] === '') {\n // ends in /\n prest.shift()\n grest.shift()\n }\n const p = [p0, p1, p2, p3, ''].join('/')\n const g = [g0, g1, g2, g3, ''].join('/')\n this.#patternList = [p, ...prest]\n this.#globList = [g, ...grest]\n this.length = this.#patternList.length\n } else if (this.isDrive() || this.isAbsolute()) {\n const [p1, ...prest] = this.#patternList\n const [g1, ...grest] = this.#globList\n if (prest[0] === '') {\n // ends in /\n prest.shift()\n grest.shift()\n }\n const p = (p1 as string) + '/'\n const g = g1 + '/'\n this.#patternList = [p, ...prest]\n this.#globList = [g, ...grest]\n this.length = this.#patternList.length\n }\n }\n }\n\n /**\n * The first entry in the parsed list of patterns\n */\n pattern(): MMPattern {\n return this.#patternList[this.#index]\n }\n\n /**\n * true of if pattern() returns a string\n */\n isString(): boolean {\n return typeof this.#patternList[this.#index] === 'string'\n }\n /**\n * true of if pattern() returns GLOBSTAR\n */\n isGlobstar(): boolean {\n return this.#patternList[this.#index] === GLOBSTAR\n }\n /**\n * true if pattern() returns a regexp\n */\n isRegExp(): boolean {\n return this.#patternList[this.#index] instanceof RegExp\n }\n\n /**\n * The /-joined set of glob parts that make up this pattern\n */\n globString(): string {\n return (this.#globString =\n this.#globString ||\n (this.#index === 0\n ? this.isAbsolute()\n ? this.#globList[0] + this.#globList.slice(1).join('/')\n : this.#globList.join('/')\n : this.#globList.slice(this.#index).join('/')))\n }\n\n /**\n * true if there are more pattern parts after this one\n */\n hasMore(): boolean {\n return this.length > this.#index + 1\n }\n\n /**\n * The rest of the pattern after this part, or null if this is the end\n */\n rest(): Pattern | null {\n if (this.#rest !== undefined) return this.#rest\n if (!this.hasMore()) return (this.#rest = null)\n this.#rest = new Pattern(\n this.#patternList,\n this.#globList,\n this.#index + 1,\n this.#platform\n )\n this.#rest.#isAbsolute = this.#isAbsolute\n this.#rest.#isUNC = this.#isUNC\n this.#rest.#isDrive = this.#isDrive\n return this.#rest\n }\n\n /**\n * true if the pattern represents a //unc/path/ on windows\n */\n isUNC(): boolean {\n const pl = this.#patternList\n return this.#isUNC !== undefined\n ? this.#isUNC\n : (this.#isUNC =\n this.#platform === 'win32' &&\n this.#index === 0 &&\n pl[0] === '' &&\n pl[1] === '' &&\n typeof pl[2] === 'string' &&\n !!pl[2] &&\n typeof pl[3] === 'string' &&\n !!pl[3])\n }\n\n // pattern like C:/...\n // split = ['C:', ...]\n // XXX: would be nice to handle patterns like `c:*` to test the cwd\n // in c: for *, but I don't know of a way to even figure out what that\n // cwd is without actually chdir'ing into it?\n /**\n * True if the pattern starts with a drive letter on Windows\n */\n isDrive(): boolean {\n const pl = this.#patternList\n return this.#isDrive !== undefined\n ? this.#isDrive\n : (this.#isDrive =\n this.#platform === 'win32' &&\n this.#index === 0 &&\n this.length > 1 &&\n typeof pl[0] === 'string' &&\n /^[a-z]:$/i.test(pl[0]))\n }\n\n // pattern = '/' or '/...' or '/x/...'\n // split = ['', ''] or ['', ...] or ['', 'x', ...]\n // Drive and UNC both considered absolute on windows\n /**\n * True if the pattern is rooted on an absolute path\n */\n isAbsolute(): boolean {\n const pl = this.#patternList\n return this.#isAbsolute !== undefined\n ? this.#isAbsolute\n : (this.#isAbsolute =\n (pl[0] === '' && pl.length > 1) ||\n this.isDrive() ||\n this.isUNC())\n }\n\n /**\n * consume the root of the pattern, and return it\n */\n root(): string {\n const p = this.#patternList[0]\n return typeof p === 'string' && this.isAbsolute() && this.#index === 0\n ? p\n : ''\n }\n\n /**\n * Check to see if the current globstar pattern is allowed to follow\n * a symbolic link.\n */\n checkFollowGlobstar(): boolean {\n return !(\n this.#index === 0 ||\n !this.isGlobstar() ||\n !this.#followGlobstar\n )\n }\n\n /**\n * Mark that the current globstar pattern is following a symbolic link\n */\n markFollowGlobstar(): boolean {\n if (this.#index === 0 || !this.isGlobstar() || !this.#followGlobstar)\n return false\n this.#followGlobstar = false\n return true\n }\n}\n"]} \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/mjs/processor.d.ts b/deps/npm/node_modules/glob/dist/mjs/processor.d.ts
new file mode 100644
index 0000000000..ccedfbf282
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/mjs/processor.d.ts
@@ -0,0 +1,59 @@
+import { MMRegExp } from 'minimatch';
+import { Path } from 'path-scurry';
+import { Pattern } from './pattern.js';
+import { GlobWalkerOpts } from './walker.js';
+/**
+ * A cache of which patterns have been processed for a given Path
+ */
+export declare class HasWalkedCache {
+ store: Map<string, Set<string>>;
+ constructor(store?: Map<string, Set<string>>);
+ copy(): HasWalkedCache;
+ hasWalked(target: Path, pattern: Pattern): boolean | undefined;
+ storeWalked(target: Path, pattern: Pattern): void;
+}
+/**
+ * A record of which paths have been matched in a given walk step,
+ * and whether they only are considered a match if they are a directory,
+ * and whether their absolute or relative path should be returned.
+ */
+export declare class MatchRecord {
+ store: Map<Path, number>;
+ add(target: Path, absolute: boolean, ifDir: boolean): void;
+ entries(): [Path, boolean, boolean][];
+}
+/**
+ * A collection of patterns that must be processed in a subsequent step
+ * for a given path.
+ */
+export declare class SubWalks {
+ store: Map<Path, Pattern[]>;
+ add(target: Path, pattern: Pattern): void;
+ get(target: Path): Pattern[];
+ entries(): [Path, Pattern[]][];
+ keys(): Path[];
+}
+/**
+ * The class that processes patterns for a given path.
+ *
+ * Handles child entry filtering, and determining whether a path's
+ * directory contents must be read.
+ */
+export declare class Processor {
+ hasWalkedCache: HasWalkedCache;
+ matches: MatchRecord;
+ subwalks: SubWalks;
+ patterns?: Pattern[];
+ follow: boolean;
+ dot: boolean;
+ opts: GlobWalkerOpts;
+ constructor(opts: GlobWalkerOpts, hasWalkedCache?: HasWalkedCache);
+ processPatterns(target: Path, patterns: Pattern[]): this;
+ subwalkTargets(): Path[];
+ child(): Processor;
+ filterEntries(parent: Path, entries: Path[]): Processor;
+ testGlobstar(e: Path, pattern: Pattern, rest: Pattern | null, absolute: boolean): void;
+ testRegExp(e: Path, p: MMRegExp, rest: Pattern | null, absolute: boolean): void;
+ testString(e: Path, p: string, rest: Pattern | null, absolute: boolean): void;
+}
+//# sourceMappingURL=processor.d.ts.map \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/mjs/processor.d.ts.map b/deps/npm/node_modules/glob/dist/mjs/processor.d.ts.map
new file mode 100644
index 0000000000..75d92efe28
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/mjs/processor.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"processor.d.ts","sourceRoot":"","sources":["../../src/processor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAY,QAAQ,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAClC,OAAO,EAAa,OAAO,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C;;GAEG;AACH,qBAAa,cAAc;IACzB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;gBACnB,KAAK,GAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAa;IAGvD,IAAI;IAGJ,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO;IAGxC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO;CAM3C;AAED;;;;GAIG;AACH,qBAAa,WAAW;IACtB,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAY;IACpC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;IAMnD,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;CAOtC;AAED;;;GAGG;AACH,qBAAa,QAAQ;IACnB,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAY;IACvC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO;IAWlC,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,EAAE;IAS5B,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE;IAG9B,IAAI,IAAI,IAAI,EAAE;CAGf;AAED;;;;;GAKG;AACH,qBAAa,SAAS;IACpB,cAAc,EAAE,cAAc,CAAA;IAC9B,OAAO,cAAoB;IAC3B,QAAQ,WAAiB;IACzB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAA;IACpB,MAAM,EAAE,OAAO,CAAA;IACf,GAAG,EAAE,OAAO,CAAA;IACZ,IAAI,EAAE,cAAc,CAAA;gBAER,IAAI,EAAE,cAAc,EAAE,cAAc,CAAC,EAAE,cAAc;IASjE,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE;IAwGjD,cAAc,IAAI,IAAI,EAAE;IAIxB,KAAK;IAQL,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,SAAS;IAqBvD,YAAY,CACV,CAAC,EAAE,IAAI,EACP,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,OAAO,GAAG,IAAI,EACpB,QAAQ,EAAE,OAAO;IA8CnB,UAAU,CACR,CAAC,EAAE,IAAI,EACP,CAAC,EAAE,QAAQ,EACX,IAAI,EAAE,OAAO,GAAG,IAAI,EACpB,QAAQ,EAAE,OAAO;IAUnB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,EAAE,QAAQ,EAAE,OAAO;CASvE"} \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/mjs/processor.js.map b/deps/npm/node_modules/glob/dist/mjs/processor.js.map
new file mode 100644
index 0000000000..bf17d8e99b
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/mjs/processor.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"processor.js","sourceRoot":"","sources":["../../src/processor.ts"],"names":[],"mappings":"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","sourcesContent":["// synchronous utility for filtering entries and calculating subwalks\n\nimport { GLOBSTAR, MMRegExp } from 'minimatch'\nimport { Path } from 'path-scurry'\nimport { MMPattern, Pattern } from './pattern.js'\nimport { GlobWalkerOpts } from './walker.js'\n\n/**\n * A cache of which patterns have been processed for a given Path\n */\nexport class HasWalkedCache {\n store: Map<string, Set<string>>\n constructor(store: Map<string, Set<string>> = new Map()) {\n this.store = store\n }\n copy() {\n return new HasWalkedCache(new Map(this.store))\n }\n hasWalked(target: Path, pattern: Pattern) {\n return this.store.get(target.fullpath())?.has(pattern.globString())\n }\n storeWalked(target: Path, pattern: Pattern) {\n const fullpath = target.fullpath()\n const cached = this.store.get(fullpath)\n if (cached) cached.add(pattern.globString())\n else this.store.set(fullpath, new Set([pattern.globString()]))\n }\n}\n\n/**\n * A record of which paths have been matched in a given walk step,\n * and whether they only are considered a match if they are a directory,\n * and whether their absolute or relative path should be returned.\n */\nexport class MatchRecord {\n store: Map<Path, number> = new Map()\n add(target: Path, absolute: boolean, ifDir: boolean) {\n const n = (absolute ? 2 : 0) | (ifDir ? 1 : 0)\n const current = this.store.get(target)\n this.store.set(target, current === undefined ? n : n & current)\n }\n // match, absolute, ifdir\n entries(): [Path, boolean, boolean][] {\n return [...this.store.entries()].map(([path, n]) => [\n path,\n !!(n & 2),\n !!(n & 1),\n ])\n }\n}\n\n/**\n * A collection of patterns that must be processed in a subsequent step\n * for a given path.\n */\nexport class SubWalks {\n store: Map<Path, Pattern[]> = new Map()\n add(target: Path, pattern: Pattern) {\n if (!target.canReaddir()) {\n return\n }\n const subs = this.store.get(target)\n if (subs) {\n if (!subs.find(p => p.globString() === pattern.globString())) {\n subs.push(pattern)\n }\n } else this.store.set(target, [pattern])\n }\n get(target: Path): Pattern[] {\n const subs = this.store.get(target)\n /* c8 ignore start */\n if (!subs) {\n throw new Error('attempting to walk unknown path')\n }\n /* c8 ignore stop */\n return subs\n }\n entries(): [Path, Pattern[]][] {\n return this.keys().map(k => [k, this.store.get(k) as Pattern[]])\n }\n keys(): Path[] {\n return [...this.store.keys()].filter(t => t.canReaddir())\n }\n}\n\n/**\n * The class that processes patterns for a given path.\n *\n * Handles child entry filtering, and determining whether a path's\n * directory contents must be read.\n */\nexport class Processor {\n hasWalkedCache: HasWalkedCache\n matches = new MatchRecord()\n subwalks = new SubWalks()\n patterns?: Pattern[]\n follow: boolean\n dot: boolean\n opts: GlobWalkerOpts\n\n constructor(opts: GlobWalkerOpts, hasWalkedCache?: HasWalkedCache) {\n this.opts = opts\n this.follow = !!opts.follow\n this.dot = !!opts.dot\n this.hasWalkedCache = hasWalkedCache\n ? hasWalkedCache.copy()\n : new HasWalkedCache()\n }\n\n processPatterns(target: Path, patterns: Pattern[]) {\n this.patterns = patterns\n const processingSet: [Path, Pattern][] = patterns.map(p => [target, p])\n\n // map of paths to the magic-starting subwalks they need to walk\n // first item in patterns is the filter\n\n for (let [t, pattern] of processingSet) {\n this.hasWalkedCache.storeWalked(t, pattern)\n\n const root = pattern.root()\n const absolute = pattern.isAbsolute() && this.opts.absolute !== false\n\n // start absolute patterns at root\n if (root) {\n t = t.resolve(\n root === '/' && this.opts.root !== undefined\n ? this.opts.root\n : root\n )\n const rest = pattern.rest()\n if (!rest) {\n this.matches.add(t, true, false)\n continue\n } else {\n pattern = rest\n }\n }\n\n if (t.isENOENT()) continue\n\n let p: MMPattern\n let rest: Pattern | null\n let changed = false\n while (\n typeof (p = pattern.pattern()) === 'string' &&\n (rest = pattern.rest())\n ) {\n const c = t.resolve(p)\n // we can be reasonably sure that .. is a readable dir\n if (c.isUnknown() && p !== '..') break\n t = c\n pattern = rest\n changed = true\n }\n p = pattern.pattern()\n rest = pattern.rest()\n if (changed) {\n if (this.hasWalkedCache.hasWalked(t, pattern)) continue\n this.hasWalkedCache.storeWalked(t, pattern)\n }\n\n // now we have either a final string for a known entry,\n // more strings for an unknown entry,\n // or a pattern starting with magic, mounted on t.\n if (typeof p === 'string') {\n // must be final entry\n if (!rest) {\n const ifDir = p === '..' || p === '' || p === '.'\n this.matches.add(t.resolve(p), absolute, ifDir)\n } else {\n this.subwalks.add(t, pattern)\n }\n continue\n } else if (p === GLOBSTAR) {\n // if no rest, match and subwalk pattern\n // if rest, process rest and subwalk pattern\n // if it's a symlink, but we didn't get here by way of a\n // globstar match (meaning it's the first time THIS globstar\n // has traversed a symlink), then we follow it. Otherwise, stop.\n if (\n !t.isSymbolicLink() ||\n this.follow ||\n pattern.checkFollowGlobstar()\n ) {\n this.subwalks.add(t, pattern)\n }\n const rp = rest?.pattern()\n const rrest = rest?.rest()\n if (!rest || ((rp === '' || rp === '.') && !rrest)) {\n // only HAS to be a dir if it ends in **/ or **/.\n // but ending in ** will match files as well.\n this.matches.add(t, absolute, rp === '' || rp === '.')\n } else {\n if (rp === '..') {\n // this would mean you're matching **/.. at the fs root,\n // and no thanks, I'm not gonna test that specific case.\n /* c8 ignore start */\n const tp = t.parent || t\n /* c8 ignore stop */\n if (!rrest) this.matches.add(tp, absolute, true)\n else if (!this.hasWalkedCache.hasWalked(tp, rrest)) {\n this.subwalks.add(tp, rrest)\n }\n }\n }\n } else if (p instanceof RegExp) {\n this.subwalks.add(t, pattern)\n }\n }\n\n return this\n }\n\n subwalkTargets(): Path[] {\n return this.subwalks.keys()\n }\n\n child() {\n return new Processor(this.opts, this.hasWalkedCache)\n }\n\n // return a new Processor containing the subwalks for each\n // child entry, and a set of matches, and\n // a hasWalkedCache that's a copy of this one\n // then we're going to call\n filterEntries(parent: Path, entries: Path[]): Processor {\n const patterns = this.subwalks.get(parent)\n // put matches and entry walks into the results processor\n const results = this.child()\n for (const e of entries) {\n for (const pattern of patterns) {\n const absolute = pattern.isAbsolute()\n const p = pattern.pattern()\n const rest = pattern.rest()\n if (p === GLOBSTAR) {\n results.testGlobstar(e, pattern, rest, absolute)\n } else if (p instanceof RegExp) {\n results.testRegExp(e, p, rest, absolute)\n } else {\n results.testString(e, p, rest, absolute)\n }\n }\n }\n return results\n }\n\n testGlobstar(\n e: Path,\n pattern: Pattern,\n rest: Pattern | null,\n absolute: boolean\n ) {\n if (this.dot || !e.name.startsWith('.')) {\n if (!pattern.hasMore()) {\n this.matches.add(e, absolute, false)\n }\n if (e.canReaddir()) {\n // if we're in follow mode or it's not a symlink, just keep\n // testing the same pattern. If there's more after the globstar,\n // then this symlink consumes the globstar. If not, then we can\n // follow at most ONE symlink along the way, so we mark it, which\n // also checks to ensure that it wasn't already marked.\n if (this.follow || !e.isSymbolicLink()) {\n this.subwalks.add(e, pattern)\n } else if (e.isSymbolicLink()) {\n if (rest && pattern.checkFollowGlobstar()) {\n this.subwalks.add(e, rest)\n } else if (pattern.markFollowGlobstar()) {\n this.subwalks.add(e, pattern)\n }\n }\n }\n }\n // if the NEXT thing matches this entry, then also add\n // the rest.\n if (rest) {\n const rp = rest.pattern()\n if (\n typeof rp === 'string' &&\n // dots and empty were handled already\n rp !== '..' &&\n rp !== '' &&\n rp !== '.'\n ) {\n this.testString(e, rp, rest.rest(), absolute)\n } else if (rp === '..') {\n /* c8 ignore start */\n const ep = e.parent || e\n /* c8 ignore stop */\n this.subwalks.add(ep, rest)\n } else if (rp instanceof RegExp) {\n this.testRegExp(e, rp, rest.rest(), absolute)\n }\n }\n }\n\n testRegExp(\n e: Path,\n p: MMRegExp,\n rest: Pattern | null,\n absolute: boolean\n ) {\n if (!p.test(e.name)) return\n if (!rest) {\n this.matches.add(e, absolute, false)\n } else {\n this.subwalks.add(e, rest)\n }\n }\n\n testString(e: Path, p: string, rest: Pattern | null, absolute: boolean) {\n // should never happen?\n if (!e.isNamed(p)) return\n if (!rest) {\n this.matches.add(e, absolute, false)\n } else {\n this.subwalks.add(e, rest)\n }\n }\n}\n"]} \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/mjs/walker.d.ts b/deps/npm/node_modules/glob/dist/mjs/walker.d.ts
new file mode 100644
index 0000000000..5c1a041497
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/mjs/walker.d.ts
@@ -0,0 +1,96 @@
+/// <reference types="node" />
+/**
+ * Single-use utility classes to provide functionality to the {@link Glob}
+ * methods.
+ *
+ * @module
+ */
+import { Minipass } from 'minipass';
+import { Path } from 'path-scurry';
+import { IgnoreLike } from './ignore.js';
+import { Pattern } from './pattern.js';
+import { Processor } from './processor.js';
+export interface GlobWalkerOpts {
+ absolute?: boolean;
+ allowWindowsEscape?: boolean;
+ cwd?: string | URL;
+ dot?: boolean;
+ dotRelative?: boolean;
+ follow?: boolean;
+ ignore?: string | string[] | IgnoreLike;
+ mark?: boolean;
+ matchBase?: boolean;
+ maxDepth?: number;
+ nobrace?: boolean;
+ nocase?: boolean;
+ nodir?: boolean;
+ noext?: boolean;
+ noglobstar?: boolean;
+ platform?: NodeJS.Platform;
+ posix?: boolean;
+ realpath?: boolean;
+ root?: string;
+ stat?: boolean;
+ signal?: AbortSignal;
+ windowsPathsNoEscape?: boolean;
+ withFileTypes?: boolean;
+}
+export type GWOFileTypesTrue = GlobWalkerOpts & {
+ withFileTypes: true;
+};
+export type GWOFileTypesFalse = GlobWalkerOpts & {
+ withFileTypes: false;
+};
+export type GWOFileTypesUnset = GlobWalkerOpts & {
+ withFileTypes?: undefined;
+};
+export type Result<O extends GlobWalkerOpts> = O extends GWOFileTypesTrue ? Path : O extends GWOFileTypesFalse ? string : O extends GWOFileTypesUnset ? string : Path | string;
+export type Matches<O extends GlobWalkerOpts> = O extends GWOFileTypesTrue ? Set<Path> : O extends GWOFileTypesFalse ? Set<string> : O extends GWOFileTypesUnset ? Set<string> : Set<Path | string>;
+export type MatchStream<O extends GlobWalkerOpts> = O extends GWOFileTypesTrue ? Minipass<Path, Path> : O extends GWOFileTypesFalse ? Minipass<string, string> : O extends GWOFileTypesUnset ? Minipass<string, string> : Minipass<Path | string, Path | string>;
+/**
+ * basic walking utilities that all the glob walker types use
+ */
+export declare abstract class GlobUtil<O extends GlobWalkerOpts = GlobWalkerOpts> {
+ #private;
+ path: Path;
+ patterns: Pattern[];
+ opts: O;
+ seen: Set<Path>;
+ paused: boolean;
+ aborted: boolean;
+ signal?: AbortSignal;
+ maxDepth: number;
+ constructor(patterns: Pattern[], path: Path, opts: O);
+ pause(): void;
+ resume(): void;
+ onResume(fn: () => any): void;
+ matchCheck(e: Path, ifDir: boolean): Promise<Path | undefined>;
+ matchCheckTest(e: Path | undefined, ifDir: boolean): Path | undefined;
+ matchCheckSync(e: Path, ifDir: boolean): Path | undefined;
+ abstract matchEmit(p: Result<O>): void;
+ abstract matchEmit(p: string | Path): void;
+ matchFinish(e: Path, absolute: boolean): void;
+ match(e: Path, absolute: boolean, ifDir: boolean): Promise<void>;
+ matchSync(e: Path, absolute: boolean, ifDir: boolean): void;
+ walkCB(target: Path, patterns: Pattern[], cb: () => any): void;
+ walkCB2(target: Path, patterns: Pattern[], processor: Processor, cb: () => any): any;
+ walkCB3(target: Path, entries: Path[], processor: Processor, cb: () => any): void;
+ walkCBSync(target: Path, patterns: Pattern[], cb: () => any): void;
+ walkCB2Sync(target: Path, patterns: Pattern[], processor: Processor, cb: () => any): any;
+ walkCB3Sync(target: Path, entries: Path[], processor: Processor, cb: () => any): void;
+}
+export declare class GlobWalker<O extends GlobWalkerOpts = GlobWalkerOpts> extends GlobUtil<O> {
+ matches: O extends GWOFileTypesTrue ? Set<Path> : O extends GWOFileTypesFalse ? Set<string> : O extends GWOFileTypesUnset ? Set<string> : Set<Path | string>;
+ constructor(patterns: Pattern[], path: Path, opts: O);
+ matchEmit(e: Result<O>): void;
+ walk(): Promise<Matches<O>>;
+ walkSync(): Matches<O>;
+}
+export declare class GlobStream<O extends GlobWalkerOpts = GlobWalkerOpts> extends GlobUtil<O> {
+ results: O extends GWOFileTypesTrue ? Minipass<Path, Path> : O extends GWOFileTypesFalse ? Minipass<string, string> : O extends GWOFileTypesUnset ? Minipass<string, string> : Minipass<Path | string, Path | string>;
+ constructor(patterns: Pattern[], path: Path, opts: O);
+ matchEmit(e: Result<O>): void;
+ stream(): MatchStream<O>;
+ streamSync(): MatchStream<O>;
+}
+//# sourceMappingURL=walker.d.ts.map \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/mjs/walker.d.ts.map b/deps/npm/node_modules/glob/dist/mjs/walker.d.ts.map
new file mode 100644
index 0000000000..7c8df20b2f
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/mjs/walker.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"walker.d.ts","sourceRoot":"","sources":["../../src/walker.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/deps/npm/node_modules/glob/dist/mjs/walker.js b/deps/npm/node_modules/glob/dist/mjs/walker.js
index 349314e297..6f3358b0c3 100644
--- a/deps/npm/node_modules/glob/dist/mjs/walker.js
+++ b/deps/npm/node_modules/glob/dist/mjs/walker.js
@@ -4,7 +4,7 @@
*
* @module
*/
-import Minipass from 'minipass';
+import { Minipass } from 'minipass';
import { Ignore } from './ignore.js';
import { Processor } from './processor.js';
const makeIgnore = (ignore, opts) => typeof ignore === 'string'
@@ -31,7 +31,7 @@ export class GlobUtil {
this.patterns = patterns;
this.path = path;
this.opts = opts;
- this.#sep = opts.platform === 'win32' ? '\\' : '/';
+ this.#sep = !opts.posix && opts.platform === 'win32' ? '\\' : '/';
if (opts.ignore) {
this.#ignore = makeIgnore(opts.ignore, opts);
}
@@ -128,14 +128,15 @@ export class GlobUtil {
this.matchEmit(e);
}
else if (abs) {
- this.matchEmit(e.fullpath() + mark);
+ const abs = this.opts.posix ? e.fullpathPosix() : e.fullpath();
+ this.matchEmit(abs + mark);
}
else {
- const rel = e.relative();
+ const rel = this.opts.posix ? e.relativePosix() : e.relative();
const pre = this.opts.dotRelative && !rel.startsWith('..' + this.#sep)
? '.' + this.#sep
: '';
- this.matchEmit(!rel && mark ? '.' + mark : pre + rel + mark);
+ this.matchEmit(!rel ? '.' + mark : pre + rel + mark);
}
}
async match(e, absolute, ifDir) {
diff --git a/deps/npm/node_modules/glob/dist/mjs/walker.js.map b/deps/npm/node_modules/glob/dist/mjs/walker.js.map
new file mode 100644
index 0000000000..8756bfca29
--- /dev/null
+++ b/deps/npm/node_modules/glob/dist/mjs/walker.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"walker.js","sourceRoot":"","sources":["../../src/walker.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Single-use utility classes to provide functionality to the {@link Glob}\n * methods.\n *\n * @module\n */\nimport { Minipass } from 'minipass'\nimport { Path } from 'path-scurry'\nimport { Ignore, IgnoreLike } from './ignore.js'\n\n// XXX can we somehow make it so that it NEVER processes a given path more than\n// once, enough that the match set tracking is no longer needed? that'd speed\n// things up a lot. Or maybe bring back nounique, and skip it in that case?\n\n// a single minimatch set entry with 1 or more parts\nimport { Pattern } from './pattern.js'\nimport { Processor } from './processor.js'\n\nexport interface GlobWalkerOpts {\n absolute?: boolean\n allowWindowsEscape?: boolean\n cwd?: string | URL\n dot?: boolean\n dotRelative?: boolean\n follow?: boolean\n ignore?: string | string[] | IgnoreLike\n mark?: boolean\n matchBase?: boolean\n // Note: maxDepth here means \"maximum actual Path.depth()\",\n // not \"maximum depth beyond cwd\"\n maxDepth?: number\n nobrace?: boolean\n nocase?: boolean\n nodir?: boolean\n noext?: boolean\n noglobstar?: boolean\n platform?: NodeJS.Platform\n posix?: boolean\n realpath?: boolean\n root?: string\n stat?: boolean\n signal?: AbortSignal\n windowsPathsNoEscape?: boolean\n withFileTypes?: boolean\n}\n\nexport type GWOFileTypesTrue = GlobWalkerOpts & {\n withFileTypes: true\n}\nexport type GWOFileTypesFalse = GlobWalkerOpts & {\n withFileTypes: false\n}\nexport type GWOFileTypesUnset = GlobWalkerOpts & {\n withFileTypes?: undefined\n}\n\nexport type Result<O extends GlobWalkerOpts> = O extends GWOFileTypesTrue\n ? Path\n : O extends GWOFileTypesFalse\n ? string\n : O extends GWOFileTypesUnset\n ? string\n : Path | string\n\nexport type Matches<O extends GlobWalkerOpts> = O extends GWOFileTypesTrue\n ? Set<Path>\n : O extends GWOFileTypesFalse\n ? Set<string>\n : O extends GWOFileTypesUnset\n ? Set<string>\n : Set<Path | string>\n\nexport type MatchStream<O extends GlobWalkerOpts> =\n O extends GWOFileTypesTrue\n ? Minipass<Path, Path>\n : O extends GWOFileTypesFalse\n ? Minipass<string, string>\n : O extends GWOFileTypesUnset\n ? Minipass<string, string>\n : Minipass<Path | string, Path | string>\n\nconst makeIgnore = (\n ignore: string | string[] | IgnoreLike,\n opts: GlobWalkerOpts\n): IgnoreLike =>\n typeof ignore === 'string'\n ? new Ignore([ignore], opts)\n : Array.isArray(ignore)\n ? new Ignore(ignore, opts)\n : ignore\n\n/**\n * basic walking utilities that all the glob walker types use\n */\nexport abstract class GlobUtil<O extends GlobWalkerOpts = GlobWalkerOpts> {\n path: Path\n patterns: Pattern[]\n opts: O\n seen: Set<Path> = new Set<Path>()\n paused: boolean = false\n aborted: boolean = false\n #onResume: (() => any)[] = []\n #ignore?: IgnoreLike\n #sep: '\\\\' | '/'\n signal?: AbortSignal\n maxDepth: number\n\n constructor(patterns: Pattern[], path: Path, opts: O)\n constructor(patterns: Pattern[], path: Path, opts: O) {\n this.patterns = patterns\n this.path = path\n this.opts = opts\n this.#sep = !opts.posix && opts.platform === 'win32' ? '\\\\' : '/'\n if (opts.ignore) {\n this.#ignore = makeIgnore(opts.ignore, opts)\n }\n // ignore, always set with maxDepth, but it's optional on the\n // GlobOptions type\n /* c8 ignore start */\n this.maxDepth = opts.maxDepth || Infinity\n /* c8 ignore stop */\n if (opts.signal) {\n this.signal = opts.signal\n this.signal.addEventListener('abort', () => {\n this.#onResume.length = 0\n })\n }\n }\n\n #ignored(path: Path): boolean {\n return this.seen.has(path) || !!this.#ignore?.ignored?.(path)\n }\n #childrenIgnored(path: Path): boolean {\n return !!this.#ignore?.childrenIgnored?.(path)\n }\n\n // backpressure mechanism\n pause() {\n this.paused = true\n }\n resume() {\n /* c8 ignore start */\n if (this.signal?.aborted) return\n /* c8 ignore stop */\n this.paused = false\n let fn: (() => any) | undefined = undefined\n while (!this.paused && (fn = this.#onResume.shift())) {\n fn()\n }\n }\n onResume(fn: () => any) {\n if (this.signal?.aborted) return\n /* c8 ignore start */\n if (!this.paused) {\n fn()\n } else {\n /* c8 ignore stop */\n this.#onResume.push(fn)\n }\n }\n\n // do the requisite realpath/stat checking, and return the path\n // to add or undefined to filter it out.\n async matchCheck(e: Path, ifDir: boolean): Promise<Path | undefined> {\n if (ifDir && this.opts.nodir) return undefined\n let rpc: Path | undefined\n if (this.opts.realpath) {\n rpc = e.realpathCached() || (await e.realpath())\n if (!rpc) return undefined\n e = rpc\n }\n const needStat = e.isUnknown() || this.opts.stat\n return this.matchCheckTest(needStat ? await e.lstat() : e, ifDir)\n }\n\n matchCheckTest(e: Path | undefined, ifDir: boolean): Path | undefined {\n return e &&\n (this.maxDepth === Infinity || e.depth() <= this.maxDepth) &&\n (!ifDir || e.canReaddir()) &&\n (!this.opts.nodir || !e.isDirectory()) &&\n !this.#ignored(e)\n ? e\n : undefined\n }\n\n matchCheckSync(e: Path, ifDir: boolean): Path | undefined {\n if (ifDir && this.opts.nodir) return undefined\n let rpc: Path | undefined\n if (this.opts.realpath) {\n rpc = e.realpathCached() || e.realpathSync()\n if (!rpc) return undefined\n e = rpc\n }\n const needStat = e.isUnknown() || this.opts.stat\n return this.matchCheckTest(needStat ? e.lstatSync() : e, ifDir)\n }\n\n abstract matchEmit(p: Result<O>): void\n abstract matchEmit(p: string | Path): void\n\n matchFinish(e: Path, absolute: boolean) {\n if (this.#ignored(e)) return\n const abs =\n this.opts.absolute === undefined ? absolute : this.opts.absolute\n this.seen.add(e)\n const mark = this.opts.mark && e.isDirectory() ? this.#sep : ''\n // ok, we have what we need!\n if (this.opts.withFileTypes) {\n this.matchEmit(e)\n } else if (abs) {\n const abs = this.opts.posix ? e.fullpathPosix() : e.fullpath()\n this.matchEmit(abs + mark)\n } else {\n const rel = this.opts.posix ? e.relativePosix() : e.relative()\n const pre =\n this.opts.dotRelative && !rel.startsWith('..' + this.#sep)\n ? '.' + this.#sep\n : ''\n this.matchEmit(!rel ? '.' + mark : pre + rel + mark)\n }\n }\n\n async match(e: Path, absolute: boolean, ifDir: boolean): Promise<void> {\n const p = await this.matchCheck(e, ifDir)\n if (p) this.matchFinish(p, absolute)\n }\n\n matchSync(e: Path, absolute: boolean, ifDir: boolean): void {\n const p = this.matchCheckSync(e, ifDir)\n if (p) this.matchFinish(p, absolute)\n }\n\n walkCB(target: Path, patterns: Pattern[], cb: () => any) {\n /* c8 ignore start */\n if (this.signal?.aborted) cb()\n /* c8 ignore stop */\n this.walkCB2(target, patterns, new Processor(this.opts), cb)\n }\n\n walkCB2(\n target: Path,\n patterns: Pattern[],\n processor: Processor,\n cb: () => any\n ) {\n if (this.#childrenIgnored(target)) return cb()\n if (this.signal?.aborted) cb()\n if (this.paused) {\n this.onResume(() => this.walkCB2(target, patterns, processor, cb))\n return\n }\n processor.processPatterns(target, patterns)\n\n // done processing. all of the above is sync, can be abstracted out.\n // subwalks is a map of paths to the entry filters they need\n // matches is a map of paths to [absolute, ifDir] tuples.\n let tasks = 1\n const next = () => {\n if (--tasks === 0) cb()\n }\n\n for (const [m, absolute, ifDir] of processor.matches.entries()) {\n if (this.#ignored(m)) continue\n tasks++\n this.match(m, absolute, ifDir).then(() => next())\n }\n\n for (const t of processor.subwalkTargets()) {\n if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) {\n continue\n }\n tasks++\n const childrenCached = t.readdirCached()\n if (t.calledReaddir())\n this.walkCB3(t, childrenCached, processor, next)\n else {\n t.readdirCB(\n (_, entries) => this.walkCB3(t, entries, processor, next),\n true\n )\n }\n }\n\n next()\n }\n\n walkCB3(\n target: Path,\n entries: Path[],\n processor: Processor,\n cb: () => any\n ) {\n processor = processor.filterEntries(target, entries)\n\n let tasks = 1\n const next = () => {\n if (--tasks === 0) cb()\n }\n\n for (const [m, absolute, ifDir] of processor.matches.entries()) {\n if (this.#ignored(m)) continue\n tasks++\n this.match(m, absolute, ifDir).then(() => next())\n }\n for (const [target, patterns] of processor.subwalks.entries()) {\n tasks++\n this.walkCB2(target, patterns, processor.child(), next)\n }\n\n next()\n }\n\n walkCBSync(target: Path, patterns: Pattern[], cb: () => any) {\n /* c8 ignore start */\n if (this.signal?.aborted) cb()\n /* c8 ignore stop */\n this.walkCB2Sync(target, patterns, new Processor(this.opts), cb)\n }\n\n walkCB2Sync(\n target: Path,\n patterns: Pattern[],\n processor: Processor,\n cb: () => any\n ) {\n if (this.#childrenIgnored(target)) return cb()\n if (this.signal?.aborted) cb()\n if (this.paused) {\n this.onResume(() =>\n this.walkCB2Sync(target, patterns, processor, cb)\n )\n return\n }\n processor.processPatterns(target, patterns)\n\n // done processing. all of the above is sync, can be abstracted out.\n // subwalks is a map of paths to the entry filters they need\n // matches is a map of paths to [absolute, ifDir] tuples.\n let tasks = 1\n const next = () => {\n if (--tasks === 0) cb()\n }\n\n for (const [m, absolute, ifDir] of processor.matches.entries()) {\n if (this.#ignored(m)) continue\n this.matchSync(m, absolute, ifDir)\n }\n\n for (const t of processor.subwalkTargets()) {\n if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) {\n continue\n }\n tasks++\n const children = t.readdirSync()\n this.walkCB3Sync(t, children, processor, next)\n }\n\n next()\n }\n\n walkCB3Sync(\n target: Path,\n entries: Path[],\n processor: Processor,\n cb: () => any\n ) {\n processor = processor.filterEntries(target, entries)\n\n let tasks = 1\n const next = () => {\n if (--tasks === 0) cb()\n }\n\n for (const [m, absolute, ifDir] of processor.matches.entries()) {\n if (this.#ignored(m)) continue\n this.matchSync(m, absolute, ifDir)\n }\n for (const [target, patterns] of processor.subwalks.entries()) {\n tasks++\n this.walkCB2Sync(target, patterns, processor.child(), next)\n }\n\n next()\n }\n}\n\nexport class GlobWalker<\n O extends GlobWalkerOpts = GlobWalkerOpts\n> extends GlobUtil<O> {\n matches: O extends GWOFileTypesTrue\n ? Set<Path>\n : O extends GWOFileTypesFalse\n ? Set<string>\n : O extends GWOFileTypesUnset\n ? Set<string>\n : Set<Path | string>\n\n constructor(patterns: Pattern[], path: Path, opts: O) {\n super(patterns, path, opts)\n this.matches = new Set() as Matches<O>\n }\n\n matchEmit(e: Result<O>): void\n matchEmit(e: Path | string): void {\n this.matches.add(e)\n }\n\n async walk(): Promise<Matches<O>> {\n if (this.signal?.aborted) throw this.signal.reason\n if (this.path.isUnknown()) {\n await this.path.lstat()\n }\n await new Promise((res, rej) => {\n this.walkCB(this.path, this.patterns, () => {\n if (this.signal?.aborted) {\n rej(this.signal.reason)\n } else {\n res(this.matches)\n }\n })\n })\n return this.matches\n }\n\n walkSync(): Matches<O> {\n if (this.signal?.aborted) throw this.signal.reason\n if (this.path.isUnknown()) {\n this.path.lstatSync()\n }\n // nothing for the callback to do, because this never pauses\n this.walkCBSync(this.path, this.patterns, () => {\n if (this.signal?.aborted) throw this.signal.reason\n })\n return this.matches\n }\n}\n\nexport class GlobStream<\n O extends GlobWalkerOpts = GlobWalkerOpts\n> extends GlobUtil<O> {\n results: O extends GWOFileTypesTrue\n ? Minipass<Path, Path>\n : O extends GWOFileTypesFalse\n ? Minipass<string, string>\n : O extends GWOFileTypesUnset\n ? Minipass<string, string>\n : Minipass<Path | string, Path | string>\n\n constructor(patterns: Pattern[], path: Path, opts: O) {\n super(patterns, path, opts)\n this.results = new Minipass({\n signal: this.signal,\n objectMode: true,\n }) as MatchStream<O>\n this.results.on('drain', () => this.resume())\n this.results.on('resume', () => this.resume())\n }\n\n matchEmit(e: Result<O>): void\n matchEmit(e: Path | string): void {\n this.results.write(e)\n if (!this.results.flowing) this.pause()\n }\n\n stream(): MatchStream<O> {\n const target = this.path\n if (target.isUnknown()) {\n target.lstat().then(() => {\n this.walkCB(target, this.patterns, () => this.results.end())\n })\n } else {\n this.walkCB(target, this.patterns, () => this.results.end())\n }\n return this.results\n }\n\n streamSync(): MatchStream<O> {\n if (this.path.isUnknown()) {\n this.path.lstatSync()\n }\n this.walkCBSync(this.path, this.patterns, () => this.results.end())\n return this.results\n }\n}\n"]} \ 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 e675cebdbd..b04d087e28 100644
--- a/deps/npm/node_modules/glob/package.json
+++ b/deps/npm/node_modules/glob/package.json
@@ -2,12 +2,13 @@
"author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)",
"name": "glob",
"description": "the most correct and second fastest glob implementation in JavaScript",
- "version": "9.3.2",
+ "version": "10.2.2",
+ "bin": "./dist/cjs/src/bin.js",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/node-glob.git"
},
- "main": "./dist/cjs/index-cjs.js",
+ "main": "./dist/cjs/src/index.js",
"module": "./dist/mjs/index.js",
"types": "./dist/mjs/index.d.ts",
"exports": {
@@ -17,8 +18,8 @@
"default": "./dist/mjs/index.js"
},
"require": {
- "types": "./dist/cjs/index.d.ts",
- "default": "./dist/cjs/index-cjs.js"
+ "types": "./dist/cjs/src/index.d.ts",
+ "default": "./dist/cjs/src/index.js"
}
}
},
@@ -59,10 +60,11 @@
"endOfLine": "lf"
},
"dependencies": {
- "fs.realpath": "^1.0.0",
- "minimatch": "^7.4.1",
- "minipass": "^4.2.4",
- "path-scurry": "^1.6.1"
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^2.0.3",
+ "minimatch": "^9.0.0",
+ "minipass": "^5.0.0",
+ "path-scurry": "^1.7.0"
},
"devDependencies": {
"@types/node": "^18.11.18",
diff --git a/deps/npm/node_modules/ignore-walk/package.json b/deps/npm/node_modules/ignore-walk/package.json
index ae68746218..4d9752ae25 100644
--- a/deps/npm/node_modules/ignore-walk/package.json
+++ b/deps/npm/node_modules/ignore-walk/package.json
@@ -1,11 +1,11 @@
{
"name": "ignore-walk",
- "version": "6.0.2",
+ "version": "6.0.3",
"description": "Nested/recursive `.gitignore`/`.npmignore` parsing and filtering.",
"main": "lib/index.js",
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.12.0",
+ "@npmcli/template-oss": "4.14.1",
"mutate-fs": "^2.1.1",
"tap": "^16.0.1"
},
@@ -38,7 +38,7 @@
"lib/"
],
"dependencies": {
- "minimatch": "^7.4.2"
+ "minimatch": "^9.0.0"
},
"tap": {
"test-env": "LC_ALL=sk",
@@ -56,7 +56,8 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.12.0",
- "content": "scripts/template-oss"
+ "version": "4.14.1",
+ "content": "scripts/template-oss",
+ "publish": "true"
}
}
diff --git a/deps/npm/node_modules/ini/lib/ini.js b/deps/npm/node_modules/ini/lib/ini.js
index d05682b606..763c829c6f 100644
--- a/deps/npm/node_modules/ini/lib/ini.js
+++ b/deps/npm/node_modules/ini/lib/ini.js
@@ -1,49 +1,70 @@
const { hasOwnProperty } = Object.prototype
-/* istanbul ignore next */
-const eol = typeof process !== 'undefined' &&
- process.platform === 'win32' ? '\r\n' : '\n'
+const encode = (obj, opt = {}) => {
+ if (typeof opt === 'string') {
+ opt = { section: opt }
+ }
+ opt.align = opt.align === true
+ opt.newline = opt.newline === true
+ opt.sort = opt.sort === true
+ opt.whitespace = opt.whitespace === true || opt.align === true
+ /* istanbul ignore next */
+ opt.platform = opt.platform || process?.platform
+ opt.bracketedArray = opt.bracketedArray !== false
-const encode = (obj, opt) => {
+ /* istanbul ignore next */
+ const eol = opt.platform === 'win32' ? '\r\n' : '\n'
+ const separator = opt.whitespace ? ' = ' : '='
const children = []
- let out = ''
- if (typeof opt === 'string') {
- opt = {
- section: opt,
- whitespace: false,
- }
- } else {
- opt = opt || Object.create(null)
- opt.whitespace = opt.whitespace === true
+ const keys = opt.sort ? Object.keys(obj).sort() : Object.keys(obj)
+
+ let padToChars = 0
+ // If aligning on the separator, then padToChars is determined as follows:
+ // 1. Get the keys
+ // 2. Exclude keys pointing to objects unless the value is null or an array
+ // 3. Add `[]` to array keys
+ // 4. Ensure non empty set of keys
+ // 5. Reduce the set to the longest `safe` key
+ // 6. Get the `safe` length
+ if (opt.align) {
+ padToChars = safe(
+ (
+ keys
+ .filter(k => obj[k] === null || Array.isArray(obj[k]) || typeof obj[k] !== 'object')
+ .map(k => Array.isArray(obj[k]) ? `${k}[]` : k)
+ )
+ .concat([''])
+ .reduce((a, b) => safe(a).length >= safe(b).length ? a : b)
+ ).length
}
- const separator = opt.whitespace ? ' = ' : '='
+ let out = ''
+ const arraySuffix = opt.bracketedArray ? '[]' : ''
- for (const k of Object.keys(obj)) {
+ for (const k of keys) {
const val = obj[k]
if (val && Array.isArray(val)) {
for (const item of val) {
- out += safe(k + '[]') + separator + safe(item) + eol
+ out += safe(`${k}${arraySuffix}`).padEnd(padToChars, ' ') + separator + safe(item) + eol
}
} else if (val && typeof val === 'object') {
children.push(k)
} else {
- out += safe(k) + separator + safe(val) + eol
+ out += safe(k).padEnd(padToChars, ' ') + separator + safe(val) + eol
}
}
if (opt.section && out.length) {
- out = '[' + safe(opt.section) + ']' + eol + out
+ out = '[' + safe(opt.section) + ']' + (opt.newline ? eol + eol : eol) + out
}
for (const k of children) {
- const nk = dotSplit(k).join('\\.')
+ const nk = splitSections(k, '.').join('\\.')
const section = (opt.section ? opt.section + '.' : '') + nk
- const { whitespace } = opt
const child = encode(obj[k], {
+ ...opt,
section,
- whitespace,
})
if (out.length && child.length) {
out += eol
@@ -55,24 +76,44 @@ const encode = (obj, opt) => {
return out
}
-const dotSplit = str =>
- str.replace(/\1/g, '\u0002LITERAL\\1LITERAL\u0002')
- .replace(/\\\./g, '\u0001')
- .split(/\./)
- .map(part =>
- part.replace(/\1/g, '\\.')
- .replace(/\2LITERAL\\1LITERAL\2/g, '\u0001'))
+function splitSections (str, separator) {
+ var lastMatchIndex = 0
+ var lastSeparatorIndex = 0
+ var nextIndex = 0
+ var sections = []
+
+ do {
+ nextIndex = str.indexOf(separator, lastMatchIndex)
-const decode = str => {
+ if (nextIndex !== -1) {
+ lastMatchIndex = nextIndex + separator.length
+
+ if (nextIndex > 0 && str[nextIndex - 1] === '\\') {
+ continue
+ }
+
+ sections.push(str.slice(lastSeparatorIndex, nextIndex))
+ lastSeparatorIndex = nextIndex + separator.length
+ }
+ } while (nextIndex !== -1)
+
+ sections.push(str.slice(lastSeparatorIndex))
+
+ return sections
+}
+
+const decode = (str, opt = {}) => {
+ opt.bracketedArray = opt.bracketedArray !== false
const out = Object.create(null)
let p = out
let section = null
- // section |key = value
- const re = /^\[([^\]]*)\]$|^([^=]+)(=(.*))?$/i
+ // section |key = value
+ const re = /^\[([^\]]*)\]\s*$|^([^=]+)(=(.*))?$/i
const lines = str.split(/[\r\n]+/g)
+ const duplicates = {}
for (const line of lines) {
- if (!line || line.match(/^\s*[;#]/)) {
+ if (!line || line.match(/^\s*[;#]/) || line.match(/^\s*$/)) {
continue
}
const match = line.match(re)
@@ -91,7 +132,13 @@ const decode = str => {
continue
}
const keyRaw = unsafe(match[2])
- const isArray = keyRaw.length > 2 && keyRaw.slice(-2) === '[]'
+ let isArray
+ if (opt.bracketedArray) {
+ isArray = keyRaw.length > 2 && keyRaw.slice(-2) === '[]'
+ } else {
+ duplicates[keyRaw] = (duplicates?.[keyRaw] || 0) + 1
+ isArray = duplicates[keyRaw] > 1
+ }
const key = isArray ? keyRaw.slice(0, -2) : keyRaw
if (key === '__proto__') {
continue
@@ -132,7 +179,7 @@ const decode = str => {
// see if the parent section is also an object.
// if so, add it to that, and mark this one for deletion
- const parts = dotSplit(k)
+ const parts = splitSections(k, '.')
p = out
const l = parts.pop()
const nl = l.replace(/\\\./g, '.')
diff --git a/deps/npm/node_modules/ini/package.json b/deps/npm/node_modules/ini/package.json
index e41c0f0f3d..5dd968e0ed 100644
--- a/deps/npm/node_modules/ini/package.json
+++ b/deps/npm/node_modules/ini/package.json
@@ -2,7 +2,7 @@
"author": "GitHub Inc.",
"name": "ini",
"description": "An ini encoder/decoder for node",
- "version": "3.0.1",
+ "version": "4.1.0",
"repository": {
"type": "git",
"url": "https://github.com/npm/ini.git"
@@ -15,15 +15,12 @@
"test": "tap",
"snap": "tap",
"posttest": "npm run lint",
- "preversion": "npm test",
- "postversion": "npm publish",
- "prepublishOnly": "git push origin --follow-tags",
"postlint": "template-oss-check",
"template-oss-apply": "template-oss-apply --force"
},
"devDependencies": {
- "@npmcli/eslint-config": "^3.0.1",
- "@npmcli/template-oss": "3.5.0",
+ "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/template-oss": "4.13.0",
"tap": "^16.0.1"
},
"license": "ISC",
@@ -32,10 +29,17 @@
"lib/"
],
"engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ "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": "3.5.0"
+ "version": "4.13.0",
+ "publish": "true"
+ },
+ "tap": {
+ "nyc-arg": [
+ "--exclude",
+ "tap-snapshots/**"
+ ]
}
}
diff --git a/deps/npm/node_modules/is-core-module/core.json b/deps/npm/node_modules/is-core-module/core.json
index d73579c43c..9a51663fc5 100644
--- a/deps/npm/node_modules/is-core-module/core.json
+++ b/deps/npm/node_modules/is-core-module/core.json
@@ -114,6 +114,8 @@
"node:string_decoder": [">= 14.18 && < 15", ">= 16"],
"sys": [">= 0.4 && < 0.7", ">= 0.8"],
"node:sys": [">= 14.18 && < 15", ">= 16"],
+ "test/reporters": [">= 19.9", ">= 20"],
+ "node:test/reporters": [">= 19.9", ">= 20"],
"node:test": [">= 16.17 && < 17", ">= 18"],
"timers": true,
"node:timers": [">= 14.18 && < 15", ">= 16"],
@@ -147,7 +149,8 @@
"node:v8": [">= 14.18 && < 15", ">= 16"],
"vm": true,
"node:vm": [">= 14.18 && < 15", ">= 16"],
- "wasi": ">= 13.4 && < 13.5",
+ "wasi": [">= 13.4 && < 13.5", ">= 20"],
+ "node:wasi": ">= 20",
"worker_threads": ">= 11.7",
"node:worker_threads": [">= 14.18 && < 15", ">= 16"],
"zlib": ">= 0.5",
diff --git a/deps/npm/node_modules/is-core-module/package.json b/deps/npm/node_modules/is-core-module/package.json
index 5c1a87142b..715299bd8d 100644
--- a/deps/npm/node_modules/is-core-module/package.json
+++ b/deps/npm/node_modules/is-core-module/package.json
@@ -1,6 +1,6 @@
{
"name": "is-core-module",
- "version": "2.11.0",
+ "version": "2.12.0",
"description": "Is this specifier a node.js core module?",
"main": "index.js",
"sideEffects": false,
@@ -45,16 +45,17 @@
"has": "^1.0.3"
},
"devDependencies": {
- "@ljharb/eslint-config": "^21.0.0",
- "aud": "^2.0.1",
+ "@ljharb/eslint-config": "^21.0.1",
+ "aud": "^2.0.2",
"auto-changelog": "^2.4.0",
"eslint": "=8.8.0",
+ "in-publish": "^2.0.1",
"mock-property": "^1.0.0",
"npmignore": "^0.3.0",
"nyc": "^10.3.2",
"safe-publish-latest": "^2.0.0",
"semver": "^6.3.0",
- "tape": "^5.6.1"
+ "tape": "^5.6.3"
},
"auto-changelog": {
"output": "CHANGELOG.md",
diff --git a/deps/npm/node_modules/jackspeak/LICENSE.md b/deps/npm/node_modules/jackspeak/LICENSE.md
new file mode 100644
index 0000000000..c5402b9577
--- /dev/null
+++ b/deps/npm/node_modules/jackspeak/LICENSE.md
@@ -0,0 +1,55 @@
+# 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
+<https://blueoakcouncil.org/license/1.0.0>.
+
+## 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/jackspeak/dist/cjs/index.js b/deps/npm/node_modules/jackspeak/dist/cjs/index.js
new file mode 100644
index 0000000000..f268e40e05
--- /dev/null
+++ b/deps/npm/node_modules/jackspeak/dist/cjs/index.js
@@ -0,0 +1,723 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.jack = exports.Jack = exports.isConfigOption = exports.isConfigType = void 0;
+const node_util_1 = require("node:util");
+const parse_args_js_1 = require("./parse-args.js");
+// it's a tiny API, just cast it inline, it's fine
+//@ts-ignore
+const cliui_1 = __importDefault(require("@isaacs/cliui"));
+const node_path_1 = require("node:path");
+const width = Math.min((process && process.stdout && process.stdout.columns) || 80, 80);
+// indentation spaces from heading level
+const indent = (n) => (n - 1) * 2;
+const toEnvKey = (pref, key) => {
+ return [pref, key.replace(/[^a-zA-Z0-9]+/g, ' ')]
+ .join(' ')
+ .trim()
+ .toUpperCase()
+ .replace(/ /g, '_');
+};
+const toEnvVal = (value, delim = '\n') => {
+ const str = typeof value === 'string'
+ ? value
+ : typeof value === 'boolean'
+ ? value
+ ? '1'
+ : '0'
+ : typeof value === 'number'
+ ? String(value)
+ : Array.isArray(value)
+ ? value
+ .map((v) => toEnvVal(v))
+ .join(delim)
+ : /* c8 ignore start */
+ undefined;
+ if (typeof str !== 'string') {
+ throw new Error(`could not serialize value to environment: ${JSON.stringify(value)}`);
+ }
+ /* c8 ignore stop */
+ return str;
+};
+const fromEnvVal = (env, type, multiple, delim = '\n') => (multiple
+ ? env.split(delim).map(v => fromEnvVal(v, type, false))
+ : type === 'string'
+ ? env
+ : type === 'boolean'
+ ? env === '1'
+ : +env.trim());
+const isConfigType = (t) => typeof t === 'string' &&
+ (t === 'string' || t === 'number' || t === 'boolean');
+exports.isConfigType = isConfigType;
+const undefOrType = (v, t) => v === undefined || typeof v === t;
+// print the value type, for error message reporting
+const valueType = (v) => typeof v === 'string'
+ ? 'string'
+ : typeof v === 'boolean'
+ ? 'boolean'
+ : typeof v === 'number'
+ ? 'number'
+ : Array.isArray(v)
+ ? joinTypes([...new Set(v.map(v => valueType(v)))]) + '[]'
+ : `${v.type}${v.multiple ? '[]' : ''}`;
+const joinTypes = (types) => types.length === 1 ? types[0] : `(${types.join('|')})`;
+const isValidValue = (v, type, multi) => {
+ if (multi) {
+ if (!Array.isArray(v))
+ return false;
+ return !v.some((v) => !isValidValue(v, type, false));
+ }
+ if (Array.isArray(v))
+ return false;
+ return typeof v === type;
+};
+const isConfigOption = (o, type, multi) => !!o &&
+ typeof o === 'object' &&
+ (0, exports.isConfigType)(o.type) &&
+ o.type === type &&
+ undefOrType(o.short, 'string') &&
+ undefOrType(o.description, 'string') &&
+ undefOrType(o.hint, 'string') &&
+ undefOrType(o.validate, 'function') &&
+ (o.default === undefined || isValidValue(o.default, type, multi)) &&
+ !!o.multiple === multi;
+exports.isConfigOption = isConfigOption;
+function num(o = {}) {
+ const { default: def, validate: val, ...rest } = o;
+ if (def !== undefined && !isValidValue(def, 'number', false)) {
+ throw new TypeError('invalid default value');
+ }
+ const validate = val
+ ? val
+ : undefined;
+ return {
+ ...rest,
+ default: def,
+ validate,
+ type: 'number',
+ multiple: false,
+ };
+}
+function numList(o = {}) {
+ const { default: def, validate: val, ...rest } = o;
+ if (def !== undefined && !isValidValue(def, 'number', true)) {
+ throw new TypeError('invalid default value');
+ }
+ const validate = val
+ ? val
+ : undefined;
+ return {
+ ...rest,
+ default: def,
+ validate,
+ type: 'number',
+ multiple: true,
+ };
+}
+function opt(o = {}) {
+ const { default: def, validate: val, ...rest } = o;
+ if (def !== undefined && !isValidValue(def, 'string', false)) {
+ throw new TypeError('invalid default value');
+ }
+ const validate = val
+ ? val
+ : undefined;
+ return {
+ ...rest,
+ default: def,
+ validate,
+ type: 'string',
+ multiple: false,
+ };
+}
+function optList(o = {}) {
+ const { default: def, validate: val, ...rest } = o;
+ if (def !== undefined && !isValidValue(def, 'string', true)) {
+ throw new TypeError('invalid default value');
+ }
+ const validate = val
+ ? val
+ : undefined;
+ return {
+ ...rest,
+ default: def,
+ validate,
+ type: 'string',
+ multiple: true,
+ };
+}
+function flag(o = {}) {
+ const { hint, default: def, validate: val, ...rest } = o;
+ if (def !== undefined && !isValidValue(def, 'boolean', false)) {
+ throw new TypeError('invalid default value');
+ }
+ const validate = val
+ ? val
+ : undefined;
+ if (hint !== undefined) {
+ throw new TypeError('cannot provide hint for flag');
+ }
+ return {
+ ...rest,
+ default: def,
+ validate,
+ type: 'boolean',
+ multiple: false,
+ };
+}
+function flagList(o = {}) {
+ const { hint, default: def, validate: val, ...rest } = o;
+ if (def !== undefined && !isValidValue(def, 'boolean', true)) {
+ throw new TypeError('invalid default value');
+ }
+ const validate = val
+ ? val
+ : undefined;
+ if (hint !== undefined) {
+ throw new TypeError('cannot provide hint for flag list');
+ }
+ return {
+ ...rest,
+ default: def,
+ validate,
+ type: 'boolean',
+ multiple: true,
+ };
+}
+const toParseArgsOptionsConfig = (options) => {
+ const c = {};
+ for (const longOption in options) {
+ const config = options[longOption];
+ if ((0, exports.isConfigOption)(config, 'number', true)) {
+ c[longOption] = {
+ type: 'string',
+ multiple: true,
+ default: config.default?.map(c => String(c)),
+ };
+ }
+ else if ((0, exports.isConfigOption)(config, 'number', false)) {
+ c[longOption] = {
+ type: 'string',
+ multiple: false,
+ default: config.default === undefined
+ ? undefined
+ : String(config.default),
+ };
+ }
+ else {
+ const conf = config;
+ c[longOption] = {
+ type: conf.type,
+ multiple: conf.multiple,
+ default: conf.default,
+ };
+ }
+ if (typeof config.short === 'string') {
+ c[longOption].short = config.short;
+ }
+ if (config.type === 'boolean' &&
+ !longOption.startsWith('no-') &&
+ !options[`no-${longOption}`]) {
+ c[`no-${longOption}`] = {
+ type: 'boolean',
+ multiple: config.multiple,
+ };
+ }
+ }
+ return c;
+};
+const isHeading = (r) => r.type === 'heading';
+const isDescription = (r) => r.type === 'description';
+/**
+ * Class returned by the {@link jack} function and all configuration
+ * definition methods. This is what gets chained together.
+ */
+class Jack {
+ #configSet;
+ #shorts;
+ #options;
+ #fields = [];
+ #env;
+ #envPrefix;
+ #allowPositionals;
+ #usage;
+ constructor(options = {}) {
+ this.#options = options;
+ this.#allowPositionals = options.allowPositionals !== false;
+ this.#env =
+ this.#options.env === undefined ? process.env : this.#options.env;
+ this.#envPrefix = options.envPrefix;
+ // We need to fib a little, because it's always the same object, but it
+ // starts out as having an empty config set. Then each method that adds
+ // fields returns `this as Jack<C & { ...newConfigs }>`
+ this.#configSet = Object.create(null);
+ this.#shorts = Object.create(null);
+ }
+ /**
+ * Set the default value (which will still be overridden by env or cli)
+ * as if from a parsed config file. The optional `source` param, if
+ * provided, will be included in error messages if a value is invalid or
+ * unknown.
+ */
+ setConfigValues(values, source = '') {
+ try {
+ this.validate(values);
+ }
+ catch (er) {
+ throw Object.assign(er, source ? { source } : {});
+ }
+ for (const [field, value] of Object.entries(values)) {
+ const my = this.#configSet[field];
+ my.default = value;
+ }
+ return this;
+ }
+ /**
+ * Parse a string of arguments, and return the resulting
+ * `{ values, positionals }` object.
+ *
+ * If an {@link JackOptions#envPrefix} is set, then it will read default
+ * values from the environment, and write the resulting values back
+ * to the environment as well.
+ *
+ * Environment values always take precedence over any other value, except
+ * an explicit CLI setting.
+ */
+ parse(args = process.argv) {
+ if (args === process.argv) {
+ args = args.slice(process._eval !== undefined ? 1 : 2);
+ }
+ if (this.#envPrefix) {
+ for (const [field, my] of Object.entries(this.#configSet)) {
+ const ek = toEnvKey(this.#envPrefix, field);
+ const env = this.#env[ek];
+ if (env !== undefined) {
+ my.default = fromEnvVal(env, my.type, !!my.multiple, my.delim);
+ }
+ }
+ }
+ const options = toParseArgsOptionsConfig(this.#configSet);
+ const result = (0, parse_args_js_1.parseArgs)({
+ args,
+ options,
+ // always strict, but using our own logic
+ strict: false,
+ allowPositionals: this.#allowPositionals,
+ tokens: true,
+ });
+ const p = {
+ values: {},
+ positionals: [],
+ };
+ for (const token of result.tokens) {
+ if (token.kind === 'positional') {
+ p.positionals.push(token.value);
+ if (this.#options.stopAtPositional) {
+ p.positionals.push(...args.slice(token.index + 1));
+ return p;
+ }
+ }
+ else if (token.kind === 'option') {
+ let value = undefined;
+ if (token.name.startsWith('no-')) {
+ const my = this.#configSet[token.name];
+ const pname = token.name.substring('no-'.length);
+ const pos = this.#configSet[pname];
+ if (pos &&
+ pos.type === 'boolean' &&
+ (!my ||
+ (my.type === 'boolean' && !!my.multiple === !!pos.multiple))) {
+ value = false;
+ token.name = pname;
+ }
+ }
+ const my = this.#configSet[token.name];
+ if (!my) {
+ throw new Error(`Unknown option '${token.rawName}'. ` +
+ `To specify a positional argument starting with a '-', ` +
+ `place it at the end of the command after '--', as in ` +
+ `'-- ${token.rawName}'`);
+ }
+ if (value === undefined) {
+ if (token.value === undefined) {
+ if (my.type !== 'boolean') {
+ throw new Error(`No value provided for ${token.rawName}, expected ${my.type}`);
+ }
+ value = true;
+ }
+ else {
+ if (my.type === 'boolean') {
+ throw new Error(`Flag ${token.rawName} does not take a value, received '${token.value}'`);
+ }
+ if (my.type === 'string') {
+ value = token.value;
+ }
+ else {
+ value = +token.value;
+ if (value !== value) {
+ throw new Error(`Invalid value '${token.value}' provided for ` +
+ `'${token.rawName}' option, expected number`);
+ }
+ }
+ }
+ }
+ if (my.multiple) {
+ const pv = p.values;
+ pv[token.name] = pv[token.name] ?? [];
+ pv[token.name].push(value);
+ }
+ else {
+ const pv = p.values;
+ pv[token.name] = value;
+ }
+ }
+ }
+ for (const [field, c] of Object.entries(this.#configSet)) {
+ if (c.default !== undefined && !(field in p.values)) {
+ //@ts-ignore
+ p.values[field] = c.default;
+ }
+ }
+ for (const [field, value] of Object.entries(p.values)) {
+ const valid = this.#configSet[field].validate;
+ if (valid && !valid(value)) {
+ throw new Error(`Invalid value provided for --${field}: ${JSON.stringify(value)}`);
+ }
+ }
+ this.#writeEnv(p);
+ return p;
+ }
+ /**
+ * Validate that any arbitrary object is a valid configuration `values`
+ * object. Useful when loading config files or other sources.
+ */
+ validate(o) {
+ if (!o || typeof o !== 'object') {
+ throw new Error('Invalid config: not an object');
+ }
+ for (const field in o) {
+ const config = this.#configSet[field];
+ if (!config) {
+ throw new Error(`Unknown config option: ${field}`);
+ }
+ if (!isValidValue(o[field], config.type, !!config.multiple)) {
+ throw Object.assign(new Error(`Invalid value ${valueType(o[field])} for ${field}, expected ${valueType(config)}`), {
+ field,
+ value: o[field],
+ });
+ }
+ if (config.validate && !config.validate(o[field])) {
+ throw new Error(`Invalid config value for ${field}: ${o[field]}`);
+ }
+ }
+ }
+ #writeEnv(p) {
+ if (!this.#env || !this.#envPrefix)
+ return;
+ for (const [field, value] of Object.entries(p.values)) {
+ const my = this.#configSet[field];
+ this.#env[toEnvKey(this.#envPrefix, field)] = toEnvVal(value, my.delim);
+ }
+ }
+ /**
+ * Add a heading to the usage output banner
+ */
+ heading(text, level) {
+ if (level === undefined) {
+ level = this.#fields.some(r => isHeading(r)) ? 2 : 1;
+ }
+ this.#fields.push({ type: 'heading', text, level });
+ return this;
+ }
+ /**
+ * Add a long-form description to the usage output at this position.
+ */
+ description(text, { pre } = {}) {
+ this.#fields.push({ type: 'description', text, pre });
+ return this;
+ }
+ /**
+ * Add one or more number fields.
+ */
+ num(fields) {
+ return this.#addFields(fields, num);
+ }
+ /**
+ * Add one or more multiple number fields.
+ */
+ numList(fields) {
+ return this.#addFields(fields, numList);
+ }
+ /**
+ * Add one or more string option fields.
+ */
+ opt(fields) {
+ return this.#addFields(fields, opt);
+ }
+ /**
+ * Add one or more multiple string option fields.
+ */
+ optList(fields) {
+ return this.#addFields(fields, optList);
+ }
+ /**
+ * Add one or more flag fields.
+ */
+ flag(fields) {
+ return this.#addFields(fields, flag);
+ }
+ /**
+ * Add one or more multiple flag fields.
+ */
+ flagList(fields) {
+ return this.#addFields(fields, flagList);
+ }
+ /**
+ * Generic field definition method. Similar to flag/flagList/number/etc,
+ * but you must specify the `type` (and optionally `multiple` and `delim`)
+ * fields on each one, or Jack won't know how to define them.
+ */
+ addFields(fields) {
+ const next = this;
+ for (const [name, field] of Object.entries(fields)) {
+ this.#validateName(name, field);
+ next.#fields.push({
+ type: 'config',
+ name,
+ value: field,
+ });
+ }
+ Object.assign(next.#configSet, fields);
+ return next;
+ }
+ #addFields(fields, fn) {
+ const next = this;
+ Object.assign(next.#configSet, Object.fromEntries(Object.entries(fields).map(([name, field]) => {
+ this.#validateName(name, field);
+ const option = fn(field);
+ next.#fields.push({
+ type: 'config',
+ name,
+ value: option,
+ });
+ return [name, option];
+ })));
+ return next;
+ }
+ #validateName(name, field) {
+ if (!/^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?$/.test(name)) {
+ throw new TypeError(`Invalid option name: ${name}, ` +
+ `must be '-' delimited ASCII alphanumeric`);
+ }
+ if (this.#configSet[name]) {
+ throw new TypeError(`Cannot redefine option ${field}`);
+ }
+ if (this.#shorts[name]) {
+ throw new TypeError(`Cannot redefine option ${name}, already ` +
+ `in use for ${this.#shorts[name]}`);
+ }
+ if (field.short) {
+ if (!/^[a-zA-Z0-9]$/.test(field.short)) {
+ throw new TypeError(`Invalid ${name} short option: ${field.short}, ` +
+ 'must be 1 ASCII alphanumeric character');
+ }
+ if (this.#shorts[field.short]) {
+ throw new TypeError(`Invalid ${name} short option: ${field.short}, ` +
+ `already in use for ${this.#shorts[field.short]}`);
+ }
+ this.#shorts[field.short] = name;
+ this.#shorts[name] = name;
+ }
+ }
+ /**
+ * Return the usage banner for the given configuration
+ */
+ usage() {
+ if (this.#usage)
+ return this.#usage;
+ let headingLevel = 1;
+ const ui = (0, cliui_1.default)({ width });
+ const first = this.#fields[0];
+ let start = first?.type === 'heading' ? 1 : 0;
+ if (first?.type === 'heading') {
+ ui.div({
+ padding: [0, 0, 0, 0],
+ text: normalize(first.text),
+ });
+ }
+ ui.div({ padding: [0, 0, 0, 0], text: 'Usage:' });
+ if (this.#options.usage) {
+ ui.div({
+ text: this.#options.usage,
+ padding: [0, 0, 0, 2],
+ });
+ }
+ else {
+ const cmd = (0, node_path_1.basename)(process.argv[1]);
+ const shortFlags = [];
+ const shorts = [];
+ const flags = [];
+ const opts = [];
+ for (const [field, config] of Object.entries(this.#configSet)) {
+ if (config.short) {
+ if (config.type === 'boolean')
+ shortFlags.push(config.short);
+ else
+ shorts.push([config.short, config.hint || field]);
+ }
+ else {
+ if (config.type === 'boolean')
+ flags.push(field);
+ else
+ opts.push([field, config.hint || field]);
+ }
+ }
+ const sf = shortFlags.length ? ' -' + shortFlags.join('') : '';
+ const so = shorts.map(([k, v]) => ` --${k}=<${v}>`).join('');
+ const lf = flags.map(k => ` --${k}`).join('');
+ const lo = opts.map(([k, v]) => ` --${k}=<${v}>`).join('');
+ const usage = `${cmd}${sf}${so}${lf}${lo}`.trim();
+ ui.div({
+ text: usage,
+ padding: [0, 0, 0, 2],
+ });
+ }
+ ui.div({ padding: [0, 0, 0, 0], text: '' });
+ const maybeDesc = this.#fields[start];
+ if (isDescription(maybeDesc)) {
+ const print = normalize(maybeDesc.text, maybeDesc.pre);
+ start++;
+ ui.div({ padding: [0, 0, 0, 0], text: print });
+ ui.div({ padding: [0, 0, 0, 0], text: '' });
+ }
+ // turn each config type into a row, and figure out the width of the
+ // left hand indentation for the option descriptions.
+ let maxMax = Math.max(12, Math.min(26, Math.floor(width / 3)));
+ let maxWidth = 8;
+ let prev = undefined;
+ const rows = [];
+ for (const field of this.#fields.slice(start)) {
+ if (field.type !== 'config') {
+ if (prev?.type === 'config')
+ prev.skipLine = true;
+ prev = undefined;
+ field.text = normalize(field.text, !!field.pre);
+ rows.push(field);
+ continue;
+ }
+ const { value } = field;
+ const desc = value.description || '';
+ const mult = value.multiple ? 'Can be set multiple times' : '';
+ const dmDelim = mult && (desc.includes('\n') ? '\n\n' : '\n');
+ const text = normalize(desc + dmDelim + mult);
+ const hint = value.hint ||
+ (value.type === 'number'
+ ? 'n'
+ : value.type === 'string'
+ ? field.name
+ : undefined);
+ const short = !value.short
+ ? ''
+ : value.type === 'boolean'
+ ? `-${value.short} `
+ : `-${value.short}<${hint}> `;
+ const left = value.type === 'boolean'
+ ? `${short}--${field.name}`
+ : `${short}--${field.name}=<${hint}>`;
+ const row = { text, left, type: 'config' };
+ if (text.length > width - maxMax) {
+ row.skipLine = true;
+ }
+ if (prev && left.length > maxMax)
+ prev.skipLine = true;
+ prev = row;
+ const len = left.length + 4;
+ if (len > maxWidth && len < maxMax) {
+ maxWidth = len;
+ }
+ rows.push(row);
+ }
+ // every heading/description after the first gets indented by 2
+ // extra spaces.
+ for (const row of rows) {
+ if (row.left) {
+ // If the row is too long, don't wrap it
+ // Bump the right-hand side down a line to make room
+ const configIndent = indent(Math.max(headingLevel, 2));
+ if (row.left.length > maxWidth - 2) {
+ ui.div({ text: row.left, padding: [0, 0, 0, configIndent] });
+ ui.div({ text: row.text, padding: [0, 0, 0, maxWidth] });
+ }
+ else {
+ ui.div({
+ text: row.left,
+ padding: [0, 1, 0, configIndent],
+ width: maxWidth,
+ }, { padding: [0, 0, 0, 0], text: row.text });
+ }
+ if (row.skipLine) {
+ ui.div({ padding: [0, 0, 0, 0], text: '' });
+ }
+ }
+ else {
+ if (isHeading(row)) {
+ const { level } = row;
+ headingLevel = level;
+ // only h1 and h2 have bottom padding
+ // h3-h6 do not
+ const b = level <= 2 ? 1 : 0;
+ ui.div({ ...row, padding: [0, 0, b, indent(level)] });
+ }
+ else {
+ ui.div({ ...row, padding: [0, 0, 1, indent(headingLevel + 1)] });
+ }
+ }
+ }
+ return (this.#usage = ui.toString());
+ }
+ /**
+ * Return the configuration options as a plain object
+ */
+ toJSON() {
+ return Object.fromEntries(Object.entries(this.#configSet).map(([field, def]) => [
+ field,
+ {
+ type: def.type,
+ ...(def.multiple ? { multiple: true } : {}),
+ ...(def.delim ? { delim: def.delim } : {}),
+ ...(def.short ? { short: def.short } : {}),
+ ...(def.description ? { description: def.description } : {}),
+ ...(def.validate ? { validate: def.validate } : {}),
+ ...(def.default !== undefined ? { default: def.default } : {}),
+ },
+ ]));
+ }
+ /**
+ * Custom printer for `util.inspect`
+ */
+ [node_util_1.inspect.custom](_, options) {
+ return `Jack ${(0, node_util_1.inspect)(this.toJSON(), options)}`;
+ }
+}
+exports.Jack = Jack;
+// Unwrap and un-indent, so we can wrap description
+// strings however makes them look nice in the code.
+const normalize = (s, pre = false) => pre
+ // prepend a ZWSP to each line so cliui doesn't strip it.
+ ? s.split('\n').map(l => `\u200b${l}`).join('\n')
+ : s
+ // remove single line breaks, except for lists
+ .replace(/([^\n])\n[ \t]*([^\n])/g, (_, $1, $2) => !/^[-*]/.test($2) ? `${$1} ${$2}` : `${$1}\n${$2}`)
+ // normalize mid-line whitespace
+ .replace(/([^\n])[ \t]+([^\n])/g, '$1 $2')
+ // two line breaks are enough
+ .replace(/\n{3,}/g, '\n\n')
+ .trim();
+/**
+ * Main entry point. Create and return a {@link Jack} object.
+ */
+const jack = (options = {}) => new Jack(options);
+exports.jack = jack;
+//# sourceMappingURL=index.js.map \ No newline at end of file
diff --git a/deps/npm/node_modules/jackspeak/dist/cjs/package.json b/deps/npm/node_modules/jackspeak/dist/cjs/package.json
new file mode 100644
index 0000000000..5bbefffbab
--- /dev/null
+++ b/deps/npm/node_modules/jackspeak/dist/cjs/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "commonjs"
+}
diff --git a/deps/npm/node_modules/jackspeak/dist/cjs/parse-args.js b/deps/npm/node_modules/jackspeak/dist/cjs/parse-args.js
new file mode 100644
index 0000000000..471b4d97dc
--- /dev/null
+++ b/deps/npm/node_modules/jackspeak/dist/cjs/parse-args.js
@@ -0,0 +1,42 @@
+"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;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.parseArgs = void 0;
+const util = __importStar(require("util"));
+const pv = typeof process === 'object' &&
+ !!process &&
+ typeof process.version === 'string'
+ ? process.version
+ : 'v0.0.0';
+const pvs = pv
+ .replace(/^v/, '')
+ .split('.')
+ .map(s => parseInt(s, 10));
+let { parseArgs: pa } = util;
+if (!pa || pvs[0] > 18 || pvs[1] < 11) {
+ pa = require('@pkgjs/parseargs').parseArgs;
+}
+exports.parseArgs = pa;
+//# sourceMappingURL=parse-args-cjs.js.map \ No newline at end of file
diff --git a/deps/npm/node_modules/jackspeak/dist/mjs/index.js b/deps/npm/node_modules/jackspeak/dist/mjs/index.js
new file mode 100644
index 0000000000..a3e2b6bab7
--- /dev/null
+++ b/deps/npm/node_modules/jackspeak/dist/mjs/index.js
@@ -0,0 +1,713 @@
+import { inspect } from 'node:util';
+import { parseArgs } from './parse-args.js';
+// it's a tiny API, just cast it inline, it's fine
+//@ts-ignore
+import cliui from '@isaacs/cliui';
+import { basename } from 'node:path';
+const width = Math.min((process && process.stdout && process.stdout.columns) || 80, 80);
+// indentation spaces from heading level
+const indent = (n) => (n - 1) * 2;
+const toEnvKey = (pref, key) => {
+ return [pref, key.replace(/[^a-zA-Z0-9]+/g, ' ')]
+ .join(' ')
+ .trim()
+ .toUpperCase()
+ .replace(/ /g, '_');
+};
+const toEnvVal = (value, delim = '\n') => {
+ const str = typeof value === 'string'
+ ? value
+ : typeof value === 'boolean'
+ ? value
+ ? '1'
+ : '0'
+ : typeof value === 'number'
+ ? String(value)
+ : Array.isArray(value)
+ ? value
+ .map((v) => toEnvVal(v))
+ .join(delim)
+ : /* c8 ignore start */
+ undefined;
+ if (typeof str !== 'string') {
+ throw new Error(`could not serialize value to environment: ${JSON.stringify(value)}`);
+ }
+ /* c8 ignore stop */
+ return str;
+};
+const fromEnvVal = (env, type, multiple, delim = '\n') => (multiple
+ ? env.split(delim).map(v => fromEnvVal(v, type, false))
+ : type === 'string'
+ ? env
+ : type === 'boolean'
+ ? env === '1'
+ : +env.trim());
+export const isConfigType = (t) => typeof t === 'string' &&
+ (t === 'string' || t === 'number' || t === 'boolean');
+const undefOrType = (v, t) => v === undefined || typeof v === t;
+// print the value type, for error message reporting
+const valueType = (v) => typeof v === 'string'
+ ? 'string'
+ : typeof v === 'boolean'
+ ? 'boolean'
+ : typeof v === 'number'
+ ? 'number'
+ : Array.isArray(v)
+ ? joinTypes([...new Set(v.map(v => valueType(v)))]) + '[]'
+ : `${v.type}${v.multiple ? '[]' : ''}`;
+const joinTypes = (types) => types.length === 1 ? types[0] : `(${types.join('|')})`;
+const isValidValue = (v, type, multi) => {
+ if (multi) {
+ if (!Array.isArray(v))
+ return false;
+ return !v.some((v) => !isValidValue(v, type, false));
+ }
+ if (Array.isArray(v))
+ return false;
+ return typeof v === type;
+};
+export const isConfigOption = (o, type, multi) => !!o &&
+ typeof o === 'object' &&
+ isConfigType(o.type) &&
+ o.type === type &&
+ undefOrType(o.short, 'string') &&
+ undefOrType(o.description, 'string') &&
+ undefOrType(o.hint, 'string') &&
+ undefOrType(o.validate, 'function') &&
+ (o.default === undefined || isValidValue(o.default, type, multi)) &&
+ !!o.multiple === multi;
+function num(o = {}) {
+ const { default: def, validate: val, ...rest } = o;
+ if (def !== undefined && !isValidValue(def, 'number', false)) {
+ throw new TypeError('invalid default value');
+ }
+ const validate = val
+ ? val
+ : undefined;
+ return {
+ ...rest,
+ default: def,
+ validate,
+ type: 'number',
+ multiple: false,
+ };
+}
+function numList(o = {}) {
+ const { default: def, validate: val, ...rest } = o;
+ if (def !== undefined && !isValidValue(def, 'number', true)) {
+ throw new TypeError('invalid default value');
+ }
+ const validate = val
+ ? val
+ : undefined;
+ return {
+ ...rest,
+ default: def,
+ validate,
+ type: 'number',
+ multiple: true,
+ };
+}
+function opt(o = {}) {
+ const { default: def, validate: val, ...rest } = o;
+ if (def !== undefined && !isValidValue(def, 'string', false)) {
+ throw new TypeError('invalid default value');
+ }
+ const validate = val
+ ? val
+ : undefined;
+ return {
+ ...rest,
+ default: def,
+ validate,
+ type: 'string',
+ multiple: false,
+ };
+}
+function optList(o = {}) {
+ const { default: def, validate: val, ...rest } = o;
+ if (def !== undefined && !isValidValue(def, 'string', true)) {
+ throw new TypeError('invalid default value');
+ }
+ const validate = val
+ ? val
+ : undefined;
+ return {
+ ...rest,
+ default: def,
+ validate,
+ type: 'string',
+ multiple: true,
+ };
+}
+function flag(o = {}) {
+ const { hint, default: def, validate: val, ...rest } = o;
+ if (def !== undefined && !isValidValue(def, 'boolean', false)) {
+ throw new TypeError('invalid default value');
+ }
+ const validate = val
+ ? val
+ : undefined;
+ if (hint !== undefined) {
+ throw new TypeError('cannot provide hint for flag');
+ }
+ return {
+ ...rest,
+ default: def,
+ validate,
+ type: 'boolean',
+ multiple: false,
+ };
+}
+function flagList(o = {}) {
+ const { hint, default: def, validate: val, ...rest } = o;
+ if (def !== undefined && !isValidValue(def, 'boolean', true)) {
+ throw new TypeError('invalid default value');
+ }
+ const validate = val
+ ? val
+ : undefined;
+ if (hint !== undefined) {
+ throw new TypeError('cannot provide hint for flag list');
+ }
+ return {
+ ...rest,
+ default: def,
+ validate,
+ type: 'boolean',
+ multiple: true,
+ };
+}
+const toParseArgsOptionsConfig = (options) => {
+ const c = {};
+ for (const longOption in options) {
+ const config = options[longOption];
+ if (isConfigOption(config, 'number', true)) {
+ c[longOption] = {
+ type: 'string',
+ multiple: true,
+ default: config.default?.map(c => String(c)),
+ };
+ }
+ else if (isConfigOption(config, 'number', false)) {
+ c[longOption] = {
+ type: 'string',
+ multiple: false,
+ default: config.default === undefined
+ ? undefined
+ : String(config.default),
+ };
+ }
+ else {
+ const conf = config;
+ c[longOption] = {
+ type: conf.type,
+ multiple: conf.multiple,
+ default: conf.default,
+ };
+ }
+ if (typeof config.short === 'string') {
+ c[longOption].short = config.short;
+ }
+ if (config.type === 'boolean' &&
+ !longOption.startsWith('no-') &&
+ !options[`no-${longOption}`]) {
+ c[`no-${longOption}`] = {
+ type: 'boolean',
+ multiple: config.multiple,
+ };
+ }
+ }
+ return c;
+};
+const isHeading = (r) => r.type === 'heading';
+const isDescription = (r) => r.type === 'description';
+/**
+ * Class returned by the {@link jack} function and all configuration
+ * definition methods. This is what gets chained together.
+ */
+export class Jack {
+ #configSet;
+ #shorts;
+ #options;
+ #fields = [];
+ #env;
+ #envPrefix;
+ #allowPositionals;
+ #usage;
+ constructor(options = {}) {
+ this.#options = options;
+ this.#allowPositionals = options.allowPositionals !== false;
+ this.#env =
+ this.#options.env === undefined ? process.env : this.#options.env;
+ this.#envPrefix = options.envPrefix;
+ // We need to fib a little, because it's always the same object, but it
+ // starts out as having an empty config set. Then each method that adds
+ // fields returns `this as Jack<C & { ...newConfigs }>`
+ this.#configSet = Object.create(null);
+ this.#shorts = Object.create(null);
+ }
+ /**
+ * Set the default value (which will still be overridden by env or cli)
+ * as if from a parsed config file. The optional `source` param, if
+ * provided, will be included in error messages if a value is invalid or
+ * unknown.
+ */
+ setConfigValues(values, source = '') {
+ try {
+ this.validate(values);
+ }
+ catch (er) {
+ throw Object.assign(er, source ? { source } : {});
+ }
+ for (const [field, value] of Object.entries(values)) {
+ const my = this.#configSet[field];
+ my.default = value;
+ }
+ return this;
+ }
+ /**
+ * Parse a string of arguments, and return the resulting
+ * `{ values, positionals }` object.
+ *
+ * If an {@link JackOptions#envPrefix} is set, then it will read default
+ * values from the environment, and write the resulting values back
+ * to the environment as well.
+ *
+ * Environment values always take precedence over any other value, except
+ * an explicit CLI setting.
+ */
+ parse(args = process.argv) {
+ if (args === process.argv) {
+ args = args.slice(process._eval !== undefined ? 1 : 2);
+ }
+ if (this.#envPrefix) {
+ for (const [field, my] of Object.entries(this.#configSet)) {
+ const ek = toEnvKey(this.#envPrefix, field);
+ const env = this.#env[ek];
+ if (env !== undefined) {
+ my.default = fromEnvVal(env, my.type, !!my.multiple, my.delim);
+ }
+ }
+ }
+ const options = toParseArgsOptionsConfig(this.#configSet);
+ const result = parseArgs({
+ args,
+ options,
+ // always strict, but using our own logic
+ strict: false,
+ allowPositionals: this.#allowPositionals,
+ tokens: true,
+ });
+ const p = {
+ values: {},
+ positionals: [],
+ };
+ for (const token of result.tokens) {
+ if (token.kind === 'positional') {
+ p.positionals.push(token.value);
+ if (this.#options.stopAtPositional) {
+ p.positionals.push(...args.slice(token.index + 1));
+ return p;
+ }
+ }
+ else if (token.kind === 'option') {
+ let value = undefined;
+ if (token.name.startsWith('no-')) {
+ const my = this.#configSet[token.name];
+ const pname = token.name.substring('no-'.length);
+ const pos = this.#configSet[pname];
+ if (pos &&
+ pos.type === 'boolean' &&
+ (!my ||
+ (my.type === 'boolean' && !!my.multiple === !!pos.multiple))) {
+ value = false;
+ token.name = pname;
+ }
+ }
+ const my = this.#configSet[token.name];
+ if (!my) {
+ throw new Error(`Unknown option '${token.rawName}'. ` +
+ `To specify a positional argument starting with a '-', ` +
+ `place it at the end of the command after '--', as in ` +
+ `'-- ${token.rawName}'`);
+ }
+ if (value === undefined) {
+ if (token.value === undefined) {
+ if (my.type !== 'boolean') {
+ throw new Error(`No value provided for ${token.rawName}, expected ${my.type}`);
+ }
+ value = true;
+ }
+ else {
+ if (my.type === 'boolean') {
+ throw new Error(`Flag ${token.rawName} does not take a value, received '${token.value}'`);
+ }
+ if (my.type === 'string') {
+ value = token.value;
+ }
+ else {
+ value = +token.value;
+ if (value !== value) {
+ throw new Error(`Invalid value '${token.value}' provided for ` +
+ `'${token.rawName}' option, expected number`);
+ }
+ }
+ }
+ }
+ if (my.multiple) {
+ const pv = p.values;
+ pv[token.name] = pv[token.name] ?? [];
+ pv[token.name].push(value);
+ }
+ else {
+ const pv = p.values;
+ pv[token.name] = value;
+ }
+ }
+ }
+ for (const [field, c] of Object.entries(this.#configSet)) {
+ if (c.default !== undefined && !(field in p.values)) {
+ //@ts-ignore
+ p.values[field] = c.default;
+ }
+ }
+ for (const [field, value] of Object.entries(p.values)) {
+ const valid = this.#configSet[field].validate;
+ if (valid && !valid(value)) {
+ throw new Error(`Invalid value provided for --${field}: ${JSON.stringify(value)}`);
+ }
+ }
+ this.#writeEnv(p);
+ return p;
+ }
+ /**
+ * Validate that any arbitrary object is a valid configuration `values`
+ * object. Useful when loading config files or other sources.
+ */
+ validate(o) {
+ if (!o || typeof o !== 'object') {
+ throw new Error('Invalid config: not an object');
+ }
+ for (const field in o) {
+ const config = this.#configSet[field];
+ if (!config) {
+ throw new Error(`Unknown config option: ${field}`);
+ }
+ if (!isValidValue(o[field], config.type, !!config.multiple)) {
+ throw Object.assign(new Error(`Invalid value ${valueType(o[field])} for ${field}, expected ${valueType(config)}`), {
+ field,
+ value: o[field],
+ });
+ }
+ if (config.validate && !config.validate(o[field])) {
+ throw new Error(`Invalid config value for ${field}: ${o[field]}`);
+ }
+ }
+ }
+ #writeEnv(p) {
+ if (!this.#env || !this.#envPrefix)
+ return;
+ for (const [field, value] of Object.entries(p.values)) {
+ const my = this.#configSet[field];
+ this.#env[toEnvKey(this.#envPrefix, field)] = toEnvVal(value, my.delim);
+ }
+ }
+ /**
+ * Add a heading to the usage output banner
+ */
+ heading(text, level) {
+ if (level === undefined) {
+ level = this.#fields.some(r => isHeading(r)) ? 2 : 1;
+ }
+ this.#fields.push({ type: 'heading', text, level });
+ return this;
+ }
+ /**
+ * Add a long-form description to the usage output at this position.
+ */
+ description(text, { pre } = {}) {
+ this.#fields.push({ type: 'description', text, pre });
+ return this;
+ }
+ /**
+ * Add one or more number fields.
+ */
+ num(fields) {
+ return this.#addFields(fields, num);
+ }
+ /**
+ * Add one or more multiple number fields.
+ */
+ numList(fields) {
+ return this.#addFields(fields, numList);
+ }
+ /**
+ * Add one or more string option fields.
+ */
+ opt(fields) {
+ return this.#addFields(fields, opt);
+ }
+ /**
+ * Add one or more multiple string option fields.
+ */
+ optList(fields) {
+ return this.#addFields(fields, optList);
+ }
+ /**
+ * Add one or more flag fields.
+ */
+ flag(fields) {
+ return this.#addFields(fields, flag);
+ }
+ /**
+ * Add one or more multiple flag fields.
+ */
+ flagList(fields) {
+ return this.#addFields(fields, flagList);
+ }
+ /**
+ * Generic field definition method. Similar to flag/flagList/number/etc,
+ * but you must specify the `type` (and optionally `multiple` and `delim`)
+ * fields on each one, or Jack won't know how to define them.
+ */
+ addFields(fields) {
+ const next = this;
+ for (const [name, field] of Object.entries(fields)) {
+ this.#validateName(name, field);
+ next.#fields.push({
+ type: 'config',
+ name,
+ value: field,
+ });
+ }
+ Object.assign(next.#configSet, fields);
+ return next;
+ }
+ #addFields(fields, fn) {
+ const next = this;
+ Object.assign(next.#configSet, Object.fromEntries(Object.entries(fields).map(([name, field]) => {
+ this.#validateName(name, field);
+ const option = fn(field);
+ next.#fields.push({
+ type: 'config',
+ name,
+ value: option,
+ });
+ return [name, option];
+ })));
+ return next;
+ }
+ #validateName(name, field) {
+ if (!/^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?$/.test(name)) {
+ throw new TypeError(`Invalid option name: ${name}, ` +
+ `must be '-' delimited ASCII alphanumeric`);
+ }
+ if (this.#configSet[name]) {
+ throw new TypeError(`Cannot redefine option ${field}`);
+ }
+ if (this.#shorts[name]) {
+ throw new TypeError(`Cannot redefine option ${name}, already ` +
+ `in use for ${this.#shorts[name]}`);
+ }
+ if (field.short) {
+ if (!/^[a-zA-Z0-9]$/.test(field.short)) {
+ throw new TypeError(`Invalid ${name} short option: ${field.short}, ` +
+ 'must be 1 ASCII alphanumeric character');
+ }
+ if (this.#shorts[field.short]) {
+ throw new TypeError(`Invalid ${name} short option: ${field.short}, ` +
+ `already in use for ${this.#shorts[field.short]}`);
+ }
+ this.#shorts[field.short] = name;
+ this.#shorts[name] = name;
+ }
+ }
+ /**
+ * Return the usage banner for the given configuration
+ */
+ usage() {
+ if (this.#usage)
+ return this.#usage;
+ let headingLevel = 1;
+ const ui = cliui({ width });
+ const first = this.#fields[0];
+ let start = first?.type === 'heading' ? 1 : 0;
+ if (first?.type === 'heading') {
+ ui.div({
+ padding: [0, 0, 0, 0],
+ text: normalize(first.text),
+ });
+ }
+ ui.div({ padding: [0, 0, 0, 0], text: 'Usage:' });
+ if (this.#options.usage) {
+ ui.div({
+ text: this.#options.usage,
+ padding: [0, 0, 0, 2],
+ });
+ }
+ else {
+ const cmd = basename(process.argv[1]);
+ const shortFlags = [];
+ const shorts = [];
+ const flags = [];
+ const opts = [];
+ for (const [field, config] of Object.entries(this.#configSet)) {
+ if (config.short) {
+ if (config.type === 'boolean')
+ shortFlags.push(config.short);
+ else
+ shorts.push([config.short, config.hint || field]);
+ }
+ else {
+ if (config.type === 'boolean')
+ flags.push(field);
+ else
+ opts.push([field, config.hint || field]);
+ }
+ }
+ const sf = shortFlags.length ? ' -' + shortFlags.join('') : '';
+ const so = shorts.map(([k, v]) => ` --${k}=<${v}>`).join('');
+ const lf = flags.map(k => ` --${k}`).join('');
+ const lo = opts.map(([k, v]) => ` --${k}=<${v}>`).join('');
+ const usage = `${cmd}${sf}${so}${lf}${lo}`.trim();
+ ui.div({
+ text: usage,
+ padding: [0, 0, 0, 2],
+ });
+ }
+ ui.div({ padding: [0, 0, 0, 0], text: '' });
+ const maybeDesc = this.#fields[start];
+ if (isDescription(maybeDesc)) {
+ const print = normalize(maybeDesc.text, maybeDesc.pre);
+ start++;
+ ui.div({ padding: [0, 0, 0, 0], text: print });
+ ui.div({ padding: [0, 0, 0, 0], text: '' });
+ }
+ // turn each config type into a row, and figure out the width of the
+ // left hand indentation for the option descriptions.
+ let maxMax = Math.max(12, Math.min(26, Math.floor(width / 3)));
+ let maxWidth = 8;
+ let prev = undefined;
+ const rows = [];
+ for (const field of this.#fields.slice(start)) {
+ if (field.type !== 'config') {
+ if (prev?.type === 'config')
+ prev.skipLine = true;
+ prev = undefined;
+ field.text = normalize(field.text, !!field.pre);
+ rows.push(field);
+ continue;
+ }
+ const { value } = field;
+ const desc = value.description || '';
+ const mult = value.multiple ? 'Can be set multiple times' : '';
+ const dmDelim = mult && (desc.includes('\n') ? '\n\n' : '\n');
+ const text = normalize(desc + dmDelim + mult);
+ const hint = value.hint ||
+ (value.type === 'number'
+ ? 'n'
+ : value.type === 'string'
+ ? field.name
+ : undefined);
+ const short = !value.short
+ ? ''
+ : value.type === 'boolean'
+ ? `-${value.short} `
+ : `-${value.short}<${hint}> `;
+ const left = value.type === 'boolean'
+ ? `${short}--${field.name}`
+ : `${short}--${field.name}=<${hint}>`;
+ const row = { text, left, type: 'config' };
+ if (text.length > width - maxMax) {
+ row.skipLine = true;
+ }
+ if (prev && left.length > maxMax)
+ prev.skipLine = true;
+ prev = row;
+ const len = left.length + 4;
+ if (len > maxWidth && len < maxMax) {
+ maxWidth = len;
+ }
+ rows.push(row);
+ }
+ // every heading/description after the first gets indented by 2
+ // extra spaces.
+ for (const row of rows) {
+ if (row.left) {
+ // If the row is too long, don't wrap it
+ // Bump the right-hand side down a line to make room
+ const configIndent = indent(Math.max(headingLevel, 2));
+ if (row.left.length > maxWidth - 2) {
+ ui.div({ text: row.left, padding: [0, 0, 0, configIndent] });
+ ui.div({ text: row.text, padding: [0, 0, 0, maxWidth] });
+ }
+ else {
+ ui.div({
+ text: row.left,
+ padding: [0, 1, 0, configIndent],
+ width: maxWidth,
+ }, { padding: [0, 0, 0, 0], text: row.text });
+ }
+ if (row.skipLine) {
+ ui.div({ padding: [0, 0, 0, 0], text: '' });
+ }
+ }
+ else {
+ if (isHeading(row)) {
+ const { level } = row;
+ headingLevel = level;
+ // only h1 and h2 have bottom padding
+ // h3-h6 do not
+ const b = level <= 2 ? 1 : 0;
+ ui.div({ ...row, padding: [0, 0, b, indent(level)] });
+ }
+ else {
+ ui.div({ ...row, padding: [0, 0, 1, indent(headingLevel + 1)] });
+ }
+ }
+ }
+ return (this.#usage = ui.toString());
+ }
+ /**
+ * Return the configuration options as a plain object
+ */
+ toJSON() {
+ return Object.fromEntries(Object.entries(this.#configSet).map(([field, def]) => [
+ field,
+ {
+ type: def.type,
+ ...(def.multiple ? { multiple: true } : {}),
+ ...(def.delim ? { delim: def.delim } : {}),
+ ...(def.short ? { short: def.short } : {}),
+ ...(def.description ? { description: def.description } : {}),
+ ...(def.validate ? { validate: def.validate } : {}),
+ ...(def.default !== undefined ? { default: def.default } : {}),
+ },
+ ]));
+ }
+ /**
+ * Custom printer for `util.inspect`
+ */
+ [inspect.custom](_, options) {
+ return `Jack ${inspect(this.toJSON(), options)}`;
+ }
+}
+// Unwrap and un-indent, so we can wrap description
+// strings however makes them look nice in the code.
+const normalize = (s, pre = false) => pre
+ // prepend a ZWSP to each line so cliui doesn't strip it.
+ ? s.split('\n').map(l => `\u200b${l}`).join('\n')
+ : s
+ // remove single line breaks, except for lists
+ .replace(/([^\n])\n[ \t]*([^\n])/g, (_, $1, $2) => !/^[-*]/.test($2) ? `${$1} ${$2}` : `${$1}\n${$2}`)
+ // normalize mid-line whitespace
+ .replace(/([^\n])[ \t]+([^\n])/g, '$1 $2')
+ // two line breaks are enough
+ .replace(/\n{3,}/g, '\n\n')
+ .trim();
+/**
+ * Main entry point. Create and return a {@link Jack} object.
+ */
+export const jack = (options = {}) => new Jack(options);
+//# sourceMappingURL=index.js.map \ No newline at end of file
diff --git a/deps/npm/node_modules/jackspeak/dist/mjs/package.json b/deps/npm/node_modules/jackspeak/dist/mjs/package.json
new file mode 100644
index 0000000000..3dbc1ca591
--- /dev/null
+++ b/deps/npm/node_modules/jackspeak/dist/mjs/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "module"
+}
diff --git a/deps/npm/node_modules/jackspeak/dist/mjs/parse-args.js b/deps/npm/node_modules/jackspeak/dist/mjs/parse-args.js
new file mode 100644
index 0000000000..24ec319d38
--- /dev/null
+++ b/deps/npm/node_modules/jackspeak/dist/mjs/parse-args.js
@@ -0,0 +1,19 @@
+// polyfill that overwrites parse-args.ts in the mjs build
+import { createRequire } from 'module';
+import * as util from 'util';
+const pv = typeof process === 'object' &&
+ !!process &&
+ typeof process.version === 'string'
+ ? process.version
+ : 'v0.0.0';
+const pvs = pv
+ .replace(/^v/, '')
+ .split('.')
+ .map(s => parseInt(s, 10));
+let { parseArgs: pa } = util;
+if (!pa || pvs[0] > 18 || pvs[1] < 11) {
+ const require = createRequire(import.meta.url);
+ pa = require('@pkgjs/parseargs').parseArgs;
+}
+export const parseArgs = pa;
+//# sourceMappingURL=parse-args-esm.js.map \ No newline at end of file
diff --git a/deps/npm/node_modules/jackspeak/package.json b/deps/npm/node_modules/jackspeak/package.json
new file mode 100644
index 0000000000..8d85e7f09e
--- /dev/null
+++ b/deps/npm/node_modules/jackspeak/package.json
@@ -0,0 +1,98 @@
+{
+ "name": "jackspeak",
+ "version": "2.2.0",
+ "description": "A very strict and proper argument parser.",
+ "main": "./dist/cjs/index.js",
+ "module": "./dist/mjs/index.js",
+ "types": "./dist/mjs/index.js",
+ "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"
+ }
+ }
+ },
+ "files": [
+ "dist"
+ ],
+ "scripts": {
+ "build-examples": "for i in examples/*.js ; do node $i -h > ${i/.js/.txt}; done",
+ "preversion": "npm test",
+ "postversion": "npm publish",
+ "prepublishOnly": "git push origin --follow-tags",
+ "prepare": "tsc -p tsconfig.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",
+ "typedoc": "typedoc --tsconfig tsconfig-esm.json ./src/*.ts"
+ },
+ "license": "BlueOak-1.0.0",
+ "prettier": {
+ "semi": false,
+ "printWidth": 75,
+ "tabWidth": 2,
+ "useTabs": false,
+ "singleQuote": true,
+ "jsxSingleQuote": false,
+ "bracketSameLine": true,
+ "arrowParens": "avoid",
+ "endOfLine": "lf"
+ },
+ "tap": {
+ "coverage": false,
+ "node-arg": [
+ "--no-warnings",
+ "--loader",
+ "ts-node/esm"
+ ],
+ "ts": false
+ },
+ "devDependencies": {
+ "@types/node": "^18.15.11",
+ "@types/pkgjs__parseargs": "^0.10.0",
+ "@types/tap": "^15.0.8",
+ "c8": "^7.13.0",
+ "eslint-config-prettier": "^8.8.0",
+ "prettier": "^2.8.6",
+ "tap": "^16.3.4",
+ "ts-node": "^10.9.1",
+ "typedoc": "^0.23.28",
+ "typescript": "^5.0.2"
+ },
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/isaacs/jackspeak.git"
+ },
+ "keywords": [
+ "argument",
+ "parser",
+ "args",
+ "option",
+ "flag",
+ "cli",
+ "command",
+ "line",
+ "parse",
+ "parsing"
+ ],
+ "author": "Isaac Z. Schlueter <i@izs.me>",
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+}
diff --git a/deps/npm/node_modules/libnpmaccess/package.json b/deps/npm/node_modules/libnpmaccess/package.json
index 15581fe03a..42ea3c661c 100644
--- a/deps/npm/node_modules/libnpmaccess/package.json
+++ b/deps/npm/node_modules/libnpmaccess/package.json
@@ -17,7 +17,7 @@
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
"@npmcli/mock-registry": "^1.0.0",
- "@npmcli/template-oss": "4.12.1",
+ "@npmcli/template-oss": "4.14.1",
"nock": "^13.3.0",
"tap": "^16.3.4"
},
@@ -41,7 +41,7 @@
],
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.12.1",
+ "version": "4.14.1",
"content": "../../scripts/template-oss/index.js"
},
"tap": {
diff --git a/deps/npm/node_modules/libnpmdiff/lib/untar.js b/deps/npm/node_modules/libnpmdiff/lib/untar.js
index 16b69ab8fd..341ae27d1e 100644
--- a/deps/npm/node_modules/libnpmdiff/lib/untar.js
+++ b/deps/npm/node_modules/libnpmdiff/lib/untar.js
@@ -1,5 +1,5 @@
const tar = require('tar')
-const minimatch = require('minimatch')
+const { minimatch } = require('minimatch')
const normalizeMatch = str => str
.replace(/\\+/g, '/')
diff --git a/deps/npm/node_modules/libnpmdiff/package.json b/deps/npm/node_modules/libnpmdiff/package.json
index 8fc6d7a0b5..9e2e96bae6 100644
--- a/deps/npm/node_modules/libnpmdiff/package.json
+++ b/deps/npm/node_modules/libnpmdiff/package.json
@@ -1,6 +1,6 @@
{
"name": "libnpmdiff",
- "version": "5.0.15",
+ "version": "5.0.17",
"description": "The registry diff",
"repository": {
"type": "git",
@@ -42,23 +42,23 @@
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.12.1",
+ "@npmcli/template-oss": "4.14.1",
"tap": "^16.3.4"
},
"dependencies": {
- "@npmcli/arborist": "^6.2.7",
+ "@npmcli/arborist": "^6.2.9",
"@npmcli/disparity-colors": "^3.0.0",
"@npmcli/installed-package-contents": "^2.0.2",
"binary-extensions": "^2.2.0",
"diff": "^5.1.0",
- "minimatch": "^7.4.2",
+ "minimatch": "^9.0.0",
"npm-package-arg": "^10.1.0",
"pacote": "^15.0.8",
"tar": "^6.1.13"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.12.1",
+ "version": "4.14.1",
"content": "../../scripts/template-oss/index.js"
},
"tap": {
diff --git a/deps/npm/node_modules/libnpmexec/lib/file-exists.js b/deps/npm/node_modules/libnpmexec/lib/file-exists.js
index 0a8d79e83b..55c04bd4dc 100644
--- a/deps/npm/node_modules/libnpmexec/lib/file-exists.js
+++ b/deps/npm/node_modules/libnpmexec/lib/file-exists.js
@@ -1,6 +1,6 @@
const { resolve } = require('path')
const { stat } = require('fs/promises')
-const walkUp = require('walk-up-path')
+const { walkUp } = require('walk-up-path')
const fileExists = async (file) => {
try {
diff --git a/deps/npm/node_modules/libnpmexec/lib/index.js b/deps/npm/node_modules/libnpmexec/lib/index.js
index 719f81ec11..b7aa43588c 100644
--- a/deps/npm/node_modules/libnpmexec/lib/index.js
+++ b/deps/npm/node_modules/libnpmexec/lib/index.js
@@ -35,12 +35,15 @@ const getManifest = async (spec, flatOptions) => {
// Returns the required manifest if the spec is missing from the tree
// Returns the found node if it is in the tree
-const missingFromTree = async ({ spec, tree, flatOptions }) => {
- if (spec.registry && spec.type !== 'tag') {
+const missingFromTree = async ({ spec, tree, flatOptions, isNpxTree }) => {
+ // If asking for a spec by name only (spec.raw === spec.name):
+ // - In local or global mode go with anything in the tree that matches
+ // - If looking in the npx cache check if a newer version is available
+ const npxByNameOnly = isNpxTree && spec.name === spec.raw
+ if (spec.registry && spec.type !== 'tag' && !npxByNameOnly) {
// registry spec that is not a specific tag.
const nodesBySpec = tree.inventory.query('packageName', spec.name)
for (const node of nodesBySpec) {
- // package requested by name only (or name@*)
if (spec.rawSpec === '*') {
return { node }
}
@@ -56,8 +59,8 @@ const missingFromTree = async ({ spec, tree, flatOptions }) => {
const manifest = await getManifest(spec, flatOptions)
return { manifest }
} else {
- // non-registry spec, or a specific tag. Look up manifest and check
- // resolved to see if it's in the tree.
+ // non-registry spec, or a specific tag, or name only in npx tree. Look up
+ // manifest and check resolved to see if it's in the tree.
const manifest = await getManifest(spec, flatOptions)
if (spec.type === 'directory') {
return { manifest }
@@ -224,7 +227,12 @@ const exec = async (opts) => {
})
const npxTree = await npxArb.loadActual()
await Promise.all(needInstall.map(async ({ spec }) => {
- const { manifest } = await missingFromTree({ spec, tree: npxTree, flatOptions })
+ const { manifest } = await missingFromTree({
+ spec,
+ tree: npxTree,
+ flatOptions,
+ isNpxTree: true,
+ })
if (manifest) {
// Manifest is not in npxCache, we need to install it there
if (!spec.registry) {
diff --git a/deps/npm/node_modules/libnpmexec/package.json b/deps/npm/node_modules/libnpmexec/package.json
index 2582a253f9..e47e301ab7 100644
--- a/deps/npm/node_modules/libnpmexec/package.json
+++ b/deps/npm/node_modules/libnpmexec/package.json
@@ -1,6 +1,6 @@
{
"name": "libnpmexec",
- "version": "5.0.15",
+ "version": "5.0.17",
"files": [
"bin/",
"lib/"
@@ -52,7 +52,7 @@
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
"@npmcli/mock-registry": "^1.0.0",
- "@npmcli/template-oss": "4.12.1",
+ "@npmcli/template-oss": "4.14.1",
"bin-links": "^4.0.1",
"just-extend": "^6.2.0",
"just-safe-set": "^4.2.1",
@@ -60,7 +60,7 @@
"tap": "^16.3.4"
},
"dependencies": {
- "@npmcli/arborist": "^6.2.7",
+ "@npmcli/arborist": "^6.2.9",
"@npmcli/run-script": "^6.0.0",
"chalk": "^4.1.0",
"ci-info": "^3.7.1",
@@ -71,11 +71,11 @@
"read": "^2.0.0",
"read-package-json-fast": "^3.0.2",
"semver": "^7.3.7",
- "walk-up-path": "^1.0.0"
+ "walk-up-path": "^3.0.1"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.12.1",
+ "version": "4.14.1",
"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 60fc641d27..88cff7aa6b 100644
--- a/deps/npm/node_modules/libnpmfund/package.json
+++ b/deps/npm/node_modules/libnpmfund/package.json
@@ -1,6 +1,6 @@
{
"name": "libnpmfund",
- "version": "4.0.15",
+ "version": "4.0.17",
"main": "lib/index.js",
"files": [
"bin/",
@@ -41,18 +41,18 @@
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.12.1",
+ "@npmcli/template-oss": "4.14.1",
"tap": "^16.3.4"
},
"dependencies": {
- "@npmcli/arborist": "^6.2.7"
+ "@npmcli/arborist": "^6.2.9"
},
"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.12.1",
+ "version": "4.14.1",
"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 24f2d309ff..bc439929e7 100644
--- a/deps/npm/node_modules/libnpmhook/package.json
+++ b/deps/npm/node_modules/libnpmhook/package.json
@@ -35,7 +35,7 @@
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.12.1",
+ "@npmcli/template-oss": "4.14.1",
"nock": "^13.3.0",
"tap": "^16.3.4"
},
@@ -44,7 +44,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.12.1",
+ "version": "4.14.1",
"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 00d3f9f72e..0ee6abd745 100644
--- a/deps/npm/node_modules/libnpmorg/package.json
+++ b/deps/npm/node_modules/libnpmorg/package.json
@@ -1,6 +1,6 @@
{
"name": "libnpmorg",
- "version": "5.0.3",
+ "version": "5.0.4",
"description": "Programmatic api for `npm org` commands",
"author": "GitHub Inc.",
"main": "lib/index.js",
@@ -28,8 +28,8 @@
],
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.12.1",
- "minipass": "^4.0.2",
+ "@npmcli/template-oss": "4.14.1",
+ "minipass": "^5.0.0",
"nock": "^13.3.0",
"tap": "^16.3.4"
},
@@ -49,7 +49,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.12.1",
+ "version": "4.14.1",
"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 9c2e909aac..8589f5ddea 100644
--- a/deps/npm/node_modules/libnpmpack/package.json
+++ b/deps/npm/node_modules/libnpmpack/package.json
@@ -1,6 +1,6 @@
{
"name": "libnpmpack",
- "version": "5.0.15",
+ "version": "5.0.17",
"description": "Programmatic API for the bits behind npm pack",
"author": "GitHub Inc.",
"main": "lib/index.js",
@@ -23,7 +23,7 @@
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.12.1",
+ "@npmcli/template-oss": "4.14.1",
"nock": "^13.3.0",
"spawk": "^1.7.1",
"tap": "^16.3.4"
@@ -36,7 +36,7 @@
"bugs": "https://github.com/npm/libnpmpack/issues",
"homepage": "https://npmjs.com/package/libnpmpack",
"dependencies": {
- "@npmcli/arborist": "^6.2.7",
+ "@npmcli/arborist": "^6.2.9",
"@npmcli/run-script": "^6.0.0",
"npm-package-arg": "^10.1.0",
"pacote": "^15.0.8"
@@ -46,7 +46,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.12.1",
+ "version": "4.14.1",
"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 1557b8403d..2034ef85e4 100644
--- a/deps/npm/node_modules/libnpmpublish/package.json
+++ b/deps/npm/node_modules/libnpmpublish/package.json
@@ -1,6 +1,6 @@
{
"name": "libnpmpublish",
- "version": "7.1.3",
+ "version": "7.1.4",
"description": "Programmatic API for the bits behind npm publish and unpublish",
"author": "GitHub Inc.",
"main": "lib/index.js",
@@ -25,7 +25,7 @@
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
"@npmcli/mock-registry": "^1.0.0",
- "@npmcli/template-oss": "4.12.1",
+ "@npmcli/template-oss": "4.14.1",
"lodash.clonedeep": "^4.5.0",
"nock": "^13.3.0",
"tap": "^16.3.4"
@@ -44,7 +44,7 @@
"npm-registry-fetch": "^14.0.3",
"proc-log": "^3.0.0",
"semver": "^7.3.7",
- "sigstore": "^1.0.0",
+ "sigstore": "^1.4.0",
"ssri": "^10.0.1"
},
"engines": {
@@ -52,7 +52,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.12.1",
+ "version": "4.14.1",
"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 765c689736..e7dd7aca9b 100644
--- a/deps/npm/node_modules/libnpmsearch/package.json
+++ b/deps/npm/node_modules/libnpmsearch/package.json
@@ -26,7 +26,7 @@
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.12.1",
+ "@npmcli/template-oss": "4.14.1",
"nock": "^13.3.0",
"tap": "^16.3.4"
},
@@ -45,7 +45,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.12.1",
+ "version": "4.14.1",
"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 ff4f5a7852..5558224050 100644
--- a/deps/npm/node_modules/libnpmteam/package.json
+++ b/deps/npm/node_modules/libnpmteam/package.json
@@ -16,7 +16,7 @@
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.12.1",
+ "@npmcli/template-oss": "4.14.1",
"nock": "^13.3.0",
"tap": "^16.3.4"
},
@@ -39,7 +39,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.12.1",
+ "version": "4.14.1",
"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 46362ae10b..7bae86d8af 100644
--- a/deps/npm/node_modules/libnpmversion/package.json
+++ b/deps/npm/node_modules/libnpmversion/package.json
@@ -32,7 +32,7 @@
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.12.1",
+ "@npmcli/template-oss": "4.14.1",
"require-inject": "^1.4.4",
"tap": "^16.3.4"
},
@@ -48,7 +48,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.12.1",
+ "version": "4.14.1",
"content": "../../scripts/template-oss/index.js"
}
}
diff --git a/deps/npm/node_modules/make-fetch-happen/lib/cache/entry.js b/deps/npm/node_modules/make-fetch-happen/lib/cache/entry.js
index dba89d715d..4514109507 100644
--- a/deps/npm/node_modules/make-fetch-happen/lib/cache/entry.js
+++ b/deps/npm/node_modules/make-fetch-happen/lib/cache/entry.js
@@ -1,5 +1,5 @@
const { Request, Response } = require('minipass-fetch')
-const Minipass = require('minipass')
+const { Minipass } = require('minipass')
const MinipassFlush = require('minipass-flush')
const cacache = require('cacache')
const url = require('url')
@@ -99,6 +99,12 @@ const getMetadata = (request, response, options) => {
}
}
+ for (const name of options.cacheAdditionalHeaders) {
+ if (response.headers.has(name)) {
+ metadata.resHeaders[name] = response.headers.get(name)
+ }
+ }
+
return metadata
}
@@ -331,6 +337,7 @@ class CacheEntry {
// 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 }
@@ -417,6 +424,24 @@ class CacheEntry {
}
}
+ 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,
diff --git a/deps/npm/node_modules/make-fetch-happen/lib/options.js b/deps/npm/node_modules/make-fetch-happen/lib/options.js
index daa9ecd9d5..f77511279f 100644
--- a/deps/npm/node_modules/make-fetch-happen/lib/options.js
+++ b/deps/npm/node_modules/make-fetch-happen/lib/options.js
@@ -40,6 +40,8 @@ const configureOptions = (opts) => {
}
}
+ 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) {
diff --git a/deps/npm/node_modules/make-fetch-happen/lib/remote.js b/deps/npm/node_modules/make-fetch-happen/lib/remote.js
index 068c73a8a7..bdbcc79cad 100644
--- a/deps/npm/node_modules/make-fetch-happen/lib/remote.js
+++ b/deps/npm/node_modules/make-fetch-happen/lib/remote.js
@@ -1,4 +1,4 @@
-const Minipass = require('minipass')
+const { Minipass } = require('minipass')
const fetch = require('minipass-fetch')
const promiseRetry = require('promise-retry')
const ssri = require('ssri')
diff --git a/deps/npm/node_modules/make-fetch-happen/package.json b/deps/npm/node_modules/make-fetch-happen/package.json
index 7c340820f0..fd415dc996 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": "11.0.3",
+ "version": "11.1.1",
"description": "Opinionated, caching, retrying fetch client",
"main": "lib/index.js",
"files": [
@@ -40,7 +40,7 @@
"https-proxy-agent": "^5.0.0",
"is-lambda": "^1.0.1",
"lru-cache": "^7.7.1",
- "minipass": "^4.0.0",
+ "minipass": "^5.0.0",
"minipass-fetch": "^3.0.0",
"minipass-flush": "^1.0.5",
"minipass-pipeline": "^1.2.4",
@@ -51,7 +51,7 @@
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.11.3",
+ "@npmcli/template-oss": "4.14.1",
"nock": "^13.2.4",
"safe-buffer": "^5.2.1",
"standard-version": "^9.3.2",
@@ -72,6 +72,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.11.3"
+ "version": "4.14.1",
+ "publish": "true"
}
}
diff --git a/deps/npm/node_modules/minimatch/dist/cjs/_parse.js b/deps/npm/node_modules/minimatch/dist/cjs/_parse.js
deleted file mode 100644
index 4387a26171..0000000000
--- a/deps/npm/node_modules/minimatch/dist/cjs/_parse.js
+++ /dev/null
@@ -1,300 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.parse = void 0;
-// parse a single path portion
-const brace_expressions_js_1 = require("./brace-expressions.js");
-const assert_valid_pattern_js_1 = require("./assert-valid-pattern.js");
-const globUnescape = (s) => s.replace(/\\(.)/g, '$1');
-const regExpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
-// "abc" -> { a:true, b:true, c:true }
-const charSet = (s) => s.split('').reduce((set, c) => {
- set[c] = true;
- return set;
-}, {});
-const plTypes = {
- '!': { open: '(?:(?!(?:', close: '))[^/]*?)' },
- '?': { open: '(?:', close: ')?' },
- '+': { open: '(?:', close: ')+' },
- '*': { open: '(?:', close: ')*' },
- '@': { open: '(?:', close: ')' },
-};
-// characters that need to be escaped in RegExp.
-const reSpecials = charSet('().*{}+?[]^$\\!');
-// characters that indicate we have to add the pattern start
-const addPatternStartSet = charSet('[.(');
-// any single thing other than /
-// don't need to escape / when using new RegExp()
-const qmark = '[^/]';
-// * => any number of characters
-const star = qmark + '*?';
-// TODO: take an offset and length, so we can sub-parse the extglobs
-const parse = (options, pattern, debug) => {
- (0, assert_valid_pattern_js_1.assertValidPattern)(pattern);
- if (pattern === '')
- return '';
- let re = '';
- let hasMagic = false;
- let escaping = false;
- // ? => one single character
- const patternListStack = [];
- const negativeLists = [];
- let stateChar = false;
- let uflag = false;
- let pl;
- // . and .. never match anything that doesn't start with .,
- // even when options.dot is set. However, if the pattern
- // starts with ., then traversal patterns can match.
- let dotTravAllowed = pattern.charAt(0) === '.';
- let dotFileAllowed = options.dot || dotTravAllowed;
- const patternStart = () => dotTravAllowed
- ? ''
- : dotFileAllowed
- ? '(?!(?:^|\\/)\\.{1,2}(?:$|\\/))'
- : '(?!\\.)';
- const subPatternStart = (p) => p.charAt(0) === '.'
- ? ''
- : options.dot
- ? '(?!(?:^|\\/)\\.{1,2}(?:$|\\/))'
- : '(?!\\.)';
- const clearStateChar = () => {
- if (stateChar) {
- // we had some state-tracking character
- // that wasn't consumed by this pass.
- switch (stateChar) {
- case '*':
- re += star;
- hasMagic = true;
- break;
- case '?':
- re += qmark;
- hasMagic = true;
- break;
- default:
- re += '\\' + stateChar;
- break;
- }
- debug('clearStateChar %j %j', stateChar, re);
- stateChar = false;
- }
- };
- for (let i = 0, c; i < pattern.length && (c = pattern.charAt(i)); i++) {
- debug('%s\t%s %s %j', pattern, i, re, c);
- // skip over any that are escaped.
- if (escaping) {
- // completely not allowed, even escaped.
- // should be impossible.
- /* c8 ignore start */
- if (c === '/') {
- return false;
- }
- /* c8 ignore stop */
- if (reSpecials[c]) {
- re += '\\';
- }
- re += c;
- escaping = false;
- continue;
- }
- switch (c) {
- // Should already be path-split by now.
- /* c8 ignore start */
- case '/': {
- return false;
- }
- /* c8 ignore stop */
- case '\\':
- clearStateChar();
- escaping = true;
- continue;
- // the various stateChar values
- // for the "extglob" stuff.
- case '?':
- case '*':
- case '+':
- case '@':
- case '!':
- debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c);
- // if we already have a stateChar, then it means
- // that there was something like ** or +? in there.
- // Handle the stateChar, then proceed with this one.
- debug('call clearStateChar %j', stateChar);
- clearStateChar();
- stateChar = c;
- // if extglob is disabled, then +(asdf|foo) isn't a thing.
- // just clear the statechar *now*, rather than even diving into
- // the patternList stuff.
- if (options.noext)
- clearStateChar();
- continue;
- case '(': {
- if (!stateChar) {
- re += '\\(';
- continue;
- }
- const plEntry = {
- type: stateChar,
- start: i - 1,
- reStart: re.length,
- open: plTypes[stateChar].open,
- close: plTypes[stateChar].close,
- };
- debug(pattern, '\t', plEntry);
- patternListStack.push(plEntry);
- // negation is (?:(?!(?:js)(?:<rest>))[^/]*)
- re += plEntry.open;
- // next entry starts with a dot maybe?
- if (plEntry.start === 0 && plEntry.type !== '!') {
- dotTravAllowed = true;
- re += subPatternStart(pattern.slice(i + 1));
- }
- debug('plType %j %j', stateChar, re);
- stateChar = false;
- continue;
- }
- case ')': {
- const plEntry = patternListStack[patternListStack.length - 1];
- if (!plEntry) {
- re += '\\)';
- continue;
- }
- patternListStack.pop();
- // closing an extglob
- clearStateChar();
- hasMagic = true;
- pl = plEntry;
- // negation is (?:(?!js)[^/]*)
- // The others are (?:<pattern>)<type>
- re += pl.close;
- if (pl.type === '!') {
- negativeLists.push(Object.assign(pl, { reEnd: re.length }));
- }
- continue;
- }
- case '|': {
- const plEntry = patternListStack[patternListStack.length - 1];
- if (!plEntry) {
- re += '\\|';
- continue;
- }
- clearStateChar();
- re += '|';
- // next subpattern can start with a dot?
- if (plEntry.start === 0 && plEntry.type !== '!') {
- dotTravAllowed = true;
- re += subPatternStart(pattern.slice(i + 1));
- }
- continue;
- }
- // these are mostly the same in regexp and glob
- case '[':
- // swallow any state-tracking char before the [
- clearStateChar();
- const [src, needUflag, consumed, magic] = (0, brace_expressions_js_1.parseClass)(pattern, i);
- if (consumed) {
- re += src;
- uflag = uflag || needUflag;
- i += consumed - 1;
- hasMagic = hasMagic || magic;
- }
- else {
- re += '\\[';
- }
- continue;
- case ']':
- re += '\\' + c;
- continue;
- default:
- // swallow any state char that wasn't consumed
- clearStateChar();
- re += regExpEscape(c);
- break;
- } // switch
- } // for
- // handle the case where we had a +( thing at the *end*
- // of the pattern.
- // each pattern list stack adds 3 chars, and we need to go through
- // and escape any | chars that were passed through as-is for the regexp.
- // Go through and escape them, taking care not to double-escape any
- // | chars that were already escaped.
- for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {
- let tail;
- tail = re.slice(pl.reStart + pl.open.length);
- debug(pattern, 'setting tail', re, pl);
- // maybe some even number of \, then maybe 1 \, followed by a |
- tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, (_, $1, $2) => {
- if (!$2) {
- // the | isn't already escaped, so escape it.
- $2 = '\\';
- // should already be done
- /* c8 ignore start */
- }
- /* c8 ignore stop */
- // need to escape all those slashes *again*, without escaping the
- // one that we need for escaping the | character. As it works out,
- // escaping an even number of slashes can be done by simply repeating
- // it exactly after itself. That's why this trick works.
- //
- // I am sorry that you have to see this.
- return $1 + $1 + $2 + '|';
- });
- debug('tail=%j\n %s', tail, tail, pl, re);
- const t = pl.type === '*' ? star : pl.type === '?' ? qmark : '\\' + pl.type;
- hasMagic = true;
- re = re.slice(0, pl.reStart) + t + '\\(' + tail;
- }
- // handle trailing things that only matter at the very end.
- clearStateChar();
- if (escaping) {
- // trailing \\
- re += '\\\\';
- }
- // only need to apply the nodot start if the re starts with
- // something that could conceivably capture a dot
- const addPatternStart = addPatternStartSet[re.charAt(0)];
- // Hack to work around lack of negative lookbehind in JS
- // A pattern like: *.!(x).!(y|z) needs to ensure that a name
- // like 'a.xyz.yz' doesn't match. So, the first negative
- // lookahead, has to look ALL the way ahead, to the end of
- // the pattern.
- for (let n = negativeLists.length - 1; n > -1; n--) {
- const nl = negativeLists[n];
- const nlBefore = re.slice(0, nl.reStart);
- const nlFirst = re.slice(nl.reStart, nl.reEnd - 8);
- let nlAfter = re.slice(nl.reEnd);
- const nlLast = re.slice(nl.reEnd - 8, nl.reEnd) + nlAfter;
- // Handle nested stuff like *(*.js|!(*.json)), where open parens
- // mean that we should *not* include the ) in the bit that is considered
- // "after" the negated section.
- const closeParensBefore = nlBefore.split(')').length;
- const openParensBefore = nlBefore.split('(').length - closeParensBefore;
- let cleanAfter = nlAfter;
- for (let i = 0; i < openParensBefore; i++) {
- cleanAfter = cleanAfter.replace(/\)[+*?]?/, '');
- }
- nlAfter = cleanAfter;
- const dollar = nlAfter === '' ? '(?:$|\\/)' : '';
- re = nlBefore + nlFirst + nlAfter + dollar + nlLast;
- }
- // if the re is not "" at this point, then we need to make sure
- // it doesn't match against an empty path part.
- // Otherwise a/* will match a/, which it should not.
- if (re !== '' && hasMagic) {
- re = '(?=.)' + re;
- }
- if (addPatternStart) {
- re = patternStart() + re;
- }
- // if it's nocase, and the lcase/uppercase don't match, it's magic
- if (options.nocase && !hasMagic && !options.nocaseMagicOnly) {
- hasMagic = pattern.toUpperCase() !== pattern.toLowerCase();
- }
- // skip the regexp for non-magical patterns
- // unescape anything in it, though, so that it'll be
- // an exact match against a file etc.
- if (!hasMagic) {
- return globUnescape(re);
- }
- return re;
-};
-exports.parse = parse;
-//# sourceMappingURL=_parse.js.map \ No newline at end of file
diff --git a/deps/npm/node_modules/minimatch/dist/cjs/ast.js b/deps/npm/node_modules/minimatch/dist/cjs/ast.js
new file mode 100644
index 0000000000..191e7e871c
--- /dev/null
+++ b/deps/npm/node_modules/minimatch/dist/cjs/ast.js
@@ -0,0 +1,566 @@
+"use strict";
+// parse a single path portion
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.AST = void 0;
+const brace_expressions_js_1 = require("./brace-expressions.js");
+const unescape_js_1 = require("./unescape.js");
+const types = new Set(['!', '?', '+', '*', '@']);
+const isExtglobType = (c) => types.has(c);
+// Patterns that get prepended to bind to the start of either the
+// entire string, or just a single path portion, to prevent dots
+// and/or traversal patterns, when needed.
+// Exts don't need the ^ or / bit, because the root binds that already.
+const startNoTraversal = '(?!\\.\\.?(?:$|/))';
+const startNoDot = '(?!\\.)';
+// characters that indicate a start of pattern needs the "no dots" bit,
+// because a dot *might* be matched. ( is not in the list, because in
+// the case of a child extglob, it will handle the prevention itself.
+const addPatternStart = new Set(['[', '.']);
+// cases where traversal is A-OK, no dot prevention needed
+const justDots = new Set(['..', '.']);
+const reSpecials = new Set('().*{}+?[]^$\\!');
+const regExpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
+// any single thing other than /
+const qmark = '[^/]';
+// * => any number of characters
+const star = qmark + '*?';
+// use + when we need to ensure that *something* matches, because the * is
+// the only thing in the path portion.
+const starNoEmpty = qmark + '+?';
+// remove the \ chars that we added if we end up doing a nonmagic compare
+// const deslash = (s: string) => s.replace(/\\(.)/g, '$1')
+class AST {
+ type;
+ #root;
+ #hasMagic;
+ #uflag = false;
+ #parts = [];
+ #parent;
+ #parentIndex;
+ #negs;
+ #filledNegs = false;
+ #options;
+ #toString;
+ // set to true if it's an extglob with no children
+ // (which really means one child of '')
+ #emptyExt = false;
+ constructor(type, parent, options = {}) {
+ this.type = type;
+ // extglobs are inherently magical
+ if (type)
+ this.#hasMagic = true;
+ this.#parent = parent;
+ this.#root = this.#parent ? this.#parent.#root : this;
+ this.#options = this.#root === this ? options : this.#root.#options;
+ this.#negs = this.#root === this ? [] : this.#root.#negs;
+ if (type === '!' && !this.#root.#filledNegs)
+ this.#negs.push(this);
+ this.#parentIndex = this.#parent ? this.#parent.#parts.length : 0;
+ }
+ get hasMagic() {
+ /* c8 ignore start */
+ if (this.#hasMagic !== undefined)
+ return this.#hasMagic;
+ /* c8 ignore stop */
+ for (const p of this.#parts) {
+ if (typeof p === 'string')
+ continue;
+ if (p.type || p.hasMagic)
+ return (this.#hasMagic = true);
+ }
+ // note: will be undefined until we generate the regexp src and find out
+ return this.#hasMagic;
+ }
+ // reconstructs the pattern
+ toString() {
+ if (this.#toString !== undefined)
+ return this.#toString;
+ if (!this.type) {
+ return (this.#toString = this.#parts.map(p => String(p)).join(''));
+ }
+ else {
+ return (this.#toString =
+ this.type + '(' + this.#parts.map(p => String(p)).join('|') + ')');
+ }
+ }
+ #fillNegs() {
+ /* c8 ignore start */
+ if (this !== this.#root)
+ throw new Error('should only call on root');
+ if (this.#filledNegs)
+ return this;
+ /* c8 ignore stop */
+ // call toString() once to fill this out
+ this.toString();
+ this.#filledNegs = true;
+ let n;
+ while ((n = this.#negs.pop())) {
+ if (n.type !== '!')
+ continue;
+ // walk up the tree, appending everthing that comes AFTER parentIndex
+ let p = n;
+ let pp = p.#parent;
+ while (pp) {
+ for (let i = p.#parentIndex + 1; !pp.type && i < pp.#parts.length; i++) {
+ for (const part of n.#parts) {
+ /* c8 ignore start */
+ if (typeof part === 'string') {
+ throw new Error('string part in extglob AST??');
+ }
+ /* c8 ignore stop */
+ part.copyIn(pp.#parts[i]);
+ }
+ }
+ p = pp;
+ pp = p.#parent;
+ }
+ }
+ return this;
+ }
+ push(...parts) {
+ for (const p of parts) {
+ if (p === '')
+ continue;
+ /* c8 ignore start */
+ if (typeof p !== 'string' && !(p instanceof AST && p.#parent === this)) {
+ throw new Error('invalid part: ' + p);
+ }
+ /* c8 ignore stop */
+ this.#parts.push(p);
+ }
+ }
+ toJSON() {
+ const ret = this.type === null
+ ? this.#parts.slice().map(p => (typeof p === 'string' ? p : p.toJSON()))
+ : [this.type, ...this.#parts.map(p => p.toJSON())];
+ if (this.isStart() && !this.type)
+ ret.unshift([]);
+ if (this.isEnd() &&
+ (this === this.#root ||
+ (this.#root.#filledNegs && this.#parent?.type === '!'))) {
+ ret.push({});
+ }
+ return ret;
+ }
+ isStart() {
+ if (this.#root === this)
+ return true;
+ // if (this.type) return !!this.#parent?.isStart()
+ if (!this.#parent?.isStart())
+ return false;
+ if (this.#parentIndex === 0)
+ return true;
+ // if everything AHEAD of this is a negation, then it's still the "start"
+ const p = this.#parent;
+ for (let i = 0; i < this.#parentIndex; i++) {
+ const pp = p.#parts[i];
+ if (!(pp instanceof AST && pp.type === '!')) {
+ return false;
+ }
+ }
+ return true;
+ }
+ isEnd() {
+ if (this.#root === this)
+ return true;
+ if (this.#parent?.type === '!')
+ return true;
+ if (!this.#parent?.isEnd())
+ return false;
+ if (!this.type)
+ return this.#parent?.isEnd();
+ // if not root, it'll always have a parent
+ /* c8 ignore start */
+ const pl = this.#parent ? this.#parent.#parts.length : 0;
+ /* c8 ignore stop */
+ return this.#parentIndex === pl - 1;
+ }
+ copyIn(part) {
+ if (typeof part === 'string')
+ this.push(part);
+ else
+ this.push(part.clone(this));
+ }
+ clone(parent) {
+ const c = new AST(this.type, parent);
+ for (const p of this.#parts) {
+ c.copyIn(p);
+ }
+ return c;
+ }
+ static #parseAST(str, ast, pos, opt) {
+ let escaping = false;
+ let inBrace = false;
+ let braceStart = -1;
+ let braceNeg = false;
+ if (ast.type === null) {
+ // outside of a extglob, append until we find a start
+ let i = pos;
+ let acc = '';
+ while (i < str.length) {
+ const c = str.charAt(i++);
+ // still accumulate escapes at this point, but we do ignore
+ // starts that are escaped
+ if (escaping || c === '\\') {
+ escaping = !escaping;
+ acc += c;
+ continue;
+ }
+ if (inBrace) {
+ if (i === braceStart + 1) {
+ if (c === '^' || c === '!') {
+ braceNeg = true;
+ }
+ }
+ else if (c === ']' && !(i === braceStart + 2 && braceNeg)) {
+ inBrace = false;
+ }
+ acc += c;
+ continue;
+ }
+ else if (c === '[') {
+ inBrace = true;
+ braceStart = i;
+ braceNeg = false;
+ acc += c;
+ continue;
+ }
+ if (!opt.noext && isExtglobType(c) && str.charAt(i) === '(') {
+ ast.push(acc);
+ acc = '';
+ const ext = new AST(c, ast);
+ i = AST.#parseAST(str, ext, i, opt);
+ ast.push(ext);
+ continue;
+ }
+ acc += c;
+ }
+ ast.push(acc);
+ return i;
+ }
+ // some kind of extglob, pos is at the (
+ // find the next | or )
+ let i = pos + 1;
+ let part = new AST(null, ast);
+ const parts = [];
+ let acc = '';
+ while (i < str.length) {
+ const c = str.charAt(i++);
+ // still accumulate escapes at this point, but we do ignore
+ // starts that are escaped
+ if (escaping || c === '\\') {
+ escaping = !escaping;
+ acc += c;
+ continue;
+ }
+ if (inBrace) {
+ if (i === braceStart + 1) {
+ if (c === '^' || c === '!') {
+ braceNeg = true;
+ }
+ }
+ else if (c === ']' && !(i === braceStart + 2 && braceNeg)) {
+ inBrace = false;
+ }
+ acc += c;
+ continue;
+ }
+ else if (c === '[') {
+ inBrace = true;
+ braceStart = i;
+ braceNeg = false;
+ acc += c;
+ continue;
+ }
+ if (isExtglobType(c) && str.charAt(i) === '(') {
+ part.push(acc);
+ acc = '';
+ const ext = new AST(c, part);
+ part.push(ext);
+ i = AST.#parseAST(str, ext, i, opt);
+ continue;
+ }
+ if (c === '|') {
+ part.push(acc);
+ acc = '';
+ parts.push(part);
+ part = new AST(null, ast);
+ continue;
+ }
+ if (c === ')') {
+ if (acc === '' && ast.#parts.length === 0) {
+ ast.#emptyExt = true;
+ }
+ part.push(acc);
+ acc = '';
+ ast.push(...parts, part);
+ return i;
+ }
+ acc += c;
+ }
+ // unfinished extglob
+ // if we got here, it was a malformed extglob! not an extglob, but
+ // maybe something else in there.
+ ast.type = null;
+ ast.#hasMagic = undefined;
+ ast.#parts = [str.substring(pos - 1)];
+ return i;
+ }
+ static fromGlob(pattern, options = {}) {
+ const ast = new AST(null, undefined, options);
+ AST.#parseAST(pattern, ast, 0, options);
+ return ast;
+ }
+ // returns the regular expression if there's magic, or the unescaped
+ // string if not.
+ toMMPattern() {
+ // should only be called on root
+ /* c8 ignore start */
+ if (this !== this.#root)
+ return this.#root.toMMPattern();
+ /* c8 ignore stop */
+ const glob = this.toString();
+ const [re, body, hasMagic, uflag] = this.toRegExpSource();
+ // if we're in nocase mode, and not nocaseMagicOnly, then we do
+ // still need a regular expression if we have to case-insensitively
+ // match capital/lowercase characters.
+ const anyMagic = hasMagic ||
+ this.#hasMagic ||
+ (this.#options.nocase &&
+ !this.#options.nocaseMagicOnly &&
+ glob.toUpperCase() !== glob.toLowerCase());
+ if (!anyMagic) {
+ return body;
+ }
+ const flags = (this.#options.nocase ? 'i' : '') + (uflag ? 'u' : '');
+ return Object.assign(new RegExp(`^${re}$`, flags), {
+ _src: re,
+ _glob: glob,
+ });
+ }
+ // returns the string match, the regexp source, whether there's magic
+ // in the regexp (so a regular expression is required) and whether or
+ // not the uflag is needed for the regular expression (for posix classes)
+ // TODO: instead of injecting the start/end at this point, just return
+ // the BODY of the regexp, along with the start/end portions suitable
+ // for binding the start/end in either a joined full-path makeRe context
+ // (where we bind to (^|/), or a standalone matchPart context (where
+ // we bind to ^, and not /). Otherwise slashes get duped!
+ //
+ // In part-matching mode, the start is:
+ // - if not isStart: nothing
+ // - if traversal possible, but not allowed: ^(?!\.\.?$)
+ // - if dots allowed or not possible: ^
+ // - if dots possible and not allowed: ^(?!\.)
+ // end is:
+ // - if not isEnd(): nothing
+ // - else: $
+ //
+ // In full-path matching mode, we put the slash at the START of the
+ // pattern, so start is:
+ // - if first pattern: same as part-matching mode
+ // - if not isStart(): nothing
+ // - if traversal possible, but not allowed: /(?!\.\.?(?:$|/))
+ // - if dots allowed or not possible: /
+ // - if dots possible and not allowed: /(?!\.)
+ // end is:
+ // - if last pattern, same as part-matching mode
+ // - else nothing
+ //
+ // Always put the (?:$|/) on negated tails, though, because that has to be
+ // there to bind the end of the negated pattern portion, and it's easier to
+ // just stick it in now rather than try to inject it later in the middle of
+ // the pattern.
+ //
+ // We can just always return the same end, and leave it up to the caller
+ // to know whether it's going to be used joined or in parts.
+ // And, if the start is adjusted slightly, can do the same there:
+ // - if not isStart: nothing
+ // - if traversal possible, but not allowed: (?:/|^)(?!\.\.?$)
+ // - if dots allowed or not possible: (?:/|^)
+ // - if dots possible and not allowed: (?:/|^)(?!\.)
+ //
+ // But it's better to have a simpler binding without a conditional, for
+ // performance, so probably better to return both start options.
+ //
+ // Then the caller just ignores the end if it's not the first pattern,
+ // and the start always gets applied.
+ //
+ // But that's always going to be $ if it's the ending pattern, or nothing,
+ // so the caller can just attach $ at the end of the pattern when building.
+ //
+ // So the todo is:
+ // - better detect what kind of start is needed
+ // - return both flavors of starting pattern
+ // - attach $ at the end of the pattern when creating the actual RegExp
+ //
+ // Ah, but wait, no, that all only applies to the root when the first pattern
+ // is not an extglob. If the first pattern IS an extglob, then we need all
+ // that dot prevention biz to live in the extglob portions, because eg
+ // +(*|.x*) can match .xy but not .yx.
+ //
+ // So, return the two flavors if it's #root and the first child is not an
+ // AST, otherwise leave it to the child AST to handle it, and there,
+ // use the (?:^|/) style of start binding.
+ //
+ // Even simplified further:
+ // - Since the start for a join is eg /(?!\.) and the start for a part
+ // is ^(?!\.), we can just prepend (?!\.) to the pattern (either root
+ // or start or whatever) and prepend ^ or / at the Regexp construction.
+ toRegExpSource() {
+ if (this.#root === this)
+ this.#fillNegs();
+ if (!this.type) {
+ const noEmpty = this.isStart() && this.isEnd();
+ const src = this.#parts
+ .map(p => {
+ const [re, _, hasMagic, uflag] = typeof p === 'string'
+ ? AST.#parseGlob(p, this.#hasMagic, noEmpty)
+ : p.toRegExpSource();
+ this.#hasMagic = this.#hasMagic || hasMagic;
+ this.#uflag = this.#uflag || uflag;
+ return re;
+ })
+ .join('');
+ let start = '';
+ if (this.isStart()) {
+ if (typeof this.#parts[0] === 'string') {
+ // this is the string that will match the start of the pattern,
+ // so we need to protect against dots and such.
+ // '.' and '..' cannot match unless the pattern is that exactly,
+ // even if it starts with . or dot:true is set.
+ const dotTravAllowed = this.#parts.length === 1 && justDots.has(this.#parts[0]);
+ if (!dotTravAllowed) {
+ const aps = addPatternStart;
+ // check if we have a possibility of matching . or ..,
+ // and prevent that.
+ const needNoTrav =
+ // dots are allowed, and the pattern starts with [ or .
+ (this.#options.dot && aps.has(src.charAt(0))) ||
+ // the pattern starts with \., and then [ or .
+ (src.startsWith('\\.') && aps.has(src.charAt(2))) ||
+ // the pattern starts with \.\., and then [ or .
+ (src.startsWith('\\.\\.') && aps.has(src.charAt(4)));
+ // no need to prevent dots if it can't match a dot, or if a
+ // sub-pattern will be preventing it anyway.
+ const needNoDot = !this.#options.dot && aps.has(src.charAt(0));
+ start = needNoTrav ? startNoTraversal : needNoDot ? startNoDot : '';
+ }
+ }
+ }
+ // append the "end of path portion" pattern to negation tails
+ let end = '';
+ if (this.isEnd() &&
+ this.#root.#filledNegs &&
+ this.#parent?.type === '!') {
+ end = '(?:$|\\/)';
+ }
+ const final = start + src + end;
+ return [
+ final,
+ (0, unescape_js_1.unescape)(src),
+ (this.#hasMagic = !!this.#hasMagic),
+ this.#uflag,
+ ];
+ }
+ // some kind of extglob
+ const start = this.type === '!' ? '(?:(?!(?:' : '(?:';
+ const body = this.#parts
+ .map(p => {
+ // extglob ASTs should only contain parent ASTs
+ /* c8 ignore start */
+ if (typeof p === 'string') {
+ throw new Error('string type in extglob ast??');
+ }
+ /* c8 ignore stop */
+ // can ignore hasMagic, because extglobs are already always magic
+ const [re, _, _hasMagic, uflag] = p.toRegExpSource();
+ this.#uflag = this.#uflag || uflag;
+ return re;
+ })
+ .filter(p => !(this.isStart() && this.isEnd()) || !!p)
+ .join('|');
+ if (this.isStart() && this.isEnd() && !body && this.type !== '!') {
+ // invalid extglob, has to at least be *something* present, if it's
+ // the entire path portion.
+ const s = this.toString();
+ this.#parts = [s];
+ this.type = null;
+ this.#hasMagic = undefined;
+ return [s, (0, unescape_js_1.unescape)(this.toString()), false, false];
+ }
+ // an empty !() is exactly equivalent to a starNoEmpty
+ let final = '';
+ if (this.type === '!' && this.#emptyExt) {
+ final =
+ (this.isStart() && !this.#options.dot ? startNoDot : '') + starNoEmpty;
+ }
+ else {
+ const close = this.type === '!'
+ ? // !() must match something,but !(x) can match ''
+ '))' +
+ (this.isStart() && !this.#options.dot ? startNoDot : '') +
+ star +
+ ')'
+ : this.type === '@'
+ ? ')'
+ : `)${this.type}`;
+ final = start + body + close;
+ }
+ return [
+ final,
+ (0, unescape_js_1.unescape)(body),
+ (this.#hasMagic = !!this.#hasMagic),
+ this.#uflag,
+ ];
+ }
+ static #parseGlob(glob, hasMagic, noEmpty = false) {
+ let escaping = false;
+ let re = '';
+ let uflag = false;
+ for (let i = 0; i < glob.length; i++) {
+ const c = glob.charAt(i);
+ if (escaping) {
+ escaping = false;
+ re += (reSpecials.has(c) ? '\\' : '') + c;
+ continue;
+ }
+ if (c === '\\') {
+ if (i === glob.length - 1) {
+ re += '\\\\';
+ }
+ else {
+ escaping = true;
+ }
+ continue;
+ }
+ if (c === '[') {
+ const [src, needUflag, consumed, magic] = (0, brace_expressions_js_1.parseClass)(glob, i);
+ if (consumed) {
+ re += src;
+ uflag = uflag || needUflag;
+ i += consumed - 1;
+ hasMagic = hasMagic || magic;
+ continue;
+ }
+ }
+ if (c === '*') {
+ if (noEmpty && glob === '*')
+ re += starNoEmpty;
+ else
+ re += star;
+ hasMagic = true;
+ continue;
+ }
+ if (c === '?') {
+ re += qmark;
+ hasMagic = true;
+ continue;
+ }
+ re += regExpEscape(c);
+ }
+ return [re, (0, unescape_js_1.unescape)(glob), !!hasMagic, uflag];
+ }
+}
+exports.AST = AST;
+//# sourceMappingURL=ast.js.map \ No newline at end of file
diff --git a/deps/npm/node_modules/minimatch/dist/cjs/extglob.js b/deps/npm/node_modules/minimatch/dist/cjs/extglob.js
deleted file mode 100644
index 8d7607b7f7..0000000000
--- a/deps/npm/node_modules/minimatch/dist/cjs/extglob.js
+++ /dev/null
@@ -1,4 +0,0 @@
-"use strict";
-// translate an extglob into a regular expression
-Object.defineProperty(exports, "__esModule", { value: true });
-//# sourceMappingURL=extglob.js.map \ No newline at end of file
diff --git a/deps/npm/node_modules/minimatch/dist/cjs/index-cjs.js b/deps/npm/node_modules/minimatch/dist/cjs/index-cjs.js
deleted file mode 100644
index db73b6b933..0000000000
--- a/deps/npm/node_modules/minimatch/dist/cjs/index-cjs.js
+++ /dev/null
@@ -1,7 +0,0 @@
-"use strict";
-var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-const index_js_1 = __importDefault(require("./index.js"));
-module.exports = Object.assign(index_js_1.default, { default: index_js_1.default, minimatch: index_js_1.default });
-//# sourceMappingURL=index-cjs.js.map \ No newline at end of file
diff --git a/deps/npm/node_modules/minimatch/dist/cjs/index.js b/deps/npm/node_modules/minimatch/dist/cjs/index.js
index 3bb6c3dee5..3cbc67f892 100644
--- a/deps/npm/node_modules/minimatch/dist/cjs/index.js
+++ b/deps/npm/node_modules/minimatch/dist/cjs/index.js
@@ -3,13 +3,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
-exports.unescape = exports.escape = exports.Minimatch = exports.match = exports.makeRe = exports.braceExpand = exports.defaults = exports.filter = exports.GLOBSTAR = exports.sep = exports.minimatch = void 0;
+exports.unescape = exports.escape = exports.AST = exports.Minimatch = exports.match = exports.makeRe = exports.braceExpand = exports.defaults = exports.filter = exports.GLOBSTAR = exports.sep = exports.minimatch = void 0;
const brace_expansion_1 = __importDefault(require("brace-expansion"));
-const brace_expressions_js_1 = require("./brace-expressions.js");
+const assert_valid_pattern_js_1 = require("./assert-valid-pattern.js");
+const ast_js_1 = require("./ast.js");
const escape_js_1 = require("./escape.js");
const unescape_js_1 = require("./unescape.js");
const minimatch = (p, pattern, options = {}) => {
- assertValidPattern(pattern);
+ (0, assert_valid_pattern_js_1.assertValidPattern)(pattern);
// shortcut: comments match nothing.
if (!options.nocomment && pattern.charAt(0) === '#') {
return false;
@@ -17,7 +18,6 @@ const minimatch = (p, pattern, options = {}) => {
return new Minimatch(pattern, options).match(p);
};
exports.minimatch = minimatch;
-exports.default = exports.minimatch;
// Optimized checking for the most common glob patterns.
const starDotExtRE = /^\*+([^+@!?\*\[\(]*)$/;
const starDotExtTest = (ext) => (f) => !f.startsWith('.') && f.endsWith(ext);
@@ -85,13 +85,6 @@ exports.sep = defaultPlatform === 'win32' ? path.win32.sep : path.posix.sep;
exports.minimatch.sep = exports.sep;
exports.GLOBSTAR = Symbol('globstar **');
exports.minimatch.GLOBSTAR = exports.GLOBSTAR;
-const plTypes = {
- '!': { open: '(?:(?!(?:', close: '))[^/]*?)' },
- '?': { open: '(?:', close: ')?' },
- '+': { open: '(?:', close: ')+' },
- '*': { open: '(?:', close: ')*' },
- '@': { open: '(?:', close: ')' },
-};
// any single thing other than /
// don't need to escape / when using new RegExp()
const qmark = '[^/]';
@@ -104,15 +97,6 @@ const twoStarDot = '(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?';
// not a ^ or / followed by a dot,
// followed by anything, any number of times.
const twoStarNoDot = '(?:(?!(?:\\/|^)\\.).)*?';
-// "abc" -> { a:true, b:true, c:true }
-const charSet = (s) => s.split('').reduce((set, c) => {
- set[c] = true;
- return set;
-}, {});
-// characters that need to be escaped in RegExp.
-const reSpecials = charSet('().*{}+?[]^$\\!');
-// characters that indicate we have to add the pattern start
-const addPatternStartSet = charSet('[.(');
const filter = (pattern, options = {}) => (p) => (0, exports.minimatch)(p, pattern, options);
exports.filter = filter;
exports.minimatch.filter = exports.filter;
@@ -132,6 +116,16 @@ const defaults = (def) => {
return orig.defaults(ext(def, options)).Minimatch;
}
},
+ AST: class AST extends orig.AST {
+ /* c8 ignore start */
+ constructor(type, parent, options = {}) {
+ super(type, parent, ext(def, options));
+ }
+ /* c8 ignore stop */
+ static fromGlob(pattern, options = {}) {
+ return orig.AST.fromGlob(pattern, ext(def, options));
+ }
+ },
unescape: (s, options = {}) => orig.unescape(s, ext(def, options)),
escape: (s, options = {}) => orig.escape(s, ext(def, options)),
filter: (pattern, options = {}) => orig.filter(pattern, ext(def, options)),
@@ -156,7 +150,7 @@ exports.minimatch.defaults = exports.defaults;
// a{2..}b -> a{2..}b
// a{b}c -> a{b}c
const braceExpand = (pattern, options = {}) => {
- assertValidPattern(pattern);
+ (0, assert_valid_pattern_js_1.assertValidPattern)(pattern);
// Thanks to Yeting Li <https://github.com/yetingli> for
// improving this regexp to avoid a ReDOS vulnerability.
if (options.nobrace || !/\{(?:(?!\{).)*\}/.test(pattern)) {
@@ -167,15 +161,6 @@ const braceExpand = (pattern, options = {}) => {
};
exports.braceExpand = braceExpand;
exports.minimatch.braceExpand = exports.braceExpand;
-const MAX_PATTERN_LENGTH = 1024 * 64;
-const assertValidPattern = (pattern) => {
- if (typeof pattern !== 'string') {
- throw new TypeError('invalid pattern');
- }
- if (pattern.length > MAX_PATTERN_LENGTH) {
- throw new TypeError('pattern is too long');
- }
-};
// parse a component of the expanded set.
// At this point, no pattern may contain "/" in it
// so we're going to return a 2d array, where each entry is the full
@@ -201,7 +186,6 @@ const match = (list, pattern, options = {}) => {
exports.match = match;
exports.minimatch.match = exports.match;
// replace stuff like \* with *
-const globUnescape = (s) => s.replace(/\\(.)/g, '$1');
const globMagic = /[?*]|[+@!]\(.*?\)|\[|\]/;
const regExpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
class Minimatch {
@@ -223,7 +207,7 @@ class Minimatch {
windowsNoMagicRoot;
regexp;
constructor(pattern, options = {}) {
- assertValidPattern(pattern);
+ (0, assert_valid_pattern_js_1.assertValidPattern)(pattern);
options = options || {};
this.options = options;
this.pattern = pattern;
@@ -814,7 +798,7 @@ class Minimatch {
return (0, exports.braceExpand)(this.pattern, this.options);
}
parse(pattern) {
- assertValidPattern(pattern);
+ (0, assert_valid_pattern_js_1.assertValidPattern)(pattern);
const options = this.options;
// shortcuts
if (pattern === '**')
@@ -852,293 +836,8 @@ class Minimatch {
else if ((m = pattern.match(dotStarRE))) {
fastTest = dotStarTest;
}
- let re = '';
- let hasMagic = false;
- let escaping = false;
- // ? => one single character
- const patternListStack = [];
- const negativeLists = [];
- let stateChar = false;
- let uflag = false;
- let pl;
- // . and .. never match anything that doesn't start with .,
- // even when options.dot is set. However, if the pattern
- // starts with ., then traversal patterns can match.
- let dotTravAllowed = pattern.charAt(0) === '.';
- let dotFileAllowed = options.dot || dotTravAllowed;
- const patternStart = () => dotTravAllowed
- ? ''
- : dotFileAllowed
- ? '(?!(?:^|\\/)\\.{1,2}(?:$|\\/))'
- : '(?!\\.)';
- const subPatternStart = (p) => p.charAt(0) === '.'
- ? ''
- : options.dot
- ? '(?!(?:^|\\/)\\.{1,2}(?:$|\\/))'
- : '(?!\\.)';
- const clearStateChar = () => {
- if (stateChar) {
- // we had some state-tracking character
- // that wasn't consumed by this pass.
- switch (stateChar) {
- case '*':
- re += star;
- hasMagic = true;
- break;
- case '?':
- re += qmark;
- hasMagic = true;
- break;
- default:
- re += '\\' + stateChar;
- break;
- }
- this.debug('clearStateChar %j %j', stateChar, re);
- stateChar = false;
- }
- };
- for (let i = 0, c; i < pattern.length && (c = pattern.charAt(i)); i++) {
- this.debug('%s\t%s %s %j', pattern, i, re, c);
- // skip over any that are escaped.
- if (escaping) {
- // completely not allowed, even escaped.
- // should be impossible.
- /* c8 ignore start */
- if (c === '/') {
- return false;
- }
- /* c8 ignore stop */
- if (reSpecials[c]) {
- re += '\\';
- }
- re += c;
- escaping = false;
- continue;
- }
- switch (c) {
- // Should already be path-split by now.
- /* c8 ignore start */
- case '/': {
- return false;
- }
- /* c8 ignore stop */
- case '\\':
- clearStateChar();
- escaping = true;
- continue;
- // the various stateChar values
- // for the "extglob" stuff.
- case '?':
- case '*':
- case '+':
- case '@':
- case '!':
- this.debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c);
- // if we already have a stateChar, then it means
- // that there was something like ** or +? in there.
- // Handle the stateChar, then proceed with this one.
- this.debug('call clearStateChar %j', stateChar);
- clearStateChar();
- stateChar = c;
- // if extglob is disabled, then +(asdf|foo) isn't a thing.
- // just clear the statechar *now*, rather than even diving into
- // the patternList stuff.
- if (options.noext)
- clearStateChar();
- continue;
- case '(': {
- if (!stateChar) {
- re += '\\(';
- continue;
- }
- const plEntry = {
- type: stateChar,
- start: i - 1,
- reStart: re.length,
- open: plTypes[stateChar].open,
- close: plTypes[stateChar].close,
- };
- this.debug(this.pattern, '\t', plEntry);
- patternListStack.push(plEntry);
- // negation is (?:(?!(?:js)(?:<rest>))[^/]*)
- re += plEntry.open;
- // next entry starts with a dot maybe?
- if (plEntry.start === 0 && plEntry.type !== '!') {
- dotTravAllowed = true;
- re += subPatternStart(pattern.slice(i + 1));
- }
- this.debug('plType %j %j', stateChar, re);
- stateChar = false;
- continue;
- }
- case ')': {
- const plEntry = patternListStack[patternListStack.length - 1];
- if (!plEntry) {
- re += '\\)';
- continue;
- }
- patternListStack.pop();
- // closing an extglob
- clearStateChar();
- hasMagic = true;
- pl = plEntry;
- // negation is (?:(?!js)[^/]*)
- // The others are (?:<pattern>)<type>
- re += pl.close;
- if (pl.type === '!') {
- negativeLists.push(Object.assign(pl, { reEnd: re.length }));
- }
- continue;
- }
- case '|': {
- const plEntry = patternListStack[patternListStack.length - 1];
- if (!plEntry) {
- re += '\\|';
- continue;
- }
- clearStateChar();
- re += '|';
- // next subpattern can start with a dot?
- if (plEntry.start === 0 && plEntry.type !== '!') {
- dotTravAllowed = true;
- re += subPatternStart(pattern.slice(i + 1));
- }
- continue;
- }
- // these are mostly the same in regexp and glob
- case '[':
- // swallow any state-tracking char before the [
- clearStateChar();
- const [src, needUflag, consumed, magic] = (0, brace_expressions_js_1.parseClass)(pattern, i);
- if (consumed) {
- re += src;
- uflag = uflag || needUflag;
- i += consumed - 1;
- hasMagic = hasMagic || magic;
- }
- else {
- re += '\\[';
- }
- continue;
- case ']':
- re += '\\' + c;
- continue;
- default:
- // swallow any state char that wasn't consumed
- clearStateChar();
- re += regExpEscape(c);
- break;
- } // switch
- } // for
- // handle the case where we had a +( thing at the *end*
- // of the pattern.
- // each pattern list stack adds 3 chars, and we need to go through
- // and escape any | chars that were passed through as-is for the regexp.
- // Go through and escape them, taking care not to double-escape any
- // | chars that were already escaped.
- for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {
- let tail;
- tail = re.slice(pl.reStart + pl.open.length);
- this.debug(this.pattern, 'setting tail', re, pl);
- // maybe some even number of \, then maybe 1 \, followed by a |
- tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, (_, $1, $2) => {
- if (!$2) {
- // the | isn't already escaped, so escape it.
- $2 = '\\';
- // should already be done
- /* c8 ignore start */
- }
- /* c8 ignore stop */
- // need to escape all those slashes *again*, without escaping the
- // one that we need for escaping the | character. As it works out,
- // escaping an even number of slashes can be done by simply repeating
- // it exactly after itself. That's why this trick works.
- //
- // I am sorry that you have to see this.
- return $1 + $1 + $2 + '|';
- });
- this.debug('tail=%j\n %s', tail, tail, pl, re);
- const t = pl.type === '*' ? star : pl.type === '?' ? qmark : '\\' + pl.type;
- hasMagic = true;
- re = re.slice(0, pl.reStart) + t + '\\(' + tail;
- }
- // handle trailing things that only matter at the very end.
- clearStateChar();
- if (escaping) {
- // trailing \\
- re += '\\\\';
- }
- // only need to apply the nodot start if the re starts with
- // something that could conceivably capture a dot
- const addPatternStart = addPatternStartSet[re.charAt(0)];
- // Hack to work around lack of negative lookbehind in JS
- // A pattern like: *.!(x).!(y|z) needs to ensure that a name
- // like 'a.xyz.yz' doesn't match. So, the first negative
- // lookahead, has to look ALL the way ahead, to the end of
- // the pattern.
- for (let n = negativeLists.length - 1; n > -1; n--) {
- const nl = negativeLists[n];
- const nlBefore = re.slice(0, nl.reStart);
- const nlFirst = re.slice(nl.reStart, nl.reEnd - 8);
- let nlAfter = re.slice(nl.reEnd);
- const nlLast = re.slice(nl.reEnd - 8, nl.reEnd) + nlAfter;
- // Handle nested stuff like *(*.js|!(*.json)), where open parens
- // mean that we should *not* include the ) in the bit that is considered
- // "after" the negated section.
- const closeParensBefore = nlBefore.split(')').length;
- const openParensBefore = nlBefore.split('(').length - closeParensBefore;
- let cleanAfter = nlAfter;
- for (let i = 0; i < openParensBefore; i++) {
- cleanAfter = cleanAfter.replace(/\)[+*?]?/, '');
- }
- nlAfter = cleanAfter;
- const dollar = nlAfter === '' ? '(?:$|\\/)' : '';
- re = nlBefore + nlFirst + nlAfter + dollar + nlLast;
- }
- // if the re is not "" at this point, then we need to make sure
- // it doesn't match against an empty path part.
- // Otherwise a/* will match a/, which it should not.
- if (re !== '' && hasMagic) {
- re = '(?=.)' + re;
- }
- if (addPatternStart) {
- re = patternStart() + re;
- }
- // if it's nocase, and the lcase/uppercase don't match, it's magic
- if (options.nocase && !hasMagic && !options.nocaseMagicOnly) {
- hasMagic = pattern.toUpperCase() !== pattern.toLowerCase();
- }
- // skip the regexp for non-magical patterns
- // unescape anything in it, though, so that it'll be
- // an exact match against a file etc.
- if (!hasMagic) {
- return globUnescape(re);
- }
- const flags = (options.nocase ? 'i' : '') + (uflag ? 'u' : '');
- try {
- const ext = fastTest
- ? {
- _glob: pattern,
- _src: re,
- test: fastTest,
- }
- : {
- _glob: pattern,
- _src: re,
- };
- return Object.assign(new RegExp('^' + re + '$', flags), ext);
- /* c8 ignore start */
- }
- catch (er) {
- // should be impossible
- // If it was an invalid regular expression, then it can't match
- // anything. This trick looks for a character after the end of
- // the string, which is of course impossible, except in multi-line
- // mode, but it's not a /m regex.
- this.debug('invalid regexp', er);
- return new RegExp('$.');
- }
- /* c8 ignore stop */
+ const re = ast_js_1.AST.fromGlob(pattern, this.options).toMMPattern();
+ return fastTest ? Object.assign(re, { test: fastTest }) : re;
}
makeRe() {
if (this.regexp || this.regexp === false)
@@ -1160,7 +859,7 @@ class Minimatch {
: options.dot
? twoStarDot
: twoStarNoDot;
- const flags = options.nocase ? 'i' : '';
+ const flags = new Set(options.nocase ? ['i'] : []);
// regexpify non-globstar patterns
// if ** is only item, then we just do one twoStar
// if ** is first, and there are more, prepend (\/|twoStar\/)? to next
@@ -1169,11 +868,17 @@ class Minimatch {
// then filter out GLOBSTAR symbols
let re = set
.map(pattern => {
- const pp = pattern.map(p => typeof p === 'string'
- ? regExpEscape(p)
- : p === exports.GLOBSTAR
- ? exports.GLOBSTAR
- : p._src);
+ const pp = pattern.map(p => {
+ if (p instanceof RegExp) {
+ for (const f of p.flags.split(''))
+ flags.add(f);
+ }
+ return typeof p === 'string'
+ ? regExpEscape(p)
+ : p === exports.GLOBSTAR
+ ? exports.GLOBSTAR
+ : p._src;
+ });
pp.forEach((p, i) => {
const next = pp[i + 1];
const prev = pp[i - 1];
@@ -1199,14 +904,17 @@ class Minimatch {
return pp.filter(p => p !== exports.GLOBSTAR).join('/');
})
.join('|');
+ // need to wrap in parens if we had more than one thing with |,
+ // otherwise only the first will be anchored to ^ and the last to $
+ const [open, close] = set.length > 1 ? ['(?:', ')'] : ['', ''];
// must match entire pattern
// ending in a * or ** will make it less strict.
- re = '^(?:' + re + ')$';
+ re = '^' + open + re + close + '$';
// can match anything, as long as it's not this.
if (this.negate)
- re = '^(?!' + re + ').*$';
+ re = '^(?!' + re + ').+$';
try {
- this.regexp = new RegExp(re, flags);
+ this.regexp = new RegExp(re, [...flags].join(''));
/* c8 ignore start */
}
catch (ex) {
@@ -1293,11 +1001,14 @@ class Minimatch {
}
exports.Minimatch = Minimatch;
/* c8 ignore start */
+var ast_js_2 = require("./ast.js");
+Object.defineProperty(exports, "AST", { enumerable: true, get: function () { return ast_js_2.AST; } });
var escape_js_2 = require("./escape.js");
Object.defineProperty(exports, "escape", { enumerable: true, get: function () { return escape_js_2.escape; } });
var unescape_js_2 = require("./unescape.js");
Object.defineProperty(exports, "unescape", { enumerable: true, get: function () { return unescape_js_2.unescape; } });
/* c8 ignore stop */
+exports.minimatch.AST = ast_js_1.AST;
exports.minimatch.Minimatch = Minimatch;
exports.minimatch.escape = escape_js_1.escape;
exports.minimatch.unescape = unescape_js_1.unescape;
diff --git a/deps/npm/node_modules/minimatch/dist/cjs/parse.js b/deps/npm/node_modules/minimatch/dist/cjs/parse.js
deleted file mode 100644
index 2fff625bcb..0000000000
--- a/deps/npm/node_modules/minimatch/dist/cjs/parse.js
+++ /dev/null
@@ -1,650 +0,0 @@
-"use strict";
-// parse a single path portion
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.AST = void 0;
-const brace_expressions_1 = require("./brace-expressions");
-const types = new Set(['!', '?', '+', '*', '@']);
-const isExtglobType = (c) => types.has(c);
-// characters that indicate a start of pattern needs the "no dots" bit
-const addPatternStart = new Set(['[', '.']);
-const justDots = new Set(['..', '.']);
-const reSpecials = new Set('().*{}+?[]^$\\!');
-const regExpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
-// any single thing other than /
-// don't need to escape / when using new RegExp()
-const qmark = '[^/]';
-// * => any number of characters
-const star = qmark + '*?';
-class AST {
- type;
- #root;
- #parts = [];
- #parent;
- #parentIndex;
- #negs;
- #filledNegs = false;
- #options;
- constructor(type, parent, options = {}) {
- this.type = type;
- this.#parent = parent;
- this.#root = this.#parent ? this.#parent.#root : this;
- this.#options = this.#root === this ? options : this.#root.#options;
- this.#negs = this.#root === this ? [] : this.#root.#negs;
- if (type === '!' && !this.#root.#filledNegs)
- this.#negs.push(this);
- this.#parentIndex = this.#parent ? this.#parent.#parts.length : 0;
- }
- fillNegs() {
- if (this !== this.#root) {
- this.#root.fillNegs();
- return this;
- }
- if (this.#filledNegs)
- return this;
- this.#filledNegs = true;
- let n;
- while ((n = this.#negs.pop())) {
- if (n.type !== '!')
- continue;
- // walk up the tree, appending everthing that comes AFTER parentIndex
- let p = n;
- let pp = p.#parent;
- while (pp) {
- for (let i = p.#parentIndex + 1; !pp.type && i < pp.#parts.length; i++) {
- for (const part of n.#parts) {
- /* c8 ignore start */
- if (typeof part === 'string') {
- throw new Error('string part in extglob AST??');
- }
- /* c8 ignore stop */
- part.copyIn(pp.#parts[i]);
- }
- }
- p = pp;
- pp = p.#parent;
- }
- }
- return this;
- }
- push(...parts) {
- for (const p of parts) {
- if (p === '')
- continue;
- /* c8 ignore start */
- if (typeof p !== 'string' && !(p instanceof AST && p.#parent === this)) {
- throw new Error('invalid part: ' + p);
- }
- /* c8 ignore stop */
- this.#parts.push(p);
- }
- }
- toJSON() {
- const ret = this.type === null ? this.#parts.slice() : [this.type, ...this.#parts];
- if (this.isStart() && !this.type)
- ret.unshift([]);
- if (this.isEnd() &&
- (this === this.#root ||
- (this.#root.#filledNegs && this.#parent?.type === '!'))) {
- ret.push({});
- }
- return ret;
- }
- isStart() {
- if (this.#root === this)
- return true;
- // if (this.type) return !!this.#parent?.isStart()
- if (!this.#parent?.isStart())
- return false;
- return this.#parentIndex === 0;
- }
- isEnd() {
- if (this.#root === this)
- return true;
- if (this.#parent?.type === '!')
- return true;
- if (!this.#parent?.isEnd())
- return false;
- if (!this.type)
- return this.#parent?.isEnd();
- return (this.#parentIndex === (this.#parent ? this.#parent.#parts.length : 0) - 1);
- }
- copyIn(part) {
- if (typeof part === 'string')
- this.push(part);
- else
- this.push(part.clone(this));
- }
- clone(parent) {
- const c = new AST(this.type, parent);
- for (const p of this.#parts) {
- c.copyIn(p);
- }
- return c;
- }
- static #parseAST(str, ast, pos, opt) {
- let escaping = false;
- if (ast.type === null) {
- // outside of a extglob, append until we find a start
- let i = pos;
- let acc = '';
- while (i < str.length) {
- const c = str.charAt(i++);
- // still accumulate escapes at this point, but we do ignore
- // starts that are escaped
- if (escaping || c === '\\') {
- escaping = !escaping;
- acc += c;
- continue;
- }
- if (!opt.noext && isExtglobType(c) && str.charAt(i) === '(') {
- ast.push(acc);
- acc = '';
- const ext = new AST(c, ast);
- i = AST.#parseAST(str, ext, i, opt);
- ast.push(ext);
- continue;
- }
- acc += c;
- }
- ast.push(acc);
- return i;
- }
- // some kind of extglob, pos is at the (
- // find the next | or )
- let i = pos + 1;
- let part = new AST(null, ast);
- const parts = [];
- let acc = '';
- while (i < str.length) {
- const c = str.charAt(i++);
- // still accumulate escapes at this point, but we do ignore
- // starts that are escaped
- if (escaping || c === '\\') {
- escaping = !escaping;
- acc += c;
- continue;
- }
- if (isExtglobType(c) && str.charAt(i) === '(') {
- part.push(acc);
- acc = '';
- const ext = new AST(c, part);
- part.push(ext);
- i = AST.#parseAST(str, ext, i, opt);
- continue;
- }
- if (c === '|') {
- part.push(acc);
- acc = '';
- parts.push(part);
- part = new AST(null, ast);
- continue;
- }
- if (c === ')') {
- part.push(acc);
- acc = '';
- ast.push(...parts, part);
- return i;
- }
- acc += c;
- }
- // if we got here, it was a malformed extglob! not an extglob, but
- // maybe something else in there.
- ast.type = null;
- ast.#parts = [str.substring(pos)];
- return i;
- }
- static fromGlob(pattern, options = {}) {
- const ast = new AST(null, undefined, options);
- AST.#parseAST(pattern, ast, 0, options);
- console.log('parsed', pattern, JSON.stringify(ast));
- return ast;
- }
- toRegExpSource() {
- if (this.#root === this)
- this.fillNegs();
- if (!this.type) {
- const src = this.#parts
- .map(p => {
- if (typeof p === 'string')
- return AST.#parseGlob(p, this.#options);
- else
- return p.toRegExpSource();
- })
- .join('');
- let start = '';
- if (this.isStart() && typeof this.#parts[0] === 'string') {
- // '.' and '..' cannot match unless the pattern is that exactly
- const dotTravAllowed = this.#parts.length === 1 && justDots.has(this.#parts[0]);
- if (dotTravAllowed) {
- start = '(?:^|\\/)';
- }
- else {
- const dotsAllowed = this.#options.dot ||
- // no need to prevent dots if it can't match a dot, or if a sub-pattern
- // will be preventing it anyway.
- !addPatternStart.has(src.charAt(0));
- start = dotsAllowed ? '(?!(?:^|\\/)\\.{1,2}(?:$|\\/))' : '(?!\\.)';
- }
- }
- let end = '';
- if (this.isEnd() &&
- (this === this.#root ||
- (this.#root.#filledNegs && this.#parent?.type === '!'))) {
- end = '(?:$|\\/)';
- }
- return start + src + end;
- }
- // some kind of extglob
- const start = this.type === '!' ? '(?:(?!(?:' : '(?:';
- const body = this.#parts
- .map(p => {
- /* c8 ignore start */
- if (typeof p === 'string') {
- throw new Error('string type in extglob ast??');
- }
- /* c8 ignore stop */
- return p.toRegExpSource();
- })
- .join('|');
- const close = this.type === '!'
- ? '))[^/]*?)'
- : this.type === '@'
- ? ')'
- : `)${this.type}`;
- return start + body + close;
- }
- static #parseGlob(glob, options) {
- let escaping = false;
- let re = '';
- let uflag = false;
- let hasMagic = false;
- for (let i = 0; i < glob.length; i++) {
- const c = glob.charAt(i);
- if (escaping) {
- escaping = false;
- re += (reSpecials.has(c) ? '\\' : '') + c;
- continue;
- }
- if (c === '\\') {
- if (i === glob.length - 1) {
- re += '\\\\';
- }
- else {
- escaping = true;
- }
- continue;
- }
- if (c === '[') {
- const [src, needUflag, consumed, magic] = (0, brace_expressions_1.parseClass)(glob, i);
- if (consumed) {
- re += src;
- uflag = uflag || needUflag;
- i += consumed - 1;
- hasMagic = hasMagic || magic;
- continue;
- }
- }
- if (c === '*') {
- re += star;
- hasMagic = true;
- continue;
- }
- if (c === '?') {
- re += qmark;
- hasMagic = true;
- continue;
- }
- re += regExpEscape(c);
- }
- return re;
- }
-}
-exports.AST = AST;
-const pattern = 'a@(i|w!(x|y)z+(l|m)|j)';
-const ast = AST.fromGlob(pattern).fillNegs();
-console.log('negged', pattern, JSON.stringify(ast));
-console.log('to re src', pattern, ast.toRegExpSource());
-// // the type (exttype or null for strings), and array of children tokens
-//
-// // append everything after a negative extglob to each of the parts
-// // of the negative extglob node. So, eg, [a, [!, x, y], z]
-//
-// //
-// //
-// //
-// //
-//
-// const globUnescape = (s: string) => s.replace(/\\(.)/g, '$1')
-// const regExpEscape = (s: string) =>
-// s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&')
-//
-// // "abc" -> { a:true, b:true, c:true }
-// const charSet = (s: string) =>
-// s.split('').reduce((set: { [k: string]: boolean }, c) => {
-// set[c] = true
-// return set
-// }, {})
-//
-// // characters that need to be escaped in RegExp.
-// const reSpecials = charSet('().*{}+?[]^$\\!')
-//
-// // characters that indicate we have to add the pattern start
-// const addPatternStartSet = charSet('[.(')
-//
-// // any single thing other than /
-// // don't need to escape / when using new RegExp()
-// const qmark = '[^/]'
-//
-// // * => any number of characters
-// const star = qmark + '*?'
-//
-// // TODO: take an offset and length, so we can sub-parse the extglobs
-// const parse = (
-// options: MinimatchOptions,
-// pattern: string,
-// debug: (...a: any[]) => void
-// ): false | string => {
-// assertValidPattern(pattern)
-//
-// if (pattern === '') return ''
-//
-// let re = ''
-// let hasMagic = false
-// let escaping = false
-// // ? => one single character
-// let uflag = false
-//
-// // . and .. never match anything that doesn't start with .,
-// // even when options.dot is set. However, if the pattern
-// // starts with ., then traversal patterns can match.
-// let dotTravAllowed = pattern.charAt(0) === '.'
-// let dotFileAllowed = options.dot || dotTravAllowed
-// const patternStart = () =>
-// dotTravAllowed
-// ? ''
-// : dotFileAllowed
-// ? '(?!(?:^|\\/)\\.{1,2}(?:$|\\/))'
-// : '(?!\\.)'
-// const subPatternStart = (p: string) =>
-// p.charAt(0) === '.'
-// ? ''
-// : options.dot
-// ? '(?!(?:^|\\/)\\.{1,2}(?:$|\\/))'
-// : '(?!\\.)'
-//
-// const clearStateChar = () => {
-// if (stateChar) {
-// // we had some state-tracking character
-// // that wasn't consumed by this pass.
-// switch (stateChar) {
-// case '*':
-// re += star
-// hasMagic = true
-// break
-// case '?':
-// re += qmark
-// hasMagic = true
-// break
-// default:
-// re += '\\' + stateChar
-// break
-// }
-// debug('clearStateChar %j %j', stateChar, re)
-// stateChar = false
-// }
-// }
-//
-// for (
-// let i = 0, c: string;
-// i < pattern.length && (c = pattern.charAt(i));
-// i++
-// ) {
-// debug('%s\t%s %s %j', pattern, i, re, c)
-//
-// // skip over any that are escaped.
-// if (escaping) {
-// // completely not allowed, even escaped.
-// // should be impossible.
-// /* c8 ignore start */
-// if (c === '/') {
-// return false
-// }
-// /* c8 ignore stop */
-//
-// if (reSpecials[c]) {
-// re += '\\'
-// }
-// re += c
-// escaping = false
-// continue
-// }
-//
-// switch (c) {
-// // Should already be path-split by now.
-// /* c8 ignore start */
-// case '/': {
-// return false
-// }
-// /* c8 ignore stop */
-//
-// case '\\':
-// clearStateChar()
-// escaping = true
-// continue
-//
-// // the various stateChar values
-// // for the "extglob" stuff.
-// case '?':
-// case '*':
-// case '+':
-// case '@':
-// case '!':
-// debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c)
-//
-// // if we already have a stateChar, then it means
-// // that there was something like ** or +? in there.
-// // Handle the stateChar, then proceed with this one.
-// debug('call clearStateChar %j', stateChar)
-// clearStateChar()
-// stateChar = c
-// // if extglob is disabled, then +(asdf|foo) isn't a thing.
-// // just clear the statechar *now*, rather than even diving into
-// // the patternList stuff.
-// if (options.noext) clearStateChar()
-// continue
-//
-// case '(': {
-// if (!stateChar) {
-// re += '\\('
-// continue
-// }
-//
-// const plEntry: PatternListEntry = {
-// type: stateChar,
-// start: i - 1,
-// reStart: re.length,
-// open: plTypes[stateChar].open,
-// close: plTypes[stateChar].close,
-// }
-// debug(pattern, '\t', plEntry)
-// patternListStack.push(plEntry)
-// // negation is (?:(?!(?:js)(?:<rest>))[^/]*)
-// re += plEntry.open
-// // next entry starts with a dot maybe?
-// if (plEntry.start === 0 && plEntry.type !== '!') {
-// dotTravAllowed = true
-// re += subPatternStart(pattern.slice(i + 1))
-// }
-// debug('plType %j %j', stateChar, re)
-// stateChar = false
-// continue
-// }
-//
-// case ')': {
-// const plEntry = patternListStack[patternListStack.length - 1]
-// if (!plEntry) {
-// re += '\\)'
-// continue
-// }
-// patternListStack.pop()
-//
-// // closing an extglob
-// clearStateChar()
-// hasMagic = true
-// pl = plEntry
-// // negation is (?:(?!js)[^/]*)
-// // The others are (?:<pattern>)<type>
-// re += pl.close
-// if (pl.type === '!') {
-// negativeLists.push(Object.assign(pl, { reEnd: re.length }))
-// }
-// continue
-// }
-//
-// case '|': {
-// const plEntry = patternListStack[patternListStack.length - 1]
-// if (!plEntry) {
-// re += '\\|'
-// continue
-// }
-//
-// clearStateChar()
-// re += '|'
-// // next subpattern can start with a dot?
-// if (plEntry.start === 0 && plEntry.type !== '!') {
-// dotTravAllowed = true
-// re += subPatternStart(pattern.slice(i + 1))
-// }
-// continue
-// }
-//
-// // these are mostly the same in regexp and glob
-// case '[':
-// // swallow any state-tracking char before the [
-// clearStateChar()
-// const [src, needUflag, consumed, magic] = parseClass(pattern, i)
-// if (consumed) {
-// re += src
-// uflag = uflag || needUflag
-// i += consumed - 1
-// hasMagic = hasMagic || magic
-// } else {
-// re += '\\['
-// }
-// continue
-//
-// case ']':
-// re += '\\' + c
-// continue
-//
-// default:
-// // swallow any state char that wasn't consumed
-// clearStateChar()
-//
-// re += regExpEscape(c)
-// break
-// } // switch
-// } // for
-//
-// // handle the case where we had a +( thing at the *end*
-// // of the pattern.
-// // each pattern list stack adds 3 chars, and we need to go through
-// // and escape any | chars that were passed through as-is for the regexp.
-// // Go through and escape them, taking care not to double-escape any
-// // | chars that were already escaped.
-// for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {
-// let tail: string
-// tail = re.slice(pl.reStart + pl.open.length)
-// debug(pattern, 'setting tail', re, pl)
-// // maybe some even number of \, then maybe 1 \, followed by a |
-// tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, (_, $1, $2) => {
-// if (!$2) {
-// // the | isn't already escaped, so escape it.
-// $2 = '\\'
-// // should already be done
-// /* c8 ignore start */
-// }
-// /* c8 ignore stop */
-//
-// // need to escape all those slashes *again*, without escaping the
-// // one that we need for escaping the | character. As it works out,
-// // escaping an even number of slashes can be done by simply repeating
-// // it exactly after itself. That's why this trick works.
-// //
-// // I am sorry that you have to see this.
-// return $1 + $1 + $2 + '|'
-// })
-//
-// debug('tail=%j\n %s', tail, tail, pl, re)
-// const t = pl.type === '*' ? star : pl.type === '?' ? qmark : '\\' + pl.type
-//
-// hasMagic = true
-// re = re.slice(0, pl.reStart) + t + '\\(' + tail
-// }
-//
-// // handle trailing things that only matter at the very end.
-// clearStateChar()
-// if (escaping) {
-// // trailing \\
-// re += '\\\\'
-// }
-//
-// // only need to apply the nodot start if the re starts with
-// // something that could conceivably capture a dot
-// const addPatternStart = addPatternStartSet[re.charAt(0)]
-//
-// // Hack to work around lack of negative lookbehind in JS
-// // A pattern like: *.!(x).!(y|z) needs to ensure that a name
-// // like 'a.xyz.yz' doesn't match. So, the first negative
-// // lookahead, has to look ALL the way ahead, to the end of
-// // the pattern.
-// for (let n = negativeLists.length - 1; n > -1; n--) {
-// const nl = negativeLists[n]
-//
-// const nlBefore = re.slice(0, nl.reStart)
-// const nlFirst = re.slice(nl.reStart, nl.reEnd - 8)
-// let nlAfter = re.slice(nl.reEnd)
-// const nlLast = re.slice(nl.reEnd - 8, nl.reEnd) + nlAfter
-//
-// // Handle nested stuff like *(*.js|!(*.json)), where open parens
-// // mean that we should *not* include the ) in the bit that is considered
-// // "after" the negated section.
-// const closeParensBefore = nlBefore.split(')').length
-// const openParensBefore = nlBefore.split('(').length - closeParensBefore
-// let cleanAfter = nlAfter
-// for (let i = 0; i < openParensBefore; i++) {
-// cleanAfter = cleanAfter.replace(/\)[+*?]?/, '')
-// }
-// nlAfter = cleanAfter
-//
-// const dollar = nlAfter === '' ? '(?:$|\\/)' : ''
-//
-// re = nlBefore + nlFirst + nlAfter + dollar + nlLast
-// }
-//
-// // if the re is not "" at this point, then we need to make sure
-// // it doesn't match against an empty path part.
-// // Otherwise a/* will match a/, which it should not.
-// if (re !== '' && hasMagic) {
-// re = '(?=.)' + re
-// }
-//
-// if (addPatternStart) {
-// re = patternStart() + re
-// }
-//
-// // if it's nocase, and the lcase/uppercase don't match, it's magic
-// if (options.nocase && !hasMagic && !options.nocaseMagicOnly) {
-// hasMagic = pattern.toUpperCase() !== pattern.toLowerCase()
-// }
-//
-// // skip the regexp for non-magical patterns
-// // unescape anything in it, though, so that it'll be
-// // an exact match against a file etc.
-// if (!hasMagic) {
-// return globUnescape(re)
-// }
-//
-// return re
-// }
-//# sourceMappingURL=parse.js.map \ No newline at end of file
diff --git a/deps/npm/node_modules/minimatch/dist/mjs/_parse.js b/deps/npm/node_modules/minimatch/dist/mjs/_parse.js
deleted file mode 100644
index db6a28ab08..0000000000
--- a/deps/npm/node_modules/minimatch/dist/mjs/_parse.js
+++ /dev/null
@@ -1,296 +0,0 @@
-// parse a single path portion
-import { parseClass } from './brace-expressions.js';
-import { assertValidPattern } from './assert-valid-pattern.js';
-const globUnescape = (s) => s.replace(/\\(.)/g, '$1');
-const regExpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
-// "abc" -> { a:true, b:true, c:true }
-const charSet = (s) => s.split('').reduce((set, c) => {
- set[c] = true;
- return set;
-}, {});
-const plTypes = {
- '!': { open: '(?:(?!(?:', close: '))[^/]*?)' },
- '?': { open: '(?:', close: ')?' },
- '+': { open: '(?:', close: ')+' },
- '*': { open: '(?:', close: ')*' },
- '@': { open: '(?:', close: ')' },
-};
-// characters that need to be escaped in RegExp.
-const reSpecials = charSet('().*{}+?[]^$\\!');
-// characters that indicate we have to add the pattern start
-const addPatternStartSet = charSet('[.(');
-// any single thing other than /
-// don't need to escape / when using new RegExp()
-const qmark = '[^/]';
-// * => any number of characters
-const star = qmark + '*?';
-// TODO: take an offset and length, so we can sub-parse the extglobs
-export const parse = (options, pattern, debug) => {
- assertValidPattern(pattern);
- if (pattern === '')
- return '';
- let re = '';
- let hasMagic = false;
- let escaping = false;
- // ? => one single character
- const patternListStack = [];
- const negativeLists = [];
- let stateChar = false;
- let uflag = false;
- let pl;
- // . and .. never match anything that doesn't start with .,
- // even when options.dot is set. However, if the pattern
- // starts with ., then traversal patterns can match.
- let dotTravAllowed = pattern.charAt(0) === '.';
- let dotFileAllowed = options.dot || dotTravAllowed;
- const patternStart = () => dotTravAllowed
- ? ''
- : dotFileAllowed
- ? '(?!(?:^|\\/)\\.{1,2}(?:$|\\/))'
- : '(?!\\.)';
- const subPatternStart = (p) => p.charAt(0) === '.'
- ? ''
- : options.dot
- ? '(?!(?:^|\\/)\\.{1,2}(?:$|\\/))'
- : '(?!\\.)';
- const clearStateChar = () => {
- if (stateChar) {
- // we had some state-tracking character
- // that wasn't consumed by this pass.
- switch (stateChar) {
- case '*':
- re += star;
- hasMagic = true;
- break;
- case '?':
- re += qmark;
- hasMagic = true;
- break;
- default:
- re += '\\' + stateChar;
- break;
- }
- debug('clearStateChar %j %j', stateChar, re);
- stateChar = false;
- }
- };
- for (let i = 0, c; i < pattern.length && (c = pattern.charAt(i)); i++) {
- debug('%s\t%s %s %j', pattern, i, re, c);
- // skip over any that are escaped.
- if (escaping) {
- // completely not allowed, even escaped.
- // should be impossible.
- /* c8 ignore start */
- if (c === '/') {
- return false;
- }
- /* c8 ignore stop */
- if (reSpecials[c]) {
- re += '\\';
- }
- re += c;
- escaping = false;
- continue;
- }
- switch (c) {
- // Should already be path-split by now.
- /* c8 ignore start */
- case '/': {
- return false;
- }
- /* c8 ignore stop */
- case '\\':
- clearStateChar();
- escaping = true;
- continue;
- // the various stateChar values
- // for the "extglob" stuff.
- case '?':
- case '*':
- case '+':
- case '@':
- case '!':
- debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c);
- // if we already have a stateChar, then it means
- // that there was something like ** or +? in there.
- // Handle the stateChar, then proceed with this one.
- debug('call clearStateChar %j', stateChar);
- clearStateChar();
- stateChar = c;
- // if extglob is disabled, then +(asdf|foo) isn't a thing.
- // just clear the statechar *now*, rather than even diving into
- // the patternList stuff.
- if (options.noext)
- clearStateChar();
- continue;
- case '(': {
- if (!stateChar) {
- re += '\\(';
- continue;
- }
- const plEntry = {
- type: stateChar,
- start: i - 1,
- reStart: re.length,
- open: plTypes[stateChar].open,
- close: plTypes[stateChar].close,
- };
- debug(pattern, '\t', plEntry);
- patternListStack.push(plEntry);
- // negation is (?:(?!(?:js)(?:<rest>))[^/]*)
- re += plEntry.open;
- // next entry starts with a dot maybe?
- if (plEntry.start === 0 && plEntry.type !== '!') {
- dotTravAllowed = true;
- re += subPatternStart(pattern.slice(i + 1));
- }
- debug('plType %j %j', stateChar, re);
- stateChar = false;
- continue;
- }
- case ')': {
- const plEntry = patternListStack[patternListStack.length - 1];
- if (!plEntry) {
- re += '\\)';
- continue;
- }
- patternListStack.pop();
- // closing an extglob
- clearStateChar();
- hasMagic = true;
- pl = plEntry;
- // negation is (?:(?!js)[^/]*)
- // The others are (?:<pattern>)<type>
- re += pl.close;
- if (pl.type === '!') {
- negativeLists.push(Object.assign(pl, { reEnd: re.length }));
- }
- continue;
- }
- case '|': {
- const plEntry = patternListStack[patternListStack.length - 1];
- if (!plEntry) {
- re += '\\|';
- continue;
- }
- clearStateChar();
- re += '|';
- // next subpattern can start with a dot?
- if (plEntry.start === 0 && plEntry.type !== '!') {
- dotTravAllowed = true;
- re += subPatternStart(pattern.slice(i + 1));
- }
- continue;
- }
- // these are mostly the same in regexp and glob
- case '[':
- // swallow any state-tracking char before the [
- clearStateChar();
- const [src, needUflag, consumed, magic] = parseClass(pattern, i);
- if (consumed) {
- re += src;
- uflag = uflag || needUflag;
- i += consumed - 1;
- hasMagic = hasMagic || magic;
- }
- else {
- re += '\\[';
- }
- continue;
- case ']':
- re += '\\' + c;
- continue;
- default:
- // swallow any state char that wasn't consumed
- clearStateChar();
- re += regExpEscape(c);
- break;
- } // switch
- } // for
- // handle the case where we had a +( thing at the *end*
- // of the pattern.
- // each pattern list stack adds 3 chars, and we need to go through
- // and escape any | chars that were passed through as-is for the regexp.
- // Go through and escape them, taking care not to double-escape any
- // | chars that were already escaped.
- for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {
- let tail;
- tail = re.slice(pl.reStart + pl.open.length);
- debug(pattern, 'setting tail', re, pl);
- // maybe some even number of \, then maybe 1 \, followed by a |
- tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, (_, $1, $2) => {
- if (!$2) {
- // the | isn't already escaped, so escape it.
- $2 = '\\';
- // should already be done
- /* c8 ignore start */
- }
- /* c8 ignore stop */
- // need to escape all those slashes *again*, without escaping the
- // one that we need for escaping the | character. As it works out,
- // escaping an even number of slashes can be done by simply repeating
- // it exactly after itself. That's why this trick works.
- //
- // I am sorry that you have to see this.
- return $1 + $1 + $2 + '|';
- });
- debug('tail=%j\n %s', tail, tail, pl, re);
- const t = pl.type === '*' ? star : pl.type === '?' ? qmark : '\\' + pl.type;
- hasMagic = true;
- re = re.slice(0, pl.reStart) + t + '\\(' + tail;
- }
- // handle trailing things that only matter at the very end.
- clearStateChar();
- if (escaping) {
- // trailing \\
- re += '\\\\';
- }
- // only need to apply the nodot start if the re starts with
- // something that could conceivably capture a dot
- const addPatternStart = addPatternStartSet[re.charAt(0)];
- // Hack to work around lack of negative lookbehind in JS
- // A pattern like: *.!(x).!(y|z) needs to ensure that a name
- // like 'a.xyz.yz' doesn't match. So, the first negative
- // lookahead, has to look ALL the way ahead, to the end of
- // the pattern.
- for (let n = negativeLists.length - 1; n > -1; n--) {
- const nl = negativeLists[n];
- const nlBefore = re.slice(0, nl.reStart);
- const nlFirst = re.slice(nl.reStart, nl.reEnd - 8);
- let nlAfter = re.slice(nl.reEnd);
- const nlLast = re.slice(nl.reEnd - 8, nl.reEnd) + nlAfter;
- // Handle nested stuff like *(*.js|!(*.json)), where open parens
- // mean that we should *not* include the ) in the bit that is considered
- // "after" the negated section.
- const closeParensBefore = nlBefore.split(')').length;
- const openParensBefore = nlBefore.split('(').length - closeParensBefore;
- let cleanAfter = nlAfter;
- for (let i = 0; i < openParensBefore; i++) {
- cleanAfter = cleanAfter.replace(/\)[+*?]?/, '');
- }
- nlAfter = cleanAfter;
- const dollar = nlAfter === '' ? '(?:$|\\/)' : '';
- re = nlBefore + nlFirst + nlAfter + dollar + nlLast;
- }
- // if the re is not "" at this point, then we need to make sure
- // it doesn't match against an empty path part.
- // Otherwise a/* will match a/, which it should not.
- if (re !== '' && hasMagic) {
- re = '(?=.)' + re;
- }
- if (addPatternStart) {
- re = patternStart() + re;
- }
- // if it's nocase, and the lcase/uppercase don't match, it's magic
- if (options.nocase && !hasMagic && !options.nocaseMagicOnly) {
- hasMagic = pattern.toUpperCase() !== pattern.toLowerCase();
- }
- // skip the regexp for non-magical patterns
- // unescape anything in it, though, so that it'll be
- // an exact match against a file etc.
- if (!hasMagic) {
- return globUnescape(re);
- }
- return re;
-};
-//# sourceMappingURL=_parse.js.map \ No newline at end of file
diff --git a/deps/npm/node_modules/minimatch/dist/mjs/ast.js b/deps/npm/node_modules/minimatch/dist/mjs/ast.js
new file mode 100644
index 0000000000..9836fe7b1d
--- /dev/null
+++ b/deps/npm/node_modules/minimatch/dist/mjs/ast.js
@@ -0,0 +1,562 @@
+// parse a single path portion
+import { parseClass } from './brace-expressions.js';
+import { unescape } from './unescape.js';
+const types = new Set(['!', '?', '+', '*', '@']);
+const isExtglobType = (c) => types.has(c);
+// Patterns that get prepended to bind to the start of either the
+// entire string, or just a single path portion, to prevent dots
+// and/or traversal patterns, when needed.
+// Exts don't need the ^ or / bit, because the root binds that already.
+const startNoTraversal = '(?!\\.\\.?(?:$|/))';
+const startNoDot = '(?!\\.)';
+// characters that indicate a start of pattern needs the "no dots" bit,
+// because a dot *might* be matched. ( is not in the list, because in
+// the case of a child extglob, it will handle the prevention itself.
+const addPatternStart = new Set(['[', '.']);
+// cases where traversal is A-OK, no dot prevention needed
+const justDots = new Set(['..', '.']);
+const reSpecials = new Set('().*{}+?[]^$\\!');
+const regExpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
+// any single thing other than /
+const qmark = '[^/]';
+// * => any number of characters
+const star = qmark + '*?';
+// use + when we need to ensure that *something* matches, because the * is
+// the only thing in the path portion.
+const starNoEmpty = qmark + '+?';
+// remove the \ chars that we added if we end up doing a nonmagic compare
+// const deslash = (s: string) => s.replace(/\\(.)/g, '$1')
+export class AST {
+ type;
+ #root;
+ #hasMagic;
+ #uflag = false;
+ #parts = [];
+ #parent;
+ #parentIndex;
+ #negs;
+ #filledNegs = false;
+ #options;
+ #toString;
+ // set to true if it's an extglob with no children
+ // (which really means one child of '')
+ #emptyExt = false;
+ constructor(type, parent, options = {}) {
+ this.type = type;
+ // extglobs are inherently magical
+ if (type)
+ this.#hasMagic = true;
+ this.#parent = parent;
+ this.#root = this.#parent ? this.#parent.#root : this;
+ this.#options = this.#root === this ? options : this.#root.#options;
+ this.#negs = this.#root === this ? [] : this.#root.#negs;
+ if (type === '!' && !this.#root.#filledNegs)
+ this.#negs.push(this);
+ this.#parentIndex = this.#parent ? this.#parent.#parts.length : 0;
+ }
+ get hasMagic() {
+ /* c8 ignore start */
+ if (this.#hasMagic !== undefined)
+ return this.#hasMagic;
+ /* c8 ignore stop */
+ for (const p of this.#parts) {
+ if (typeof p === 'string')
+ continue;
+ if (p.type || p.hasMagic)
+ return (this.#hasMagic = true);
+ }
+ // note: will be undefined until we generate the regexp src and find out
+ return this.#hasMagic;
+ }
+ // reconstructs the pattern
+ toString() {
+ if (this.#toString !== undefined)
+ return this.#toString;
+ if (!this.type) {
+ return (this.#toString = this.#parts.map(p => String(p)).join(''));
+ }
+ else {
+ return (this.#toString =
+ this.type + '(' + this.#parts.map(p => String(p)).join('|') + ')');
+ }
+ }
+ #fillNegs() {
+ /* c8 ignore start */
+ if (this !== this.#root)
+ throw new Error('should only call on root');
+ if (this.#filledNegs)
+ return this;
+ /* c8 ignore stop */
+ // call toString() once to fill this out
+ this.toString();
+ this.#filledNegs = true;
+ let n;
+ while ((n = this.#negs.pop())) {
+ if (n.type !== '!')
+ continue;
+ // walk up the tree, appending everthing that comes AFTER parentIndex
+ let p = n;
+ let pp = p.#parent;
+ while (pp) {
+ for (let i = p.#parentIndex + 1; !pp.type && i < pp.#parts.length; i++) {
+ for (const part of n.#parts) {
+ /* c8 ignore start */
+ if (typeof part === 'string') {
+ throw new Error('string part in extglob AST??');
+ }
+ /* c8 ignore stop */
+ part.copyIn(pp.#parts[i]);
+ }
+ }
+ p = pp;
+ pp = p.#parent;
+ }
+ }
+ return this;
+ }
+ push(...parts) {
+ for (const p of parts) {
+ if (p === '')
+ continue;
+ /* c8 ignore start */
+ if (typeof p !== 'string' && !(p instanceof AST && p.#parent === this)) {
+ throw new Error('invalid part: ' + p);
+ }
+ /* c8 ignore stop */
+ this.#parts.push(p);
+ }
+ }
+ toJSON() {
+ const ret = this.type === null
+ ? this.#parts.slice().map(p => (typeof p === 'string' ? p : p.toJSON()))
+ : [this.type, ...this.#parts.map(p => p.toJSON())];
+ if (this.isStart() && !this.type)
+ ret.unshift([]);
+ if (this.isEnd() &&
+ (this === this.#root ||
+ (this.#root.#filledNegs && this.#parent?.type === '!'))) {
+ ret.push({});
+ }
+ return ret;
+ }
+ isStart() {
+ if (this.#root === this)
+ return true;
+ // if (this.type) return !!this.#parent?.isStart()
+ if (!this.#parent?.isStart())
+ return false;
+ if (this.#parentIndex === 0)
+ return true;
+ // if everything AHEAD of this is a negation, then it's still the "start"
+ const p = this.#parent;
+ for (let i = 0; i < this.#parentIndex; i++) {
+ const pp = p.#parts[i];
+ if (!(pp instanceof AST && pp.type === '!')) {
+ return false;
+ }
+ }
+ return true;
+ }
+ isEnd() {
+ if (this.#root === this)
+ return true;
+ if (this.#parent?.type === '!')
+ return true;
+ if (!this.#parent?.isEnd())
+ return false;
+ if (!this.type)
+ return this.#parent?.isEnd();
+ // if not root, it'll always have a parent
+ /* c8 ignore start */
+ const pl = this.#parent ? this.#parent.#parts.length : 0;
+ /* c8 ignore stop */
+ return this.#parentIndex === pl - 1;
+ }
+ copyIn(part) {
+ if (typeof part === 'string')
+ this.push(part);
+ else
+ this.push(part.clone(this));
+ }
+ clone(parent) {
+ const c = new AST(this.type, parent);
+ for (const p of this.#parts) {
+ c.copyIn(p);
+ }
+ return c;
+ }
+ static #parseAST(str, ast, pos, opt) {
+ let escaping = false;
+ let inBrace = false;
+ let braceStart = -1;
+ let braceNeg = false;
+ if (ast.type === null) {
+ // outside of a extglob, append until we find a start
+ let i = pos;
+ let acc = '';
+ while (i < str.length) {
+ const c = str.charAt(i++);
+ // still accumulate escapes at this point, but we do ignore
+ // starts that are escaped
+ if (escaping || c === '\\') {
+ escaping = !escaping;
+ acc += c;
+ continue;
+ }
+ if (inBrace) {
+ if (i === braceStart + 1) {
+ if (c === '^' || c === '!') {
+ braceNeg = true;
+ }
+ }
+ else if (c === ']' && !(i === braceStart + 2 && braceNeg)) {
+ inBrace = false;
+ }
+ acc += c;
+ continue;
+ }
+ else if (c === '[') {
+ inBrace = true;
+ braceStart = i;
+ braceNeg = false;
+ acc += c;
+ continue;
+ }
+ if (!opt.noext && isExtglobType(c) && str.charAt(i) === '(') {
+ ast.push(acc);
+ acc = '';
+ const ext = new AST(c, ast);
+ i = AST.#parseAST(str, ext, i, opt);
+ ast.push(ext);
+ continue;
+ }
+ acc += c;
+ }
+ ast.push(acc);
+ return i;
+ }
+ // some kind of extglob, pos is at the (
+ // find the next | or )
+ let i = pos + 1;
+ let part = new AST(null, ast);
+ const parts = [];
+ let acc = '';
+ while (i < str.length) {
+ const c = str.charAt(i++);
+ // still accumulate escapes at this point, but we do ignore
+ // starts that are escaped
+ if (escaping || c === '\\') {
+ escaping = !escaping;
+ acc += c;
+ continue;
+ }
+ if (inBrace) {
+ if (i === braceStart + 1) {
+ if (c === '^' || c === '!') {
+ braceNeg = true;
+ }
+ }
+ else if (c === ']' && !(i === braceStart + 2 && braceNeg)) {
+ inBrace = false;
+ }
+ acc += c;
+ continue;
+ }
+ else if (c === '[') {
+ inBrace = true;
+ braceStart = i;
+ braceNeg = false;
+ acc += c;
+ continue;
+ }
+ if (isExtglobType(c) && str.charAt(i) === '(') {
+ part.push(acc);
+ acc = '';
+ const ext = new AST(c, part);
+ part.push(ext);
+ i = AST.#parseAST(str, ext, i, opt);
+ continue;
+ }
+ if (c === '|') {
+ part.push(acc);
+ acc = '';
+ parts.push(part);
+ part = new AST(null, ast);
+ continue;
+ }
+ if (c === ')') {
+ if (acc === '' && ast.#parts.length === 0) {
+ ast.#emptyExt = true;
+ }
+ part.push(acc);
+ acc = '';
+ ast.push(...parts, part);
+ return i;
+ }
+ acc += c;
+ }
+ // unfinished extglob
+ // if we got here, it was a malformed extglob! not an extglob, but
+ // maybe something else in there.
+ ast.type = null;
+ ast.#hasMagic = undefined;
+ ast.#parts = [str.substring(pos - 1)];
+ return i;
+ }
+ static fromGlob(pattern, options = {}) {
+ const ast = new AST(null, undefined, options);
+ AST.#parseAST(pattern, ast, 0, options);
+ return ast;
+ }
+ // returns the regular expression if there's magic, or the unescaped
+ // string if not.
+ toMMPattern() {
+ // should only be called on root
+ /* c8 ignore start */
+ if (this !== this.#root)
+ return this.#root.toMMPattern();
+ /* c8 ignore stop */
+ const glob = this.toString();
+ const [re, body, hasMagic, uflag] = this.toRegExpSource();
+ // if we're in nocase mode, and not nocaseMagicOnly, then we do
+ // still need a regular expression if we have to case-insensitively
+ // match capital/lowercase characters.
+ const anyMagic = hasMagic ||
+ this.#hasMagic ||
+ (this.#options.nocase &&
+ !this.#options.nocaseMagicOnly &&
+ glob.toUpperCase() !== glob.toLowerCase());
+ if (!anyMagic) {
+ return body;
+ }
+ const flags = (this.#options.nocase ? 'i' : '') + (uflag ? 'u' : '');
+ return Object.assign(new RegExp(`^${re}$`, flags), {
+ _src: re,
+ _glob: glob,
+ });
+ }
+ // returns the string match, the regexp source, whether there's magic
+ // in the regexp (so a regular expression is required) and whether or
+ // not the uflag is needed for the regular expression (for posix classes)
+ // TODO: instead of injecting the start/end at this point, just return
+ // the BODY of the regexp, along with the start/end portions suitable
+ // for binding the start/end in either a joined full-path makeRe context
+ // (where we bind to (^|/), or a standalone matchPart context (where
+ // we bind to ^, and not /). Otherwise slashes get duped!
+ //
+ // In part-matching mode, the start is:
+ // - if not isStart: nothing
+ // - if traversal possible, but not allowed: ^(?!\.\.?$)
+ // - if dots allowed or not possible: ^
+ // - if dots possible and not allowed: ^(?!\.)
+ // end is:
+ // - if not isEnd(): nothing
+ // - else: $
+ //
+ // In full-path matching mode, we put the slash at the START of the
+ // pattern, so start is:
+ // - if first pattern: same as part-matching mode
+ // - if not isStart(): nothing
+ // - if traversal possible, but not allowed: /(?!\.\.?(?:$|/))
+ // - if dots allowed or not possible: /
+ // - if dots possible and not allowed: /(?!\.)
+ // end is:
+ // - if last pattern, same as part-matching mode
+ // - else nothing
+ //
+ // Always put the (?:$|/) on negated tails, though, because that has to be
+ // there to bind the end of the negated pattern portion, and it's easier to
+ // just stick it in now rather than try to inject it later in the middle of
+ // the pattern.
+ //
+ // We can just always return the same end, and leave it up to the caller
+ // to know whether it's going to be used joined or in parts.
+ // And, if the start is adjusted slightly, can do the same there:
+ // - if not isStart: nothing
+ // - if traversal possible, but not allowed: (?:/|^)(?!\.\.?$)
+ // - if dots allowed or not possible: (?:/|^)
+ // - if dots possible and not allowed: (?:/|^)(?!\.)
+ //
+ // But it's better to have a simpler binding without a conditional, for
+ // performance, so probably better to return both start options.
+ //
+ // Then the caller just ignores the end if it's not the first pattern,
+ // and the start always gets applied.
+ //
+ // But that's always going to be $ if it's the ending pattern, or nothing,
+ // so the caller can just attach $ at the end of the pattern when building.
+ //
+ // So the todo is:
+ // - better detect what kind of start is needed
+ // - return both flavors of starting pattern
+ // - attach $ at the end of the pattern when creating the actual RegExp
+ //
+ // Ah, but wait, no, that all only applies to the root when the first pattern
+ // is not an extglob. If the first pattern IS an extglob, then we need all
+ // that dot prevention biz to live in the extglob portions, because eg
+ // +(*|.x*) can match .xy but not .yx.
+ //
+ // So, return the two flavors if it's #root and the first child is not an
+ // AST, otherwise leave it to the child AST to handle it, and there,
+ // use the (?:^|/) style of start binding.
+ //
+ // Even simplified further:
+ // - Since the start for a join is eg /(?!\.) and the start for a part
+ // is ^(?!\.), we can just prepend (?!\.) to the pattern (either root
+ // or start or whatever) and prepend ^ or / at the Regexp construction.
+ toRegExpSource() {
+ if (this.#root === this)
+ this.#fillNegs();
+ if (!this.type) {
+ const noEmpty = this.isStart() && this.isEnd();
+ const src = this.#parts
+ .map(p => {
+ const [re, _, hasMagic, uflag] = typeof p === 'string'
+ ? AST.#parseGlob(p, this.#hasMagic, noEmpty)
+ : p.toRegExpSource();
+ this.#hasMagic = this.#hasMagic || hasMagic;
+ this.#uflag = this.#uflag || uflag;
+ return re;
+ })
+ .join('');
+ let start = '';
+ if (this.isStart()) {
+ if (typeof this.#parts[0] === 'string') {
+ // this is the string that will match the start of the pattern,
+ // so we need to protect against dots and such.
+ // '.' and '..' cannot match unless the pattern is that exactly,
+ // even if it starts with . or dot:true is set.
+ const dotTravAllowed = this.#parts.length === 1 && justDots.has(this.#parts[0]);
+ if (!dotTravAllowed) {
+ const aps = addPatternStart;
+ // check if we have a possibility of matching . or ..,
+ // and prevent that.
+ const needNoTrav =
+ // dots are allowed, and the pattern starts with [ or .
+ (this.#options.dot && aps.has(src.charAt(0))) ||
+ // the pattern starts with \., and then [ or .
+ (src.startsWith('\\.') && aps.has(src.charAt(2))) ||
+ // the pattern starts with \.\., and then [ or .
+ (src.startsWith('\\.\\.') && aps.has(src.charAt(4)));
+ // no need to prevent dots if it can't match a dot, or if a
+ // sub-pattern will be preventing it anyway.
+ const needNoDot = !this.#options.dot && aps.has(src.charAt(0));
+ start = needNoTrav ? startNoTraversal : needNoDot ? startNoDot : '';
+ }
+ }
+ }
+ // append the "end of path portion" pattern to negation tails
+ let end = '';
+ if (this.isEnd() &&
+ this.#root.#filledNegs &&
+ this.#parent?.type === '!') {
+ end = '(?:$|\\/)';
+ }
+ const final = start + src + end;
+ return [
+ final,
+ unescape(src),
+ (this.#hasMagic = !!this.#hasMagic),
+ this.#uflag,
+ ];
+ }
+ // some kind of extglob
+ const start = this.type === '!' ? '(?:(?!(?:' : '(?:';
+ const body = this.#parts
+ .map(p => {
+ // extglob ASTs should only contain parent ASTs
+ /* c8 ignore start */
+ if (typeof p === 'string') {
+ throw new Error('string type in extglob ast??');
+ }
+ /* c8 ignore stop */
+ // can ignore hasMagic, because extglobs are already always magic
+ const [re, _, _hasMagic, uflag] = p.toRegExpSource();
+ this.#uflag = this.#uflag || uflag;
+ return re;
+ })
+ .filter(p => !(this.isStart() && this.isEnd()) || !!p)
+ .join('|');
+ if (this.isStart() && this.isEnd() && !body && this.type !== '!') {
+ // invalid extglob, has to at least be *something* present, if it's
+ // the entire path portion.
+ const s = this.toString();
+ this.#parts = [s];
+ this.type = null;
+ this.#hasMagic = undefined;
+ return [s, unescape(this.toString()), false, false];
+ }
+ // an empty !() is exactly equivalent to a starNoEmpty
+ let final = '';
+ if (this.type === '!' && this.#emptyExt) {
+ final =
+ (this.isStart() && !this.#options.dot ? startNoDot : '') + starNoEmpty;
+ }
+ else {
+ const close = this.type === '!'
+ ? // !() must match something,but !(x) can match ''
+ '))' +
+ (this.isStart() && !this.#options.dot ? startNoDot : '') +
+ star +
+ ')'
+ : this.type === '@'
+ ? ')'
+ : `)${this.type}`;
+ final = start + body + close;
+ }
+ return [
+ final,
+ unescape(body),
+ (this.#hasMagic = !!this.#hasMagic),
+ this.#uflag,
+ ];
+ }
+ static #parseGlob(glob, hasMagic, noEmpty = false) {
+ let escaping = false;
+ let re = '';
+ let uflag = false;
+ for (let i = 0; i < glob.length; i++) {
+ const c = glob.charAt(i);
+ if (escaping) {
+ escaping = false;
+ re += (reSpecials.has(c) ? '\\' : '') + c;
+ continue;
+ }
+ if (c === '\\') {
+ if (i === glob.length - 1) {
+ re += '\\\\';
+ }
+ else {
+ escaping = true;
+ }
+ continue;
+ }
+ if (c === '[') {
+ const [src, needUflag, consumed, magic] = parseClass(glob, i);
+ if (consumed) {
+ re += src;
+ uflag = uflag || needUflag;
+ i += consumed - 1;
+ hasMagic = hasMagic || magic;
+ continue;
+ }
+ }
+ if (c === '*') {
+ if (noEmpty && glob === '*')
+ re += starNoEmpty;
+ else
+ re += star;
+ hasMagic = true;
+ continue;
+ }
+ if (c === '?') {
+ re += qmark;
+ hasMagic = true;
+ continue;
+ }
+ re += regExpEscape(c);
+ }
+ return [re, unescape(glob), !!hasMagic, uflag];
+ }
+}
+//# sourceMappingURL=ast.js.map \ No newline at end of file
diff --git a/deps/npm/node_modules/minimatch/dist/mjs/extglob.js b/deps/npm/node_modules/minimatch/dist/mjs/extglob.js
deleted file mode 100644
index 4033f4d60e..0000000000
--- a/deps/npm/node_modules/minimatch/dist/mjs/extglob.js
+++ /dev/null
@@ -1,3 +0,0 @@
-// translate an extglob into a regular expression
-export {};
-//# sourceMappingURL=extglob.js.map \ No newline at end of file
diff --git a/deps/npm/node_modules/minimatch/dist/mjs/index.js b/deps/npm/node_modules/minimatch/dist/mjs/index.js
index 34d53abafc..0d5e956be8 100644
--- a/deps/npm/node_modules/minimatch/dist/mjs/index.js
+++ b/deps/npm/node_modules/minimatch/dist/mjs/index.js
@@ -1,5 +1,6 @@
import expand from 'brace-expansion';
-import { parseClass } from './brace-expressions.js';
+import { assertValidPattern } from './assert-valid-pattern.js';
+import { AST } from './ast.js';
import { escape } from './escape.js';
import { unescape } from './unescape.js';
export const minimatch = (p, pattern, options = {}) => {
@@ -10,7 +11,6 @@ export const minimatch = (p, pattern, options = {}) => {
}
return new Minimatch(pattern, options).match(p);
};
-export default minimatch;
// Optimized checking for the most common glob patterns.
const starDotExtRE = /^\*+([^+@!?\*\[\(]*)$/;
const starDotExtTest = (ext) => (f) => !f.startsWith('.') && f.endsWith(ext);
@@ -78,13 +78,6 @@ export const sep = defaultPlatform === 'win32' ? path.win32.sep : path.posix.sep
minimatch.sep = sep;
export const GLOBSTAR = Symbol('globstar **');
minimatch.GLOBSTAR = GLOBSTAR;
-const plTypes = {
- '!': { open: '(?:(?!(?:', close: '))[^/]*?)' },
- '?': { open: '(?:', close: ')?' },
- '+': { open: '(?:', close: ')+' },
- '*': { open: '(?:', close: ')*' },
- '@': { open: '(?:', close: ')' },
-};
// any single thing other than /
// don't need to escape / when using new RegExp()
const qmark = '[^/]';
@@ -97,15 +90,6 @@ const twoStarDot = '(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?';
// not a ^ or / followed by a dot,
// followed by anything, any number of times.
const twoStarNoDot = '(?:(?!(?:\\/|^)\\.).)*?';
-// "abc" -> { a:true, b:true, c:true }
-const charSet = (s) => s.split('').reduce((set, c) => {
- set[c] = true;
- return set;
-}, {});
-// characters that need to be escaped in RegExp.
-const reSpecials = charSet('().*{}+?[]^$\\!');
-// characters that indicate we have to add the pattern start
-const addPatternStartSet = charSet('[.(');
export const filter = (pattern, options = {}) => (p) => minimatch(p, pattern, options);
minimatch.filter = filter;
const ext = (a, b = {}) => Object.assign({}, a, b);
@@ -124,6 +108,16 @@ export const defaults = (def) => {
return orig.defaults(ext(def, options)).Minimatch;
}
},
+ AST: class AST extends orig.AST {
+ /* c8 ignore start */
+ constructor(type, parent, options = {}) {
+ super(type, parent, ext(def, options));
+ }
+ /* c8 ignore stop */
+ static fromGlob(pattern, options = {}) {
+ return orig.AST.fromGlob(pattern, ext(def, options));
+ }
+ },
unescape: (s, options = {}) => orig.unescape(s, ext(def, options)),
escape: (s, options = {}) => orig.escape(s, ext(def, options)),
filter: (pattern, options = {}) => orig.filter(pattern, ext(def, options)),
@@ -157,15 +151,6 @@ export const braceExpand = (pattern, options = {}) => {
return expand(pattern);
};
minimatch.braceExpand = braceExpand;
-const MAX_PATTERN_LENGTH = 1024 * 64;
-const assertValidPattern = (pattern) => {
- if (typeof pattern !== 'string') {
- throw new TypeError('invalid pattern');
- }
- if (pattern.length > MAX_PATTERN_LENGTH) {
- throw new TypeError('pattern is too long');
- }
-};
// parse a component of the expanded set.
// At this point, no pattern may contain "/" in it
// so we're going to return a 2d array, where each entry is the full
@@ -189,7 +174,6 @@ export const match = (list, pattern, options = {}) => {
};
minimatch.match = match;
// replace stuff like \* with *
-const globUnescape = (s) => s.replace(/\\(.)/g, '$1');
const globMagic = /[?*]|[+@!]\(.*?\)|\[|\]/;
const regExpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
export class Minimatch {
@@ -840,293 +824,8 @@ export class Minimatch {
else if ((m = pattern.match(dotStarRE))) {
fastTest = dotStarTest;
}
- let re = '';
- let hasMagic = false;
- let escaping = false;
- // ? => one single character
- const patternListStack = [];
- const negativeLists = [];
- let stateChar = false;
- let uflag = false;
- let pl;
- // . and .. never match anything that doesn't start with .,
- // even when options.dot is set. However, if the pattern
- // starts with ., then traversal patterns can match.
- let dotTravAllowed = pattern.charAt(0) === '.';
- let dotFileAllowed = options.dot || dotTravAllowed;
- const patternStart = () => dotTravAllowed
- ? ''
- : dotFileAllowed
- ? '(?!(?:^|\\/)\\.{1,2}(?:$|\\/))'
- : '(?!\\.)';
- const subPatternStart = (p) => p.charAt(0) === '.'
- ? ''
- : options.dot
- ? '(?!(?:^|\\/)\\.{1,2}(?:$|\\/))'
- : '(?!\\.)';
- const clearStateChar = () => {
- if (stateChar) {
- // we had some state-tracking character
- // that wasn't consumed by this pass.
- switch (stateChar) {
- case '*':
- re += star;
- hasMagic = true;
- break;
- case '?':
- re += qmark;
- hasMagic = true;
- break;
- default:
- re += '\\' + stateChar;
- break;
- }
- this.debug('clearStateChar %j %j', stateChar, re);
- stateChar = false;
- }
- };
- for (let i = 0, c; i < pattern.length && (c = pattern.charAt(i)); i++) {
- this.debug('%s\t%s %s %j', pattern, i, re, c);
- // skip over any that are escaped.
- if (escaping) {
- // completely not allowed, even escaped.
- // should be impossible.
- /* c8 ignore start */
- if (c === '/') {
- return false;
- }
- /* c8 ignore stop */
- if (reSpecials[c]) {
- re += '\\';
- }
- re += c;
- escaping = false;
- continue;
- }
- switch (c) {
- // Should already be path-split by now.
- /* c8 ignore start */
- case '/': {
- return false;
- }
- /* c8 ignore stop */
- case '\\':
- clearStateChar();
- escaping = true;
- continue;
- // the various stateChar values
- // for the "extglob" stuff.
- case '?':
- case '*':
- case '+':
- case '@':
- case '!':
- this.debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c);
- // if we already have a stateChar, then it means
- // that there was something like ** or +? in there.
- // Handle the stateChar, then proceed with this one.
- this.debug('call clearStateChar %j', stateChar);
- clearStateChar();
- stateChar = c;
- // if extglob is disabled, then +(asdf|foo) isn't a thing.
- // just clear the statechar *now*, rather than even diving into
- // the patternList stuff.
- if (options.noext)
- clearStateChar();
- continue;
- case '(': {
- if (!stateChar) {
- re += '\\(';
- continue;
- }
- const plEntry = {
- type: stateChar,
- start: i - 1,
- reStart: re.length,
- open: plTypes[stateChar].open,
- close: plTypes[stateChar].close,
- };
- this.debug(this.pattern, '\t', plEntry);
- patternListStack.push(plEntry);
- // negation is (?:(?!(?:js)(?:<rest>))[^/]*)
- re += plEntry.open;
- // next entry starts with a dot maybe?
- if (plEntry.start === 0 && plEntry.type !== '!') {
- dotTravAllowed = true;
- re += subPatternStart(pattern.slice(i + 1));
- }
- this.debug('plType %j %j', stateChar, re);
- stateChar = false;
- continue;
- }
- case ')': {
- const plEntry = patternListStack[patternListStack.length - 1];
- if (!plEntry) {
- re += '\\)';
- continue;
- }
- patternListStack.pop();
- // closing an extglob
- clearStateChar();
- hasMagic = true;
- pl = plEntry;
- // negation is (?:(?!js)[^/]*)
- // The others are (?:<pattern>)<type>
- re += pl.close;
- if (pl.type === '!') {
- negativeLists.push(Object.assign(pl, { reEnd: re.length }));
- }
- continue;
- }
- case '|': {
- const plEntry = patternListStack[patternListStack.length - 1];
- if (!plEntry) {
- re += '\\|';
- continue;
- }
- clearStateChar();
- re += '|';
- // next subpattern can start with a dot?
- if (plEntry.start === 0 && plEntry.type !== '!') {
- dotTravAllowed = true;
- re += subPatternStart(pattern.slice(i + 1));
- }
- continue;
- }
- // these are mostly the same in regexp and glob
- case '[':
- // swallow any state-tracking char before the [
- clearStateChar();
- const [src, needUflag, consumed, magic] = parseClass(pattern, i);
- if (consumed) {
- re += src;
- uflag = uflag || needUflag;
- i += consumed - 1;
- hasMagic = hasMagic || magic;
- }
- else {
- re += '\\[';
- }
- continue;
- case ']':
- re += '\\' + c;
- continue;
- default:
- // swallow any state char that wasn't consumed
- clearStateChar();
- re += regExpEscape(c);
- break;
- } // switch
- } // for
- // handle the case where we had a +( thing at the *end*
- // of the pattern.
- // each pattern list stack adds 3 chars, and we need to go through
- // and escape any | chars that were passed through as-is for the regexp.
- // Go through and escape them, taking care not to double-escape any
- // | chars that were already escaped.
- for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {
- let tail;
- tail = re.slice(pl.reStart + pl.open.length);
- this.debug(this.pattern, 'setting tail', re, pl);
- // maybe some even number of \, then maybe 1 \, followed by a |
- tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, (_, $1, $2) => {
- if (!$2) {
- // the | isn't already escaped, so escape it.
- $2 = '\\';
- // should already be done
- /* c8 ignore start */
- }
- /* c8 ignore stop */
- // need to escape all those slashes *again*, without escaping the
- // one that we need for escaping the | character. As it works out,
- // escaping an even number of slashes can be done by simply repeating
- // it exactly after itself. That's why this trick works.
- //
- // I am sorry that you have to see this.
- return $1 + $1 + $2 + '|';
- });
- this.debug('tail=%j\n %s', tail, tail, pl, re);
- const t = pl.type === '*' ? star : pl.type === '?' ? qmark : '\\' + pl.type;
- hasMagic = true;
- re = re.slice(0, pl.reStart) + t + '\\(' + tail;
- }
- // handle trailing things that only matter at the very end.
- clearStateChar();
- if (escaping) {
- // trailing \\
- re += '\\\\';
- }
- // only need to apply the nodot start if the re starts with
- // something that could conceivably capture a dot
- const addPatternStart = addPatternStartSet[re.charAt(0)];
- // Hack to work around lack of negative lookbehind in JS
- // A pattern like: *.!(x).!(y|z) needs to ensure that a name
- // like 'a.xyz.yz' doesn't match. So, the first negative
- // lookahead, has to look ALL the way ahead, to the end of
- // the pattern.
- for (let n = negativeLists.length - 1; n > -1; n--) {
- const nl = negativeLists[n];
- const nlBefore = re.slice(0, nl.reStart);
- const nlFirst = re.slice(nl.reStart, nl.reEnd - 8);
- let nlAfter = re.slice(nl.reEnd);
- const nlLast = re.slice(nl.reEnd - 8, nl.reEnd) + nlAfter;
- // Handle nested stuff like *(*.js|!(*.json)), where open parens
- // mean that we should *not* include the ) in the bit that is considered
- // "after" the negated section.
- const closeParensBefore = nlBefore.split(')').length;
- const openParensBefore = nlBefore.split('(').length - closeParensBefore;
- let cleanAfter = nlAfter;
- for (let i = 0; i < openParensBefore; i++) {
- cleanAfter = cleanAfter.replace(/\)[+*?]?/, '');
- }
- nlAfter = cleanAfter;
- const dollar = nlAfter === '' ? '(?:$|\\/)' : '';
- re = nlBefore + nlFirst + nlAfter + dollar + nlLast;
- }
- // if the re is not "" at this point, then we need to make sure
- // it doesn't match against an empty path part.
- // Otherwise a/* will match a/, which it should not.
- if (re !== '' && hasMagic) {
- re = '(?=.)' + re;
- }
- if (addPatternStart) {
- re = patternStart() + re;
- }
- // if it's nocase, and the lcase/uppercase don't match, it's magic
- if (options.nocase && !hasMagic && !options.nocaseMagicOnly) {
- hasMagic = pattern.toUpperCase() !== pattern.toLowerCase();
- }
- // skip the regexp for non-magical patterns
- // unescape anything in it, though, so that it'll be
- // an exact match against a file etc.
- if (!hasMagic) {
- return globUnescape(re);
- }
- const flags = (options.nocase ? 'i' : '') + (uflag ? 'u' : '');
- try {
- const ext = fastTest
- ? {
- _glob: pattern,
- _src: re,
- test: fastTest,
- }
- : {
- _glob: pattern,
- _src: re,
- };
- return Object.assign(new RegExp('^' + re + '$', flags), ext);
- /* c8 ignore start */
- }
- catch (er) {
- // should be impossible
- // If it was an invalid regular expression, then it can't match
- // anything. This trick looks for a character after the end of
- // the string, which is of course impossible, except in multi-line
- // mode, but it's not a /m regex.
- this.debug('invalid regexp', er);
- return new RegExp('$.');
- }
- /* c8 ignore stop */
+ const re = AST.fromGlob(pattern, this.options).toMMPattern();
+ return fastTest ? Object.assign(re, { test: fastTest }) : re;
}
makeRe() {
if (this.regexp || this.regexp === false)
@@ -1148,7 +847,7 @@ export class Minimatch {
: options.dot
? twoStarDot
: twoStarNoDot;
- const flags = options.nocase ? 'i' : '';
+ const flags = new Set(options.nocase ? ['i'] : []);
// regexpify non-globstar patterns
// if ** is only item, then we just do one twoStar
// if ** is first, and there are more, prepend (\/|twoStar\/)? to next
@@ -1157,11 +856,17 @@ export class Minimatch {
// then filter out GLOBSTAR symbols
let re = set
.map(pattern => {
- const pp = pattern.map(p => typeof p === 'string'
- ? regExpEscape(p)
- : p === GLOBSTAR
- ? GLOBSTAR
- : p._src);
+ const pp = pattern.map(p => {
+ if (p instanceof RegExp) {
+ for (const f of p.flags.split(''))
+ flags.add(f);
+ }
+ return typeof p === 'string'
+ ? regExpEscape(p)
+ : p === GLOBSTAR
+ ? GLOBSTAR
+ : p._src;
+ });
pp.forEach((p, i) => {
const next = pp[i + 1];
const prev = pp[i - 1];
@@ -1187,14 +892,17 @@ export class Minimatch {
return pp.filter(p => p !== GLOBSTAR).join('/');
})
.join('|');
+ // need to wrap in parens if we had more than one thing with |,
+ // otherwise only the first will be anchored to ^ and the last to $
+ const [open, close] = set.length > 1 ? ['(?:', ')'] : ['', ''];
// must match entire pattern
// ending in a * or ** will make it less strict.
- re = '^(?:' + re + ')$';
+ re = '^' + open + re + close + '$';
// can match anything, as long as it's not this.
if (this.negate)
- re = '^(?!' + re + ').*$';
+ re = '^(?!' + re + ').+$';
try {
- this.regexp = new RegExp(re, flags);
+ this.regexp = new RegExp(re, [...flags].join(''));
/* c8 ignore start */
}
catch (ex) {
@@ -1280,9 +988,11 @@ export class Minimatch {
}
}
/* c8 ignore start */
+export { AST } from './ast.js';
export { escape } from './escape.js';
export { unescape } from './unescape.js';
/* c8 ignore stop */
+minimatch.AST = AST;
minimatch.Minimatch = Minimatch;
minimatch.escape = escape;
minimatch.unescape = unescape;
diff --git a/deps/npm/node_modules/minimatch/dist/mjs/parse.js b/deps/npm/node_modules/minimatch/dist/mjs/parse.js
deleted file mode 100644
index 70a26dee58..0000000000
--- a/deps/npm/node_modules/minimatch/dist/mjs/parse.js
+++ /dev/null
@@ -1,646 +0,0 @@
-// parse a single path portion
-import { parseClass } from './brace-expressions';
-const types = new Set(['!', '?', '+', '*', '@']);
-const isExtglobType = (c) => types.has(c);
-// characters that indicate a start of pattern needs the "no dots" bit
-const addPatternStart = new Set(['[', '.']);
-const justDots = new Set(['..', '.']);
-const reSpecials = new Set('().*{}+?[]^$\\!');
-const regExpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
-// any single thing other than /
-// don't need to escape / when using new RegExp()
-const qmark = '[^/]';
-// * => any number of characters
-const star = qmark + '*?';
-export class AST {
- type;
- #root;
- #parts = [];
- #parent;
- #parentIndex;
- #negs;
- #filledNegs = false;
- #options;
- constructor(type, parent, options = {}) {
- this.type = type;
- this.#parent = parent;
- this.#root = this.#parent ? this.#parent.#root : this;
- this.#options = this.#root === this ? options : this.#root.#options;
- this.#negs = this.#root === this ? [] : this.#root.#negs;
- if (type === '!' && !this.#root.#filledNegs)
- this.#negs.push(this);
- this.#parentIndex = this.#parent ? this.#parent.#parts.length : 0;
- }
- fillNegs() {
- if (this !== this.#root) {
- this.#root.fillNegs();
- return this;
- }
- if (this.#filledNegs)
- return this;
- this.#filledNegs = true;
- let n;
- while ((n = this.#negs.pop())) {
- if (n.type !== '!')
- continue;
- // walk up the tree, appending everthing that comes AFTER parentIndex
- let p = n;
- let pp = p.#parent;
- while (pp) {
- for (let i = p.#parentIndex + 1; !pp.type && i < pp.#parts.length; i++) {
- for (const part of n.#parts) {
- /* c8 ignore start */
- if (typeof part === 'string') {
- throw new Error('string part in extglob AST??');
- }
- /* c8 ignore stop */
- part.copyIn(pp.#parts[i]);
- }
- }
- p = pp;
- pp = p.#parent;
- }
- }
- return this;
- }
- push(...parts) {
- for (const p of parts) {
- if (p === '')
- continue;
- /* c8 ignore start */
- if (typeof p !== 'string' && !(p instanceof AST && p.#parent === this)) {
- throw new Error('invalid part: ' + p);
- }
- /* c8 ignore stop */
- this.#parts.push(p);
- }
- }
- toJSON() {
- const ret = this.type === null ? this.#parts.slice() : [this.type, ...this.#parts];
- if (this.isStart() && !this.type)
- ret.unshift([]);
- if (this.isEnd() &&
- (this === this.#root ||
- (this.#root.#filledNegs && this.#parent?.type === '!'))) {
- ret.push({});
- }
- return ret;
- }
- isStart() {
- if (this.#root === this)
- return true;
- // if (this.type) return !!this.#parent?.isStart()
- if (!this.#parent?.isStart())
- return false;
- return this.#parentIndex === 0;
- }
- isEnd() {
- if (this.#root === this)
- return true;
- if (this.#parent?.type === '!')
- return true;
- if (!this.#parent?.isEnd())
- return false;
- if (!this.type)
- return this.#parent?.isEnd();
- return (this.#parentIndex === (this.#parent ? this.#parent.#parts.length : 0) - 1);
- }
- copyIn(part) {
- if (typeof part === 'string')
- this.push(part);
- else
- this.push(part.clone(this));
- }
- clone(parent) {
- const c = new AST(this.type, parent);
- for (const p of this.#parts) {
- c.copyIn(p);
- }
- return c;
- }
- static #parseAST(str, ast, pos, opt) {
- let escaping = false;
- if (ast.type === null) {
- // outside of a extglob, append until we find a start
- let i = pos;
- let acc = '';
- while (i < str.length) {
- const c = str.charAt(i++);
- // still accumulate escapes at this point, but we do ignore
- // starts that are escaped
- if (escaping || c === '\\') {
- escaping = !escaping;
- acc += c;
- continue;
- }
- if (!opt.noext && isExtglobType(c) && str.charAt(i) === '(') {
- ast.push(acc);
- acc = '';
- const ext = new AST(c, ast);
- i = AST.#parseAST(str, ext, i, opt);
- ast.push(ext);
- continue;
- }
- acc += c;
- }
- ast.push(acc);
- return i;
- }
- // some kind of extglob, pos is at the (
- // find the next | or )
- let i = pos + 1;
- let part = new AST(null, ast);
- const parts = [];
- let acc = '';
- while (i < str.length) {
- const c = str.charAt(i++);
- // still accumulate escapes at this point, but we do ignore
- // starts that are escaped
- if (escaping || c === '\\') {
- escaping = !escaping;
- acc += c;
- continue;
- }
- if (isExtglobType(c) && str.charAt(i) === '(') {
- part.push(acc);
- acc = '';
- const ext = new AST(c, part);
- part.push(ext);
- i = AST.#parseAST(str, ext, i, opt);
- continue;
- }
- if (c === '|') {
- part.push(acc);
- acc = '';
- parts.push(part);
- part = new AST(null, ast);
- continue;
- }
- if (c === ')') {
- part.push(acc);
- acc = '';
- ast.push(...parts, part);
- return i;
- }
- acc += c;
- }
- // if we got here, it was a malformed extglob! not an extglob, but
- // maybe something else in there.
- ast.type = null;
- ast.#parts = [str.substring(pos)];
- return i;
- }
- static fromGlob(pattern, options = {}) {
- const ast = new AST(null, undefined, options);
- AST.#parseAST(pattern, ast, 0, options);
- console.log('parsed', pattern, JSON.stringify(ast));
- return ast;
- }
- toRegExpSource() {
- if (this.#root === this)
- this.fillNegs();
- if (!this.type) {
- const src = this.#parts
- .map(p => {
- if (typeof p === 'string')
- return AST.#parseGlob(p, this.#options);
- else
- return p.toRegExpSource();
- })
- .join('');
- let start = '';
- if (this.isStart() && typeof this.#parts[0] === 'string') {
- // '.' and '..' cannot match unless the pattern is that exactly
- const dotTravAllowed = this.#parts.length === 1 && justDots.has(this.#parts[0]);
- if (dotTravAllowed) {
- start = '(?:^|\\/)';
- }
- else {
- const dotsAllowed = this.#options.dot ||
- // no need to prevent dots if it can't match a dot, or if a sub-pattern
- // will be preventing it anyway.
- !addPatternStart.has(src.charAt(0));
- start = dotsAllowed ? '(?!(?:^|\\/)\\.{1,2}(?:$|\\/))' : '(?!\\.)';
- }
- }
- let end = '';
- if (this.isEnd() &&
- (this === this.#root ||
- (this.#root.#filledNegs && this.#parent?.type === '!'))) {
- end = '(?:$|\\/)';
- }
- return start + src + end;
- }
- // some kind of extglob
- const start = this.type === '!' ? '(?:(?!(?:' : '(?:';
- const body = this.#parts
- .map(p => {
- /* c8 ignore start */
- if (typeof p === 'string') {
- throw new Error('string type in extglob ast??');
- }
- /* c8 ignore stop */
- return p.toRegExpSource();
- })
- .join('|');
- const close = this.type === '!'
- ? '))[^/]*?)'
- : this.type === '@'
- ? ')'
- : `)${this.type}`;
- return start + body + close;
- }
- static #parseGlob(glob, options) {
- let escaping = false;
- let re = '';
- let uflag = false;
- let hasMagic = false;
- for (let i = 0; i < glob.length; i++) {
- const c = glob.charAt(i);
- if (escaping) {
- escaping = false;
- re += (reSpecials.has(c) ? '\\' : '') + c;
- continue;
- }
- if (c === '\\') {
- if (i === glob.length - 1) {
- re += '\\\\';
- }
- else {
- escaping = true;
- }
- continue;
- }
- if (c === '[') {
- const [src, needUflag, consumed, magic] = parseClass(glob, i);
- if (consumed) {
- re += src;
- uflag = uflag || needUflag;
- i += consumed - 1;
- hasMagic = hasMagic || magic;
- continue;
- }
- }
- if (c === '*') {
- re += star;
- hasMagic = true;
- continue;
- }
- if (c === '?') {
- re += qmark;
- hasMagic = true;
- continue;
- }
- re += regExpEscape(c);
- }
- return re;
- }
-}
-const pattern = 'a@(i|w!(x|y)z+(l|m)|j)';
-const ast = AST.fromGlob(pattern).fillNegs();
-console.log('negged', pattern, JSON.stringify(ast));
-console.log('to re src', pattern, ast.toRegExpSource());
-// // the type (exttype or null for strings), and array of children tokens
-//
-// // append everything after a negative extglob to each of the parts
-// // of the negative extglob node. So, eg, [a, [!, x, y], z]
-//
-// //
-// //
-// //
-// //
-//
-// const globUnescape = (s: string) => s.replace(/\\(.)/g, '$1')
-// const regExpEscape = (s: string) =>
-// s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&')
-//
-// // "abc" -> { a:true, b:true, c:true }
-// const charSet = (s: string) =>
-// s.split('').reduce((set: { [k: string]: boolean }, c) => {
-// set[c] = true
-// return set
-// }, {})
-//
-// // characters that need to be escaped in RegExp.
-// const reSpecials = charSet('().*{}+?[]^$\\!')
-//
-// // characters that indicate we have to add the pattern start
-// const addPatternStartSet = charSet('[.(')
-//
-// // any single thing other than /
-// // don't need to escape / when using new RegExp()
-// const qmark = '[^/]'
-//
-// // * => any number of characters
-// const star = qmark + '*?'
-//
-// // TODO: take an offset and length, so we can sub-parse the extglobs
-// const parse = (
-// options: MinimatchOptions,
-// pattern: string,
-// debug: (...a: any[]) => void
-// ): false | string => {
-// assertValidPattern(pattern)
-//
-// if (pattern === '') return ''
-//
-// let re = ''
-// let hasMagic = false
-// let escaping = false
-// // ? => one single character
-// let uflag = false
-//
-// // . and .. never match anything that doesn't start with .,
-// // even when options.dot is set. However, if the pattern
-// // starts with ., then traversal patterns can match.
-// let dotTravAllowed = pattern.charAt(0) === '.'
-// let dotFileAllowed = options.dot || dotTravAllowed
-// const patternStart = () =>
-// dotTravAllowed
-// ? ''
-// : dotFileAllowed
-// ? '(?!(?:^|\\/)\\.{1,2}(?:$|\\/))'
-// : '(?!\\.)'
-// const subPatternStart = (p: string) =>
-// p.charAt(0) === '.'
-// ? ''
-// : options.dot
-// ? '(?!(?:^|\\/)\\.{1,2}(?:$|\\/))'
-// : '(?!\\.)'
-//
-// const clearStateChar = () => {
-// if (stateChar) {
-// // we had some state-tracking character
-// // that wasn't consumed by this pass.
-// switch (stateChar) {
-// case '*':
-// re += star
-// hasMagic = true
-// break
-// case '?':
-// re += qmark
-// hasMagic = true
-// break
-// default:
-// re += '\\' + stateChar
-// break
-// }
-// debug('clearStateChar %j %j', stateChar, re)
-// stateChar = false
-// }
-// }
-//
-// for (
-// let i = 0, c: string;
-// i < pattern.length && (c = pattern.charAt(i));
-// i++
-// ) {
-// debug('%s\t%s %s %j', pattern, i, re, c)
-//
-// // skip over any that are escaped.
-// if (escaping) {
-// // completely not allowed, even escaped.
-// // should be impossible.
-// /* c8 ignore start */
-// if (c === '/') {
-// return false
-// }
-// /* c8 ignore stop */
-//
-// if (reSpecials[c]) {
-// re += '\\'
-// }
-// re += c
-// escaping = false
-// continue
-// }
-//
-// switch (c) {
-// // Should already be path-split by now.
-// /* c8 ignore start */
-// case '/': {
-// return false
-// }
-// /* c8 ignore stop */
-//
-// case '\\':
-// clearStateChar()
-// escaping = true
-// continue
-//
-// // the various stateChar values
-// // for the "extglob" stuff.
-// case '?':
-// case '*':
-// case '+':
-// case '@':
-// case '!':
-// debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c)
-//
-// // if we already have a stateChar, then it means
-// // that there was something like ** or +? in there.
-// // Handle the stateChar, then proceed with this one.
-// debug('call clearStateChar %j', stateChar)
-// clearStateChar()
-// stateChar = c
-// // if extglob is disabled, then +(asdf|foo) isn't a thing.
-// // just clear the statechar *now*, rather than even diving into
-// // the patternList stuff.
-// if (options.noext) clearStateChar()
-// continue
-//
-// case '(': {
-// if (!stateChar) {
-// re += '\\('
-// continue
-// }
-//
-// const plEntry: PatternListEntry = {
-// type: stateChar,
-// start: i - 1,
-// reStart: re.length,
-// open: plTypes[stateChar].open,
-// close: plTypes[stateChar].close,
-// }
-// debug(pattern, '\t', plEntry)
-// patternListStack.push(plEntry)
-// // negation is (?:(?!(?:js)(?:<rest>))[^/]*)
-// re += plEntry.open
-// // next entry starts with a dot maybe?
-// if (plEntry.start === 0 && plEntry.type !== '!') {
-// dotTravAllowed = true
-// re += subPatternStart(pattern.slice(i + 1))
-// }
-// debug('plType %j %j', stateChar, re)
-// stateChar = false
-// continue
-// }
-//
-// case ')': {
-// const plEntry = patternListStack[patternListStack.length - 1]
-// if (!plEntry) {
-// re += '\\)'
-// continue
-// }
-// patternListStack.pop()
-//
-// // closing an extglob
-// clearStateChar()
-// hasMagic = true
-// pl = plEntry
-// // negation is (?:(?!js)[^/]*)
-// // The others are (?:<pattern>)<type>
-// re += pl.close
-// if (pl.type === '!') {
-// negativeLists.push(Object.assign(pl, { reEnd: re.length }))
-// }
-// continue
-// }
-//
-// case '|': {
-// const plEntry = patternListStack[patternListStack.length - 1]
-// if (!plEntry) {
-// re += '\\|'
-// continue
-// }
-//
-// clearStateChar()
-// re += '|'
-// // next subpattern can start with a dot?
-// if (plEntry.start === 0 && plEntry.type !== '!') {
-// dotTravAllowed = true
-// re += subPatternStart(pattern.slice(i + 1))
-// }
-// continue
-// }
-//
-// // these are mostly the same in regexp and glob
-// case '[':
-// // swallow any state-tracking char before the [
-// clearStateChar()
-// const [src, needUflag, consumed, magic] = parseClass(pattern, i)
-// if (consumed) {
-// re += src
-// uflag = uflag || needUflag
-// i += consumed - 1
-// hasMagic = hasMagic || magic
-// } else {
-// re += '\\['
-// }
-// continue
-//
-// case ']':
-// re += '\\' + c
-// continue
-//
-// default:
-// // swallow any state char that wasn't consumed
-// clearStateChar()
-//
-// re += regExpEscape(c)
-// break
-// } // switch
-// } // for
-//
-// // handle the case where we had a +( thing at the *end*
-// // of the pattern.
-// // each pattern list stack adds 3 chars, and we need to go through
-// // and escape any | chars that were passed through as-is for the regexp.
-// // Go through and escape them, taking care not to double-escape any
-// // | chars that were already escaped.
-// for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {
-// let tail: string
-// tail = re.slice(pl.reStart + pl.open.length)
-// debug(pattern, 'setting tail', re, pl)
-// // maybe some even number of \, then maybe 1 \, followed by a |
-// tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, (_, $1, $2) => {
-// if (!$2) {
-// // the | isn't already escaped, so escape it.
-// $2 = '\\'
-// // should already be done
-// /* c8 ignore start */
-// }
-// /* c8 ignore stop */
-//
-// // need to escape all those slashes *again*, without escaping the
-// // one that we need for escaping the | character. As it works out,
-// // escaping an even number of slashes can be done by simply repeating
-// // it exactly after itself. That's why this trick works.
-// //
-// // I am sorry that you have to see this.
-// return $1 + $1 + $2 + '|'
-// })
-//
-// debug('tail=%j\n %s', tail, tail, pl, re)
-// const t = pl.type === '*' ? star : pl.type === '?' ? qmark : '\\' + pl.type
-//
-// hasMagic = true
-// re = re.slice(0, pl.reStart) + t + '\\(' + tail
-// }
-//
-// // handle trailing things that only matter at the very end.
-// clearStateChar()
-// if (escaping) {
-// // trailing \\
-// re += '\\\\'
-// }
-//
-// // only need to apply the nodot start if the re starts with
-// // something that could conceivably capture a dot
-// const addPatternStart = addPatternStartSet[re.charAt(0)]
-//
-// // Hack to work around lack of negative lookbehind in JS
-// // A pattern like: *.!(x).!(y|z) needs to ensure that a name
-// // like 'a.xyz.yz' doesn't match. So, the first negative
-// // lookahead, has to look ALL the way ahead, to the end of
-// // the pattern.
-// for (let n = negativeLists.length - 1; n > -1; n--) {
-// const nl = negativeLists[n]
-//
-// const nlBefore = re.slice(0, nl.reStart)
-// const nlFirst = re.slice(nl.reStart, nl.reEnd - 8)
-// let nlAfter = re.slice(nl.reEnd)
-// const nlLast = re.slice(nl.reEnd - 8, nl.reEnd) + nlAfter
-//
-// // Handle nested stuff like *(*.js|!(*.json)), where open parens
-// // mean that we should *not* include the ) in the bit that is considered
-// // "after" the negated section.
-// const closeParensBefore = nlBefore.split(')').length
-// const openParensBefore = nlBefore.split('(').length - closeParensBefore
-// let cleanAfter = nlAfter
-// for (let i = 0; i < openParensBefore; i++) {
-// cleanAfter = cleanAfter.replace(/\)[+*?]?/, '')
-// }
-// nlAfter = cleanAfter
-//
-// const dollar = nlAfter === '' ? '(?:$|\\/)' : ''
-//
-// re = nlBefore + nlFirst + nlAfter + dollar + nlLast
-// }
-//
-// // if the re is not "" at this point, then we need to make sure
-// // it doesn't match against an empty path part.
-// // Otherwise a/* will match a/, which it should not.
-// if (re !== '' && hasMagic) {
-// re = '(?=.)' + re
-// }
-//
-// if (addPatternStart) {
-// re = patternStart() + re
-// }
-//
-// // if it's nocase, and the lcase/uppercase don't match, it's magic
-// if (options.nocase && !hasMagic && !options.nocaseMagicOnly) {
-// hasMagic = pattern.toUpperCase() !== pattern.toLowerCase()
-// }
-//
-// // skip the regexp for non-magical patterns
-// // unescape anything in it, though, so that it'll be
-// // an exact match against a file etc.
-// if (!hasMagic) {
-// return globUnescape(re)
-// }
-//
-// return re
-// }
-//# sourceMappingURL=parse.js.map \ No newline at end of file
diff --git a/deps/npm/node_modules/minimatch/package.json b/deps/npm/node_modules/minimatch/package.json
index 95364b1548..06d796a2e4 100644
--- a/deps/npm/node_modules/minimatch/package.json
+++ b/deps/npm/node_modules/minimatch/package.json
@@ -2,12 +2,12 @@
"author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me)",
"name": "minimatch",
"description": "a glob matcher in javascript",
- "version": "7.4.3",
+ "version": "9.0.0",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/minimatch.git"
},
- "main": "./dist/cjs/index-cjs.js",
+ "main": "./dist/cjs/index.js",
"module": "./dist/mjs/index.js",
"types": "./dist/cjs/index.d.ts",
"exports": {
@@ -18,7 +18,7 @@
},
"require": {
"types": "./dist/cjs/index.d.ts",
- "default": "./dist/cjs/index-cjs.js"
+ "default": "./dist/cjs/index.js"
}
}
},
@@ -52,14 +52,14 @@
"endOfLine": "lf"
},
"engines": {
- "node": ">=10"
+ "node": ">=16 || 14 >=14.17"
},
"dependencies": {
"brace-expansion": "^2.0.1"
},
"devDependencies": {
"@types/brace-expansion": "^1.1.0",
- "@types/node": "^18.11.9",
+ "@types/node": "^18.15.11",
"@types/tap": "^15.0.7",
"c8": "^7.12.0",
"eslint-config-prettier": "^8.6.0",
diff --git a/deps/npm/node_modules/minipass-fetch/lib/blob.js b/deps/npm/node_modules/minipass-fetch/lib/blob.js
index efe69a3445..121b173010 100644
--- a/deps/npm/node_modules/minipass-fetch/lib/blob.js
+++ b/deps/npm/node_modules/minipass-fetch/lib/blob.js
@@ -1,5 +1,5 @@
'use strict'
-const Minipass = require('minipass')
+const { Minipass } = require('minipass')
const TYPE = Symbol('type')
const BUFFER = Symbol('buffer')
diff --git a/deps/npm/node_modules/minipass-fetch/lib/body.js b/deps/npm/node_modules/minipass-fetch/lib/body.js
index 9d1b45de30..6a517a2138 100644
--- a/deps/npm/node_modules/minipass-fetch/lib/body.js
+++ b/deps/npm/node_modules/minipass-fetch/lib/body.js
@@ -1,5 +1,5 @@
'use strict'
-const Minipass = require('minipass')
+const { Minipass } = require('minipass')
const MinipassSized = require('minipass-sized')
const Blob = require('./blob.js')
diff --git a/deps/npm/node_modules/minipass-fetch/lib/index.js b/deps/npm/node_modules/minipass-fetch/lib/index.js
index b1878ac0c0..77e82555e9 100644
--- a/deps/npm/node_modules/minipass-fetch/lib/index.js
+++ b/deps/npm/node_modules/minipass-fetch/lib/index.js
@@ -3,7 +3,7 @@ const { URL } = require('url')
const http = require('http')
const https = require('https')
const zlib = require('minizlib')
-const Minipass = require('minipass')
+const { Minipass } = require('minipass')
const Body = require('./body.js')
const { writeToStream, getTotalBytes } = Body
@@ -143,8 +143,20 @@ const fetch = async (url, opts) => {
const location = headers.get('Location')
// HTTP fetch step 5.3
- const locationURL = location === null ? null
- : (new URL(location, request.url)).toString()
+ 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') {
diff --git a/deps/npm/node_modules/minipass-fetch/lib/request.js b/deps/npm/node_modules/minipass-fetch/lib/request.js
index e620df6de2..054439e669 100644
--- a/deps/npm/node_modules/minipass-fetch/lib/request.js
+++ b/deps/npm/node_modules/minipass-fetch/lib/request.js
@@ -1,6 +1,6 @@
'use strict'
const { URL } = require('url')
-const Minipass = require('minipass')
+const { Minipass } = require('minipass')
const Headers = require('./headers.js')
const { exportNodeCompatibleHeaders } = Headers
const Body = require('./body.js')
@@ -265,6 +265,7 @@ class Request extends Body {
secureProtocol,
servername,
sessionIdContext,
+ timeout: request.timeout,
}
}
}
diff --git a/deps/npm/node_modules/minipass-fetch/package.json b/deps/npm/node_modules/minipass-fetch/package.json
index fc6f884733..78024317d8 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.1",
+ "version": "3.0.3",
"description": "An implementation of window.fetch in Node.js using Minipass streams",
"license": "MIT",
"main": "lib/index.js",
@@ -24,7 +24,7 @@
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.10.0",
+ "@npmcli/template-oss": "4.14.1",
"@ungap/url-search-params": "^0.2.2",
"abort-controller": "^3.0.0",
"abortcontroller-polyfill": "~1.7.3",
@@ -36,7 +36,7 @@
"tap": "^16.0.0"
},
"dependencies": {
- "minipass": "^4.0.0",
+ "minipass": "^5.0.0",
"minipass-sized": "^1.0.3",
"minizlib": "^2.1.2"
},
@@ -63,6 +63,7 @@
"author": "GitHub Inc.",
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.10.0"
+ "version": "4.14.1",
+ "publish": "true"
}
}
diff --git a/deps/npm/node_modules/minipass/index.js b/deps/npm/node_modules/minipass/index.js
index 5e192c2824..ed07c17acd 100644
--- a/deps/npm/node_modules/minipass/index.js
+++ b/deps/npm/node_modules/minipass/index.js
@@ -699,4 +699,4 @@ class Minipass extends Stream {
}
}
-module.exports = Minipass
+exports.Minipass = Minipass
diff --git a/deps/npm/node_modules/minipass/index.mjs b/deps/npm/node_modules/minipass/index.mjs
index d5c58fc981..d1be109c9f 100644
--- a/deps/npm/node_modules/minipass/index.mjs
+++ b/deps/npm/node_modules/minipass/index.mjs
@@ -97,7 +97,7 @@ class PipeProxyErrors extends Pipe {
}
}
-class Minipass extends Stream {
+export class Minipass extends Stream {
constructor(options) {
super()
this[FLOWING] = false
@@ -699,4 +699,3 @@ class Minipass extends Stream {
}
}
-export default Minipass
diff --git a/deps/npm/node_modules/minipass/package.json b/deps/npm/node_modules/minipass/package.json
index 1286b88ed5..0e20e98804 100644
--- a/deps/npm/node_modules/minipass/package.json
+++ b/deps/npm/node_modules/minipass/package.json
@@ -1,6 +1,6 @@
{
"name": "minipass",
- "version": "4.2.5",
+ "version": "5.0.0",
"description": "minimal implementation of a PassThrough stream",
"main": "./index.js",
"module": "./index.mjs",
diff --git a/deps/npm/node_modules/node-gyp/node_modules/signal-exit/LICENSE.txt b/deps/npm/node_modules/node-gyp/node_modules/signal-exit/LICENSE.txt
new file mode 100644
index 0000000000..eead04a121
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/signal-exit/LICENSE.txt
@@ -0,0 +1,16 @@
+The ISC License
+
+Copyright (c) 2015, 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/signal-exit/index.js b/deps/npm/node_modules/node-gyp/node_modules/signal-exit/index.js
index 93703f3692..93703f3692 100644
--- a/deps/npm/node_modules/signal-exit/index.js
+++ b/deps/npm/node_modules/node-gyp/node_modules/signal-exit/index.js
diff --git a/deps/npm/node_modules/node-gyp/node_modules/signal-exit/package.json b/deps/npm/node_modules/node-gyp/node_modules/signal-exit/package.json
new file mode 100644
index 0000000000..e1a00311f9
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/signal-exit/package.json
@@ -0,0 +1,38 @@
+{
+ "name": "signal-exit",
+ "version": "3.0.7",
+ "description": "when you want to fire an event no matter how a process exits.",
+ "main": "index.js",
+ "scripts": {
+ "test": "tap",
+ "snap": "tap",
+ "preversion": "npm test",
+ "postversion": "npm publish",
+ "prepublishOnly": "git push origin --follow-tags"
+ },
+ "files": [
+ "index.js",
+ "signals.js"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/tapjs/signal-exit.git"
+ },
+ "keywords": [
+ "signal",
+ "exit"
+ ],
+ "author": "Ben Coe <ben@npmjs.com>",
+ "license": "ISC",
+ "bugs": {
+ "url": "https://github.com/tapjs/signal-exit/issues"
+ },
+ "homepage": "https://github.com/tapjs/signal-exit",
+ "devDependencies": {
+ "chai": "^3.5.0",
+ "coveralls": "^3.1.1",
+ "nyc": "^15.1.0",
+ "standard-version": "^9.3.1",
+ "tap": "^15.1.1"
+ }
+}
diff --git a/deps/npm/node_modules/signal-exit/signals.js b/deps/npm/node_modules/node-gyp/node_modules/signal-exit/signals.js
index 3bd67a8a55..3bd67a8a55 100644
--- a/deps/npm/node_modules/signal-exit/signals.js
+++ b/deps/npm/node_modules/node-gyp/node_modules/signal-exit/signals.js
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 37530bb52d..fa5f593aaa 100644
--- a/deps/npm/node_modules/npm-install-checks/lib/index.js
+++ b/deps/npm/node_modules/npm-install-checks/lib/index.js
@@ -40,7 +40,7 @@ const checkPlatform = (target, force = false) => {
libcOk = false
} else {
const report = process.report.getReport()
- if (report.header?.glibcRuntimeVersion) {
+ if (report.header?.glibcVersionRuntime) {
libcFamily = 'glibc'
} else if (Array.isArray(report.sharedObjects) && report.sharedObjects.some(isMusl)) {
libcFamily = 'musl'
diff --git a/deps/npm/node_modules/npm-install-checks/package.json b/deps/npm/node_modules/npm-install-checks/package.json
index d9304ebf2a..192cf68837 100644
--- a/deps/npm/node_modules/npm-install-checks/package.json
+++ b/deps/npm/node_modules/npm-install-checks/package.json
@@ -1,6 +1,6 @@
{
"name": "npm-install-checks",
- "version": "6.1.0",
+ "version": "6.1.1",
"description": "Check the engines and platform fields in package.json",
"main": "lib/index.js",
"dependencies": {
@@ -8,7 +8,7 @@
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.12.0",
+ "@npmcli/template-oss": "4.13.0",
"tap": "^16.0.1"
},
"scripts": {
@@ -39,7 +39,8 @@
"author": "GitHub Inc.",
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.12.0"
+ "version": "4.13.0",
+ "publish": "true"
},
"tap": {
"nyc-arg": [
diff --git a/deps/npm/node_modules/npm-normalize-package-bin/lib/index.js b/deps/npm/node_modules/npm-normalize-package-bin/lib/index.js
index d6f0a581b9..3cb8478cf6 100644
--- a/deps/npm/node_modules/npm-normalize-package-bin/lib/index.js
+++ b/deps/npm/node_modules/npm-normalize-package-bin/lib/index.js
@@ -41,7 +41,7 @@ const normalizeObject = pkg => {
return
}
- const binTarget = join('/', orig[binKey])
+ const binTarget = join('/', orig[binKey].replace(/\\/g, '/'))
.replace(/\\/g, '/').slice(1)
if (!binTarget) {
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 8e237074b8..5ea50dc2a4 100644
--- a/deps/npm/node_modules/npm-normalize-package-bin/package.json
+++ b/deps/npm/node_modules/npm-normalize-package-bin/package.json
@@ -1,6 +1,6 @@
{
"name": "npm-normalize-package-bin",
- "version": "3.0.0",
+ "version": "3.0.1",
"description": "Turn any flavor of allowable package.json bin into a normalized object",
"main": "lib/index.js",
"repository": {
@@ -19,8 +19,8 @@
"posttest": "npm run lint"
},
"devDependencies": {
- "@npmcli/eslint-config": "^3.1.0",
- "@npmcli/template-oss": "4.5.1",
+ "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/template-oss": "4.14.1",
"tap": "^16.3.0"
},
"files": [
@@ -32,7 +32,8 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.5.1"
+ "version": "4.14.1",
+ "publish": "true"
},
"tap": {
"nyc-arg": [
diff --git a/deps/npm/node_modules/npm-registry-fetch/lib/clean-url.js b/deps/npm/node_modules/npm-registry-fetch/lib/clean-url.js
index a419b47d6a..0c2656b565 100644
--- a/deps/npm/node_modules/npm-registry-fetch/lib/clean-url.js
+++ b/deps/npm/node_modules/npm-registry-fetch/lib/clean-url.js
@@ -12,7 +12,8 @@ const cleanUrl = (str) => {
try {
const url = new URL(str)
if (url.password) {
- str = str.replace(url.password, replace)
+ url.password = replace
+ str = url.toString()
}
} catch {
// ignore errors
diff --git a/deps/npm/node_modules/npm-registry-fetch/lib/index.js b/deps/npm/node_modules/npm-registry-fetch/lib/index.js
index cc331a50c0..23e349c5c5 100644
--- a/deps/npm/node_modules/npm-registry-fetch/lib/index.js
+++ b/deps/npm/node_modules/npm-registry-fetch/lib/index.js
@@ -9,7 +9,7 @@ const npa = require('npm-package-arg')
const qs = require('querystring')
const url = require('url')
const zlib = require('minizlib')
-const Minipass = require('minipass')
+const { Minipass } = require('minipass')
const defaultOpts = require('./default-opts.js')
diff --git a/deps/npm/node_modules/npm-registry-fetch/package.json b/deps/npm/node_modules/npm-registry-fetch/package.json
index 89550cee29..63a4472588 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": "14.0.3",
+ "version": "14.0.5",
"description": "Fetch-based http client for use with npm registry APIs",
"main": "lib",
"files": [
@@ -32,7 +32,7 @@
"license": "ISC",
"dependencies": {
"make-fetch-happen": "^11.0.0",
- "minipass": "^4.0.0",
+ "minipass": "^5.0.0",
"minipass-fetch": "^3.0.0",
"minipass-json-stream": "^1.0.1",
"minizlib": "^2.1.2",
@@ -41,12 +41,10 @@
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.10.0",
+ "@npmcli/template-oss": "4.14.1",
"cacache": "^17.0.0",
- "mkdirp": "^1.0.4",
"nock": "^13.2.4",
"require-inject": "^1.4.4",
- "rimraf": "^3.0.2",
"ssri": "^10.0.0",
"tap": "^16.0.1"
},
@@ -63,6 +61,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.10.0"
+ "version": "4.14.1",
+ "publish": "true"
}
}
diff --git a/deps/npm/node_modules/pacote/README.md b/deps/npm/node_modules/pacote/README.md
index 64480b2542..3db6f960fd 100644
--- a/deps/npm/node_modules/pacote/README.md
+++ b/deps/npm/node_modules/pacote/README.md
@@ -254,10 +254,9 @@ In addition to the common `package.json` fields, manifests include:
`manifest._integrity` when `dist.integrity` is not present.)
* `fileCount` Number of files in the tarball.
* `unpackedSize` Size on disk of the package when unpacked.
- * `npm-signature` A signature of the package by the
- [`npmregistry`](https://keybase.io/npmregistry) Keybase account.
- (Obviously only present for packages published to
- `https://registry.npmjs.org`.)
+ * `signatures` Signatures of the shasum. Includes the keyid that
+ correlates to a [`key from the npm
+ registry`](https://registry.npmjs.org/-/npm/v1/keys)
## Packuments
diff --git a/deps/npm/node_modules/pacote/lib/dir.js b/deps/npm/node_modules/pacote/lib/dir.js
index 923fdd65c2..420afc5802 100644
--- a/deps/npm/node_modules/pacote/lib/dir.js
+++ b/deps/npm/node_modules/pacote/lib/dir.js
@@ -1,6 +1,6 @@
const Fetcher = require('./fetcher.js')
const FileFetcher = require('./file.js')
-const Minipass = require('minipass')
+const { Minipass } = require('minipass')
const tarCreateOptions = require('./util/tar-create-options.js')
const packlist = require('npm-packlist')
const tar = require('tar')
diff --git a/deps/npm/node_modules/pacote/lib/fetcher.js b/deps/npm/node_modules/pacote/lib/fetcher.js
index 4852564d04..6694a57f6a 100644
--- a/deps/npm/node_modules/pacote/lib/fetcher.js
+++ b/deps/npm/node_modules/pacote/lib/fetcher.js
@@ -18,7 +18,7 @@ const removeTrailingSlashes = require('./util/trailing-slashes.js')
const getContents = require('@npmcli/installed-package-contents')
const readPackageJsonFast = require('read-package-json-fast')
const readPackageJson = promisify(require('read-package-json'))
-const Minipass = require('minipass')
+const { Minipass } = require('minipass')
const cacheDir = require('./util/cache-dir.js')
diff --git a/deps/npm/node_modules/pacote/lib/git.js b/deps/npm/node_modules/pacote/lib/git.js
index 1fa8b1f966..5d24f72497 100644
--- a/deps/npm/node_modules/pacote/lib/git.js
+++ b/deps/npm/node_modules/pacote/lib/git.js
@@ -6,7 +6,7 @@ const hashre = /^[a-f0-9]{40}$/
const git = require('@npmcli/git')
const pickManifest = require('npm-pick-manifest')
const npa = require('npm-package-arg')
-const Minipass = require('minipass')
+const { Minipass } = require('minipass')
const cacache = require('cacache')
const log = require('proc-log')
const npm = require('./util/npm.js')
diff --git a/deps/npm/node_modules/pacote/lib/remote.js b/deps/npm/node_modules/pacote/lib/remote.js
index a361a9e897..fd617459fb 100644
--- a/deps/npm/node_modules/pacote/lib/remote.js
+++ b/deps/npm/node_modules/pacote/lib/remote.js
@@ -3,7 +3,7 @@ const FileFetcher = require('./file.js')
const _tarballFromResolved = Symbol.for('pacote.Fetcher._tarballFromResolved')
const pacoteVersion = require('../package.json').version
const fetch = require('npm-registry-fetch')
-const Minipass = require('minipass')
+const { Minipass } = require('minipass')
const _cacheFetches = Symbol.for('pacote.Fetcher._cacheFetches')
const _headers = Symbol('_headers')
diff --git a/deps/npm/node_modules/pacote/package.json b/deps/npm/node_modules/pacote/package.json
index 8a89a1dd61..48f2bb0ac3 100644
--- a/deps/npm/node_modules/pacote/package.json
+++ b/deps/npm/node_modules/pacote/package.json
@@ -1,6 +1,6 @@
{
"name": "pacote",
- "version": "15.1.1",
+ "version": "15.1.3",
"description": "JavaScript package downloader",
"author": "GitHub Inc.",
"bin": {
@@ -27,7 +27,7 @@
"devDependencies": {
"@npmcli/arborist": "^6.0.0 || ^6.0.0-pre.0",
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.11.4",
+ "@npmcli/template-oss": "4.14.1",
"hosted-git-info": "^6.0.0",
"mutate-fs": "^2.1.1",
"nock": "^13.2.4",
@@ -50,7 +50,7 @@
"@npmcli/run-script": "^6.0.0",
"cacache": "^17.0.0",
"fs-minipass": "^3.0.0",
- "minipass": "^4.0.0",
+ "minipass": "^5.0.0",
"npm-package-arg": "^10.0.0",
"npm-packlist": "^7.0.0",
"npm-pick-manifest": "^8.0.0",
@@ -59,7 +59,7 @@
"promise-retry": "^2.0.1",
"read-package-json": "^6.0.0",
"read-package-json-fast": "^3.0.0",
- "sigstore": "^1.0.0",
+ "sigstore": "^1.3.0",
"ssri": "^10.0.0",
"tar": "^6.1.11"
},
@@ -72,7 +72,8 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.11.4",
- "windowsCI": false
+ "version": "4.14.1",
+ "windowsCI": false,
+ "publish": "true"
}
}
diff --git a/deps/npm/node_modules/path-key/index.js b/deps/npm/node_modules/path-key/index.js
new file mode 100644
index 0000000000..0cf6415d60
--- /dev/null
+++ b/deps/npm/node_modules/path-key/index.js
@@ -0,0 +1,16 @@
+'use strict';
+
+const pathKey = (options = {}) => {
+ const environment = options.env || process.env;
+ const platform = options.platform || process.platform;
+
+ if (platform !== 'win32') {
+ return 'PATH';
+ }
+
+ return Object.keys(environment).reverse().find(key => key.toUpperCase() === 'PATH') || 'Path';
+};
+
+module.exports = pathKey;
+// TODO: Remove this for the next major release
+module.exports.default = pathKey;
diff --git a/deps/npm/node_modules/path-key/license b/deps/npm/node_modules/path-key/license
new file mode 100644
index 0000000000..e7af2f7710
--- /dev/null
+++ b/deps/npm/node_modules/path-key/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (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/path-key/package.json b/deps/npm/node_modules/path-key/package.json
new file mode 100644
index 0000000000..c8cbd383af
--- /dev/null
+++ b/deps/npm/node_modules/path-key/package.json
@@ -0,0 +1,39 @@
+{
+ "name": "path-key",
+ "version": "3.1.1",
+ "description": "Get the PATH environment variable key cross-platform",
+ "license": "MIT",
+ "repository": "sindresorhus/path-key",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "sindresorhus.com"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "scripts": {
+ "test": "xo && ava && tsd"
+ },
+ "files": [
+ "index.js",
+ "index.d.ts"
+ ],
+ "keywords": [
+ "path",
+ "key",
+ "environment",
+ "env",
+ "variable",
+ "var",
+ "get",
+ "cross-platform",
+ "windows"
+ ],
+ "devDependencies": {
+ "@types/node": "^11.13.0",
+ "ava": "^1.4.1",
+ "tsd": "^0.7.2",
+ "xo": "^0.24.0"
+ }
+}
diff --git a/deps/npm/node_modules/path-scurry/dist/cjs/index.js b/deps/npm/node_modules/path-scurry/dist/cjs/index.js
index 54901bd8ae..d209f0e833 100644
--- a/deps/npm/node_modules/path-scurry/dist/cjs/index.js
+++ b/deps/npm/node_modules/path-scurry/dist/cjs/index.js
@@ -22,12 +22,9 @@ var __importStar = (this && this.__importStar) || function (mod) {
__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.PathScurry = exports.Path = exports.PathScurryDarwin = exports.PathScurryPosix = exports.PathScurryWin32 = exports.PathScurryBase = exports.PathPosix = exports.PathWin32 = exports.PathBase = exports.ChildrenCache = exports.ResolveCache = void 0;
-const lru_cache_1 = __importDefault(require("lru-cache"));
+const lru_cache_1 = require("lru-cache");
const path_1 = require("path");
const url_1 = require("url");
const actualFS = __importStar(require("fs"));
@@ -36,7 +33,7 @@ const realpathSync = fs_1.realpathSync.native;
// TODO: test perf of fs/promises realpath vs realpathCB,
// since the promises one uses realpath.native
const promises_1 = require("fs/promises");
-const minipass_1 = __importDefault(require("minipass"));
+const minipass_1 = require("minipass");
const defaultFS = {
lstatSync: fs_1.lstatSync,
readdir: fs_1.readdir,
@@ -131,7 +128,7 @@ const normalizeNocase = (s) => {
* An LRUCache for storing resolved path strings or Path objects.
* @internal
*/
-class ResolveCache extends lru_cache_1.default {
+class ResolveCache extends lru_cache_1.LRUCache {
constructor() {
super({ max: 256 });
}
@@ -152,7 +149,7 @@ exports.ResolveCache = ResolveCache;
* an LRUCache for storing child entries.
* @internal
*/
-class ChildrenCache extends lru_cache_1.default {
+class ChildrenCache extends lru_cache_1.LRUCache {
constructor(maxSize = 16 * 1024) {
super({
maxSize,
@@ -287,7 +284,9 @@ class PathBase {
#matchName;
#depth;
#fullpath;
+ #fullpathPosix;
#relative;
+ #relativePosix;
#type;
#children;
#linkTarget;
@@ -308,6 +307,7 @@ class PathBase {
this.#children = children;
this.#fullpath = opts.fullpath;
this.#relative = opts.relative;
+ this.#relativePosix = opts.relativePosix;
this.parent = opts.parent;
if (this.parent) {
this.#fs = this.parent.#fs;
@@ -428,8 +428,6 @@ class PathBase {
* The relative path from the cwd. If it does not share an ancestor with
* the cwd, then this ends up being equivalent to the fullpath()
*/
- // TODO: instead of taking a param here, set it to '' in the constructor
- // for the CWD, and set it to this.name for any roots.
relative() {
if (this.#relative !== undefined) {
return this.#relative;
@@ -444,6 +442,26 @@ class PathBase {
return (this.#relative = rp);
}
/**
+ * The relative path from the cwd, using / as the path separator.
+ * If it does not share an ancestor with
+ * the cwd, then this ends up being equivalent to the fullpathPosix()
+ * On posix systems, this is identical to relative().
+ */
+ relativePosix() {
+ if (this.sep === '/')
+ return this.relative();
+ if (this.#relativePosix !== undefined)
+ return this.#relativePosix;
+ const name = this.name;
+ const p = this.parent;
+ if (!p) {
+ return (this.#relativePosix = this.fullpathPosix());
+ }
+ const pv = p.relativePosix();
+ const rp = pv + (!pv || !p.parent ? '' : '/') + name;
+ return (this.#relativePosix = rp);
+ }
+ /**
* The fully resolved path string for this Path entry
*/
fullpath() {
@@ -460,6 +478,31 @@ class PathBase {
return (this.#fullpath = fp);
}
/**
+ * On platforms other than windows, this is identical to fullpath.
+ *
+ * On windows, this is overridden to return the forward-slash form of the
+ * full UNC path.
+ */
+ fullpathPosix() {
+ if (this.#fullpathPosix !== undefined)
+ return this.#fullpathPosix;
+ if (this.sep === '/')
+ return (this.#fullpathPosix = this.fullpath());
+ if (!this.parent) {
+ const p = this.fullpath().replace(/\\/g, '/');
+ if (/^[a-z]:\//i.test(p)) {
+ return (this.#fullpathPosix = `//?/${p}`);
+ }
+ else {
+ return (this.#fullpathPosix = p);
+ }
+ }
+ const p = this.parent;
+ const pfpp = p.fullpathPosix();
+ const fpp = pfpp + (!pfpp || !p.parent ? '' : '/') + this.name;
+ return (this.#fullpathPosix = fpp);
+ }
+ /**
* Is the Path of an unknown type?
*
* Note that we might know *something* about it if there has been a previous
@@ -1207,6 +1250,7 @@ class PathScurryBase {
*/
cwd;
#resolveCache;
+ #resolvePosixCache;
#children;
/**
* Perform path comparisons case-insensitively.
@@ -1233,6 +1277,7 @@ class PathScurryBase {
this.roots = Object.create(null);
this.rootPath = this.parseRootPath(cwdPath);
this.#resolveCache = new ResolveCache();
+ this.#resolvePosixCache = new ResolveCache();
this.#children = new ChildrenCache(childrenCacheSize);
const split = cwdPath.substring(this.rootPath.length).split(sep);
// resolve('/') leaves '', splits to [''], we don't want that.
@@ -1253,8 +1298,10 @@ class PathScurryBase {
let abs = this.rootPath;
let sawFirst = false;
for (const part of split) {
+ const l = len--;
prev = prev.child(part, {
- relative: new Array(len--).fill('..').join(joinSep),
+ relative: new Array(l).fill('..').join(joinSep),
+ relativePosix: new Array(l).fill('..').join('/'),
fullpath: (abs += (sawFirst ? '' : joinSep) + part),
});
sawFirst = true;
@@ -1310,6 +1357,38 @@ class PathScurryBase {
return result;
}
/**
+ * Resolve one or more path strings to a resolved string, returning
+ * the posix path. Identical to .resolve() on posix systems, but on
+ * windows will return a forward-slash separated UNC path.
+ *
+ * Same interface as require('path').resolve.
+ *
+ * Much faster than path.resolve() when called multiple times for the same
+ * path, because the resolved Path objects are cached. Much slower
+ * otherwise.
+ */
+ resolvePosix(...paths) {
+ // first figure out the minimum number of paths we have to test
+ // we always start at cwd, but any absolutes will bump the start
+ let r = '';
+ for (let i = paths.length - 1; i >= 0; i--) {
+ const p = paths[i];
+ if (!p || p === '.')
+ continue;
+ r = r ? `${p}/${r}` : p;
+ if (this.isAbsolute(p)) {
+ break;
+ }
+ }
+ const cached = this.#resolvePosixCache.get(r);
+ if (cached !== undefined) {
+ return cached;
+ }
+ const result = this.cwd.resolve(r).fullpathPosix();
+ this.#resolvePosixCache.set(r, result);
+ return result;
+ }
+ /**
* find the relative path from the cwd to the supplied path string or entry
*/
relative(entry = this.cwd) {
@@ -1319,6 +1398,16 @@ class PathScurryBase {
return entry.relative();
}
/**
+ * find the relative path from the cwd to the supplied path string or
+ * entry, using / as the path delimiter, even on Windows.
+ */
+ relativePosix(entry = this.cwd) {
+ if (typeof entry === 'string') {
+ entry = this.cwd.resolve(entry);
+ }
+ return entry.relativePosix();
+ }
+ /**
* Return the basename for the provided string or Path object
*/
basename(entry = this.cwd) {
@@ -1627,7 +1716,7 @@ class PathScurryBase {
entry = this.cwd;
}
const { withFileTypes = true, follow = false, filter, walkFilter, } = opts;
- const results = new minipass_1.default({ objectMode: true });
+ const results = new minipass_1.Minipass({ objectMode: true });
if (!filter || filter(entry)) {
results.write(withFileTypes ? entry : entry.fullpath());
}
@@ -1703,7 +1792,7 @@ class PathScurryBase {
entry = this.cwd;
}
const { withFileTypes = true, follow = false, filter, walkFilter, } = opts;
- const results = new minipass_1.default({ objectMode: true });
+ const results = new minipass_1.Minipass({ objectMode: true });
const dirs = new Set();
if (!filter || filter(entry)) {
results.write(withFileTypes ? entry : entry.fullpath());
diff --git a/deps/npm/node_modules/path-scurry/dist/mjs/index.js b/deps/npm/node_modules/path-scurry/dist/mjs/index.js
index b6a2cf9c8a..8490cf7312 100644
--- a/deps/npm/node_modules/path-scurry/dist/mjs/index.js
+++ b/deps/npm/node_modules/path-scurry/dist/mjs/index.js
@@ -1,4 +1,4 @@
-import LRUCache from 'lru-cache';
+import { LRUCache } from 'lru-cache';
import { posix, win32 } from 'path';
import { fileURLToPath } from 'url';
import * as actualFS from 'fs';
@@ -7,7 +7,7 @@ const realpathSync = rps.native;
// TODO: test perf of fs/promises realpath vs realpathCB,
// since the promises one uses realpath.native
import { lstat, readdir, readlink, realpath } from 'fs/promises';
-import Minipass from 'minipass';
+import { Minipass } from 'minipass';
const defaultFS = {
lstatSync,
readdir: readdirCB,
@@ -256,7 +256,9 @@ export class PathBase {
#matchName;
#depth;
#fullpath;
+ #fullpathPosix;
#relative;
+ #relativePosix;
#type;
#children;
#linkTarget;
@@ -277,6 +279,7 @@ export class PathBase {
this.#children = children;
this.#fullpath = opts.fullpath;
this.#relative = opts.relative;
+ this.#relativePosix = opts.relativePosix;
this.parent = opts.parent;
if (this.parent) {
this.#fs = this.parent.#fs;
@@ -397,8 +400,6 @@ export class PathBase {
* The relative path from the cwd. If it does not share an ancestor with
* the cwd, then this ends up being equivalent to the fullpath()
*/
- // TODO: instead of taking a param here, set it to '' in the constructor
- // for the CWD, and set it to this.name for any roots.
relative() {
if (this.#relative !== undefined) {
return this.#relative;
@@ -413,6 +414,26 @@ export class PathBase {
return (this.#relative = rp);
}
/**
+ * The relative path from the cwd, using / as the path separator.
+ * If it does not share an ancestor with
+ * the cwd, then this ends up being equivalent to the fullpathPosix()
+ * On posix systems, this is identical to relative().
+ */
+ relativePosix() {
+ if (this.sep === '/')
+ return this.relative();
+ if (this.#relativePosix !== undefined)
+ return this.#relativePosix;
+ const name = this.name;
+ const p = this.parent;
+ if (!p) {
+ return (this.#relativePosix = this.fullpathPosix());
+ }
+ const pv = p.relativePosix();
+ const rp = pv + (!pv || !p.parent ? '' : '/') + name;
+ return (this.#relativePosix = rp);
+ }
+ /**
* The fully resolved path string for this Path entry
*/
fullpath() {
@@ -429,6 +450,31 @@ export class PathBase {
return (this.#fullpath = fp);
}
/**
+ * On platforms other than windows, this is identical to fullpath.
+ *
+ * On windows, this is overridden to return the forward-slash form of the
+ * full UNC path.
+ */
+ fullpathPosix() {
+ if (this.#fullpathPosix !== undefined)
+ return this.#fullpathPosix;
+ if (this.sep === '/')
+ return (this.#fullpathPosix = this.fullpath());
+ if (!this.parent) {
+ const p = this.fullpath().replace(/\\/g, '/');
+ if (/^[a-z]:\//i.test(p)) {
+ return (this.#fullpathPosix = `//?/${p}`);
+ }
+ else {
+ return (this.#fullpathPosix = p);
+ }
+ }
+ const p = this.parent;
+ const pfpp = p.fullpathPosix();
+ const fpp = pfpp + (!pfpp || !p.parent ? '' : '/') + this.name;
+ return (this.#fullpathPosix = fpp);
+ }
+ /**
* Is the Path of an unknown type?
*
* Note that we might know *something* about it if there has been a previous
@@ -1173,6 +1219,7 @@ export class PathScurryBase {
*/
cwd;
#resolveCache;
+ #resolvePosixCache;
#children;
/**
* Perform path comparisons case-insensitively.
@@ -1199,6 +1246,7 @@ export class PathScurryBase {
this.roots = Object.create(null);
this.rootPath = this.parseRootPath(cwdPath);
this.#resolveCache = new ResolveCache();
+ this.#resolvePosixCache = new ResolveCache();
this.#children = new ChildrenCache(childrenCacheSize);
const split = cwdPath.substring(this.rootPath.length).split(sep);
// resolve('/') leaves '', splits to [''], we don't want that.
@@ -1219,8 +1267,10 @@ export class PathScurryBase {
let abs = this.rootPath;
let sawFirst = false;
for (const part of split) {
+ const l = len--;
prev = prev.child(part, {
- relative: new Array(len--).fill('..').join(joinSep),
+ relative: new Array(l).fill('..').join(joinSep),
+ relativePosix: new Array(l).fill('..').join('/'),
fullpath: (abs += (sawFirst ? '' : joinSep) + part),
});
sawFirst = true;
@@ -1276,6 +1326,38 @@ export class PathScurryBase {
return result;
}
/**
+ * Resolve one or more path strings to a resolved string, returning
+ * the posix path. Identical to .resolve() on posix systems, but on
+ * windows will return a forward-slash separated UNC path.
+ *
+ * Same interface as require('path').resolve.
+ *
+ * Much faster than path.resolve() when called multiple times for the same
+ * path, because the resolved Path objects are cached. Much slower
+ * otherwise.
+ */
+ resolvePosix(...paths) {
+ // first figure out the minimum number of paths we have to test
+ // we always start at cwd, but any absolutes will bump the start
+ let r = '';
+ for (let i = paths.length - 1; i >= 0; i--) {
+ const p = paths[i];
+ if (!p || p === '.')
+ continue;
+ r = r ? `${p}/${r}` : p;
+ if (this.isAbsolute(p)) {
+ break;
+ }
+ }
+ const cached = this.#resolvePosixCache.get(r);
+ if (cached !== undefined) {
+ return cached;
+ }
+ const result = this.cwd.resolve(r).fullpathPosix();
+ this.#resolvePosixCache.set(r, result);
+ return result;
+ }
+ /**
* find the relative path from the cwd to the supplied path string or entry
*/
relative(entry = this.cwd) {
@@ -1285,6 +1367,16 @@ export class PathScurryBase {
return entry.relative();
}
/**
+ * find the relative path from the cwd to the supplied path string or
+ * entry, using / as the path delimiter, even on Windows.
+ */
+ relativePosix(entry = this.cwd) {
+ if (typeof entry === 'string') {
+ entry = this.cwd.resolve(entry);
+ }
+ return entry.relativePosix();
+ }
+ /**
* Return the basename for the provided string or Path object
*/
basename(entry = this.cwd) {
diff --git a/deps/npm/node_modules/path-scurry/node_modules/lru-cache/LICENSE b/deps/npm/node_modules/path-scurry/node_modules/lru-cache/LICENSE
new file mode 100644
index 0000000000..f785757cd6
--- /dev/null
+++ b/deps/npm/node_modules/path-scurry/node_modules/lru-cache/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) 2010-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/path-scurry/node_modules/lru-cache/dist/cjs/index.js b/deps/npm/node_modules/path-scurry/node_modules/lru-cache/dist/cjs/index.js
new file mode 100644
index 0000000000..e6c4f90929
--- /dev/null
+++ b/deps/npm/node_modules/path-scurry/node_modules/lru-cache/dist/cjs/index.js
@@ -0,0 +1,1395 @@
+"use strict";
+/**
+ * @module LRUCache
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.LRUCache = void 0;
+const perf = typeof performance === 'object' &&
+ performance &&
+ typeof performance.now === 'function'
+ ? performance
+ : Date;
+const warned = new Set();
+/* c8 ignore start */
+const PROCESS = (typeof process === 'object' && !!process ? process : {});
+/* c8 ignore start */
+const emitWarning = (msg, type, code, fn) => {
+ typeof PROCESS.emitWarning === 'function'
+ ? PROCESS.emitWarning(msg, type, code, fn)
+ : console.error(`[${code}] ${type}: ${msg}`);
+};
+let AC = globalThis.AbortController;
+let AS = globalThis.AbortSignal;
+/* c8 ignore start */
+if (typeof AC === 'undefined') {
+ //@ts-ignore
+ AS = class AbortSignal {
+ onabort;
+ _onabort = [];
+ reason;
+ aborted = false;
+ addEventListener(_, fn) {
+ this._onabort.push(fn);
+ }
+ };
+ //@ts-ignore
+ AC = class AbortController {
+ constructor() {
+ warnACPolyfill();
+ }
+ signal = new AS();
+ abort(reason) {
+ if (this.signal.aborted)
+ return;
+ //@ts-ignore
+ this.signal.reason = reason;
+ //@ts-ignore
+ this.signal.aborted = true;
+ //@ts-ignore
+ for (const fn of this.signal._onabort) {
+ fn(reason);
+ }
+ this.signal.onabort?.(reason);
+ }
+ };
+ let printACPolyfillWarning = PROCESS.env?.LRU_CACHE_IGNORE_AC_WARNING !== '1';
+ const warnACPolyfill = () => {
+ if (!printACPolyfillWarning)
+ return;
+ printACPolyfillWarning = false;
+ emitWarning('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', warnACPolyfill);
+ };
+}
+/* c8 ignore stop */
+const shouldWarn = (code) => !warned.has(code);
+const TYPE = Symbol('type');
+const isPosInt = (n) => n && n === Math.floor(n) && n > 0 && isFinite(n);
+/* c8 ignore start */
+// This is a little bit ridiculous, tbh.
+// The maximum array length is 2^32-1 or thereabouts on most JS impls.
+// And well before that point, you're caching the entire world, I mean,
+// that's ~32GB of just integers for the next/prev links, plus whatever
+// else to hold that many keys and values. Just filling the memory with
+// zeroes at init time is brutal when you get that big.
+// But why not be complete?
+// Maybe in the future, these limits will have expanded.
+const getUintArray = (max) => !isPosInt(max)
+ ? null
+ : max <= Math.pow(2, 8)
+ ? Uint8Array
+ : max <= Math.pow(2, 16)
+ ? Uint16Array
+ : max <= Math.pow(2, 32)
+ ? Uint32Array
+ : max <= Number.MAX_SAFE_INTEGER
+ ? ZeroArray
+ : null;
+/* c8 ignore stop */
+class ZeroArray extends Array {
+ constructor(size) {
+ super(size);
+ this.fill(0);
+ }
+}
+class Stack {
+ heap;
+ length;
+ // private constructor
+ static #constructing = false;
+ static create(max) {
+ const HeapCls = getUintArray(max);
+ if (!HeapCls)
+ return [];
+ Stack.#constructing = true;
+ const s = new Stack(max, HeapCls);
+ Stack.#constructing = false;
+ return s;
+ }
+ constructor(max, HeapCls) {
+ /* c8 ignore start */
+ if (!Stack.#constructing) {
+ throw new TypeError('instantiate Stack using Stack.create(n)');
+ }
+ /* c8 ignore stop */
+ this.heap = new HeapCls(max);
+ this.length = 0;
+ }
+ push(n) {
+ this.heap[this.length++] = n;
+ }
+ pop() {
+ return this.heap[--this.length];
+ }
+}
+/**
+ * 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.
+ */
+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.
+ #max;
+ #maxSize;
+ #dispose;
+ #disposeAfter;
+ #fetchMethod;
+ /**
+ * {@link LRUCache.OptionsBase.ttl}
+ */
+ ttl;
+ /**
+ * {@link LRUCache.OptionsBase.ttlResolution}
+ */
+ ttlResolution;
+ /**
+ * {@link LRUCache.OptionsBase.ttlAutopurge}
+ */
+ ttlAutopurge;
+ /**
+ * {@link LRUCache.OptionsBase.updateAgeOnGet}
+ */
+ updateAgeOnGet;
+ /**
+ * {@link LRUCache.OptionsBase.updateAgeOnHas}
+ */
+ updateAgeOnHas;
+ /**
+ * {@link LRUCache.OptionsBase.allowStale}
+ */
+ allowStale;
+ /**
+ * {@link LRUCache.OptionsBase.noDisposeOnSet}
+ */
+ noDisposeOnSet;
+ /**
+ * {@link LRUCache.OptionsBase.noUpdateTTL}
+ */
+ noUpdateTTL;
+ /**
+ * {@link LRUCache.OptionsBase.maxEntrySize}
+ */
+ maxEntrySize;
+ /**
+ * {@link LRUCache.OptionsBase.sizeCalculation}
+ */
+ sizeCalculation;
+ /**
+ * {@link LRUCache.OptionsBase.noDeleteOnFetchRejection}
+ */
+ noDeleteOnFetchRejection;
+ /**
+ * {@link LRUCache.OptionsBase.noDeleteOnStaleGet}
+ */
+ noDeleteOnStaleGet;
+ /**
+ * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort}
+ */
+ allowStaleOnFetchAbort;
+ /**
+ * {@link LRUCache.OptionsBase.allowStaleOnFetchRejection}
+ */
+ allowStaleOnFetchRejection;
+ /**
+ * {@link LRUCache.OptionsBase.ignoreFetchAbort}
+ */
+ ignoreFetchAbort;
+ // computed properties
+ #size;
+ #calculatedSize;
+ #keyMap;
+ #keyList;
+ #valList;
+ #next;
+ #prev;
+ #head;
+ #tail;
+ #free;
+ #disposed;
+ #sizes;
+ #starts;
+ #ttls;
+ #hasDispose;
+ #hasFetchMethod;
+ #hasDisposeAfter;
+ /**
+ * Do not call this method unless you need to inspect the
+ * inner workings of the cache. If anything returned by this
+ * object is modified in any way, strange breakage may occur.
+ *
+ * These fields are private for a reason!
+ *
+ * @internal
+ */
+ static unsafeExposeInternals(c) {
+ return {
+ // properties
+ starts: c.#starts,
+ ttls: c.#ttls,
+ sizes: c.#sizes,
+ keyMap: c.#keyMap,
+ keyList: c.#keyList,
+ valList: c.#valList,
+ next: c.#next,
+ prev: c.#prev,
+ get head() {
+ return c.#head;
+ },
+ get tail() {
+ return c.#tail;
+ },
+ free: c.#free,
+ // methods
+ isBackgroundFetch: (p) => c.#isBackgroundFetch(p),
+ backgroundFetch: (k, index, options, context) => c.#backgroundFetch(k, index, options, context),
+ moveToTail: (index) => c.#moveToTail(index),
+ indexes: (options) => c.#indexes(options),
+ rindexes: (options) => c.#rindexes(options),
+ isStale: (index) => c.#isStale(index),
+ };
+ }
+ // Protected read-only members
+ /**
+ * {@link LRUCache.OptionsBase.max} (read-only)
+ */
+ get max() {
+ return this.#max;
+ }
+ /**
+ * {@link LRUCache.OptionsBase.maxSize} (read-only)
+ */
+ get maxSize() {
+ return this.#maxSize;
+ }
+ /**
+ * The total computed size of items in the cache (read-only)
+ */
+ get calculatedSize() {
+ return this.#calculatedSize;
+ }
+ /**
+ * The number of items stored in the cache (read-only)
+ */
+ get size() {
+ return this.#size;
+ }
+ /**
+ * {@link LRUCache.OptionsBase.fetchMethod} (read-only)
+ */
+ get fetchMethod() {
+ return this.#fetchMethod;
+ }
+ /**
+ * {@link LRUCache.OptionsBase.dispose} (read-only)
+ */
+ get dispose() {
+ return this.#dispose;
+ }
+ /**
+ * {@link LRUCache.OptionsBase.disposeAfter} (read-only)
+ */
+ get disposeAfter() {
+ 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;
+ if (max !== 0 && !isPosInt(max)) {
+ throw new TypeError('max option must be a nonnegative integer');
+ }
+ const UintArray = max ? getUintArray(max) : Array;
+ if (!UintArray) {
+ throw new Error('invalid max value: ' + max);
+ }
+ this.#max = max;
+ this.#maxSize = maxSize;
+ this.maxEntrySize = maxEntrySize || this.#maxSize;
+ this.sizeCalculation = sizeCalculation;
+ if (this.sizeCalculation) {
+ if (!this.#maxSize && !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 (fetchMethod !== undefined &&
+ typeof fetchMethod !== 'function') {
+ throw new TypeError('fetchMethod must be a function if specified');
+ }
+ this.#fetchMethod = fetchMethod;
+ this.#hasFetchMethod = !!fetchMethod;
+ this.#keyMap = new Map();
+ this.#keyList = new Array(max).fill(undefined);
+ this.#valList = new Array(max).fill(undefined);
+ this.#next = new UintArray(max);
+ this.#prev = new UintArray(max);
+ this.#head = 0;
+ this.#tail = 0;
+ this.#free = Stack.create(max);
+ this.#size = 0;
+ this.#calculatedSize = 0;
+ if (typeof dispose === 'function') {
+ this.#dispose = dispose;
+ }
+ if (typeof disposeAfter === 'function') {
+ this.#disposeAfter = disposeAfter;
+ this.#disposed = [];
+ }
+ else {
+ this.#disposeAfter = undefined;
+ this.#disposed = undefined;
+ }
+ this.#hasDispose = !!this.#dispose;
+ this.#hasDisposeAfter = !!this.#disposeAfter;
+ this.noDisposeOnSet = !!noDisposeOnSet;
+ this.noUpdateTTL = !!noUpdateTTL;
+ this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection;
+ this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection;
+ this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort;
+ this.ignoreFetchAbort = !!ignoreFetchAbort;
+ // NB: maxEntrySize is set to maxSize if it's set
+ if (this.maxEntrySize !== 0) {
+ if (this.#maxSize !== 0) {
+ if (!isPosInt(this.#maxSize)) {
+ throw new TypeError('maxSize must be a positive integer if specified');
+ }
+ }
+ if (!isPosInt(this.maxEntrySize)) {
+ throw new TypeError('maxEntrySize must be a positive integer if specified');
+ }
+ this.#initializeSizeTracking();
+ }
+ this.allowStale = !!allowStale;
+ this.noDeleteOnStaleGet = !!noDeleteOnStaleGet;
+ this.updateAgeOnGet = !!updateAgeOnGet;
+ this.updateAgeOnHas = !!updateAgeOnHas;
+ this.ttlResolution =
+ isPosInt(ttlResolution) || ttlResolution === 0
+ ? ttlResolution
+ : 1;
+ this.ttlAutopurge = !!ttlAutopurge;
+ this.ttl = ttl || 0;
+ if (this.ttl) {
+ if (!isPosInt(this.ttl)) {
+ throw new TypeError('ttl must be a positive integer if specified');
+ }
+ this.#initializeTTLTracking();
+ }
+ // do not allow completely unbounded caches
+ if (this.#max === 0 && this.ttl === 0 && this.#maxSize === 0) {
+ throw new TypeError('At least one of max, maxSize, or ttl is required');
+ }
+ if (!this.ttlAutopurge && !this.#max && !this.#maxSize) {
+ const code = 'LRU_CACHE_UNBOUNDED';
+ if (shouldWarn(code)) {
+ warned.add(code);
+ const msg = 'TTL caching without ttlAutopurge, max, or maxSize can ' +
+ 'result in unbounded memory consumption.';
+ emitWarning(msg, 'UnboundedCacheWarning', code, LRUCache);
+ }
+ }
+ }
+ /**
+ * Return the remaining TTL time for a given entry key
+ */
+ getRemainingTTL(key) {
+ return this.#keyMap.has(key) ? Infinity : 0;
+ }
+ #initializeTTLTracking() {
+ const ttls = new ZeroArray(this.#max);
+ const starts = new ZeroArray(this.#max);
+ this.#ttls = ttls;
+ this.#starts = starts;
+ this.#setItemTTL = (index, ttl, start = perf.now()) => {
+ starts[index] = ttl !== 0 ? start : 0;
+ ttls[index] = ttl;
+ if (ttl !== 0 && this.ttlAutopurge) {
+ const t = setTimeout(() => {
+ if (this.#isStale(index)) {
+ this.delete(this.#keyList[index]);
+ }
+ }, ttl + 1);
+ // unref() not supported on all platforms
+ /* c8 ignore start */
+ if (t.unref) {
+ t.unref();
+ }
+ /* c8 ignore stop */
+ }
+ };
+ this.#updateItemAge = index => {
+ starts[index] = ttls[index] !== 0 ? perf.now() : 0;
+ };
+ this.#statusTTL = (status, index) => {
+ if (ttls[index]) {
+ const ttl = ttls[index];
+ const start = starts[index];
+ status.ttl = ttl;
+ status.start = start;
+ status.now = cachedNow || getNow();
+ const age = status.now - start;
+ status.remainingTTL = ttl - age;
+ }
+ };
+ // debounce calls to perf.now() to 1s so we're not hitting
+ // that costly call repeatedly.
+ let cachedNow = 0;
+ const getNow = () => {
+ const n = perf.now();
+ if (this.ttlResolution > 0) {
+ cachedNow = n;
+ const t = setTimeout(() => (cachedNow = 0), this.ttlResolution);
+ // not available on all platforms
+ /* c8 ignore start */
+ if (t.unref) {
+ t.unref();
+ }
+ /* c8 ignore stop */
+ }
+ return n;
+ };
+ this.getRemainingTTL = key => {
+ const index = this.#keyMap.get(key);
+ if (index === undefined) {
+ return 0;
+ }
+ const ttl = ttls[index];
+ const start = starts[index];
+ if (ttl === 0 || start === 0) {
+ return Infinity;
+ }
+ const age = (cachedNow || getNow()) - start;
+ return ttl - age;
+ };
+ this.#isStale = index => {
+ return (ttls[index] !== 0 &&
+ starts[index] !== 0 &&
+ (cachedNow || getNow()) - starts[index] > ttls[index]);
+ };
+ }
+ // conditionally set private methods related to TTL
+ #updateItemAge = () => { };
+ #statusTTL = () => { };
+ #setItemTTL = () => { };
+ /* c8 ignore stop */
+ #isStale = () => false;
+ #initializeSizeTracking() {
+ const sizes = new ZeroArray(this.#max);
+ this.#calculatedSize = 0;
+ this.#sizes = sizes;
+ this.#removeItemSize = index => {
+ this.#calculatedSize -= sizes[index];
+ sizes[index] = 0;
+ };
+ this.#requireSize = (k, v, size, sizeCalculation) => {
+ // provisionally accept background fetches.
+ // actual value size will be checked when they return.
+ if (this.#isBackgroundFetch(v)) {
+ return 0;
+ }
+ if (!isPosInt(size)) {
+ if (sizeCalculation) {
+ if (typeof sizeCalculation !== 'function') {
+ throw new TypeError('sizeCalculation must be a function');
+ }
+ size = sizeCalculation(v, k);
+ if (!isPosInt(size)) {
+ 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 size;
+ };
+ this.#addItemSize = (index, size, status) => {
+ sizes[index] = size;
+ if (this.#maxSize) {
+ const maxSize = this.#maxSize - sizes[index];
+ while (this.#calculatedSize > maxSize) {
+ this.#evict(true);
+ }
+ }
+ this.#calculatedSize += sizes[index];
+ if (status) {
+ status.entrySize = size;
+ status.totalCalculatedSize = this.#calculatedSize;
+ }
+ };
+ }
+ #removeItemSize = _i => { };
+ #addItemSize = (_i, _s, _st) => { };
+ #requireSize = (_k, _v, size, sizeCalculation) => {
+ if (size || sizeCalculation) {
+ throw new TypeError('cannot set size without setting maxSize or maxEntrySize on cache');
+ }
+ return 0;
+ };
+ *#indexes({ allowStale = this.allowStale } = {}) {
+ if (this.#size) {
+ for (let i = this.#tail; true;) {
+ if (!this.#isValidIndex(i)) {
+ break;
+ }
+ if (allowStale || !this.#isStale(i)) {
+ yield i;
+ }
+ if (i === this.#head) {
+ break;
+ }
+ else {
+ i = this.#prev[i];
+ }
+ }
+ }
+ }
+ *#rindexes({ allowStale = this.allowStale } = {}) {
+ if (this.#size) {
+ for (let i = this.#head; true;) {
+ if (!this.#isValidIndex(i)) {
+ break;
+ }
+ if (allowStale || !this.#isStale(i)) {
+ yield i;
+ }
+ if (i === this.#tail) {
+ break;
+ }
+ else {
+ i = this.#next[i];
+ }
+ }
+ }
+ }
+ #isValidIndex(index) {
+ return (index !== undefined &&
+ this.#keyMap.get(this.#keyList[index]) === index);
+ }
+ /**
+ * Return a generator yielding `[key, value]` pairs,
+ * in order from most recently used to least recently used.
+ */
+ *entries() {
+ for (const i of this.#indexes()) {
+ if (this.#valList[i] !== undefined &&
+ this.#keyList[i] !== undefined &&
+ !this.#isBackgroundFetch(this.#valList[i])) {
+ yield [this.#keyList[i], this.#valList[i]];
+ }
+ }
+ }
+ /**
+ * Inverse order version of {@link LRUCache.entries}
+ *
+ * Return a generator yielding `[key, value]` pairs,
+ * in order from least recently used to most recently used.
+ */
+ *rentries() {
+ for (const i of this.#rindexes()) {
+ if (this.#valList[i] !== undefined &&
+ this.#keyList[i] !== undefined &&
+ !this.#isBackgroundFetch(this.#valList[i])) {
+ yield [this.#keyList[i], this.#valList[i]];
+ }
+ }
+ }
+ /**
+ * Return a generator yielding the keys in the cache,
+ * in order from most recently used to least recently used.
+ */
+ *keys() {
+ for (const i of this.#indexes()) {
+ const k = this.#keyList[i];
+ if (k !== undefined &&
+ !this.#isBackgroundFetch(this.#valList[i])) {
+ yield k;
+ }
+ }
+ }
+ /**
+ * Inverse order version of {@link LRUCache.keys}
+ *
+ * Return a generator yielding the keys in the cache,
+ * in order from least recently used to most recently used.
+ */
+ *rkeys() {
+ for (const i of this.#rindexes()) {
+ const k = this.#keyList[i];
+ if (k !== undefined &&
+ !this.#isBackgroundFetch(this.#valList[i])) {
+ yield k;
+ }
+ }
+ }
+ /**
+ * Return a generator yielding the values in the cache,
+ * in order from most recently used to least recently used.
+ */
+ *values() {
+ for (const i of this.#indexes()) {
+ const v = this.#valList[i];
+ if (v !== undefined &&
+ !this.#isBackgroundFetch(this.#valList[i])) {
+ yield this.#valList[i];
+ }
+ }
+ }
+ /**
+ * Inverse order version of {@link LRUCache.values}
+ *
+ * Return a generator yielding the values in the cache,
+ * in order from least recently used to most recently used.
+ */
+ *rvalues() {
+ for (const i of this.#rindexes()) {
+ const v = this.#valList[i];
+ if (v !== undefined &&
+ !this.#isBackgroundFetch(this.#valList[i])) {
+ yield this.#valList[i];
+ }
+ }
+ }
+ /**
+ * Iterating over the cache itself yields the same results as
+ * {@link LRUCache.entries}
+ */
+ [Symbol.iterator]() {
+ return this.entries();
+ }
+ /**
+ * 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).
+ */
+ find(fn, getOptions = {}) {
+ for (const i of this.#indexes()) {
+ const v = this.#valList[i];
+ const value = this.#isBackgroundFetch(v)
+ ? v.__staleWhileFetching
+ : v;
+ if (value === undefined)
+ continue;
+ if (fn(value, this.#keyList[i], this)) {
+ return this.get(this.#keyList[i], getOptions);
+ }
+ }
+ }
+ /**
+ * 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.
+ */
+ forEach(fn, thisp = this) {
+ for (const i of this.#indexes()) {
+ const v = this.#valList[i];
+ const value = this.#isBackgroundFetch(v)
+ ? v.__staleWhileFetching
+ : v;
+ if (value === undefined)
+ continue;
+ fn.call(thisp, value, this.#keyList[i], this);
+ }
+ }
+ /**
+ * The same as {@link LRUCache.forEach} but items are iterated over in
+ * reverse order. (ie, less recently used items are iterated over first.)
+ */
+ rforEach(fn, thisp = this) {
+ for (const i of this.#rindexes()) {
+ const v = this.#valList[i];
+ const value = this.#isBackgroundFetch(v)
+ ? v.__staleWhileFetching
+ : v;
+ if (value === undefined)
+ continue;
+ fn.call(thisp, value, this.#keyList[i], this);
+ }
+ }
+ /**
+ * Delete any stale entries. Returns true if anything was removed,
+ * false otherwise.
+ */
+ purgeStale() {
+ let deleted = false;
+ for (const i of this.#rindexes({ allowStale: true })) {
+ if (this.#isStale(i)) {
+ this.delete(this.#keyList[i]);
+ deleted = true;
+ }
+ }
+ return deleted;
+ }
+ /**
+ * Return an array of [key, {@link LRUCache.Entry}] tuples which can be
+ * passed to cache.load()
+ */
+ dump() {
+ const arr = [];
+ for (const i of this.#indexes({ allowStale: true })) {
+ const key = this.#keyList[i];
+ const v = this.#valList[i];
+ const value = this.#isBackgroundFetch(v)
+ ? v.__staleWhileFetching
+ : v;
+ if (value === undefined || key === undefined)
+ continue;
+ const entry = { value };
+ if (this.#ttls && this.#starts) {
+ entry.ttl = this.#ttls[i];
+ // always dump the start relative to a portable timestamp
+ // it's ok for this to be a bit slow, it's a rare operation.
+ const age = perf.now() - this.#starts[i];
+ entry.start = Math.floor(Date.now() - age);
+ }
+ if (this.#sizes) {
+ entry.size = this.#sizes[i];
+ }
+ arr.unshift([key, entry]);
+ }
+ return arr;
+ }
+ /**
+ * 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.
+ */
+ load(arr) {
+ this.clear();
+ for (const [key, entry] of arr) {
+ if (entry.start) {
+ // entry.start is a portable timestamp, but we may be using
+ // node's performance.now(), so calculate the offset, so that
+ // we get the intended remaining TTL, no matter how long it's
+ // been on ice.
+ //
+ // it's ok for this to be a bit slow, it's a rare operation.
+ const age = Date.now() - entry.start;
+ entry.start = perf.now() - age;
+ }
+ this.set(key, entry.value, entry);
+ }
+ }
+ /**
+ * Add a value to the cache.
+ *
+ * Note: if `undefined` is specified as a value, this is an alias for
+ * {@link LRUCache#delete}
+ */
+ set(k, v, setOptions = {}) {
+ if (v === undefined) {
+ this.delete(k);
+ return this;
+ }
+ const { ttl = this.ttl, start, noDisposeOnSet = this.noDisposeOnSet, sizeCalculation = this.sizeCalculation, status, } = setOptions;
+ let { noUpdateTTL = this.noUpdateTTL } = setOptions;
+ const size = this.#requireSize(k, v, setOptions.size || 0, sizeCalculation);
+ // if the item doesn't fit, don't do anything
+ // NB: maxEntrySize set to maxSize by default
+ if (this.maxEntrySize && size > this.maxEntrySize) {
+ if (status) {
+ status.set = 'miss';
+ status.maxEntrySizeExceeded = true;
+ }
+ // have to delete, in case something is there already.
+ this.delete(k);
+ return this;
+ }
+ let index = this.#size === 0 ? undefined : this.#keyMap.get(k);
+ if (index === undefined) {
+ // addition
+ index = (this.#size === 0
+ ? this.#tail
+ : this.#free.length !== 0
+ ? this.#free.pop()
+ : this.#size === this.#max
+ ? this.#evict(false)
+ : this.#size);
+ this.#keyList[index] = k;
+ this.#valList[index] = v;
+ this.#keyMap.set(k, index);
+ this.#next[this.#tail] = index;
+ this.#prev[index] = this.#tail;
+ this.#tail = index;
+ this.#size++;
+ this.#addItemSize(index, size, status);
+ if (status)
+ status.set = 'add';
+ noUpdateTTL = false;
+ }
+ else {
+ // update
+ this.#moveToTail(index);
+ const oldVal = this.#valList[index];
+ if (v !== oldVal) {
+ if (this.#hasFetchMethod && this.#isBackgroundFetch(oldVal)) {
+ oldVal.__abortController.abort(new Error('replaced'));
+ }
+ else if (!noDisposeOnSet) {
+ if (this.#hasDispose) {
+ this.#dispose?.(oldVal, k, 'set');
+ }
+ if (this.#hasDisposeAfter) {
+ this.#disposed?.push([oldVal, k, 'set']);
+ }
+ }
+ this.#removeItemSize(index);
+ this.#addItemSize(index, size, status);
+ this.#valList[index] = v;
+ if (status) {
+ status.set = 'replace';
+ const oldValue = oldVal && this.#isBackgroundFetch(oldVal)
+ ? oldVal.__staleWhileFetching
+ : oldVal;
+ if (oldValue !== undefined)
+ status.oldValue = oldValue;
+ }
+ }
+ else if (status) {
+ status.set = 'update';
+ }
+ }
+ if (ttl !== 0 && !this.#ttls) {
+ this.#initializeTTLTracking();
+ }
+ if (this.#ttls) {
+ if (!noUpdateTTL) {
+ this.#setItemTTL(index, ttl, start);
+ }
+ if (status)
+ this.#statusTTL(status, index);
+ }
+ if (!noDisposeOnSet && this.#hasDisposeAfter && this.#disposed) {
+ const dt = this.#disposed;
+ let task;
+ while ((task = dt?.shift())) {
+ this.#disposeAfter?.(...task);
+ }
+ }
+ return this;
+ }
+ /**
+ * Evict the least recently used item, returning its value or
+ * `undefined` if cache is empty.
+ */
+ pop() {
+ try {
+ while (this.#size) {
+ const val = this.#valList[this.#head];
+ this.#evict(true);
+ if (this.#isBackgroundFetch(val)) {
+ if (val.__staleWhileFetching) {
+ return val.__staleWhileFetching;
+ }
+ }
+ else if (val !== undefined) {
+ return val;
+ }
+ }
+ }
+ finally {
+ if (this.#hasDisposeAfter && this.#disposed) {
+ const dt = this.#disposed;
+ let task;
+ while ((task = dt?.shift())) {
+ this.#disposeAfter?.(...task);
+ }
+ }
+ }
+ }
+ #evict(free) {
+ const head = this.#head;
+ const k = this.#keyList[head];
+ const v = this.#valList[head];
+ if (this.#hasFetchMethod && this.#isBackgroundFetch(v)) {
+ v.__abortController.abort(new Error('evicted'));
+ }
+ else if (this.#hasDispose || this.#hasDisposeAfter) {
+ if (this.#hasDispose) {
+ this.#dispose?.(v, k, 'evict');
+ }
+ if (this.#hasDisposeAfter) {
+ this.#disposed?.push([v, k, 'evict']);
+ }
+ }
+ this.#removeItemSize(head);
+ // if we aren't about to use the index, then null these out
+ if (free) {
+ this.#keyList[head] = undefined;
+ this.#valList[head] = undefined;
+ this.#free.push(head);
+ }
+ if (this.#size === 1) {
+ this.#head = this.#tail = 0;
+ this.#free.length = 0;
+ }
+ else {
+ this.#head = this.#next[head];
+ }
+ this.#keyMap.delete(k);
+ this.#size--;
+ return head;
+ }
+ /**
+ * Check if a key is in the cache, without updating the recency of use.
+ * Will return false if the item is stale, even though it is technically
+ * in the cache.
+ *
+ * Will not update item age unless
+ * {@link LRUCache.OptionsBase.updateAgeOnHas} is set.
+ */
+ has(k, hasOptions = {}) {
+ const { updateAgeOnHas = this.updateAgeOnHas, status } = hasOptions;
+ const index = this.#keyMap.get(k);
+ if (index !== undefined) {
+ const v = this.#valList[index];
+ if (this.#isBackgroundFetch(v) &&
+ v.__staleWhileFetching === undefined) {
+ return false;
+ }
+ if (!this.#isStale(index)) {
+ if (updateAgeOnHas) {
+ this.#updateItemAge(index);
+ }
+ if (status) {
+ status.has = 'hit';
+ this.#statusTTL(status, index);
+ }
+ return true;
+ }
+ else if (status) {
+ status.has = 'stale';
+ this.#statusTTL(status, index);
+ }
+ }
+ else if (status) {
+ status.has = 'miss';
+ }
+ return false;
+ }
+ /**
+ * Like {@link LRUCache#get} but doesn't update recency or delete stale
+ * items.
+ *
+ * Returns `undefined` if the item is stale, unless
+ * {@link LRUCache.OptionsBase.allowStale} is set.
+ */
+ peek(k, peekOptions = {}) {
+ const { allowStale = this.allowStale } = peekOptions;
+ const index = this.#keyMap.get(k);
+ if (index !== undefined &&
+ (allowStale || !this.#isStale(index))) {
+ const v = this.#valList[index];
+ // either stale and allowed, or forcing a refresh of non-stale value
+ return this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;
+ }
+ }
+ #backgroundFetch(k, index, options, context) {
+ const v = index === undefined ? undefined : this.#valList[index];
+ if (this.#isBackgroundFetch(v)) {
+ return v;
+ }
+ const ac = new AC();
+ const { signal } = options;
+ // when/if our AC signals, then stop listening to theirs.
+ signal?.addEventListener('abort', () => ac.abort(signal.reason), {
+ signal: ac.signal,
+ });
+ const fetchOpts = {
+ signal: ac.signal,
+ options,
+ context,
+ };
+ const cb = (v, updateCache = false) => {
+ const { aborted } = ac.signal;
+ const ignoreAbort = options.ignoreFetchAbort && v !== undefined;
+ if (options.status) {
+ if (aborted && !updateCache) {
+ options.status.fetchAborted = true;
+ options.status.fetchError = ac.signal.reason;
+ if (ignoreAbort)
+ options.status.fetchAbortIgnored = true;
+ }
+ else {
+ options.status.fetchResolved = true;
+ }
+ }
+ if (aborted && !ignoreAbort && !updateCache) {
+ return fetchFail(ac.signal.reason);
+ }
+ // either we didn't abort, and are still here, or we did, and ignored
+ const bf = p;
+ if (this.#valList[index] === p) {
+ if (v === undefined) {
+ if (bf.__staleWhileFetching) {
+ this.#valList[index] = bf.__staleWhileFetching;
+ }
+ else {
+ this.delete(k);
+ }
+ }
+ else {
+ if (options.status)
+ options.status.fetchUpdated = true;
+ this.set(k, v, fetchOpts.options);
+ }
+ }
+ return v;
+ };
+ const eb = (er) => {
+ if (options.status) {
+ options.status.fetchRejected = true;
+ options.status.fetchError = er;
+ }
+ return fetchFail(er);
+ };
+ const fetchFail = (er) => {
+ const { aborted } = ac.signal;
+ const allowStaleAborted = aborted && options.allowStaleOnFetchAbort;
+ const allowStale = allowStaleAborted || options.allowStaleOnFetchRejection;
+ const noDelete = allowStale || options.noDeleteOnFetchRejection;
+ const bf = p;
+ if (this.#valList[index] === p) {
+ // if we allow stale on fetch rejections, then we need to ensure that
+ // the stale value is not removed from the cache when the fetch fails.
+ const del = !noDelete || bf.__staleWhileFetching === undefined;
+ if (del) {
+ this.delete(k);
+ }
+ else if (!allowStaleAborted) {
+ // still replace the *promise* with the stale value,
+ // since we are done with the promise at this point.
+ // leave it untouched if we're still waiting for an
+ // aborted background fetch that hasn't yet returned.
+ this.#valList[index] = bf.__staleWhileFetching;
+ }
+ }
+ if (allowStale) {
+ if (options.status && bf.__staleWhileFetching !== undefined) {
+ options.status.returnedStale = true;
+ }
+ return bf.__staleWhileFetching;
+ }
+ else if (bf.__returned === bf) {
+ throw er;
+ }
+ };
+ const pcall = (res, rej) => {
+ const fmp = this.#fetchMethod?.(k, v, fetchOpts);
+ if (fmp && fmp instanceof Promise) {
+ fmp.then(v => res(v), rej);
+ }
+ // ignored, we go until we finish, regardless.
+ // defer check until we are actually aborting,
+ // so fetchMethod can override.
+ ac.signal.addEventListener('abort', () => {
+ if (!options.ignoreFetchAbort ||
+ options.allowStaleOnFetchAbort) {
+ res();
+ // when it eventually resolves, update the cache.
+ if (options.allowStaleOnFetchAbort) {
+ res = v => cb(v, true);
+ }
+ }
+ });
+ };
+ if (options.status)
+ options.status.fetchDispatched = true;
+ const p = new Promise(pcall).then(cb, eb);
+ const bf = Object.assign(p, {
+ __abortController: ac,
+ __staleWhileFetching: v,
+ __returned: undefined,
+ });
+ if (index === undefined) {
+ // internal, don't expose status.
+ this.set(k, bf, { ...fetchOpts.options, status: undefined });
+ index = this.#keyMap.get(k);
+ }
+ else {
+ this.#valList[index] = bf;
+ }
+ return bf;
+ }
+ #isBackgroundFetch(p) {
+ if (!this.#hasFetchMethod)
+ return false;
+ const b = p;
+ return (!!b &&
+ b instanceof Promise &&
+ b.hasOwnProperty('__staleWhileFetching') &&
+ b.__abortController instanceof AC);
+ }
+ async fetch(k, fetchOptions = {}) {
+ const {
+ // get options
+ allowStale = this.allowStale, updateAgeOnGet = this.updateAgeOnGet, noDeleteOnStaleGet = this.noDeleteOnStaleGet,
+ // set options
+ ttl = this.ttl, noDisposeOnSet = this.noDisposeOnSet, size = 0, sizeCalculation = this.sizeCalculation, noUpdateTTL = this.noUpdateTTL,
+ // fetch exclusive options
+ noDeleteOnFetchRejection = this.noDeleteOnFetchRejection, allowStaleOnFetchRejection = this.allowStaleOnFetchRejection, ignoreFetchAbort = this.ignoreFetchAbort, allowStaleOnFetchAbort = this.allowStaleOnFetchAbort, context, forceRefresh = false, status, signal, } = fetchOptions;
+ if (!this.#hasFetchMethod) {
+ if (status)
+ status.fetch = 'get';
+ return this.get(k, {
+ allowStale,
+ updateAgeOnGet,
+ noDeleteOnStaleGet,
+ status,
+ });
+ }
+ const options = {
+ allowStale,
+ updateAgeOnGet,
+ noDeleteOnStaleGet,
+ ttl,
+ noDisposeOnSet,
+ size,
+ sizeCalculation,
+ noUpdateTTL,
+ noDeleteOnFetchRejection,
+ allowStaleOnFetchRejection,
+ allowStaleOnFetchAbort,
+ ignoreFetchAbort,
+ status,
+ signal,
+ };
+ let index = this.#keyMap.get(k);
+ if (index === undefined) {
+ if (status)
+ status.fetch = 'miss';
+ const p = this.#backgroundFetch(k, index, options, context);
+ return (p.__returned = p);
+ }
+ else {
+ // in cache, maybe already fetching
+ const v = this.#valList[index];
+ if (this.#isBackgroundFetch(v)) {
+ const stale = allowStale && v.__staleWhileFetching !== undefined;
+ if (status) {
+ status.fetch = 'inflight';
+ if (stale)
+ status.returnedStale = true;
+ }
+ return stale ? v.__staleWhileFetching : (v.__returned = v);
+ }
+ // if we force a refresh, that means do NOT serve the cached value,
+ // unless we are already in the process of refreshing the cache.
+ const isStale = this.#isStale(index);
+ if (!forceRefresh && !isStale) {
+ if (status)
+ status.fetch = 'hit';
+ this.#moveToTail(index);
+ if (updateAgeOnGet) {
+ this.#updateItemAge(index);
+ }
+ if (status)
+ this.#statusTTL(status, index);
+ return v;
+ }
+ // ok, it is stale or a forced refresh, and not already fetching.
+ // refresh the cache.
+ const p = this.#backgroundFetch(k, index, options, context);
+ const hasStale = p.__staleWhileFetching !== undefined;
+ const staleVal = hasStale && allowStale;
+ if (status) {
+ status.fetch = isStale ? 'stale' : 'refresh';
+ if (staleVal && isStale)
+ status.returnedStale = true;
+ }
+ return staleVal ? p.__staleWhileFetching : (p.__returned = p);
+ }
+ }
+ /**
+ * Return a value from the cache. Will update the recency of the cache
+ * entry found.
+ *
+ * If the key is not found, get() will return `undefined`.
+ */
+ get(k, getOptions = {}) {
+ const { allowStale = this.allowStale, updateAgeOnGet = this.updateAgeOnGet, noDeleteOnStaleGet = this.noDeleteOnStaleGet, status, } = getOptions;
+ const index = this.#keyMap.get(k);
+ if (index !== undefined) {
+ const value = this.#valList[index];
+ const fetching = this.#isBackgroundFetch(value);
+ if (status)
+ this.#statusTTL(status, index);
+ if (this.#isStale(index)) {
+ if (status)
+ status.get = 'stale';
+ // delete only if not an in-flight background fetch
+ if (!fetching) {
+ if (!noDeleteOnStaleGet) {
+ this.delete(k);
+ }
+ if (status && allowStale)
+ status.returnedStale = true;
+ return allowStale ? value : undefined;
+ }
+ else {
+ if (status &&
+ allowStale &&
+ value.__staleWhileFetching !== undefined) {
+ status.returnedStale = true;
+ }
+ return allowStale ? value.__staleWhileFetching : undefined;
+ }
+ }
+ else {
+ if (status)
+ status.get = 'hit';
+ // if we're currently fetching it, we don't actually have it yet
+ // it's not stale, which means this isn't a staleWhileRefetching.
+ // If it's not stale, and fetching, AND has a __staleWhileFetching
+ // value, then that means the user fetched with {forceRefresh:true},
+ // so it's safe to return that value.
+ if (fetching) {
+ return value.__staleWhileFetching;
+ }
+ this.#moveToTail(index);
+ if (updateAgeOnGet) {
+ this.#updateItemAge(index);
+ }
+ return value;
+ }
+ }
+ else if (status) {
+ status.get = 'miss';
+ }
+ }
+ #connect(p, n) {
+ this.#prev[n] = p;
+ this.#next[p] = n;
+ }
+ #moveToTail(index) {
+ // if tail already, nothing to do
+ // if head, move head to next[index]
+ // else
+ // move next[prev[index]] to next[index] (head has no prev)
+ // move prev[next[index]] to prev[index]
+ // prev[index] = tail
+ // next[tail] = index
+ // tail = index
+ if (index !== this.#tail) {
+ if (index === this.#head) {
+ this.#head = this.#next[index];
+ }
+ else {
+ this.#connect(this.#prev[index], this.#next[index]);
+ }
+ this.#connect(this.#tail, index);
+ this.#tail = index;
+ }
+ }
+ /**
+ * Deletes a key out of the cache.
+ * Returns true if the key was deleted, false otherwise.
+ */
+ delete(k) {
+ let deleted = false;
+ if (this.#size !== 0) {
+ const index = this.#keyMap.get(k);
+ if (index !== undefined) {
+ deleted = true;
+ if (this.#size === 1) {
+ this.clear();
+ }
+ else {
+ this.#removeItemSize(index);
+ const v = this.#valList[index];
+ if (this.#isBackgroundFetch(v)) {
+ v.__abortController.abort(new Error('deleted'));
+ }
+ else if (this.#hasDispose || this.#hasDisposeAfter) {
+ if (this.#hasDispose) {
+ this.#dispose?.(v, k, 'delete');
+ }
+ if (this.#hasDisposeAfter) {
+ this.#disposed?.push([v, k, 'delete']);
+ }
+ }
+ this.#keyMap.delete(k);
+ this.#keyList[index] = undefined;
+ this.#valList[index] = undefined;
+ if (index === this.#tail) {
+ this.#tail = this.#prev[index];
+ }
+ else if (index === this.#head) {
+ this.#head = this.#next[index];
+ }
+ else {
+ this.#next[this.#prev[index]] = this.#next[index];
+ this.#prev[this.#next[index]] = this.#prev[index];
+ }
+ this.#size--;
+ this.#free.push(index);
+ }
+ }
+ }
+ if (this.#hasDisposeAfter && this.#disposed?.length) {
+ const dt = this.#disposed;
+ let task;
+ while ((task = dt?.shift())) {
+ this.#disposeAfter?.(...task);
+ }
+ }
+ return deleted;
+ }
+ /**
+ * Clear the cache entirely, throwing away all values.
+ */
+ clear() {
+ for (const index of this.#rindexes({ allowStale: true })) {
+ const v = this.#valList[index];
+ if (this.#isBackgroundFetch(v)) {
+ v.__abortController.abort(new Error('deleted'));
+ }
+ else {
+ const k = this.#keyList[index];
+ if (this.#hasDispose) {
+ this.#dispose?.(v, k, 'delete');
+ }
+ if (this.#hasDisposeAfter) {
+ this.#disposed?.push([v, k, 'delete']);
+ }
+ }
+ }
+ this.#keyMap.clear();
+ this.#valList.fill(undefined);
+ this.#keyList.fill(undefined);
+ if (this.#ttls && this.#starts) {
+ this.#ttls.fill(0);
+ this.#starts.fill(0);
+ }
+ if (this.#sizes) {
+ this.#sizes.fill(0);
+ }
+ this.#head = 0;
+ this.#tail = 0;
+ this.#free.length = 0;
+ this.#calculatedSize = 0;
+ this.#size = 0;
+ if (this.#hasDisposeAfter && this.#disposed) {
+ const dt = this.#disposed;
+ let task;
+ while ((task = dt?.shift())) {
+ this.#disposeAfter?.(...task);
+ }
+ }
+ }
+}
+exports.LRUCache = LRUCache;
+//# sourceMappingURL=index.js.map \ No newline at end of file
diff --git a/deps/npm/node_modules/path-scurry/node_modules/lru-cache/dist/cjs/index.min.js b/deps/npm/node_modules/path-scurry/node_modules/lru-cache/dist/cjs/index.min.js
new file mode 100644
index 0000000000..d854bf570d
--- /dev/null
+++ b/deps/npm/node_modules/path-scurry/node_modules/lru-cache/dist/cjs/index.min.js
@@ -0,0 +1,2 @@
+"use strict";var x=(o,t,e)=>{if(!t.has(o))throw TypeError("Cannot "+e)};var j=(o,t,e)=>(x(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)=>(x(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 v=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"),m=o=>o&&o===Math.floor(o)&&o>0&&isFinite(o),k=o=>m(o)?o<=Math.pow(2,8)?Uint8Array:o<=Math.pow(2,16)?Uint16Array:o<=Math.pow(2,32)?Uint32Array:o<=Number.MAX_SAFE_INTEGER?z:null:null,z=class extends Array{constructor(t){super(t),this.fill(0)}},E,T=class{heap;length;static create(t){let e=k(t);if(!e)return[];D(T,E,!0);let i=new T(t,e);return D(T,E,!1),i}constructor(t,e){if(!j(T,E))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=T;E=new WeakMap,I(R,E,!1);var C=class{#d;#f;#_;#g;#C;ttl;ttlResolution;ttlAutopurge;updateAgeOnGet;updateAgeOnHas;allowStale;noDisposeOnSet;noUpdateTTL;maxEntrySize;sizeCalculation;noDeleteOnFetchRejection;noDeleteOnStaleGet;allowStaleOnFetchAbort;allowStaleOnFetchRejection;ignoreFetchAbort;#s;#p;#n;#i;#t;#l;#c;#o;#h;#w;#r;#m;#F;#S;#b;#T;#a;static unsafeExposeInternals(t){return{starts:t.#F,ttls:t.#S,sizes:t.#m,keyMap:t.#n,keyList:t.#i,valList:t.#t,next:t.#l,prev:t.#c,get head(){return t.#o},get tail(){return t.#h},free:t.#w,isBackgroundFetch:e=>t.#e(e),backgroundFetch:(e,i,s,n)=>t.#D(e,i,s,n),moveToTail:e=>t.#v(e),indexes:e=>t.#y(e),rindexes:e=>t.#A(e),isStale:e=>t.#u(e)}}get max(){return this.#d}get maxSize(){return this.#f}get calculatedSize(){return this.#p}get size(){return this.#s}get fetchMethod(){return this.#C}get dispose(){return this.#_}get disposeAfter(){return this.#g}constructor(t){let{max:e=0,ttl:i,ttlResolution:s=1,ttlAutopurge:n,updateAgeOnGet:h,updateAgeOnHas:a,allowStale:r,dispose:u,disposeAfter:b,noDisposeOnSet:f,noUpdateTTL:d,maxSize:p=0,maxEntrySize:F=0,sizeCalculation:c,fetchMethod:w,noDeleteOnFetchRejection:l,noDeleteOnStaleGet:S,allowStaleOnFetchRejection:y,allowStaleOnFetchAbort:g,ignoreFetchAbort:_}=t;if(e!==0&&!m(e))throw new TypeError("max option must be a nonnegative integer");let O=e?k(e):Array;if(!O)throw new Error("invalid max value: "+e);if(this.#d=e,this.#f=p,this.maxEntrySize=F||this.#f,this.sizeCalculation=c,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(w!==void 0&&typeof w!="function")throw new TypeError("fetchMethod must be a function if specified");if(this.#C=w,this.#T=!!w,this.#n=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.#w=R.create(e),this.#s=0,this.#p=0,typeof u=="function"&&(this.#_=u),typeof b=="function"?(this.#g=b,this.#r=[]):(this.#g=void 0,this.#r=void 0),this.#b=!!this.#_,this.#a=!!this.#g,this.noDisposeOnSet=!!f,this.noUpdateTTL=!!d,this.noDeleteOnFetchRejection=!!l,this.allowStaleOnFetchRejection=!!y,this.allowStaleOnFetchAbort=!!g,this.ignoreFetchAbort=!!_,this.maxEntrySize!==0){if(this.#f!==0&&!m(this.#f))throw new TypeError("maxSize must be a positive integer if specified");if(!m(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");this.#I()}if(this.allowStale=!!r,this.noDeleteOnStaleGet=!!S,this.updateAgeOnGet=!!h,this.updateAgeOnHas=!!a,this.ttlResolution=m(s)||s===0?s:1,this.ttlAutopurge=!!n,this.ttl=i||0,this.ttl){if(!m(this.ttl))throw new TypeError("ttl must be a positive integer if specified");this.#L()}if(this.#d===0&&this.ttl===0&&this.#f===0)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!this.#d&&!this.#f){let A="LRU_CACHE_UNBOUNDED";V(A)&&(N.add(A),P("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",A,C))}}getRemainingTTL(t){return this.#n.has(t)?1/0:0}#L(){let t=new z(this.#d),e=new z(this.#d);this.#S=t,this.#F=e,this.#U=(n,h,a=v.now())=>{if(e[n]=h!==0?a:0,t[n]=h,h!==0&&this.ttlAutopurge){let r=setTimeout(()=>{this.#u(n)&&this.delete(this.#i[n])},h+1);r.unref&&r.unref()}},this.#z=n=>{e[n]=t[n]!==0?v.now():0},this.#O=(n,h)=>{if(t[h]){let a=t[h],r=e[h];n.ttl=a,n.start=r,n.now=i||s();let u=n.now-r;n.remainingTTL=a-u}};let i=0,s=()=>{let n=v.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.#n.get(n);if(h===void 0)return 0;let a=t[h],r=e[h];if(a===0||r===0)return 1/0;let u=(i||s())-r;return a-u},this.#u=n=>t[n]!==0&&e[n]!==0&&(i||s())-e[n]>t[n]}#z=()=>{};#O=()=>{};#U=()=>{};#u=()=>!1;#I(){let t=new z(this.#d);this.#p=0,this.#m=t,this.#E=e=>{this.#p-=t[e],t[e]=0},this.#G=(e,i,s,n)=>{if(this.#e(i))return 0;if(!m(s))if(n){if(typeof n!="function")throw new TypeError("sizeCalculation must be a function");if(s=n(i,e),!m(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.#p>n;)this.#W(!0)}this.#p+=t[e],s&&(s.entrySize=i,s.totalCalculatedSize=this.#p)}}#E=t=>{};#R=(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};*#y({allowStale:t=this.allowStale}={}){if(this.#s)for(let e=this.#h;!(!this.#x(e)||((t||!this.#u(e))&&(yield e),e===this.#o));)e=this.#c[e]}*#A({allowStale:t=this.allowStale}={}){if(this.#s)for(let e=this.#o;!(!this.#x(e)||((t||!this.#u(e))&&(yield e),e===this.#h));)e=this.#l[e]}#x(t){return t!==void 0&&this.#n.get(this.#i[t])===t}*entries(){for(let t of this.#y())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.#A())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.#y()){let e=this.#i[t];e!==void 0&&!this.#e(this.#t[t])&&(yield e)}}*rkeys(){for(let t of this.#A()){let e=this.#i[t];e!==void 0&&!this.#e(this.#t[t])&&(yield e)}}*values(){for(let t of this.#y())this.#t[t]!==void 0&&!this.#e(this.#t[t])&&(yield this.#t[t])}*rvalues(){for(let t of this.#A())this.#t[t]!==void 0&&!this.#e(this.#t[t])&&(yield this.#t[t])}[Symbol.iterator](){return this.entries()}find(t,e={}){for(let i of this.#y()){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.#y()){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.#A()){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.#A({allowStale:!0}))this.#u(e)&&(this.delete(this.#i[e]),t=!0);return t}dump(){let t=[];for(let e of this.#y({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.#S&&this.#F){h.ttl=this.#S[e];let a=v.now()-this.#F[e];h.start=Math.floor(Date.now()-a)}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=v.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:a=this.sizeCalculation,status:r}=i,{noUpdateTTL:u=this.noUpdateTTL}=i,b=this.#G(t,e,i.size||0,a);if(this.maxEntrySize&&b>this.maxEntrySize)return r&&(r.set="miss",r.maxEntrySizeExceeded=!0),this.delete(t),this;let f=this.#s===0?void 0:this.#n.get(t);if(f===void 0)f=this.#s===0?this.#h:this.#w.length!==0?this.#w.pop():this.#s===this.#d?this.#W(!1):this.#s,this.#i[f]=t,this.#t[f]=e,this.#n.set(t,f),this.#l[this.#h]=f,this.#c[f]=this.#h,this.#h=f,this.#s++,this.#R(f,b,r),r&&(r.set="add"),u=!1;else{this.#v(f);let d=this.#t[f];if(e!==d){if(this.#T&&this.#e(d)?d.__abortController.abort(new Error("replaced")):h||(this.#b&&this.#_?.(d,t,"set"),this.#a&&this.#r?.push([d,t,"set"])),this.#E(f),this.#R(f,b,r),this.#t[f]=e,r){r.set="replace";let p=d&&this.#e(d)?d.__staleWhileFetching:d;p!==void 0&&(r.oldValue=p)}}else r&&(r.set="update")}if(s!==0&&!this.#S&&this.#L(),this.#S&&(u||this.#U(f,s,n),r&&this.#O(r,f)),!h&&this.#a&&this.#r){let d=this.#r,p;for(;p=d?.shift();)this.#g?.(...p)}return this}pop(){try{for(;this.#s;){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.#g?.(...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.#b||this.#a)&&(this.#b&&this.#_?.(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.#w.push(e)),this.#s===1?(this.#o=this.#h=0,this.#w.length=0):this.#o=this.#l[e],this.#n.delete(i),this.#s--,e}has(t,e={}){let{updateAgeOnHas:i=this.updateAgeOnHas,status:s}=e,n=this.#n.get(t);if(n!==void 0){let h=this.#t[n];if(this.#e(h)&&h.__staleWhileFetching===void 0)return!1;if(this.#u(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.#n.get(t);if(s!==void 0&&(i||!this.#u(s))){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:a}=i;a?.addEventListener("abort",()=>h.abort(a.reason),{signal:h.signal});let r={signal:h.signal,options:i,context:s},u=(c,w=!1)=>{let{aborted:l}=h.signal,S=i.ignoreFetchAbort&&c!==void 0;if(i.status&&(l&&!w?(i.status.fetchAborted=!0,i.status.fetchError=h.signal.reason,S&&(i.status.fetchAbortIgnored=!0)):i.status.fetchResolved=!0),l&&!S&&!w)return f(h.signal.reason);let y=p;return this.#t[e]===p&&(c===void 0?y.__staleWhileFetching?this.#t[e]=y.__staleWhileFetching:this.delete(t):(i.status&&(i.status.fetchUpdated=!0),this.set(t,c,r.options))),c},b=c=>(i.status&&(i.status.fetchRejected=!0,i.status.fetchError=c),f(c)),f=c=>{let{aborted:w}=h.signal,l=w&&i.allowStaleOnFetchAbort,S=l||i.allowStaleOnFetchRejection,y=S||i.noDeleteOnFetchRejection,g=p;if(this.#t[e]===p&&(!y||g.__staleWhileFetching===void 0?this.delete(t):l||(this.#t[e]=g.__staleWhileFetching)),S)return i.status&&g.__staleWhileFetching!==void 0&&(i.status.returnedStale=!0),g.__staleWhileFetching;if(g.__returned===g)throw c},d=(c,w)=>{let l=this.#C?.(t,n,r);l&&l instanceof Promise&&l.then(S=>c(S),w),h.signal.addEventListener("abort",()=>{(!i.ignoreFetchAbort||i.allowStaleOnFetchAbort)&&(c(),i.allowStaleOnFetchAbort&&(c=S=>u(S,!0)))})};i.status&&(i.status.fetchDispatched=!0);let p=new Promise(d).then(u,b),F=Object.assign(p,{__abortController:h,__staleWhileFetching:n,__returned:void 0});return e===void 0?(this.set(t,F,{...r.options,status:void 0}),e=this.#n.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:a=this.noDisposeOnSet,size:r=0,sizeCalculation:u=this.sizeCalculation,noUpdateTTL:b=this.noUpdateTTL,noDeleteOnFetchRejection:f=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:d=this.allowStaleOnFetchRejection,ignoreFetchAbort:p=this.ignoreFetchAbort,allowStaleOnFetchAbort:F=this.allowStaleOnFetchAbort,context:c,forceRefresh:w=!1,status:l,signal:S}=e;if(!this.#T)return l&&(l.fetch="get"),this.get(t,{allowStale:i,updateAgeOnGet:s,noDeleteOnStaleGet:n,status:l});let y={allowStale:i,updateAgeOnGet:s,noDeleteOnStaleGet:n,ttl:h,noDisposeOnSet:a,size:r,sizeCalculation:u,noUpdateTTL:b,noDeleteOnFetchRejection:f,allowStaleOnFetchRejection:d,allowStaleOnFetchAbort:F,ignoreFetchAbort:p,status:l,signal:S},g=this.#n.get(t);if(g===void 0){l&&(l.fetch="miss");let _=this.#D(t,g,y,c);return _.__returned=_}else{let _=this.#t[g];if(this.#e(_)){let G=i&&_.__staleWhileFetching!==void 0;return l&&(l.fetch="inflight",G&&(l.returnedStale=!0)),G?_.__staleWhileFetching:_.__returned=_}let O=this.#u(g);if(!w&&!O)return l&&(l.fetch="hit"),this.#v(g),s&&this.#z(g),l&&this.#O(l,g),_;let A=this.#D(t,g,y,c),U=A.__staleWhileFetching!==void 0&&i;return l&&(l.fetch=O?"stale":"refresh",U&&O&&(l.returnedStale=!0)),U?A.__staleWhileFetching:A.__returned=A}}get(t,e={}){let{allowStale:i=this.allowStale,updateAgeOnGet:s=this.updateAgeOnGet,noDeleteOnStaleGet:n=this.noDeleteOnStaleGet,status:h}=e,a=this.#n.get(t);if(a!==void 0){let r=this.#t[a],u=this.#e(r);return h&&this.#O(h,a),this.#u(a)?(h&&(h.get="stale"),u?(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"),u?r.__staleWhileFetching:(this.#v(a),s&&this.#z(a),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.#s!==0){let i=this.#n.get(t);if(i!==void 0)if(e=!0,this.#s===1)this.clear();else{this.#E(i);let s=this.#t[i];this.#e(s)?s.__abortController.abort(new Error("deleted")):(this.#b||this.#a)&&(this.#b&&this.#_?.(s,t,"delete"),this.#a&&this.#r?.push([s,t,"delete"])),this.#n.delete(t),this.#i[i]=void 0,this.#t[i]=void 0,i===this.#h?this.#h=this.#c[i]:i===this.#o?this.#o=this.#l[i]:(this.#l[this.#c[i]]=this.#l[i],this.#c[this.#l[i]]=this.#c[i]),this.#s--,this.#w.push(i)}}if(this.#a&&this.#r?.length){let i=this.#r,s;for(;s=i?.shift();)this.#g?.(...s)}return e}clear(){for(let t of this.#A({allowStale:!0})){let e=this.#t[t];if(this.#e(e))e.__abortController.abort(new Error("deleted"));else{let i=this.#i[t];this.#b&&this.#_?.(e,i,"delete"),this.#a&&this.#r?.push([e,i,"delete"])}}if(this.#n.clear(),this.#t.fill(void 0),this.#i.fill(void 0),this.#S&&this.#F&&(this.#S.fill(0),this.#F.fill(0)),this.#m&&this.#m.fill(0),this.#o=0,this.#h=0,this.#w.length=0,this.#p=0,this.#s=0,this.#a&&this.#r){let t=this.#r,e;for(;e=t?.shift();)this.#g?.(...e)}}};exports.LRUCache=C;
+//# sourceMappingURL=index.min.js.map
diff --git a/deps/npm/node_modules/path-scurry/node_modules/lru-cache/dist/cjs/package.json b/deps/npm/node_modules/path-scurry/node_modules/lru-cache/dist/cjs/package.json
new file mode 100644
index 0000000000..5bbefffbab
--- /dev/null
+++ b/deps/npm/node_modules/path-scurry/node_modules/lru-cache/dist/cjs/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "commonjs"
+}
diff --git a/deps/npm/node_modules/path-scurry/node_modules/lru-cache/dist/mjs/index.js b/deps/npm/node_modules/path-scurry/node_modules/lru-cache/dist/mjs/index.js
new file mode 100644
index 0000000000..1d8a36931a
--- /dev/null
+++ b/deps/npm/node_modules/path-scurry/node_modules/lru-cache/dist/mjs/index.js
@@ -0,0 +1,1391 @@
+/**
+ * @module LRUCache
+ */
+const perf = typeof performance === 'object' &&
+ performance &&
+ typeof performance.now === 'function'
+ ? performance
+ : Date;
+const warned = new Set();
+/* c8 ignore start */
+const PROCESS = (typeof process === 'object' && !!process ? process : {});
+/* c8 ignore start */
+const emitWarning = (msg, type, code, fn) => {
+ typeof PROCESS.emitWarning === 'function'
+ ? PROCESS.emitWarning(msg, type, code, fn)
+ : console.error(`[${code}] ${type}: ${msg}`);
+};
+let AC = globalThis.AbortController;
+let AS = globalThis.AbortSignal;
+/* c8 ignore start */
+if (typeof AC === 'undefined') {
+ //@ts-ignore
+ AS = class AbortSignal {
+ onabort;
+ _onabort = [];
+ reason;
+ aborted = false;
+ addEventListener(_, fn) {
+ this._onabort.push(fn);
+ }
+ };
+ //@ts-ignore
+ AC = class AbortController {
+ constructor() {
+ warnACPolyfill();
+ }
+ signal = new AS();
+ abort(reason) {
+ if (this.signal.aborted)
+ return;
+ //@ts-ignore
+ this.signal.reason = reason;
+ //@ts-ignore
+ this.signal.aborted = true;
+ //@ts-ignore
+ for (const fn of this.signal._onabort) {
+ fn(reason);
+ }
+ this.signal.onabort?.(reason);
+ }
+ };
+ let printACPolyfillWarning = PROCESS.env?.LRU_CACHE_IGNORE_AC_WARNING !== '1';
+ const warnACPolyfill = () => {
+ if (!printACPolyfillWarning)
+ return;
+ printACPolyfillWarning = false;
+ emitWarning('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', warnACPolyfill);
+ };
+}
+/* c8 ignore stop */
+const shouldWarn = (code) => !warned.has(code);
+const TYPE = Symbol('type');
+const isPosInt = (n) => n && n === Math.floor(n) && n > 0 && isFinite(n);
+/* c8 ignore start */
+// This is a little bit ridiculous, tbh.
+// The maximum array length is 2^32-1 or thereabouts on most JS impls.
+// And well before that point, you're caching the entire world, I mean,
+// that's ~32GB of just integers for the next/prev links, plus whatever
+// else to hold that many keys and values. Just filling the memory with
+// zeroes at init time is brutal when you get that big.
+// But why not be complete?
+// Maybe in the future, these limits will have expanded.
+const getUintArray = (max) => !isPosInt(max)
+ ? null
+ : max <= Math.pow(2, 8)
+ ? Uint8Array
+ : max <= Math.pow(2, 16)
+ ? Uint16Array
+ : max <= Math.pow(2, 32)
+ ? Uint32Array
+ : max <= Number.MAX_SAFE_INTEGER
+ ? ZeroArray
+ : null;
+/* c8 ignore stop */
+class ZeroArray extends Array {
+ constructor(size) {
+ super(size);
+ this.fill(0);
+ }
+}
+class Stack {
+ heap;
+ length;
+ // private constructor
+ static #constructing = false;
+ static create(max) {
+ const HeapCls = getUintArray(max);
+ if (!HeapCls)
+ return [];
+ Stack.#constructing = true;
+ const s = new Stack(max, HeapCls);
+ Stack.#constructing = false;
+ return s;
+ }
+ constructor(max, HeapCls) {
+ /* c8 ignore start */
+ if (!Stack.#constructing) {
+ throw new TypeError('instantiate Stack using Stack.create(n)');
+ }
+ /* c8 ignore stop */
+ this.heap = new HeapCls(max);
+ this.length = 0;
+ }
+ push(n) {
+ this.heap[this.length++] = n;
+ }
+ pop() {
+ return this.heap[--this.length];
+ }
+}
+/**
+ * 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.
+ */
+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.
+ #max;
+ #maxSize;
+ #dispose;
+ #disposeAfter;
+ #fetchMethod;
+ /**
+ * {@link LRUCache.OptionsBase.ttl}
+ */
+ ttl;
+ /**
+ * {@link LRUCache.OptionsBase.ttlResolution}
+ */
+ ttlResolution;
+ /**
+ * {@link LRUCache.OptionsBase.ttlAutopurge}
+ */
+ ttlAutopurge;
+ /**
+ * {@link LRUCache.OptionsBase.updateAgeOnGet}
+ */
+ updateAgeOnGet;
+ /**
+ * {@link LRUCache.OptionsBase.updateAgeOnHas}
+ */
+ updateAgeOnHas;
+ /**
+ * {@link LRUCache.OptionsBase.allowStale}
+ */
+ allowStale;
+ /**
+ * {@link LRUCache.OptionsBase.noDisposeOnSet}
+ */
+ noDisposeOnSet;
+ /**
+ * {@link LRUCache.OptionsBase.noUpdateTTL}
+ */
+ noUpdateTTL;
+ /**
+ * {@link LRUCache.OptionsBase.maxEntrySize}
+ */
+ maxEntrySize;
+ /**
+ * {@link LRUCache.OptionsBase.sizeCalculation}
+ */
+ sizeCalculation;
+ /**
+ * {@link LRUCache.OptionsBase.noDeleteOnFetchRejection}
+ */
+ noDeleteOnFetchRejection;
+ /**
+ * {@link LRUCache.OptionsBase.noDeleteOnStaleGet}
+ */
+ noDeleteOnStaleGet;
+ /**
+ * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort}
+ */
+ allowStaleOnFetchAbort;
+ /**
+ * {@link LRUCache.OptionsBase.allowStaleOnFetchRejection}
+ */
+ allowStaleOnFetchRejection;
+ /**
+ * {@link LRUCache.OptionsBase.ignoreFetchAbort}
+ */
+ ignoreFetchAbort;
+ // computed properties
+ #size;
+ #calculatedSize;
+ #keyMap;
+ #keyList;
+ #valList;
+ #next;
+ #prev;
+ #head;
+ #tail;
+ #free;
+ #disposed;
+ #sizes;
+ #starts;
+ #ttls;
+ #hasDispose;
+ #hasFetchMethod;
+ #hasDisposeAfter;
+ /**
+ * Do not call this method unless you need to inspect the
+ * inner workings of the cache. If anything returned by this
+ * object is modified in any way, strange breakage may occur.
+ *
+ * These fields are private for a reason!
+ *
+ * @internal
+ */
+ static unsafeExposeInternals(c) {
+ return {
+ // properties
+ starts: c.#starts,
+ ttls: c.#ttls,
+ sizes: c.#sizes,
+ keyMap: c.#keyMap,
+ keyList: c.#keyList,
+ valList: c.#valList,
+ next: c.#next,
+ prev: c.#prev,
+ get head() {
+ return c.#head;
+ },
+ get tail() {
+ return c.#tail;
+ },
+ free: c.#free,
+ // methods
+ isBackgroundFetch: (p) => c.#isBackgroundFetch(p),
+ backgroundFetch: (k, index, options, context) => c.#backgroundFetch(k, index, options, context),
+ moveToTail: (index) => c.#moveToTail(index),
+ indexes: (options) => c.#indexes(options),
+ rindexes: (options) => c.#rindexes(options),
+ isStale: (index) => c.#isStale(index),
+ };
+ }
+ // Protected read-only members
+ /**
+ * {@link LRUCache.OptionsBase.max} (read-only)
+ */
+ get max() {
+ return this.#max;
+ }
+ /**
+ * {@link LRUCache.OptionsBase.maxSize} (read-only)
+ */
+ get maxSize() {
+ return this.#maxSize;
+ }
+ /**
+ * The total computed size of items in the cache (read-only)
+ */
+ get calculatedSize() {
+ return this.#calculatedSize;
+ }
+ /**
+ * The number of items stored in the cache (read-only)
+ */
+ get size() {
+ return this.#size;
+ }
+ /**
+ * {@link LRUCache.OptionsBase.fetchMethod} (read-only)
+ */
+ get fetchMethod() {
+ return this.#fetchMethod;
+ }
+ /**
+ * {@link LRUCache.OptionsBase.dispose} (read-only)
+ */
+ get dispose() {
+ return this.#dispose;
+ }
+ /**
+ * {@link LRUCache.OptionsBase.disposeAfter} (read-only)
+ */
+ get disposeAfter() {
+ 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;
+ if (max !== 0 && !isPosInt(max)) {
+ throw new TypeError('max option must be a nonnegative integer');
+ }
+ const UintArray = max ? getUintArray(max) : Array;
+ if (!UintArray) {
+ throw new Error('invalid max value: ' + max);
+ }
+ this.#max = max;
+ this.#maxSize = maxSize;
+ this.maxEntrySize = maxEntrySize || this.#maxSize;
+ this.sizeCalculation = sizeCalculation;
+ if (this.sizeCalculation) {
+ if (!this.#maxSize && !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 (fetchMethod !== undefined &&
+ typeof fetchMethod !== 'function') {
+ throw new TypeError('fetchMethod must be a function if specified');
+ }
+ this.#fetchMethod = fetchMethod;
+ this.#hasFetchMethod = !!fetchMethod;
+ this.#keyMap = new Map();
+ this.#keyList = new Array(max).fill(undefined);
+ this.#valList = new Array(max).fill(undefined);
+ this.#next = new UintArray(max);
+ this.#prev = new UintArray(max);
+ this.#head = 0;
+ this.#tail = 0;
+ this.#free = Stack.create(max);
+ this.#size = 0;
+ this.#calculatedSize = 0;
+ if (typeof dispose === 'function') {
+ this.#dispose = dispose;
+ }
+ if (typeof disposeAfter === 'function') {
+ this.#disposeAfter = disposeAfter;
+ this.#disposed = [];
+ }
+ else {
+ this.#disposeAfter = undefined;
+ this.#disposed = undefined;
+ }
+ this.#hasDispose = !!this.#dispose;
+ this.#hasDisposeAfter = !!this.#disposeAfter;
+ this.noDisposeOnSet = !!noDisposeOnSet;
+ this.noUpdateTTL = !!noUpdateTTL;
+ this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection;
+ this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection;
+ this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort;
+ this.ignoreFetchAbort = !!ignoreFetchAbort;
+ // NB: maxEntrySize is set to maxSize if it's set
+ if (this.maxEntrySize !== 0) {
+ if (this.#maxSize !== 0) {
+ if (!isPosInt(this.#maxSize)) {
+ throw new TypeError('maxSize must be a positive integer if specified');
+ }
+ }
+ if (!isPosInt(this.maxEntrySize)) {
+ throw new TypeError('maxEntrySize must be a positive integer if specified');
+ }
+ this.#initializeSizeTracking();
+ }
+ this.allowStale = !!allowStale;
+ this.noDeleteOnStaleGet = !!noDeleteOnStaleGet;
+ this.updateAgeOnGet = !!updateAgeOnGet;
+ this.updateAgeOnHas = !!updateAgeOnHas;
+ this.ttlResolution =
+ isPosInt(ttlResolution) || ttlResolution === 0
+ ? ttlResolution
+ : 1;
+ this.ttlAutopurge = !!ttlAutopurge;
+ this.ttl = ttl || 0;
+ if (this.ttl) {
+ if (!isPosInt(this.ttl)) {
+ throw new TypeError('ttl must be a positive integer if specified');
+ }
+ this.#initializeTTLTracking();
+ }
+ // do not allow completely unbounded caches
+ if (this.#max === 0 && this.ttl === 0 && this.#maxSize === 0) {
+ throw new TypeError('At least one of max, maxSize, or ttl is required');
+ }
+ if (!this.ttlAutopurge && !this.#max && !this.#maxSize) {
+ const code = 'LRU_CACHE_UNBOUNDED';
+ if (shouldWarn(code)) {
+ warned.add(code);
+ const msg = 'TTL caching without ttlAutopurge, max, or maxSize can ' +
+ 'result in unbounded memory consumption.';
+ emitWarning(msg, 'UnboundedCacheWarning', code, LRUCache);
+ }
+ }
+ }
+ /**
+ * Return the remaining TTL time for a given entry key
+ */
+ getRemainingTTL(key) {
+ return this.#keyMap.has(key) ? Infinity : 0;
+ }
+ #initializeTTLTracking() {
+ const ttls = new ZeroArray(this.#max);
+ const starts = new ZeroArray(this.#max);
+ this.#ttls = ttls;
+ this.#starts = starts;
+ this.#setItemTTL = (index, ttl, start = perf.now()) => {
+ starts[index] = ttl !== 0 ? start : 0;
+ ttls[index] = ttl;
+ if (ttl !== 0 && this.ttlAutopurge) {
+ const t = setTimeout(() => {
+ if (this.#isStale(index)) {
+ this.delete(this.#keyList[index]);
+ }
+ }, ttl + 1);
+ // unref() not supported on all platforms
+ /* c8 ignore start */
+ if (t.unref) {
+ t.unref();
+ }
+ /* c8 ignore stop */
+ }
+ };
+ this.#updateItemAge = index => {
+ starts[index] = ttls[index] !== 0 ? perf.now() : 0;
+ };
+ this.#statusTTL = (status, index) => {
+ if (ttls[index]) {
+ const ttl = ttls[index];
+ const start = starts[index];
+ status.ttl = ttl;
+ status.start = start;
+ status.now = cachedNow || getNow();
+ const age = status.now - start;
+ status.remainingTTL = ttl - age;
+ }
+ };
+ // debounce calls to perf.now() to 1s so we're not hitting
+ // that costly call repeatedly.
+ let cachedNow = 0;
+ const getNow = () => {
+ const n = perf.now();
+ if (this.ttlResolution > 0) {
+ cachedNow = n;
+ const t = setTimeout(() => (cachedNow = 0), this.ttlResolution);
+ // not available on all platforms
+ /* c8 ignore start */
+ if (t.unref) {
+ t.unref();
+ }
+ /* c8 ignore stop */
+ }
+ return n;
+ };
+ this.getRemainingTTL = key => {
+ const index = this.#keyMap.get(key);
+ if (index === undefined) {
+ return 0;
+ }
+ const ttl = ttls[index];
+ const start = starts[index];
+ if (ttl === 0 || start === 0) {
+ return Infinity;
+ }
+ const age = (cachedNow || getNow()) - start;
+ return ttl - age;
+ };
+ this.#isStale = index => {
+ return (ttls[index] !== 0 &&
+ starts[index] !== 0 &&
+ (cachedNow || getNow()) - starts[index] > ttls[index]);
+ };
+ }
+ // conditionally set private methods related to TTL
+ #updateItemAge = () => { };
+ #statusTTL = () => { };
+ #setItemTTL = () => { };
+ /* c8 ignore stop */
+ #isStale = () => false;
+ #initializeSizeTracking() {
+ const sizes = new ZeroArray(this.#max);
+ this.#calculatedSize = 0;
+ this.#sizes = sizes;
+ this.#removeItemSize = index => {
+ this.#calculatedSize -= sizes[index];
+ sizes[index] = 0;
+ };
+ this.#requireSize = (k, v, size, sizeCalculation) => {
+ // provisionally accept background fetches.
+ // actual value size will be checked when they return.
+ if (this.#isBackgroundFetch(v)) {
+ return 0;
+ }
+ if (!isPosInt(size)) {
+ if (sizeCalculation) {
+ if (typeof sizeCalculation !== 'function') {
+ throw new TypeError('sizeCalculation must be a function');
+ }
+ size = sizeCalculation(v, k);
+ if (!isPosInt(size)) {
+ 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 size;
+ };
+ this.#addItemSize = (index, size, status) => {
+ sizes[index] = size;
+ if (this.#maxSize) {
+ const maxSize = this.#maxSize - sizes[index];
+ while (this.#calculatedSize > maxSize) {
+ this.#evict(true);
+ }
+ }
+ this.#calculatedSize += sizes[index];
+ if (status) {
+ status.entrySize = size;
+ status.totalCalculatedSize = this.#calculatedSize;
+ }
+ };
+ }
+ #removeItemSize = _i => { };
+ #addItemSize = (_i, _s, _st) => { };
+ #requireSize = (_k, _v, size, sizeCalculation) => {
+ if (size || sizeCalculation) {
+ throw new TypeError('cannot set size without setting maxSize or maxEntrySize on cache');
+ }
+ return 0;
+ };
+ *#indexes({ allowStale = this.allowStale } = {}) {
+ if (this.#size) {
+ for (let i = this.#tail; true;) {
+ if (!this.#isValidIndex(i)) {
+ break;
+ }
+ if (allowStale || !this.#isStale(i)) {
+ yield i;
+ }
+ if (i === this.#head) {
+ break;
+ }
+ else {
+ i = this.#prev[i];
+ }
+ }
+ }
+ }
+ *#rindexes({ allowStale = this.allowStale } = {}) {
+ if (this.#size) {
+ for (let i = this.#head; true;) {
+ if (!this.#isValidIndex(i)) {
+ break;
+ }
+ if (allowStale || !this.#isStale(i)) {
+ yield i;
+ }
+ if (i === this.#tail) {
+ break;
+ }
+ else {
+ i = this.#next[i];
+ }
+ }
+ }
+ }
+ #isValidIndex(index) {
+ return (index !== undefined &&
+ this.#keyMap.get(this.#keyList[index]) === index);
+ }
+ /**
+ * Return a generator yielding `[key, value]` pairs,
+ * in order from most recently used to least recently used.
+ */
+ *entries() {
+ for (const i of this.#indexes()) {
+ if (this.#valList[i] !== undefined &&
+ this.#keyList[i] !== undefined &&
+ !this.#isBackgroundFetch(this.#valList[i])) {
+ yield [this.#keyList[i], this.#valList[i]];
+ }
+ }
+ }
+ /**
+ * Inverse order version of {@link LRUCache.entries}
+ *
+ * Return a generator yielding `[key, value]` pairs,
+ * in order from least recently used to most recently used.
+ */
+ *rentries() {
+ for (const i of this.#rindexes()) {
+ if (this.#valList[i] !== undefined &&
+ this.#keyList[i] !== undefined &&
+ !this.#isBackgroundFetch(this.#valList[i])) {
+ yield [this.#keyList[i], this.#valList[i]];
+ }
+ }
+ }
+ /**
+ * Return a generator yielding the keys in the cache,
+ * in order from most recently used to least recently used.
+ */
+ *keys() {
+ for (const i of this.#indexes()) {
+ const k = this.#keyList[i];
+ if (k !== undefined &&
+ !this.#isBackgroundFetch(this.#valList[i])) {
+ yield k;
+ }
+ }
+ }
+ /**
+ * Inverse order version of {@link LRUCache.keys}
+ *
+ * Return a generator yielding the keys in the cache,
+ * in order from least recently used to most recently used.
+ */
+ *rkeys() {
+ for (const i of this.#rindexes()) {
+ const k = this.#keyList[i];
+ if (k !== undefined &&
+ !this.#isBackgroundFetch(this.#valList[i])) {
+ yield k;
+ }
+ }
+ }
+ /**
+ * Return a generator yielding the values in the cache,
+ * in order from most recently used to least recently used.
+ */
+ *values() {
+ for (const i of this.#indexes()) {
+ const v = this.#valList[i];
+ if (v !== undefined &&
+ !this.#isBackgroundFetch(this.#valList[i])) {
+ yield this.#valList[i];
+ }
+ }
+ }
+ /**
+ * Inverse order version of {@link LRUCache.values}
+ *
+ * Return a generator yielding the values in the cache,
+ * in order from least recently used to most recently used.
+ */
+ *rvalues() {
+ for (const i of this.#rindexes()) {
+ const v = this.#valList[i];
+ if (v !== undefined &&
+ !this.#isBackgroundFetch(this.#valList[i])) {
+ yield this.#valList[i];
+ }
+ }
+ }
+ /**
+ * Iterating over the cache itself yields the same results as
+ * {@link LRUCache.entries}
+ */
+ [Symbol.iterator]() {
+ return this.entries();
+ }
+ /**
+ * 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).
+ */
+ find(fn, getOptions = {}) {
+ for (const i of this.#indexes()) {
+ const v = this.#valList[i];
+ const value = this.#isBackgroundFetch(v)
+ ? v.__staleWhileFetching
+ : v;
+ if (value === undefined)
+ continue;
+ if (fn(value, this.#keyList[i], this)) {
+ return this.get(this.#keyList[i], getOptions);
+ }
+ }
+ }
+ /**
+ * 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.
+ */
+ forEach(fn, thisp = this) {
+ for (const i of this.#indexes()) {
+ const v = this.#valList[i];
+ const value = this.#isBackgroundFetch(v)
+ ? v.__staleWhileFetching
+ : v;
+ if (value === undefined)
+ continue;
+ fn.call(thisp, value, this.#keyList[i], this);
+ }
+ }
+ /**
+ * The same as {@link LRUCache.forEach} but items are iterated over in
+ * reverse order. (ie, less recently used items are iterated over first.)
+ */
+ rforEach(fn, thisp = this) {
+ for (const i of this.#rindexes()) {
+ const v = this.#valList[i];
+ const value = this.#isBackgroundFetch(v)
+ ? v.__staleWhileFetching
+ : v;
+ if (value === undefined)
+ continue;
+ fn.call(thisp, value, this.#keyList[i], this);
+ }
+ }
+ /**
+ * Delete any stale entries. Returns true if anything was removed,
+ * false otherwise.
+ */
+ purgeStale() {
+ let deleted = false;
+ for (const i of this.#rindexes({ allowStale: true })) {
+ if (this.#isStale(i)) {
+ this.delete(this.#keyList[i]);
+ deleted = true;
+ }
+ }
+ return deleted;
+ }
+ /**
+ * Return an array of [key, {@link LRUCache.Entry}] tuples which can be
+ * passed to cache.load()
+ */
+ dump() {
+ const arr = [];
+ for (const i of this.#indexes({ allowStale: true })) {
+ const key = this.#keyList[i];
+ const v = this.#valList[i];
+ const value = this.#isBackgroundFetch(v)
+ ? v.__staleWhileFetching
+ : v;
+ if (value === undefined || key === undefined)
+ continue;
+ const entry = { value };
+ if (this.#ttls && this.#starts) {
+ entry.ttl = this.#ttls[i];
+ // always dump the start relative to a portable timestamp
+ // it's ok for this to be a bit slow, it's a rare operation.
+ const age = perf.now() - this.#starts[i];
+ entry.start = Math.floor(Date.now() - age);
+ }
+ if (this.#sizes) {
+ entry.size = this.#sizes[i];
+ }
+ arr.unshift([key, entry]);
+ }
+ return arr;
+ }
+ /**
+ * 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.
+ */
+ load(arr) {
+ this.clear();
+ for (const [key, entry] of arr) {
+ if (entry.start) {
+ // entry.start is a portable timestamp, but we may be using
+ // node's performance.now(), so calculate the offset, so that
+ // we get the intended remaining TTL, no matter how long it's
+ // been on ice.
+ //
+ // it's ok for this to be a bit slow, it's a rare operation.
+ const age = Date.now() - entry.start;
+ entry.start = perf.now() - age;
+ }
+ this.set(key, entry.value, entry);
+ }
+ }
+ /**
+ * Add a value to the cache.
+ *
+ * Note: if `undefined` is specified as a value, this is an alias for
+ * {@link LRUCache#delete}
+ */
+ set(k, v, setOptions = {}) {
+ if (v === undefined) {
+ this.delete(k);
+ return this;
+ }
+ const { ttl = this.ttl, start, noDisposeOnSet = this.noDisposeOnSet, sizeCalculation = this.sizeCalculation, status, } = setOptions;
+ let { noUpdateTTL = this.noUpdateTTL } = setOptions;
+ const size = this.#requireSize(k, v, setOptions.size || 0, sizeCalculation);
+ // if the item doesn't fit, don't do anything
+ // NB: maxEntrySize set to maxSize by default
+ if (this.maxEntrySize && size > this.maxEntrySize) {
+ if (status) {
+ status.set = 'miss';
+ status.maxEntrySizeExceeded = true;
+ }
+ // have to delete, in case something is there already.
+ this.delete(k);
+ return this;
+ }
+ let index = this.#size === 0 ? undefined : this.#keyMap.get(k);
+ if (index === undefined) {
+ // addition
+ index = (this.#size === 0
+ ? this.#tail
+ : this.#free.length !== 0
+ ? this.#free.pop()
+ : this.#size === this.#max
+ ? this.#evict(false)
+ : this.#size);
+ this.#keyList[index] = k;
+ this.#valList[index] = v;
+ this.#keyMap.set(k, index);
+ this.#next[this.#tail] = index;
+ this.#prev[index] = this.#tail;
+ this.#tail = index;
+ this.#size++;
+ this.#addItemSize(index, size, status);
+ if (status)
+ status.set = 'add';
+ noUpdateTTL = false;
+ }
+ else {
+ // update
+ this.#moveToTail(index);
+ const oldVal = this.#valList[index];
+ if (v !== oldVal) {
+ if (this.#hasFetchMethod && this.#isBackgroundFetch(oldVal)) {
+ oldVal.__abortController.abort(new Error('replaced'));
+ }
+ else if (!noDisposeOnSet) {
+ if (this.#hasDispose) {
+ this.#dispose?.(oldVal, k, 'set');
+ }
+ if (this.#hasDisposeAfter) {
+ this.#disposed?.push([oldVal, k, 'set']);
+ }
+ }
+ this.#removeItemSize(index);
+ this.#addItemSize(index, size, status);
+ this.#valList[index] = v;
+ if (status) {
+ status.set = 'replace';
+ const oldValue = oldVal && this.#isBackgroundFetch(oldVal)
+ ? oldVal.__staleWhileFetching
+ : oldVal;
+ if (oldValue !== undefined)
+ status.oldValue = oldValue;
+ }
+ }
+ else if (status) {
+ status.set = 'update';
+ }
+ }
+ if (ttl !== 0 && !this.#ttls) {
+ this.#initializeTTLTracking();
+ }
+ if (this.#ttls) {
+ if (!noUpdateTTL) {
+ this.#setItemTTL(index, ttl, start);
+ }
+ if (status)
+ this.#statusTTL(status, index);
+ }
+ if (!noDisposeOnSet && this.#hasDisposeAfter && this.#disposed) {
+ const dt = this.#disposed;
+ let task;
+ while ((task = dt?.shift())) {
+ this.#disposeAfter?.(...task);
+ }
+ }
+ return this;
+ }
+ /**
+ * Evict the least recently used item, returning its value or
+ * `undefined` if cache is empty.
+ */
+ pop() {
+ try {
+ while (this.#size) {
+ const val = this.#valList[this.#head];
+ this.#evict(true);
+ if (this.#isBackgroundFetch(val)) {
+ if (val.__staleWhileFetching) {
+ return val.__staleWhileFetching;
+ }
+ }
+ else if (val !== undefined) {
+ return val;
+ }
+ }
+ }
+ finally {
+ if (this.#hasDisposeAfter && this.#disposed) {
+ const dt = this.#disposed;
+ let task;
+ while ((task = dt?.shift())) {
+ this.#disposeAfter?.(...task);
+ }
+ }
+ }
+ }
+ #evict(free) {
+ const head = this.#head;
+ const k = this.#keyList[head];
+ const v = this.#valList[head];
+ if (this.#hasFetchMethod && this.#isBackgroundFetch(v)) {
+ v.__abortController.abort(new Error('evicted'));
+ }
+ else if (this.#hasDispose || this.#hasDisposeAfter) {
+ if (this.#hasDispose) {
+ this.#dispose?.(v, k, 'evict');
+ }
+ if (this.#hasDisposeAfter) {
+ this.#disposed?.push([v, k, 'evict']);
+ }
+ }
+ this.#removeItemSize(head);
+ // if we aren't about to use the index, then null these out
+ if (free) {
+ this.#keyList[head] = undefined;
+ this.#valList[head] = undefined;
+ this.#free.push(head);
+ }
+ if (this.#size === 1) {
+ this.#head = this.#tail = 0;
+ this.#free.length = 0;
+ }
+ else {
+ this.#head = this.#next[head];
+ }
+ this.#keyMap.delete(k);
+ this.#size--;
+ return head;
+ }
+ /**
+ * Check if a key is in the cache, without updating the recency of use.
+ * Will return false if the item is stale, even though it is technically
+ * in the cache.
+ *
+ * Will not update item age unless
+ * {@link LRUCache.OptionsBase.updateAgeOnHas} is set.
+ */
+ has(k, hasOptions = {}) {
+ const { updateAgeOnHas = this.updateAgeOnHas, status } = hasOptions;
+ const index = this.#keyMap.get(k);
+ if (index !== undefined) {
+ const v = this.#valList[index];
+ if (this.#isBackgroundFetch(v) &&
+ v.__staleWhileFetching === undefined) {
+ return false;
+ }
+ if (!this.#isStale(index)) {
+ if (updateAgeOnHas) {
+ this.#updateItemAge(index);
+ }
+ if (status) {
+ status.has = 'hit';
+ this.#statusTTL(status, index);
+ }
+ return true;
+ }
+ else if (status) {
+ status.has = 'stale';
+ this.#statusTTL(status, index);
+ }
+ }
+ else if (status) {
+ status.has = 'miss';
+ }
+ return false;
+ }
+ /**
+ * Like {@link LRUCache#get} but doesn't update recency or delete stale
+ * items.
+ *
+ * Returns `undefined` if the item is stale, unless
+ * {@link LRUCache.OptionsBase.allowStale} is set.
+ */
+ peek(k, peekOptions = {}) {
+ const { allowStale = this.allowStale } = peekOptions;
+ const index = this.#keyMap.get(k);
+ if (index !== undefined &&
+ (allowStale || !this.#isStale(index))) {
+ const v = this.#valList[index];
+ // either stale and allowed, or forcing a refresh of non-stale value
+ return this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;
+ }
+ }
+ #backgroundFetch(k, index, options, context) {
+ const v = index === undefined ? undefined : this.#valList[index];
+ if (this.#isBackgroundFetch(v)) {
+ return v;
+ }
+ const ac = new AC();
+ const { signal } = options;
+ // when/if our AC signals, then stop listening to theirs.
+ signal?.addEventListener('abort', () => ac.abort(signal.reason), {
+ signal: ac.signal,
+ });
+ const fetchOpts = {
+ signal: ac.signal,
+ options,
+ context,
+ };
+ const cb = (v, updateCache = false) => {
+ const { aborted } = ac.signal;
+ const ignoreAbort = options.ignoreFetchAbort && v !== undefined;
+ if (options.status) {
+ if (aborted && !updateCache) {
+ options.status.fetchAborted = true;
+ options.status.fetchError = ac.signal.reason;
+ if (ignoreAbort)
+ options.status.fetchAbortIgnored = true;
+ }
+ else {
+ options.status.fetchResolved = true;
+ }
+ }
+ if (aborted && !ignoreAbort && !updateCache) {
+ return fetchFail(ac.signal.reason);
+ }
+ // either we didn't abort, and are still here, or we did, and ignored
+ const bf = p;
+ if (this.#valList[index] === p) {
+ if (v === undefined) {
+ if (bf.__staleWhileFetching) {
+ this.#valList[index] = bf.__staleWhileFetching;
+ }
+ else {
+ this.delete(k);
+ }
+ }
+ else {
+ if (options.status)
+ options.status.fetchUpdated = true;
+ this.set(k, v, fetchOpts.options);
+ }
+ }
+ return v;
+ };
+ const eb = (er) => {
+ if (options.status) {
+ options.status.fetchRejected = true;
+ options.status.fetchError = er;
+ }
+ return fetchFail(er);
+ };
+ const fetchFail = (er) => {
+ const { aborted } = ac.signal;
+ const allowStaleAborted = aborted && options.allowStaleOnFetchAbort;
+ const allowStale = allowStaleAborted || options.allowStaleOnFetchRejection;
+ const noDelete = allowStale || options.noDeleteOnFetchRejection;
+ const bf = p;
+ if (this.#valList[index] === p) {
+ // if we allow stale on fetch rejections, then we need to ensure that
+ // the stale value is not removed from the cache when the fetch fails.
+ const del = !noDelete || bf.__staleWhileFetching === undefined;
+ if (del) {
+ this.delete(k);
+ }
+ else if (!allowStaleAborted) {
+ // still replace the *promise* with the stale value,
+ // since we are done with the promise at this point.
+ // leave it untouched if we're still waiting for an
+ // aborted background fetch that hasn't yet returned.
+ this.#valList[index] = bf.__staleWhileFetching;
+ }
+ }
+ if (allowStale) {
+ if (options.status && bf.__staleWhileFetching !== undefined) {
+ options.status.returnedStale = true;
+ }
+ return bf.__staleWhileFetching;
+ }
+ else if (bf.__returned === bf) {
+ throw er;
+ }
+ };
+ const pcall = (res, rej) => {
+ const fmp = this.#fetchMethod?.(k, v, fetchOpts);
+ if (fmp && fmp instanceof Promise) {
+ fmp.then(v => res(v), rej);
+ }
+ // ignored, we go until we finish, regardless.
+ // defer check until we are actually aborting,
+ // so fetchMethod can override.
+ ac.signal.addEventListener('abort', () => {
+ if (!options.ignoreFetchAbort ||
+ options.allowStaleOnFetchAbort) {
+ res();
+ // when it eventually resolves, update the cache.
+ if (options.allowStaleOnFetchAbort) {
+ res = v => cb(v, true);
+ }
+ }
+ });
+ };
+ if (options.status)
+ options.status.fetchDispatched = true;
+ const p = new Promise(pcall).then(cb, eb);
+ const bf = Object.assign(p, {
+ __abortController: ac,
+ __staleWhileFetching: v,
+ __returned: undefined,
+ });
+ if (index === undefined) {
+ // internal, don't expose status.
+ this.set(k, bf, { ...fetchOpts.options, status: undefined });
+ index = this.#keyMap.get(k);
+ }
+ else {
+ this.#valList[index] = bf;
+ }
+ return bf;
+ }
+ #isBackgroundFetch(p) {
+ if (!this.#hasFetchMethod)
+ return false;
+ const b = p;
+ return (!!b &&
+ b instanceof Promise &&
+ b.hasOwnProperty('__staleWhileFetching') &&
+ b.__abortController instanceof AC);
+ }
+ async fetch(k, fetchOptions = {}) {
+ const {
+ // get options
+ allowStale = this.allowStale, updateAgeOnGet = this.updateAgeOnGet, noDeleteOnStaleGet = this.noDeleteOnStaleGet,
+ // set options
+ ttl = this.ttl, noDisposeOnSet = this.noDisposeOnSet, size = 0, sizeCalculation = this.sizeCalculation, noUpdateTTL = this.noUpdateTTL,
+ // fetch exclusive options
+ noDeleteOnFetchRejection = this.noDeleteOnFetchRejection, allowStaleOnFetchRejection = this.allowStaleOnFetchRejection, ignoreFetchAbort = this.ignoreFetchAbort, allowStaleOnFetchAbort = this.allowStaleOnFetchAbort, context, forceRefresh = false, status, signal, } = fetchOptions;
+ if (!this.#hasFetchMethod) {
+ if (status)
+ status.fetch = 'get';
+ return this.get(k, {
+ allowStale,
+ updateAgeOnGet,
+ noDeleteOnStaleGet,
+ status,
+ });
+ }
+ const options = {
+ allowStale,
+ updateAgeOnGet,
+ noDeleteOnStaleGet,
+ ttl,
+ noDisposeOnSet,
+ size,
+ sizeCalculation,
+ noUpdateTTL,
+ noDeleteOnFetchRejection,
+ allowStaleOnFetchRejection,
+ allowStaleOnFetchAbort,
+ ignoreFetchAbort,
+ status,
+ signal,
+ };
+ let index = this.#keyMap.get(k);
+ if (index === undefined) {
+ if (status)
+ status.fetch = 'miss';
+ const p = this.#backgroundFetch(k, index, options, context);
+ return (p.__returned = p);
+ }
+ else {
+ // in cache, maybe already fetching
+ const v = this.#valList[index];
+ if (this.#isBackgroundFetch(v)) {
+ const stale = allowStale && v.__staleWhileFetching !== undefined;
+ if (status) {
+ status.fetch = 'inflight';
+ if (stale)
+ status.returnedStale = true;
+ }
+ return stale ? v.__staleWhileFetching : (v.__returned = v);
+ }
+ // if we force a refresh, that means do NOT serve the cached value,
+ // unless we are already in the process of refreshing the cache.
+ const isStale = this.#isStale(index);
+ if (!forceRefresh && !isStale) {
+ if (status)
+ status.fetch = 'hit';
+ this.#moveToTail(index);
+ if (updateAgeOnGet) {
+ this.#updateItemAge(index);
+ }
+ if (status)
+ this.#statusTTL(status, index);
+ return v;
+ }
+ // ok, it is stale or a forced refresh, and not already fetching.
+ // refresh the cache.
+ const p = this.#backgroundFetch(k, index, options, context);
+ const hasStale = p.__staleWhileFetching !== undefined;
+ const staleVal = hasStale && allowStale;
+ if (status) {
+ status.fetch = isStale ? 'stale' : 'refresh';
+ if (staleVal && isStale)
+ status.returnedStale = true;
+ }
+ return staleVal ? p.__staleWhileFetching : (p.__returned = p);
+ }
+ }
+ /**
+ * Return a value from the cache. Will update the recency of the cache
+ * entry found.
+ *
+ * If the key is not found, get() will return `undefined`.
+ */
+ get(k, getOptions = {}) {
+ const { allowStale = this.allowStale, updateAgeOnGet = this.updateAgeOnGet, noDeleteOnStaleGet = this.noDeleteOnStaleGet, status, } = getOptions;
+ const index = this.#keyMap.get(k);
+ if (index !== undefined) {
+ const value = this.#valList[index];
+ const fetching = this.#isBackgroundFetch(value);
+ if (status)
+ this.#statusTTL(status, index);
+ if (this.#isStale(index)) {
+ if (status)
+ status.get = 'stale';
+ // delete only if not an in-flight background fetch
+ if (!fetching) {
+ if (!noDeleteOnStaleGet) {
+ this.delete(k);
+ }
+ if (status && allowStale)
+ status.returnedStale = true;
+ return allowStale ? value : undefined;
+ }
+ else {
+ if (status &&
+ allowStale &&
+ value.__staleWhileFetching !== undefined) {
+ status.returnedStale = true;
+ }
+ return allowStale ? value.__staleWhileFetching : undefined;
+ }
+ }
+ else {
+ if (status)
+ status.get = 'hit';
+ // if we're currently fetching it, we don't actually have it yet
+ // it's not stale, which means this isn't a staleWhileRefetching.
+ // If it's not stale, and fetching, AND has a __staleWhileFetching
+ // value, then that means the user fetched with {forceRefresh:true},
+ // so it's safe to return that value.
+ if (fetching) {
+ return value.__staleWhileFetching;
+ }
+ this.#moveToTail(index);
+ if (updateAgeOnGet) {
+ this.#updateItemAge(index);
+ }
+ return value;
+ }
+ }
+ else if (status) {
+ status.get = 'miss';
+ }
+ }
+ #connect(p, n) {
+ this.#prev[n] = p;
+ this.#next[p] = n;
+ }
+ #moveToTail(index) {
+ // if tail already, nothing to do
+ // if head, move head to next[index]
+ // else
+ // move next[prev[index]] to next[index] (head has no prev)
+ // move prev[next[index]] to prev[index]
+ // prev[index] = tail
+ // next[tail] = index
+ // tail = index
+ if (index !== this.#tail) {
+ if (index === this.#head) {
+ this.#head = this.#next[index];
+ }
+ else {
+ this.#connect(this.#prev[index], this.#next[index]);
+ }
+ this.#connect(this.#tail, index);
+ this.#tail = index;
+ }
+ }
+ /**
+ * Deletes a key out of the cache.
+ * Returns true if the key was deleted, false otherwise.
+ */
+ delete(k) {
+ let deleted = false;
+ if (this.#size !== 0) {
+ const index = this.#keyMap.get(k);
+ if (index !== undefined) {
+ deleted = true;
+ if (this.#size === 1) {
+ this.clear();
+ }
+ else {
+ this.#removeItemSize(index);
+ const v = this.#valList[index];
+ if (this.#isBackgroundFetch(v)) {
+ v.__abortController.abort(new Error('deleted'));
+ }
+ else if (this.#hasDispose || this.#hasDisposeAfter) {
+ if (this.#hasDispose) {
+ this.#dispose?.(v, k, 'delete');
+ }
+ if (this.#hasDisposeAfter) {
+ this.#disposed?.push([v, k, 'delete']);
+ }
+ }
+ this.#keyMap.delete(k);
+ this.#keyList[index] = undefined;
+ this.#valList[index] = undefined;
+ if (index === this.#tail) {
+ this.#tail = this.#prev[index];
+ }
+ else if (index === this.#head) {
+ this.#head = this.#next[index];
+ }
+ else {
+ this.#next[this.#prev[index]] = this.#next[index];
+ this.#prev[this.#next[index]] = this.#prev[index];
+ }
+ this.#size--;
+ this.#free.push(index);
+ }
+ }
+ }
+ if (this.#hasDisposeAfter && this.#disposed?.length) {
+ const dt = this.#disposed;
+ let task;
+ while ((task = dt?.shift())) {
+ this.#disposeAfter?.(...task);
+ }
+ }
+ return deleted;
+ }
+ /**
+ * Clear the cache entirely, throwing away all values.
+ */
+ clear() {
+ for (const index of this.#rindexes({ allowStale: true })) {
+ const v = this.#valList[index];
+ if (this.#isBackgroundFetch(v)) {
+ v.__abortController.abort(new Error('deleted'));
+ }
+ else {
+ const k = this.#keyList[index];
+ if (this.#hasDispose) {
+ this.#dispose?.(v, k, 'delete');
+ }
+ if (this.#hasDisposeAfter) {
+ this.#disposed?.push([v, k, 'delete']);
+ }
+ }
+ }
+ this.#keyMap.clear();
+ this.#valList.fill(undefined);
+ this.#keyList.fill(undefined);
+ if (this.#ttls && this.#starts) {
+ this.#ttls.fill(0);
+ this.#starts.fill(0);
+ }
+ if (this.#sizes) {
+ this.#sizes.fill(0);
+ }
+ this.#head = 0;
+ this.#tail = 0;
+ this.#free.length = 0;
+ this.#calculatedSize = 0;
+ this.#size = 0;
+ if (this.#hasDisposeAfter && this.#disposed) {
+ const dt = this.#disposed;
+ let task;
+ while ((task = dt?.shift())) {
+ this.#disposeAfter?.(...task);
+ }
+ }
+ }
+}
+//# sourceMappingURL=index.js.map \ No newline at end of file
diff --git a/deps/npm/node_modules/path-scurry/node_modules/lru-cache/dist/mjs/index.min.js b/deps/npm/node_modules/path-scurry/node_modules/lru-cache/dist/mjs/index.min.js
new file mode 100644
index 0000000000..44bd1c23b8
--- /dev/null
+++ b/deps/npm/node_modules/path-scurry/node_modules/lru-cache/dist/mjs/index.min.js
@@ -0,0 +1,2 @@
+var U=(o,t,e)=>{if(!t.has(o))throw TypeError("Cannot "+e)};var I=(o,t,e)=>(U(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)=>(U(o,t,"write to private field"),i?i.call(o,e):t.set(o,e),e);var v=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}`)},R=globalThis.AbortController,N=globalThis.AbortSignal;if(typeof R>"u"){N=class{onabort;_onabort=[];reason;aborted=!1;addEventListener(i,s){this._onabort.push(s)}},R=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"),m=o=>o&&o===Math.floor(o)&&o>0&&isFinite(o),k=o=>m(o)?o<=Math.pow(2,8)?Uint8Array:o<=Math.pow(2,16)?Uint16Array:o<=Math.pow(2,32)?Uint32Array:o<=Number.MAX_SAFE_INTEGER?z:null:null,z=class extends Array{constructor(t){super(t),this.fill(0)}},E,T=class{heap;length;static create(t){let e=k(t);if(!e)return[];D(T,E,!0);let i=new T(t,e);return D(T,E,!1),i}constructor(t,e){if(!I(T,E))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=T;E=new WeakMap,j(C,E,!1);var W=class{#d;#f;#_;#g;#C;ttl;ttlResolution;ttlAutopurge;updateAgeOnGet;updateAgeOnHas;allowStale;noDisposeOnSet;noUpdateTTL;maxEntrySize;sizeCalculation;noDeleteOnFetchRejection;noDeleteOnStaleGet;allowStaleOnFetchAbort;allowStaleOnFetchRejection;ignoreFetchAbort;#s;#p;#n;#i;#t;#l;#c;#o;#h;#w;#r;#m;#F;#S;#b;#T;#a;static unsafeExposeInternals(t){return{starts:t.#F,ttls:t.#S,sizes:t.#m,keyMap:t.#n,keyList:t.#i,valList:t.#t,next:t.#l,prev:t.#c,get head(){return t.#o},get tail(){return t.#h},free:t.#w,isBackgroundFetch:e=>t.#e(e),backgroundFetch:(e,i,s,n)=>t.#D(e,i,s,n),moveToTail:e=>t.#v(e),indexes:e=>t.#y(e),rindexes:e=>t.#A(e),isStale:e=>t.#u(e)}}get max(){return this.#d}get maxSize(){return this.#f}get calculatedSize(){return this.#p}get size(){return this.#s}get fetchMethod(){return this.#C}get dispose(){return this.#_}get disposeAfter(){return this.#g}constructor(t){let{max:e=0,ttl:i,ttlResolution:s=1,ttlAutopurge:n,updateAgeOnGet:h,updateAgeOnHas:a,allowStale:r,dispose:u,disposeAfter:b,noDisposeOnSet:f,noUpdateTTL:d,maxSize:p=0,maxEntrySize:F=0,sizeCalculation:c,fetchMethod:w,noDeleteOnFetchRejection:l,noDeleteOnStaleGet:S,allowStaleOnFetchRejection:y,allowStaleOnFetchAbort:g,ignoreFetchAbort:_}=t;if(e!==0&&!m(e))throw new TypeError("max option must be a nonnegative integer");let O=e?k(e):Array;if(!O)throw new Error("invalid max value: "+e);if(this.#d=e,this.#f=p,this.maxEntrySize=F||this.#f,this.sizeCalculation=c,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(w!==void 0&&typeof w!="function")throw new TypeError("fetchMethod must be a function if specified");if(this.#C=w,this.#T=!!w,this.#n=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.#w=C.create(e),this.#s=0,this.#p=0,typeof u=="function"&&(this.#_=u),typeof b=="function"?(this.#g=b,this.#r=[]):(this.#g=void 0,this.#r=void 0),this.#b=!!this.#_,this.#a=!!this.#g,this.noDisposeOnSet=!!f,this.noUpdateTTL=!!d,this.noDeleteOnFetchRejection=!!l,this.allowStaleOnFetchRejection=!!y,this.allowStaleOnFetchAbort=!!g,this.ignoreFetchAbort=!!_,this.maxEntrySize!==0){if(this.#f!==0&&!m(this.#f))throw new TypeError("maxSize must be a positive integer if specified");if(!m(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");this.#j()}if(this.allowStale=!!r,this.noDeleteOnStaleGet=!!S,this.updateAgeOnGet=!!h,this.updateAgeOnHas=!!a,this.ttlResolution=m(s)||s===0?s:1,this.ttlAutopurge=!!n,this.ttl=i||0,this.ttl){if(!m(this.ttl))throw new TypeError("ttl must be a positive integer if specified");this.#L()}if(this.#d===0&&this.ttl===0&&this.#f===0)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!this.#d&&!this.#f){let A="LRU_CACHE_UNBOUNDED";V(A)&&(M.add(A),P("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",A,W))}}getRemainingTTL(t){return this.#n.has(t)?1/0:0}#L(){let t=new z(this.#d),e=new z(this.#d);this.#S=t,this.#F=e,this.#x=(n,h,a=v.now())=>{if(e[n]=h!==0?a:0,t[n]=h,h!==0&&this.ttlAutopurge){let r=setTimeout(()=>{this.#u(n)&&this.delete(this.#i[n])},h+1);r.unref&&r.unref()}},this.#z=n=>{e[n]=t[n]!==0?v.now():0},this.#O=(n,h)=>{if(t[h]){let a=t[h],r=e[h];n.ttl=a,n.start=r,n.now=i||s();let u=n.now-r;n.remainingTTL=a-u}};let i=0,s=()=>{let n=v.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.#n.get(n);if(h===void 0)return 0;let a=t[h],r=e[h];if(a===0||r===0)return 1/0;let u=(i||s())-r;return a-u},this.#u=n=>t[n]!==0&&e[n]!==0&&(i||s())-e[n]>t[n]}#z=()=>{};#O=()=>{};#x=()=>{};#u=()=>!1;#j(){let t=new z(this.#d);this.#p=0,this.#m=t,this.#E=e=>{this.#p-=t[e],t[e]=0},this.#G=(e,i,s,n)=>{if(this.#e(i))return 0;if(!m(s))if(n){if(typeof n!="function")throw new TypeError("sizeCalculation must be a function");if(s=n(i,e),!m(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.#p>n;)this.#W(!0)}this.#p+=t[e],s&&(s.entrySize=i,s.totalCalculatedSize=this.#p)}}#E=t=>{};#R=(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};*#y({allowStale:t=this.allowStale}={}){if(this.#s)for(let e=this.#h;!(!this.#U(e)||((t||!this.#u(e))&&(yield e),e===this.#o));)e=this.#c[e]}*#A({allowStale:t=this.allowStale}={}){if(this.#s)for(let e=this.#o;!(!this.#U(e)||((t||!this.#u(e))&&(yield e),e===this.#h));)e=this.#l[e]}#U(t){return t!==void 0&&this.#n.get(this.#i[t])===t}*entries(){for(let t of this.#y())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.#A())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.#y()){let e=this.#i[t];e!==void 0&&!this.#e(this.#t[t])&&(yield e)}}*rkeys(){for(let t of this.#A()){let e=this.#i[t];e!==void 0&&!this.#e(this.#t[t])&&(yield e)}}*values(){for(let t of this.#y())this.#t[t]!==void 0&&!this.#e(this.#t[t])&&(yield this.#t[t])}*rvalues(){for(let t of this.#A())this.#t[t]!==void 0&&!this.#e(this.#t[t])&&(yield this.#t[t])}[Symbol.iterator](){return this.entries()}find(t,e={}){for(let i of this.#y()){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.#y()){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.#A()){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.#A({allowStale:!0}))this.#u(e)&&(this.delete(this.#i[e]),t=!0);return t}dump(){let t=[];for(let e of this.#y({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.#S&&this.#F){h.ttl=this.#S[e];let a=v.now()-this.#F[e];h.start=Math.floor(Date.now()-a)}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=v.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:a=this.sizeCalculation,status:r}=i,{noUpdateTTL:u=this.noUpdateTTL}=i,b=this.#G(t,e,i.size||0,a);if(this.maxEntrySize&&b>this.maxEntrySize)return r&&(r.set="miss",r.maxEntrySizeExceeded=!0),this.delete(t),this;let f=this.#s===0?void 0:this.#n.get(t);if(f===void 0)f=this.#s===0?this.#h:this.#w.length!==0?this.#w.pop():this.#s===this.#d?this.#W(!1):this.#s,this.#i[f]=t,this.#t[f]=e,this.#n.set(t,f),this.#l[this.#h]=f,this.#c[f]=this.#h,this.#h=f,this.#s++,this.#R(f,b,r),r&&(r.set="add"),u=!1;else{this.#v(f);let d=this.#t[f];if(e!==d){if(this.#T&&this.#e(d)?d.__abortController.abort(new Error("replaced")):h||(this.#b&&this.#_?.(d,t,"set"),this.#a&&this.#r?.push([d,t,"set"])),this.#E(f),this.#R(f,b,r),this.#t[f]=e,r){r.set="replace";let p=d&&this.#e(d)?d.__staleWhileFetching:d;p!==void 0&&(r.oldValue=p)}}else r&&(r.set="update")}if(s!==0&&!this.#S&&this.#L(),this.#S&&(u||this.#x(f,s,n),r&&this.#O(r,f)),!h&&this.#a&&this.#r){let d=this.#r,p;for(;p=d?.shift();)this.#g?.(...p)}return this}pop(){try{for(;this.#s;){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.#g?.(...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.#b||this.#a)&&(this.#b&&this.#_?.(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.#w.push(e)),this.#s===1?(this.#o=this.#h=0,this.#w.length=0):this.#o=this.#l[e],this.#n.delete(i),this.#s--,e}has(t,e={}){let{updateAgeOnHas:i=this.updateAgeOnHas,status:s}=e,n=this.#n.get(t);if(n!==void 0){let h=this.#t[n];if(this.#e(h)&&h.__staleWhileFetching===void 0)return!1;if(this.#u(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.#n.get(t);if(s!==void 0&&(i||!this.#u(s))){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 R,{signal:a}=i;a?.addEventListener("abort",()=>h.abort(a.reason),{signal:h.signal});let r={signal:h.signal,options:i,context:s},u=(c,w=!1)=>{let{aborted:l}=h.signal,S=i.ignoreFetchAbort&&c!==void 0;if(i.status&&(l&&!w?(i.status.fetchAborted=!0,i.status.fetchError=h.signal.reason,S&&(i.status.fetchAbortIgnored=!0)):i.status.fetchResolved=!0),l&&!S&&!w)return f(h.signal.reason);let y=p;return this.#t[e]===p&&(c===void 0?y.__staleWhileFetching?this.#t[e]=y.__staleWhileFetching:this.delete(t):(i.status&&(i.status.fetchUpdated=!0),this.set(t,c,r.options))),c},b=c=>(i.status&&(i.status.fetchRejected=!0,i.status.fetchError=c),f(c)),f=c=>{let{aborted:w}=h.signal,l=w&&i.allowStaleOnFetchAbort,S=l||i.allowStaleOnFetchRejection,y=S||i.noDeleteOnFetchRejection,g=p;if(this.#t[e]===p&&(!y||g.__staleWhileFetching===void 0?this.delete(t):l||(this.#t[e]=g.__staleWhileFetching)),S)return i.status&&g.__staleWhileFetching!==void 0&&(i.status.returnedStale=!0),g.__staleWhileFetching;if(g.__returned===g)throw c},d=(c,w)=>{let l=this.#C?.(t,n,r);l&&l instanceof Promise&&l.then(S=>c(S),w),h.signal.addEventListener("abort",()=>{(!i.ignoreFetchAbort||i.allowStaleOnFetchAbort)&&(c(),i.allowStaleOnFetchAbort&&(c=S=>u(S,!0)))})};i.status&&(i.status.fetchDispatched=!0);let p=new Promise(d).then(u,b),F=Object.assign(p,{__abortController:h,__staleWhileFetching:n,__returned:void 0});return e===void 0?(this.set(t,F,{...r.options,status:void 0}),e=this.#n.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 R}async fetch(t,e={}){let{allowStale:i=this.allowStale,updateAgeOnGet:s=this.updateAgeOnGet,noDeleteOnStaleGet:n=this.noDeleteOnStaleGet,ttl:h=this.ttl,noDisposeOnSet:a=this.noDisposeOnSet,size:r=0,sizeCalculation:u=this.sizeCalculation,noUpdateTTL:b=this.noUpdateTTL,noDeleteOnFetchRejection:f=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:d=this.allowStaleOnFetchRejection,ignoreFetchAbort:p=this.ignoreFetchAbort,allowStaleOnFetchAbort:F=this.allowStaleOnFetchAbort,context:c,forceRefresh:w=!1,status:l,signal:S}=e;if(!this.#T)return l&&(l.fetch="get"),this.get(t,{allowStale:i,updateAgeOnGet:s,noDeleteOnStaleGet:n,status:l});let y={allowStale:i,updateAgeOnGet:s,noDeleteOnStaleGet:n,ttl:h,noDisposeOnSet:a,size:r,sizeCalculation:u,noUpdateTTL:b,noDeleteOnFetchRejection:f,allowStaleOnFetchRejection:d,allowStaleOnFetchAbort:F,ignoreFetchAbort:p,status:l,signal:S},g=this.#n.get(t);if(g===void 0){l&&(l.fetch="miss");let _=this.#D(t,g,y,c);return _.__returned=_}else{let _=this.#t[g];if(this.#e(_)){let G=i&&_.__staleWhileFetching!==void 0;return l&&(l.fetch="inflight",G&&(l.returnedStale=!0)),G?_.__staleWhileFetching:_.__returned=_}let O=this.#u(g);if(!w&&!O)return l&&(l.fetch="hit"),this.#v(g),s&&this.#z(g),l&&this.#O(l,g),_;let A=this.#D(t,g,y,c),x=A.__staleWhileFetching!==void 0&&i;return l&&(l.fetch=O?"stale":"refresh",x&&O&&(l.returnedStale=!0)),x?A.__staleWhileFetching:A.__returned=A}}get(t,e={}){let{allowStale:i=this.allowStale,updateAgeOnGet:s=this.updateAgeOnGet,noDeleteOnStaleGet:n=this.noDeleteOnStaleGet,status:h}=e,a=this.#n.get(t);if(a!==void 0){let r=this.#t[a],u=this.#e(r);return h&&this.#O(h,a),this.#u(a)?(h&&(h.get="stale"),u?(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"),u?r.__staleWhileFetching:(this.#v(a),s&&this.#z(a),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.#s!==0){let i=this.#n.get(t);if(i!==void 0)if(e=!0,this.#s===1)this.clear();else{this.#E(i);let s=this.#t[i];this.#e(s)?s.__abortController.abort(new Error("deleted")):(this.#b||this.#a)&&(this.#b&&this.#_?.(s,t,"delete"),this.#a&&this.#r?.push([s,t,"delete"])),this.#n.delete(t),this.#i[i]=void 0,this.#t[i]=void 0,i===this.#h?this.#h=this.#c[i]:i===this.#o?this.#o=this.#l[i]:(this.#l[this.#c[i]]=this.#l[i],this.#c[this.#l[i]]=this.#c[i]),this.#s--,this.#w.push(i)}}if(this.#a&&this.#r?.length){let i=this.#r,s;for(;s=i?.shift();)this.#g?.(...s)}return e}clear(){for(let t of this.#A({allowStale:!0})){let e=this.#t[t];if(this.#e(e))e.__abortController.abort(new Error("deleted"));else{let i=this.#i[t];this.#b&&this.#_?.(e,i,"delete"),this.#a&&this.#r?.push([e,i,"delete"])}}if(this.#n.clear(),this.#t.fill(void 0),this.#i.fill(void 0),this.#S&&this.#F&&(this.#S.fill(0),this.#F.fill(0)),this.#m&&this.#m.fill(0),this.#o=0,this.#h=0,this.#w.length=0,this.#p=0,this.#s=0,this.#a&&this.#r){let t=this.#r,e;for(;e=t?.shift();)this.#g?.(...e)}}};export{W as LRUCache};
+//# sourceMappingURL=index.min.js.map
diff --git a/deps/npm/node_modules/path-scurry/node_modules/lru-cache/dist/mjs/package.json b/deps/npm/node_modules/path-scurry/node_modules/lru-cache/dist/mjs/package.json
new file mode 100644
index 0000000000..3dbc1ca591
--- /dev/null
+++ b/deps/npm/node_modules/path-scurry/node_modules/lru-cache/dist/mjs/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "module"
+}
diff --git a/deps/npm/node_modules/path-scurry/node_modules/lru-cache/package.json b/deps/npm/node_modules/path-scurry/node_modules/lru-cache/package.json
new file mode 100644
index 0000000000..69a20582ff
--- /dev/null
+++ b/deps/npm/node_modules/path-scurry/node_modules/lru-cache/package.json
@@ -0,0 +1,109 @@
+{
+ "name": "lru-cache",
+ "description": "A cache object that deletes the least-recently-used items.",
+ "version": "9.1.1",
+ "author": "Isaac Z. Schlueter <i@izs.me>",
+ "keywords": [
+ "mru",
+ "lru",
+ "cache"
+ ],
+ "sideEffects": false,
+ "scripts": {
+ "build": "npm run prepare",
+ "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",
+ "preversion": "npm test",
+ "postversion": "npm publish",
+ "prepublishOnly": "git push origin --follow-tags",
+ "format": "prettier --write .",
+ "typedoc": "typedoc --tsconfig tsconfig-esm.json ./src/*.ts",
+ "benchmark-results-typedoc": "bash scripts/benchmark-results-typedoc.sh",
+ "prebenchmark": "npm run prepare",
+ "benchmark": "make -C benchmark",
+ "preprofile": "npm run prepare",
+ "profile": "make -C benchmark profile"
+ },
+ "main": "./dist/cjs/index.js",
+ "module": "./dist/mjs/index.js",
+ "exports": {
+ "./min": {
+ "import": {
+ "types": "./dist/mjs/index.d.ts",
+ "default": "./dist/mjs/index.min.js"
+ },
+ "require": {
+ "types": "./dist/cjs/index.d.ts",
+ "default": "./dist/cjs/index.min.js"
+ }
+ },
+ ".": {
+ "import": {
+ "types": "./dist/mjs/index.d.ts",
+ "default": "./dist/mjs/index.js"
+ },
+ "require": {
+ "types": "./dist/cjs/index.d.ts",
+ "default": "./dist/cjs/index.js"
+ }
+ }
+ },
+ "repository": "git://github.com/isaacs/node-lru-cache.git",
+ "devDependencies": {
+ "@size-limit/preset-small-lib": "^7.0.8",
+ "@types/node": "^17.0.31",
+ "@types/tap": "^15.0.6",
+ "benchmark": "^2.1.4",
+ "c8": "^7.11.2",
+ "clock-mock": "^1.0.6",
+ "esbuild": "^0.17.11",
+ "eslint-config-prettier": "^8.5.0",
+ "marked": "^4.2.12",
+ "mkdirp": "^2.1.5",
+ "prettier": "^2.6.2",
+ "size-limit": "^7.0.8",
+ "tap": "^16.3.4",
+ "ts-node": "^10.7.0",
+ "tslib": "^2.4.0",
+ "typedoc": "^0.23.24",
+ "typescript": "^4.6.4"
+ },
+ "license": "ISC",
+ "files": [
+ "dist"
+ ],
+ "engines": {
+ "node": "14 || >=16.14"
+ },
+ "prettier": {
+ "semi": false,
+ "printWidth": 70,
+ "tabWidth": 2,
+ "useTabs": false,
+ "singleQuote": true,
+ "jsxSingleQuote": false,
+ "bracketSameLine": true,
+ "arrowParens": "avoid",
+ "endOfLine": "lf"
+ },
+ "tap": {
+ "coverage": false,
+ "node-arg": [
+ "--expose-gc",
+ "--no-warnings",
+ "--loader",
+ "ts-node/esm"
+ ],
+ "ts": false
+ },
+ "size-limit": [
+ {
+ "path": "./dist/mjs/index.js"
+ }
+ ]
+}
diff --git a/deps/npm/node_modules/path-scurry/package.json b/deps/npm/node_modules/path-scurry/package.json
index aea462a316..bb282b966c 100644
--- a/deps/npm/node_modules/path-scurry/package.json
+++ b/deps/npm/node_modules/path-scurry/package.json
@@ -1,6 +1,6 @@
{
"name": "path-scurry",
- "version": "1.6.3",
+ "version": "1.7.0",
"description": "walk paths fast and efficiently",
"author": "Isaac Z. Schlueter <i@izs.me> (https://blog.izs.me)",
"main": "./dist/cjs/index.js",
@@ -62,13 +62,13 @@
"@types/tap": "^15.0.7",
"c8": "^7.12.0",
"eslint-config-prettier": "^8.6.0",
- "mkdirp": "^2.1.3",
+ "mkdirp": "^3.0.0",
"prettier": "^2.8.3",
"rimraf": "^4.1.2",
"tap": "^16.3.4",
"ts-node": "^10.9.1",
"typedoc": "^0.23.24",
- "typescript": "^4.9.4"
+ "typescript": "^5.0.4"
},
"engines": {
"node": ">=16 || 14 >=14.17"
@@ -81,7 +81,7 @@
"url": "git+https://github.com/isaacs/path-walker"
},
"dependencies": {
- "lru-cache": "^7.14.1",
- "minipass": "^4.0.2"
+ "lru-cache": "^9.0.0",
+ "minipass": "^5.0.0"
}
}
diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/index.js b/deps/npm/node_modules/postcss-selector-parser/dist/index.js
index 6e76a32bdd..995741a7ff 100644
--- a/deps/npm/node_modules/postcss-selector-parser/dist/index.js
+++ b/deps/npm/node_modules/postcss-selector-parser/dist/index.js
@@ -2,21 +2,14 @@
exports.__esModule = true;
exports["default"] = void 0;
-
var _processor = _interopRequireDefault(require("./processor"));
-
var selectors = _interopRequireWildcard(require("./selectors"));
-
-function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
-
-function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
-
+function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
+function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
var parser = function parser(processor) {
return new _processor["default"](processor);
};
-
Object.assign(parser, selectors);
delete parser.__esModule;
var _default = parser;
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 b97a0fab36..2a1e72c6c6 100644
--- a/deps/npm/node_modules/postcss-selector-parser/dist/parser.js
+++ b/deps/npm/node_modules/postcss-selector-parser/dist/parser.js
@@ -2,70 +2,43 @@
exports.__esModule = true;
exports["default"] = void 0;
-
var _root = _interopRequireDefault(require("./selectors/root"));
-
var _selector = _interopRequireDefault(require("./selectors/selector"));
-
var _className = _interopRequireDefault(require("./selectors/className"));
-
var _comment = _interopRequireDefault(require("./selectors/comment"));
-
var _id = _interopRequireDefault(require("./selectors/id"));
-
var _tag = _interopRequireDefault(require("./selectors/tag"));
-
var _string = _interopRequireDefault(require("./selectors/string"));
-
var _pseudo = _interopRequireDefault(require("./selectors/pseudo"));
-
var _attribute = _interopRequireWildcard(require("./selectors/attribute"));
-
var _universal = _interopRequireDefault(require("./selectors/universal"));
-
var _combinator = _interopRequireDefault(require("./selectors/combinator"));
-
var _nesting = _interopRequireDefault(require("./selectors/nesting"));
-
var _sortAscending = _interopRequireDefault(require("./sortAscending"));
-
var _tokenize = _interopRequireWildcard(require("./tokenize"));
-
var tokens = _interopRequireWildcard(require("./tokenTypes"));
-
var types = _interopRequireWildcard(require("./selectors/types"));
-
var _util = require("./util");
-
var _WHITESPACE_TOKENS, _Object$assign;
-
-function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
-
-function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
-
+function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
+function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
-
-function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
-
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
var WHITESPACE_TOKENS = (_WHITESPACE_TOKENS = {}, _WHITESPACE_TOKENS[tokens.space] = true, _WHITESPACE_TOKENS[tokens.cr] = true, _WHITESPACE_TOKENS[tokens.feed] = true, _WHITESPACE_TOKENS[tokens.newline] = true, _WHITESPACE_TOKENS[tokens.tab] = true, _WHITESPACE_TOKENS);
var WHITESPACE_EQUIV_TOKENS = Object.assign({}, WHITESPACE_TOKENS, (_Object$assign = {}, _Object$assign[tokens.comment] = true, _Object$assign));
-
function tokenStart(token) {
return {
line: token[_tokenize.FIELDS.START_LINE],
column: token[_tokenize.FIELDS.START_COL]
};
}
-
function tokenEnd(token) {
return {
line: token[_tokenize.FIELDS.END_LINE],
column: token[_tokenize.FIELDS.END_COL]
};
}
-
function getSource(startLine, startColumn, endLine, endColumn) {
return {
start: {
@@ -78,62 +51,48 @@ function getSource(startLine, startColumn, endLine, endColumn) {
}
};
}
-
function getTokenSource(token) {
return getSource(token[_tokenize.FIELDS.START_LINE], token[_tokenize.FIELDS.START_COL], token[_tokenize.FIELDS.END_LINE], token[_tokenize.FIELDS.END_COL]);
}
-
function getTokenSourceSpan(startToken, endToken) {
if (!startToken) {
return undefined;
}
-
return getSource(startToken[_tokenize.FIELDS.START_LINE], startToken[_tokenize.FIELDS.START_COL], endToken[_tokenize.FIELDS.END_LINE], endToken[_tokenize.FIELDS.END_COL]);
}
-
function unescapeProp(node, prop) {
var value = node[prop];
-
if (typeof value !== "string") {
return;
}
-
if (value.indexOf("\\") !== -1) {
(0, _util.ensureObject)(node, 'raws');
node[prop] = (0, _util.unesc)(value);
-
if (node.raws[prop] === undefined) {
node.raws[prop] = value;
}
}
-
return node;
}
-
function indexesOf(array, item) {
var i = -1;
var indexes = [];
-
while ((i = array.indexOf(item, i + 1)) !== -1) {
indexes.push(i);
}
-
return indexes;
}
-
function uniqs() {
var list = Array.prototype.concat.apply([], arguments);
return list.filter(function (item, i) {
return i === list.indexOf(item);
});
}
-
var Parser = /*#__PURE__*/function () {
function Parser(rule, options) {
if (options === void 0) {
options = {};
}
-
this.rule = rule;
this.options = Object.assign({
lossy: false,
@@ -163,56 +122,44 @@ var Parser = /*#__PURE__*/function () {
this.current = selector;
this.loop();
}
-
var _proto = Parser.prototype;
-
_proto._errorGenerator = function _errorGenerator() {
var _this = this;
-
return function (message, errorOptions) {
if (typeof _this.rule === 'string') {
return new Error(message);
}
-
return _this.rule.error(message, errorOptions);
};
};
-
_proto.attribute = function attribute() {
var attr = [];
var startingToken = this.currToken;
this.position++;
-
while (this.position < this.tokens.length && this.currToken[_tokenize.FIELDS.TYPE] !== tokens.closeSquare) {
attr.push(this.currToken);
this.position++;
}
-
if (this.currToken[_tokenize.FIELDS.TYPE] !== tokens.closeSquare) {
return this.expected('closing square bracket', this.currToken[_tokenize.FIELDS.START_POS]);
}
-
var len = attr.length;
var node = {
source: getSource(startingToken[1], startingToken[2], this.currToken[3], this.currToken[4]),
sourceIndex: startingToken[_tokenize.FIELDS.START_POS]
};
-
if (len === 1 && !~[tokens.word].indexOf(attr[0][_tokenize.FIELDS.TYPE])) {
return this.expected('attribute', attr[0][_tokenize.FIELDS.START_POS]);
}
-
var pos = 0;
var spaceBefore = '';
var commentBefore = '';
var lastAdded = null;
var spaceAfterMeaningfulToken = false;
-
while (pos < len) {
var token = attr[pos];
var content = this.content(token);
var next = attr[pos + 1];
-
switch (token[_tokenize.FIELDS.TYPE]) {
case tokens.space:
// if (
@@ -222,17 +169,14 @@ var Parser = /*#__PURE__*/function () {
// return this.expected('attribute', token[TOKEN.START_POS], content);
// }
spaceAfterMeaningfulToken = true;
-
if (this.options.lossy) {
break;
}
-
if (lastAdded) {
(0, _util.ensureObject)(node, 'spaces', lastAdded);
var prevContent = node.spaces[lastAdded].after || '';
node.spaces[lastAdded].after = prevContent + content;
var existingComment = (0, _util.getProp)(node, 'raws', 'spaces', lastAdded, 'after') || null;
-
if (existingComment) {
node.raws.spaces[lastAdded].after = existingComment + content;
}
@@ -240,9 +184,7 @@ var Parser = /*#__PURE__*/function () {
spaceBefore = spaceBefore + content;
commentBefore = commentBefore + content;
}
-
break;
-
case tokens.asterisk:
if (next[_tokenize.FIELDS.TYPE] === tokens.equals) {
node.operator = content;
@@ -253,72 +195,57 @@ var Parser = /*#__PURE__*/function () {
node.spaces.attribute.before = spaceBefore;
spaceBefore = '';
}
-
if (commentBefore) {
(0, _util.ensureObject)(node, 'raws', 'spaces', 'attribute');
node.raws.spaces.attribute.before = spaceBefore;
commentBefore = '';
}
-
node.namespace = (node.namespace || "") + content;
var rawValue = (0, _util.getProp)(node, 'raws', 'namespace') || null;
-
if (rawValue) {
node.raws.namespace += content;
}
-
lastAdded = 'namespace';
}
-
spaceAfterMeaningfulToken = false;
break;
-
case tokens.dollar:
if (lastAdded === "value") {
var oldRawValue = (0, _util.getProp)(node, 'raws', 'value');
node.value += "$";
-
if (oldRawValue) {
node.raws.value = oldRawValue + "$";
}
-
break;
}
-
// Falls through
-
case tokens.caret:
if (next[_tokenize.FIELDS.TYPE] === tokens.equals) {
node.operator = content;
lastAdded = 'operator';
}
-
spaceAfterMeaningfulToken = false;
break;
-
case tokens.combinator:
if (content === '~' && next[_tokenize.FIELDS.TYPE] === tokens.equals) {
node.operator = content;
lastAdded = 'operator';
}
-
if (content !== '|') {
spaceAfterMeaningfulToken = false;
break;
}
-
if (next[_tokenize.FIELDS.TYPE] === tokens.equals) {
node.operator = content;
lastAdded = 'operator';
} else if (!node.namespace && !node.attribute) {
node.namespace = true;
}
-
spaceAfterMeaningfulToken = false;
break;
-
case tokens.word:
- if (next && this.content(next) === '|' && attr[pos + 2] && attr[pos + 2][_tokenize.FIELDS.TYPE] !== tokens.equals && // this look-ahead probably fails with comment nodes involved.
+ if (next && this.content(next) === '|' && attr[pos + 2] && attr[pos + 2][_tokenize.FIELDS.TYPE] !== tokens.equals &&
+ // this look-ahead probably fails with comment nodes involved.
!node.operator && !node.namespace) {
node.namespace = content;
lastAdded = 'namespace';
@@ -328,56 +255,42 @@ var Parser = /*#__PURE__*/function () {
node.spaces.attribute.before = spaceBefore;
spaceBefore = '';
}
-
if (commentBefore) {
(0, _util.ensureObject)(node, 'raws', 'spaces', 'attribute');
node.raws.spaces.attribute.before = commentBefore;
commentBefore = '';
}
-
node.attribute = (node.attribute || "") + content;
-
var _rawValue = (0, _util.getProp)(node, 'raws', 'attribute') || null;
-
if (_rawValue) {
node.raws.attribute += content;
}
-
lastAdded = 'attribute';
} else if (!node.value && node.value !== "" || lastAdded === "value" && !(spaceAfterMeaningfulToken || node.quoteMark)) {
var _unescaped = (0, _util.unesc)(content);
-
var _oldRawValue = (0, _util.getProp)(node, 'raws', 'value') || '';
-
var oldValue = node.value || '';
node.value = oldValue + _unescaped;
node.quoteMark = null;
-
if (_unescaped !== content || _oldRawValue) {
(0, _util.ensureObject)(node, 'raws');
node.raws.value = (_oldRawValue || oldValue) + content;
}
-
lastAdded = 'value';
} else {
var insensitive = content === 'i' || content === "I";
-
if ((node.value || node.value === '') && (node.quoteMark || spaceAfterMeaningfulToken)) {
node.insensitive = insensitive;
-
if (!insensitive || content === "I") {
(0, _util.ensureObject)(node, 'raws');
node.raws.insensitiveFlag = content;
}
-
lastAdded = 'insensitive';
-
if (spaceBefore) {
(0, _util.ensureObject)(node, 'spaces', 'insensitive');
node.spaces.insensitive.before = spaceBefore;
spaceBefore = '';
}
-
if (commentBefore) {
(0, _util.ensureObject)(node, 'raws', 'spaces', 'insensitive');
node.raws.spaces.insensitive.before = commentBefore;
@@ -386,27 +299,22 @@ var Parser = /*#__PURE__*/function () {
} else if (node.value || node.value === '') {
lastAdded = 'value';
node.value += content;
-
if (node.raws.value) {
node.raws.value += content;
}
}
}
-
spaceAfterMeaningfulToken = false;
break;
-
case tokens.str:
if (!node.attribute || !node.operator) {
return this.error("Expected an attribute followed by an operator preceding the string.", {
index: token[_tokenize.FIELDS.START_POS]
});
}
-
var _unescapeValue = (0, _attribute.unescapeValue)(content),
- unescaped = _unescapeValue.unescaped,
- quoteMark = _unescapeValue.quoteMark;
-
+ unescaped = _unescapeValue.unescaped,
+ quoteMark = _unescapeValue.quoteMark;
node.value = unescaped;
node.quoteMark = quoteMark;
lastAdded = 'value';
@@ -414,23 +322,19 @@ var Parser = /*#__PURE__*/function () {
node.raws.value = content;
spaceAfterMeaningfulToken = false;
break;
-
case tokens.equals:
if (!node.attribute) {
return this.expected('attribute', token[_tokenize.FIELDS.START_POS], content);
}
-
if (node.value) {
return this.error('Unexpected "=" found; an operator was already defined.', {
index: token[_tokenize.FIELDS.START_POS]
});
}
-
node.operator = node.operator ? node.operator + content : content;
lastAdded = 'operator';
spaceAfterMeaningfulToken = false;
break;
-
case tokens.comment:
if (lastAdded) {
if (spaceAfterMeaningfulToken || next && next[_tokenize.FIELDS.TYPE] === tokens.space || lastAdded === 'insensitive') {
@@ -447,23 +351,20 @@ var Parser = /*#__PURE__*/function () {
} else {
commentBefore = commentBefore + content;
}
-
break;
-
default:
return this.error("Unexpected \"" + content + "\" found.", {
index: token[_tokenize.FIELDS.START_POS]
});
}
-
pos++;
}
-
unescapeProp(node, "attribute");
unescapeProp(node, "namespace");
this.newNode(new _attribute["default"](node));
this.position++;
}
+
/**
* return a node containing meaningless garbage up to (but not including) the specified token position.
* if the token position is negative, all remaining tokens are consumed.
@@ -475,19 +376,15 @@ var Parser = /*#__PURE__*/function () {
* a previous node's space metadata.
*
* In lossy mode, this returns only comments.
- */
- ;
-
+ */;
_proto.parseWhitespaceEquivalentTokens = function parseWhitespaceEquivalentTokens(stopPosition) {
if (stopPosition < 0) {
stopPosition = this.tokens.length;
}
-
var startPosition = this.position;
var nodes = [];
var space = "";
var lastComment = undefined;
-
do {
if (WHITESPACE_TOKENS[this.currToken[_tokenize.FIELDS.TYPE]]) {
if (!this.options.lossy) {
@@ -495,12 +392,10 @@ var Parser = /*#__PURE__*/function () {
}
} else if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.comment) {
var spaces = {};
-
if (space) {
spaces.before = space;
space = "";
}
-
lastComment = new _comment["default"]({
value: this.content(),
source: getTokenSource(this.currToken),
@@ -510,7 +405,6 @@ var Parser = /*#__PURE__*/function () {
nodes.push(lastComment);
}
} while (++this.position < stopPosition);
-
if (space) {
if (lastComment) {
lastComment.spaces.after = space;
@@ -528,62 +422,49 @@ var Parser = /*#__PURE__*/function () {
}));
}
}
-
return nodes;
}
+
/**
*
* @param {*} nodes
- */
- ;
-
+ */;
_proto.convertWhitespaceNodesToSpace = function convertWhitespaceNodesToSpace(nodes, requiredSpace) {
var _this2 = this;
-
if (requiredSpace === void 0) {
requiredSpace = false;
}
-
var space = "";
var rawSpace = "";
nodes.forEach(function (n) {
var spaceBefore = _this2.lossySpace(n.spaces.before, requiredSpace);
-
var rawSpaceBefore = _this2.lossySpace(n.rawSpaceBefore, requiredSpace);
-
space += spaceBefore + _this2.lossySpace(n.spaces.after, requiredSpace && spaceBefore.length === 0);
rawSpace += spaceBefore + n.value + _this2.lossySpace(n.rawSpaceAfter, requiredSpace && rawSpaceBefore.length === 0);
});
-
if (rawSpace === space) {
rawSpace = undefined;
}
-
var result = {
space: space,
rawSpace: rawSpace
};
return result;
};
-
_proto.isNamedCombinator = function isNamedCombinator(position) {
if (position === void 0) {
position = this.position;
}
-
return this.tokens[position + 0] && this.tokens[position + 0][_tokenize.FIELDS.TYPE] === tokens.slash && this.tokens[position + 1] && this.tokens[position + 1][_tokenize.FIELDS.TYPE] === tokens.word && this.tokens[position + 2] && this.tokens[position + 2][_tokenize.FIELDS.TYPE] === tokens.slash;
};
-
_proto.namedCombinator = function namedCombinator() {
if (this.isNamedCombinator()) {
var nameRaw = this.content(this.tokens[this.position + 1]);
var name = (0, _util.unesc)(nameRaw).toLowerCase();
var raws = {};
-
if (name !== nameRaw) {
raws.value = "/" + nameRaw + "/";
}
-
var node = new _combinator["default"]({
value: "/" + name + "/",
source: getSource(this.currToken[_tokenize.FIELDS.START_LINE], this.currToken[_tokenize.FIELDS.START_COL], this.tokens[this.position + 2][_tokenize.FIELDS.END_LINE], this.tokens[this.position + 2][_tokenize.FIELDS.END_COL]),
@@ -596,32 +477,24 @@ var Parser = /*#__PURE__*/function () {
this.unexpected();
}
};
-
_proto.combinator = function combinator() {
var _this3 = this;
-
if (this.content() === '|') {
return this.namespace();
- } // We need to decide between a space that's a descendant combinator and meaningless whitespace at the end of a selector.
-
-
+ }
+ // 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) {
var nodes = this.parseWhitespaceEquivalentTokens(nextSigTokenPos);
-
if (nodes.length > 0) {
var last = this.current.last;
-
if (last) {
var _this$convertWhitespa = this.convertWhitespaceNodesToSpace(nodes),
- space = _this$convertWhitespa.space,
- rawSpace = _this$convertWhitespa.rawSpace;
-
+ space = _this$convertWhitespa.space,
+ rawSpace = _this$convertWhitespa.rawSpace;
if (rawSpace !== undefined) {
last.rawSpaceAfter += rawSpace;
}
-
last.spaces.after += space;
} else {
nodes.forEach(function (n) {
@@ -629,19 +502,14 @@ var Parser = /*#__PURE__*/function () {
});
}
}
-
return;
}
-
var firstToken = this.currToken;
var spaceOrDescendantSelectorNodes = undefined;
-
if (nextSigTokenPos > this.position) {
spaceOrDescendantSelectorNodes = this.parseWhitespaceEquivalentTokens(nextSigTokenPos);
}
-
var node;
-
if (this.isNamedCombinator()) {
node = this.namedCombinator();
} else if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.combinator) {
@@ -651,35 +519,31 @@ var Parser = /*#__PURE__*/function () {
sourceIndex: this.currToken[_tokenize.FIELDS.START_POS]
});
this.position++;
- } else if (WHITESPACE_TOKENS[this.currToken[_tokenize.FIELDS.TYPE]]) {// pass
+ } else if (WHITESPACE_TOKENS[this.currToken[_tokenize.FIELDS.TYPE]]) {
+ // pass
} else if (!spaceOrDescendantSelectorNodes) {
this.unexpected();
}
-
if (node) {
if (spaceOrDescendantSelectorNodes) {
var _this$convertWhitespa2 = this.convertWhitespaceNodesToSpace(spaceOrDescendantSelectorNodes),
- _space = _this$convertWhitespa2.space,
- _rawSpace = _this$convertWhitespa2.rawSpace;
-
+ _space = _this$convertWhitespa2.space,
+ _rawSpace = _this$convertWhitespa2.rawSpace;
node.spaces.before = _space;
node.rawSpaceBefore = _rawSpace;
}
} else {
// descendant combinator
var _this$convertWhitespa3 = this.convertWhitespaceNodesToSpace(spaceOrDescendantSelectorNodes, true),
- _space2 = _this$convertWhitespa3.space,
- _rawSpace2 = _this$convertWhitespa3.rawSpace;
-
+ _space2 = _this$convertWhitespa3.space,
+ _rawSpace2 = _this$convertWhitespa3.rawSpace;
if (!_rawSpace2) {
_rawSpace2 = _space2;
}
-
var spaces = {};
var raws = {
spaces: {}
};
-
if (_space2.endsWith(' ') && _rawSpace2.endsWith(' ')) {
spaces.before = _space2.slice(0, _space2.length - 1);
raws.spaces.before = _rawSpace2.slice(0, _rawSpace2.length - 1);
@@ -689,7 +553,6 @@ var Parser = /*#__PURE__*/function () {
} else {
raws.value = _rawSpace2;
}
-
node = new _combinator["default"]({
value: ' ',
source: getTokenSourceSpan(firstToken, this.tokens[this.position - 1]),
@@ -698,24 +561,19 @@ var Parser = /*#__PURE__*/function () {
raws: raws
});
}
-
if (this.currToken && this.currToken[_tokenize.FIELDS.TYPE] === tokens.space) {
node.spaces.after = this.optionalSpace(this.content());
this.position++;
}
-
return this.newNode(node);
};
-
_proto.comma = function comma() {
if (this.position === this.tokens.length - 1) {
this.root.trailingComma = true;
this.position++;
return;
}
-
this.current._inferEndPosition();
-
var selector = new _selector["default"]({
source: {
start: tokenStart(this.tokens[this.position + 1])
@@ -725,7 +583,6 @@ var Parser = /*#__PURE__*/function () {
this.current = selector;
this.position++;
};
-
_proto.comment = function comment() {
var current = this.currToken;
this.newNode(new _comment["default"]({
@@ -735,32 +592,25 @@ var Parser = /*#__PURE__*/function () {
}));
this.position++;
};
-
_proto.error = function error(message, opts) {
throw this.root.error(message, opts);
};
-
_proto.missingBackslash = function missingBackslash() {
return this.error('Expected a backslash preceding the semicolon.', {
index: this.currToken[_tokenize.FIELDS.START_POS]
});
};
-
_proto.missingParenthesis = function missingParenthesis() {
return this.expected('opening parenthesis', this.currToken[_tokenize.FIELDS.START_POS]);
};
-
_proto.missingSquareBracket = function missingSquareBracket() {
return this.expected('opening square bracket', this.currToken[_tokenize.FIELDS.START_POS]);
};
-
_proto.unexpected = function unexpected() {
return this.error("Unexpected '" + this.content() + "'. Escaping special characters with \\ may help.", this.currToken[_tokenize.FIELDS.START_POS]);
};
-
_proto.namespace = function namespace() {
var before = this.prevToken && this.content(this.prevToken) || true;
-
if (this.nextToken[_tokenize.FIELDS.TYPE] === tokens.word) {
this.position++;
return this.word(before);
@@ -769,17 +619,14 @@ var Parser = /*#__PURE__*/function () {
return this.universal(before);
}
};
-
_proto.nesting = function nesting() {
if (this.nextToken) {
var nextContent = this.content(this.nextToken);
-
if (nextContent === "|") {
this.position++;
return;
}
}
-
var current = this.currToken;
this.newNode(new _nesting["default"]({
value: this.content(),
@@ -788,12 +635,10 @@ var Parser = /*#__PURE__*/function () {
}));
this.position++;
};
-
_proto.parentheses = function parentheses() {
var last = this.current.last;
var unbalanced = 1;
this.position++;
-
if (last && last.type === types.PSEUDO) {
var selector = new _selector["default"]({
source: {
@@ -803,16 +648,13 @@ var Parser = /*#__PURE__*/function () {
var cache = this.current;
last.append(selector);
this.current = selector;
-
while (this.position < this.tokens.length && unbalanced) {
if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) {
unbalanced++;
}
-
if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) {
unbalanced--;
}
-
if (unbalanced) {
this.parse();
} else {
@@ -821,7 +663,6 @@ var Parser = /*#__PURE__*/function () {
this.position++;
}
}
-
this.current = cache;
} else {
// I think this case should be an error. It's used to implement a basic parse of media queries
@@ -829,21 +670,17 @@ var Parser = /*#__PURE__*/function () {
var parenStart = this.currToken;
var parenValue = "(";
var parenEnd;
-
while (this.position < this.tokens.length && unbalanced) {
if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) {
unbalanced++;
}
-
if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) {
unbalanced--;
}
-
parenEnd = this.currToken;
parenValue += this.parseParenthesisToken(this.currToken);
this.position++;
}
-
if (last) {
last.appendToPropertyAndEscape("value", parenValue, parenValue);
} else {
@@ -854,37 +691,29 @@ var Parser = /*#__PURE__*/function () {
}));
}
}
-
if (unbalanced) {
return this.expected('closing parenthesis', this.currToken[_tokenize.FIELDS.START_POS]);
}
};
-
_proto.pseudo = function pseudo() {
var _this4 = this;
-
var pseudoStr = '';
var startingToken = this.currToken;
-
while (this.currToken && this.currToken[_tokenize.FIELDS.TYPE] === tokens.colon) {
pseudoStr += this.content();
this.position++;
}
-
if (!this.currToken) {
return this.expected(['pseudo-class', 'pseudo-element'], this.position - 1);
}
-
if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.word) {
this.splitWord(false, function (first, length) {
pseudoStr += first;
-
_this4.newNode(new _pseudo["default"]({
value: pseudoStr,
source: getTokenSourceSpan(startingToken, _this4.currToken),
sourceIndex: startingToken[_tokenize.FIELDS.START_POS]
}));
-
if (length > 1 && _this4.nextToken && _this4.nextToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) {
_this4.error('Misplaced parenthesis.', {
index: _this4.nextToken[_tokenize.FIELDS.START_POS]
@@ -895,10 +724,9 @@ var Parser = /*#__PURE__*/function () {
return this.expected(['pseudo-class', 'pseudo-element'], this.currToken[_tokenize.FIELDS.START_POS]);
}
};
-
_proto.space = function space() {
- var content = this.content(); // Handle space before and after the selector
-
+ var content = this.content();
+ // Handle space before and after the selector
if (this.position === 0 || this.prevToken[_tokenize.FIELDS.TYPE] === tokens.comma || this.prevToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis || this.current.nodes.every(function (node) {
return node.type === 'comment';
})) {
@@ -911,7 +739,6 @@ var Parser = /*#__PURE__*/function () {
this.combinator();
}
};
-
_proto.string = function string() {
var current = this.currToken;
this.newNode(new _string["default"]({
@@ -921,15 +748,12 @@ var Parser = /*#__PURE__*/function () {
}));
this.position++;
};
-
_proto.universal = function universal(namespace) {
var nextToken = this.nextToken;
-
if (nextToken && this.content(nextToken) === '|') {
this.position++;
return this.namespace();
}
-
var current = this.currToken;
this.newNode(new _universal["default"]({
value: this.content(),
@@ -938,63 +762,51 @@ var Parser = /*#__PURE__*/function () {
}), namespace);
this.position++;
};
-
_proto.splitWord = function splitWord(namespace, firstCallback) {
var _this5 = this;
-
var nextToken = this.nextToken;
var word = this.content();
-
while (nextToken && ~[tokens.dollar, tokens.caret, tokens.equals, tokens.word].indexOf(nextToken[_tokenize.FIELDS.TYPE])) {
this.position++;
var current = this.content();
word += current;
-
if (current.lastIndexOf('\\') === current.length - 1) {
var next = this.nextToken;
-
if (next && next[_tokenize.FIELDS.TYPE] === tokens.space) {
word += this.requiredSpace(this.content(next));
this.position++;
}
}
-
nextToken = this.nextToken;
}
-
var hasClass = indexesOf(word, '.').filter(function (i) {
// Allow escaped dot within class name
- var escapedDot = word[i - 1] === '\\'; // Allow decimal numbers percent in @keyframes
-
+ var escapedDot = word[i - 1] === '\\';
+ // Allow decimal numbers percent in @keyframes
var isKeyframesPercent = /^\d+\.\d+%$/.test(word);
return !escapedDot && !isKeyframesPercent;
});
var hasId = indexesOf(word, '#').filter(function (i) {
return word[i - 1] !== '\\';
- }); // Eliminate Sass interpolations from the list of id indexes
-
+ });
+ // Eliminate Sass interpolations from the list of id indexes
var interpolations = indexesOf(word, '#{');
-
if (interpolations.length) {
hasId = hasId.filter(function (hashIndex) {
return !~interpolations.indexOf(hashIndex);
});
}
-
var indices = (0, _sortAscending["default"])(uniqs([0].concat(hasClass, hasId)));
indices.forEach(function (ind, i) {
var index = indices[i + 1] || word.length;
var value = word.slice(ind, index);
-
if (i === 0 && firstCallback) {
return firstCallback.call(_this5, value, indices.length);
}
-
var node;
var current = _this5.currToken;
var sourceIndex = current[_tokenize.FIELDS.START_POS] + indices[i];
var source = getSource(current[1], current[2] + ind, current[3], current[2] + (index - 1));
-
if (~hasClass.indexOf(ind)) {
var classNameOpts = {
value: value.slice(1),
@@ -1018,136 +830,105 @@ var Parser = /*#__PURE__*/function () {
unescapeProp(tagOpts, "value");
node = new _tag["default"](tagOpts);
}
-
- _this5.newNode(node, namespace); // Ensure that the namespace is used only once
-
-
+ _this5.newNode(node, namespace);
+ // Ensure that the namespace is used only once
namespace = null;
});
this.position++;
};
-
_proto.word = function word(namespace) {
var nextToken = this.nextToken;
-
if (nextToken && this.content(nextToken) === '|') {
this.position++;
return this.namespace();
}
-
return this.splitWord(namespace);
};
-
_proto.loop = function loop() {
while (this.position < this.tokens.length) {
this.parse(true);
}
-
this.current._inferEndPosition();
-
return this.root;
};
-
_proto.parse = function parse(throwOnParenthesis) {
switch (this.currToken[_tokenize.FIELDS.TYPE]) {
case tokens.space:
this.space();
break;
-
case tokens.comment:
this.comment();
break;
-
case tokens.openParenthesis:
this.parentheses();
break;
-
case tokens.closeParenthesis:
if (throwOnParenthesis) {
this.missingParenthesis();
}
-
break;
-
case tokens.openSquare:
this.attribute();
break;
-
case tokens.dollar:
case tokens.caret:
case tokens.equals:
case tokens.word:
this.word();
break;
-
case tokens.colon:
this.pseudo();
break;
-
case tokens.comma:
this.comma();
break;
-
case tokens.asterisk:
this.universal();
break;
-
case tokens.ampersand:
this.nesting();
break;
-
case tokens.slash:
case tokens.combinator:
this.combinator();
break;
-
case tokens.str:
this.string();
break;
// These cases throw; no break needed.
-
case tokens.closeSquare:
this.missingSquareBracket();
-
case tokens.semicolon:
this.missingBackslash();
-
default:
this.unexpected();
}
}
+
/**
* Helpers
- */
- ;
-
+ */;
_proto.expected = function expected(description, index, found) {
if (Array.isArray(description)) {
var last = description.pop();
description = description.join(', ') + " or " + last;
}
-
var an = /^[aeiou]/.test(description[0]) ? 'an' : 'a';
-
if (!found) {
return this.error("Expected " + an + " " + description + ".", {
index: index
});
}
-
return this.error("Expected " + an + " " + description + ", found \"" + found + "\" instead.", {
index: index
});
};
-
_proto.requiredSpace = function requiredSpace(space) {
return this.options.lossy ? ' ' : space;
};
-
_proto.optionalSpace = function optionalSpace(space) {
return this.options.lossy ? '' : space;
};
-
_proto.lossySpace = function lossySpace(space, required) {
if (this.options.lossy) {
return required ? ' ' : '';
@@ -1155,47 +936,37 @@ var Parser = /*#__PURE__*/function () {
return space;
}
};
-
_proto.parseParenthesisToken = function parseParenthesisToken(token) {
var content = this.content(token);
-
if (token[_tokenize.FIELDS.TYPE] === tokens.space) {
return this.requiredSpace(content);
} else {
return content;
}
};
-
_proto.newNode = function newNode(node, namespace) {
if (namespace) {
if (/^ +$/.test(namespace)) {
if (!this.options.lossy) {
this.spaces = (this.spaces || '') + namespace;
}
-
namespace = true;
}
-
node.namespace = namespace;
unescapeProp(node, "namespace");
}
-
if (this.spaces) {
node.spaces.before = this.spaces;
this.spaces = '';
}
-
return this.current.append(node);
};
-
_proto.content = function content(token) {
if (token === void 0) {
token = this.currToken;
}
-
return this.css.slice(token[_tokenize.FIELDS.START_POS], token[_tokenize.FIELDS.END_POS]);
};
-
/**
* returns the index of the next non-whitespace, non-comment token.
* returns -1 if no meaningful token is found.
@@ -1204,9 +975,7 @@ var Parser = /*#__PURE__*/function () {
if (startPosition === void 0) {
startPosition = this.position + 1;
}
-
var searchPosition = startPosition;
-
while (searchPosition < this.tokens.length) {
if (WHITESPACE_EQUIV_TOKENS[this.tokens[searchPosition][_tokenize.FIELDS.TYPE]]) {
searchPosition++;
@@ -1215,10 +984,8 @@ var Parser = /*#__PURE__*/function () {
return searchPosition;
}
}
-
return -1;
};
-
_createClass(Parser, [{
key: "currToken",
get: function get() {
@@ -1235,9 +1002,7 @@ var Parser = /*#__PURE__*/function () {
return this.tokens[this.position - 1];
}
}]);
-
return Parser;
}();
-
exports["default"] = Parser;
module.exports = exports.default; \ No newline at end of file
diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/processor.js b/deps/npm/node_modules/postcss-selector-parser/dist/processor.js
index a00170c281..dbfa09188e 100644
--- a/deps/npm/node_modules/postcss-selector-parser/dist/processor.js
+++ b/deps/npm/node_modules/postcss-selector-parser/dist/processor.js
@@ -2,83 +2,63 @@
exports.__esModule = true;
exports["default"] = void 0;
-
var _parser = _interopRequireDefault(require("./parser"));
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
var Processor = /*#__PURE__*/function () {
function Processor(func, options) {
this.func = func || function noop() {};
-
this.funcRes = null;
this.options = options;
}
-
var _proto = Processor.prototype;
-
_proto._shouldUpdateSelector = function _shouldUpdateSelector(rule, options) {
if (options === void 0) {
options = {};
}
-
var merged = Object.assign({}, this.options, options);
-
if (merged.updateSelector === false) {
return false;
} else {
return typeof rule !== "string";
}
};
-
_proto._isLossy = function _isLossy(options) {
if (options === void 0) {
options = {};
}
-
var merged = Object.assign({}, this.options, options);
-
if (merged.lossless === false) {
return true;
} else {
return false;
}
};
-
_proto._root = function _root(rule, options) {
if (options === void 0) {
options = {};
}
-
var parser = new _parser["default"](rule, this._parseOptions(options));
return parser.root;
};
-
_proto._parseOptions = function _parseOptions(options) {
return {
lossy: this._isLossy(options)
};
};
-
_proto._run = function _run(rule, options) {
var _this = this;
-
if (options === void 0) {
options = {};
}
-
return new Promise(function (resolve, reject) {
try {
var root = _this._root(rule, options);
-
Promise.resolve(_this.func(root)).then(function (transform) {
var string = undefined;
-
if (_this._shouldUpdateSelector(rule, options)) {
string = root.toString();
rule.selector = string;
}
-
return {
transform: transform,
root: root,
@@ -91,116 +71,100 @@ var Processor = /*#__PURE__*/function () {
}
});
};
-
_proto._runSync = function _runSync(rule, options) {
if (options === void 0) {
options = {};
}
-
var root = this._root(rule, options);
-
var transform = this.func(root);
-
if (transform && typeof transform.then === "function") {
throw new Error("Selector processor returned a promise to a synchronous call.");
}
-
var string = undefined;
-
if (options.updateSelector && typeof rule !== "string") {
string = root.toString();
rule.selector = string;
}
-
return {
transform: transform,
root: root,
string: string
};
}
+
/**
* Process rule into a selector AST.
*
* @param rule {postcss.Rule | string} The css selector to be processed
* @param options The options for processing
* @returns {Promise<parser.Root>} The AST of the selector after processing it.
- */
- ;
-
+ */;
_proto.ast = function ast(rule, options) {
return this._run(rule, options).then(function (result) {
return result.root;
});
}
+
/**
* Process rule into a selector AST synchronously.
*
* @param rule {postcss.Rule | string} The css selector to be processed
* @param options The options for processing
* @returns {parser.Root} The AST of the selector after processing it.
- */
- ;
-
+ */;
_proto.astSync = function astSync(rule, options) {
return this._runSync(rule, options).root;
}
+
/**
* Process a selector into a transformed value asynchronously
*
* @param rule {postcss.Rule | string} The css selector to be processed
* @param options The options for processing
* @returns {Promise<any>} The value returned by the processor.
- */
- ;
-
+ */;
_proto.transform = function transform(rule, options) {
return this._run(rule, options).then(function (result) {
return result.transform;
});
}
+
/**
* Process a selector into a transformed value synchronously.
*
* @param rule {postcss.Rule | string} The css selector to be processed
* @param options The options for processing
* @returns {any} The value returned by the processor.
- */
- ;
-
+ */;
_proto.transformSync = function transformSync(rule, options) {
return this._runSync(rule, options).transform;
}
+
/**
* Process a selector into a new selector string asynchronously.
*
* @param rule {postcss.Rule | string} The css selector to be processed
* @param options The options for processing
* @returns {string} the selector after processing.
- */
- ;
-
+ */;
_proto.process = function process(rule, options) {
return this._run(rule, options).then(function (result) {
return result.string || result.root.toString();
});
}
+
/**
* Process a selector into a new selector string synchronously.
*
* @param rule {postcss.Rule | string} The css selector to be processed
* @param options The options for processing
* @returns {string} the selector after processing.
- */
- ;
-
+ */;
_proto.processSync = function processSync(rule, options) {
var result = this._runSync(rule, options);
-
return result.string || result.root.toString();
};
-
return Processor;
}();
-
exports["default"] = Processor;
module.exports = exports.default; \ No newline at end of file
diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/attribute.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/attribute.js
index 9edc30bf13..0351a22bfa 100644
--- a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/attribute.js
+++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/attribute.js
@@ -1,98 +1,70 @@
"use strict";
exports.__esModule = true;
-exports.unescapeValue = unescapeValue;
exports["default"] = void 0;
-
+exports.unescapeValue = unescapeValue;
var _cssesc = _interopRequireDefault(require("cssesc"));
-
var _unesc = _interopRequireDefault(require("../util/unesc"));
-
var _namespace = _interopRequireDefault(require("./namespace"));
-
var _types = require("./types");
-
var _CSSESC_QUOTE_OPTIONS;
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
-
-function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
-
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
var deprecate = require("util-deprecate");
-
var WRAPPED_IN_QUOTES = /^('|")([^]*)\1$/;
var warnOfDeprecatedValueAssignment = deprecate(function () {}, "Assigning an attribute a value containing characters that might need to be escaped is deprecated. " + "Call attribute.setValue() instead.");
var warnOfDeprecatedQuotedAssignment = deprecate(function () {}, "Assigning attr.quoted is deprecated and has no effect. Assign to attr.quoteMark instead.");
var warnOfDeprecatedConstructor = deprecate(function () {}, "Constructing an Attribute selector with a value without specifying quoteMark is deprecated. Note: The value should be unescaped now.");
-
function unescapeValue(value) {
var deprecatedUsage = false;
var quoteMark = null;
var unescaped = value;
var m = unescaped.match(WRAPPED_IN_QUOTES);
-
if (m) {
quoteMark = m[1];
unescaped = m[2];
}
-
unescaped = (0, _unesc["default"])(unescaped);
-
if (unescaped !== value) {
deprecatedUsage = true;
}
-
return {
deprecatedUsage: deprecatedUsage,
unescaped: unescaped,
quoteMark: quoteMark
};
}
-
function handleDeprecatedContructorOpts(opts) {
if (opts.quoteMark !== undefined) {
return opts;
}
-
if (opts.value === undefined) {
return opts;
}
-
warnOfDeprecatedConstructor();
-
var _unescapeValue = unescapeValue(opts.value),
- quoteMark = _unescapeValue.quoteMark,
- unescaped = _unescapeValue.unescaped;
-
+ quoteMark = _unescapeValue.quoteMark,
+ unescaped = _unescapeValue.unescaped;
if (!opts.raws) {
opts.raws = {};
}
-
if (opts.raws.value === undefined) {
opts.raws.value = opts.value;
}
-
opts.value = unescaped;
opts.quoteMark = quoteMark;
return opts;
}
-
var Attribute = /*#__PURE__*/function (_Namespace) {
_inheritsLoose(Attribute, _Namespace);
-
function Attribute(opts) {
var _this;
-
if (opts === void 0) {
opts = {};
}
-
_this = _Namespace.call(this, handleDeprecatedContructorOpts(opts)) || this;
_this.type = _types.ATTRIBUTE;
_this.raws = _this.raws || {};
@@ -107,6 +79,7 @@ var Attribute = /*#__PURE__*/function (_Namespace) {
_this._constructed = true;
return _this;
}
+
/**
* Returns the Attribute's value quoted such that it would be legal to use
* in the value of a css file. The original value's quotation setting
@@ -128,42 +101,34 @@ var Attribute = /*#__PURE__*/function (_Namespace) {
* and the other options specified here. See the `smartQuoteMark()`
* method.
**/
-
-
var _proto = Attribute.prototype;
-
_proto.getQuotedValue = function getQuotedValue(options) {
if (options === void 0) {
options = {};
}
-
var quoteMark = this._determineQuoteMark(options);
-
var cssescopts = CSSESC_QUOTE_OPTIONS[quoteMark];
var escaped = (0, _cssesc["default"])(this._value, cssescopts);
return escaped;
};
-
_proto._determineQuoteMark = function _determineQuoteMark(options) {
return options.smart ? this.smartQuoteMark(options) : this.preferredQuoteMark(options);
}
+
/**
* Set the unescaped value with the specified quotation options. The value
* provided must not include any wrapping quote marks -- those quotes will
* be interpreted as part of the value and escaped accordingly.
- */
- ;
-
+ */;
_proto.setValue = function setValue(value, options) {
if (options === void 0) {
options = {};
}
-
this._value = value;
this._quoteMark = this._determineQuoteMark(options);
-
this._syncRawValue();
}
+
/**
* Intelligently select a quoteMark value based on the value's contents. If
* the value is a legal CSS ident, it will not be quoted. Otherwise a quote
@@ -175,35 +140,28 @@ var Attribute = /*#__PURE__*/function (_Namespace) {
*
* @param options This takes the quoteMark and preferCurrentQuoteMark options
* from the quoteValue method.
- */
- ;
-
+ */;
_proto.smartQuoteMark = function smartQuoteMark(options) {
var v = this.value;
var numSingleQuotes = v.replace(/[^']/g, '').length;
var numDoubleQuotes = v.replace(/[^"]/g, '').length;
-
if (numSingleQuotes + numDoubleQuotes === 0) {
var escaped = (0, _cssesc["default"])(v, {
isIdentifier: true
});
-
if (escaped === v) {
return Attribute.NO_QUOTE;
} else {
var pref = this.preferredQuoteMark(options);
-
if (pref === Attribute.NO_QUOTE) {
// pick a quote mark that isn't none and see if it's smaller
var quote = this.quoteMark || options.quoteMark || Attribute.DOUBLE_QUOTE;
var opts = CSSESC_QUOTE_OPTIONS[quote];
var quoteValue = (0, _cssesc["default"])(v, opts);
-
if (quoteValue.length < escaped.length) {
return quote;
}
}
-
return pref;
}
} else if (numDoubleQuotes === numSingleQuotes) {
@@ -214,30 +172,24 @@ var Attribute = /*#__PURE__*/function (_Namespace) {
return Attribute.SINGLE_QUOTE;
}
}
+
/**
* Selects the preferred quote mark based on the options and the current quote mark value.
* If you want the quote mark to depend on the attribute value, call `smartQuoteMark(opts)`
* instead.
- */
- ;
-
+ */;
_proto.preferredQuoteMark = function preferredQuoteMark(options) {
var quoteMark = options.preferCurrentQuoteMark ? this.quoteMark : options.quoteMark;
-
if (quoteMark === undefined) {
quoteMark = options.preferCurrentQuoteMark ? options.quoteMark : this.quoteMark;
}
-
if (quoteMark === undefined) {
quoteMark = Attribute.DOUBLE_QUOTE;
}
-
return quoteMark;
};
-
_proto._syncRawValue = function _syncRawValue() {
var rawValue = (0, _cssesc["default"])(this._value, CSSESC_QUOTE_OPTIONS[this.quoteMark]);
-
if (rawValue === this._value) {
if (this.raws) {
delete this.raws.value;
@@ -246,13 +198,11 @@ var Attribute = /*#__PURE__*/function (_Namespace) {
this.raws.value = rawValue;
}
};
-
_proto._handleEscapes = function _handleEscapes(prop, value) {
if (this._constructed) {
var escaped = (0, _cssesc["default"])(value, {
isIdentifier: true
});
-
if (escaped !== value) {
this.raws[prop] = escaped;
} else {
@@ -260,7 +210,6 @@ var Attribute = /*#__PURE__*/function (_Namespace) {
}
}
};
-
_proto._spacesFor = function _spacesFor(name) {
var attrSpaces = {
before: '',
@@ -270,20 +219,17 @@ var Attribute = /*#__PURE__*/function (_Namespace) {
var rawSpaces = this.raws.spaces && this.raws.spaces[name] || {};
return Object.assign(attrSpaces, spaces, rawSpaces);
};
-
_proto._stringFor = function _stringFor(name, spaceName, concat) {
if (spaceName === void 0) {
spaceName = name;
}
-
if (concat === void 0) {
concat = defaultAttrConcat;
}
-
var attrSpaces = this._spacesFor(spaceName);
-
return concat(this.stringifyProperty(name), attrSpaces);
}
+
/**
* returns the offset of the attribute part specified relative to the
* start of the node of the output string.
@@ -297,78 +243,53 @@ var Attribute = /*#__PURE__*/function (_Namespace) {
* * "insensitive" - the case insensitivity flag;
* @param part One of the possible values inside an attribute.
* @returns -1 if the name is invalid or the value doesn't exist in this attribute.
- */
- ;
-
+ */;
_proto.offsetOf = function offsetOf(name) {
var count = 1;
-
var attributeSpaces = this._spacesFor("attribute");
-
count += attributeSpaces.before.length;
-
if (name === "namespace" || name === "ns") {
return this.namespace ? count : -1;
}
-
if (name === "attributeNS") {
return count;
}
-
count += this.namespaceString.length;
-
if (this.namespace) {
count += 1;
}
-
if (name === "attribute") {
return count;
}
-
count += this.stringifyProperty("attribute").length;
count += attributeSpaces.after.length;
-
var operatorSpaces = this._spacesFor("operator");
-
count += operatorSpaces.before.length;
var operator = this.stringifyProperty("operator");
-
if (name === "operator") {
return operator ? count : -1;
}
-
count += operator.length;
count += operatorSpaces.after.length;
-
var valueSpaces = this._spacesFor("value");
-
count += valueSpaces.before.length;
var value = this.stringifyProperty("value");
-
if (name === "value") {
return value ? count : -1;
}
-
count += value.length;
count += valueSpaces.after.length;
-
var insensitiveSpaces = this._spacesFor("insensitive");
-
count += insensitiveSpaces.before.length;
-
if (name === "insensitive") {
return this.insensitive ? count : -1;
}
-
return -1;
};
-
_proto.toString = function toString() {
var _this2 = this;
-
var selector = [this.rawSpaceBefore, '['];
selector.push(this._stringFor('qualifiedAttribute', 'attribute'));
-
if (this.operator && (this.value || this.value === '')) {
selector.push(this._stringFor('operator'));
selector.push(this._stringFor('value'));
@@ -376,16 +297,13 @@ var Attribute = /*#__PURE__*/function (_Namespace) {
if (attrValue.length > 0 && !_this2.quoted && attrSpaces.before.length === 0 && !(_this2.spaces.value && _this2.spaces.value.after)) {
attrSpaces.before = " ";
}
-
return defaultAttrConcat(attrValue, attrSpaces);
}));
}
-
selector.push(']');
selector.push(this.rawSpaceAfter);
return selector.join('');
};
-
_createClass(Attribute, [{
key: "quoted",
get: function get() {
@@ -395,35 +313,33 @@ var Attribute = /*#__PURE__*/function (_Namespace) {
set: function set(value) {
warnOfDeprecatedQuotedAssignment();
}
+
/**
* returns a single (`'`) or double (`"`) quote character if the value is quoted.
* returns `null` if the value is not quoted.
* returns `undefined` if the quotation state is unknown (this can happen when
* the attribute is constructed without specifying a quote mark.)
*/
-
}, {
key: "quoteMark",
get: function get() {
return this._quoteMark;
}
+
/**
* Set the quote mark to be used by this attribute's value.
* If the quote mark changes, the raw (escaped) value at `attr.raws.value` of the attribute
* value is updated accordingly.
*
* @param {"'" | '"' | null} quoteMark The quote mark or `null` if the value should be unquoted.
- */
- ,
+ */,
set: function set(quoteMark) {
if (!this._constructed) {
this._quoteMark = quoteMark;
return;
}
-
if (this._quoteMark !== quoteMark) {
this._quoteMark = quoteMark;
-
this._syncRawValue();
}
}
@@ -458,21 +374,17 @@ var Attribute = /*#__PURE__*/function (_Namespace) {
function set(v) {
if (this._constructed) {
var _unescapeValue2 = unescapeValue(v),
- deprecatedUsage = _unescapeValue2.deprecatedUsage,
- unescaped = _unescapeValue2.unescaped,
- quoteMark = _unescapeValue2.quoteMark;
-
+ deprecatedUsage = _unescapeValue2.deprecatedUsage,
+ unescaped = _unescapeValue2.unescaped,
+ quoteMark = _unescapeValue2.quoteMark;
if (deprecatedUsage) {
warnOfDeprecatedValueAssignment();
}
-
if (unescaped === this._value && quoteMark === this._quoteMark) {
return;
}
-
this._value = unescaped;
this._quoteMark = quoteMark;
-
this._syncRawValue();
} else {
this._value = v;
@@ -483,24 +395,24 @@ var Attribute = /*#__PURE__*/function (_Namespace) {
get: function get() {
return this._insensitive;
}
+
/**
* Set the case insensitive flag.
* If the case insensitive flag changes, the raw (escaped) value at `attr.raws.insensitiveFlag`
* of the attribute is updated accordingly.
*
* @param {true | false} insensitive true if the attribute should match case-insensitively.
- */
- ,
+ */,
set: function set(insensitive) {
if (!insensitive) {
- this._insensitive = false; // "i" and "I" can be used in "this.raws.insensitiveFlag" to store the original notation.
- // When setting `attr.insensitive = false` both should be erased to ensure correct serialization.
+ this._insensitive = false;
+ // "i" and "I" can be used in "this.raws.insensitiveFlag" to store the original notation.
+ // When setting `attr.insensitive = false` both should be erased to ensure correct serialization.
if (this.raws && (this.raws.insensitiveFlag === 'I' || this.raws.insensitiveFlag === 'i')) {
this.raws.insensitiveFlag = undefined;
}
}
-
this._insensitive = insensitive;
}
}, {
@@ -510,14 +422,11 @@ var Attribute = /*#__PURE__*/function (_Namespace) {
},
set: function set(name) {
this._handleEscapes("attribute", name);
-
this._attribute = name;
}
}]);
-
return Attribute;
}(_namespace["default"]);
-
exports["default"] = Attribute;
Attribute.NO_QUOTE = null;
Attribute.SINGLE_QUOTE = "'";
@@ -534,7 +443,6 @@ var CSSESC_QUOTE_OPTIONS = (_CSSESC_QUOTE_OPTIONS = {
}, _CSSESC_QUOTE_OPTIONS[null] = {
isIdentifier: true
}, _CSSESC_QUOTE_OPTIONS);
-
function defaultAttrConcat(attrValue, attrSpaces) {
return "" + attrSpaces.before + attrValue + attrSpaces.after;
} \ No newline at end of file
diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/className.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/className.js
index 22409914cf..af325977c1 100644
--- a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/className.js
+++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/className.js
@@ -2,43 +2,28 @@
exports.__esModule = true;
exports["default"] = void 0;
-
var _cssesc = _interopRequireDefault(require("cssesc"));
-
var _util = require("../util");
-
var _node = _interopRequireDefault(require("./node"));
-
var _types = require("./types");
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
-
-function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
-
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
var ClassName = /*#__PURE__*/function (_Node) {
_inheritsLoose(ClassName, _Node);
-
function ClassName(opts) {
var _this;
-
_this = _Node.call(this, opts) || this;
_this.type = _types.CLASS;
_this._constructed = true;
return _this;
}
-
var _proto = ClassName.prototype;
-
_proto.valueToString = function valueToString() {
return '.' + _Node.prototype.valueToString.call(this);
};
-
_createClass(ClassName, [{
key: "value",
get: function get() {
@@ -49,7 +34,6 @@ var ClassName = /*#__PURE__*/function (_Node) {
var escaped = (0, _cssesc["default"])(v, {
isIdentifier: true
});
-
if (escaped !== v) {
(0, _util.ensureObject)(this, "raws");
this.raws.value = escaped;
@@ -57,13 +41,10 @@ var ClassName = /*#__PURE__*/function (_Node) {
delete this.raws.value;
}
}
-
this._value = v;
}
}]);
-
return ClassName;
}(_node["default"]);
-
exports["default"] = ClassName;
module.exports = exports.default; \ No newline at end of file
diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/combinator.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/combinator.js
index 271ab4d3b1..c6449f43cf 100644
--- a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/combinator.js
+++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/combinator.js
@@ -2,30 +2,20 @@
exports.__esModule = true;
exports["default"] = void 0;
-
var _node = _interopRequireDefault(require("./node"));
-
var _types = require("./types");
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
var Combinator = /*#__PURE__*/function (_Node) {
_inheritsLoose(Combinator, _Node);
-
function Combinator(opts) {
var _this;
-
_this = _Node.call(this, opts) || this;
_this.type = _types.COMBINATOR;
return _this;
}
-
return Combinator;
}(_node["default"]);
-
exports["default"] = Combinator;
module.exports = exports.default; \ No newline at end of file
diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/comment.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/comment.js
index e778094e11..1709d5be92 100644
--- a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/comment.js
+++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/comment.js
@@ -2,30 +2,20 @@
exports.__esModule = true;
exports["default"] = void 0;
-
var _node = _interopRequireDefault(require("./node"));
-
var _types = require("./types");
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
var Comment = /*#__PURE__*/function (_Node) {
_inheritsLoose(Comment, _Node);
-
function Comment(opts) {
var _this;
-
_this = _Node.call(this, opts) || this;
_this.type = _types.COMMENT;
return _this;
}
-
return Comment;
}(_node["default"]);
-
exports["default"] = Comment;
module.exports = exports.default; \ No newline at end of file
diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/constructors.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/constructors.js
index 078023eb28..688259324c 100644
--- a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/constructors.js
+++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/constructors.js
@@ -2,101 +2,64 @@
exports.__esModule = true;
exports.universal = exports.tag = exports.string = exports.selector = exports.root = exports.pseudo = exports.nesting = exports.id = exports.comment = exports.combinator = exports.className = exports.attribute = void 0;
-
var _attribute = _interopRequireDefault(require("./attribute"));
-
var _className = _interopRequireDefault(require("./className"));
-
var _combinator = _interopRequireDefault(require("./combinator"));
-
var _comment = _interopRequireDefault(require("./comment"));
-
var _id = _interopRequireDefault(require("./id"));
-
var _nesting = _interopRequireDefault(require("./nesting"));
-
var _pseudo = _interopRequireDefault(require("./pseudo"));
-
var _root = _interopRequireDefault(require("./root"));
-
var _selector = _interopRequireDefault(require("./selector"));
-
var _string = _interopRequireDefault(require("./string"));
-
var _tag = _interopRequireDefault(require("./tag"));
-
var _universal = _interopRequireDefault(require("./universal"));
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
var attribute = function attribute(opts) {
return new _attribute["default"](opts);
};
-
exports.attribute = attribute;
-
var className = function className(opts) {
return new _className["default"](opts);
};
-
exports.className = className;
-
var combinator = function combinator(opts) {
return new _combinator["default"](opts);
};
-
exports.combinator = combinator;
-
var comment = function comment(opts) {
return new _comment["default"](opts);
};
-
exports.comment = comment;
-
var id = function id(opts) {
return new _id["default"](opts);
};
-
exports.id = id;
-
var nesting = function nesting(opts) {
return new _nesting["default"](opts);
};
-
exports.nesting = nesting;
-
var pseudo = function pseudo(opts) {
return new _pseudo["default"](opts);
};
-
exports.pseudo = pseudo;
-
var root = function root(opts) {
return new _root["default"](opts);
};
-
exports.root = root;
-
var selector = function selector(opts) {
return new _selector["default"](opts);
};
-
exports.selector = selector;
-
var string = function string(opts) {
return new _string["default"](opts);
};
-
exports.string = string;
-
var tag = function tag(opts) {
return new _tag["default"](opts);
};
-
exports.tag = tag;
-
var universal = function universal(opts) {
return new _universal["default"](opts);
};
-
exports.universal = universal; \ No newline at end of file
diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/container.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/container.js
index cf6176d9be..be35fa9941 100644
--- a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/container.js
+++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/container.js
@@ -2,145 +2,105 @@
exports.__esModule = true;
exports["default"] = void 0;
-
var _node = _interopRequireDefault(require("./node"));
-
var types = _interopRequireWildcard(require("./types"));
-
-function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
-
-function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
-
+function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
+function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } it = o[Symbol.iterator](); return it.next.bind(it); }
-
+function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
-
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
-
-function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
-
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
var Container = /*#__PURE__*/function (_Node) {
_inheritsLoose(Container, _Node);
-
function Container(opts) {
var _this;
-
_this = _Node.call(this, opts) || this;
-
if (!_this.nodes) {
_this.nodes = [];
}
-
return _this;
}
-
var _proto = Container.prototype;
-
_proto.append = function append(selector) {
selector.parent = this;
this.nodes.push(selector);
return this;
};
-
_proto.prepend = function prepend(selector) {
selector.parent = this;
this.nodes.unshift(selector);
return this;
};
-
_proto.at = function at(index) {
return this.nodes[index];
};
-
_proto.index = function index(child) {
if (typeof child === 'number') {
return child;
}
-
return this.nodes.indexOf(child);
};
-
_proto.removeChild = function removeChild(child) {
child = this.index(child);
this.at(child).parent = undefined;
this.nodes.splice(child, 1);
var index;
-
for (var id in this.indexes) {
index = this.indexes[id];
-
if (index >= child) {
this.indexes[id] = index - 1;
}
}
-
return this;
};
-
_proto.removeAll = function removeAll() {
for (var _iterator = _createForOfIteratorHelperLoose(this.nodes), _step; !(_step = _iterator()).done;) {
var node = _step.value;
node.parent = undefined;
}
-
this.nodes = [];
return this;
};
-
_proto.empty = function empty() {
return this.removeAll();
};
-
_proto.insertAfter = function insertAfter(oldNode, newNode) {
newNode.parent = this;
var oldIndex = this.index(oldNode);
this.nodes.splice(oldIndex + 1, 0, newNode);
newNode.parent = this;
var index;
-
for (var id in this.indexes) {
index = this.indexes[id];
-
if (oldIndex <= index) {
this.indexes[id] = index + 1;
}
}
-
return this;
};
-
_proto.insertBefore = function insertBefore(oldNode, newNode) {
newNode.parent = this;
var oldIndex = this.index(oldNode);
this.nodes.splice(oldIndex, 0, newNode);
newNode.parent = this;
var index;
-
for (var id in this.indexes) {
index = this.indexes[id];
-
if (index <= oldIndex) {
this.indexes[id] = index + 1;
}
}
-
return this;
};
-
_proto._findChildAtPosition = function _findChildAtPosition(line, col) {
var found = undefined;
this.each(function (node) {
if (node.atPosition) {
var foundChild = node.atPosition(line, col);
-
if (foundChild) {
found = foundChild;
return false;
@@ -152,6 +112,7 @@ var Container = /*#__PURE__*/function (_Node) {
});
return found;
}
+
/**
* Return the most specific node at the line and column number given.
* The source location is based on the original parsed location, locations aren't
@@ -164,9 +125,7 @@ var Container = /*#__PURE__*/function (_Node) {
* If not found, returns undefined.
* @param {number} line The line number of the node to find. (1-based index)
* @param {number} col The column number of the node to find. (1-based index)
- */
- ;
-
+ */;
_proto.atPosition = function atPosition(line, col) {
if (this.isAtPosition(line, col)) {
return this._findChildAtPosition(line, col) || this;
@@ -174,7 +133,6 @@ var Container = /*#__PURE__*/function (_Node) {
return undefined;
}
};
-
_proto._inferEndPosition = function _inferEndPosition() {
if (this.last && this.last.source && this.last.source.end) {
this.source = this.source || {};
@@ -182,195 +140,152 @@ var Container = /*#__PURE__*/function (_Node) {
Object.assign(this.source.end, this.last.source.end);
}
};
-
_proto.each = function each(callback) {
if (!this.lastEach) {
this.lastEach = 0;
}
-
if (!this.indexes) {
this.indexes = {};
}
-
this.lastEach++;
var id = this.lastEach;
this.indexes[id] = 0;
-
if (!this.length) {
return undefined;
}
-
var index, result;
-
while (this.indexes[id] < this.length) {
index = this.indexes[id];
result = callback(this.at(index), index);
-
if (result === false) {
break;
}
-
this.indexes[id] += 1;
}
-
delete this.indexes[id];
-
if (result === false) {
return false;
}
};
-
_proto.walk = function walk(callback) {
return this.each(function (node, i) {
var result = callback(node, i);
-
if (result !== false && node.length) {
result = node.walk(callback);
}
-
if (result === false) {
return false;
}
});
};
-
_proto.walkAttributes = function walkAttributes(callback) {
var _this2 = this;
-
return this.walk(function (selector) {
if (selector.type === types.ATTRIBUTE) {
return callback.call(_this2, selector);
}
});
};
-
_proto.walkClasses = function walkClasses(callback) {
var _this3 = this;
-
return this.walk(function (selector) {
if (selector.type === types.CLASS) {
return callback.call(_this3, selector);
}
});
};
-
_proto.walkCombinators = function walkCombinators(callback) {
var _this4 = this;
-
return this.walk(function (selector) {
if (selector.type === types.COMBINATOR) {
return callback.call(_this4, selector);
}
});
};
-
_proto.walkComments = function walkComments(callback) {
var _this5 = this;
-
return this.walk(function (selector) {
if (selector.type === types.COMMENT) {
return callback.call(_this5, selector);
}
});
};
-
_proto.walkIds = function walkIds(callback) {
var _this6 = this;
-
return this.walk(function (selector) {
if (selector.type === types.ID) {
return callback.call(_this6, selector);
}
});
};
-
_proto.walkNesting = function walkNesting(callback) {
var _this7 = this;
-
return this.walk(function (selector) {
if (selector.type === types.NESTING) {
return callback.call(_this7, selector);
}
});
};
-
_proto.walkPseudos = function walkPseudos(callback) {
var _this8 = this;
-
return this.walk(function (selector) {
if (selector.type === types.PSEUDO) {
return callback.call(_this8, selector);
}
});
};
-
_proto.walkTags = function walkTags(callback) {
var _this9 = this;
-
return this.walk(function (selector) {
if (selector.type === types.TAG) {
return callback.call(_this9, selector);
}
});
};
-
_proto.walkUniversals = function walkUniversals(callback) {
var _this10 = this;
-
return this.walk(function (selector) {
if (selector.type === types.UNIVERSAL) {
return callback.call(_this10, selector);
}
});
};
-
_proto.split = function split(callback) {
var _this11 = this;
-
var current = [];
return this.reduce(function (memo, node, index) {
var split = callback.call(_this11, node);
current.push(node);
-
if (split) {
memo.push(current);
current = [];
} else if (index === _this11.length - 1) {
memo.push(current);
}
-
return memo;
}, []);
};
-
_proto.map = function map(callback) {
return this.nodes.map(callback);
};
-
_proto.reduce = function reduce(callback, memo) {
return this.nodes.reduce(callback, memo);
};
-
_proto.every = function every(callback) {
return this.nodes.every(callback);
};
-
_proto.some = function some(callback) {
return this.nodes.some(callback);
};
-
_proto.filter = function filter(callback) {
return this.nodes.filter(callback);
};
-
_proto.sort = function sort(callback) {
return this.nodes.sort(callback);
};
-
_proto.toString = function toString() {
return this.map(String).join('');
};
-
_createClass(Container, [{
key: "first",
get: function get() {
@@ -387,9 +302,7 @@ var Container = /*#__PURE__*/function (_Node) {
return this.nodes.length;
}
}]);
-
return Container;
}(_node["default"]);
-
exports["default"] = Container;
module.exports = exports.default; \ No newline at end of file
diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/guards.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/guards.js
index c949af57eb..f06161e97c 100644
--- a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/guards.js
+++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/guards.js
@@ -1,27 +1,25 @@
"use strict";
exports.__esModule = true;
-exports.isNode = isNode;
-exports.isPseudoElement = isPseudoElement;
-exports.isPseudoClass = isPseudoClass;
+exports.isComment = exports.isCombinator = exports.isClassName = exports.isAttribute = void 0;
exports.isContainer = isContainer;
+exports.isIdentifier = void 0;
exports.isNamespace = isNamespace;
-exports.isUniversal = exports.isTag = exports.isString = exports.isSelector = exports.isRoot = exports.isPseudo = exports.isNesting = exports.isIdentifier = exports.isComment = exports.isCombinator = exports.isClassName = exports.isAttribute = void 0;
-
+exports.isNesting = void 0;
+exports.isNode = isNode;
+exports.isPseudo = void 0;
+exports.isPseudoClass = isPseudoClass;
+exports.isPseudoElement = isPseudoElement;
+exports.isUniversal = exports.isTag = exports.isString = exports.isSelector = exports.isRoot = void 0;
var _types = require("./types");
-
var _IS_TYPE;
-
var IS_TYPE = (_IS_TYPE = {}, _IS_TYPE[_types.ATTRIBUTE] = true, _IS_TYPE[_types.CLASS] = true, _IS_TYPE[_types.COMBINATOR] = true, _IS_TYPE[_types.COMMENT] = true, _IS_TYPE[_types.ID] = true, _IS_TYPE[_types.NESTING] = true, _IS_TYPE[_types.PSEUDO] = true, _IS_TYPE[_types.ROOT] = true, _IS_TYPE[_types.SELECTOR] = true, _IS_TYPE[_types.STRING] = true, _IS_TYPE[_types.TAG] = true, _IS_TYPE[_types.UNIVERSAL] = true, _IS_TYPE);
-
function isNode(node) {
return typeof node === "object" && IS_TYPE[node.type];
}
-
function isNodeType(type, node) {
return isNode(node) && node.type === type;
}
-
var isAttribute = isNodeType.bind(null, _types.ATTRIBUTE);
exports.isAttribute = isAttribute;
var isClassName = isNodeType.bind(null, _types.CLASS);
@@ -46,19 +44,15 @@ var isTag = isNodeType.bind(null, _types.TAG);
exports.isTag = isTag;
var isUniversal = isNodeType.bind(null, _types.UNIVERSAL);
exports.isUniversal = isUniversal;
-
function isPseudoElement(node) {
return isPseudo(node) && node.value && (node.value.startsWith("::") || node.value.toLowerCase() === ":before" || node.value.toLowerCase() === ":after" || node.value.toLowerCase() === ":first-letter" || node.value.toLowerCase() === ":first-line");
}
-
function isPseudoClass(node) {
return isPseudo(node) && !isPseudoElement(node);
}
-
function isContainer(node) {
return !!(isNode(node) && node.walk);
}
-
function isNamespace(node) {
return isAttribute(node) || isTag(node);
} \ No newline at end of file
diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/id.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/id.js
index 4e83147e3c..8baef72860 100644
--- a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/id.js
+++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/id.js
@@ -2,36 +2,24 @@
exports.__esModule = true;
exports["default"] = void 0;
-
var _node = _interopRequireDefault(require("./node"));
-
var _types = require("./types");
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
var ID = /*#__PURE__*/function (_Node) {
_inheritsLoose(ID, _Node);
-
function ID(opts) {
var _this;
-
_this = _Node.call(this, opts) || this;
_this.type = _types.ID;
return _this;
}
-
var _proto = ID.prototype;
-
_proto.valueToString = function valueToString() {
return '#' + _Node.prototype.valueToString.call(this);
};
-
return ID;
}(_node["default"]);
-
exports["default"] = ID;
module.exports = exports.default; \ No newline at end of file
diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/index.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/index.js
index 1fe9b138a5..f1f6b7f5e6 100644
--- a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/index.js
+++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/index.js
@@ -1,25 +1,19 @@
"use strict";
exports.__esModule = true;
-
var _types = require("./types");
-
Object.keys(_types).forEach(function (key) {
if (key === "default" || key === "__esModule") return;
if (key in exports && exports[key] === _types[key]) return;
exports[key] = _types[key];
});
-
var _constructors = require("./constructors");
-
Object.keys(_constructors).forEach(function (key) {
if (key === "default" || key === "__esModule") return;
if (key in exports && exports[key] === _constructors[key]) return;
exports[key] = _constructors[key];
});
-
var _guards = require("./guards");
-
Object.keys(_guards).forEach(function (key) {
if (key === "default" || key === "__esModule") return;
if (key in exports && exports[key] === _guards[key]) return;
diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/namespace.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/namespace.js
index fd6c729e16..cc97647bd1 100644
--- a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/namespace.js
+++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/namespace.js
@@ -2,32 +2,20 @@
exports.__esModule = true;
exports["default"] = void 0;
-
var _cssesc = _interopRequireDefault(require("cssesc"));
-
var _util = require("../util");
-
var _node = _interopRequireDefault(require("./node"));
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
-
-function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
-
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
var Namespace = /*#__PURE__*/function (_Node) {
_inheritsLoose(Namespace, _Node);
-
function Namespace() {
return _Node.apply(this, arguments) || this;
}
-
var _proto = Namespace.prototype;
-
_proto.qualifiedName = function qualifiedName(value) {
if (this.namespace) {
return this.namespaceString + "|" + value;
@@ -35,11 +23,9 @@ var Namespace = /*#__PURE__*/function (_Node) {
return value;
}
};
-
_proto.valueToString = function valueToString() {
return this.qualifiedName(_Node.prototype.valueToString.call(this));
};
-
_createClass(Namespace, [{
key: "namespace",
get: function get() {
@@ -48,19 +34,15 @@ var Namespace = /*#__PURE__*/function (_Node) {
set: function set(namespace) {
if (namespace === true || namespace === "*" || namespace === "&") {
this._namespace = namespace;
-
if (this.raws) {
delete this.raws.namespace;
}
-
return;
}
-
var escaped = (0, _cssesc["default"])(namespace, {
isIdentifier: true
});
this._namespace = namespace;
-
if (escaped !== namespace) {
(0, _util.ensureObject)(this, "raws");
this.raws.namespace = escaped;
@@ -81,7 +63,6 @@ var Namespace = /*#__PURE__*/function (_Node) {
get: function get() {
if (this.namespace) {
var ns = this.stringifyProperty("namespace");
-
if (ns === true) {
return '';
} else {
@@ -92,10 +73,8 @@ var Namespace = /*#__PURE__*/function (_Node) {
}
}
}]);
-
return Namespace;
}(_node["default"]);
-
exports["default"] = Namespace;
;
module.exports = exports.default; \ No newline at end of file
diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/nesting.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/nesting.js
index 3288c78f2d..218992875a 100644
--- a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/nesting.js
+++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/nesting.js
@@ -2,31 +2,21 @@
exports.__esModule = true;
exports["default"] = void 0;
-
var _node = _interopRequireDefault(require("./node"));
-
var _types = require("./types");
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
var Nesting = /*#__PURE__*/function (_Node) {
_inheritsLoose(Nesting, _Node);
-
function Nesting(opts) {
var _this;
-
_this = _Node.call(this, opts) || this;
_this.type = _types.NESTING;
_this.value = '&';
return _this;
}
-
return Nesting;
}(_node["default"]);
-
exports["default"] = Nesting;
module.exports = exports.default; \ No newline at end of file
diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/node.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/node.js
index e8eca11c70..9a82951010 100644
--- a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/node.js
+++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/node.js
@@ -2,28 +2,20 @@
exports.__esModule = true;
exports["default"] = void 0;
-
var _util = require("../util");
-
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
-
-function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
-
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
var cloneNode = function cloneNode(obj, parent) {
if (typeof obj !== 'object' || obj === null) {
return obj;
}
-
var cloned = new obj.constructor();
-
for (var i in obj) {
if (!obj.hasOwnProperty(i)) {
continue;
}
-
var value = obj[i];
var type = typeof value;
-
if (i === 'parent' && type === 'object') {
if (parent) {
cloned[i] = parent;
@@ -36,66 +28,52 @@ var cloneNode = function cloneNode(obj, parent) {
cloned[i] = cloneNode(value, cloned);
}
}
-
return cloned;
};
-
var Node = /*#__PURE__*/function () {
function Node(opts) {
if (opts === void 0) {
opts = {};
}
-
Object.assign(this, opts);
this.spaces = this.spaces || {};
this.spaces.before = this.spaces.before || '';
this.spaces.after = this.spaces.after || '';
}
-
var _proto = Node.prototype;
-
_proto.remove = function remove() {
if (this.parent) {
this.parent.removeChild(this);
}
-
this.parent = undefined;
return this;
};
-
_proto.replaceWith = function replaceWith() {
if (this.parent) {
for (var index in arguments) {
this.parent.insertBefore(this, arguments[index]);
}
-
this.remove();
}
-
return this;
};
-
_proto.next = function next() {
return this.parent.at(this.parent.index(this) + 1);
};
-
_proto.prev = function prev() {
return this.parent.at(this.parent.index(this) - 1);
};
-
_proto.clone = function clone(overrides) {
if (overrides === void 0) {
overrides = {};
}
-
var cloned = cloneNode(this);
-
for (var name in overrides) {
cloned[name] = overrides[name];
}
-
return cloned;
}
+
/**
* Some non-standard syntax doesn't follow normal escaping rules for css.
* This allows non standard syntax to be appended to an existing property
@@ -104,24 +82,21 @@ var Node = /*#__PURE__*/function () {
* @param {string} name the property to set
* @param {any} value the unescaped value of the property
* @param {string} valueEscaped optional. the escaped value of the property.
- */
- ;
-
+ */;
_proto.appendToPropertyAndEscape = function appendToPropertyAndEscape(name, value, valueEscaped) {
if (!this.raws) {
this.raws = {};
}
-
var originalValue = this[name];
var originalEscaped = this.raws[name];
this[name] = originalValue + value; // this may trigger a setter that updates raws, so it has to be set first.
-
if (originalEscaped || valueEscaped !== value) {
this.raws[name] = (originalEscaped || originalValue) + valueEscaped;
} else {
delete this.raws[name]; // delete any escaped value that was created by the setter.
}
}
+
/**
* Some non-standard syntax doesn't follow normal escaping rules for css.
* This allows the escaped value to be specified directly, allowing illegal
@@ -129,86 +104,68 @@ var Node = /*#__PURE__*/function () {
* @param {string} name the property to set
* @param {any} value the unescaped value of the property
* @param {string} valueEscaped the escaped value of the property.
- */
- ;
-
+ */;
_proto.setPropertyAndEscape = function setPropertyAndEscape(name, value, valueEscaped) {
if (!this.raws) {
this.raws = {};
}
-
this[name] = value; // this may trigger a setter that updates raws, so it has to be set first.
-
this.raws[name] = valueEscaped;
}
+
/**
* When you want a value to passed through to CSS directly. This method
* deletes the corresponding raw value causing the stringifier to fallback
* to the unescaped value.
* @param {string} name the property to set.
* @param {any} value The value that is both escaped and unescaped.
- */
- ;
-
+ */;
_proto.setPropertyWithoutEscape = function setPropertyWithoutEscape(name, value) {
this[name] = value; // this may trigger a setter that updates raws, so it has to be set first.
-
if (this.raws) {
delete this.raws[name];
}
}
+
/**
*
* @param {number} line The number (starting with 1)
* @param {number} column The column number (starting with 1)
- */
- ;
-
+ */;
_proto.isAtPosition = function isAtPosition(line, column) {
if (this.source && this.source.start && this.source.end) {
if (this.source.start.line > line) {
return false;
}
-
if (this.source.end.line < line) {
return false;
}
-
if (this.source.start.line === line && this.source.start.column > column) {
return false;
}
-
if (this.source.end.line === line && this.source.end.column < column) {
return false;
}
-
return true;
}
-
return undefined;
};
-
_proto.stringifyProperty = function stringifyProperty(name) {
return this.raws && this.raws[name] || this[name];
};
-
_proto.valueToString = function valueToString() {
return String(this.stringifyProperty("value"));
};
-
_proto.toString = function toString() {
return [this.rawSpaceBefore, this.valueToString(), this.rawSpaceAfter].join('');
};
-
_createClass(Node, [{
key: "rawSpaceBefore",
get: function get() {
var rawSpace = this.raws && this.raws.spaces && this.raws.spaces.before;
-
if (rawSpace === undefined) {
rawSpace = this.spaces && this.spaces.before;
}
-
return rawSpace || "";
},
set: function set(raw) {
@@ -219,11 +176,9 @@ var Node = /*#__PURE__*/function () {
key: "rawSpaceAfter",
get: function get() {
var rawSpace = this.raws && this.raws.spaces && this.raws.spaces.after;
-
if (rawSpace === undefined) {
rawSpace = this.spaces.after;
}
-
return rawSpace || "";
},
set: function set(raw) {
@@ -231,9 +186,7 @@ var Node = /*#__PURE__*/function () {
this.raws.spaces.after = raw;
}
}]);
-
return Node;
}();
-
exports["default"] = Node;
module.exports = exports.default; \ No newline at end of file
diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/pseudo.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/pseudo.js
index a0e7bca170..4371e5900f 100644
--- a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/pseudo.js
+++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/pseudo.js
@@ -2,37 +2,25 @@
exports.__esModule = true;
exports["default"] = void 0;
-
var _container = _interopRequireDefault(require("./container"));
-
var _types = require("./types");
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
var Pseudo = /*#__PURE__*/function (_Container) {
_inheritsLoose(Pseudo, _Container);
-
function Pseudo(opts) {
var _this;
-
_this = _Container.call(this, opts) || this;
_this.type = _types.PSEUDO;
return _this;
}
-
var _proto = Pseudo.prototype;
-
_proto.toString = function toString() {
var params = this.length ? '(' + this.map(String).join(',') + ')' : '';
return [this.rawSpaceBefore, this.stringifyProperty("value"), params, this.rawSpaceAfter].join('');
};
-
return Pseudo;
}(_container["default"]);
-
exports["default"] = Pseudo;
module.exports = exports.default; \ No newline at end of file
diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/root.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/root.js
index be5c2ccb2d..8c599d1580 100644
--- a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/root.js
+++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/root.js
@@ -2,34 +2,22 @@
exports.__esModule = true;
exports["default"] = void 0;
-
var _container = _interopRequireDefault(require("./container"));
-
var _types = require("./types");
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
-
-function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
-
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
var Root = /*#__PURE__*/function (_Container) {
_inheritsLoose(Root, _Container);
-
function Root(opts) {
var _this;
-
_this = _Container.call(this, opts) || this;
_this.type = _types.ROOT;
return _this;
}
-
var _proto = Root.prototype;
-
_proto.toString = function toString() {
var str = this.reduce(function (memo, selector) {
memo.push(String(selector));
@@ -37,7 +25,6 @@ var Root = /*#__PURE__*/function (_Container) {
}, []).join(',');
return this.trailingComma ? str + ',' : str;
};
-
_proto.error = function error(message, options) {
if (this._error) {
return this._error(message, options);
@@ -45,16 +32,13 @@ var Root = /*#__PURE__*/function (_Container) {
return new Error(message);
}
};
-
_createClass(Root, [{
key: "errorGenerator",
set: function set(handler) {
this._error = handler;
}
}]);
-
return Root;
}(_container["default"]);
-
exports["default"] = Root;
module.exports = exports.default; \ No newline at end of file
diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/selector.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/selector.js
index 699eeb6e54..8cc4bc1cdd 100644
--- a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/selector.js
+++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/selector.js
@@ -2,30 +2,20 @@
exports.__esModule = true;
exports["default"] = void 0;
-
var _container = _interopRequireDefault(require("./container"));
-
var _types = require("./types");
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
var Selector = /*#__PURE__*/function (_Container) {
_inheritsLoose(Selector, _Container);
-
function Selector(opts) {
var _this;
-
_this = _Container.call(this, opts) || this;
_this.type = _types.SELECTOR;
return _this;
}
-
return Selector;
}(_container["default"]);
-
exports["default"] = Selector;
module.exports = exports.default; \ No newline at end of file
diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/string.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/string.js
index e61df30c74..4749791416 100644
--- a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/string.js
+++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/string.js
@@ -2,30 +2,20 @@
exports.__esModule = true;
exports["default"] = void 0;
-
var _node = _interopRequireDefault(require("./node"));
-
var _types = require("./types");
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
var String = /*#__PURE__*/function (_Node) {
_inheritsLoose(String, _Node);
-
function String(opts) {
var _this;
-
_this = _Node.call(this, opts) || this;
_this.type = _types.STRING;
return _this;
}
-
return String;
}(_node["default"]);
-
exports["default"] = String;
module.exports = exports.default; \ No newline at end of file
diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/tag.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/tag.js
index e298db15fa..224e74de4a 100644
--- a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/tag.js
+++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/tag.js
@@ -2,30 +2,20 @@
exports.__esModule = true;
exports["default"] = void 0;
-
var _namespace = _interopRequireDefault(require("./namespace"));
-
var _types = require("./types");
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
var Tag = /*#__PURE__*/function (_Namespace) {
_inheritsLoose(Tag, _Namespace);
-
function Tag(opts) {
var _this;
-
_this = _Namespace.call(this, opts) || this;
_this.type = _types.TAG;
return _this;
}
-
return Tag;
}(_namespace["default"]);
-
exports["default"] = Tag;
module.exports = exports.default; \ No newline at end of file
diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/types.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/types.js
index ab897b8ce5..824cc0c738 100644
--- a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/types.js
+++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/types.js
@@ -1,7 +1,7 @@
"use strict";
exports.__esModule = true;
-exports.UNIVERSAL = exports.ATTRIBUTE = exports.CLASS = exports.COMBINATOR = exports.COMMENT = exports.ID = exports.NESTING = exports.PSEUDO = exports.ROOT = exports.SELECTOR = exports.STRING = exports.TAG = void 0;
+exports.UNIVERSAL = exports.TAG = exports.STRING = exports.SELECTOR = exports.ROOT = exports.PSEUDO = exports.NESTING = exports.ID = exports.COMMENT = exports.COMBINATOR = exports.CLASS = exports.ATTRIBUTE = void 0;
var TAG = 'tag';
exports.TAG = TAG;
var STRING = 'string';
diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/universal.js b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/universal.js
index cf25473d1c..5b5874380b 100644
--- a/deps/npm/node_modules/postcss-selector-parser/dist/selectors/universal.js
+++ b/deps/npm/node_modules/postcss-selector-parser/dist/selectors/universal.js
@@ -2,31 +2,21 @@
exports.__esModule = true;
exports["default"] = void 0;
-
var _namespace = _interopRequireDefault(require("./namespace"));
-
var _types = require("./types");
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
var Universal = /*#__PURE__*/function (_Namespace) {
_inheritsLoose(Universal, _Namespace);
-
function Universal(opts) {
var _this;
-
_this = _Namespace.call(this, opts) || this;
_this.type = _types.UNIVERSAL;
_this.value = '*';
return _this;
}
-
return Universal;
}(_namespace["default"]);
-
exports["default"] = Universal;
module.exports = exports.default; \ No newline at end of file
diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/sortAscending.js b/deps/npm/node_modules/postcss-selector-parser/dist/sortAscending.js
index 3ef56acc57..5666d5dc99 100644
--- a/deps/npm/node_modules/postcss-selector-parser/dist/sortAscending.js
+++ b/deps/npm/node_modules/postcss-selector-parser/dist/sortAscending.js
@@ -2,12 +2,10 @@
exports.__esModule = true;
exports["default"] = sortAscending;
-
function sortAscending(list) {
return list.sort(function (a, b) {
return a - b;
});
}
-
;
module.exports = exports.default; \ No newline at end of file
diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/tokenTypes.js b/deps/npm/node_modules/postcss-selector-parser/dist/tokenTypes.js
index 48314b93e0..59d8e6c6bf 100644
--- a/deps/npm/node_modules/postcss-selector-parser/dist/tokenTypes.js
+++ b/deps/npm/node_modules/postcss-selector-parser/dist/tokenTypes.js
@@ -1,91 +1,66 @@
"use strict";
exports.__esModule = true;
-exports.combinator = exports.word = exports.comment = exports.str = exports.tab = exports.newline = exports.feed = exports.cr = exports.backslash = exports.bang = exports.slash = exports.doubleQuote = exports.singleQuote = exports.space = exports.greaterThan = exports.pipe = exports.equals = exports.plus = exports.caret = exports.tilde = exports.dollar = exports.closeSquare = exports.openSquare = exports.closeParenthesis = exports.openParenthesis = exports.semicolon = exports.colon = exports.comma = exports.at = exports.asterisk = exports.ampersand = void 0;
+exports.word = exports.tilde = exports.tab = exports.str = exports.space = exports.slash = exports.singleQuote = exports.semicolon = exports.plus = exports.pipe = exports.openSquare = exports.openParenthesis = exports.newline = exports.greaterThan = exports.feed = exports.equals = exports.doubleQuote = exports.dollar = exports.cr = exports.comment = exports.comma = exports.combinator = exports.colon = exports.closeSquare = exports.closeParenthesis = exports.caret = exports.bang = exports.backslash = exports.at = exports.asterisk = exports.ampersand = void 0;
var ampersand = 38; // `&`.charCodeAt(0);
-
exports.ampersand = ampersand;
var asterisk = 42; // `*`.charCodeAt(0);
-
exports.asterisk = asterisk;
var at = 64; // `@`.charCodeAt(0);
-
exports.at = at;
var comma = 44; // `,`.charCodeAt(0);
-
exports.comma = comma;
var colon = 58; // `:`.charCodeAt(0);
-
exports.colon = colon;
var semicolon = 59; // `;`.charCodeAt(0);
-
exports.semicolon = semicolon;
var openParenthesis = 40; // `(`.charCodeAt(0);
-
exports.openParenthesis = openParenthesis;
var closeParenthesis = 41; // `)`.charCodeAt(0);
-
exports.closeParenthesis = closeParenthesis;
var openSquare = 91; // `[`.charCodeAt(0);
-
exports.openSquare = openSquare;
var closeSquare = 93; // `]`.charCodeAt(0);
-
exports.closeSquare = closeSquare;
var dollar = 36; // `$`.charCodeAt(0);
-
exports.dollar = dollar;
var tilde = 126; // `~`.charCodeAt(0);
-
exports.tilde = tilde;
var caret = 94; // `^`.charCodeAt(0);
-
exports.caret = caret;
var plus = 43; // `+`.charCodeAt(0);
-
exports.plus = plus;
var equals = 61; // `=`.charCodeAt(0);
-
exports.equals = equals;
var pipe = 124; // `|`.charCodeAt(0);
-
exports.pipe = pipe;
var greaterThan = 62; // `>`.charCodeAt(0);
-
exports.greaterThan = greaterThan;
var space = 32; // ` `.charCodeAt(0);
-
exports.space = space;
var singleQuote = 39; // `'`.charCodeAt(0);
-
exports.singleQuote = singleQuote;
var doubleQuote = 34; // `"`.charCodeAt(0);
-
exports.doubleQuote = doubleQuote;
var slash = 47; // `/`.charCodeAt(0);
-
exports.slash = slash;
var bang = 33; // `!`.charCodeAt(0);
-
exports.bang = bang;
var backslash = 92; // '\\'.charCodeAt(0);
-
exports.backslash = backslash;
var cr = 13; // '\r'.charCodeAt(0);
-
exports.cr = cr;
var feed = 12; // '\f'.charCodeAt(0);
-
exports.feed = feed;
var newline = 10; // '\n'.charCodeAt(0);
-
exports.newline = newline;
var tab = 9; // '\t'.charCodeAt(0);
-// Expose aliases primarily for readability.
+// Expose aliases primarily for readability.
exports.tab = tab;
-var str = singleQuote; // No good single character representation!
+var str = singleQuote;
+// No good single character representation!
exports.str = str;
var comment = -1;
exports.comment = comment;
diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/tokenize.js b/deps/npm/node_modules/postcss-selector-parser/dist/tokenize.js
index bee9fee632..bf61d261b5 100644
--- a/deps/npm/node_modules/postcss-selector-parser/dist/tokenize.js
+++ b/deps/npm/node_modules/postcss-selector-parser/dist/tokenize.js
@@ -1,39 +1,30 @@
"use strict";
exports.__esModule = true;
-exports["default"] = tokenize;
exports.FIELDS = void 0;
-
+exports["default"] = tokenize;
var t = _interopRequireWildcard(require("./tokenTypes"));
-
var _unescapable, _wordDelimiters;
-
-function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
-
-function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
-
+function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
+function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
var unescapable = (_unescapable = {}, _unescapable[t.tab] = true, _unescapable[t.newline] = true, _unescapable[t.cr] = true, _unescapable[t.feed] = true, _unescapable);
var wordDelimiters = (_wordDelimiters = {}, _wordDelimiters[t.space] = true, _wordDelimiters[t.tab] = true, _wordDelimiters[t.newline] = true, _wordDelimiters[t.cr] = true, _wordDelimiters[t.feed] = true, _wordDelimiters[t.ampersand] = true, _wordDelimiters[t.asterisk] = true, _wordDelimiters[t.bang] = true, _wordDelimiters[t.comma] = true, _wordDelimiters[t.colon] = true, _wordDelimiters[t.semicolon] = true, _wordDelimiters[t.openParenthesis] = true, _wordDelimiters[t.closeParenthesis] = true, _wordDelimiters[t.openSquare] = true, _wordDelimiters[t.closeSquare] = true, _wordDelimiters[t.singleQuote] = true, _wordDelimiters[t.doubleQuote] = true, _wordDelimiters[t.plus] = true, _wordDelimiters[t.pipe] = true, _wordDelimiters[t.tilde] = true, _wordDelimiters[t.greaterThan] = true, _wordDelimiters[t.equals] = true, _wordDelimiters[t.dollar] = true, _wordDelimiters[t.caret] = true, _wordDelimiters[t.slash] = true, _wordDelimiters);
var hex = {};
var hexChars = "0123456789abcdefABCDEF";
-
for (var i = 0; i < hexChars.length; i++) {
hex[hexChars.charCodeAt(i)] = true;
}
+
/**
* Returns the last index of the bar css word
* @param {string} css The string in which the word begins
* @param {number} start The index into the string where word's first letter occurs
*/
-
-
function consumeWord(css, start) {
var next = start;
var code;
-
do {
code = css.charCodeAt(next);
-
if (wordDelimiters[code]) {
return next - 1;
} else if (code === t.backslash) {
@@ -43,31 +34,28 @@ function consumeWord(css, start) {
next++;
}
} while (next < css.length);
-
return next - 1;
}
+
/**
* Returns the last index of the escape sequence
* @param {string} css The string in which the sequence begins
* @param {number} start The index into the string where escape character (`\`) occurs.
*/
-
-
function consumeEscape(css, start) {
var next = start;
var code = css.charCodeAt(next + 1);
-
- if (unescapable[code]) {// just consume the escape char
+ if (unescapable[code]) {
+ // just consume the escape char
} else if (hex[code]) {
- var hexDigits = 0; // consume up to 6 hex chars
-
+ var hexDigits = 0;
+ // consume up to 6 hex chars
do {
next++;
hexDigits++;
code = css.charCodeAt(next + 1);
- } while (hex[code] && hexDigits < 6); // if fewer than 6 hex chars, a trailing space ends the escape
-
-
+ } while (hex[code] && hexDigits < 6);
+ // if fewer than 6 hex chars, a trailing space ends the escape
if (hexDigits < 6 && code === t.space) {
next++;
}
@@ -75,10 +63,8 @@ function consumeEscape(css, start) {
// the next char is part of the current word
next++;
}
-
return next;
}
-
var FIELDS = {
TYPE: 0,
START_LINE: 1,
@@ -89,18 +75,16 @@ var FIELDS = {
END_POS: 6
};
exports.FIELDS = FIELDS;
-
function tokenize(input) {
var tokens = [];
var css = input.css.valueOf();
var _css = css,
- length = _css.length;
+ length = _css.length;
var offset = -1;
var line = 1;
var start = 0;
var end = 0;
var code, content, endColumn, endLine, escaped, escapePos, last, lines, next, nextLine, nextOffset, quote, tokenType;
-
function unclosed(what, fix) {
if (input.safe) {
// fyi: this is never set to true.
@@ -110,15 +94,12 @@ function tokenize(input) {
throw input.error('Unclosed ' + what, line, start - offset, start);
}
}
-
while (start < length) {
code = css.charCodeAt(start);
-
if (code === t.newline) {
offset = start;
line += 1;
}
-
switch (code) {
case t.space:
case t.tab:
@@ -126,41 +107,35 @@ function tokenize(input) {
case t.cr:
case t.feed:
next = start;
-
do {
next += 1;
code = css.charCodeAt(next);
-
if (code === t.newline) {
offset = next;
line += 1;
}
} while (code === t.space || code === t.newline || code === t.tab || code === t.cr || code === t.feed);
-
tokenType = t.space;
endLine = line;
endColumn = next - offset - 1;
end = next;
break;
-
case t.plus:
case t.greaterThan:
case t.tilde:
case t.pipe:
next = start;
-
do {
next += 1;
code = css.charCodeAt(next);
} while (code === t.plus || code === t.greaterThan || code === t.tilde || code === t.pipe);
-
tokenType = t.combinator;
endLine = line;
endColumn = start - offset;
end = next;
break;
- // Consume these characters as single tokens.
+ // Consume these characters as single tokens.
case t.asterisk:
case t.ampersand:
case t.bang:
@@ -180,46 +155,36 @@ function tokenize(input) {
endColumn = start - offset;
end = next + 1;
break;
-
case t.singleQuote:
case t.doubleQuote:
quote = code === t.singleQuote ? "'" : '"';
next = start;
-
do {
escaped = false;
next = css.indexOf(quote, next + 1);
-
if (next === -1) {
unclosed('quote', quote);
}
-
escapePos = next;
-
while (css.charCodeAt(escapePos - 1) === t.backslash) {
escapePos -= 1;
escaped = !escaped;
}
} while (escaped);
-
tokenType = t.str;
endLine = line;
endColumn = start - offset;
end = next + 1;
break;
-
default:
if (code === t.slash && css.charCodeAt(start + 1) === t.asterisk) {
next = css.indexOf('*/', start + 2) + 1;
-
if (next === 0) {
unclosed('comment', '*/');
}
-
content = css.slice(start, next + 1);
lines = content.split('\n');
last = lines.length - 1;
-
if (last > 0) {
nextLine = line + last;
nextOffset = next - lines[last].length;
@@ -227,7 +192,6 @@ function tokenize(input) {
nextLine = line;
nextOffset = offset;
}
-
tokenType = t.comment;
line = nextLine;
endLine = nextLine;
@@ -244,28 +208,32 @@ function tokenize(input) {
endLine = line;
endColumn = next - offset;
}
-
end = next + 1;
break;
- } // Ensure that the token structure remains consistent
-
+ }
- tokens.push([tokenType, // [0] Token type
- line, // [1] Starting line
- start - offset, // [2] Starting column
- endLine, // [3] Ending line
- endColumn, // [4] Ending column
- start, // [5] Start position / Source index
+ // Ensure that the token structure remains consistent
+ tokens.push([tokenType,
+ // [0] Token type
+ line,
+ // [1] Starting line
+ start - offset,
+ // [2] Starting column
+ endLine,
+ // [3] Ending line
+ endColumn,
+ // [4] Ending column
+ start,
+ // [5] Start position / Source index
end // [6] End position
- ]); // Reset offset for the next token
+ ]);
+ // Reset offset for the next token
if (nextOffset) {
offset = nextOffset;
nextOffset = null;
}
-
start = end;
}
-
return tokens;
} \ No newline at end of file
diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/util/ensureObject.js b/deps/npm/node_modules/postcss-selector-parser/dist/util/ensureObject.js
index 3472e07522..494941adaf 100644
--- a/deps/npm/node_modules/postcss-selector-parser/dist/util/ensureObject.js
+++ b/deps/npm/node_modules/postcss-selector-parser/dist/util/ensureObject.js
@@ -2,21 +2,16 @@
exports.__esModule = true;
exports["default"] = ensureObject;
-
function ensureObject(obj) {
for (var _len = arguments.length, props = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
props[_key - 1] = arguments[_key];
}
-
while (props.length > 0) {
var prop = props.shift();
-
if (!obj[prop]) {
obj[prop] = {};
}
-
obj = obj[prop];
}
}
-
module.exports = exports.default; \ No newline at end of file
diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/util/getProp.js b/deps/npm/node_modules/postcss-selector-parser/dist/util/getProp.js
index 53e07c9025..a2b7a07307 100644
--- a/deps/npm/node_modules/postcss-selector-parser/dist/util/getProp.js
+++ b/deps/npm/node_modules/postcss-selector-parser/dist/util/getProp.js
@@ -2,23 +2,17 @@
exports.__esModule = true;
exports["default"] = getProp;
-
function getProp(obj) {
for (var _len = arguments.length, props = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
props[_key - 1] = arguments[_key];
}
-
while (props.length > 0) {
var prop = props.shift();
-
if (!obj[prop]) {
return undefined;
}
-
obj = obj[prop];
}
-
return obj;
}
-
module.exports = exports.default; \ No newline at end of file
diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/util/index.js b/deps/npm/node_modules/postcss-selector-parser/dist/util/index.js
index 043fda8c64..f96ec11b6d 100644
--- a/deps/npm/node_modules/postcss-selector-parser/dist/util/index.js
+++ b/deps/npm/node_modules/postcss-selector-parser/dist/util/index.js
@@ -1,22 +1,13 @@
"use strict";
exports.__esModule = true;
-exports.stripComments = exports.ensureObject = exports.getProp = exports.unesc = void 0;
-
+exports.unesc = exports.stripComments = exports.getProp = exports.ensureObject = void 0;
var _unesc = _interopRequireDefault(require("./unesc"));
-
exports.unesc = _unesc["default"];
-
var _getProp = _interopRequireDefault(require("./getProp"));
-
exports.getProp = _getProp["default"];
-
var _ensureObject = _interopRequireDefault(require("./ensureObject"));
-
exports.ensureObject = _ensureObject["default"];
-
var _stripComments = _interopRequireDefault(require("./stripComments"));
-
exports.stripComments = _stripComments["default"];
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } \ No newline at end of file
diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/util/stripComments.js b/deps/npm/node_modules/postcss-selector-parser/dist/util/stripComments.js
index c74f1fecdc..0baa0e07eb 100644
--- a/deps/npm/node_modules/postcss-selector-parser/dist/util/stripComments.js
+++ b/deps/npm/node_modules/postcss-selector-parser/dist/util/stripComments.js
@@ -2,26 +2,20 @@
exports.__esModule = true;
exports["default"] = stripComments;
-
function stripComments(str) {
var s = "";
var commentStart = str.indexOf("/*");
var lastEnd = 0;
-
while (commentStart >= 0) {
s = s + str.slice(lastEnd, commentStart);
var commentEnd = str.indexOf("*/", commentStart + 2);
-
if (commentEnd < 0) {
return s;
}
-
lastEnd = commentEnd + 2;
commentStart = str.indexOf("/*", lastEnd);
}
-
s = s + str.slice(lastEnd);
return s;
}
-
module.exports = exports.default; \ No newline at end of file
diff --git a/deps/npm/node_modules/postcss-selector-parser/dist/util/unesc.js b/deps/npm/node_modules/postcss-selector-parser/dist/util/unesc.js
index e4fac839dd..d5d960448b 100644
--- a/deps/npm/node_modules/postcss-selector-parser/dist/util/unesc.js
+++ b/deps/npm/node_modules/postcss-selector-parser/dist/util/unesc.js
@@ -2,7 +2,6 @@
exports.__esModule = true;
exports["default"] = unesc;
-
// Many thanks for this post which made this migration much easier.
// https://mathiasbynens.be/notes/css-escapes
@@ -15,79 +14,63 @@ function gobbleHex(str) {
var lower = str.toLowerCase();
var hex = '';
var spaceTerminated = false;
-
for (var i = 0; i < 6 && lower[i] !== undefined; i++) {
- var code = lower.charCodeAt(i); // check to see if we are dealing with a valid hex char [a-f|0-9]
-
- var valid = code >= 97 && code <= 102 || code >= 48 && code <= 57; // https://drafts.csswg.org/css-syntax/#consume-escaped-code-point
-
+ var code = lower.charCodeAt(i);
+ // check to see if we are dealing with a valid hex char [a-f|0-9]
+ var valid = code >= 97 && code <= 102 || code >= 48 && code <= 57;
+ // https://drafts.csswg.org/css-syntax/#consume-escaped-code-point
spaceTerminated = code === 32;
-
if (!valid) {
break;
}
-
hex += lower[i];
}
-
if (hex.length === 0) {
return undefined;
}
-
var codePoint = parseInt(hex, 16);
- var isSurrogate = codePoint >= 0xD800 && codePoint <= 0xDFFF; // Add special case for
+ var isSurrogate = codePoint >= 0xD800 && codePoint <= 0xDFFF;
+ // Add special case for
// "If this number is zero, or is for a surrogate, or is greater than the maximum allowed code point"
// https://drafts.csswg.org/css-syntax/#maximum-allowed-code-point
-
if (isSurrogate || codePoint === 0x0000 || codePoint > 0x10FFFF) {
return ["\uFFFD", hex.length + (spaceTerminated ? 1 : 0)];
}
-
return [String.fromCodePoint(codePoint), hex.length + (spaceTerminated ? 1 : 0)];
}
-
var CONTAINS_ESCAPE = /\\/;
-
function unesc(str) {
var needToProcess = CONTAINS_ESCAPE.test(str);
-
if (!needToProcess) {
return str;
}
-
var ret = "";
-
for (var i = 0; i < str.length; i++) {
if (str[i] === "\\") {
var gobbled = gobbleHex(str.slice(i + 1, i + 7));
-
if (gobbled !== undefined) {
ret += gobbled[0];
i += gobbled[1];
continue;
- } // Retain a pair of \\ if double escaped `\\\\`
- // https://github.com/postcss/postcss-selector-parser/commit/268c9a7656fb53f543dc620aa5b73a30ec3ff20e
-
+ }
+ // Retain a pair of \\ if double escaped `\\\\`
+ // https://github.com/postcss/postcss-selector-parser/commit/268c9a7656fb53f543dc620aa5b73a30ec3ff20e
if (str[i + 1] === "\\") {
ret += "\\";
i++;
continue;
- } // if \\ is at the end of the string retain it
- // https://github.com/postcss/postcss-selector-parser/commit/01a6b346e3612ce1ab20219acc26abdc259ccefb
-
+ }
+ // if \\ is at the end of the string retain it
+ // https://github.com/postcss/postcss-selector-parser/commit/01a6b346e3612ce1ab20219acc26abdc259ccefb
if (str.length === i + 1) {
ret += str[i];
}
-
continue;
}
-
ret += str[i];
}
-
return ret;
}
-
module.exports = exports.default; \ No newline at end of file
diff --git a/deps/npm/node_modules/postcss-selector-parser/package.json b/deps/npm/node_modules/postcss-selector-parser/package.json
index 9655072779..ff9c40960f 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.0.11",
+ "version": "6.0.12",
"devDependencies": {
"@babel/cli": "^7.11.6",
"@babel/core": "^7.11.6",
@@ -9,13 +9,13 @@
"@babel/plugin-proposal-class-properties": "^7.10.4",
"@babel/preset-env": "^7.11.5",
"@babel/register": "^7.11.5",
- "ava": "^3.12.1",
+ "ava": "^5.1.0",
"babel-plugin-add-module-exports": "^1.0.4",
"coveralls": "^3.1.0",
- "del-cli": "^3.0.1",
- "eslint": "^7.9.0",
- "eslint-plugin-import": "^2.22.0",
- "glob": "^7.1.6",
+ "del-cli": "^5.0.0",
+ "eslint": "^8.28.0",
+ "eslint-plugin-import": "^2.26.0",
+ "glob": "^8.0.3",
"minimist": "^1.2.5",
"nyc": "^15.1.0",
"postcss": "^8.0.0",
@@ -37,7 +37,7 @@
"prepare": "del-cli dist && BABEL_ENV=publish babel src --out-dir dist --ignore /__tests__/",
"lintfix": "eslint --fix src",
"report": "nyc report --reporter=html",
- "test": "nyc ava src/__tests__/*.js ",
+ "test": "nyc ava src/__tests__/*.mjs",
"testone": "ava"
},
"dependencies": {
@@ -67,7 +67,8 @@
"@babel/register"
],
"concurrency": 5,
- "timeout": "25s"
+ "timeout": "25s",
+ "nodeArguments": []
},
"nyc": {
"exclude": [
diff --git a/deps/npm/node_modules/read-package-json/lib/read-json.js b/deps/npm/node_modules/read-package-json/lib/read-json.js
index e47a1bb2fe..aaf24e94a7 100644
--- a/deps/npm/node_modules/read-package-json/lib/read-json.js
+++ b/deps/npm/node_modules/read-package-json/lib/read-json.js
@@ -2,7 +2,7 @@ var fs = require('fs')
var path = require('path')
-var glob = require('glob')
+var { glob } = require('glob')
var normalizeData = require('normalize-package-data')
var safeJSON = require('json-parse-even-better-errors')
var util = require('util')
@@ -67,13 +67,15 @@ function jsonClone (obj) {
} else if (Array.isArray(obj)) {
var newarr = new Array(obj.length)
for (var ii in obj) {
- newarr[ii] = obj[ii]
+ newarr[ii] = jsonClone(obj[ii])
}
+ return newarr
} else if (typeof obj === 'object') {
var newobj = {}
for (var kk in obj) {
- newobj[kk] = jsonClone[kk]
+ newobj[kk] = jsonClone(obj[kk])
}
+ return newobj
} else {
return obj
}
@@ -115,7 +117,6 @@ function parseJson (file, er, d, log, strict, cb) {
return cb(parseError(jsonErr, file))
}
}
-
extrasCached(file, d, data, log, strict, cb)
}
@@ -505,7 +506,7 @@ function final (file, data, log, strict, cb) {
}
function fillTypes (file, data, cb) {
- var index = data.main ? data.main : 'index.js'
+ var index = data.main || 'index.js'
if (typeof index !== 'string') {
return cb(new TypeError('The "main" attribute must be of type string.'))
diff --git a/deps/npm/node_modules/read-package-json/package.json b/deps/npm/node_modules/read-package-json/package.json
index d1618e3f89..a2f93088f3 100644
--- a/deps/npm/node_modules/read-package-json/package.json
+++ b/deps/npm/node_modules/read-package-json/package.json
@@ -1,6 +1,6 @@
{
"name": "read-package-json",
- "version": "6.0.1",
+ "version": "6.0.3",
"author": "GitHub Inc.",
"description": "The thing npm uses to read package.json files with semantics and defaults and validation",
"repository": {
@@ -23,14 +23,14 @@
"template-oss-apply": "template-oss-apply --force"
},
"dependencies": {
- "glob": "^9.3.0",
+ "glob": "^10.2.2",
"json-parse-even-better-errors": "^3.0.0",
"normalize-package-data": "^5.0.0",
"npm-normalize-package-bin": "^3.0.0"
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.12.0",
+ "@npmcli/template-oss": "4.14.1",
"tap": "^16.0.1"
},
"license": "ISC",
@@ -53,6 +53,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.12.0"
+ "version": "4.14.1",
+ "publish": "true"
}
}
diff --git a/deps/npm/node_modules/read/lib/read.js b/deps/npm/node_modules/read/lib/read.js
index 882b11c285..92ed415726 100644
--- a/deps/npm/node_modules/read/lib/read.js
+++ b/deps/npm/node_modules/read/lib/read.js
@@ -5,6 +5,7 @@ module.exports = async function read ({
default: def = '',
input = process.stdin,
output = process.stdout,
+ completer,
prompt = '',
silent,
timeout,
@@ -35,7 +36,7 @@ module.exports = async function read ({
output = m
return new Promise((resolve, reject) => {
- const rl = readline.createInterface({ input, output, terminal })
+ const rl = readline.createInterface({ input, output, terminal, silent: true, completer })
const timer = timeout && setTimeout(() => onError(new Error('timed out')), timeout)
output.unmute()
@@ -66,11 +67,10 @@ module.exports = async function read ({
rl.on('line', (line) => {
if (silent && terminal) {
output.unmute()
- output.write('\r\n')
}
done()
// truncate the \n at the end.
- const res = line.replace(/\r?\n$/, '') || def || ''
+ const res = line.replace(/\r?\n?$/, '') || def || ''
return resolve(res)
})
diff --git a/deps/npm/node_modules/read/package.json b/deps/npm/node_modules/read/package.json
index 7f8d7fc249..4d41f91878 100644
--- a/deps/npm/node_modules/read/package.json
+++ b/deps/npm/node_modules/read/package.json
@@ -1,13 +1,13 @@
{
"name": "read",
- "version": "2.0.0",
+ "version": "2.1.0",
"main": "lib/read.js",
"dependencies": {
"mute-stream": "~1.0.0"
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.11.0",
+ "@npmcli/template-oss": "4.13.0",
"tap": "^16.3.0"
},
"engines": {
@@ -35,7 +35,8 @@
],
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.11.0"
+ "version": "4.13.0",
+ "publish": "true"
},
"tap": {
"statements": 77,
diff --git a/deps/npm/node_modules/semver/README.md b/deps/npm/node_modules/semver/README.md
index df54e7a093..33c762cb22 100644
--- a/deps/npm/node_modules/semver/README.md
+++ b/deps/npm/node_modules/semver/README.md
@@ -110,6 +110,9 @@ Options:
-l --loose
Interpret versions and ranges loosely
+-n <0|1>
+ This is the base to be used for the prerelease identifier.
+
-p --include-prerelease
Always include prerelease versions in range matching
@@ -232,6 +235,35 @@ $ semver 1.2.4-beta.0 -i prerelease
1.2.4-beta.1
```
+#### Prerelease Identifier Base
+
+The method `.inc` takes an optional parameter 'identifierBase' string
+that will let you let your prerelease number as zero-based or one-based.
+Set to `false` to omit the prerelease number altogether.
+If you do not specify this parameter, it will default to zero-based.
+
+```javascript
+semver.inc('1.2.3', 'prerelease', 'beta', '1')
+// '1.2.4-beta.1'
+```
+
+```javascript
+semver.inc('1.2.3', 'prerelease', 'beta', false)
+// '1.2.4-beta'
+```
+
+command-line example:
+
+```bash
+$ semver 1.2.3 -i prerelease --preid beta -n 1
+1.2.4-beta.1
+```
+
+```bash
+$ semver 1.2.3 -i prerelease --preid beta -n false
+1.2.4-beta
+```
+
### Advanced Range Syntax
Advanced range syntax desugars to primitive comparators in
@@ -513,6 +545,40 @@ ex.
* `s.clean(' 2.1.5 ')`: `'2.1.5'`
* `s.clean('~1.0.0')`: `null`
+## Constants
+
+As a convenience, helper constants are exported to provide information about what `node-semver` supports:
+
+### `RELEASE_TYPES`
+
+- major
+- premajor
+- minor
+- preminor
+- patch
+- prepatch
+- prerelease
+
+```
+const semver = require('semver');
+
+if (semver.RELEASE_TYPES.includes(arbitraryUserInput)) {
+ console.log('This is a valid release type!');
+} else {
+ console.warn('This is NOT a valid release type!');
+}
+```
+
+### `SEMVER_SPEC_VERSION`
+
+2.0.0
+
+```
+const semver = require('semver');
+
+console.log('We are currently using the semver specification version:', semver.SEMVER_SPEC_VERSION);
+```
+
## Exported Modules
<!--
diff --git a/deps/npm/node_modules/semver/bin/semver.js b/deps/npm/node_modules/semver/bin/semver.js
index 8d1b55720e..242b7ade73 100755
--- a/deps/npm/node_modules/semver/bin/semver.js
+++ b/deps/npm/node_modules/semver/bin/semver.js
@@ -23,7 +23,10 @@ let rtl = false
let identifier
+let identifierBase
+
const semver = require('../')
+const parseOptions = require('../internal/parse-options')
let reverse = false
@@ -71,6 +74,12 @@ const main = () => {
case '-r': case '--range':
range.push(argv.shift())
break
+ case '-n':
+ identifierBase = argv.shift()
+ if (identifierBase === 'false') {
+ identifierBase = false
+ }
+ break
case '-c': case '--coerce':
coerce = true
break
@@ -88,7 +97,7 @@ const main = () => {
}
}
- options = { loose: loose, includePrerelease: includePrerelease, rtl: rtl }
+ options = parseOptions({ loose, includePrerelease, rtl })
versions = versions.map((v) => {
return coerce ? (semver.coerce(v, options) || { version: v }).version : v
@@ -127,7 +136,7 @@ const success = () => {
}).map((v) => {
return semver.clean(v, options)
}).map((v) => {
- return inc ? semver.inc(v, inc, options, identifier) : v
+ return inc ? semver.inc(v, inc, options, identifier, identifierBase) : v
}).forEach((v, i, _) => {
console.log(v)
})
@@ -172,6 +181,11 @@ Options:
--ltr
Coerce version strings left to right (default)
+-n <base>
+ Base number to be used for the prerelease identifier.
+ Can be either 0 or 1, or false to omit the number altogether.
+ Defaults to 0.
+
Program exits successfully if any valid version satisfies
all supplied ranges, and prints all satisfying versions.
diff --git a/deps/npm/node_modules/semver/classes/comparator.js b/deps/npm/node_modules/semver/classes/comparator.js
index 62cd204d9b..2146c884bd 100644
--- a/deps/npm/node_modules/semver/classes/comparator.js
+++ b/deps/npm/node_modules/semver/classes/comparator.js
@@ -78,13 +78,6 @@ class Comparator {
throw new TypeError('a Comparator is required')
}
- if (!options || typeof options !== 'object') {
- options = {
- loose: !!options,
- includePrerelease: false,
- }
- }
-
if (this.operator === '') {
if (this.value === '') {
return true
@@ -97,32 +90,43 @@ class Comparator {
return new Range(this.value, options).test(comp.semver)
}
- const sameDirectionIncreasing =
- (this.operator === '>=' || this.operator === '>') &&
- (comp.operator === '>=' || comp.operator === '>')
- const sameDirectionDecreasing =
- (this.operator === '<=' || this.operator === '<') &&
- (comp.operator === '<=' || comp.operator === '<')
- const sameSemVer = this.semver.version === comp.semver.version
- const differentDirectionsInclusive =
- (this.operator === '>=' || this.operator === '<=') &&
- (comp.operator === '>=' || comp.operator === '<=')
- const oppositeDirectionsLessThan =
- cmp(this.semver, '<', comp.semver, options) &&
- (this.operator === '>=' || this.operator === '>') &&
- (comp.operator === '<=' || comp.operator === '<')
- const oppositeDirectionsGreaterThan =
- cmp(this.semver, '>', comp.semver, options) &&
- (this.operator === '<=' || this.operator === '<') &&
- (comp.operator === '>=' || comp.operator === '>')
-
- return (
- sameDirectionIncreasing ||
- sameDirectionDecreasing ||
- (sameSemVer && differentDirectionsInclusive) ||
- oppositeDirectionsLessThan ||
- oppositeDirectionsGreaterThan
- )
+ options = parseOptions(options)
+
+ // Special cases where nothing can possibly be lower
+ if (options.includePrerelease &&
+ (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {
+ return false
+ }
+ if (!options.includePrerelease &&
+ (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {
+ return false
+ }
+
+ // Same direction increasing (> or >=)
+ if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {
+ return true
+ }
+ // Same direction decreasing (< or <=)
+ if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {
+ return true
+ }
+ // same SemVer and both sides are inclusive (<= or >=)
+ if (
+ (this.semver.version === comp.semver.version) &&
+ this.operator.includes('=') && comp.operator.includes('=')) {
+ return true
+ }
+ // opposite directions less than
+ if (cmp(this.semver, '<', comp.semver, options) &&
+ this.operator.startsWith('>') && comp.operator.startsWith('<')) {
+ return true
+ }
+ // opposite directions greater than
+ if (cmp(this.semver, '>', comp.semver, options) &&
+ this.operator.startsWith('<') && comp.operator.startsWith('>')) {
+ return true
+ }
+ return false
}
}
diff --git a/deps/npm/node_modules/semver/classes/range.js b/deps/npm/node_modules/semver/classes/range.js
index a791d91251..d9e866de4d 100644
--- a/deps/npm/node_modules/semver/classes/range.js
+++ b/deps/npm/node_modules/semver/classes/range.js
@@ -81,8 +81,10 @@ class Range {
// memoize range parsing for performance.
// this is a very hot path, and fully deterministic.
- const memoOpts = Object.keys(this.options).join(',')
- const memoKey = `parseRange:${memoOpts}:${range}`
+ const memoOpts =
+ (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |
+ (this.options.loose && FLAG_LOOSE)
+ const memoKey = memoOpts + ':' + range
const cached = cache.get(memoKey)
if (cached) {
return cached
@@ -190,6 +192,7 @@ class Range {
return false
}
}
+
module.exports = Range
const LRU = require('lru-cache')
@@ -206,6 +209,7 @@ const {
tildeTrimReplace,
caretTrimReplace,
} = require('../internal/re')
+const { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')
const isNullSet = c => c.value === '<0.0.0-0'
const isAny = c => c.value === ''
diff --git a/deps/npm/node_modules/semver/classes/semver.js b/deps/npm/node_modules/semver/classes/semver.js
index af62955194..25ee889d14 100644
--- a/deps/npm/node_modules/semver/classes/semver.js
+++ b/deps/npm/node_modules/semver/classes/semver.js
@@ -16,7 +16,7 @@ class SemVer {
version = version.version
}
} else if (typeof version !== 'string') {
- throw new TypeError(`Invalid Version: ${version}`)
+ throw new TypeError(`Invalid Version: ${require('util').inspect(version)}`)
}
if (version.length > MAX_LENGTH) {
@@ -175,36 +175,36 @@ class SemVer {
// preminor will bump the version up to the next minor release, and immediately
// down to pre-release. premajor and prepatch work the same way.
- inc (release, identifier) {
+ inc (release, identifier, identifierBase) {
switch (release) {
case 'premajor':
this.prerelease.length = 0
this.patch = 0
this.minor = 0
this.major++
- this.inc('pre', identifier)
+ this.inc('pre', identifier, identifierBase)
break
case 'preminor':
this.prerelease.length = 0
this.patch = 0
this.minor++
- this.inc('pre', identifier)
+ this.inc('pre', identifier, identifierBase)
break
case 'prepatch':
// If this is already a prerelease, it will bump to the next version
// drop any prereleases that might already exist, since they are not
// relevant at this point.
this.prerelease.length = 0
- this.inc('patch', identifier)
- this.inc('pre', identifier)
+ this.inc('patch', identifier, identifierBase)
+ this.inc('pre', identifier, identifierBase)
break
// If the input is a non-prerelease version, this acts the same as
// prepatch.
case 'prerelease':
if (this.prerelease.length === 0) {
- this.inc('patch', identifier)
+ this.inc('patch', identifier, identifierBase)
}
- this.inc('pre', identifier)
+ this.inc('pre', identifier, identifierBase)
break
case 'major':
@@ -246,9 +246,15 @@ class SemVer {
break
// This probably shouldn't be used publicly.
// 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.
- case 'pre':
+ case 'pre': {
+ const base = Number(identifierBase) ? 1 : 0
+
+ if (!identifier && identifierBase === false) {
+ throw new Error('invalid increment argument: identifier is empty')
+ }
+
if (this.prerelease.length === 0) {
- this.prerelease = [0]
+ this.prerelease = [base]
} else {
let i = this.prerelease.length
while (--i >= 0) {
@@ -259,22 +265,29 @@ class SemVer {
}
if (i === -1) {
// didn't increment anything
- this.prerelease.push(0)
+ if (identifier === this.prerelease.join('.') && identifierBase === false) {
+ throw new Error('invalid increment argument: identifier already exists')
+ }
+ this.prerelease.push(base)
}
}
if (identifier) {
// 1.2.0-beta.1 bumps to 1.2.0-beta.2,
// 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
+ let prerelease = [identifier, base]
+ if (identifierBase === false) {
+ prerelease = [identifier]
+ }
if (compareIdentifiers(this.prerelease[0], identifier) === 0) {
if (isNaN(this.prerelease[1])) {
- this.prerelease = [identifier, 0]
+ this.prerelease = prerelease
}
} else {
- this.prerelease = [identifier, 0]
+ this.prerelease = prerelease
}
}
break
-
+ }
default:
throw new Error(`invalid increment argument: ${release}`)
}
diff --git a/deps/npm/node_modules/semver/functions/diff.js b/deps/npm/node_modules/semver/functions/diff.js
index 87200ef3b8..fafc11c40d 100644
--- a/deps/npm/node_modules/semver/functions/diff.js
+++ b/deps/npm/node_modules/semver/functions/diff.js
@@ -1,23 +1,54 @@
-const parse = require('./parse')
-const eq = require('./eq')
+const parse = require('./parse.js')
const diff = (version1, version2) => {
- if (eq(version1, version2)) {
+ const v1 = parse(version1, null, true)
+ const v2 = parse(version2, null, true)
+ const comparison = v1.compare(v2)
+
+ if (comparison === 0) {
return null
- } else {
- const v1 = parse(version1)
- const v2 = parse(version2)
- const hasPre = v1.prerelease.length || v2.prerelease.length
- const prefix = hasPre ? 'pre' : ''
- const defaultResult = hasPre ? 'prerelease' : ''
- for (const key in v1) {
- if (key === 'major' || key === 'minor' || key === 'patch') {
- if (v1[key] !== v2[key]) {
- return prefix + key
- }
- }
- }
- return defaultResult // may be undefined
}
+
+ const v1Higher = comparison > 0
+ const highVersion = v1Higher ? v1 : v2
+ const lowVersion = v1Higher ? v2 : v1
+ const highHasPre = !!highVersion.prerelease.length
+
+ // add the `pre` prefix if we are going to a prerelease version
+ const prefix = highHasPre ? 'pre' : ''
+
+ if (v1.major !== v2.major) {
+ return prefix + 'major'
+ }
+
+ if (v1.minor !== v2.minor) {
+ return prefix + 'minor'
+ }
+
+ if (v1.patch !== v2.patch) {
+ return prefix + 'patch'
+ }
+
+ // at this point we know stable versions match but overall versions are not equal,
+ // so either they are both prereleases, or the lower version is a prerelease
+
+ if (highHasPre) {
+ // high and low are preleases
+ return 'prerelease'
+ }
+
+ if (lowVersion.patch) {
+ // anything higher than a patch bump would result in the wrong version
+ return 'patch'
+ }
+
+ if (lowVersion.minor) {
+ // anything higher than a minor bump would result in the wrong version
+ return 'minor'
+ }
+
+ // bumping major/minor/patch all have same result
+ return 'major'
}
+
module.exports = diff
diff --git a/deps/npm/node_modules/semver/functions/inc.js b/deps/npm/node_modules/semver/functions/inc.js
index 62d1da2c40..7670b1bea1 100644
--- a/deps/npm/node_modules/semver/functions/inc.js
+++ b/deps/npm/node_modules/semver/functions/inc.js
@@ -1,7 +1,8 @@
const SemVer = require('../classes/semver')
-const inc = (version, release, options, identifier) => {
+const inc = (version, release, options, identifier, identifierBase) => {
if (typeof (options) === 'string') {
+ identifierBase = identifier
identifier = options
options = undefined
}
@@ -10,7 +11,7 @@ const inc = (version, release, options, identifier) => {
return new SemVer(
version instanceof SemVer ? version.version : version,
options
- ).inc(release, identifier).version
+ ).inc(release, identifier, identifierBase).version
} catch (er) {
return null
}
diff --git a/deps/npm/node_modules/semver/functions/parse.js b/deps/npm/node_modules/semver/functions/parse.js
index a66663aa59..459b3b1737 100644
--- a/deps/npm/node_modules/semver/functions/parse.js
+++ b/deps/npm/node_modules/semver/functions/parse.js
@@ -1,32 +1,15 @@
-const { MAX_LENGTH } = require('../internal/constants')
-const { re, t } = require('../internal/re')
const SemVer = require('../classes/semver')
-
-const parseOptions = require('../internal/parse-options')
-const parse = (version, options) => {
- options = parseOptions(options)
-
+const parse = (version, options, throwErrors = false) => {
if (version instanceof SemVer) {
return version
}
-
- if (typeof version !== 'string') {
- return null
- }
-
- if (version.length > MAX_LENGTH) {
- return null
- }
-
- const r = options.loose ? re[t.LOOSE] : re[t.FULL]
- if (!r.test(version)) {
- return null
- }
-
try {
return new SemVer(version, options)
} catch (er) {
- return null
+ if (!throwErrors) {
+ return null
+ }
+ throw er
}
}
diff --git a/deps/npm/node_modules/semver/index.js b/deps/npm/node_modules/semver/index.js
index 4a342c6afe..86d42ac16a 100644
--- a/deps/npm/node_modules/semver/index.js
+++ b/deps/npm/node_modules/semver/index.js
@@ -83,6 +83,7 @@ module.exports = {
src: internalRe.src,
tokens: internalRe.t,
SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,
+ RELEASE_TYPES: constants.RELEASE_TYPES,
compareIdentifiers: identifiers.compareIdentifiers,
rcompareIdentifiers: identifiers.rcompareIdentifiers,
}
diff --git a/deps/npm/node_modules/semver/internal/constants.js b/deps/npm/node_modules/semver/internal/constants.js
index 4f0de59b56..25fab1ea01 100644
--- a/deps/npm/node_modules/semver/internal/constants.js
+++ b/deps/npm/node_modules/semver/internal/constants.js
@@ -9,9 +9,22 @@ const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||
// Max safe segment length for coercion.
const MAX_SAFE_COMPONENT_LENGTH = 16
+const RELEASE_TYPES = [
+ 'major',
+ 'premajor',
+ 'minor',
+ 'preminor',
+ 'patch',
+ 'prepatch',
+ 'prerelease',
+]
+
module.exports = {
- SEMVER_SPEC_VERSION,
MAX_LENGTH,
- MAX_SAFE_INTEGER,
MAX_SAFE_COMPONENT_LENGTH,
+ MAX_SAFE_INTEGER,
+ RELEASE_TYPES,
+ SEMVER_SPEC_VERSION,
+ FLAG_INCLUDE_PRERELEASE: 0b001,
+ FLAG_LOOSE: 0b010,
}
diff --git a/deps/npm/node_modules/semver/internal/parse-options.js b/deps/npm/node_modules/semver/internal/parse-options.js
index bbd9ec77a3..10d64ce06d 100644
--- a/deps/npm/node_modules/semver/internal/parse-options.js
+++ b/deps/npm/node_modules/semver/internal/parse-options.js
@@ -1,11 +1,15 @@
-// parse out just the options we care about so we always get a consistent
-// obj with keys in a consistent order.
-const opts = ['includePrerelease', 'loose', 'rtl']
-const parseOptions = options =>
- !options ? {}
- : typeof options !== 'object' ? { loose: true }
- : opts.filter(k => options[k]).reduce((o, k) => {
- o[k] = true
- return o
- }, {})
+// parse out just the options we care about
+const looseOption = Object.freeze({ loose: true })
+const emptyOpts = Object.freeze({ })
+const parseOptions = options => {
+ if (!options) {
+ return emptyOpts
+ }
+
+ if (typeof options !== 'object') {
+ return looseOption
+ }
+
+ return options
+}
module.exports = parseOptions
diff --git a/deps/npm/node_modules/semver/package.json b/deps/npm/node_modules/semver/package.json
index 72d3f66e8f..0a6095b890 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.3.8",
+ "version": "7.5.0",
"description": "The semantic version parser used by npm.",
"main": "index.js",
"scripts": {
@@ -13,8 +13,8 @@
"template-oss-apply": "template-oss-apply --force"
},
"devDependencies": {
- "@npmcli/eslint-config": "^3.0.1",
- "@npmcli/template-oss": "4.4.4",
+ "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/template-oss": "4.13.0",
"tap": "^16.0.0"
},
"license": "ISC",
@@ -53,9 +53,8 @@
"author": "GitHub Inc.",
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.4.4",
+ "version": "4.13.0",
"engines": ">=10",
- "content": "./scripts",
"ciVersions": [
"10.0.0",
"10.x",
@@ -64,6 +63,7 @@
"16.x",
"18.x"
],
+ "npmSpec": "8",
"distPaths": [
"classes/",
"functions/",
@@ -81,6 +81,7 @@
"/index.js",
"/preload.js",
"/range.bnf"
- ]
+ ],
+ "publish": "true"
}
}
diff --git a/deps/npm/node_modules/semver/ranges/intersects.js b/deps/npm/node_modules/semver/ranges/intersects.js
index 3d1a6f31df..e0e9b7ce00 100644
--- a/deps/npm/node_modules/semver/ranges/intersects.js
+++ b/deps/npm/node_modules/semver/ranges/intersects.js
@@ -2,6 +2,6 @@ const Range = require('../classes/range')
const intersects = (r1, r2, options) => {
r1 = new Range(r1, options)
r2 = new Range(r2, options)
- return r1.intersects(r2)
+ return r1.intersects(r2, options)
}
module.exports = intersects
diff --git a/deps/npm/node_modules/semver/ranges/subset.js b/deps/npm/node_modules/semver/ranges/subset.js
index e0dea43c2b..1e5c26837c 100644
--- a/deps/npm/node_modules/semver/ranges/subset.js
+++ b/deps/npm/node_modules/semver/ranges/subset.js
@@ -68,6 +68,9 @@ const subset = (sub, dom, options = {}) => {
return true
}
+const minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')]
+const minimumVersion = [new Comparator('>=0.0.0')]
+
const simpleSubset = (sub, dom, options) => {
if (sub === dom) {
return true
@@ -77,9 +80,9 @@ const simpleSubset = (sub, dom, options) => {
if (dom.length === 1 && dom[0].semver === ANY) {
return true
} else if (options.includePrerelease) {
- sub = [new Comparator('>=0.0.0-0')]
+ sub = minimumVersionWithPreRelease
} else {
- sub = [new Comparator('>=0.0.0')]
+ sub = minimumVersion
}
}
@@ -87,7 +90,7 @@ const simpleSubset = (sub, dom, options) => {
if (options.includePrerelease) {
return true
} else {
- dom = [new Comparator('>=0.0.0')]
+ dom = minimumVersion
}
}
diff --git a/deps/npm/node_modules/shebang-command/index.js b/deps/npm/node_modules/shebang-command/index.js
new file mode 100644
index 0000000000..f35db30851
--- /dev/null
+++ b/deps/npm/node_modules/shebang-command/index.js
@@ -0,0 +1,19 @@
+'use strict';
+const shebangRegex = require('shebang-regex');
+
+module.exports = (string = '') => {
+ const match = string.match(shebangRegex);
+
+ if (!match) {
+ return null;
+ }
+
+ const [path, argument] = match[0].replace(/#! ?/, '').split(' ');
+ const binary = path.split('/').pop();
+
+ if (binary === 'env') {
+ return argument;
+ }
+
+ return argument ? `${binary} ${argument}` : binary;
+};
diff --git a/deps/npm/node_modules/shebang-command/license b/deps/npm/node_modules/shebang-command/license
new file mode 100644
index 0000000000..db6bc32cc7
--- /dev/null
+++ b/deps/npm/node_modules/shebang-command/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Kevin Mårtensson <kevinmartensson@gmail.com> (github.com/kevva)
+
+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/shebang-command/package.json b/deps/npm/node_modules/shebang-command/package.json
new file mode 100644
index 0000000000..18e3c04638
--- /dev/null
+++ b/deps/npm/node_modules/shebang-command/package.json
@@ -0,0 +1,34 @@
+{
+ "name": "shebang-command",
+ "version": "2.0.0",
+ "description": "Get the command from a shebang",
+ "license": "MIT",
+ "repository": "kevva/shebang-command",
+ "author": {
+ "name": "Kevin Mårtensson",
+ "email": "kevinmartensson@gmail.com",
+ "url": "github.com/kevva"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "scripts": {
+ "test": "xo && ava"
+ },
+ "files": [
+ "index.js"
+ ],
+ "keywords": [
+ "cmd",
+ "command",
+ "parse",
+ "shebang"
+ ],
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "devDependencies": {
+ "ava": "^2.3.0",
+ "xo": "^0.24.0"
+ }
+}
diff --git a/deps/npm/node_modules/shebang-regex/index.js b/deps/npm/node_modules/shebang-regex/index.js
new file mode 100644
index 0000000000..63fc4a0b67
--- /dev/null
+++ b/deps/npm/node_modules/shebang-regex/index.js
@@ -0,0 +1,2 @@
+'use strict';
+module.exports = /^#!(.*)/;
diff --git a/deps/npm/node_modules/shebang-regex/license b/deps/npm/node_modules/shebang-regex/license
new file mode 100644
index 0000000000..e7af2f7710
--- /dev/null
+++ b/deps/npm/node_modules/shebang-regex/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (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/shebang-regex/package.json b/deps/npm/node_modules/shebang-regex/package.json
new file mode 100644
index 0000000000..00ab30feee
--- /dev/null
+++ b/deps/npm/node_modules/shebang-regex/package.json
@@ -0,0 +1,35 @@
+{
+ "name": "shebang-regex",
+ "version": "3.0.0",
+ "description": "Regular expression for matching a shebang line",
+ "license": "MIT",
+ "repository": "sindresorhus/shebang-regex",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "sindresorhus.com"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "scripts": {
+ "test": "xo && ava && tsd"
+ },
+ "files": [
+ "index.js",
+ "index.d.ts"
+ ],
+ "keywords": [
+ "regex",
+ "regexp",
+ "shebang",
+ "match",
+ "test",
+ "line"
+ ],
+ "devDependencies": {
+ "ava": "^1.4.1",
+ "tsd": "^0.7.2",
+ "xo": "^0.24.0"
+ }
+}
diff --git a/deps/npm/node_modules/signal-exit/LICENSE.txt b/deps/npm/node_modules/signal-exit/LICENSE.txt
index eead04a121..954f2fa823 100644
--- a/deps/npm/node_modules/signal-exit/LICENSE.txt
+++ b/deps/npm/node_modules/signal-exit/LICENSE.txt
@@ -1,6 +1,6 @@
The ISC License
-Copyright (c) 2015, Contributors
+Copyright (c) 2015-2023 Benjamin Coe, 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
diff --git a/deps/npm/node_modules/signal-exit/dist/cjs/browser.js b/deps/npm/node_modules/signal-exit/dist/cjs/browser.js
new file mode 100644
index 0000000000..614fbf0100
--- /dev/null
+++ b/deps/npm/node_modules/signal-exit/dist/cjs/browser.js
@@ -0,0 +1,10 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.unload = exports.load = exports.onExit = void 0;
+const onExit = () => () => { };
+exports.onExit = onExit;
+const load = () => { };
+exports.load = load;
+const unload = () => { };
+exports.unload = unload;
+//# sourceMappingURL=browser.js.map \ No newline at end of file
diff --git a/deps/npm/node_modules/signal-exit/dist/cjs/index.js b/deps/npm/node_modules/signal-exit/dist/cjs/index.js
new file mode 100644
index 0000000000..5a9ea081d7
--- /dev/null
+++ b/deps/npm/node_modules/signal-exit/dist/cjs/index.js
@@ -0,0 +1,273 @@
+"use strict";
+var _a;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.unload = exports.load = exports.onExit = exports.signals = void 0;
+// Note: since nyc uses this module to output coverage, any lines
+// that are in the direct sync flow of nyc's outputCoverage are
+// ignored, since we can never get coverage for them.
+// grab a reference to node's real process object right away
+const signals_js_1 = require("./signals.js");
+Object.defineProperty(exports, "signals", { enumerable: true, get: function () { return signals_js_1.signals; } });
+const processOk = (process) => !!process &&
+ typeof process === 'object' &&
+ typeof process.removeListener === 'function' &&
+ typeof process.emit === 'function' &&
+ typeof process.reallyExit === 'function' &&
+ typeof process.listeners === 'function' &&
+ typeof process.kill === 'function' &&
+ typeof process.pid === 'number' &&
+ typeof process.on === 'function';
+const kExitEmitter = Symbol.for('signal-exit emitter');
+const global = globalThis;
+const ObjectDefineProperty = Object.defineProperty.bind(Object);
+// teeny tiny ee
+class Emitter {
+ emitted = {
+ afterExit: false,
+ exit: false,
+ };
+ listeners = {
+ afterExit: [],
+ exit: [],
+ };
+ count = 0;
+ id = Math.random();
+ constructor() {
+ if (global[kExitEmitter]) {
+ console.error('reusing global emitter');
+ return global[kExitEmitter];
+ }
+ ObjectDefineProperty(global, kExitEmitter, {
+ value: this,
+ writable: false,
+ enumerable: false,
+ configurable: false,
+ });
+ }
+ on(ev, fn) {
+ this.listeners[ev].push(fn);
+ }
+ removeListener(ev, fn) {
+ const list = this.listeners[ev];
+ const i = list.indexOf(fn);
+ /* c8 ignore start */
+ if (i === -1) {
+ return;
+ }
+ /* c8 ignore stop */
+ if (i === 0 && list.length === 1) {
+ list.length = 0;
+ }
+ else {
+ list.splice(i, 1);
+ }
+ }
+ emit(ev, code, signal) {
+ if (this.emitted[ev]) {
+ return;
+ }
+ this.emitted[ev] = true;
+ for (const fn of this.listeners[ev]) {
+ fn(code, signal);
+ }
+ }
+}
+class SignalExitBase {
+}
+const signalExitWrap = (handler) => {
+ return {
+ onExit(cb, opts) {
+ return handler.onExit(cb, opts);
+ },
+ load() {
+ return handler.load();
+ },
+ unload() {
+ return handler.unload();
+ },
+ };
+};
+class SignalExitFallback extends SignalExitBase {
+ onExit() {
+ return () => { };
+ }
+ load() { }
+ unload() { }
+}
+class SignalExit extends SignalExitBase {
+ // "SIGHUP" throws an `ENOSYS` error on Windows,
+ // so use a supported signal instead
+ /* c8 ignore start */
+ #hupSig = process.platform === 'win32' ? 'SIGINT' : 'SIGHUP';
+ /* c8 ignore stop */
+ #emitter = new Emitter();
+ #process;
+ #originalProcessEmit;
+ #originalProcessReallyExit;
+ #sigListeners = {};
+ #loaded = false;
+ constructor(process) {
+ super();
+ this.#process = process;
+ // { <signal>: <listener fn>, ... }
+ this.#sigListeners = {};
+ for (const sig of signals_js_1.signals) {
+ this.#sigListeners[sig] = () => {
+ // If there are no other listeners, an exit is coming!
+ // Simplest way: remove us and then re-send the signal.
+ // We know that this will kill the process, so we can
+ // safely emit now.
+ const listeners = this.#process.listeners(sig);
+ let { count } = this.#emitter;
+ // This is a workaround for the fact that signal-exit v3 and signal
+ // exit v4 are not aware of each other, and each will attempt to let
+ // the other handle it, so neither of them do. To correct this, we
+ // detect if we're the only handler *except* for previous versions
+ // of signal-exit.
+ /* c8 ignore start */
+ //@ts-ignore
+ if (typeof process.__signal_exit_emitter__ === 'object')
+ count++;
+ /* c8 ignore stop */
+ if (listeners.length === count) {
+ this.unload();
+ this.#emitter.emit('exit', null, sig);
+ this.#emitter.emit('afterExit', null, sig);
+ /* c8 ignore start */
+ process.kill(process.pid, sig === 'SIGHUP' ? this.#hupSig : sig);
+ /* c8 ignore stop */
+ }
+ };
+ }
+ this.#originalProcessReallyExit = process.reallyExit;
+ this.#originalProcessEmit = process.emit;
+ }
+ onExit(cb, opts) {
+ /* c8 ignore start */
+ if (!processOk(this.#process)) {
+ return () => { };
+ }
+ /* c8 ignore stop */
+ if (this.#loaded === false) {
+ this.load();
+ }
+ const ev = opts?.alwaysLast ? 'afterExit' : 'exit';
+ this.#emitter.on(ev, cb);
+ return () => {
+ this.#emitter.removeListener(ev, cb);
+ if (this.#emitter.listeners['exit'].length === 0 &&
+ this.#emitter.listeners['afterExit'].length === 0) {
+ this.unload();
+ }
+ };
+ }
+ load() {
+ if (this.#loaded) {
+ return;
+ }
+ this.#loaded = true;
+ // This is the number of onSignalExit's that are in play.
+ // It's important so that we can count the correct number of
+ // listeners on signals, and don't wait for the other one to
+ // handle it instead of us.
+ this.#emitter.count += 1;
+ for (const sig of signals_js_1.signals) {
+ try {
+ const fn = this.#sigListeners[sig];
+ if (fn)
+ this.#process.on(sig, fn);
+ }
+ catch (_) { }
+ }
+ this.#process.emit = (ev, ...a) => {
+ return this.#processEmit(ev, ...a);
+ };
+ this.#process.reallyExit = (code) => {
+ return this.#processReallyExit(code);
+ };
+ }
+ unload() {
+ if (!this.#loaded) {
+ return;
+ }
+ this.#loaded = false;
+ signals_js_1.signals.forEach(sig => {
+ const listener = this.#sigListeners[sig];
+ /* c8 ignore start */
+ if (!listener) {
+ throw new Error('Listener not defined for signal: ' + sig);
+ }
+ /* c8 ignore stop */
+ try {
+ this.#process.removeListener(sig, listener);
+ /* c8 ignore start */
+ }
+ catch (_) { }
+ /* c8 ignore stop */
+ });
+ this.#process.emit = this.#originalProcessEmit;
+ this.#process.reallyExit = this.#originalProcessReallyExit;
+ this.#emitter.count -= 1;
+ }
+ #processReallyExit(code) {
+ /* c8 ignore start */
+ if (!processOk(this.#process)) {
+ return 0;
+ }
+ this.#process.exitCode = code || 0;
+ /* c8 ignore stop */
+ this.#emitter.emit('exit', this.#process.exitCode, null);
+ this.#emitter.emit('afterExit', this.#process.exitCode, null);
+ return this.#originalProcessReallyExit.call(this.#process, this.#process.exitCode);
+ }
+ #processEmit(ev, ...args) {
+ const og = this.#originalProcessEmit;
+ if (ev === 'exit' && processOk(this.#process)) {
+ if (typeof args[0] === 'number') {
+ this.#process.exitCode = args[0];
+ /* c8 ignore start */
+ }
+ /* c8 ignore start */
+ const ret = og.call(this.#process, ev, ...args);
+ /* c8 ignore start */
+ this.#emitter.emit('exit', this.#process.exitCode, null);
+ this.#emitter.emit('afterExit', this.#process.exitCode, null);
+ /* c8 ignore stop */
+ return ret;
+ }
+ else {
+ return og.call(this.#process, ev, ...args);
+ }
+ }
+}
+const process = globalThis.process;
+// wrap so that we call the method on the actual handler, without
+// exporting it directly.
+_a = signalExitWrap(processOk(process) ? new SignalExit(process) : new SignalExitFallback()),
+/**
+ * Called when the process is exiting, whether via signal, explicit
+ * exit, or running out of stuff to do.
+ *
+ * If the global process object is not suitable for instrumentation,
+ * then this will be a no-op.
+ *
+ * Returns a function that may be used to unload signal-exit.
+ */
+exports.onExit = _a.onExit,
+/**
+ * Load the listeners. Likely you never need to call this, unless
+ * doing a rather deep integration with signal-exit functionality.
+ * Mostly exposed for the benefit of testing.
+ *
+ * @internal
+ */
+exports.load = _a.load,
+/**
+ * Unload the listeners. Likely you never need to call this, unless
+ * doing a rather deep integration with signal-exit functionality.
+ * Mostly exposed for the benefit of testing.
+ *
+ * @internal
+ */
+exports.unload = _a.unload;
+//# sourceMappingURL=index.js.map \ No newline at end of file
diff --git a/deps/npm/node_modules/signal-exit/dist/cjs/package.json b/deps/npm/node_modules/signal-exit/dist/cjs/package.json
new file mode 100644
index 0000000000..5bbefffbab
--- /dev/null
+++ b/deps/npm/node_modules/signal-exit/dist/cjs/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "commonjs"
+}
diff --git a/deps/npm/node_modules/signal-exit/dist/cjs/signals.js b/deps/npm/node_modules/signal-exit/dist/cjs/signals.js
new file mode 100644
index 0000000000..28afc5027d
--- /dev/null
+++ b/deps/npm/node_modules/signal-exit/dist/cjs/signals.js
@@ -0,0 +1,42 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.signals = void 0;
+/**
+ * This is not the set of all possible signals.
+ *
+ * It IS, however, the set of all signals that trigger
+ * an exit on either Linux or BSD systems. Linux is a
+ * superset of the signal names supported on BSD, and
+ * the unknown signals just fail to register, so we can
+ * catch that easily enough.
+ *
+ * Windows signals are a different set, since there are
+ * signals that terminate Windows processes, but don't
+ * terminate (or don't even exist) on Posix systems.
+ *
+ * Don't bother with SIGKILL. It's uncatchable, which
+ * means that we can't fire any callbacks anyway.
+ *
+ * If a user does happen to register a handler on a non-
+ * fatal signal like SIGWINCH or something, and then
+ * exit, it'll end up firing `process.emit('exit')`, so
+ * the handler will be fired anyway.
+ *
+ * SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised
+ * artificially, inherently leave the process in a
+ * state from which it is not safe to try and enter JS
+ * listeners.
+ */
+exports.signals = [];
+exports.signals.push('SIGHUP', 'SIGINT', 'SIGTERM');
+if (process.platform !== 'win32') {
+ exports.signals.push('SIGALRM', 'SIGABRT', 'SIGVTALRM', 'SIGXCPU', 'SIGXFSZ', 'SIGUSR2', 'SIGTRAP', 'SIGSYS', 'SIGQUIT', 'SIGIOT'
+ // should detect profiler and enable/disable accordingly.
+ // see #21
+ // 'SIGPROF'
+ );
+}
+if (process.platform === 'linux') {
+ exports.signals.push('SIGIO', 'SIGPOLL', 'SIGPWR', 'SIGSTKFLT');
+}
+//# sourceMappingURL=signals.js.map \ No newline at end of file
diff --git a/deps/npm/node_modules/signal-exit/dist/mjs/browser.js b/deps/npm/node_modules/signal-exit/dist/mjs/browser.js
new file mode 100644
index 0000000000..9c5f9b9e74
--- /dev/null
+++ b/deps/npm/node_modules/signal-exit/dist/mjs/browser.js
@@ -0,0 +1,4 @@
+export const onExit = () => () => { };
+export const load = () => { };
+export const unload = () => { };
+//# sourceMappingURL=browser.js.map \ No newline at end of file
diff --git a/deps/npm/node_modules/signal-exit/dist/mjs/index.js b/deps/npm/node_modules/signal-exit/dist/mjs/index.js
new file mode 100644
index 0000000000..cc86788031
--- /dev/null
+++ b/deps/npm/node_modules/signal-exit/dist/mjs/index.js
@@ -0,0 +1,269 @@
+// Note: since nyc uses this module to output coverage, any lines
+// that are in the direct sync flow of nyc's outputCoverage are
+// ignored, since we can never get coverage for them.
+// grab a reference to node's real process object right away
+import { signals } from './signals.js';
+export { signals };
+const processOk = (process) => !!process &&
+ typeof process === 'object' &&
+ typeof process.removeListener === 'function' &&
+ typeof process.emit === 'function' &&
+ typeof process.reallyExit === 'function' &&
+ typeof process.listeners === 'function' &&
+ typeof process.kill === 'function' &&
+ typeof process.pid === 'number' &&
+ typeof process.on === 'function';
+const kExitEmitter = Symbol.for('signal-exit emitter');
+const global = globalThis;
+const ObjectDefineProperty = Object.defineProperty.bind(Object);
+// teeny tiny ee
+class Emitter {
+ emitted = {
+ afterExit: false,
+ exit: false,
+ };
+ listeners = {
+ afterExit: [],
+ exit: [],
+ };
+ count = 0;
+ id = Math.random();
+ constructor() {
+ if (global[kExitEmitter]) {
+ console.error('reusing global emitter');
+ return global[kExitEmitter];
+ }
+ ObjectDefineProperty(global, kExitEmitter, {
+ value: this,
+ writable: false,
+ enumerable: false,
+ configurable: false,
+ });
+ }
+ on(ev, fn) {
+ this.listeners[ev].push(fn);
+ }
+ removeListener(ev, fn) {
+ const list = this.listeners[ev];
+ const i = list.indexOf(fn);
+ /* c8 ignore start */
+ if (i === -1) {
+ return;
+ }
+ /* c8 ignore stop */
+ if (i === 0 && list.length === 1) {
+ list.length = 0;
+ }
+ else {
+ list.splice(i, 1);
+ }
+ }
+ emit(ev, code, signal) {
+ if (this.emitted[ev]) {
+ return;
+ }
+ this.emitted[ev] = true;
+ for (const fn of this.listeners[ev]) {
+ fn(code, signal);
+ }
+ }
+}
+class SignalExitBase {
+}
+const signalExitWrap = (handler) => {
+ return {
+ onExit(cb, opts) {
+ return handler.onExit(cb, opts);
+ },
+ load() {
+ return handler.load();
+ },
+ unload() {
+ return handler.unload();
+ },
+ };
+};
+class SignalExitFallback extends SignalExitBase {
+ onExit() {
+ return () => { };
+ }
+ load() { }
+ unload() { }
+}
+class SignalExit extends SignalExitBase {
+ // "SIGHUP" throws an `ENOSYS` error on Windows,
+ // so use a supported signal instead
+ /* c8 ignore start */
+ #hupSig = process.platform === 'win32' ? 'SIGINT' : 'SIGHUP';
+ /* c8 ignore stop */
+ #emitter = new Emitter();
+ #process;
+ #originalProcessEmit;
+ #originalProcessReallyExit;
+ #sigListeners = {};
+ #loaded = false;
+ constructor(process) {
+ super();
+ this.#process = process;
+ // { <signal>: <listener fn>, ... }
+ this.#sigListeners = {};
+ for (const sig of signals) {
+ this.#sigListeners[sig] = () => {
+ // If there are no other listeners, an exit is coming!
+ // Simplest way: remove us and then re-send the signal.
+ // We know that this will kill the process, so we can
+ // safely emit now.
+ const listeners = this.#process.listeners(sig);
+ let { count } = this.#emitter;
+ // This is a workaround for the fact that signal-exit v3 and signal
+ // exit v4 are not aware of each other, and each will attempt to let
+ // the other handle it, so neither of them do. To correct this, we
+ // detect if we're the only handler *except* for previous versions
+ // of signal-exit.
+ /* c8 ignore start */
+ //@ts-ignore
+ if (typeof process.__signal_exit_emitter__ === 'object')
+ count++;
+ /* c8 ignore stop */
+ if (listeners.length === count) {
+ this.unload();
+ this.#emitter.emit('exit', null, sig);
+ this.#emitter.emit('afterExit', null, sig);
+ /* c8 ignore start */
+ process.kill(process.pid, sig === 'SIGHUP' ? this.#hupSig : sig);
+ /* c8 ignore stop */
+ }
+ };
+ }
+ this.#originalProcessReallyExit = process.reallyExit;
+ this.#originalProcessEmit = process.emit;
+ }
+ onExit(cb, opts) {
+ /* c8 ignore start */
+ if (!processOk(this.#process)) {
+ return () => { };
+ }
+ /* c8 ignore stop */
+ if (this.#loaded === false) {
+ this.load();
+ }
+ const ev = opts?.alwaysLast ? 'afterExit' : 'exit';
+ this.#emitter.on(ev, cb);
+ return () => {
+ this.#emitter.removeListener(ev, cb);
+ if (this.#emitter.listeners['exit'].length === 0 &&
+ this.#emitter.listeners['afterExit'].length === 0) {
+ this.unload();
+ }
+ };
+ }
+ load() {
+ if (this.#loaded) {
+ return;
+ }
+ this.#loaded = true;
+ // This is the number of onSignalExit's that are in play.
+ // It's important so that we can count the correct number of
+ // listeners on signals, and don't wait for the other one to
+ // handle it instead of us.
+ this.#emitter.count += 1;
+ for (const sig of signals) {
+ try {
+ const fn = this.#sigListeners[sig];
+ if (fn)
+ this.#process.on(sig, fn);
+ }
+ catch (_) { }
+ }
+ this.#process.emit = (ev, ...a) => {
+ return this.#processEmit(ev, ...a);
+ };
+ this.#process.reallyExit = (code) => {
+ return this.#processReallyExit(code);
+ };
+ }
+ unload() {
+ if (!this.#loaded) {
+ return;
+ }
+ this.#loaded = false;
+ signals.forEach(sig => {
+ const listener = this.#sigListeners[sig];
+ /* c8 ignore start */
+ if (!listener) {
+ throw new Error('Listener not defined for signal: ' + sig);
+ }
+ /* c8 ignore stop */
+ try {
+ this.#process.removeListener(sig, listener);
+ /* c8 ignore start */
+ }
+ catch (_) { }
+ /* c8 ignore stop */
+ });
+ this.#process.emit = this.#originalProcessEmit;
+ this.#process.reallyExit = this.#originalProcessReallyExit;
+ this.#emitter.count -= 1;
+ }
+ #processReallyExit(code) {
+ /* c8 ignore start */
+ if (!processOk(this.#process)) {
+ return 0;
+ }
+ this.#process.exitCode = code || 0;
+ /* c8 ignore stop */
+ this.#emitter.emit('exit', this.#process.exitCode, null);
+ this.#emitter.emit('afterExit', this.#process.exitCode, null);
+ return this.#originalProcessReallyExit.call(this.#process, this.#process.exitCode);
+ }
+ #processEmit(ev, ...args) {
+ const og = this.#originalProcessEmit;
+ if (ev === 'exit' && processOk(this.#process)) {
+ if (typeof args[0] === 'number') {
+ this.#process.exitCode = args[0];
+ /* c8 ignore start */
+ }
+ /* c8 ignore start */
+ const ret = og.call(this.#process, ev, ...args);
+ /* c8 ignore start */
+ this.#emitter.emit('exit', this.#process.exitCode, null);
+ this.#emitter.emit('afterExit', this.#process.exitCode, null);
+ /* c8 ignore stop */
+ return ret;
+ }
+ else {
+ return og.call(this.#process, ev, ...args);
+ }
+ }
+}
+const process = globalThis.process;
+// wrap so that we call the method on the actual handler, without
+// exporting it directly.
+export const {
+/**
+ * Called when the process is exiting, whether via signal, explicit
+ * exit, or running out of stuff to do.
+ *
+ * If the global process object is not suitable for instrumentation,
+ * then this will be a no-op.
+ *
+ * Returns a function that may be used to unload signal-exit.
+ */
+onExit,
+/**
+ * Load the listeners. Likely you never need to call this, unless
+ * doing a rather deep integration with signal-exit functionality.
+ * Mostly exposed for the benefit of testing.
+ *
+ * @internal
+ */
+load,
+/**
+ * Unload the listeners. Likely you never need to call this, unless
+ * doing a rather deep integration with signal-exit functionality.
+ * Mostly exposed for the benefit of testing.
+ *
+ * @internal
+ */
+unload, } = signalExitWrap(processOk(process) ? new SignalExit(process) : new SignalExitFallback());
+//# sourceMappingURL=index.js.map \ No newline at end of file
diff --git a/deps/npm/node_modules/signal-exit/dist/mjs/package.json b/deps/npm/node_modules/signal-exit/dist/mjs/package.json
new file mode 100644
index 0000000000..3dbc1ca591
--- /dev/null
+++ b/deps/npm/node_modules/signal-exit/dist/mjs/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "module"
+}
diff --git a/deps/npm/node_modules/signal-exit/dist/mjs/signals.js b/deps/npm/node_modules/signal-exit/dist/mjs/signals.js
new file mode 100644
index 0000000000..7dbf15a5a6
--- /dev/null
+++ b/deps/npm/node_modules/signal-exit/dist/mjs/signals.js
@@ -0,0 +1,39 @@
+/**
+ * This is not the set of all possible signals.
+ *
+ * It IS, however, the set of all signals that trigger
+ * an exit on either Linux or BSD systems. Linux is a
+ * superset of the signal names supported on BSD, and
+ * the unknown signals just fail to register, so we can
+ * catch that easily enough.
+ *
+ * Windows signals are a different set, since there are
+ * signals that terminate Windows processes, but don't
+ * terminate (or don't even exist) on Posix systems.
+ *
+ * Don't bother with SIGKILL. It's uncatchable, which
+ * means that we can't fire any callbacks anyway.
+ *
+ * If a user does happen to register a handler on a non-
+ * fatal signal like SIGWINCH or something, and then
+ * exit, it'll end up firing `process.emit('exit')`, so
+ * the handler will be fired anyway.
+ *
+ * SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised
+ * artificially, inherently leave the process in a
+ * state from which it is not safe to try and enter JS
+ * listeners.
+ */
+export const signals = [];
+signals.push('SIGHUP', 'SIGINT', 'SIGTERM');
+if (process.platform !== 'win32') {
+ signals.push('SIGALRM', 'SIGABRT', 'SIGVTALRM', 'SIGXCPU', 'SIGXFSZ', 'SIGUSR2', 'SIGTRAP', 'SIGSYS', 'SIGQUIT', 'SIGIOT'
+ // should detect profiler and enable/disable accordingly.
+ // see #21
+ // 'SIGPROF'
+ );
+}
+if (process.platform === 'linux') {
+ signals.push('SIGIO', 'SIGPOLL', 'SIGPWR', 'SIGSTKFLT');
+}
+//# sourceMappingURL=signals.js.map \ No newline at end of file
diff --git a/deps/npm/node_modules/signal-exit/package.json b/deps/npm/node_modules/signal-exit/package.json
index e1a00311f9..5e7e3a74d9 100644
--- a/deps/npm/node_modules/signal-exit/package.json
+++ b/deps/npm/node_modules/signal-exit/package.json
@@ -1,19 +1,49 @@
{
"name": "signal-exit",
- "version": "3.0.7",
+ "version": "4.0.1",
"description": "when you want to fire an event no matter how a process exits.",
- "main": "index.js",
- "scripts": {
- "test": "tap",
- "snap": "tap",
- "preversion": "npm test",
- "postversion": "npm publish",
- "prepublishOnly": "git push origin --follow-tags"
+ "main": "./dist/cjs/index.js",
+ "module": "./dist/mjs/index.js",
+ "browser": "./dist/mjs/browser.js",
+ "types": "./dist/mjs/index.d.ts",
+ "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"
+ }
+ },
+ "./signals": {
+ "import": {
+ "types": "./dist/mjs/signals.d.ts",
+ "default": "./dist/mjs/signals.js"
+ },
+ "require": {
+ "types": "./dist/cjs/signals.d.ts",
+ "default": "./dist/cjs/signals.js"
+ }
+ },
+ "./browser": {
+ "import": {
+ "types": "./dist/mjs/browser.d.ts",
+ "default": "./dist/mjs/browser.js"
+ },
+ "require": {
+ "types": "./dist/cjs/browser.d.ts",
+ "default": "./dist/cjs/browser.js"
+ }
+ }
},
"files": [
- "index.js",
- "signals.js"
+ "dist"
],
+ "engines": {
+ "node": ">=14"
+ },
"repository": {
"type": "git",
"url": "https://github.com/tapjs/signal-exit.git"
@@ -24,15 +54,53 @@
],
"author": "Ben Coe <ben@npmjs.com>",
"license": "ISC",
- "bugs": {
- "url": "https://github.com/tapjs/signal-exit/issues"
- },
- "homepage": "https://github.com/tapjs/signal-exit",
"devDependencies": {
- "chai": "^3.5.0",
- "coveralls": "^3.1.1",
- "nyc": "^15.1.0",
- "standard-version": "^9.3.1",
- "tap": "^15.1.1"
+ "@types/cross-spawn": "^6.0.2",
+ "@types/node": "^18.15.11",
+ "@types/signal-exit": "^3.0.1",
+ "@types/tap": "^15.0.8",
+ "c8": "^7.13.0",
+ "prettier": "^2.8.6",
+ "tap": "^16.3.4",
+ "ts-node": "^10.9.1",
+ "typedoc": "^0.23.28",
+ "typescript": "^5.0.2"
+ },
+ "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 && bash ./scripts/fixup.sh",
+ "pretest": "npm run prepare",
+ "presnap": "npm run prepare",
+ "test": "c8 tap",
+ "snap": "c8 tap",
+ "format": "prettier --write . --loglevel warn",
+ "typedoc": "typedoc --tsconfig tsconfig-esm.json ./src/*.ts"
+ },
+ "prettier": {
+ "semi": false,
+ "printWidth": 75,
+ "tabWidth": 2,
+ "useTabs": false,
+ "singleQuote": true,
+ "jsxSingleQuote": false,
+ "bracketSameLine": true,
+ "arrowParens": "avoid",
+ "endOfLine": "lf"
+ },
+ "tap": {
+ "coverage": false,
+ "jobs": 1,
+ "node-arg": [
+ "--no-warnings",
+ "--loader",
+ "ts-node/esm"
+ ],
+ "ts": false
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
}
diff --git a/deps/npm/node_modules/sigstore/README.md b/deps/npm/node_modules/sigstore/README.md
index 5ade0dc5ab..0f015c580b 100644
--- a/deps/npm/node_modules/sigstore/README.md
+++ b/deps/npm/node_modules/sigstore/README.md
@@ -72,6 +72,20 @@ Verifies the signature in the supplied bundle.
* `keySelector` `<Function>`: Callback invoked to retrieve the public key (as either `string` or `Buffer`) necessary to verify the bundle signature. Not used when the signature was generated from a Fulcio-issued signing certificate.
* `hint` `<String>`: The hint from the bundle used to identify the the signing key.
+### tuf
+
+The `tuf` object contains utility function for working with the Sigstore TUF repository.
+
+#### getTarget(path[, options])
+
+Returns the contents of the target at the specified path in the Sigstore TUF repository.
+
+* `path` `<string>`: The [path-relative-url string](https://url.spec.whatwg.org/#path-relative-url-string) that uniquely identifies the target within the Sigstore TUF repository.
+* `options` `<Object>`
+ * `tufMirrorURL` `<string>`: Base URL for the Sigstore TUF repository. Defaults to `'https://tuf-repo-cdn.sigstore.dev'`
+ * `tufRootPath` `<string>`: Path to the initial trusted root for the TUF repository. Defaults to the embedded root.
+ * `tufCachePath` `<string>`: Absolute path to the directory to be used for caching downloaded TUF metadata and targets. Defaults to a directory named "sigstore-js" within the platform-specific application data directory.
+
### utils
@@ -99,6 +113,28 @@ sigstore <command> <artifact>
sigstore help print help information
```
+## Credential Sources
+
+### GitHub Actions
+
+If sigstore-js detects that it is being executed on GitHub Actions, it will use `ACTIONS_ID_TOKEN_REQUEST_URL`
+and `ACTIONS_ID_TOKEN_REQUEST_TOKEN` environment variables to request an OIDC token with the correct scope.
+
+Note: the `id_token: write` permission must be granted to the GitHub Action Job.
+
+See https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect
+for more details.
+
+### Environment Variables
+
+If the `SIGSTORE_ID_TOKEN` environment variable is set, it will use this to authenticate to Fulcio.
+It is the callers responsibility to make sure that this token has the correct scopes.
+
+### Interactive Flow
+
+If sigstore-js cannot detect ambient credentials, then it will prompt the user to go through the
+interactive flow.
+
## Development
### Changesets
diff --git a/deps/npm/node_modules/sigstore/dist/ca/format.d.ts b/deps/npm/node_modules/sigstore/dist/ca/format.d.ts
index 9a20bf8f71..b29f51a71f 100644
--- a/deps/npm/node_modules/sigstore/dist/ca/format.d.ts
+++ b/deps/npm/node_modules/sigstore/dist/ca/format.d.ts
@@ -1,5 +1,5 @@
/// <reference types="node" />
/// <reference types="node" />
import { KeyObject } from 'crypto';
-import { SigningCertificateRequest } from '../client/fulcio';
+import type { SigningCertificateRequest } from '../external/fulcio';
export declare function toCertificateRequest(identityToken: string, publicKey: KeyObject, challenge: Buffer): SigningCertificateRequest;
diff --git a/deps/npm/node_modules/sigstore/dist/ca/index.js b/deps/npm/node_modules/sigstore/dist/ca/index.js
index 6c6e267011..7e0f9e0c5c 100644
--- a/deps/npm/node_modules/sigstore/dist/ca/index.js
+++ b/deps/npm/node_modules/sigstore/dist/ca/index.js
@@ -1,12 +1,12 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.CAClient = void 0;
-const client_1 = require("../client");
const error_1 = require("../error");
+const external_1 = require("../external");
const format_1 = require("./format");
class CAClient {
constructor(options) {
- this.fulcio = new client_1.Fulcio({ baseURL: options.fulcioBaseURL });
+ this.fulcio = new external_1.Fulcio({ baseURL: options.fulcioBaseURL });
}
async createSigningCertificate(identityToken, publicKey, challenge) {
const request = (0, format_1.toCertificateRequest)(identityToken, publicKey, challenge);
@@ -15,7 +15,11 @@ class CAClient {
return certificate.signedCertificateEmbeddedSct.chain.certificates;
}
catch (err) {
- throw new error_1.InternalError('error creating signing certificate', err);
+ throw new error_1.InternalError({
+ code: 'CA_CREATE_SIGNING_CERTIFICATE_ERROR',
+ message: 'error creating signing certificate',
+ cause: err,
+ });
}
}
}
diff --git a/deps/npm/node_modules/sigstore/dist/ca/verify/signer.js b/deps/npm/node_modules/sigstore/dist/ca/verify/signer.js
index 2c49f0bcd6..51d722d763 100644
--- a/deps/npm/node_modules/sigstore/dist/ca/verify/signer.js
+++ b/deps/npm/node_modules/sigstore/dist/ca/verify/signer.js
@@ -126,6 +126,18 @@ function verifyOIDs(cert, oids) {
}
const oid = expectedExtension.oid.id.join('.');
const extension = cert.extension(oid);
- return extension?.value.equals(expectedExtension.value);
+ // If the extension is not present, or there is no value, return false
+ const valueObj = extension?.valueObj;
+ if (!valueObj) {
+ return false;
+ }
+ // Check to see if this is a newer style extension with an embedded
+ // UTF8String, or an older style extension with a raw string
+ if (valueObj.subs.length > 0) {
+ return valueObj.subs[0].value.equals(expectedExtension.value);
+ }
+ else {
+ return valueObj.value.equals(expectedExtension.value);
+ }
});
}
diff --git a/deps/npm/node_modules/sigstore/dist/cli/index.js b/deps/npm/node_modules/sigstore/dist/cli/index.js
index d7d6c76d73..6015cd9df7 100644
--- a/deps/npm/node_modules/sigstore/dist/cli/index.js
+++ b/deps/npm/node_modules/sigstore/dist/cli/index.js
@@ -62,6 +62,19 @@ function printUsage() {
sigstore help print help information
`);
}
+function printRekorEntry(bundle, options) {
+ let url;
+ if (options.rekorURL === index_1.sigstore.DEFAULT_REKOR_URL) {
+ url = `https://search.sigstore.dev`;
+ }
+ else {
+ url = `${options.rekorURL}/api/v1/log/entries`;
+ }
+ const logIndex = bundle.verificationMaterial?.tlogEntries[0].logIndex;
+ console.error(`Created entry at index ${logIndex}, available at`);
+ console.error(`${url}?logIndex=${logIndex}`);
+}
+// TODO: Allow customing these options
const signOptions = {
oidcClientID: 'sigstore',
oidcIssuer: 'https://oauth2.sigstore.dev/auth',
@@ -71,15 +84,13 @@ const signOptions = {
async function sign(artifactPath) {
const buffer = fs_1.default.readFileSync(artifactPath);
const bundle = await index_1.sigstore.sign(buffer, signOptions);
- const url = `${signOptions.rekorURL}/api/v1/log/entries`;
- const logIndex = bundle.verificationMaterial?.tlogEntries[0].logIndex;
- console.error(`Created entry at index ${logIndex}, available at`);
- console.error(`${url}?logIndex=${logIndex}`);
+ printRekorEntry(bundle, signOptions);
console.log(JSON.stringify(bundle));
}
async function attest(artifactPath, payloadType = INTOTO_PAYLOAD_TYPE) {
const buffer = fs_1.default.readFileSync(artifactPath);
const bundle = await index_1.sigstore.attest(buffer, payloadType, signOptions);
+ printRekorEntry(bundle, signOptions);
console.log(JSON.stringify(bundle));
}
async function verify(bundlePath, artifactPath) {
diff --git a/deps/npm/node_modules/sigstore/dist/config.d.ts b/deps/npm/node_modules/sigstore/dist/config.d.ts
new file mode 100644
index 0000000000..227013f7aa
--- /dev/null
+++ b/deps/npm/node_modules/sigstore/dist/config.d.ts
@@ -0,0 +1,44 @@
+import { CA } from './ca';
+import { Provider } from './identity';
+import { TLog } from './tlog';
+import * as sigstore from './types/sigstore';
+import type { KeySelector } from './verify';
+interface CAOptions {
+ fulcioURL?: string;
+}
+interface TLogOptions {
+ rekorURL?: string;
+}
+export interface IdentityProviderOptions {
+ identityToken?: string;
+ oidcIssuer?: string;
+ oidcClientID?: string;
+ oidcClientSecret?: string;
+ oidcRedirectURL?: string;
+}
+export interface TUFOptions {
+ tufMirrorURL?: string;
+ tufRootPath?: string;
+ tufCachePath?: string;
+}
+export type SignOptions = CAOptions & TLogOptions & IdentityProviderOptions;
+export type VerifyOptions = {
+ ctLogThreshold?: number;
+ tlogThreshold?: number;
+ certificateIssuer?: string;
+ certificateIdentityEmail?: string;
+ certificateIdentityURI?: string;
+ certificateOIDs?: Record<string, string>;
+ keySelector?: KeySelector;
+} & TLogOptions & TUFOptions;
+export declare const DEFAULT_FULCIO_URL = "https://fulcio.sigstore.dev";
+export declare const DEFAULT_REKOR_URL = "https://rekor.sigstore.dev";
+export declare function createCAClient(options: {
+ fulcioURL?: string;
+}): CA;
+export declare function createTLogClient(options: {
+ rekorURL?: string;
+}): TLog;
+export declare function artifactVerificationOptions(options: VerifyOptions): sigstore.RequiredArtifactVerificationOptions;
+export declare function identityProviders(options: IdentityProviderOptions): Provider[];
+export {};
diff --git a/deps/npm/node_modules/sigstore/dist/config.js b/deps/npm/node_modules/sigstore/dist/config.js
new file mode 100644
index 0000000000..7e6e42d9bf
--- /dev/null
+++ b/deps/npm/node_modules/sigstore/dist/config.js
@@ -0,0 +1,145 @@
+"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.identityProviders = exports.artifactVerificationOptions = exports.createTLogClient = exports.createCAClient = exports.DEFAULT_REKOR_URL = exports.DEFAULT_FULCIO_URL = void 0;
+/*
+Copyright 2023 The Sigstore Authors.
+
+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.
+*/
+const ca_1 = require("./ca");
+const identity_1 = __importDefault(require("./identity"));
+const tlog_1 = require("./tlog");
+const sigstore = __importStar(require("./types/sigstore"));
+exports.DEFAULT_FULCIO_URL = 'https://fulcio.sigstore.dev';
+exports.DEFAULT_REKOR_URL = 'https://rekor.sigstore.dev';
+function createCAClient(options) {
+ return new ca_1.CAClient({
+ fulcioBaseURL: options.fulcioURL || exports.DEFAULT_FULCIO_URL,
+ });
+}
+exports.createCAClient = createCAClient;
+function createTLogClient(options) {
+ return new tlog_1.TLogClient({
+ rekorBaseURL: options.rekorURL || exports.DEFAULT_REKOR_URL,
+ });
+}
+exports.createTLogClient = createTLogClient;
+// Assembles the AtifactVerificationOptions from the supplied VerifyOptions.
+function artifactVerificationOptions(options) {
+ // The trusted signers are only used if the options contain a certificate
+ // issuer
+ let signers;
+ if (options.certificateIssuer) {
+ let san = undefined;
+ if (options.certificateIdentityEmail) {
+ san = {
+ type: sigstore.SubjectAlternativeNameType.EMAIL,
+ identity: {
+ $case: 'value',
+ value: options.certificateIdentityEmail,
+ },
+ };
+ }
+ else if (options.certificateIdentityURI) {
+ san = {
+ type: sigstore.SubjectAlternativeNameType.URI,
+ identity: {
+ $case: 'value',
+ value: options.certificateIdentityURI,
+ },
+ };
+ }
+ const oids = Object.entries(options.certificateOIDs || {}).map(([oid, value]) => ({
+ oid: { id: oid.split('.').map((s) => parseInt(s, 10)) },
+ value: Buffer.from(value),
+ }));
+ signers = {
+ $case: 'certificateIdentities',
+ certificateIdentities: {
+ identities: [
+ {
+ issuer: options.certificateIssuer,
+ san: san,
+ oids: oids,
+ },
+ ],
+ },
+ };
+ }
+ // Construct the artifact verification options w/ defaults
+ return {
+ ctlogOptions: {
+ disable: false,
+ threshold: options.ctLogThreshold || 1,
+ detachedSct: false,
+ },
+ tlogOptions: {
+ disable: false,
+ threshold: options.tlogThreshold || 1,
+ performOnlineVerification: false,
+ },
+ signers,
+ };
+}
+exports.artifactVerificationOptions = artifactVerificationOptions;
+// Translates the IdenityProviderOptions into a list of Providers which
+// should be queried to retrieve an identity token.
+function identityProviders(options) {
+ const idps = [];
+ const token = options.identityToken;
+ // If an explicit identity token is provided, use that. Setup a dummy
+ // provider that just returns the token. Otherwise, setup the CI context
+ // provider and (optionally) the OAuth provider.
+ if (token) {
+ idps.push({ getToken: () => Promise.resolve(token) });
+ }
+ else {
+ idps.push(identity_1.default.ciContextProvider());
+ if (options.oidcIssuer && options.oidcClientID) {
+ idps.push(identity_1.default.oauthProvider({
+ issuer: options.oidcIssuer,
+ clientID: options.oidcClientID,
+ clientSecret: options.oidcClientSecret,
+ redirectURL: options.oidcRedirectURL,
+ }));
+ }
+ }
+ return idps;
+}
+exports.identityProviders = identityProviders;
diff --git a/deps/npm/node_modules/sigstore/dist/error.d.ts b/deps/npm/node_modules/sigstore/dist/error.d.ts
index 0e2dad0c57..011fc4d75f 100644
--- a/deps/npm/node_modules/sigstore/dist/error.d.ts
+++ b/deps/npm/node_modules/sigstore/dist/error.d.ts
@@ -6,8 +6,15 @@ export declare class VerificationError extends BaseError {
}
export declare class ValidationError extends BaseError {
}
-export declare class InternalError extends BaseError {
-}
export declare class PolicyError extends BaseError {
}
+type InternalErrorCode = 'TLOG_FETCH_ENTRY_ERROR' | 'TLOG_CREATE_ENTRY_ERROR' | 'CA_CREATE_SIGNING_CERTIFICATE_ERROR' | 'TUF_FIND_TARGET_ERROR' | 'TUF_REFRESH_METADATA_ERROR' | 'TUF_DOWNLOAD_TARGET_ERROR' | 'TUF_READ_TARGET_ERROR';
+export declare class InternalError extends BaseError {
+ code: InternalErrorCode;
+ constructor({ code, message, cause, }: {
+ code: InternalErrorCode;
+ message: string;
+ cause?: any;
+ });
+}
export {};
diff --git a/deps/npm/node_modules/sigstore/dist/error.js b/deps/npm/node_modules/sigstore/dist/error.js
index e302d3aee6..cee15dff90 100644
--- a/deps/npm/node_modules/sigstore/dist/error.js
+++ b/deps/npm/node_modules/sigstore/dist/error.js
@@ -1,6 +1,6 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
-exports.PolicyError = exports.InternalError = exports.ValidationError = exports.VerificationError = void 0;
+exports.InternalError = exports.PolicyError = exports.ValidationError = exports.VerificationError = void 0;
/*
Copyright 2023 The Sigstore Authors.
@@ -30,9 +30,13 @@ exports.VerificationError = VerificationError;
class ValidationError extends BaseError {
}
exports.ValidationError = ValidationError;
-class InternalError extends BaseError {
-}
-exports.InternalError = InternalError;
class PolicyError extends BaseError {
}
exports.PolicyError = PolicyError;
+class InternalError extends BaseError {
+ constructor({ code, message, cause, }) {
+ super(message, cause);
+ this.code = code;
+ }
+}
+exports.InternalError = InternalError;
diff --git a/deps/npm/node_modules/sigstore/dist/client/error.d.ts b/deps/npm/node_modules/sigstore/dist/external/error.d.ts
index 87a4bc5451..87a4bc5451 100644
--- a/deps/npm/node_modules/sigstore/dist/client/error.d.ts
+++ b/deps/npm/node_modules/sigstore/dist/external/error.d.ts
diff --git a/deps/npm/node_modules/sigstore/dist/client/error.js b/deps/npm/node_modules/sigstore/dist/external/error.js
index d1e1c3df8a..d1e1c3df8a 100644
--- a/deps/npm/node_modules/sigstore/dist/client/error.js
+++ b/deps/npm/node_modules/sigstore/dist/external/error.js
diff --git a/deps/npm/node_modules/sigstore/dist/client/fulcio.d.ts b/deps/npm/node_modules/sigstore/dist/external/fulcio.d.ts
index 91fe53e69f..91fe53e69f 100644
--- a/deps/npm/node_modules/sigstore/dist/client/fulcio.d.ts
+++ b/deps/npm/node_modules/sigstore/dist/external/fulcio.d.ts
diff --git a/deps/npm/node_modules/sigstore/dist/client/fulcio.js b/deps/npm/node_modules/sigstore/dist/external/fulcio.js
index 288ca32caa..288ca32caa 100644
--- a/deps/npm/node_modules/sigstore/dist/client/fulcio.js
+++ b/deps/npm/node_modules/sigstore/dist/external/fulcio.js
diff --git a/deps/npm/node_modules/sigstore/dist/client/index.d.ts b/deps/npm/node_modules/sigstore/dist/external/index.d.ts
index 2102381c0f..07251e9357 100644
--- a/deps/npm/node_modules/sigstore/dist/client/index.d.ts
+++ b/deps/npm/node_modules/sigstore/dist/external/index.d.ts
@@ -1,2 +1,3 @@
+export { HTTPError } from './error';
export { Fulcio } from './fulcio';
export { Rekor } from './rekor';
diff --git a/deps/npm/node_modules/sigstore/dist/client/index.js b/deps/npm/node_modules/sigstore/dist/external/index.js
index c6d1d9ad36..da5f084001 100644
--- a/deps/npm/node_modules/sigstore/dist/client/index.js
+++ b/deps/npm/node_modules/sigstore/dist/external/index.js
@@ -1,6 +1,6 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
-exports.Rekor = exports.Fulcio = void 0;
+exports.Rekor = exports.Fulcio = exports.HTTPError = void 0;
/*
Copyright 2022 The Sigstore Authors.
@@ -16,6 +16,8 @@ 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.
*/
+var error_1 = require("./error");
+Object.defineProperty(exports, "HTTPError", { enumerable: true, get: function () { return error_1.HTTPError; } });
var fulcio_1 = require("./fulcio");
Object.defineProperty(exports, "Fulcio", { enumerable: true, get: function () { return fulcio_1.Fulcio; } });
var rekor_1 = require("./rekor");
diff --git a/deps/npm/node_modules/sigstore/dist/client/rekor.d.ts b/deps/npm/node_modules/sigstore/dist/external/rekor.d.ts
index 55a909f11a..55a909f11a 100644
--- a/deps/npm/node_modules/sigstore/dist/client/rekor.d.ts
+++ b/deps/npm/node_modules/sigstore/dist/external/rekor.d.ts
diff --git a/deps/npm/node_modules/sigstore/dist/client/rekor.js b/deps/npm/node_modules/sigstore/dist/external/rekor.js
index 6bb085c44c..6bb085c44c 100644
--- a/deps/npm/node_modules/sigstore/dist/client/rekor.js
+++ b/deps/npm/node_modules/sigstore/dist/external/rekor.js
diff --git a/deps/npm/node_modules/sigstore/dist/identity/ci.js b/deps/npm/node_modules/sigstore/dist/identity/ci.js
index fecf63f4ec..0f01e1baae 100644
--- a/deps/npm/node_modules/sigstore/dist/identity/ci.js
+++ b/deps/npm/node_modules/sigstore/dist/identity/ci.js
@@ -22,7 +22,7 @@ limitations under the License.
const make_fetch_happen_1 = __importDefault(require("make-fetch-happen"));
const util_1 = require("../util");
// Collection of all the CI-specific providers we have implemented
-const providers = [getGHAToken];
+const providers = [getGHAToken, getEnv];
/**
* CIContextProvider is a composite identity provider which will iterate
* over all of the CI-specific providers and return the token from the first
@@ -63,3 +63,13 @@ async function getGHAToken(audience) {
});
return response.json().then((data) => data.value);
}
+/**
+ * getEnv can retrieve an OIDC token from an environment variable.
+ * This matches the behavior of https://github.com/sigstore/cosign/tree/main/pkg/providers/envvar
+ */
+async function getEnv() {
+ if (!process.env.SIGSTORE_ID_TOKEN) {
+ return Promise.reject('no token available');
+ }
+ return process.env.SIGSTORE_ID_TOKEN;
+}
diff --git a/deps/npm/node_modules/sigstore/dist/sigstore-utils.d.ts b/deps/npm/node_modules/sigstore/dist/sigstore-utils.d.ts
index e3e3fd4c4e..38f15dc734 100644
--- a/deps/npm/node_modules/sigstore/dist/sigstore-utils.d.ts
+++ b/deps/npm/node_modules/sigstore/dist/sigstore-utils.d.ts
@@ -1,7 +1,8 @@
/// <reference types="node" />
-import { Bundle, Envelope, SignOptions } from './sigstore';
+import { SignOptions } from './config';
import { SignerFunc } from './types/signature';
+import * as sigstore from './types/sigstore';
export declare function createDSSEEnvelope(payload: Buffer, payloadType: string, options: {
signer: SignerFunc;
-}): Promise<Envelope>;
-export declare function createRekorEntry(dsseEnvelope: Envelope, publicKey: string, options?: SignOptions): Promise<Bundle>;
+}): Promise<sigstore.SerializedEnvelope>;
+export declare function createRekorEntry(dsseEnvelope: sigstore.SerializedEnvelope, publicKey: string, options?: SignOptions): Promise<sigstore.SerializedBundle>;
diff --git a/deps/npm/node_modules/sigstore/dist/sigstore-utils.js b/deps/npm/node_modules/sigstore/dist/sigstore-utils.js
index f11cf8c13c..79918a806b 100644
--- a/deps/npm/node_modules/sigstore/dist/sigstore-utils.js
+++ b/deps/npm/node_modules/sigstore/dist/sigstore-utils.js
@@ -1,4 +1,27 @@
"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;
+};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createRekorEntry = exports.createDSSEEnvelope = void 0;
/*
@@ -16,16 +39,10 @@ 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.
*/
-const sigstore_1 = require("./sigstore");
-const tlog_1 = require("./tlog");
+const config_1 = require("./config");
const signature_1 = require("./types/signature");
-const sigstore_2 = require("./types/sigstore");
+const sigstore = __importStar(require("./types/sigstore"));
const util_1 = require("./util");
-function createTLogClient(options) {
- return new tlog_1.TLogClient({
- rekorBaseURL: options.rekorURL || sigstore_1.DEFAULT_REKOR_URL,
- });
-}
async function createDSSEEnvelope(payload, payloadType, options) {
// Pre-authentication encoding to be signed
const paeBuffer = util_1.dsse.preAuthEncoding(payloadType, payload);
@@ -41,18 +58,18 @@ async function createDSSEEnvelope(payload, payloadType, options) {
},
],
};
- return (0, sigstore_2.envelopeToJSON)(envelope);
+ return sigstore.Envelope.toJSON(envelope);
}
exports.createDSSEEnvelope = createDSSEEnvelope;
// Accepts a signed DSSE envelope and a PEM-encoded public key to be added to the
// transparency log. Returns a Sigstore bundle suitable for offline verification.
async function createRekorEntry(dsseEnvelope, publicKey, options = {}) {
- const envelope = (0, sigstore_2.envelopeFromJSON)(dsseEnvelope);
- const tlog = createTLogClient(options);
+ const envelope = sigstore.Envelope.fromJSON(dsseEnvelope);
+ const tlog = (0, config_1.createTLogClient)(options);
const sigMaterial = (0, signature_1.extractSignatureMaterial)(envelope, publicKey);
const bundle = await tlog.createDSSEEntry(envelope, sigMaterial, {
fetchOnConflict: true,
});
- return (0, sigstore_2.bundleToJSON)(bundle);
+ return sigstore.Bundle.toJSON(bundle);
}
exports.createRekorEntry = createRekorEntry;
diff --git a/deps/npm/node_modules/sigstore/dist/sigstore.d.ts b/deps/npm/node_modules/sigstore/dist/sigstore.d.ts
index 69a28f7243..97a64f61fd 100644
--- a/deps/npm/node_modules/sigstore/dist/sigstore.d.ts
+++ b/deps/npm/node_modules/sigstore/dist/sigstore.d.ts
@@ -1,35 +1,16 @@
/// <reference types="node" />
+import * as config from './config';
import * as sigstore from './types/sigstore';
-import { KeySelector } from './verify';
+export declare function sign(payload: Buffer, options?: config.SignOptions): Promise<sigstore.SerializedBundle>;
+export declare function attest(payload: Buffer, payloadType: string, options?: config.SignOptions): Promise<sigstore.SerializedBundle>;
+export declare function verify(bundle: sigstore.SerializedBundle, payload?: Buffer, options?: config.VerifyOptions): Promise<void>;
+declare const tufUtils: {
+ getTarget: (path: string, options?: config.TUFOptions) => Promise<string>;
+};
+export type { SignOptions, VerifyOptions } from './config';
+export { InternalError, PolicyError, ValidationError, VerificationError, } from './error';
export * as utils from './sigstore-utils';
-export { SerializedBundle as Bundle, SerializedEnvelope as Envelope, } from './types/sigstore';
+export type { SerializedBundle as Bundle, SerializedEnvelope as Envelope, } from './types/sigstore';
+export { tufUtils as tuf };
export declare const DEFAULT_FULCIO_URL = "https://fulcio.sigstore.dev";
export declare const DEFAULT_REKOR_URL = "https://rekor.sigstore.dev";
-interface TLogOptions {
- rekorURL?: string;
-}
-interface TUFOptions {
- tufMirrorURL?: string;
- tufRootPath?: string;
-}
-export type SignOptions = {
- fulcioURL?: string;
- identityToken?: string;
- oidcIssuer?: string;
- oidcClientID?: string;
- oidcClientSecret?: string;
- oidcRedirectURL?: string;
-} & TLogOptions;
-export type VerifyOptions = {
- ctLogThreshold?: number;
- tlogThreshold?: number;
- certificateIssuer?: string;
- certificateIdentityEmail?: string;
- certificateIdentityURI?: string;
- certificateOIDs?: Record<string, string>;
- keySelector?: KeySelector;
-} & TLogOptions & TUFOptions;
-type Bundle = sigstore.SerializedBundle;
-export declare function sign(payload: Buffer, options?: SignOptions): Promise<Bundle>;
-export declare function attest(payload: Buffer, payloadType: string, options?: SignOptions): Promise<Bundle>;
-export declare function verify(bundle: Bundle, payload?: Buffer, options?: VerifyOptions): Promise<void>;
diff --git a/deps/npm/node_modules/sigstore/dist/sigstore.js b/deps/npm/node_modules/sigstore/dist/sigstore.js
index cf8c90c309..f45270217b 100644
--- a/deps/npm/node_modules/sigstore/dist/sigstore.js
+++ b/deps/npm/node_modules/sigstore/dist/sigstore.js
@@ -22,11 +22,8 @@ var __importStar = (this && this.__importStar) || function (mod) {
__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.verify = exports.attest = exports.sign = exports.DEFAULT_REKOR_URL = exports.DEFAULT_FULCIO_URL = exports.utils = void 0;
+exports.DEFAULT_REKOR_URL = exports.DEFAULT_FULCIO_URL = exports.tuf = exports.utils = exports.VerificationError = exports.ValidationError = exports.PolicyError = exports.InternalError = exports.verify = exports.attest = exports.sign = void 0;
/*
Copyright 2023 The Sigstore Authors.
@@ -42,32 +39,15 @@ 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.
*/
-const ca_1 = require("./ca");
-const identity_1 = __importDefault(require("./identity"));
+const config = __importStar(require("./config"));
const sign_1 = require("./sign");
-const tlog_1 = require("./tlog");
const tuf = __importStar(require("./tuf"));
const sigstore = __importStar(require("./types/sigstore"));
-const util_1 = require("./util");
const verify_1 = require("./verify");
-exports.utils = __importStar(require("./sigstore-utils"));
-exports.DEFAULT_FULCIO_URL = 'https://fulcio.sigstore.dev';
-exports.DEFAULT_REKOR_URL = 'https://rekor.sigstore.dev';
-function createCAClient(options) {
- return new ca_1.CAClient({
- fulcioBaseURL: options.fulcioURL || exports.DEFAULT_FULCIO_URL,
- });
-}
-function createTLogClient(options) {
- return new tlog_1.TLogClient({
- rekorBaseURL: options.rekorURL || exports.DEFAULT_REKOR_URL,
- });
-}
-const tufCacheDir = util_1.appdata.appDataPath('sigstore-js');
async function sign(payload, options = {}) {
- const ca = createCAClient(options);
- const tlog = createTLogClient(options);
- const idps = configureIdentityProviders(options);
+ const ca = config.createCAClient(options);
+ const tlog = config.createTLogClient(options);
+ const idps = config.identityProviders(options);
const signer = new sign_1.Signer({
ca,
tlog,
@@ -78,9 +58,9 @@ async function sign(payload, options = {}) {
}
exports.sign = sign;
async function attest(payload, payloadType, options = {}) {
- const ca = createCAClient(options);
- const tlog = createTLogClient(options);
- const idps = configureIdentityProviders(options);
+ const ca = config.createCAClient(options);
+ const tlog = config.createTLogClient(options);
+ const idps = config.identityProviders(options);
const signer = new sign_1.Signer({
ca,
tlog,
@@ -91,94 +71,32 @@ async function attest(payload, payloadType, options = {}) {
}
exports.attest = attest;
async function verify(bundle, payload, options = {}) {
- const trustedRoot = await tuf.getTrustedRoot(tufCacheDir, {
+ const trustedRoot = await tuf.getTrustedRoot({
mirrorURL: options.tufMirrorURL,
rootPath: options.tufRootPath,
+ cachePath: options.tufCachePath,
});
const verifier = new verify_1.Verifier(trustedRoot, options.keySelector);
const deserializedBundle = sigstore.bundleFromJSON(bundle);
- const opts = collectArtifactVerificationOptions(options);
+ const opts = config.artifactVerificationOptions(options);
return verifier.verify(deserializedBundle, opts, payload);
}
exports.verify = verify;
-// Translates the IdenityProviderOptions into a list of Providers which
-// should be queried to retrieve an identity token.
-function configureIdentityProviders(options) {
- const idps = [];
- const token = options.identityToken;
- // If an explicit identity token is provided, use that. Setup a dummy
- // provider that just returns the token. Otherwise, setup the CI context
- // provider and (optionally) the OAuth provider.
- if (token) {
- idps.push({ getToken: () => Promise.resolve(token) });
- }
- else {
- idps.push(identity_1.default.ciContextProvider());
- if (options.oidcIssuer && options.oidcClientID) {
- idps.push(identity_1.default.oauthProvider({
- issuer: options.oidcIssuer,
- clientID: options.oidcClientID,
- clientSecret: options.oidcClientSecret,
- redirectURL: options.oidcRedirectURL,
- }));
- }
- }
- return idps;
-}
-// Assembles the AtifactVerificationOptions from the supplied VerifyOptions.
-function collectArtifactVerificationOptions(options) {
- // The trusted signers are only used if the options contain a certificate
- // issuer
- let signers;
- if (options.certificateIssuer) {
- let san = undefined;
- if (options.certificateIdentityEmail) {
- san = {
- type: sigstore.SubjectAlternativeNameType.EMAIL,
- identity: {
- $case: 'value',
- value: options.certificateIdentityEmail,
- },
- };
- }
- else if (options.certificateIdentityURI) {
- san = {
- type: sigstore.SubjectAlternativeNameType.URI,
- identity: {
- $case: 'value',
- value: options.certificateIdentityURI,
- },
- };
- }
- const oids = Object.entries(options.certificateOIDs || {}).map(([oid, value]) => ({
- oid: { id: oid.split('.').map((s) => parseInt(s, 10)) },
- value: Buffer.from(value),
- }));
- signers = {
- $case: 'certificateIdentities',
- certificateIdentities: {
- identities: [
- {
- issuer: options.certificateIssuer,
- san: san,
- oids: oids,
- },
- ],
- },
- };
- }
- // Construct the artifact verification options w/ defaults
- return {
- ctlogOptions: {
- disable: false,
- threshold: options.ctLogThreshold || 1,
- detachedSct: false,
- },
- tlogOptions: {
- disable: false,
- threshold: options.tlogThreshold || 1,
- performOnlineVerification: false,
- },
- signers,
- };
-}
+const tufUtils = {
+ getTarget: (path, options = {}) => {
+ return tuf.getTarget(path, {
+ mirrorURL: options.tufMirrorURL,
+ rootPath: options.tufRootPath,
+ cachePath: options.tufCachePath,
+ });
+ },
+};
+exports.tuf = tufUtils;
+var error_1 = require("./error");
+Object.defineProperty(exports, "InternalError", { enumerable: true, get: function () { return error_1.InternalError; } });
+Object.defineProperty(exports, "PolicyError", { enumerable: true, get: function () { return error_1.PolicyError; } });
+Object.defineProperty(exports, "ValidationError", { enumerable: true, get: function () { return error_1.ValidationError; } });
+Object.defineProperty(exports, "VerificationError", { enumerable: true, get: function () { return error_1.VerificationError; } });
+exports.utils = __importStar(require("./sigstore-utils"));
+exports.DEFAULT_FULCIO_URL = config.DEFAULT_FULCIO_URL;
+exports.DEFAULT_REKOR_URL = config.DEFAULT_REKOR_URL;
diff --git a/deps/npm/node_modules/sigstore/dist/tlog/index.js b/deps/npm/node_modules/sigstore/dist/tlog/index.js
index c2734808fd..4193e55752 100644
--- a/deps/npm/node_modules/sigstore/dist/tlog/index.js
+++ b/deps/npm/node_modules/sigstore/dist/tlog/index.js
@@ -16,14 +16,13 @@ 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.
*/
-const client_1 = require("../client");
-const error_1 = require("../client/error");
-const error_2 = require("../error");
+const error_1 = require("../error");
+const external_1 = require("../external");
const sigstore_1 = require("../types/sigstore");
const format_1 = require("./format");
class TLogClient {
constructor(options) {
- this.rekor = new client_1.Rekor({ baseURL: options.rekorBaseURL });
+ this.rekor = new external_1.Rekor({ baseURL: options.rekorBaseURL });
}
async createMessageSignatureEntry(digest, sigMaterial, options = {}) {
const proposedEntry = (0, format_1.toProposedHashedRekordEntry)(digest, sigMaterial);
@@ -49,11 +48,19 @@ class TLogClient {
entry = await this.rekor.getEntry(uuid);
}
catch (err) {
- throw new error_2.InternalError('error fetching tlog entry', err);
+ throw new error_1.InternalError({
+ code: 'TLOG_FETCH_ENTRY_ERROR',
+ message: 'error fetching tlog entry',
+ cause: err,
+ });
}
}
else {
- throw new error_2.InternalError('error creating tlog entry', err);
+ throw new error_1.InternalError({
+ code: 'TLOG_CREATE_ENTRY_ERROR',
+ message: 'error creating tlog entry',
+ cause: err,
+ });
}
}
return entry;
@@ -61,7 +68,7 @@ class TLogClient {
}
exports.TLogClient = TLogClient;
function entryExistsError(value) {
- return (value instanceof error_1.HTTPError &&
+ return (value instanceof external_1.HTTPError &&
value.statusCode === 409 &&
value.location !== undefined);
}
diff --git a/deps/npm/node_modules/sigstore/dist/tuf/index.d.ts b/deps/npm/node_modules/sigstore/dist/tuf/index.d.ts
index 455fc6af06..53b9c094d5 100644
--- a/deps/npm/node_modules/sigstore/dist/tuf/index.d.ts
+++ b/deps/npm/node_modules/sigstore/dist/tuf/index.d.ts
@@ -1,6 +1,8 @@
import * as sigstore from '../types/sigstore';
export interface TUFOptions {
+ cachePath?: string;
mirrorURL?: string;
rootPath?: string;
}
-export declare function getTrustedRoot(cachePath: string, options?: TUFOptions): Promise<sigstore.TrustedRoot>;
+export declare function getTrustedRoot(options?: TUFOptions): Promise<sigstore.TrustedRoot>;
+export declare function getTarget(targetName: string, options?: TUFOptions): Promise<string>;
diff --git a/deps/npm/node_modules/sigstore/dist/tuf/index.js b/deps/npm/node_modules/sigstore/dist/tuf/index.js
index 824bce9105..89923d63fa 100644
--- a/deps/npm/node_modules/sigstore/dist/tuf/index.js
+++ b/deps/npm/node_modules/sigstore/dist/tuf/index.js
@@ -26,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
-exports.getTrustedRoot = void 0;
+exports.getTarget = exports.getTrustedRoot = void 0;
/*
Copyright 2023 The Sigstore Authors.
@@ -46,20 +46,27 @@ const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const tuf_js_1 = require("tuf-js");
const sigstore = __importStar(require("../types/sigstore"));
+const util_1 = require("../util");
const target_1 = require("./target");
const TRUSTED_ROOT_TARGET = 'trusted_root.json';
-const DEFAULT_MIRROR_URL = 'https://sigstore-tuf-root.storage.googleapis.com';
+const DEFAULT_CACHE_DIR = util_1.appdata.appDataPath('sigstore-js');
+const DEFAULT_MIRROR_URL = 'https://tuf-repo-cdn.sigstore.dev';
const DEFAULT_TUF_ROOT_PATH = '../../store/public-good-instance-root.json';
-async function getTrustedRoot(cachePath, options = {}) {
+async function getTrustedRoot(options = {}) {
+ const trustedRoot = await getTarget(TRUSTED_ROOT_TARGET, options);
+ return sigstore.TrustedRoot.fromJSON(JSON.parse(trustedRoot));
+}
+exports.getTrustedRoot = getTrustedRoot;
+async function getTarget(targetName, options = {}) {
+ const cachePath = options.cachePath || DEFAULT_CACHE_DIR;
const tufRootPath = options.rootPath || require.resolve(DEFAULT_TUF_ROOT_PATH);
const mirrorURL = options.mirrorURL || DEFAULT_MIRROR_URL;
initTufCache(cachePath, tufRootPath);
const remote = initRemoteConfig(cachePath, mirrorURL);
const repoClient = initClient(cachePath, remote);
- const trustedRoot = await (0, target_1.getTarget)(repoClient, TRUSTED_ROOT_TARGET);
- return sigstore.TrustedRoot.fromJSON(JSON.parse(trustedRoot));
+ return (0, target_1.readTarget)(repoClient, targetName);
}
-exports.getTrustedRoot = getTrustedRoot;
+exports.getTarget = getTarget;
// Initializes the TUF cache directory structure including the initial
// root.json file. If the cache directory does not exist, it will be
// created. If the targets directory does not exist, it will be created.
diff --git a/deps/npm/node_modules/sigstore/dist/tuf/target.d.ts b/deps/npm/node_modules/sigstore/dist/tuf/target.d.ts
index aed81654f3..a00af45ed1 100644
--- a/deps/npm/node_modules/sigstore/dist/tuf/target.d.ts
+++ b/deps/npm/node_modules/sigstore/dist/tuf/target.d.ts
@@ -1,2 +1,2 @@
import { Updater } from 'tuf-js';
-export declare function getTarget(tuf: Updater, targetPath: string): Promise<string>;
+export declare function readTarget(tuf: Updater, targetPath: string): Promise<string>;
diff --git a/deps/npm/node_modules/sigstore/dist/tuf/target.js b/deps/npm/node_modules/sigstore/dist/tuf/target.js
index ac708cdbcf..b79411c3dd 100644
--- a/deps/npm/node_modules/sigstore/dist/tuf/target.js
+++ b/deps/npm/node_modules/sigstore/dist/tuf/target.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.getTarget = void 0;
+exports.readTarget = void 0;
/*
Copyright 2023 The Sigstore Authors.
@@ -21,29 +21,45 @@ limitations under the License.
*/
const fs_1 = __importDefault(require("fs"));
const error_1 = require("../error");
+// Downloads and returns the specified target from the provided TUF Updater.
+async function readTarget(tuf, targetPath) {
+ const path = await getTargetPath(tuf, targetPath);
+ return new Promise((resolve, reject) => {
+ fs_1.default.readFile(path, 'utf-8', (err, data) => {
+ if (err) {
+ reject(new error_1.InternalError({
+ code: 'TUF_READ_TARGET_ERROR',
+ message: `error reading target ${path}`,
+ cause: err,
+ }));
+ }
+ else {
+ resolve(data);
+ }
+ });
+ });
+}
+exports.readTarget = readTarget;
// Returns the local path to the specified target. If the target is not yet
// cached locally, the provided TUF Updater will be used to download and
// cache the target.
-async function getTarget(tuf, targetPath) {
- const path = await getTargetPath(tuf, targetPath);
- try {
- return fs_1.default.readFileSync(path, 'utf-8');
- }
- catch (err) {
- throw new error_1.InternalError(`error reading trusted root: ${err}`);
- }
-}
-exports.getTarget = getTarget;
async function getTargetPath(tuf, target) {
let targetInfo;
try {
targetInfo = await tuf.refresh().then(() => tuf.getTargetInfo(target));
}
catch (err) {
- throw new error_1.InternalError(`error refreshing TUF metadata: ${err}`);
+ throw new error_1.InternalError({
+ code: 'TUF_REFRESH_METADATA_ERROR',
+ message: 'error refreshing TUF metadata',
+ cause: err,
+ });
}
if (!targetInfo) {
- throw new error_1.InternalError(`target ${target} not found`);
+ throw new error_1.InternalError({
+ code: 'TUF_FIND_TARGET_ERROR',
+ message: `target ${target} not found`,
+ });
}
let path = await tuf.findCachedTarget(targetInfo);
// An empty path here means the target has not been cached locally, or is
@@ -53,7 +69,11 @@ async function getTargetPath(tuf, target) {
path = await tuf.downloadTarget(targetInfo);
}
catch (err) {
- throw new error_1.InternalError(`error downloading target: ${err}`);
+ throw new error_1.InternalError({
+ code: 'TUF_DOWNLOAD_TARGET_ERROR',
+ message: `error downloading target ${path}`,
+ cause: err,
+ });
}
}
return path;
diff --git a/deps/npm/node_modules/sigstore/dist/types/sigstore/index.d.ts b/deps/npm/node_modules/sigstore/dist/types/sigstore/index.d.ts
index 70b2896fbd..e80e6b15e6 100644
--- a/deps/npm/node_modules/sigstore/dist/types/sigstore/index.d.ts
+++ b/deps/npm/node_modules/sigstore/dist/types/sigstore/index.d.ts
@@ -8,10 +8,7 @@ import { ValidBundle } from './validate';
export * from '@sigstore/protobuf-specs';
export * from './serialized';
export * from './validate';
-export declare const bundleToJSON: (message: Bundle) => unknown;
export declare const bundleFromJSON: (obj: any) => ValidBundle;
-export declare const envelopeToJSON: (message: Envelope) => unknown;
-export declare const envelopeFromJSON: (object: any) => Envelope;
export type BundleWithVerificationMaterial = WithRequired<Bundle, 'verificationMaterial'>;
export declare function isBundleWithVerificationMaterial(bundle: Bundle): bundle is BundleWithVerificationMaterial;
export type BundleWithCertificateChain = Bundle & {
diff --git a/deps/npm/node_modules/sigstore/dist/types/sigstore/index.js b/deps/npm/node_modules/sigstore/dist/types/sigstore/index.js
index 55df7e744d..9fcdb42bdc 100644
--- a/deps/npm/node_modules/sigstore/dist/types/sigstore/index.js
+++ b/deps/npm/node_modules/sigstore/dist/types/sigstore/index.js
@@ -14,7 +14,7 @@ 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.signingCertificate = exports.bundle = exports.isVerifiableTransparencyLogEntry = exports.isCAVerificationOptions = exports.isBundleWithCertificateChain = exports.isBundleWithVerificationMaterial = exports.envelopeFromJSON = exports.envelopeToJSON = exports.bundleFromJSON = exports.bundleToJSON = void 0;
+exports.signingCertificate = exports.bundle = exports.isVerifiableTransparencyLogEntry = exports.isCAVerificationOptions = exports.isBundleWithCertificateChain = exports.isBundleWithVerificationMaterial = exports.bundleFromJSON = void 0;
/*
Copyright 2023 The Sigstore Authors.
@@ -37,7 +37,6 @@ const validate_1 = require("./validate");
__exportStar(require("@sigstore/protobuf-specs"), exports);
__exportStar(require("./serialized"), exports);
__exportStar(require("./validate"), exports);
-exports.bundleToJSON = protobuf_specs_1.Bundle.toJSON;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const bundleFromJSON = (obj) => {
const bundle = protobuf_specs_1.Bundle.fromJSON(obj);
@@ -45,8 +44,6 @@ const bundleFromJSON = (obj) => {
return bundle;
};
exports.bundleFromJSON = bundleFromJSON;
-exports.envelopeToJSON = protobuf_specs_1.Envelope.toJSON;
-exports.envelopeFromJSON = protobuf_specs_1.Envelope.fromJSON;
const BUNDLE_MEDIA_TYPE = 'application/vnd.dev.sigstore.bundle+json;version=0.1';
// Type guard for narrowing a Bundle to a BundleWithVerificationMaterial
function isBundleWithVerificationMaterial(bundle) {
diff --git a/deps/npm/node_modules/sigstore/dist/x509/ext.d.ts b/deps/npm/node_modules/sigstore/dist/x509/ext.d.ts
index 04e5460604..afee31ad30 100644
--- a/deps/npm/node_modules/sigstore/dist/x509/ext.d.ts
+++ b/deps/npm/node_modules/sigstore/dist/x509/ext.d.ts
@@ -7,6 +7,7 @@ export declare class x509Extension {
get oid(): string;
get critical(): boolean;
get value(): Buffer;
+ get valueObj(): ASN1Obj;
protected get extnValueObj(): ASN1Obj;
}
export declare class x509BasicConstraintsExtension extends x509Extension {
diff --git a/deps/npm/node_modules/sigstore/dist/x509/ext.js b/deps/npm/node_modules/sigstore/dist/x509/ext.js
index caed59247e..c1743dce55 100644
--- a/deps/npm/node_modules/sigstore/dist/x509/ext.js
+++ b/deps/npm/node_modules/sigstore/dist/x509/ext.js
@@ -34,6 +34,9 @@ class x509Extension {
get value() {
return this.extnValueObj.value;
}
+ get valueObj() {
+ return this.extnValueObj;
+ }
get extnValueObj() {
// The extnValue field will be the last element of the extension sequence
return this.root.subs[this.root.subs.length - 1];
diff --git a/deps/npm/node_modules/sigstore/package.json b/deps/npm/node_modules/sigstore/package.json
index 0ef3fe90f4..2df3467186 100644
--- a/deps/npm/node_modules/sigstore/package.json
+++ b/deps/npm/node_modules/sigstore/package.json
@@ -1,6 +1,6 @@
{
"name": "sigstore",
- "version": "1.2.0",
+ "version": "1.4.0",
"description": "code-signing for npm packages",
"main": "dist/index.js",
"types": "dist/index.d.ts",
@@ -37,7 +37,9 @@
"homepage": "https://github.com/sigstore/sigstore-js#readme",
"devDependencies": {
"@changesets/cli": "^2.26.0",
+ "@total-typescript/shoehorn": "^0.1.0",
"@tsconfig/node14": "^1.0.3",
+ "@tufjs/repo-mock": "^1.1.0",
"@types/jest": "^29.4.0",
"@types/make-fetch-happen": "^10.0.0",
"@types/node": "^18.6.5",
@@ -56,7 +58,7 @@
"dependencies": {
"@sigstore/protobuf-specs": "^0.1.0",
"make-fetch-happen": "^11.0.1",
- "tuf-js": "^1.0.0"
+ "tuf-js": "^1.1.3"
},
"engines": {
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
diff --git a/deps/npm/node_modules/ssri/lib/index.js b/deps/npm/node_modules/ssri/lib/index.js
index e142431680..d0ff9dfaf2 100644
--- a/deps/npm/node_modules/ssri/lib/index.js
+++ b/deps/npm/node_modules/ssri/lib/index.js
@@ -1,7 +1,7 @@
'use strict'
const crypto = require('crypto')
-const MiniPass = require('minipass')
+const { Minipass } = require('minipass')
const SPEC_ALGORITHMS = ['sha512', 'sha384', 'sha256']
const DEFAULT_ALGORITHMS = ['sha512']
@@ -15,7 +15,7 @@ const VCHAR_REGEX = /^[\x21-\x7E]+$/
const getOptString = options => options?.length ? `?${options.join('?')}` : ''
-class IntegrityStream extends MiniPass {
+class IntegrityStream extends Minipass {
#emittedIntegrity
#emittedSize
#emittedVerified
@@ -29,10 +29,15 @@ class IntegrityStream extends MiniPass {
this.#getOptions()
// options used for calculating stream. can't be changed.
- const algorithms = opts?.algorithms || DEFAULT_ALGORITHMS
- this.algorithms = Array.from(
- new Set(algorithms.concat(this.algorithm ? [this.algorithm] : []))
- )
+ 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)
}
@@ -40,8 +45,17 @@ class IntegrityStream extends MiniPass {
// For verification
this.sri = this.opts?.integrity ? parse(this.opts?.integrity, this.opts) : null
this.expectedSize = this.opts?.size
- this.goodSri = this.sri ? !!Object.keys(this.sri).length : false
- this.algorithm = this.goodSri ? this.sri.pickAlgorithm(this.opts) : null
+
+ 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)
}
@@ -159,6 +173,29 @@ class Hash {
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
@@ -285,8 +322,9 @@ class Integrity {
if (!other) {
return false
}
- const algo = other.pickAlgorithm(opts)
+ const algo = other.pickAlgorithm(opts, Object.keys(this))
return (
+ !!algo &&
this[algo] &&
other[algo] &&
this[algo].find(hash =>
@@ -297,12 +335,22 @@ class Integrity {
) || false
}
- pickAlgorithm (opts) {
+ // 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)
- return keys.reduce((acc, algo) => {
- return pickAlgorithm(acc, algo) || acc
+ 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
}
}
@@ -365,7 +413,7 @@ function fromHex (hexDigest, algorithm, opts) {
module.exports.fromData = fromData
function fromData (data, opts) {
- const algorithms = opts?.algorithms || DEFAULT_ALGORITHMS
+ 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')
@@ -399,7 +447,7 @@ function fromStream (stream, opts) {
sri = s
})
istream.on('end', () => resolve(sri))
- istream.on('data', () => {})
+ istream.resume()
})
}
@@ -466,7 +514,7 @@ function checkStream (stream, sri, opts) {
verified = s
})
checker.on('end', () => resolve(verified))
- checker.on('data', () => {})
+ checker.resume()
})
}
@@ -477,7 +525,7 @@ function integrityStream (opts = Object.create(null)) {
module.exports.create = createIntegrity
function createIntegrity (opts) {
- const algorithms = opts?.algorithms || DEFAULT_ALGORITHMS
+ const algorithms = opts?.algorithms || [...DEFAULT_ALGORITHMS]
const optString = getOptString(opts?.options)
const hashes = algorithms.map(crypto.createHash)
@@ -512,7 +560,7 @@ function createIntegrity (opts) {
}
}
-const NODE_HASHES = new Set(crypto.getHashes())
+const NODE_HASHES = crypto.getHashes()
// This is a Best Effort™ at a reasonable priority for hash algos
const DEFAULT_PRIORITY = [
@@ -522,7 +570,7 @@ const DEFAULT_PRIORITY = [
'sha3',
'sha3-256', 'sha3-384', 'sha3-512',
'sha3_256', 'sha3_384', 'sha3_512',
-].filter(algo => NODE_HASHES.has(algo))
+].filter(algo => NODE_HASHES.includes(algo))
function getPrioritizedHash (algo1, algo2) {
/* eslint-disable-next-line max-len */
diff --git a/deps/npm/node_modules/ssri/package.json b/deps/npm/node_modules/ssri/package.json
index 4d5963e9a0..815c7f3ed0 100644
--- a/deps/npm/node_modules/ssri/package.json
+++ b/deps/npm/node_modules/ssri/package.json
@@ -1,6 +1,6 @@
{
"name": "ssri",
- "version": "10.0.2",
+ "version": "10.0.4",
"description": "Standard Subresource Integrity library -- parses, serializes, generates, and verifies integrity metadata according to the SRI spec.",
"main": "lib/index.js",
"files": [
@@ -47,11 +47,11 @@
"author": "GitHub Inc.",
"license": "ISC",
"dependencies": {
- "minipass": "^4.0.0"
+ "minipass": "^5.0.0"
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.13.0",
+ "@npmcli/template-oss": "4.14.1",
"tap": "^16.0.1"
},
"engines": {
@@ -59,7 +59,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.13.0",
+ "version": "4.14.1",
"publish": "true"
}
}
diff --git a/deps/npm/node_modules/string-width-cjs/index.js b/deps/npm/node_modules/string-width-cjs/index.js
new file mode 100644
index 0000000000..f4d261a96a
--- /dev/null
+++ b/deps/npm/node_modules/string-width-cjs/index.js
@@ -0,0 +1,47 @@
+'use strict';
+const stripAnsi = require('strip-ansi');
+const isFullwidthCodePoint = require('is-fullwidth-code-point');
+const emojiRegex = require('emoji-regex');
+
+const stringWidth = string => {
+ if (typeof string !== 'string' || string.length === 0) {
+ return 0;
+ }
+
+ string = stripAnsi(string);
+
+ if (string.length === 0) {
+ return 0;
+ }
+
+ string = string.replace(emojiRegex(), ' ');
+
+ let width = 0;
+
+ for (let i = 0; i < string.length; i++) {
+ const code = string.codePointAt(i);
+
+ // Ignore control characters
+ if (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) {
+ continue;
+ }
+
+ // Ignore combining characters
+ if (code >= 0x300 && code <= 0x36F) {
+ continue;
+ }
+
+ // Surrogates
+ if (code > 0xFFFF) {
+ i++;
+ }
+
+ width += isFullwidthCodePoint(code) ? 2 : 1;
+ }
+
+ return width;
+};
+
+module.exports = stringWidth;
+// TODO: remove this in the next major version
+module.exports.default = stringWidth;
diff --git a/deps/npm/node_modules/string-width-cjs/license b/deps/npm/node_modules/string-width-cjs/license
new file mode 100644
index 0000000000..e7af2f7710
--- /dev/null
+++ b/deps/npm/node_modules/string-width-cjs/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (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/string-width-cjs/package.json b/deps/npm/node_modules/string-width-cjs/package.json
new file mode 100644
index 0000000000..28ba7b4cae
--- /dev/null
+++ b/deps/npm/node_modules/string-width-cjs/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "string-width",
+ "version": "4.2.3",
+ "description": "Get the visual width of a string - the number of columns required to display it",
+ "license": "MIT",
+ "repository": "sindresorhus/string-width",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "sindresorhus.com"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "scripts": {
+ "test": "xo && ava && tsd"
+ },
+ "files": [
+ "index.js",
+ "index.d.ts"
+ ],
+ "keywords": [
+ "string",
+ "character",
+ "unicode",
+ "width",
+ "visual",
+ "column",
+ "columns",
+ "fullwidth",
+ "full-width",
+ "full",
+ "ansi",
+ "escape",
+ "codes",
+ "cli",
+ "command-line",
+ "terminal",
+ "console",
+ "cjk",
+ "chinese",
+ "japanese",
+ "korean",
+ "fixed-width"
+ ],
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "devDependencies": {
+ "ava": "^1.4.1",
+ "tsd": "^0.7.1",
+ "xo": "^0.24.0"
+ }
+}
diff --git a/deps/npm/node_modules/strip-ansi-cjs/index.js b/deps/npm/node_modules/strip-ansi-cjs/index.js
new file mode 100644
index 0000000000..9a593dfcd1
--- /dev/null
+++ b/deps/npm/node_modules/strip-ansi-cjs/index.js
@@ -0,0 +1,4 @@
+'use strict';
+const ansiRegex = require('ansi-regex');
+
+module.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string;
diff --git a/deps/npm/node_modules/strip-ansi-cjs/license b/deps/npm/node_modules/strip-ansi-cjs/license
new file mode 100644
index 0000000000..e7af2f7710
--- /dev/null
+++ b/deps/npm/node_modules/strip-ansi-cjs/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (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/strip-ansi-cjs/package.json b/deps/npm/node_modules/strip-ansi-cjs/package.json
new file mode 100644
index 0000000000..1a41108d42
--- /dev/null
+++ b/deps/npm/node_modules/strip-ansi-cjs/package.json
@@ -0,0 +1,54 @@
+{
+ "name": "strip-ansi",
+ "version": "6.0.1",
+ "description": "Strip ANSI escape codes from a string",
+ "license": "MIT",
+ "repository": "chalk/strip-ansi",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "sindresorhus.com"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "scripts": {
+ "test": "xo && ava && tsd"
+ },
+ "files": [
+ "index.js",
+ "index.d.ts"
+ ],
+ "keywords": [
+ "strip",
+ "trim",
+ "remove",
+ "ansi",
+ "styles",
+ "color",
+ "colour",
+ "colors",
+ "terminal",
+ "console",
+ "string",
+ "tty",
+ "escape",
+ "formatting",
+ "rgb",
+ "256",
+ "shell",
+ "xterm",
+ "log",
+ "logging",
+ "command-line",
+ "text"
+ ],
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "devDependencies": {
+ "ava": "^2.4.0",
+ "tsd": "^0.10.0",
+ "xo": "^0.25.3"
+ }
+}
diff --git a/deps/npm/node_modules/tar/lib/pack.js b/deps/npm/node_modules/tar/lib/pack.js
index a3f4ff220a..938ece8e73 100644
--- a/deps/npm/node_modules/tar/lib/pack.js
+++ b/deps/npm/node_modules/tar/lib/pack.js
@@ -22,7 +22,7 @@ class PackJob {
}
}
-const MiniPass = require('minipass')
+const { Minipass } = require('minipass')
const zlib = require('minizlib')
const ReadEntry = require('./read-entry.js')
const WriteEntry = require('./write-entry.js')
@@ -56,7 +56,7 @@ const path = require('path')
const warner = require('./warn-mixin.js')
const normPath = require('./normalize-windows-path.js')
-const Pack = warner(class Pack extends MiniPass {
+const Pack = warner(class Pack extends Minipass {
constructor (opt) {
super(opt)
opt = opt || Object.create(null)
diff --git a/deps/npm/node_modules/tar/lib/read-entry.js b/deps/npm/node_modules/tar/lib/read-entry.js
index 7f44bebfc1..6186266e89 100644
--- a/deps/npm/node_modules/tar/lib/read-entry.js
+++ b/deps/npm/node_modules/tar/lib/read-entry.js
@@ -1,9 +1,9 @@
'use strict'
-const MiniPass = require('minipass')
+const { Minipass } = require('minipass')
const normPath = require('./normalize-windows-path.js')
const SLURP = Symbol('slurp')
-module.exports = class ReadEntry extends MiniPass {
+module.exports = class ReadEntry extends Minipass {
constructor (header, ex, gex) {
super()
// read entries always start life paused. this is to avoid the
diff --git a/deps/npm/node_modules/tar/lib/write-entry.js b/deps/npm/node_modules/tar/lib/write-entry.js
index 3b5540f76c..7d2f3eb1ac 100644
--- a/deps/npm/node_modules/tar/lib/write-entry.js
+++ b/deps/npm/node_modules/tar/lib/write-entry.js
@@ -1,5 +1,5 @@
'use strict'
-const MiniPass = require('minipass')
+const { Minipass } = require('minipass')
const Pax = require('./pax.js')
const Header = require('./header.js')
const fs = require('fs')
@@ -41,7 +41,7 @@ const stripAbsolutePath = require('./strip-absolute-path.js')
const modeFix = require('./mode-fix.js')
-const WriteEntry = warner(class WriteEntry extends MiniPass {
+const WriteEntry = warner(class WriteEntry extends Minipass {
constructor (p, opt) {
opt = opt || {}
super(opt)
@@ -417,7 +417,7 @@ class WriteEntrySync extends WriteEntry {
}
}
-const WriteEntryTar = warner(class WriteEntryTar extends MiniPass {
+const WriteEntryTar = warner(class WriteEntryTar extends Minipass {
constructor (readEntry, opt) {
opt = opt || {}
super(opt)
diff --git a/deps/npm/node_modules/tar/package.json b/deps/npm/node_modules/tar/package.json
index e6d6b93340..943c8b4d06 100644
--- a/deps/npm/node_modules/tar/package.json
+++ b/deps/npm/node_modules/tar/package.json
@@ -2,10 +2,10 @@
"author": "GitHub Inc.",
"name": "tar",
"description": "tar for node",
- "version": "6.1.13",
+ "version": "6.1.14",
"repository": {
"type": "git",
- "url": "https://github.com/npm/node-tar.git"
+ "url": "https://github.com/isaacs/node-tar.git"
},
"scripts": {
"genparse": "node scripts/generate-parse-fixtures.js",
@@ -20,14 +20,14 @@
"dependencies": {
"chownr": "^2.0.0",
"fs-minipass": "^2.0.0",
- "minipass": "^4.0.0",
+ "minipass": "^5.0.0",
"minizlib": "^2.1.1",
"mkdirp": "^1.0.3",
"yallist": "^4.0.0"
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.10.0",
+ "@npmcli/template-oss": "4.11.0",
"chmodr": "^1.2.0",
"end-of-stream": "^1.4.3",
"events-to-array": "^2.0.3",
@@ -55,7 +55,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.10.0",
+ "version": "4.11.0",
"content": "scripts/template-oss",
"engines": ">=10",
"distPaths": [
diff --git a/deps/npm/node_modules/tuf-js/dist/updater.js b/deps/npm/node_modules/tuf-js/dist/updater.js
index 7f8b6bedee..68243e554f 100644
--- a/deps/npm/node_modules/tuf-js/dist/updater.js
+++ b/deps/npm/node_modules/tuf-js/dist/updater.js
@@ -31,6 +31,7 @@ const config_1 = require("./config");
const error_1 = require("./error");
const fetcher_1 = require("./fetcher");
const store_1 = require("./store");
+const url = __importStar(require("./utils/url"));
class Updater {
constructor(options) {
const { metadataDir, metadataBaseUrl, targetDir, targetBaseUrl, fetcher, config, } = options;
@@ -75,12 +76,13 @@ class Updater {
const consistentSnapshot = this.trustedSet.root.signed.consistentSnapshot;
if (consistentSnapshot && this.config.prefixTargetsWithHash) {
const hashes = Object.values(targetInfo.hashes);
- const basename = path.basename(targetFilePath);
- targetFilePath = `${hashes[0]}.${basename}`;
+ const { dir, base } = path.parse(targetFilePath);
+ const filename = `${hashes[0]}.${base}`;
+ targetFilePath = dir ? `${dir}/${filename}` : filename;
}
- const url = path.join(targetBaseUrl, targetFilePath);
+ const targetUrl = url.join(targetBaseUrl, targetFilePath);
// Client workflow 5.7.3: download target file
- await this.fetcher.downloadFile(url, targetInfo.length, async (fileName) => {
+ await this.fetcher.downloadFile(targetUrl, targetInfo.length, async (fileName) => {
// Verify hashes and length of downloaded file
await targetInfo.verify(fs.createReadStream(fileName));
// Copy file to target path
@@ -116,10 +118,10 @@ class Updater {
const lowerBound = rootVersion + 1;
const upperBound = lowerBound + this.config.maxRootRotations;
for (let version = lowerBound; version <= upperBound; version++) {
- const url = path.join(this.metadataBaseUrl, `${version}.root.json`);
+ const rootUrl = url.join(this.metadataBaseUrl, `${version}.root.json`);
try {
// Client workflow 5.3.3: download new root metadata file
- const bytesData = await this.fetcher.downloadBytes(url, this.config.rootMaxLength);
+ const bytesData = await this.fetcher.downloadBytes(rootUrl, this.config.rootMaxLength);
// Client workflow 5.3.4 - 5.4.7
this.trustedSet.updateRoot(bytesData);
// Client workflow 5.3.8: persist root metadata file
@@ -142,9 +144,9 @@ class Updater {
// continue
}
//Load from remote (whether local load succeeded or not)
- const url = path.join(this.metadataBaseUrl, `timestamp.json`);
+ const timestampUrl = url.join(this.metadataBaseUrl, 'timestamp.json');
// Client workflow 5.4.1: download timestamp metadata file
- const bytesData = await this.fetcher.downloadBytes(url, this.config.timestampMaxLength);
+ const bytesData = await this.fetcher.downloadBytes(timestampUrl, this.config.timestampMaxLength);
try {
// Client workflow 5.4.2 - 5.4.4
this.trustedSet.updateTimestamp(bytesData);
@@ -178,10 +180,10 @@ class Updater {
const version = this.trustedSet.root.signed.consistentSnapshot
? snapshotMeta.version
: undefined;
- const url = path.join(this.metadataBaseUrl, version ? `${version}.snapshot.json` : `snapshot.json`);
+ const snapshotUrl = url.join(this.metadataBaseUrl, version ? `${version}.snapshot.json` : 'snapshot.json');
try {
// Client workflow 5.5.1: download snapshot metadata file
- const bytesData = await this.fetcher.downloadBytes(url, maxLength);
+ const bytesData = await this.fetcher.downloadBytes(snapshotUrl, maxLength);
// Client workflow 5.5.2 - 5.5.6
this.trustedSet.updateSnapshot(bytesData);
// Client workflow 5.5.7: persist snapshot metadata file
@@ -213,10 +215,10 @@ class Updater {
const version = this.trustedSet.root.signed.consistentSnapshot
? metaInfo.version
: undefined;
- const url = path.join(this.metadataBaseUrl, version ? `${version}.${role}.json` : `${role}.json`);
+ const metadataUrl = url.join(this.metadataBaseUrl, version ? `${version}.${role}.json` : `${role}.json`);
try {
// Client workflow 5.6.1: download targets metadata file
- const bytesData = await this.fetcher.downloadBytes(url, maxLength);
+ const bytesData = await this.fetcher.downloadBytes(metadataUrl, maxLength);
// Client workflow 5.6.2 - 5.6.6
this.trustedSet.updateDelegatedTargets(bytesData, role, parentRole);
// Client workflow 5.6.7: persist targets metadata file
@@ -291,7 +293,9 @@ class Updater {
if (!this.targetDir) {
throw new error_1.ValueError('Target directory not set');
}
- return path.join(this.targetDir, targetInfo.path);
+ // URL encode target path
+ const filePath = encodeURIComponent(targetInfo.path);
+ return path.join(this.targetDir, filePath);
}
async persistMetadata(metaDataName, bytesData) {
try {
diff --git a/deps/npm/node_modules/tuf-js/dist/utils/url.js b/deps/npm/node_modules/tuf-js/dist/utils/url.js
new file mode 100644
index 0000000000..ce67fe2c23
--- /dev/null
+++ b/deps/npm/node_modules/tuf-js/dist/utils/url.js
@@ -0,0 +1,14 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.join = void 0;
+const url_1 = require("url");
+function join(base, path) {
+ return new url_1.URL(ensureTrailingSlash(base) + removeLeadingSlash(path)).toString();
+}
+exports.join = join;
+function ensureTrailingSlash(path) {
+ return path.endsWith('/') ? path : path + '/';
+}
+function removeLeadingSlash(path) {
+ return path.startsWith('/') ? path.slice(1) : path;
+}
diff --git a/deps/npm/node_modules/tuf-js/package.json b/deps/npm/node_modules/tuf-js/package.json
index 4396e20236..ab84004c49 100644
--- a/deps/npm/node_modules/tuf-js/package.json
+++ b/deps/npm/node_modules/tuf-js/package.json
@@ -1,6 +1,6 @@
{
"name": "tuf-js",
- "version": "1.1.2",
+ "version": "1.1.5",
"description": "JavaScript implementation of The Update Framework (TUF)",
"main": "dist/index.js",
"types": "dist/index.d.ts",
@@ -28,15 +28,15 @@
},
"homepage": "https://github.com/theupdateframework/tuf-js/tree/main/packages/client#readme",
"devDependencies": {
- "@tufjs/repo-mock": "1.0.1",
+ "@tufjs/repo-mock": "1.3.1",
"@types/make-fetch-happen": "^10.0.1",
- "@types/node": "^18.15.3",
- "nock": "^13.2.9",
- "typescript": "^4.9.5"
+ "@types/node": "^18.16.3",
+ "nock": "^13.3.1",
+ "typescript": "^5.0.4"
},
"dependencies": {
- "make-fetch-happen": "^11.0.1",
- "@tufjs/models": "1.0.1"
+ "make-fetch-happen": "^11.1.0",
+ "@tufjs/models": "1.0.4"
},
"engines": {
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
diff --git a/deps/npm/node_modules/walk-up-path/dist/cjs/index.js b/deps/npm/node_modules/walk-up-path/dist/cjs/index.js
new file mode 100644
index 0000000000..9295d00ca8
--- /dev/null
+++ b/deps/npm/node_modules/walk-up-path/dist/cjs/index.js
@@ -0,0 +1,18 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.walkUp = void 0;
+const path_1 = require("path");
+const walkUp = function* (path) {
+ for (path = (0, path_1.resolve)(path); path;) {
+ yield path;
+ const pp = (0, path_1.dirname)(path);
+ if (pp === path) {
+ break;
+ }
+ else {
+ path = pp;
+ }
+ }
+};
+exports.walkUp = walkUp;
+//# sourceMappingURL=index.js.map \ No newline at end of file
diff --git a/deps/npm/node_modules/walk-up-path/dist/cjs/package.json b/deps/npm/node_modules/walk-up-path/dist/cjs/package.json
new file mode 100644
index 0000000000..5bbefffbab
--- /dev/null
+++ b/deps/npm/node_modules/walk-up-path/dist/cjs/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "commonjs"
+}
diff --git a/deps/npm/node_modules/walk-up-path/dist/mjs/index.js b/deps/npm/node_modules/walk-up-path/dist/mjs/index.js
new file mode 100644
index 0000000000..93f37e1d81
--- /dev/null
+++ b/deps/npm/node_modules/walk-up-path/dist/mjs/index.js
@@ -0,0 +1,14 @@
+import { dirname, resolve } from 'path';
+export const walkUp = function* (path) {
+ for (path = resolve(path); path;) {
+ yield path;
+ const pp = dirname(path);
+ if (pp === path) {
+ break;
+ }
+ else {
+ path = pp;
+ }
+ }
+};
+//# sourceMappingURL=index.js.map \ No newline at end of file
diff --git a/deps/npm/node_modules/walk-up-path/dist/mjs/package.json b/deps/npm/node_modules/walk-up-path/dist/mjs/package.json
new file mode 100644
index 0000000000..3dbc1ca591
--- /dev/null
+++ b/deps/npm/node_modules/walk-up-path/dist/mjs/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "module"
+}
diff --git a/deps/npm/node_modules/walk-up-path/index.js b/deps/npm/node_modules/walk-up-path/index.js
deleted file mode 100644
index 05524a6c05..0000000000
--- a/deps/npm/node_modules/walk-up-path/index.js
+++ /dev/null
@@ -1,11 +0,0 @@
-const {dirname, resolve} = require('path')
-module.exports = function* (path) {
- for (path = resolve(path); path;) {
- yield path
- const pp = dirname(path)
- if (pp === path)
- path = null
- else
- path = pp
- }
-}
diff --git a/deps/npm/node_modules/walk-up-path/package.json b/deps/npm/node_modules/walk-up-path/package.json
index df69d92385..0931c670a8 100644
--- a/deps/npm/node_modules/walk-up-path/package.json
+++ b/deps/npm/node_modules/walk-up-path/package.json
@@ -1,9 +1,24 @@
{
"name": "walk-up-path",
- "version": "1.0.0",
+ "version": "3.0.1",
"files": [
- "index.js"
+ "dist"
],
+ "main": "./dist/cjs/index.js",
+ "module": "./dist/mjs/index.js",
+ "types": "./dist/mjs/index.d.ts",
+ "exports": {
+ ".": {
+ "require": {
+ "types": "./dist/cjs/index.d.ts",
+ "default": "./dist/cjs/index.js"
+ },
+ "import": {
+ "types": "./dist/mjs/index.d.ts",
+ "default": "./dist/mjs/index.js"
+ }
+ }
+ },
"description": "Given a path string, return a generator that walks up the path, emitting each dirname.",
"repository": {
"type": "git",
@@ -12,17 +27,46 @@
"author": "Isaac Z. Schlueter <i@izs.me> (https://izs.me)",
"license": "ISC",
"scripts": {
- "test": "tap",
- "snap": "tap",
"preversion": "npm test",
"postversion": "npm publish",
- "prepublishOnly": "git push origin --follow-tags"
+ "prepublishOnly": "git push origin --follow-tags",
+ "prepare": "tsc -p tsconfig.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",
+ "typedoc": "typedoc --tsconfig tsconfig-esm.json ./src/*.ts"
+ },
+ "prettier": {
+ "semi": false,
+ "printWidth": 75,
+ "tabWidth": 2,
+ "useTabs": false,
+ "singleQuote": true,
+ "jsxSingleQuote": false,
+ "bracketSameLine": true,
+ "arrowParens": "avoid",
+ "endOfLine": "lf"
},
"tap": {
- "check-coverage": true
+ "coverage": false,
+ "node-arg": [
+ "--no-warnings",
+ "--loader",
+ "ts-node/esm"
+ ],
+ "ts": false
},
"devDependencies": {
- "tap": "^14.10.7",
- "require-inject": "^1.4.4"
+ "@types/node": "^18.15.5",
+ "@types/tap": "^15.0.8",
+ "c8": "^7.13.0",
+ "eslint-config-prettier": "^8.8.0",
+ "prettier": "^2.8.6",
+ "tap": "^16.3.4",
+ "ts-node": "^10.9.1",
+ "typedoc": "^0.23.28",
+ "typescript": "^5.0.2"
}
}
diff --git a/deps/npm/node_modules/which/README.md b/deps/npm/node_modules/which/README.md
index a6e86ab241..942bf1e093 100644
--- a/deps/npm/node_modules/which/README.md
+++ b/deps/npm/node_modules/which/README.md
@@ -31,12 +31,15 @@ await which('node', { path: someOtherPath, pathExt: somePathExt })
## CLI USAGE
-Same as the BSD `which(1)` binary.
+Just like the BSD `which(1)` binary but using `node-which`.
```
-usage: which [-as] program ...
+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.
diff --git a/deps/npm/node_modules/which/lib/index.js b/deps/npm/node_modules/which/lib/index.js
index 8de3388baf..52e9ea6237 100644
--- a/deps/npm/node_modules/which/lib/index.js
+++ b/deps/npm/node_modules/which/lib/index.js
@@ -29,8 +29,13 @@ const getPathInfo = (cmd, {
]
if (isWindows) {
- const pathExtExe = optPathExt || ['.EXE', '.CMD', '.BAT', '.COM'].join(optDelimiter)
- const pathExt = pathExtExe.split(optDelimiter)
+ const pathExtExe = optPathExt ||
+ ['.EXE', '.CMD', '.BAT', '.COM'].join(optDelimiter)
+ const pathExt = pathExtExe.split(optDelimiter).reduce((acc, item) => {
+ acc.push(item)
+ acc.push(item.toLowerCase())
+ return acc
+ }, [])
if (cmd.includes('.') && pathExt[0] !== '') {
pathExt.unshift('')
}
diff --git a/deps/npm/node_modules/which/package.json b/deps/npm/node_modules/which/package.json
index bde1563455..989e01c9a3 100644
--- a/deps/npm/node_modules/which/package.json
+++ b/deps/npm/node_modules/which/package.json
@@ -2,7 +2,7 @@
"author": "GitHub Inc.",
"name": "which",
"description": "Like which(1) unix command. Find the first instance of an executable in the PATH.",
- "version": "3.0.0",
+ "version": "3.0.1",
"repository": {
"type": "git",
"url": "https://github.com/npm/node-which.git"
@@ -17,7 +17,7 @@
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
- "@npmcli/template-oss": "4.8.0",
+ "@npmcli/template-oss": "4.14.1",
"tap": "^16.3.0"
},
"scripts": {
@@ -45,6 +45,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.8.0"
+ "version": "4.14.1",
+ "publish": "true"
}
}
diff --git a/deps/npm/node_modules/wrap-ansi-cjs/index.js b/deps/npm/node_modules/wrap-ansi-cjs/index.js
new file mode 100755
index 0000000000..d502255bd1
--- /dev/null
+++ b/deps/npm/node_modules/wrap-ansi-cjs/index.js
@@ -0,0 +1,216 @@
+'use strict';
+const stringWidth = require('string-width');
+const stripAnsi = require('strip-ansi');
+const ansiStyles = require('ansi-styles');
+
+const ESCAPES = new Set([
+ '\u001B',
+ '\u009B'
+]);
+
+const END_CODE = 39;
+
+const ANSI_ESCAPE_BELL = '\u0007';
+const ANSI_CSI = '[';
+const ANSI_OSC = ']';
+const ANSI_SGR_TERMINATOR = 'm';
+const ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`;
+
+const wrapAnsi = code => `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`;
+const wrapAnsiHyperlink = uri => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${uri}${ANSI_ESCAPE_BELL}`;
+
+// Calculate the length of words split on ' ', ignoring
+// the extra characters added by ansi escape codes
+const wordLengths = string => string.split(' ').map(character => stringWidth(character));
+
+// Wrap a long word across multiple rows
+// Ansi escape codes do not count towards length
+const wrapWord = (rows, word, columns) => {
+ const characters = [...word];
+
+ let isInsideEscape = false;
+ let isInsideLinkEscape = false;
+ let visible = stringWidth(stripAnsi(rows[rows.length - 1]));
+
+ for (const [index, character] of characters.entries()) {
+ const characterLength = stringWidth(character);
+
+ if (visible + characterLength <= columns) {
+ rows[rows.length - 1] += character;
+ } else {
+ rows.push(character);
+ visible = 0;
+ }
+
+ if (ESCAPES.has(character)) {
+ isInsideEscape = true;
+ isInsideLinkEscape = characters.slice(index + 1).join('').startsWith(ANSI_ESCAPE_LINK);
+ }
+
+ if (isInsideEscape) {
+ if (isInsideLinkEscape) {
+ if (character === ANSI_ESCAPE_BELL) {
+ isInsideEscape = false;
+ isInsideLinkEscape = false;
+ }
+ } else if (character === ANSI_SGR_TERMINATOR) {
+ isInsideEscape = false;
+ }
+
+ continue;
+ }
+
+ visible += characterLength;
+
+ if (visible === columns && index < characters.length - 1) {
+ rows.push('');
+ visible = 0;
+ }
+ }
+
+ // It's possible that the last row we copy over is only
+ // ansi escape characters, handle this edge-case
+ if (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) {
+ rows[rows.length - 2] += rows.pop();
+ }
+};
+
+// Trims spaces from a string ignoring invisible sequences
+const stringVisibleTrimSpacesRight = string => {
+ const words = string.split(' ');
+ let last = words.length;
+
+ while (last > 0) {
+ if (stringWidth(words[last - 1]) > 0) {
+ break;
+ }
+
+ last--;
+ }
+
+ if (last === words.length) {
+ return string;
+ }
+
+ return words.slice(0, last).join(' ') + words.slice(last).join('');
+};
+
+// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode
+//
+// 'hard' will never allow a string to take up more than columns characters
+//
+// 'soft' allows long words to expand past the column length
+const exec = (string, columns, options = {}) => {
+ if (options.trim !== false && string.trim() === '') {
+ return '';
+ }
+
+ let returnValue = '';
+ let escapeCode;
+ let escapeUrl;
+
+ const lengths = wordLengths(string);
+ let rows = [''];
+
+ for (const [index, word] of string.split(' ').entries()) {
+ if (options.trim !== false) {
+ rows[rows.length - 1] = rows[rows.length - 1].trimStart();
+ }
+
+ let rowLength = stringWidth(rows[rows.length - 1]);
+
+ if (index !== 0) {
+ if (rowLength >= columns && (options.wordWrap === false || options.trim === false)) {
+ // If we start with a new word but the current row length equals the length of the columns, add a new row
+ rows.push('');
+ rowLength = 0;
+ }
+
+ if (rowLength > 0 || options.trim === false) {
+ rows[rows.length - 1] += ' ';
+ rowLength++;
+ }
+ }
+
+ // In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns'
+ if (options.hard && lengths[index] > columns) {
+ const remainingColumns = (columns - rowLength);
+ const breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns);
+ const breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns);
+ if (breaksStartingNextLine < breaksStartingThisLine) {
+ rows.push('');
+ }
+
+ wrapWord(rows, word, columns);
+ continue;
+ }
+
+ if (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) {
+ if (options.wordWrap === false && rowLength < columns) {
+ wrapWord(rows, word, columns);
+ continue;
+ }
+
+ rows.push('');
+ }
+
+ if (rowLength + lengths[index] > columns && options.wordWrap === false) {
+ wrapWord(rows, word, columns);
+ continue;
+ }
+
+ rows[rows.length - 1] += word;
+ }
+
+ if (options.trim !== false) {
+ rows = rows.map(stringVisibleTrimSpacesRight);
+ }
+
+ const pre = [...rows.join('\n')];
+
+ for (const [index, character] of pre.entries()) {
+ returnValue += character;
+
+ if (ESCAPES.has(character)) {
+ const {groups} = new RegExp(`(?:\\${ANSI_CSI}(?<code>\\d+)m|\\${ANSI_ESCAPE_LINK}(?<uri>.*)${ANSI_ESCAPE_BELL})`).exec(pre.slice(index).join('')) || {groups: {}};
+ if (groups.code !== undefined) {
+ const code = Number.parseFloat(groups.code);
+ escapeCode = code === END_CODE ? undefined : code;
+ } else if (groups.uri !== undefined) {
+ escapeUrl = groups.uri.length === 0 ? undefined : groups.uri;
+ }
+ }
+
+ const code = ansiStyles.codes.get(Number(escapeCode));
+
+ if (pre[index + 1] === '\n') {
+ if (escapeUrl) {
+ returnValue += wrapAnsiHyperlink('');
+ }
+
+ if (escapeCode && code) {
+ returnValue += wrapAnsi(code);
+ }
+ } else if (character === '\n') {
+ if (escapeCode && code) {
+ returnValue += wrapAnsi(escapeCode);
+ }
+
+ if (escapeUrl) {
+ returnValue += wrapAnsiHyperlink(escapeUrl);
+ }
+ }
+ }
+
+ return returnValue;
+};
+
+// For each newline, invoke the method separately
+module.exports = (string, columns, options) => {
+ return String(string)
+ .normalize()
+ .replace(/\r\n/g, '\n')
+ .split('\n')
+ .map(line => exec(line, columns, options))
+ .join('\n');
+};
diff --git a/deps/npm/node_modules/wrap-ansi-cjs/license b/deps/npm/node_modules/wrap-ansi-cjs/license
new file mode 100644
index 0000000000..fa7ceba3eb
--- /dev/null
+++ b/deps/npm/node_modules/wrap-ansi-cjs/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (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/wrap-ansi-cjs/package.json b/deps/npm/node_modules/wrap-ansi-cjs/package.json
new file mode 100644
index 0000000000..dfb2f4f108
--- /dev/null
+++ b/deps/npm/node_modules/wrap-ansi-cjs/package.json
@@ -0,0 +1,62 @@
+{
+ "name": "wrap-ansi",
+ "version": "7.0.0",
+ "description": "Wordwrap a string with ANSI escape codes",
+ "license": "MIT",
+ "repository": "chalk/wrap-ansi",
+ "funding": "https://github.com/chalk/wrap-ansi?sponsor=1",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "https://sindresorhus.com"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "scripts": {
+ "test": "xo && nyc ava"
+ },
+ "files": [
+ "index.js"
+ ],
+ "keywords": [
+ "wrap",
+ "break",
+ "wordwrap",
+ "wordbreak",
+ "linewrap",
+ "ansi",
+ "styles",
+ "color",
+ "colour",
+ "colors",
+ "terminal",
+ "console",
+ "cli",
+ "string",
+ "tty",
+ "escape",
+ "formatting",
+ "rgb",
+ "256",
+ "shell",
+ "xterm",
+ "log",
+ "logging",
+ "command-line",
+ "text"
+ ],
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "devDependencies": {
+ "ava": "^2.1.0",
+ "chalk": "^4.0.0",
+ "coveralls": "^3.0.3",
+ "has-ansi": "^4.0.0",
+ "nyc": "^15.0.1",
+ "xo": "^0.29.1"
+ }
+}
diff --git a/deps/npm/node_modules/wrap-ansi/index.js b/deps/npm/node_modules/wrap-ansi/index.js
new file mode 100755
index 0000000000..d80c74c19c
--- /dev/null
+++ b/deps/npm/node_modules/wrap-ansi/index.js
@@ -0,0 +1,214 @@
+import stringWidth from 'string-width';
+import stripAnsi from 'strip-ansi';
+import ansiStyles from 'ansi-styles';
+
+const ESCAPES = new Set([
+ '\u001B',
+ '\u009B',
+]);
+
+const END_CODE = 39;
+const ANSI_ESCAPE_BELL = '\u0007';
+const ANSI_CSI = '[';
+const ANSI_OSC = ']';
+const ANSI_SGR_TERMINATOR = 'm';
+const ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`;
+
+const wrapAnsiCode = code => `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`;
+const wrapAnsiHyperlink = uri => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${uri}${ANSI_ESCAPE_BELL}`;
+
+// Calculate the length of words split on ' ', ignoring
+// the extra characters added by ansi escape codes
+const wordLengths = string => string.split(' ').map(character => stringWidth(character));
+
+// Wrap a long word across multiple rows
+// Ansi escape codes do not count towards length
+const wrapWord = (rows, word, columns) => {
+ const characters = [...word];
+
+ let isInsideEscape = false;
+ let isInsideLinkEscape = false;
+ let visible = stringWidth(stripAnsi(rows[rows.length - 1]));
+
+ for (const [index, character] of characters.entries()) {
+ const characterLength = stringWidth(character);
+
+ if (visible + characterLength <= columns) {
+ rows[rows.length - 1] += character;
+ } else {
+ rows.push(character);
+ visible = 0;
+ }
+
+ if (ESCAPES.has(character)) {
+ isInsideEscape = true;
+ isInsideLinkEscape = characters.slice(index + 1).join('').startsWith(ANSI_ESCAPE_LINK);
+ }
+
+ if (isInsideEscape) {
+ if (isInsideLinkEscape) {
+ if (character === ANSI_ESCAPE_BELL) {
+ isInsideEscape = false;
+ isInsideLinkEscape = false;
+ }
+ } else if (character === ANSI_SGR_TERMINATOR) {
+ isInsideEscape = false;
+ }
+
+ continue;
+ }
+
+ visible += characterLength;
+
+ if (visible === columns && index < characters.length - 1) {
+ rows.push('');
+ visible = 0;
+ }
+ }
+
+ // It's possible that the last row we copy over is only
+ // ansi escape characters, handle this edge-case
+ if (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) {
+ rows[rows.length - 2] += rows.pop();
+ }
+};
+
+// Trims spaces from a string ignoring invisible sequences
+const stringVisibleTrimSpacesRight = string => {
+ const words = string.split(' ');
+ let last = words.length;
+
+ while (last > 0) {
+ if (stringWidth(words[last - 1]) > 0) {
+ break;
+ }
+
+ last--;
+ }
+
+ if (last === words.length) {
+ return string;
+ }
+
+ return words.slice(0, last).join(' ') + words.slice(last).join('');
+};
+
+// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode
+//
+// 'hard' will never allow a string to take up more than columns characters
+//
+// 'soft' allows long words to expand past the column length
+const exec = (string, columns, options = {}) => {
+ if (options.trim !== false && string.trim() === '') {
+ return '';
+ }
+
+ let returnValue = '';
+ let escapeCode;
+ let escapeUrl;
+
+ const lengths = wordLengths(string);
+ let rows = [''];
+
+ for (const [index, word] of string.split(' ').entries()) {
+ if (options.trim !== false) {
+ rows[rows.length - 1] = rows[rows.length - 1].trimStart();
+ }
+
+ let rowLength = stringWidth(rows[rows.length - 1]);
+
+ if (index !== 0) {
+ if (rowLength >= columns && (options.wordWrap === false || options.trim === false)) {
+ // If we start with a new word but the current row length equals the length of the columns, add a new row
+ rows.push('');
+ rowLength = 0;
+ }
+
+ if (rowLength > 0 || options.trim === false) {
+ rows[rows.length - 1] += ' ';
+ rowLength++;
+ }
+ }
+
+ // In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns'
+ if (options.hard && lengths[index] > columns) {
+ const remainingColumns = (columns - rowLength);
+ const breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns);
+ const breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns);
+ if (breaksStartingNextLine < breaksStartingThisLine) {
+ rows.push('');
+ }
+
+ wrapWord(rows, word, columns);
+ continue;
+ }
+
+ if (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) {
+ if (options.wordWrap === false && rowLength < columns) {
+ wrapWord(rows, word, columns);
+ continue;
+ }
+
+ rows.push('');
+ }
+
+ if (rowLength + lengths[index] > columns && options.wordWrap === false) {
+ wrapWord(rows, word, columns);
+ continue;
+ }
+
+ rows[rows.length - 1] += word;
+ }
+
+ if (options.trim !== false) {
+ rows = rows.map(row => stringVisibleTrimSpacesRight(row));
+ }
+
+ const pre = [...rows.join('\n')];
+
+ for (const [index, character] of pre.entries()) {
+ returnValue += character;
+
+ if (ESCAPES.has(character)) {
+ const {groups} = new RegExp(`(?:\\${ANSI_CSI}(?<code>\\d+)m|\\${ANSI_ESCAPE_LINK}(?<uri>.*)${ANSI_ESCAPE_BELL})`).exec(pre.slice(index).join('')) || {groups: {}};
+ if (groups.code !== undefined) {
+ const code = Number.parseFloat(groups.code);
+ escapeCode = code === END_CODE ? undefined : code;
+ } else if (groups.uri !== undefined) {
+ escapeUrl = groups.uri.length === 0 ? undefined : groups.uri;
+ }
+ }
+
+ const code = ansiStyles.codes.get(Number(escapeCode));
+
+ if (pre[index + 1] === '\n') {
+ if (escapeUrl) {
+ returnValue += wrapAnsiHyperlink('');
+ }
+
+ if (escapeCode && code) {
+ returnValue += wrapAnsiCode(code);
+ }
+ } else if (character === '\n') {
+ if (escapeCode && code) {
+ returnValue += wrapAnsiCode(escapeCode);
+ }
+
+ if (escapeUrl) {
+ returnValue += wrapAnsiHyperlink(escapeUrl);
+ }
+ }
+ }
+
+ return returnValue;
+};
+
+// For each newline, invoke the method separately
+export default function wrapAnsi(string, columns, options) {
+ return String(string)
+ .normalize()
+ .replace(/\r\n/g, '\n')
+ .split('\n')
+ .map(line => exec(line, columns, options))
+ .join('\n');
+}
diff --git a/deps/npm/node_modules/wrap-ansi/license b/deps/npm/node_modules/wrap-ansi/license
new file mode 100644
index 0000000000..fa7ceba3eb
--- /dev/null
+++ b/deps/npm/node_modules/wrap-ansi/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (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/wrap-ansi/node_modules/ansi-regex/index.js b/deps/npm/node_modules/wrap-ansi/node_modules/ansi-regex/index.js
new file mode 100644
index 0000000000..130a0929b8
--- /dev/null
+++ b/deps/npm/node_modules/wrap-ansi/node_modules/ansi-regex/index.js
@@ -0,0 +1,8 @@
+export default function ansiRegex({onlyFirst = false} = {}) {
+ const pattern = [
+ '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
+ '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))'
+ ].join('|');
+
+ return new RegExp(pattern, onlyFirst ? undefined : 'g');
+}
diff --git a/deps/npm/node_modules/wrap-ansi/node_modules/ansi-regex/license b/deps/npm/node_modules/wrap-ansi/node_modules/ansi-regex/license
new file mode 100644
index 0000000000..fa7ceba3eb
--- /dev/null
+++ b/deps/npm/node_modules/wrap-ansi/node_modules/ansi-regex/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (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/wrap-ansi/node_modules/ansi-regex/package.json b/deps/npm/node_modules/wrap-ansi/node_modules/ansi-regex/package.json
new file mode 100644
index 0000000000..7bbb563bf2
--- /dev/null
+++ b/deps/npm/node_modules/wrap-ansi/node_modules/ansi-regex/package.json
@@ -0,0 +1,58 @@
+{
+ "name": "ansi-regex",
+ "version": "6.0.1",
+ "description": "Regular expression for matching ANSI escape codes",
+ "license": "MIT",
+ "repository": "chalk/ansi-regex",
+ "funding": "https://github.com/chalk/ansi-regex?sponsor=1",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "https://sindresorhus.com"
+ },
+ "type": "module",
+ "exports": "./index.js",
+ "engines": {
+ "node": ">=12"
+ },
+ "scripts": {
+ "test": "xo && ava && tsd",
+ "view-supported": "node fixtures/view-codes.js"
+ },
+ "files": [
+ "index.js",
+ "index.d.ts"
+ ],
+ "keywords": [
+ "ansi",
+ "styles",
+ "color",
+ "colour",
+ "colors",
+ "terminal",
+ "console",
+ "cli",
+ "string",
+ "tty",
+ "escape",
+ "formatting",
+ "rgb",
+ "256",
+ "shell",
+ "xterm",
+ "command-line",
+ "text",
+ "regex",
+ "regexp",
+ "re",
+ "match",
+ "test",
+ "find",
+ "pattern"
+ ],
+ "devDependencies": {
+ "ava": "^3.15.0",
+ "tsd": "^0.14.0",
+ "xo": "^0.38.2"
+ }
+}
diff --git a/deps/npm/node_modules/wrap-ansi/node_modules/ansi-styles/index.js b/deps/npm/node_modules/wrap-ansi/node_modules/ansi-styles/index.js
new file mode 100644
index 0000000000..d7bede44b7
--- /dev/null
+++ b/deps/npm/node_modules/wrap-ansi/node_modules/ansi-styles/index.js
@@ -0,0 +1,223 @@
+const ANSI_BACKGROUND_OFFSET = 10;
+
+const wrapAnsi16 = (offset = 0) => code => `\u001B[${code + offset}m`;
+
+const wrapAnsi256 = (offset = 0) => code => `\u001B[${38 + offset};5;${code}m`;
+
+const wrapAnsi16m = (offset = 0) => (red, green, blue) => `\u001B[${38 + offset};2;${red};${green};${blue}m`;
+
+const styles = {
+ modifier: {
+ reset: [0, 0],
+ // 21 isn't widely supported and 22 does the same thing
+ bold: [1, 22],
+ dim: [2, 22],
+ italic: [3, 23],
+ underline: [4, 24],
+ overline: [53, 55],
+ inverse: [7, 27],
+ hidden: [8, 28],
+ strikethrough: [9, 29],
+ },
+ color: {
+ black: [30, 39],
+ red: [31, 39],
+ green: [32, 39],
+ yellow: [33, 39],
+ blue: [34, 39],
+ magenta: [35, 39],
+ cyan: [36, 39],
+ white: [37, 39],
+
+ // Bright color
+ blackBright: [90, 39],
+ gray: [90, 39], // Alias of `blackBright`
+ grey: [90, 39], // Alias of `blackBright`
+ redBright: [91, 39],
+ greenBright: [92, 39],
+ yellowBright: [93, 39],
+ blueBright: [94, 39],
+ magentaBright: [95, 39],
+ cyanBright: [96, 39],
+ whiteBright: [97, 39],
+ },
+ bgColor: {
+ bgBlack: [40, 49],
+ bgRed: [41, 49],
+ bgGreen: [42, 49],
+ bgYellow: [43, 49],
+ bgBlue: [44, 49],
+ bgMagenta: [45, 49],
+ bgCyan: [46, 49],
+ bgWhite: [47, 49],
+
+ // Bright color
+ bgBlackBright: [100, 49],
+ bgGray: [100, 49], // Alias of `bgBlackBright`
+ bgGrey: [100, 49], // Alias of `bgBlackBright`
+ bgRedBright: [101, 49],
+ bgGreenBright: [102, 49],
+ bgYellowBright: [103, 49],
+ bgBlueBright: [104, 49],
+ bgMagentaBright: [105, 49],
+ bgCyanBright: [106, 49],
+ bgWhiteBright: [107, 49],
+ },
+};
+
+export const modifierNames = Object.keys(styles.modifier);
+export const foregroundColorNames = Object.keys(styles.color);
+export const backgroundColorNames = Object.keys(styles.bgColor);
+export const colorNames = [...foregroundColorNames, ...backgroundColorNames];
+
+function assembleStyles() {
+ const codes = new Map();
+
+ for (const [groupName, group] of Object.entries(styles)) {
+ for (const [styleName, style] of Object.entries(group)) {
+ styles[styleName] = {
+ open: `\u001B[${style[0]}m`,
+ close: `\u001B[${style[1]}m`,
+ };
+
+ group[styleName] = styles[styleName];
+
+ codes.set(style[0], style[1]);
+ }
+
+ Object.defineProperty(styles, groupName, {
+ value: group,
+ enumerable: false,
+ });
+ }
+
+ Object.defineProperty(styles, 'codes', {
+ value: codes,
+ enumerable: false,
+ });
+
+ styles.color.close = '\u001B[39m';
+ styles.bgColor.close = '\u001B[49m';
+
+ styles.color.ansi = wrapAnsi16();
+ styles.color.ansi256 = wrapAnsi256();
+ styles.color.ansi16m = wrapAnsi16m();
+ styles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);
+ styles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);
+ styles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);
+
+ // From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js
+ Object.defineProperties(styles, {
+ rgbToAnsi256: {
+ value: (red, green, blue) => {
+ // We use the extended greyscale palette here, with the exception of
+ // black and white. normal palette only has 4 greyscale shades.
+ if (red === green && green === blue) {
+ if (red < 8) {
+ return 16;
+ }
+
+ if (red > 248) {
+ return 231;
+ }
+
+ return Math.round(((red - 8) / 247) * 24) + 232;
+ }
+
+ return 16
+ + (36 * Math.round(red / 255 * 5))
+ + (6 * Math.round(green / 255 * 5))
+ + Math.round(blue / 255 * 5);
+ },
+ enumerable: false,
+ },
+ hexToRgb: {
+ value: hex => {
+ const matches = /[a-f\d]{6}|[a-f\d]{3}/i.exec(hex.toString(16));
+ if (!matches) {
+ return [0, 0, 0];
+ }
+
+ let [colorString] = matches;
+
+ if (colorString.length === 3) {
+ colorString = [...colorString].map(character => character + character).join('');
+ }
+
+ const integer = Number.parseInt(colorString, 16);
+
+ return [
+ /* eslint-disable no-bitwise */
+ (integer >> 16) & 0xFF,
+ (integer >> 8) & 0xFF,
+ integer & 0xFF,
+ /* eslint-enable no-bitwise */
+ ];
+ },
+ enumerable: false,
+ },
+ hexToAnsi256: {
+ value: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),
+ enumerable: false,
+ },
+ ansi256ToAnsi: {
+ value: code => {
+ if (code < 8) {
+ return 30 + code;
+ }
+
+ if (code < 16) {
+ return 90 + (code - 8);
+ }
+
+ let red;
+ let green;
+ let blue;
+
+ if (code >= 232) {
+ red = (((code - 232) * 10) + 8) / 255;
+ green = red;
+ blue = red;
+ } else {
+ code -= 16;
+
+ const remainder = code % 36;
+
+ red = Math.floor(code / 36) / 5;
+ green = Math.floor(remainder / 6) / 5;
+ blue = (remainder % 6) / 5;
+ }
+
+ const value = Math.max(red, green, blue) * 2;
+
+ if (value === 0) {
+ return 30;
+ }
+
+ // eslint-disable-next-line no-bitwise
+ let result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));
+
+ if (value === 2) {
+ result += 60;
+ }
+
+ return result;
+ },
+ enumerable: false,
+ },
+ rgbToAnsi: {
+ value: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),
+ enumerable: false,
+ },
+ hexToAnsi: {
+ value: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),
+ enumerable: false,
+ },
+ });
+
+ return styles;
+}
+
+const ansiStyles = assembleStyles();
+
+export default ansiStyles;
diff --git a/deps/npm/node_modules/wrap-ansi/node_modules/ansi-styles/license b/deps/npm/node_modules/wrap-ansi/node_modules/ansi-styles/license
new file mode 100644
index 0000000000..fa7ceba3eb
--- /dev/null
+++ b/deps/npm/node_modules/wrap-ansi/node_modules/ansi-styles/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (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/wrap-ansi/node_modules/ansi-styles/package.json b/deps/npm/node_modules/wrap-ansi/node_modules/ansi-styles/package.json
new file mode 100644
index 0000000000..6cd3ca5bf9
--- /dev/null
+++ b/deps/npm/node_modules/wrap-ansi/node_modules/ansi-styles/package.json
@@ -0,0 +1,54 @@
+{
+ "name": "ansi-styles",
+ "version": "6.2.1",
+ "description": "ANSI escape codes for styling strings in the terminal",
+ "license": "MIT",
+ "repository": "chalk/ansi-styles",
+ "funding": "https://github.com/chalk/ansi-styles?sponsor=1",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "https://sindresorhus.com"
+ },
+ "type": "module",
+ "exports": "./index.js",
+ "engines": {
+ "node": ">=12"
+ },
+ "scripts": {
+ "test": "xo && ava && tsd",
+ "screenshot": "svg-term --command='node screenshot' --out=screenshot.svg --padding=3 --width=55 --height=3 --at=1000 --no-cursor"
+ },
+ "files": [
+ "index.js",
+ "index.d.ts"
+ ],
+ "keywords": [
+ "ansi",
+ "styles",
+ "color",
+ "colour",
+ "colors",
+ "terminal",
+ "console",
+ "cli",
+ "string",
+ "tty",
+ "escape",
+ "formatting",
+ "rgb",
+ "256",
+ "shell",
+ "xterm",
+ "log",
+ "logging",
+ "command-line",
+ "text"
+ ],
+ "devDependencies": {
+ "ava": "^3.15.0",
+ "svg-term-cli": "^2.1.1",
+ "tsd": "^0.19.0",
+ "xo": "^0.47.0"
+ }
+}
diff --git a/deps/npm/node_modules/wrap-ansi/node_modules/emoji-regex/LICENSE-MIT.txt b/deps/npm/node_modules/wrap-ansi/node_modules/emoji-regex/LICENSE-MIT.txt
new file mode 100644
index 0000000000..a41e0a7ef9
--- /dev/null
+++ b/deps/npm/node_modules/wrap-ansi/node_modules/emoji-regex/LICENSE-MIT.txt
@@ -0,0 +1,20 @@
+Copyright Mathias Bynens <https://mathiasbynens.be/>
+
+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/wrap-ansi/node_modules/emoji-regex/RGI_Emoji.js b/deps/npm/node_modules/wrap-ansi/node_modules/emoji-regex/RGI_Emoji.js
new file mode 100644
index 0000000000..3fbe924100
--- /dev/null
+++ b/deps/npm/node_modules/wrap-ansi/node_modules/emoji-regex/RGI_Emoji.js
@@ -0,0 +1,6 @@
+"use strict";
+
+module.exports = function () {
+ // https://mths.be/emoji
+ return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]/g;
+};
diff --git a/deps/npm/node_modules/wrap-ansi/node_modules/emoji-regex/es2015/RGI_Emoji.js b/deps/npm/node_modules/wrap-ansi/node_modules/emoji-regex/es2015/RGI_Emoji.js
new file mode 100644
index 0000000000..ecf32f1779
--- /dev/null
+++ b/deps/npm/node_modules/wrap-ansi/node_modules/emoji-regex/es2015/RGI_Emoji.js
@@ -0,0 +1,6 @@
+"use strict";
+
+module.exports = () => {
+ // https://mths.be/emoji
+ return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0077}\u{E006C}\u{E0073}|\u{E0073}\u{E0063}\u{E0074}|\u{E0065}\u{E006E}\u{E0067})\u{E007F}|(?:\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FC}-\u{1F3FF}]|\u{1F468}(?:\u{1F3FB}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]))?|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u{1F466}\u{1F467}])|\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC})?|(?:\u{1F469}(?:\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}]))|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]\u200D\u{1F91D}\u200D\u{1F9D1})[\u{1F3FB}-\u{1F3FF}]|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F469}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F9D1}(?:\u200D(?:\u{1F91D}\u200D\u{1F9D1}|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F9D1}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F636}\u200D\u{1F32B}|\u{1F3F3}\uFE0F\u200D\u26A7|\u{1F43B}\u200D\u2744|(?:[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u{1F3F4}\u200D\u2620|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F202}\u{1F237}\u{1F321}\u{1F324}-\u{1F32C}\u{1F336}\u{1F37D}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}\u{1F39F}\u{1F3CD}\u{1F3CE}\u{1F3D4}-\u{1F3DF}\u{1F3F5}\u{1F3F7}\u{1F43F}\u{1F4FD}\u{1F549}\u{1F54A}\u{1F56F}\u{1F570}\u{1F573}\u{1F576}-\u{1F579}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}\u{1F6CB}\u{1F6CD}-\u{1F6CF}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6F0}\u{1F6F3}])\uFE0F|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F469}\u200D\u{1F467}|\u{1F469}\u200D\u{1F466}|\u{1F635}\u200D\u{1F4AB}|\u{1F62E}\u200D\u{1F4A8}|\u{1F415}\u200D\u{1F9BA}|\u{1F9D1}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F469}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F1FD}\u{1F1F0}|\u{1F1F6}\u{1F1E6}|\u{1F1F4}\u{1F1F2}|\u{1F408}\u200D\u2B1B|\u2764\uFE0F\u200D[\u{1F525}\u{1FA79}]|\u{1F441}\uFE0F|\u{1F3F3}\uFE0F|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]|\u{1F3F4}|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270C\u270D\u{1F574}\u{1F590}][\uFE0F\u{1F3FB}-\u{1F3FF}]|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F408}\u{1F415}\u{1F43B}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F62E}\u{1F635}\u{1F636}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F384}\u{1F386}-\u{1F393}\u{1F3A0}-\u{1F3C1}\u{1F3C5}\u{1F3C6}\u{1F3C8}\u{1F3C9}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F8}-\u{1F407}\u{1F409}-\u{1F414}\u{1F416}-\u{1F43A}\u{1F43C}-\u{1F43E}\u{1F440}\u{1F444}\u{1F445}\u{1F451}-\u{1F465}\u{1F46A}\u{1F479}-\u{1F47B}\u{1F47D}-\u{1F480}\u{1F484}\u{1F488}-\u{1F48E}\u{1F490}\u{1F492}-\u{1F4A9}\u{1F4AB}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F5A4}\u{1F5FB}-\u{1F62D}\u{1F62F}-\u{1F634}\u{1F637}-\u{1F644}\u{1F648}-\u{1F64A}\u{1F680}-\u{1F6A2}\u{1F6A4}-\u{1F6B3}\u{1F6B7}-\u{1F6BF}\u{1F6C1}-\u{1F6C5}\u{1F6D0}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90D}\u{1F90E}\u{1F910}-\u{1F917}\u{1F91D}\u{1F920}-\u{1F925}\u{1F927}-\u{1F92F}\u{1F93A}\u{1F93F}-\u{1F945}\u{1F947}-\u{1F976}\u{1F978}\u{1F97A}-\u{1F9B4}\u{1F9B7}\u{1F9BA}\u{1F9BC}-\u{1F9CB}\u{1F9D0}\u{1F9E0}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]/gu;
+};
diff --git a/deps/npm/node_modules/wrap-ansi/node_modules/emoji-regex/es2015/index.js b/deps/npm/node_modules/wrap-ansi/node_modules/emoji-regex/es2015/index.js
new file mode 100644
index 0000000000..1a4fc8d0dc
--- /dev/null
+++ b/deps/npm/node_modules/wrap-ansi/node_modules/emoji-regex/es2015/index.js
@@ -0,0 +1,6 @@
+"use strict";
+
+module.exports = () => {
+ // https://mths.be/emoji
+ return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0077}\u{E006C}\u{E0073}|\u{E0073}\u{E0063}\u{E0074}|\u{E0065}\u{E006E}\u{E0067})\u{E007F}|(?:\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FC}-\u{1F3FF}]|\u{1F468}(?:\u{1F3FB}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]))?|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u{1F466}\u{1F467}])|\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC})?|(?:\u{1F469}(?:\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}]))|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]\u200D\u{1F91D}\u200D\u{1F9D1})[\u{1F3FB}-\u{1F3FF}]|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F469}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F9D1}(?:\u200D(?:\u{1F91D}\u200D\u{1F9D1}|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F9D1}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F636}\u200D\u{1F32B}|\u{1F3F3}\uFE0F\u200D\u26A7|\u{1F43B}\u200D\u2744|(?:[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u{1F3F4}\u200D\u2620|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F202}\u{1F237}\u{1F321}\u{1F324}-\u{1F32C}\u{1F336}\u{1F37D}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}\u{1F39F}\u{1F3CD}\u{1F3CE}\u{1F3D4}-\u{1F3DF}\u{1F3F5}\u{1F3F7}\u{1F43F}\u{1F4FD}\u{1F549}\u{1F54A}\u{1F56F}\u{1F570}\u{1F573}\u{1F576}-\u{1F579}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}\u{1F6CB}\u{1F6CD}-\u{1F6CF}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6F0}\u{1F6F3}])\uFE0F|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F469}\u200D\u{1F467}|\u{1F469}\u200D\u{1F466}|\u{1F635}\u200D\u{1F4AB}|\u{1F62E}\u200D\u{1F4A8}|\u{1F415}\u200D\u{1F9BA}|\u{1F9D1}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F469}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F1FD}\u{1F1F0}|\u{1F1F6}\u{1F1E6}|\u{1F1F4}\u{1F1F2}|\u{1F408}\u200D\u2B1B|\u2764\uFE0F\u200D[\u{1F525}\u{1FA79}]|\u{1F441}\uFE0F|\u{1F3F3}\uFE0F|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]|\u{1F3F4}|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270C\u270D\u{1F574}\u{1F590}][\uFE0F\u{1F3FB}-\u{1F3FF}]|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F408}\u{1F415}\u{1F43B}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F62E}\u{1F635}\u{1F636}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F384}\u{1F386}-\u{1F393}\u{1F3A0}-\u{1F3C1}\u{1F3C5}\u{1F3C6}\u{1F3C8}\u{1F3C9}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F8}-\u{1F407}\u{1F409}-\u{1F414}\u{1F416}-\u{1F43A}\u{1F43C}-\u{1F43E}\u{1F440}\u{1F444}\u{1F445}\u{1F451}-\u{1F465}\u{1F46A}\u{1F479}-\u{1F47B}\u{1F47D}-\u{1F480}\u{1F484}\u{1F488}-\u{1F48E}\u{1F490}\u{1F492}-\u{1F4A9}\u{1F4AB}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F5A4}\u{1F5FB}-\u{1F62D}\u{1F62F}-\u{1F634}\u{1F637}-\u{1F644}\u{1F648}-\u{1F64A}\u{1F680}-\u{1F6A2}\u{1F6A4}-\u{1F6B3}\u{1F6B7}-\u{1F6BF}\u{1F6C1}-\u{1F6C5}\u{1F6D0}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90D}\u{1F90E}\u{1F910}-\u{1F917}\u{1F91D}\u{1F920}-\u{1F925}\u{1F927}-\u{1F92F}\u{1F93A}\u{1F93F}-\u{1F945}\u{1F947}-\u{1F976}\u{1F978}\u{1F97A}-\u{1F9B4}\u{1F9B7}\u{1F9BA}\u{1F9BC}-\u{1F9CB}\u{1F9D0}\u{1F9E0}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90C}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F978}\u{1F97A}-\u{1F9CB}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90C}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F978}\u{1F97A}-\u{1F9CB}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]\uFE0F|[\u261D\u26F9\u270A-\u270D\u{1F385}\u{1F3C2}-\u{1F3C4}\u{1F3C7}\u{1F3CA}-\u{1F3CC}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}-\u{1F478}\u{1F47C}\u{1F481}-\u{1F483}\u{1F485}-\u{1F487}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F574}\u{1F575}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F645}-\u{1F647}\u{1F64B}-\u{1F64F}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91F}\u{1F926}\u{1F930}-\u{1F939}\u{1F93C}-\u{1F93E}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9B8}\u{1F9B9}\u{1F9BB}\u{1F9CD}-\u{1F9CF}\u{1F9D1}-\u{1F9DD}]/gu;
+};
diff --git a/deps/npm/node_modules/wrap-ansi/node_modules/emoji-regex/es2015/text.js b/deps/npm/node_modules/wrap-ansi/node_modules/emoji-regex/es2015/text.js
new file mode 100644
index 0000000000..8e9f985758
--- /dev/null
+++ b/deps/npm/node_modules/wrap-ansi/node_modules/emoji-regex/es2015/text.js
@@ -0,0 +1,6 @@
+"use strict";
+
+module.exports = () => {
+ // https://mths.be/emoji
+ return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0077}\u{E006C}\u{E0073}|\u{E0073}\u{E0063}\u{E0074}|\u{E0065}\u{E006E}\u{E0067})\u{E007F}|(?:\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FC}-\u{1F3FF}]|\u{1F468}(?:\u{1F3FB}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]))?|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u{1F466}\u{1F467}])|\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC})?|(?:\u{1F469}(?:\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}]))|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]\u200D\u{1F91D}\u200D\u{1F9D1})[\u{1F3FB}-\u{1F3FF}]|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F469}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F9D1}(?:\u200D(?:\u{1F91D}\u200D\u{1F9D1}|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F9D1}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F636}\u200D\u{1F32B}|\u{1F3F3}\uFE0F\u200D\u26A7|\u{1F43B}\u200D\u2744|(?:[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u{1F3F4}\u200D\u2620|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F202}\u{1F237}\u{1F321}\u{1F324}-\u{1F32C}\u{1F336}\u{1F37D}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}\u{1F39F}\u{1F3CD}\u{1F3CE}\u{1F3D4}-\u{1F3DF}\u{1F3F5}\u{1F3F7}\u{1F43F}\u{1F4FD}\u{1F549}\u{1F54A}\u{1F56F}\u{1F570}\u{1F573}\u{1F576}-\u{1F579}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}\u{1F6CB}\u{1F6CD}-\u{1F6CF}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6F0}\u{1F6F3}])\uFE0F|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F469}\u200D\u{1F467}|\u{1F469}\u200D\u{1F466}|\u{1F635}\u200D\u{1F4AB}|\u{1F62E}\u200D\u{1F4A8}|\u{1F415}\u200D\u{1F9BA}|\u{1F9D1}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F469}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F1FD}\u{1F1F0}|\u{1F1F6}\u{1F1E6}|\u{1F1F4}\u{1F1F2}|\u{1F408}\u200D\u2B1B|\u2764\uFE0F\u200D[\u{1F525}\u{1FA79}]|\u{1F441}\uFE0F|\u{1F3F3}\uFE0F|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]|\u{1F3F4}|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270C\u270D\u{1F574}\u{1F590}][\uFE0F\u{1F3FB}-\u{1F3FF}]|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F408}\u{1F415}\u{1F43B}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F62E}\u{1F635}\u{1F636}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F384}\u{1F386}-\u{1F393}\u{1F3A0}-\u{1F3C1}\u{1F3C5}\u{1F3C6}\u{1F3C8}\u{1F3C9}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F8}-\u{1F407}\u{1F409}-\u{1F414}\u{1F416}-\u{1F43A}\u{1F43C}-\u{1F43E}\u{1F440}\u{1F444}\u{1F445}\u{1F451}-\u{1F465}\u{1F46A}\u{1F479}-\u{1F47B}\u{1F47D}-\u{1F480}\u{1F484}\u{1F488}-\u{1F48E}\u{1F490}\u{1F492}-\u{1F4A9}\u{1F4AB}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F5A4}\u{1F5FB}-\u{1F62D}\u{1F62F}-\u{1F634}\u{1F637}-\u{1F644}\u{1F648}-\u{1F64A}\u{1F680}-\u{1F6A2}\u{1F6A4}-\u{1F6B3}\u{1F6B7}-\u{1F6BF}\u{1F6C1}-\u{1F6C5}\u{1F6D0}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90D}\u{1F90E}\u{1F910}-\u{1F917}\u{1F91D}\u{1F920}-\u{1F925}\u{1F927}-\u{1F92F}\u{1F93A}\u{1F93F}-\u{1F945}\u{1F947}-\u{1F976}\u{1F978}\u{1F97A}-\u{1F9B4}\u{1F9B7}\u{1F9BA}\u{1F9BC}-\u{1F9CB}\u{1F9D0}\u{1F9E0}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90C}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F978}\u{1F97A}-\u{1F9CB}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]\uFE0F?/gu;
+};
diff --git a/deps/npm/node_modules/wrap-ansi/node_modules/emoji-regex/index.js b/deps/npm/node_modules/wrap-ansi/node_modules/emoji-regex/index.js
new file mode 100644
index 0000000000..c0490d4c95
--- /dev/null
+++ b/deps/npm/node_modules/wrap-ansi/node_modules/emoji-regex/index.js
@@ -0,0 +1,6 @@
+"use strict";
+
+module.exports = function () {
+ // https://mths.be/emoji
+ return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g;
+};
diff --git a/deps/npm/node_modules/wrap-ansi/node_modules/emoji-regex/package.json b/deps/npm/node_modules/wrap-ansi/node_modules/emoji-regex/package.json
new file mode 100644
index 0000000000..eac892a16a
--- /dev/null
+++ b/deps/npm/node_modules/wrap-ansi/node_modules/emoji-regex/package.json
@@ -0,0 +1,52 @@
+{
+ "name": "emoji-regex",
+ "version": "9.2.2",
+ "description": "A regular expression to match all Emoji-only symbols as per the Unicode Standard.",
+ "homepage": "https://mths.be/emoji-regex",
+ "main": "index.js",
+ "types": "index.d.ts",
+ "keywords": [
+ "unicode",
+ "regex",
+ "regexp",
+ "regular expressions",
+ "code points",
+ "symbols",
+ "characters",
+ "emoji"
+ ],
+ "license": "MIT",
+ "author": {
+ "name": "Mathias Bynens",
+ "url": "https://mathiasbynens.be/"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/mathiasbynens/emoji-regex.git"
+ },
+ "bugs": "https://github.com/mathiasbynens/emoji-regex/issues",
+ "files": [
+ "LICENSE-MIT.txt",
+ "index.js",
+ "index.d.ts",
+ "RGI_Emoji.js",
+ "RGI_Emoji.d.ts",
+ "text.js",
+ "text.d.ts",
+ "es2015"
+ ],
+ "scripts": {
+ "build": "rm -rf -- es2015; babel src -d .; NODE_ENV=es2015 babel src es2015_types -D -d ./es2015; node script/inject-sequences.js",
+ "test": "mocha",
+ "test:watch": "npm run test -- --watch"
+ },
+ "devDependencies": {
+ "@babel/cli": "^7.4.4",
+ "@babel/core": "^7.4.4",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
+ "@babel/preset-env": "^7.4.4",
+ "@unicode/unicode-13.0.0": "^1.0.3",
+ "mocha": "^6.1.4",
+ "regexgen": "^1.3.0"
+ }
+}
diff --git a/deps/npm/node_modules/wrap-ansi/node_modules/emoji-regex/text.js b/deps/npm/node_modules/wrap-ansi/node_modules/emoji-regex/text.js
new file mode 100644
index 0000000000..9bc63ce747
--- /dev/null
+++ b/deps/npm/node_modules/wrap-ansi/node_modules/emoji-regex/text.js
@@ -0,0 +1,6 @@
+"use strict";
+
+module.exports = function () {
+ // https://mths.be/emoji
+ return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F?/g;
+};
diff --git a/deps/npm/node_modules/wrap-ansi/node_modules/string-width/index.js b/deps/npm/node_modules/wrap-ansi/node_modules/string-width/index.js
new file mode 100644
index 0000000000..9294488f88
--- /dev/null
+++ b/deps/npm/node_modules/wrap-ansi/node_modules/string-width/index.js
@@ -0,0 +1,54 @@
+import stripAnsi from 'strip-ansi';
+import eastAsianWidth from 'eastasianwidth';
+import emojiRegex from 'emoji-regex';
+
+export default function stringWidth(string, options = {}) {
+ if (typeof string !== 'string' || string.length === 0) {
+ return 0;
+ }
+
+ options = {
+ ambiguousIsNarrow: true,
+ ...options
+ };
+
+ string = stripAnsi(string);
+
+ if (string.length === 0) {
+ return 0;
+ }
+
+ string = string.replace(emojiRegex(), ' ');
+
+ const ambiguousCharacterWidth = options.ambiguousIsNarrow ? 1 : 2;
+ let width = 0;
+
+ for (const character of string) {
+ const codePoint = character.codePointAt(0);
+
+ // Ignore control characters
+ if (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) {
+ continue;
+ }
+
+ // Ignore combining characters
+ if (codePoint >= 0x300 && codePoint <= 0x36F) {
+ continue;
+ }
+
+ const code = eastAsianWidth.eastAsianWidth(character);
+ switch (code) {
+ case 'F':
+ case 'W':
+ width += 2;
+ break;
+ case 'A':
+ width += ambiguousCharacterWidth;
+ break;
+ default:
+ width += 1;
+ }
+ }
+
+ return width;
+}
diff --git a/deps/npm/node_modules/wrap-ansi/node_modules/string-width/license b/deps/npm/node_modules/wrap-ansi/node_modules/string-width/license
new file mode 100644
index 0000000000..fa7ceba3eb
--- /dev/null
+++ b/deps/npm/node_modules/wrap-ansi/node_modules/string-width/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (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/wrap-ansi/node_modules/string-width/package.json b/deps/npm/node_modules/wrap-ansi/node_modules/string-width/package.json
new file mode 100644
index 0000000000..f46d6770f9
--- /dev/null
+++ b/deps/npm/node_modules/wrap-ansi/node_modules/string-width/package.json
@@ -0,0 +1,59 @@
+{
+ "name": "string-width",
+ "version": "5.1.2",
+ "description": "Get the visual width of a string - the number of columns required to display it",
+ "license": "MIT",
+ "repository": "sindresorhus/string-width",
+ "funding": "https://github.com/sponsors/sindresorhus",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "https://sindresorhus.com"
+ },
+ "type": "module",
+ "exports": "./index.js",
+ "engines": {
+ "node": ">=12"
+ },
+ "scripts": {
+ "test": "xo && ava && tsd"
+ },
+ "files": [
+ "index.js",
+ "index.d.ts"
+ ],
+ "keywords": [
+ "string",
+ "character",
+ "unicode",
+ "width",
+ "visual",
+ "column",
+ "columns",
+ "fullwidth",
+ "full-width",
+ "full",
+ "ansi",
+ "escape",
+ "codes",
+ "cli",
+ "command-line",
+ "terminal",
+ "console",
+ "cjk",
+ "chinese",
+ "japanese",
+ "korean",
+ "fixed-width"
+ ],
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "devDependencies": {
+ "ava": "^3.15.0",
+ "tsd": "^0.14.0",
+ "xo": "^0.38.2"
+ }
+}
diff --git a/deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/index.js b/deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/index.js
new file mode 100644
index 0000000000..ef3c095f5f
--- /dev/null
+++ b/deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/index.js
@@ -0,0 +1,9 @@
+import ansiRegex from 'ansi-regex';
+
+export default function stripAnsi(string) {
+ if (typeof string !== 'string') {
+ throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``);
+ }
+
+ return string.replace(ansiRegex(), '');
+}
diff --git a/deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/license b/deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/license
new file mode 100644
index 0000000000..fa7ceba3eb
--- /dev/null
+++ b/deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (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/wrap-ansi/node_modules/strip-ansi/package.json b/deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/package.json
new file mode 100644
index 0000000000..0de0586f7e
--- /dev/null
+++ b/deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/package.json
@@ -0,0 +1,57 @@
+{
+ "name": "strip-ansi",
+ "version": "7.0.1",
+ "description": "Strip ANSI escape codes from a string",
+ "license": "MIT",
+ "repository": "chalk/strip-ansi",
+ "funding": "https://github.com/chalk/strip-ansi?sponsor=1",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "https://sindresorhus.com"
+ },
+ "type": "module",
+ "exports": "./index.js",
+ "engines": {
+ "node": ">=12"
+ },
+ "scripts": {
+ "test": "xo && ava && tsd"
+ },
+ "files": [
+ "index.js",
+ "index.d.ts"
+ ],
+ "keywords": [
+ "strip",
+ "trim",
+ "remove",
+ "ansi",
+ "styles",
+ "color",
+ "colour",
+ "colors",
+ "terminal",
+ "console",
+ "string",
+ "tty",
+ "escape",
+ "formatting",
+ "rgb",
+ "256",
+ "shell",
+ "xterm",
+ "log",
+ "logging",
+ "command-line",
+ "text"
+ ],
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "devDependencies": {
+ "ava": "^3.15.0",
+ "tsd": "^0.17.0",
+ "xo": "^0.44.0"
+ }
+}
diff --git a/deps/npm/node_modules/wrap-ansi/package.json b/deps/npm/node_modules/wrap-ansi/package.json
new file mode 100644
index 0000000000..198a5dbcb7
--- /dev/null
+++ b/deps/npm/node_modules/wrap-ansi/package.json
@@ -0,0 +1,69 @@
+{
+ "name": "wrap-ansi",
+ "version": "8.1.0",
+ "description": "Wordwrap a string with ANSI escape codes",
+ "license": "MIT",
+ "repository": "chalk/wrap-ansi",
+ "funding": "https://github.com/chalk/wrap-ansi?sponsor=1",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "https://sindresorhus.com"
+ },
+ "type": "module",
+ "exports": {
+ "types": "./index.d.ts",
+ "default": "./index.js"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "scripts": {
+ "test": "xo && nyc ava && tsd"
+ },
+ "files": [
+ "index.js",
+ "index.d.ts"
+ ],
+ "keywords": [
+ "wrap",
+ "break",
+ "wordwrap",
+ "wordbreak",
+ "linewrap",
+ "ansi",
+ "styles",
+ "color",
+ "colour",
+ "colors",
+ "terminal",
+ "console",
+ "cli",
+ "string",
+ "tty",
+ "escape",
+ "formatting",
+ "rgb",
+ "256",
+ "shell",
+ "xterm",
+ "log",
+ "logging",
+ "command-line",
+ "text"
+ ],
+ "dependencies": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "devDependencies": {
+ "ava": "^3.15.0",
+ "chalk": "^4.1.2",
+ "coveralls": "^3.1.1",
+ "has-ansi": "^5.0.1",
+ "nyc": "^15.1.0",
+ "tsd": "^0.25.0",
+ "xo": "^0.44.0"
+ }
+}
diff --git a/deps/npm/node_modules/write-file-atomic/lib/index.js b/deps/npm/node_modules/write-file-atomic/lib/index.js
index 9d79d797a5..6013894cd1 100644
--- a/deps/npm/node_modules/write-file-atomic/lib/index.js
+++ b/deps/npm/node_modules/write-file-atomic/lib/index.js
@@ -6,7 +6,7 @@ module.exports._cleanupOnExit = cleanupOnExit
const fs = require('fs')
const MurmurHash3 = require('imurmurhash')
-const onExit = require('signal-exit')
+const { onExit } = require('signal-exit')
const path = require('path')
const { promisify } = require('util')
const activeFiles = {}
diff --git a/deps/npm/node_modules/write-file-atomic/package.json b/deps/npm/node_modules/write-file-atomic/package.json
index 5c9bce457a..54d58d7eeb 100644
--- a/deps/npm/node_modules/write-file-atomic/package.json
+++ b/deps/npm/node_modules/write-file-atomic/package.json
@@ -1,6 +1,6 @@
{
"name": "write-file-atomic",
- "version": "5.0.0",
+ "version": "5.0.1",
"description": "Write files in an atomic fashion w/configurable ownership",
"main": "./lib/index.js",
"scripts": {
@@ -28,13 +28,11 @@
"homepage": "https://github.com/npm/write-file-atomic",
"dependencies": {
"imurmurhash": "^0.1.4",
- "signal-exit": "^3.0.7"
+ "signal-exit": "^4.0.1"
},
"devDependencies": {
- "@npmcli/eslint-config": "^3.0.1",
- "@npmcli/template-oss": "4.5.1",
- "mkdirp": "^1.0.4",
- "rimraf": "^3.0.2",
+ "@npmcli/eslint-config": "^4.0.0",
+ "@npmcli/template-oss": "4.14.1",
"tap": "^16.0.1"
},
"files": [
@@ -47,7 +45,8 @@
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
"windowsCI": false,
- "version": "4.5.1"
+ "version": "4.14.1",
+ "publish": "true"
},
"tap": {
"nyc-arg": [
diff --git a/deps/npm/package.json b/deps/npm/package.json
index 4cbc0fc209..9486e8c6ef 100644
--- a/deps/npm/package.json
+++ b/deps/npm/package.json
@@ -1,5 +1,5 @@
{
- "version": "9.6.4",
+ "version": "9.6.6",
"name": "npm",
"description": "a package manager for JavaScript",
"workspaces": [
@@ -53,71 +53,71 @@
},
"dependencies": {
"@isaacs/string-locale-compare": "^1.1.0",
- "@npmcli/arborist": "^6.2.7",
- "@npmcli/config": "^6.1.5",
- "@npmcli/map-workspaces": "^3.0.3",
+ "@npmcli/arborist": "^6.2.9",
+ "@npmcli/config": "^6.1.6",
+ "@npmcli/map-workspaces": "^3.0.4",
"@npmcli/package-json": "^3.0.0",
- "@npmcli/run-script": "^6.0.0",
+ "@npmcli/run-script": "^6.0.1",
"abbrev": "^2.0.0",
"archy": "~1.0.0",
- "cacache": "^17.0.5",
+ "cacache": "^17.1.0",
"chalk": "^4.1.2",
"ci-info": "^3.8.0",
"cli-columns": "^4.0.0",
"cli-table3": "^0.6.3",
"columnify": "^1.6.0",
"fastest-levenshtein": "^1.0.16",
- "fs-minipass": "^3.0.1",
- "glob": "^9.3.2",
+ "fs-minipass": "^3.0.2",
+ "glob": "^10.2.2",
"graceful-fs": "^4.2.11",
"hosted-git-info": "^6.1.1",
- "ini": "^3.0.1",
+ "ini": "^4.1.0",
"init-package-json": "^5.0.0",
"is-cidr": "^4.0.2",
"json-parse-even-better-errors": "^3.0.0",
"libnpmaccess": "^7.0.2",
- "libnpmdiff": "^5.0.15",
- "libnpmexec": "^5.0.15",
- "libnpmfund": "^4.0.15",
+ "libnpmdiff": "^5.0.17",
+ "libnpmexec": "^5.0.17",
+ "libnpmfund": "^4.0.17",
"libnpmhook": "^9.0.3",
- "libnpmorg": "^5.0.3",
- "libnpmpack": "^5.0.15",
- "libnpmpublish": "^7.1.3",
+ "libnpmorg": "^5.0.4",
+ "libnpmpack": "^5.0.17",
+ "libnpmpublish": "^7.1.4",
"libnpmsearch": "^6.0.2",
"libnpmteam": "^5.0.3",
"libnpmversion": "^4.0.2",
- "make-fetch-happen": "^11.0.3",
- "minimatch": "^7.4.3",
- "minipass": "^4.2.5",
+ "make-fetch-happen": "^11.1.1",
+ "minimatch": "^9.0.0",
+ "minipass": "^5.0.0",
"minipass-pipeline": "^1.2.4",
"ms": "^2.1.2",
"node-gyp": "^9.3.1",
"nopt": "^7.1.0",
"npm-audit-report": "^4.0.0",
- "npm-install-checks": "^6.1.0",
+ "npm-install-checks": "^6.1.1",
"npm-package-arg": "^10.1.0",
"npm-pick-manifest": "^8.0.1",
"npm-profile": "^7.0.1",
- "npm-registry-fetch": "^14.0.3",
+ "npm-registry-fetch": "^14.0.5",
"npm-user-validate": "^2.0.0",
"npmlog": "^7.0.1",
"p-map": "^4.0.0",
- "pacote": "^15.1.1",
+ "pacote": "^15.1.3",
"parse-conflict-json": "^3.0.1",
"proc-log": "^3.0.0",
"qrcode-terminal": "^0.12.0",
- "read": "^2.0.0",
- "read-package-json": "^6.0.1",
+ "read": "^2.1.0",
+ "read-package-json": "^6.0.3",
"read-package-json-fast": "^3.0.2",
- "semver": "^7.3.8",
- "ssri": "^10.0.2",
- "tar": "^6.1.13",
+ "semver": "^7.5.0",
+ "ssri": "^10.0.4",
+ "tar": "^6.1.14",
"text-table": "~0.2.0",
"tiny-relative-date": "^1.3.0",
"treeverse": "^3.0.0",
"validate-npm-package-name": "^5.0.0",
- "which": "^3.0.0",
- "write-file-atomic": "^5.0.0"
+ "which": "^3.0.1",
+ "write-file-atomic": "^5.0.1"
},
"bundleDependencies": [
"@isaacs/string-locale-compare",
@@ -194,7 +194,7 @@
"@npmcli/git": "^4.0.4",
"@npmcli/mock-registry": "^1.0.0",
"@npmcli/promise-spawn": "^6.0.2",
- "@npmcli/template-oss": "4.12.1",
+ "@npmcli/template-oss": "4.14.1",
"licensee": "^10.0.0",
"nock": "^13.3.0",
"npm-packlist": "^7.0.4",
@@ -248,7 +248,7 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
- "version": "4.12.1",
+ "version": "4.14.1",
"content": "./scripts/template-oss/root.js"
},
"license": "Artistic-2.0",
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 94b429988d..85c6bf7956 100644
--- a/deps/npm/tap-snapshots/test/lib/docs.js.test.cjs
+++ b/deps/npm/tap-snapshots/test/lib/docs.js.test.cjs
@@ -1053,7 +1053,8 @@ Set to \`false\` to suppress the progress bar.
* Default: false
* Type: Boolean
-Indicates that a provenance statement should be generated.
+When publishing from a supported cloud CI/CD system, the package will be
+publicly linked to where it was built and published from.
#### \`proxy\`
@@ -2210,8 +2211,6 @@ Usage:
npm ci
Options:
-[-S|--save|--no-save|--save-prod|--save-dev|--save-optional|--save-peer|--save-bundle]
-[-E|--save-exact] [-g|--global]
[--install-strategy <hoisted|nested|shallow|linked>] [--legacy-bundling]
[--global-style] [--omit <dev|optional|peer> [--omit <dev|optional|peer> ...]]
[--strict-peer-deps] [--no-package-lock] [--foreground-scripts]
@@ -2229,9 +2228,6 @@ npm ci
aliases: clean-install, ic, install-clean, isntall-clean
\`\`\`
-#### \`save\`
-#### \`save-exact\`
-#### \`global\`
#### \`install-strategy\`
#### \`legacy-bundling\`
#### \`global-style\`
@@ -2811,8 +2807,6 @@ Usage:
npm install-ci-test
Options:
-[-S|--save|--no-save|--save-prod|--save-dev|--save-optional|--save-peer|--save-bundle]
-[-E|--save-exact] [-g|--global]
[--install-strategy <hoisted|nested|shallow|linked>] [--legacy-bundling]
[--global-style] [--omit <dev|optional|peer> [--omit <dev|optional|peer> ...]]
[--strict-peer-deps] [--no-package-lock] [--foreground-scripts]
@@ -2830,9 +2824,6 @@ npm install-ci-test
aliases: cit, clean-install-test, sit
\`\`\`
-#### \`save\`
-#### \`save-exact\`
-#### \`global\`
#### \`install-strategy\`
#### \`legacy-bundling\`
#### \`global-style\`
diff --git a/deps/npm/tap-snapshots/test/lib/utils/error-message.js.test.cjs b/deps/npm/tap-snapshots/test/lib/utils/error-message.js.test.cjs
index 0ffcba239f..1cd3d4cf1a 100644
--- a/deps/npm/tap-snapshots/test/lib/utils/error-message.js.test.cjs
+++ b/deps/npm/tap-snapshots/test/lib/utils/error-message.js.test.cjs
@@ -190,7 +190,7 @@ Object {
"r",
"g",
"s",
- "https://evil:***@npmjs.org",
+ "https://evil:***@npmjs.org/",
],
Array [
"",
diff --git a/deps/npm/test/lib/cli.js b/deps/npm/test/lib/cli.js
index 28640a2260..cafd13feab 100644
--- a/deps/npm/test/lib/cli.js
+++ b/deps/npm/test/lib/cli.js
@@ -98,7 +98,7 @@ t.test('logged argv is sanitized with equals', async t => {
})
await cli(process)
- t.match(logsBy('argv'), [['"version" "--registry" "https://u:***@npmjs.org"']])
+ t.match(logsBy('argv'), [['"version" "--registry" "https://u:***@npmjs.org/"']])
})
t.test('print usage if no params provided', async t => {
diff --git a/deps/npm/test/lib/commands/config.js b/deps/npm/test/lib/commands/config.js
index f2bdcc7231..7d5140bffc 100644
--- a/deps/npm/test/lib/commands/config.js
+++ b/deps/npm/test/lib/commands/config.js
@@ -298,13 +298,13 @@ t.test('config set key1 value1 key2=value2 key3', async t => {
t.equal(sandbox.config.get('access'), 'restricted', 'access was set')
t.equal(sandbox.config.get('all'), false, 'all was set')
- t.equal(sandbox.config.get('audit'), false, 'audit was set')
+ t.equal(sandbox.config.get('audit'), true, 'audit was unset and restored to its default')
const contents = await fs.readFile(join(home, '.npmrc'), { encoding: 'utf8' })
const rc = ini.parse(contents)
t.equal(rc.access, 'restricted', 'access is set to restricted')
t.equal(rc.all, false, 'all is set to false')
- t.equal(rc.audit, false, 'audit is set to false')
+ t.not(contents.includes('audit='), 'config file does not set audit')
})
t.test('config set invalid key logs warning', async t => {
diff --git a/deps/npm/test/lib/utils/completion/installed-deep.js b/deps/npm/test/lib/utils/completion/installed-deep.js
index fa39f0f073..434d0214db 100644
--- a/deps/npm/test/lib/utils/completion/installed-deep.js
+++ b/deps/npm/test/lib/utils/completion/installed-deep.js
@@ -8,6 +8,7 @@ const _flatOptions = {
depth: Infinity,
global: false,
workspacesEnabled: true,
+ Arborist: require('@npmcli/arborist'),
get prefix () {
return prefix
},
diff --git a/deps/npm/test/lib/utils/exit-handler.js b/deps/npm/test/lib/utils/exit-handler.js
index 969bd05a98..8942d90922 100644
--- a/deps/npm/test/lib/utils/exit-handler.js
+++ b/deps/npm/test/lib/utils/exit-handler.js
@@ -549,7 +549,7 @@ t.test('uses all err special properties', async t => {
t.test('verbose logs replace info on err props', async t => {
const { exitHandler, logs } = await mockExitHandler(t)
- const keys = ['type', 'stack', 'statusCode', 'pkgid']
+ const keys = ['type', 'stack', 'pkgid']
const properties = keys.reduce((acc, k) => {
acc[k] = `${k}-https://user:pass@registry.npmjs.org/`
return acc
diff --git a/deps/npm/test/lib/utils/log-file.js b/deps/npm/test/lib/utils/log-file.js
index fde17dee96..c02f338a84 100644
--- a/deps/npm/test/lib/utils/log-file.js
+++ b/deps/npm/test/lib/utils/log-file.js
@@ -244,9 +244,9 @@ t.test('glob error', async t => {
const { readLogs } = await loadLogFile(t, {
logsMax: 5,
mocks: {
- glob: () => {
+ glob: { glob: () => {
throw new Error('bad glob')
- },
+ } },
},
})
diff --git a/deps/npm/test/lib/utils/replace-info.js b/deps/npm/test/lib/utils/replace-info.js
index c7fffdb544..c1e77e943b 100644
--- a/deps/npm/test/lib/utils/replace-info.js
+++ b/deps/npm/test/lib/utils/replace-info.js
@@ -57,7 +57,7 @@ t.equal(
t.equal(
replaceInfo('https://user:pass@registry.npmjs.org/ http://a:b@reg.github.com'),
- 'https://user:***@registry.npmjs.org/ http://a:***@reg.github.com',
+ 'https://user:***@registry.npmjs.org/ http://a:***@reg.github.com/',
'should replace multiple items on a string'
)
@@ -81,7 +81,7 @@ t.same(
]),
[
'Something https://user:***@registry.npmjs.org/ foo bar',
- 'http://foo:***@registry.npmjs.org',
+ 'http://foo:***@registry.npmjs.org/',
'http://example.npmjs.org',
],
'should replace items in an array'
@@ -95,7 +95,7 @@ t.same(
]),
[
'Something --x=https://user:***@registry.npmjs.org/ foo bar',
- '--url=http://foo:***@registry.npmjs.org',
+ '--url=http://foo:***@registry.npmjs.org/',
'--url=http://example.npmjs.org',
],
'should replace items in an array with equals'