From 11272924dc022697a812178a4867a1c21df90d94 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jun 2022 10:29:56 -0700 Subject: [PATCH 01/18] chore: Bump react-dom from 18.1.0 to 18.2.0 (#5206) Bumps [react-dom](https://github.com/facebook/react/tree/HEAD/packages/react-dom) from 18.1.0 to 18.2.0. - [Release notes](https://github.com/facebook/react/releases) - [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/react/commits/v18.2.0/packages/react-dom) --- updated-dependencies: - dependency-name: react-dom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index 47b62ee736e9..72f200e80e56 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11995,12 +11995,12 @@ react-dev-utils@^12.0.1: text-table "^0.2.0" react-dom@^18.1.0: - version "18.1.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.1.0.tgz#7f6dd84b706408adde05e1df575b3a024d7e8a2f" - integrity sha512-fU1Txz7Budmvamp7bshe4Zi32d0ll7ect+ccxNu9FlObT605GOEB8BfO4tmRJ39R5Zj831VCpvQ05QPBW5yb+w== + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== dependencies: loose-envify "^1.1.0" - scheduler "^0.22.0" + scheduler "^0.23.0" react-error-overlay@^6.0.11: version "6.0.11" @@ -12672,10 +12672,10 @@ sax@^1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -scheduler@^0.22.0: - version "0.22.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.22.0.tgz#83a5d63594edf074add9a7198b1bae76c3db01b8" - integrity sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ== +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== dependencies: loose-envify "^1.1.0" From 669a56ff1e7688afb9159eb855687530350b4190 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jun 2022 10:30:13 -0700 Subject: [PATCH 02/18] chore: Bump lerna from 5.1.2 to 5.1.4 (#5207) Bumps [lerna](https://github.com/lerna/lerna/tree/HEAD/core/lerna) from 5.1.2 to 5.1.4. - [Release notes](https://github.com/lerna/lerna/releases) - [Changelog](https://github.com/lerna/lerna/blob/main/core/lerna/CHANGELOG.md) - [Commits](https://github.com/lerna/lerna/commits/v5.1.4/core/lerna) --- updated-dependencies: - dependency-name: lerna dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 822 +++++++++++++++++++++++++-------------------------- 2 files changed, 412 insertions(+), 412 deletions(-) diff --git a/package.json b/package.json index 4155bb39cb7f..45c418d1b491 100644 --- a/package.json +++ b/package.json @@ -91,7 +91,7 @@ "jest-diff": "^28.1.0", "jest-snapshot": "^28.1.0", "jest-specific-snapshot": "^5.0.0", - "lerna": "5.1.2", + "lerna": "5.1.4", "lint-staged": "^13.0.0", "make-dir": "^3.1.0", "markdownlint-cli": "^0.31.1", diff --git a/yarn.lock b/yarn.lock index 72f200e80e56..350d26d5c1c6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2213,39 +2213,39 @@ resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== -"@lerna/add@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/add/-/add-5.1.2.tgz#062b9b435ebada410f32d05eca092f4d14ca0dc2" - integrity sha512-8WT+HylIQFTz/6kzdKMn49sWYX5n2SXYmsOsakSkc5OJk49X29W9wzEl89uCjO1fhz/jVK8+wcFhfnRPxen1cg== - dependencies: - "@lerna/bootstrap" "5.1.2" - "@lerna/command" "5.1.2" - "@lerna/filter-options" "5.1.2" - "@lerna/npm-conf" "5.1.1" - "@lerna/validation-error" "5.1.2" +"@lerna/add@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/add/-/add-5.1.4.tgz#ddd21385b0a2f427b1bf1dd193e7e56f77bb3544" + integrity sha512-kysQaV0+6aFtT0rkbaeuP6qb0vYDwo7TiC+Og4STyXxv2mHXi3F8r6Z9xXNUn8LPi29gaCmB8DLmbEGlTBM4xg== + dependencies: + "@lerna/bootstrap" "5.1.4" + "@lerna/command" "5.1.4" + "@lerna/filter-options" "5.1.4" + "@lerna/npm-conf" "5.1.4" + "@lerna/validation-error" "5.1.4" dedent "^0.7.0" npm-package-arg "^8.1.0" p-map "^4.0.0" pacote "^13.4.1" semver "^7.3.4" -"@lerna/bootstrap@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-5.1.2.tgz#917679f719b94ff08f52def8fc0f96956fa97bfc" - integrity sha512-fUCLyhQ5zj8Dd82RVliz3CW+BaszQFrcpuOE0KL5SEqDhwY6Fm79CFS9Ls/OqF2tB6C8eWHj7kAc4lnXT1JIng== - dependencies: - "@lerna/command" "5.1.2" - "@lerna/filter-options" "5.1.2" - "@lerna/has-npm-version" "5.1.1" - "@lerna/npm-install" "5.1.2" - "@lerna/package-graph" "5.1.2" - "@lerna/pulse-till-done" "5.1.2" - "@lerna/rimraf-dir" "5.1.2" - "@lerna/run-lifecycle" "5.1.2" - "@lerna/run-topologically" "5.1.2" - "@lerna/symlink-binary" "5.1.2" - "@lerna/symlink-dependencies" "5.1.2" - "@lerna/validation-error" "5.1.2" +"@lerna/bootstrap@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-5.1.4.tgz#da60d4d329884d9153b536390aeb10c944e004a4" + integrity sha512-uCP0WdxGCGAGkwcuhv2nLqLByq9WJ5yr+93A8T15xZJfQsXLtYjjlivIe35MjS77eR+krwl5uY6WmGPJ33+afg== + dependencies: + "@lerna/command" "5.1.4" + "@lerna/filter-options" "5.1.4" + "@lerna/has-npm-version" "5.1.4" + "@lerna/npm-install" "5.1.4" + "@lerna/package-graph" "5.1.4" + "@lerna/pulse-till-done" "5.1.4" + "@lerna/rimraf-dir" "5.1.4" + "@lerna/run-lifecycle" "5.1.4" + "@lerna/run-topologically" "5.1.4" + "@lerna/symlink-binary" "5.1.4" + "@lerna/symlink-dependencies" "5.1.4" + "@lerna/validation-error" "5.1.4" "@npmcli/arborist" "5.2.0" dedent "^0.7.0" get-port "^5.1.1" @@ -2257,100 +2257,100 @@ p-waterfall "^2.1.1" semver "^7.3.4" -"@lerna/changed@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-5.1.2.tgz#60e6265b2602c02316fe478e48f1cf09352e6efb" - integrity sha512-A9M32fQ9DHQfwu8i7iiCXKS1YE3UEgNnB9qNHqwsI+qyV8gU8ylzsBegL8eSjFsXrjTvHRFML99FAk7QnuOWqg== +"@lerna/changed@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-5.1.4.tgz#00e660f991f0d76104a467dbebea1c232c0ef647" + integrity sha512-XwA3+pw5keO2CyjobLN8dU7mvGbzB3FD+LtLPI/zk7UbNIbl7V6uaIkoPJIdTWwP1e6S1BnGCVsAMtwQ980gTA== dependencies: - "@lerna/collect-updates" "5.1.2" - "@lerna/command" "5.1.2" - "@lerna/listable" "5.1.2" - "@lerna/output" "5.1.2" + "@lerna/collect-updates" "5.1.4" + "@lerna/command" "5.1.4" + "@lerna/listable" "5.1.4" + "@lerna/output" "5.1.4" -"@lerna/check-working-tree@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-5.1.2.tgz#8605315a407494dc22d93e1e42f4376acc797d6c" - integrity sha512-9O5ciNuym0Ne56i0BCcI/YyGt6PTsYfoFWIUhugSPywNZLBGJxq9lq2DQWnQe1ACa1JvRfC2T6BpdaLiTXYL3Q== +"@lerna/check-working-tree@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-5.1.4.tgz#d875eaedcf370603e7c73665ded28783ae01dcb5" + integrity sha512-yFkRmZd25viwxyyOHZd3g7k2Od2Mk0Sf15fol3h/a7P0rUMf6UaMoGo2qlyo+DS51sz+eNalMmFKLpRrDXcSSw== dependencies: - "@lerna/collect-uncommitted" "5.1.2" - "@lerna/describe-ref" "5.1.2" - "@lerna/validation-error" "5.1.2" + "@lerna/collect-uncommitted" "5.1.4" + "@lerna/describe-ref" "5.1.4" + "@lerna/validation-error" "5.1.4" -"@lerna/child-process@5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-5.1.1.tgz#a22764ab030fb0121f244f14e7c5ed62d5163fc1" - integrity sha512-hPBDbqZws2d3GehCuYZ0vZwd/SRthwDIPWGkd74xevdoLxka3Y/y5IdogZz3V9cc6p6bdP6ZHbBSumEX+VIhxA== +"@lerna/child-process@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-5.1.4.tgz#164322198c27698fde9d913da120afa6501e390e" + integrity sha512-F7xP+bEdkE3JTyKz0t33QA5v2meXZrQQ0JmHa7/AlEg6D2r7gQ8UHSHuSUiNfX4drjpePe/9XaZylj01KLcx/w== dependencies: chalk "^4.1.0" execa "^5.0.0" strong-log-transformer "^2.1.0" -"@lerna/clean@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-5.1.2.tgz#1a4ac1f8d8d203b1246652e5ca316e07ceed26f4" - integrity sha512-3YTQDQIOSuSVAaE1R8rXDvz/+hpEv1FuaXLZ7+g7JUTJAP6ZH5JF9+hei/yPSO5tl8+F09SR6p5DoBxrZ0I6UA== - dependencies: - "@lerna/command" "5.1.2" - "@lerna/filter-options" "5.1.2" - "@lerna/prompt" "5.1.2" - "@lerna/pulse-till-done" "5.1.2" - "@lerna/rimraf-dir" "5.1.2" +"@lerna/clean@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-5.1.4.tgz#293d3669aed70d541a5e16c372144ef0e5ea3bfd" + integrity sha512-4Du/r8iYSYFpo1t5J1BYivmj84n9mGebt89isVsyqMmrCqd5B2ix/Z8PYPQFMwm7k9YYbV+sZGSpRvtXkn8kIw== + dependencies: + "@lerna/command" "5.1.4" + "@lerna/filter-options" "5.1.4" + "@lerna/prompt" "5.1.4" + "@lerna/pulse-till-done" "5.1.4" + "@lerna/rimraf-dir" "5.1.4" p-map "^4.0.0" p-map-series "^2.1.0" p-waterfall "^2.1.1" -"@lerna/cli@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-5.1.2.tgz#6338515a6ff80f657e4c6e93da987d64c1c66bc5" - integrity sha512-Jmm4q/1UDf8PFao5uPemdTHvRWbsLps2zbvqXg+GffRKZsDEzyB9sQjf1Ul7BXN4/7kRsuQW/dBEXdH1D9EaAQ== +"@lerna/cli@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-5.1.4.tgz#8cf9ba07c8d0d072d5aa61e55d4d3a16ab181d79" + integrity sha512-ckLSNJBY4iVmu6nBhHb8UchpWGm49z9pjsAEJQ4F/VNkT6zKsmOCfv2ahkvudQ77gc0K/dH+MTvoOHsH85bpow== dependencies: - "@lerna/global-options" "5.1.1" + "@lerna/global-options" "5.1.4" dedent "^0.7.0" npmlog "^6.0.2" yargs "^16.2.0" -"@lerna/collect-uncommitted@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/collect-uncommitted/-/collect-uncommitted-5.1.2.tgz#3f0434714d400eb207577f7827e84db6ca5a694a" - integrity sha512-M4hyWRRppqU+99tRVz8eYHec2sVt5+CgKnrjf9AGARZZAX7I3oSX7JWCMSz73y6vIrq4moP4tZXvrJUqBpodkA== +"@lerna/collect-uncommitted@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/collect-uncommitted/-/collect-uncommitted-5.1.4.tgz#19ddf64bdb9a630ed4a651b364efeee32416e307" + integrity sha512-CI9PXYQuewqA4ZBMRycDUSVRJmAxUeP8HEZ3aKNvAwlLxLlGCueh8qOHXZHxgkmF6eQtcEjblsReiDt8bFJZpA== dependencies: - "@lerna/child-process" "5.1.1" + "@lerna/child-process" "5.1.4" chalk "^4.1.0" npmlog "^6.0.2" -"@lerna/collect-updates@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-5.1.2.tgz#0a9f7b5effa033dc60ef3d3ca72abb65542f3f99" - integrity sha512-UtwXYSm+x35G1JzixFIupJPMaCXVFPvSV1Kx+OKU42+ykWIyW4rb+/4OOqUNJfY9dxjjgUv1K275GKOl1W+VpQ== +"@lerna/collect-updates@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-5.1.4.tgz#c03aef26c6b28d55a693b47b60fa3f4bebbee6cf" + integrity sha512-P1zlaZ0QkKIjbU3o7hjd4zcxzti1ndS4+eQNmlxZP3IcmlJ4+Ne+VxGeaACsjzPPBqSBWX1xcyMFLALH/Jo2CA== dependencies: - "@lerna/child-process" "5.1.1" - "@lerna/describe-ref" "5.1.2" + "@lerna/child-process" "5.1.4" + "@lerna/describe-ref" "5.1.4" minimatch "^3.0.4" npmlog "^6.0.2" slash "^3.0.0" -"@lerna/command@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/command/-/command-5.1.2.tgz#46358789014ed177a21735f8f5033ade42ad65a0" - integrity sha512-AsIAXo5zked/A12jgQTW3p25Uv1RpxsxArdTPGeBUqNgiIkKc413Dy+gYymfLhpcaWqzaTCr2CrinBYlbRVzlQ== - dependencies: - "@lerna/child-process" "5.1.1" - "@lerna/package-graph" "5.1.2" - "@lerna/project" "5.1.2" - "@lerna/validation-error" "5.1.2" - "@lerna/write-log-file" "5.1.2" +"@lerna/command@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/command/-/command-5.1.4.tgz#c8f4b7f4700a6718310bea48e7ad2454e4659a80" + integrity sha512-S/3oIagN9/ntuGtljSxHu4liB9e9YFWsq/xZOR8YoqROJENv5G5zyAmHjXq90AR/tGmLvufzFliBfEIG9CywFA== + dependencies: + "@lerna/child-process" "5.1.4" + "@lerna/package-graph" "5.1.4" + "@lerna/project" "5.1.4" + "@lerna/validation-error" "5.1.4" + "@lerna/write-log-file" "5.1.4" clone-deep "^4.0.1" dedent "^0.7.0" execa "^5.0.0" is-ci "^2.0.0" npmlog "^6.0.2" -"@lerna/conventional-commits@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-5.1.2.tgz#ed7d0fee56666e5cfdd7e63ddd52d18253a1069d" - integrity sha512-lpgRRFnO+HCzABXGx0dJwXknAfgUJXILUBSmjjsp7SQVaPjBE5QCyenbt5YoAv+ZJwt0M2eyXym09n5yn4UGFg== +"@lerna/conventional-commits@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-5.1.4.tgz#9aa42c32fd7b306dfb4d838e18e02261635a496f" + integrity sha512-0v0exYOH9cJTNpKggqAw7vHVLlPjqO6Y20PUg44F3GOEjd54VIGDqu+MkVhflqvUftzZjmcUHDUGHVP+8dFBNw== dependencies: - "@lerna/validation-error" "5.1.2" + "@lerna/validation-error" "5.1.4" conventional-changelog-angular "^5.0.12" conventional-changelog-core "^4.2.2" conventional-recommended-bump "^6.1.0" @@ -2361,24 +2361,24 @@ pify "^5.0.0" semver "^7.3.4" -"@lerna/create-symlink@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-5.1.2.tgz#0bb7a68c129ff2ecd1ca54be96cf9fa06a0dcb82" - integrity sha512-79zXfJPflksp9lEiBETaSKZ8TO9Posso2l2T3ZCFNIrsuccJLtE1Hvz4p9RsG/Y4CuDg0M1fJEHXSOulfS0qRw== +"@lerna/create-symlink@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-5.1.4.tgz#dc5f45f4e5192850eea920982c2f4e1808b899c5" + integrity sha512-VTTuCgM5gXk0frAFxfVQqfX9QxXKz6TKpKsHcC39BAR3aiSUW8vqRImbLvaFtKpnEMW0HshDfuzp6rRkaiyWYw== dependencies: cmd-shim "^4.1.0" fs-extra "^9.1.0" npmlog "^6.0.2" -"@lerna/create@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/create/-/create-5.1.2.tgz#13d26405609a0511be1a5ced0be52c08a12f4b59" - integrity sha512-ArS7doT38H/4vageWjIGzRzqPZJaSJrtDV6eh9vHpwSLHueLIJSK2glwMSeGeqdknSyuEVQY1j2HJbnZ+0Sbvw== +"@lerna/create@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/create/-/create-5.1.4.tgz#2829ff28c5e2b7060ee9e260868a8bf70f9d603e" + integrity sha512-UPR5EnFg0WzXiRIKl+MGHH3hBB6s1xkLDJNLGzac5Ztry/ibLDhl47wYoYcToiQ3/y3/3751WLJErF+A52mCyw== dependencies: - "@lerna/child-process" "5.1.1" - "@lerna/command" "5.1.2" - "@lerna/npm-conf" "5.1.1" - "@lerna/validation-error" "5.1.2" + "@lerna/child-process" "5.1.4" + "@lerna/command" "5.1.4" + "@lerna/npm-conf" "5.1.4" + "@lerna/validation-error" "5.1.4" dedent "^0.7.0" fs-extra "^9.1.0" globby "^11.0.2" @@ -2394,217 +2394,217 @@ whatwg-url "^8.4.0" yargs-parser "20.2.4" -"@lerna/describe-ref@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-5.1.2.tgz#5702e9cda4dc777d7ea045a988353d9ff71738e2" - integrity sha512-6wO30uxx6akIbx7CXjE13TWhnwK0ziZCXdR4nQSJSMXIZIW75jR/DwiPJ0hZ8bveBp0wiCJnDuHNIsvGAj6sYw== +"@lerna/describe-ref@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-5.1.4.tgz#352da8757946ca1529a2655688323c9838a8e1ad" + integrity sha512-ztLWLIyrHPxVhs8yfVpCDIw2st5c246KfoTqjEX8N6s8v0dLs3vfCKCM70ej6lBNkwqBXSilgHrd3AkGq3kq6Q== dependencies: - "@lerna/child-process" "5.1.1" + "@lerna/child-process" "5.1.4" npmlog "^6.0.2" -"@lerna/diff@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-5.1.2.tgz#b0d29461c4bc82d8cf3644843e3ae72ac032bae5" - integrity sha512-+GqXr+RVMkzyID6XV+S2/DS8nkfFavt6M9BL7FgGZOC/27JEuZV/0CJETqR3EwmlhVJtQOQgn0p0QZmuC6YY1g== +"@lerna/diff@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-5.1.4.tgz#43a3c39b84c3148a89dcee5a3b7434909c5e601a" + integrity sha512-o5chvMHcKQS4zkdGX7LCaMgNn0flrG9OEiGt8DCIzRUa6aWJAlE2oZyOj+VsiUxzaZJxm2oV+GkISQYRJPlPug== dependencies: - "@lerna/child-process" "5.1.1" - "@lerna/command" "5.1.2" - "@lerna/validation-error" "5.1.2" + "@lerna/child-process" "5.1.4" + "@lerna/command" "5.1.4" + "@lerna/validation-error" "5.1.4" npmlog "^6.0.2" -"@lerna/exec@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-5.1.2.tgz#357763ed5ab1b715729505ce4de9f556949f4b33" - integrity sha512-iNh894U+ZWLSNNDLAw8OpCltZQKO9WRjIxs+jUQQucux8xr1edYIOHEHf8eA/ouQLrROhU3EbWEot4OJ3Iyqqg== - dependencies: - "@lerna/child-process" "5.1.1" - "@lerna/command" "5.1.2" - "@lerna/filter-options" "5.1.2" - "@lerna/profiler" "5.1.2" - "@lerna/run-topologically" "5.1.2" - "@lerna/validation-error" "5.1.2" +"@lerna/exec@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-5.1.4.tgz#b1b35c65593429dcc822fcbc72153d3cf3adf0b9" + integrity sha512-6vn1UCxJZTTt90WlWItI05yj4xaNOShgIl5Yi9mx1Ex6nVS32mmTOqHI/+Cn4M+P0C4u1hFymd2aIEfWnmdUsA== + dependencies: + "@lerna/child-process" "5.1.4" + "@lerna/command" "5.1.4" + "@lerna/filter-options" "5.1.4" + "@lerna/profiler" "5.1.4" + "@lerna/run-topologically" "5.1.4" + "@lerna/validation-error" "5.1.4" p-map "^4.0.0" -"@lerna/filter-options@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-5.1.2.tgz#6e81a14e83d32f08bfe10b0822e4ab1abaf5e5d5" - integrity sha512-OhQBqoqABrtRtWnLzcvDysZPKPsTvW85pCnssI0wGlIPVn780LHoEpteSDixyfnxxcWMSY3jymMUOJbvoR607w== +"@lerna/filter-options@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-5.1.4.tgz#417d9770cece09385c533ea89dbf140c9f49ded8" + integrity sha512-a6hLVZOb7awjI9Tk5hx90BB6GZz59npBRQN0kSG6drV1H+vi+wU7ee6OZ5EMHQgnzdZ6OjZQRHlWCCTXyNdKgQ== dependencies: - "@lerna/collect-updates" "5.1.2" - "@lerna/filter-packages" "5.1.2" + "@lerna/collect-updates" "5.1.4" + "@lerna/filter-packages" "5.1.4" dedent "^0.7.0" npmlog "^6.0.2" -"@lerna/filter-packages@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-5.1.2.tgz#ec9b524aeac944b5a2fac0f539be531ec3ff0e00" - integrity sha512-wMTqy2hmB+IH0OiXT5P5+eJmFJsLa69sipNrMkX9PVLOcopxKx/4qkC6kaJy/hw9+EjTMi0033CkogTwucSEnA== +"@lerna/filter-packages@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-5.1.4.tgz#54cd19d6f1fcbd27f0fd78c6f0c56412ebd7f454" + integrity sha512-a+ThrgYyGrTfBZUMfi/WvcqX3Ce6JaMZjTYoNAmKpHYNZFRqdmgOT1fFLLF+/y62XGqCf0wo50xRYNg0hIAf3Q== dependencies: - "@lerna/validation-error" "5.1.2" + "@lerna/validation-error" "5.1.4" multimatch "^5.0.0" npmlog "^6.0.2" -"@lerna/get-npm-exec-opts@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.1.2.tgz#93f346e92dfb0aee80bb9723c3d0bbf6c078ef47" - integrity sha512-bzKhjjYX4KoLzWXjyWzHvEMuJ2E1PllOqjO03sVA+N+xAjniCCeMMla8HA6nEeUmJmZXKgUqJrL3W3qM9JDIrw== +"@lerna/get-npm-exec-opts@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.1.4.tgz#99a8f9ce73acac6206331b4cb87f24006e712cb4" + integrity sha512-A+cNgTWWQOcNGWz9wj40/NWK46v8TtTAmXuEPfzDruv6VdmXEVIuq7SCeUPj9+aRxMQXVCil0/Vyo2z6R9TDLw== dependencies: npmlog "^6.0.2" -"@lerna/get-packed@5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@lerna/get-packed/-/get-packed-5.1.1.tgz#55c4c0baceca80ca5db78b4e980146079556c020" - integrity sha512-QWeOAoB5GGWnDkXtIcme8X1bHhkxOXw42UNp4h+wpXc8JzKiBdWcUVcLhKvS4fCmsRtq202UB6hPR+lYvCDz8w== +"@lerna/get-packed@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/get-packed/-/get-packed-5.1.4.tgz#cd376e017afb5327391ecdf781377c9b9fed09bb" + integrity sha512-JD9U4Sp7Dpt3nUdXAo5f9SIXK2QsBaguChCZ8VTAl3eb7j0o7nrHYoh1eAa8rDT2L9+AxcUFDMi/wDdCotlJmA== dependencies: fs-extra "^9.1.0" ssri "^8.0.1" tar "^6.1.0" -"@lerna/github-client@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-5.1.2.tgz#4bb396115c2b13f323ce8d88e2f3aad673162218" - integrity sha512-1Co6DXlJsqvBQR2lKURMFB6nS7wZ9Su++mzzPuB5KmUg0BRX9HVRVRxIHv/m5X8WX1OGxG2HDC0JD0sPNxOszQ== +"@lerna/github-client@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-5.1.4.tgz#818b921b12f2777dc55d1f4f955669c72fec7dcb" + integrity sha512-VAaH9ycnGVsaGWM5uRKvd0oXlOERHOEOwxXLaCnR1mA7k5490B5jTlwhSWYdA4s40CF9AOdIVNgBhP+T7MlcPw== dependencies: - "@lerna/child-process" "5.1.1" + "@lerna/child-process" "5.1.4" "@octokit/plugin-enterprise-rest" "^6.0.1" "@octokit/rest" "^18.1.0" git-url-parse "^11.4.4" npmlog "^6.0.2" -"@lerna/gitlab-client@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/gitlab-client/-/gitlab-client-5.1.2.tgz#e4b8254f4cd51215ee7bf81109afced71d2cfb18" - integrity sha512-4vXrw/4hfF4mytefe4L8dKXQQP9m3+9FZu4p4MnS4j8m1rtA2qs+CJ0Bxw6VJhBRTvz7mAWRi7EyACvuFqKtOw== +"@lerna/gitlab-client@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/gitlab-client/-/gitlab-client-5.1.4.tgz#82fb901eeaf75c51afa2c165e2bd26ef9695275c" + integrity sha512-F0Pa6Cv6TE0gbhuHR2gVVwdzstqePMZhTNcVY5So3YJrb1ppuUH/4cVXhRcEOj16QuWJ6yysxb7mj8tY4Zv0Bw== dependencies: node-fetch "^2.6.1" npmlog "^6.0.2" whatwg-url "^8.4.0" -"@lerna/global-options@5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-5.1.1.tgz#0bddf25989c314c5f9c1639f64b306946f6692aa" - integrity sha512-jKLqwiS3EwNbmMu5HbWciModK6/5FyxeSwENVIqPLplWIkAMbSNWjXa9BxNDzvsSU0G6TPpQmfgZ3ZS1bMamyA== +"@lerna/global-options@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-5.1.4.tgz#6daa9572c76171cdeb4cd4e48a7a1beae3e2ab4f" + integrity sha512-gs6y97tomIuyYdDr9uKQ5B5AR9m6wVft6lrxWlGlLo0prz39tx7fJ9wT2IpJ9iALCadkQW6g7XFtddwfm5VRhg== -"@lerna/has-npm-version@5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-5.1.1.tgz#361d0673817d44b961d68d6d4be8233b667ae82b" - integrity sha512-MkDhYbdNugXUE7bEY8j2DGE1RUg/SJR613b1HPUTdEWpPg13PupsTKqiKOzoURAzUWN6tZoOR7OAxbvR3w8jnw== +"@lerna/has-npm-version@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-5.1.4.tgz#4e2c01072ac4420e5ed3b645fa04d0673de38a25" + integrity sha512-U81b1nvqwF8PGyHib8/AWeGbaNipGdqXZsRO5g3ob9A5X57GXJ86cQVLejLi+znY4SmQcHladC4TotJkpNF1Ag== dependencies: - "@lerna/child-process" "5.1.1" + "@lerna/child-process" "5.1.4" semver "^7.3.4" -"@lerna/import@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/import/-/import-5.1.2.tgz#d34fb22999895218f6b3e5b12f2971648b863b6f" - integrity sha512-NqpOIJ9ZLHYzwNGAAytBFFARrP47OtR2/6L6Kt+AyT/cVGzhONkvgHqlJ2cHav+txKgzvvgkBr2+X+YcqICUvQ== - dependencies: - "@lerna/child-process" "5.1.1" - "@lerna/command" "5.1.2" - "@lerna/prompt" "5.1.2" - "@lerna/pulse-till-done" "5.1.2" - "@lerna/validation-error" "5.1.2" +"@lerna/import@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/import/-/import-5.1.4.tgz#28f5521f0fd69d894bb97325fa8c950d8200de3d" + integrity sha512-Kswe1NKJDUDlO/gbkFcurzaYlaj/fXlapHTaih9LmQDiVPOE9GphD5qnABCV0c4CqeSnCzRujT5BUjjL5z7viA== + dependencies: + "@lerna/child-process" "5.1.4" + "@lerna/command" "5.1.4" + "@lerna/prompt" "5.1.4" + "@lerna/pulse-till-done" "5.1.4" + "@lerna/validation-error" "5.1.4" dedent "^0.7.0" fs-extra "^9.1.0" p-map-series "^2.1.0" -"@lerna/info@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/info/-/info-5.1.2.tgz#0f09a0c54a486f0f8558484f02b99e58c0b9c053" - integrity sha512-c4c2ROnGT6W829UKbimkbqbhg+v3nujlxe09EBxBjb4Igz0JWawk0qHZN5dyPsR8JbyXC3oNRJneqTqCMECSHg== +"@lerna/info@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/info/-/info-5.1.4.tgz#fe803801d4ae747c25f914f7d3562d05902ede7e" + integrity sha512-9OMdNtmDMKLwfX+aZk9nHLfksYXuU7IcIiVJ9dR7gYx1PoKjXvTpd/+hd7t/tmElM21kmPVxQBu02L3KmXw+hQ== dependencies: - "@lerna/command" "5.1.2" - "@lerna/output" "5.1.2" + "@lerna/command" "5.1.4" + "@lerna/output" "5.1.4" envinfo "^7.7.4" -"@lerna/init@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/init/-/init-5.1.2.tgz#ed05343dbabbedd1f8a10e8e151e7506b60c97c1" - integrity sha512-rqd13oG8UR9Uxz8dI52+ysE5BbgApAyaJcB6rD4JJVXpvKNmp0dK4tlpcEkBHObk2wcrKTt/dG8gm7u3Ik1k1A== +"@lerna/init@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/init/-/init-5.1.4.tgz#7f195046e010c566f22d7a81b4167c0df2b88ef9" + integrity sha512-OdI5iWYT1JcB6f5mjmCjgpkOrpDdSSDzmSi34kp/NP1FkbskDoMffVBTQiV8/h6zAg3jk1+aLQYLMuR5E6nIwA== dependencies: - "@lerna/child-process" "5.1.1" - "@lerna/command" "5.1.2" + "@lerna/child-process" "5.1.4" + "@lerna/command" "5.1.4" fs-extra "^9.1.0" p-map "^4.0.0" write-json-file "^4.3.0" -"@lerna/link@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/link/-/link-5.1.2.tgz#557c8f7822057ce2615fcda1156e0012932cfcc0" - integrity sha512-t0H65K6SnImib22hn8he/f6ZPSfNXDfVFIaYqVa1oxyOhh+iBtz8ZX67YyhTCSoxYH+Ve6UWOcq8aoPcEyWXqQ== +"@lerna/link@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/link/-/link-5.1.4.tgz#5009da73e9f7d899bb5495e9ebb2f1ececb83f4b" + integrity sha512-j73MW+vam6e8XdwyQGeHR9X7TUmgvLG0wV1vDLjSyrhk/Q5oFo0RTRgfDJqR4tCtRnv0vujvw5oDXfSbBmg67g== dependencies: - "@lerna/command" "5.1.2" - "@lerna/package-graph" "5.1.2" - "@lerna/symlink-dependencies" "5.1.2" + "@lerna/command" "5.1.4" + "@lerna/package-graph" "5.1.4" + "@lerna/symlink-dependencies" "5.1.4" p-map "^4.0.0" slash "^3.0.0" -"@lerna/list@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/list/-/list-5.1.2.tgz#c4da143a42b491b392c00eb80b86f82aaaede966" - integrity sha512-0v6neIfwxfmgLj+5MVkwQ9eydVUelV3wU/1whrx37VxKdijgrkn8irJkhkkmSuqjpDWjb8X/1fDbe9RqgzS9fg== +"@lerna/list@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/list/-/list-5.1.4.tgz#19f8d229e3d39384e7f7ae4d67c7f3a3b8af751a" + integrity sha512-D7FAUik18s5FtHnBoPzodR8LUvH5b0a/ziV8ICaKWZ98H4w9qpNsQtBe0O+7DwUuqLKYpycst5tY5WVGnNwuNA== dependencies: - "@lerna/command" "5.1.2" - "@lerna/filter-options" "5.1.2" - "@lerna/listable" "5.1.2" - "@lerna/output" "5.1.2" + "@lerna/command" "5.1.4" + "@lerna/filter-options" "5.1.4" + "@lerna/listable" "5.1.4" + "@lerna/output" "5.1.4" -"@lerna/listable@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-5.1.2.tgz#d490757de2565a81456635db5cbd5aa5867a6279" - integrity sha512-2bOGTg4UXtBXmpel61qnNpUcni7ziNzIFsBTOg1Lx2xDD8iuzEN+uh+wYtnJFTV+0Mff6TN7oEoXAct0PvKt3g== +"@lerna/listable@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-5.1.4.tgz#0eb7d124502bfb3641959b6f86775e9ec9747e72" + integrity sha512-grGLrffBNX38l5mzZgkv4xE9UcAAKBi1s+LgloI3rusgTdE/B8gvCOYMqLf9V08iojs7Ke2xPf0whJmbEeK/qA== dependencies: - "@lerna/query-graph" "5.1.2" + "@lerna/query-graph" "5.1.4" chalk "^4.1.0" columnify "^1.6.0" -"@lerna/log-packed@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-5.1.2.tgz#e7191e5496fea01c13ed6c34c6ddc270d7f37ded" - integrity sha512-Uw4uQi7I/LOyoALs9JCvybpid7qwnFWfqY972V5VMO64bBiumzGumXbFhHmIsODfRHGiWpLMrAb+gEjk+Rw3Xg== +"@lerna/log-packed@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-5.1.4.tgz#23f64fe9e80157af6e1e848d06bdb9d786439269" + integrity sha512-qJlWMVjc/uM1I7AWqrOPeBLVZy9YExi/QqUyvmkb8mmsPXnW7rxIJQdYgRifS5aFNTbX/MtG8Q65Rr4syiVnSA== dependencies: byte-size "^7.0.0" columnify "^1.6.0" has-unicode "^2.0.1" npmlog "^6.0.2" -"@lerna/npm-conf@5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-5.1.1.tgz#c4f013968f897dc854cc6dba429c99a516f26b5d" - integrity sha512-cHc26cTvXAFJj5Y6ScBYzVpJHbYxcIA0rE+bh8VfqR4UeJMll2BiFmCycIZYUnL7p27sVN05/eifkUTG6tAORg== +"@lerna/npm-conf@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-5.1.4.tgz#6d746452806397e941399e6bf13da62e5c41cb8f" + integrity sha512-kNbw2jO0HD9P4+nS8RIFub549BiQYG/sdFUuNWu7cCjErB+g/5ayfE6Mn5HyiRPMYXVw73iR8IzvkCCDWEOB7Q== dependencies: config-chain "^1.1.12" pify "^5.0.0" -"@lerna/npm-dist-tag@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-5.1.2.tgz#197c68e2706f2deb21aaddfdea3afc54d4a9fe48" - integrity sha512-UUF6NQRY6RIL9LZui2tviuylyOJfZrKv6C4hND3ylcoDl5kOyxEL8E4vj7OtKz3L5v0io8Vi9VFXUFpOe+IRtQ== +"@lerna/npm-dist-tag@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-5.1.4.tgz#32d6eb915134a5c26a62eea509b553aafb604b7b" + integrity sha512-9q5N3iy8KGFBsyRBmNEftj8ACeCXNh2JUBqk/wYGiB0WH0oVf0UY/uo6VUy8dZjyJ9Q0eZa1ONtFHIg3QrzGDA== dependencies: - "@lerna/otplease" "5.1.2" + "@lerna/otplease" "5.1.4" npm-package-arg "^8.1.0" npm-registry-fetch "^9.0.0" npmlog "^6.0.2" -"@lerna/npm-install@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-5.1.2.tgz#7bcae73e31501baf0836a00322fdcd6d542fd511" - integrity sha512-Nv6L7PpLB9HQtg2RqoiP4QqZQRHGbx326vll4rQEajtPP8zeZ7kLbeVqAEqJoOr9vdEHAfYXj6W7zEyWJoFU1A== +"@lerna/npm-install@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-5.1.4.tgz#5b85d0b097380ae089297cb9903508230df5dd49" + integrity sha512-DbbUK2Zy7ZBpkHimlFKf7XbGzBsoPfqzf0i9hIYBHmND9YWSgIgVFJcyRH7E6UKpr4wRChW4h6xEV81jKykB7w== dependencies: - "@lerna/child-process" "5.1.1" - "@lerna/get-npm-exec-opts" "5.1.2" + "@lerna/child-process" "5.1.4" + "@lerna/get-npm-exec-opts" "5.1.4" fs-extra "^9.1.0" npm-package-arg "^8.1.0" npmlog "^6.0.2" signal-exit "^3.0.3" write-pkg "^4.0.0" -"@lerna/npm-publish@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-5.1.2.tgz#21a5779e25ed885d43efcef6519d22fc71f8bbe0" - integrity sha512-cag+gq+Wb3cZ8Pbz+zBQFilJu87U7kchiAFijDo223DSIqpATeAViQw3uCtPkhOAXKygaZupSqbXQTUu4Po8jA== +"@lerna/npm-publish@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-5.1.4.tgz#7f922a7e778b94106ba8929c30324554238faaab" + integrity sha512-MXtd2cFN+oJMxj9m1fXYAo+KE2BzO84Ukt3uAhQb1cXU01ZCwqGl/lQRWw5vI88emrKs0akx3d6E77PFpX9rpw== dependencies: - "@lerna/otplease" "5.1.2" - "@lerna/run-lifecycle" "5.1.2" + "@lerna/otplease" "5.1.4" + "@lerna/run-lifecycle" "5.1.4" fs-extra "^9.1.0" libnpmpublish "^4.0.0" npm-package-arg "^8.1.0" @@ -2612,85 +2612,85 @@ pify "^5.0.0" read-package-json "^3.0.0" -"@lerna/npm-run-script@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-5.1.2.tgz#8740d0fec08a556fd1f9c08e31888428dac16cea" - integrity sha512-vkfxixKP13Jk8no/XFud5pxF5NLqk/a3qc7iTbzceSltEbvM3rirPC09WH9DfcSDiIhF105Pr7/Xq1YAzNmpgw== +"@lerna/npm-run-script@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-5.1.4.tgz#6db6a15ff4a012d064b14c72601031b64c8137ec" + integrity sha512-vw2G69lFmFzdX553GidE66QgCZ3cGyxoOvnpCdvZ1n9AS5ZwZSiL8Ms6N3Vj+AOhESFZmFZkzIVhtpX5/xNzLg== dependencies: - "@lerna/child-process" "5.1.1" - "@lerna/get-npm-exec-opts" "5.1.2" + "@lerna/child-process" "5.1.4" + "@lerna/get-npm-exec-opts" "5.1.4" npmlog "^6.0.2" -"@lerna/otplease@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/otplease/-/otplease-5.1.2.tgz#1dec106abf65b44852d431544af390e93a105173" - integrity sha512-ZbJLAyQQawXydIyciqiYyp0KW5cyKjMj41nQH81lKjPQD4WFjwpELATe+sxFua90f0y9VxEwE6+4UwNYONgRYw== +"@lerna/otplease@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/otplease/-/otplease-5.1.4.tgz#211956a78fa9ff2bed94e3b2a32762b68dfbd15f" + integrity sha512-t3qKC55D7rCacNTsqQwn25XxDRQXgRHYWS0gqn2ch+dTwXOI61Uto9okVhgn2ZfZVydJ3sjnktOsPeSXhQRQew== dependencies: - "@lerna/prompt" "5.1.2" + "@lerna/prompt" "5.1.4" -"@lerna/output@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/output/-/output-5.1.2.tgz#c785bbc6337aea261f36e4287ca277d385647647" - integrity sha512-KT1pigGM4zp5o2iahsQVcpBv/XIDpVqc1dnscqITstrmbiq+qFI0+s6L73+eZwyu2rCalFinkj1pIEFF/Qr/iw== +"@lerna/output@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/output/-/output-5.1.4.tgz#6b56336b612a573994125a11a7b139deda2b5576" + integrity sha512-E9nLEcV5GJbTKJd/d+cvU54CIzQqoU2rJAeXeyHTufbjgCTPk4I8uDNHmG7uJ+aPrif6PPBt1IIw+w5UnStfdw== dependencies: npmlog "^6.0.2" -"@lerna/pack-directory@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/pack-directory/-/pack-directory-5.1.2.tgz#d647f7c84da04db5889cd66862ebcef942832a0c" - integrity sha512-w8XH/KrgxIQqw28bmQvtyF5og6d0Qj/2I2VnFwmQzxOpx+s8JgUF1dFxdxq+uuelkpPsRe5p2mg7IEEuaAeJ4w== +"@lerna/pack-directory@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/pack-directory/-/pack-directory-5.1.4.tgz#9a069e5bfc0d61391bd6c6f2ba362c8907cb80a7" + integrity sha512-TsltQrbwC/bPwQbL5i7WCMNM4Chl8+iqzawRZbILfjYpt3UK9xSV2tWfc9QtbmRBETvcFz/UMKQQDz+LMWN9jw== dependencies: - "@lerna/get-packed" "5.1.1" - "@lerna/package" "5.1.1" - "@lerna/run-lifecycle" "5.1.2" - "@lerna/temp-write" "5.1.0" + "@lerna/get-packed" "5.1.4" + "@lerna/package" "5.1.4" + "@lerna/run-lifecycle" "5.1.4" + "@lerna/temp-write" "5.1.4" npm-packlist "^2.1.4" npmlog "^6.0.2" tar "^6.1.0" -"@lerna/package-graph@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-5.1.2.tgz#eed5fa5bebf35d56e8a03eff0a0e3b5a448f4445" - integrity sha512-dp7pIBUt0NvbVxxxiQjW1xZzwTidFvxP2G2Xc9AnBp/O52KtiQK7Lw2v4U9mMd83Aq1CsJITvsaNssqFWihC7Q== +"@lerna/package-graph@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-5.1.4.tgz#df5910f588334284637a6a3cc24766806ba88f52" + integrity sha512-dP1gLcrqou5/8zef7u5ne4GTslNXULjpi3dDiljohKNR4XelsC4lkkF9m1Uzn9E1nAphHRhWXrRq40kqxmdYXg== dependencies: - "@lerna/prerelease-id-from-version" "5.1.1" - "@lerna/validation-error" "5.1.2" + "@lerna/prerelease-id-from-version" "5.1.4" + "@lerna/validation-error" "5.1.4" npm-package-arg "^8.1.0" npmlog "^6.0.2" semver "^7.3.4" -"@lerna/package@5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@lerna/package/-/package-5.1.1.tgz#f775a59e1e8abe8cbf6bd70438a42926d311cebe" - integrity sha512-1Re5wMPux4kTzuCI4WSSXaN9zERdhFoU/hHOoyDYjAnNsWy8ee9qkLEEGl8p1IVW8YSJTDDHS0RA9rg35Vd8lA== +"@lerna/package@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/package/-/package-5.1.4.tgz#7dd77d18cd0227793afa9819be988167bcc0cb02" + integrity sha512-L0zsxslJZ+swkG/KLU3TQHmWPR0hf0eLIdOROyA9Nxvuo8C/702ddYZcuEYcz9t/jOuSgSB2s90iK2oTIncNbw== dependencies: load-json-file "^6.2.0" npm-package-arg "^8.1.0" write-pkg "^4.0.0" -"@lerna/prerelease-id-from-version@5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.1.1.tgz#e5f57577cda44569af413958ba2bd420276e2b46" - integrity sha512-z4h1oP5PeuZV7+b4BSxm43DeUeE1DCZ7pPhTlHRAZRma2TBOfy2zzfEltWQZhOrrvkO67MR16W8x0xvwZV5odA== +"@lerna/prerelease-id-from-version@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.1.4.tgz#ea34adb5810622a656fa8dea17595d6b794e2872" + integrity sha512-kDcXKKFD6Ww/FinLEvsY1P3aIiuVLyonkttvfKJTJvm3ymz7/fBKz8GotFXuONVC1xSIK9Nrk3jGYs6ZGoha+w== dependencies: semver "^7.3.4" -"@lerna/profiler@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/profiler/-/profiler-5.1.2.tgz#d16634b4fd2cfd66f2e2f7a5f11c4a25b6b63292" - integrity sha512-JVZIc8e6yHBTlzU5d+zx9Tdrj7Bhuu78NLphuSWPx+XTVKYpi8U9e/4UejC3uEVd/Nu7twyM5kXkvPCCiT14Hg== +"@lerna/profiler@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/profiler/-/profiler-5.1.4.tgz#ce679f1a0b29489e3b530c6708c6f951d46fd15d" + integrity sha512-JLkS90+CSmi85v3SlJc5Wjk73MHmIviqtL3fM/Z6clBLbsRPkbBBfSwXKp7O281knF6E2UNTrWOtEG7b6wG3TQ== dependencies: fs-extra "^9.1.0" npmlog "^6.0.2" upath "^2.0.1" -"@lerna/project@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/project/-/project-5.1.2.tgz#cbc9b8a860af3d2830d5df5209c9687b998e1b4b" - integrity sha512-mUGqP7riSndDjYTE+u4uV7YgW2+4Ctu0mZ2MnScsmcJAquBqPOLmfo5f0aY4QXYF4JQyN2dfPa9OQUwKLcnSMA== +"@lerna/project@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/project/-/project-5.1.4.tgz#5185a6ef17d4cc2be0fec505e0f4507c2e68af3b" + integrity sha512-k0z3w45t746uAUkN+jY/jF+/BqHodGFYaUfM0DTDOGUWC8tXzxuqk3bchShp6Wct2gwNQWbtWHl50Jhhw5PC5g== dependencies: - "@lerna/package" "5.1.1" - "@lerna/validation-error" "5.1.2" + "@lerna/package" "5.1.4" + "@lerna/validation-error" "5.1.4" cosmiconfig "^7.0.0" dedent "^0.7.0" dot-prop "^6.0.1" @@ -2702,38 +2702,38 @@ resolve-from "^5.0.0" write-json-file "^4.3.0" -"@lerna/prompt@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-5.1.2.tgz#301a13da68b9787346cdefbda18f5c344d2b651f" - integrity sha512-3skvdE/XkiRrvpl/IbccQNn3/U/0tTPS5pt+O1pyrfXi1FSG9xV+PsqgeZ51ax2UxGtPAPRG2Vtp+fjfl6hUEA== +"@lerna/prompt@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-5.1.4.tgz#16f6f56752e0e542350cafbc8583d3d4690d8394" + integrity sha512-AiE8NIzh+x2+F0t96M+rfwLtKzBNXjQEWXtBfEcA1eRqanMWUr6ejfmdkoEzXVrMzyY/ugPdWQYbGCI00iF7Tg== dependencies: inquirer "^7.3.3" npmlog "^6.0.2" -"@lerna/publish@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-5.1.2.tgz#af6134523095c7477c8cd6bbd7697468bd50d28a" - integrity sha512-fXXXV81l104rt8vAInpO2TUo4DTnFq7+e/2tPTWIde5VI/xjuynrFgjUHBOpoRT6DsWKvG+wAdHrIrlUYqszkA== - dependencies: - "@lerna/check-working-tree" "5.1.2" - "@lerna/child-process" "5.1.1" - "@lerna/collect-updates" "5.1.2" - "@lerna/command" "5.1.2" - "@lerna/describe-ref" "5.1.2" - "@lerna/log-packed" "5.1.2" - "@lerna/npm-conf" "5.1.1" - "@lerna/npm-dist-tag" "5.1.2" - "@lerna/npm-publish" "5.1.2" - "@lerna/otplease" "5.1.2" - "@lerna/output" "5.1.2" - "@lerna/pack-directory" "5.1.2" - "@lerna/prerelease-id-from-version" "5.1.1" - "@lerna/prompt" "5.1.2" - "@lerna/pulse-till-done" "5.1.2" - "@lerna/run-lifecycle" "5.1.2" - "@lerna/run-topologically" "5.1.2" - "@lerna/validation-error" "5.1.2" - "@lerna/version" "5.1.2" +"@lerna/publish@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-5.1.4.tgz#d9d7203ec7e9dc3d0a9b8123a2c0b1afa536bd05" + integrity sha512-hbFAwOlyUR4AUBd7qTQXXVKgaxTS4Mz4Kkjxz8g7jtqo+T0KvU3JbfwDqxOiCwcDk+qkrBbkwbvc27jcObSwkw== + dependencies: + "@lerna/check-working-tree" "5.1.4" + "@lerna/child-process" "5.1.4" + "@lerna/collect-updates" "5.1.4" + "@lerna/command" "5.1.4" + "@lerna/describe-ref" "5.1.4" + "@lerna/log-packed" "5.1.4" + "@lerna/npm-conf" "5.1.4" + "@lerna/npm-dist-tag" "5.1.4" + "@lerna/npm-publish" "5.1.4" + "@lerna/otplease" "5.1.4" + "@lerna/output" "5.1.4" + "@lerna/pack-directory" "5.1.4" + "@lerna/prerelease-id-from-version" "5.1.4" + "@lerna/prompt" "5.1.4" + "@lerna/pulse-till-done" "5.1.4" + "@lerna/run-lifecycle" "5.1.4" + "@lerna/run-topologically" "5.1.4" + "@lerna/validation-error" "5.1.4" + "@lerna/version" "5.1.4" fs-extra "^9.1.0" libnpmaccess "^4.0.1" npm-package-arg "^8.1.0" @@ -2744,97 +2744,97 @@ pacote "^13.4.1" semver "^7.3.4" -"@lerna/pulse-till-done@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/pulse-till-done/-/pulse-till-done-5.1.2.tgz#240b84711524c6878073e872340d59f6aa66bef3" - integrity sha512-Xu7FAAchWKB6gl0/kHJ2bhqBFDR+8HnVOxFE0gyx7qPqHxtGCrQDmIYdVM3iRDvtRhMSU3pdqQhdFJNrVN3fCg== +"@lerna/pulse-till-done@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/pulse-till-done/-/pulse-till-done-5.1.4.tgz#b82b362341665e44e2885abd84b22e4122bafcaa" + integrity sha512-zFPzv6cY0OcqtcR91ueZqd+ulTLE4vPk9l6iPAfefgqh6w0E6hSmG6J9RmYE3gaMHSFJdvYHb/yyTPLF32J9lg== dependencies: npmlog "^6.0.2" -"@lerna/query-graph@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/query-graph/-/query-graph-5.1.2.tgz#b4a5176a4bb70f751fbf91bbd9d59dcb8d97a32f" - integrity sha512-eK8bROngdBe7kDFiIDzhG06WeMrpXpYaKxCo8DAanu8VzRCSfYE8GQyzxiU8Dmd7OjVE8bEOuABTsIWF9+cHqA== +"@lerna/query-graph@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/query-graph/-/query-graph-5.1.4.tgz#7333bebc711e03755fb96e23b4e99c974eac3d10" + integrity sha512-G8DYNqp5ISbbMjEJhGst1GHk59zO18IG9oaVSK14M7iF3qCLtg0iJ1Do4LDNpda3EF8PrLOx2mrNM5MBcGMjEg== dependencies: - "@lerna/package-graph" "5.1.2" + "@lerna/package-graph" "5.1.4" -"@lerna/resolve-symlink@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-5.1.2.tgz#4fb5379dcd36a98de1ca77531b869c16baede41e" - integrity sha512-03G+c+UgKBO7gBFcCjnsZdMY6+z6SeYKhpvEP//0y4mo9XI6e7yn5/rImYt7uFGy3u5CDEhzpBvfBoygmwiz0w== +"@lerna/resolve-symlink@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-5.1.4.tgz#7173d4103d1ae868a000336a636fcbfd15a8ae53" + integrity sha512-hpnaX5tznAtbQXlyc92kJiywdTnnbCf6wihSZwDiVnVgXuHJ3LvmjN677h9A0jobY6KdTT+wIoAHpJuZHj60vQ== dependencies: fs-extra "^9.1.0" npmlog "^6.0.2" read-cmd-shim "^2.0.0" -"@lerna/rimraf-dir@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-5.1.2.tgz#7ca04a5d108e261031cc4c6dec68ab21f12900a9" - integrity sha512-6FevNdvV/F7/yVL+DpQ12EPE1iJwwpYDsMSjRT7eIno44tdkoZyK+GeflqyPgCf7vkb4budJSWK+as17yNfYig== +"@lerna/rimraf-dir@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-5.1.4.tgz#2d216d97d223aa7a521ae77cae1ae29a6a0d96ca" + integrity sha512-WvHm4gE1/HWbI4gCjJw3clPT+FRq2Ob9I9EDbfw4c307MNT4kW4bJU2mt0nyv/uwYhUkTG+GQVrlt+Dtcif77g== dependencies: - "@lerna/child-process" "5.1.1" + "@lerna/child-process" "5.1.4" npmlog "^6.0.2" path-exists "^4.0.0" rimraf "^3.0.2" -"@lerna/run-lifecycle@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-5.1.2.tgz#edd9fd0971353dfaffa6005c566e8868ae71079a" - integrity sha512-gqZtR7iCYOt6tnzXDHhtXuE5MnL/ewvBRbydC3jFPHL2TJnEaGky1YTPuUqiRBTo53F0YHVWmCFWm5WUik1irA== +"@lerna/run-lifecycle@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-5.1.4.tgz#9d0e80bec6dee25342640b7ccfbe13d89d22e32d" + integrity sha512-ubmqi1ixebBHSTYS0oK8MoqBoJE7UDrXWTWsv84UrXiPutTffLR8ZQJKlMEcetQVzX9qbjpKbzc+jQWXPWid2A== dependencies: - "@lerna/npm-conf" "5.1.1" + "@lerna/npm-conf" "5.1.4" "@npmcli/run-script" "^3.0.2" npmlog "^6.0.2" -"@lerna/run-topologically@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/run-topologically/-/run-topologically-5.1.2.tgz#43b4c66f08fe75e5087a29d3627751aba6ef744f" - integrity sha512-spGKUDB9CQbrrCr2N59dAtIxQ39k/QLwAacR7o6WqQJSsrCg7d3k6GY9lvWrhQBKH+Iv3Vfhmp1bzb9YP0pTDQ== +"@lerna/run-topologically@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/run-topologically/-/run-topologically-5.1.4.tgz#f026407253e751102f2dba9ee764daa4b3a88bcf" + integrity sha512-MckWfLu/xuRtaThdUgrJC2naumv2LOIiMoJfxCdYpiCrIgq5YrwqOxjQ0awHqQhkvFZ5G91ucBcBEIMsOou1iw== dependencies: - "@lerna/query-graph" "5.1.2" + "@lerna/query-graph" "5.1.4" p-queue "^6.6.2" -"@lerna/run@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/run/-/run-5.1.2.tgz#700e54c197003bbe568500cc6f162edaa45c3955" - integrity sha512-qdp5vYtvTqv5sLb6gKUNmwPDENMEG5hCftoqshtP0PG2AoxrW9lYEiawtuWkvxmeod/W2Qjsk5aJppMvjSlqcg== - dependencies: - "@lerna/command" "5.1.2" - "@lerna/filter-options" "5.1.2" - "@lerna/npm-run-script" "5.1.2" - "@lerna/output" "5.1.2" - "@lerna/profiler" "5.1.2" - "@lerna/run-topologically" "5.1.2" - "@lerna/timer" "5.1.1" - "@lerna/validation-error" "5.1.2" +"@lerna/run@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/run/-/run-5.1.4.tgz#fb97a659eee440f978231306a0d8745a9a6eb39f" + integrity sha512-iaTioOF66z02Y9ml/Ba0ePpXOwZ+BkODcNXrJbyW8WhraL0fSjyno0FspO1Eu0nG4JMtgCsoEzHNphsk7Wg+7A== + dependencies: + "@lerna/command" "5.1.4" + "@lerna/filter-options" "5.1.4" + "@lerna/npm-run-script" "5.1.4" + "@lerna/output" "5.1.4" + "@lerna/profiler" "5.1.4" + "@lerna/run-topologically" "5.1.4" + "@lerna/timer" "5.1.4" + "@lerna/validation-error" "5.1.4" p-map "^4.0.0" -"@lerna/symlink-binary@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-5.1.2.tgz#8e9de3c2700945580c86c969e16b62de3a61acf9" - integrity sha512-QQvABdGdzcuHnCTkK/5CeWFqYhYPHRWWTrmxDBmx1OU3fXox5kN5dWegqmU7kASFWzgAuxmy/q3uUxFVWSM3bA== +"@lerna/symlink-binary@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-5.1.4.tgz#1bba4aa23125c8a8ce3d6b15b869caa62824c6b5" + integrity sha512-SNjHxCNTCD0Xfj3CNBTG+3ut4aDAVaq+SrB2ckFNmZ5Z9yFdnX6aP+PBzLD/0q5hj18lGlaJ8iZjD/ubbrgFCA== dependencies: - "@lerna/create-symlink" "5.1.2" - "@lerna/package" "5.1.1" + "@lerna/create-symlink" "5.1.4" + "@lerna/package" "5.1.4" fs-extra "^9.1.0" p-map "^4.0.0" -"@lerna/symlink-dependencies@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-5.1.2.tgz#a7713b2ec47b67307234edc429d41e22ea01a3df" - integrity sha512-Ul2fX3AWaEc0juHujG31d/yicFsJboRaW4r9yqNiTn6Vm2u8UUMaXmv6b8+i3MGY+tzd05gARpQAIUjBtxAOOA== +"@lerna/symlink-dependencies@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-5.1.4.tgz#70497b85cde43e9add4eacb10f1de35b97f937b9" + integrity sha512-SuzylyNs1R5bVRqSCwfbQLdDP83RX8ncQxOy2SSSrScwkzdBCDqDPh4haeADsq2+RoOQBItn1PDfzUCNAWomDA== dependencies: - "@lerna/create-symlink" "5.1.2" - "@lerna/resolve-symlink" "5.1.2" - "@lerna/symlink-binary" "5.1.2" + "@lerna/create-symlink" "5.1.4" + "@lerna/resolve-symlink" "5.1.4" + "@lerna/symlink-binary" "5.1.4" fs-extra "^9.1.0" p-map "^4.0.0" p-map-series "^2.1.0" -"@lerna/temp-write@5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@lerna/temp-write/-/temp-write-5.1.0.tgz#3bcecf96fca04b3d91faa01ba89540c8f1a53031" - integrity sha512-IvtYcrnWISEe9nBjhvq+o1mfn85Kup6rd+/PHb3jFmxx7E6ON4BnuqGPOOjmEjboMIRaopWQrkuCoIVotP+sDw== +"@lerna/temp-write@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/temp-write/-/temp-write-5.1.4.tgz#eca417418496fbb29d8bae36b548fd7afb46523f" + integrity sha512-f+6+ud87pyitM9zAq7GBhB7uoHTcgLJvR3YGv5sNja4jIl3+zdKPDcyxzVyQb38knuRSkGM8NjYOWi4zwcMaGw== dependencies: graceful-fs "^4.1.15" is-stream "^2.0.0" @@ -2842,37 +2842,37 @@ temp-dir "^1.0.0" uuid "^8.3.2" -"@lerna/timer@5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@lerna/timer/-/timer-5.1.1.tgz#4cd47757c5f254c2f34aac09d9cee0bccdbe91ea" - integrity sha512-c+v2xoxVpKcgjJEtiEw/J3lrBCsVxhQL9lrE1+emoV/GcxOxk6rWQKIJ6WQOhuaR/BsoHBEKF8C+xRlX/qt29g== +"@lerna/timer@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/timer/-/timer-5.1.4.tgz#a94734ba5bed1f3ad9b6fc0ce9609e5e624bc7ec" + integrity sha512-fhQtqkLxNexPWzhI1WAxZnHIBM8VhChvUJu503u1Rmp2JxhXbTE4Txnu1gPvqlDjdoE6ck0vN5icmfMVRwKc8g== -"@lerna/validation-error@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-5.1.2.tgz#b0f957cfd417a84adb05fc2fc400bd731e927227" - integrity sha512-aQrH0653tJeu2ZRVvLxK6l5Vz6Kc+hUGiLi7NOHr96fFyyKtAfheRdBjNz4XcW7Us0v/+B22GBwJgdWE1xtICQ== +"@lerna/validation-error@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-5.1.4.tgz#095d12367ec17a5fc00c0cf6cd8a83c3ddb9a9c3" + integrity sha512-wys9Fv/bUy7sYXOK9t+V3XSyEHK5tUXwY22nfIDYu416WcSkkE4DI8Q2nTv4nYYOmG2Y7IOhaSenbsPLQ0VqtQ== dependencies: npmlog "^6.0.2" -"@lerna/version@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/version/-/version-5.1.2.tgz#594b75db7f46fda797bafd64cae52e7faa1c5c10" - integrity sha512-xwacrH9wpom2up8BrHOBze9Hb6OuWZtv9Z4m5+4KaOM9KcwtGjIDEjKs+YQlDqsnepYxkTRdKUTnoNI5F7thXw== - dependencies: - "@lerna/check-working-tree" "5.1.2" - "@lerna/child-process" "5.1.1" - "@lerna/collect-updates" "5.1.2" - "@lerna/command" "5.1.2" - "@lerna/conventional-commits" "5.1.2" - "@lerna/github-client" "5.1.2" - "@lerna/gitlab-client" "5.1.2" - "@lerna/output" "5.1.2" - "@lerna/prerelease-id-from-version" "5.1.1" - "@lerna/prompt" "5.1.2" - "@lerna/run-lifecycle" "5.1.2" - "@lerna/run-topologically" "5.1.2" - "@lerna/temp-write" "5.1.0" - "@lerna/validation-error" "5.1.2" +"@lerna/version@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/version/-/version-5.1.4.tgz#87a2c19ba0d1e8c8417d6c2b87d1702e95a0bdf5" + integrity sha512-cYgm1SNdiK129JoWI8WMwjsxaIyeAC1gCaToWk36Tw+BCF3PbkdoTKdneDmJ+7qbX1QrzxsgHTcjwIt4lZPEqQ== + dependencies: + "@lerna/check-working-tree" "5.1.4" + "@lerna/child-process" "5.1.4" + "@lerna/collect-updates" "5.1.4" + "@lerna/command" "5.1.4" + "@lerna/conventional-commits" "5.1.4" + "@lerna/github-client" "5.1.4" + "@lerna/gitlab-client" "5.1.4" + "@lerna/output" "5.1.4" + "@lerna/prerelease-id-from-version" "5.1.4" + "@lerna/prompt" "5.1.4" + "@lerna/run-lifecycle" "5.1.4" + "@lerna/run-topologically" "5.1.4" + "@lerna/temp-write" "5.1.4" + "@lerna/validation-error" "5.1.4" chalk "^4.1.0" dedent "^0.7.0" load-json-file "^6.2.0" @@ -2886,10 +2886,10 @@ slash "^3.0.0" write-json-file "^4.3.0" -"@lerna/write-log-file@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-5.1.2.tgz#d7b1283ebd7833d807aed04e3a837f2008db7354" - integrity sha512-9u1KN8z5R48EQOgr7sAilu5Fqc4mYysTFTNCchCurzkKMAotMSSgLwRwVTPxH8MTFQpdo/xnrcvmIixMK4SSSg== +"@lerna/write-log-file@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-5.1.4.tgz#bd9cc578d0a35be11f0c489252e945478a0d3c0d" + integrity sha512-ISJbkjaSKhJ4d7V90RFvuwDQFq9ZH/KN475KFJr+TBFZTwMiXuBahlq+j8/a+nItejNnuPD4/xlWuzCOuGJORQ== dependencies: npmlog "^6.0.2" write-file-atomic "^3.0.3" @@ -9625,27 +9625,27 @@ lazy-ass@^1.6.0: resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" integrity sha1-eZllXoZGwX8In90YfRUNMyTVRRM= -lerna@5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/lerna/-/lerna-5.1.2.tgz#294b0515f17cea160c37411e35b1de3f93965656" - integrity sha512-ZtcH7W7jttIHg2AgfauJ8u+wCE9xiHY6iwVrH8mIkbDxMrNW4J/J/fbfeyZRrbxHY6ThM9e4/Wpd3o/b2vKzcg== - dependencies: - "@lerna/add" "5.1.2" - "@lerna/bootstrap" "5.1.2" - "@lerna/changed" "5.1.2" - "@lerna/clean" "5.1.2" - "@lerna/cli" "5.1.2" - "@lerna/create" "5.1.2" - "@lerna/diff" "5.1.2" - "@lerna/exec" "5.1.2" - "@lerna/import" "5.1.2" - "@lerna/info" "5.1.2" - "@lerna/init" "5.1.2" - "@lerna/link" "5.1.2" - "@lerna/list" "5.1.2" - "@lerna/publish" "5.1.2" - "@lerna/run" "5.1.2" - "@lerna/version" "5.1.2" +lerna@5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/lerna/-/lerna-5.1.4.tgz#57b1cd1fc0078f3c5009a07a7f7a4f8b85929b70" + integrity sha512-WwSbMslPxWSV7ARsGzkhJAFC1uQcuNGgiy2vZho4bpXVC+A7ZLXy8FngDbcAn7hCGC3ZDnl/4jdY6d84j63Y4g== + dependencies: + "@lerna/add" "5.1.4" + "@lerna/bootstrap" "5.1.4" + "@lerna/changed" "5.1.4" + "@lerna/clean" "5.1.4" + "@lerna/cli" "5.1.4" + "@lerna/create" "5.1.4" + "@lerna/diff" "5.1.4" + "@lerna/exec" "5.1.4" + "@lerna/import" "5.1.4" + "@lerna/info" "5.1.4" + "@lerna/init" "5.1.4" + "@lerna/link" "5.1.4" + "@lerna/list" "5.1.4" + "@lerna/publish" "5.1.4" + "@lerna/run" "5.1.4" + "@lerna/version" "5.1.4" import-local "^3.0.2" npmlog "^6.0.2" From 1d292c2281921a58203adf9212125bedb7942d1e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jun 2022 10:30:33 -0700 Subject: [PATCH 03/18] chore: Bump @microsoft/api-extractor from 7.25.0 to 7.25.2 (#5208) Bumps [@microsoft/api-extractor](https://github.com/microsoft/rushstack/tree/HEAD/apps/api-extractor) from 7.25.0 to 7.25.2. - [Release notes](https://github.com/microsoft/rushstack/releases) - [Changelog](https://github.com/microsoft/rushstack/blob/main/apps/api-extractor/CHANGELOG.md) - [Commits](https://github.com/microsoft/rushstack/commits/@microsoft/api-extractor_v7.25.2/apps/api-extractor) --- updated-dependencies: - dependency-name: "@microsoft/api-extractor" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 48 ++++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/yarn.lock b/yarn.lock index 350d26d5c1c6..7b8c97fe15e2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2929,26 +2929,26 @@ resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.6.22.tgz#219dfd89ae5b97a8801f015323ffa4b62f45718b" integrity sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA== -"@microsoft/api-extractor-model@7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@microsoft/api-extractor-model/-/api-extractor-model-7.18.0.tgz#23bfe8fee6534e086ddaff4daa5b9e2d27192e09" - integrity sha512-Q7ZhD6zKQd/J5ayNNChFCCgHZ8tw3ibljm6nXP/JEmiEFFbpKKtWMPVCaN8Y+8/qFmrz7mblLrupcKmUu8cF4A== +"@microsoft/api-extractor-model@7.18.2": + version "7.18.2" + resolved "https://registry.yarnpkg.com/@microsoft/api-extractor-model/-/api-extractor-model-7.18.2.tgz#def74be8bc785beb9a6f52a0a4c0b9f8f782e587" + integrity sha512-m7MCvJrudnWyE4iuRhdmgJTdTkYLw+yN/XUp3y9sxicu5/mNdg8y4pflaM82ZbLakhfGreMlB/XgjvyGbLHwkA== dependencies: "@microsoft/tsdoc" "0.14.1" "@microsoft/tsdoc-config" "~0.16.1" - "@rushstack/node-core-library" "3.45.5" + "@rushstack/node-core-library" "3.45.7" "@microsoft/api-extractor@^7.23.2": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@microsoft/api-extractor/-/api-extractor-7.25.0.tgz#a06bfe24abc7e4a82c586953b26debe94e852cd4" - integrity sha512-GS1XOY2RgLthUkfcTR4CLPvCIvpFYj+2MfJMZ3J4NX8H64BWSHGaDUvVV6QvjKNpt/RHdLyyJZ+j7dQveBAZnA== + version "7.25.2" + resolved "https://registry.yarnpkg.com/@microsoft/api-extractor/-/api-extractor-7.25.2.tgz#365639ad7409dcc1ccdfdd9ba35db99592a41531" + integrity sha512-ITuiZqMszZE38dGqavkFFIAW/GQGfkk8ahgBqVj3j1qD4wioPTRlSidhQDCezExAhrMt/bTkuZ3woLeR0uiSsg== dependencies: - "@microsoft/api-extractor-model" "7.18.0" + "@microsoft/api-extractor-model" "7.18.2" "@microsoft/tsdoc" "0.14.1" "@microsoft/tsdoc-config" "~0.16.1" - "@rushstack/node-core-library" "3.45.5" - "@rushstack/rig-package" "0.3.11" - "@rushstack/ts-command-line" "4.11.0" + "@rushstack/node-core-library" "3.45.7" + "@rushstack/rig-package" "0.3.12" + "@rushstack/ts-command-line" "4.11.1" colors "~1.2.1" lodash "~4.17.15" resolve "~1.17.0" @@ -3416,10 +3416,10 @@ estree-walker "^2.0.1" picomatch "^2.2.2" -"@rushstack/node-core-library@3.45.5": - version "3.45.5" - resolved "https://registry.yarnpkg.com/@rushstack/node-core-library/-/node-core-library-3.45.5.tgz#00f92143cc21c3ad94fcd81ba168a40ac8cb77f2" - integrity sha512-KbN7Hp9vH3bD3YJfv6RnVtzzTAwGYIBl7y2HQLY4WEQqRbvE3LgI78W9l9X+cTAXCX//p0EeoiUYNTFdqJrMZg== +"@rushstack/node-core-library@3.45.7": + version "3.45.7" + resolved "https://registry.yarnpkg.com/@rushstack/node-core-library/-/node-core-library-3.45.7.tgz#e959820a6db067c278c20df51503e2bc422e9349" + integrity sha512-DHfOvgPrm9X4uILlUfGgiqcobe5QGNDmqqYLM8dJ5M5fqQ9H5GwyUwBnFeRsxBo0b75RE83l41Oze+gdHKvKaA== dependencies: "@types/node" "12.20.24" colors "~1.2.1" @@ -3431,18 +3431,18 @@ timsort "~0.3.0" z-schema "~5.0.2" -"@rushstack/rig-package@0.3.11": - version "0.3.11" - resolved "https://registry.yarnpkg.com/@rushstack/rig-package/-/rig-package-0.3.11.tgz#92a05929822610e8b42f2ad330d9ea20afae5165" - integrity sha512-uI1/g5oQPtyrT9nStoyX/xgZSLa2b+srRFaDk3r1eqC7zA5th4/bvTGl2QfV3C9NcP+coSqmk5mFJkUfH6i3Lw== +"@rushstack/rig-package@0.3.12": + version "0.3.12" + resolved "https://registry.yarnpkg.com/@rushstack/rig-package/-/rig-package-0.3.12.tgz#6bf2d45374ba665902bf31ec0c6e5dad55ba1b73" + integrity sha512-ZzxuBWG0wbOtI+9IHYvOsr3QN52GtxTWpcaHMsQ/PC9us2ve/k0xK0XOMu+CtStyHSnBG2nDdnF9vFv9HMYOZg== dependencies: resolve "~1.17.0" strip-json-comments "~3.1.1" -"@rushstack/ts-command-line@4.11.0": - version "4.11.0" - resolved "https://registry.yarnpkg.com/@rushstack/ts-command-line/-/ts-command-line-4.11.0.tgz#4cd3b9f59b41aed600042936260fdaa55ca0184d" - integrity sha512-ptG9L0mjvJ5QtK11GsAFY+jGfsnqHDS6CY6Yw1xT7a9bhjfNYnf6UPwjV+pF6UgiucfNcMDNW9lkDLxvZKKxMg== +"@rushstack/ts-command-line@4.11.1": + version "4.11.1" + resolved "https://registry.yarnpkg.com/@rushstack/ts-command-line/-/ts-command-line-4.11.1.tgz#10b80960ddaed685445289807c75743e4ef0b5e9" + integrity sha512-Xo8LaQOXlNSfp+qIuIPb1tfX7b4H21ksqiMo/HbeZI5AX1klHMqKjWcEs0AqgE9huvQj6cvnCla8Eq/GDcwMIg== dependencies: "@types/argparse" "1.0.38" argparse "~1.0.9" From d975cec8c52fc6c291c2913e65b08ad476e77193 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jun 2022 10:30:43 -0700 Subject: [PATCH 04/18] chore: Bump @types/semver from 7.3.9 to 7.3.10 (#5205) Bumps [@types/semver](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/semver) from 7.3.9 to 7.3.10. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/semver) --- updated-dependencies: - dependency-name: "@types/semver" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7b8c97fe15e2..0b7cf4177160 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4141,9 +4141,9 @@ integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== "@types/semver@*", "@types/semver@^7.3.9": - version "7.3.9" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.9.tgz#152c6c20a7688c30b967ec1841d31ace569863fc" - integrity sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ== + version "7.3.10" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.10.tgz#5f19ee40cbeff87d916eedc8c2bfe2305d957f73" + integrity sha512-zsv3fsC7S84NN6nPK06u79oWgrPVd0NvOyqgghV1haPaFcVxIrP4DLomRwGAXk0ui4HZA7mOcSFL98sMVW9viw== "@types/serve-index@^1.9.1": version "1.9.1" From 6b9f8e816451f68121a0f1fa2da0567850154f78 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jun 2022 11:28:59 -0700 Subject: [PATCH 05/18] chore: Bump lint-staged from 13.0.1 to 13.0.2 (#5214) Bumps [lint-staged](https://github.com/okonet/lint-staged) from 13.0.1 to 13.0.2. - [Release notes](https://github.com/okonet/lint-staged/releases) - [Commits](https://github.com/okonet/lint-staged/compare/v13.0.1...v13.0.2) --- updated-dependencies: - dependency-name: lint-staged dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 0b7cf4177160..da9e50f377ca 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9701,9 +9701,9 @@ linkify-it@^3.0.1: uc.micro "^1.0.1" lint-staged@^13.0.0: - version "13.0.1" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.0.1.tgz#899e78065ab29b88fdd922482411121664ef66be" - integrity sha512-Ykaf4QTi0a02BF7cnq7JIPGOJxH4TkNMWhSlJdH9wOekd0X+gog47Jfh/0L31DqZe5AiydLGC7LkPqpaNm+Kvg== + version "13.0.2" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.0.2.tgz#35a1c57130e9ad5b1dea784972a40777ba433dd5" + integrity sha512-qQLfLTh9z34eMzfEHENC+QBskZfxjomrf+snF3xJ4BzilORbD989NLqQ00ughsF/A+PT41e87+WsMFabf9++pQ== dependencies: cli-truncate "^3.1.0" colorette "^2.0.17" From 7cdb6614e0263a127993d21570ece524eb28b7ee Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jun 2022 11:29:09 -0700 Subject: [PATCH 06/18] chore: Bump eslint-plugin-react-hooks from 4.5.0 to 4.6.0 (#5215) Bumps [eslint-plugin-react-hooks](https://github.com/facebook/react/tree/HEAD/packages/eslint-plugin-react-hooks) from 4.5.0 to 4.6.0. - [Release notes](https://github.com/facebook/react/releases) - [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/react/commits/HEAD/packages/eslint-plugin-react-hooks) --- updated-dependencies: - dependency-name: eslint-plugin-react-hooks dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index da9e50f377ca..2c2fa55cd51f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6960,9 +6960,9 @@ eslint-plugin-jsx-a11y@^6.5.1: minimatch "^3.0.4" eslint-plugin-react-hooks@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.5.0.tgz#5f762dfedf8b2cf431c689f533c9d3fa5dcf25ad" - integrity sha512-8k1gRt7D7h03kd+SAAlzXkQwWK22BnK6GKZG+FJA6BAGy22CFvl8kCIXKpVux0cCxMWDQUPqSok0LKaZ0aOcCw== + version "4.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" + integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== eslint-plugin-react@^7.29.4: version "7.30.0" From 5c0f03345dad3f7c81c7ae767c3a8e7a0960f8ec Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jun 2022 11:29:20 -0700 Subject: [PATCH 07/18] chore: Bump @types/jest from 28.1.1 to 28.1.2 (#5216) Bumps [@types/jest](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jest) from 28.1.1 to 28.1.2. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jest) --- updated-dependencies: - dependency-name: "@types/jest" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/yarn.lock b/yarn.lock index 2c2fa55cd51f..2ee4b6c6ede2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3965,12 +3965,12 @@ "@types/jest" "*" "@types/jest@*", "@types/jest@^28.1.1": - version "28.1.1" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-28.1.1.tgz#8c9ba63702a11f8c386ee211280e8b68cb093cd1" - integrity sha512-C2p7yqleUKtCkVjlOur9BWVA4HgUQmEj/HWCt5WzZ5mLXrWnyIfl0wGuArc+kBXsy0ZZfLp+7dywB4HtSVYGVA== + version "28.1.2" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-28.1.2.tgz#c678569bb2d8e5474dd88f0851613611aeed9809" + integrity sha512-5dNM7mMuIrCtNJsFfvUO/5xCrG8swuT2c7ND+sl3XwlwxJf3k7e7o+PRvcFN/iIm8XhCqHqxLOj9yutDDOJoRg== dependencies: - jest-matcher-utils "^27.0.0" - pretty-format "^27.0.0" + jest-matcher-utils "^28.0.0" + pretty-format "^28.0.0" "@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.11" @@ -9172,7 +9172,7 @@ jest-leak-detector@^28.1.1: jest-get-type "^28.0.2" pretty-format "^28.1.1" -jest-matcher-utils@^27.0.0, jest-matcher-utils@^28, jest-matcher-utils@^28.1.1: +jest-matcher-utils@^28, jest-matcher-utils@^28.0.0, jest-matcher-utils@^28.1.1: version "28.1.1" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-28.1.1.tgz#a7c4653c2b782ec96796eb3088060720f1e29304" integrity sha512-NPJPRWrbmR2nAJ+1nmnfcKKzSwgfaciCCrYZzVnNoxVoyusYWIjkBMNvu0RHJe7dNj4hH3uZOPZsQA+xAYWqsw== @@ -11709,7 +11709,7 @@ pretty-error@^4.0.0: lodash "^4.17.20" renderkid "^3.0.0" -pretty-format@*, pretty-format@^27.0.0, pretty-format@^28.1.0, pretty-format@^28.1.1: +pretty-format@*, pretty-format@^28.0.0, pretty-format@^28.1.0, pretty-format@^28.1.1: version "28.1.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.0.tgz#8f5836c6a0dfdb834730577ec18029052191af55" integrity sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q== From 2f54d958fe9022bcf9b29b71fcc21e17bab3b1d2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jun 2022 12:21:06 -0700 Subject: [PATCH 08/18] chore: Bump @types/jest-specific-snapshot from 0.5.5 to 0.5.6 (#5222) Bumps [@types/jest-specific-snapshot](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jest-specific-snapshot) from 0.5.5 to 0.5.6. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jest-specific-snapshot) --- updated-dependencies: - dependency-name: "@types/jest-specific-snapshot" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 2ee4b6c6ede2..dfb7409e325d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3958,9 +3958,9 @@ "@types/istanbul-lib-report" "*" "@types/jest-specific-snapshot@^0.5.5": - version "0.5.5" - resolved "https://registry.yarnpkg.com/@types/jest-specific-snapshot/-/jest-specific-snapshot-0.5.5.tgz#47ce738870be99898ed6d7b08dbf0240c74ae553" - integrity sha512-AaPPw2tE8ewfjD6qGLkEd4DOfM6pPOK7ob/RSOe1Z8Oo70r9Jgo0SlWyfxslPAOvLfQukQtiVPm6DcnjSoZU5A== + version "0.5.6" + resolved "https://registry.yarnpkg.com/@types/jest-specific-snapshot/-/jest-specific-snapshot-0.5.6.tgz#ce47102408981649a6fb1a57ee8062adb5591eac" + integrity sha512-AQdUbEyTwO6JR2yZK7PTXDzK32AlkviDZJZEukZnrZtBjITYBtExFh59HTNTZeFSs+k1b1bqCHmWUwj3VHeh/A== dependencies: "@types/jest" "*" From 1c91d16915e08cf180c603282a9db880f5c1a5c7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jun 2022 12:21:14 -0700 Subject: [PATCH 09/18] chore: Bump rollup from 2.75.6 to 2.75.7 (#5219) Bumps [rollup](https://github.com/rollup/rollup) from 2.75.6 to 2.75.7. - [Release notes](https://github.com/rollup/rollup/releases) - [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md) - [Commits](https://github.com/rollup/rollup/compare/v2.75.6...v2.75.7) --- updated-dependencies: - dependency-name: rollup dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index dfb7409e325d..b7b684855e2d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12590,9 +12590,9 @@ rollup-plugin-terser@^7.0.2: terser "^5.0.0" rollup@^2.75.4: - version "2.75.6" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.75.6.tgz#ac4dc8600f95942a0180f61c7c9d6200e374b439" - integrity sha512-OEf0TgpC9vU6WGROJIk1JA3LR5vk/yvqlzxqdrE2CzzXnqKXNzbAwlWUXis8RS3ZPe7LAq+YUxsRa0l3r27MLA== + version "2.75.7" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.75.7.tgz#221ff11887ae271e37dcc649ba32ce1590aaa0b9" + integrity sha512-VSE1iy0eaAYNCxEXaleThdFXqZJ42qDBatAwrfnPlENEZ8erQ+0LYX4JXOLPceWfZpV1VtZwZ3dFCuOZiSyFtQ== optionalDependencies: fsevents "~2.3.2" From 33fdaa62983a17236a1b0df76cf0f6919c62d6b3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jun 2022 12:21:21 -0700 Subject: [PATCH 10/18] chore: Bump eslint-plugin-eslint-plugin from 4.2.0 to 4.3.0 (#5221) Bumps [eslint-plugin-eslint-plugin](https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin) from 4.2.0 to 4.3.0. - [Release notes](https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/releases) - [Changelog](https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/blob/main/CHANGELOG.md) - [Commits](https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/compare/v4.2.0...v4.3.0) --- updated-dependencies: - dependency-name: eslint-plugin-eslint-plugin dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index b7b684855e2d..c9611ce28e35 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6908,9 +6908,9 @@ eslint-plugin-eslint-comments@^3.2.0: ignore "^5.0.5" eslint-plugin-eslint-plugin@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-eslint-plugin/-/eslint-plugin-eslint-plugin-4.2.0.tgz#64c5ba82f9b1073c89a79a1c8f451f278be6603a" - integrity sha512-ZDyUUlZJw85hmc9pGciNFiQwojXKxV7KAAVnQtojk1W/I8YYHxYV9JBuzhfAYfVemiQzDPNwj1zwAqQwGN1ROw== + version "4.3.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-eslint-plugin/-/eslint-plugin-eslint-plugin-4.3.0.tgz#ff83102e3c7f6b3a85d61f8021a6a5f06189f153" + integrity sha512-0xZ++ilIpGY+gBwsaW/uIhG/Rrl/sltPCai3UUPzWbaOPud2tel9UCWj8sLTADNmVqBD+vcqLHzHY86q/b71yg== dependencies: eslint-utils "^3.0.0" estraverse "^5.2.0" From 0957f93076df23443a08636fa052aa60522127a3 Mon Sep 17 00:00:00 2001 From: Armano Date: Thu, 23 Jun 2022 16:18:32 +0200 Subject: [PATCH 11/18] docs(website): [playground] show tooltips bellow hovered code (#5198) --- packages/website/src/components/Playground.module.css | 1 - packages/website/src/components/editor/useSandboxServices.ts | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/src/components/Playground.module.css b/packages/website/src/components/Playground.module.css index 771da57e32d7..982899552094 100644 --- a/packages/website/src/components/Playground.module.css +++ b/packages/website/src/components/Playground.module.css @@ -103,6 +103,5 @@ .astViewer { height: auto; - max-height: 30rem; } } diff --git a/packages/website/src/components/editor/useSandboxServices.ts b/packages/website/src/components/editor/useSandboxServices.ts index eb54143bad46..4eec5f356957 100644 --- a/packages/website/src/components/editor/useSandboxServices.ts +++ b/packages/website/src/components/editor/useSandboxServices.ts @@ -63,6 +63,7 @@ export const useSandboxServices = ( formatOnPaste: true, formatOnType: true, wrappingIndent: 'same', + hover: { above: false }, }, acquireTypes: false, compilerOptions: compilerOptions, From 2de72231262cc6fa2813c96d5f6e6a536cff4010 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Thu, 23 Jun 2022 19:28:40 -0400 Subject: [PATCH 12/18] chore: removed pre-push hook (#5235) --- .husky/pre-push | 4 ---- package.json | 1 - 2 files changed, 5 deletions(-) delete mode 100755 .husky/pre-push diff --git a/.husky/pre-push b/.husky/pre-push deleted file mode 100755 index e57c4b5eb3ea..000000000000 --- a/.husky/pre-push +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -. "$(dirname "$0")/_/husky.sh" - -yarn pre-push diff --git a/package.json b/package.json index 45c418d1b491..59e27548d8e3 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,6 @@ "lint": "cross-env NODE_OPTIONS=\"--max-old-space-size=16384\" eslint .", "postinstall": "yarn husky install && yarn build", "pre-commit": "yarn lint-staged", - "pre-push": "yarn check-format", "start": "nx run website:start", "test": "nx run-many --target=test --all --parallel", "test-integration": "yarn jest -c ./tests/integration/jest.config.js", From 507629a19cb78f20154cf377b985ee92149f161a Mon Sep 17 00:00:00 2001 From: Joshua Chen Date: Sun, 26 Jun 2022 02:57:40 +0800 Subject: [PATCH 13/18] docs: autogenerate rules table on website (#5116) * docs: autogenerate rules table on website * migrate rule attributes to global data * add mdlint ignore * add filter * avoid redirecting to main site * merge two columns * this is hard * refactor * tweak colors * ok - memoize this * refactors more * Apply suggestions from code review Co-authored-by: Brad Zacher * ok, use classes * vertially arrange icons * Remove rules table from README * minor refactors * Accessibility labels Co-authored-by: Brad Zacher Co-authored-by: Josh Goldberg --- .markdownlint.json | 3 +- packages/eslint-plugin/README.md | 147 +------------ packages/eslint-plugin/docs/rules/README.md | 142 +------------ packages/eslint-plugin/tests/docs.test.ts | 111 ---------- packages/website/docusaurusConfig.ts | 4 + .../plugins/add-rule-attributes-list.ts | 185 +---------------- packages/website/rulesMeta.ts | 15 ++ .../src/components/RulesTable/index.tsx | 196 ++++++++++++++++++ .../components/RulesTable/styles.module.css | 119 +++++++++++ packages/website/src/hooks/useRulesMeta.ts | 12 ++ .../MDXComponents/RuleAttributes.module.css | 7 + .../theme/MDXComponents/RuleAttributes.tsx | 73 +++++++ .../website/src/theme/MDXComponents/index.tsx | 8 + packages/website/tsconfig.json | 8 +- 14 files changed, 457 insertions(+), 573 deletions(-) create mode 100644 packages/website/rulesMeta.ts create mode 100644 packages/website/src/components/RulesTable/index.tsx create mode 100644 packages/website/src/components/RulesTable/styles.module.css create mode 100644 packages/website/src/hooks/useRulesMeta.ts create mode 100644 packages/website/src/theme/MDXComponents/RuleAttributes.module.css create mode 100644 packages/website/src/theme/MDXComponents/RuleAttributes.tsx create mode 100644 packages/website/src/theme/MDXComponents/index.tsx diff --git a/.markdownlint.json b/.markdownlint.json index ba2c8eb2df50..55f1ef99429f 100644 --- a/.markdownlint.json +++ b/.markdownlint.json @@ -69,7 +69,8 @@ "details", "summary", "Tabs", - "TabItem" + "TabItem", + "RulesTable" ] }, // MD034/no-bare-urls - Bare URL used diff --git a/packages/eslint-plugin/README.md b/packages/eslint-plugin/README.md index 60a769945183..5124ce841ae0 100644 --- a/packages/eslint-plugin/README.md +++ b/packages/eslint-plugin/README.md @@ -89,152 +89,7 @@ Pro Tip: For larger codebases you may want to consider splitting our linting int ## Supported Rules - - -**Key**: :white_check_mark: = recommended, :lock: = strict, :wrench: = fixable, :thought_balloon: = requires type information - -| Name | Description | :white_check_mark::lock: | :wrench: | :thought_balloon: | -| ----------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | ------------------------ | -------- | ----------------- | -| [`@typescript-eslint/adjacent-overload-signatures`](./docs/rules/adjacent-overload-signatures.md) | Require that member overloads be consecutive | :white_check_mark: | | | -| [`@typescript-eslint/array-type`](./docs/rules/array-type.md) | Require using either `T[]` or `Array` for arrays | :lock: | :wrench: | | -| [`@typescript-eslint/await-thenable`](./docs/rules/await-thenable.md) | Disallow awaiting a value that is not a Thenable | :white_check_mark: | | :thought_balloon: | -| [`@typescript-eslint/ban-ts-comment`](./docs/rules/ban-ts-comment.md) | Disallow `@ts-` comments or require descriptions after directive | :white_check_mark: | | | -| [`@typescript-eslint/ban-tslint-comment`](./docs/rules/ban-tslint-comment.md) | Disallow `// tslint:` comments | :lock: | :wrench: | | -| [`@typescript-eslint/ban-types`](./docs/rules/ban-types.md) | Disallow certain types | :white_check_mark: | :wrench: | | -| [`@typescript-eslint/class-literal-property-style`](./docs/rules/class-literal-property-style.md) | Enforce that literals on classes are exposed in a consistent style | :lock: | :wrench: | | -| [`@typescript-eslint/consistent-generic-constructors`](./docs/rules/consistent-generic-constructors.md) | Enforce specifying generic type arguments on type annotation or constructor name of a constructor call | :lock: | :wrench: | | -| [`@typescript-eslint/consistent-indexed-object-style`](./docs/rules/consistent-indexed-object-style.md) | Require or disallow the `Record` type | :lock: | :wrench: | | -| [`@typescript-eslint/consistent-type-assertions`](./docs/rules/consistent-type-assertions.md) | Enforce consistent usage of type assertions | :lock: | | | -| [`@typescript-eslint/consistent-type-definitions`](./docs/rules/consistent-type-definitions.md) | Enforce type definitions to consistently use either `interface` or `type` | :lock: | :wrench: | | -| [`@typescript-eslint/consistent-type-exports`](./docs/rules/consistent-type-exports.md) | Enforce consistent usage of type exports | | :wrench: | :thought_balloon: | -| [`@typescript-eslint/consistent-type-imports`](./docs/rules/consistent-type-imports.md) | Enforce consistent usage of type imports | | :wrench: | | -| [`@typescript-eslint/explicit-function-return-type`](./docs/rules/explicit-function-return-type.md) | Require explicit return types on functions and class methods | | | | -| [`@typescript-eslint/explicit-member-accessibility`](./docs/rules/explicit-member-accessibility.md) | Require explicit accessibility modifiers on class properties and methods | | :wrench: | | -| [`@typescript-eslint/explicit-module-boundary-types`](./docs/rules/explicit-module-boundary-types.md) | Require explicit return and argument types on exported functions' and classes' public class methods | | | | -| [`@typescript-eslint/member-delimiter-style`](./docs/rules/member-delimiter-style.md) | Require a specific member delimiter style for interfaces and type literals | | :wrench: | | -| [`@typescript-eslint/member-ordering`](./docs/rules/member-ordering.md) | Require a consistent member declaration order | | | | -| [`@typescript-eslint/method-signature-style`](./docs/rules/method-signature-style.md) | Enforce using a particular method signature syntax | | :wrench: | | -| [`@typescript-eslint/naming-convention`](./docs/rules/naming-convention.md) | Enforce naming conventions for everything across a codebase | | | :thought_balloon: | -| [`@typescript-eslint/no-base-to-string`](./docs/rules/no-base-to-string.md) | Require `.toString()` to only be called on objects which provide useful information when stringified | :lock: | | :thought_balloon: | -| [`@typescript-eslint/no-confusing-non-null-assertion`](./docs/rules/no-confusing-non-null-assertion.md) | Disallow non-null assertion in locations that may be confusing | :lock: | :wrench: | | -| [`@typescript-eslint/no-confusing-void-expression`](./docs/rules/no-confusing-void-expression.md) | Require expressions of type void to appear in statement position | | :wrench: | :thought_balloon: | -| [`@typescript-eslint/no-duplicate-enum-values`](./docs/rules/no-duplicate-enum-values.md) | Disallow duplicate enum member values | :lock: | | | -| [`@typescript-eslint/no-dynamic-delete`](./docs/rules/no-dynamic-delete.md) | Disallow using the `delete` operator on computed key expressions | :lock: | :wrench: | | -| [`@typescript-eslint/no-empty-interface`](./docs/rules/no-empty-interface.md) | Disallow the declaration of empty interfaces | :white_check_mark: | :wrench: | | -| [`@typescript-eslint/no-explicit-any`](./docs/rules/no-explicit-any.md) | Disallow the `any` type | :white_check_mark: | :wrench: | | -| [`@typescript-eslint/no-extra-non-null-assertion`](./docs/rules/no-extra-non-null-assertion.md) | Disallow extra non-null assertion | :white_check_mark: | :wrench: | | -| [`@typescript-eslint/no-extraneous-class`](./docs/rules/no-extraneous-class.md) | Disallow classes used as namespaces | :lock: | | | -| [`@typescript-eslint/no-floating-promises`](./docs/rules/no-floating-promises.md) | Require Promise-like statements to be handled appropriately | :white_check_mark: | | :thought_balloon: | -| [`@typescript-eslint/no-for-in-array`](./docs/rules/no-for-in-array.md) | Disallow iterating over an array with a for-in loop | :white_check_mark: | | :thought_balloon: | -| [`@typescript-eslint/no-inferrable-types`](./docs/rules/no-inferrable-types.md) | Disallow explicit type declarations for variables or parameters initialized to a number, string, or boolean | :white_check_mark: | :wrench: | | -| [`@typescript-eslint/no-invalid-void-type`](./docs/rules/no-invalid-void-type.md) | Disallow `void` type outside of generic or return types | :lock: | | | -| [`@typescript-eslint/no-meaningless-void-operator`](./docs/rules/no-meaningless-void-operator.md) | Disallow the `void` operator except when used to discard a value | :lock: | :wrench: | :thought_balloon: | -| [`@typescript-eslint/no-misused-new`](./docs/rules/no-misused-new.md) | Enforce valid definition of `new` and `constructor` | :white_check_mark: | | | -| [`@typescript-eslint/no-misused-promises`](./docs/rules/no-misused-promises.md) | Disallow Promises in places not designed to handle them | :white_check_mark: | | :thought_balloon: | -| [`@typescript-eslint/no-namespace`](./docs/rules/no-namespace.md) | Disallow custom TypeScript modules and namespaces | :white_check_mark: | | | -| [`@typescript-eslint/no-non-null-asserted-nullish-coalescing`](./docs/rules/no-non-null-asserted-nullish-coalescing.md) | Disallow non-null assertions in the left operand of a nullish coalescing operator | :lock: | | | -| [`@typescript-eslint/no-non-null-asserted-optional-chain`](./docs/rules/no-non-null-asserted-optional-chain.md) | Disallow non-null assertions after an optional chain expression | :white_check_mark: | | | -| [`@typescript-eslint/no-non-null-assertion`](./docs/rules/no-non-null-assertion.md) | Disallow non-null assertions using the `!` postfix operator | :white_check_mark: | | | -| [`@typescript-eslint/no-redundant-type-constituents`](./docs/rules/no-redundant-type-constituents.md) | Disallow members of unions and intersections that do nothing or override type information | | | :thought_balloon: | -| [`@typescript-eslint/no-require-imports`](./docs/rules/no-require-imports.md) | Disallow invocation of `require()` | | | | -| [`@typescript-eslint/no-this-alias`](./docs/rules/no-this-alias.md) | Disallow aliasing `this` | :white_check_mark: | | | -| [`@typescript-eslint/no-type-alias`](./docs/rules/no-type-alias.md) | Disallow type aliases | | | | -| [`@typescript-eslint/no-unnecessary-boolean-literal-compare`](./docs/rules/no-unnecessary-boolean-literal-compare.md) | Disallow unnecessary equality comparisons against boolean literals | :lock: | :wrench: | :thought_balloon: | -| [`@typescript-eslint/no-unnecessary-condition`](./docs/rules/no-unnecessary-condition.md) | Disallow conditionals where the type is always truthy or always falsy | :lock: | :wrench: | :thought_balloon: | -| [`@typescript-eslint/no-unnecessary-qualifier`](./docs/rules/no-unnecessary-qualifier.md) | Disallow unnecessary namespace qualifiers | | :wrench: | :thought_balloon: | -| [`@typescript-eslint/no-unnecessary-type-arguments`](./docs/rules/no-unnecessary-type-arguments.md) | Disallow type arguments that are equal to the default | :lock: | :wrench: | :thought_balloon: | -| [`@typescript-eslint/no-unnecessary-type-assertion`](./docs/rules/no-unnecessary-type-assertion.md) | Disallow type assertions that do not change the type of an expression | :white_check_mark: | :wrench: | :thought_balloon: | -| [`@typescript-eslint/no-unnecessary-type-constraint`](./docs/rules/no-unnecessary-type-constraint.md) | Disallow unnecessary constraints on generic types | :white_check_mark: | | | -| [`@typescript-eslint/no-unsafe-argument`](./docs/rules/no-unsafe-argument.md) | Disallow calling a function with a value with type `any` | :white_check_mark: | | :thought_balloon: | -| [`@typescript-eslint/no-unsafe-assignment`](./docs/rules/no-unsafe-assignment.md) | Disallow assigning a value with type `any` to variables and properties | :white_check_mark: | | :thought_balloon: | -| [`@typescript-eslint/no-unsafe-call`](./docs/rules/no-unsafe-call.md) | Disallow calling a value with type `any` | :white_check_mark: | | :thought_balloon: | -| [`@typescript-eslint/no-unsafe-member-access`](./docs/rules/no-unsafe-member-access.md) | Disallow member access on a value with type `any` | :white_check_mark: | | :thought_balloon: | -| [`@typescript-eslint/no-unsafe-return`](./docs/rules/no-unsafe-return.md) | Disallow returning a value with type `any` from a function | :white_check_mark: | | :thought_balloon: | -| [`@typescript-eslint/no-useless-empty-export`](./docs/rules/no-useless-empty-export.md) | Disallow empty exports that don't change anything in a module file | | :wrench: | | -| [`@typescript-eslint/no-var-requires`](./docs/rules/no-var-requires.md) | Disallow `require` statements except in import statements | :white_check_mark: | | | -| [`@typescript-eslint/non-nullable-type-assertion-style`](./docs/rules/non-nullable-type-assertion-style.md) | Enforce non-null assertions over explicit type casts | :lock: | :wrench: | :thought_balloon: | -| [`@typescript-eslint/parameter-properties`](./docs/rules/parameter-properties.md) | Require or disallow parameter properties in class constructors | | | | -| [`@typescript-eslint/prefer-as-const`](./docs/rules/prefer-as-const.md) | Enforce the use of `as const` over literal type | :white_check_mark: | :wrench: | | -| [`@typescript-eslint/prefer-enum-initializers`](./docs/rules/prefer-enum-initializers.md) | Require each enum member value to be explicitly initialized | | | | -| [`@typescript-eslint/prefer-for-of`](./docs/rules/prefer-for-of.md) | Enforce the use of `for-of` loop over the standard `for` loop where possible | :lock: | | | -| [`@typescript-eslint/prefer-function-type`](./docs/rules/prefer-function-type.md) | Enforce using function types instead of interfaces with call signatures | :lock: | :wrench: | | -| [`@typescript-eslint/prefer-includes`](./docs/rules/prefer-includes.md) | Enforce `includes` method over `indexOf` method | :lock: | :wrench: | :thought_balloon: | -| [`@typescript-eslint/prefer-literal-enum-member`](./docs/rules/prefer-literal-enum-member.md) | Require all enum members to be literal values | :lock: | | | -| [`@typescript-eslint/prefer-namespace-keyword`](./docs/rules/prefer-namespace-keyword.md) | Require using `namespace` keyword over `module` keyword to declare custom TypeScript modules | :white_check_mark: | :wrench: | | -| [`@typescript-eslint/prefer-nullish-coalescing`](./docs/rules/prefer-nullish-coalescing.md) | Enforce using the nullish coalescing operator instead of logical chaining | :lock: | | :thought_balloon: | -| [`@typescript-eslint/prefer-optional-chain`](./docs/rules/prefer-optional-chain.md) | Enforce using concise optional chain expressions instead of chained logical ands | :lock: | | | -| [`@typescript-eslint/prefer-readonly`](./docs/rules/prefer-readonly.md) | Require private members to be marked as `readonly` if they're never modified outside of the constructor | | :wrench: | :thought_balloon: | -| [`@typescript-eslint/prefer-readonly-parameter-types`](./docs/rules/prefer-readonly-parameter-types.md) | Require function parameters to be typed as `readonly` to prevent accidental mutation of inputs | | | :thought_balloon: | -| [`@typescript-eslint/prefer-reduce-type-parameter`](./docs/rules/prefer-reduce-type-parameter.md) | Enforce using type parameter when calling `Array#reduce` instead of casting | :lock: | :wrench: | :thought_balloon: | -| [`@typescript-eslint/prefer-regexp-exec`](./docs/rules/prefer-regexp-exec.md) | Enforce `RegExp#exec` over `String#match` if no global flag is provided | | :wrench: | :thought_balloon: | -| [`@typescript-eslint/prefer-return-this-type`](./docs/rules/prefer-return-this-type.md) | Enforce that `this` is used when only `this` type is returned | :lock: | :wrench: | :thought_balloon: | -| [`@typescript-eslint/prefer-string-starts-ends-with`](./docs/rules/prefer-string-starts-ends-with.md) | Enforce using `String#startsWith` and `String#endsWith` over other equivalent methods of checking substrings | :lock: | :wrench: | :thought_balloon: | -| [`@typescript-eslint/prefer-ts-expect-error`](./docs/rules/prefer-ts-expect-error.md) | Enforce using `@ts-expect-error` over `@ts-ignore` | :lock: | :wrench: | | -| [`@typescript-eslint/promise-function-async`](./docs/rules/promise-function-async.md) | Require any function or method that returns a Promise to be marked async | | :wrench: | :thought_balloon: | -| [`@typescript-eslint/require-array-sort-compare`](./docs/rules/require-array-sort-compare.md) | Require `Array#sort` calls to always provide a `compareFunction` | | | :thought_balloon: | -| [`@typescript-eslint/restrict-plus-operands`](./docs/rules/restrict-plus-operands.md) | Require both operands of addition to have type `number` or `string` | :white_check_mark: | | :thought_balloon: | -| [`@typescript-eslint/restrict-template-expressions`](./docs/rules/restrict-template-expressions.md) | Enforce template literal expressions to be of `string` type | :white_check_mark: | | :thought_balloon: | -| [`@typescript-eslint/sort-type-union-intersection-members`](./docs/rules/sort-type-union-intersection-members.md) | Enforce members of a type union/intersection to be sorted alphabetically | | :wrench: | | -| [`@typescript-eslint/strict-boolean-expressions`](./docs/rules/strict-boolean-expressions.md) | Disallow certain types in boolean expressions | | :wrench: | :thought_balloon: | -| [`@typescript-eslint/switch-exhaustiveness-check`](./docs/rules/switch-exhaustiveness-check.md) | Require switch-case statements to be exhaustive with union type | | | :thought_balloon: | -| [`@typescript-eslint/triple-slash-reference`](./docs/rules/triple-slash-reference.md) | Disallow certain triple slash directives in favor of ES6-style import declarations | :white_check_mark: | | | -| [`@typescript-eslint/type-annotation-spacing`](./docs/rules/type-annotation-spacing.md) | Require consistent spacing around type annotations | | :wrench: | | -| [`@typescript-eslint/typedef`](./docs/rules/typedef.md) | Require type annotations in certain places | | | | -| [`@typescript-eslint/unbound-method`](./docs/rules/unbound-method.md) | Enforce unbound methods are called with their expected scope | :white_check_mark: | | :thought_balloon: | -| [`@typescript-eslint/unified-signatures`](./docs/rules/unified-signatures.md) | Disallow two overloads that could be unified into one with a union or an optional/rest parameter | :lock: | | | - - - -### Extension Rules - -In some cases, ESLint provides a rule itself, but it doesn't support TypeScript syntax; either it crashes, or it ignores the syntax, or it falsely reports against it. -In these cases, we create what we call an extension rule; a rule within our plugin that has the same functionality, but also supports TypeScript. - - - -**Key**: :white_check_mark: = recommended, :lock: = strict, :wrench: = fixable, :thought_balloon: = requires type information - -| Name | Description | :white_check_mark::lock: | :wrench: | :thought_balloon: | -| ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ | ------------------------ | -------- | ----------------- | -| [`@typescript-eslint/brace-style`](./docs/rules/brace-style.md) | Enforce consistent brace style for blocks | | :wrench: | | -| [`@typescript-eslint/comma-dangle`](./docs/rules/comma-dangle.md) | Require or disallow trailing commas | | :wrench: | | -| [`@typescript-eslint/comma-spacing`](./docs/rules/comma-spacing.md) | Enforce consistent spacing before and after commas | | :wrench: | | -| [`@typescript-eslint/default-param-last`](./docs/rules/default-param-last.md) | Enforce default parameters to be last | | | | -| [`@typescript-eslint/dot-notation`](./docs/rules/dot-notation.md) | Enforce dot notation whenever possible | :lock: | :wrench: | :thought_balloon: | -| [`@typescript-eslint/func-call-spacing`](./docs/rules/func-call-spacing.md) | Require or disallow spacing between function identifiers and their invocations | | :wrench: | | -| [`@typescript-eslint/indent`](./docs/rules/indent.md) | Enforce consistent indentation | | :wrench: | | -| [`@typescript-eslint/init-declarations`](./docs/rules/init-declarations.md) | Require or disallow initialization in variable declarations | | | | -| [`@typescript-eslint/keyword-spacing`](./docs/rules/keyword-spacing.md) | Enforce consistent spacing before and after keywords | | :wrench: | | -| [`@typescript-eslint/lines-between-class-members`](./docs/rules/lines-between-class-members.md) | Require or disallow an empty line between class members | | :wrench: | | -| [`@typescript-eslint/no-array-constructor`](./docs/rules/no-array-constructor.md) | Disallow generic `Array` constructors | :white_check_mark: | :wrench: | | -| [`@typescript-eslint/no-dupe-class-members`](./docs/rules/no-dupe-class-members.md) | Disallow duplicate class members | | | | -| [`@typescript-eslint/no-empty-function`](./docs/rules/no-empty-function.md) | Disallow empty functions | :white_check_mark: | | | -| [`@typescript-eslint/no-extra-parens`](./docs/rules/no-extra-parens.md) | Disallow unnecessary parentheses | | :wrench: | | -| [`@typescript-eslint/no-extra-semi`](./docs/rules/no-extra-semi.md) | Disallow unnecessary semicolons | :white_check_mark: | :wrench: | | -| [`@typescript-eslint/no-implied-eval`](./docs/rules/no-implied-eval.md) | Disallow the use of `eval()`-like methods | :white_check_mark: | | :thought_balloon: | -| [`@typescript-eslint/no-invalid-this`](./docs/rules/no-invalid-this.md) | Disallow `this` keywords outside of classes or class-like objects | | | | -| [`@typescript-eslint/no-loop-func`](./docs/rules/no-loop-func.md) | Disallow function declarations that contain unsafe references inside loop statements | | | | -| [`@typescript-eslint/no-loss-of-precision`](./docs/rules/no-loss-of-precision.md) | Disallow literal numbers that lose precision | :white_check_mark: | | | -| [`@typescript-eslint/no-magic-numbers`](./docs/rules/no-magic-numbers.md) | Disallow magic numbers | | | | -| [`@typescript-eslint/no-redeclare`](./docs/rules/no-redeclare.md) | Disallow variable redeclaration | | | | -| [`@typescript-eslint/no-restricted-imports`](./docs/rules/no-restricted-imports.md) | Disallow specified modules when loaded by `import` | | | | -| [`@typescript-eslint/no-shadow`](./docs/rules/no-shadow.md) | Disallow variable declarations from shadowing variables declared in the outer scope | | | | -| [`@typescript-eslint/no-throw-literal`](./docs/rules/no-throw-literal.md) | Disallow throwing literals as exceptions | :lock: | | :thought_balloon: | -| [`@typescript-eslint/no-unused-expressions`](./docs/rules/no-unused-expressions.md) | Disallow unused expressions | | | | -| [`@typescript-eslint/no-unused-vars`](./docs/rules/no-unused-vars.md) | Disallow unused variables | :white_check_mark: | | | -| [`@typescript-eslint/no-use-before-define`](./docs/rules/no-use-before-define.md) | Disallow the use of variables before they are defined | | | | -| [`@typescript-eslint/no-useless-constructor`](./docs/rules/no-useless-constructor.md) | Disallow unnecessary constructors | :lock: | | | -| [`@typescript-eslint/object-curly-spacing`](./docs/rules/object-curly-spacing.md) | Enforce consistent spacing inside braces | | :wrench: | | -| [`@typescript-eslint/padding-line-between-statements`](./docs/rules/padding-line-between-statements.md) | Require or disallow padding lines between statements | | :wrench: | | -| [`@typescript-eslint/quotes`](./docs/rules/quotes.md) | Enforce the consistent use of either backticks, double, or single quotes | | :wrench: | | -| [`@typescript-eslint/require-await`](./docs/rules/require-await.md) | Disallow async functions which have no `await` expression | :white_check_mark: | | :thought_balloon: | -| [`@typescript-eslint/return-await`](./docs/rules/return-await.md) | Enforce consistent returning of awaited values | | :wrench: | :thought_balloon: | -| [`@typescript-eslint/semi`](./docs/rules/semi.md) | Require or disallow semicolons instead of ASI | | :wrench: | | -| [`@typescript-eslint/space-before-blocks`](./docs/rules/space-before-blocks.md) | Enforce consistent spacing before blocks | | :wrench: | | -| [`@typescript-eslint/space-before-function-paren`](./docs/rules/space-before-function-paren.md) | Enforce consistent spacing before function parenthesis | | :wrench: | | -| [`@typescript-eslint/space-infix-ops`](./docs/rules/space-infix-ops.md) | Require spacing around infix operators | | :wrench: | | - - +For the exhaustive list of supported rules, [please see our website](https://typescript-eslint.io/rules/). ## Contributing diff --git a/packages/eslint-plugin/docs/rules/README.md b/packages/eslint-plugin/docs/rules/README.md index 805f126f8228..7c6bd00d36df 100644 --- a/packages/eslint-plugin/docs/rules/README.md +++ b/packages/eslint-plugin/docs/rules/README.md @@ -11,149 +11,13 @@ See [Configs](/docs/linting/configs) for how to enable recommended rules using c ## Supported Rules - +import RulesTable from "@site/src/components/RulesTable"; -**Key**: :white_check_mark: = recommended, :lock: = strict, :wrench: = fixable, :thought_balloon: = requires type information - -| Name | Description | :white_check_mark::lock: | :wrench: | :thought_balloon: | -| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------ | -------- | ----------------- | -| [`@typescript-eslint/adjacent-overload-signatures`](./adjacent-overload-signatures.md) | Require that member overloads be consecutive | :white_check_mark: | | | -| [`@typescript-eslint/array-type`](./array-type.md) | Require using either `T[]` or `Array` for arrays | :lock: | :wrench: | | -| [`@typescript-eslint/await-thenable`](./await-thenable.md) | Disallow awaiting a value that is not a Thenable | :white_check_mark: | | :thought_balloon: | -| [`@typescript-eslint/ban-ts-comment`](./ban-ts-comment.md) | Disallow `@ts-` comments or require descriptions after directive | :white_check_mark: | | | -| [`@typescript-eslint/ban-tslint-comment`](./ban-tslint-comment.md) | Disallow `// tslint:` comments | :lock: | :wrench: | | -| [`@typescript-eslint/ban-types`](./ban-types.md) | Disallow certain types | :white_check_mark: | :wrench: | | -| [`@typescript-eslint/class-literal-property-style`](./class-literal-property-style.md) | Enforce that literals on classes are exposed in a consistent style | :lock: | :wrench: | | -| [`@typescript-eslint/consistent-generic-constructors`](./consistent-generic-constructors.md) | Enforce specifying generic type arguments on type annotation or constructor name of a constructor call | :lock: | :wrench: | | -| [`@typescript-eslint/consistent-indexed-object-style`](./consistent-indexed-object-style.md) | Require or disallow the `Record` type | :lock: | :wrench: | | -| [`@typescript-eslint/consistent-type-assertions`](./consistent-type-assertions.md) | Enforce consistent usage of type assertions | :lock: | | | -| [`@typescript-eslint/consistent-type-definitions`](./consistent-type-definitions.md) | Enforce type definitions to consistently use either `interface` or `type` | :lock: | :wrench: | | -| [`@typescript-eslint/consistent-type-exports`](./consistent-type-exports.md) | Enforce consistent usage of type exports | | :wrench: | :thought_balloon: | -| [`@typescript-eslint/consistent-type-imports`](./consistent-type-imports.md) | Enforce consistent usage of type imports | | :wrench: | | -| [`@typescript-eslint/explicit-function-return-type`](./explicit-function-return-type.md) | Require explicit return types on functions and class methods | | | | -| [`@typescript-eslint/explicit-member-accessibility`](./explicit-member-accessibility.md) | Require explicit accessibility modifiers on class properties and methods | | :wrench: | | -| [`@typescript-eslint/explicit-module-boundary-types`](./explicit-module-boundary-types.md) | Require explicit return and argument types on exported functions' and classes' public class methods | | | | -| [`@typescript-eslint/member-delimiter-style`](./member-delimiter-style.md) | Require a specific member delimiter style for interfaces and type literals | | :wrench: | | -| [`@typescript-eslint/member-ordering`](./member-ordering.md) | Require a consistent member declaration order | | | | -| [`@typescript-eslint/method-signature-style`](./method-signature-style.md) | Enforce using a particular method signature syntax | | :wrench: | | -| [`@typescript-eslint/naming-convention`](./naming-convention.md) | Enforce naming conventions for everything across a codebase | | | :thought_balloon: | -| [`@typescript-eslint/no-base-to-string`](./no-base-to-string.md) | Require `.toString()` to only be called on objects which provide useful information when stringified | :lock: | | :thought_balloon: | -| [`@typescript-eslint/no-confusing-non-null-assertion`](./no-confusing-non-null-assertion.md) | Disallow non-null assertion in locations that may be confusing | :lock: | :wrench: | | -| [`@typescript-eslint/no-confusing-void-expression`](./no-confusing-void-expression.md) | Require expressions of type void to appear in statement position | | :wrench: | :thought_balloon: | -| [`@typescript-eslint/no-duplicate-enum-values`](./no-duplicate-enum-values.md) | Disallow duplicate enum member values | :lock: | | | -| [`@typescript-eslint/no-dynamic-delete`](./no-dynamic-delete.md) | Disallow using the `delete` operator on computed key expressions | :lock: | :wrench: | | -| [`@typescript-eslint/no-empty-interface`](./no-empty-interface.md) | Disallow the declaration of empty interfaces | :white_check_mark: | :wrench: | | -| [`@typescript-eslint/no-explicit-any`](./no-explicit-any.md) | Disallow the `any` type | :white_check_mark: | :wrench: | | -| [`@typescript-eslint/no-extra-non-null-assertion`](./no-extra-non-null-assertion.md) | Disallow extra non-null assertion | :white_check_mark: | :wrench: | | -| [`@typescript-eslint/no-extraneous-class`](./no-extraneous-class.md) | Disallow classes used as namespaces | :lock: | | | -| [`@typescript-eslint/no-floating-promises`](./no-floating-promises.md) | Require Promise-like statements to be handled appropriately | :white_check_mark: | | :thought_balloon: | -| [`@typescript-eslint/no-for-in-array`](./no-for-in-array.md) | Disallow iterating over an array with a for-in loop | :white_check_mark: | | :thought_balloon: | -| [`@typescript-eslint/no-inferrable-types`](./no-inferrable-types.md) | Disallow explicit type declarations for variables or parameters initialized to a number, string, or boolean | :white_check_mark: | :wrench: | | -| [`@typescript-eslint/no-invalid-void-type`](./no-invalid-void-type.md) | Disallow `void` type outside of generic or return types | :lock: | | | -| [`@typescript-eslint/no-meaningless-void-operator`](./no-meaningless-void-operator.md) | Disallow the `void` operator except when used to discard a value | :lock: | :wrench: | :thought_balloon: | -| [`@typescript-eslint/no-misused-new`](./no-misused-new.md) | Enforce valid definition of `new` and `constructor` | :white_check_mark: | | | -| [`@typescript-eslint/no-misused-promises`](./no-misused-promises.md) | Disallow Promises in places not designed to handle them | :white_check_mark: | | :thought_balloon: | -| [`@typescript-eslint/no-namespace`](./no-namespace.md) | Disallow custom TypeScript modules and namespaces | :white_check_mark: | | | -| [`@typescript-eslint/no-non-null-asserted-nullish-coalescing`](./no-non-null-asserted-nullish-coalescing.md) | Disallow non-null assertions in the left operand of a nullish coalescing operator | :lock: | | | -| [`@typescript-eslint/no-non-null-asserted-optional-chain`](./no-non-null-asserted-optional-chain.md) | Disallow non-null assertions after an optional chain expression | :white_check_mark: | | | -| [`@typescript-eslint/no-non-null-assertion`](./no-non-null-assertion.md) | Disallow non-null assertions using the `!` postfix operator | :white_check_mark: | | | -| [`@typescript-eslint/no-redundant-type-constituents`](./no-redundant-type-constituents.md) | Disallow members of unions and intersections that do nothing or override type information | | | :thought_balloon: | -| [`@typescript-eslint/no-require-imports`](./no-require-imports.md) | Disallow invocation of `require()` | | | | -| [`@typescript-eslint/no-this-alias`](./no-this-alias.md) | Disallow aliasing `this` | :white_check_mark: | | | -| [`@typescript-eslint/no-type-alias`](./no-type-alias.md) | Disallow type aliases | | | | -| [`@typescript-eslint/no-unnecessary-boolean-literal-compare`](./no-unnecessary-boolean-literal-compare.md) | Disallow unnecessary equality comparisons against boolean literals | :lock: | :wrench: | :thought_balloon: | -| [`@typescript-eslint/no-unnecessary-condition`](./no-unnecessary-condition.md) | Disallow conditionals where the type is always truthy or always falsy | :lock: | :wrench: | :thought_balloon: | -| [`@typescript-eslint/no-unnecessary-qualifier`](./no-unnecessary-qualifier.md) | Disallow unnecessary namespace qualifiers | | :wrench: | :thought_balloon: | -| [`@typescript-eslint/no-unnecessary-type-arguments`](./no-unnecessary-type-arguments.md) | Disallow type arguments that are equal to the default | :lock: | :wrench: | :thought_balloon: | -| [`@typescript-eslint/no-unnecessary-type-assertion`](./no-unnecessary-type-assertion.md) | Disallow type assertions that do not change the type of an expression | :white_check_mark: | :wrench: | :thought_balloon: | -| [`@typescript-eslint/no-unnecessary-type-constraint`](./no-unnecessary-type-constraint.md) | Disallow unnecessary constraints on generic types | :white_check_mark: | | | -| [`@typescript-eslint/no-unsafe-argument`](./no-unsafe-argument.md) | Disallow calling a function with a value with type `any` | :white_check_mark: | | :thought_balloon: | -| [`@typescript-eslint/no-unsafe-assignment`](./no-unsafe-assignment.md) | Disallow assigning a value with type `any` to variables and properties | :white_check_mark: | | :thought_balloon: | -| [`@typescript-eslint/no-unsafe-call`](./no-unsafe-call.md) | Disallow calling a value with type `any` | :white_check_mark: | | :thought_balloon: | -| [`@typescript-eslint/no-unsafe-member-access`](./no-unsafe-member-access.md) | Disallow member access on a value with type `any` | :white_check_mark: | | :thought_balloon: | -| [`@typescript-eslint/no-unsafe-return`](./no-unsafe-return.md) | Disallow returning a value with type `any` from a function | :white_check_mark: | | :thought_balloon: | -| [`@typescript-eslint/no-useless-empty-export`](./no-useless-empty-export.md) | Disallow empty exports that don't change anything in a module file | | :wrench: | | -| [`@typescript-eslint/no-var-requires`](./no-var-requires.md) | Disallow `require` statements except in import statements | :white_check_mark: | | | -| [`@typescript-eslint/non-nullable-type-assertion-style`](./non-nullable-type-assertion-style.md) | Enforce non-null assertions over explicit type casts | :lock: | :wrench: | :thought_balloon: | -| [`@typescript-eslint/parameter-properties`](./parameter-properties.md) | Require or disallow parameter properties in class constructors | | | | -| [`@typescript-eslint/prefer-as-const`](./prefer-as-const.md) | Enforce the use of `as const` over literal type | :white_check_mark: | :wrench: | | -| [`@typescript-eslint/prefer-enum-initializers`](./prefer-enum-initializers.md) | Require each enum member value to be explicitly initialized | | | | -| [`@typescript-eslint/prefer-for-of`](./prefer-for-of.md) | Enforce the use of `for-of` loop over the standard `for` loop where possible | :lock: | | | -| [`@typescript-eslint/prefer-function-type`](./prefer-function-type.md) | Enforce using function types instead of interfaces with call signatures | :lock: | :wrench: | | -| [`@typescript-eslint/prefer-includes`](./prefer-includes.md) | Enforce `includes` method over `indexOf` method | :lock: | :wrench: | :thought_balloon: | -| [`@typescript-eslint/prefer-literal-enum-member`](./prefer-literal-enum-member.md) | Require all enum members to be literal values | :lock: | | | -| [`@typescript-eslint/prefer-namespace-keyword`](./prefer-namespace-keyword.md) | Require using `namespace` keyword over `module` keyword to declare custom TypeScript modules | :white_check_mark: | :wrench: | | -| [`@typescript-eslint/prefer-nullish-coalescing`](./prefer-nullish-coalescing.md) | Enforce using the nullish coalescing operator instead of logical chaining | :lock: | | :thought_balloon: | -| [`@typescript-eslint/prefer-optional-chain`](./prefer-optional-chain.md) | Enforce using concise optional chain expressions instead of chained logical ands | :lock: | | | -| [`@typescript-eslint/prefer-readonly`](./prefer-readonly.md) | Require private members to be marked as `readonly` if they're never modified outside of the constructor | | :wrench: | :thought_balloon: | -| [`@typescript-eslint/prefer-readonly-parameter-types`](./prefer-readonly-parameter-types.md) | Require function parameters to be typed as `readonly` to prevent accidental mutation of inputs | | | :thought_balloon: | -| [`@typescript-eslint/prefer-reduce-type-parameter`](./prefer-reduce-type-parameter.md) | Enforce using type parameter when calling `Array#reduce` instead of casting | :lock: | :wrench: | :thought_balloon: | -| [`@typescript-eslint/prefer-regexp-exec`](./prefer-regexp-exec.md) | Enforce `RegExp#exec` over `String#match` if no global flag is provided | | :wrench: | :thought_balloon: | -| [`@typescript-eslint/prefer-return-this-type`](./prefer-return-this-type.md) | Enforce that `this` is used when only `this` type is returned | :lock: | :wrench: | :thought_balloon: | -| [`@typescript-eslint/prefer-string-starts-ends-with`](./prefer-string-starts-ends-with.md) | Enforce using `String#startsWith` and `String#endsWith` over other equivalent methods of checking substrings | :lock: | :wrench: | :thought_balloon: | -| [`@typescript-eslint/prefer-ts-expect-error`](./prefer-ts-expect-error.md) | Enforce using `@ts-expect-error` over `@ts-ignore` | :lock: | :wrench: | | -| [`@typescript-eslint/promise-function-async`](./promise-function-async.md) | Require any function or method that returns a Promise to be marked async | | :wrench: | :thought_balloon: | -| [`@typescript-eslint/require-array-sort-compare`](./require-array-sort-compare.md) | Require `Array#sort` calls to always provide a `compareFunction` | | | :thought_balloon: | -| [`@typescript-eslint/restrict-plus-operands`](./restrict-plus-operands.md) | Require both operands of addition to have type `number` or `string` | :white_check_mark: | | :thought_balloon: | -| [`@typescript-eslint/restrict-template-expressions`](./restrict-template-expressions.md) | Enforce template literal expressions to be of `string` type | :white_check_mark: | | :thought_balloon: | -| [`@typescript-eslint/sort-type-union-intersection-members`](./sort-type-union-intersection-members.md) | Enforce members of a type union/intersection to be sorted alphabetically | | :wrench: | | -| [`@typescript-eslint/strict-boolean-expressions`](./strict-boolean-expressions.md) | Disallow certain types in boolean expressions | | :wrench: | :thought_balloon: | -| [`@typescript-eslint/switch-exhaustiveness-check`](./switch-exhaustiveness-check.md) | Require switch-case statements to be exhaustive with union type | | | :thought_balloon: | -| [`@typescript-eslint/triple-slash-reference`](./triple-slash-reference.md) | Disallow certain triple slash directives in favor of ES6-style import declarations | :white_check_mark: | | | -| [`@typescript-eslint/type-annotation-spacing`](./type-annotation-spacing.md) | Require consistent spacing around type annotations | | :wrench: | | -| [`@typescript-eslint/typedef`](./typedef.md) | Require type annotations in certain places | | | | -| [`@typescript-eslint/unbound-method`](./unbound-method.md) | Enforce unbound methods are called with their expected scope | :white_check_mark: | | :thought_balloon: | -| [`@typescript-eslint/unified-signatures`](./unified-signatures.md) | Disallow two overloads that could be unified into one with a union or an optional/rest parameter | :lock: | | | - - + ## Extension Rules In some cases, ESLint provides a rule itself, but it doesn't support TypeScript syntax; either it crashes, or it ignores the syntax, or it falsely reports against it. In these cases, we create what we call an extension rule; a rule within our plugin that has the same functionality, but also supports TypeScript. - - -**Key**: :white_check_mark: = recommended, :lock: = strict, :wrench: = fixable, :thought_balloon: = requires type information - -| Name | Description | :white_check_mark::lock: | :wrench: | :thought_balloon: | -| -------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ | ------------------------ | -------- | ----------------- | -| [`@typescript-eslint/brace-style`](./brace-style.md) | Enforce consistent brace style for blocks | | :wrench: | | -| [`@typescript-eslint/comma-dangle`](./comma-dangle.md) | Require or disallow trailing commas | | :wrench: | | -| [`@typescript-eslint/comma-spacing`](./comma-spacing.md) | Enforce consistent spacing before and after commas | | :wrench: | | -| [`@typescript-eslint/default-param-last`](./default-param-last.md) | Enforce default parameters to be last | | | | -| [`@typescript-eslint/dot-notation`](./dot-notation.md) | Enforce dot notation whenever possible | :lock: | :wrench: | :thought_balloon: | -| [`@typescript-eslint/func-call-spacing`](./func-call-spacing.md) | Require or disallow spacing between function identifiers and their invocations | | :wrench: | | -| [`@typescript-eslint/indent`](./indent.md) | Enforce consistent indentation | | :wrench: | | -| [`@typescript-eslint/init-declarations`](./init-declarations.md) | Require or disallow initialization in variable declarations | | | | -| [`@typescript-eslint/keyword-spacing`](./keyword-spacing.md) | Enforce consistent spacing before and after keywords | | :wrench: | | -| [`@typescript-eslint/lines-between-class-members`](./lines-between-class-members.md) | Require or disallow an empty line between class members | | :wrench: | | -| [`@typescript-eslint/no-array-constructor`](./no-array-constructor.md) | Disallow generic `Array` constructors | :white_check_mark: | :wrench: | | -| [`@typescript-eslint/no-dupe-class-members`](./no-dupe-class-members.md) | Disallow duplicate class members | | | | -| [`@typescript-eslint/no-empty-function`](./no-empty-function.md) | Disallow empty functions | :white_check_mark: | | | -| [`@typescript-eslint/no-extra-parens`](./no-extra-parens.md) | Disallow unnecessary parentheses | | :wrench: | | -| [`@typescript-eslint/no-extra-semi`](./no-extra-semi.md) | Disallow unnecessary semicolons | :white_check_mark: | :wrench: | | -| [`@typescript-eslint/no-implied-eval`](./no-implied-eval.md) | Disallow the use of `eval()`-like methods | :white_check_mark: | | :thought_balloon: | -| [`@typescript-eslint/no-invalid-this`](./no-invalid-this.md) | Disallow `this` keywords outside of classes or class-like objects | | | | -| [`@typescript-eslint/no-loop-func`](./no-loop-func.md) | Disallow function declarations that contain unsafe references inside loop statements | | | | -| [`@typescript-eslint/no-loss-of-precision`](./no-loss-of-precision.md) | Disallow literal numbers that lose precision | :white_check_mark: | | | -| [`@typescript-eslint/no-magic-numbers`](./no-magic-numbers.md) | Disallow magic numbers | | | | -| [`@typescript-eslint/no-redeclare`](./no-redeclare.md) | Disallow variable redeclaration | | | | -| [`@typescript-eslint/no-restricted-imports`](./no-restricted-imports.md) | Disallow specified modules when loaded by `import` | | | | -| [`@typescript-eslint/no-shadow`](./no-shadow.md) | Disallow variable declarations from shadowing variables declared in the outer scope | | | | -| [`@typescript-eslint/no-throw-literal`](./no-throw-literal.md) | Disallow throwing literals as exceptions | :lock: | | :thought_balloon: | -| [`@typescript-eslint/no-unused-expressions`](./no-unused-expressions.md) | Disallow unused expressions | | | | -| [`@typescript-eslint/no-unused-vars`](./no-unused-vars.md) | Disallow unused variables | :white_check_mark: | | | -| [`@typescript-eslint/no-use-before-define`](./no-use-before-define.md) | Disallow the use of variables before they are defined | | | | -| [`@typescript-eslint/no-useless-constructor`](./no-useless-constructor.md) | Disallow unnecessary constructors | :lock: | | | -| [`@typescript-eslint/object-curly-spacing`](./object-curly-spacing.md) | Enforce consistent spacing inside braces | | :wrench: | | -| [`@typescript-eslint/padding-line-between-statements`](./padding-line-between-statements.md) | Require or disallow padding lines between statements | | :wrench: | | -| [`@typescript-eslint/quotes`](./quotes.md) | Enforce the consistent use of either backticks, double, or single quotes | | :wrench: | | -| [`@typescript-eslint/require-await`](./require-await.md) | Disallow async functions which have no `await` expression | :white_check_mark: | | :thought_balloon: | -| [`@typescript-eslint/return-await`](./return-await.md) | Enforce consistent returning of awaited values | | :wrench: | :thought_balloon: | -| [`@typescript-eslint/semi`](./semi.md) | Require or disallow semicolons instead of ASI | | :wrench: | | -| [`@typescript-eslint/space-before-blocks`](./space-before-blocks.md) | Enforce consistent spacing before blocks | | :wrench: | | -| [`@typescript-eslint/space-before-function-paren`](./space-before-function-paren.md) | Enforce consistent spacing before function parenthesis | | :wrench: | | -| [`@typescript-eslint/space-infix-ops`](./space-infix-ops.md) | Require spacing around infix operators | | :wrench: | | - - + diff --git a/packages/eslint-plugin/tests/docs.test.ts b/packages/eslint-plugin/tests/docs.test.ts index efb5edd4f2bf..13262e4ce73c 100644 --- a/packages/eslint-plugin/tests/docs.test.ts +++ b/packages/eslint-plugin/tests/docs.test.ts @@ -9,12 +9,6 @@ import { titleCase } from 'title-case'; const docsRoot = path.resolve(__dirname, '../docs/rules'); const rulesData = Object.entries(rules); -function createRuleLink(ruleName: string, readmePath: string): string { - return `[\`@typescript-eslint/${ruleName}\`](${ - readmePath.includes('docs/rules') ? '.' : './docs/rules' - }/${ruleName}.md)`; -} - function parseMarkdownFile(filePath: string): marked.TokensList { const file = fs.readFileSync(filePath, 'utf-8'); @@ -24,27 +18,6 @@ function parseMarkdownFile(filePath: string): marked.TokensList { }); } -function parseReadme(readmePath: string): { - base: marked.Tokens.Table; - extension: marked.Tokens.Table; -} { - const readme = parseMarkdownFile(readmePath); - - // find the table - const rulesTables = readme.filter( - (token): token is marked.Tokens.Table => - 'type' in token && token.type === 'table', - ); - if (rulesTables.length !== 2) { - throw Error('Could not find both rules tables in README.md'); - } - - return { - base: rulesTables[0], - extension: rulesTables[1], - }; -} - function isEmptySchema(schema: JSONSchema4 | JSONSchema4[]): boolean { return Array.isArray(schema) ? schema.length === 0 @@ -207,87 +180,3 @@ describe('Validating rule metadata', () => { }); } }); - -describe.each([ - path.join(__dirname, '../README.md'), - path.join(__dirname, '../docs/rules/README.md'), -])('%s', readmePath => { - const rulesTables = parseReadme(readmePath); - const notDeprecated = rulesData.filter(([, rule]) => !rule.meta.deprecated); - const baseRules = notDeprecated.filter( - ([, rule]) => !rule.meta.docs?.extendsBaseRule, - ); - const extensionRules = notDeprecated.filter( - ([, rule]) => rule.meta.docs?.extendsBaseRule, - ); - - it('All non-deprecated base rules should have a row in the base rules table, and the table should be ordered alphabetically', () => { - const baseRuleNames = baseRules - .map(([ruleName]) => ruleName) - .sort() - .map(ruleName => createRuleLink(ruleName, readmePath)); - - expect(rulesTables.base.rows.map(row => row[0].text)).toStrictEqual( - baseRuleNames, - ); - }); - it('All non-deprecated extension rules should have a row in the base rules table, and the table should be ordered alphabetically', () => { - const extensionRuleNames = extensionRules - .map(([ruleName]) => ruleName) - .sort() - .map(ruleName => createRuleLink(ruleName, readmePath)); - - expect(rulesTables.extension.rows.map(row => row[0].text)).toStrictEqual( - extensionRuleNames, - ); - }); - - for (const [ruleName, rule] of notDeprecated) { - describe(`Checking rule ${ruleName}`, () => { - const ruleRow: string[] | undefined = ( - rule.meta.docs?.extendsBaseRule - ? rulesTables.extension.rows - : rulesTables.base.rows - ) - .find(row => row[0].text.includes(`/${ruleName}.md`)) - ?.map(cell => cell.text); - if (!ruleRow) { - // rule is in the wrong table, the first two tests will catch this, so no point in creating noise; - // these tests will ofc fail in that case - return; - } - - it('Link column should be correct', () => { - expect(ruleRow[0]).toBe(createRuleLink(ruleName, readmePath)); - }); - - it('Description column should be correct', () => { - expect(ruleRow[1]).toBe(rule.meta.docs?.description); - }); - - it('Recommended column should be correct', () => { - expect(ruleRow[2]).toBe( - rule.meta.docs?.recommended === 'strict' - ? ':lock:' - : rule.meta.docs?.recommended - ? ':white_check_mark:' - : '', - ); - }); - - it('Fixable column should be correct', () => { - expect(ruleRow[3]).toBe( - rule.meta.fixable !== undefined ? ':wrench:' : '', - ); - }); - - it('Requiring type information column should be correct', () => { - expect(ruleRow[4]).toBe( - rule.meta.docs?.requiresTypeChecking === true - ? ':thought_balloon:' - : '', - ); - }); - }); - } -}); diff --git a/packages/website/docusaurusConfig.ts b/packages/website/docusaurusConfig.ts index ed8d4deaa0cf..c91f2d3e7aca 100644 --- a/packages/website/docusaurusConfig.ts +++ b/packages/website/docusaurusConfig.ts @@ -5,6 +5,7 @@ import type { UserThemeConfig as ThemeCommonConfig } from '@docusaurus/theme-com import type { UserThemeConfig as AlgoliaThemeConfig } from '@docusaurus/theme-search-algolia'; import type { Config } from '@docusaurus/types'; +import { rulesMeta } from './rulesMeta'; import npm2yarnPlugin from '@docusaurus/remark-plugin-npm2yarn'; import tabsPlugin from 'remark-docusaurus-tabs'; import { addRuleAttributesList } from './plugins/add-rule-attributes-list'; @@ -175,6 +176,9 @@ const config: Config = { projectName: 'typescript-eslint', clientModules: [require.resolve('./src/clientModules.js')], presets: [['classic', presetClassicOptions]], + customFields: { + rules: rulesMeta, + }, plugins: [ require.resolve('./webpack.plugin'), ['@docusaurus/plugin-content-docs', pluginContentDocsOptions], diff --git a/packages/website/plugins/add-rule-attributes-list.ts b/packages/website/plugins/add-rule-attributes-list.ts index 381ca2638a6b..febbfc355576 100644 --- a/packages/website/plugins/add-rule-attributes-list.ts +++ b/packages/website/plugins/add-rule-attributes-list.ts @@ -1,3 +1,4 @@ +import type * as unist from 'unist'; import type * as mdast from 'mdast'; import type { Plugin } from 'unified'; @@ -13,191 +14,25 @@ const addRuleAttributesList: Plugin = () => { if (rule == null) { return; } - const config = ((): 'recommended' | 'strict' | null => { - switch (rule.meta.docs?.recommended) { - case 'error': - case 'warn': - return 'recommended'; - - case 'strict': - return 'strict'; - - default: - return null; - } - })(); - const autoFixable = rule.meta.fixable != null; - const suggestionFixable = rule.meta.hasSuggestions === true; - const requiresTypeInfo = rule.meta.docs?.requiresTypeChecking === true; - - const parent = root as mdast.Parent; - /* - This just outputs a list with a heading like: - -## Attributes - -- [ ] Config - - [ ] ✅ Recommended - - [ ] 🔒 Strict -- [ ] Fixable - - [ ] 🔧 Automated Fixer (`--fix`) - - [ ] 🛠 Suggestion Fixer -- [ ] 💭 Requires type information - */ - const heading = Heading({ - depth: 2, - text: 'Attributes', - }); - const ruleAttributes = List({ - children: [ - NestedList({ - checked: config != null, - children: [ - ListItem({ - checked: config === 'recommended', - text: '✅ Recommended', - }), - ListItem({ - checked: config === 'strict' || config === 'recommended', - text: '🔒 Strict', - }), - ], - text: 'Included in configs', - }), - NestedList({ - checked: autoFixable || suggestionFixable, - children: [ - ListItem({ - checked: autoFixable, - text: '🔧 Automated Fixer', - }), - ListItem({ - checked: suggestionFixable, - text: '🛠 Suggestion Fixer', - }), - ], - text: 'Fixable', - }), - ListItem({ - checked: requiresTypeInfo, - text: '💭 Requires type information', - }), - ], - }); + const parent = root as unist.Parent; const h2Idx = parent.children.findIndex( - child => child.type === 'heading' && child.depth === 2, + child => child.type === 'heading' && (child as mdast.Heading).depth === 2, ); + // The actual content will be injected on client side. + const attrNode = { + type: 'jsx', + value: ``, + }; if (h2Idx != null) { // insert it just before the first h2 in the doc // this should be just after the rule's description - parent.children.splice(h2Idx, 0, heading, ruleAttributes); + parent.children.splice(h2Idx, 0, attrNode); } else { // failing that, add it to the end - parent.children.push(heading, ruleAttributes); + parent.children.push(attrNode); } }; }; -function Heading({ - depth, - text, - id = text.toLowerCase(), -}: { - depth: mdast.Heading['depth']; - id?: string; - text: string; -}): mdast.Heading { - return { - type: 'heading', - depth, - children: [ - { - type: 'text', - value: text, - }, - ], - data: { - hProperties: { - id, - }, - id, - }, - }; -} - -function Paragraph({ text }: { text: string }): mdast.Paragraph { - return { - type: 'paragraph', - children: [ - { - type: 'text', - value: text, - }, - ], - }; -} - -function ListItem({ - checked, - text, -}: { - checked: boolean; - text: string; -}): mdast.ListItem { - return { - type: 'listItem', - spread: false, - checked: checked, - children: [ - { - type: 'paragraph', - children: [ - { - type: 'text', - value: text, - }, - ], - }, - ], - }; -} - -function NestedList({ - children, - checked, - text, -}: { - children: mdast.ListItem[]; - checked: boolean; - text: string; -}): mdast.ListItem { - return { - type: 'listItem', - spread: false, - checked: checked, - children: [ - Paragraph({ - text, - }), - List({ - children, - }), - ], - data: { - className: 'test', - }, - }; -} - -function List({ children }: { children: mdast.ListItem[] }): mdast.List { - return { - type: 'list', - ordered: false, - start: null, - spread: false, - children, - }; -} - export { addRuleAttributesList }; diff --git a/packages/website/rulesMeta.ts b/packages/website/rulesMeta.ts new file mode 100644 index 000000000000..8aa5f317469f --- /dev/null +++ b/packages/website/rulesMeta.ts @@ -0,0 +1,15 @@ +import * as eslintPlugin from '@typescript-eslint/eslint-plugin'; + +export const rulesMeta = Object.entries(eslintPlugin.rules).map( + ([name, content]) => ({ + name, + type: content.meta.type, + docs: content.meta.docs, + fixable: content.meta.fixable, + hasSuggestions: content.meta.hasSuggestions, + deprecated: content.meta.deprecated, + replacedBy: content.meta.replacedBy, + }), +); + +export type RulesMeta = typeof rulesMeta; diff --git a/packages/website/src/components/RulesTable/index.tsx b/packages/website/src/components/RulesTable/index.tsx new file mode 100644 index 000000000000..6629637a44b4 --- /dev/null +++ b/packages/website/src/components/RulesTable/index.tsx @@ -0,0 +1,196 @@ +import React, { useState, useMemo } from 'react'; +import clsx from 'clsx'; +import Link from '@docusaurus/Link'; +import { useRulesMeta } from '@site/src/hooks/useRulesMeta'; +import type { RulesMeta } from '@site/rulesMeta'; + +import styles from './styles.module.css'; + +function interpolateCode(text: string): (JSX.Element | string)[] | string { + const fragments = text.split(/`(.*?)`/); + if (fragments.length === 1) { + return text; + } + return fragments.map((v, i) => (i % 2 === 0 ? v : {v})); +} + +function RuleRow({ rule }: { rule: RulesMeta[number] }): JSX.Element | null { + if (!rule.docs || !rule.docs.url) { + return null; + } + return ( + + + + @typescript-eslint/{rule.name} + +
+ {interpolateCode(rule.docs.description)} + + + {rule.docs.recommended === 'strict' + ? '🔒' + : rule.docs.recommended + ? '✅' + : ''} + + + {rule.fixable ? '🔧\n' : '\n'} + {rule.hasSuggestions ? '🛠' : ''} + + + {rule.docs.requiresTypeChecking ? '💭' : ''} + + + ); +} + +const filterModes = ['neutral', 'include', 'exclude'] as const; +type FilterMode = typeof filterModes[number]; + +function RuleFilterCheckBox({ + label, + setMode, + mode, +}: { + label: string; + setMode: (mode: FilterMode) => void; + mode: FilterMode; +}): JSX.Element { + const toNextMode = (): void => + setMode(filterModes[(filterModes.indexOf(mode) + 1) % filterModes.length]); + return ( +
  • + +
  • + ); +} + +function match(mode: FilterMode, value: boolean): boolean | undefined { + if (mode === 'exclude') { + return !value; + } + if (mode === 'include') { + return value; + } + return undefined; +} + +export default function RulesTable({ + extensionRules, +}: { + extensionRules?: boolean; +}): JSX.Element { + const rules = useRulesMeta(); + const [showRecommended, setShowRecommended] = useState('neutral'); + const [showStrict, setShowStrict] = useState('neutral'); + const [showFixable, setShowFixable] = useState('neutral'); + const [showHasSuggestions, setShowHasSuggestion] = + useState('neutral'); + const [showTypeCheck, setShowTypeCheck] = useState('neutral'); + const relevantRules = useMemo( + () => + rules + .filter(r => !!extensionRules === !!r.docs?.extendsBaseRule) + .filter(r => { + const opinions = [ + match( + showRecommended, + r.docs?.recommended === 'error' || r.docs?.recommended === 'warn', + ), + match(showStrict, r.docs?.recommended === 'strict'), + match(showFixable, !!r.fixable), + match(showHasSuggestions, !!r.hasSuggestions), + match(showTypeCheck, !!r.docs?.requiresTypeChecking), + ].filter((o): o is boolean => o !== undefined); + return opinions.every(o => o); + }), + [ + rules, + extensionRules, + showRecommended, + showStrict, + showFixable, + showHasSuggestions, + showTypeCheck, + ], + ); + return ( + <> +
      + { + setShowRecommended(newMode); + + if (newMode === 'include' && showStrict === 'include') { + setShowStrict('exclude'); + } + }} + label="✅ recommended" + /> + { + setShowStrict(newMode); + + if (newMode === 'include' && showRecommended === 'include') { + setShowRecommended('exclude'); + } + }} + label="🔒 strict" + /> + + + +
    + + + + + + + + + + + {relevantRules.map(rule => ( + + ))} + +
    Rule✅{'\n'}🔒🔧{'\n'}🛠💭
    + + ); +} diff --git a/packages/website/src/components/RulesTable/styles.module.css b/packages/website/src/components/RulesTable/styles.module.css new file mode 100644 index 000000000000..6e2cc5ac27e3 --- /dev/null +++ b/packages/website/src/components/RulesTable/styles.module.css @@ -0,0 +1,119 @@ +:root { + --gray-border: var(--ifm-color-secondary-dark); + --gray-border-shadow: var(--ifm-color-secondary-dark); + --blue-bg: rgba(148, 197, 225, 0.25); + --blue-border: var(--ifm-color-primary-lighter); + --blue-border-shadow: var(--ifm-color-primary-lightest); + --red-bg: rgba(250, 56, 62, 0.25); + --red-border: rgba(198, 10, 10, 0.4); + --red-border-shadow: rgba(255, 0, 0, 0.4); +} + +[data-theme='dark'] { + --gray-border-shadow: var(--ifm-color-secondary); + --blue-bg: rgba(35, 78, 128, 0.5); + --blue-border: var(--ifm-color-primary-dark); + --red-border: rgba(255, 0, 0, 0.3); + --red-border-shadow: rgb(235, 107, 107); +} + +.checkboxList { + flex-wrap: wrap; +} + +.checkboxListItem { + user-select: none; + white-space: nowrap; + height: 32px; + font-size: 0.8rem; + margin-top: 0.5rem; + display: inline-flex; + margin-right: 0.5rem; +} + +.checkboxListItem:last-child { + margin-right: 0; +} + +.checkboxLabel { + display: flex; + align-items: center; + cursor: pointer; + line-height: 1.5; + border-radius: 4px; + padding: 0.275rem 0.8rem; + opacity: 0.85; + transition: opacity 200ms ease-out; + border: 2px solid var(--gray-border); + background-color: var(--ifm-background-color); +} + +[data-theme='dark'] .checkboxLabel { + border: 2px solid #666666; +} + +.checkboxLabel:hover { + opacity: 1; + box-shadow: 0 0 2px 1px var(--gray-border-shadow); +} + +[data-theme='dark'] .checkboxLabel:hover { + box-shadow: 0 0 2px 0 var(--gray-border-shadow); +} + +.checkboxLabel:focus-visible { + outline: 2px solid currentColor; +} + +.checkboxLabel.activated { + opacity: 0.9; + background-color: var(--blue-bg); + border: 2px solid var(--blue-border); +} + +.checkboxLabel.activated:hover { + opacity: 0.75; + box-shadow: 0 0 2px 1px var(--blue-border-shadow); +} + +.checkboxLabel.deactivated { + opacity: 0.9; + background-color: var(--red-bg); + border: 2px solid var(--red-border); +} + +.checkboxLabel.deactivated:hover { + opacity: 0.75; + box-shadow: 0 0 2px 1px var(--red-border-shadow); +} + +.visual::after { + content: '✖'; + display: inline-block; + margin-left: 0; + opacity: 0; + width: 0; + transition: margin-left var(--ifm-transition-fast), + opacity var(--ifm-transition-fast), width var(--ifm-transition-fast); +} + +.visual.visual-exclude::after, +.visual.visual-include::after { + margin-left: -0.5rem; + opacity: 1; + width: 1rem; +} + +.visual.visual-include::after { + content: '✔'; +} + +.rulesTable, +.ruleCol { + width: 100%; +} + +.attrCol { + min-width: 2.5em; + text-align: center; +} diff --git a/packages/website/src/hooks/useRulesMeta.ts b/packages/website/src/hooks/useRulesMeta.ts new file mode 100644 index 000000000000..fc6ca0d230d0 --- /dev/null +++ b/packages/website/src/hooks/useRulesMeta.ts @@ -0,0 +1,12 @@ +import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; +import type { RulesMeta } from '@site/rulesMeta'; + +export function useRulesMeta(): RulesMeta { + const { + siteConfig: { customFields }, + } = useDocusaurusContext(); + if (!customFields) { + throw new Error('Custom fields not found in config'); + } + return customFields.rules as RulesMeta; +} diff --git a/packages/website/src/theme/MDXComponents/RuleAttributes.module.css b/packages/website/src/theme/MDXComponents/RuleAttributes.module.css new file mode 100644 index 000000000000..97c07287baba --- /dev/null +++ b/packages/website/src/theme/MDXComponents/RuleAttributes.module.css @@ -0,0 +1,7 @@ +.taskList { + list-style: none; +} + +:not(.taskList > li) > .taskList { + padding-left: 0; +} diff --git a/packages/website/src/theme/MDXComponents/RuleAttributes.tsx b/packages/website/src/theme/MDXComponents/RuleAttributes.tsx new file mode 100644 index 000000000000..74726a63fc37 --- /dev/null +++ b/packages/website/src/theme/MDXComponents/RuleAttributes.tsx @@ -0,0 +1,73 @@ +import React from 'react'; +import type { TSESLint } from '@typescript-eslint/utils'; +import { useRulesMeta } from '@site/src/hooks/useRulesMeta'; + +import styles from './RuleAttributes.module.css'; + +export function RuleAttributes({ name }: { name: string }): JSX.Element | null { + const rules = useRulesMeta(); + const rule = rules.find(rule => rule.name === name); + if (!rule) { + return null; + } + return ( + <> +

    Attributes

    +
      +
    • + + Included in configs +
        +
      • + + ✅ Recommended +
      • +
      • + + 🔒 Strict +
      • +
      +
    • +
    • + + Fixable +
        +
      • + + 🔧 Automated Fixer +
      • +
      • + + 🛠 Suggestion Fixer +
      • +
      +
    • +
    • + + 💭 Requires type information +
    • +
    + + ); +} diff --git a/packages/website/src/theme/MDXComponents/index.tsx b/packages/website/src/theme/MDXComponents/index.tsx new file mode 100644 index 000000000000..2ef24ef1c72f --- /dev/null +++ b/packages/website/src/theme/MDXComponents/index.tsx @@ -0,0 +1,8 @@ +import MDXComponents from '@theme-original/MDXComponents'; +import { RuleAttributes } from './RuleAttributes'; + +// eslint-disable-next-line import/no-default-export +export default { + ...MDXComponents, + 'rule-attributes': RuleAttributes, +}; diff --git a/packages/website/tsconfig.json b/packages/website/tsconfig.json index 2dd71ec3f252..13f1948404e4 100644 --- a/packages/website/tsconfig.json +++ b/packages/website/tsconfig.json @@ -16,5 +16,11 @@ }, "types": ["@docusaurus/module-type-aliases", "@docusaurus/theme-classic"] }, - "include": ["src/", "plugins/", "typings", "./docusaurusConfig.ts"] + "include": [ + "src/", + "plugins/", + "typings", + "./docusaurusConfig.ts", + "./rulesMeta.ts" + ] } From 2600f7f1629261baf879305709299903acc67db9 Mon Sep 17 00:00:00 2001 From: Connor Lurring Date: Sun, 26 Jun 2022 17:00:48 +0100 Subject: [PATCH 14/18] chore(website): make docusaurus show twitter card image (#5253) docs: make docusaurus show twitter card image Co-authored-by: Josh Goldberg --- packages/website/docusaurusConfig.ts | 2 ++ .../website/static/img/logo-twitter-card.png | Bin 0 -> 10252 bytes 2 files changed, 2 insertions(+) create mode 100644 packages/website/static/img/logo-twitter-card.png diff --git a/packages/website/docusaurusConfig.ts b/packages/website/docusaurusConfig.ts index c91f2d3e7aca..ac050430f533 100644 --- a/packages/website/docusaurusConfig.ts +++ b/packages/website/docusaurusConfig.ts @@ -59,7 +59,9 @@ const themeConfig: ThemeCommonConfig & AlgoliaThemeConfig = { metadata: [ { name: 'msapplication-TileColor', content: '#443fd4' }, { name: 'theme-color', content: '#443fd4' }, + { name: 'twitter:image:alt', content: 'Typescript-eslint logo' }, ], + image: 'img/logo-twitter-card.png', navbar: { title: 'TypeScript ESLint', // hideOnScroll: true, diff --git a/packages/website/static/img/logo-twitter-card.png b/packages/website/static/img/logo-twitter-card.png new file mode 100644 index 0000000000000000000000000000000000000000..b63a382629910cdc065823e8b3f4d1cb1c366f44 GIT binary patch literal 10252 zcmeHsXH-*L*KR1%rAQG4CBzB}p_hcvdl8V{2_Zlzp@lA8DS{N~NKvFnm)@Ho2qGxG zBTW#bDZSo}$8(P7e&3J#j&a|ACmCe#z1E!1n)8`+&AsLzRPCPJd9ur7AQ0%hg1q#7 z5C|^{xPM1N1pKzsSIvSzWNDt7y14sDH?V_~y#>Y=4aRvmpuuQ&j0FhfKDL@@@RSKo zDScY=SP!4{0$~la=rs#sw|!@|`@1ex2wG(Cx}9F$eXUTc>pam8LcYg`LB5*_s93cD z{nZND6Gf;I(JhX~llC7;W*(yHO(%}=jmA_fb8>HP1o=#fYI|Sl@7Ug@5{~%~dA>~8-CG?O{|+-ZiB4bN6+cF(#ScH(x@uZqNpEAnGsp17S=>w*mg=(?{JwbfeXcvJp?7{|8)h=fFk7{BcsMn= zR%YqSt$1T#yCFA{L)214FzHPW)<0{|sy>eOn}>_>6Ay;m*K?0!h7}Q{4wIUF_pVLi z(&iMyZZHT-gwsaf*smEWRY-`t(llF)d+XE-7u+yxPOD*0w^8UVM-**z4<&lsx*FGJ znugzWOxAQ5=#@&w=5crYj&^}kTi^#CX5rI$Zfb?yE1KT;N1F#Hi`5p?nvta%nY1JO zm(8pX3`oBd;J!#K?9G~%9$)pN=B_AZWK_HGDytwj+X@nY!QU3dr&~J@p(T8pXUo8L zqZJZ!QguPQ&vg{nqUn4~F)>v*H~NcSc934q2Z2N8 zuq{3G*Sz=I2HsCN;PzXnVY|B3#twyGP1wRxZpS_Nakx_6Br~?gbERS&+cZa8Ay^>R z;6qTcC985Z^GM=Q`boY8i`4Z5T95aRDpVx4DsH?2# zR!Bv=*eYIDEO{mMW$j0r=FZoB;{*xL$+s63yBk!>o=C>4ZM?h0cB0IjCYREkjG8`N zt7vB%92+aJTpgC$j$gC9=8D+ec;pf8csOCU%cuTK5ZCkU=CY=B!CsmMt+2O-ueRm- z;8zrQN0Y!_jkXS!p{+Tb)4XqKX7m4 zdvQ+=?mkbbZ4IyRBo~}yCT8K^Uaa~ispni4P{B!+9U&81d6RRzS!^$N3 z?{*bg9(+M-yrbo!T|qGY%jui1ze$tURLcu{zNc{XG79WV=oZXfp>*W9B-BRJqBioh z4StDOEU@%0?TuiATDsXUO4S32;_SVSks6m}3%q;e)ruxXaziv*8aqptLX~HWL}PE1 zMsO>@3m8~s*yA784PfgJ(@JbIVl&t<4DaYHS0FdGYoi3EIj(+8bF;0^&cMX6qj)uX zw?#b5&rh)CQaX7@J^sjVVMkl=Sr0>7y+mywqmg0YrxzU?Urf1^(UbAIAUvryCATDf zV%c~PjSL-6_{`3Sts1S!C_bu`YFTwT*>`vVvfOUIJ`y}~(86d+`ZUM+a)OrE%Ik~T z4N<+sk09zX@Gw!z7hi{CQ(v4XSY<8K;O`7(?@0@x8MPs_xYFIDyU5lThh4WKuQ?OQ(~j+ITzp%cqGfN%adAHhAgdZ!#a1eF(rihCCXP(ZFQ)B;WU1u5y1N z{7STxfxD>_!>=Sg;(fV`Q715A=H&WSf$+BEF!8q3(OVqM3s1kg$~xpudh%?Ous?hA zDkZl-UqOG%3OocWY3~mpd7` z`6wOx;P%PI201ySO`QW}3%8mbH-WkV(XYx1a$Z$l4xW!2IAsV)A=L>5Hd9ijX$Z6t z)e_t5!6K#fQDz_c#al^VlU`|K-!6U#Fzkzuy?sRZcrO2y9dTe!*1=R&46+Xm0& z%}>hXg(#Isrm+sPZVFh%-VC{9jK6dx@R(-MH&I>6Tvd8i7G$yL*s0N<0QyqQSIH-W3>ckT3cOT94e~5J} z6|zb8(|=8~#<#tct#x-n|G_gv+)~79#uO!RMx6Y$; zh6zXf9p)b1`1G*cRaehx`^CDLp`H*tw*Atz;+j^^`I~c;ys1~1gkLppz&;=9zhwEK zVvxoJmko9s!4Gw+HyR0!k*s@;AY$iSt0mvM7Suan4m&}G)VCCFX0>hlUTKBekMtL| zZLo+`oX>kP-Mj-FT_0kkq|_9or2agq0_W2d?`VX4t2pyplYVQNJCv?bvr#W#deroe z1MGA!Bwx|%yKvQPktg$AXXA_ruxV+De47^-R#rq=6ae1Cn_ZgET!P#DpAADH;GZHm8w5mG zMGY)v?}P^Paq@9;amcu1TzMd(WMB~|a|_sgY1v;8z!L&ug~K_(pinnAH%>QRPJ1Uy zD7Ub%FqDf2%EQ9}NN_lNU~x!y4y^OFGl)Mhq|weOCyWCQV~+)&VIs}!U2q5p1egc^ zX`h{gippQ`Sm$3X0DM5*kq%I9PA;gO9rSk%XPk^H0P@SA|5d|T6KKGo_tDPwE>0-4 zj4K+8yY@STIqENc2Nx&XpYE8WplDmP9U$rqtjhh5CFK-U)c(>qqrehl=kQYtAp0MZ zIE=;LWc|aovzedn{B8)K{uk~)r2q8&r!XL;q5_k)N4cDtryz}hoUIQtw?|>jVLxxp zc##%pb8a&ZUI9Ta4nA`W6o(MM5I={xxgg3ykc-QVpU>hqC#!w0sue90cT)RPG}^~-bvHm-WCBl zvk82r`7^)4B7a0h9^(v1c$}sDucX&NJO1(X#~!f7{G0-Vf95R=iTYy^XQV6I{O3Y| z-XBvaD!Enx|G3U~u#&`)o`xBuXh?VrZDS)tE};sSOzmjDNkfF?H&j9UQ4 z4HR~67#9}=`paYJ*}neMWfAEAAVuV-z;A^B(EDQyC@?_1g8o&oevx*@H3ct_>YAD&8~mx`i~g+kA(ltuK#azk^SBBps~O)$PH*{@*rXD zKr=*SrX(i~Iz9V7Z^(%OMo1mx^_)Q`;eHn|{J+?J@QQg<)OMP|O zwVq!W<`w4M_er}IdEqIqWeT_mEoMp z^{XI|p)vI)2t)w^gFstw;D?$TXwmWhy!iQnKqMrf-!9_fAP^xT=(h_P(89+D{dV~$ z#@W+9F@UH43j;v>FJJ&x{pQOrtA6w4msP*{^2@W|eEEOG*kEJz|1NDi!;lqG%Ki?b zclV^Er@{Na$#jRWsL#Nh&bSEdrY>#SwOC$$MRoNSMTPSk`n6g!GYKaR^LvhwwY}T9 zwY3^XsSSC>VmX1nBKcipRHv8m#890LGxF(Tg%0|jiIwZjz3;r=Ku>e@WFF`Vv|k#dnX!HF+0v~z|G8&j~}SKnlO()l{c^-98t*W+(Hrijyt zOGFf=RM(qzM&xW~0;hRY=`0dqR~I?z@2LM+W9)oRa3r$ELVinvlO3%&@_BYMR%$c` za{OhVv+kcXK|^!m_2f}2vfo=N=90XhUvonCyfph_ zGL6rvh{YsBPJXsD&vOu-fARc62T|LPSGV2rH@k(2=r*{&yt$m+*VoE-?740s2 zx4l6c{hFy8R{KwB6T<00)1R5&aiPscDs4pvi{0h#D>+v+?r*;w+kenX@2e^&7kSmU z;NGs!9OEWP+0Pl=`tf1tOb|zY{X`)GDoC|=XyTKrPD=Ws_Qv}6TU%o8#YP6{h!2JK zc=!P?<{cOXrw8LL?@=uu!r_OSM_X(+Za%W^8cY|3&f#2bIx30Q?vW%?2fyYry=Pg) zdaI;Yu5E7ru=W1oj(|;PRRk@SpC9<+(ZXrC7qO-0-=YG@NBTl0yqz1#qn}$bOk&6gyAqAHT82}%J@|DHIPq$lrAF|?*#M;5I&aV zr>*Bxfl5W;_kkhPfWTZ*7ARyo&x?DjM{OAHhFb>W6B4$*{iHZo^yQu+W&bXV3hL$A zkc5kv<=U}awh2pNFqteH>}KK0S;<68AD1=;fsmg0cn&l?)1 z(R(~GF|FlDR1iSD)$&D;UZp2;mZ{9nX#J{|7a6nMwb%m^0RdoKp8bx9=P6>{ zcpHI~d^l8~qO&qQ?ca=HkF#cv|G!jh>xa+&!f91TWuktevdFRCroADoW<;&6P zm*Ejnfcrj+lVT}@1~+i&#sPE?jfP3-izaSn=?2LFJEz3Ew^ge zn0245;tM6ea8_zQ^-a8#Bg+eZfaqZv8~YK~>qGa{N)n%%I?;HPrN?@(i@m>~7bq}e z`+a9xdNVWi%7C5*Tz9C5Ki@{VOf)*WB^mCUdE%v-eX^hpCm;lLNB#Q*>`p$hxwvd6 zTckoD0o$M5C7siZF+T?9_rP1Zy5-|;wi3*t7oXvxnt2EEGyy6uZmL+pZ^XWbtuXee`Gi{$*iNSLtaYd8 z&j6UP7#tnVDSWoF-CR1CJ8{I}~`To|SP+wQJ#@5>iifE2OVeLrkazR^Q=yf@mPO{!4antdz1Cu-0d=?4UWcjeo+{xu_&WWhSa zUQy>RI#x#^+gk4_c_Lykc;jMmV_$(s+4~9~yVSgVcreartwvDcl+S-f8qjU}?i#9e zTD$kEvEk^U;ttj1x5oGJIb4iqfrmYKCB=00P)(`PMR~kx@bG9u+d{kgJ2ngrJ`1~+ z-pnT@F`I#mVy)%Pj%7`g>4mb6G(_;7K_CoGi;la?g~yy6wPpA7wYBr}y5_b!aOS$( zkMggbrIo~UAzfGP-6?Nns^WtCT5*D^)dqa4wKTR4KX<0RUS0gOuc4|PEH@(JYOzTB zeEtXl9tjEl)A7lCZ!d##cZsa2?{DfVWpni6o_5jQ0uY;>U|w5$C>HBO)#dXht~;3| z0$f1uFByB5eA);J|D3iA!fV+Geb-W27R1pT-NJeoDBmNufn<=1N0mI_(}05T1CSX- z*-Gg3%1fmM-04VTK%_aRKs#*h#NtiVB*re9m!`cR$F{StFZ)GtIksM z8#jX4`1zGrhJBWPxLCbfxA;ks`bfI)HzujO^_ioxSuvOyHO9{>Dbg$!fX!dJ!}`AzqWBMYq7$BU zc({6noNatFvsc5zP*!ef+On4vdfHO0!bHqKUcZS=xsBN0Vm!;|%=r@|^F;^U3ZIw2 z>#zZico!f;O2%!~RBaJrUjme-y@s|-HScxemlepDQb~FQO#*LbURzHR1sC;f_9$1? z2zFQv*|kqnEJJ-=d4XWJh)=@qXhYY!1`_PUxy?NU45F@1C%$-OqN-Ld;jEG>R8i5FF0I#IW-Fd#Nz=bXDQC!0>GvPP6Z*mW2g~ZiLUpN8pe&~v+&%fnU9^S zE-&|XE-ate@JYtT(&gcTwFI8+MyB{|_`n0H0QI4v4`-!9_!aHaaa>|RpX)Di~oSgQ6mW)dg{YXv~d%*QM-O|RUYPx6g98jHxn7mS9 zTN0+}Onal`mh-MZc8q`obYL19%!P>;f8;zaR1%x+?*;>>k|~Gm7Y66<Y9l^j0t^(#%9Vl^*gycci z%LbiuRD)JZo0ulU(`4(&wWeL*ZA?NE)Ri`=QtOPZF>Z>{aIIf`Q;Cm7;1Pe+HbS5Y0mKyi>(xO^yjw*k7;R4W&xM& zI=8Wb4#N>Oli?sP|wbMGiiR8%-9-Y23sizR)r0-y2gDP9mZH{z;Vmp=&jD9GHC JE|N42_&+%mVGIBO literal 0 HcmV?d00001 From 8ca08e9f18d59b29715c667fbb7d237f6e9a96ba Mon Sep 17 00:00:00 2001 From: Brad Zacher Date: Sun, 26 Jun 2022 13:27:57 -0700 Subject: [PATCH 15/18] feat(eslint-plugin): [no-shadow] add shadowed variable location to the error message (#5183) --- packages/eslint-plugin/src/rules/no-shadow.ts | 49 +- .../tests/rules/no-shadow.test.ts | 2026 ----------------- .../rules/no-shadow/no-shadow-eslint.test.ts | 1300 +++++++++++ .../tests/rules/no-shadow/no-shadow.test.ts | 706 ++++++ 4 files changed, 2049 insertions(+), 2032 deletions(-) delete mode 100644 packages/eslint-plugin/tests/rules/no-shadow.test.ts create mode 100644 packages/eslint-plugin/tests/rules/no-shadow/no-shadow-eslint.test.ts create mode 100644 packages/eslint-plugin/tests/rules/no-shadow/no-shadow.test.ts diff --git a/packages/eslint-plugin/src/rules/no-shadow.ts b/packages/eslint-plugin/src/rules/no-shadow.ts index a80a1b506732..a6b9b7fd735d 100644 --- a/packages/eslint-plugin/src/rules/no-shadow.ts +++ b/packages/eslint-plugin/src/rules/no-shadow.ts @@ -12,7 +12,7 @@ import { } from '@typescript-eslint/scope-manager'; import * as util from '../util'; -type MessageIds = 'noShadow'; +type MessageIds = 'noShadow' | 'noShadowGlobal'; type Options = [ { allow?: string[]; @@ -64,7 +64,9 @@ export default util.createRule({ }, ], messages: { - noShadow: "'{{name}}' is already declared in the upper scope.", + noShadow: + "'{{name}}' is already declared in the upper scope on line {{shadowedLine}} column {{shadowedColumn}}.", + noShadowGlobal: "'{{name}}' is already a global variable.", }, }, defaultOptions: [ @@ -517,6 +519,28 @@ export default util.createRule({ ); } + /** + * Get declared line and column of a variable. + * @param variable The variable to get. + * @returns The declared line and column of the variable. + */ + function getDeclaredLocation( + variable: TSESLint.Scope.Variable, + ): { global: true } | { global: false; line: number; column: number } { + const identifier = variable.identifiers[0]; + if (identifier) { + return { + global: false, + line: identifier.loc.start.line, + column: identifier.loc.start.column + 1, + }; + } else { + return { + global: true, + }; + } + } + /** * Checks the current context for shadowed variables. * @param {Scope} scope Fixme @@ -595,12 +619,25 @@ export default util.createRule({ ) && !(options.hoist !== 'all' && isInTdz(variable, shadowed)) ) { + const location = getDeclaredLocation(shadowed); + context.report({ node: variable.identifiers[0], - messageId: 'noShadow', - data: { - name: variable.name, - }, + ...(location.global + ? { + messageId: 'noShadowGlobal', + data: { + name: variable.name, + }, + } + : { + messageId: 'noShadow', + data: { + name: variable.name, + shadowedLine: location.line, + shadowedColumn: location.column, + }, + }), }); } } diff --git a/packages/eslint-plugin/tests/rules/no-shadow.test.ts b/packages/eslint-plugin/tests/rules/no-shadow.test.ts deleted file mode 100644 index 69a69f2f70eb..000000000000 --- a/packages/eslint-plugin/tests/rules/no-shadow.test.ts +++ /dev/null @@ -1,2026 +0,0 @@ -import { AST_NODE_TYPES } from '@typescript-eslint/utils'; -import rule from '../../src/rules/no-shadow'; -import { RuleTester } from '../RuleTester'; - -const ruleTester = new RuleTester({ - parserOptions: { - sourceType: 'module', - }, - parser: '@typescript-eslint/parser', -}); - -ruleTester.run('no-shadow TS tests', rule, { - valid: [ - // nested conditional types - ` -export type ArrayInput = Func extends (arg0: Array) => any - ? T[] - : Func extends (...args: infer T) => any - ? T - : never; - `, - ` -function foo() { - var Object = 0; -} - `, - // this params - ` -function test(this: Foo) { - function test2(this: Bar) {} -} - `, - // declaration merging - ` -class Foo { - prop = 1; -} -namespace Foo { - export const v = 2; -} - `, - ` -function Foo() {} -namespace Foo { - export const v = 2; -} - `, - ` -class Foo { - prop = 1; -} -interface Foo { - prop2: string; -} - `, - ` -import type { Foo } from 'bar'; - -declare module 'bar' { - export interface Foo { - x: string; - } -} - `, - // type value shadowing - ` -const x = 1; -type x = string; - `, - ` -const x = 1; -{ - type x = string; -} - `, - { - code: ` -type Foo = 1; - `, - options: [{ ignoreTypeValueShadow: true }], - globals: { - Foo: 'writable', - }, - }, - { - code: ` -type Foo = 1; - `, - options: [ - { - ignoreTypeValueShadow: false, - builtinGlobals: false, - }, - ], - globals: { - Foo: 'writable', - }, - }, - // https://github.com/typescript-eslint/typescript-eslint/issues/2360 - ` -enum Direction { - left = 'left', - right = 'right', -} - `, - // https://github.com/typescript-eslint/typescript-eslint/issues/2447 - { - code: ` -const test = 1; -type Fn = (test: string) => typeof test; - `, - options: [{ ignoreFunctionTypeParameterNameValueShadow: true }], - }, - { - code: ` -type Fn = (Foo: string) => typeof Foo; - `, - options: [ - { - ignoreFunctionTypeParameterNameValueShadow: true, - builtinGlobals: false, - }, - ], - globals: { - Foo: 'writable', - }, - }, - // https://github.com/typescript-eslint/typescript-eslint/issues/2724 - { - code: ` - declare global { - interface ArrayConstructor {} - } - export {}; - `, - options: [{ builtinGlobals: true }], - }, - ` - declare global { - const a: string; - - namespace Foo { - const a: number; - } - } - export {}; - `, - { - code: ` - declare global { - type A = 'foo'; - - namespace Foo { - type A = 'bar'; - } - } - export {}; - `, - options: [{ ignoreTypeValueShadow: false }], - }, - { - code: ` - declare global { - const foo: string; - type Fn = (foo: number) => void; - } - export {}; - `, - options: [{ ignoreFunctionTypeParameterNameValueShadow: false }], - }, - ` -export class Wrapper { - private constructor(private readonly wrapped: Wrapped) {} - - unwrap(): Wrapped { - return this.wrapped; - } - - static create(wrapped: Wrapped) { - return new Wrapper(wrapped); - } -} - `, - { - // https://github.com/typescript-eslint/typescript-eslint/issues/3862 - code: ` -import type { foo } from './foo'; -type bar = number; - -// 'foo' is already declared in the upper scope -// 'bar' is fine -function doThing(foo: number, bar: number) {} - `, - options: [{ ignoreTypeValueShadow: true }], - }, - { - code: ` -import { type foo } from './foo'; - -// 'foo' is already declared in the upper scope -function doThing(foo: number) {} - `, - options: [{ ignoreTypeValueShadow: true }], - }, - { - code: 'const a = [].find(a => a);', - options: [{ ignoreOnInitialization: true }], - }, - { - code: ` -const a = [].find(function (a) { - return a; -}); - `, - options: [{ ignoreOnInitialization: true }], - }, - { - code: 'const [a = [].find(a => true)] = dummy;', - options: [{ ignoreOnInitialization: true }], - }, - { - code: 'const { a = [].find(a => true) } = dummy;', - options: [{ ignoreOnInitialization: true }], - }, - { - code: 'function func(a = [].find(a => true)) {}', - options: [{ ignoreOnInitialization: true }], - }, - { - code: ` -for (const a in [].find(a => true)) { -} - `, - options: [{ ignoreOnInitialization: true }], - }, - { - code: ` -for (const a of [].find(a => true)) { -} - `, - options: [{ ignoreOnInitialization: true }], - }, - { - code: "const a = [].map(a => true).filter(a => a === 'b');", - options: [{ ignoreOnInitialization: true }], - }, - { - code: ` -const a = [] - .map(a => true) - .filter(a => a === 'b') - .find(a => a === 'c'); - `, - options: [{ ignoreOnInitialization: true }], - }, - { - code: 'const { a } = (({ a }) => ({ a }))();', - options: [{ ignoreOnInitialization: true }], - }, - { - code: ` -const person = people.find(item => { - const person = item.name; - return person === 'foo'; -}); - `, - options: [{ ignoreOnInitialization: true }], - }, - { - code: 'var y = bar || foo(y => y);', - options: [{ ignoreOnInitialization: true }], - }, - { - code: 'var y = bar && foo(y => y);', - options: [{ ignoreOnInitialization: true }], - }, - { - code: 'var z = bar(foo(z => z));', - options: [{ ignoreOnInitialization: true }], - }, - { - code: 'var z = boo(bar(foo(z => z)));', - options: [{ ignoreOnInitialization: true }], - }, - { - code: ` -var match = function (person) { - return person.name === 'foo'; -}; -const person = [].find(match); - `, - options: [{ ignoreOnInitialization: true }], - }, - { - code: 'const a = foo(x || (a => {}));', - options: [{ ignoreOnInitialization: true }], - }, - { - code: 'const { a = 1 } = foo(a => {});', - options: [{ ignoreOnInitialization: true }], - }, - { - code: "const person = { ...people.find(person => person.firstName.startsWith('s')) };", - options: [{ ignoreOnInitialization: true }], - parserOptions: { ecmaVersion: 2021 }, - }, - { - code: ` -const person = { - firstName: people - .filter(person => person.firstName.startsWith('s')) - .map(person => person.firstName)[0], -}; - `, - options: [{ ignoreOnInitialization: true }], - parserOptions: { ecmaVersion: 2021 }, - }, - { - code: ` -() => { - const y = foo(y => y); -}; - `, - options: [{ ignoreOnInitialization: true }], - }, - { - code: 'const x = (x => x)();', - options: [{ ignoreOnInitialization: true }], - }, - { - code: 'var y = bar || (y => y)();', - options: [{ ignoreOnInitialization: true }], - }, - { - code: 'var y = bar && (y => y)();', - options: [{ ignoreOnInitialization: true }], - }, - { - code: 'var x = (x => x)((y => y)());', - options: [{ ignoreOnInitialization: true }], - }, - { - code: 'const { a = 1 } = (a => {})();', - options: [{ ignoreOnInitialization: true }], - }, - { - code: ` -() => { - const y = (y => y)(); -}; - `, - options: [{ ignoreOnInitialization: true }], - }, - { code: 'const [x = y => y] = [].map(y => y);' }, - ], - invalid: [ - { - code: ` -type T = 1; -{ - type T = 2; -} - `, - errors: [ - { - messageId: 'noShadow', - data: { - name: 'T', - }, - line: 4, - }, - ], - }, - { - code: ` -function foo() { - return function () {}; -} - `, - errors: [ - { - messageId: 'noShadow', - data: { - name: 'T', - }, - line: 3, - }, - ], - }, - { - code: ` -const x = 1; -{ - type x = string; -} - `, - options: [{ ignoreTypeValueShadow: false }], - errors: [ - { - messageId: 'noShadow', - data: { - name: 'x', - }, - line: 4, - }, - ], - }, - { - code: ` -type Foo = 1; - `, - options: [ - { - ignoreTypeValueShadow: false, - builtinGlobals: true, - }, - ], - globals: { - Foo: 'writable', - }, - errors: [ - { - messageId: 'noShadow', - data: { - name: 'Foo', - }, - line: 2, - }, - ], - }, - // https://github.com/typescript-eslint/typescript-eslint/issues/2447 - { - code: ` -const test = 1; -type Fn = (test: string) => typeof test; - `, - options: [{ ignoreFunctionTypeParameterNameValueShadow: false }], - errors: [ - { - messageId: 'noShadow', - data: { - name: 'test', - }, - line: 3, - }, - ], - }, - { - code: ` -type Fn = (Foo: string) => typeof Foo; - `, - options: [ - { - ignoreFunctionTypeParameterNameValueShadow: false, - builtinGlobals: true, - }, - ], - globals: { - Foo: 'writable', - }, - errors: [ - { - messageId: 'noShadow', - data: { - name: 'Foo', - }, - line: 2, - }, - ], - }, - ], -}); - -ruleTester.run('no-shadow base eslint tests', rule, { - valid: [ - ` -var a = 3; -function b(x) { - a++; - return x + a; -} -setTimeout(function () { - b(a); -}, 0); - `, - ` -(function () { - var doSomething = function doSomething() {}; - doSomething(); -})(); - `, - ` -var arguments; -function bar() {} - `, - { - code: ` -var a = 3; -var b = x => { - a++; - return x + a; -}; -setTimeout(() => { - b(a); -}, 0); - `, - parserOptions: { ecmaVersion: 6 }, - }, - { - code: 'class A {}', - parserOptions: { ecmaVersion: 6 }, - }, - { - code: ` -class A { - constructor() { - var a; - } -} - `, - parserOptions: { ecmaVersion: 6 }, - }, - { - code: ` -(function () { - var A = class A {}; -})(); - `, - parserOptions: { ecmaVersion: 6 }, - }, - { - code: ` -{ - var a; -} -var a; - `, - parserOptions: { ecmaVersion: 6 }, - }, // this case reports `no-redeclare`, not shadowing. - { - code: ` -{ - let a; -} -let a; - `, - options: [{ hoist: 'never' }], - parserOptions: { ecmaVersion: 6 }, - }, - { - code: ` -{ - let a; -} -var a; - `, - options: [{ hoist: 'never' }], - parserOptions: { ecmaVersion: 6 }, - }, - { - code: ` -{ - let a; -} -function a() {} - `, - options: [{ hoist: 'never' }], - parserOptions: { ecmaVersion: 6 }, - }, - { - code: ` -{ - const a = 0; -} -const a = 1; - `, - options: [{ hoist: 'never' }], - parserOptions: { ecmaVersion: 6 }, - }, - { - code: ` -{ - const a = 0; -} -var a; - `, - options: [{ hoist: 'never' }], - parserOptions: { ecmaVersion: 6 }, - }, - { - code: ` -{ - const a = 0; -} -function a() {} - `, - options: [{ hoist: 'never' }], - parserOptions: { ecmaVersion: 6 }, - }, - { - code: ` -function foo() { - let a; -} -let a; - `, - options: [{ hoist: 'never' }], - parserOptions: { ecmaVersion: 6 }, - }, - { - code: ` -function foo() { - let a; -} -var a; - `, - options: [{ hoist: 'never' }], - parserOptions: { ecmaVersion: 6 }, - }, - { - code: ` -function foo() { - let a; -} -function a() {} - `, - options: [{ hoist: 'never' }], - parserOptions: { ecmaVersion: 6 }, - }, - { - code: ` -function foo() { - var a; -} -let a; - `, - options: [{ hoist: 'never' }], - parserOptions: { ecmaVersion: 6 }, - }, - { - code: ` -function foo() { - var a; -} -var a; - `, - options: [{ hoist: 'never' }], - parserOptions: { ecmaVersion: 6 }, - }, - { - code: ` -function foo() { - var a; -} -function a() {} - `, - options: [{ hoist: 'never' }], - parserOptions: { ecmaVersion: 6 }, - }, - { - code: ` -function foo(a) {} -let a; - `, - options: [{ hoist: 'never' }], - parserOptions: { ecmaVersion: 6 }, - }, - { - code: ` -function foo(a) {} -var a; - `, - options: [{ hoist: 'never' }], - parserOptions: { ecmaVersion: 6 }, - }, - { - code: ` -function foo(a) {} -function a() {} - `, - options: [{ hoist: 'never' }], - parserOptions: { ecmaVersion: 6 }, - }, - { - code: ` -{ - let a; -} -let a; - `, - parserOptions: { ecmaVersion: 6 }, - }, - { - code: ` -{ - let a; -} -var a; - `, - parserOptions: { ecmaVersion: 6 }, - }, - { - code: ` -{ - const a = 0; -} -const a = 1; - `, - parserOptions: { ecmaVersion: 6 }, - }, - { - code: ` -{ - const a = 0; -} -var a; - `, - parserOptions: { ecmaVersion: 6 }, - }, - { - code: ` -function foo() { - let a; -} -let a; - `, - parserOptions: { ecmaVersion: 6 }, - }, - { - code: ` -function foo() { - let a; -} -var a; - `, - parserOptions: { ecmaVersion: 6 }, - }, - { - code: ` -function foo() { - var a; -} -let a; - `, - parserOptions: { ecmaVersion: 6 }, - }, - { - code: ` -function foo() { - var a; -} -var a; - `, - parserOptions: { ecmaVersion: 6 }, - }, - { - code: ` -function foo(a) {} -let a; - `, - parserOptions: { ecmaVersion: 6 }, - }, - { - code: ` -function foo(a) {} -var a; - `, - parserOptions: { ecmaVersion: 6 }, - }, - ` -function foo() { - var Object = 0; -} - `, - { - code: ` -function foo() { - var top = 0; -} - `, - env: { browser: true }, - }, - { - code: ` -function foo(cb) { - (function (cb) { - cb(42); - })(cb); -} - `, - options: [{ allow: ['cb'] }], - }, - ], - invalid: [ - { - code: ` -function a(x) { - var b = function c() { - var x = 'foo'; - }; -} - `, - errors: [ - { - messageId: 'noShadow', - data: { name: 'x' }, - type: AST_NODE_TYPES.Identifier, - line: 4, - column: 9, - }, - ], - }, - { - code: ` -var a = x => { - var b = () => { - var x = 'foo'; - }; -}; - `, - parserOptions: { ecmaVersion: 6 }, - errors: [ - { - messageId: 'noShadow', - data: { name: 'x' }, - type: AST_NODE_TYPES.Identifier, - line: 4, - column: 9, - }, - ], - }, - { - code: ` -function a(x) { - var b = function () { - var x = 'foo'; - }; -} - `, - errors: [ - { - messageId: 'noShadow', - data: { name: 'x' }, - type: AST_NODE_TYPES.Identifier, - line: 4, - column: 9, - }, - ], - }, - { - code: ` -var x = 1; -function a(x) { - return ++x; -} - `, - errors: [ - { - messageId: 'noShadow', - data: { name: 'x' }, - type: AST_NODE_TYPES.Identifier, - line: 3, - column: 12, - }, - ], - }, - { - code: ` -var a = 3; -function b() { - var a = 10; -} - `, - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -var a = 3; -function b() { - var a = 10; -} -setTimeout(function () { - b(); -}, 0); - `, - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -var a = 3; -function b() { - var a = 10; - var b = 0; -} -setTimeout(function () { - b(); -}, 0); - `, - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - }, - { - messageId: 'noShadow', - data: { name: 'b' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -var x = 1; -{ - let x = 2; -} - `, - parserOptions: { ecmaVersion: 6 }, - errors: [ - { - messageId: 'noShadow', - data: { name: 'x' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -let x = 1; -{ - const x = 2; -} - `, - parserOptions: { ecmaVersion: 6 }, - errors: [ - { - messageId: 'noShadow', - data: { name: 'x' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -{ - let a; -} -function a() {} - `, - parserOptions: { ecmaVersion: 6 }, - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -{ - const a = 0; -} -function a() {} - `, - parserOptions: { ecmaVersion: 6 }, - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -function foo() { - let a; -} -function a() {} - `, - parserOptions: { ecmaVersion: 6 }, - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -function foo() { - var a; -} -function a() {} - `, - parserOptions: { ecmaVersion: 6 }, - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -function foo(a) {} -function a() {} - `, - parserOptions: { ecmaVersion: 6 }, - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -{ - let a; -} -let a; - `, - options: [{ hoist: 'all' }], - parserOptions: { ecmaVersion: 6 }, - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -{ - let a; -} -var a; - `, - options: [{ hoist: 'all' }], - parserOptions: { ecmaVersion: 6 }, - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -{ - let a; -} -function a() {} - `, - options: [{ hoist: 'all' }], - parserOptions: { ecmaVersion: 6 }, - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -{ - const a = 0; -} -const a = 1; - `, - options: [{ hoist: 'all' }], - parserOptions: { ecmaVersion: 6 }, - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -{ - const a = 0; -} -var a; - `, - options: [{ hoist: 'all' }], - parserOptions: { ecmaVersion: 6 }, - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -{ - const a = 0; -} -function a() {} - `, - options: [{ hoist: 'all' }], - parserOptions: { ecmaVersion: 6 }, - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -function foo() { - let a; -} -let a; - `, - options: [{ hoist: 'all' }], - parserOptions: { ecmaVersion: 6 }, - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -function foo() { - let a; -} -var a; - `, - options: [{ hoist: 'all' }], - parserOptions: { ecmaVersion: 6 }, - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -function foo() { - let a; -} -function a() {} - `, - options: [{ hoist: 'all' }], - parserOptions: { ecmaVersion: 6 }, - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -function foo() { - var a; -} -let a; - `, - options: [{ hoist: 'all' }], - parserOptions: { ecmaVersion: 6 }, - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -function foo() { - var a; -} -var a; - `, - options: [{ hoist: 'all' }], - parserOptions: { ecmaVersion: 6 }, - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -function foo() { - var a; -} -function a() {} - `, - options: [{ hoist: 'all' }], - parserOptions: { ecmaVersion: 6 }, - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -function foo(a) {} -let a; - `, - options: [{ hoist: 'all' }], - parserOptions: { ecmaVersion: 6 }, - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -function foo(a) {} -var a; - `, - options: [{ hoist: 'all' }], - parserOptions: { ecmaVersion: 6 }, - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -function foo(a) {} -function a() {} - `, - options: [{ hoist: 'all' }], - parserOptions: { ecmaVersion: 6 }, - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -(function a() { - function a() {} -})(); - `, - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -(function a() { - class a {} -})(); - `, - parserOptions: { ecmaVersion: 6 }, - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -(function a() { - (function a() {}); -})(); - `, - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -(function a() { - (class a {}); -})(); - `, - parserOptions: { ecmaVersion: 6 }, - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -(function () { - var a = function (a) {}; -})(); - `, - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -(function () { - var a = function () { - function a() {} - }; -})(); - `, - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -(function () { - var a = function () { - class a {} - }; -})(); - `, - parserOptions: { ecmaVersion: 6 }, - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -(function () { - var a = function () { - (function a() {}); - }; -})(); - `, - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -(function () { - var a = function () { - (class a {}); - }; -})(); - `, - parserOptions: { ecmaVersion: 6 }, - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -(function () { - var a = class { - constructor() { - class a {} - } - }; -})(); - `, - parserOptions: { ecmaVersion: 6 }, - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -class A { - constructor() { - var A; - } -} - `, - parserOptions: { ecmaVersion: 6 }, - errors: [ - { - messageId: 'noShadow', - data: { name: 'A' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -(function a() { - function a() { - function a() {} - } -})(); - `, - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - line: 3, - column: 12, - }, - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - line: 4, - column: 14, - }, - ], - }, - { - code: ` -function foo() { - var Object = 0; -} - `, - options: [{ builtinGlobals: true }], - errors: [ - { - messageId: 'noShadow', - data: { name: 'Object' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -function foo() { - var top = 0; -} - `, - options: [{ builtinGlobals: true }], - env: { browser: true }, - errors: [ - { - messageId: 'noShadow', - data: { name: 'top' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: 'var Object = 0;', - options: [{ builtinGlobals: true }], - parserOptions: { ecmaVersion: 6, sourceType: 'module' }, - errors: [ - { - messageId: 'noShadow', - data: { name: 'Object' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: 'var top = 0;', - options: [{ builtinGlobals: true }], - parserOptions: { ecmaVersion: 6, sourceType: 'module' }, - env: { browser: true }, - errors: [ - { - messageId: 'noShadow', - data: { name: 'top' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: 'var Object = 0;', - options: [{ builtinGlobals: true }], - parserOptions: { ecmaFeatures: { globalReturn: true } }, - errors: [ - { - messageId: 'noShadow', - data: { name: 'Object' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: 'var top = 0;', - options: [{ builtinGlobals: true }], - parserOptions: { ecmaFeatures: { globalReturn: true } }, - env: { browser: true }, - errors: [ - { - messageId: 'noShadow', - data: { name: 'top' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -function foo(cb) { - (function (cb) { - cb(42); - })(cb); -} - `, - errors: [ - { - messageId: 'noShadow', - data: { name: 'cb' }, - type: AST_NODE_TYPES.Identifier, - line: 3, - column: 14, - }, - ], - }, - { - code: ` -import type { foo } from './foo'; -function doThing(foo: number) {} - `, - options: [{ ignoreTypeValueShadow: false }], - errors: [ - { - messageId: 'noShadow', - data: { name: 'foo' }, - type: AST_NODE_TYPES.Identifier, - line: 3, - column: 18, - }, - ], - }, - { - code: ` -import { type foo } from './foo'; -function doThing(foo: number) {} - `, - options: [{ ignoreTypeValueShadow: false }], - errors: [ - { - messageId: 'noShadow', - data: { name: 'foo' }, - type: AST_NODE_TYPES.Identifier, - line: 3, - column: 18, - }, - ], - }, - { - code: ` -import { foo } from './foo'; -function doThing(foo: number, bar: number) {} - `, - options: [{ ignoreTypeValueShadow: true }], - errors: [ - { - messageId: 'noShadow', - data: { name: 'foo' }, - type: AST_NODE_TYPES.Identifier, - line: 3, - column: 18, - }, - ], - }, - { - code: ` -interface Foo {} - -declare module 'bar' { - export interface Foo { - x: string; - } -} - `, - errors: [ - { - messageId: 'noShadow', - data: { name: 'Foo' }, - type: AST_NODE_TYPES.Identifier, - line: 5, - column: 20, - }, - ], - }, - { - code: ` -import type { Foo } from 'bar'; - -declare module 'baz' { - export interface Foo { - x: string; - } -} - `, - errors: [ - { - messageId: 'noShadow', - data: { name: 'Foo' }, - type: AST_NODE_TYPES.Identifier, - line: 5, - column: 20, - }, - ], - }, - { - code: ` -import type { Foo } from 'bar'; - -declare module 'bar' { - export type Foo = string; -} - `, - errors: [ - { - messageId: 'noShadow', - data: { name: 'Foo' }, - type: AST_NODE_TYPES.Identifier, - line: 5, - column: 15, - }, - ], - }, - { - code: ` -import type { Foo } from 'bar'; - -declare module 'bar' { - interface Foo { - x: string; - } -} - `, - errors: [ - { - messageId: 'noShadow', - data: { name: 'Foo' }, - type: AST_NODE_TYPES.Identifier, - line: 5, - column: 13, - }, - ], - }, - { - code: ` -import { type Foo } from 'bar'; - -declare module 'baz' { - export interface Foo { - x: string; - } -} - `, - errors: [ - { - messageId: 'noShadow', - data: { name: 'Foo' }, - type: AST_NODE_TYPES.Identifier, - line: 5, - column: 20, - }, - ], - }, - { - code: ` -import { type Foo } from 'bar'; - -declare module 'bar' { - export type Foo = string; -} - `, - errors: [ - { - messageId: 'noShadow', - data: { name: 'Foo' }, - type: AST_NODE_TYPES.Identifier, - line: 5, - column: 15, - }, - ], - }, - { - code: ` -import { type Foo } from 'bar'; - -declare module 'bar' { - interface Foo { - x: string; - } -} - `, - errors: [ - { - messageId: 'noShadow', - data: { name: 'Foo' }, - type: AST_NODE_TYPES.Identifier, - line: 5, - column: 13, - }, - ], - }, - { - code: ` -let x = foo((x, y) => {}); -let y; - `, - parserOptions: { ecmaVersion: 6 }, - options: [{ hoist: 'all' }], - errors: [ - { - messageId: 'noShadow', - data: { name: 'x' }, - type: AST_NODE_TYPES.Identifier, - }, - { - messageId: 'noShadow', - data: { - name: 'y', - shadowedLine: 2, - shadowedColumn: 5, - }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -const a = fn(() => { - class C { - fn() { - const a = 42; - return a; - } - } - return new C(); -}); - `, - parserOptions: { ecmaVersion: 6 }, - options: [{ ignoreOnInitialization: true }], - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - line: 5, - column: 13, - }, - ], - }, - { - code: 'function a() {}\nfoo(a => {});', - parserOptions: { ecmaVersion: 6 }, - options: [{ ignoreOnInitialization: true }], - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - line: 2, - column: 5, - }, - ], - }, - { - code: ` -const a = fn(() => { - function C() { - this.fn = function () { - const a = 42; - return a; - }; - } - return new C(); -}); - `, - parserOptions: { ecmaVersion: 6 }, - options: [{ ignoreOnInitialization: true }], - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - line: 5, - column: 13, - }, - ], - }, - { - code: ` -const x = foo(() => { - const bar = () => { - return x => {}; - }; - return bar; -}); - `, - parserOptions: { ecmaVersion: 6 }, - options: [{ ignoreOnInitialization: true }], - errors: [ - { - messageId: 'noShadow', - data: { name: 'x' }, - type: AST_NODE_TYPES.Identifier, - line: 4, - column: 12, - }, - ], - }, - { - code: ` -const x = foo(() => { - return { bar(x) {} }; -}); - `, - parserOptions: { ecmaVersion: 6 }, - options: [{ ignoreOnInitialization: true }], - errors: [ - { - messageId: 'noShadow', - data: { name: 'x' }, - type: AST_NODE_TYPES.Identifier, - line: 3, - column: 16, - }, - ], - }, - { - code: ` -const x = () => { - foo(x => x); -}; - `, - parserOptions: { ecmaVersion: 6 }, - options: [{ ignoreOnInitialization: true }], - errors: [ - { - messageId: 'noShadow', - data: { name: 'x' }, - type: AST_NODE_TYPES.Identifier, - line: 3, - column: 7, - }, - ], - }, - { - code: ` -const foo = () => { - let x; - bar(x => x); -}; - `, - parserOptions: { ecmaVersion: 6 }, - options: [{ ignoreOnInitialization: true }], - errors: [ - { - messageId: 'noShadow', - data: { name: 'x' }, - type: AST_NODE_TYPES.Identifier, - line: 4, - column: 7, - }, - ], - }, - { - code: ` -foo(() => { - const x = x => x; -}); - `, - parserOptions: { ecmaVersion: 6 }, - options: [{ ignoreOnInitialization: true }], - errors: [ - { - messageId: 'noShadow', - data: { name: 'x' }, - type: AST_NODE_TYPES.Identifier, - line: 3, - column: 13, - }, - ], - }, - { - code: ` -const foo = x => { - bar(x => {}); -}; - `, - parserOptions: { ecmaVersion: 6 }, - options: [{ ignoreOnInitialization: true }], - errors: [ - { - messageId: 'noShadow', - data: { name: 'x' }, - type: AST_NODE_TYPES.Identifier, - line: 3, - column: 7, - }, - ], - }, - { - code: ` -let x = ((x, y) => {})(); -let y; - `, - parserOptions: { ecmaVersion: 6 }, - options: [{ hoist: 'all' }], - errors: [ - { - messageId: 'noShadow', - data: { name: 'x' }, - type: AST_NODE_TYPES.Identifier, - }, - { - messageId: 'noShadow', - data: { name: 'y' }, - type: AST_NODE_TYPES.Identifier, - }, - ], - }, - { - code: ` -const a = (() => { - class C { - fn() { - const a = 42; - return a; - } - } - return new C(); -})(); - `, - parserOptions: { ecmaVersion: 6 }, - options: [{ ignoreOnInitialization: true }], - errors: [ - { - messageId: 'noShadow', - data: { name: 'a' }, - type: AST_NODE_TYPES.Identifier, - line: 5, - column: 13, - }, - ], - }, - { - code: ` -const x = () => { - (x => x)(); -}; - `, - parserOptions: { ecmaVersion: 6 }, - options: [{ ignoreOnInitialization: true }], - errors: [ - { - messageId: 'noShadow', - data: { name: 'x' }, - type: AST_NODE_TYPES.Identifier, - line: 3, - column: 4, - }, - ], - }, - ], -}); diff --git a/packages/eslint-plugin/tests/rules/no-shadow/no-shadow-eslint.test.ts b/packages/eslint-plugin/tests/rules/no-shadow/no-shadow-eslint.test.ts new file mode 100644 index 000000000000..3191e0d9fbfb --- /dev/null +++ b/packages/eslint-plugin/tests/rules/no-shadow/no-shadow-eslint.test.ts @@ -0,0 +1,1300 @@ +// The following tests are adapted from the tests in eslint. +// Original Code: https://github.com/t-mangoe/eslint/blob/c4a70499720f48e27734068074fbeee4f48fb460/tests/lib/rules/no-shadow.js +// License : https://github.com/eslint/eslint/blob/c4a70499720f48e27734068074fbeee4f48fb460/LICENSE + +'use strict'; + +import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import rule from '../../../src/rules/no-shadow'; +import { RuleTester } from '../../RuleTester'; + +const ruleTester = new RuleTester({ + parser: '@typescript-eslint/parser', +}); + +ruleTester.run('no-shadow', rule, { + valid: [ + ` +var a = 3; +function b(x) { + a++; + return x + a; +} +setTimeout(function () { + b(a); +}, 0); + `, + ` +(function () { + var doSomething = function doSomething() {}; + doSomething(); +})(); + `, + ` +var arguments; +function bar() {} + `, + { + code: ` +var a = 3; +var b = x => { + a++; + return x + a; +}; +setTimeout(() => { + b(a); +}, 0); + `, + parserOptions: { ecmaVersion: 6 }, + }, + { code: 'class A {}', parserOptions: { ecmaVersion: 6 } }, + { + code: ` +class A { + constructor() { + var a; + } +} + `, + parserOptions: { ecmaVersion: 6 }, + }, + { + code: ` +(function () { + var A = class A {}; +})(); + `, + parserOptions: { ecmaVersion: 6 }, + }, + { + code: ` +{ + var a; +} +var a; + `, + parserOptions: { ecmaVersion: 6 }, + }, // this case reports `no-redeclare`, not shadowing. + { + code: ` +{ + let a; +} +let a; + `, + options: [{ hoist: 'never' }], + parserOptions: { ecmaVersion: 6 }, + }, + { + code: ` +{ + let a; +} +var a; + `, + options: [{ hoist: 'never' }], + parserOptions: { ecmaVersion: 6 }, + }, + { + code: ` +{ + let a; +} +function a() {} + `, + options: [{ hoist: 'never' }], + parserOptions: { ecmaVersion: 6 }, + }, + { + code: ` +{ + const a = 0; +} +const a = 1; + `, + options: [{ hoist: 'never' }], + parserOptions: { ecmaVersion: 6 }, + }, + { + code: ` +{ + const a = 0; +} +var a; + `, + options: [{ hoist: 'never' }], + parserOptions: { ecmaVersion: 6 }, + }, + { + code: ` +{ + const a = 0; +} +function a() {} + `, + options: [{ hoist: 'never' }], + parserOptions: { ecmaVersion: 6 }, + }, + { + code: ` +function foo() { + let a; +} +let a; + `, + options: [{ hoist: 'never' }], + parserOptions: { ecmaVersion: 6 }, + }, + { + code: ` +function foo() { + let a; +} +var a; + `, + options: [{ hoist: 'never' }], + parserOptions: { ecmaVersion: 6 }, + }, + { + code: ` +function foo() { + let a; +} +function a() {} + `, + options: [{ hoist: 'never' }], + parserOptions: { ecmaVersion: 6 }, + }, + { + code: ` +function foo() { + var a; +} +let a; + `, + options: [{ hoist: 'never' }], + parserOptions: { ecmaVersion: 6 }, + }, + { + code: ` +function foo() { + var a; +} +var a; + `, + options: [{ hoist: 'never' }], + parserOptions: { ecmaVersion: 6 }, + }, + { + code: ` +function foo() { + var a; +} +function a() {} + `, + options: [{ hoist: 'never' }], + parserOptions: { ecmaVersion: 6 }, + }, + { + code: ` +function foo(a) {} +let a; + `, + options: [{ hoist: 'never' }], + parserOptions: { ecmaVersion: 6 }, + }, + { + code: ` +function foo(a) {} +var a; + `, + options: [{ hoist: 'never' }], + parserOptions: { ecmaVersion: 6 }, + }, + { + code: ` +function foo(a) {} +function a() {} + `, + options: [{ hoist: 'never' }], + parserOptions: { ecmaVersion: 6 }, + }, + { + code: ` +{ + let a; +} +let a; + `, + parserOptions: { ecmaVersion: 6 }, + }, + { + code: ` +{ + let a; +} +var a; + `, + parserOptions: { ecmaVersion: 6 }, + }, + { + code: ` +{ + const a = 0; +} +const a = 1; + `, + parserOptions: { ecmaVersion: 6 }, + }, + { + code: ` +{ + const a = 0; +} +var a; + `, + parserOptions: { ecmaVersion: 6 }, + }, + { + code: ` +function foo() { + let a; +} +let a; + `, + parserOptions: { ecmaVersion: 6 }, + }, + { + code: ` +function foo() { + let a; +} +var a; + `, + parserOptions: { ecmaVersion: 6 }, + }, + { + code: ` +function foo() { + var a; +} +let a; + `, + parserOptions: { ecmaVersion: 6 }, + }, + { + code: ` +function foo() { + var a; +} +var a; + `, + parserOptions: { ecmaVersion: 6 }, + }, + { + code: ` +function foo(a) {} +let a; + `, + parserOptions: { ecmaVersion: 6 }, + }, + { + code: ` +function foo(a) {} +var a; + `, + parserOptions: { ecmaVersion: 6 }, + }, + ` +function foo() { + var Object = 0; +} + `, + { + code: ` +function foo() { + var top = 0; +} + `, + env: { browser: true }, + }, + { code: 'var Object = 0;', options: [{ builtinGlobals: true }] }, + { + code: 'var top = 0;', + options: [{ builtinGlobals: true }], + env: { browser: true }, + }, + { + code: ` +function foo(cb) { + (function (cb) { + cb(42); + })(cb); +} + `, + options: [{ allow: ['cb'] }], + }, + ], + invalid: [ + { + code: ` +function a(x) { + var b = function c() { + var x = 'foo'; + }; +} + `, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'x', + shadowedLine: 2, + shadowedColumn: 12, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +var a = x => { + var b = () => { + var x = 'foo'; + }; +}; + `, + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'x', + shadowedLine: 2, + shadowedColumn: 9, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +function a(x) { + var b = function () { + var x = 'foo'; + }; +} + `, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'x', + shadowedLine: 2, + shadowedColumn: 12, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +var x = 1; +function a(x) { + return ++x; +} + `, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'x', + shadowedLine: 2, + shadowedColumn: 5, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +var a = 3; +function b() { + var a = 10; +} + `, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'a', + shadowedLine: 2, + shadowedColumn: 5, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +var a = 3; +function b() { + var a = 10; +} +setTimeout(function () { + b(); +}, 0); + `, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'a', + shadowedLine: 2, + shadowedColumn: 5, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +var a = 3; +function b() { + var a = 10; + var b = 0; +} +setTimeout(function () { + b(); +}, 0); + `, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'a', + shadowedLine: 2, + shadowedColumn: 5, + }, + type: AST_NODE_TYPES.Identifier, + }, + { + messageId: 'noShadow', + data: { + name: 'b', + shadowedLine: 3, + shadowedColumn: 10, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +var x = 1; +{ + let x = 2; +} + `, + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'x', + shadowedLine: 2, + shadowedColumn: 5, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +let x = 1; +{ + const x = 2; +} + `, + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'x', + shadowedLine: 2, + shadowedColumn: 5, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +{ + let a; +} +function a() {} + `, + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'a', + shadowedLine: 5, + shadowedColumn: 10, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +{ + const a = 0; +} +function a() {} + `, + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'a', + shadowedLine: 5, + shadowedColumn: 10, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +function foo() { + let a; +} +function a() {} + `, + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'a', + shadowedLine: 5, + shadowedColumn: 10, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +function foo() { + var a; +} +function a() {} + `, + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'a', + shadowedLine: 5, + shadowedColumn: 10, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +function foo(a) {} +function a() {} + `, + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'a', + shadowedLine: 3, + shadowedColumn: 10, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +{ + let a; +} +let a; + `, + options: [{ hoist: 'all' }], + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'a', + shadowedLine: 5, + shadowedColumn: 5, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +{ + let a; +} +var a; + `, + options: [{ hoist: 'all' }], + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'a', + shadowedLine: 5, + shadowedColumn: 5, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +{ + let a; +} +function a() {} + `, + options: [{ hoist: 'all' }], + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'a', + shadowedLine: 5, + shadowedColumn: 10, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +{ + const a = 0; +} +const a = 1; + `, + options: [{ hoist: 'all' }], + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'a', + shadowedLine: 5, + shadowedColumn: 7, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +{ + const a = 0; +} +var a; + `, + options: [{ hoist: 'all' }], + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'a', + shadowedLine: 5, + shadowedColumn: 5, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +{ + const a = 0; +} +function a() {} + `, + options: [{ hoist: 'all' }], + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'a', + shadowedLine: 5, + shadowedColumn: 10, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +function foo() { + let a; +} +let a; + `, + options: [{ hoist: 'all' }], + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'a', + shadowedLine: 5, + shadowedColumn: 5, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +function foo() { + let a; +} +var a; + `, + options: [{ hoist: 'all' }], + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'a', + shadowedLine: 5, + shadowedColumn: 5, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +function foo() { + let a; +} +function a() {} + `, + options: [{ hoist: 'all' }], + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'a', + shadowedLine: 5, + shadowedColumn: 10, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +function foo() { + var a; +} +let a; + `, + options: [{ hoist: 'all' }], + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'a', + shadowedLine: 5, + shadowedColumn: 5, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +function foo() { + var a; +} +var a; + `, + options: [{ hoist: 'all' }], + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'a', + shadowedLine: 5, + shadowedColumn: 5, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +function foo() { + var a; +} +function a() {} + `, + options: [{ hoist: 'all' }], + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'a', + shadowedLine: 5, + shadowedColumn: 10, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +function foo(a) {} +let a; + `, + options: [{ hoist: 'all' }], + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'a', + shadowedLine: 3, + shadowedColumn: 5, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +function foo(a) {} +var a; + `, + options: [{ hoist: 'all' }], + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'a', + shadowedLine: 3, + shadowedColumn: 5, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +function foo(a) {} +function a() {} + `, + options: [{ hoist: 'all' }], + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'a', + shadowedLine: 3, + shadowedColumn: 10, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +(function a() { + function a() {} +})(); + `, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'a', + shadowedLine: 2, + shadowedColumn: 11, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +(function a() { + class a {} +})(); + `, + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'a', + shadowedLine: 2, + shadowedColumn: 11, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +(function a() { + (function a() {}); +})(); + `, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'a', + shadowedLine: 2, + shadowedColumn: 11, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +(function a() { + (class a {}); +})(); + `, + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'a', + shadowedLine: 2, + shadowedColumn: 11, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +(function () { + var a = function (a) {}; +})(); + `, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'a', + shadowedLine: 3, + shadowedColumn: 7, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +(function () { + var a = function () { + function a() {} + }; +})(); + `, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'a', + shadowedLine: 3, + shadowedColumn: 7, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +(function () { + var a = function () { + class a {} + }; +})(); + `, + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'a', + shadowedLine: 3, + shadowedColumn: 7, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +(function () { + var a = function () { + (function a() {}); + }; +})(); + `, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'a', + shadowedLine: 3, + shadowedColumn: 7, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +(function () { + var a = function () { + (class a {}); + }; +})(); + `, + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'a', + shadowedLine: 3, + shadowedColumn: 7, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +(function () { + var a = class { + constructor() { + class a {} + } + }; +})(); + `, + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'a', + shadowedLine: 3, + shadowedColumn: 7, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +class A { + constructor() { + var A; + } +} + `, + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'A', + shadowedLine: 2, + shadowedColumn: 7, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +(function a() { + function a() { + function a() {} + } +})(); + `, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'a', + shadowedLine: 2, + shadowedColumn: 11, + }, + type: AST_NODE_TYPES.Identifier, + }, + { + messageId: 'noShadow', + data: { + name: 'a', + shadowedLine: 3, + shadowedColumn: 12, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +function foo() { + var Object = 0; +} + `, + options: [{ builtinGlobals: true }], + errors: [ + { + messageId: 'noShadowGlobal', + data: { + name: 'Object', + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +function foo() { + var top = 0; +} + `, + options: [{ builtinGlobals: true }], + env: { browser: true }, + errors: [ + { + messageId: 'noShadowGlobal', + data: { + name: 'top', + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: 'var Object = 0;', + options: [{ builtinGlobals: true }], + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, + errors: [ + { + messageId: 'noShadowGlobal', + data: { + name: 'Object', + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: 'var top = 0;', + options: [{ builtinGlobals: true }], + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, + env: { browser: true }, + errors: [ + { + messageId: 'noShadowGlobal', + data: { + name: 'top', + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: 'var Object = 0;', + options: [{ builtinGlobals: true }], + parserOptions: { ecmaFeatures: { globalReturn: true } }, + errors: [ + { + messageId: 'noShadowGlobal', + data: { + name: 'Object', + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: 'var top = 0;', + options: [{ builtinGlobals: true }], + parserOptions: { ecmaFeatures: { globalReturn: true } }, + env: { browser: true }, + errors: [ + { + messageId: 'noShadowGlobal', + data: { + name: 'top', + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +function foo(cb) { + (function (cb) { + cb(42); + })(cb); +} + `, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'cb', + shadowedLine: 2, + shadowedColumn: 14, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + ], +}); diff --git a/packages/eslint-plugin/tests/rules/no-shadow/no-shadow.test.ts b/packages/eslint-plugin/tests/rules/no-shadow/no-shadow.test.ts new file mode 100644 index 000000000000..a09eae009327 --- /dev/null +++ b/packages/eslint-plugin/tests/rules/no-shadow/no-shadow.test.ts @@ -0,0 +1,706 @@ +import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import rule from '../../../src/rules/no-shadow'; +import { RuleTester } from '../../RuleTester'; + +const ruleTester = new RuleTester({ + parserOptions: { + sourceType: 'module', + }, + parser: '@typescript-eslint/parser', +}); + +ruleTester.run('no-shadow TS tests', rule, { + valid: [ + // nested conditional types + ` +export type ArrayInput = Func extends (arg0: Array) => any + ? T[] + : Func extends (...args: infer T) => any + ? T + : never; + `, + ` +function foo() { + var Object = 0; +} + `, + // this params + ` +function test(this: Foo) { + function test2(this: Bar) {} +} + `, + // declaration merging + ` +class Foo { + prop = 1; +} +namespace Foo { + export const v = 2; +} + `, + ` +function Foo() {} +namespace Foo { + export const v = 2; +} + `, + ` +class Foo { + prop = 1; +} +interface Foo { + prop2: string; +} + `, + ` +import type { Foo } from 'bar'; + +declare module 'bar' { + export interface Foo { + x: string; + } +} + `, + // type value shadowing + ` +const x = 1; +type x = string; + `, + ` +const x = 1; +{ + type x = string; +} + `, + { + code: ` +type Foo = 1; + `, + options: [{ ignoreTypeValueShadow: true }], + globals: { + Foo: 'writable', + }, + }, + { + code: ` +type Foo = 1; + `, + options: [ + { + ignoreTypeValueShadow: false, + builtinGlobals: false, + }, + ], + globals: { + Foo: 'writable', + }, + }, + // https://github.com/typescript-eslint/typescript-eslint/issues/2360 + ` +enum Direction { + left = 'left', + right = 'right', +} + `, + // https://github.com/typescript-eslint/typescript-eslint/issues/2447 + { + code: ` +const test = 1; +type Fn = (test: string) => typeof test; + `, + options: [{ ignoreFunctionTypeParameterNameValueShadow: true }], + }, + { + code: ` +type Fn = (Foo: string) => typeof Foo; + `, + options: [ + { + ignoreFunctionTypeParameterNameValueShadow: true, + builtinGlobals: false, + }, + ], + globals: { + Foo: 'writable', + }, + }, + // https://github.com/typescript-eslint/typescript-eslint/issues/2724 + { + code: ` + declare global { + interface ArrayConstructor {} + } + export {}; + `, + options: [{ builtinGlobals: true }], + }, + ` + declare global { + const a: string; + + namespace Foo { + const a: number; + } + } + export {}; + `, + { + code: ` + declare global { + type A = 'foo'; + + namespace Foo { + type A = 'bar'; + } + } + export {}; + `, + options: [{ ignoreTypeValueShadow: false }], + }, + { + code: ` + declare global { + const foo: string; + type Fn = (foo: number) => void; + } + export {}; + `, + options: [{ ignoreFunctionTypeParameterNameValueShadow: false }], + }, + ` +export class Wrapper { + private constructor(private readonly wrapped: Wrapped) {} + + unwrap(): Wrapped { + return this.wrapped; + } + + static create(wrapped: Wrapped) { + return new Wrapper(wrapped); + } +} + `, + { + // https://github.com/typescript-eslint/typescript-eslint/issues/3862 + code: ` +import type { foo } from './foo'; +type bar = number; + +// 'foo' is already declared in the upper scope +// 'bar' is fine +function doThing(foo: number, bar: number) {} + `, + options: [{ ignoreTypeValueShadow: true }], + }, + { + code: ` +import { type foo } from './foo'; + +// 'foo' is already declared in the upper scope +function doThing(foo: number) {} + `, + options: [{ ignoreTypeValueShadow: true }], + }, + { + code: 'const a = [].find(a => a);', + options: [{ ignoreOnInitialization: true }], + }, + { + code: ` +const a = [].find(function (a) { + return a; +}); + `, + options: [{ ignoreOnInitialization: true }], + }, + { + code: 'const [a = [].find(a => true)] = dummy;', + options: [{ ignoreOnInitialization: true }], + }, + { + code: 'const { a = [].find(a => true) } = dummy;', + options: [{ ignoreOnInitialization: true }], + }, + { + code: 'function func(a = [].find(a => true)) {}', + options: [{ ignoreOnInitialization: true }], + }, + { + code: ` +for (const a in [].find(a => true)) { +} + `, + options: [{ ignoreOnInitialization: true }], + }, + { + code: ` +for (const a of [].find(a => true)) { +} + `, + options: [{ ignoreOnInitialization: true }], + }, + { + code: "const a = [].map(a => true).filter(a => a === 'b');", + options: [{ ignoreOnInitialization: true }], + }, + { + code: ` +const a = [] + .map(a => true) + .filter(a => a === 'b') + .find(a => a === 'c'); + `, + options: [{ ignoreOnInitialization: true }], + }, + { + code: 'const { a } = (({ a }) => ({ a }))();', + options: [{ ignoreOnInitialization: true }], + }, + { + code: ` +const person = people.find(item => { + const person = item.name; + return person === 'foo'; +}); + `, + options: [{ ignoreOnInitialization: true }], + }, + { + code: 'var y = bar || foo(y => y);', + options: [{ ignoreOnInitialization: true }], + }, + { + code: 'var y = bar && foo(y => y);', + options: [{ ignoreOnInitialization: true }], + }, + { + code: 'var z = bar(foo(z => z));', + options: [{ ignoreOnInitialization: true }], + }, + { + code: 'var z = boo(bar(foo(z => z)));', + options: [{ ignoreOnInitialization: true }], + }, + { + code: ` +var match = function (person) { + return person.name === 'foo'; +}; +const person = [].find(match); + `, + options: [{ ignoreOnInitialization: true }], + }, + { + code: 'const a = foo(x || (a => {}));', + options: [{ ignoreOnInitialization: true }], + }, + { + code: 'const { a = 1 } = foo(a => {});', + options: [{ ignoreOnInitialization: true }], + }, + { + code: "const person = { ...people.find(person => person.firstName.startsWith('s')) };", + options: [{ ignoreOnInitialization: true }], + parserOptions: { ecmaVersion: 2021 }, + }, + { + code: ` +const person = { + firstName: people + .filter(person => person.firstName.startsWith('s')) + .map(person => person.firstName)[0], +}; + `, + options: [{ ignoreOnInitialization: true }], + parserOptions: { ecmaVersion: 2021 }, + }, + { + code: ` +() => { + const y = foo(y => y); +}; + `, + options: [{ ignoreOnInitialization: true }], + }, + { + code: 'const x = (x => x)();', + options: [{ ignoreOnInitialization: true }], + }, + { + code: 'var y = bar || (y => y)();', + options: [{ ignoreOnInitialization: true }], + }, + { + code: 'var y = bar && (y => y)();', + options: [{ ignoreOnInitialization: true }], + }, + { + code: 'var x = (x => x)((y => y)());', + options: [{ ignoreOnInitialization: true }], + }, + { + code: 'const { a = 1 } = (a => {})();', + options: [{ ignoreOnInitialization: true }], + }, + { + code: ` +() => { + const y = (y => y)(); +}; + `, + options: [{ ignoreOnInitialization: true }], + }, + { code: 'const [x = y => y] = [].map(y => y);' }, + ], + invalid: [ + { + code: ` +type T = 1; +{ + type T = 2; +} + `, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'T', + shadowedLine: 2, + shadowedColumn: 6, + }, + }, + ], + }, + { + code: ` +function foo() { + return function () {}; +} + `, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'T', + shadowedLine: 2, + shadowedColumn: 14, + }, + }, + ], + }, + { + code: ` +const x = 1; +{ + type x = string; +} + `, + options: [{ ignoreTypeValueShadow: false }], + errors: [ + { + messageId: 'noShadow', + data: { + name: 'x', + shadowedLine: 2, + shadowedColumn: 7, + }, + }, + ], + }, + { + code: ` +type Foo = 1; + `, + options: [ + { + ignoreTypeValueShadow: false, + builtinGlobals: true, + }, + ], + globals: { + Foo: 'writable', + }, + errors: [ + { + messageId: 'noShadowGlobal', + data: { + name: 'Foo', + }, + }, + ], + }, + // https://github.com/typescript-eslint/typescript-eslint/issues/2447 + { + code: ` +const test = 1; +type Fn = (test: string) => typeof test; + `, + options: [{ ignoreFunctionTypeParameterNameValueShadow: false }], + errors: [ + { + messageId: 'noShadow', + data: { + name: 'test', + shadowedLine: 2, + shadowedColumn: 7, + }, + }, + ], + }, + { + code: ` +type Fn = (Foo: string) => typeof Foo; + `, + options: [ + { + ignoreFunctionTypeParameterNameValueShadow: false, + builtinGlobals: true, + }, + ], + globals: { + Foo: 'writable', + }, + errors: [ + { + messageId: 'noShadowGlobal', + data: { + name: 'Foo', + }, + }, + ], + }, + { + code: ` +import type { foo } from './foo'; +function doThing(foo: number) {} + `, + options: [{ ignoreTypeValueShadow: false }], + errors: [ + { + messageId: 'noShadow', + data: { + name: 'foo', + shadowedLine: 2, + shadowedColumn: 15, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +import { type foo } from './foo'; +function doThing(foo: number) {} + `, + options: [{ ignoreTypeValueShadow: false }], + errors: [ + { + messageId: 'noShadow', + data: { + name: 'foo', + shadowedLine: 2, + shadowedColumn: 15, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +import { foo } from './foo'; +function doThing(foo: number, bar: number) {} + `, + options: [{ ignoreTypeValueShadow: true }], + errors: [ + { + messageId: 'noShadow', + data: { + name: 'foo', + shadowedLine: 2, + shadowedColumn: 10, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +interface Foo {} + +declare module 'bar' { + export interface Foo { + x: string; + } +} + `, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'Foo', + shadowedLine: 2, + shadowedColumn: 11, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +import type { Foo } from 'bar'; + +declare module 'baz' { + export interface Foo { + x: string; + } +} + `, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'Foo', + shadowedLine: 2, + shadowedColumn: 15, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +import type { Foo } from 'bar'; + +declare module 'bar' { + export type Foo = string; +} + `, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'Foo', + shadowedLine: 2, + shadowedColumn: 15, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +import type { Foo } from 'bar'; + +declare module 'bar' { + interface Foo { + x: string; + } +} + `, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'Foo', + shadowedLine: 2, + shadowedColumn: 15, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +import { type Foo } from 'bar'; + +declare module 'baz' { + export interface Foo { + x: string; + } +} + `, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'Foo', + shadowedLine: 2, + shadowedColumn: 15, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +import { type Foo } from 'bar'; + +declare module 'bar' { + export type Foo = string; +} + `, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'Foo', + shadowedLine: 2, + shadowedColumn: 15, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +import { type Foo } from 'bar'; + +declare module 'bar' { + interface Foo { + x: string; + } +} + `, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'Foo', + shadowedLine: 2, + shadowedColumn: 15, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + { + code: ` +let x = foo((x, y) => {}); +let y; + `, + parserOptions: { ecmaVersion: 6 }, + options: [{ hoist: 'all' }], + errors: [ + { + messageId: 'noShadow', + data: { + name: 'x', + shadowedLine: 2, + shadowedColumn: 5, + }, + type: AST_NODE_TYPES.Identifier, + }, + { + messageId: 'noShadow', + data: { + name: 'y', + shadowedLine: 3, + shadowedColumn: 5, + }, + type: AST_NODE_TYPES.Identifier, + }, + ], + }, + ], +}); From 8d2d25f1275644993a919c71af74a23451a883ef Mon Sep 17 00:00:00 2001 From: "typescript-eslint[bot]" <53356952+typescript-eslint[bot]@users.noreply.github.com> Date: Sun, 26 Jun 2022 20:21:55 -0400 Subject: [PATCH 16/18] chore: update sponsors (#5257) Co-authored-by: typescript-eslint[bot] --- packages/website/data/sponsors.json | 30 +++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/packages/website/data/sponsors.json b/packages/website/data/sponsors.json index ff4ea8fa6853..76c205b4f0e4 100644 --- a/packages/website/data/sponsors.json +++ b/packages/website/data/sponsors.json @@ -1,4 +1,12 @@ [ + { + "id": "Indeed", + "image": "https://images.opencollective.com/indeed/4b8725e/logo.png", + "name": "Indeed", + "tier": "sponsor", + "totalDonations": 1005000, + "website": "https://Indeed.com" + }, { "id": "Nx (by Nrwl)", "image": "https://images.opencollective.com/nx/0efbe42/logo.png", @@ -55,6 +63,13 @@ "totalDonations": 60000, "website": "https://www.gitbook.com" }, + { + "id": "GitHub", + "image": "https://images.opencollective.com/guest-f9980024/avatar.png", + "name": "GitHub", + "tier": "supporter", + "totalDonations": 56674 + }, { "id": "Future Processing", "image": "https://images.opencollective.com/future-processing/1410d26/logo.png", @@ -158,6 +173,13 @@ "totalDonations": 10000, "website": "https://www.theguardian.com/" }, + { + "id": "Yuta Fukazawa", + "image": "https://images.opencollective.com/yuta-fukazawa/a337601/avatar.png", + "name": "Yuta Fukazawa", + "tier": "contributor", + "totalDonations": 10000 + }, { "id": "Tripwire, Inc.", "image": "https://images.opencollective.com/tripwire/7599e30/logo.png", @@ -205,14 +227,6 @@ "totalDonations": 5000, "website": "https://backscattering.de" }, - { - "id": "Indeed", - "image": "https://images.opencollective.com/indeed/4b8725e/logo.png", - "name": "Indeed", - "tier": "contributor", - "totalDonations": 5000, - "website": "https://Indeed.com" - }, { "id": "Corellium", "image": "https://images.opencollective.com/corellium/aa8c228/logo.png", From b04b2ce1ba90d94718891f2562dd210a6d7b8609 Mon Sep 17 00:00:00 2001 From: Zzzen Date: Mon, 27 Jun 2022 10:09:27 +0800 Subject: [PATCH 17/18] feat: treat `this` in `typeof this` as a `ThisExpression` (#4382) --- packages/ast-spec/src/unions/EntityName.ts | 3 +- .../tests/eslint-rules/no-undef.test.ts | 10 + .../src/referencer/ClassVisitor.ts | 10 +- .../src/referencer/TypeVisitor.ts | 19 +- .../tests/fixtures/decorators/typeof-this.ts | 5 + .../fixtures/decorators/typeof-this.ts.shot | 142 +++++ .../typescript/types/typeof-this.src.ts | 2 + packages/typescript-estree/src/convert.ts | 8 + packages/typescript-estree/src/node-utils.ts | 26 + .../src/ts-estree/estree-to-ts-node-types.ts | 5 +- .../tests/ast-alignment/utils.ts | 26 +- .../semantic-diagnostics-enabled.test.ts.snap | 2 + .../typescript/types/typeof-this.src.ts.shot | 530 ++++++++++++++++++ 13 files changed, 774 insertions(+), 14 deletions(-) create mode 100644 packages/scope-manager/tests/fixtures/decorators/typeof-this.ts create mode 100644 packages/scope-manager/tests/fixtures/decorators/typeof-this.ts.shot create mode 100644 packages/shared-fixtures/fixtures/typescript/types/typeof-this.src.ts create mode 100644 packages/typescript-estree/tests/snapshots/typescript/types/typeof-this.src.ts.shot diff --git a/packages/ast-spec/src/unions/EntityName.ts b/packages/ast-spec/src/unions/EntityName.ts index 82f7b1c9b0ca..8a7364bef6b9 100644 --- a/packages/ast-spec/src/unions/EntityName.ts +++ b/packages/ast-spec/src/unions/EntityName.ts @@ -1,4 +1,5 @@ import type { Identifier } from '../expression/Identifier/spec'; +import type { ThisExpression } from '../expression/ThisExpression/spec'; import type { TSQualifiedName } from '../type/TSQualifiedName/spec'; -export type EntityName = Identifier | TSQualifiedName; +export type EntityName = Identifier | ThisExpression | TSQualifiedName; diff --git a/packages/eslint-plugin/tests/eslint-rules/no-undef.test.ts b/packages/eslint-plugin/tests/eslint-rules/no-undef.test.ts index 9cff63994d39..3335e04e7419 100644 --- a/packages/eslint-plugin/tests/eslint-rules/no-undef.test.ts +++ b/packages/eslint-plugin/tests/eslint-rules/no-undef.test.ts @@ -248,6 +248,16 @@ class Foo {} ` export type AppState = typeof import('./src/store/reducers').default; `, + ` +let self: typeof this; +let foo: typeof this.foo; +const obj = { + foo: '', + bar() { + let self: typeof this; + }, +}; + `, ], invalid: [ { diff --git a/packages/scope-manager/src/referencer/ClassVisitor.ts b/packages/scope-manager/src/referencer/ClassVisitor.ts index 6f5050442138..92dab53ca90a 100644 --- a/packages/scope-manager/src/referencer/ClassVisitor.ts +++ b/packages/scope-manager/src/referencer/ClassVisitor.ts @@ -293,7 +293,7 @@ class ClassVisitor extends Visitor { node.typeAnnotation.type === AST_NODE_TYPES.TSTypeReference && this.#emitDecoratorMetadata ) { - let identifier: TSESTree.Identifier; + let entityName: TSESTree.Identifier | TSESTree.ThisExpression; if ( node.typeAnnotation.typeName.type === AST_NODE_TYPES.TSQualifiedName ) { @@ -301,13 +301,15 @@ class ClassVisitor extends Visitor { while (iter.left.type === AST_NODE_TYPES.TSQualifiedName) { iter = iter.left; } - identifier = iter.left; + entityName = iter.left; } else { - identifier = node.typeAnnotation.typeName; + entityName = node.typeAnnotation.typeName; } if (withDecorators) { - this.#referencer.currentScope().referenceDualValueType(identifier); + if (entityName.type === AST_NODE_TYPES.Identifier) { + this.#referencer.currentScope().referenceDualValueType(entityName); + } if (node.typeAnnotation.typeParameters) { this.visitType(node.typeAnnotation.typeParameters); diff --git a/packages/scope-manager/src/referencer/TypeVisitor.ts b/packages/scope-manager/src/referencer/TypeVisitor.ts index 0d345a149a29..4b39676850db 100644 --- a/packages/scope-manager/src/referencer/TypeVisitor.ts +++ b/packages/scope-manager/src/referencer/TypeVisitor.ts @@ -256,15 +256,20 @@ class TypeVisitor extends Visitor { // a type query `typeof foo` is a special case that references a _non-type_ variable, protected TSTypeQuery(node: TSESTree.TSTypeQuery): void { - if (node.exprName.type === AST_NODE_TYPES.Identifier) { - this.#referencer.currentScope().referenceValue(node.exprName); - } else { - let expr = node.exprName.left; - while (expr.type !== AST_NODE_TYPES.Identifier) { - expr = expr.left; + let entityName: TSESTree.Identifier | TSESTree.ThisExpression; + if (node.exprName.type === AST_NODE_TYPES.TSQualifiedName) { + let iter = node.exprName; + while (iter.left.type === AST_NODE_TYPES.TSQualifiedName) { + iter = iter.left; } - this.#referencer.currentScope().referenceValue(expr); + entityName = iter.left; + } else { + entityName = node.exprName; } + if (entityName.type === AST_NODE_TYPES.Identifier) { + this.#referencer.currentScope().referenceValue(entityName); + } + this.visit(node.typeParameters); } diff --git a/packages/scope-manager/tests/fixtures/decorators/typeof-this.ts b/packages/scope-manager/tests/fixtures/decorators/typeof-this.ts new file mode 100644 index 000000000000..1b68d92331b5 --- /dev/null +++ b/packages/scope-manager/tests/fixtures/decorators/typeof-this.ts @@ -0,0 +1,5 @@ +function decorator() {} +@decorator +class Foo { + bar(baz: typeof this) {} +} diff --git a/packages/scope-manager/tests/fixtures/decorators/typeof-this.ts.shot b/packages/scope-manager/tests/fixtures/decorators/typeof-this.ts.shot new file mode 100644 index 000000000000..39c4468e53c7 --- /dev/null +++ b/packages/scope-manager/tests/fixtures/decorators/typeof-this.ts.shot @@ -0,0 +1,142 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`decorators typeof-this 1`] = ` +ScopeManager { + variables: Array [ + ImplicitGlobalConstTypeVariable, + Variable$2 { + defs: Array [ + FunctionNameDefinition$1 { + name: Identifier<"decorator">, + node: FunctionDeclaration$1, + }, + ], + name: "decorator", + references: Array [ + Reference$1 { + identifier: Identifier<"decorator">, + isRead: true, + isTypeReference: false, + isValueReference: true, + isWrite: false, + resolved: Variable$2, + }, + ], + isValueVariable: true, + isTypeVariable: false, + }, + Variable$3 { + defs: Array [], + name: "arguments", + references: Array [], + isValueVariable: true, + isTypeVariable: true, + }, + Variable$4 { + defs: Array [ + ClassNameDefinition$2 { + name: Identifier<"Foo">, + node: ClassDeclaration$2, + }, + ], + name: "Foo", + references: Array [], + isValueVariable: true, + isTypeVariable: true, + }, + Variable$5 { + defs: Array [ + ClassNameDefinition$3 { + name: Identifier<"Foo">, + node: ClassDeclaration$2, + }, + ], + name: "Foo", + references: Array [], + isValueVariable: true, + isTypeVariable: true, + }, + Variable$6 { + defs: Array [], + name: "arguments", + references: Array [], + isValueVariable: true, + isTypeVariable: true, + }, + Variable$7 { + defs: Array [ + ParameterDefinition$4 { + name: Identifier<"baz">, + node: FunctionExpression$3, + }, + ], + name: "baz", + references: Array [], + isValueVariable: true, + isTypeVariable: false, + }, + ], + scopes: Array [ + GlobalScope$1 { + block: Program$4, + isStrict: false, + references: Array [ + Reference$1, + ], + set: Map { + "const" => ImplicitGlobalConstTypeVariable, + "decorator" => Variable$2, + "Foo" => Variable$4, + }, + type: "global", + upper: null, + variables: Array [ + ImplicitGlobalConstTypeVariable, + Variable$2, + Variable$4, + ], + }, + FunctionScope$2 { + block: FunctionDeclaration$1, + isStrict: false, + references: Array [], + set: Map { + "arguments" => Variable$3, + }, + type: "function", + upper: GlobalScope$1, + variables: Array [ + Variable$3, + ], + }, + ClassScope$3 { + block: ClassDeclaration$2, + isStrict: true, + references: Array [], + set: Map { + "Foo" => Variable$5, + }, + type: "class", + upper: GlobalScope$1, + variables: Array [ + Variable$5, + ], + }, + FunctionScope$4 { + block: FunctionExpression$3, + isStrict: true, + references: Array [], + set: Map { + "arguments" => Variable$6, + "baz" => Variable$7, + }, + type: "function", + upper: ClassScope$3, + variables: Array [ + Variable$6, + Variable$7, + ], + }, + ], +} +`; diff --git a/packages/shared-fixtures/fixtures/typescript/types/typeof-this.src.ts b/packages/shared-fixtures/fixtures/typescript/types/typeof-this.src.ts new file mode 100644 index 000000000000..6cad5147a8ae --- /dev/null +++ b/packages/shared-fixtures/fixtures/typescript/types/typeof-this.src.ts @@ -0,0 +1,2 @@ +let self: typeof this; +let foo: typeof this.foo; diff --git a/packages/typescript-estree/src/convert.ts b/packages/typescript-estree/src/convert.ts index 864f85d2cd2b..be09a2b387db 100644 --- a/packages/typescript-estree/src/convert.ts +++ b/packages/typescript-estree/src/convert.ts @@ -20,6 +20,7 @@ import { isComputedProperty, isESTreeClassMember, isOptional, + isThisInTypeQuery, TSError, unescapeStringLiteralText, } from './node-utils'; @@ -799,6 +800,13 @@ export class Converter { } case SyntaxKind.Identifier: { + if (isThisInTypeQuery(node)) { + // special case for `typeof this.foo` - TS emits an Identifier for `this` + // but we want to treat it as a ThisExpression for consistency + return this.createNode(node, { + type: AST_NODE_TYPES.ThisExpression, + }); + } return this.createNode(node, { type: AST_NODE_TYPES.Identifier, name: node.text, diff --git a/packages/typescript-estree/src/node-utils.ts b/packages/typescript-estree/src/node-utils.ts index 132971f66329..1f7b75651d51 100644 --- a/packages/typescript-estree/src/node-utils.ts +++ b/packages/typescript-estree/src/node-utils.ts @@ -662,3 +662,29 @@ export function firstDefined( } return undefined; } + +export function identifierIsThisKeyword(id: ts.Identifier): boolean { + return id.originalKeywordKind === SyntaxKind.ThisKeyword; +} + +export function isThisIdentifier( + node: ts.Node | undefined, +): node is ts.Identifier { + return ( + !!node && + node.kind === SyntaxKind.Identifier && + identifierIsThisKeyword(node as ts.Identifier) + ); +} + +export function isThisInTypeQuery(node: ts.Node): boolean { + if (!isThisIdentifier(node)) { + return false; + } + + while (ts.isQualifiedName(node.parent) && node.parent.left === node) { + node = node.parent; + } + + return node.parent.kind === SyntaxKind.TypeQuery; +} diff --git a/packages/typescript-estree/src/ts-estree/estree-to-ts-node-types.ts b/packages/typescript-estree/src/ts-estree/estree-to-ts-node-types.ts index 666909b5a714..82d5ace2c2ae 100644 --- a/packages/typescript-estree/src/ts-estree/estree-to-ts-node-types.ts +++ b/packages/typescript-estree/src/ts-estree/estree-to-ts-node-types.ts @@ -149,7 +149,10 @@ export interface EstreeToTsNodeTypes { [AST_NODE_TYPES.TemplateLiteral]: | ts.NoSubstitutionTemplateLiteral | ts.TemplateExpression; - [AST_NODE_TYPES.ThisExpression]: ts.ThisExpression | ts.KeywordTypeNode; + [AST_NODE_TYPES.ThisExpression]: + | ts.ThisExpression + | ts.KeywordTypeNode + | ts.Identifier; [AST_NODE_TYPES.ThrowStatement]: ts.ThrowStatement; [AST_NODE_TYPES.TryStatement]: ts.TryStatement; [AST_NODE_TYPES.TSAbstractPropertyDefinition]: ts.PropertyDeclaration; diff --git a/packages/typescript-estree/tests/ast-alignment/utils.ts b/packages/typescript-estree/tests/ast-alignment/utils.ts index e74d1daf3ff0..f8c434587089 100644 --- a/packages/typescript-estree/tests/ast-alignment/utils.ts +++ b/packages/typescript-estree/tests/ast-alignment/utils.ts @@ -1,6 +1,6 @@ // babel types are something we don't really care about /* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/restrict-plus-operands */ -import type { File, Program } from '@babel/types'; +import type { File, Identifier, Program, TSTypeQuery } from '@babel/types'; import { AST_NODE_TYPES, TSESTree } from '../../src/ts-estree'; import { deeplyCopy, omitDeep } from '../../tools/test-utils'; @@ -295,6 +295,30 @@ export function preprocessBabylonAST(ast: File): any { delete node.loc.start.index; } }, + /** + * ts-estree: `this` in `typeof this` has been converted from `Identifier` to `ThisExpression` + * @see https://github.com/typescript-eslint/typescript-eslint/pull/4382 + */ + TSTypeQuery(node: any) { + const { exprName } = node as TSTypeQuery; + let identifier: Identifier; + if (exprName.type === AST_NODE_TYPES.TSImportType) { + return; + } else if (exprName.type === AST_NODE_TYPES.TSQualifiedName) { + let iter = exprName; + while (iter.left.type === AST_NODE_TYPES.TSQualifiedName) { + iter = iter.left; + } + identifier = iter.left; + } else { + identifier = exprName; + } + + if (identifier.name === 'this') { + (identifier.type as string) = AST_NODE_TYPES.ThisExpression; + delete (identifier as { name?: string }).name; + } + }, }, ); } diff --git a/packages/typescript-estree/tests/lib/__snapshots__/semantic-diagnostics-enabled.test.ts.snap b/packages/typescript-estree/tests/lib/__snapshots__/semantic-diagnostics-enabled.test.ts.snap index 16e81894b386..6cabb17f5166 100644 --- a/packages/typescript-estree/tests/lib/__snapshots__/semantic-diagnostics-enabled.test.ts.snap +++ b/packages/typescript-estree/tests/lib/__snapshots__/semantic-diagnostics-enabled.test.ts.snap @@ -2786,6 +2786,8 @@ exports[`Parse all fixtures with "errorOnTypeScriptSyntacticAndSemanticIssues" e exports[`Parse all fixtures with "errorOnTypeScriptSyntacticAndSemanticIssues" enabled fixtures/typescript/types/typeof.src 1`] = `"TEST OUTPUT: No semantic or syntactic issues found"`; +exports[`Parse all fixtures with "errorOnTypeScriptSyntacticAndSemanticIssues" enabled fixtures/typescript/types/typeof-this.src 1`] = `"TEST OUTPUT: No semantic or syntactic issues found"`; + exports[`Parse all fixtures with "errorOnTypeScriptSyntacticAndSemanticIssues" enabled fixtures/typescript/types/typeof-with-type-parameters.src 1`] = `"TEST OUTPUT: No semantic or syntactic issues found"`; exports[`Parse all fixtures with "errorOnTypeScriptSyntacticAndSemanticIssues" enabled fixtures/typescript/types/union-intersection.src 1`] = `"TEST OUTPUT: No semantic or syntactic issues found"`; diff --git a/packages/typescript-estree/tests/snapshots/typescript/types/typeof-this.src.ts.shot b/packages/typescript-estree/tests/snapshots/typescript/types/typeof-this.src.ts.shot new file mode 100644 index 000000000000..c708076ab555 --- /dev/null +++ b/packages/typescript-estree/tests/snapshots/typescript/types/typeof-this.src.ts.shot @@ -0,0 +1,530 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`typescript types typeof-this.src 1`] = ` +Object { + "body": Array [ + Object { + "declarations": Array [ + Object { + "id": Object { + "loc": Object { + "end": Object { + "column": 21, + "line": 1, + }, + "start": Object { + "column": 4, + "line": 1, + }, + }, + "name": "self", + "range": Array [ + 4, + 21, + ], + "type": "Identifier", + "typeAnnotation": Object { + "loc": Object { + "end": Object { + "column": 21, + "line": 1, + }, + "start": Object { + "column": 8, + "line": 1, + }, + }, + "range": Array [ + 8, + 21, + ], + "type": "TSTypeAnnotation", + "typeAnnotation": Object { + "exprName": Object { + "loc": Object { + "end": Object { + "column": 21, + "line": 1, + }, + "start": Object { + "column": 17, + "line": 1, + }, + }, + "range": Array [ + 17, + 21, + ], + "type": "ThisExpression", + }, + "loc": Object { + "end": Object { + "column": 21, + "line": 1, + }, + "start": Object { + "column": 10, + "line": 1, + }, + }, + "range": Array [ + 10, + 21, + ], + "type": "TSTypeQuery", + "typeParameters": undefined, + }, + }, + }, + "init": null, + "loc": Object { + "end": Object { + "column": 21, + "line": 1, + }, + "start": Object { + "column": 4, + "line": 1, + }, + }, + "range": Array [ + 4, + 21, + ], + "type": "VariableDeclarator", + }, + ], + "kind": "let", + "loc": Object { + "end": Object { + "column": 22, + "line": 1, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "range": Array [ + 0, + 22, + ], + "type": "VariableDeclaration", + }, + Object { + "declarations": Array [ + Object { + "id": Object { + "loc": Object { + "end": Object { + "column": 24, + "line": 2, + }, + "start": Object { + "column": 4, + "line": 2, + }, + }, + "name": "foo", + "range": Array [ + 27, + 47, + ], + "type": "Identifier", + "typeAnnotation": Object { + "loc": Object { + "end": Object { + "column": 24, + "line": 2, + }, + "start": Object { + "column": 7, + "line": 2, + }, + }, + "range": Array [ + 30, + 47, + ], + "type": "TSTypeAnnotation", + "typeAnnotation": Object { + "exprName": Object { + "left": Object { + "loc": Object { + "end": Object { + "column": 20, + "line": 2, + }, + "start": Object { + "column": 16, + "line": 2, + }, + }, + "range": Array [ + 39, + 43, + ], + "type": "ThisExpression", + }, + "loc": Object { + "end": Object { + "column": 24, + "line": 2, + }, + "start": Object { + "column": 16, + "line": 2, + }, + }, + "range": Array [ + 39, + 47, + ], + "right": Object { + "loc": Object { + "end": Object { + "column": 24, + "line": 2, + }, + "start": Object { + "column": 21, + "line": 2, + }, + }, + "name": "foo", + "range": Array [ + 44, + 47, + ], + "type": "Identifier", + }, + "type": "TSQualifiedName", + }, + "loc": Object { + "end": Object { + "column": 24, + "line": 2, + }, + "start": Object { + "column": 9, + "line": 2, + }, + }, + "range": Array [ + 32, + 47, + ], + "type": "TSTypeQuery", + "typeParameters": undefined, + }, + }, + }, + "init": null, + "loc": Object { + "end": Object { + "column": 24, + "line": 2, + }, + "start": Object { + "column": 4, + "line": 2, + }, + }, + "range": Array [ + 27, + 47, + ], + "type": "VariableDeclarator", + }, + ], + "kind": "let", + "loc": Object { + "end": Object { + "column": 25, + "line": 2, + }, + "start": Object { + "column": 0, + "line": 2, + }, + }, + "range": Array [ + 23, + 48, + ], + "type": "VariableDeclaration", + }, + ], + "comments": Array [], + "loc": Object { + "end": Object { + "column": 0, + "line": 3, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "range": Array [ + 0, + 49, + ], + "sourceType": "script", + "tokens": Array [ + Object { + "loc": Object { + "end": Object { + "column": 3, + "line": 1, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "range": Array [ + 0, + 3, + ], + "type": "Keyword", + "value": "let", + }, + Object { + "loc": Object { + "end": Object { + "column": 8, + "line": 1, + }, + "start": Object { + "column": 4, + "line": 1, + }, + }, + "range": Array [ + 4, + 8, + ], + "type": "Identifier", + "value": "self", + }, + Object { + "loc": Object { + "end": Object { + "column": 9, + "line": 1, + }, + "start": Object { + "column": 8, + "line": 1, + }, + }, + "range": Array [ + 8, + 9, + ], + "type": "Punctuator", + "value": ":", + }, + Object { + "loc": Object { + "end": Object { + "column": 16, + "line": 1, + }, + "start": Object { + "column": 10, + "line": 1, + }, + }, + "range": Array [ + 10, + 16, + ], + "type": "Keyword", + "value": "typeof", + }, + Object { + "loc": Object { + "end": Object { + "column": 21, + "line": 1, + }, + "start": Object { + "column": 17, + "line": 1, + }, + }, + "range": Array [ + 17, + 21, + ], + "type": "Keyword", + "value": "this", + }, + Object { + "loc": Object { + "end": Object { + "column": 22, + "line": 1, + }, + "start": Object { + "column": 21, + "line": 1, + }, + }, + "range": Array [ + 21, + 22, + ], + "type": "Punctuator", + "value": ";", + }, + Object { + "loc": Object { + "end": Object { + "column": 3, + "line": 2, + }, + "start": Object { + "column": 0, + "line": 2, + }, + }, + "range": Array [ + 23, + 26, + ], + "type": "Keyword", + "value": "let", + }, + Object { + "loc": Object { + "end": Object { + "column": 7, + "line": 2, + }, + "start": Object { + "column": 4, + "line": 2, + }, + }, + "range": Array [ + 27, + 30, + ], + "type": "Identifier", + "value": "foo", + }, + Object { + "loc": Object { + "end": Object { + "column": 8, + "line": 2, + }, + "start": Object { + "column": 7, + "line": 2, + }, + }, + "range": Array [ + 30, + 31, + ], + "type": "Punctuator", + "value": ":", + }, + Object { + "loc": Object { + "end": Object { + "column": 15, + "line": 2, + }, + "start": Object { + "column": 9, + "line": 2, + }, + }, + "range": Array [ + 32, + 38, + ], + "type": "Keyword", + "value": "typeof", + }, + Object { + "loc": Object { + "end": Object { + "column": 20, + "line": 2, + }, + "start": Object { + "column": 16, + "line": 2, + }, + }, + "range": Array [ + 39, + 43, + ], + "type": "Keyword", + "value": "this", + }, + Object { + "loc": Object { + "end": Object { + "column": 21, + "line": 2, + }, + "start": Object { + "column": 20, + "line": 2, + }, + }, + "range": Array [ + 43, + 44, + ], + "type": "Punctuator", + "value": ".", + }, + Object { + "loc": Object { + "end": Object { + "column": 24, + "line": 2, + }, + "start": Object { + "column": 21, + "line": 2, + }, + }, + "range": Array [ + 44, + 47, + ], + "type": "Identifier", + "value": "foo", + }, + Object { + "loc": Object { + "end": Object { + "column": 25, + "line": 2, + }, + "start": Object { + "column": 24, + "line": 2, + }, + }, + "range": Array [ + 47, + 48, + ], + "type": "Punctuator", + "value": ";", + }, + ], + "type": "Program", +} +`; From d491665d2d168690a61c3b62a681011098be0381 Mon Sep 17 00:00:00 2001 From: James Henry Date: Mon, 27 Jun 2022 17:03:35 +0000 Subject: [PATCH 18/18] chore: publish v5.30.0 --- CHANGELOG.md | 12 ++++++++++++ lerna.json | 2 +- packages/ast-spec/CHANGELOG.md | 11 +++++++++++ packages/ast-spec/package.json | 2 +- packages/eslint-plugin-internal/CHANGELOG.md | 8 ++++++++ packages/eslint-plugin-internal/package.json | 6 +++--- packages/eslint-plugin-tslint/CHANGELOG.md | 8 ++++++++ packages/eslint-plugin-tslint/package.json | 6 +++--- packages/eslint-plugin/CHANGELOG.md | 12 ++++++++++++ packages/eslint-plugin/package.json | 8 ++++---- packages/experimental-utils/CHANGELOG.md | 8 ++++++++ packages/experimental-utils/package.json | 4 ++-- packages/parser/CHANGELOG.md | 8 ++++++++ packages/parser/package.json | 8 ++++---- packages/scope-manager/CHANGELOG.md | 11 +++++++++++ packages/scope-manager/package.json | 8 ++++---- packages/shared-fixtures/CHANGELOG.md | 11 +++++++++++ packages/shared-fixtures/package.json | 2 +- packages/type-utils/CHANGELOG.md | 8 ++++++++ packages/type-utils/package.json | 6 +++--- packages/types/CHANGELOG.md | 8 ++++++++ packages/types/package.json | 2 +- packages/typescript-estree/CHANGELOG.md | 11 +++++++++++ packages/typescript-estree/package.json | 8 ++++---- packages/utils/CHANGELOG.md | 8 ++++++++ packages/utils/package.json | 8 ++++---- packages/visitor-keys/CHANGELOG.md | 8 ++++++++ packages/visitor-keys/package.json | 4 ++-- packages/website-eslint/CHANGELOG.md | 8 ++++++++ packages/website-eslint/package.json | 16 ++++++++-------- packages/website/CHANGELOG.md | 8 ++++++++ packages/website/package.json | 6 +++--- 32 files changed, 196 insertions(+), 48 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a30dbca9a801..d3e897d2bd19 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,18 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [5.30.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.29.0...v5.30.0) (2022-06-27) + + +### Features + +* **eslint-plugin:** [no-shadow] add shadowed variable location to the error message ([#5183](https://github.com/typescript-eslint/typescript-eslint/issues/5183)) ([8ca08e9](https://github.com/typescript-eslint/typescript-eslint/commit/8ca08e9f18d59b29715c667fbb7d237f6e9a96ba)) +* treat `this` in `typeof this` as a `ThisExpression` ([#4382](https://github.com/typescript-eslint/typescript-eslint/issues/4382)) ([b04b2ce](https://github.com/typescript-eslint/typescript-eslint/commit/b04b2ce1ba90d94718891f2562dd210a6d7b8609)) + + + + + # [5.29.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.28.0...v5.29.0) (2022-06-20) diff --git a/lerna.json b/lerna.json index df0f01f98725..cf6d5002901b 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "5.29.0", + "version": "5.30.0", "npmClient": "yarn", "useWorkspaces": true, "stream": true diff --git a/packages/ast-spec/CHANGELOG.md b/packages/ast-spec/CHANGELOG.md index daaae162f172..7a23e114979c 100644 --- a/packages/ast-spec/CHANGELOG.md +++ b/packages/ast-spec/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [5.30.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.29.0...v5.30.0) (2022-06-27) + + +### Features + +* treat `this` in `typeof this` as a `ThisExpression` ([#4382](https://github.com/typescript-eslint/typescript-eslint/issues/4382)) ([b04b2ce](https://github.com/typescript-eslint/typescript-eslint/commit/b04b2ce1ba90d94718891f2562dd210a6d7b8609)) + + + + + # [5.29.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.28.0...v5.29.0) (2022-06-20) **Note:** Version bump only for package @typescript-eslint/ast-spec diff --git a/packages/ast-spec/package.json b/packages/ast-spec/package.json index 20d24f5cc6c2..74353e0b5baa 100644 --- a/packages/ast-spec/package.json +++ b/packages/ast-spec/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/ast-spec", - "version": "5.29.0", + "version": "5.30.0", "description": "TypeScript-ESTree AST spec", "private": true, "keywords": [ diff --git a/packages/eslint-plugin-internal/CHANGELOG.md b/packages/eslint-plugin-internal/CHANGELOG.md index c524f25a676b..773d918f5188 100644 --- a/packages/eslint-plugin-internal/CHANGELOG.md +++ b/packages/eslint-plugin-internal/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [5.30.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.29.0...v5.30.0) (2022-06-27) + +**Note:** Version bump only for package @typescript-eslint/eslint-plugin-internal + + + + + # [5.29.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.28.0...v5.29.0) (2022-06-20) **Note:** Version bump only for package @typescript-eslint/eslint-plugin-internal diff --git a/packages/eslint-plugin-internal/package.json b/packages/eslint-plugin-internal/package.json index 7079d11f6c8a..873c70308e51 100644 --- a/packages/eslint-plugin-internal/package.json +++ b/packages/eslint-plugin-internal/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/eslint-plugin-internal", - "version": "5.29.0", + "version": "5.30.0", "private": true, "main": "dist/index.js", "scripts": { @@ -14,8 +14,8 @@ }, "dependencies": { "@types/prettier": "*", - "@typescript-eslint/scope-manager": "5.29.0", - "@typescript-eslint/utils": "5.29.0", + "@typescript-eslint/scope-manager": "5.30.0", + "@typescript-eslint/utils": "5.30.0", "prettier": "*" } } diff --git a/packages/eslint-plugin-tslint/CHANGELOG.md b/packages/eslint-plugin-tslint/CHANGELOG.md index 1a51e36cbd3d..d9855c07d360 100644 --- a/packages/eslint-plugin-tslint/CHANGELOG.md +++ b/packages/eslint-plugin-tslint/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [5.30.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.29.0...v5.30.0) (2022-06-27) + +**Note:** Version bump only for package @typescript-eslint/eslint-plugin-tslint + + + + + # [5.29.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.28.0...v5.29.0) (2022-06-20) **Note:** Version bump only for package @typescript-eslint/eslint-plugin-tslint diff --git a/packages/eslint-plugin-tslint/package.json b/packages/eslint-plugin-tslint/package.json index 11f41404546c..e21b1761ae3e 100644 --- a/packages/eslint-plugin-tslint/package.json +++ b/packages/eslint-plugin-tslint/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/eslint-plugin-tslint", - "version": "5.29.0", + "version": "5.30.0", "main": "dist/index.js", "typings": "src/index.ts", "description": "TSLint wrapper plugin for ESLint", @@ -38,7 +38,7 @@ "typecheck": "tsc -p tsconfig.json --noEmit" }, "dependencies": { - "@typescript-eslint/utils": "5.29.0", + "@typescript-eslint/utils": "5.30.0", "lodash": "^4.17.21" }, "peerDependencies": { @@ -48,6 +48,6 @@ }, "devDependencies": { "@types/lodash": "*", - "@typescript-eslint/parser": "5.29.0" + "@typescript-eslint/parser": "5.30.0" } } diff --git a/packages/eslint-plugin/CHANGELOG.md b/packages/eslint-plugin/CHANGELOG.md index 1654a0077c83..e91185d91a18 100644 --- a/packages/eslint-plugin/CHANGELOG.md +++ b/packages/eslint-plugin/CHANGELOG.md @@ -3,6 +3,18 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [5.30.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.29.0...v5.30.0) (2022-06-27) + + +### Features + +* **eslint-plugin:** [no-shadow] add shadowed variable location to the error message ([#5183](https://github.com/typescript-eslint/typescript-eslint/issues/5183)) ([8ca08e9](https://github.com/typescript-eslint/typescript-eslint/commit/8ca08e9f18d59b29715c667fbb7d237f6e9a96ba)) +* treat `this` in `typeof this` as a `ThisExpression` ([#4382](https://github.com/typescript-eslint/typescript-eslint/issues/4382)) ([b04b2ce](https://github.com/typescript-eslint/typescript-eslint/commit/b04b2ce1ba90d94718891f2562dd210a6d7b8609)) + + + + + # [5.29.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.28.0...v5.29.0) (2022-06-20) **Note:** Version bump only for package @typescript-eslint/eslint-plugin diff --git a/packages/eslint-plugin/package.json b/packages/eslint-plugin/package.json index 3a01a3d6695a..9abe0fbfb9ff 100644 --- a/packages/eslint-plugin/package.json +++ b/packages/eslint-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/eslint-plugin", - "version": "5.29.0", + "version": "5.30.0", "description": "TypeScript plugin for ESLint", "keywords": [ "eslint", @@ -44,9 +44,9 @@ "typecheck": "tsc -p tsconfig.json --noEmit" }, "dependencies": { - "@typescript-eslint/scope-manager": "5.29.0", - "@typescript-eslint/type-utils": "5.29.0", - "@typescript-eslint/utils": "5.29.0", + "@typescript-eslint/scope-manager": "5.30.0", + "@typescript-eslint/type-utils": "5.30.0", + "@typescript-eslint/utils": "5.30.0", "debug": "^4.3.4", "functional-red-black-tree": "^1.0.1", "ignore": "^5.2.0", diff --git a/packages/experimental-utils/CHANGELOG.md b/packages/experimental-utils/CHANGELOG.md index 7f1dcc2effe1..17dc4446cf8e 100644 --- a/packages/experimental-utils/CHANGELOG.md +++ b/packages/experimental-utils/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [5.30.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.29.0...v5.30.0) (2022-06-27) + +**Note:** Version bump only for package @typescript-eslint/experimental-utils + + + + + # [5.29.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.28.0...v5.29.0) (2022-06-20) **Note:** Version bump only for package @typescript-eslint/experimental-utils diff --git a/packages/experimental-utils/package.json b/packages/experimental-utils/package.json index c9216e70f87f..a8604b6666b2 100644 --- a/packages/experimental-utils/package.json +++ b/packages/experimental-utils/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/experimental-utils", - "version": "5.29.0", + "version": "5.30.0", "description": "(Experimental) Utilities for working with TypeScript + ESLint together", "keywords": [ "eslint", @@ -38,7 +38,7 @@ "typecheck": "tsc -p tsconfig.json --noEmit" }, "dependencies": { - "@typescript-eslint/utils": "5.29.0" + "@typescript-eslint/utils": "5.30.0" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" diff --git a/packages/parser/CHANGELOG.md b/packages/parser/CHANGELOG.md index 0c6d3693a4e5..18b84f3bd36c 100644 --- a/packages/parser/CHANGELOG.md +++ b/packages/parser/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [5.30.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.29.0...v5.30.0) (2022-06-27) + +**Note:** Version bump only for package @typescript-eslint/parser + + + + + # [5.29.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.28.0...v5.29.0) (2022-06-20) **Note:** Version bump only for package @typescript-eslint/parser diff --git a/packages/parser/package.json b/packages/parser/package.json index db362a1241d3..d3ea03b53351 100644 --- a/packages/parser/package.json +++ b/packages/parser/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/parser", - "version": "5.29.0", + "version": "5.30.0", "description": "An ESLint custom parser which leverages TypeScript ESTree", "main": "dist/index.js", "types": "dist/index.d.ts", @@ -44,9 +44,9 @@ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "dependencies": { - "@typescript-eslint/scope-manager": "5.29.0", - "@typescript-eslint/types": "5.29.0", - "@typescript-eslint/typescript-estree": "5.29.0", + "@typescript-eslint/scope-manager": "5.30.0", + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/typescript-estree": "5.30.0", "debug": "^4.3.4" }, "devDependencies": { diff --git a/packages/scope-manager/CHANGELOG.md b/packages/scope-manager/CHANGELOG.md index fa3381b1c584..b27c0515b649 100644 --- a/packages/scope-manager/CHANGELOG.md +++ b/packages/scope-manager/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [5.30.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.29.0...v5.30.0) (2022-06-27) + + +### Features + +* treat `this` in `typeof this` as a `ThisExpression` ([#4382](https://github.com/typescript-eslint/typescript-eslint/issues/4382)) ([b04b2ce](https://github.com/typescript-eslint/typescript-eslint/commit/b04b2ce1ba90d94718891f2562dd210a6d7b8609)) + + + + + # [5.29.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.28.0...v5.29.0) (2022-06-20) **Note:** Version bump only for package @typescript-eslint/scope-manager diff --git a/packages/scope-manager/package.json b/packages/scope-manager/package.json index b24ab83ad6e5..06791fab9e29 100644 --- a/packages/scope-manager/package.json +++ b/packages/scope-manager/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/scope-manager", - "version": "5.29.0", + "version": "5.30.0", "description": "TypeScript scope analyser for ESLint", "keywords": [ "eslint", @@ -38,12 +38,12 @@ "typecheck": "cd ../../ && nx typecheck @typescript-eslint/scope-manager" }, "dependencies": { - "@typescript-eslint/types": "5.29.0", - "@typescript-eslint/visitor-keys": "5.29.0" + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/visitor-keys": "5.30.0" }, "devDependencies": { "@types/glob": "*", - "@typescript-eslint/typescript-estree": "5.29.0", + "@typescript-eslint/typescript-estree": "5.30.0", "glob": "*", "jest-specific-snapshot": "*", "make-dir": "*", diff --git a/packages/shared-fixtures/CHANGELOG.md b/packages/shared-fixtures/CHANGELOG.md index c5f34401a775..9d5d0b22b9d7 100644 --- a/packages/shared-fixtures/CHANGELOG.md +++ b/packages/shared-fixtures/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [5.30.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.29.0...v5.30.0) (2022-06-27) + + +### Features + +* treat `this` in `typeof this` as a `ThisExpression` ([#4382](https://github.com/typescript-eslint/typescript-eslint/issues/4382)) ([b04b2ce](https://github.com/typescript-eslint/typescript-eslint/commit/b04b2ce1ba90d94718891f2562dd210a6d7b8609)) + + + + + # [5.29.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.28.0...v5.29.0) (2022-06-20) **Note:** Version bump only for package @typescript-eslint/shared-fixtures diff --git a/packages/shared-fixtures/package.json b/packages/shared-fixtures/package.json index 064f4b54511a..967a069cb933 100644 --- a/packages/shared-fixtures/package.json +++ b/packages/shared-fixtures/package.json @@ -1,5 +1,5 @@ { "name": "@typescript-eslint/shared-fixtures", - "version": "5.29.0", + "version": "5.30.0", "private": true } diff --git a/packages/type-utils/CHANGELOG.md b/packages/type-utils/CHANGELOG.md index dbba91203f01..ea5f1d522fae 100644 --- a/packages/type-utils/CHANGELOG.md +++ b/packages/type-utils/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [5.30.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.29.0...v5.30.0) (2022-06-27) + +**Note:** Version bump only for package @typescript-eslint/type-utils + + + + + # [5.29.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.28.0...v5.29.0) (2022-06-20) **Note:** Version bump only for package @typescript-eslint/type-utils diff --git a/packages/type-utils/package.json b/packages/type-utils/package.json index 112a91a8d3f8..ea61c1baf401 100644 --- a/packages/type-utils/package.json +++ b/packages/type-utils/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/type-utils", - "version": "5.29.0", + "version": "5.30.0", "description": "Type utilities for working with TypeScript + ESLint together", "keywords": [ "eslint", @@ -39,12 +39,12 @@ "typecheck": "tsc -p tsconfig.json --noEmit" }, "dependencies": { - "@typescript-eslint/utils": "5.29.0", + "@typescript-eslint/utils": "5.30.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, "devDependencies": { - "@typescript-eslint/parser": "5.29.0", + "@typescript-eslint/parser": "5.30.0", "typescript": "*" }, "peerDependencies": { diff --git a/packages/types/CHANGELOG.md b/packages/types/CHANGELOG.md index 65c851bf96b2..bfa5122742a5 100644 --- a/packages/types/CHANGELOG.md +++ b/packages/types/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [5.30.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.29.0...v5.30.0) (2022-06-27) + +**Note:** Version bump only for package @typescript-eslint/types + + + + + # [5.29.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.28.0...v5.29.0) (2022-06-20) **Note:** Version bump only for package @typescript-eslint/types diff --git a/packages/types/package.json b/packages/types/package.json index 25ce9ef5212d..4010773beadf 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/types", - "version": "5.29.0", + "version": "5.30.0", "description": "Types for the TypeScript-ESTree AST spec", "keywords": [ "eslint", diff --git a/packages/typescript-estree/CHANGELOG.md b/packages/typescript-estree/CHANGELOG.md index 47c0a2f91dca..38cc3c901986 100644 --- a/packages/typescript-estree/CHANGELOG.md +++ b/packages/typescript-estree/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [5.30.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.29.0...v5.30.0) (2022-06-27) + + +### Features + +* treat `this` in `typeof this` as a `ThisExpression` ([#4382](https://github.com/typescript-eslint/typescript-eslint/issues/4382)) ([b04b2ce](https://github.com/typescript-eslint/typescript-eslint/commit/b04b2ce1ba90d94718891f2562dd210a6d7b8609)) + + + + + # [5.29.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.28.0...v5.29.0) (2022-06-20) **Note:** Version bump only for package @typescript-eslint/typescript-estree diff --git a/packages/typescript-estree/package.json b/packages/typescript-estree/package.json index 6b56c2aa343a..23980e442a26 100644 --- a/packages/typescript-estree/package.json +++ b/packages/typescript-estree/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/typescript-estree", - "version": "5.29.0", + "version": "5.30.0", "description": "A parser that converts TypeScript source code into an ESTree compatible form", "main": "dist/index.js", "types": "dist/index.d.ts", @@ -41,8 +41,8 @@ "typecheck": "tsc -p tsconfig.json --noEmit" }, "dependencies": { - "@typescript-eslint/types": "5.29.0", - "@typescript-eslint/visitor-keys": "5.29.0", + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/visitor-keys": "5.30.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -58,7 +58,7 @@ "@types/is-glob": "*", "@types/semver": "*", "@types/tmp": "*", - "@typescript-eslint/shared-fixtures": "5.29.0", + "@typescript-eslint/shared-fixtures": "5.30.0", "glob": "*", "jest-specific-snapshot": "*", "make-dir": "*", diff --git a/packages/utils/CHANGELOG.md b/packages/utils/CHANGELOG.md index e8ad29f2e0ef..fbe1b5ac54c0 100644 --- a/packages/utils/CHANGELOG.md +++ b/packages/utils/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [5.30.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.29.0...v5.30.0) (2022-06-27) + +**Note:** Version bump only for package @typescript-eslint/utils + + + + + # [5.29.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.28.0...v5.29.0) (2022-06-20) **Note:** Version bump only for package @typescript-eslint/utils diff --git a/packages/utils/package.json b/packages/utils/package.json index 66bc99ae8e97..985d528f6d09 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/utils", - "version": "5.29.0", + "version": "5.30.0", "description": "Utilities for working with TypeScript + ESLint together", "keywords": [ "eslint", @@ -40,9 +40,9 @@ }, "dependencies": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.29.0", - "@typescript-eslint/types": "5.29.0", - "@typescript-eslint/typescript-estree": "5.29.0", + "@typescript-eslint/scope-manager": "5.30.0", + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/typescript-estree": "5.30.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" }, diff --git a/packages/visitor-keys/CHANGELOG.md b/packages/visitor-keys/CHANGELOG.md index 1628e703cfe7..f1a0d25a23b8 100644 --- a/packages/visitor-keys/CHANGELOG.md +++ b/packages/visitor-keys/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [5.30.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.29.0...v5.30.0) (2022-06-27) + +**Note:** Version bump only for package @typescript-eslint/visitor-keys + + + + + # [5.29.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.28.0...v5.29.0) (2022-06-20) **Note:** Version bump only for package @typescript-eslint/visitor-keys diff --git a/packages/visitor-keys/package.json b/packages/visitor-keys/package.json index fb4bc736810f..83fa774d33b5 100644 --- a/packages/visitor-keys/package.json +++ b/packages/visitor-keys/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/visitor-keys", - "version": "5.29.0", + "version": "5.30.0", "description": "Visitor keys used to help traverse the TypeScript-ESTree AST", "keywords": [ "eslint", @@ -38,7 +38,7 @@ "typecheck": "tsc -p tsconfig.json --noEmit" }, "dependencies": { - "@typescript-eslint/types": "5.29.0", + "@typescript-eslint/types": "5.30.0", "eslint-visitor-keys": "^3.3.0" }, "devDependencies": { diff --git a/packages/website-eslint/CHANGELOG.md b/packages/website-eslint/CHANGELOG.md index 4cd34cecedaf..c9a378335f74 100644 --- a/packages/website-eslint/CHANGELOG.md +++ b/packages/website-eslint/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [5.30.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.29.0...v5.30.0) (2022-06-27) + +**Note:** Version bump only for package @typescript-eslint/website-eslint + + + + + # [5.29.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.28.0...v5.29.0) (2022-06-20) **Note:** Version bump only for package @typescript-eslint/website-eslint diff --git a/packages/website-eslint/package.json b/packages/website-eslint/package.json index e3a23f483082..0fa19cf15497 100644 --- a/packages/website-eslint/package.json +++ b/packages/website-eslint/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/website-eslint", - "version": "5.29.0", + "version": "5.30.0", "private": true, "description": "ESLint which works in browsers.", "engines": { @@ -16,19 +16,19 @@ "format": "prettier --write \"./**/*.{ts,mts,cts,tsx,js,mjs,cjs,jsx,json,md,css}\" --ignore-path ../../.prettierignore" }, "dependencies": { - "@typescript-eslint/types": "5.29.0", - "@typescript-eslint/utils": "5.29.0" + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/utils": "5.30.0" }, "devDependencies": { "@rollup/plugin-commonjs": "^22.0.0", "@rollup/plugin-json": "^4.1.0", "@rollup/plugin-node-resolve": "^13.3.0", "@rollup/pluginutils": "^4.2.1", - "@typescript-eslint/eslint-plugin": "5.29.0", - "@typescript-eslint/parser": "5.29.0", - "@typescript-eslint/scope-manager": "5.29.0", - "@typescript-eslint/typescript-estree": "5.29.0", - "@typescript-eslint/visitor-keys": "5.29.0", + "@typescript-eslint/eslint-plugin": "5.30.0", + "@typescript-eslint/parser": "5.30.0", + "@typescript-eslint/scope-manager": "5.30.0", + "@typescript-eslint/typescript-estree": "5.30.0", + "@typescript-eslint/visitor-keys": "5.30.0", "eslint": "*", "rollup": "^2.75.4", "rollup-plugin-terser": "^7.0.2", diff --git a/packages/website/CHANGELOG.md b/packages/website/CHANGELOG.md index c4fa01f90057..225fe85a7050 100644 --- a/packages/website/CHANGELOG.md +++ b/packages/website/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [5.30.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.29.0...v5.30.0) (2022-06-27) + +**Note:** Version bump only for package website + + + + + # [5.29.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.28.0...v5.29.0) (2022-06-20) diff --git a/packages/website/package.json b/packages/website/package.json index ab385d0e7c69..8fd2a61e4d6b 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -1,6 +1,6 @@ { "name": "website", - "version": "5.29.0", + "version": "5.30.0", "private": true, "scripts": { "build": "docusaurus build", @@ -20,7 +20,7 @@ "@docusaurus/remark-plugin-npm2yarn": "2.0.0-beta.21", "@docusaurus/theme-common": "2.0.0-beta.21", "@mdx-js/react": "1.6.22", - "@typescript-eslint/website-eslint": "5.29.0", + "@typescript-eslint/website-eslint": "5.30.0", "clsx": "^1.1.1", "eslint": "*", "json5": "^2.2.1", @@ -37,7 +37,7 @@ "@types/react": "^18.0.9", "@types/react-helmet": "^6.1.5", "@types/react-router-dom": "^5.3.3", - "@typescript-eslint/eslint-plugin": "5.29.0", + "@typescript-eslint/eslint-plugin": "5.30.0", "copy-webpack-plugin": "^11.0.0", "cypress": "8.3.0", "cypress-axe": "^0.14.0", pFad - Phonifier reborn

    Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

    Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


    Alternative Proxies:

    Alternative Proxy

    pFad Proxy

    pFad v3 Proxy

    pFad v4 Proxy