From 13a170090a32267e17218334c3d1a500248f12c8 Mon Sep 17 00:00:00 2001 From: Stephen Zhou Date: Sun, 14 Jul 2024 19:22:07 +0800 Subject: [PATCH] feat: .npmrc auto complete (#12) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 余腾靖 --- package.json | 3 + pnpm-lock.yaml | 762 +++++++++++++++++++++++++++ scripts/fetch-npmrc.ts | 52 ++ src/completion/npmrc/index.ts | 129 +++++ src/completion/npmrc/options.ts | 227 ++++++++ src/completion/npmrc/registryList.ts | 45 ++ src/diagnostic/index.ts | 14 +- src/extension.ts | 27 +- src/typings/module.d.ts | 3 + src/utils/constants.ts | 14 + test-workspace/.npmrc | 2 + 11 files changed, 1262 insertions(+), 16 deletions(-) create mode 100644 scripts/fetch-npmrc.ts create mode 100644 src/completion/npmrc/index.ts create mode 100644 src/completion/npmrc/options.ts create mode 100644 src/completion/npmrc/registryList.ts create mode 100644 src/typings/module.d.ts create mode 100644 test-workspace/.npmrc diff --git a/package.json b/package.json index 524940b..ac32974 100644 --- a/package.json +++ b/package.json @@ -322,6 +322,8 @@ "prepare": "simple-git-hooks" }, "dependencies": { + "@npmcli/config": "^8.3.4", + "@pnpm/config": "^21.6.1", "axios": "^1.7.2", "detect-package-manager": "^3.0.2", "escape-string-regexp": "^5.0.0", @@ -357,6 +359,7 @@ "@yutengjing/prettier-config": "^1.3.0", "@yutengjing/release": "^0.3.1", "all-node-versions": "^13.0.0", + "cheerio": "1.0.0-rc.12", "esbuild": "^0.23.0", "esbuild-visualizer": "^0.6.0", "eslint": "^8.57.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 33f7e3f..460ea61 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,12 @@ importers: .: dependencies: + '@npmcli/config': + specifier: ^8.3.4 + version: 8.3.4 + '@pnpm/config': + specifier: ^21.6.1 + version: 21.6.1(@pnpm/logger@5.0.0) axios: specifier: ^1.7.2 version: 1.7.2 @@ -108,6 +114,9 @@ importers: all-node-versions: specifier: ^13.0.0 version: 13.0.0 + cheerio: + specifier: 1.0.0-rc.12 + version: 1.0.0-rc.12 esbuild: specifier: ^0.23.0 version: 0.23.0 @@ -533,6 +542,10 @@ packages: resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@gwhitney/detect-indent@7.0.1': + resolution: {integrity: sha512-7bQW+gkKa2kKZPeJf6+c6gFK9ARxQfn+FKy9ScTBppyKRWH2KzsmweXUoklqeEiHiNVWaeP5csIdsNq6w7QhzA==} + engines: {node: '>=12.20'} + '@humanwhocodes/config-array@0.11.14': resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} @@ -564,6 +577,30 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@npmcli/config@8.3.4': + resolution: {integrity: sha512-01rtHedemDNhUXdicU7s+QYz/3JyV5Naj84cvdXGH4mgCdL+agmSYaLF4LUG4vMCLzhBO8YtS0gPpH1FGvbgAw==} + engines: {node: ^16.14.0 || >=18.0.0} + + '@npmcli/git@5.0.8': + resolution: {integrity: sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==} + engines: {node: ^16.14.0 || >=18.0.0} + + '@npmcli/map-workspaces@3.0.6': + resolution: {integrity: sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@npmcli/name-from-folder@2.0.0': + resolution: {integrity: sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@npmcli/package-json@5.2.0': + resolution: {integrity: sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ==} + engines: {node: ^16.14.0 || >=18.0.0} + + '@npmcli/promise-spawn@7.0.2': + resolution: {integrity: sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==} + engines: {node: ^16.14.0 || >=18.0.0} + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -572,10 +609,72 @@ packages: resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + '@pnpm/catalogs.config@0.1.0': + resolution: {integrity: sha512-OIqo9qF5qUl9Zlu7zV2aaX9PbtozRiFM6VPrn3PmIrNfYnCh3HyB/ojAp36oglz4+xVJ+mUqx4+aZmstN4ALpg==} + engines: {node: '>=18.12'} + + '@pnpm/catalogs.types@0.1.0': + resolution: {integrity: sha512-i52GQCj77GqebPBmmxxTcBRYch8eIdXGC+1REkv//272YNMt5bv5Okq0DvtE8A8RkPurGxFdYVXuqqrTdgBZEw==} + engines: {node: '>=18.12'} + '@pnpm/config.env-replace@1.1.0': resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} engines: {node: '>=12.22.0'} + '@pnpm/config.env-replace@3.0.0': + resolution: {integrity: sha512-tV71wOtu8ULW4Fv5c7MWph3Sfle1wkT2q83qF2Cx/0J5E2dpUsClO9evAouL4fbdmPonkXJbRYL5cGHKuqxr4w==} + engines: {node: '>=18.12'} + + '@pnpm/config@21.6.1': + resolution: {integrity: sha512-/rK6OlTvYDZao9QQUu/s3ufWDZBHrdq4nYAJehLikCUWcWDslIlxQeYksTMrg95+/j1xIqXnbindIQ66qR6wlw==} + engines: {node: '>=18.12'} + + '@pnpm/constants@8.0.0': + resolution: {integrity: sha512-yQosGUvYPpAjb1jOFcdbwekRjZRVxN6C0hHzfRCZrMKbxGjt/E0g0RcFlEDNVZ95tm4oMMcr7nEPa7H7LX3emw==} + engines: {node: '>=18.12'} + + '@pnpm/core-loggers@10.0.3': + resolution: {integrity: sha512-G038bkMTuvmgG3XtuajnfoBS/u2CoeywRzJZb3qxvcj1XpLFTDAhHyUv/2Rr+yh6KDOVAuTWqdk+WNfeNf6yrw==} + engines: {node: '>=18.12'} + peerDependencies: + '@pnpm/logger': ^5.0.0 + + '@pnpm/crypto.base32-hash@3.0.0': + resolution: {integrity: sha512-iGKP6rRKng5Tcad1+S+j3UoY5wVZN+z0ZgemlGp69jNgn6EaM4N0Q3mvnDNJ7UZFmL2ClXZZYLNuCk9pUYV3Xg==} + engines: {node: '>=18.12'} + + '@pnpm/error@6.0.1': + resolution: {integrity: sha512-7yjO0RgmWYb4OKgcWC33yD4Z2CxE7Tm7vXX1SmS7GDifDT/bgZZhHeS2xq/+W6y9yhwIrRSA+7AlQL1NM2wIvw==} + engines: {node: '>=18.12'} + + '@pnpm/fetcher-base@16.0.3': + resolution: {integrity: sha512-6ddoPp1kHRlllj9Qt0TrMxkKNT10WD6e/TcKUiZQbe74fCWasMVqqZAS4z+EuKetkg92NqmUChQ2wp4Xry5YZA==} + engines: {node: '>=18.12'} + + '@pnpm/git-utils@2.0.0': + resolution: {integrity: sha512-k1rv4Zvno/5zJAqE/Mh9V0ehlm14NsYwpXTdaGMtyhkoHvlSckRfr23OIOIM7Q/TRX+LhqyJ2kep50SY2TsZ+g==} + engines: {node: '>=18.12'} + + '@pnpm/graceful-fs@4.0.0': + resolution: {integrity: sha512-933nhV2Prp51522poxX6Chvb7kEW3U3kzVWoqDU1+icB+QE7z/2qQ8wYHsBt4jm0Uil/sF67t77ugOr8bR63kg==} + engines: {node: '>=18.12'} + + '@pnpm/hooks.types@2.0.4': + resolution: {integrity: sha512-dffq6qcSzWy+C2fY+ig/etjB+cdLeGqmlqAqcpEpHr5qE2tOHDr6sjFdO5DOQPeQhtP9tyTsrfL0QSa423MQvQ==} + engines: {node: '>=18.12'} + + '@pnpm/lockfile-types@7.1.2': + resolution: {integrity: sha512-+64KoK8gtTS5lxslW8ATtwwEbikW4e9i/OV5eaR+X+//5SeUA796uCN96sKu6q6OzpZi3/aVU4VgVe15MT9XKA==} + engines: {node: '>=18.12'} + + '@pnpm/logger@5.0.0': + resolution: {integrity: sha512-YfcB2QrX+Wx1o6LD1G2Y2fhDhOix/bAY/oAnMpHoNLsKkWIRbt1oKLkIFvxBMzLwAEPqnYWguJrYC+J6i4ywbw==} + engines: {node: '>=12.17'} + + '@pnpm/matcher@6.0.0': + resolution: {integrity: sha512-c2diPZzejRYnL6b00Ko70TnOlbsqydUOvAjOZ7THTs0ptXG/AARcwNp9YO5EXFq775TTmsSUBo99qisYF1ogNA==} + engines: {node: '>=18.12'} + '@pnpm/network.ca-file@1.0.2': resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} engines: {node: '>=12.22.0'} @@ -584,6 +683,48 @@ packages: resolution: {integrity: sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==} engines: {node: '>=12'} + '@pnpm/pnpmfile@6.0.6': + resolution: {integrity: sha512-LSe3UsCTOlzWQeXfb9dut2ozVPaQLrinF8Rie4GcbxD7UK6wHPerX4EqzM9IULzTaI8PkQ+ss4+vglnpV0Q6sw==} + engines: {node: '>=18.12'} + peerDependencies: + '@pnpm/logger': ^5.0.0 + + '@pnpm/ramda@0.28.1': + resolution: {integrity: sha512-zcAG+lvU0fMziNeGXpPyCyCJYp5ZVrPElEE4t14jAmViaihohocZ+dDkcRIyAomox8pQsuZnv1EyHR+pOhmUWw==} + + '@pnpm/read-project-manifest@6.0.4': + resolution: {integrity: sha512-yxfJQayRXlmcs7eQJkNVz4yuZw6x3lYAoODeRCI0S0Ez7G2ql+zoOGeigIe2UxI2B8xN3WyDgZ4G2CqV7t5cBw==} + engines: {node: '>=18.12'} + + '@pnpm/resolver-base@13.0.0': + resolution: {integrity: sha512-hUAn2OqHEBB3MRLlbvtczI0KdNM9CJgd0hDRuLDrcaVrhZrhHDwgLywls+hWbgNvUpcdMR7k+uEIo+07Vu/Qvg==} + engines: {node: '>=18.12'} + + '@pnpm/store-controller-types@18.1.2': + resolution: {integrity: sha512-1vfHCg67/yvl6yDxgXUqSEukY0TRqNOntg3CVcIZwud33GOc2Ak7GgTZWCJAZIIzmc/o8rClNgb8TKket3bN6A==} + engines: {node: '>=18.12'} + + '@pnpm/text.comments-parser@3.0.0': + resolution: {integrity: sha512-BSGvYd59kPKVTUk1InekEp+TiPnJ8650/bQyiOUFSvqHi61YipcR+E4H2i3xTnk2e+GHdGbXvEtAZbQmyxb0/g==} + engines: {node: '>=18.12'} + + '@pnpm/types@11.0.0': + resolution: {integrity: sha512-BSdk9nlYLHHHLrTFNpmdrXrXVc+1sY/E1Fs1zqR8pY/KjpjVhxkruLZuXitPRPxbk4jSqm7UnG5WCz008iiaig==} + engines: {node: '>=18.12'} + + '@pnpm/which@3.0.1': + resolution: {integrity: sha512-4ivtS12Oni9axgGefaq+gTPD+7N0VPCFdxFH8izCaWfnxLQblX3iVxba+25ZoagStlzUs8sQg8OMKlCVhyGWTw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + + '@pnpm/workspace.read-manifest@2.2.0': + resolution: {integrity: sha512-8rWN1LjG8qCqR32UcDVBBaXfmQhl1Ye698KB1L+MlJTa/S568UyQOfINdC8eL5ba6vggoDp4opgUcY8FoEdNhQ==} + engines: {node: '>=18.12'} + + '@pnpm/write-project-manifest@6.0.3': + resolution: {integrity: sha512-0KLOjeLlBBgFa8c1NAI00l/UIyyhMnc505g1btWzhKAsCa9847uYitAT4FQETJVQzWroP7XaFu72OKbkxWBxBg==} + engines: {node: '>=18.12'} + '@prettier/plugin-xml@3.4.1': resolution: {integrity: sha512-Uf/6/+9ez6z/IvZErgobZ2G9n1ybxF5BhCd7eMcKqfoWuOzzNUxBipNo3QAP8kRC1VD18TIo84no7LhqtyDcTg==} peerDependencies: @@ -668,6 +809,9 @@ packages: '@types/semver@7.5.8': resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + '@types/ssri@7.1.5': + resolution: {integrity: sha512-odD/56S3B51liILSk5aXJlnYt99S6Rt9EFDDqGtJM26rKHApHcwyU/UoYHrzKkdkHMAIquGWCuHtQTbes+FRQw==} + '@types/unist@2.0.10': resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} @@ -827,6 +971,15 @@ packages: engines: {node: '>=20.5.0'} hasBin: true + '@zkochan/which@2.0.3': + resolution: {integrity: sha512-C1ReN7vt2/2O0fyTsx5xnbQuxBrmG5NMSbcIkPKCCfCTJgpZBsuRYzFXHj3nVq8vTfK7vxHUmzfCpSHgO7j4rg==} + engines: {node: '>= 8'} + hasBin: true + + abbrev@2.0.0: + resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -974,6 +1127,10 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + better-path-resolve@1.0.0: + resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} + engines: {node: '>=4'} + big-integer@1.6.52: resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} engines: {node: '>=0.6'} @@ -991,6 +1148,9 @@ packages: bl@5.1.0: resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==} + bole@5.0.14: + resolution: {integrity: sha512-IFDlSAH1GKiQEp4NUa2Eg8RplcV2oXOFCHD/nfNqVlRNf9RgNRdxtR2g3P+Cz57uP5jAGSrq2bGUqXLQeh/h4w==} + boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} @@ -1075,6 +1235,14 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} + camelcase-keys@6.2.2: + resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} + engines: {node: '>=8'} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} @@ -1083,6 +1251,10 @@ packages: resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} engines: {node: '>=14.16'} + can-write-to-dir@1.1.1: + resolution: {integrity: sha512-eOgiEWqjppB+3DN/5E82EQ8dTINus8d9GXMCbEsUnp2hcUIcXmBvzWmD3tXMk3CuBK0v+ddK9qw0EAF+JVRMjQ==} + engines: {node: '>=10.13'} + caniuse-lite@1.0.30001600: resolution: {integrity: sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==} @@ -1248,6 +1420,10 @@ packages: crypt@0.0.2: resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} + crypto-random-string@2.0.0: + resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} + engines: {node: '>=8'} + css-select@5.1.0: resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} @@ -1429,6 +1605,9 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} + err-code@2.0.3: + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} + error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -1731,6 +1910,9 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} @@ -1883,6 +2065,10 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + glob@11.0.0: resolution: {integrity: sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==} engines: {node: 20 || >=22} @@ -2057,6 +2243,9 @@ packages: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} + individual@3.0.0: + resolution: {integrity: sha512-rUY5vtT748NMRbEMrTNiFfy29BgGZwGXUi2NFUVMWQrogSLzlJvQV9eeMWi+g1aVaQ53tpyLAQtd5x/JH0Nh1g==} + inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. @@ -2067,6 +2256,14 @@ packages: ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + ini@3.0.1: + resolution: {integrity: sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + ini@4.1.3: + resolution: {integrity: sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + internal-slot@1.0.7: resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} engines: {node: '>= 0.4'} @@ -2214,6 +2411,10 @@ packages: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} + is-subdir@1.2.0: + resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} + engines: {node: '>=4'} + is-symbol@1.0.4: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} @@ -2237,6 +2438,10 @@ packages: is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + is-wsl@2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} @@ -2250,6 +2455,13 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + isexe@3.1.1: + resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} + engines: {node: '>=16'} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jackspeak@4.0.1: resolution: {integrity: sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==} engines: {node: 20 || >=22} @@ -2291,16 +2503,28 @@ packages: json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + json-parse-even-better-errors@3.0.2: + resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + json5@1.0.2: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} hasBin: true + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + jsonc-eslint-parser@2.4.0: resolution: {integrity: sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2393,6 +2617,9 @@ packages: lodash-es@4.17.21: resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + lodash.clonedeep@4.5.0: + resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} + lodash.includes@4.3.0: resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} @@ -2456,6 +2683,10 @@ packages: resolution: {integrity: sha512-AvxTC6id0fzSf6OyNBTp1syyCuKO7nOJvHgYlhT0Qkkjvk40zZo+av3ayVgXlxnF/DxEzEfY9mMdd7FHsd+wKQ==} engines: {node: '>=7.6'} + map-obj@4.3.0: + resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} + engines: {node: '>=8'} + markdown-it@12.3.2: resolution: {integrity: sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==} hasBin: true @@ -2657,6 +2888,11 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + ndjson@2.0.0: + resolution: {integrity: sha512-nGl7LRGrzugTtaFcJMhLbpzJM6XdivmbkdlaGcrk/LXg2KL/YBC6z1g70xh0/al+oFuVFP8N8kiWRucmeEH/qQ==} + engines: {node: '>=10'} + hasBin: true + node-abi@3.56.0: resolution: {integrity: sha512-fZjdhDOeRcaS+rcpve7XuwHBmktS1nS1gzgghwKUQQ8nTy2FdSDr6ZT8k6YhvlJeHmmQMYiT/IH9hfco5zeW2Q==} engines: {node: '>=10'} @@ -2670,21 +2906,49 @@ packages: node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + nopt@7.2.1: + resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + normalize-package-data@6.0.2: + resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} + engines: {node: ^16.14.0 || >=18.0.0} + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} + normalize-registry-url@2.0.0: + resolution: {integrity: sha512-3e9FwDyRAhbxXw4slm4Tjv40u78yPwMc/WZkACpqNQOs5sM7wic853AeTLkMFEVhivZkclGYlse8iYsklz0Yvg==} + normalize-url@8.0.1: resolution: {integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==} engines: {node: '>=14.16'} + npm-install-checks@6.3.0: + resolution: {integrity: sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-normalize-package-bin@3.0.1: + resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + npm-package-arg@10.1.0: resolution: {integrity: sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + npm-package-arg@11.0.2: + resolution: {integrity: sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==} + engines: {node: ^16.14.0 || >=18.0.0} + + npm-pick-manifest@9.1.0: + resolution: {integrity: sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA==} + engines: {node: ^16.14.0 || >=18.0.0} + npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -2848,6 +3112,10 @@ packages: parse5@7.1.2: resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + path-absolute@1.0.1: + resolution: {integrity: sha512-gds5iRhSeOcDtj8gfWkRHLtZKTPsFVuh7utbjYtvnclw4XM+ffRzJrwqMhOD1PVqef7nBLmgsu1vIujjvAJrAw==} + engines: {node: '>=4'} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -2868,13 +3136,24 @@ packages: resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} engines: {node: '>=12'} + path-name@1.0.0: + resolution: {integrity: sha512-/dcAb5vMXH0f51yvMuSUqFpxUcA8JelbRmE5mW/p4CUJxrNgK24IkstnV7ENtg2IDGBOu6izKTG6eilbnbNKWQ==} + path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + path-scurry@2.0.0: resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} engines: {node: 20 || >=22} + path-temp@2.1.0: + resolution: {integrity: sha512-cMMJTAZlion/RWRRC48UbrDymEIt+/YSD/l8NqjneyDw2rDOBQcP5yRkMB4CYGn47KMhZvbblBP7Z79OsMw72w==} + engines: {node: '>=8.15'} + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -2946,9 +3225,25 @@ packages: resolution: {integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + proc-log@4.2.0: + resolution: {integrity: sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + promise-inflight@1.0.1: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true + + promise-retry@2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} + prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -2973,6 +3268,10 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + quick-lru@4.0.1: + resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} + engines: {node: '>=8'} + quick-lru@5.1.1: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} @@ -2987,6 +3286,14 @@ packages: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true + read-ini-file@4.0.0: + resolution: {integrity: sha512-zz4qv/sKETv7nAkATqSJ9YMbKD8NXRPuA8d17VdYCuNYrVstB1S6UAMU6aytf5vRa9MESbZN7jLZdcmrOxz4gg==} + engines: {node: '>=14.6'} + + read-package-json-fast@3.0.2: + resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + read-pkg-up@7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} engines: {node: '>=8'} @@ -2995,6 +3302,10 @@ packages: resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} engines: {node: '>=8'} + read-yaml-file@2.1.0: + resolution: {integrity: sha512-UkRNRIwnhG+y7hpqnycCL/xbTk7+ia9VuVTC0S+zVbwd65DI9eUpRMfsWIGrCWxTU/mi+JW8cHQCrv+zfCbEPQ==} + engines: {node: '>=10.13'} + read@1.0.7: resolution: {integrity: sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==} engines: {node: '>=0.8'} @@ -3010,6 +3321,10 @@ packages: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} + realpath-missing@1.1.0: + resolution: {integrity: sha512-wnWtnywepjg/eHIgWR97R7UuM5i+qHLA195qdN9UPKvcMqfn60+67S8sPPW3vDlSEfYHoFkKU8IvpCNty3zQvQ==} + engines: {node: '>=10'} + refa@0.12.1: resolution: {integrity: sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -3067,10 +3382,17 @@ packages: resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rfc4648@1.5.3: + resolution: {integrity: sha512-MjOWxM065+WswwnmNONOT+bD1nXzY9Km6u3kzvnx8F8/HXGZdz3T6e6vZJ8Q/RIMUSp/nxqjH3GwvJDy8ijeQQ==} + rfdc@1.3.1: resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} @@ -3101,6 +3423,10 @@ packages: safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-execa@0.1.2: + resolution: {integrity: sha512-vdTshSQ2JsRCgT8eKZWNJIL26C6bVqy1SOmuCMlKHegVeo8KYRobRrefOdUq9OozSPUUiSxrylteeRmLOMFfWg==} + engines: {node: '>=12'} + safe-regex-test@1.0.3: resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} engines: {node: '>= 0.4'} @@ -3190,6 +3516,10 @@ packages: resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} engines: {node: '>=18'} + sort-keys@4.2.0: + resolution: {integrity: sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==} + engines: {node: '>=8'} + spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} @@ -3205,6 +3535,9 @@ packages: spdx-license-ids@3.0.17: resolution: {integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==} + split2@3.2.2: + resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} + stale-dep@0.7.0: resolution: {integrity: sha512-3UXMauN07/5uLpOuF5lv79BACRRMPAo9LcG9VabMk8RqqN6Sj3Lk4cW/JwcCeFWDdiIzjDNxeBo8RwV4mNQCgw==} engines: {node: '>=16.14.0'} @@ -3278,6 +3611,13 @@ packages: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + + strip-comments-strings@1.2.0: + resolution: {integrity: sha512-zwF4bmnyEjZwRhaak9jUWNxc0DoeKBJ7lwSN/LEc8dQXZcUFG6auaaTQJokQWXopLdM3iTx01nQT8E4aL29DAQ==} + strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} @@ -3344,6 +3684,9 @@ packages: text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + through2@4.0.2: + resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} + titleize@3.0.0: resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} engines: {node: '>=12'} @@ -3455,6 +3798,10 @@ packages: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} engines: {node: '>=18'} + unique-string@2.0.0: + resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} + engines: {node: '>=8'} + unist-util-stringify-position@2.0.3: resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} @@ -3495,6 +3842,9 @@ packages: resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + walk-up-path@3.0.1: + resolution: {integrity: sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==} + which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} @@ -3507,6 +3857,11 @@ packages: engines: {node: '>= 8'} hasBin: true + which@4.0.0: + resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==} + engines: {node: ^16.13.0 || >=18.0.0} + hasBin: true + widest-line@4.0.1: resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} engines: {node: '>=12'} @@ -3533,6 +3888,10 @@ packages: resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + write-yaml-file@5.0.0: + resolution: {integrity: sha512-FdNA4RyH1L43TlvGG8qOMIfcEczwA5ij+zLXUy3Z83CjxhLvcV7/Q/8pk22wnCgYw7PJhtK+7lhO+qqyT4NdvQ==} + engines: {node: '>=16.14'} + xml2js@0.5.0: resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} engines: {node: '>=4.0.0'} @@ -3894,6 +4253,8 @@ snapshots: '@eslint/js@8.57.0': {} + '@gwhitney/detect-indent@7.0.1': {} + '@humanwhocodes/config-array@0.11.14': dependencies: '@humanwhocodes/object-schema': 2.0.2 @@ -3934,6 +4295,58 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 + '@npmcli/config@8.3.4': + dependencies: + '@npmcli/map-workspaces': 3.0.6 + '@npmcli/package-json': 5.2.0 + ci-info: 4.0.0 + ini: 4.1.3 + nopt: 7.2.1 + proc-log: 4.2.0 + semver: 7.6.2 + walk-up-path: 3.0.1 + transitivePeerDependencies: + - bluebird + + '@npmcli/git@5.0.8': + dependencies: + '@npmcli/promise-spawn': 7.0.2 + ini: 4.1.3 + lru-cache: 10.3.0 + npm-pick-manifest: 9.1.0 + proc-log: 4.2.0 + promise-inflight: 1.0.1 + promise-retry: 2.0.1 + semver: 7.6.2 + which: 4.0.0 + transitivePeerDependencies: + - bluebird + + '@npmcli/map-workspaces@3.0.6': + dependencies: + '@npmcli/name-from-folder': 2.0.0 + glob: 10.4.5 + minimatch: 9.0.4 + read-package-json-fast: 3.0.2 + + '@npmcli/name-from-folder@2.0.0': {} + + '@npmcli/package-json@5.2.0': + dependencies: + '@npmcli/git': 5.0.8 + glob: 10.4.5 + hosted-git-info: 7.0.2 + json-parse-even-better-errors: 3.0.2 + normalize-package-data: 6.0.2 + proc-log: 4.2.0 + semver: 7.6.2 + transitivePeerDependencies: + - bluebird + + '@npmcli/promise-spawn@7.0.2': + dependencies: + which: 4.0.0 + '@pkgjs/parseargs@0.11.0': optional: true @@ -3946,8 +4359,93 @@ snapshots: picocolors: 1.0.0 tslib: 2.6.2 + '@pnpm/catalogs.config@0.1.0': + dependencies: + '@pnpm/error': 6.0.1 + + '@pnpm/catalogs.types@0.1.0': {} + '@pnpm/config.env-replace@1.1.0': {} + '@pnpm/config.env-replace@3.0.0': {} + + '@pnpm/config@21.6.1(@pnpm/logger@5.0.0)': + dependencies: + '@pnpm/catalogs.config': 0.1.0 + '@pnpm/catalogs.types': 0.1.0 + '@pnpm/config.env-replace': 3.0.0 + '@pnpm/constants': 8.0.0 + '@pnpm/error': 6.0.1 + '@pnpm/git-utils': 2.0.0 + '@pnpm/matcher': 6.0.0 + '@pnpm/npm-conf': 2.2.2 + '@pnpm/pnpmfile': 6.0.6(@pnpm/logger@5.0.0) + '@pnpm/read-project-manifest': 6.0.4 + '@pnpm/types': 11.0.0 + '@pnpm/workspace.read-manifest': 2.2.0 + better-path-resolve: 1.0.0 + camelcase: 6.3.0 + camelcase-keys: 6.2.2 + can-write-to-dir: 1.1.1 + is-subdir: 1.2.0 + is-windows: 1.0.2 + normalize-registry-url: 2.0.0 + path-absolute: 1.0.1 + path-name: 1.0.0 + ramda: '@pnpm/ramda@0.28.1' + read-ini-file: 4.0.0 + realpath-missing: 1.1.0 + which: '@pnpm/which@3.0.1' + transitivePeerDependencies: + - '@pnpm/logger' + + '@pnpm/constants@8.0.0': {} + + '@pnpm/core-loggers@10.0.3(@pnpm/logger@5.0.0)': + dependencies: + '@pnpm/logger': 5.0.0 + '@pnpm/types': 11.0.0 + + '@pnpm/crypto.base32-hash@3.0.0': + dependencies: + rfc4648: 1.5.3 + + '@pnpm/error@6.0.1': + dependencies: + '@pnpm/constants': 8.0.0 + + '@pnpm/fetcher-base@16.0.3': + dependencies: + '@pnpm/resolver-base': 13.0.0 + '@pnpm/types': 11.0.0 + '@types/ssri': 7.1.5 + + '@pnpm/git-utils@2.0.0': + dependencies: + execa: safe-execa@0.1.2 + + '@pnpm/graceful-fs@4.0.0': + dependencies: + graceful-fs: 4.2.11 + + '@pnpm/hooks.types@2.0.4': + dependencies: + '@pnpm/lockfile-types': 7.1.2 + '@pnpm/types': 11.0.0 + + '@pnpm/lockfile-types@7.1.2': + dependencies: + '@pnpm/types': 11.0.0 + + '@pnpm/logger@5.0.0': + dependencies: + bole: 5.0.14 + ndjson: 2.0.0 + + '@pnpm/matcher@6.0.0': + dependencies: + escape-string-regexp: 4.0.0 + '@pnpm/network.ca-file@1.0.2': dependencies: graceful-fs: 4.2.10 @@ -3958,6 +4456,72 @@ snapshots: '@pnpm/network.ca-file': 1.0.2 config-chain: 1.1.13 + '@pnpm/pnpmfile@6.0.6(@pnpm/logger@5.0.0)': + dependencies: + '@pnpm/core-loggers': 10.0.3(@pnpm/logger@5.0.0) + '@pnpm/crypto.base32-hash': 3.0.0 + '@pnpm/error': 6.0.1 + '@pnpm/hooks.types': 2.0.4 + '@pnpm/lockfile-types': 7.1.2 + '@pnpm/logger': 5.0.0 + '@pnpm/store-controller-types': 18.1.2 + '@pnpm/types': 11.0.0 + chalk: 4.1.2 + path-absolute: 1.0.1 + + '@pnpm/ramda@0.28.1': {} + + '@pnpm/read-project-manifest@6.0.4': + dependencies: + '@gwhitney/detect-indent': 7.0.1 + '@pnpm/error': 6.0.1 + '@pnpm/graceful-fs': 4.0.0 + '@pnpm/text.comments-parser': 3.0.0 + '@pnpm/types': 11.0.0 + '@pnpm/write-project-manifest': 6.0.3 + fast-deep-equal: 3.1.3 + is-windows: 1.0.2 + json5: 2.2.3 + lodash.clonedeep: 4.5.0 + parse-json: 5.2.0 + read-yaml-file: 2.1.0 + sort-keys: 4.2.0 + strip-bom: 4.0.0 + + '@pnpm/resolver-base@13.0.0': + dependencies: + '@pnpm/types': 11.0.0 + + '@pnpm/store-controller-types@18.1.2': + dependencies: + '@pnpm/fetcher-base': 16.0.3 + '@pnpm/resolver-base': 13.0.0 + '@pnpm/types': 11.0.0 + + '@pnpm/text.comments-parser@3.0.0': + dependencies: + strip-comments-strings: 1.2.0 + + '@pnpm/types@11.0.0': {} + + '@pnpm/which@3.0.1': + dependencies: + isexe: 2.0.0 + + '@pnpm/workspace.read-manifest@2.2.0': + dependencies: + '@pnpm/constants': 8.0.0 + '@pnpm/error': 6.0.1 + read-yaml-file: 2.1.0 + + '@pnpm/write-project-manifest@6.0.3': + dependencies: + '@pnpm/text.comments-parser': 3.0.0 + '@pnpm/types': 11.0.0 + json5: 2.2.3 + write-file-atomic: 5.0.1 + write-yaml-file: 5.0.0 + '@prettier/plugin-xml@3.4.1(prettier@3.3.2)': dependencies: '@xml-tools/parser': 1.0.11 @@ -4033,6 +4597,10 @@ snapshots: '@types/semver@7.5.8': {} + '@types/ssri@7.1.5': + dependencies: + '@types/node': 20.14.10 + '@types/unist@2.0.10': {} '@types/unist@3.0.2': {} @@ -4274,6 +4842,12 @@ snapshots: execa: 9.3.0 picocolors: 1.0.1 + '@zkochan/which@2.0.3': + dependencies: + isexe: 2.0.0 + + abbrev@2.0.0: {} + acorn-jsx@5.3.2(acorn@8.11.3): dependencies: acorn: 8.11.3 @@ -4430,6 +5004,10 @@ snapshots: base64-js@1.5.1: {} + better-path-resolve@1.0.0: + dependencies: + is-windows: 1.0.2 + big-integer@1.6.52: {} binary-extensions@2.3.0: {} @@ -4449,6 +5027,11 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 + bole@5.0.14: + dependencies: + fast-safe-stringify: 2.1.1 + individual: 3.0.0 + boolbase@1.0.0: {} boxen@7.1.1: @@ -4563,10 +5146,22 @@ snapshots: callsites@3.1.0: {} + camelcase-keys@6.2.2: + dependencies: + camelcase: 5.3.1 + map-obj: 4.3.0 + quick-lru: 4.0.1 + + camelcase@5.3.1: {} + camelcase@6.3.0: {} camelcase@7.0.1: {} + can-write-to-dir@1.1.1: + dependencies: + path-temp: 2.1.0 + caniuse-lite@1.0.30001600: {} chalk@2.4.2: @@ -4749,6 +5344,8 @@ snapshots: crypt@0.0.2: {} + crypto-random-string@2.0.0: {} + css-select@5.1.0: dependencies: boolbase: 1.0.0 @@ -4916,6 +5513,8 @@ snapshots: entities@4.5.0: {} + err-code@2.0.3: {} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 @@ -5447,6 +6046,8 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-safe-stringify@2.1.1: {} + fastq@1.17.1: dependencies: reusify: 1.0.4 @@ -5608,6 +6209,15 @@ snapshots: dependencies: is-glob: 4.0.3 + glob@10.4.5: + dependencies: + foreground-child: 3.1.1 + jackspeak: 3.4.3 + minimatch: 9.0.4 + minipass: 7.1.2 + package-json-from-dist: 1.0.0 + path-scurry: 1.11.1 + glob@11.0.0: dependencies: foreground-child: 3.1.1 @@ -5810,6 +6420,8 @@ snapshots: indent-string@4.0.0: {} + individual@3.0.0: {} + inflight@1.0.6: dependencies: once: 1.4.0 @@ -5819,6 +6431,10 @@ snapshots: ini@1.3.8: {} + ini@3.0.1: {} + + ini@4.1.3: {} + internal-slot@1.0.7: dependencies: es-errors: 1.3.0 @@ -5937,6 +6553,10 @@ snapshots: dependencies: has-tostringtag: 1.0.2 + is-subdir@1.2.0: + dependencies: + better-path-resolve: 1.0.0 + is-symbol@1.0.4: dependencies: has-symbols: 1.0.3 @@ -5955,6 +6575,8 @@ snapshots: dependencies: call-bind: 1.0.7 + is-windows@1.0.2: {} + is-wsl@2.2.0: dependencies: is-docker: 2.2.1 @@ -5965,6 +6587,14 @@ snapshots: isexe@2.0.0: {} + isexe@3.1.1: {} + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + jackspeak@4.0.1: dependencies: '@isaacs/cliui': 8.0.2 @@ -5995,14 +6625,20 @@ snapshots: json-parse-even-better-errors@2.3.1: {} + json-parse-even-better-errors@3.0.2: {} + json-schema-traverse@0.4.1: {} json-stable-stringify-without-jsonify@1.0.1: {} + json-stringify-safe@5.0.1: {} + json5@1.0.2: dependencies: minimist: 1.2.8 + json5@2.2.3: {} + jsonc-eslint-parser@2.4.0: dependencies: acorn: 8.11.3 @@ -6135,6 +6771,8 @@ snapshots: lodash-es@4.17.21: {} + lodash.clonedeep@4.5.0: {} + lodash.includes@4.3.0: {} lodash.isboolean@3.0.3: {} @@ -6187,6 +6825,8 @@ snapshots: dependencies: p-defer: 1.0.0 + map-obj@4.3.0: {} + markdown-it@12.3.2: dependencies: argparse: 2.0.1 @@ -6482,6 +7122,14 @@ snapshots: natural-compare@1.4.0: {} + ndjson@2.0.0: + dependencies: + json-stringify-safe: 5.0.1 + minimist: 1.2.8 + readable-stream: 3.6.2 + split2: 3.2.2 + through2: 4.0.2 + node-abi@3.56.0: dependencies: semver: 7.6.2 @@ -6494,6 +7142,10 @@ snapshots: node-releases@2.0.14: {} + nopt@7.2.1: + dependencies: + abbrev: 2.0.0 + normalize-package-data@2.5.0: dependencies: hosted-git-info: 2.8.9 @@ -6501,10 +7153,24 @@ snapshots: semver: 5.7.2 validate-npm-package-license: 3.0.4 + normalize-package-data@6.0.2: + dependencies: + hosted-git-info: 7.0.2 + semver: 7.6.2 + validate-npm-package-license: 3.0.4 + normalize-path@3.0.0: {} + normalize-registry-url@2.0.0: {} + normalize-url@8.0.1: {} + npm-install-checks@6.3.0: + dependencies: + semver: 7.6.2 + + npm-normalize-package-bin@3.0.1: {} + npm-package-arg@10.1.0: dependencies: hosted-git-info: 6.1.1 @@ -6512,6 +7178,20 @@ snapshots: semver: 7.6.2 validate-npm-package-name: 5.0.1 + npm-package-arg@11.0.2: + dependencies: + hosted-git-info: 7.0.2 + proc-log: 4.2.0 + semver: 7.6.2 + validate-npm-package-name: 5.0.1 + + npm-pick-manifest@9.1.0: + dependencies: + npm-install-checks: 6.3.0 + npm-normalize-package-bin: 3.0.1 + npm-package-arg: 11.0.2 + semver: 7.6.2 + npm-run-path@4.0.1: dependencies: path-key: 3.1.1 @@ -6724,6 +7404,8 @@ snapshots: dependencies: entities: 4.5.0 + path-absolute@1.0.1: {} + path-exists@4.0.0: {} path-exists@5.0.0: {} @@ -6734,13 +7416,24 @@ snapshots: path-key@4.0.0: {} + path-name@1.0.0: {} + path-parse@1.0.7: {} + path-scurry@1.11.1: + dependencies: + lru-cache: 10.3.0 + minipass: 7.1.2 + path-scurry@2.0.0: dependencies: lru-cache: 11.0.0 minipass: 7.1.2 + path-temp@2.1.0: + dependencies: + unique-string: 2.0.0 + path-type@4.0.0: {} path-type@5.0.0: {} @@ -6804,8 +7497,17 @@ snapshots: proc-log@3.0.0: {} + proc-log@4.2.0: {} + process-nextick-args@2.0.1: {} + promise-inflight@1.0.1: {} + + promise-retry@2.0.1: + dependencies: + err-code: 2.0.3 + retry: 0.12.0 + prompts@2.4.2: dependencies: kleur: 3.0.3 @@ -6829,6 +7531,8 @@ snapshots: queue-microtask@1.2.3: {} + quick-lru@4.0.1: {} + quick-lru@5.1.1: {} randombytes@2.1.0: @@ -6848,6 +7552,16 @@ snapshots: minimist: 1.2.8 strip-json-comments: 2.0.1 + read-ini-file@4.0.0: + dependencies: + ini: 3.0.1 + strip-bom: 4.0.0 + + read-package-json-fast@3.0.2: + dependencies: + json-parse-even-better-errors: 3.0.2 + npm-normalize-package-bin: 3.0.1 + read-pkg-up@7.0.1: dependencies: find-up: 4.1.0 @@ -6861,6 +7575,11 @@ snapshots: parse-json: 5.2.0 type-fest: 0.6.0 + read-yaml-file@2.1.0: + dependencies: + js-yaml: 4.1.0 + strip-bom: 4.0.0 + read@1.0.7: dependencies: mute-stream: 0.0.8 @@ -6885,6 +7604,8 @@ snapshots: dependencies: picomatch: 2.3.1 + realpath-missing@1.1.0: {} + refa@0.12.1: dependencies: '@eslint-community/regexpp': 4.10.0 @@ -6940,8 +7661,12 @@ snapshots: onetime: 5.1.2 signal-exit: 3.0.7 + retry@0.12.0: {} + reusify@1.0.4: {} + rfc4648@1.5.3: {} + rfdc@1.3.1: {} rimraf@3.0.2: @@ -6972,6 +7697,12 @@ snapshots: safe-buffer@5.2.1: {} + safe-execa@0.1.2: + dependencies: + '@zkochan/which': 2.0.3 + execa: 5.1.1 + path-name: 1.0.0 + safe-regex-test@1.0.3: dependencies: call-bind: 1.0.7 @@ -7061,6 +7792,10 @@ snapshots: ansi-styles: 6.2.1 is-fullwidth-code-point: 5.0.0 + sort-keys@4.2.0: + dependencies: + is-plain-obj: 2.1.0 + spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 @@ -7080,6 +7815,10 @@ snapshots: spdx-license-ids@3.0.17: {} + split2@3.2.2: + dependencies: + readable-stream: 3.6.2 + stale-dep@0.7.0: dependencies: cac: 6.7.14 @@ -7159,6 +7898,10 @@ snapshots: strip-bom@3.0.0: {} + strip-bom@4.0.0: {} + + strip-comments-strings@1.2.0: {} + strip-final-newline@2.0.0: {} strip-final-newline@3.0.0: {} @@ -7226,6 +7969,10 @@ snapshots: text-table@0.2.0: {} + through2@4.0.2: + dependencies: + readable-stream: 3.6.2 + titleize@3.0.0: {} tmp@0.2.3: {} @@ -7335,6 +8082,10 @@ snapshots: unicorn-magic@0.1.0: {} + unique-string@2.0.0: + dependencies: + crypto-random-string: 2.0.0 + unist-util-stringify-position@2.0.3: dependencies: '@types/unist': 2.0.10 @@ -7370,6 +8121,8 @@ snapshots: validate-npm-package-name@5.0.1: {} + walk-up-path@3.0.1: {} + which-boxed-primitive@1.0.2: dependencies: is-bigint: 1.0.4 @@ -7390,6 +8143,10 @@ snapshots: dependencies: isexe: 2.0.0 + which@4.0.0: + dependencies: + isexe: 3.1.1 + widest-line@4.0.1: dependencies: string-width: 5.1.2 @@ -7421,6 +8178,11 @@ snapshots: imurmurhash: 0.1.4 signal-exit: 4.1.0 + write-yaml-file@5.0.0: + dependencies: + js-yaml: 4.1.0 + write-file-atomic: 5.0.1 + xml2js@0.5.0: dependencies: sax: 1.3.0 diff --git a/scripts/fetch-npmrc.ts b/scripts/fetch-npmrc.ts new file mode 100644 index 0000000..6e669c7 --- /dev/null +++ b/scripts/fetch-npmrc.ts @@ -0,0 +1,52 @@ +import fs from 'fs'; +import { resolve } from 'path'; +import process from 'process'; + +import * as cheerio from 'cheerio'; + +const npmNpmrcWebsite = 'https://docs.npmjs.com/cli/v10/using-npm/config'; +const pnpmNpmrcWebsite = 'https://pnpm.io/npmrc'; + +async function fetchNpmrc() { + const options = new Set(); + + async function handleNpmNpmrc() { + const response = await fetch(npmNpmrcWebsite); + const text = await response.text(); + const $ = cheerio.load(text); + // get all links + const links = $('a'); + links.each((_, link) => { + const href = $(link).attr('href'); + const text = $(link).text(); + if (href?.startsWith('#') && !text.includes(' ')) { + options.add(href.slice(1)); + } + }); + } + + async function handlePnpmNpmrc() { + const response = await fetch(pnpmNpmrcWebsite); + const text = await response.text(); + const $ = cheerio.load(text); + // get all links like: + // Dependency Hoisting Settings + const links = $('a.table-of-contents__link.toc-highlight'); + links.each((_, link) => { + const href = $(link).attr('href'); + const text = $(link).text(); + if (href?.startsWith('/npmrc#') && !text.includes(' ')) { + options.add(href.slice('/npmrc#'.length)); + } + }); + } + + await Promise.all([handleNpmNpmrc(), handlePnpmNpmrc()]); + fs.writeFileSync( + resolve(process.cwd(), 'src/completion/npmrc/options.ts'), + `export const options = new Set([\n${[...options].map((option) => ` '${option}',`).join('\n')}\n]);`, + ); + return options; +} + +fetchNpmrc(); diff --git a/src/completion/npmrc/index.ts b/src/completion/npmrc/index.ts new file mode 100644 index 0000000..9f6c571 --- /dev/null +++ b/src/completion/npmrc/index.ts @@ -0,0 +1,129 @@ +import { types } from 'util'; + +import type { CompletionItemProvider } from 'vscode'; +import vscode from 'vscode'; + +import { options } from './options'; +import { registryList } from './registryList'; + +export class NpmrcCompletionItemProvider implements CompletionItemProvider { + private async getAvailableValues(key: string): Promise { + const [definitions, types] = await Promise.all([ + import('@npmcli/config/lib/definitions').then((mod) => mod.definitions), + import('@pnpm/config').then((mod) => mod.types), + ]); + + if (key === 'registry') { + return { + items: registryList.map((item) => { + return new vscode.CompletionItem( + item.registry, + vscode.CompletionItemKind.Value, + ); + }), + }; + } + + const availableValues = types[key as keyof typeof types] ?? definitions[key]?.type; + if (availableValues) { + const isBoolean = + typeof availableValues === 'function' && availableValues.name === 'Boolean'; + + if (isBoolean) { + return { + items: [ + new vscode.CompletionItem('true', vscode.CompletionItemKind.Value), + new vscode.CompletionItem('false', vscode.CompletionItemKind.Value), + ], + }; + } + + const values = Array.isArray(availableValues) ? availableValues : [availableValues]; + const items = values + .filter((value) => typeof value === 'string') + .map((value) => { + const item = new vscode.CompletionItem(value, vscode.CompletionItemKind.Value); + item.insertText = value; + return item; + }); + return { items }; + } + + return; + } + + async provideCompletionItems( + document: vscode.TextDocument, + position: vscode.Position, + _token: vscode.CancellationToken, + _context: vscode.CompletionContext, + ): Promise { + const char = position.character; + const lineBefore = document.lineAt(position).text.slice(0, char); + + if (lineBefore.endsWith('=')) { + const key = lineBefore.slice(0, -1); + if (!options.has(key)) { + return; + } + + return this.getAvailableValues(key); + } + + return { + items: Array.from(options).map( + (key) => new vscode.CompletionItem(key, vscode.CompletionItemKind.Property), + ), + }; + } + + async resolveCompletionItem?( + item: vscode.CompletionItem, + _token: vscode.CancellationToken, + ): Promise { + if (item.kind !== vscode.CompletionItemKind.Property) { + return item; + } + + const key = item.label as string; + const definitions = await import('@npmcli/config/lib/definitions').then( + (mod) => mod.definitions, + ); + const type = types[key as keyof typeof types] ?? definitions[key]?.type; + const availableValueTypes = type + ? (Array.isArray(type) ? type : [type]) + .map((value) => + typeof value === 'string' + ? value + : typeof value === 'function' + ? value.name + : String(value), + ) + .filter((value) => value !== '[object Object]') + : []; + const availableValueTypesString = + availableValueTypes.length > 0 ? `\n\nType: ${availableValueTypes.join(' | ')}` : ''; + const description = definitions[key]?.description; + if (description) { + item.documentation = new vscode.MarkdownString( + description + .replaceAll('\\`', '`') + .split('\n') + .map((line: string) => line.trim()) + .join('\n') + .concat( + `\n\n[npm .npmrc documentation](https://docs.npmjs.com/cli/v10/using-npm/config#${key})`, + ) + .concat(availableValueTypesString), + ); + } else { + item.documentation = new vscode.MarkdownString( + `[pnpm .npmrc documentation](https://pnpm.io/npmrc#${key})`.concat( + availableValueTypesString, + ), + ); + } + item.insertText = `${key}=`; + return item; + } +} diff --git a/src/completion/npmrc/options.ts b/src/completion/npmrc/options.ts new file mode 100644 index 0000000..5ceac1a --- /dev/null +++ b/src/completion/npmrc/options.ts @@ -0,0 +1,227 @@ +export const options = new Set([ + 'hoist', + 'hoist-workspace-packages', + 'hoist-pattern', + 'public-hoist-pattern', + 'shamefully-hoist', + 'modules-dir', + 'node-linker', + 'symlink', + 'enable-modules-dir', + 'virtual-store-dir', + 'virtual-store-dir-max-length', + 'package-import-method', + 'modules-cache-max-age', + 'dlx-cache-max-age', + 'store-dir', + 'verify-store-integrity', + 'use-running-store-server', + 'strict-store-pkg-content-check', + 'lockfile', + 'prefer-frozen-lockfile', + 'lockfile-include-tarball-url', + 'git-branch-lockfile', + 'merge-git-branch-lockfiles-branch-pattern', + 'peers-suffix-max-length', + 'registry', + 'url_authtoken', + 'urltokenhelper', + 'ca', + 'cafile', + 'urlcafile', + 'cert', + 'urlcertfile', + 'key', + 'urlkeyfile', + 'git-shallow-hosts', + 'https-proxy', + 'http-proxy', + 'proxy', + 'local-address', + 'maxsockets', + 'noproxy', + 'strict-ssl', + 'network-concurrency', + 'fetch-retries', + 'fetch-retry-factor', + 'fetch-retry-mintimeout', + 'fetch-retry-maxtimeout', + 'fetch-timeout', + 'auto-install-peers', + 'dedupe-peer-dependents', + 'strict-peer-dependencies', + 'resolve-peers-from-workspace-root', + 'no-color', + 'loglevel', + 'use-beta-cli', + 'recursive-install', + 'engine-strict', + 'npm-path', + 'ignore-scripts', + 'ignore-dep-scripts', + 'child-concurrency', + 'side-effects-cache', + 'side-effects-cache-readonly', + 'unsafe-perm', + 'node-options', + 'use-node-version', + 'node-version', + 'node-mirrorreleasedir', + 'link-workspace-packages', + 'prefer-workspace-packages', + 'shared-workspace-lockfile', + 'save-workspace-protocol', + 'include-workspace-root', + 'ignore-workspace-cycles', + 'disallow-workspace-cycles', + 'save-prefix', + 'tag', + 'global-dir', + 'global-bin-dir', + 'state-dir', + 'cache-dir', + 'use-stderr', + 'update-notifier', + 'prefer-symlinked-executables', + 'ignore-compatibility-db', + 'resolution-mode', + 'registry-supports-time-field', + 'extend-node-path', + 'deploy-all-files', + 'dedupe-direct-deps', + 'dedupe-injected-deps', + 'package-manager-strict', + 'package-manager-strict-version', + 'description', + '_auth', + 'access', + 'all', + 'allow-same-version', + 'audit', + 'audit-level', + 'auth-type', + 'before', + 'bin-links', + 'browser', + 'cache', + 'call', + 'cidr', + 'color', + 'commit-hooks', + 'cpu', + 'depth', + 'description-1', + 'diff', + 'diff-dst-prefix', + 'diff-ignore-all-space', + 'diff-name-only', + 'diff-no-prefix', + 'diff-src-prefix', + 'diff-text', + 'diff-unified', + 'dry-run', + 'editor', + 'expect-result-count', + 'expect-results', + 'force', + 'foreground-scripts', + 'format-package-lock', + 'fund', + 'git', + 'git-tag-version', + 'global', + 'globalconfig', + 'heading', + 'if-present', + 'include', + 'include-staged', + 'init-author-email', + 'init-author-name', + 'init-author-url', + 'init-license', + 'init-module', + 'init-version', + 'install-links', + 'install-strategy', + 'json', + 'legacy-peer-deps', + 'libc', + 'link', + 'location', + 'lockfile-version', + 'logs-dir', + 'logs-max', + 'long', + 'message', + 'offline', + 'omit', + 'omit-lockfile-registry-resolved', + 'os', + 'otp', + 'pack-destination', + 'package', + 'package-lock', + 'package-lock-only', + 'parseable', + 'prefer-dedupe', + 'prefer-offline', + 'prefer-online', + 'prefix', + 'preid', + 'progress', + 'provenance', + 'provenance-file', + 'read-only', + 'rebuild-bundle', + 'replace-registry-host', + 'save', + 'save-bundle', + 'save-dev', + 'save-exact', + 'save-optional', + 'save-peer', + 'save-prod', + 'sbom-format', + 'sbom-type', + 'scope', + 'script-shell', + 'searchexclude', + 'searchlimit', + 'searchopts', + 'searchstaleness', + 'shell', + 'sign-git-commit', + 'sign-git-tag', + 'strict-peer-deps', + 'tag-version-prefix', + 'timing', + 'umask', + 'unicode', + 'usage', + 'user-agent', + 'userconfig', + 'version', + 'versions', + 'viewer', + 'which', + 'workspace', + 'workspaces', + 'workspaces-update', + 'yes', + 'also', + 'cache-max', + 'cache-min', + 'dev', + 'global-style', + 'initauthoremail', + 'initauthorname', + 'initauthorurl', + 'initlicense', + 'initmodule', + 'initversion', + 'legacy-bundling', + 'only', + 'optional', + 'production', + 'shrinkwrap', +]); diff --git a/src/completion/npmrc/registryList.ts b/src/completion/npmrc/registryList.ts new file mode 100644 index 0000000..1c22d3e --- /dev/null +++ b/src/completion/npmrc/registryList.ts @@ -0,0 +1,45 @@ +// copy from https://github.com/wangrongding/prm-cli/blob/main/src/registryList.ts +export const registryList = [ + // put taobao top + { + name: 'taobao', + home: 'https://npmmirror.com', + registry: 'https://registry.npmmirror.com/', + }, + { + name: 'npm', + home: 'https://www.npmjs.org', + registry: 'https://registry.npmjs.org/', + }, + { + name: 'yarn', + home: 'https://yarnpkg.com', + registry: 'https://registry.yarnpkg.com', + }, + { + name: 'cnpm', + home: 'http://cnpmjs.org', + registry: 'http://r.cnpmjs.org/', + }, + { + name: 'nj', + home: 'https://www.nodejitsu.com', + registry: 'https://registry.nodejitsu.com/', + }, + { + name: 'rednpm', + home: 'http://npm.mirror.cqupt.edu.cn/', + registry: 'http://registry.mirror.cqupt.edu.cn/', + }, + + { + name: 'npmMirror', + home: 'https://skimdb.npmjs.com/', + registry: 'https://skimdb.npmjs.com/registry/', + }, + { + name: 'edunpm', + home: 'http://www.enpmjs.org', + registry: 'http://registry.enpmjs.org/', + }, +]; diff --git a/src/diagnostic/index.ts b/src/diagnostic/index.ts index 15cf16f..60c2a70 100644 --- a/src/diagnostic/index.ts +++ b/src/diagnostic/index.ts @@ -2,6 +2,7 @@ import path from 'path'; import type { ParsedJson } from 'jsonpos'; import semver from 'semver'; +import type { CodeActionProvider } from 'vscode'; import vscode from 'vscode'; import { configuration } from '../configuration'; @@ -109,8 +110,13 @@ export async function updateDiagnostic(document: vscode.TextDocument) { } } -export const codeActionProvider: vscode.CodeActionProvider = { - provideCodeActions: async (document) => { +export class DepsCheckCodeActionProvider implements CodeActionProvider { + async provideCodeActions( + document: vscode.TextDocument, + _range: vscode.Range | vscode.Selection, + _context: vscode.CodeActionContext, + _token: vscode.CancellationToken, + ): Promise { const diagnostics = vscode.languages .getDiagnostics(document.uri) .filter( @@ -135,5 +141,5 @@ export const codeActionProvider: vscode.CodeActionProvider = { }; action.diagnostics = diagnostics; return [action]; - }, -}; + } +} diff --git a/src/extension.ts b/src/extension.ts index 8e6d308..2c017ae 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -2,7 +2,7 @@ import { watchFile } from 'fs'; import fs from 'fs/promises'; import path from 'path'; -import type { DocumentSelector, TextEditor } from 'vscode'; +import type { TextEditor } from 'vscode'; import vscode from 'vscode'; import { NodeVersionCodeLensProvider } from './codeLens/nodeVersion'; @@ -10,15 +10,16 @@ import { PackageJsonDependenciesCodeLensProvider } from './codeLens/packageJsonD import { PackageJsonFilesCodeLensProvider } from './codeLens/packageJsonFiles'; import { PackageJsonVersionCodeLensProvider } from './codeLens/packageJsonVersion'; import { PnpmWorkspaceCodeLensProvider } from './codeLens/pnpmWorkspace'; +import { NpmrcCompletionItemProvider } from './completion/npmrc'; import { updateConfiguration } from './configuration'; import { DependenciesDefinitionProvider } from './definitions/dependencies'; -import { codeActionProvider, diagnosticCollection, updateDiagnostic } from './diagnostic'; +import { DepsCheckCodeActionProvider, diagnosticCollection, updateDiagnostic } from './diagnostic'; import { DependenciesHoverProvider } from './hoverTooltips/dependencies'; import { ModulesHoverProvider } from './hoverTooltips/modules'; import { NpmScriptsHoverProvider } from './hoverTooltips/npmScripts'; import { logger } from './logger'; import type { Command } from './utils/constants'; -import { commands, EXT_NAME } from './utils/constants'; +import { commands, EXT_NAME, npmrcSelector, pkgJsonSelector } from './utils/constants'; import { pathExists } from './utils/fs'; import { store } from './utils/store'; @@ -115,12 +116,6 @@ export function activate(context: vscode.ExtensionContext) { import('./commands/findPathInNodeModules').then((mod) => mod.findPathInNodeModules(uri)), ); - const pkgJsonSelector: DocumentSelector = { - language: 'json', - scheme: 'file', - pattern: '**/package.json', - }; - subscriptions.push( vscode.languages.registerCodeLensProvider( { @@ -170,6 +165,10 @@ export function activate(context: vscode.ExtensionContext) { pkgJsonSelector, new DependenciesDefinitionProvider(), ), + vscode.languages.registerCompletionItemProvider( + npmrcSelector, + new NpmrcCompletionItemProvider(), + ), ); for (const editor of vscode.window.visibleTextEditors) { @@ -183,9 +182,13 @@ export function activate(context: vscode.ExtensionContext) { vscode.workspace.onDidChangeTextDocument((event) => { updateDiagnostic(event.document); }), - vscode.languages.registerCodeActionsProvider(pkgJsonSelector, codeActionProvider, { - providedCodeActionKinds: [vscode.CodeActionKind.QuickFix], - }), + vscode.languages.registerCodeActionsProvider( + pkgJsonSelector, + new DepsCheckCodeActionProvider(), + { + providedCodeActionKinds: [vscode.CodeActionKind.QuickFix], + }, + ), ); const filesToWatch = ['pnpm-lock.yaml', 'package-lock.json', 'yarn.lock', 'bun.lockb'].map( diff --git a/src/typings/module.d.ts b/src/typings/module.d.ts new file mode 100644 index 0000000..824e4e4 --- /dev/null +++ b/src/typings/module.d.ts @@ -0,0 +1,3 @@ +declare module '@npmcli/config/lib/definitions' { + export const definitions: Record; +} diff --git a/src/utils/constants.ts b/src/utils/constants.ts index df59279..d7a2429 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -1,3 +1,5 @@ +import type vscode from 'vscode'; + export const EXT_NAME = 'package-manager-enhancer'; const commandsArray = [ 'removeUnusedDependency', @@ -28,3 +30,15 @@ export const commands = commandsArray.reduce((acc, item) => { export const NODE_MODULES = 'node_modules'; export const PACKAGE_JSON = 'package.json'; + +export const pkgJsonSelector: vscode.DocumentSelector = { + language: 'json', + scheme: 'file', + pattern: '**/package.json', +}; + +export const npmrcSelector: vscode.DocumentSelector = { + language: 'properties', + scheme: 'file', + pattern: '**/.npmrc', +}; diff --git a/test-workspace/.npmrc b/test-workspace/.npmrc new file mode 100644 index 0000000..1fac248 --- /dev/null +++ b/test-workspace/.npmrc @@ -0,0 +1,2 @@ +audit=false +registry= \ No newline at end of file