diff --git a/node_modules/.gitignore b/node_modules/.gitignore index 2d280414a3e7..02d92c0675fe 100644 --- a/node_modules/.gitignore +++ b/node_modules/.gitignore @@ -12,6 +12,7 @@ package-lock.json /@babel/template /@babel/traverse /@babel/types +/@blueoak/list /@eslint/eslintrc /@types/json5 /abab @@ -24,6 +25,7 @@ package-lock.json /append-transform /arg /argparse +/array-find-index /array-includes /array.prototype.flat /astral-regex @@ -48,6 +50,7 @@ package-lock.json /commondir /contains-path /convert-source-map +/correct-license-metadata /coveralls /cp-file /cross-spawn @@ -63,6 +66,7 @@ package-lock.json /define-properties /detect-libc /diff-frag +/docopt /doctrine /domexception /end-of-stream @@ -105,6 +109,7 @@ package-lock.json /flow-parser /flow-remove-types /foreground-child +/fs-access /fs-constants /fs-exists-cached /fsevents @@ -148,10 +153,12 @@ package-lock.json /jsdom /jsesc /json-parse-better-errors +/json-parse-errback /json-stable-stringify-without-jsonify /json5 /lcov-parse /levn +/licensee /load-json-file /locate-path /lodash @@ -176,11 +183,14 @@ package-lock.json /node-modules-regexp /noop-logger /normalize-path +/npm-license-corrections +/null-check /nwsapi /nyc /object-inspect /object-keys /object.assign +/object.getownpropertydescriptors /object.values /optionator /os-homedir @@ -206,9 +216,11 @@ package-lock.json /prop-types /pseudomap /pump +/queue-microtask /rc /react /react-is +/read-package-tree /read-pkg /read-pkg-up /readdirp @@ -221,6 +233,7 @@ package-lock.json /require-inject /require-main-filename /resolve-from +/run-parallel /saxes /shebang-command /shebang-regex @@ -230,6 +243,11 @@ package-lock.json /source-map /source-map-support /spawn-wrap +/spdx-compare +/spdx-expression-validate +/spdx-osi +/spdx-ranges +/spdx-whitelisted /sprintf-js /stack-utils /stealthy-require @@ -258,6 +276,7 @@ package-lock.json /type-fest /typescript /unicode-length +/util-promisify /v8-compile-cache /vlq /w3c-hr-time diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json index 0395b7484395..cb5d2f9fc84e 100644 --- a/node_modules/.package-lock.json +++ b/node_modules/.package-lock.json @@ -210,6 +210,12 @@ "to-fast-properties": "^2.0.0" } }, + "node_modules/@blueoak/list": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@blueoak/list/-/list-1.0.2.tgz", + "integrity": "sha512-KyqT0kkdxgbGys9mvo/1Mgdt/LGvUFPCZIK9pWPIfOM2mYzMDd/eVYy4sMP1YqvVI129k0alxRyM53H2MAs/Nw==", + "dev": true + }, "node_modules/@eslint/eslintrc": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz", @@ -232,9 +238,9 @@ } }, "node_modules/@npmcli/arborist": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-2.2.1.tgz", - "integrity": "sha512-J76nY+TYhxNLFAnWy1HqfjszC6dHy5zxHHFt1LJ2pgBDcb00ipNAbTX0qtyv6FPTF67hPErmPKePaKtFr5KvEA==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-2.2.2.tgz", + "integrity": "sha512-X6sl303t4UQUD42JKqgicOG1kEUoncu1x8IH4s3YUq/m3ALIMFAsorJ8DNa8RDVbjOvJ+aB9X9Aif/pB1xQLog==", "inBundle": true, "dependencies": { "@npmcli/installed-package-contents": "^1.0.6", @@ -639,6 +645,15 @@ "sprintf-js": "~1.0.2" } }, + "node_modules/array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/array-includes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.2.tgz", @@ -1333,6 +1348,15 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "inBundle": true }, + "node_modules/correct-license-metadata": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/correct-license-metadata/-/correct-license-metadata-1.4.0.tgz", + "integrity": "sha512-nvbNpK/aYCbztZWGi9adIPqR+ZcQmZTWNT7eMYLvkaVGroN1nTHiVuuNPl7pK6ZNx1mvDztlRBJtfUdrVwKJ5A==", + "dev": true, + "dependencies": { + "spdx-expression-validate": "^2.0.0" + } + }, "node_modules/coveralls": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.1.0.tgz", @@ -1612,6 +1636,15 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/docopt": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/docopt/-/docopt-0.6.2.tgz", + "integrity": "sha1-so6eIiDaXsSffqW7JKR3h0Be6xE=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -2573,6 +2606,19 @@ "node": ">= 0.12" } }, + "node_modules/fs-access": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-2.0.0.tgz", + "integrity": "sha512-Vt45hBKJrYDQeAD9ja43liw8JfK75uB7XexIXWEtDKwFLQNmzmvuulh28hRxexxuFm0zsGGq7nISGQSK6KnGrA==", + "deprecated": "This package is no longer relevant as Node.js 0.12 is unmaintained.", + "dev": true, + "dependencies": { + "null-check": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -3605,6 +3651,12 @@ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, + "node_modules/json-parse-errback": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/json-parse-errback/-/json-parse-errback-2.0.1.tgz", + "integrity": "sha1-x6nCvjqFWzQvgqv8ibyFk1tYhPo=", + "dev": true + }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -3858,6 +3910,41 @@ "stringify-package": "^1.0.1" } }, + "node_modules/licensee": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/licensee/-/licensee-8.1.0.tgz", + "integrity": "sha512-rnXUmUuLzZrGfm3bfWNl71Emw/OJqwUyIrIRq5D06Ct9EbiFnZtiydA5ryf4FDPikdneJ0l1Q+g6TuMjpWGfrA==", + "dev": true, + "dependencies": { + "@blueoak/list": "^1.0.2", + "correct-license-metadata": "^1.0.1", + "docopt": "^0.6.2", + "fs-access": "^2.0.0", + "has": "^1.0.3", + "json-parse-errback": "^2.0.1", + "npm-license-corrections": "^1.0.0", + "read-package-tree": "^5.3.1", + "run-parallel": "^1.1.9", + "semver": "^6.3.0", + "simple-concat": "^1.0.0", + "spdx-expression-parse": "^3.0.0", + "spdx-expression-validate": "^2.0.0", + "spdx-osi": "^3.0.0", + "spdx-whitelisted": "^1.0.0" + }, + "bin": { + "licensee": "licensee" + } + }, + "node_modules/licensee/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/load-json-file": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", @@ -4388,6 +4475,12 @@ "node": ">=10" } }, + "node_modules/npm-license-corrections": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/npm-license-corrections/-/npm-license-corrections-1.4.0.tgz", + "integrity": "sha512-elrOuaygiK9SDD1Rzl6gxbRSJgcClcNER5RvdilSwlHWurD2GTlTt8RHZDMKkwgfkDHTg2F7n10IrPqCzdCCcw==", + "dev": true + }, "node_modules/npm-normalize-package-bin": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", @@ -4486,6 +4579,15 @@ "set-blocking": "~2.0.0" } }, + "node_modules/null-check": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", + "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -4667,6 +4769,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz", + "integrity": "sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/object.values": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz", @@ -5145,6 +5264,26 @@ "node": ">=0.6" } }, + "node_modules/queue-microtask": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.2.tgz", + "integrity": "sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -5241,6 +5380,56 @@ "node": ">=10" } }, + "node_modules/read-package-tree": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.3.1.tgz", + "integrity": "sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw==", + "dev": true, + "dependencies": { + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "util-promisify": "^2.1.0" + } + }, + "node_modules/read-package-tree/node_modules/hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true + }, + "node_modules/read-package-tree/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-package-tree/node_modules/read-package-json": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz", + "integrity": "sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==", + "dev": true, + "dependencies": { + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^2.0.0", + "npm-normalize-package-bin": "^1.0.0" + } + }, + "node_modules/read-package-tree/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, "node_modules/read-pkg": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", @@ -5528,6 +5717,29 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -5764,6 +5976,17 @@ "which": "bin/which" } }, + "node_modules/spdx-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/spdx-compare/-/spdx-compare-1.0.0.tgz", + "integrity": "sha512-C1mDZOX0hnu0ep9dfmuoi03+eOdDoz2yvK79RxbcrVEG1NO1Ph35yW102DHWKN4pk80nwCgeMmSY5L25VE4D9A==", + "dev": true, + "dependencies": { + "array-find-index": "^1.0.2", + "spdx-expression-parse": "^3.0.0", + "spdx-ranges": "^2.0.0" + } + }, "node_modules/spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", @@ -5790,12 +6013,43 @@ "spdx-license-ids": "^3.0.0" } }, + "node_modules/spdx-expression-validate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-validate/-/spdx-expression-validate-2.0.0.tgz", + "integrity": "sha512-b3wydZLM+Tc6CFvaRDBOF9d76oGIHNCLYFeHbftFXUWjnfZWganmDmvtM5sm1cRwJc/VDBMLyGGrsLFd1vOxbg==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0" + } + }, "node_modules/spdx-license-ids": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", "inBundle": true }, + "node_modules/spdx-osi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-osi/-/spdx-osi-3.0.0.tgz", + "integrity": "sha512-7DZMaD/rNHWGf82qWOazBsLXQsaLsoJb9RRjhEUQr5o86kw3A1ErGzSdvaXl+KalZyKkkU5T2a5NjCCutAKQSw==", + "dev": true + }, + "node_modules/spdx-ranges": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/spdx-ranges/-/spdx-ranges-2.1.1.tgz", + "integrity": "sha512-mcdpQFV7UDAgLpXEE/jOMqvK4LBoO0uTQg0uvXUewmEFhpiZx5yJSZITHB8w1ZahKdhfZqP5GPEOKLyEq5p8XA==", + "dev": true + }, + "node_modules/spdx-whitelisted": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/spdx-whitelisted/-/spdx-whitelisted-1.0.0.tgz", + "integrity": "sha512-X4FOpUCvZuo42MdB1zAZ/wdX4N0lLcWDozf2KYFVDgtLv8Lx+f31LOYLP2/FcwTzsPi64bS/VwKqklI4RBletg==", + "dev": true, + "dependencies": { + "spdx-compare": "^1.0.0", + "spdx-ranges": "^2.0.0" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -6080,7 +6334,102 @@ "signal-exit", "tap-parser", "tap-yaml", - "yaml" + "yaml", + "@babel/code-frame", + "@babel/core", + "@babel/generator", + "@babel/helper-annotate-as-pure", + "@babel/helper-builder-react-jsx", + "@babel/helper-builder-react-jsx-experimental", + "@babel/helper-function-name", + "@babel/helper-get-function-arity", + "@babel/helper-member-expression-to-functions", + "@babel/helper-module-imports", + "@babel/helper-module-transforms", + "@babel/helper-optimise-call-expression", + "@babel/helper-plugin-utils", + "@babel/helper-replace-supers", + "@babel/helper-simple-access", + "@babel/helper-split-export-declaration", + "@babel/helper-validator-identifier", + "@babel/helpers", + "@babel/highlight", + "@babel/parser", + "@babel/plugin-proposal-object-rest-spread", + "@babel/plugin-syntax-jsx", + "@babel/plugin-syntax-object-rest-spread", + "@babel/plugin-transform-destructuring", + "@babel/plugin-transform-parameters", + "@babel/plugin-transform-react-jsx", + "@babel/template", + "@babel/traverse", + "@babel/types", + "@types/color-name", + "@types/prop-types", + "@types/yoga-layout", + "ansi-escapes", + "ansi-regex", + "ansi-styles", + "ansicolors", + "arrify", + "astral-regex", + "auto-bind", + "caller-callsite", + "caller-path", + "callsites", + "cardinal", + "chalk", + "ci-info", + "cli-cursor", + "cli-truncate", + "color-convert", + "color-name", + "convert-source-map", + "csstype", + "debug", + "emoji-regex", + "escape-string-regexp", + "esprima", + "events-to-array", + "gensync", + "globals", + "has-flag", + "is-ci", + "is-fullwidth-code-point", + "js-tokens", + "jsesc", + "json5", + "lodash", + "lodash.throttle", + "log-update", + "loose-envify", + "mimic-fn", + "minimist", + "ms", + "object-assign", + "onetime", + "path-parse", + "prop-types", + "punycode", + "react-is", + "react-reconciler", + "redeyed", + "resolve", + "resolve-from", + "restore-cursor", + "scheduler", + "semver", + "slice-ansi", + "string-length", + "string-width", + "strip-ansi", + "supports-color", + "to-fast-properties", + "type-fest", + "unicode-length", + "widest-line", + "wrap-ansi", + "yoga-layout-prebuilt" ], "dev": true, "dependencies": { @@ -8540,6 +8889,15 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "inBundle": true }, + "node_modules/util-promisify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/util-promisify/-/util-promisify-2.1.0.tgz", + "integrity": "sha1-PCI2R2xNMsX/PEcAKt18E7moKlM=", + "dev": true, + "dependencies": { + "object.getownpropertydescriptors": "^2.0.3" + } + }, "node_modules/uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", diff --git a/node_modules/@npmcli/arborist/bin/ideal.js b/node_modules/@npmcli/arborist/bin/ideal.js index 18a5b9eb3108..74d79ce0a51e 100644 --- a/node_modules/@npmcli/arborist/bin/ideal.js +++ b/node_modules/@npmcli/arborist/bin/ideal.js @@ -1,59 +1,11 @@ const Arborist = require('../') +const { inspect } = require('util') const options = require('./lib/options.js') const print = require('./lib/print-tree.js') require('./lib/logging.js') require('./lib/timers.js') -const c = require('chalk') - -const whichIsA = (name, dependents, indent = ' ') => { - if (!dependents || dependents.length === 0) - return '' - const str = `\nfor: ` + - dependents.map(dep => { - return dep.more ? `${dep.more} more (${dep.names.join(', ')})` - : `${dep.type} dependency ` + - `${c.bold(name)}@"${c.bold(dep.spec)}"` + `\nfrom:` + - (dep.from.location ? (dep.from.name - ? ` ${c.bold(dep.from.name)}@${c.bold(dep.from.version)} ` + - c.dim(`at ${dep.from.location}`) - : ' the root project') - : ` ${c.bold(dep.from.name)}@${c.bold(dep.from.version)}`) + - whichIsA(dep.from.name, dep.from.dependents, ' ') - }).join('\nand: ') - - return str.split(/\n/).join(`\n${indent}`) -} - -const explainEresolve = ({ dep, current, peerConflict, fixWithForce }) => { - return (!dep.whileInstalling ? '' : `While resolving: ` + - `${c.bold(dep.whileInstalling.name)}@${c.bold(dep.whileInstalling.version)}\n`) + - - `Found: ` + - `${c.bold(current.name)}@${c.bold(current.version)} ` + - c.dim(`at ${current.location}`) + - `${whichIsA(current.name, current.dependents)}` + - - `\n\nCould not add conflicting dependency: ` + - `${c.bold(dep.name)}@${c.bold(dep.version)} ` + - c.dim(`at ${dep.location}`) + - `${whichIsA(dep.name, dep.dependents)}\n` + - - (!peerConflict ? '' : - `\nConflicting peer dependency: ` + - `${c.bold(peerConflict.name)}@${c.bold(peerConflict.version)} ` + - c.dim(`at ${peerConflict.location}`) + - `${whichIsA(peerConflict.name, peerConflict.dependents)}\n` - ) + - - `\nFix the upstream dependency conflict, or -run this command with --legacy-peer-deps${ - fixWithForce ? ' or --force' : ''} -to accept an incorrect (and potentially broken) dependency resolution. -` -} - const start = process.hrtime() new Arborist(options).buildIdealTree(options).then(tree => { const end = process.hrtime(start) @@ -62,7 +14,7 @@ new Arborist(options).buildIdealTree(options).then(tree => { if (tree.meta && options.save) tree.meta.save() }).catch(er => { - console.error(er) - if (er.code === 'ERESOLVE') - console.error(explainEresolve(er)) + const opt = { depth: Infinity, color: true } + console.error(er.code === 'ERESOLVE' ? inspect(er, opt) : er) + process.exitCode = 1 }) diff --git a/node_modules/@npmcli/arborist/bin/lib/logging.js b/node_modules/@npmcli/arborist/bin/lib/logging.js index 57597b2e509e..a7d20a1f5364 100644 --- a/node_modules/@npmcli/arborist/bin/lib/logging.js +++ b/node_modules/@npmcli/arborist/bin/lib/logging.js @@ -26,7 +26,7 @@ if (loglevel !== 'silent') { return const pref = `${process.pid} ${level} ` if (level === 'warn' && args[0] === 'ERESOLVE') - args[2] = inspect(args[2], { depth: Infinity }) + args[2] = inspect(args[2], { depth: 10 }) const msg = pref + format(...args).trim().split('\n').join(`\n${pref}`) console.error(msg) }) diff --git a/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js b/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js index 4c266502101a..0de10044bd77 100644 --- a/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js +++ b/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js @@ -397,7 +397,7 @@ module.exports = cls => class IdealTreeBuilder extends cls { // that they're there, and not reinstall the world unnecessarily. if (this[_global] && (this[_updateAll] || this[_updateNames].length)) { const nm = resolve(this.path, 'node_modules') - for (const name of await readdir(nm)) { + for (const name of await readdir(nm).catch(() => [])) { tree.package.dependencies = tree.package.dependencies || {} if (this[_updateAll] || this[_updateNames].includes(name)) tree.package.dependencies[name] = '*' @@ -491,7 +491,8 @@ module.exports = cls => class IdealTreeBuilder extends cls { /* istanbul ignore else - should also be covered by realpath failure */ if (filepath) { const { name } = spec - spec = npa(`file:${relpath(this.path, filepath)}`, this.path) + const tree = this.idealTree.target || this.idealTree + spec = npa(`file:${relpath(tree.path, filepath)}`, tree.path) spec.name = name } return spec @@ -663,6 +664,11 @@ This is a one-time fix-up, please be patient... }) } await promiseCallLimit(queue) + + // have to re-calc dep flags, because the nodes don't have edges + // until their packages get assigned, so everything looks extraneous + calcDepFlags(this.idealTree) + // yes, yes, this isn't the "original" version, but now that it's been // upgraded, we need to make sure we don't do the work to upgrade it // again, since it's now as new as can be. @@ -800,6 +806,7 @@ This is a one-time fix-up, please be patient... // a virtual root of whatever brought in THIS node. // 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) // reuse virtual root if we already have one, but don't // try to do the override ahead of time, since we MAY be able @@ -821,13 +828,17 @@ This is a one-time fix-up, please be patient... // +-- z@1 // But if x and y are loaded in the same virtual root, then they will // be forced to agree on a version of z. + const required = new Set([edge.from]) + const parent = edge.peer ? virtualRoot : null const dep = vrDep && vrDep.satisfies(edge) ? vrDep - : await this[_nodeFromEdge](edge, edge.peer ? virtualRoot : null) + : await this[_nodeFromEdge](edge, parent, null, required) + /* istanbul ignore next */ debug(() => { if (!dep) throw new Error('no dep??') }) + tasks.push({edge, dep}) } @@ -864,7 +875,7 @@ This is a one-time fix-up, please be patient... // 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 = null) { + 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. @@ -895,6 +906,11 @@ This is a one-time fix-up, please be patient... // ensure the one we want is the one that's placed node.parent = parent + if (required.has(edge.from) && edge.type !== 'peerOptional' || + secondEdge && ( + required.has(secondEdge.from) && secondEdge.type !== 'peerOptional')) + required.add(node) + // handle otherwise unresolvable dependency nesting loops by // creating a symbolic link // a1 -> b1 -> a2 -> b2 -> a1 -> ... @@ -908,7 +924,7 @@ This is a one-time fix-up, please be patient... // keep track of the thing that caused this node to be included. const src = parent.sourceReference this[_peerSetSource].set(node, src) - return this[_loadPeerSet](node) + return this[_loadPeerSet](node, required) } [_virtualRoot] (node, reuse = false) { @@ -1053,7 +1069,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) { + 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 @@ -1068,10 +1084,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] + if (!edge.to) { if (!parentEdge) { // easy, just put the thing there - await this[_nodeFromEdge](edge, node.parent) + await this[_nodeFromEdge](edge, node.parent, null, required) continue } else { // if the parent's edge is very broad like >=1, and the edge in @@ -1082,14 +1100,16 @@ 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. - await this[_nodeFromEdge](parentEdge, node.parent, edge) + const dep = await this[_nodeFromEdge](parentEdge, node.parent, edge, required) // hooray! that worked! if (edge.valid) continue - // allow it - if (this[_force] || !isMine && !this[_strictPeerDeps]) + // allow it. either we're overriding, or it's not something + // that will be installed by default anyway, and we'll fail when + // we get to the point where we need to, if we need to. + if (conflictOK || !required.has(dep)) continue // problem @@ -1102,7 +1122,7 @@ This is a one-time fix-up, please be patient... // in non-strict mode if it's not our fault. don't warn here, because // we are going to warn again when we place the deps, if we end up // overriding for something else. - if (this[_force] || !isMine && !this[_strictPeerDeps]) + if (conflictOK) continue // ok, it's the root, or we're in unforced strict mode, so this is bad @@ -1198,8 +1218,25 @@ This is a one-time fix-up, please be patient... break } - if (!target) - this[_failPeerConflict](edge) + // if we can't find a target, that means that the last placed checked + // (and all the places before it) had a copy already. if we're in + // --force mode, then the user has explicitly said that they're ok + // with conflicts. This can only occur in --force mode in the case + // when a node was added to the tree with a peerOptional dep that we + // ignored, and then later, that edge became invalid, and we fail to + // resolve it. We will warn about it in a moment. + if (!target) { + if (this[_force]) { + // we know that there is a dep (not the root) which is the target + // of this edge, or else it wouldn't have been a conflict. + target = edge.to.resolveParent + canPlace = KEEP + } else + this[_failPeerConflict](edge) + } else { + // it worked, so we clearly have no peer conflicts at this point. + this[_peerConflict] = null + } this.log.silly( 'placeDep', @@ -1210,9 +1247,6 @@ This is a one-time fix-up, please be patient... `want: ${edge.spec || '*'}` ) - // it worked, so we clearly have no peer conflicts at this point. - this[_peerConflict] = null - // Can only get KEEP here if the original edge was valid, // and we're checking for an update but it's already up to date. if (canPlace === KEEP) { @@ -1398,6 +1432,7 @@ This is a one-time fix-up, please be patient... }) const entryEdge = peerEntryEdge || edge const source = this[_peerSetSource].get(dep) + isSource = isSource || target === source // if we're overriding the source, then we care if the *target* is // ours, even if it wasn't actually the original source, since we diff --git a/node_modules/@npmcli/arborist/lib/arborist/load-virtual.js b/node_modules/@npmcli/arborist/lib/arborist/load-virtual.js index f03bd80c460d..3a38905b7743 100644 --- a/node_modules/@npmcli/arborist/lib/arborist/load-virtual.js +++ b/node_modules/@npmcli/arborist/lib/arborist/load-virtual.js @@ -24,6 +24,7 @@ const loadWorkspacesVirtual = Symbol.for('loadWorkspacesVirtual') 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]) @@ -63,6 +64,8 @@ module.exports = cls => class VirtualLoader extends cls { root = await this[loadRoot](s), } = options + this[rootOptionProvided] = options.root + await this[loadFromShrinkwrap](s, root) return treeCheck(this.virtualTree) } @@ -74,13 +77,17 @@ module.exports = cls => class VirtualLoader extends cls { } async [loadFromShrinkwrap] (s, root) { - // 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 - root.dev = false - root.optional = false - root.devOptional = false - root.peer = false + 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 + root.dev = false + root.optional = false + root.devOptional = false + root.peer = false + } else + this[flagsSuspect] = true + this[checkRootEdges](s, root) root.meta = s this.virtualTree = root @@ -88,20 +95,23 @@ module.exports = cls => class VirtualLoader extends cls { await this[resolveLinks](links, nodes) this[assignBundles](nodes) if (this[flagsSuspect]) - this[reCalcDepFlags]() + this[reCalcDepFlags](nodes.values()) return root } - [reCalcDepFlags] () { + [reCalcDepFlags] (nodes) { // reset all dep flags - for (const node of this.virtualTree.inventory.values()) { + // can't use inventory here, because virtualTree might not be root + for (const node of nodes) { + if (node.isRoot || node === this[rootOptionProvided]) + continue node.extraneous = true node.dev = true node.optional = true node.devOptional = true node.peer = true } - calcDepFlags(this.virtualTree, true) + calcDepFlags(this.virtualTree, !this[rootOptionProvided]) } // check the lockfile deps, and see if they match. if they do not @@ -237,6 +247,12 @@ module.exports = cls => class VirtualLoader extends cls { // shrinkwrap doesn't include package name unless necessary if (!sw.name) sw.name = nameFromFolder(path) + + const dev = sw.dev + const optional = sw.optional + const devOptional = dev || optional || sw.devOptional + const peer = sw.peer + const node = new Node({ legacyPeerDeps: this.legacyPeerDeps, root: this.virtualTree, @@ -246,6 +262,10 @@ module.exports = cls => class VirtualLoader extends cls { resolved: consistentResolve(sw.resolved, this.path, path), pkg: sw, hasShrinkwrap: sw.hasShrinkwrap, + dev, + optional, + devOptional, + peer, }) // cast to boolean because they're undefined in the lock file when false node.extraneous = !!sw.extraneous diff --git a/node_modules/@npmcli/arborist/lib/arborist/reify.js b/node_modules/@npmcli/arborist/lib/arborist/reify.js index 1dd4b4b0f193..b33823e46122 100644 --- a/node_modules/@npmcli/arborist/lib/arborist/reify.js +++ b/node_modules/@npmcli/arborist/lib/arborist/reify.js @@ -442,7 +442,8 @@ module.exports = cls => class Reifier extends cls { if (this[_trashList].has(node.path)) return node - process.emit('time', `reifyNode:${node.location}`) + const timer = `reifyNode:${node.location}` + process.emit('time', timer) this.addTracker('reify', node.name, node.location) const p = Promise.resolve() @@ -454,7 +455,7 @@ module.exports = cls => class Reifier extends cls { return this[_handleOptionalFailure](node, p) .then(() => { this.finishTracker('reify', node.name, node.location) - process.emit('timeEnd', `reifyNode:${node.location}`) + process.emit('timeEnd', timer) return node }) } @@ -474,9 +475,14 @@ module.exports = cls => class Reifier extends cls { // no idea what this thing is. remove it from the tree. if (!res) { - node.parent = null + const warning = 'invalid or damaged lockfile detected\n' + + 'please re-try this operation once it completes\n' + + 'so that the damage can be corrected, or perform\n' + + 'a fresh install with no lockfile if the problem persists.' + this.log.warn('reify', warning) this.log.verbose('reify', 'unrecognized node in tree', node.path) node.parent = null + node.fsParent = null this[_addNodeToTrashList](node) return } diff --git a/node_modules/@npmcli/arborist/lib/calc-dep-flags.js b/node_modules/@npmcli/arborist/lib/calc-dep-flags.js index 73f1e60d7ce9..d6ae266db3bb 100644 --- a/node_modules/@npmcli/arborist/lib/calc-dep-flags.js +++ b/node_modules/@npmcli/arborist/lib/calc-dep-flags.js @@ -11,7 +11,7 @@ const calcDepFlags = (tree, resetRoot = true) => { tree, visit: node => calcDepFlagsStep(node), filter: node => node, - getChildren: node => [...node.edgesOut.values()].map(edge => edge.to), + getChildren: (node, tree) => [...tree.edgesOut.values()].map(edge => edge.to), }) return ret } diff --git a/node_modules/@npmcli/arborist/package.json b/node_modules/@npmcli/arborist/package.json index 6e88b9cbb57a..b57922dd6c6d 100644 --- a/node_modules/@npmcli/arborist/package.json +++ b/node_modules/@npmcli/arborist/package.json @@ -1,6 +1,6 @@ { "name": "@npmcli/arborist", - "version": "2.2.1", + "version": "2.2.2", "description": "Manage node_modules trees", "dependencies": { "@npmcli/installed-package-contents": "^1.0.6", diff --git a/package-lock.json b/package-lock.json index 66cc940bd082..7e99d619709d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -252,7 +252,7 @@ ], "license": "Artistic-2.0", "dependencies": { - "@npmcli/arborist": "^2.2.1", + "@npmcli/arborist": "^2.2.2", "@npmcli/ci-detect": "^1.2.0", "@npmcli/config": "^1.2.9", "@npmcli/run-script": "^1.8.3", @@ -575,9 +575,9 @@ } }, "node_modules/@npmcli/arborist": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-2.2.1.tgz", - "integrity": "sha512-J76nY+TYhxNLFAnWy1HqfjszC6dHy5zxHHFt1LJ2pgBDcb00ipNAbTX0qtyv6FPTF67hPErmPKePaKtFr5KvEA==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-2.2.2.tgz", + "integrity": "sha512-X6sl303t4UQUD42JKqgicOG1kEUoncu1x8IH4s3YUq/m3ALIMFAsorJ8DNa8RDVbjOvJ+aB9X9Aif/pB1xQLog==", "inBundle": true, "dependencies": { "@npmcli/installed-package-contents": "^1.0.6", @@ -6671,7 +6671,102 @@ "signal-exit", "tap-parser", "tap-yaml", - "yaml" + "yaml", + "@babel/code-frame", + "@babel/core", + "@babel/generator", + "@babel/helper-annotate-as-pure", + "@babel/helper-builder-react-jsx", + "@babel/helper-builder-react-jsx-experimental", + "@babel/helper-function-name", + "@babel/helper-get-function-arity", + "@babel/helper-member-expression-to-functions", + "@babel/helper-module-imports", + "@babel/helper-module-transforms", + "@babel/helper-optimise-call-expression", + "@babel/helper-plugin-utils", + "@babel/helper-replace-supers", + "@babel/helper-simple-access", + "@babel/helper-split-export-declaration", + "@babel/helper-validator-identifier", + "@babel/helpers", + "@babel/highlight", + "@babel/parser", + "@babel/plugin-proposal-object-rest-spread", + "@babel/plugin-syntax-jsx", + "@babel/plugin-syntax-object-rest-spread", + "@babel/plugin-transform-destructuring", + "@babel/plugin-transform-parameters", + "@babel/plugin-transform-react-jsx", + "@babel/template", + "@babel/traverse", + "@babel/types", + "@types/color-name", + "@types/prop-types", + "@types/yoga-layout", + "ansi-escapes", + "ansi-regex", + "ansi-styles", + "ansicolors", + "arrify", + "astral-regex", + "auto-bind", + "caller-callsite", + "caller-path", + "callsites", + "cardinal", + "chalk", + "ci-info", + "cli-cursor", + "cli-truncate", + "color-convert", + "color-name", + "convert-source-map", + "csstype", + "debug", + "emoji-regex", + "escape-string-regexp", + "esprima", + "events-to-array", + "gensync", + "globals", + "has-flag", + "is-ci", + "is-fullwidth-code-point", + "js-tokens", + "jsesc", + "json5", + "lodash", + "lodash.throttle", + "log-update", + "loose-envify", + "mimic-fn", + "minimist", + "ms", + "object-assign", + "onetime", + "path-parse", + "prop-types", + "punycode", + "react-is", + "react-reconciler", + "redeyed", + "resolve", + "resolve-from", + "restore-cursor", + "scheduler", + "semver", + "slice-ansi", + "string-length", + "string-width", + "strip-ansi", + "supports-color", + "to-fast-properties", + "type-fest", + "unicode-length", + "widest-line", + "wrap-ansi", + "yoga-layout-prebuilt" ], "dev": true, "dependencies": { @@ -9845,9 +9940,9 @@ } }, "@npmcli/arborist": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-2.2.1.tgz", - "integrity": "sha512-J76nY+TYhxNLFAnWy1HqfjszC6dHy5zxHHFt1LJ2pgBDcb00ipNAbTX0qtyv6FPTF67hPErmPKePaKtFr5KvEA==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-2.2.2.tgz", + "integrity": "sha512-X6sl303t4UQUD42JKqgicOG1kEUoncu1x8IH4s3YUq/m3ALIMFAsorJ8DNa8RDVbjOvJ+aB9X9Aif/pB1xQLog==", "requires": { "@npmcli/installed-package-contents": "^1.0.6", "@npmcli/map-workspaces": "^1.0.2", diff --git a/package.json b/package.json index afe3d62ac285..2a6e22042e57 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "./package.json": "./package.json" }, "dependencies": { - "@npmcli/arborist": "^2.2.1", + "@npmcli/arborist": "^2.2.2", "@npmcli/ci-detect": "^1.2.0", "@npmcli/config": "^1.2.9", "@npmcli/run-script": "^1.8.3",