From c22b1e032808950d7b3618afbcd9f468b83cbdd2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Jun 2025 05:34:29 +0800 Subject: [PATCH 001/189] build(deps): bump brace-expansion from 1.1.11 to 1.1.12 (#1396) Bumps [brace-expansion](https://github.com/juliangruber/brace-expansion) from 1.1.11 to 1.1.12. - [Release notes](https://github.com/juliangruber/brace-expansion/releases) - [Commits](https://github.com/juliangruber/brace-expansion/compare/1.1.11...v1.1.12) --- updated-dependencies: - dependency-name: brace-expansion dependency-version: 1.1.12 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 528 +++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 422 insertions(+), 106 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bbb04e492..8b23cecc6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -146,7 +146,7 @@ importers: version: 9.28.0(jiti@2.4.2) eslint-config-canonical: specifier: ~44.9.5 - version: 44.9.5(@types/eslint@9.6.1)(@types/node@22.15.29)(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.0(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + version: 44.9.5(@types/eslint@9.6.1)(@types/node@22.15.29)(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) gitdown: specifier: ^4.1.1 version: 4.1.1(re2@1.20.9) @@ -1080,6 +1080,9 @@ packages: '@napi-rs/wasm-runtime@0.2.10': resolution: {integrity: sha512-bCsCyeZEwVErsGmyPNSzwfwFn4OdxBj0mmv6hOFucB/k81Ojdu68RbZdxYsRQUPc9l6SU5F/cG+bXgWs3oUgsQ==} + '@napi-rs/wasm-runtime@0.2.11': + resolution: {integrity: sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==} + '@next/eslint-plugin-next@15.3.3': resolution: {integrity: sha512-VKZJEiEdpKkfBmcokGjHu0vGDG+8CehGs90tBEy/IDoDDKGngeyIStt2MmE5FYNyU9BhgR7tybNWTAJY/30u+Q==} @@ -1105,12 +1108,12 @@ packages: resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} engines: {node: '>=12.4.0'} - '@npmcli/agent@2.2.0': - resolution: {integrity: sha512-2yThA1Es98orMkpSLVqlDZAMPK3jHJhifP2gnNUdk1754uZ8yI5c+ulCoVG+WlntQA6MzhrURMXjSd9Z7dJ2/Q==} + '@npmcli/agent@2.2.2': + resolution: {integrity: sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==} engines: {node: ^16.14.0 || >=18.0.0} - '@npmcli/fs@3.1.0': - resolution: {integrity: sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==} + '@npmcli/fs@3.1.1': + resolution: {integrity: sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} '@octokit/auth-token@6.0.0': @@ -1381,6 +1384,10 @@ packages: resolution: {integrity: sha512-DKuXOKpM5IDT1FA2g9x9x1Ug81YuKrzf4mYX8FAVSNu5Wo/LELHWQyM1pQaDkI42bX15PWl0vNPt1uGiIFUOpg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.34.0': + resolution: {integrity: sha512-9V24k/paICYPniajHfJ4cuAWETnt7Ssy+R0Rbcqo5sSFr3QEZ/8TSoUi9XeXVBGXCaLtwTOKSLGcInCAvyZeMA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@6.21.0': resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -1431,91 +1438,186 @@ packages: '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + '@unrs/resolver-binding-android-arm-eabi@1.9.0': + resolution: {integrity: sha512-h1T2c2Di49ekF2TE8ZCoJkb+jwETKUIPDJ/nO3tJBKlLFPu+fyd93f0rGP/BvArKx2k2HlRM4kqkNarj3dvZlg==} + cpu: [arm] + os: [android] + + '@unrs/resolver-binding-android-arm64@1.9.0': + resolution: {integrity: sha512-sG1NHtgXtX8owEkJ11yn34vt0Xqzi3k9TJ8zppDmyG8GZV4kVWw44FHwKwHeEFl07uKPeC4ZoyuQaGh5ruJYPA==} + cpu: [arm64] + os: [android] + '@unrs/resolver-binding-darwin-arm64@1.7.8': resolution: {integrity: sha512-rsRK8T7yxraNRDmpFLZCWqpea6OlXPNRRCjWMx24O1V86KFol7u2gj9zJCv6zB1oJjtnzWceuqdnCgOipFcJPA==} cpu: [arm64] os: [darwin] + '@unrs/resolver-binding-darwin-arm64@1.9.0': + resolution: {integrity: sha512-nJ9z47kfFnCxN1z/oYZS7HSNsFh43y2asePzTEZpEvK7kGyuShSl3RRXnm/1QaqFL+iP+BjMwuB+DYUymOkA5A==} + cpu: [arm64] + os: [darwin] + '@unrs/resolver-binding-darwin-x64@1.7.8': resolution: {integrity: sha512-16yEMWa+Olqkk8Kl6Bu0ltT5OgEedkSAsxcz1B3yEctrDYp3EMBu/5PPAGhWVGnwhtf3hNe3y15gfYBAjOv5tQ==} cpu: [x64] os: [darwin] + '@unrs/resolver-binding-darwin-x64@1.9.0': + resolution: {integrity: sha512-TK+UA1TTa0qS53rjWn7cVlEKVGz2B6JYe0C++TdQjvWYIyx83ruwh0wd4LRxYBM5HeuAzXcylA9BH2trARXJTw==} + cpu: [x64] + os: [darwin] + '@unrs/resolver-binding-freebsd-x64@1.7.8': resolution: {integrity: sha512-ST4uqF6FmdZQgv+Q73FU1uHzppeT4mhX3IIEmHlLObrv5Ep50olWRz0iQ4PWovadjHMTAmpuJAGaAuCZYb7UAQ==} cpu: [x64] os: [freebsd] + '@unrs/resolver-binding-freebsd-x64@1.9.0': + resolution: {integrity: sha512-6uZwzMRFcD7CcCd0vz3Hp+9qIL2jseE/bx3ZjaLwn8t714nYGwiE84WpaMCYjU+IQET8Vu/+BNAGtYD7BG/0yA==} + cpu: [x64] + os: [freebsd] + '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.8': resolution: {integrity: sha512-Z/A/4Rm2VWku2g25C3tVb986fY6unx5jaaCFpx1pbAj0OKkyuJ5wcQLHvNbIcJ9qhiYwXfrkB7JNlxrAbg7YFg==} cpu: [arm] os: [linux] + '@unrs/resolver-binding-linux-arm-gnueabihf@1.9.0': + resolution: {integrity: sha512-bPUBksQfrgcfv2+mm+AZinaKq8LCFvt5PThYqRotqSuuZK1TVKkhbVMS/jvSRfYl7jr3AoZLYbDkItxgqMKRkg==} + cpu: [arm] + os: [linux] + '@unrs/resolver-binding-linux-arm-musleabihf@1.7.8': resolution: {integrity: sha512-HN0p7o38qKmDo3bZUiQa6gP7Qhf0sKgJZtRfSHi6JL2Gi4NaUVF0EO1sQ1RHbeQ4VvfjUGMh3QE5dxEh06BgQQ==} cpu: [arm] os: [linux] + '@unrs/resolver-binding-linux-arm-musleabihf@1.9.0': + resolution: {integrity: sha512-uT6E7UBIrTdCsFQ+y0tQd3g5oudmrS/hds5pbU3h4s2t/1vsGWbbSKhBSCD9mcqaqkBwoqlECpUrRJCmldl8PA==} + cpu: [arm] + os: [linux] + '@unrs/resolver-binding-linux-arm64-gnu@1.7.8': resolution: {integrity: sha512-HsoVqDBt9G69AN0KWeDNJW+7i8KFlwxrbbnJffgTGpiZd6Jw+Q95sqkXp8y458KhKduKLmXfVZGnKBTNxAgPjw==} cpu: [arm64] os: [linux] + '@unrs/resolver-binding-linux-arm64-gnu@1.9.0': + resolution: {integrity: sha512-vdqBh911wc5awE2bX2zx3eflbyv8U9xbE/jVKAm425eRoOVv/VseGZsqi3A3SykckSpF4wSROkbQPvbQFn8EsA==} + cpu: [arm64] + os: [linux] + '@unrs/resolver-binding-linux-arm64-musl@1.7.8': resolution: {integrity: sha512-VfR2yTDUbUvn+e/Aw22CC9fQg9zdShHAfwWctNBdOk7w9CHWl2OtYlcMvjzMAns8QxoHQoqn3/CEnZ4Ts7hfrA==} cpu: [arm64] os: [linux] + '@unrs/resolver-binding-linux-arm64-musl@1.9.0': + resolution: {integrity: sha512-/8JFZ/SnuDr1lLEVsxsuVwrsGquTvT51RZGvyDB/dOK3oYK2UqeXzgeyq6Otp8FZXQcEYqJwxb9v+gtdXn03eQ==} + cpu: [arm64] + os: [linux] + '@unrs/resolver-binding-linux-ppc64-gnu@1.7.8': resolution: {integrity: sha512-xUauVQNz4uDgs4UJJiUAwMe3N0PA0wvtImh7V0IFu++UKZJhssXbKHBRR4ecUJpUHCX2bc4Wc8sGsB6P+7BANg==} cpu: [ppc64] os: [linux] + '@unrs/resolver-binding-linux-ppc64-gnu@1.9.0': + resolution: {integrity: sha512-FkJjybtrl+rajTw4loI3L6YqSOpeZfDls4SstL/5lsP2bka9TiHUjgMBjygeZEis1oC8LfJTS8FSgpKPaQx2tQ==} + cpu: [ppc64] + os: [linux] + '@unrs/resolver-binding-linux-riscv64-gnu@1.7.8': resolution: {integrity: sha512-GqyIB+CuSHGhhc8ph5RrurtNetYJjb6SctSHafqmdGcRuGi6uyTMR8l18hMEhZFsXdFMc/MpInPLvmNV22xn+A==} cpu: [riscv64] os: [linux] + '@unrs/resolver-binding-linux-riscv64-gnu@1.9.0': + resolution: {integrity: sha512-w/NZfHNeDusbqSZ8r/hp8iL4S39h4+vQMc9/vvzuIKMWKppyUGKm3IST0Qv0aOZ1rzIbl9SrDeIqK86ZpUK37w==} + cpu: [riscv64] + os: [linux] + '@unrs/resolver-binding-linux-riscv64-musl@1.7.8': resolution: {integrity: sha512-eEU3rWIFRv60xaAbtsgwHNWRZGD7cqkpCvNtio/f1TjEE3HfKLzPNB24fA9X/8ZXQrGldE65b7UKK3PmO4eWIQ==} cpu: [riscv64] os: [linux] + '@unrs/resolver-binding-linux-riscv64-musl@1.9.0': + resolution: {integrity: sha512-bEPBosut8/8KQbUixPry8zg/fOzVOWyvwzOfz0C0Rw6dp+wIBseyiHKjkcSyZKv/98edrbMknBaMNJfA/UEdqw==} + cpu: [riscv64] + os: [linux] + '@unrs/resolver-binding-linux-s390x-gnu@1.7.8': resolution: {integrity: sha512-GVLI0f4I4TlLqEUoOFvTWedLsJEdvsD0+sxhdvQ5s+N+m2DSynTs8h9jxR0qQbKlpHWpc2Ortz3z48NHRT4l+w==} cpu: [s390x] os: [linux] + '@unrs/resolver-binding-linux-s390x-gnu@1.9.0': + resolution: {integrity: sha512-LDtMT7moE3gK753gG4pc31AAqGUC86j3AplaFusc717EUGF9ZFJ356sdQzzZzkBk1XzMdxFyZ4f/i35NKM/lFA==} + cpu: [s390x] + os: [linux] + '@unrs/resolver-binding-linux-x64-gnu@1.7.8': resolution: {integrity: sha512-GX1pZ/4ncUreB0Rlp1l7bhKAZ8ZmvDIgXdeb5V2iK0eRRF332+6gRfR/r5LK88xfbtOpsmRHU6mQ4N8ZnwvGEA==} cpu: [x64] os: [linux] + '@unrs/resolver-binding-linux-x64-gnu@1.9.0': + resolution: {integrity: sha512-WmFd5KINHIXj8o1mPaT8QRjA9HgSXhN1gl9Da4IZihARihEnOylu4co7i/yeaIpcfsI6sYs33cNZKyHYDh0lrA==} + cpu: [x64] + os: [linux] + '@unrs/resolver-binding-linux-x64-musl@1.7.8': resolution: {integrity: sha512-n1N84MnsvDupzVuYqJGj+2pb9s8BI1A5RgXHvtVFHedGZVBCFjDpQVRlmsFMt6xZiKwDPaqsM16O/1isCUGt7w==} cpu: [x64] os: [linux] + '@unrs/resolver-binding-linux-x64-musl@1.9.0': + resolution: {integrity: sha512-CYuXbANW+WgzVRIl8/QvZmDaZxrqvOldOwlbUjIM4pQ46FJ0W5cinJ/Ghwa/Ng1ZPMJMk1VFdsD/XwmCGIXBWg==} + cpu: [x64] + os: [linux] + '@unrs/resolver-binding-wasm32-wasi@1.7.8': resolution: {integrity: sha512-x94WnaU5g+pCPDVedfnXzoG6lCOF2xFGebNwhtbJCWfceE94Zj8aysSxdxotlrZrxnz5D3ijtyFUYtpz04n39Q==} engines: {node: '>=14.0.0'} cpu: [wasm32] + '@unrs/resolver-binding-wasm32-wasi@1.9.0': + resolution: {integrity: sha512-6Rp2WH0OoitMYR57Z6VE8Y6corX8C6QEMWLgOV6qXiJIeZ1F9WGXY/yQ8yDC4iTraotyLOeJ2Asea0urWj2fKQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + '@unrs/resolver-binding-win32-arm64-msvc@1.7.8': resolution: {integrity: sha512-vst2u8EJZ5L6jhJ6iLis3w9rg16aYqRxQuBAMYQRVrPMI43693hLP7DuqyOBRKgsQXy9/jgh204k0ViHkqQgdg==} cpu: [arm64] os: [win32] + '@unrs/resolver-binding-win32-arm64-msvc@1.9.0': + resolution: {integrity: sha512-rknkrTRuvujprrbPmGeHi8wYWxmNVlBoNW8+4XF2hXUnASOjmuC9FNF1tGbDiRQWn264q9U/oGtixyO3BT8adQ==} + cpu: [arm64] + os: [win32] + '@unrs/resolver-binding-win32-ia32-msvc@1.7.8': resolution: {integrity: sha512-yb3LZOLMFqnA+/ShlE1E5bpYPGDsA590VHHJPB+efnyowT776GJXBoh82em6O9WmYBUq57YblGTcMYAFBm72HA==} cpu: [ia32] os: [win32] + '@unrs/resolver-binding-win32-ia32-msvc@1.9.0': + resolution: {integrity: sha512-Ceymm+iBl+bgAICtgiHyMLz6hjxmLJKqBim8tDzpX61wpZOx2bPK6Gjuor7I2RiUynVjvvkoRIkrPyMwzBzF3A==} + cpu: [ia32] + os: [win32] + '@unrs/resolver-binding-win32-x64-msvc@1.7.8': resolution: {integrity: sha512-hHKFx+opG5BA3/owMXon8ypwSotBGTdblG6oda/iOu9+OEYnk0cxD2uIcGyGT8jCK578kV+xMrNxqbn8Zjlpgw==} cpu: [x64] os: [win32] + '@unrs/resolver-binding-win32-x64-msvc@1.9.0': + resolution: {integrity: sha512-k59o9ZyeyS0hAlcaKFezYSH2agQeRFEB7KoQLXl3Nb3rgkqT1NY9Vwy+SqODiLmYnEjxWJVRE/yq2jFVqdIxZw==} + cpu: [x64] + os: [win32] + '@vitest/eslint-plugin@1.2.1': resolution: {integrity: sha512-JQr1jdVcrsoS7Sdzn83h9sq4DvREf9Q/onTZbJCqTVlv/76qb+TZrLv/9VhjnjSMHweQH5FdpMDeCR6aDe2fgw==} peerDependencies: @@ -1575,6 +1677,10 @@ packages: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} engines: {node: '>= 14'} + agent-base@7.1.3: + resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} + engines: {node: '>= 14'} + aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1762,6 +1868,10 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@3.0.1: + resolution: {integrity: sha512-vjtV3hiLqYDNRoiAv0zC4QaGAMPomEoq83PRmYIofPswwZurCeWR5LByXm7SyoL0Zh5+2z0+HC7jG8gSZJUh0w==} + engines: {node: '>= 16'} + bcrypt-pbkdf@1.0.2: resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} @@ -1791,6 +1901,10 @@ packages: brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@4.0.1: + resolution: {integrity: sha512-YClrbvTCXGe70pU2JiEiPLYXO9gQkyxYeKpJIQHVS/gOs6EWMQP2RYBwjFLNT322Ji8TOC3IMPfsYCedNpzKfA==} + engines: {node: '>= 18'} + braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} @@ -1828,8 +1942,8 @@ packages: monocart-coverage-reports: optional: true - cacache@18.0.1: - resolution: {integrity: sha512-g4Uf2CFZPaxtJKre6qr4zqLDOOPU7bNVhWjlNhvzc51xaTOx2noMOLhfFkTAqwtrAZAKQUuDfyjitzilpA8WsQ==} + cacache@18.0.4: + resolution: {integrity: sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==} engines: {node: ^16.14.0 || >=18.0.0} call-bind-apply-helpers@1.0.2: @@ -2422,6 +2536,15 @@ packages: unrs-resolver: optional: true + eslint-import-context@0.1.8: + resolution: {integrity: sha512-bq+F7nyc65sKpZGT09dY0S0QrOnQtuDVIfyTGQ8uuvtMIF7oHp6CEP3mouN0rrnYF3Jqo6Ke0BfU/5wASZue1w==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + peerDependencies: + unrs-resolver: ^1.0.0 + peerDependenciesMeta: + unrs-resolver: + optional: true + eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} @@ -2521,8 +2644,8 @@ packages: typescript: optional: true - eslint-plugin-import-x@4.15.0: - resolution: {integrity: sha512-oqCESQlM8r0iRioPHmDqrblH69u11NuglErCnMIY2FcY0UfCCs7qlEuiuqkYKT0puJSQq+fXpDD0MvMTQsAhoQ==} + eslint-plugin-import-x@4.15.1: + resolution: {integrity: sha512-JfVpNg1qMkPD66iaSgmMoSYeUCGS8UFSm3GwHV0IbuV3Knar/SyK5qqCct9+AxoMIzaM+KSO7KK5pOeOkC/3GQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/utils': ^8.0.0 @@ -2754,8 +2877,8 @@ packages: resolution: {integrity: sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==} engines: {node: ^18.19.0 || >=20.5.0} - exponential-backoff@3.1.1: - resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} + exponential-backoff@3.1.2: + resolution: {integrity: sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==} extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -3216,13 +3339,17 @@ packages: htmlparser2@3.10.1: resolution: {integrity: sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==} - http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + http-cache-semantics@4.2.0: + resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} http-proxy-agent@7.0.0: resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==} engines: {node: '>= 14'} + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + http-signature@1.2.0: resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} engines: {node: '>=0.8', npm: '>=1.3.7'} @@ -3231,6 +3358,10 @@ packages: resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} engines: {node: '>= 14'} + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + human-signals@5.0.0: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} @@ -3309,8 +3440,8 @@ packages: ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - install-artifact-from-github@1.3.5: - resolution: {integrity: sha512-gZHC7f/cJgXz7MXlHFBxPVMsvIbev1OQN1uKQYKVJDydGNm9oYf9JstbU4Atnh/eSvk41WtEovoRm+8IF686xg==} + install-artifact-from-github@1.4.0: + resolution: {integrity: sha512-+y6WywKZREw5rq7U2jvr2nmZpT7cbWbQQ0N/qfcseYnzHFz2cZz1Et52oY+XttYuYeTkI8Y+R2JNWj68MpQFSg==} hasBin: true internal-slot@1.0.7: @@ -3325,13 +3456,14 @@ packages: resolution: {integrity: sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw==} engines: {node: '>=12'} + ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} + ip-regex@4.3.0: resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==} engines: {node: '>=8'} - ip@2.0.1: - resolution: {integrity: sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==} - is-array-buffer@3.0.4: resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} engines: {node: '>= 0.4'} @@ -3380,6 +3512,10 @@ packages: is-core-module@2.13.1: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + is-data-view@1.0.1: resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} engines: {node: '>= 0.4'} @@ -3660,6 +3796,9 @@ packages: jsbn@0.1.1: resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} + jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + jsdoc-type-pratt-parser@4.0.0: resolution: {integrity: sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==} engines: {node: '>=12.0.0'} @@ -3851,6 +3990,9 @@ packages: resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} engines: {node: 14 || >=16.14} + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -3862,8 +4004,8 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} - make-fetch-happen@13.0.0: - resolution: {integrity: sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==} + make-fetch-happen@13.0.1: + resolution: {integrity: sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==} engines: {node: ^16.14.0 || >=18.0.0} markdown-contents@1.0.11: @@ -3941,6 +4083,10 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} + minimatch@10.0.2: + resolution: {integrity: sha512-+9TJCIYXgZ2Dm5LxVCFsa8jOm+evMwXHFI0JM1XROmkfkpz8/iLLDh+TwSmyIBrs6C6Xu9294/fq8cBA+P6AqA==} + engines: {node: 20 || >=22} + minimatch@3.0.5: resolution: {integrity: sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==} @@ -3966,8 +4112,8 @@ packages: resolution: {integrity: sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==} engines: {node: '>=16 || 14 >=14.17'} - minipass-fetch@3.0.4: - resolution: {integrity: sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==} + minipass-fetch@3.0.5: + resolution: {integrity: sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} minipass-flush@1.0.5: @@ -4017,8 +4163,8 @@ packages: mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nan@2.18.0: - resolution: {integrity: sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==} + nan@2.22.2: + resolution: {integrity: sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==} nano-spawn@1.0.2: resolution: {integrity: sha512-21t+ozMQDAL/UGgQVBbZ/xXvNO10++ZPuTmKRO8k9V3AClVRht49ahtDjfY8l1q6nSHOrE5ASfthzH3ol6R/hg==} @@ -4036,8 +4182,8 @@ packages: resolution: {integrity: sha512-kKHJhxwpR/Okycz4HhQKKlhWe4ASEfPgkSWNmKFHd7+ezuQlxkA5cM3+XkBPvm1gmHen3w53qsYAv+8GwRrBlg==} engines: {node: '>=18'} - negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + negotiator@0.6.4: + resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} engines: {node: '>= 0.6'} neo-async@2.6.2: @@ -4062,16 +4208,16 @@ packages: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - node-gyp@10.0.1: - resolution: {integrity: sha512-gg3/bHehQfZivQVfqIyy8wTdSymF9yTyP4CJifK73imyNMU8AIGQE2pUa7dNWfmMeG9cDVF2eehiRMv0LC1iAg==} + node-gyp@10.3.1: + resolution: {integrity: sha512-Pp3nFHBThHzVtNY7U6JfPjvT/DTE8+o/4xKsLQtBoU+j2HLsGlhcfzflAoUreaJbNmYnX+LlLi0qjV8kpyO6xQ==} engines: {node: ^16.14.0 || >=18.0.0} hasBin: true node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} - nopt@7.2.0: - resolution: {integrity: sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==} + nopt@7.2.1: + resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} hasBin: true @@ -4483,8 +4629,8 @@ packages: resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} engines: {node: '>=18'} - proc-log@3.0.0: - resolution: {integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==} + proc-log@4.2.0: + resolution: {integrity: sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} process-nextick-args@2.0.1: @@ -4667,6 +4813,11 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -4866,13 +5017,13 @@ packages: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - socks-proxy-agent@8.0.2: - resolution: {integrity: sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==} + socks-proxy-agent@8.0.5: + resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} engines: {node: '>= 14'} - socks@2.7.1: - resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==} - engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} + socks@2.8.5: + resolution: {integrity: sha512-iF+tNDQla22geJdTyJB1wM/qrX9DMRwWrciEPwWLPRWAUEM8sQiyxgckLxWT1f7+9VabJS0jTGGr4QgBuvi6Ww==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} @@ -4909,15 +5060,22 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + sshpk@1.18.0: resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} engines: {node: '>=0.10.0'} hasBin: true - ssri@10.0.5: - resolution: {integrity: sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==} + ssri@10.0.6: + resolution: {integrity: sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + stable-hash-x@0.1.1: + resolution: {integrity: sha512-l0x1D6vhnsNUGPFVDx45eif0y6eedVC8nm5uACTrVFJFtl2mLRW17aWtVyxFCpn5t94VUPkjU8vSLwIuwwqtJQ==} + engines: {node: '>=12.0.0'} + stable-hash@0.0.5: resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==} @@ -5306,6 +5464,9 @@ packages: unrs-resolver@1.7.8: resolution: {integrity: sha512-2zsXwyOXmCX9nGz4vhtZRYhe30V78heAv+KDc21A/KMdovGHbZcixeD5JHEF0DrFXzdytwuzYclcPbvp8A3Jlw==} + unrs-resolver@1.9.0: + resolution: {integrity: sha512-wqaRu4UnzBD2ABTC1kLfBjAqIDZ5YUTr/MLGa7By47JV1bJDSW7jq/ZSLigB7enLe7ubNaJhtnBXgrc/50cEhg==} + update-browserslist-db@1.1.3: resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} hasBin: true @@ -6726,6 +6887,13 @@ snapshots: '@tybys/wasm-util': 0.9.0 optional: true + '@napi-rs/wasm-runtime@0.2.11': + dependencies: + '@emnapi/core': 1.4.3 + '@emnapi/runtime': 1.4.3 + '@tybys/wasm-util': 0.9.0 + optional: true + '@next/eslint-plugin-next@15.3.3': dependencies: fast-glob: 3.3.1 @@ -6751,18 +6919,18 @@ snapshots: '@nolyfill/is-core-module@1.0.39': {} - '@npmcli/agent@2.2.0': + '@npmcli/agent@2.2.2': dependencies: - agent-base: 7.1.0 - http-proxy-agent: 7.0.0 - https-proxy-agent: 7.0.2 - lru-cache: 10.2.0 - socks-proxy-agent: 8.0.2 + agent-base: 7.1.3 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + lru-cache: 10.4.3 + socks-proxy-agent: 8.0.5 transitivePeerDependencies: - supports-color optional: true - '@npmcli/fs@3.1.0': + '@npmcli/fs@3.1.1': dependencies: semver: 7.7.2 optional: true @@ -7124,6 +7292,8 @@ snapshots: '@typescript-eslint/types@8.33.0': {} + '@typescript-eslint/types@8.34.0': {} + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.8.3)': dependencies: '@typescript-eslint/types': 6.21.0 @@ -7208,59 +7378,118 @@ snapshots: '@ungap/structured-clone@1.2.0': {} + '@unrs/resolver-binding-android-arm-eabi@1.9.0': + optional: true + + '@unrs/resolver-binding-android-arm64@1.9.0': + optional: true + '@unrs/resolver-binding-darwin-arm64@1.7.8': optional: true + '@unrs/resolver-binding-darwin-arm64@1.9.0': + optional: true + '@unrs/resolver-binding-darwin-x64@1.7.8': optional: true + '@unrs/resolver-binding-darwin-x64@1.9.0': + optional: true + '@unrs/resolver-binding-freebsd-x64@1.7.8': optional: true + '@unrs/resolver-binding-freebsd-x64@1.9.0': + optional: true + '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.8': optional: true + '@unrs/resolver-binding-linux-arm-gnueabihf@1.9.0': + optional: true + '@unrs/resolver-binding-linux-arm-musleabihf@1.7.8': optional: true + '@unrs/resolver-binding-linux-arm-musleabihf@1.9.0': + optional: true + '@unrs/resolver-binding-linux-arm64-gnu@1.7.8': optional: true + '@unrs/resolver-binding-linux-arm64-gnu@1.9.0': + optional: true + '@unrs/resolver-binding-linux-arm64-musl@1.7.8': optional: true + '@unrs/resolver-binding-linux-arm64-musl@1.9.0': + optional: true + '@unrs/resolver-binding-linux-ppc64-gnu@1.7.8': optional: true + '@unrs/resolver-binding-linux-ppc64-gnu@1.9.0': + optional: true + '@unrs/resolver-binding-linux-riscv64-gnu@1.7.8': optional: true + '@unrs/resolver-binding-linux-riscv64-gnu@1.9.0': + optional: true + '@unrs/resolver-binding-linux-riscv64-musl@1.7.8': optional: true + '@unrs/resolver-binding-linux-riscv64-musl@1.9.0': + optional: true + '@unrs/resolver-binding-linux-s390x-gnu@1.7.8': optional: true + '@unrs/resolver-binding-linux-s390x-gnu@1.9.0': + optional: true + '@unrs/resolver-binding-linux-x64-gnu@1.7.8': optional: true + '@unrs/resolver-binding-linux-x64-gnu@1.9.0': + optional: true + '@unrs/resolver-binding-linux-x64-musl@1.7.8': optional: true + '@unrs/resolver-binding-linux-x64-musl@1.9.0': + optional: true + '@unrs/resolver-binding-wasm32-wasi@1.7.8': dependencies: '@napi-rs/wasm-runtime': 0.2.10 optional: true + '@unrs/resolver-binding-wasm32-wasi@1.9.0': + dependencies: + '@napi-rs/wasm-runtime': 0.2.11 + optional: true + '@unrs/resolver-binding-win32-arm64-msvc@1.7.8': optional: true + '@unrs/resolver-binding-win32-arm64-msvc@1.9.0': + optional: true + '@unrs/resolver-binding-win32-ia32-msvc@1.7.8': optional: true + '@unrs/resolver-binding-win32-ia32-msvc@1.9.0': + optional: true + '@unrs/resolver-binding-win32-x64-msvc@1.7.8': optional: true + '@unrs/resolver-binding-win32-x64-msvc@1.9.0': + optional: true + '@vitest/eslint-plugin@1.2.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@typescript-eslint/utils': 8.32.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) @@ -7318,6 +7547,9 @@ snapshots: transitivePeerDependencies: - supports-color + agent-base@7.1.3: + optional: true + aggregate-error@3.1.0: dependencies: clean-stack: 2.2.0 @@ -7542,6 +7774,8 @@ snapshots: balanced-match@1.0.2: {} + balanced-match@3.0.1: {} + bcrypt-pbkdf@1.0.2: dependencies: tweetnacl: 0.14.5 @@ -7568,6 +7802,10 @@ snapshots: dependencies: balanced-match: 1.0.2 + brace-expansion@4.0.1: + dependencies: + balanced-match: 3.0.1 + braces@3.0.3: dependencies: fill-range: 7.1.1 @@ -7605,18 +7843,18 @@ snapshots: yargs: 17.7.2 yargs-parser: 21.1.1 - cacache@18.0.1: + cacache@18.0.4: dependencies: - '@npmcli/fs': 3.1.0 + '@npmcli/fs': 3.1.1 fs-minipass: 3.0.3 glob: 10.4.5 - lru-cache: 10.2.0 + lru-cache: 10.4.3 minipass: 7.1.2 minipass-collect: 2.0.1 minipass-flush: 1.0.5 minipass-pipeline: 1.2.4 p-map: 4.0.0 - ssri: 10.0.5 + ssri: 10.0.6 tar: 6.2.1 unique-filename: 3.0.0 optional: true @@ -8297,7 +8535,7 @@ snapshots: eslint: 9.28.0(jiti@2.4.2) semver: 7.7.2 - eslint-config-canonical@44.9.5(@types/eslint@9.6.1)(@types/node@22.15.29)(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.0(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3): + eslint-config-canonical@44.9.5(@types/eslint@9.6.1)(@types/node@22.15.29)(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3): dependencies: '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@22.15.29)(eslint@9.28.0(jiti@2.4.2))(graphql@16.11.0)(typescript@5.8.3) '@next/eslint-plugin-next': 15.3.3 @@ -8307,13 +8545,13 @@ snapshots: '@vitest/eslint-plugin': 1.2.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) eslint: 9.28.0(jiti@2.4.2) eslint-config-prettier: 10.1.5(eslint@9.28.0(jiti@2.4.2)) - eslint-import-resolver-typescript: 4.4.2(eslint-plugin-import-x@4.15.0(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.0(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 4.4.2(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2)) eslint-plugin-ava: 15.0.1(eslint@9.28.0(jiti@2.4.2)) - eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.32.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.0(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.0(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.32.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) eslint-plugin-eslint-comments: 3.2.0(eslint@9.28.0(jiti@2.4.2)) eslint-plugin-fp: 2.3.0(eslint@9.28.0(jiti@2.4.2)) eslint-plugin-functional: 9.0.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) - eslint-plugin-import: eslint-plugin-import-x@4.15.0(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)) + eslint-plugin-import: eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)) eslint-plugin-jest: 28.12.0(@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) eslint-plugin-jsdoc: 50.6.17(eslint@9.28.0(jiti@2.4.2)) eslint-plugin-jsonc: 2.20.1(eslint@9.28.0(jiti@2.4.2)) @@ -8369,16 +8607,23 @@ snapshots: optionalDependencies: unrs-resolver: 1.7.8 + eslint-import-context@0.1.8(unrs-resolver@1.9.0): + dependencies: + get-tsconfig: 4.10.1 + stable-hash-x: 0.1.1 + optionalDependencies: + unrs-resolver: 1.9.0 + eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 - is-core-module: 2.13.1 - resolve: 1.22.8 + is-core-module: 2.16.1 + resolve: 1.22.10 transitivePeerDependencies: - supports-color optional: true - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.15.0(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.0(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.1(supports-color@8.1.1) @@ -8387,14 +8632,14 @@ snapshots: is-bun-module: 2.0.0 stable-hash: 0.0.5 tinyglobby: 0.2.14 - unrs-resolver: 1.7.8 + unrs-resolver: 1.9.0 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.15.0(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)) - eslint-plugin-import-x: 4.15.0(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)) + eslint-plugin-import: eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)) + eslint-plugin-import-x: 4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@4.4.2(eslint-plugin-import-x@4.15.0(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.0(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2)): + eslint-import-resolver-typescript@4.4.2(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2)): dependencies: debug: 4.4.1(supports-color@8.1.1) eslint: 9.28.0(jiti@2.4.2) @@ -8405,8 +8650,8 @@ snapshots: tinyglobby: 0.2.14 unrs-resolver: 1.7.8 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.15.0(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)) - eslint-plugin-import-x: 4.15.0(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)) + eslint-plugin-import: eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)) + eslint-plugin-import-x: 4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color @@ -8416,14 +8661,14 @@ snapshots: esquery: 1.6.0 jsonc-eslint-parser: 2.4.0 - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.15.0(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.0(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2)): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 8.32.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) eslint: 9.28.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.15.0(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.0(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color @@ -8439,14 +8684,14 @@ snapshots: pkg-dir: 5.0.0 resolve-from: 5.0.0 - eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.32.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.0(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.0(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3): + eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.32.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3): dependencies: '@typescript-eslint/utils': 8.32.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) array-includes: 3.1.8 debug: 4.4.1(supports-color@8.1.1) doctrine: 3.0.0 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.15.0(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.0(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2)) - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.15.0(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.0(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2)) is-get-set-prop: 1.0.0 is-js-type: 2.0.0 is-obj-prop: 1.0.0 @@ -8501,18 +8746,18 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import-x@4.15.0(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)): + eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)): dependencies: - '@typescript-eslint/types': 8.33.0 + '@typescript-eslint/types': 8.34.0 comment-parser: 1.4.1 debug: 4.4.1(supports-color@8.1.1) eslint: 9.28.0(jiti@2.4.2) - eslint-import-context: 0.1.6(unrs-resolver@1.7.8) + eslint-import-context: 0.1.8(unrs-resolver@1.9.0) is-glob: 4.0.3 - minimatch: 9.0.5 + minimatch: 10.0.2 semver: 7.7.2 - stable-hash: 0.0.5 - unrs-resolver: 1.7.8 + stable-hash-x: 0.1.1 + unrs-resolver: 1.9.0 optionalDependencies: '@typescript-eslint/utils': 8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) eslint-import-resolver-node: 0.3.9 @@ -8905,7 +9150,7 @@ snapshots: strip-final-newline: 4.0.0 yoctocolors: 2.1.1 - exponential-backoff@3.1.1: + exponential-backoff@3.1.2: optional: true extend@3.0.2: {} @@ -9404,7 +9649,7 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 - http-cache-semantics@4.1.1: + http-cache-semantics@4.2.0: optional: true http-proxy-agent@7.0.0: @@ -9414,6 +9659,14 @@ snapshots: transitivePeerDependencies: - supports-color + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.3 + debug: 4.4.1(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + optional: true + http-signature@1.2.0: dependencies: assert-plus: 1.0.0 @@ -9427,6 +9680,14 @@ snapshots: transitivePeerDependencies: - supports-color + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.3 + debug: 4.4.1(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + optional: true + human-signals@5.0.0: {} human-signals@7.0.0: {} @@ -9487,7 +9748,7 @@ snapshots: ini@1.3.8: {} - install-artifact-from-github@1.3.5: + install-artifact-from-github@1.4.0: optional: true internal-slot@1.0.7: @@ -9507,11 +9768,14 @@ snapshots: from2: 2.3.0 p-is-promise: 3.0.0 - ip-regex@4.3.0: {} - - ip@2.0.1: + ip-address@9.0.5: + dependencies: + jsbn: 1.1.0 + sprintf-js: 1.1.3 optional: true + ip-regex@4.3.0: {} + is-array-buffer@3.0.4: dependencies: call-bind: 1.0.7 @@ -9566,6 +9830,11 @@ snapshots: dependencies: hasown: 2.0.2 + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + optional: true + is-data-view@1.0.1: dependencies: is-typed-array: 1.1.13 @@ -9834,6 +10103,9 @@ snapshots: jsbn@0.1.1: {} + jsbn@1.1.0: + optional: true + jsdoc-type-pratt-parser@4.0.0: {} jsdoc-type-pratt-parser@4.1.0: {} @@ -10036,6 +10308,9 @@ snapshots: lru-cache@10.2.0: {} + lru-cache@10.4.3: + optional: true + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -10049,19 +10324,20 @@ snapshots: dependencies: semver: 7.7.2 - make-fetch-happen@13.0.0: + make-fetch-happen@13.0.1: dependencies: - '@npmcli/agent': 2.2.0 - cacache: 18.0.1 - http-cache-semantics: 4.1.1 + '@npmcli/agent': 2.2.2 + cacache: 18.0.4 + http-cache-semantics: 4.2.0 is-lambda: 1.0.1 minipass: 7.1.2 - minipass-fetch: 3.0.4 + minipass-fetch: 3.0.5 minipass-flush: 1.0.5 minipass-pipeline: 1.2.4 - negotiator: 0.6.3 + negotiator: 0.6.4 + proc-log: 4.2.0 promise-retry: 2.0.1 - ssri: 10.0.5 + ssri: 10.0.6 transitivePeerDependencies: - supports-color optional: true @@ -10119,6 +10395,10 @@ snapshots: min-indent@1.0.1: {} + minimatch@10.0.2: + dependencies: + brace-expansion: 4.0.1 + minimatch@3.0.5: dependencies: brace-expansion: 1.1.11 @@ -10146,7 +10426,7 @@ snapshots: minipass: 7.1.2 optional: true - minipass-fetch@3.0.4: + minipass-fetch@3.0.5: dependencies: minipass: 7.1.2 minipass-sized: 1.0.3 @@ -10222,7 +10502,7 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 - nan@2.18.0: + nan@2.22.2: optional: true nano-spawn@1.0.2: {} @@ -10233,7 +10513,7 @@ snapshots: natural-orderby@5.0.0: {} - negotiator@0.6.3: + negotiator@0.6.4: optional: true neo-async@2.6.2: {} @@ -10260,15 +10540,15 @@ snapshots: fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 - node-gyp@10.0.1: + node-gyp@10.3.1: dependencies: env-paths: 2.2.1 - exponential-backoff: 3.1.1 + exponential-backoff: 3.1.2 glob: 10.4.5 graceful-fs: 4.2.11 - make-fetch-happen: 13.0.0 - nopt: 7.2.0 - proc-log: 3.0.0 + make-fetch-happen: 13.0.1 + nopt: 7.2.1 + proc-log: 4.2.0 semver: 7.7.2 tar: 6.2.1 which: 4.0.0 @@ -10278,7 +10558,7 @@ snapshots: node-releases@2.0.19: {} - nopt@7.2.0: + nopt@7.2.1: dependencies: abbrev: 2.0.0 optional: true @@ -10596,7 +10876,7 @@ snapshots: dependencies: parse-ms: 4.0.0 - proc-log@3.0.0: + proc-log@4.2.0: optional: true process-nextick-args@2.0.1: {} @@ -10644,9 +10924,9 @@ snapshots: re2@1.20.9: dependencies: - install-artifact-from-github: 1.3.5 - nan: 2.18.0 - node-gyp: 10.0.1 + install-artifact-from-github: 1.4.0 + nan: 2.22.2 + node-gyp: 10.3.1 transitivePeerDependencies: - supports-color optional: true @@ -10825,6 +11105,13 @@ snapshots: resolve-pkg-maps@1.0.0: {} + resolve@1.22.10: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + optional: true + resolve@1.22.8: dependencies: is-core-module: 2.13.1 @@ -11070,18 +11357,18 @@ snapshots: smart-buffer@4.2.0: optional: true - socks-proxy-agent@8.0.2: + socks-proxy-agent@8.0.5: dependencies: - agent-base: 7.1.0 + agent-base: 7.1.3 debug: 4.4.1(supports-color@8.1.1) - socks: 2.7.1 + socks: 2.8.5 transitivePeerDependencies: - supports-color optional: true - socks@2.7.1: + socks@2.8.5: dependencies: - ip: 2.0.1 + ip-address: 9.0.5 smart-buffer: 4.2.0 optional: true @@ -11122,6 +11409,9 @@ snapshots: sprintf-js@1.0.3: {} + sprintf-js@1.1.3: + optional: true + sshpk@1.18.0: dependencies: asn1: 0.2.6 @@ -11134,11 +11424,13 @@ snapshots: safer-buffer: 2.1.2 tweetnacl: 0.14.5 - ssri@10.0.5: + ssri@10.0.6: dependencies: minipass: 7.1.2 optional: true + stable-hash-x@0.1.1: {} + stable-hash@0.0.5: {} stack-trace@0.0.10: {} @@ -11594,6 +11886,30 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.7.8 '@unrs/resolver-binding-win32-x64-msvc': 1.7.8 + unrs-resolver@1.9.0: + dependencies: + napi-postinstall: 0.2.4 + optionalDependencies: + '@unrs/resolver-binding-android-arm-eabi': 1.9.0 + '@unrs/resolver-binding-android-arm64': 1.9.0 + '@unrs/resolver-binding-darwin-arm64': 1.9.0 + '@unrs/resolver-binding-darwin-x64': 1.9.0 + '@unrs/resolver-binding-freebsd-x64': 1.9.0 + '@unrs/resolver-binding-linux-arm-gnueabihf': 1.9.0 + '@unrs/resolver-binding-linux-arm-musleabihf': 1.9.0 + '@unrs/resolver-binding-linux-arm64-gnu': 1.9.0 + '@unrs/resolver-binding-linux-arm64-musl': 1.9.0 + '@unrs/resolver-binding-linux-ppc64-gnu': 1.9.0 + '@unrs/resolver-binding-linux-riscv64-gnu': 1.9.0 + '@unrs/resolver-binding-linux-riscv64-musl': 1.9.0 + '@unrs/resolver-binding-linux-s390x-gnu': 1.9.0 + '@unrs/resolver-binding-linux-x64-gnu': 1.9.0 + '@unrs/resolver-binding-linux-x64-musl': 1.9.0 + '@unrs/resolver-binding-wasm32-wasi': 1.9.0 + '@unrs/resolver-binding-win32-arm64-msvc': 1.9.0 + '@unrs/resolver-binding-win32-ia32-msvc': 1.9.0 + '@unrs/resolver-binding-win32-x64-msvc': 1.9.0 + update-browserslist-db@1.1.3(browserslist@4.25.0): dependencies: browserslist: 4.25.0 From d45ad32d05aa997993c8f6b63bf9b131dd6f404e Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sun, 1 Jun 2025 04:18:45 +0800 Subject: [PATCH 002/189] chore: bump to Node 20.11.0+ BREAKING CHANGE: Requires Node 20.11.0+ Also: - chore: upgrade `are-docs-informative` - refactor: use `import.meta.dirname` --- .babelrc.json | 2 +- .github/workflows/feature.yaml | 7 ++- .github/workflows/main.yaml | 2 +- .ncurc.cjs | 7 --- package.json | 8 ++-- pnpm-lock.yaml | 80 +++++++++++++++++++++++++--------- src/bin/generateDocs.js | 9 +--- src/bin/generateRule.js | 9 +--- src/getJsdocProcessorPlugin.js | 8 +--- test/rules/index.js | 10 ++--- 10 files changed, 75 insertions(+), 67 deletions(-) diff --git a/.babelrc.json b/.babelrc.json index 68ca053f8..6ca99f283 100644 --- a/.babelrc.json +++ b/.babelrc.json @@ -8,7 +8,7 @@ "@babel/preset-env", { "targets": { - "node": 16 + "node": 20 } } ] diff --git a/.github/workflows/feature.yaml b/.github/workflows/feature.yaml index d8e7b5835..a58769f3e 100644 --- a/.github/workflows/feature.yaml +++ b/.github/workflows/feature.yaml @@ -13,7 +13,7 @@ jobs: - name: setup node.js uses: actions/setup-node@v4 with: - node-version: '20' + node-version: '20.11.0' - run: pnpm install - run: pnpm build - run: pnpm lint @@ -40,8 +40,7 @@ jobs: fail-fast: false matrix: node_js_version: - - '18' - - '20' + - '20.11.0' - '22' build: runs-on: ubuntu-latest @@ -57,7 +56,7 @@ jobs: - name: setup node.js uses: actions/setup-node@v4 with: - node-version: '20' + node-version: '20.11.0' - run: pnpm install - run: pnpm build timeout-minutes: 10 diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index f10c5484e..3ff1fc0f8 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -14,7 +14,7 @@ jobs: - name: setup node.js uses: actions/setup-node@v4 with: - node-version: "20" + node-version: "22" - run: pnpm install - run: pnpm build - run: npx semantic-release diff --git a/.ncurc.cjs b/.ncurc.cjs index 3bc05ea2a..57437fa61 100644 --- a/.ncurc.cjs +++ b/.ncurc.cjs @@ -4,12 +4,5 @@ module.exports = { reject: [ // Todo: When our package converted to ESM only 'escape-string-regexp', - - // todo[engine:node@>=20]: Can reenable - 'are-docs-informative', - // todo[engine:node@>=20]: Can reenable - 'glob', - // todo[engine:node@>=20]: Can reenable - 'rimraf', ], }; diff --git a/package.json b/package.json index 81616c7cf..1ef2757bf 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ }, "dependencies": { "@es-joy/jsdoccomment": "~0.50.2", - "are-docs-informative": "^0.0.2", + "are-docs-informative": "^0.1.1", "comment-parser": "1.4.1", "debug": "^4.4.1", "escape-string-regexp": "^4.0.0", @@ -55,7 +55,7 @@ "eslint": "9.28.0", "eslint-config-canonical": "~44.9.5", "gitdown": "^4.1.1", - "glob": "^10.4.2", + "glob": "^11.0.2", "globals": "^16.2.0", "husky": "^9.1.7", "jsdoc-type-pratt-parser": "^4.1.0", @@ -65,13 +65,13 @@ "mocha": "^11.5.0", "open-editor": "^5.1.0", "replace": "^1.2.2", - "rimraf": "^5.0.7", + "rimraf": "^6.0.1", "semantic-release": "^24.2.5", "typescript": "5.8.3", "typescript-eslint": "^8.33.0" }, "engines": { - "node": ">=18" + "node": ">=20.11.0" }, "keywords": [ "eslint", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8b23cecc6..7898a1245 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,8 +12,8 @@ importers: specifier: ~0.50.2 version: 0.50.2 are-docs-informative: - specifier: ^0.0.2 - version: 0.0.2 + specifier: ^0.1.1 + version: 0.1.1 comment-parser: specifier: 1.4.1 version: 1.4.1 @@ -151,8 +151,8 @@ importers: specifier: ^4.1.1 version: 4.1.1(re2@1.20.9) glob: - specifier: ^10.4.2 - version: 10.4.2 + specifier: ^11.0.2 + version: 11.0.2 globals: specifier: ^16.2.0 version: 16.2.0 @@ -181,8 +181,8 @@ importers: specifier: ^1.2.2 version: 1.2.2 rimraf: - specifier: ^5.0.7 - version: 5.0.7 + specifier: ^6.0.1 + version: 6.0.1 semantic-release: specifier: ^24.2.5 version: 24.2.5(typescript@5.8.3) @@ -1731,6 +1731,10 @@ packages: resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} engines: {node: '>=14'} + are-docs-informative@0.1.1: + resolution: {integrity: sha512-sqRsNQBwbKLRX0jV5Cu5uzmtflf892n4Vukz7T659ebL4pz3mpOqCMU7lxMoBTFwnp10E3YB5ZcyHM41W5bcDA==} + engines: {node: '>=18'} + argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} @@ -3154,15 +3158,15 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob@10.4.2: - resolution: {integrity: sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==} - engines: {node: '>=16 || 14 >=14.18'} - hasBin: true - glob@10.4.5: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true + glob@11.0.2: + resolution: {integrity: sha512-YT7U7Vye+t5fZ/QMkBFrTJ7ZQxInIUjwyAjVj84CYXqgBdv30MFUPGnBR6sQaVq6Is15wYJUsnzTuWaGRBhBAQ==} + engines: {node: 20 || >=22} + hasBin: true + glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported @@ -3770,6 +3774,10 @@ packages: resolution: {integrity: sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==} engines: {node: '>=14'} + jackspeak@4.1.1: + resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==} + engines: {node: 20 || >=22} + java-properties@1.0.2: resolution: {integrity: sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==} engines: {node: '>= 0.6.0'} @@ -3993,6 +4001,10 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@11.1.0: + resolution: {integrity: sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==} + engines: {node: 20 || >=22} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -4083,6 +4095,10 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} + minimatch@10.0.1: + resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + engines: {node: 20 || >=22} + minimatch@10.0.2: resolution: {integrity: sha512-+9TJCIYXgZ2Dm5LxVCFsa8jOm+evMwXHFI0JM1XROmkfkpz8/iLLDh+TwSmyIBrs6C6Xu9294/fq8cBA+P6AqA==} engines: {node: 20 || >=22} @@ -4538,6 +4554,10 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} + path-scurry@2.0.0: + resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} + engines: {node: 20 || >=22} + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -4846,9 +4866,9 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - rimraf@5.0.7: - resolution: {integrity: sha512-nV6YcJo5wbLW77m+8KjH8aB/7/rxQy9SZ0HY5shnwULfS+9nmTtVXAJET5NdZmCzA4fPI/Hm1wo/Po/4mopOdg==} - engines: {node: '>=14.18'} + rimraf@6.0.1: + resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} + engines: {node: 20 || >=22} hasBin: true roarr@7.21.1: @@ -7598,6 +7618,8 @@ snapshots: are-docs-informative@0.0.2: {} + are-docs-informative@0.1.1: {} + argparse@1.0.10: dependencies: sprintf-js: 1.0.3 @@ -9462,7 +9484,7 @@ snapshots: dependencies: is-glob: 4.0.3 - glob@10.4.2: + glob@10.4.5: dependencies: foreground-child: 3.1.1 jackspeak: 3.1.2 @@ -9471,14 +9493,14 @@ snapshots: package-json-from-dist: 1.0.0 path-scurry: 1.11.1 - glob@10.4.5: + glob@11.0.2: dependencies: foreground-child: 3.1.1 - jackspeak: 3.1.2 - minimatch: 9.0.4 + jackspeak: 4.1.1 + minimatch: 10.0.1 minipass: 7.1.2 package-json-from-dist: 1.0.0 - path-scurry: 1.11.1 + path-scurry: 2.0.0 glob@7.2.3: dependencies: @@ -10084,6 +10106,10 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + jackspeak@4.1.1: + dependencies: + '@isaacs/cliui': 8.0.2 + java-properties@1.0.2: {} jiti@2.4.2: {} @@ -10311,6 +10337,8 @@ snapshots: lru-cache@10.4.3: optional: true + lru-cache@11.1.0: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -10395,6 +10423,10 @@ snapshots: min-indent@1.0.1: {} + minimatch@10.0.1: + dependencies: + brace-expansion: 2.0.1 + minimatch@10.0.2: dependencies: brace-expansion: 4.0.1 @@ -10817,6 +10849,11 @@ snapshots: lru-cache: 10.2.0 minipass: 7.1.2 + path-scurry@2.0.0: + dependencies: + lru-cache: 11.1.0 + minipass: 7.1.2 + path-type@4.0.0: {} path-type@5.0.0: {} @@ -11140,9 +11177,10 @@ snapshots: dependencies: glob: 7.2.3 - rimraf@5.0.7: + rimraf@6.0.1: dependencies: - glob: 10.4.2 + glob: 11.0.2 + package-json-from-dist: 1.0.0 roarr@7.21.1: dependencies: diff --git a/src/bin/generateDocs.js b/src/bin/generateDocs.js index 1e0df84b6..b7c14cafb 100644 --- a/src/bin/generateDocs.js +++ b/src/bin/generateDocs.js @@ -7,14 +7,9 @@ import { /** * This script is used to inline assertions into the README.md documents. */ -import path, { - dirname as getDirname, -} from 'path'; -import { - fileURLToPath, -} from 'url'; +import path from 'path'; -const dirname = getDirname(fileURLToPath(import.meta.url)); +const dirname = import.meta.dirname; /** * @param {string} code diff --git a/src/bin/generateRule.js b/src/bin/generateRule.js index 3de87b402..1b87ac8b7 100644 --- a/src/bin/generateRule.js +++ b/src/bin/generateRule.js @@ -13,15 +13,8 @@ import fs from 'fs/promises'; */ import open from 'open-editor'; import { - dirname as getDirname, resolve, } from 'path'; -// Todo: Add back `@example` when reject other langs from processing -import { - fileURLToPath, -} from 'url'; - -const dirname = getDirname(fileURLToPath(import.meta.url)); // Todo: Would ideally have prompts, e.g., to ask for whether // type was problem/layout, etc. @@ -284,7 +277,7 @@ export default iterateJsdoc(({ */ // Set chdir as somehow still in operation from other test - process.chdir(resolve(dirname, '../../')); + process.chdir(resolve(import.meta.dirname, '../../')); await open([ // Could even add editor line column numbers like `${rulePath}:1:1` ruleReadmePath, diff --git a/src/getJsdocProcessorPlugin.js b/src/getJsdocProcessorPlugin.js index bcad15fcb..2c33acbdd 100644 --- a/src/getJsdocProcessorPlugin.js +++ b/src/getJsdocProcessorPlugin.js @@ -13,20 +13,14 @@ import { readFileSync, } from 'node:fs'; import { - dirname as getDirname, join, } from 'node:path'; -import { - fileURLToPath, -} from 'node:url'; - -const dirname = getDirname(fileURLToPath(import.meta.url)); const { version, } = JSON.parse( // @ts-expect-error `Buffer` is ok for `JSON.parse` - readFileSync(join(dirname, '../package.json')), + readFileSync(join(import.meta.dirname, '../package.json')), ); // const zeroBasedLineIndexAdjust = -1; diff --git a/test/rules/index.js b/test/rules/index.js index 185d87ffc..b5f8a8357 100644 --- a/test/rules/index.js +++ b/test/rules/index.js @@ -9,13 +9,9 @@ import { } from 'fs'; import defaultsDeep from 'lodash.defaultsdeep'; import { - dirname as getDirname, join, } from 'path'; import semver from 'semver'; -import { - fileURLToPath, -} from 'url'; /** * @typedef {object} TestCases @@ -23,13 +19,13 @@ import { * @property {import('eslint').RuleTester.InvalidTestCase[]} invalid Invalid test cases */ -const dirname = getDirname(fileURLToPath(import.meta.url)); - const ruleTester = new RuleTester(); // eslint-disable-next-line complexity -- Temporary const main = async () => { - const ruleNames = JSON.parse(readFileSync(join(dirname, './ruleNames.json'), 'utf8')); + const ruleNames = JSON.parse(readFileSync(join( + import.meta.dirname, './ruleNames.json', + ), 'utf8')); if (!config.rules) { throw new Error('TypeScript guard'); From f85ffc6186162c8a600ecf9106565461884146a9 Mon Sep 17 00:00:00 2001 From: Gajus Date: Thu, 12 Jun 2025 11:55:54 -0600 Subject: [PATCH 003/189] fix: require node v22 --- .github/workflows/feature.yaml | 5 ++--- package.json | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/feature.yaml b/.github/workflows/feature.yaml index a58769f3e..c42625b42 100644 --- a/.github/workflows/feature.yaml +++ b/.github/workflows/feature.yaml @@ -13,7 +13,7 @@ jobs: - name: setup node.js uses: actions/setup-node@v4 with: - node-version: '20.11.0' + node-version: '22' - run: pnpm install - run: pnpm build - run: pnpm lint @@ -40,7 +40,6 @@ jobs: fail-fast: false matrix: node_js_version: - - '20.11.0' - '22' build: runs-on: ubuntu-latest @@ -56,7 +55,7 @@ jobs: - name: setup node.js uses: actions/setup-node@v4 with: - node-version: '20.11.0' + node-version: '22' - run: pnpm install - run: pnpm build timeout-minutes: 10 diff --git a/package.json b/package.json index 1ef2757bf..d5db947c5 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "typescript-eslint": "^8.33.0" }, "engines": { - "node": ">=20.11.0" + "node": ">=22" }, "keywords": [ "eslint", From 68550001111c23aa34a5bf8afd0807a122e4f71e Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Wed, 18 Jun 2025 04:42:24 +0800 Subject: [PATCH 004/189] fix: revert "fix: require node v22"; fixes #1398 (#1402) This reverts commit f85ffc6186162c8a600ecf9106565461884146a9. to allow Node v20.11.0+ --- .github/workflows/feature.yaml | 5 +++-- package.json | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/feature.yaml b/.github/workflows/feature.yaml index c42625b42..a58769f3e 100644 --- a/.github/workflows/feature.yaml +++ b/.github/workflows/feature.yaml @@ -13,7 +13,7 @@ jobs: - name: setup node.js uses: actions/setup-node@v4 with: - node-version: '22' + node-version: '20.11.0' - run: pnpm install - run: pnpm build - run: pnpm lint @@ -40,6 +40,7 @@ jobs: fail-fast: false matrix: node_js_version: + - '20.11.0' - '22' build: runs-on: ubuntu-latest @@ -55,7 +56,7 @@ jobs: - name: setup node.js uses: actions/setup-node@v4 with: - node-version: '22' + node-version: '20.11.0' - run: pnpm install - run: pnpm build timeout-minutes: 10 diff --git a/package.json b/package.json index d5db947c5..1ef2757bf 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "typescript-eslint": "^8.33.0" }, "engines": { - "node": ">=22" + "node": ">=20.11.0" }, "keywords": [ "eslint", From ec387d640f89e4e89946705727363ca3de86ff6d Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Wed, 18 Jun 2025 04:46:16 +0800 Subject: [PATCH 005/189] fix: revert `are-docs-informative` while still using CJS; fixes #1400 (#1401) --- .ncurc.cjs | 5 ++++- package.json | 2 +- pnpm-lock.yaml | 10 ++-------- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/.ncurc.cjs b/.ncurc.cjs index 57437fa61..b340c5d88 100644 --- a/.ncurc.cjs +++ b/.ncurc.cjs @@ -2,7 +2,10 @@ module.exports = { reject: [ - // Todo: When our package converted to ESM only + // Todo: When our package is converted to ESM only 'escape-string-regexp', + + // Todo: When our package is converted to ESM only + 'are-docs-informative', ], }; diff --git a/package.json b/package.json index 1ef2757bf..3c4f2e93b 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ }, "dependencies": { "@es-joy/jsdoccomment": "~0.50.2", - "are-docs-informative": "^0.1.1", + "are-docs-informative": "^0.0.2", "comment-parser": "1.4.1", "debug": "^4.4.1", "escape-string-regexp": "^4.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7898a1245..a42a5e175 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,8 +12,8 @@ importers: specifier: ~0.50.2 version: 0.50.2 are-docs-informative: - specifier: ^0.1.1 - version: 0.1.1 + specifier: ^0.0.2 + version: 0.0.2 comment-parser: specifier: 1.4.1 version: 1.4.1 @@ -1731,10 +1731,6 @@ packages: resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} engines: {node: '>=14'} - are-docs-informative@0.1.1: - resolution: {integrity: sha512-sqRsNQBwbKLRX0jV5Cu5uzmtflf892n4Vukz7T659ebL4pz3mpOqCMU7lxMoBTFwnp10E3YB5ZcyHM41W5bcDA==} - engines: {node: '>=18'} - argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} @@ -7618,8 +7614,6 @@ snapshots: are-docs-informative@0.0.2: {} - are-docs-informative@0.1.1: {} - argparse@1.0.10: dependencies: sprintf-js: 1.0.3 From 9bb554a905ee6a7bbccf2c3bae9fb56b424beb83 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sat, 21 Jun 2025 05:43:33 +0800 Subject: [PATCH 006/189] fix(`no-undefined-types`): mark sister method and property names as defined; fixes #1403 ; fixes #1119 (#1404) --- docs/rules/no-undefined-types.md | 39 ++++++++++++++++++ src/rules/noUndefinedTypes.js | 25 ++++++++++++ test/rules/assertions/noUndefinedTypes.js | 48 +++++++++++++++++++++++ 3 files changed, 112 insertions(+) diff --git a/docs/rules/no-undefined-types.md b/docs/rules/no-undefined-types.md index 24e3604bb..9d240079a 100644 --- a/docs/rules/no-undefined-types.md +++ b/docs/rules/no-undefined-types.md @@ -865,5 +865,44 @@ quux(); /** * @type {Linters} */ + +class Filler { + static methodOne () { + return 'Method One'; + } + + nonStaticMethodTwo (param) { + return `Method Two received: ${param}`; + } + + /** + * {@link methodOne} shouldn't report eslint error + * {@link nonStaticMethodTwo} also shouldn't report eslint error + * @returns {number} A number representing the answer to everything. + */ + static methodThree () { + return 42; + } + + /** + * {@link Filler.methodOne} doesn't report eslint error + * {@link Filler.nonStaticMethodTwo} also doesn't report eslint error + * @returns {string} A string indicating the method's purpose. + */ + methodFour() { + return 'Method Four'; + } +} + +class Foo { + foo = "foo"; + /** + * Something related to {@link foo} + * @returns {string} Something awesome + */ + bar() { + return "bar"; + } +} ```` diff --git a/src/rules/noUndefinedTypes.js b/src/rules/noUndefinedTypes.js index ff45dbaec..c8c75e736 100644 --- a/src/rules/noUndefinedTypes.js +++ b/src/rules/noUndefinedTypes.js @@ -267,6 +267,31 @@ export default iterateJsdoc(({ .concat(importTags) .concat(definedTypes) .concat(/** @type {string[]} */ (definedPreferredTypes)) + .concat((() => { + // Other methods are not in scope, but we need them, and we grab them here + if (node?.type === 'MethodDefinition') { + return /** @type {import('estree').ClassBody} */ (node.parent).body.map((methodOrProp) => { + if (methodOrProp.type === 'MethodDefinition') { + // eslint-disable-next-line unicorn/no-lonely-if -- Pattern + if (methodOrProp.key.type === 'Identifier') { + return methodOrProp.key.name; + } + } + + if (methodOrProp.type === 'PropertyDefinition') { + // eslint-disable-next-line unicorn/no-lonely-if -- Pattern + if (methodOrProp.key.type === 'Identifier') { + return methodOrProp.key.name; + } + } + /* c8 ignore next 2 -- Not yet built */ + + return ''; + }).filter(Boolean); + } + + return []; + })()) .concat(...getValidRuntimeIdentifiers(node && ( (sourceCode.getScope && /* c8 ignore next 2 */ diff --git a/test/rules/assertions/noUndefinedTypes.js b/test/rules/assertions/noUndefinedTypes.js index fd2e9c4bd..a9eaec65b 100644 --- a/test/rules/assertions/noUndefinedTypes.js +++ b/test/rules/assertions/noUndefinedTypes.js @@ -1549,5 +1549,53 @@ export default /** @type {import('../index.js').TestCases} */ ({ */ `, }, + { + code: ` + class Filler { + static methodOne () { + return 'Method One'; + } + + nonStaticMethodTwo (param) { + return \`Method Two received: $\{param}\`; + } + + /** + * {@link methodOne} shouldn't report eslint error + * {@link nonStaticMethodTwo} also shouldn't report eslint error + * @returns {number} A number representing the answer to everything. + */ + static methodThree () { + return 42; + } + + /** + * {@link Filler.methodOne} doesn't report eslint error + * {@link Filler.nonStaticMethodTwo} also doesn't report eslint error + * @returns {string} A string indicating the method's purpose. + */ + methodFour() { + return 'Method Four'; + } + } + `, + }, + { + code: ` + class Foo { + foo = "foo"; + /** + * Something related to {@link foo} + * @returns {string} Something awesome + */ + bar() { + return "bar"; + } + } + `, + languageOptions: { + ecmaVersion: 2_022, + }, + }, ], }); From fcc7b26567186416cec3a695459cab27cf7851df Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sat, 21 Jun 2025 08:53:57 +0800 Subject: [PATCH 007/189] fix(`no-undefined-types`): check existence of class methods/properties (#1405) --- docs/rules/no-undefined-types.md | 15 +++++++ src/rules/noUndefinedTypes.js | 53 ++++++++++++++++++----- test/rules/assertions/noUndefinedTypes.js | 27 ++++++++++++ 3 files changed, 85 insertions(+), 10 deletions(-) diff --git a/docs/rules/no-undefined-types.md b/docs/rules/no-undefined-types.md index 9d240079a..77d0a729f 100644 --- a/docs/rules/no-undefined-types.md +++ b/docs/rules/no-undefined-types.md @@ -337,6 +337,21 @@ const a = new Todo(); * @type {Another} */ // Message: The type 'BadImportIgnoredByThisRule' is undefined. + +class Filler { + /** + * {@link Filler.methodTwo} non-existent + * {@link Filler.nonStaticMethodTwo} non-existent too + * {@link Filler.methodThree} existent + * @returns {string} A string indicating the method's purpose. + */ + methodOne() { + return 'Method Four'; + } + + methodThree() {} +} +// Message: The type 'Filler.methodTwo' is undefined. ```` diff --git a/src/rules/noUndefinedTypes.js b/src/rules/noUndefinedTypes.js index c8c75e736..615cc1dc1 100644 --- a/src/rules/noUndefinedTypes.js +++ b/src/rules/noUndefinedTypes.js @@ -270,18 +270,28 @@ export default iterateJsdoc(({ .concat((() => { // Other methods are not in scope, but we need them, and we grab them here if (node?.type === 'MethodDefinition') { - return /** @type {import('estree').ClassBody} */ (node.parent).body.map((methodOrProp) => { + return /** @type {import('estree').ClassBody} */ (node.parent).body.flatMap((methodOrProp) => { if (methodOrProp.type === 'MethodDefinition') { // eslint-disable-next-line unicorn/no-lonely-if -- Pattern if (methodOrProp.key.type === 'Identifier') { - return methodOrProp.key.name; + return [ + methodOrProp.key.name, + `${/** @type {import('estree').ClassDeclaration} */ ( + node.parent?.parent + )?.id?.name}.${methodOrProp.key.name}`, + ]; } } if (methodOrProp.type === 'PropertyDefinition') { // eslint-disable-next-line unicorn/no-lonely-if -- Pattern if (methodOrProp.key.type === 'Identifier') { - return methodOrProp.key.name; + return [ + methodOrProp.key.name, + `${/** @type {import('estree').ClassDeclaration} */ ( + node.parent?.parent + )?.id?.name}.${methodOrProp.key.name}`, + ]; } } /* c8 ignore next 2 -- Not yet built */ @@ -374,26 +384,49 @@ export default iterateJsdoc(({ parsedType, tag, } of tagsWithTypes) { - traverse(parsedType, (nde) => { + traverse(parsedType, (nde, parentNode) => { + /** + * @type {import('jsdoc-type-pratt-parser').NameResult & { + * _parent?: import('jsdoc-type-pratt-parser').NonRootResult + * }} + */ + // eslint-disable-next-line canonical/id-match -- Avoid clashes + (nde)._parent = parentNode; const { type, value, } = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (nde); + let val = value; + + /** @type {import('jsdoc-type-pratt-parser').NonRootResult|undefined} */ + let currNode = nde; + do { + currNode = + /** + * @type {import('jsdoc-type-pratt-parser').NameResult & { + * _parent?: import('jsdoc-type-pratt-parser').NonRootResult + * }} + */ (currNode)._parent; + if (currNode && 'right' in currNode && currNode.right?.type === 'JsdocTypeProperty') { + val = val + '.' + currNode.right.value; + } + } while (currNode?.type === 'JsdocTypeNamePath'); + if (type === 'JsdocTypeName') { const structuredTypes = structuredTags[tag.tag]?.type; - if (!allDefinedTypes.has(value) && - (!Array.isArray(structuredTypes) || !structuredTypes.includes(value)) + if (!allDefinedTypes.has(val) && + (!Array.isArray(structuredTypes) || !structuredTypes.includes(val)) ) { if (!disableReporting) { - report(`The type '${value}' is undefined.`, null, tag); + report(`The type '${val}' is undefined.`, null, tag); } - } else if (markVariablesAsUsed && !extraTypes.includes(value)) { + } else if (markVariablesAsUsed && !extraTypes.includes(val)) { if (sourceCode.markVariableAsUsed) { - sourceCode.markVariableAsUsed(value); + sourceCode.markVariableAsUsed(val); /* c8 ignore next 3 */ } else { - context.markVariableAsUsed(value); + context.markVariableAsUsed(val); } } } diff --git a/test/rules/assertions/noUndefinedTypes.js b/test/rules/assertions/noUndefinedTypes.js index a9eaec65b..78dd3743d 100644 --- a/test/rules/assertions/noUndefinedTypes.js +++ b/test/rules/assertions/noUndefinedTypes.js @@ -606,6 +606,33 @@ export default /** @type {import('../index.js').TestCases} */ ({ }, ], }, + { + code: ` + class Filler { + /** + * {@link Filler.methodTwo} non-existent + * {@link Filler.nonStaticMethodTwo} non-existent too + * {@link Filler.methodThree} existent + * @returns {string} A string indicating the method's purpose. + */ + methodOne() { + return 'Method Four'; + } + + methodThree() {} + } + `, + errors: [ + { + line: 4, + message: 'The type \'Filler.methodTwo\' is undefined.', + }, + { + line: 4, + message: 'The type \'Filler.nonStaticMethodTwo\' is undefined.', + }, + ], + }, ], valid: [ { From 26ae16962677c96510692bcd051f555612a5d446 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sat, 21 Jun 2025 10:39:30 +0800 Subject: [PATCH 008/189] fix(`require-jsdoc`): update jsdoccomment (and espree) to get comment-finding for overloaded functions; fixes #1369 (#1406) --- docs/rules/require-jsdoc.md | 22 + package.json | 24 +- pnpm-lock.yaml | 885 ++++++++++++++------------ test/rules/assertions/requireJsdoc.js | 28 + 4 files changed, 552 insertions(+), 407 deletions(-) diff --git a/docs/rules/require-jsdoc.md b/docs/rules/require-jsdoc.md index 17612ec9d..025667f9d 100644 --- a/docs/rules/require-jsdoc.md +++ b/docs/rules/require-jsdoc.md @@ -1909,5 +1909,27 @@ class Abc { } } // "jsdoc/require-jsdoc": ["error"|"warn", {"publicOnly":true,"require":{"ClassDeclaration":true}}] + +/** + * Array map function with overload for NonEmptyArray + * @example + * const data = [{value: 'value'}] as const; + * const result1: NonEmptyReadonlyArray<'value'> = arrayMap(data, (value) => value.value); // pick type from data + * const result2: NonEmptyReadonlyArray<'value'> = arrayMap<'value', typeof data>(data, (value) => value.value); // enforce output type + * @template Target - The type of the array to map to + * @template Source - The type of the array to map from + * @param {Source} data - The array to map + * @param {MapCallback} callback - Callback function to map data from the array + * @returns {AnyArrayType} Mapped array + * @since v0.2.0 + */ +export function arrayMap | NonEmptyReadonlyArray>( + data: Source, + callback: MapCallback, +): NonEmptyArray; +export function arrayMap>(data: Source, callback: MapCallback): Array; +export function arrayMap(data: Source, callback: MapCallback): AnyArrayType { + return data.map(callback); +} ```` diff --git a/package.json b/package.json index 3c4f2e93b..8c54de409 100644 --- a/package.json +++ b/package.json @@ -5,12 +5,12 @@ "url": "http://gajus.com" }, "dependencies": { - "@es-joy/jsdoccomment": "~0.50.2", + "@es-joy/jsdoccomment": "~0.51.1", "are-docs-informative": "^0.0.2", "comment-parser": "1.4.1", "debug": "^4.4.1", "escape-string-regexp": "^4.0.0", - "espree": "^10.3.0", + "espree": "^10.4.0", "esquery": "^1.6.0", "parse-imports-exports": "^0.2.4", "semver": "^7.7.2", @@ -20,7 +20,7 @@ "devDependencies": { "@babel/cli": "^7.27.2", "@babel/core": "^7.27.4", - "@babel/eslint-parser": "^7.27.1", + "@babel/eslint-parser": "^7.27.5", "@babel/node": "^7.27.1", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-transform-flow-strip-types": "^7.27.1", @@ -36,39 +36,39 @@ "@types/eslint": "^9.6.1", "@types/espree": "^10.1.0", "@types/esquery": "^1.5.4", - "@types/estree": "^1.0.7", + "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@types/lodash.defaultsdeep": "^4.6.9", "@types/mocha": "^10.0.10", - "@types/node": "^22.15.29", + "@types/node": "^24.0.3", "@types/semver": "^7.7.0", "@types/spdx-expression-parse": "^3.0.5", - "@typescript-eslint/types": "^8.33.0", + "@typescript-eslint/types": "^8.34.1", "babel-plugin-add-module-exports": "^1.0.4", "babel-plugin-istanbul": "^7.0.0", - "babel-plugin-transform-import-meta": "^2.3.2", + "babel-plugin-transform-import-meta": "^2.3.3", "c8": "^10.1.3", "camelcase": "^8.0.0", "chai": "^5.2.0", "cross-env": "^7.0.3", "decamelize": "^6.0.0", - "eslint": "9.28.0", + "eslint": "9.29.0", "eslint-config-canonical": "~44.9.5", "gitdown": "^4.1.1", - "glob": "^11.0.2", + "glob": "^11.0.3", "globals": "^16.2.0", "husky": "^9.1.7", "jsdoc-type-pratt-parser": "^4.1.0", "json-schema": "^0.4.0", - "lint-staged": "^16.1.0", + "lint-staged": "^16.1.2", "lodash.defaultsdeep": "^4.6.1", - "mocha": "^11.5.0", + "mocha": "^11.7.0", "open-editor": "^5.1.0", "replace": "^1.2.2", "rimraf": "^6.0.1", "semantic-release": "^24.2.5", "typescript": "5.8.3", - "typescript-eslint": "^8.33.0" + "typescript-eslint": "^8.34.1" }, "engines": { "node": ">=20.11.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a42a5e175..3f9cb3dcf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: dependencies: '@es-joy/jsdoccomment': - specifier: ~0.50.2 - version: 0.50.2 + specifier: ~0.51.1 + version: 0.51.1 are-docs-informative: specifier: ^0.0.2 version: 0.0.2 @@ -24,8 +24,8 @@ importers: specifier: ^4.0.0 version: 4.0.0 espree: - specifier: ^10.3.0 - version: 10.3.0 + specifier: ^10.4.0 + version: 10.4.0 esquery: specifier: ^1.6.0 version: 1.6.0 @@ -46,8 +46,8 @@ importers: specifier: ^7.27.4 version: 7.27.4 '@babel/eslint-parser': - specifier: ^7.27.1 - version: 7.27.1(@babel/core@7.27.4)(eslint@9.28.0(jiti@2.4.2)) + specifier: ^7.27.5 + version: 7.27.5(@babel/core@7.27.4)(eslint@9.29.0(jiti@2.4.2)) '@babel/node': specifier: ^7.27.1 version: 7.27.1(@babel/core@7.27.4) @@ -94,8 +94,8 @@ importers: specifier: ^1.5.4 version: 1.5.4 '@types/estree': - specifier: ^1.0.7 - version: 1.0.7 + specifier: ^1.0.8 + version: 1.0.8 '@types/json-schema': specifier: ^7.0.15 version: 7.0.15 @@ -106,8 +106,8 @@ importers: specifier: ^10.0.10 version: 10.0.10 '@types/node': - specifier: ^22.15.29 - version: 22.15.29 + specifier: ^24.0.3 + version: 24.0.3 '@types/semver': specifier: ^7.7.0 version: 7.7.0 @@ -115,8 +115,8 @@ importers: specifier: ^3.0.5 version: 3.0.5 '@typescript-eslint/types': - specifier: ^8.33.0 - version: 8.33.0 + specifier: ^8.34.1 + version: 8.34.1 babel-plugin-add-module-exports: specifier: ^1.0.4 version: 1.0.4 @@ -124,8 +124,8 @@ importers: specifier: ^7.0.0 version: 7.0.0 babel-plugin-transform-import-meta: - specifier: ^2.3.2 - version: 2.3.2(@babel/core@7.27.4) + specifier: ^2.3.3 + version: 2.3.3(@babel/core@7.27.4) c8: specifier: ^10.1.3 version: 10.1.3 @@ -142,17 +142,17 @@ importers: specifier: ^6.0.0 version: 6.0.0 eslint: - specifier: 9.28.0 - version: 9.28.0(jiti@2.4.2) + specifier: 9.29.0 + version: 9.29.0(jiti@2.4.2) eslint-config-canonical: specifier: ~44.9.5 - version: 44.9.5(@types/eslint@9.6.1)(@types/node@22.15.29)(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + version: 44.9.5(@types/eslint@9.6.1)(@types/node@24.0.3)(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) gitdown: specifier: ^4.1.1 version: 4.1.1(re2@1.20.9) glob: - specifier: ^11.0.2 - version: 11.0.2 + specifier: ^11.0.3 + version: 11.0.3 globals: specifier: ^16.2.0 version: 16.2.0 @@ -166,14 +166,14 @@ importers: specifier: ^0.4.0 version: 0.4.0 lint-staged: - specifier: ^16.1.0 - version: 16.1.0 + specifier: ^16.1.2 + version: 16.1.2 lodash.defaultsdeep: specifier: ^4.6.1 version: 4.6.1 mocha: - specifier: ^11.5.0 - version: 11.5.0 + specifier: ^11.7.0 + version: 11.7.0 open-editor: specifier: ^5.1.0 version: 5.1.0 @@ -190,8 +190,8 @@ importers: specifier: 5.8.3 version: 5.8.3 typescript-eslint: - specifier: ^8.33.0 - version: 8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + specifier: ^8.34.1 + version: 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) packages: @@ -226,8 +226,8 @@ packages: resolution: {integrity: sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==} engines: {node: '>=6.9.0'} - '@babel/eslint-parser@7.27.1': - resolution: {integrity: sha512-q8rjOuadH0V6Zo4XLMkJ3RMQ9MSBqwaDByyYB0izsYdaIWGNLmEblbCOf1vyFHICcg16CD7Fsi51vcQnYxmt6Q==} + '@babel/eslint-parser@7.27.5': + resolution: {integrity: sha512-HLkYQfRICudzcOtjGwkPvGc5nF1b4ljLZh1IRDj50lRZ718NAKVgQpIAUX8bfg6u/yuSKY3L7E0YzIV+OxrB8Q==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} peerDependencies: '@babel/core': ^7.11.0 @@ -829,6 +829,10 @@ packages: resolution: {integrity: sha512-YAdE/IJSpwbOTiaURNCKECdAwqrJuFiZhylmesBcIRawtYKnBR2wxPhoIewMg+Yu+QuYvHfJNReWpoxGBKOChA==} engines: {node: '>=18'} + '@es-joy/jsdoccomment@0.51.1': + resolution: {integrity: sha512-fPn7AW/unCg3JRLt8Wg44HLRVkAEfkFIXiGRJbeOIrd7Hgl4iOFwVHpvVR8I5hJYpn5mNFWwIXR6A16ZRA/M9w==} + engines: {node: '>=18'} + '@eslint-community/eslint-utils@4.7.0': resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -843,8 +847,8 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.20.0': - resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==} + '@eslint/config-array@0.20.1': + resolution: {integrity: sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/config-helpers@0.2.2': @@ -867,8 +871,8 @@ packages: resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@eslint/js@9.28.0': - resolution: {integrity: sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg==} + '@eslint/js@9.29.0': + resolution: {integrity: sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': @@ -1047,6 +1051,14 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} + '@isaacs/balanced-match@4.0.1': + resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} + engines: {node: 20 || >=22} + + '@isaacs/brace-expansion@5.0.0': + resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} + engines: {node: 20 || >=22} + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -1260,8 +1272,8 @@ packages: '@types/esquery@1.5.4': resolution: {integrity: sha512-yYO4Q8H+KJHKW1rEeSzHxcZi90durqYgWVfnh5K6ZADVBjBv2e1NEveYX5yT2bffgN7RqzH3k9930m+i2yBoMA==} - '@types/estree@1.0.7': - resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} '@types/istanbul-lib-coverage@2.0.6': resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} @@ -1281,8 +1293,8 @@ packages: '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node@22.15.29': - resolution: {integrity: sha512-LNdjOkUDlU1RZb8e1kOIUpN1qQUlzGkEtbVNo53vbrwDg5om6oduhm4SiUaPW5ASTXhAiP0jInWG8Qx9fVlOeQ==} + '@types/node@24.0.3': + resolution: {integrity: sha512-R4I/kzCYAdRLzfiCabn9hxWfbuHS573x+r0dJMkkzThEa7pbrcDWK+9zu3e7aBOouf+rQAciqPFMnxwr0aWgKg==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -1304,11 +1316,11 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/eslint-plugin@8.33.0': - resolution: {integrity: sha512-CACyQuqSHt7ma3Ns601xykeBK/rDeZa3w6IS6UtMQbixO5DWy+8TilKkviGDH6jtWCo8FGRKEK5cLLkPvEammQ==} + '@typescript-eslint/eslint-plugin@8.34.1': + resolution: {integrity: sha512-STXcN6ebF6li4PxwNeFnqF8/2BNDvBupf2OPx2yWNzr6mKNGF7q49VM00Pz5FaomJyqvbXpY6PhO+T9w139YEQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.33.0 + '@typescript-eslint/parser': ^8.34.1 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' @@ -1329,8 +1341,8 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/parser@8.33.0': - resolution: {integrity: sha512-JaehZvf6m0yqYp34+RVnihBAChkqeH+tqqhS0GuX1qgPpwLvmTPheKEs6OeCK6hVJgXZHJ2vbjnC9j119auStQ==} + '@typescript-eslint/parser@8.34.1': + resolution: {integrity: sha512-4O3idHxhyzjClSMJ0a29AcoK0+YwnEqzI6oz3vlRf3xw0zbzt15MzXwItOlnr5nIth6zlY2RENLsOPvhyrKAQA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -1340,6 +1352,12 @@ packages: resolution: {integrity: sha512-d1hz0u9l6N+u/gcrk6s6gYdl7/+pp8yHheRTqP6X5hVDKALEaTn8WfGiit7G511yueBEL3OpOEpD+3/MBdoN+A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/project-service@8.34.1': + resolution: {integrity: sha512-nuHlOmFZfuRwLJKDGQOVc0xnQrAmuq1Mj/ISou5044y1ajGNp2BNliIqp7F2LPQ5sForz8lempMFCovfeS1XoA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/scope-manager@6.21.0': resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} engines: {node: ^16.0.0 || >=18.0.0} @@ -1352,12 +1370,22 @@ packages: resolution: {integrity: sha512-LMi/oqrzpqxyO72ltP+dBSP6V0xiUb4saY7WLtxSfiNEBI8m321LLVFU9/QDJxjDQG9/tjSqKz/E3380TEqSTw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/scope-manager@8.34.1': + resolution: {integrity: sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/tsconfig-utils@8.33.0': resolution: {integrity: sha512-sTkETlbqhEoiFmGr1gsdq5HyVbSOF0145SYDJ/EQmXHtKViCaGvnyLqWFFHtEXoS0J1yU8Wyou2UGmgW88fEug==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/tsconfig-utils@8.34.1': + resolution: {integrity: sha512-K4Sjdo4/xF9NEeA2khOb7Y5nY6NSXBnod87uniVYW9kHP+hNlDV8trUSFeynA2uxWam4gIWgWoygPrv9VMWrYg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/type-utils@8.32.1': resolution: {integrity: sha512-mv9YpQGA8iIsl5KyUPi+FGLm7+bA4fgXaeRcFKRDRwDMu4iwrSHeDPipwueNXhdIIZltwCJv+NkxftECbIZWfA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1372,6 +1400,13 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/type-utils@8.34.1': + resolution: {integrity: sha512-Tv7tCCr6e5m8hP4+xFugcrwTOucB8lshffJ6zf1mF1TbU67R+ntCc6DzLNKM+s/uzDyv8gLq7tufaAhIBYeV8g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/types@6.21.0': resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} engines: {node: ^16.0.0 || >=18.0.0} @@ -1384,8 +1419,8 @@ packages: resolution: {integrity: sha512-DKuXOKpM5IDT1FA2g9x9x1Ug81YuKrzf4mYX8FAVSNu5Wo/LELHWQyM1pQaDkI42bX15PWl0vNPt1uGiIFUOpg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.34.0': - resolution: {integrity: sha512-9V24k/paICYPniajHfJ4cuAWETnt7Ssy+R0Rbcqo5sSFr3QEZ/8TSoUi9XeXVBGXCaLtwTOKSLGcInCAvyZeMA==} + '@typescript-eslint/types@8.34.1': + resolution: {integrity: sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@6.21.0': @@ -1409,6 +1444,12 @@ packages: peerDependencies: typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/typescript-estree@8.34.1': + resolution: {integrity: sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/utils@8.32.1': resolution: {integrity: sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1423,6 +1464,13 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/utils@8.34.1': + resolution: {integrity: sha512-mqOwUdZ3KjtGk7xJJnLbHxTuWVn3GO2WZZuM+Slhkun4+qthLdXx32C8xIXbO1kfCECb3jIs3eoxK3eryk7aoQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/visitor-keys@6.21.0': resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} engines: {node: ^16.0.0 || >=18.0.0} @@ -1435,6 +1483,10 @@ packages: resolution: {integrity: sha512-7RW7CMYoskiz5OOGAWjJFxgb7c5UNjTG292gYhWeOAcFmYCtVCSqjqSBj5zMhxbXo2JOW95YYrUWJfU0zrpaGQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.34.1': + resolution: {integrity: sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} @@ -1673,6 +1725,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + agent-base@7.1.0: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} engines: {node: '>= 14'} @@ -1860,18 +1917,14 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-transform-import-meta@2.3.2: - resolution: {integrity: sha512-902o4GiQqI1GqAXfD5rEoz0PJamUfJ3VllpdWaNsFTwdaNjFSFHawvBO+cp5K2j+g2h3bZ4lnM1Xb6yFYGihtA==} + babel-plugin-transform-import-meta@2.3.3: + resolution: {integrity: sha512-bbh30qz1m6ZU1ybJoNOhA2zaDvmeXMnGNBMVMDOJ1Fni4+wMBoy/j7MTRVmqAUCIcy54/rEnr9VEBsfcgbpm3Q==} peerDependencies: '@babel/core': ^7.10.0 balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - balanced-match@3.0.1: - resolution: {integrity: sha512-vjtV3hiLqYDNRoiAv0zC4QaGAMPomEoq83PRmYIofPswwZurCeWR5LByXm7SyoL0Zh5+2z0+HC7jG8gSZJUh0w==} - engines: {node: '>= 16'} - bcrypt-pbkdf@1.0.2: resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} @@ -1901,10 +1954,6 @@ packages: brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - brace-expansion@4.0.1: - resolution: {integrity: sha512-YClrbvTCXGe70pU2JiEiPLYXO9gQkyxYeKpJIQHVS/gOs6EWMQP2RYBwjFLNT322Ji8TOC3IMPfsYCedNpzKfA==} - engines: {node: '>= 18'} - braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} @@ -2780,8 +2829,8 @@ packages: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-scope@8.3.0: - resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-utils@3.0.0: @@ -2806,14 +2855,18 @@ packages: resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint@8.56.0: resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true - eslint@9.28.0: - resolution: {integrity: sha512-ocgh41VhRlf9+fVpe7QKzwLj9c92fDiqOj8Y3Sd4/ZmVA4Btx4PlUYPq4pp9JDyupkf1upbEXecxL2mwNV7jPQ==} + eslint@9.29.0: + resolution: {integrity: sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -2822,8 +2875,8 @@ packages: jiti: optional: true - espree@10.3.0: - resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} espree@9.6.1: @@ -3007,6 +3060,10 @@ packages: resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} engines: {node: '>=14'} + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + forever-agent@0.6.1: resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} @@ -3158,8 +3215,8 @@ packages: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true - glob@11.0.2: - resolution: {integrity: sha512-YT7U7Vye+t5fZ/QMkBFrTJ7ZQxInIUjwyAjVj84CYXqgBdv30MFUPGnBR6sQaVq6Is15wYJUsnzTuWaGRBhBAQ==} + glob@11.0.3: + resolution: {integrity: sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==} engines: {node: 20 || >=22} hasBin: true @@ -3902,8 +3959,8 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - lint-staged@16.1.0: - resolution: {integrity: sha512-HkpQh69XHxgCjObjejBT3s2ILwNjFx8M3nw+tJ/ssBauDlIpkx2RpqWSi1fBgkXLSSXnbR3iEq1NkVtpvV+FLQ==} + lint-staged@16.1.2: + resolution: {integrity: sha512-sQKw2Si2g9KUZNY3XNvRuDq4UJqpHwF0/FQzZR2M7I5MvtpWvibikCjUVJzZdGE0ByurEl3KQNvsGetd1ty1/Q==} engines: {node: '>=20.17'} hasBin: true @@ -3990,10 +4047,6 @@ packages: resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} engines: {node: '>=0.10.0'} - lru-cache@10.2.0: - resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} - engines: {node: 14 || >=16.14} - lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -4091,12 +4144,8 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} - minimatch@10.0.1: - resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} - engines: {node: 20 || >=22} - - minimatch@10.0.2: - resolution: {integrity: sha512-+9TJCIYXgZ2Dm5LxVCFsa8jOm+evMwXHFI0JM1XROmkfkpz8/iLLDh+TwSmyIBrs6C6Xu9294/fq8cBA+P6AqA==} + minimatch@10.0.3: + resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} engines: {node: 20 || >=22} minimatch@3.0.5: @@ -4109,10 +4158,6 @@ packages: resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} engines: {node: '>=16 || 14 >=14.17'} - minimatch@9.0.4: - resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} - engines: {node: '>=16 || 14 >=14.17'} - minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} @@ -4161,8 +4206,8 @@ packages: engines: {node: '>=10'} hasBin: true - mocha@11.5.0: - resolution: {integrity: sha512-VKDjhy6LMTKm0WgNEdlY77YVsD49LZnPSXJAaPNL9NRYQADxvORsyG1DIQY6v53BKTnlNbEE2MbVCDbnxr4K3w==} + mocha@11.7.0: + resolution: {integrity: sha512-bXfLy/mI8n4QICg+pWj1G8VduX5vC0SHRwFpiR5/Fxc8S2G906pSfkyMmHVsdJNQJQNh3LE67koad9GzEvkV6g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true @@ -4569,9 +4614,6 @@ packages: performance-now@2.1.0: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} - picocolors@1.0.1: - resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -5331,9 +5373,6 @@ packages: resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} engines: {node: '>=6'} - tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -5399,8 +5438,8 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} - typescript-eslint@8.33.0: - resolution: {integrity: sha512-5YmNhF24ylCsvdNW2oJwMzTbaeO4bg90KeGtMjUw0AGtHksgEPLRTUil+coHwCfiu4QjVJFnjp94DmU6zV7DhQ==} + typescript-eslint@8.34.1: + resolution: {integrity: sha512-XjS+b6Vg9oT1BaIUfkW3M3LvqZE++rbzAMEHuccCfO/YkP43ha6w3jTEMilQxMF92nVOYCcdjv1ZUhAa1D/0ow==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -5423,8 +5462,8 @@ packages: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} - undici-types@6.21.0: - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici-types@7.8.0: + resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} unicode-canonical-property-names-ecmascript@2.0.0: resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} @@ -5588,8 +5627,8 @@ packages: wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - workerpool@6.5.1: - resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==} + workerpool@9.3.2: + resolution: {integrity: sha512-Xz4Nm9c+LiBHhDR5bDLnNzmj6+5F+cyEAWPMkbs2awq/dYazR/efelZzUAjB/y3kNHL+uzkHvxVVpaOfGCPV7A==} wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} @@ -5650,11 +5689,6 @@ packages: resolution: {integrity: sha512-E/+VitOorXSLiAqtTd7Yqax0/pAS3xaYMP+AUUJGOK1OZG3rhcj9fcJOM5HJ2VrP1FrStVCWr1muTfQCdj4tAA==} engines: {node: ^14.17.0 || >=16.0.0} - yaml@2.5.0: - resolution: {integrity: sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==} - engines: {node: '>= 14'} - hasBin: true - yaml@2.8.0: resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==} engines: {node: '>= 14.6'} @@ -5726,7 +5760,7 @@ snapshots: '@babel/code-frame@7.24.7': dependencies: '@babel/highlight': 7.24.7 - picocolors: 1.0.1 + picocolors: 1.1.1 '@babel/code-frame@7.27.1': dependencies: @@ -5756,7 +5790,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/eslint-parser@7.27.1(@babel/core@7.27.4)(eslint@8.56.0)': + '@babel/eslint-parser@7.27.5(@babel/core@7.27.4)(eslint@8.56.0)': dependencies: '@babel/core': 7.27.4 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 @@ -5764,11 +5798,11 @@ snapshots: eslint-visitor-keys: 2.1.0 semver: 6.3.1 - '@babel/eslint-parser@7.27.1(@babel/core@7.27.4)(eslint@9.28.0(jiti@2.4.2))': + '@babel/eslint-parser@7.27.5(@babel/core@7.27.4)(eslint@9.29.0(jiti@2.4.2))': dependencies: '@babel/core': 7.27.4 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.29.0(jiti@2.4.2) eslint-visitor-keys: 2.1.0 semver: 6.3.1 @@ -5931,7 +5965,7 @@ snapshots: '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 - picocolors: 1.0.1 + picocolors: 1.1.1 '@babel/node@7.27.1(@babel/core@7.27.4)': dependencies: @@ -6471,17 +6505,17 @@ snapshots: '@emnapi/core@1.4.3': dependencies: '@emnapi/wasi-threads': 1.0.2 - tslib: 2.6.2 + tslib: 2.8.1 optional: true '@emnapi/runtime@1.4.3': dependencies: - tslib: 2.6.2 + tslib: 2.8.1 optional: true '@emnapi/wasi-threads@1.0.2': dependencies: - tslib: 2.6.2 + tslib: 2.8.1 optional: true '@envelop/core@5.2.3': @@ -6515,7 +6549,7 @@ snapshots: '@es-joy/jsdoc-eslint-parser@0.21.1': dependencies: '@babel/core': 7.27.4 - '@babel/eslint-parser': 7.27.1(@babel/core@7.27.4)(eslint@8.56.0) + '@babel/eslint-parser': 7.27.5(@babel/core@7.27.4)(eslint@8.56.0) '@es-joy/jsdoccomment': 0.41.0 '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.8.3) eslint: 8.56.0 @@ -6532,8 +6566,16 @@ snapshots: '@es-joy/jsdoccomment@0.50.2': dependencies: - '@types/estree': 1.0.7 - '@typescript-eslint/types': 8.33.0 + '@types/estree': 1.0.8 + '@typescript-eslint/types': 8.34.1 + comment-parser: 1.4.1 + esquery: 1.6.0 + jsdoc-type-pratt-parser: 4.1.0 + + '@es-joy/jsdoccomment@0.51.1': + dependencies: + '@types/estree': 1.0.8 + '@typescript-eslint/types': 8.34.1 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 4.1.0 @@ -6543,16 +6585,16 @@ snapshots: eslint: 8.56.0 eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.7.0(eslint@9.28.0(jiti@2.4.2))': + '@eslint-community/eslint-utils@4.7.0(eslint@9.29.0(jiti@2.4.2))': dependencies: - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.29.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.11.0': {} '@eslint-community/regexpp@4.12.1': {} - '@eslint/config-array@0.20.0': + '@eslint/config-array@0.20.1': dependencies: '@eslint/object-schema': 2.1.6 debug: 4.4.1(supports-color@8.1.1) @@ -6572,7 +6614,7 @@ snapshots: debug: 4.4.1(supports-color@8.1.1) espree: 9.6.1 globals: 13.24.0 - ignore: 5.3.1 + ignore: 5.3.2 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -6584,9 +6626,9 @@ snapshots: dependencies: ajv: 6.12.6 debug: 4.4.1(supports-color@8.1.1) - espree: 10.3.0 + espree: 10.4.0 globals: 14.0.0 - ignore: 5.3.1 + ignore: 5.3.2 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -6596,7 +6638,7 @@ snapshots: '@eslint/js@8.56.0': {} - '@eslint/js@9.28.0': {} + '@eslint/js@9.29.0': {} '@eslint/object-schema@2.1.6': {} @@ -6607,16 +6649,16 @@ snapshots: '@fastify/busboy@3.1.1': {} - '@graphql-eslint/eslint-plugin@4.4.0(@types/node@22.15.29)(eslint@9.28.0(jiti@2.4.2))(graphql@16.11.0)(typescript@5.8.3)': + '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.0.3)(eslint@9.29.0(jiti@2.4.2))(graphql@16.11.0)(typescript@5.8.3)': dependencies: '@graphql-tools/code-file-loader': 8.1.20(graphql@16.11.0) '@graphql-tools/graphql-tag-pluck': 8.3.19(graphql@16.11.0) '@graphql-tools/utils': 10.8.6(graphql@16.11.0) debug: 4.4.1(supports-color@8.1.1) - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.29.0(jiti@2.4.2) fast-glob: 3.3.2 graphql: 16.11.0 - graphql-config: 5.1.5(@types/node@22.15.29)(graphql@16.11.0)(typescript@5.8.3) + graphql-config: 5.1.5(@types/node@24.0.3)(graphql@16.11.0)(typescript@5.8.3) graphql-depth-limit: 1.1.0(graphql@16.11.0) lodash.lowercase: 4.3.0 transitivePeerDependencies: @@ -6646,7 +6688,7 @@ snapshots: '@graphql-tools/utils': 10.8.6(graphql@16.11.0) globby: 11.1.0 graphql: 16.11.0 - tslib: 2.6.2 + tslib: 2.8.1 unixify: 1.0.0 transitivePeerDependencies: - supports-color @@ -6687,7 +6729,7 @@ snapshots: - uWebSockets.js - utf-8-validate - '@graphql-tools/executor-http@1.3.3(@types/node@22.15.29)(graphql@16.11.0)': + '@graphql-tools/executor-http@1.3.3(@types/node@24.0.3)(graphql@16.11.0)': dependencies: '@graphql-hive/signal': 1.0.0 '@graphql-tools/executor-common': 0.0.4(graphql@16.11.0) @@ -6697,7 +6739,7 @@ snapshots: '@whatwg-node/fetch': 0.10.8 '@whatwg-node/promise-helpers': 1.3.2 graphql: 16.11.0 - meros: 1.3.0(@types/node@22.15.29) + meros: 1.3.0(@types/node@24.0.3) tslib: 2.8.1 transitivePeerDependencies: - '@types/node' @@ -6708,7 +6750,7 @@ snapshots: '@types/ws': 8.5.10 graphql: 16.11.0 isomorphic-ws: 5.0.0(ws@8.18.2) - tslib: 2.6.2 + tslib: 2.8.1 ws: 8.18.2 transitivePeerDependencies: - bufferutil @@ -6730,7 +6772,7 @@ snapshots: '@graphql-tools/utils': 10.8.6(graphql@16.11.0) globby: 11.1.0 graphql: 16.11.0 - tslib: 2.6.2 + tslib: 2.8.1 unixify: 1.0.0 '@graphql-tools/graphql-tag-pluck@8.3.19(graphql@16.11.0)': @@ -6742,7 +6784,7 @@ snapshots: '@babel/types': 7.27.3 '@graphql-tools/utils': 10.8.6(graphql@16.11.0) graphql: 16.11.0 - tslib: 2.6.2 + tslib: 2.8.1 transitivePeerDependencies: - supports-color @@ -6751,14 +6793,14 @@ snapshots: '@graphql-tools/utils': 10.8.6(graphql@16.11.0) graphql: 16.11.0 resolve-from: 5.0.0 - tslib: 2.6.2 + tslib: 2.8.1 '@graphql-tools/json-file-loader@8.0.18(graphql@16.11.0)': dependencies: '@graphql-tools/utils': 10.8.6(graphql@16.11.0) globby: 11.1.0 graphql: 16.11.0 - tslib: 2.6.2 + tslib: 2.8.1 unixify: 1.0.0 '@graphql-tools/load@8.1.0(graphql@16.11.0)': @@ -6767,25 +6809,25 @@ snapshots: '@graphql-tools/utils': 10.8.6(graphql@16.11.0) graphql: 16.11.0 p-limit: 3.1.0 - tslib: 2.6.2 + tslib: 2.8.1 '@graphql-tools/merge@9.0.24(graphql@16.11.0)': dependencies: '@graphql-tools/utils': 10.8.6(graphql@16.11.0) graphql: 16.11.0 - tslib: 2.6.2 + tslib: 2.8.1 '@graphql-tools/schema@10.0.23(graphql@16.11.0)': dependencies: '@graphql-tools/merge': 9.0.24(graphql@16.11.0) '@graphql-tools/utils': 10.8.6(graphql@16.11.0) graphql: 16.11.0 - tslib: 2.6.2 + tslib: 2.8.1 - '@graphql-tools/url-loader@8.0.31(@types/node@22.15.29)(graphql@16.11.0)': + '@graphql-tools/url-loader@8.0.31(@types/node@24.0.3)(graphql@16.11.0)': dependencies: '@graphql-tools/executor-graphql-ws': 2.0.5(graphql@16.11.0) - '@graphql-tools/executor-http': 1.3.3(@types/node@22.15.29)(graphql@16.11.0) + '@graphql-tools/executor-http': 1.3.3(@types/node@24.0.3)(graphql@16.11.0) '@graphql-tools/executor-legacy-ws': 1.1.17(graphql@16.11.0) '@graphql-tools/utils': 10.8.6(graphql@16.11.0) '@graphql-tools/wrap': 10.0.36(graphql@16.11.0) @@ -6795,7 +6837,7 @@ snapshots: graphql: 16.11.0 isomorphic-ws: 5.0.0(ws@8.18.2) sync-fetch: 0.6.0-2 - tslib: 2.6.2 + tslib: 2.8.1 ws: 8.18.2 transitivePeerDependencies: - '@fastify/websocket' @@ -6812,7 +6854,7 @@ snapshots: cross-inspect: 1.0.1 dset: 3.1.4 graphql: 16.11.0 - tslib: 2.6.2 + tslib: 2.8.1 '@graphql-tools/wrap@10.0.36(graphql@16.11.0)': dependencies: @@ -6860,6 +6902,12 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} + '@isaacs/balanced-match@4.0.1': {} + + '@isaacs/brace-expansion@5.0.0': + dependencies: + '@isaacs/balanced-match': 4.0.1 + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -7110,12 +7158,12 @@ snapshots: '@sindresorhus/merge-streams@4.0.0': {} - '@stylistic/eslint-plugin@4.4.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': + '@stylistic/eslint-plugin@4.4.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/utils': 8.32.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.28.0(jiti@2.4.2) + '@typescript-eslint/utils': 8.33.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + eslint: 9.29.0(jiti@2.4.2) eslint-visitor-keys: 4.2.0 - espree: 10.3.0 + espree: 10.4.0 estraverse: 5.3.0 picomatch: 4.0.2 transitivePeerDependencies: @@ -7124,7 +7172,7 @@ snapshots: '@tybys/wasm-util@0.9.0': dependencies: - tslib: 2.6.2 + tslib: 2.8.1 optional: true '@types/chai@5.2.2': @@ -7139,7 +7187,7 @@ snapshots: '@types/eslint@9.6.1': dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 '@types/json-schema': 7.0.15 '@types/espree@10.1.0': @@ -7149,9 +7197,9 @@ snapshots: '@types/esquery@1.5.4': dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 - '@types/estree@1.0.7': {} + '@types/estree@1.0.8': {} '@types/istanbul-lib-coverage@2.0.6': {} @@ -7167,9 +7215,9 @@ snapshots: '@types/ms@0.7.34': {} - '@types/node@22.15.29': + '@types/node@24.0.3': dependencies: - undici-types: 6.21.0 + undici-types: 7.8.0 '@types/normalize-package-data@2.4.4': {} @@ -7179,17 +7227,17 @@ snapshots: '@types/ws@8.5.10': dependencies: - '@types/node': 22.15.29 + '@types/node': 24.0.3 - '@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) '@typescript-eslint/scope-manager': 8.32.1 - '@typescript-eslint/type-utils': 8.32.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/type-utils': 8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) '@typescript-eslint/visitor-keys': 8.32.1 - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.29.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 7.0.4 natural-compare: 1.4.0 @@ -7198,15 +7246,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.33.0(@typescript-eslint/parser@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.33.0 - '@typescript-eslint/type-utils': 8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.33.0 - eslint: 9.28.0(jiti@2.4.2) + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.34.1 + '@typescript-eslint/type-utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.34.1 + eslint: 9.29.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 7.0.4 natural-compare: 1.4.0 @@ -7228,26 +7276,26 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.32.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@typescript-eslint/scope-manager': 8.32.1 '@typescript-eslint/types': 8.32.1 '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) '@typescript-eslint/visitor-keys': 8.32.1 debug: 4.4.1(supports-color@8.1.1) - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.29.0(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/scope-manager': 8.33.0 - '@typescript-eslint/types': 8.33.0 - '@typescript-eslint/typescript-estree': 8.33.0(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.33.0 + '@typescript-eslint/scope-manager': 8.34.1 + '@typescript-eslint/types': 8.34.1 + '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.34.1 debug: 4.4.1(supports-color@8.1.1) - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.29.0(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -7255,12 +7303,21 @@ snapshots: '@typescript-eslint/project-service@8.33.0(typescript@5.8.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.33.0(typescript@5.8.3) - '@typescript-eslint/types': 8.33.0 + '@typescript-eslint/types': 8.34.1 debug: 4.4.1(supports-color@8.1.1) transitivePeerDependencies: - supports-color - typescript + '@typescript-eslint/project-service@8.34.1(typescript@5.8.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.34.1(typescript@5.8.3) + '@typescript-eslint/types': 8.34.1 + debug: 4.4.1(supports-color@8.1.1) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/scope-manager@6.21.0': dependencies: '@typescript-eslint/types': 6.21.0 @@ -7276,27 +7333,47 @@ snapshots: '@typescript-eslint/types': 8.33.0 '@typescript-eslint/visitor-keys': 8.33.0 + '@typescript-eslint/scope-manager@8.34.1': + dependencies: + '@typescript-eslint/types': 8.34.1 + '@typescript-eslint/visitor-keys': 8.34.1 + '@typescript-eslint/tsconfig-utils@8.33.0(typescript@5.8.3)': dependencies: typescript: 5.8.3 - '@typescript-eslint/type-utils@8.32.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/tsconfig-utils@8.34.1(typescript@5.8.3)': + dependencies: + typescript: 5.8.3 + + '@typescript-eslint/type-utils@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) debug: 4.4.1(supports-color@8.1.1) - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.29.0(jiti@2.4.2) ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.33.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@typescript-eslint/typescript-estree': 8.33.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.33.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) debug: 4.4.1(supports-color@8.1.1) - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.29.0(jiti@2.4.2) + ts-api-utils: 2.1.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/type-utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3) + '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + debug: 4.4.1(supports-color@8.1.1) + eslint: 9.29.0(jiti@2.4.2) ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: @@ -7308,7 +7385,7 @@ snapshots: '@typescript-eslint/types@8.33.0': {} - '@typescript-eslint/types@8.34.0': {} + '@typescript-eslint/types@8.34.1': {} '@typescript-eslint/typescript-estree@6.21.0(typescript@5.8.3)': dependencies: @@ -7355,24 +7432,51 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.32.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.34.1(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@2.4.2)) + '@typescript-eslint/project-service': 8.34.1(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.34.1(typescript@5.8.3) + '@typescript-eslint/types': 8.34.1 + '@typescript-eslint/visitor-keys': 8.34.1 + debug: 4.4.1(supports-color@8.1.1) + fast-glob: 3.3.2 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.2 + ts-api-utils: 2.1.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) '@typescript-eslint/scope-manager': 8.32.1 '@typescript-eslint/types': 8.32.1 '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.29.0(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/utils@8.33.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) '@typescript-eslint/scope-manager': 8.33.0 '@typescript-eslint/types': 8.33.0 '@typescript-eslint/typescript-estree': 8.33.0(typescript@5.8.3) - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.29.0(jiti@2.4.2) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.34.1 + '@typescript-eslint/types': 8.34.1 + '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3) + eslint: 9.29.0(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -7392,6 +7496,11 @@ snapshots: '@typescript-eslint/types': 8.33.0 eslint-visitor-keys: 4.2.0 + '@typescript-eslint/visitor-keys@8.34.1': + dependencies: + '@typescript-eslint/types': 8.34.1 + eslint-visitor-keys: 4.2.1 + '@ungap/structured-clone@1.2.0': {} '@unrs/resolver-binding-android-arm-eabi@1.9.0': @@ -7506,10 +7615,10 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.9.0': optional: true - '@vitest/eslint-plugin@1.2.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': + '@vitest/eslint-plugin@1.2.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/utils': 8.32.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.28.0(jiti@2.4.2) + '@typescript-eslint/utils': 8.33.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + eslint: 9.29.0(jiti@2.4.2) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: @@ -7543,20 +7652,22 @@ snapshots: dependencies: acorn: 2.7.0 - acorn-jsx@5.3.2(acorn@8.12.0): - dependencies: - acorn: 8.12.0 - acorn-jsx@5.3.2(acorn@8.14.1): dependencies: acorn: 8.14.1 + acorn-jsx@5.3.2(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + acorn@2.7.0: {} acorn@8.12.0: {} acorn@8.14.1: {} + acorn@8.15.0: {} + agent-base@7.1.0: dependencies: debug: 4.4.1(supports-color@8.1.1) @@ -7730,7 +7841,7 @@ snapshots: ast-types@0.16.1: dependencies: - tslib: 2.6.2 + tslib: 2.8.1 asynckit@0.4.0: {} @@ -7782,7 +7893,7 @@ snapshots: transitivePeerDependencies: - supports-color - babel-plugin-transform-import-meta@2.3.2(@babel/core@7.27.4): + babel-plugin-transform-import-meta@2.3.3(@babel/core@7.27.4): dependencies: '@babel/core': 7.27.4 '@babel/template': 7.27.2 @@ -7790,8 +7901,6 @@ snapshots: balanced-match@1.0.2: {} - balanced-match@3.0.1: {} - bcrypt-pbkdf@1.0.2: dependencies: tweetnacl: 0.14.5 @@ -7818,10 +7927,6 @@ snapshots: dependencies: balanced-match: 1.0.2 - brace-expansion@4.0.1: - dependencies: - balanced-match: 3.0.1 - braces@3.0.3: dependencies: fill-range: 7.1.1 @@ -8125,7 +8230,7 @@ snapshots: cross-inspect@1.0.1: dependencies: - tslib: 2.6.2 + tslib: 2.8.1 cross-spawn@7.0.6: dependencies: @@ -8541,55 +8646,55 @@ snapshots: lodash.get: 4.4.2 lodash.zip: 4.2.0 - eslint-compat-utils@0.5.1(eslint@9.28.0(jiti@2.4.2)): + eslint-compat-utils@0.5.1(eslint@9.29.0(jiti@2.4.2)): dependencies: - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.29.0(jiti@2.4.2) semver: 7.7.2 - eslint-compat-utils@0.6.5(eslint@9.28.0(jiti@2.4.2)): + eslint-compat-utils@0.6.5(eslint@9.29.0(jiti@2.4.2)): dependencies: - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.29.0(jiti@2.4.2) semver: 7.7.2 - eslint-config-canonical@44.9.5(@types/eslint@9.6.1)(@types/node@22.15.29)(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3): + eslint-config-canonical@44.9.5(@types/eslint@9.6.1)(@types/node@24.0.3)(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): dependencies: - '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@22.15.29)(eslint@9.28.0(jiti@2.4.2))(graphql@16.11.0)(typescript@5.8.3) + '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.0.3)(eslint@9.29.0(jiti@2.4.2))(graphql@16.11.0)(typescript@5.8.3) '@next/eslint-plugin-next': 15.3.3 - '@stylistic/eslint-plugin': 4.4.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/eslint-plugin': 8.32.1(@typescript-eslint/parser@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/parser': 8.32.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) - '@vitest/eslint-plugin': 1.2.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.28.0(jiti@2.4.2) - eslint-config-prettier: 10.1.5(eslint@9.28.0(jiti@2.4.2)) - eslint-import-resolver-typescript: 4.4.2(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2)) - eslint-plugin-ava: 15.0.1(eslint@9.28.0(jiti@2.4.2)) - eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.32.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) - eslint-plugin-eslint-comments: 3.2.0(eslint@9.28.0(jiti@2.4.2)) - eslint-plugin-fp: 2.3.0(eslint@9.28.0(jiti@2.4.2)) - eslint-plugin-functional: 9.0.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) - eslint-plugin-import: eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)) - eslint-plugin-jest: 28.12.0(@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) - eslint-plugin-jsdoc: 50.6.17(eslint@9.28.0(jiti@2.4.2)) - eslint-plugin-jsonc: 2.20.1(eslint@9.28.0(jiti@2.4.2)) - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.28.0(jiti@2.4.2)) - eslint-plugin-lodash: 8.0.0(eslint@9.28.0(jiti@2.4.2)) - eslint-plugin-mocha: 10.5.0(eslint@9.28.0(jiti@2.4.2)) + '@stylistic/eslint-plugin': 4.4.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/eslint-plugin': 8.32.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + '@vitest/eslint-plugin': 1.2.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + eslint: 9.29.0(jiti@2.4.2) + eslint-config-prettier: 10.1.5(eslint@9.29.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 4.4.2(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-ava: 15.0.1(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + eslint-plugin-eslint-comments: 3.2.0(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-fp: 2.3.0(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-functional: 9.0.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + eslint-plugin-import: eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-jest: 28.12.0(@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + eslint-plugin-jsdoc: 50.6.17(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-jsonc: 2.20.1(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-lodash: 8.0.0(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-mocha: 10.5.0(eslint@9.29.0(jiti@2.4.2)) eslint-plugin-modules-newline: 0.0.6 - eslint-plugin-n: 17.18.0(eslint@9.28.0(jiti@2.4.2)) - eslint-plugin-perfectionist: 4.13.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) - eslint-plugin-prettier: 5.4.1(@types/eslint@9.6.1)(eslint-config-prettier@10.1.5(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2))(prettier@3.5.3) - eslint-plugin-promise: 7.2.1(eslint@9.28.0(jiti@2.4.2)) - eslint-plugin-react: 7.37.5(eslint@9.28.0(jiti@2.4.2)) - eslint-plugin-react-hooks: 5.2.0(eslint@9.28.0(jiti@2.4.2)) - eslint-plugin-regexp: 2.7.0(eslint@9.28.0(jiti@2.4.2)) - eslint-plugin-unicorn: 57.0.0(eslint@9.28.0(jiti@2.4.2)) - eslint-plugin-yml: 1.18.0(eslint@9.28.0(jiti@2.4.2)) - eslint-plugin-zod: 1.4.0(eslint@9.28.0(jiti@2.4.2)) + eslint-plugin-n: 17.18.0(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-perfectionist: 4.13.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + eslint-plugin-prettier: 5.4.1(@types/eslint@9.6.1)(eslint-config-prettier@10.1.5(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(prettier@3.5.3) + eslint-plugin-promise: 7.2.1(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-react: 7.37.5(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-react-hooks: 5.2.0(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-regexp: 2.7.0(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-unicorn: 57.0.0(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-yml: 1.18.0(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-zod: 1.4.0(eslint@9.29.0(jiti@2.4.2)) globals: 16.2.0 graphql: 16.11.0 prettier: 3.5.3 ramda: 0.30.1 - typescript-eslint: 8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + typescript-eslint: 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) yaml-eslint-parser: 1.3.0 transitivePeerDependencies: - '@apollo/subgraph' @@ -8612,9 +8717,9 @@ snapshots: - utf-8-validate - vitest - eslint-config-prettier@10.1.5(eslint@9.28.0(jiti@2.4.2)): + eslint-config-prettier@10.1.5(eslint@9.29.0(jiti@2.4.2)): dependencies: - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.29.0(jiti@2.4.2) eslint-import-context@0.1.6(unrs-resolver@1.7.8): dependencies: @@ -8639,26 +8744,26 @@ snapshots: - supports-color optional: true - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.1(supports-color@8.1.1) - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.29.0(jiti@2.4.2) get-tsconfig: 4.10.1 is-bun-module: 2.0.0 stable-hash: 0.0.5 tinyglobby: 0.2.14 unrs-resolver: 1.9.0 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)) - eslint-plugin-import-x: 4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)) + eslint-plugin-import: eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-import-x: 4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@4.4.2(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2)): + eslint-import-resolver-typescript@4.4.2(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)): dependencies: debug: 4.4.1(supports-color@8.1.1) - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.29.0(jiti@2.4.2) eslint-import-context: 0.1.6(unrs-resolver@1.7.8) get-tsconfig: 4.10.1 is-bun-module: 2.0.0 @@ -8666,33 +8771,33 @@ snapshots: tinyglobby: 0.2.14 unrs-resolver: 1.7.8 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)) - eslint-plugin-import-x: 4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)) + eslint-plugin-import: eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-import-x: 4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color - eslint-json-compat-utils@0.2.1(eslint@9.28.0(jiti@2.4.2))(jsonc-eslint-parser@2.4.0): + eslint-json-compat-utils@0.2.1(eslint@9.29.0(jiti@2.4.2))(jsonc-eslint-parser@2.4.0): dependencies: - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.29.0(jiti@2.4.2) esquery: 1.6.0 jsonc-eslint-parser: 2.4.0 - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.32.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.28.0(jiti@2.4.2) + '@typescript-eslint/parser': 8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + eslint: 9.29.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color - eslint-plugin-ava@15.0.1(eslint@9.28.0(jiti@2.4.2)): + eslint-plugin-ava@15.0.1(eslint@9.29.0(jiti@2.4.2)): dependencies: enhance-visitors: 1.0.0 - eslint: 9.28.0(jiti@2.4.2) - eslint-utils: 3.0.0(eslint@9.28.0(jiti@2.4.2)) + eslint: 9.29.0(jiti@2.4.2) + eslint-utils: 3.0.0(eslint@9.29.0(jiti@2.4.2)) espree: 9.6.1 espurify: 2.1.1 import-modules: 2.1.0 @@ -8700,14 +8805,14 @@ snapshots: pkg-dir: 5.0.0 resolve-from: 5.0.0 - eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.32.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3): + eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): dependencies: - '@typescript-eslint/utils': 8.32.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.33.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) array-includes: 3.1.8 debug: 4.4.1(supports-color@8.1.1) doctrine: 3.0.0 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2)) - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) is-get-set-prop: 1.0.0 is-js-type: 2.0.0 is-obj-prop: 1.0.0 @@ -8727,34 +8832,34 @@ snapshots: - supports-color - typescript - eslint-plugin-es-x@7.8.0(eslint@9.28.0(jiti@2.4.2)): + eslint-plugin-es-x@7.8.0(eslint@9.29.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@2.4.2)) - '@eslint-community/regexpp': 4.11.0 - eslint: 9.28.0(jiti@2.4.2) - eslint-compat-utils: 0.5.1(eslint@9.28.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) + '@eslint-community/regexpp': 4.12.1 + eslint: 9.29.0(jiti@2.4.2) + eslint-compat-utils: 0.5.1(eslint@9.29.0(jiti@2.4.2)) - eslint-plugin-eslint-comments@3.2.0(eslint@9.28.0(jiti@2.4.2)): + eslint-plugin-eslint-comments@3.2.0(eslint@9.29.0(jiti@2.4.2)): dependencies: escape-string-regexp: 1.0.5 - eslint: 9.28.0(jiti@2.4.2) - ignore: 5.3.1 + eslint: 9.29.0(jiti@2.4.2) + ignore: 5.3.2 - eslint-plugin-fp@2.3.0(eslint@9.28.0(jiti@2.4.2)): + eslint-plugin-fp@2.3.0(eslint@9.29.0(jiti@2.4.2)): dependencies: create-eslint-index: 1.0.0 - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.29.0(jiti@2.4.2) eslint-ast-utils: 1.1.0 lodash: 4.17.21 req-all: 0.1.0 - eslint-plugin-functional@9.0.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3): + eslint-plugin-functional@9.0.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): dependencies: - '@typescript-eslint/utils': 8.32.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.33.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) deepmerge-ts: 7.1.5 escape-string-regexp: 5.0.0 - eslint: 9.28.0(jiti@2.4.2) - is-immutable-type: 5.0.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + eslint: 9.29.0(jiti@2.4.2) + is-immutable-type: 5.0.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) ts-api-utils: 2.1.0(typescript@5.8.3) ts-declaration-location: 1.0.7(typescript@5.8.3) optionalDependencies: @@ -8762,43 +8867,43 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.28.0(jiti@2.4.2)): + eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)): dependencies: - '@typescript-eslint/types': 8.34.0 + '@typescript-eslint/types': 8.34.1 comment-parser: 1.4.1 debug: 4.4.1(supports-color@8.1.1) - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.29.0(jiti@2.4.2) eslint-import-context: 0.1.8(unrs-resolver@1.9.0) is-glob: 4.0.3 - minimatch: 10.0.2 + minimatch: 10.0.3 semver: 7.7.2 stable-hash-x: 0.1.1 unrs-resolver: 1.9.0 optionalDependencies: - '@typescript-eslint/utils': 8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-jest@28.12.0(@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3): + eslint-plugin-jest@28.12.0(@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): dependencies: - '@typescript-eslint/utils': 8.32.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.28.0(jiti@2.4.2) + '@typescript-eslint/utils': 8.33.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + eslint: 9.29.0(jiti@2.4.2) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.32.1(@typescript-eslint/parser@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/eslint-plugin': 8.32.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-jsdoc@50.6.17(eslint@9.28.0(jiti@2.4.2)): + eslint-plugin-jsdoc@50.6.17(eslint@9.29.0(jiti@2.4.2)): dependencies: '@es-joy/jsdoccomment': 0.50.2 are-docs-informative: 0.0.2 comment-parser: 1.4.1 debug: 4.4.1(supports-color@8.1.1) escape-string-regexp: 4.0.0 - eslint: 9.28.0(jiti@2.4.2) - espree: 10.3.0 + eslint: 9.29.0(jiti@2.4.2) + espree: 10.4.0 esquery: 1.6.0 parse-imports-exports: 0.2.4 semver: 7.7.2 @@ -8806,13 +8911,13 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-jsonc@2.20.1(eslint@9.28.0(jiti@2.4.2)): + eslint-plugin-jsonc@2.20.1(eslint@9.29.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@2.4.2)) - eslint: 9.28.0(jiti@2.4.2) - eslint-compat-utils: 0.6.5(eslint@9.28.0(jiti@2.4.2)) - eslint-json-compat-utils: 0.2.1(eslint@9.28.0(jiti@2.4.2))(jsonc-eslint-parser@2.4.0) - espree: 10.3.0 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) + eslint: 9.29.0(jiti@2.4.2) + eslint-compat-utils: 0.6.5(eslint@9.29.0(jiti@2.4.2)) + eslint-json-compat-utils: 0.2.1(eslint@9.29.0(jiti@2.4.2))(jsonc-eslint-parser@2.4.0) + espree: 10.4.0 graphemer: 1.4.0 jsonc-eslint-parser: 2.4.0 natural-compare: 1.4.0 @@ -8820,7 +8925,7 @@ snapshots: transitivePeerDependencies: - '@eslint/json' - eslint-plugin-jsx-a11y@6.10.2(eslint@9.28.0(jiti@2.4.2)): + eslint-plugin-jsx-a11y@6.10.2(eslint@9.29.0(jiti@2.4.2)): dependencies: aria-query: 5.3.2 array-includes: 3.1.8 @@ -8830,7 +8935,7 @@ snapshots: axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.29.0(jiti@2.4.2) hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 @@ -8839,15 +8944,15 @@ snapshots: safe-regex-test: 1.0.3 string.prototype.includes: 2.0.1 - eslint-plugin-lodash@8.0.0(eslint@9.28.0(jiti@2.4.2)): + eslint-plugin-lodash@8.0.0(eslint@9.29.0(jiti@2.4.2)): dependencies: - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.29.0(jiti@2.4.2) lodash: 4.17.21 - eslint-plugin-mocha@10.5.0(eslint@9.28.0(jiti@2.4.2)): + eslint-plugin-mocha@10.5.0(eslint@9.29.0(jiti@2.4.2)): dependencies: - eslint: 9.28.0(jiti@2.4.2) - eslint-utils: 3.0.0(eslint@9.28.0(jiti@2.4.2)) + eslint: 9.29.0(jiti@2.4.2) + eslint-utils: 3.0.0(eslint@9.29.0(jiti@2.4.2)) globals: 13.24.0 rambda: 7.5.0 @@ -8855,48 +8960,48 @@ snapshots: dependencies: requireindex: 1.1.0 - eslint-plugin-n@17.18.0(eslint@9.28.0(jiti@2.4.2)): + eslint-plugin-n@17.18.0(eslint@9.29.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) enhanced-resolve: 5.18.1 - eslint: 9.28.0(jiti@2.4.2) - eslint-plugin-es-x: 7.8.0(eslint@9.28.0(jiti@2.4.2)) + eslint: 9.29.0(jiti@2.4.2) + eslint-plugin-es-x: 7.8.0(eslint@9.29.0(jiti@2.4.2)) get-tsconfig: 4.10.1 globals: 15.15.0 ignore: 5.3.2 minimatch: 9.0.5 semver: 7.7.2 - eslint-plugin-perfectionist@4.13.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3): + eslint-plugin-perfectionist@4.13.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): dependencies: - '@typescript-eslint/types': 8.33.0 - '@typescript-eslint/utils': 8.32.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.28.0(jiti@2.4.2) + '@typescript-eslint/types': 8.34.1 + '@typescript-eslint/utils': 8.33.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + eslint: 9.29.0(jiti@2.4.2) natural-orderby: 5.0.0 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-prettier@5.4.1(@types/eslint@9.6.1)(eslint-config-prettier@10.1.5(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2))(prettier@3.5.3): + eslint-plugin-prettier@5.4.1(@types/eslint@9.6.1)(eslint-config-prettier@10.1.5(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(prettier@3.5.3): dependencies: - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.29.0(jiti@2.4.2) prettier: 3.5.3 prettier-linter-helpers: 1.0.0 synckit: 0.11.8 optionalDependencies: '@types/eslint': 9.6.1 - eslint-config-prettier: 10.1.5(eslint@9.28.0(jiti@2.4.2)) + eslint-config-prettier: 10.1.5(eslint@9.29.0(jiti@2.4.2)) - eslint-plugin-promise@7.2.1(eslint@9.28.0(jiti@2.4.2)): + eslint-plugin-promise@7.2.1(eslint@9.29.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@2.4.2)) - eslint: 9.28.0(jiti@2.4.2) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) + eslint: 9.29.0(jiti@2.4.2) - eslint-plugin-react-hooks@5.2.0(eslint@9.28.0(jiti@2.4.2)): + eslint-plugin-react-hooks@5.2.0(eslint@9.29.0(jiti@2.4.2)): dependencies: - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.29.0(jiti@2.4.2) - eslint-plugin-react@7.37.5(eslint@9.28.0(jiti@2.4.2)): + eslint-plugin-react@7.37.5(eslint@9.29.0(jiti@2.4.2)): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 @@ -8904,7 +9009,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.1 - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.29.0(jiti@2.4.2) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -8918,25 +9023,25 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-regexp@2.7.0(eslint@9.28.0(jiti@2.4.2)): + eslint-plugin-regexp@2.7.0(eslint@9.29.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@2.4.2)) - '@eslint-community/regexpp': 4.11.0 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) + '@eslint-community/regexpp': 4.12.1 comment-parser: 1.4.1 - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.29.0(jiti@2.4.2) jsdoc-type-pratt-parser: 4.1.0 refa: 0.12.1 regexp-ast-analysis: 0.7.1 scslre: 0.3.0 - eslint-plugin-unicorn@57.0.0(eslint@9.28.0(jiti@2.4.2)): + eslint-plugin-unicorn@57.0.0(eslint@9.29.0(jiti@2.4.2)): dependencies: '@babel/helper-validator-identifier': 7.27.1 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) ci-info: 4.2.0 clean-regexp: 1.0.0 core-js-compat: 3.42.0 - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.29.0(jiti@2.4.2) esquery: 1.6.0 globals: 15.15.0 indent-string: 5.0.0 @@ -8949,20 +9054,20 @@ snapshots: semver: 7.7.2 strip-indent: 4.0.0 - eslint-plugin-yml@1.18.0(eslint@9.28.0(jiti@2.4.2)): + eslint-plugin-yml@1.18.0(eslint@9.29.0(jiti@2.4.2)): dependencies: debug: 4.4.1(supports-color@8.1.1) escape-string-regexp: 4.0.0 - eslint: 9.28.0(jiti@2.4.2) - eslint-compat-utils: 0.6.5(eslint@9.28.0(jiti@2.4.2)) + eslint: 9.29.0(jiti@2.4.2) + eslint-compat-utils: 0.6.5(eslint@9.29.0(jiti@2.4.2)) natural-compare: 1.4.0 yaml-eslint-parser: 1.3.0 transitivePeerDependencies: - supports-color - eslint-plugin-zod@1.4.0(eslint@9.28.0(jiti@2.4.2)): + eslint-plugin-zod@1.4.0(eslint@9.29.0(jiti@2.4.2)): dependencies: - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.29.0(jiti@2.4.2) eslint-scope@5.1.1: dependencies: @@ -8974,14 +9079,14 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-scope@8.3.0: + eslint-scope@8.4.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-utils@3.0.0(eslint@9.28.0(jiti@2.4.2)): + eslint-utils@3.0.0(eslint@9.29.0(jiti@2.4.2)): dependencies: - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.29.0(jiti@2.4.2) eslint-visitor-keys: 2.1.0 eslint-visitor-keys@2.1.0: {} @@ -8992,6 +9097,8 @@ snapshots: eslint-visitor-keys@4.2.0: {} + eslint-visitor-keys@4.2.1: {} + eslint@8.56.0: dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@8.56.0) @@ -9035,36 +9142,36 @@ snapshots: transitivePeerDependencies: - supports-color - eslint@9.28.0(jiti@2.4.2): + eslint@9.29.0(jiti@2.4.2): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.20.0 + '@eslint/config-array': 0.20.1 '@eslint/config-helpers': 0.2.2 '@eslint/core': 0.14.0 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.28.0 + '@eslint/js': 9.29.0 '@eslint/plugin-kit': 0.3.1 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 debug: 4.4.1(supports-color@8.1.1) escape-string-regexp: 4.0.0 - eslint-scope: 8.3.0 - eslint-visitor-keys: 4.2.0 - espree: 10.3.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - ignore: 5.3.1 + ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 json-stable-stringify-without-jsonify: 1.0.1 @@ -9077,16 +9184,16 @@ snapshots: transitivePeerDependencies: - supports-color - espree@10.3.0: + espree@10.4.0: dependencies: - acorn: 8.14.1 - acorn-jsx: 5.3.2(acorn@8.14.1) - eslint-visitor-keys: 4.2.0 + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 4.2.1 espree@9.6.1: dependencies: - acorn: 8.12.0 - acorn-jsx: 5.3.2(acorn@8.12.0) + acorn: 8.14.1 + acorn-jsx: 5.3.2(acorn@8.14.1) eslint-visitor-keys: 3.4.3 esprima@4.0.1: {} @@ -9297,6 +9404,11 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + forever-agent@0.6.1: {} form-data@2.3.3: @@ -9482,16 +9594,16 @@ snapshots: dependencies: foreground-child: 3.1.1 jackspeak: 3.1.2 - minimatch: 9.0.4 + minimatch: 9.0.5 minipass: 7.1.2 package-json-from-dist: 1.0.0 path-scurry: 1.11.1 - glob@11.0.2: + glob@11.0.3: dependencies: - foreground-child: 3.1.1 + foreground-child: 3.3.1 jackspeak: 4.1.1 - minimatch: 10.0.1 + minimatch: 10.0.3 minipass: 7.1.2 package-json-from-dist: 1.0.0 path-scurry: 2.0.0 @@ -9531,7 +9643,7 @@ snapshots: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.1 + ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 @@ -9539,7 +9651,7 @@ snapshots: dependencies: '@sindresorhus/merge-streams': 1.0.0 fast-glob: 3.3.2 - ignore: 5.3.1 + ignore: 5.3.2 path-type: 5.0.0 slash: 5.1.0 unicorn-magic: 0.1.0 @@ -9556,20 +9668,20 @@ snapshots: graphemer@1.4.0: {} - graphql-config@5.1.5(@types/node@22.15.29)(graphql@16.11.0)(typescript@5.8.3): + graphql-config@5.1.5(@types/node@24.0.3)(graphql@16.11.0)(typescript@5.8.3): dependencies: '@graphql-tools/graphql-file-loader': 8.0.20(graphql@16.11.0) '@graphql-tools/json-file-loader': 8.0.18(graphql@16.11.0) '@graphql-tools/load': 8.1.0(graphql@16.11.0) '@graphql-tools/merge': 9.0.24(graphql@16.11.0) - '@graphql-tools/url-loader': 8.0.31(@types/node@22.15.29)(graphql@16.11.0) + '@graphql-tools/url-loader': 8.0.31(@types/node@24.0.3)(graphql@16.11.0) '@graphql-tools/utils': 10.8.6(graphql@16.11.0) cosmiconfig: 8.3.6(typescript@5.8.3) graphql: 16.11.0 jiti: 2.4.2 minimatch: 9.0.5 string-env-interpolation: 1.0.1 - tslib: 2.6.2 + tslib: 2.8.1 transitivePeerDependencies: - '@fastify/websocket' - '@types/node' @@ -9648,11 +9760,11 @@ snapshots: hosted-git-info@7.0.1: dependencies: - lru-cache: 10.2.0 + lru-cache: 10.4.3 hosted-git-info@8.0.0: dependencies: - lru-cache: 10.2.0 + lru-cache: 10.4.3 html-escaper@2.0.2: {} @@ -9899,10 +10011,10 @@ snapshots: dependencies: is-extglob: 2.1.1 - is-immutable-type@5.0.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3): + is-immutable-type@5.0.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): dependencies: - '@typescript-eslint/type-utils': 8.32.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.28.0(jiti@2.4.2) + '@typescript-eslint/type-utils': 8.33.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + eslint: 9.29.0(jiti@2.4.2) ts-api-utils: 2.1.0(typescript@5.8.3) ts-declaration-location: 1.0.7(typescript@5.8.3) typescript: 5.8.3 @@ -10173,7 +10285,7 @@ snapshots: jsonc-eslint-parser@2.4.0: dependencies: - acorn: 8.12.0 + acorn: 8.14.1 eslint-visitor-keys: 3.4.3 espree: 9.6.1 semver: 7.7.2 @@ -10228,7 +10340,7 @@ snapshots: lines-and-columns@1.2.4: {} - lint-staged@16.1.0: + lint-staged@16.1.2: dependencies: chalk: 5.4.1 commander: 14.0.0 @@ -10326,10 +10438,7 @@ snapshots: lowercase-keys@1.0.1: {} - lru-cache@10.2.0: {} - - lru-cache@10.4.3: - optional: true + lru-cache@10.4.3: {} lru-cache@11.1.0: {} @@ -10392,9 +10501,9 @@ snapshots: merge2@1.4.1: {} - meros@1.3.0(@types/node@22.15.29): + meros@1.3.0(@types/node@24.0.3): optionalDependencies: - '@types/node': 22.15.29 + '@types/node': 24.0.3 micro-spelling-correcter@1.1.1: {} @@ -10417,13 +10526,9 @@ snapshots: min-indent@1.0.1: {} - minimatch@10.0.1: - dependencies: - brace-expansion: 2.0.1 - - minimatch@10.0.2: + minimatch@10.0.3: dependencies: - brace-expansion: 4.0.1 + '@isaacs/brace-expansion': 5.0.0 minimatch@3.0.5: dependencies: @@ -10437,10 +10542,6 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minimatch@9.0.4: - dependencies: - brace-expansion: 2.0.1 - minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 @@ -10495,7 +10596,7 @@ snapshots: mkdirp@1.0.4: optional: true - mocha@11.5.0: + mocha@11.7.0: dependencies: browser-stdout: 1.3.1 chokidar: 4.0.3 @@ -10513,7 +10614,7 @@ snapshots: serialize-javascript: 6.0.2 strip-json-comments: 3.1.1 supports-color: 8.1.1 - workerpool: 6.5.1 + workerpool: 9.3.2 yargs: 17.7.2 yargs-parser: 21.1.1 yargs-unparser: 2.0.0 @@ -10840,7 +10941,7 @@ snapshots: path-scurry@1.11.1: dependencies: - lru-cache: 10.2.0 + lru-cache: 10.4.3 minipass: 7.1.2 path-scurry@2.0.0: @@ -10856,8 +10957,6 @@ snapshots: performance-now@2.1.0: {} - picocolors@1.0.1: {} - picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -11007,11 +11106,11 @@ snapshots: esprima: 4.0.1 source-map: 0.6.1 tiny-invariant: 1.3.3 - tslib: 2.6.2 + tslib: 2.8.1 refa@0.12.1: dependencies: - '@eslint-community/regexpp': 4.11.0 + '@eslint-community/regexpp': 4.12.1 reflect.getprototypeof@1.0.10: dependencies: @@ -11038,7 +11137,7 @@ snapshots: regexp-ast-analysis@0.7.1: dependencies: - '@eslint-community/regexpp': 4.11.0 + '@eslint-community/regexpp': 4.12.1 refa: 0.12.1 regexp-tree@0.1.27: {} @@ -11173,7 +11272,7 @@ snapshots: rimraf@6.0.1: dependencies: - glob: 11.0.2 + glob: 11.0.3 package-json-from-dist: 1.0.0 roarr@7.21.1: @@ -11230,7 +11329,7 @@ snapshots: scslre@0.3.0: dependencies: - '@eslint-community/regexpp': 4.11.0 + '@eslint-community/regexpp': 4.12.1 refa: 0.12.1 regexp-ast-analysis: 0.7.1 @@ -11636,7 +11735,7 @@ snapshots: synckit@0.6.2: dependencies: - tslib: 2.6.2 + tslib: 2.8.1 tapable@2.2.1: {} @@ -11735,8 +11834,6 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 - tslib@2.6.2: {} - tslib@2.8.1: {} tunnel-agent@0.6.0: @@ -11826,12 +11923,12 @@ snapshots: possible-typed-array-names: 1.0.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3): + typescript-eslint@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.33.0(@typescript-eslint/parser@8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/parser': 8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.33.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.28.0(jiti@2.4.2) + '@typescript-eslint/eslint-plugin': 8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + eslint: 9.29.0(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -11855,7 +11952,7 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 - undici-types@6.21.0: {} + undici-types@7.8.0: {} unicode-canonical-property-names-ecmascript@2.0.0: {} @@ -12070,7 +12167,7 @@ snapshots: wordwrap@1.0.0: {} - workerpool@6.5.1: {} + workerpool@9.3.2: {} wrap-ansi@6.2.0: dependencies: @@ -12118,9 +12215,7 @@ snapshots: yaml-eslint-parser@1.3.0: dependencies: eslint-visitor-keys: 3.4.3 - yaml: 2.5.0 - - yaml@2.5.0: {} + yaml: 2.8.0 yaml@2.8.0: {} diff --git a/test/rules/assertions/requireJsdoc.js b/test/rules/assertions/requireJsdoc.js index e70c8fcec..4053e37e6 100644 --- a/test/rules/assertions/requireJsdoc.js +++ b/test/rules/assertions/requireJsdoc.js @@ -6370,5 +6370,33 @@ function quux (foo) { }, ], }, + { + code: ` + /** + * Array map function with overload for NonEmptyArray + * @example + * const data = [{value: 'value'}] as const; + * const result1: NonEmptyReadonlyArray<'value'> = arrayMap(data, (value) => value.value); // pick type from data + * const result2: NonEmptyReadonlyArray<'value'> = arrayMap<'value', typeof data>(data, (value) => value.value); // enforce output type + * @template Target - The type of the array to map to + * @template Source - The type of the array to map from + * @param {Source} data - The array to map + * @param {MapCallback} callback - Callback function to map data from the array + * @returns {AnyArrayType} Mapped array + * @since v0.2.0 + */ + export function arrayMap | NonEmptyReadonlyArray>( + data: Source, + callback: MapCallback, + ): NonEmptyArray; + export function arrayMap>(data: Source, callback: MapCallback): Array; + export function arrayMap(data: Source, callback: MapCallback): AnyArrayType { + return data.map(callback); + } + `, + languageOptions: { + parser: typescriptEslintParser, + }, + }, ], }); From ae2b314bdb5d0661c936beec53923a9e3016fe46 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sat, 21 Jun 2025 12:01:32 +0800 Subject: [PATCH 009/189] fix(`check-template-names`): checks class body for comments where template names used; fixes #1354 (#1407) --- docs/rules/check-template-names.md | 23 ++++++++++ src/rules/checkTemplateNames.js | 48 ++++++++++++++------- test/rules/assertions/checkTemplateNames.js | 32 ++++++++++++++ 3 files changed, 88 insertions(+), 15 deletions(-) diff --git a/docs/rules/check-template-names.md b/docs/rules/check-template-names.md index aad3082b7..42c958786 100644 --- a/docs/rules/check-template-names.md +++ b/docs/rules/check-template-names.md @@ -372,5 +372,28 @@ export function mapGroupBy(array, callbackFn) { * @function * @param {[D, V | undefined]} someParam */ + +/** + * @template {string} U + */ +export class User { + /** + * @type {U} + */ + name; +} + +/** + * @template {string} U + */ +export class User { + /** + * @param {U} name + */ + constructor(name) { + this.name = name; + } + methodToIgnore() {} +} ```` diff --git a/src/rules/checkTemplateNames.js b/src/rules/checkTemplateNames.js index 658cb3dd9..49d3d969e 100644 --- a/src/rules/checkTemplateNames.js +++ b/src/rules/checkTemplateNames.js @@ -1,14 +1,22 @@ -import iterateJsdoc from '../iterateJsdoc.js'; +import iterateJsdoc, { + parseComment, +} from '../iterateJsdoc.js'; import { + getTags, +} from '../jsdocUtils.js'; +import { + getJSDocComment, parse as parseType, traverse, tryParse as tryParseType, } from '@es-joy/jsdoccomment'; export default iterateJsdoc(({ + jsdoc, node, report, settings, + sourceCode, utils, }) => { const { @@ -42,11 +50,11 @@ export default iterateJsdoc(({ }); }; - const checkParamsAndReturnsTags = () => { + const checkParamsAndReturnsTags = (jsdc = jsdoc) => { const paramName = /** @type {string} */ (utils.getPreferredTagName({ tagName: 'param', })); - const paramTags = utils.getTags(paramName); + const paramTags = getTags(jsdc, paramName); for (const paramTag of paramTags) { checkForUsedTypes(paramTag.type); } @@ -54,7 +62,7 @@ export default iterateJsdoc(({ const returnsName = /** @type {string} */ (utils.getPreferredTagName({ tagName: 'returns', })); - const returnsTags = utils.getTags(returnsName); + const returnsTags = getTags(jsdc, returnsName); for (const returnsTag of returnsTags) { checkForUsedTypes(returnsTag.type); } @@ -98,6 +106,26 @@ export default iterateJsdoc(({ if (checkParamsAndReturns) { checkParamsAndReturnsTags(); + } else if (aliasDeclaration.type === 'ClassDeclaration') { + /* c8 ignore next -- TS */ + for (const nde of aliasDeclaration?.body?.body ?? []) { + // @ts-expect-error Should be ok + const commentNode = getJSDocComment(sourceCode, nde, settings); + if (!commentNode) { + continue; + } + + const innerJsdoc = parseComment(commentNode, ''); + checkParamsAndReturnsTags(innerJsdoc); + + const typeName = /** @type {string} */ (utils.getPreferredTagName({ + tagName: 'type', + })); + const typeTags = getTags(innerJsdoc, typeName); + for (const typeTag of typeTags) { + checkForUsedTypes(typeTag.type); + } + } } checkTemplateTags(); @@ -162,17 +190,7 @@ export default iterateJsdoc(({ checkForUsedTypes(propertyTag.type); } - for (const tag of templateTags) { - const { - name, - } = tag; - const names = name.split(/,\s*/u); - for (const nme of names) { - if (!usedNames.has(nme)) { - report(`@template ${nme} not in use`, null, tag); - } - } - } + checkTemplateTags(); }, { iterateAllJsdocs: true, meta: { diff --git a/test/rules/assertions/checkTemplateNames.js b/test/rules/assertions/checkTemplateNames.js index 601f90837..67db66b65 100644 --- a/test/rules/assertions/checkTemplateNames.js +++ b/test/rules/assertions/checkTemplateNames.js @@ -716,5 +716,37 @@ export default /** @type {import('../index.js').TestCases} */ ({ */ `, }, + { + code: ` + /** + * @template {string} U + */ + export class User { + /** + * @type {U} + */ + name; + } + `, + languageOptions: { + ecmaVersion: 2_022, + }, + }, + { + code: ` + /** + * @template {string} U + */ + export class User { + /** + * @param {U} name + */ + constructor(name) { + this.name = name; + } + methodToIgnore() {} + } + `, + }, ], }); From b0faae7e8ea34c2ee2ff8855238393e1229143a8 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sat, 21 Jun 2025 13:16:40 +0800 Subject: [PATCH 010/189] feat(`lines-before-block`): add default-on `ignoreSingleLines` option; fixes #1295 (#1408) --- .README/rules/lines-before-block.md | 7 ++- docs/rules/lines-before-block.md | 35 ++++++++++-- src/rules/linesBeforeBlock.js | 8 +++ test/rules/assertions/linesBeforeBlock.js | 65 +++++++++++++++++++++++ 4 files changed, 111 insertions(+), 4 deletions(-) diff --git a/.README/rules/lines-before-block.md b/.README/rules/lines-before-block.md index 29c8ac63d..22c2bc1e2 100644 --- a/.README/rules/lines-before-block.md +++ b/.README/rules/lines-before-block.md @@ -19,6 +19,11 @@ The minimum number of lines to require. Defaults to 1. This option excludes cases where the JSDoc block occurs on the same line as a preceding code or comment. Defaults to `true`. +### `ignoreSingleLines` + +This option excludes cases where the JSDoc block is only one line long. +Defaults to `true`. + ### `excludedTags` An array of tags whose presence in the JSDoc block will prevent the @@ -31,7 +36,7 @@ lines before the block will not be added). |Tags|N/A| |Recommended|false| |Settings|| -|Options|`checkBlockStarts`, `excludedTags`, `ignoreSameLine`, `lines`| +|Options|`checkBlockStarts`, `excludedTags`, `ignoreSameLine`, `ignoreSingleLines`, `lines`| ## Failing examples diff --git a/docs/rules/lines-before-block.md b/docs/rules/lines-before-block.md index 310c42c9e..99a4bf000 100644 --- a/docs/rules/lines-before-block.md +++ b/docs/rules/lines-before-block.md @@ -29,6 +29,13 @@ The minimum number of lines to require. Defaults to 1. This option excludes cases where the JSDoc block occurs on the same line as a preceding code or comment. Defaults to `true`. + + +### ignoreSingleLines + +This option excludes cases where the JSDoc block is only one line long. +Defaults to `true`. + ### excludedTags @@ -43,7 +50,7 @@ lines before the block will not be added). |Tags|N/A| |Recommended|false| |Settings|| -|Options|`checkBlockStarts`, `excludedTags`, `ignoreSameLine`, `lines`| +|Options|`checkBlockStarts`, `excludedTags`, `ignoreSameLine`, `ignoreSingleLines`, `lines`| @@ -65,7 +72,7 @@ someCode; /** // Message: Required 1 line(s) before JSDoc block someCode; /** */ -// "jsdoc/lines-before-block": ["error"|"warn", {"ignoreSameLine":false}] +// "jsdoc/lines-before-block": ["error"|"warn", {"ignoreSameLine":false,"ignoreSingleLines":false}] // Message: Required 1 line(s) before JSDoc block someCode; @@ -166,6 +173,7 @@ type IntersectionDocumentation = { someProp: number } & /** Description. */ { otherProp: string } +// "jsdoc/lines-before-block": ["error"|"warn", {"ignoreSingleLines":false}] // Message: Required 1 line(s) before JSDoc block type IntersectionDocumentation = { @@ -173,7 +181,19 @@ type IntersectionDocumentation = { } & /** Description. */ { otherProp: string; }; -// "jsdoc/lines-before-block": ["error"|"warn", {"ignoreSameLine":false}] +// "jsdoc/lines-before-block": ["error"|"warn", {"ignoreSameLine":false,"ignoreSingleLines":false}] +// Message: Required 1 line(s) before JSDoc block + +/** The parameters for a request */ +export type RequestParams = { + /** The year to retrieve. */ + year: `${number}`; + /** + * The month to retrieve. + */ + month: `${number}`; +} +// "jsdoc/lines-before-block": ["error"|"warn", {"ignoreSingleLines":true}] // Message: Required 1 line(s) before JSDoc block ```` @@ -304,5 +324,14 @@ type IntersectionDocumentation = { } & /** Description. */ { otherProp: string; }; + +/** The parameters for a request */ +export type RequestParams = { + /** The year to retrieve. */ + year: `${number}`; + /** The month to retrieve. */ + month: `${number}`; +} +// "jsdoc/lines-before-block": ["error"|"warn", {"ignoreSingleLines":true}] ```` diff --git a/src/rules/linesBeforeBlock.js b/src/rules/linesBeforeBlock.js index 08f64f0e2..1cee10fc3 100644 --- a/src/rules/linesBeforeBlock.js +++ b/src/rules/linesBeforeBlock.js @@ -22,6 +22,7 @@ export default iterateJsdoc(({ 'type', ], ignoreSameLine = true, + ignoreSingleLines = true, lines = 1, } = context.options[0] || {}; @@ -54,6 +55,10 @@ export default iterateJsdoc(({ return; } + if (ignoreSingleLines && jsdocNode.loc?.start.line === jsdocNode.loc?.end.line) { + return; + } + /** @type {import('eslint').Rule.ReportFixer} */ const fix = (fixer) => { let indent = ''; @@ -114,6 +119,9 @@ export default iterateJsdoc(({ ignoreSameLine: { type: 'boolean', }, + ignoreSingleLines: { + type: 'boolean', + }, lines: { type: 'integer', }, diff --git a/test/rules/assertions/linesBeforeBlock.js b/test/rules/assertions/linesBeforeBlock.js index 6366ba215..b4f47d951 100644 --- a/test/rules/assertions/linesBeforeBlock.js +++ b/test/rules/assertions/linesBeforeBlock.js @@ -63,6 +63,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ options: [ { ignoreSameLine: false, + ignoreSingleLines: false, }, ], output: ` @@ -388,6 +389,11 @@ export default /** @type {import('../index.js').TestCases} */ ({ languageOptions: { parser: typescriptEslintParser, }, + options: [ + { + ignoreSingleLines: false, + }, + ], output: ` type UnionDocumentation = /** Description. */ @@ -426,6 +432,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ options: [ { ignoreSameLine: false, + ignoreSingleLines: false, }, ], output: ` @@ -438,6 +445,45 @@ export default /** @type {import('../index.js').TestCases} */ ({ }; `, }, + { + code: ` + /** The parameters for a request */ + export type RequestParams = { + /** The year to retrieve. */ + year: \`\${number}\`; + /** + * The month to retrieve. + */ + month: \`\${number}\`; + } + `, + errors: [ + { + line: 6, + message: 'Required 1 line(s) before JSDoc block', + }, + ], + languageOptions: { + parser: typescriptEslintParser, + }, + options: [ + { + ignoreSingleLines: true, + }, + ], + output: ` + /** The parameters for a request */ + export type RequestParams = { + /** The year to retrieve. */ + year: \`\${number}\`; + + /** + * The month to retrieve. + */ + month: \`\${number}\`; + } + `, + }, ], valid: [ { @@ -621,5 +667,24 @@ export default /** @type {import('../index.js').TestCases} */ ({ parser: typescriptEslintParser, }, }, + { + code: ` + /** The parameters for a request */ + export type RequestParams = { + /** The year to retrieve. */ + year: \`\${number}\`; + /** The month to retrieve. */ + month: \`\${number}\`; + } + `, + languageOptions: { + parser: typescriptEslintParser, + }, + options: [ + { + ignoreSingleLines: true, + }, + ], + }, ], }); From 2875c2d1e37d5b86281a30bbbc6f3a030fafec91 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sat, 21 Jun 2025 19:10:30 +0800 Subject: [PATCH 011/189] fix(`require-jsdoc`): check interfaces within file for comment blocks; fixes #768 (#1410) --- docs/rules/require-jsdoc.md | 29 ++++++++ src/rules/requireJsdoc.js | 98 +++++++++++++++++++++++++++ test/rules/assertions/requireJsdoc.js | 73 ++++++++++++++++++++ 3 files changed, 200 insertions(+) diff --git a/docs/rules/require-jsdoc.md b/docs/rules/require-jsdoc.md index 025667f9d..f54f21ad9 100644 --- a/docs/rules/require-jsdoc.md +++ b/docs/rules/require-jsdoc.md @@ -1028,6 +1028,19 @@ type Props = { export type { Props as ComponentProps }; // "jsdoc/require-jsdoc": ["error"|"warn", {"contexts":["VariableDeclaration","TSTypeAliasDeclaration","TSPropertySignature","TSInterfaceDeclaration","TSMethodSignature","TSEnumDeclaration"],"enableFixer":true,"publicOnly":{"esm":true},"require":{"ArrowFunctionExpression":true,"ClassDeclaration":true,"ClassExpression":true,"FunctionDeclaration":true,"FunctionExpression":true,"MethodDefinition":true}}] // Message: Missing JSDoc comment. + +export interface A { + a: string; +} + +export class B implements A, B { + a = 'abc'; + public f(): void { + // + } +} +// "jsdoc/require-jsdoc": ["error"|"warn", {"contexts":["MethodDefinition"]}] +// Message: Missing JSDoc comment. ```` @@ -1931,5 +1944,21 @@ export function arrayMap>(data: Source, ca export function arrayMap(data: Source, callback: MapCallback): AnyArrayType { return data.map(callback); } + +export interface A { + a: string; + /** + * Documentation. + */ + f(): void; +} + +export class B implements A { + a = 'abc'; + public f(): void { + // + } +} +// "jsdoc/require-jsdoc": ["error"|"warn", {"contexts":["MethodDefinition"]}] ```` diff --git a/src/rules/requireJsdoc.js b/src/rules/requireJsdoc.js index 251c7f13e..8cb99e4ee 100644 --- a/src/rules/requireJsdoc.js +++ b/src/rules/requireJsdoc.js @@ -173,6 +173,100 @@ const OPTIONS_SCHEMA = { type: 'object', }; +/** + * @param {string} interfaceName + * @param {string} methodName + * @param {import("eslint").Scope.Scope | null} scope + * @returns {import('@typescript-eslint/types').TSESTree.TSMethodSignature|null} + */ +const getMethodOnInterface = (interfaceName, methodName, scope) => { + let scp = scope; + while (scp) { + for (const { + identifiers, + name, + } of scp.variables) { + if (interfaceName !== name) { + continue; + } + + for (const identifier of identifiers) { + const interfaceDeclaration = /** @type {import('@typescript-eslint/types').TSESTree.Identifier & {parent: import('@typescript-eslint/types').TSESTree.TSInterfaceDeclaration}} */ ( + identifier + ).parent; + /* c8 ignore next 3 -- TS */ + if (interfaceDeclaration.type !== 'TSInterfaceDeclaration') { + continue; + } + + for (const bodyItem of interfaceDeclaration.body.body) { + const methodSig = /** @type {import('@typescript-eslint/types').TSESTree.TSMethodSignature} */ ( + bodyItem + ); + if (methodName === /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ ( + methodSig.key + ).name) { + return methodSig; + } + } + } + } + + scp = scp.upper; + } + + return null; +}; + +/** + * @param {import('eslint').Rule.Node} node + * @param {import('eslint').SourceCode} sourceCode + * @param {import('eslint').Rule.RuleContext} context + * @param {import('../iterateJsdoc.js').Settings} settings + */ +const isExemptedImplementer = (node, sourceCode, context, settings) => { + if (node.type === 'FunctionExpression' && + node.parent.type === 'MethodDefinition' && + node.parent.parent.type === 'ClassBody' && + node.parent.parent.parent.type === 'ClassDeclaration' && + 'implements' in node.parent.parent.parent + ) { + const implments = /** @type {import('@typescript-eslint/types').TSESTree.TSClassImplements[]} */ ( + node.parent.parent.parent.implements + ); + + const { + name: methodName, + } = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ ( + node.parent.key + ); + + for (const impl of implments) { + const { + name: interfaceName, + } = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ ( + impl.expression + ); + + const interfaceMethodNode = getMethodOnInterface(interfaceName, methodName, node && ( + (sourceCode.getScope && + /* c8 ignore next 2 */ + sourceCode.getScope(node)) || + context.getScope() + )); + if (interfaceMethodNode) { + // @ts-expect-error Ok + const comment = getJSDocComment(sourceCode, interfaceMethodNode, settings); + if (comment) { + return true; + } + } + } + } + + return false; +}; + /** * @param {import('eslint').Rule.RuleContext} context * @param {import('json-schema').JSONSchema4Object} baseObject @@ -421,6 +515,10 @@ export default { } } + if (isExemptedImplementer(node, sourceCode, context, settings)) { + return; + } + const fix = /** @type {import('eslint').Rule.ReportFixer} */ (fixer) => { // Default to one line break if the `minLines`/`maxLines` settings allow const lines = settings.minLines === 0 && settings.maxLines >= 1 ? 1 : settings.minLines; diff --git a/test/rules/assertions/requireJsdoc.js b/test/rules/assertions/requireJsdoc.js index 4053e37e6..156d941a0 100644 --- a/test/rules/assertions/requireJsdoc.js +++ b/test/rules/assertions/requireJsdoc.js @@ -4251,6 +4251,51 @@ function quux (foo) { export type { Props as ComponentProps }; `, }, + { + code: ` + export interface A { + a: string; + } + + export class B implements A, B { + a = 'abc'; + public f(): void { + // + } + } + `, + errors: [ + { + line: 8, + message: 'Missing JSDoc comment.', + }, + ], + languageOptions: { + parser: typescriptEslintParser, + }, + options: [ + { + contexts: [ + 'MethodDefinition', + ], + }, + ], + output: ` + export interface A { + a: string; + } + + export class B implements A, B { + a = 'abc'; + /** + * + */ + public f(): void { + // + } + } + `, + }, ], valid: [ { @@ -6398,5 +6443,33 @@ function quux (foo) { parser: typescriptEslintParser, }, }, + { + code: ` + export interface A { + a: string; + /** + * Documentation. + */ + f(): void; + } + + export class B implements A { + a = 'abc'; + public f(): void { + // + } + } + `, + languageOptions: { + parser: typescriptEslintParser, + }, + options: [ + { + contexts: [ + 'MethodDefinition', + ], + }, + ], + }, ], }); From 3d2d379ad0ea9d708ebf8bf19f8435cb9536344d Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sun, 22 Jun 2025 18:21:44 +0800 Subject: [PATCH 012/189] fix: update `jsdoccomment` (#1411) --- package.json | 2 +- pnpm-lock.yaml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 8c54de409..5bd50d94d 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "url": "http://gajus.com" }, "dependencies": { - "@es-joy/jsdoccomment": "~0.51.1", + "@es-joy/jsdoccomment": "~0.52.0", "are-docs-informative": "^0.0.2", "comment-parser": "1.4.1", "debug": "^4.4.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3f9cb3dcf..a976bf7ad 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: dependencies: '@es-joy/jsdoccomment': - specifier: ~0.51.1 - version: 0.51.1 + specifier: ~0.52.0 + version: 0.52.0 are-docs-informative: specifier: ^0.0.2 version: 0.0.2 @@ -829,9 +829,9 @@ packages: resolution: {integrity: sha512-YAdE/IJSpwbOTiaURNCKECdAwqrJuFiZhylmesBcIRawtYKnBR2wxPhoIewMg+Yu+QuYvHfJNReWpoxGBKOChA==} engines: {node: '>=18'} - '@es-joy/jsdoccomment@0.51.1': - resolution: {integrity: sha512-fPn7AW/unCg3JRLt8Wg44HLRVkAEfkFIXiGRJbeOIrd7Hgl4iOFwVHpvVR8I5hJYpn5mNFWwIXR6A16ZRA/M9w==} - engines: {node: '>=18'} + '@es-joy/jsdoccomment@0.52.0': + resolution: {integrity: sha512-BXuN7BII+8AyNtn57euU2Yxo9yA/KUDNzrpXyi3pfqKmBhhysR6ZWOebFh3vyPoqA3/j1SOvGgucElMGwlXing==} + engines: {node: '>=20.11.0'} '@eslint-community/eslint-utils@4.7.0': resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} @@ -6572,7 +6572,7 @@ snapshots: esquery: 1.6.0 jsdoc-type-pratt-parser: 4.1.0 - '@es-joy/jsdoccomment@0.51.1': + '@es-joy/jsdoccomment@0.52.0': dependencies: '@types/estree': 1.0.8 '@typescript-eslint/types': 8.34.1 From a083c815ed23211b486d07b608bb723f5f7c45c1 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Mon, 23 Jun 2025 05:04:45 +0800 Subject: [PATCH 013/189] fix(`no-undefined-types`): liberalize checks to reallow for unknown properties on imports and defined globals; fixes #1412 (#1413) --- docs/rules/no-undefined-types.md | 21 +++++++++++++ src/rules/noUndefinedTypes.js | 37 +++++++++++++++++++++-- test/rules/assertions/noUndefinedTypes.js | 27 +++++++++++++++++ 3 files changed, 83 insertions(+), 2 deletions(-) diff --git a/docs/rules/no-undefined-types.md b/docs/rules/no-undefined-types.md index 77d0a729f..fdd836848 100644 --- a/docs/rules/no-undefined-types.md +++ b/docs/rules/no-undefined-types.md @@ -919,5 +919,26 @@ class Foo { return "bar"; } } + +/* globals SomeGlobal, AnotherGlobal */ +import * as Ably from "ably" +import Testing, { another as Another, stillMore as StillMore } from "testing" + +export class Code { + /** @type {Ably.Realtime} */ + static #client + + /** @type {Testing.SomeMethod} */ + static #test + + /** @type {Another.AnotherMethod} */ + static #test2 + + /** @type {StillMore.AnotherMethod} */ + static #test3 + + /** @type {AnotherGlobal.AnotherMethod} */ + static #test4 +} ```` diff --git a/src/rules/noUndefinedTypes.js b/src/rules/noUndefinedTypes.js index 615cc1dc1..c5a848266 100644 --- a/src/rules/noUndefinedTypes.js +++ b/src/rules/noUndefinedTypes.js @@ -112,7 +112,8 @@ export default iterateJsdoc(({ .filter(Boolean)); } - const comments = sourceCode.getAllComments() + const allComments = sourceCode.getAllComments(); + const comments = allComments .filter((comment) => { return (/^\*\s/u).test(comment.value); }) @@ -120,6 +121,13 @@ export default iterateJsdoc(({ return parseComment(commentNode, ''); }); + const globals = allComments + .filter((comment) => { + return (/^\s*globals/u).test(comment.value); + }).flatMap((commentNode) => { + return commentNode.value.replace(/^\s*globals/u, '').trim().split(/,\s*/u); + }); + const typedefDeclarations = comments .flatMap((doc) => { return doc.tags.filter(({ @@ -242,6 +250,12 @@ export default iterateJsdoc(({ return result; }; + /** + * We treat imports differently as we can't introspect their children. + * @type {string[]} + */ + const imports = []; + const allDefinedTypes = new Set(globalScope.variables.map(({ name, }) => { @@ -256,8 +270,22 @@ export default iterateJsdoc(({ }) => { return variables; }).map(({ + identifiers, name, }) => { + if ( + [ + 'ImportDefaultSpecifier', + 'ImportNamespaceSpecifier', + 'ImportSpecifier', + ].includes( + /** @type {import('estree').Identifier & {parent: {type: string}}} */ ( + identifiers?.[0])?.parent?.type, + ) + ) { + imports.push(name); + } + return name; /* c8 ignore next */ }) : [], @@ -408,7 +436,12 @@ export default iterateJsdoc(({ * _parent?: import('jsdoc-type-pratt-parser').NonRootResult * }} */ (currNode)._parent; - if (currNode && 'right' in currNode && currNode.right?.type === 'JsdocTypeProperty') { + if ( + // Avoid appending for imports and globals since we don't want to + // check their properties which may or may not exist + !imports.includes(val) && !globals.includes(val) && + currNode && 'right' in currNode && + currNode.right?.type === 'JsdocTypeProperty') { val = val + '.' + currNode.right.value; } } while (currNode?.type === 'JsdocTypeNamePath'); diff --git a/test/rules/assertions/noUndefinedTypes.js b/test/rules/assertions/noUndefinedTypes.js index 78dd3743d..ca0a836f4 100644 --- a/test/rules/assertions/noUndefinedTypes.js +++ b/test/rules/assertions/noUndefinedTypes.js @@ -1624,5 +1624,32 @@ export default /** @type {import('../index.js').TestCases} */ ({ ecmaVersion: 2_022, }, }, + { + code: ` + /* globals SomeGlobal, AnotherGlobal */ + import * as Ably from "ably" + import Testing, { another as Another, stillMore as StillMore } from "testing" + + export class Code { + /** @type {Ably.Realtime} */ + static #client + + /** @type {Testing.SomeMethod} */ + static #test + + /** @type {Another.AnotherMethod} */ + static #test2 + + /** @type {StillMore.AnotherMethod} */ + static #test3 + + /** @type {AnotherGlobal.AnotherMethod} */ + static #test4 + } + `, + languageOptions: { + parser: typescriptEslintParser, + }, + }, ], }); From 08f78340ee6969f22ccc784de4f86d35f998b1f1 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Mon, 23 Jun 2025 05:37:57 +0800 Subject: [PATCH 014/189] feat: strip property when there is a `class` tag and the context is set (#1414) * feat: strip property when there is a `class` tag and the context is set; fixes #1376 * Update docs/rules/no-types.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update .README/rules/no-types.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .README/rules/no-types.md | 5 ++++- docs/rules/no-types.md | 14 +++++++++++++- src/rules/noTypes.js | 18 +++++++++++++++++- test/rules/assertions/noTypes.js | 29 +++++++++++++++++++++++++++++ 4 files changed, 63 insertions(+), 3 deletions(-) diff --git a/.README/rules/no-types.md b/.README/rules/no-types.md index 9c699661d..49fb154a3 100644 --- a/.README/rules/no-types.md +++ b/.README/rules/no-types.md @@ -7,9 +7,12 @@ This rule reports types being used on `@param` or `@returns`. The rule is intended to prevent the indication of types on tags where the type information would be redundant with TypeScript. +When `contexts` are supplied, will also strip `@property` when on a +`ClassDeclaration`. + ## Fixer -(TODO) +Strips any types that are found. ## Options diff --git a/docs/rules/no-types.md b/docs/rules/no-types.md index f5fe302d2..43a22262e 100644 --- a/docs/rules/no-types.md +++ b/docs/rules/no-types.md @@ -15,11 +15,14 @@ This rule reports types being used on `@param` or `@returns`. The rule is intended to prevent the indication of types on tags where the type information would be redundant with TypeScript. +When `contexts` are supplied, will also strip `@property` when on a +`ClassDeclaration`. + ## Fixer -(TODO) +Strips any types that are found. @@ -137,6 +140,15 @@ export interface B { methodB(paramB: string): void } // Message: Types are not permitted on @param. + +/** + * @class + * @property {object} x + */ +class Example { + x: number; +} +// Message: Types are not permitted on @property in the supplied context. ```` diff --git a/src/rules/noTypes.js b/src/rules/noTypes.js index 50ef2c6bf..9c7244ff0 100644 --- a/src/rules/noTypes.js +++ b/src/rules/noTypes.js @@ -11,6 +11,7 @@ const removeType = ({ }; export default iterateJsdoc(({ + node, utils, }) => { if (!utils.isIteratingFunction() && !utils.isVirtualFunction()) { @@ -30,11 +31,26 @@ export default iterateJsdoc(({ }); } } + + if (node?.type === 'ClassDeclaration') { + const propertyTags = utils.getPresentTags([ + 'prop', 'property', + ]); + for (const tag of propertyTags) { + if (tag.type) { + utils.reportJSDoc(`Types are not permitted on @${tag.tag} in the supplied context.`, tag, () => { + for (const source of tag.source) { + removeType(source); + } + }); + } + } + } }, { contextDefaults: [ 'ArrowFunctionExpression', 'FunctionDeclaration', 'FunctionExpression', 'TSDeclareFunction', // Add this to above defaults - 'TSMethodSignature', + 'TSMethodSignature', 'ClassDeclaration', ], meta: { docs: { diff --git a/test/rules/assertions/noTypes.js b/test/rules/assertions/noTypes.js index ad9674a25..81462d0bd 100644 --- a/test/rules/assertions/noTypes.js +++ b/test/rules/assertions/noTypes.js @@ -257,6 +257,35 @@ export default /** @type {import('../index.js').TestCases} */ ({ } `, }, + { + code: ` + /** + * @class + * @property {object} x + */ + class Example { + x: number; + } + `, + errors: [ + { + line: 4, + message: 'Types are not permitted on @property in the supplied context.', + }, + ], + languageOptions: { + parser: typescriptEslintParser, + }, + output: ` + /** + * @class + * @property x + */ + class Example { + x: number; + } + `, + }, ], valid: [ { From e9ff4c7173781cdc8502f7537e1a7e83ec9c51e7 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Mon, 23 Jun 2025 06:35:08 +0800 Subject: [PATCH 015/189] fix(`no-undefined-types`): also allow globals defined on `languageOptions` (#1415) --- docs/rules/no-undefined-types.md | 3 +++ src/rules/noUndefinedTypes.js | 2 +- test/rules/assertions/noUndefinedTypes.js | 6 ++++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/docs/rules/no-undefined-types.md b/docs/rules/no-undefined-types.md index fdd836848..1d4726af9 100644 --- a/docs/rules/no-undefined-types.md +++ b/docs/rules/no-undefined-types.md @@ -939,6 +939,9 @@ export class Code { /** @type {AnotherGlobal.AnotherMethod} */ static #test4 + + /** @type {AGlobal.AnotherMethod} */ + static #test5 } ```` diff --git a/src/rules/noUndefinedTypes.js b/src/rules/noUndefinedTypes.js index c5a848266..b97ae5aba 100644 --- a/src/rules/noUndefinedTypes.js +++ b/src/rules/noUndefinedTypes.js @@ -126,7 +126,7 @@ export default iterateJsdoc(({ return (/^\s*globals/u).test(comment.value); }).flatMap((commentNode) => { return commentNode.value.replace(/^\s*globals/u, '').trim().split(/,\s*/u); - }); + }).concat(Object.keys(context.languageOptions.globals ?? [])); const typedefDeclarations = comments .flatMap((doc) => { diff --git a/test/rules/assertions/noUndefinedTypes.js b/test/rules/assertions/noUndefinedTypes.js index ca0a836f4..ce1b8806a 100644 --- a/test/rules/assertions/noUndefinedTypes.js +++ b/test/rules/assertions/noUndefinedTypes.js @@ -1645,9 +1645,15 @@ export default /** @type {import('../index.js').TestCases} */ ({ /** @type {AnotherGlobal.AnotherMethod} */ static #test4 + + /** @type {AGlobal.AnotherMethod} */ + static #test5 } `, languageOptions: { + globals: { + AGlobal: 'readonly', + }, parser: typescriptEslintParser, }, }, From efbcb1c43abc31070b42a86ba2f5150da0063ad4 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 24 Jun 2025 04:56:16 +0800 Subject: [PATCH 016/189] fix(`no-undefined-types`): exempt import tags from property checks; fixes #1416 (#1417) --- docs/rules/no-undefined-types.md | 28 ++++++++++++++++++ src/rules/noUndefinedTypes.js | 2 ++ test/rules/assertions/noUndefinedTypes.js | 35 +++++++++++++++++++++++ 3 files changed, 65 insertions(+) diff --git a/docs/rules/no-undefined-types.md b/docs/rules/no-undefined-types.md index 1d4726af9..7a7400cc9 100644 --- a/docs/rules/no-undefined-types.md +++ b/docs/rules/no-undefined-types.md @@ -943,5 +943,33 @@ export class Code { /** @type {AGlobal.AnotherMethod} */ static #test5 } + +import jsdoc from "eslint-plugin-jsdoc"; + +/** + * @import { Linter } from "eslint" + */ + +/** + * @type {Linter.Config} + */ +export default [ + { + plugins: { jsdoc }, + rules: { + "jsdoc/no-undefined-types": "error" + } + } +]; + +/** + * @typedef {object} Abc + * @property {string} def Some string + */ + +/** + * @type {Abc['def']} + */ +export const a = 'someString'; ```` diff --git a/src/rules/noUndefinedTypes.js b/src/rules/noUndefinedTypes.js index b97ae5aba..afbc8aadd 100644 --- a/src/rules/noUndefinedTypes.js +++ b/src/rules/noUndefinedTypes.js @@ -440,6 +440,8 @@ export default iterateJsdoc(({ // Avoid appending for imports and globals since we don't want to // check their properties which may or may not exist !imports.includes(val) && !globals.includes(val) && + !importTags.includes(val) && + !typedefDeclarations.includes(val) && currNode && 'right' in currNode && currNode.right?.type === 'JsdocTypeProperty') { val = val + '.' + currNode.right.value; diff --git a/test/rules/assertions/noUndefinedTypes.js b/test/rules/assertions/noUndefinedTypes.js index ce1b8806a..3aeefb6d6 100644 --- a/test/rules/assertions/noUndefinedTypes.js +++ b/test/rules/assertions/noUndefinedTypes.js @@ -1657,5 +1657,40 @@ export default /** @type {import('../index.js').TestCases} */ ({ parser: typescriptEslintParser, }, }, + { + code: ` + import jsdoc from "eslint-plugin-jsdoc"; + + /** + * @import { Linter } from "eslint" + */ + + /** + * @type {Linter.Config} + */ + export default [ + { + plugins: { jsdoc }, + rules: { + "jsdoc/no-undefined-types": "error" + } + } + ]; + `, + }, + { + code: ` + /** + * @typedef {object} Abc + * @property {string} def Some string + */ + + /** + * @type {Abc['def']} + */ + export const a = 'someString'; + + `, + }, ], }); From 35e95a163819dd63e52748f9ad1bba25c2bd6e89 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 24 Jun 2025 13:49:10 +0800 Subject: [PATCH 017/189] fix(`require-template`, `no-undefined-types`, `valid-types`): properly parse template tags with defaults; fixes #1418 (#1419) --- docs/rules/require-template.md | 8 ++++++++ src/jsdocUtils.js | 2 +- src/rules/requireTemplate.js | 22 +++++++++++----------- test/rules/assertions/requireTemplate.js | 11 +++++++++++ 4 files changed, 31 insertions(+), 12 deletions(-) diff --git a/docs/rules/require-template.md b/docs/rules/require-template.md index 7abd16db2..55d713c45 100644 --- a/docs/rules/require-template.md +++ b/docs/rules/require-template.md @@ -354,5 +354,13 @@ export default class { * @callback * @returns {[Something | undefined]} */ + +/** + * @template {string | Buffer} [T=string, U=number] + * @typedef {object} Dirent + * @property {T} name name + * @property {U} aNumber number + * @property {string} parentPath path + */ ```` diff --git a/src/jsdocUtils.js b/src/jsdocUtils.js index 5ab8c708e..2f6e66e78 100644 --- a/src/jsdocUtils.js +++ b/src/jsdocUtils.js @@ -1495,7 +1495,7 @@ const parseClosureTemplateTag = (tag) => { return tag.name .split(',') .map((type) => { - return type.trim().replace(/^\[(?.*?)=.*\]$/u, '$'); + return type.trim().replace(/^\[?(?.*?)=.*$/u, '$'); }); }; diff --git a/src/rules/requireTemplate.js b/src/rules/requireTemplate.js index a68c02d91..91edfb523 100644 --- a/src/rules/requireTemplate.js +++ b/src/rules/requireTemplate.js @@ -22,19 +22,19 @@ export default iterateJsdoc(({ const usedNames = new Set(); const templateTags = utils.getTags('template'); - const templateNames = templateTags.flatMap(({ - name, - }) => { - return name.split(/,\s*/u); + const templateNames = templateTags.flatMap((tag) => { + return utils.parseClosureTemplateTag(tag); }); - for (const tag of templateTags) { - const { - name, - } = tag; - const names = name.split(/,\s*/u); - if (requireSeparateTemplates && names.length > 1) { - report(`Missing separate @template for ${names[1]}`, null, tag); + if (requireSeparateTemplates) { + for (const tag of templateTags) { + const { + name, + } = tag; + const names = name.split(/,\s*/u); + if (names.length > 1) { + report(`Missing separate @template for ${names[1]}`, null, tag); + } } } diff --git a/test/rules/assertions/requireTemplate.js b/test/rules/assertions/requireTemplate.js index 66bec6863..e3b6a9b5b 100644 --- a/test/rules/assertions/requireTemplate.js +++ b/test/rules/assertions/requireTemplate.js @@ -634,5 +634,16 @@ export default /** @type {import('../index.js').TestCases} */ ({ */ `, }, + { + code: ` + /** + * @template {string | Buffer} [T=string, U=number] + * @typedef {object} Dirent + * @property {T} name name + * @property {U} aNumber number + * @property {string} parentPath path + */ + `, + }, ], }); From 26276bae9610e50ca0554ee496667b9e363f9941 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Mon, 30 Jun 2025 08:29:04 +0800 Subject: [PATCH 018/189] feat(`multiline-blocks`): adds `requireSingleLineUnderCount` option; fixes #1158 (#1409) * feat(`multiline-blocks`): adds `requireSingleLineUnderCount` option; fixes #1158 * docs: clarify --- .README/rules/multiline-blocks.md | 9 +- docs/rules/multiline-blocks.md | 77 ++++++++- src/rules/multilineBlocks.js | 160 ++++++++++++++++++ test/rules/assertions/multilineBlocks.js | 205 +++++++++++++++++++++++ 4 files changed, 449 insertions(+), 2 deletions(-) diff --git a/.README/rules/multiline-blocks.md b/.README/rules/multiline-blocks.md index 6cbdb182a..9d71e323d 100644 --- a/.README/rules/multiline-blocks.md +++ b/.README/rules/multiline-blocks.md @@ -38,6 +38,13 @@ line will be reported. (Text preceding a newline is not reported.) If this is `true`, any single line blocks will be reported, except those which are whitelisted in `singleLineTags`. +### `requireSingleLineUnderCount` (defaults to `null`) + +If this number is set, it indicates a minimum line width for a single line of +JSDoc content spread over a multi-line comment block. If a line is under the +minimum length, it will be reported so as to enforce single line JSDoc blocks +for such cases. + ### `singleLineTags` (defaults to `['lends', 'type']`) An array of tags which can nevertheless be allowed as single line blocks when @@ -96,7 +103,7 @@ cannot be reliably added after the tag either). |Tags|Any (though `singleLineTags` and `multilineTags` control the application)| |Recommended|true| |Settings|| -|Options|`allowMultipleTags`, `minimumLengthForMultiline`, `multilineTags`, `noFinalLineText`, `noMultilineBlocks`, `noSingleLineBlocks`, `noZeroLineText`, `singleLineTags`| +|Options|`allowMultipleTags`, `minimumLengthForMultiline`, `multilineTags`, `noFinalLineText`, `noMultilineBlocks`, `noSingleLineBlocks`, `noZeroLineText`, `requireSingleLineUnderCount`, `singleLineTags`| ## Failing examples diff --git a/docs/rules/multiline-blocks.md b/docs/rules/multiline-blocks.md index 7913017ef..9c3a23072 100644 --- a/docs/rules/multiline-blocks.md +++ b/docs/rules/multiline-blocks.md @@ -50,6 +50,15 @@ line will be reported. (Text preceding a newline is not reported.) If this is `true`, any single line blocks will be reported, except those which are whitelisted in `singleLineTags`. + + +### requireSingleLineUnderCount (defaults to null) + +If this number is set, it indicates a minimum line width for a single line of +JSDoc content spread over a multi-line comment block. If a line is under the +minimum length, it will be reported so as to enforce single line JSDoc blocks +for such cases. + ### singleLineTags (defaults to ['lends', 'type']) @@ -120,7 +129,7 @@ cannot be reliably added after the tag either). |Tags|Any (though `singleLineTags` and `multilineTags` control the application)| |Recommended|true| |Settings|| -|Options|`allowMultipleTags`, `minimumLengthForMultiline`, `multilineTags`, `noFinalLineText`, `noMultilineBlocks`, `noSingleLineBlocks`, `noZeroLineText`, `singleLineTags`| +|Options|`allowMultipleTags`, `minimumLengthForMultiline`, `multilineTags`, `noFinalLineText`, `noMultilineBlocks`, `noSingleLineBlocks`, `noZeroLineText`, `requireSingleLineUnderCount`, `singleLineTags`| @@ -283,6 +292,38 @@ The following patterns are considered problems: * Description */ // "jsdoc/multiline-blocks": ["error"|"warn", {"noFinalLineText":true}] // Message: Should have no text on the final line (before the `*/`). + +/** + * Description too short + */ +// "jsdoc/multiline-blocks": ["error"|"warn", {"requireSingleLineUnderCount":80}] +// Message: Description is too short to be multi-line. + +/** Description too short + */ +// "jsdoc/multiline-blocks": ["error"|"warn", {"requireSingleLineUnderCount":80}] +// Message: Description is too short to be multi-line. + +/** + * Description too short */ +// "jsdoc/multiline-blocks": ["error"|"warn", {"requireSingleLineUnderCount":80}] +// Message: Description is too short to be multi-line. + +/** + * @someTag {someType} Description too short + */ +// "jsdoc/multiline-blocks": ["error"|"warn", {"requireSingleLineUnderCount":80}] +// Message: Description is too short to be multi-line. + +/** @someTag {someType} Description too short + */ +// "jsdoc/multiline-blocks": ["error"|"warn", {"requireSingleLineUnderCount":80}] +// Message: Description is too short to be multi-line. + +/** + * @someTag {someType} Description too short */ +// "jsdoc/multiline-blocks": ["error"|"warn", {"requireSingleLineUnderCount":80}] +// Message: Description is too short to be multi-line. ```` @@ -394,5 +435,39 @@ The following patterns are not considered problems: /** @someTag with Description */ // "jsdoc/multiline-blocks": ["error"|"warn", {"noFinalLineText":true}] + +/** + * This description here is very much long enough, I'd say, wouldn't you? + */ +// "jsdoc/multiline-blocks": ["error"|"warn", {"requireSingleLineUnderCount":80}] + +/** + * This description here is + * on multiple lines. + */ +// "jsdoc/multiline-blocks": ["error"|"warn", {"requireSingleLineUnderCount":80}] + +/** This description here is on a single line, so it doesn't matter if it goes over. */ +// "jsdoc/multiline-blocks": ["error"|"warn", {"requireSingleLineUnderCount":80}] + +/** + * @someTag {someType} This description here is very much long enough, I'd say, wouldn't you? + */ +// "jsdoc/multiline-blocks": ["error"|"warn", {"requireSingleLineUnderCount":80}] + +/** + * @someTag {someType} This description here is + * on multiple lines. + */ +// "jsdoc/multiline-blocks": ["error"|"warn", {"requireSingleLineUnderCount":80}] + +/** @someTag {someTag} This description here is on a single line, so it doesn't matter if it goes over. */ +// "jsdoc/multiline-blocks": ["error"|"warn", {"requireSingleLineUnderCount":80}] + +/** + * Description short but has... + * @someTag + */ +// "jsdoc/multiline-blocks": ["error"|"warn", {"requireSingleLineUnderCount":80}] ```` diff --git a/src/rules/multilineBlocks.js b/src/rules/multilineBlocks.js index 29079110d..223dece31 100644 --- a/src/rules/multilineBlocks.js +++ b/src/rules/multilineBlocks.js @@ -1,5 +1,151 @@ import iterateJsdoc from '../iterateJsdoc.js'; +/** + * @param {import('@es-joy/jsdoccomment').JsdocBlockWithInline} jsdoc + * @param {import('../iterateJsdoc.js').Utils} utils + * @param {number} requireSingleLineUnderCount + */ +const checkForShortTags = (jsdoc, utils, requireSingleLineUnderCount) => { + if (!requireSingleLineUnderCount || !jsdoc.tags.length) { + return false; + } + + let lastLineWithTag = 0; + let exceedsLength = false; + let hasDesc = false; + const tagLines = jsdoc.source.reduce((acc, { + tokens: { + delimiter, + description: desc, + name, + postDelimiter, + postName, + postTag, + postType, + start, + tag, + type, + }, + }, idx) => { + if (tag.length) { + lastLineWithTag = idx; + if ( + start.length + delimiter.length + postDelimiter.length + + type.length + postType.length + name.length + postName.length + + tag.length + postTag.length + desc.length < + requireSingleLineUnderCount + ) { + exceedsLength = true; + } + + return acc + 1; + } else if (desc.length) { + hasDesc = true; + return acc; + } + + return acc; + }, 0); + // Could be tagLines > 1 + if (!hasDesc && exceedsLength && tagLines === 1) { + const fixer = () => { + const tokens = jsdoc.source[lastLineWithTag].tokens; + jsdoc.source = [ + { + number: 0, + source: '', + tokens: utils.seedTokens({ + delimiter: '/**', + description: tokens.description.trimEnd() + ' ', + end: '*/', + name: tokens.name, + postDelimiter: ' ', + postName: tokens.postName, + postTag: tokens.postTag, + postType: tokens.postType, + start: jsdoc.source[0].tokens.start, + tag: tokens.tag, + type: tokens.type, + }), + }, + ]; + }; + + utils.reportJSDoc( + 'Description is too short to be multi-line.', + null, + fixer, + ); + return true; + } + + return false; +}; + +/** + * @param {import('@es-joy/jsdoccomment').JsdocBlockWithInline} jsdoc + * @param {import('../iterateJsdoc.js').Utils} utils + * @param {number} requireSingleLineUnderCount + */ +const checkForShortDescriptions = (jsdoc, utils, requireSingleLineUnderCount) => { + if (!requireSingleLineUnderCount || jsdoc.tags.length) { + return false; + } + + let lastLineWithDesc = 0; + let exceedsLength = false; + const descLines = jsdoc.source.reduce((acc, { + tokens: { + delimiter, + description: desc, + postDelimiter, + start, + }, + }, idx) => { + if (desc.length) { + lastLineWithDesc = idx; + if ( + start.length + delimiter.length + postDelimiter.length + desc.length < + requireSingleLineUnderCount + ) { + exceedsLength = true; + } + + return acc + 1; + } + + return acc; + }, 0); + // Could be descLines > 1 + if (exceedsLength && descLines === 1) { + const fixer = () => { + const desc = jsdoc.source[lastLineWithDesc].tokens.description; + jsdoc.source = [ + { + number: 0, + source: '', + tokens: utils.seedTokens({ + delimiter: '/**', + description: desc.trimEnd() + ' ', + end: '*/', + postDelimiter: ' ', + start: jsdoc.source[0].tokens.start, + }), + }, + ]; + }; + + utils.reportJSDoc( + 'Description is too short to be multi-line.', + null, + fixer, + ); + return true; + } + + return false; +}; + export default iterateJsdoc(({ context, jsdoc, @@ -15,6 +161,7 @@ export default iterateJsdoc(({ noMultilineBlocks = false, noSingleLineBlocks = false, noZeroLineText = true, + requireSingleLineUnderCount = null, singleLineTags = [ 'lends', 'type', ], @@ -62,6 +209,16 @@ export default iterateJsdoc(({ return; } + if (checkForShortDescriptions(jsdoc, utils, requireSingleLineUnderCount) + ) { + return; + } + + if (checkForShortTags(jsdoc, utils, requireSingleLineUnderCount) + ) { + return; + } + const lineChecks = () => { if ( noZeroLineText && @@ -318,6 +475,9 @@ export default iterateJsdoc(({ noZeroLineText: { type: 'boolean', }, + requireSingleLineUnderCount: { + type: 'number', + }, singleLineTags: { items: { type: 'string', diff --git a/test/rules/assertions/multilineBlocks.js b/test/rules/assertions/multilineBlocks.js index eae189420..cd7288c4e 100644 --- a/test/rules/assertions/multilineBlocks.js +++ b/test/rules/assertions/multilineBlocks.js @@ -619,6 +619,128 @@ export default /** @type {import('../index.js').TestCases} */ ({ */ `, }, + { + code: ` + /** + * Description too short + */ + `, + errors: [ + { + line: 2, + message: 'Description is too short to be multi-line.', + }, + ], + options: [ + { + requireSingleLineUnderCount: 80, + }, + ], + output: ` + /** Description too short */ + `, + }, + { + code: ` + /** Description too short + */ + `, + errors: [ + { + line: 2, + message: 'Description is too short to be multi-line.', + }, + ], + options: [ + { + requireSingleLineUnderCount: 80, + }, + ], + output: ` + /** Description too short */ + `, + }, + { + code: ` + /** + * Description too short */ + `, + errors: [ + { + line: 2, + message: 'Description is too short to be multi-line.', + }, + ], + options: [ + { + requireSingleLineUnderCount: 80, + }, + ], + output: ` + /** Description too short */ + `, + }, + { + code: ` + /** + * @someTag {someType} Description too short + */ + `, + errors: [ + { + line: 2, + message: 'Description is too short to be multi-line.', + }, + ], + options: [ + { + requireSingleLineUnderCount: 80, + }, + ], + output: ` + /** @someTag {someType} Description too short */ + `, + }, + { + code: ` + /** @someTag {someType} Description too short + */ + `, + errors: [ + { + line: 2, + message: 'Description is too short to be multi-line.', + }, + ], + options: [ + { + requireSingleLineUnderCount: 80, + }, + ], + output: ` + /** @someTag {someType} Description too short */ + `, + }, + { + code: ` + /** + * @someTag {someType} Description too short */ + `, + errors: [ + { + line: 2, + message: 'Description is too short to be multi-line.', + }, + ], + options: [ + { + requireSingleLineUnderCount: 80, + }, + ], + output: ` + /** @someTag {someType} Description too short */ + `, + }, ], valid: [ { @@ -895,5 +1017,88 @@ export default /** @type {import('../index.js').TestCases} */ ({ }, ], }, + { + code: ` + /** + * This description here is very much long enough, I'd say, wouldn't you? + */ +`, + options: [ + { + requireSingleLineUnderCount: 80, + }, + ], + }, + { + code: ` + /** + * This description here is + * on multiple lines. + */ +`, + options: [ + { + requireSingleLineUnderCount: 80, + }, + ], + }, + { + code: ` + /** This description here is on a single line, so it doesn't matter if it goes over. */ +`, + options: [ + { + requireSingleLineUnderCount: 80, + }, + ], + }, + { + code: ` + /** + * @someTag {someType} This description here is very much long enough, I'd say, wouldn't you? + */ +`, + options: [ + { + requireSingleLineUnderCount: 80, + }, + ], + }, + { + code: ` + /** + * @someTag {someType} This description here is + * on multiple lines. + */ +`, + options: [ + { + requireSingleLineUnderCount: 80, + }, + ], + }, + { + code: ` + /** @someTag {someTag} This description here is on a single line, so it doesn't matter if it goes over. */ +`, + options: [ + { + requireSingleLineUnderCount: 80, + }, + ], + }, + { + code: ` + /** + * Description short but has... + * @someTag + */ + `, + options: [ + { + requireSingleLineUnderCount: 80, + }, + ], + }, ], }); From 3748bbeb3d2ec3519ad7191e597843c9bc935c63 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Mon, 30 Jun 2025 09:12:41 +0800 Subject: [PATCH 019/189] fix(`no-undefined-types`): check class and interface globals; fixes #1420 (#1421) --- docs/rules/no-undefined-types.md | 18 ++++++++ src/rules/noUndefinedTypes.js | 56 +++++++++++++++++------ test/rules/assertions/noUndefinedTypes.js | 27 +++++++++++ 3 files changed, 88 insertions(+), 13 deletions(-) diff --git a/docs/rules/no-undefined-types.md b/docs/rules/no-undefined-types.md index 7a7400cc9..b5e9d348b 100644 --- a/docs/rules/no-undefined-types.md +++ b/docs/rules/no-undefined-types.md @@ -971,5 +971,23 @@ export default [ * @type {Abc['def']} */ export const a = 'someString'; + +export interface SomeInterface { + someProp: unknown; +} + +/** + * {@link SomeInterface.someProp} + * @returns something + */ + +class SomeClass { + someMethod () {} +} + +/** + * {@link SomeClass.someMethod} + * @returns something + */ ```` diff --git a/src/rules/noUndefinedTypes.js b/src/rules/noUndefinedTypes.js index afbc8aadd..83c539eee 100644 --- a/src/rules/noUndefinedTypes.js +++ b/src/rules/noUndefinedTypes.js @@ -269,24 +269,54 @@ export default iterateJsdoc(({ variables, }) => { return variables; - }).map(({ + }).flatMap(({ identifiers, name, }) => { - if ( - [ - 'ImportDefaultSpecifier', - 'ImportNamespaceSpecifier', - 'ImportSpecifier', - ].includes( - /** @type {import('estree').Identifier & {parent: {type: string}}} */ ( - identifiers?.[0])?.parent?.type, - ) - ) { - imports.push(name); + const globalItem = /** @type {import('estree').Identifier & {parent: import('@typescript-eslint/types').TSESTree.Node}} */ ( + identifiers?.[0] + )?.parent; + switch (globalItem?.type) { + case 'ClassDeclaration': + return [ + name, + ...globalItem.body.body.map((item) => { + const property = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ ( + /** @type {import('@typescript-eslint/types').TSESTree.PropertyDefinition} */ ( + item)?.key)?.name; + /* c8 ignore next 3 -- Guard */ + if (!property) { + return ''; + } + + return `${name}.${property}`; + }).filter(Boolean), + ]; + case 'ImportDefaultSpecifier': + case 'ImportNamespaceSpecifier': + case 'ImportSpecifier': + imports.push(name); + break; + case 'TSInterfaceDeclaration': + return [ + name, + ...globalItem.body.body.map((item) => { + const property = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ ( + /** @type {import('@typescript-eslint/types').TSESTree.TSPropertySignature} */ ( + item)?.key)?.name; + /* c8 ignore next 3 -- Guard */ + if (!property) { + return ''; + } + + return `${name}.${property}`; + }).filter(Boolean), + ]; } - return name; + return [ + name, + ]; /* c8 ignore next */ }) : [], ) diff --git a/test/rules/assertions/noUndefinedTypes.js b/test/rules/assertions/noUndefinedTypes.js index 3aeefb6d6..14dc26d0d 100644 --- a/test/rules/assertions/noUndefinedTypes.js +++ b/test/rules/assertions/noUndefinedTypes.js @@ -1692,5 +1692,32 @@ export default /** @type {import('../index.js').TestCases} */ ({ `, }, + { + code: ` + export interface SomeInterface { + someProp: unknown; + } + + /** + * {@link SomeInterface.someProp} + * @returns something + */ + `, + languageOptions: { + parser: typescriptEslintParser, + }, + }, + { + code: ` + class SomeClass { + someMethod () {} + } + + /** + * {@link SomeClass.someMethod} + * @returns something + */ + `, + }, ], }); From 9b8efbd21f95d3727c540bc6d04c34b723c5f7a1 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Wed, 2 Jul 2025 08:28:28 +0800 Subject: [PATCH 020/189] fix(`multiline-blocks`): for `requireSingleLineUnderCount`, ensure multi-line types nullify checks (#1422) --- .README/rules/multiline-blocks.md | 8 +++--- docs/rules/multiline-blocks.md | 25 ++++++++++++++++--- src/rules/multilineBlocks.js | 18 +++++++------- test/rules/assertions/multilineBlocks.js | 31 ++++++++++++++++++++++++ 4 files changed, 67 insertions(+), 15 deletions(-) diff --git a/.README/rules/multiline-blocks.md b/.README/rules/multiline-blocks.md index 9d71e323d..66e837827 100644 --- a/.README/rules/multiline-blocks.md +++ b/.README/rules/multiline-blocks.md @@ -41,9 +41,11 @@ are whitelisted in `singleLineTags`. ### `requireSingleLineUnderCount` (defaults to `null`) If this number is set, it indicates a minimum line width for a single line of -JSDoc content spread over a multi-line comment block. If a line is under the -minimum length, it will be reported so as to enforce single line JSDoc blocks -for such cases. +JSDoc content spread over a multi-line comment block. If a single line is under +the minimum length, it will be reported so as to enforce single line JSDoc blocks +for such cases. Blocks are not reported which have multi-line descriptions, +multiple tags, a block description and tag, or tags with multi-line types or +descriptions. ### `singleLineTags` (defaults to `['lends', 'type']`) diff --git a/docs/rules/multiline-blocks.md b/docs/rules/multiline-blocks.md index 9c3a23072..c3a7527a7 100644 --- a/docs/rules/multiline-blocks.md +++ b/docs/rules/multiline-blocks.md @@ -55,9 +55,11 @@ are whitelisted in `singleLineTags`. ### requireSingleLineUnderCount (defaults to null) If this number is set, it indicates a minimum line width for a single line of -JSDoc content spread over a multi-line comment block. If a line is under the -minimum length, it will be reported so as to enforce single line JSDoc blocks -for such cases. +JSDoc content spread over a multi-line comment block. If a single line is under +the minimum length, it will be reported so as to enforce single line JSDoc blocks +for such cases. Blocks are not reported which have multi-line descriptions, +multiple tags, a block description and tag, or tags with multi-line types or +descriptions. @@ -469,5 +471,22 @@ The following patterns are not considered problems: * @someTag */ // "jsdoc/multiline-blocks": ["error"|"warn", {"requireSingleLineUnderCount":80}] + +/** + * @someTag + * @anotherTag + */ +// "jsdoc/multiline-blocks": ["error"|"warn", {"requireSingleLineUnderCount":80}] + +/** + * @type {{ + visible: import("vue").Ref, + attack: import("vue").Ref, + hero: import("vue").Ref, + outpost: import("vue").Ref, + rewards: import("vue").Ref +* }} +*/ +// "jsdoc/multiline-blocks": ["error"|"warn", {"requireSingleLineUnderCount":120}] ```` diff --git a/src/rules/multilineBlocks.js b/src/rules/multilineBlocks.js index 223dece31..a35bc05bb 100644 --- a/src/rules/multilineBlocks.js +++ b/src/rules/multilineBlocks.js @@ -11,8 +11,8 @@ const checkForShortTags = (jsdoc, utils, requireSingleLineUnderCount) => { } let lastLineWithTag = 0; - let exceedsLength = false; - let hasDesc = false; + let isUnderCountLimit = false; + let hasMultiDescOrType = false; const tagLines = jsdoc.source.reduce((acc, { tokens: { delimiter, @@ -35,19 +35,19 @@ const checkForShortTags = (jsdoc, utils, requireSingleLineUnderCount) => { tag.length + postTag.length + desc.length < requireSingleLineUnderCount ) { - exceedsLength = true; + isUnderCountLimit = true; } return acc + 1; - } else if (desc.length) { - hasDesc = true; + } else if (desc.length || type.length) { + hasMultiDescOrType = true; return acc; } return acc; }, 0); // Could be tagLines > 1 - if (!hasDesc && exceedsLength && tagLines === 1) { + if (!hasMultiDescOrType && isUnderCountLimit && tagLines === 1) { const fixer = () => { const tokens = jsdoc.source[lastLineWithTag].tokens; jsdoc.source = [ @@ -93,7 +93,7 @@ const checkForShortDescriptions = (jsdoc, utils, requireSingleLineUnderCount) => } let lastLineWithDesc = 0; - let exceedsLength = false; + let isUnderCountLimit = false; const descLines = jsdoc.source.reduce((acc, { tokens: { delimiter, @@ -108,7 +108,7 @@ const checkForShortDescriptions = (jsdoc, utils, requireSingleLineUnderCount) => start.length + delimiter.length + postDelimiter.length + desc.length < requireSingleLineUnderCount ) { - exceedsLength = true; + isUnderCountLimit = true; } return acc + 1; @@ -117,7 +117,7 @@ const checkForShortDescriptions = (jsdoc, utils, requireSingleLineUnderCount) => return acc; }, 0); // Could be descLines > 1 - if (exceedsLength && descLines === 1) { + if (isUnderCountLimit && descLines === 1) { const fixer = () => { const desc = jsdoc.source[lastLineWithDesc].tokens.description; jsdoc.source = [ diff --git a/test/rules/assertions/multilineBlocks.js b/test/rules/assertions/multilineBlocks.js index cd7288c4e..b133e7b3b 100644 --- a/test/rules/assertions/multilineBlocks.js +++ b/test/rules/assertions/multilineBlocks.js @@ -1100,5 +1100,36 @@ export default /** @type {import('../index.js').TestCases} */ ({ }, ], }, + { + code: ` + /** + * @someTag + * @anotherTag + */ + `, + options: [ + { + requireSingleLineUnderCount: 80, + }, + ], + }, + { + code: ` + /** + * @type {{ + visible: import("vue").Ref, + attack: import("vue").Ref, + hero: import("vue").Ref, + outpost: import("vue").Ref, + rewards: import("vue").Ref + * }} + */ + `, + options: [ + { + requireSingleLineUnderCount: 120, + }, + ], + }, ], }); From feb65e4e845e3f3126b6cadb8b2d970f06a68b53 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Wed, 2 Jul 2025 21:01:17 +0800 Subject: [PATCH 021/189] fix(`no-undefined-types`): add `Intl` to global types and ensure arbitrary properties of globals can be addressed; fixes #1423 (#1424) --- docs/rules/no-undefined-types.md | 7 +++++++ src/rules/noUndefinedTypes.js | 3 ++- test/rules/assertions/noUndefinedTypes.js | 10 ++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/docs/rules/no-undefined-types.md b/docs/rules/no-undefined-types.md index b5e9d348b..aec5806b4 100644 --- a/docs/rules/no-undefined-types.md +++ b/docs/rules/no-undefined-types.md @@ -989,5 +989,12 @@ class SomeClass { * {@link SomeClass.someMethod} * @returns something */ + +/** + * The internationalized collator object that will be used. + * Intl.Collator(null, {numeric: true, sensitivity: 'base'}) is used by default;. + * + * @member {Intl.Collator} + */ ```` diff --git a/src/rules/noUndefinedTypes.js b/src/rules/noUndefinedTypes.js index 83c539eee..9bafc495a 100644 --- a/src/rules/noUndefinedTypes.js +++ b/src/rules/noUndefinedTypes.js @@ -17,7 +17,7 @@ const extraTypes = [ 'number', 'bigint', 'NaN', 'Infinity', 'any', '*', 'never', 'unknown', 'const', 'this', 'true', 'false', - 'Array', 'Object', 'RegExp', 'Date', 'Function', + 'Array', 'Object', 'RegExp', 'Date', 'Function', 'Intl', ]; const typescriptGlobals = [ @@ -471,6 +471,7 @@ export default iterateJsdoc(({ // check their properties which may or may not exist !imports.includes(val) && !globals.includes(val) && !importTags.includes(val) && + !extraTypes.includes(val) && !typedefDeclarations.includes(val) && currNode && 'right' in currNode && currNode.right?.type === 'JsdocTypeProperty') { diff --git a/test/rules/assertions/noUndefinedTypes.js b/test/rules/assertions/noUndefinedTypes.js index 14dc26d0d..88b98472b 100644 --- a/test/rules/assertions/noUndefinedTypes.js +++ b/test/rules/assertions/noUndefinedTypes.js @@ -1719,5 +1719,15 @@ export default /** @type {import('../index.js').TestCases} */ ({ */ `, }, + { + code: ` + /** + * The internationalized collator object that will be used. + * Intl.Collator(null, {numeric: true, sensitivity: 'base'}) is used by default;. + * + * @member {Intl.Collator} + */ + `, + }, ], }); From c51ee4fe552041dad94dc6dc7e67255cba1b1d2f Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Mon, 7 Jul 2025 17:03:20 +0800 Subject: [PATCH 022/189] fix(`no-undefined-types`): exempt global requires from undefined property checks; fixes #1425 (#1426) --- docs/rules/no-undefined-types.md | 8 ++++++++ src/rules/noUndefinedTypes.js | 13 +++++++++++++ test/rules/assertions/noUndefinedTypes.js | 11 +++++++++++ 3 files changed, 32 insertions(+) diff --git a/docs/rules/no-undefined-types.md b/docs/rules/no-undefined-types.md index aec5806b4..6f7c7840f 100644 --- a/docs/rules/no-undefined-types.md +++ b/docs/rules/no-undefined-types.md @@ -996,5 +996,13 @@ class SomeClass { * * @member {Intl.Collator} */ + +const otherFile = require('./other-file'); + +/** + * A function + * @param {otherFile.MyType} a + */ +function f(a) {} ```` diff --git a/src/rules/noUndefinedTypes.js b/src/rules/noUndefinedTypes.js index 9bafc495a..89975432b 100644 --- a/src/rules/noUndefinedTypes.js +++ b/src/rules/noUndefinedTypes.js @@ -312,6 +312,19 @@ export default iterateJsdoc(({ return `${name}.${property}`; }).filter(Boolean), ]; + case 'VariableDeclarator': + if (/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ ( + /** @type {import('@typescript-eslint/types').TSESTree.CallExpression} */ ( + globalItem?.init + )?.callee)?.name === 'require' + ) { + imports.push(/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ ( + globalItem.id + ).name); + break; + } + + return []; } return [ diff --git a/test/rules/assertions/noUndefinedTypes.js b/test/rules/assertions/noUndefinedTypes.js index 88b98472b..c86bcf92e 100644 --- a/test/rules/assertions/noUndefinedTypes.js +++ b/test/rules/assertions/noUndefinedTypes.js @@ -1729,5 +1729,16 @@ export default /** @type {import('../index.js').TestCases} */ ({ */ `, }, + { + code: ` + const otherFile = require('./other-file'); + + /** + * A function + * @param {otherFile.MyType} a + */ + function f(a) {} + `, + }, ], }); From 4c65cbe36ca0984b94dde81923562532ed2998df Mon Sep 17 00:00:00 2001 From: Remco Haszing Date: Tue, 15 Jul 2025 16:44:08 +0200 Subject: [PATCH 023/189] feat(`check-line-alignment`): add `template` to default tags (#1427) * feat(`check-line-alignment`): add `template` to default tags The `@template` tag annotates TypeScript type arguments. It make sense to treat it the same as `@param`. * docs(`check-line-alignment`): document template tag * docs(`check-line-alignment`): add `template` tag --- .README/rules/check-line-alignment.md | 2 +- docs/rules/check-line-alignment.md | 3 +-- src/rules/checkLineAlignment.js | 2 +- test/rules/assertions/checkLineAlignment.js | 30 +++++++++++++++++++++ 4 files changed, 33 insertions(+), 4 deletions(-) diff --git a/.README/rules/check-line-alignment.md b/.README/rules/check-line-alignment.md index 6d233e317..aa9ffe30a 100644 --- a/.README/rules/check-line-alignment.md +++ b/.README/rules/check-line-alignment.md @@ -25,7 +25,7 @@ After the string, an options object is allowed with the following properties. ### `tags` Use this to change the tags which are sought for alignment changes. Defaults to an array of -`['param', 'arg', 'argument', 'property', 'prop', 'returns', 'return']`. +`['param', 'arg', 'argument', 'property', 'prop', 'returns', 'return', 'template']`. ### `customSpacings` diff --git a/docs/rules/check-line-alignment.md b/docs/rules/check-line-alignment.md index dc765f775..dcf133247 100644 --- a/docs/rules/check-line-alignment.md +++ b/docs/rules/check-line-alignment.md @@ -43,7 +43,7 @@ After the string, an options object is allowed with the following properties. ### tags Use this to change the tags which are sought for alignment changes. Defaults to an array of -`['param', 'arg', 'argument', 'property', 'prop', 'returns', 'return']`. +`['param', 'arg', 'argument', 'property', 'prop', 'returns', 'return', 'template']`. @@ -1014,4 +1014,3 @@ function quux () { const fn = ( lorem ) => {} // "jsdoc/check-line-alignment": ["error"|"warn", "any",{"disableWrapIndent":true,"wrapIndent":" "}] ```` - diff --git a/src/rules/checkLineAlignment.js b/src/rules/checkLineAlignment.js index cfd43ba6b..d495040a3 100644 --- a/src/rules/checkLineAlignment.js +++ b/src/rules/checkLineAlignment.js @@ -229,7 +229,7 @@ export default iterateJsdoc(({ disableWrapIndent = false, preserveMainDescriptionPostDelimiter, tags: applicableTags = [ - 'param', 'arg', 'argument', 'property', 'prop', 'returns', 'return', + 'param', 'arg', 'argument', 'property', 'prop', 'returns', 'return', 'template', ], wrapIndent = '', } = context.options[1] || {}; diff --git a/test/rules/assertions/checkLineAlignment.js b/test/rules/assertions/checkLineAlignment.js index a5309fdf4..c86ba7772 100644 --- a/test/rules/assertions/checkLineAlignment.js +++ b/test/rules/assertions/checkLineAlignment.js @@ -182,6 +182,36 @@ export default /** @type {import('../index.js').TestCases} */ ({ const fn = ( lorem, sit ) => {} `, }, + { + code: ` + /** + * Function description. + * + * @template {string} Arg Description. + * @param {Arg} arg Description + */ + function hello(arg) {} + `, + errors: [ + { + line: 2, + message: 'Expected JSDoc block lines to be aligned.', + type: 'Block', + }, + ], + options: [ + 'always', + ], + output: ` + /** + * Function description. + * + * @template {string} Arg Description. + * @param {Arg} arg Description + */ + function hello(arg) {} + `, + }, { code: ` /** From 1f015ca70a13d055b4ebd2b8638b4be35abc05ba Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 15 Jul 2025 22:49:51 +0800 Subject: [PATCH 024/189] docs: add missing docs (#1428) --- docs/rules/check-line-alignment.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/rules/check-line-alignment.md b/docs/rules/check-line-alignment.md index dcf133247..157fa2c44 100644 --- a/docs/rules/check-line-alignment.md +++ b/docs/rules/check-line-alignment.md @@ -158,6 +158,16 @@ const fn = ( lorem, sit ) => {} // "jsdoc/check-line-alignment": ["error"|"warn", "always"] // Message: Expected JSDoc block lines to be aligned. +/** + * Function description. + * + * @template {string} Arg Description. + * @param {Arg} arg Description + */ +function hello(arg) {} +// "jsdoc/check-line-alignment": ["error"|"warn", "always"] +// Message: Expected JSDoc block lines to be aligned. + /** * Function description. * @@ -1014,3 +1024,4 @@ function quux () { const fn = ( lorem ) => {} // "jsdoc/check-line-alignment": ["error"|"warn", "any",{"disableWrapIndent":true,"wrapIndent":" "}] ```` + From b462e4435fc1d71fb70cbcf63874b2ad642987f6 Mon Sep 17 00:00:00 2001 From: Andrew Kazakov Date: Wed, 16 Jul 2025 16:25:09 +0300 Subject: [PATCH 025/189] fix: disallow extra properties in rule options (#1429) --- src/rules/matchName.js | 5 ++++- src/rules/requireAsteriskPrefix.js | 1 + src/rules/sortTags.js | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/rules/matchName.js b/src/rules/matchName.js index 06e604ef3..9fb195a9b 100644 --- a/src/rules/matchName.js +++ b/src/rules/matchName.js @@ -107,8 +107,8 @@ export default iterateJsdoc(({ additionalProperties: false, properties: { match: { - additionalProperties: false, items: { + additionalProperties: false, properties: { allowName: { type: 'string', @@ -125,6 +125,9 @@ export default iterateJsdoc(({ message: { type: 'string', }, + replacement: { + type: 'string', + }, tags: { items: { type: 'string', diff --git a/src/rules/requireAsteriskPrefix.js b/src/rules/requireAsteriskPrefix.js index 28e55cee7..94c6a1ef0 100644 --- a/src/rules/requireAsteriskPrefix.js +++ b/src/rules/requireAsteriskPrefix.js @@ -158,6 +158,7 @@ export default iterateJsdoc(({ additionalProperties: false, properties: { tags: { + additionalProperties: false, properties: { always: { items: { diff --git a/src/rules/sortTags.js b/src/rules/sortTags.js index 91903e197..f238d4186 100644 --- a/src/rules/sortTags.js +++ b/src/rules/sortTags.js @@ -536,6 +536,7 @@ export default iterateJsdoc(({ }, tagSequence: { items: { + additionalProperties: false, properties: { tags: { items: { From 5c2165c7b7d322050aa0c6754bdc2e06e5ad421e Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Mon, 28 Jul 2025 09:21:14 +0800 Subject: [PATCH 026/189] fix: use `v` flag in regexes; match emojis for sentence terminator; fixes #1433 (#1437) BREAKING CHANGE: Uses `v` flag instead of `u` flag by default for regular expressions --- .README/rules/check-examples.md | 4 +- .README/rules/check-values.md | 8 ++-- .README/rules/match-description.md | 6 +-- .README/rules/require-param.md | 6 +-- docs/rules/check-examples.md | 4 +- docs/rules/check-values.md | 8 ++-- docs/rules/match-description.md | 13 ++++-- docs/rules/match-name.md | 2 +- docs/rules/require-param.md | 6 +-- eslint.config.js | 6 +++ src/alignTransform.js | 2 +- src/bin/generateDocs.js | 14 +++---- src/bin/generateOptions.mjs | 6 +-- src/bin/generateRule.js | 10 ++--- src/getJsdocProcessorPlugin.js | 16 +++---- src/iterateJsdoc.js | 6 +-- src/jsdocUtils.js | 18 ++++---- src/rules/checkAlignment.js | 2 +- src/rules/checkExamples.js | 10 ++--- src/rules/checkIndentation.js | 12 +++--- src/rules/checkLineAlignment.js | 6 +-- src/rules/checkTagNames.js | 2 +- src/rules/checkTemplateNames.js | 2 +- src/rules/checkTypes.js | 4 +- src/rules/checkValues.js | 2 +- src/rules/emptyTags.js | 2 +- src/rules/importsAsDependencies.js | 4 +- src/rules/linesBeforeBlock.js | 2 +- src/rules/matchDescription.js | 8 ++-- src/rules/matchName.js | 2 +- src/rules/noBadBlocks.js | 4 +- src/rules/noBlankBlockDescriptions.js | 4 +- src/rules/noDefaults.js | 4 +- src/rules/noMultiAsterisks.js | 12 +++--- src/rules/noUndefinedTypes.js | 8 ++-- .../requireDescriptionCompleteSentence.js | 42 +++++++++---------- .../requireHyphenBeforeParamDescription.js | 6 +-- src/rules/requireJsdoc.js | 2 +- src/rules/requireReturnsCheck.js | 2 +- src/rules/requireTemplate.js | 4 +- src/rules/tagLines.js | 4 +- src/rules/textEscaping.js | 8 ++-- src/rules/validTypes.js | 2 +- test/getJsdocProcessPlugin.js | 4 +- test/rules/assertions/checkTagNames.js | 2 +- test/rules/assertions/matchDescription.js | 12 +++++- test/rules/assertions/matchName.js | 2 +- tsconfig-prod.json | 2 +- tsconfig.json | 2 +- 49 files changed, 169 insertions(+), 150 deletions(-) diff --git a/.README/rules/check-examples.md b/.README/rules/check-examples.md index dc8b4d5bc..022ac0c7d 100644 --- a/.README/rules/check-examples.md +++ b/.README/rules/check-examples.md @@ -37,7 +37,7 @@ syntax highlighting). The following options determine whether a given exists or matches, the whole matching expression will be used. An example might be ````"^```(?:js|javascript)([\\s\\S]*)```\s*$"```` to only match explicitly fenced JavaScript blocks. Defaults to only - using the `u` flag, so to add your own flags, encapsulate your + using the `v` flag, so to add your own flags, encapsulate your expression as a string, but like a literal, e.g., ````/```js.*```/gi````. Note that specifying a global regular expression (i.e., with `g`) will allow independent linting of matched blocks within a single `@example`. @@ -45,7 +45,7 @@ syntax highlighting). The following options determine whether a given non-lintable examples (has priority over `exampleCodeRegex`). An example might be ```"^`"``` to avoid linting fenced blocks which may indicate a non-JavaScript language. See `exampleCodeRegex` on how to add flags - if the default `u` is not sufficient. + if the default `v` is not sufficient. If neither is in use, all examples will be matched. Note also that even if `captionRequired` is not set, any initial `` will be stripped out diff --git a/.README/rules/check-values.md b/.README/rules/check-values.md index 3d08d7412..d18be7e87 100644 --- a/.README/rules/check-values.md +++ b/.README/rules/check-values.md @@ -34,16 +34,16 @@ If present as an array, will be used in place of SPDX identifiers. ### `licensePattern` -A string to be converted into a `RegExp` (with `u` flag) and whose first +A string to be converted into a `RegExp` (with `v` flag) and whose first parenthetical grouping, if present, will match the portion of the license description to check (if no grouping is present, then the whole portion -matched will be used). Defaults to `/([^\n\r]*)/gu`, i.e., the SPDX expression +matched will be used). Defaults to `/([^\n\r]*)/gv`, i.e., the SPDX expression is expected before any line breaks. Note that the `/` delimiters are optional, but necessary to add flags. -Defaults to using the `u` flag, so to add your own flags, encapsulate -your expression as a string, but like a literal, e.g., `/^mit$/ui`. +Defaults to using the `v` flag, so to add your own flags, encapsulate +your expression as a string, but like a literal, e.g., `/^mit$/vi`. ### `numericOnlyVariation` diff --git a/.README/rules/match-description.md b/.README/rules/match-description.md index 69c71db9f..4bbb44c9c 100644 --- a/.README/rules/match-description.md +++ b/.README/rules/match-description.md @@ -8,7 +8,7 @@ The default is this basic expression to match English sentences (Support for Unicode upper case may be added in a future version when it can be handled by our supported Node versions): -``^\n?([A-Z`\\d_][\\s\\S]*[.?!`]\\s*)?$`` +``^\n?([A-Z`\\d_][\\s\\S]*[.?!`\\p{RGI_Emoji}]\\s*)?$`` Applies by default to the jsdoc block description and to the following tags: @@ -19,9 +19,9 @@ Applies by default to the jsdoc block description and to the following tags: In addition, the `tags` option (see below) may be used to match other tags. -The default (and all regex options) defaults to using (only) the `u` flag, so +The default (and all regex options) defaults to using (only) the `v` flag, so to add your own flags, encapsulate your expression as a string, but like a -literal, e.g., `/[A-Z].*\\./ui`. +literal, e.g., `/[A-Z].*\\./vi`. Note that `/` delimiters are optional, but necessary to add flags (besides `u`). diff --git a/.README/rules/require-param.md b/.README/rules/require-param.md index cf85459a9..978f055c2 100644 --- a/.README/rules/require-param.md +++ b/.README/rules/require-param.md @@ -307,7 +307,7 @@ export const bboxToObj = function ({x, y, width, height}) { ``` By default `checkTypesPattern` is set to -`/^(?:[oO]bject|[aA]rray|PlainObject|Generic(?:Object|Array))$/u`, +`/^(?:[oO]bject|[aA]rray|PlainObject|Generic(?:Object|Array))$/v`, meaning that destructuring will be required only if the type of the `@param` (the text between curly brackets) is a match for "Object" or "Array" (with or without initial caps), "PlainObject", or "GenericObject", "GenericArray" (or @@ -317,8 +317,8 @@ parameters. Note that the `/` delimiters are optional, but necessary to add flags. -Defaults to using (only) the `u` flag, so to add your own flags, encapsulate -your expression as a string, but like a literal, e.g., `/^object$/ui`. +Defaults to using (only) the `v` flag, so to add your own flags, encapsulate +your expression as a string, but like a literal, e.g., `/^object$/vi`. You could set this regular expression to a more expansive list, or you could restrict it such that even types matching those strings would not diff --git a/docs/rules/check-examples.md b/docs/rules/check-examples.md index eb4060dd6..a2341519e 100644 --- a/docs/rules/check-examples.md +++ b/docs/rules/check-examples.md @@ -56,7 +56,7 @@ syntax highlighting). The following options determine whether a given exists or matches, the whole matching expression will be used. An example might be ````"^```(?:js|javascript)([\\s\\S]*)```\s*$"```` to only match explicitly fenced JavaScript blocks. Defaults to only - using the `u` flag, so to add your own flags, encapsulate your + using the `v` flag, so to add your own flags, encapsulate your expression as a string, but like a literal, e.g., ````/```js.*```/gi````. Note that specifying a global regular expression (i.e., with `g`) will allow independent linting of matched blocks within a single `@example`. @@ -64,7 +64,7 @@ syntax highlighting). The following options determine whether a given non-lintable examples (has priority over `exampleCodeRegex`). An example might be ```"^`"``` to avoid linting fenced blocks which may indicate a non-JavaScript language. See `exampleCodeRegex` on how to add flags - if the default `u` is not sufficient. + if the default `v` is not sufficient. If neither is in use, all examples will be matched. Note also that even if `captionRequired` is not set, any initial `` will be stripped out diff --git a/docs/rules/check-values.md b/docs/rules/check-values.md index 80178aa8c..4d396bc55 100644 --- a/docs/rules/check-values.md +++ b/docs/rules/check-values.md @@ -52,16 +52,16 @@ If present as an array, will be used in place of SPDX identifiers. ### licensePattern -A string to be converted into a `RegExp` (with `u` flag) and whose first +A string to be converted into a `RegExp` (with `v` flag) and whose first parenthetical grouping, if present, will match the portion of the license description to check (if no grouping is present, then the whole portion -matched will be used). Defaults to `/([^\n\r]*)/gu`, i.e., the SPDX expression +matched will be used). Defaults to `/([^\n\r]*)/gv`, i.e., the SPDX expression is expected before any line breaks. Note that the `/` delimiters are optional, but necessary to add flags. -Defaults to using the `u` flag, so to add your own flags, encapsulate -your expression as a string, but like a literal, e.g., `/^mit$/ui`. +Defaults to using the `v` flag, so to add your own flags, encapsulate +your expression as a string, but like a literal, e.g., `/^mit$/vi`. diff --git a/docs/rules/match-description.md b/docs/rules/match-description.md index 665e9a210..95d532a90 100644 --- a/docs/rules/match-description.md +++ b/docs/rules/match-description.md @@ -20,7 +20,7 @@ The default is this basic expression to match English sentences (Support for Unicode upper case may be added in a future version when it can be handled by our supported Node versions): -``^\n?([A-Z`\\d_][\\s\\S]*[.?!`]\\s*)?$`` +``^\n?([A-Z`\\d_][\\s\\S]*[.?!`\\p{RGI_Emoji}]\\s*)?$`` Applies by default to the jsdoc block description and to the following tags: @@ -31,9 +31,9 @@ Applies by default to the jsdoc block description and to the following tags: In addition, the `tags` option (see below) may be used to match other tags. -The default (and all regex options) defaults to using (only) the `u` flag, so +The default (and all regex options) defaults to using (only) the `v` flag, so to add your own flags, encapsulate your expression as a string, but like a -literal, e.g., `/[A-Z].*\\./ui`. +literal, e.g., `/[A-Z].*\\./vi`. Note that `/` delimiters are optional, but necessary to add flags (besides `u`). @@ -970,7 +970,7 @@ function quux (foo) { * - the `loadScript` option is set to `true`. * @param enabled `true` to enable, `false` to disable. Default: `true`. */ -// "jsdoc/match-description": ["error"|"warn", {"contexts":["any"],"mainDescription":"/^[A-Z`-].*\\.$/us","matchDescription":"^([A-Z`-].*(\\.|:)|-\\s.*)$","tags":{"param":true,"returns":true}}] +// "jsdoc/match-description": ["error"|"warn", {"contexts":["any"],"mainDescription":"/^[A-Z`\\-].*\\.$/vs","matchDescription":"^([A-Z`\\-].*(\\.|:)|-\\s.*)$","tags":{"param":true,"returns":true}}] /** * @constructor @@ -998,5 +998,10 @@ function foo(): void; function quux () { } // "jsdoc/match-description": ["error"|"warn", {"nonemptyTags":false}] + +/** + * Example text. 🙂 + */ +export const example = () => { }; ```` diff --git a/docs/rules/match-name.md b/docs/rules/match-name.md index 8c223f7e0..bce9b3e04 100644 --- a/docs/rules/match-name.md +++ b/docs/rules/match-name.md @@ -183,7 +183,7 @@ function quux () {} * @template */ // "jsdoc/match-name": ["error"|"warn", {"match":[{"disallowName":"/^$/","tags":["template"]}]}] -// Message: Only allowing names not matching `/^$/u` but found "". +// Message: Only allowing names not matching `/^$/v` but found "". ```` diff --git a/docs/rules/require-param.md b/docs/rules/require-param.md index 402085c2b..84d3dcb8e 100644 --- a/docs/rules/require-param.md +++ b/docs/rules/require-param.md @@ -362,7 +362,7 @@ export const bboxToObj = function ({x, y, width, height}) { ``` By default `checkTypesPattern` is set to -`/^(?:[oO]bject|[aA]rray|PlainObject|Generic(?:Object|Array))$/u`, +`/^(?:[oO]bject|[aA]rray|PlainObject|Generic(?:Object|Array))$/v`, meaning that destructuring will be required only if the type of the `@param` (the text between curly brackets) is a match for "Object" or "Array" (with or without initial caps), "PlainObject", or "GenericObject", "GenericArray" (or @@ -372,8 +372,8 @@ parameters. Note that the `/` delimiters are optional, but necessary to add flags. -Defaults to using (only) the `u` flag, so to add your own flags, encapsulate -your expression as a string, but like a literal, e.g., `/^object$/ui`. +Defaults to using (only) the `v` flag, so to add your own flags, encapsulate +your expression as a string, but like a literal, e.g., `/^object$/vi`. You could set this regular expression to a more expansive list, or you could restrict it such that even types matching those strings would not diff --git a/eslint.config.js b/eslint.config.js index 3ddd7738e..55b37e3e7 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -39,6 +39,12 @@ export default [ 'linebreak-style': 0, 'no-inline-comments': 0, 'prefer-named-capture-group': 0, + 'require-unicode-regexp': [ + 'error', + { + requireFlag: 'v', + }, + ], 'unicorn/import-index': 0, 'unicorn/no-array-reduce': 0, 'unicorn/no-unsafe-regex': 0, diff --git a/src/alignTransform.js b/src/alignTransform.js index ead598990..541832b18 100644 --- a/src/alignTransform.js +++ b/src/alignTransform.js @@ -308,7 +308,7 @@ const alignTransform = ({ } const postHyphenSpacing = customSpacings?.postHyphen ?? 1; - const hyphenSpacing = /^\s*-\s+/u; + const hyphenSpacing = /^\s*-\s+/v; tokens.description = tokens.description.replace( hyphenSpacing, '-' + ''.padStart(postHyphenSpacing, ' '), ); diff --git a/src/bin/generateDocs.js b/src/bin/generateDocs.js index b7c14cafb..6b00304a6 100644 --- a/src/bin/generateDocs.js +++ b/src/bin/generateDocs.js @@ -16,10 +16,10 @@ const dirname = import.meta.dirname; * @returns {string} */ const trimCode = (code) => { - let lines = code.replace(/^\n/u, '').trimEnd().split('\n'); + let lines = code.replace(/^\n/v, '').trimEnd().split('\n'); - const firsLineIndentation = lines[0].match(/^\s+/u); - const lastLineIndentation = lines[lines.length - 1].match(/^\s+/u); + const firsLineIndentation = lines[0].match(/^\s+/v); + const lastLineIndentation = lines[lines.length - 1].match(/^\s+/v); const firstIndentSize = firsLineIndentation ? firsLineIndentation[0].length : 0; const lastIndentSize = lastLineIndentation ? lastLineIndentation[0].length : 0; @@ -117,7 +117,7 @@ const getSomeBranch = () => { const gitConfig = fs.readFileSync(path.join(dirname, '../../.git/config')).toString(); const [ , branch, - ] = /\[branch "([^"]+)"\]/u.exec(gitConfig) || []; + ] = /\[branch "([^"]+)"\]/v.exec(gitConfig) || []; return branch; }; @@ -164,7 +164,7 @@ const generateDocs = async () => { return docContents.map((docContent) => { return docContent.replaceAll( - //gui, + //gvi, /** * @param {string} _assertionsBlock * @param {string} passingFailing @@ -218,8 +218,8 @@ const getDocPaths = () => { return fs.readdirSync(innerBasePath).map((innerDocFile) => { return path.join(writeInnerBasePath, innerDocFile); }).sort((a, b) => { - const newA = a.replace(/\.md/u, ''); - const newB = b.replace(/\.md/u, ''); + const newA = a.replace(/\.md/v, ''); + const newB = b.replace(/\.md/v, ''); return newA < newB ? -1 : (newB > newA ? 1 : 0); }); } diff --git a/src/bin/generateOptions.mjs b/src/bin/generateOptions.mjs index b906b1068..e8eac19bd 100644 --- a/src/bin/generateOptions.mjs +++ b/src/bin/generateOptions.mjs @@ -27,7 +27,7 @@ for (const file of dirContents) { const fileContents = await readFile(join(rulesDir, file), 'utf8'); // console.log('file', file); const ast = parse(fileContents, { - ecmaVersion: 2_022, + ecmaVersion: 2_024, sourceType: 'module', }); const results = esquery.query( @@ -69,11 +69,11 @@ for (const file of dirContents) { const hyphenatedRule = decamelize(file, { separator: '-', - }).replace(/\.js$/u, '.md'); + }).replace(/\.js$/v, '.md'); const docPath = join('.README/rules', hyphenatedRule); const ruleDocs = (await readFile(docPath, 'utf8')) - .replace(/(\|\s*Options\s*\|)([^|]*)(\|)?/u, `$1${ + .replace(/(\|\s*Options\s*\|)([^\|]*)(\|)?/v, `$1${ initial + Object.keys(obj.properties).map((key) => { return `\`${key}\``; diff --git a/src/bin/generateRule.js b/src/bin/generateRule.js index 1b87ac8b7..f3a5f63f9 100644 --- a/src/bin/generateRule.js +++ b/src/bin/generateRule.js @@ -33,7 +33,7 @@ const recommended = options.includes('--recommended'); return; } - if ((/[A-Z]/u).test(ruleName)) { + if ((/[A-Z]/v).test(ruleName)) { console.error('Please ensure the rule has no capital letters'); return; @@ -241,7 +241,7 @@ export default iterateJsdoc(({ // await replaceInOrder({ // checkName: 'README', // newLine: `{"gitdown": "include", "file": "./rules/${ruleName}.md"}`, - // oldRegex: /\n\{"gitdown": "include", "file": ".\/rules\/(?[^.]*).md"\}/gu, + // oldRegex: /\n\{"gitdown": "include", "file": ".\/rules\/(?[^.]*).md"\}/gv, // path: './.README/README.md', // }); @@ -249,21 +249,21 @@ export default iterateJsdoc(({ checkName: 'index import', newLine: `import ${camelCasedRuleName} from './rules/${camelCasedRuleName}.js';`, oldIsCamel: true, - oldRegex: /\nimport (?[^ ]*) from '.\/rules\/\1\.js';/gu, + oldRegex: /\nimport (?[^ ]*) from '.\/rules\/\1\.js';/gv, path: './src/index.js', }); await replaceInOrder({ checkName: 'index recommended', newLine: `${' '.repeat(6)}'jsdoc/${ruleName}': ${recommended ? 'warnOrError' : '\'off\''},`, - oldRegex: /\n\s{6}'jsdoc\/(?[^']*)': .*?,/gu, + oldRegex: /\n\s{6}'jsdoc\/(?[^']*)': .*?,/gv, path: './src/index.js', }); await replaceInOrder({ checkName: 'index rules', newLine: `${' '.repeat(4)}'${ruleName}': ${camelCasedRuleName},`, - oldRegex: /\n\s{4}'(?[^']*)': [^,]*,/gu, + oldRegex: /\n\s{4}'(?[^']*)': [^,]*,/gv, path: './src/index.js', }); diff --git a/src/getJsdocProcessorPlugin.js b/src/getJsdocProcessorPlugin.js index 2c33acbdd..fa45dd4d1 100644 --- a/src/getJsdocProcessorPlugin.js +++ b/src/getJsdocProcessorPlugin.js @@ -30,14 +30,14 @@ const preTagSpaceLength = 1; // If a space is present, we should ignore it const firstLinePrefixLength = preTagSpaceLength; -const hasCaptionRegex = /^\s*([\s\S]*?)<\/caption>/u; +const hasCaptionRegex = /^\s*([\s\S]*?)<\/caption>/v; /** * @param {string} str * @returns {string} */ const escapeStringRegexp = (str) => { - return str.replaceAll(/[.*+?^${}()|[\]\\]/gu, '\\$&'); + return str.replaceAll(/[.*+?^$\{\}\(\)\|\[\]\\]/gv, '\\$&'); }; /** @@ -46,7 +46,7 @@ const escapeStringRegexp = (str) => { * @returns {import('./iterateJsdoc.js').Integer} */ const countChars = (str, ch) => { - return (str.match(new RegExp(escapeStringRegexp(ch), 'gu')) || []).length; + return (str.match(new RegExp(escapeStringRegexp(ch), 'gv')) || []).length; }; /** @@ -221,7 +221,7 @@ export const getJsdocProcessorPlugin = (options = {}) => { string, }) { const src = paddedIndent ? - string.replaceAll(new RegExp(`(^|\n) {${paddedIndent}}(?!$)`, 'gu'), '\n') : + string.replaceAll(new RegExp(`(^|\n) {${paddedIndent}}(?!$)`, 'gv'), '\n') : string; // Programmatic ESLint API: https://eslint.org/docs/developer-guide/nodejs-api @@ -274,7 +274,7 @@ export const getJsdocProcessorPlugin = (options = {}) => { let defaultFileName; if (!filename) { if (typeof jsFileName === 'string' && jsFileName.includes('.')) { - defaultFileName = jsFileName.replace(/\.[^.]*$/u, `.${ext}`); + defaultFileName = jsFileName.replace(/\.[^.]*$/v, `.${ext}`); } else { defaultFileName = `dummy.${ext}`; } @@ -376,7 +376,7 @@ export const getJsdocProcessorPlugin = (options = {}) => { // If `allowedLanguagesToProcess` is falsy, all languages should be processed. if (allowedLanguagesToProcess) { - const matches = (/^\s*```(?\S+)([\s\S]*)```\s*$/u).exec(source); + const matches = (/^\s*```(?\S+)([\s\S]*)```\s*$/v).exec(source); if (matches?.groups && !allowedLanguagesToProcess.includes( matches.groups.language.toLowerCase(), )) { @@ -602,7 +602,7 @@ export const getJsdocProcessorPlugin = (options = {}) => { */ (ast).comments ).filter((comment) => { - return (/^\*\s/u).test(comment.value); + return (/^\*\s/v).test(comment.value); }).map((comment) => { const [ start, @@ -615,7 +615,7 @@ export const getJsdocProcessorPlugin = (options = {}) => { cols, ] = getLinesCols(textToStart); - // const lines = [...textToStart.matchAll(/\n/gu)].length + // const lines = [...textToStart.matchAll(/\n/gv)].length // const lastLinePos = textToStart.lastIndexOf('\n'); // const cols = lastLinePos === -1 // ? 0 diff --git a/src/iterateJsdoc.js b/src/iterateJsdoc.js index fbbdafead..728488b3d 100644 --- a/src/iterateJsdoc.js +++ b/src/iterateJsdoc.js @@ -756,7 +756,7 @@ const getUtils = ( const text = sourceCode.getText(); const lastLineBreakPos = text.slice( 0, jsdocNode.range[0], - ).search(/\n[ \t]*$/u); + ).search(/\n[ \t]*$/v); if (lastLineBreakPos > -1) { return fixer.removeRange([ lastLineBreakPos, jsdocNode.range[1], @@ -764,7 +764,7 @@ const getUtils = ( } return fixer.removeRange( - (/\s/u).test(text.charAt(jsdocNode.range[1])) ? + (/\s/v).test(text.charAt(jsdocNode.range[1])) ? [ jsdocNode.range[0], jsdocNode.range[1] + 1, ] : @@ -2118,7 +2118,7 @@ const iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveCommentContext const utils = getBasicUtils(context, /** @type {Settings} */ (settings)); for (const jsdocNode of jsdocNodes) { const jsdocNde = /** @type {unknown} */ (jsdocNode); - if (!(/^\/\*\*\s/u).test(sourceCode.getText( + if (!(/^\/\*\*\s/v).test(sourceCode.getText( /** @type {import('estree').Node} */ (jsdocNde), ))) { diff --git a/src/jsdocUtils.js b/src/jsdocUtils.js index 2f6e66e78..bbada743d 100644 --- a/src/jsdocUtils.js +++ b/src/jsdocUtils.js @@ -647,12 +647,12 @@ const getPreferredTagNameSimple = ( value, ]) => { return [ - key.replace(/^tag /u, ''), value, + key.replace(/^tag /v, ''), value, ]; }), ); - if (Object.prototype.hasOwnProperty.call(tagPreferenceFixed, name)) { + if (Object.hasOwn(tagPreferenceFixed, name)) { return tagPreferenceFixed[name]; } @@ -1480,7 +1480,7 @@ const hasThrowValue = (node, innerFunction) => { */ /* const isInlineTag = (tag) => { - return /^(@link|@linkcode|@linkplain|@tutorial) /u.test(tag); + return /^(@link|@linkcode|@linkplain|@tutorial) /v.test(tag); }; */ @@ -1495,7 +1495,7 @@ const parseClosureTemplateTag = (tag) => { return tag.name .split(',') .map((type) => { - return type.trim().replace(/^\[?(?.*?)=.*$/u, '$'); + return type.trim().replace(/^\[?(?.*?)=.*$/v, '$'); }); }; @@ -1649,7 +1649,7 @@ const getTagsByType = (context, mode, tags) => { * @returns {string} */ const getIndent = (sourceCode) => { - return (sourceCode.text.match(/^\n*([ \t]+)/u)?.[1] ?? '') + ' '; + return (sourceCode.text.match(/^\n*([ \t]+)/v)?.[1] ?? '') + ' '; }; /** @@ -1789,7 +1789,7 @@ const exemptSpeciaMethods = (jsdoc, node, context, schema) => { * @returns {string} */ const dropPathSegmentQuotes = (str) => { - return str.replaceAll(/\.(['"])(.*)\1/gu, '.$2'); + return str.replaceAll(/\.(['"])(.*)\1/gv, '.$2'); }; /** @@ -1822,8 +1822,8 @@ const pathDoesNotBeginWith = (name, otherPathName) => { * @returns {RegExp} */ const getRegexFromString = (regexString, requiredFlags) => { - const match = regexString.match(/^\/(.*)\/([gimyus]*)$/us); - let flags = 'u'; + const match = regexString.match(/^\/(.*)\/([gimyvus]*)$/vs); + let flags = 'v'; let regex = regexString; if (match) { [ @@ -1831,7 +1831,7 @@ const getRegexFromString = (regexString, requiredFlags) => { flags, ] = match; if (!flags) { - flags = 'u'; + flags = 'v'; } } diff --git a/src/rules/checkAlignment.js b/src/rules/checkAlignment.js index 316159fe6..dafd3c1ee 100644 --- a/src/rules/checkAlignment.js +++ b/src/rules/checkAlignment.js @@ -5,7 +5,7 @@ import iterateJsdoc from '../iterateJsdoc.js'; * @returns {string} */ const trimStart = (string) => { - return string.replace(/^\s+/u, ''); + return string.replace(/^\s+/v, ''); }; export default iterateJsdoc(({ diff --git a/src/rules/checkExamples.js b/src/rules/checkExamples.js index 41d17b43a..36497407d 100644 --- a/src/rules/checkExamples.js +++ b/src/rules/checkExamples.js @@ -16,14 +16,14 @@ const preTagSpaceLength = 1; // If a space is present, we should ignore it const firstLinePrefixLength = preTagSpaceLength; -const hasCaptionRegex = /^\s*([\s\S]*?)<\/caption>/u; +const hasCaptionRegex = /^\s*([\s\S]*?)<\/caption>/v; /** * @param {string} str * @returns {string} */ const escapeStringRegexp = (str) => { - return str.replaceAll(/[.*+?^${}()|[\]\\]/gu, '\\$&'); + return str.replaceAll(/[.*+?^$\{\}\(\)\|\[\]\\]/gv, '\\$&'); }; /** @@ -32,7 +32,7 @@ const escapeStringRegexp = (str) => { * @returns {import('../iterateJsdoc.js').Integer} */ const countChars = (str, ch) => { - return (str.match(new RegExp(escapeStringRegexp(ch), 'gu')) || []).length; + return (str.match(new RegExp(escapeStringRegexp(ch), 'gv')) || []).length; }; /** @type {import('eslint').Linter.RulesRecord} */ @@ -244,7 +244,7 @@ export default iterateJsdoc(({ const cliConfigStr = JSON.stringify(cliConfig); const src = paddedIndent ? - string.replaceAll(new RegExp(`(^|\n) {${paddedIndent}}(?!$)`, 'gu'), '\n') : + string.replaceAll(new RegExp(`(^|\n) {${paddedIndent}}(?!$)`, 'gv'), '\n') : string; // Programmatic ESLint API: https://eslint.org/docs/developer-guide/nodejs-api @@ -345,7 +345,7 @@ export default iterateJsdoc(({ if (!filename) { const jsFileName = context.getFilename(); if (typeof jsFileName === 'string' && jsFileName.includes('.')) { - defaultFileName = jsFileName.replace(/\.[^.]*$/u, `.${ext}`); + defaultFileName = jsFileName.replace(/\.[^.]*$/v, `.${ext}`); } else { defaultFileName = `dummy.${ext}`; } diff --git a/src/rules/checkIndentation.js b/src/rules/checkIndentation.js index c0d96ee75..383c84a83 100644 --- a/src/rules/checkIndentation.js +++ b/src/rules/checkIndentation.js @@ -6,10 +6,10 @@ import iterateJsdoc from '../iterateJsdoc.js'; * @returns {string} */ const maskExcludedContent = (str, excludeTags) => { - const regContent = new RegExp(`([ \\t]+\\*)[ \\t]@(?:${excludeTags.join('|')})(?=[ \\n])([\\w|\\W]*?\\n)(?=[ \\t]*\\*(?:[ \\t]*@\\w+\\s|\\/))`, 'gu'); + const regContent = new RegExp(`([ \\t]+\\*)[ \\t]@(?:${excludeTags.join('|')})(?=[ \\n])([\\w\\|\\W]*?\\n)(?=[ \\t]*\\*(?:[ \\t]*@\\w+\\s|\\/))`, 'gv'); return str.replace(regContent, (_match, margin, code) => { - return (margin + '\n').repeat(code.match(/\n/gu).length); + return (margin + '\n').repeat(code.match(/\n/gv).length); }); }; @@ -18,10 +18,10 @@ const maskExcludedContent = (str, excludeTags) => { * @returns {string} */ const maskCodeBlocks = (str) => { - const regContent = /([ \t]+\*)[ \t]```[^\n]*?([\w|\W]*?\n)(?=[ \t]*\*(?:[ \t]*(?:```|@\w+\s)|\/))/gu; + const regContent = /([ \t]+\*)[ \t]```[^\n]*?([\w\|\W]*?\n)(?=[ \t]*\*(?:[ \t]*(?:```|@\w+\s)|\/))/gv; return str.replaceAll(regContent, (_match, margin, code) => { - return (margin + '\n').repeat(code.match(/\n/gu).length); + return (margin + '\n').repeat(code.match(/\n/gv).length); }); }; @@ -38,12 +38,12 @@ export default iterateJsdoc(({ ], } = options; - const reg = /^(?:\/?\**|[ \t]*)\*[ \t]{2}/gmu; + const reg = /^(?:\/?\**|[ \t]*)\*[ \t]{2}/gmv; const textWithoutCodeBlocks = maskCodeBlocks(sourceCode.getText(jsdocNode)); const text = excludeTags.length ? maskExcludedContent(textWithoutCodeBlocks, excludeTags) : textWithoutCodeBlocks; if (reg.test(text)) { - const lineBreaks = text.slice(0, reg.lastIndex).match(/\n/gu) || []; + const lineBreaks = text.slice(0, reg.lastIndex).match(/\n/gv) || []; report('There must be no indentation.', null, { line: lineBreaks.length, }); diff --git a/src/rules/checkLineAlignment.js b/src/rules/checkLineAlignment.js index d495040a3..416065492 100644 --- a/src/rules/checkLineAlignment.js +++ b/src/rules/checkLineAlignment.js @@ -93,8 +93,8 @@ const checkNotAlignedPerTag = (utils, tag, customSpacings) => { }; const postHyphenSpacing = customSpacings?.postHyphen ?? 1; - const exactHyphenSpacing = new RegExp(`^\\s*-\\s{${postHyphenSpacing},${postHyphenSpacing}}(?!\\s)`, 'u'); - const hasNoHyphen = !(/^\s*-(?!$)(?=\s)/u).test(tokens.description); + const exactHyphenSpacing = new RegExp(`^\\s*-\\s{${postHyphenSpacing},${postHyphenSpacing}}(?!\\s)`, 'v'); + const hasNoHyphen = !(/^\s*-(?!$)(?=\s)/v).test(tokens.description); const hasExactHyphenSpacing = exactHyphenSpacing.test( tokens.description, ); @@ -144,7 +144,7 @@ const checkNotAlignedPerTag = (utils, tag, customSpacings) => { } if (!hasExactHyphenSpacing) { - const hyphenSpacing = /^\s*-\s+/u; + const hyphenSpacing = /^\s*-\s+/v; tokens.description = tokens.description.replace( hyphenSpacing, '-' + ''.padStart(postHyphenSpacing, ' '), ); diff --git a/src/rules/checkTagNames.js b/src/rules/checkTagNames.js index cb9eb75d3..042d316f3 100644 --- a/src/rules/checkTagNames.js +++ b/src/rules/checkTagNames.js @@ -267,7 +267,7 @@ export default iterateJsdoc(({ if (preferredTagName !== tagName) { report(message, (fixer) => { const replacement = sourceCode.getText(jsdocNode).replace( - new RegExp(`@${escapeStringRegexp(tagName)}\\b`, 'u'), + new RegExp(`@${escapeStringRegexp(tagName)}\\b`, 'v'), `@${preferredTagName}`, ); diff --git a/src/rules/checkTemplateNames.js b/src/rules/checkTemplateNames.js index 49d3d969e..8b8a9276a 100644 --- a/src/rules/checkTemplateNames.js +++ b/src/rules/checkTemplateNames.js @@ -73,7 +73,7 @@ export default iterateJsdoc(({ const { name, } = tag; - const names = name.split(/,\s*/u); + const names = name.split(/,\s*/v); for (const nme of names) { if (!usedNames.has(nme)) { report(`@template ${nme} not in use`, null, tag); diff --git a/src/rules/checkTypes.js b/src/rules/checkTypes.js index b7149c11a..f35778138 100644 --- a/src/rules/checkTypes.js +++ b/src/rules/checkTypes.js @@ -43,7 +43,7 @@ const adjustNames = (type, preferred, isGenericMatch, typeNodeName, node, parent parentMeta.dot = false; ret = 'Array'; } else { - const dotBracketEnd = preferred.match(/\.(?:<>)?$/u); + const dotBracketEnd = preferred.match(/\.(?:<>)?$/v); if (dotBracketEnd) { parentMeta.brackets = 'angle'; parentMeta.dot = true; @@ -69,7 +69,7 @@ const adjustNames = (type, preferred, isGenericMatch, typeNodeName, node, parent /** @type {import('jsdoc-type-pratt-parser').NameResult} */ ( node - ).value = ret.replace(/(?:\.|<>|\.<>|\[\])$/u, ''); + ).value = ret.replace(/(?:\.|<>|\.<>|\[\])$/v, ''); // For bare pseudo-types like `<>` if (!ret) { diff --git a/src/rules/checkValues.js b/src/rules/checkValues.js index 283d0a9a7..b131801df 100644 --- a/src/rules/checkValues.js +++ b/src/rules/checkValues.js @@ -29,7 +29,7 @@ export default iterateJsdoc(({ const { allowedAuthors = null, allowedLicenses = null, - licensePattern = '/([^\n\r]*)/gu', + licensePattern = '/([^\n\r]*)/gv', numericOnlyVariation = false, } = options; diff --git a/src/rules/emptyTags.js b/src/rules/emptyTags.js index 9842ec0a8..b34fdc40d 100644 --- a/src/rules/emptyTags.js +++ b/src/rules/emptyTags.js @@ -53,7 +53,7 @@ export default iterateJsdoc(({ const content = tag.name || tag.description || tag.type; if (content.trim() && ( // Allow for JSDoc-block final asterisks - key !== emptyTags.length - 1 || !(/^\s*\*+$/u).test(content) + key !== emptyTags.length - 1 || !(/^\s*\*+$/v).test(content) )) { const fix = () => { // By time of call in fixer, `tag` will have `line` added diff --git a/src/rules/importsAsDependencies.js b/src/rules/importsAsDependencies.js index ee26baa66..3b39b5bb5 100644 --- a/src/rules/importsAsDependencies.js +++ b/src/rules/importsAsDependencies.js @@ -83,10 +83,10 @@ export default iterateJsdoc(({ if (nde.type === 'JsdocTypeImport') { let mod = nde.element.value.replace( - /^(@[^/]+\/[^/]+|[^/]+).*$/u, '$1', + /^(@[^\/]+\/[^\/]+|[^\/]+).*$/v, '$1', ); - if ((/^[./]/u).test(mod)) { + if ((/^[.\/]/v).test(mod)) { return; } diff --git a/src/rules/linesBeforeBlock.js b/src/rules/linesBeforeBlock.js index 1cee10fc3..496ad8d35 100644 --- a/src/rules/linesBeforeBlock.js +++ b/src/rules/linesBeforeBlock.js @@ -68,7 +68,7 @@ export default iterateJsdoc(({ // @ts-expect-error Should be a comment indent = /** @type {import('estree').Comment} */ ( jsdocNode - ).value.match(/^\*\n([\t ]*) \*/u)?.[1]?.slice(spaceDiff); + ).value.match(/^\*\n([\t ]*) \*/v)?.[1]?.slice(spaceDiff); if (!indent) { /** @type {import('eslint').AST.Token|import('estree').Comment|undefined} */ let tokenPrior = tokenBefore; diff --git a/src/rules/matchDescription.js b/src/rules/matchDescription.js index 21b9d2d64..fbd0b4d2c 100644 --- a/src/rules/matchDescription.js +++ b/src/rules/matchDescription.js @@ -2,7 +2,7 @@ import iterateJsdoc from '../iterateJsdoc.js'; // If supporting Node >= 10, we could loosen the default to this for the // initial letter: \\p{Upper} -const matchDescriptionDefault = '^\n?([A-Z`\\d_][\\s\\S]*[.?!`]\\s*)?$'; +const matchDescriptionDefault = '^\n?([A-Z`\\d_][\\s\\S]*[.?!`\\p{RGI_Emoji}]\\s*)?$'; /** * @param {string} value @@ -43,7 +43,7 @@ export default iterateJsdoc(({ } if (mainDescriptionMatch === false && ( - !tag || !Object.prototype.hasOwnProperty.call(tags, tag.tag)) + !tag || !Object.hasOwn(tags, tag.tag)) ) { return; } @@ -114,7 +114,7 @@ export default iterateJsdoc(({ utils.forEachPreferredTag(tag, (matchingJsdocTag, targetTagName) => { const desc = (matchingJsdocTag.name + ' ' + utils.getTagDescription(matchingJsdocTag)).trim(); - if (hasNoTag(targetTagName) && !(/.+/u).test(desc)) { + if (hasNoTag(targetTagName) && !(/.+/v).test(desc)) { report( 'JSDoc description must not be empty.', null, @@ -150,7 +150,7 @@ export default iterateJsdoc(({ tagsWithNames.some((tag) => { const desc = /** @type {string} */ ( utils.getTagDescription(tag) - ).replace(/^[- ]*/u, '') + ).replace(/^[\- ]*/v, '') .trim(); return validateDescription(desc, tag); diff --git a/src/rules/matchName.js b/src/rules/matchName.js index 9fb195a9b..0f70568a7 100644 --- a/src/rules/matchName.js +++ b/src/rules/matchName.js @@ -38,7 +38,7 @@ export default iterateJsdoc(({ let reported = false; for (const tag of applicableTags) { - const tagName = tag.name.replace(/^\[/u, '').replace(/(=.*)?\]$/u, ''); + const tagName = tag.name.replace(/^\[/v, '').replace(/(=.*)?\]$/v, ''); const allowed = !allowNameRegex || allowNameRegex.test(tagName); const disallowed = disallowNameRegex && disallowNameRegex.test(tagName); const hasRegex = allowNameRegex || disallowNameRegex; diff --git a/src/rules/noBadBlocks.js b/src/rules/noBadBlocks.js index 592c8d233..f44825e87 100644 --- a/src/rules/noBadBlocks.js +++ b/src/rules/noBadBlocks.js @@ -5,8 +5,8 @@ import { // Neither a single nor 3+ asterisks are valid jsdoc per // https://jsdoc.app/about-getting-started.html#adding-documentation-comments-to-your-code -const commentRegexp = /^\/\*(?!\*)/u; -const extraAsteriskCommentRegexp = /^\/\*{3,}/u; +const commentRegexp = /^\/\*(?!\*)/v; +const extraAsteriskCommentRegexp = /^\/\*{3,}/v; export default iterateJsdoc(({ allComments, diff --git a/src/rules/noBlankBlockDescriptions.js b/src/rules/noBlankBlockDescriptions.js index d28bf2b3f..a2d3a76da 100644 --- a/src/rules/noBlankBlockDescriptions.js +++ b/src/rules/noBlankBlockDescriptions.js @@ -1,7 +1,7 @@ import iterateJsdoc from '../iterateJsdoc.js'; -const anyWhitespaceLines = /^\s*$/u; -const atLeastTwoLinesWhitespace = /^[ \t]*\n[ \t]*\n\s*$/u; +const anyWhitespaceLines = /^\s*$/v; +const atLeastTwoLinesWhitespace = /^[ \t]*\n[ \t]*\n\s*$/v; export default iterateJsdoc(({ jsdoc, diff --git a/src/rules/noDefaults.js b/src/rules/noDefaults.js index 3ce05312a..4861a9b6e 100644 --- a/src/rules/noDefaults.js +++ b/src/rules/noDefaults.js @@ -14,13 +14,13 @@ export default iterateJsdoc(({ if (noOptionalParamNames && tag.optional) { utils.reportJSDoc(`Optional param names are not permitted on @${tag.tag}.`, tag, () => { utils.changeTag(tag, { - name: tag.name.replace(/([^=]*)(=.+)?/u, '$1'), + name: tag.name.replace(/([^=]*)(=.+)?/v, '$1'), }); }); } else if (tag.default) { utils.reportJSDoc(`Defaults are not permitted on @${tag.tag}.`, tag, () => { utils.changeTag(tag, { - name: tag.name.replace(/([^=]*)(=.+)?/u, '[$1]'), + name: tag.name.replace(/([^=]*)(=.+)?/v, '[$1]'), }); }); } diff --git a/src/rules/noMultiAsterisks.js b/src/rules/noMultiAsterisks.js index 9f7870ed2..6e0cac6b8 100644 --- a/src/rules/noMultiAsterisks.js +++ b/src/rules/noMultiAsterisks.js @@ -1,13 +1,13 @@ import iterateJsdoc from '../iterateJsdoc.js'; -const middleAsterisksBlockWS = /^([\t ]|\*(?!\*))+/u; -const middleAsterisksNoBlockWS = /^\*+/u; +const middleAsterisksBlockWS = /^([\t ]|\*(?!\*))+/v; +const middleAsterisksNoBlockWS = /^\*+/v; -const endAsterisksSingleLineBlockWS = /\*((?:\*|(?: |\t))*)\*$/u; -const endAsterisksMultipleLineBlockWS = /((?:\*|(?: |\t))*)\*$/u; +const endAsterisksSingleLineBlockWS = /\*((?:\*|(?: |\t))*)\*$/v; +const endAsterisksMultipleLineBlockWS = /((?:\*|(?: |\t))*)\*$/v; -const endAsterisksSingleLineNoBlockWS = /\*(\**)\*$/u; -const endAsterisksMultipleLineNoBlockWS = /(\**)\*$/u; +const endAsterisksSingleLineNoBlockWS = /\*(\**)\*$/v; +const endAsterisksMultipleLineNoBlockWS = /(\**)\*$/v; export default iterateJsdoc(({ context, diff --git a/src/rules/noUndefinedTypes.js b/src/rules/noUndefinedTypes.js index 89975432b..83205db1e 100644 --- a/src/rules/noUndefinedTypes.js +++ b/src/rules/noUndefinedTypes.js @@ -50,7 +50,7 @@ const typescriptGlobals = [ * @returns {undefined|string|false} */ const stripPseudoTypes = (str) => { - return str && str.replace(/(?:\.|<>|\.<>|\[\])$/u, ''); + return str && str.replace(/(?:\.|<>|\.<>|\[\])$/v, ''); }; export default iterateJsdoc(({ @@ -115,7 +115,7 @@ export default iterateJsdoc(({ const allComments = sourceCode.getAllComments(); const comments = allComments .filter((comment) => { - return (/^\*\s/u).test(comment.value); + return (/^\*\s/v).test(comment.value); }) .map((commentNode) => { return parseComment(commentNode, ''); @@ -123,9 +123,9 @@ export default iterateJsdoc(({ const globals = allComments .filter((comment) => { - return (/^\s*globals/u).test(comment.value); + return (/^\s*globals/v).test(comment.value); }).flatMap((commentNode) => { - return commentNode.value.replace(/^\s*globals/u, '').trim().split(/,\s*/u); + return commentNode.value.replace(/^\s*globals/v, '').trim().split(/,\s*/v); }).concat(Object.keys(context.languageOptions.globals ?? [])); const typedefDeclarations = comments diff --git a/src/rules/requireDescriptionCompleteSentence.js b/src/rules/requireDescriptionCompleteSentence.js index d9404b1ab..a066eaced 100644 --- a/src/rules/requireDescriptionCompleteSentence.js +++ b/src/rules/requireDescriptionCompleteSentence.js @@ -14,7 +14,7 @@ const otherDescriptiveTags = new Set([ * @returns {string[]} */ const extractParagraphs = (text) => { - return text.split(/(? { const extractSentences = (text, abbreviationsRegex) => { const txt = text // Remove all {} tags. - .replaceAll(/(? { }); return txt - .split(/[.?!](?:\s+|$)/u) + .split(/[.?!](?:\s+|$)/v) // Re-add the dot. .map((sentence, idx) => { - return !puncts[idx] && /^\s*$/u.test(sentence) ? sentence : `${sentence}${puncts[idx] || ''}`; + return !puncts[idx] && /^\s*$/v.test(sentence) ? sentence : `${sentence}${puncts[idx] || ''}`; }); }; @@ -58,11 +58,11 @@ const isNewLinePrecededByAPeriod = (text) => { const lines = text.split('\n'); return !lines.some((line) => { - if (lastLineEndsSentence === false && /^[A-Z][a-z]/u.test(line)) { + if (lastLineEndsSentence === false && /^[A-Z][a-z]/v.test(line)) { return true; } - lastLineEndsSentence = /[.:?!|]$/u.test(line); + lastLineEndsSentence = /[.:?!\|]$/v.test(line); return false; }); @@ -108,11 +108,11 @@ const validateDescription = ( description, reportOrig, jsdocNode, abbreviationsRegex, sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd, ) => { - if (!description || (/^\n+$/u).test(description)) { + if (!description || (/^\n+$/v).test(description)) { return false; } - const descriptionNoHeadings = description.replaceAll(/^\s*#[^\n]*(\n|$)/gmu, ''); + const descriptionNoHeadings = description.replaceAll(/^\s*#[^\n]*(\n|$)/gmv, ''); const paragraphs = extractParagraphs(descriptionNoHeadings).filter(Boolean); @@ -122,28 +122,28 @@ const validateDescription = ( const fix = /** @type {import('eslint').Rule.ReportFixer} */ (fixer) => { let text = sourceCode.getText(jsdocNode); - if (!/[.:?!]$/u.test(paragraph)) { + if (!/[.:?!]$/v.test(paragraph)) { const line = paragraph.split('\n').findLast(Boolean); text = text.replace(new RegExp(`${escapeStringRegexp( /** @type {string} */ (line), - )}$`, 'mu'), `${line}.`); + )}$`, 'mv'), `${line}.`); } for (const sentence of sentences.filter((sentence_) => { - return !(/^\s*$/u).test(sentence_) && !isCapitalized(sentence_) && + return !(/^\s*$/v).test(sentence_) && !isCapitalized(sentence_) && !isTable(sentence_); })) { const beginning = sentence.split('\n')[0]; if ('tag' in tag && tag.tag) { - const reg = new RegExp(`(@${escapeStringRegexp(tag.tag)}.*)${escapeStringRegexp(beginning)}`, 'u'); + const reg = new RegExp(`(@${escapeStringRegexp(tag.tag)}.*)${escapeStringRegexp(beginning)}`, 'v'); text = text.replace(reg, (_$0, $1) => { return $1 + capitalize(beginning); }); } else { - text = text.replace(new RegExp('((?:[.?!]|\\*|\\})\\s*)' + escapeStringRegexp(beginning), 'u'), '$1' + capitalize(beginning)); + text = text.replace(new RegExp('((?:[.?!]|\\*|\\})\\s*)' + escapeStringRegexp(beginning), 'v'), '$1' + capitalize(beginning)); } } @@ -181,20 +181,20 @@ const validateDescription = ( }; if (sentences.some((sentence) => { - return (/^[.?!]$/u).test(sentence); + return (/^[.?!]$/v).test(sentence); })) { report('Sentences must be more than punctuation.', null, tag); } if (sentences.some((sentence) => { - return !(/^\s*$/u).test(sentence) && !isCapitalized(sentence) && !isTable(sentence); + return !(/^\s*$/v).test(sentence) && !isCapitalized(sentence) && !isTable(sentence); })) { report('Sentences should start with an uppercase character.', fix, tag); } const paragraphNoAbbreviations = paragraph.replace(abbreviationsRegex, ''); - if (!/(?:[.?!|]|```)\s*$/u.test(paragraphNoAbbreviations)) { + if (!/(?:[.?!\|]|```)\s*$/v.test(paragraphNoAbbreviations)) { report('Sentences must end with a period.', fix, tag); return true; } @@ -224,8 +224,8 @@ export default iterateJsdoc(({ const abbreviationsRegex = abbreviations.length ? new RegExp('\\b' + abbreviations.map((abbreviation) => { - return escapeStringRegexp(abbreviation.replaceAll(/\.$/ug, '') + '.'); - }).join('|') + '(?:$|\\s)', 'gu') : + return escapeStringRegexp(abbreviation.replaceAll(/\.$/gv, '') + '.'); + }).join('|') + '(?:$|\\s)', 'gv') : ''; let { @@ -233,7 +233,7 @@ export default iterateJsdoc(({ } = utils.getDescription(); const indices = [ - ...description.matchAll(/```[\s\S]*```/gu), + ...description.matchAll(/```[\s\S]*```/gv), ].map((match) => { const { index, @@ -289,7 +289,7 @@ export default iterateJsdoc(({ tagsWithNames.some((tag) => { const desc = /** @type {string} */ ( utils.getTagDescription(tag) - ).replace(/^- /u, '').trimEnd(); + ).replace(/^- /v, '').trimEnd(); return validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd); }); diff --git a/src/rules/requireHyphenBeforeParamDescription.js b/src/rules/requireHyphenBeforeParamDescription.js index 36e711230..cc2617d94 100644 --- a/src/rules/requireHyphenBeforeParamDescription.js +++ b/src/rules/requireHyphenBeforeParamDescription.js @@ -29,7 +29,7 @@ export default iterateJsdoc(({ return; } - const startsWithHyphen = (/^\s*-/u).test(desc); + const startsWithHyphen = (/^\s*-/v).test(desc); let lines = 0; for (const { tokens, @@ -54,7 +54,7 @@ export default iterateJsdoc(({ } of jsdocTag.source) { if (tokens.description) { tokens.description = tokens.description.replace( - /^(\s*)/u, '$1- ', + /^(\s*)/v, '$1- ', ); break; } @@ -74,7 +74,7 @@ export default iterateJsdoc(({ } of jsdocTag.source) { if (tokens.description) { tokens.description = tokens.description.replace( - /^\s*-\s*/u, '', + /^\s*-\s*/v, '', ); break; } diff --git a/src/rules/requireJsdoc.js b/src/rules/requireJsdoc.js index 8cb99e4ee..34cf36966 100644 --- a/src/rules/requireJsdoc.js +++ b/src/rules/requireJsdoc.js @@ -444,7 +444,7 @@ export default { */ const underMinLine = (count) => { return count !== undefined && count > - (sourceCode.getText(node).match(/\n/gu)?.length ?? 0) + 1; + (sourceCode.getText(node).match(/\n/gv)?.length ?? 0) + 1; }; if (underMinLine(minLineCount)) { diff --git a/src/rules/requireReturnsCheck.js b/src/rules/requireReturnsCheck.js index 088ac487f..3a5238387 100755 --- a/src/rules/requireReturnsCheck.js +++ b/src/rules/requireReturnsCheck.js @@ -81,7 +81,7 @@ export default iterateJsdoc(({ const type = tag.type.trim(); // https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#assertion-functions - if (/asserts\s/u.test(type)) { + if (/asserts\s/v.test(type)) { return; } diff --git a/src/rules/requireTemplate.js b/src/rules/requireTemplate.js index 91edfb523..f1e5eeb97 100644 --- a/src/rules/requireTemplate.js +++ b/src/rules/requireTemplate.js @@ -31,7 +31,7 @@ export default iterateJsdoc(({ const { name, } = tag; - const names = name.split(/,\s*/u); + const names = name.split(/,\s*/v); if (names.length > 1) { report(`Missing separate @template for ${names[1]}`, null, tag); } @@ -126,7 +126,7 @@ export default iterateJsdoc(({ type, value, } = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (nde); - if (type === 'JsdocTypeName' && (/^[A-Z]$/u).test(value)) { + if (type === 'JsdocTypeName' && (/^[A-Z]$/v).test(value)) { usedNames.add(value); if (!usedNameToTag.has(value)) { usedNameToTag.set(value, potentialTag); diff --git a/src/rules/tagLines.js b/src/rules/tagLines.js index c505e8058..cff8789af 100644 --- a/src/rules/tagLines.js +++ b/src/rules/tagLines.js @@ -228,11 +228,11 @@ export default iterateJsdoc(({ description, lastDescriptionLine, } = utils.getDescription(); - if (!(/\S/u).test(description)) { + if (!(/\S/v).test(description)) { return; } - const trailingLines = description.match(/\n+$/u)?.[0]?.length; + const trailingLines = description.match(/\n+$/v)?.[0]?.length; const trailingDiff = (trailingLines ?? 0) - startLines; if (trailingDiff > 0) { utils.reportJSDoc( diff --git a/src/rules/textEscaping.js b/src/rules/textEscaping.js index 3f6752c44..9a2c6cba2 100644 --- a/src/rules/textEscaping.js +++ b/src/rules/textEscaping.js @@ -2,15 +2,15 @@ import iterateJsdoc from '../iterateJsdoc.js'; // We could disallow raw gt, quot, and apos, but allow for parity; but we do // not allow hex or decimal character references -const htmlRegex = /(<|&(?!(?:amp|lt|gt|quot|apos);))(?=\S)/u; -const markdownRegex = /(? { - return desc.replaceAll(new RegExp(htmlRegex, 'gu'), (_) => { + return desc.replaceAll(new RegExp(htmlRegex, 'gv'), (_) => { if (_ === '<') { return '<'; } @@ -24,7 +24,7 @@ const htmlReplacer = (desc) => { * @returns {string} */ const markdownReplacer = (desc) => { - return desc.replaceAll(new RegExp(markdownRegex, 'gu'), (_, backticks, encapsed) => { + return desc.replaceAll(new RegExp(markdownRegex, 'gv'), (_, backticks, encapsed) => { const bookend = '`'.repeat(backticks.length); return `\\${bookend}${encapsed}${bookend}`; }); diff --git a/src/rules/validTypes.js b/src/rules/validTypes.js index 5593055b4..3164a5c7f 100644 --- a/src/rules/validTypes.js +++ b/src/rules/validTypes.js @@ -17,7 +17,7 @@ const jsdocTypePrattKeywords = new Set([ 'typeof', ]); -const asExpression = /as\s+/u; +const asExpression = /as\s+/v; const suppressTypes = new Set([ // https://github.com/google/closure-compiler/wiki/@suppress-annotations diff --git a/test/getJsdocProcessPlugin.js b/test/getJsdocProcessPlugin.js index 7dbeb706c..fbc2be578 100644 --- a/test/getJsdocProcessPlugin.js +++ b/test/getJsdocProcessPlugin.js @@ -94,7 +94,7 @@ describe('`getJsdocProcessorPlugin`', () => { it('returns text and files with `exampleCodeRegex` (as RegExp)', () => { const options = { - exampleCodeRegex: /```js([\s\S]*)```/u, + exampleCodeRegex: /```js([\s\S]*)```/v, }; const filename = 'something.js'; const text = ` @@ -276,7 +276,7 @@ describe('`getJsdocProcessorPlugin`', () => { it('returns text and files (with `rejectExampleCodeRegex`) as RegExp', () => { const options = { - rejectExampleCodeRegex: /^\s*<.*>\s*$/u, + rejectExampleCodeRegex: /^\s*<.*>\s*$/v, }; const filename = 'something.js'; const text = ` diff --git a/test/rules/assertions/checkTagNames.js b/test/rules/assertions/checkTagNames.js index 64125f19f..f35e7bd3d 100644 --- a/test/rules/assertions/checkTagNames.js +++ b/test/rules/assertions/checkTagNames.js @@ -28,7 +28,7 @@ const buildTagBlock = (tags) => { */ const lineCount = (code) => { /* eslint-disable jsdoc/no-undefined-types -- TS */ - return /** @type {RegExpMatchArray} */ (code.match(/\n/ug)).length; + return /** @type {RegExpMatchArray} */ (code.match(/\n/gv)).length; /* eslint-enable jsdoc/no-undefined-types -- TS */ }; diff --git a/test/rules/assertions/matchDescription.js b/test/rules/assertions/matchDescription.js index 5cc57b549..878c98d8b 100644 --- a/test/rules/assertions/matchDescription.js +++ b/test/rules/assertions/matchDescription.js @@ -1576,8 +1576,8 @@ export default /** @type {import('../index.js').TestCases} */ ({ contexts: [ 'any', ], - mainDescription: '/^[A-Z`-].*\\.$/us', - matchDescription: '^([A-Z`-].*(\\.|:)|-\\s.*)$', + mainDescription: '/^[A-Z`\\-].*\\.$/vs', + matchDescription: '^([A-Z`\\-].*(\\.|:)|-\\s.*)$', tags: { param: true, returns: true, @@ -1675,5 +1675,13 @@ export default /** @type {import('../index.js').TestCases} */ ({ }, ], }, + { + code: ` + /** + * Example text. 🙂 + */ + export const example = () => { }; + `, + }, ], }); diff --git a/test/rules/assertions/matchName.js b/test/rules/assertions/matchName.js index f0f8e5186..0be9793b7 100644 --- a/test/rules/assertions/matchName.js +++ b/test/rules/assertions/matchName.js @@ -366,7 +366,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 3, - message: 'Only allowing names not matching `/^$/u` but found "".', + message: 'Only allowing names not matching `/^$/v` but found "".', }, ], options: [ diff --git a/tsconfig-prod.json b/tsconfig-prod.json index b8e8082d2..7ae6b80fa 100644 --- a/tsconfig-prod.json +++ b/tsconfig-prod.json @@ -11,7 +11,7 @@ "declarationMap": true, "strict": true, "skipLibCheck": true, - "target": "es2018", + "target": "es2024", "outDir": "dist" }, "include": [ diff --git a/tsconfig.json b/tsconfig.json index 0d02cc61a..1e2e5172b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,7 +10,7 @@ "declarationMap": true, "strict": true, "skipLibCheck": true, - "target": "es2018", + "target": "es2024", "outDir": "dist" }, "include": [ From da66683906367d20b64cbde9a034d44eef686a05 Mon Sep 17 00:00:00 2001 From: Eli <88557639+lishaduck@users.noreply.github.com> Date: Tue, 29 Jul 2025 16:40:50 -0500 Subject: [PATCH 027/189] fix: npmignore (#1439) Fixes #1432. --- .npmignore | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.npmignore b/.npmignore index 4b245ac73..5219b9654 100755 --- a/.npmignore +++ b/.npmignore @@ -5,8 +5,14 @@ test *.log CONTRIBUTING.md tsconfig*.json +pnpm-workspace.yaml +eslint.config.js *.d.ts *.d.ts.map !dist/index.d.ts !dist/index.d.ts.map +!dist/getJsdocProcessorPlugin.d.ts +!dist/getJsdocProcessorPlugin.d.ts.map +!dist/iterateJsdoc.d.ts +!dist/iterateJsdoc.d.ts.map docs From 845120162012c83e040d939b4a5aeab9b40ef770 Mon Sep 17 00:00:00 2001 From: Eli <88557639+lishaduck@users.noreply.github.com> Date: Tue, 29 Jul 2025 18:14:54 -0500 Subject: [PATCH 028/189] chore: enable pnpm shellEmulator (#1438) * chore: enable pnpm shellEmulator This fixes `pnpm build` on Windows. Otherwise, the string escapes in the `build` script are misinterpreted. After enabling `shellEmulator`, husky needed to be moved off npm. * fix: test-index should use parseArgs instead --- .husky/post-checkout | 3 +-- .husky/post-commit | 3 +-- .husky/post-merge | 3 +-- .husky/post-rewrite | 3 +-- .husky/pre-commit | 3 +-- .husky/pre-push | 3 +-- CONTRIBUTING.md | 6 +++--- package.json | 26 ++++++++++--------------- pnpm-lock.yaml | 24 +---------------------- pnpm-workspace.yaml | 2 ++ src/bin/generateDocs.js | 2 +- src/bin/generateRule.js | 2 +- test/rules/index.js | 43 ++++++++++++++++++++++++++++++++++------- 13 files changed, 60 insertions(+), 63 deletions(-) diff --git a/.husky/post-checkout b/.husky/post-checkout index 93d57675e..92c0c92d6 100755 --- a/.husky/post-checkout +++ b/.husky/post-checkout @@ -1,2 +1 @@ - -npx run-if-changed +run-if-changed diff --git a/.husky/post-commit b/.husky/post-commit index 93d57675e..92c0c92d6 100755 --- a/.husky/post-commit +++ b/.husky/post-commit @@ -1,2 +1 @@ - -npx run-if-changed +run-if-changed diff --git a/.husky/post-merge b/.husky/post-merge index 93d57675e..92c0c92d6 100755 --- a/.husky/post-merge +++ b/.husky/post-merge @@ -1,2 +1 @@ - -npx run-if-changed +run-if-changed diff --git a/.husky/post-rewrite b/.husky/post-rewrite index 93d57675e..92c0c92d6 100755 --- a/.husky/post-rewrite +++ b/.husky/post-rewrite @@ -1,2 +1 @@ - -npx run-if-changed +run-if-changed diff --git a/.husky/pre-commit b/.husky/pre-commit index 6b636e2c0..c27d8893a 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,2 +1 @@ - -npx lint-staged +lint-staged diff --git a/.husky/pre-push b/.husky/pre-push index bdaba679d..f1bacc16f 100755 --- a/.husky/pre-push +++ b/.husky/pre-push @@ -1,2 +1 @@ - -npm test && npm run build && npm run check-docs +pnpm test && pnpm run build && pnpm run check-docs diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0fc7ccca4..74e61280e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -68,12 +68,12 @@ can be ignored by being preceded by `/* c8 ignore next */` (including for warnings where the block is never passed over (i.e., the block is always entered)). If you want to test without coverage at all, you can use `pnpm test-no-cov`. To only test rules rather than other files, you -can use `npm run test-index` (`pnpm` doesn't work with this script currently). +can use `pnpm run test-index`. To test specific rules, you can supply a comma-separated list with the `--rule` flag passed to `test-index`, e.g., for `check-examples` and `require-example`: -`npm run test-index --rule=check-examples,require-example`. +`pnpm run test-index --rule=check-examples,require-example`. You can further limit this by providing `--invalid` and/or `--valid` flags with a comma-separated list of 0-based indexes that you wish to include (also @@ -81,7 +81,7 @@ accepts negative offsets from the end, e.g., `-1` for the last item). For example, to check the first and third invalid tests of `check-examples` along with the second valid test, you can run: -`npm run test-index --rule=require-example --invalid=0,2 --valid=1`. +`pnpm run test-index --rule=require-example --invalid=0,2 --valid=1`. ## Requirements for PRs diff --git a/package.json b/package.json index 5bd50d94d..da3f0960e 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,6 @@ "c8": "^10.1.3", "camelcase": "^8.0.0", "chai": "^5.2.0", - "cross-env": "^7.0.3", "decamelize": "^6.0.0", "eslint": "9.29.0", "eslint-config-canonical": "~44.9.5", @@ -80,11 +79,7 @@ ], "license": "BSD-3-Clause", "lint-staged": { - ".eslintignore": [ - "npm run lint-fix", - "git add ." - ], - "*.js": "npm run lint-arg -- --fix" + "*.js": "eslint --fix" }, "type": "module", "main": "./dist/index.cjs", @@ -140,25 +135,24 @@ "url": "https://github.com/gajus/eslint-plugin-jsdoc/issues" }, "run-if-changed": { - "package-lock.json": "npm run install-offline" + "package-lock.json": "pnpm run install-offline" }, "scripts": { "tsc": "tsc", "tsc-build": "tsc -p tsconfig-prod.json", - "build": "rimraf ./dist && cross-env NODE_ENV=production babel ./src --out-file-extension .cjs --out-dir ./dist --copy-files --source-maps --ignore ./src/bin/*.js --no-copy-ignored && replace 'require\\(\"\\.(.*?)\\.[^.]*?\"\\)' 'require(\".$1.cjs\")' 'dist' -r --include=\"*.cjs\" && pnpm tsc-build", + "build": "rimraf ./dist && NODE_ENV=production babel ./src --out-file-extension .cjs --out-dir ./dist --copy-files --source-maps --ignore ./src/bin/*.js --no-copy-ignored && replace 'require\\(\"\\.(.*?)\\.[^.]*?\"\\)' 'require(\".$1.cjs\")' 'dist' -r --include=\"*.cjs\" && pnpm tsc-build", "check-docs": "babel-node ./src/bin/generateDocs.js --check", - "create-docs": "npm run create-options && babel-node ./src/bin/generateDocs.js", + "create-docs": "pnpm run create-options && babel-node ./src/bin/generateDocs.js", "create-rule": "babel-node ./src/bin/generateRule.js", "create-options": "node ./src/bin/generateOptions.mjs", "install-offline": "pnpm install --prefer-offline --no-audit", - "lint": "npm run lint-arg -- .", - "lint-arg": "eslint", - "lint-fix": "npm run lint-arg -- --fix .", + "lint": "eslint", + "lint-fix": "eslint --fix", "prepare": "husky", - "test-no-cov": "cross-env BABEL_ENV=test mocha", - "test": "c8 npm run test-no-cov", - "test-cov": "cross-env TIMING=1 c8 --reporter text npm run test-no-cov", - "test-index": "npm run test-no-cov -- test/rules/index.js" + "test-no-cov": "BABEL_ENV=test mocha", + "test": "c8 pnpm run test-no-cov", + "test-cov": "TIMING=1 c8 --reporter text pnpm run test-no-cov", + "test-index": "pnpm run test-no-cov test/rules/index.js" }, "version": "1.0.0" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a976bf7ad..ddb1167eb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -135,9 +135,6 @@ importers: chai: specifier: ^5.2.0 version: 5.2.0 - cross-env: - specifier: ^7.0.3 - version: 7.0.3 decamelize: specifier: ^6.0.0 version: 6.0.0 @@ -1089,9 +1086,6 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - '@napi-rs/wasm-runtime@0.2.10': - resolution: {integrity: sha512-bCsCyeZEwVErsGmyPNSzwfwFn4OdxBj0mmv6hOFucB/k81Ojdu68RbZdxYsRQUPc9l6SU5F/cG+bXgWs3oUgsQ==} - '@napi-rs/wasm-runtime@0.2.11': resolution: {integrity: sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==} @@ -2226,11 +2220,6 @@ packages: resolution: {integrity: sha512-nXvJjnfDytOOaPOonX0h0a1ggMoqrhdekGeZkD6hkcWYvlCWhU719tKFVh8eU04CnMwu3uwe1JjwuUF2C3k2qg==} engines: {node: '>=4.0.0'} - cross-env@7.0.3: - resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} - engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} - hasBin: true - cross-inspect@1.0.1: resolution: {integrity: sha512-Pcw1JTvZLSJH83iiGWt6fRcT+BjZlCDRVwYLbUcHzv/CRpB7r0MlSrGbIyQvVSNyGnbt7G4AXuyCiDR3POvZ1A==} engines: {node: '>=16.0.0'} @@ -6944,13 +6933,6 @@ snapshots: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 - '@napi-rs/wasm-runtime@0.2.10': - dependencies: - '@emnapi/core': 1.4.3 - '@emnapi/runtime': 1.4.3 - '@tybys/wasm-util': 0.9.0 - optional: true - '@napi-rs/wasm-runtime@0.2.11': dependencies: '@emnapi/core': 1.4.3 @@ -7589,7 +7571,7 @@ snapshots: '@unrs/resolver-binding-wasm32-wasi@1.7.8': dependencies: - '@napi-rs/wasm-runtime': 0.2.10 + '@napi-rs/wasm-runtime': 0.2.11 optional: true '@unrs/resolver-binding-wasm32-wasi@1.9.0': @@ -8224,10 +8206,6 @@ snapshots: dependencies: lodash.get: 4.4.2 - cross-env@7.0.3: - dependencies: - cross-spawn: 7.0.6 - cross-inspect@1.0.1: dependencies: tslib: 2.8.1 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 0da79a178..7263746d3 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,5 @@ ignoredBuiltDependencies: - core-js - core-js-pure + +shellEmulator: true diff --git a/src/bin/generateDocs.js b/src/bin/generateDocs.js index 6b00304a6..22f989fdc 100644 --- a/src/bin/generateDocs.js +++ b/src/bin/generateDocs.js @@ -267,7 +267,7 @@ const assertDocsAreUpToDate = async () => { const isUpToDate = fs.readFileSync(docPath, 'utf8') === docContent; if (!isUpToDate) { - throw new Error('Docs are not up to date, please run `npm run create-docs` to update it.'); + throw new Error('Docs are not up to date, please run `pnpm run create-docs` to update it.'); } } }; diff --git a/src/bin/generateRule.js b/src/bin/generateRule.js index f3a5f63f9..7d78be2a0 100644 --- a/src/bin/generateRule.js +++ b/src/bin/generateRule.js @@ -8,7 +8,7 @@ import fs from 'fs/promises'; /** * @example * ```shell - * npm run create-rule my-new-rule -- --recommended + * pnpm run create-rule my-new-rule -- --recommended * ``` */ import open from 'open-editor'; diff --git a/test/rules/index.js b/test/rules/index.js index b5f8a8357..da65f5995 100644 --- a/test/rules/index.js +++ b/test/rules/index.js @@ -8,6 +8,9 @@ import { readFileSync, } from 'fs'; import defaultsDeep from 'lodash.defaultsdeep'; +import { + parseArgs, +} from 'node:util'; import { join, } from 'path'; @@ -31,7 +34,33 @@ const main = async () => { throw new Error('TypeScript guard'); } - for (const ruleName of process.env.npm_config_rule ? process.env.npm_config_rule.split(',') : ruleNames) { + /** + * @satisfies {import('node:util').ParseArgsOptionsConfig} + */ + const options = { + invalid: { + type: 'string', + }, + rule: { + type: 'string', + }, + valid: { + type: 'string', + }, + }; + + const { + values: { + invalid, + rule: rules, + valid, + }, + } = parseArgs({ + allowPositionals: true, + options, + }); + + for (const ruleName of rules ? rules.split(/[, ]/v) : ruleNames) { if (semver.gte(ESLint.version, '8.0.0') && ruleName === 'check-examples') { // Uses the processor instead for higher versions continue; @@ -124,24 +153,24 @@ const main = async () => { return assertion; }); - if (process.env.npm_config_invalid) { - const indexes = process.env.npm_config_invalid.split(','); + if (invalid) { + const indexes = invalid.split(/[, ]/v); assertions.invalid = assertions.invalid.filter((_assertion, idx) => { return indexes.includes(String(idx)) || indexes.includes(String(idx - assertions.invalid.length)); }); - if (!process.env.npm_config_valid) { + if (!valid) { assertions.valid = []; } } - if (process.env.npm_config_valid) { - const indexes = process.env.npm_config_valid.split(','); + if (valid) { + const indexes = valid.split(/[, ]/v); assertions.valid = assertions.valid.filter((_assertion, idx) => { return indexes.includes(String(idx)) || indexes.includes(String(idx - assertions.valid.length)); }); - if (!process.env.npm_config_invalid) { + if (!invalid) { assertions.invalid = []; } } From e9b0877026c928f3bc3e4eb554b97766376e7f19 Mon Sep 17 00:00:00 2001 From: Eli <88557639+lishaduck@users.noreply.github.com> Date: Thu, 31 Jul 2025 19:08:49 -0500 Subject: [PATCH 029/189] fix: jsdocProcessorPlugin types (#1441) --- src/getJsdocProcessorPlugin.js | 48 ++++++++++++++++++++++++---------- 1 file changed, 34 insertions(+), 14 deletions(-) diff --git a/src/getJsdocProcessorPlugin.js b/src/getJsdocProcessorPlugin.js index fa45dd4d1..62913fe96 100644 --- a/src/getJsdocProcessorPlugin.js +++ b/src/getJsdocProcessorPlugin.js @@ -16,6 +16,17 @@ import { join, } from 'node:path'; +/** + * @import { + * Integer, + * JsdocBlockWithInline, + * } from './iterateJsdoc.js'; + * @import { + * ESLint, + * Linter, + * } from 'eslint'; + */ + const { version, } = JSON.parse( @@ -43,7 +54,7 @@ const escapeStringRegexp = (str) => { /** * @param {string} str * @param {string} ch - * @returns {import('./iterateJsdoc.js').Integer} + * @returns {Integer} */ const countChars = (str, ch) => { return (str.match(new RegExp(escapeStringRegexp(ch), 'gv')) || []).length; @@ -52,8 +63,8 @@ const countChars = (str, ch) => { /** * @param {string} text * @returns {[ - * import('./iterateJsdoc.js').Integer, - * import('./iterateJsdoc.js').Integer + * Integer, + * Integer * ]} */ const getLinesCols = (text) => { @@ -95,6 +106,7 @@ const getLinesCols = (text) => { * We use a function for the ability of the user to pass in a config, but * without requiring all users of the plugin to do so. * @param {JsdocProcessorOptions} [options] + * @returns {ESLint.Plugin} */ export const getJsdocProcessorPlugin = (options = {}) => { const { @@ -150,7 +162,7 @@ export const getJsdocProcessorPlugin = (options = {}) => { let extraMessages = []; /** - * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc + * @param {JsdocBlockWithInline} jsdoc * @param {string} jsFileName * @param {[number, number]} commentLineCols */ @@ -170,19 +182,19 @@ export const getJsdocProcessorPlugin = (options = {}) => { * source: string, * targetTagName: string, * rules?: import('eslint').Linter.RulesRecord|undefined, - * lines?: import('./iterateJsdoc.js').Integer, - * cols?: import('./iterateJsdoc.js').Integer, + * lines?: Integer, + * cols?: Integer, * skipInit?: boolean, * ext: string, * sources?: { - * nonJSPrefacingCols: import('./iterateJsdoc.js').Integer, - * nonJSPrefacingLines: import('./iterateJsdoc.js').Integer, + * nonJSPrefacingCols: Integer, + * nonJSPrefacingLines: Integer, * string: string, * }[], * tag?: import('comment-parser').Spec & { - * line?: import('./iterateJsdoc.js').Integer, + * line?: Integer, * }|{ - * line: import('./iterateJsdoc.js').Integer, + * line: Integer, * } * }} cfg */ @@ -210,8 +222,8 @@ export const getJsdocProcessorPlugin = (options = {}) => { /** * @param {{ - * nonJSPrefacingCols: import('./iterateJsdoc.js').Integer, - * nonJSPrefacingLines: import('./iterateJsdoc.js').Integer, + * nonJSPrefacingCols: Integer, + * nonJSPrefacingLines: Integer, * string: string * }} cfg */ @@ -234,7 +246,7 @@ export const getJsdocProcessorPlugin = (options = {}) => { // NOTE: `tag.line` can be 0 if of form `/** @tag ... */` const codeStartLine = /** * @type {import('comment-parser').Spec & { - * line: import('./iterateJsdoc.js').Integer, + * line: Integer, * }} */ (tag).line + nonJSPrefacingLines; const codeStartCol = likelyNestedJSDocIndentSpace; @@ -567,6 +579,7 @@ export const getJsdocProcessorPlugin = (options = {}) => { /** * @param {string} text * @param {string} filename + * @returns {(string | Linter.ProcessorFile)[]} */ preprocess (text, filename) { try { @@ -634,7 +647,14 @@ export const getJsdocProcessorPlugin = (options = {}) => { filename, commentLineCols[idx], ); - }).filter(Boolean), + }).filter( + /** + * @returns {file is Linter.ProcessorFile} + */ + (file) => { + return file !== null && file !== undefined; + }, + ), ]; /* c8 ignore next 6 */ } catch (error) { From af03395541586307ceb215452166254b9fe2e160 Mon Sep 17 00:00:00 2001 From: Eli <88557639+lishaduck@users.noreply.github.com> Date: Tue, 5 Aug 2025 17:43:39 -0500 Subject: [PATCH 030/189] fix: move to tsdown for proper types (#1440) BREAKING CHANGES: * refactor: move to tsdown * chore: remove unused devDeps. and avoid babel-node --------- Co-authored-by: Brett Zamir --- .npmignore | 18 - package.json | 62 +- pnpm-lock.yaml | 1413 +++++++++-------- ...generateOptions.mjs => generateOptions.js} | 0 tsconfig-prod.json | 21 - tsdown.config.ts | 34 + 6 files changed, 807 insertions(+), 741 deletions(-) delete mode 100755 .npmignore rename src/bin/{generateOptions.mjs => generateOptions.js} (100%) delete mode 100644 tsconfig-prod.json create mode 100644 tsdown.config.ts diff --git a/.npmignore b/.npmignore deleted file mode 100755 index 5219b9654..000000000 --- a/.npmignore +++ /dev/null @@ -1,18 +0,0 @@ -coverage -bin -test -.* -*.log -CONTRIBUTING.md -tsconfig*.json -pnpm-workspace.yaml -eslint.config.js -*.d.ts -*.d.ts.map -!dist/index.d.ts -!dist/index.d.ts.map -!dist/getJsdocProcessorPlugin.d.ts -!dist/getJsdocProcessorPlugin.d.ts.map -!dist/iterateJsdoc.d.ts -!dist/iterateJsdoc.d.ts.map -docs diff --git a/package.json b/package.json index da3f0960e..1d26e2dab 100644 --- a/package.json +++ b/package.json @@ -18,10 +18,9 @@ }, "description": "JSDoc linting rules for ESLint.", "devDependencies": { - "@babel/cli": "^7.27.2", + "@arethetypeswrong/core": "^0.18.2", "@babel/core": "^7.27.4", "@babel/eslint-parser": "^7.27.5", - "@babel/node": "^7.27.1", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-transform-flow-strip-types": "^7.27.1", "@babel/preset-env": "^7.27.2", @@ -63,11 +62,12 @@ "lodash.defaultsdeep": "^4.6.1", "mocha": "^11.7.0", "open-editor": "^5.1.0", - "replace": "^1.2.2", - "rimraf": "^6.0.1", + "publint": "^0.3.12", "semantic-release": "^24.2.5", + "tsdown": "^0.13.0", "typescript": "5.8.3", - "typescript-eslint": "^8.34.1" + "typescript-eslint": "^8.34.1", + "unplugin-unused": "^0.5.1" }, "engines": { "node": ">=20.11.0" @@ -82,25 +82,42 @@ "*.js": "eslint --fix" }, "type": "module", - "main": "./dist/index.cjs", - "types": "./dist/index.d.ts", "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./src/index.js", - "require": "./dist/index.cjs" + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + }, + "default": { + "types": "./dist/index.d.cts", + "default": "./dist/index.cjs" + } }, "./getJsdocProcessorPlugin.js": { - "types": "./dist/getJsdocProcessorPlugin.d.ts", - "import": "./dist/getJsdocProcessorPlugin.cjs", - "require": "./src/getJsdocProcessorPlugin.js" + "import": { + "types": "./dist/getJsdocProcessorPlugin.d.ts", + "default": "./dist/getJsdocProcessorPlugin.js" + }, + "default": { + "types": "./dist/getJsdocProcessorPlugin.d.cts", + "default": "./dist/getJsdocProcessorPlugin.cjs" + } }, "./iterateJsdoc.js": { - "types": "./dist/iterateJsdoc.d.ts", - "import": "./dist/iterateJsdoc.cjs", - "require": "./src/iterateJsdoc.js" - } + "import": { + "types": "./dist/iterateJsdoc.d.ts", + "default": "./dist/iterateJsdoc.js" + }, + "default": { + "types": "./dist/iterateJsdoc.d.cts", + "default": "./dist/iterateJsdoc.cjs" + } + }, + "./package.json": "./package.json" }, + "files": [ + "dist/" + ], "name": "eslint-plugin-jsdoc", "mocha": { "reporter": "dot", @@ -139,12 +156,11 @@ }, "scripts": { "tsc": "tsc", - "tsc-build": "tsc -p tsconfig-prod.json", - "build": "rimraf ./dist && NODE_ENV=production babel ./src --out-file-extension .cjs --out-dir ./dist --copy-files --source-maps --ignore ./src/bin/*.js --no-copy-ignored && replace 'require\\(\"\\.(.*?)\\.[^.]*?\"\\)' 'require(\".$1.cjs\")' 'dist' -r --include=\"*.cjs\" && pnpm tsc-build", - "check-docs": "babel-node ./src/bin/generateDocs.js --check", - "create-docs": "pnpm run create-options && babel-node ./src/bin/generateDocs.js", - "create-rule": "babel-node ./src/bin/generateRule.js", - "create-options": "node ./src/bin/generateOptions.mjs", + "build": "tsdown", + "check-docs": "node ./src/bin/generateDocs.js --check", + "create-docs": "pnpm run create-options && node ./src/bin/generateDocs.js", + "create-rule": "node ./src/bin/generateRule.js", + "create-options": "node ./src/bin/generateOptions.js", "install-offline": "pnpm install --prefer-offline --no-audit", "lint": "eslint", "lint-fix": "eslint --fix", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ddb1167eb..382c3dc6b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -39,18 +39,15 @@ importers: specifier: ^4.0.0 version: 4.0.0 devDependencies: - '@babel/cli': - specifier: ^7.27.2 - version: 7.27.2(@babel/core@7.27.4) + '@arethetypeswrong/core': + specifier: ^0.18.2 + version: 0.18.2 '@babel/core': specifier: ^7.27.4 version: 7.27.4 '@babel/eslint-parser': specifier: ^7.27.5 version: 7.27.5(@babel/core@7.27.4)(eslint@9.29.0(jiti@2.4.2)) - '@babel/node': - specifier: ^7.27.1 - version: 7.27.1(@babel/core@7.27.4) '@babel/plugin-syntax-class-properties': specifier: ^7.12.13 version: 7.12.13(@babel/core@7.27.4) @@ -143,7 +140,7 @@ importers: version: 9.29.0(jiti@2.4.2) eslint-config-canonical: specifier: ~44.9.5 - version: 44.9.5(@types/eslint@9.6.1)(@types/node@24.0.3)(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + version: 44.9.5(@types/eslint@9.6.1)(@types/node@24.0.3)(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) gitdown: specifier: ^4.1.1 version: 4.1.1(re2@1.20.9) @@ -174,21 +171,24 @@ importers: open-editor: specifier: ^5.1.0 version: 5.1.0 - replace: - specifier: ^1.2.2 - version: 1.2.2 - rimraf: - specifier: ^6.0.1 - version: 6.0.1 + publint: + specifier: ^0.3.12 + version: 0.3.12 semantic-release: specifier: ^24.2.5 version: 24.2.5(typescript@5.8.3) + tsdown: + specifier: ^0.13.0 + version: 0.13.0(@arethetypeswrong/core@0.18.2)(publint@0.3.12)(typescript@5.8.3)(unplugin-unused@0.5.1) typescript: specifier: 5.8.3 version: 5.8.3 typescript-eslint: specifier: ^8.34.1 version: 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + unplugin-unused: + specifier: ^0.5.1 + version: 0.5.1 packages: @@ -200,12 +200,12 @@ packages: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} - '@babel/cli@7.27.2': - resolution: {integrity: sha512-cfd7DnGlhH6OIyuPSSj3vcfIdnbXukhAyKY8NaZrFadC7pXyL9mOL5WgjcptiEJLi5k3j8aYvLIVCzezrWTaiA==} - engines: {node: '>=6.9.0'} - hasBin: true - peerDependencies: - '@babel/core': ^7.0.0-0 + '@andrewbranch/untar.js@1.0.3': + resolution: {integrity: sha512-Jh15/qVmrLGhkKJBdXlK1+9tY4lZruYjsgkDFj08ZmDiWVBLJcqkok7Z0/R0In+i1rScBpJlSvrTS2Lm41Pbnw==} + + '@arethetypeswrong/core@0.18.2': + resolution: {integrity: sha512-GiwTmBFOU1/+UVNqqCGzFJYfBXEytUkiI+iRZ6Qx7KmUVtLm00sYySkfe203C9QtPG11yOz1ZaMek8dT/xnlgg==} + engines: {node: '>=20'} '@babel/code-frame@7.24.7': resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} @@ -234,6 +234,10 @@ packages: resolution: {integrity: sha512-xnlJYj5zepml8NXtjkG0WquFUv8RskFqyFcVgTBp5k+NaA/8uw/K+OSVf8AMGw5e9HKP2ETd5xpK5MLZQD6b4Q==} engines: {node: '>=6.9.0'} + '@babel/generator@7.28.0': + resolution: {integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==} + engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.24.7': resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} engines: {node: '>=6.9.0'} @@ -320,18 +324,10 @@ packages: resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.24.8': - resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} - engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.27.1': resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.24.7': - resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.27.1': resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} engines: {node: '>=6.9.0'} @@ -352,20 +348,13 @@ packages: resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} - '@babel/node@7.27.1': - resolution: {integrity: sha512-ef8ZrhxIku9LrphvyNywpiMf1UJsYQll7S4eKa228ivswPcwmObp98o5h5wL2n9FrSAuo1dsMwJ8cS1LEcBSog==} - engines: {node: '>=6.9.0'} - hasBin: true - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/parser@7.24.7': - resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} + '@babel/parser@7.27.4': + resolution: {integrity: sha512-BRmLHGwpUqLFR2jzx9orBuX/ABDkj2jLKOXrHDTN2aOKL+jFDDKaRNo9nyYsIl9h/UE/7lMKdDjKQQyxKKDZ7g==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.27.4': - resolution: {integrity: sha512-BRmLHGwpUqLFR2jzx9orBuX/ABDkj2jLKOXrHDTN2aOKL+jFDDKaRNo9nyYsIl9h/UE/7lMKdDjKQQyxKKDZ7g==} + '@babel/parser@7.28.0': + resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==} engines: {node: '>=6.0.0'} hasBin: true @@ -751,12 +740,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - '@babel/register@7.27.1': - resolution: {integrity: sha512-K13lQpoV54LATKkzBpBAEu1GGSIRzxR9f4IN4V8DCDgiUMo2UDGagEZr3lPeVNJPLkWUi5JE4hCHKneVTwQlYQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/regjsgen@0.8.0': resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} @@ -768,30 +751,33 @@ packages: resolution: {integrity: sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==} engines: {node: '>=6.9.0'} - '@babel/types@7.25.2': - resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==} - engines: {node: '>=6.9.0'} - '@babel/types@7.27.3': resolution: {integrity: sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==} engines: {node: '>=6.9.0'} + '@babel/types@7.28.2': + resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} + engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@1.0.2': resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} + '@braidai/lang@1.1.1': + resolution: {integrity: sha512-5uM+no3i3DafVgkoW7ayPhEGHNNBZCSj5TrGDQt0ayEKQda5f3lAXlmQg0MR5E0gKgmTzUUEtSWHsEC3h9jUcg==} + '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} - '@emnapi/core@1.4.3': - resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==} + '@emnapi/core@1.4.5': + resolution: {integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==} - '@emnapi/runtime@1.4.3': - resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} + '@emnapi/runtime@1.4.5': + resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==} - '@emnapi/wasi-threads@1.0.2': - resolution: {integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==} + '@emnapi/wasi-threads@1.0.4': + resolution: {integrity: sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==} '@envelop/core@5.2.3': resolution: {integrity: sha512-KfoGlYD/XXQSc3BkM1/k15+JQbkQ4ateHazeZoWl9P71FsLTDXSjGy6j7QqfhpIDSbxNISqhPMfZHYSbDFOofQ==} @@ -1068,6 +1054,9 @@ packages: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} + '@jridgewell/gen-mapping@0.3.12': + resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} + '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} @@ -1083,18 +1072,27 @@ packages: '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@jridgewell/sourcemap-codec@1.5.4': + resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} + '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - '@napi-rs/wasm-runtime@0.2.11': - resolution: {integrity: sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==} + '@jridgewell/trace-mapping@0.3.29': + resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} + + '@loaderkit/resolve@1.0.4': + resolution: {integrity: sha512-rJzYKVcV4dxJv+vW6jlvagF8zvGxHJ2+HTr1e2qOejfmGhAApgJHl8Aog4mMszxceTRiKTTbnpgmTO1bEZHV/A==} + + '@napi-rs/wasm-runtime@0.2.12': + resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} + + '@napi-rs/wasm-runtime@1.0.1': + resolution: {integrity: sha512-KVlQ/jgywZpixGCKMNwxStmmbYEMyokZpCf2YuIChhfJA2uqfAKNEM8INz7zzTo55iEXfBhIIs3VqYyqzDLj8g==} '@next/eslint-plugin-next@15.3.3': resolution: {integrity: sha512-VKZJEiEdpKkfBmcokGjHu0vGDG+8CehGs90tBEy/IDoDDKGngeyIStt2MmE5FYNyU9BhgR7tybNWTAJY/30u+Q==} - '@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3': - resolution: {integrity: sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==} - '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} @@ -1170,6 +1168,13 @@ packages: '@octokit/types@14.1.0': resolution: {integrity: sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==} + '@oxc-project/runtime@0.78.0': + resolution: {integrity: sha512-jOU7sDFMyq5ShGJC21UobalVzqcdtWGfySVp8ELvKoVLzMpLHb4kv1bs9VKxaP8XC7Z9hlAXwEKVhCTN+j21aQ==} + engines: {node: '>=6.9.0'} + + '@oxc-project/types@0.78.0': + resolution: {integrity: sha512-8FvExh0WRWN1FoSTjah1xa9RlavZcJQ8/yxRbZ7ElmSa2Ij5f5Em7MvRbSthE6FbwC6Wh8iAw0Gpna7QdoqLGg==} + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -1190,12 +1195,93 @@ packages: resolution: {integrity: sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==} engines: {node: '>=12'} + '@publint/pack@0.1.2': + resolution: {integrity: sha512-S+9ANAvUmjutrshV4jZjaiG8XQyuJIZ8a4utWmN/vW1sgQ9IfBnPndwkmQYw53QmouOIytT874u65HEmu6H5jw==} + engines: {node: '>=18'} + + '@quansync/fs@0.1.3': + resolution: {integrity: sha512-G0OnZbMWEs5LhDyqy2UL17vGhSVHkQIfVojMtEWVenvj0V5S84VBgy86kJIuNsGDp2p7sTKlpSIpBUWdC35OKg==} + engines: {node: '>=20.0.0'} + '@repeaterjs/repeater@3.0.5': resolution: {integrity: sha512-l3YHBLAol6d/IKnB9LhpD0cEZWAoe3eFKUyTYWmFmCO2Q/WOckxLQAUyMZWwZV2M/m3+4vgRoaolFqaII82/TA==} '@repeaterjs/repeater@3.0.6': resolution: {integrity: sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==} + '@rolldown/binding-android-arm64@1.0.0-beta.30': + resolution: {integrity: sha512-4j7QBitb/WMT1fzdJo7BsFvVNaFR5WCQPdf/RPDHEsgQIYwBaHaL47KTZxncGFQDD1UAKN3XScJ0k7LAsZfsvg==} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.0.0-beta.30': + resolution: {integrity: sha512-4vWFTe1o5LXeitI2lW8qMGRxxwrH/LhKd2HDLa/QPhdxohvdnfKyDZWN96XUhDyje2bHFCFyhMs3ak2lg2mJFA==} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.0.0-beta.30': + resolution: {integrity: sha512-MxrfodqImbsDFFFU/8LxyFPZjt7s4ht8g2Zb76EmIQ+xlmit46L9IzvWiuMpEaSJ5WbnjO7fCDWwakMGyJJ+Dw==} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.0.0-beta.30': + resolution: {integrity: sha512-c/TQXcATKoO8qE1bCjCOkymZTu7yVUAxBSNLp42Q97XHCb0Cu9v6MjZpB6c7Hq9NQ9NzW44uglak9D/r77JeDw==} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.30': + resolution: {integrity: sha512-Vxci4xylM11zVqvrmezAaRjGBDyOlMRtlt7TDgxaBmSYLuiokXbZpD8aoSuOyjUAeN0/tmWItkxNGQza8UWGNQ==} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.30': + resolution: {integrity: sha512-iEBEdSs25Ol0lXyVNs763f7YPAIP0t1EAjoXME81oJ94DesJslaLTj71Rn1shoMDVA+dfkYA286w5uYnOs9ZNA==} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.30': + resolution: {integrity: sha512-Ny684Sn1X8c+gGLuDlxkOuwiEE3C7eEOqp1/YVBzQB4HO7U/b4n7alvHvShboOEY5DP1fFUjq6Z+sBLYlCIZbQ==} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-arm64-ohos@1.0.0-beta.30': + resolution: {integrity: sha512-6moyULHDPKwt5RDEV72EqYw5n+s46AerTwtEBau5wCsZd1wuHS1L9z6wqhKISXAFTK9sneN0TEjvYKo+sgbbiA==} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.30': + resolution: {integrity: sha512-p0yoPdoGg5Ow2YZKKB5Ypbn58i7u4XFk3PvMkriFnEcgtVk40c5u7miaX7jH0JdzahyXVBJ/KT5yEpJrzQn8yg==} + cpu: [x64] + os: [linux] + + '@rolldown/binding-linux-x64-musl@1.0.0-beta.30': + resolution: {integrity: sha512-sM/KhCrsT0YdHX10mFSr0cvbfk1+btG6ftepAfqhbcDfhi0s65J4dTOxGmklJnJL9i1LXZ8WA3N4wmnqsfoK8Q==} + cpu: [x64] + os: [linux] + + '@rolldown/binding-wasm32-wasi@1.0.0-beta.30': + resolution: {integrity: sha512-i3kD5OWs8PQP0V+JW3TFyCLuyjuNzrB45em0g84Jc+gvnDsGVlzVjMNPo7txE/yT8CfE90HC/lDs3ry9FvaUyw==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.30': + resolution: {integrity: sha512-q7mrYln30V35VrCqnBVQQvNPQm8Om9HC59I3kMYiOWogvJobzSPyO+HA1MP363+Qgwe39I2I1nqBKPOtWZ33AQ==} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.30': + resolution: {integrity: sha512-nUqGBt39XTpbBEREEnyKofdP3uz+SN/x2884BH+N3B2NjSUrP6NXwzltM35C0wKK42hX/nthRrwSgj715m99Jw==} + cpu: [ia32] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.30': + resolution: {integrity: sha512-lbnvUwAXIVWSXAeZrCa4b1KvV/DW0rBnMHuX0T7I6ey1IsXZ90J37dEgt3j48Ex1Cw1E+5H7VDNP2gyOX8iu3w==} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.0-beta.30': + resolution: {integrity: sha512-whXaSoNUFiyDAjkUF8OBpOm77Szdbk5lGNqFe6CbVbJFrhCCPinCbRA3NjawwlNHla1No7xvXXh+CpSxnPfUEw==} + '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} @@ -1245,8 +1331,8 @@ packages: peerDependencies: eslint: '>=9.0.0' - '@tybys/wasm-util@0.9.0': - resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} + '@tybys/wasm-util@0.10.0': + resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==} '@types/chai@5.2.2': resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} @@ -1417,6 +1503,10 @@ packages: resolution: {integrity: sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.38.0': + resolution: {integrity: sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@6.21.0': resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -1484,24 +1574,29 @@ packages: '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - '@unrs/resolver-binding-android-arm-eabi@1.9.0': - resolution: {integrity: sha512-h1T2c2Di49ekF2TE8ZCoJkb+jwETKUIPDJ/nO3tJBKlLFPu+fyd93f0rGP/BvArKx2k2HlRM4kqkNarj3dvZlg==} + '@unrs/resolver-binding-android-arm-eabi@1.11.1': + resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} cpu: [arm] os: [android] - '@unrs/resolver-binding-android-arm64@1.9.0': - resolution: {integrity: sha512-sG1NHtgXtX8owEkJ11yn34vt0Xqzi3k9TJ8zppDmyG8GZV4kVWw44FHwKwHeEFl07uKPeC4ZoyuQaGh5ruJYPA==} + '@unrs/resolver-binding-android-arm64@1.11.1': + resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==} cpu: [arm64] os: [android] + '@unrs/resolver-binding-darwin-arm64@1.11.1': + resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==} + cpu: [arm64] + os: [darwin] + '@unrs/resolver-binding-darwin-arm64@1.7.8': resolution: {integrity: sha512-rsRK8T7yxraNRDmpFLZCWqpea6OlXPNRRCjWMx24O1V86KFol7u2gj9zJCv6zB1oJjtnzWceuqdnCgOipFcJPA==} cpu: [arm64] os: [darwin] - '@unrs/resolver-binding-darwin-arm64@1.9.0': - resolution: {integrity: sha512-nJ9z47kfFnCxN1z/oYZS7HSNsFh43y2asePzTEZpEvK7kGyuShSl3RRXnm/1QaqFL+iP+BjMwuB+DYUymOkA5A==} - cpu: [arm64] + '@unrs/resolver-binding-darwin-x64@1.11.1': + resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==} + cpu: [x64] os: [darwin] '@unrs/resolver-binding-darwin-x64@1.7.8': @@ -1509,28 +1604,28 @@ packages: cpu: [x64] os: [darwin] - '@unrs/resolver-binding-darwin-x64@1.9.0': - resolution: {integrity: sha512-TK+UA1TTa0qS53rjWn7cVlEKVGz2B6JYe0C++TdQjvWYIyx83ruwh0wd4LRxYBM5HeuAzXcylA9BH2trARXJTw==} + '@unrs/resolver-binding-freebsd-x64@1.11.1': + resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==} cpu: [x64] - os: [darwin] + os: [freebsd] '@unrs/resolver-binding-freebsd-x64@1.7.8': resolution: {integrity: sha512-ST4uqF6FmdZQgv+Q73FU1uHzppeT4mhX3IIEmHlLObrv5Ep50olWRz0iQ4PWovadjHMTAmpuJAGaAuCZYb7UAQ==} cpu: [x64] os: [freebsd] - '@unrs/resolver-binding-freebsd-x64@1.9.0': - resolution: {integrity: sha512-6uZwzMRFcD7CcCd0vz3Hp+9qIL2jseE/bx3ZjaLwn8t714nYGwiE84WpaMCYjU+IQET8Vu/+BNAGtYD7BG/0yA==} - cpu: [x64] - os: [freebsd] + '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': + resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==} + cpu: [arm] + os: [linux] '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.8': resolution: {integrity: sha512-Z/A/4Rm2VWku2g25C3tVb986fY6unx5jaaCFpx1pbAj0OKkyuJ5wcQLHvNbIcJ9qhiYwXfrkB7JNlxrAbg7YFg==} cpu: [arm] os: [linux] - '@unrs/resolver-binding-linux-arm-gnueabihf@1.9.0': - resolution: {integrity: sha512-bPUBksQfrgcfv2+mm+AZinaKq8LCFvt5PThYqRotqSuuZK1TVKkhbVMS/jvSRfYl7jr3AoZLYbDkItxgqMKRkg==} + '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': + resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==} cpu: [arm] os: [linux] @@ -1539,9 +1634,9 @@ packages: cpu: [arm] os: [linux] - '@unrs/resolver-binding-linux-arm-musleabihf@1.9.0': - resolution: {integrity: sha512-uT6E7UBIrTdCsFQ+y0tQd3g5oudmrS/hds5pbU3h4s2t/1vsGWbbSKhBSCD9mcqaqkBwoqlECpUrRJCmldl8PA==} - cpu: [arm] + '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': + resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==} + cpu: [arm64] os: [linux] '@unrs/resolver-binding-linux-arm64-gnu@1.7.8': @@ -1549,8 +1644,8 @@ packages: cpu: [arm64] os: [linux] - '@unrs/resolver-binding-linux-arm64-gnu@1.9.0': - resolution: {integrity: sha512-vdqBh911wc5awE2bX2zx3eflbyv8U9xbE/jVKAm425eRoOVv/VseGZsqi3A3SykckSpF4wSROkbQPvbQFn8EsA==} + '@unrs/resolver-binding-linux-arm64-musl@1.11.1': + resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==} cpu: [arm64] os: [linux] @@ -1559,9 +1654,9 @@ packages: cpu: [arm64] os: [linux] - '@unrs/resolver-binding-linux-arm64-musl@1.9.0': - resolution: {integrity: sha512-/8JFZ/SnuDr1lLEVsxsuVwrsGquTvT51RZGvyDB/dOK3oYK2UqeXzgeyq6Otp8FZXQcEYqJwxb9v+gtdXn03eQ==} - cpu: [arm64] + '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': + resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==} + cpu: [ppc64] os: [linux] '@unrs/resolver-binding-linux-ppc64-gnu@1.7.8': @@ -1569,9 +1664,9 @@ packages: cpu: [ppc64] os: [linux] - '@unrs/resolver-binding-linux-ppc64-gnu@1.9.0': - resolution: {integrity: sha512-FkJjybtrl+rajTw4loI3L6YqSOpeZfDls4SstL/5lsP2bka9TiHUjgMBjygeZEis1oC8LfJTS8FSgpKPaQx2tQ==} - cpu: [ppc64] + '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': + resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==} + cpu: [riscv64] os: [linux] '@unrs/resolver-binding-linux-riscv64-gnu@1.7.8': @@ -1579,8 +1674,8 @@ packages: cpu: [riscv64] os: [linux] - '@unrs/resolver-binding-linux-riscv64-gnu@1.9.0': - resolution: {integrity: sha512-w/NZfHNeDusbqSZ8r/hp8iL4S39h4+vQMc9/vvzuIKMWKppyUGKm3IST0Qv0aOZ1rzIbl9SrDeIqK86ZpUK37w==} + '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': + resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==} cpu: [riscv64] os: [linux] @@ -1589,9 +1684,9 @@ packages: cpu: [riscv64] os: [linux] - '@unrs/resolver-binding-linux-riscv64-musl@1.9.0': - resolution: {integrity: sha512-bEPBosut8/8KQbUixPry8zg/fOzVOWyvwzOfz0C0Rw6dp+wIBseyiHKjkcSyZKv/98edrbMknBaMNJfA/UEdqw==} - cpu: [riscv64] + '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': + resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==} + cpu: [s390x] os: [linux] '@unrs/resolver-binding-linux-s390x-gnu@1.7.8': @@ -1599,9 +1694,9 @@ packages: cpu: [s390x] os: [linux] - '@unrs/resolver-binding-linux-s390x-gnu@1.9.0': - resolution: {integrity: sha512-LDtMT7moE3gK753gG4pc31AAqGUC86j3AplaFusc717EUGF9ZFJ356sdQzzZzkBk1XzMdxFyZ4f/i35NKM/lFA==} - cpu: [s390x] + '@unrs/resolver-binding-linux-x64-gnu@1.11.1': + resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==} + cpu: [x64] os: [linux] '@unrs/resolver-binding-linux-x64-gnu@1.7.8': @@ -1609,8 +1704,8 @@ packages: cpu: [x64] os: [linux] - '@unrs/resolver-binding-linux-x64-gnu@1.9.0': - resolution: {integrity: sha512-WmFd5KINHIXj8o1mPaT8QRjA9HgSXhN1gl9Da4IZihARihEnOylu4co7i/yeaIpcfsI6sYs33cNZKyHYDh0lrA==} + '@unrs/resolver-binding-linux-x64-musl@1.11.1': + resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==} cpu: [x64] os: [linux] @@ -1619,29 +1714,29 @@ packages: cpu: [x64] os: [linux] - '@unrs/resolver-binding-linux-x64-musl@1.9.0': - resolution: {integrity: sha512-CYuXbANW+WgzVRIl8/QvZmDaZxrqvOldOwlbUjIM4pQ46FJ0W5cinJ/Ghwa/Ng1ZPMJMk1VFdsD/XwmCGIXBWg==} - cpu: [x64] - os: [linux] + '@unrs/resolver-binding-wasm32-wasi@1.11.1': + resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] '@unrs/resolver-binding-wasm32-wasi@1.7.8': resolution: {integrity: sha512-x94WnaU5g+pCPDVedfnXzoG6lCOF2xFGebNwhtbJCWfceE94Zj8aysSxdxotlrZrxnz5D3ijtyFUYtpz04n39Q==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@unrs/resolver-binding-wasm32-wasi@1.9.0': - resolution: {integrity: sha512-6Rp2WH0OoitMYR57Z6VE8Y6corX8C6QEMWLgOV6qXiJIeZ1F9WGXY/yQ8yDC4iTraotyLOeJ2Asea0urWj2fKQ==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] + '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': + resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==} + cpu: [arm64] + os: [win32] '@unrs/resolver-binding-win32-arm64-msvc@1.7.8': resolution: {integrity: sha512-vst2u8EJZ5L6jhJ6iLis3w9rg16aYqRxQuBAMYQRVrPMI43693hLP7DuqyOBRKgsQXy9/jgh204k0ViHkqQgdg==} cpu: [arm64] os: [win32] - '@unrs/resolver-binding-win32-arm64-msvc@1.9.0': - resolution: {integrity: sha512-rknkrTRuvujprrbPmGeHi8wYWxmNVlBoNW8+4XF2hXUnASOjmuC9FNF1tGbDiRQWn264q9U/oGtixyO3BT8adQ==} - cpu: [arm64] + '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': + resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==} + cpu: [ia32] os: [win32] '@unrs/resolver-binding-win32-ia32-msvc@1.7.8': @@ -1649,9 +1744,9 @@ packages: cpu: [ia32] os: [win32] - '@unrs/resolver-binding-win32-ia32-msvc@1.9.0': - resolution: {integrity: sha512-Ceymm+iBl+bgAICtgiHyMLz6hjxmLJKqBim8tDzpX61wpZOx2bPK6Gjuor7I2RiUynVjvvkoRIkrPyMwzBzF3A==} - cpu: [ia32] + '@unrs/resolver-binding-win32-x64-msvc@1.11.1': + resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==} + cpu: [x64] os: [win32] '@unrs/resolver-binding-win32-x64-msvc@1.7.8': @@ -1659,11 +1754,6 @@ packages: cpu: [x64] os: [win32] - '@unrs/resolver-binding-win32-x64-msvc@1.9.0': - resolution: {integrity: sha512-k59o9ZyeyS0hAlcaKFezYSH2agQeRFEB7KoQLXl3Nb3rgkqT1NY9Vwy+SqODiLmYnEjxWJVRE/yq2jFVqdIxZw==} - cpu: [x64] - os: [win32] - '@vitest/eslint-plugin@1.2.1': resolution: {integrity: sha512-JQr1jdVcrsoS7Sdzn83h9sq4DvREf9Q/onTZbJCqTVlv/76qb+TZrLv/9VhjnjSMHweQH5FdpMDeCR6aDe2fgw==} peerDependencies: @@ -1714,11 +1804,6 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - acorn@8.14.1: - resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} - engines: {node: '>=0.4.0'} - hasBin: true - acorn@8.15.0: resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} @@ -1728,8 +1813,8 @@ packages: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} engines: {node: '>= 14'} - agent-base@7.1.3: - resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} aggregate-error@3.1.0: @@ -1771,13 +1856,13 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} + ansis@4.1.0: + resolution: {integrity: sha512-BGcItUBWSMRgOCe+SVZJ+S7yTRG0eGt9cXAHev72yuGcY23hnLA7Bky5L/xLyPINoSN95geovfBkqoTlNZYa7w==} + engines: {node: '>=14'} + any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - are-docs-informative@0.0.2: resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} engines: {node: '>=14'} @@ -1830,10 +1915,6 @@ packages: resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} engines: {node: '>= 0.4'} - array.prototype.reduce@1.0.7: - resolution: {integrity: sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==} - engines: {node: '>= 0.4'} - array.prototype.tosorted@1.1.4: resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} engines: {node: '>= 0.4'} @@ -1861,6 +1942,10 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} + ast-kit@2.1.1: + resolution: {integrity: sha512-mfh6a7gKXE8pDlxTvqIc/syH/P3RkzbOF6LeHdcKztLEzYe6IMsRCL7N8vI7hqTGWNxpkCuuRTpT21xNWqhRtQ==} + engines: {node: '>=20.18.0'} + ast-types-flow@0.0.8: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} @@ -1925,9 +2010,8 @@ packages: before-after-hook@4.0.0: resolution: {integrity: sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==} - binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} + birpc@2.5.0: + resolution: {integrity: sha512-VSWO/W6nNQdyP520F1mhf+Lc2f8pjGQOtoHHm7Ze8Go1kX7akpVIrtTa0fn+HB0QJEDVacl6aO08YE0PgXfdnQ==} bluebird@2.11.0: resolution: {integrity: sha512-UfFSr22dmHPQqPP9XWHRhq+gWnHCYguQGkXQlbyPtW5qTnhFWA8/iXg765tH0cAjy7l/zPJ1aBTO0g5XgA7kvQ==} @@ -1964,9 +2048,6 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - builtin-modules@4.0.0: resolution: {integrity: sha512-p1n8zyCkt1BVrKNFymOHjcDSAl7oq/gUvfgULv2EblgpPVQlQr9yHnWjg9IJ2MhfwPqiYqMMrr01OY7yQoK2yA==} engines: {node: '>=18.20'} @@ -1985,6 +2066,10 @@ packages: monocart-coverage-reports: optional: true + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + cacache@18.0.4: resolution: {integrity: sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==} engines: {node: ^16.14.0 || >=18.0.0} @@ -2051,10 +2136,6 @@ packages: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} - chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} - chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} @@ -2067,6 +2148,9 @@ packages: resolution: {integrity: sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==} engines: {node: '>=8'} + cjs-module-lexer@1.4.3: + resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} + clean-regexp@1.0.0: resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} engines: {node: '>=4'} @@ -2096,9 +2180,6 @@ packages: resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} engines: {node: '>=18'} - cliui@6.0.0: - resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} - cliui@7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} @@ -2106,10 +2187,6 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} - clone-deep@4.0.1: - resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} - engines: {node: '>=6'} - clone-regexp@3.0.0: resolution: {integrity: sha512-ujdnoq2Kxb8s3ItNBtnYeXdm07FcU0u8ARAT1lQ2YdMwQC+cdiXX8KoqMVuglztILivceTtp4ivqGSmEmhBUJw==} engines: {node: '>=12'} @@ -2138,23 +2215,19 @@ packages: resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==} engines: {node: '>=20'} - commander@6.2.1: - resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} - engines: {node: '>= 6'} - comment-parser@1.4.1: resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} engines: {node: '>= 12.0.0'} - commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + confbox@0.2.2: + resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} + config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} @@ -2189,9 +2262,6 @@ packages: core-js-compat@3.42.0: resolution: {integrity: sha512-bQasjMfyDGyaeWKBIu33lHh9qlSR0MFE/Nmc6nMjf/iU9b3rSMdAYz1Baxrv4lPdGUsTqZudHA4jIGSJy0SWZQ==} - core-js@3.37.1: - resolution: {integrity: sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==} - core-util-is@1.0.2: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} @@ -2297,10 +2367,6 @@ packages: supports-color: optional: true - decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - decamelize@4.0.0: resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} engines: {node: '>=10'} @@ -2344,6 +2410,9 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -2352,6 +2421,10 @@ packages: resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==} engines: {node: '>=0.3.1'} + diff@8.0.2: + resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} + engines: {node: '>=0.3.1'} + dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -2387,6 +2460,15 @@ packages: resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} engines: {node: '>=4'} + dts-resolver@2.1.1: + resolution: {integrity: sha512-3BiGFhB6mj5Kv+W2vdJseQUYW+SKVzAFJL6YNP6ursbrwy1fXHRotfHi3xLNxe4wZl/K8qbAFeCDjZLjzqxxRw==} + engines: {node: '>=20.18.0'} + peerDependencies: + oxc-resolver: '>=11.0.0' + peerDependenciesMeta: + oxc-resolver: + optional: true + dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -2415,6 +2497,10 @@ packages: emojilib@2.4.0: resolution: {integrity: sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==} + empathic@2.0.0: + resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} + engines: {node: '>=14'} + encoding@0.1.13: resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} @@ -2462,9 +2548,6 @@ packages: resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} engines: {node: '>= 0.4'} - es-array-method-boxes-properly@1.0.0: - resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} - es-define-property@1.0.0: resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} engines: {node: '>= 0.4'} @@ -2574,8 +2657,8 @@ packages: unrs-resolver: optional: true - eslint-import-context@0.1.8: - resolution: {integrity: sha512-bq+F7nyc65sKpZGT09dY0S0QrOnQtuDVIfyTGQ8uuvtMIF7oHp6CEP3mouN0rrnYF3Jqo6Ke0BfU/5wASZue1w==} + eslint-import-context@0.1.9: + resolution: {integrity: sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} peerDependencies: unrs-resolver: ^1.0.0 @@ -2682,8 +2765,8 @@ packages: typescript: optional: true - eslint-plugin-import-x@4.15.1: - resolution: {integrity: sha512-JfVpNg1qMkPD66iaSgmMoSYeUCGS8UFSm3GwHV0IbuV3Knar/SyK5qqCct9+AxoMIzaM+KSO7KK5pOeOkC/3GQ==} + eslint-plugin-import-x@4.16.1: + resolution: {integrity: sha512-vPZZsiOKaBAIATpFE2uMI4w5IRwdv/FpQ+qZZMR4E+PeOcM4OeoEbqxRMnywdxP19TyB/3h6QBB0EWon7letSQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/utils': ^8.0.0 @@ -2922,6 +3005,9 @@ packages: exponential-backoff@3.1.2: resolution: {integrity: sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==} + exsolve@1.0.7: + resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==} + extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -2971,6 +3057,9 @@ packages: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} + fflate@0.8.2: + resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} + figures@2.0.0: resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} engines: {node: '>=4'} @@ -2995,10 +3084,6 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - find-cache-dir@2.1.0: - resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} - engines: {node: '>=6'} - find-up-simple@1.0.0: resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==} engines: {node: '>=18'} @@ -3007,10 +3092,6 @@ packages: resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} engines: {node: '>=4'} - find-up@3.0.0: - resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} - engines: {node: '>=6'} - find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -3079,17 +3160,9 @@ packages: resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - fs-readdir-recursive@1.1.0: - resolution: {integrity: sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==} - fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} @@ -3363,14 +3436,13 @@ packages: highlight.js@10.7.3: resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} - homedir-polyfill@1.0.3: - resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} - engines: {node: '>=0.10.0'} - hook-std@3.0.0: resolution: {integrity: sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + hosted-git-info@7.0.1: resolution: {integrity: sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==} engines: {node: ^16.14.0 || >=18.0.0} @@ -3532,10 +3604,6 @@ packages: resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} engines: {node: '>= 0.4'} - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} @@ -3670,10 +3738,6 @@ packages: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} - is-plain-object@2.0.4: - resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} - engines: {node: '>=0.10.0'} - is-proto-prop@2.0.0: resolution: {integrity: sha512-jl3NbQ/fGLv5Jhan4uX+Ge9ohnemqyblWVVCpAvtTQzNFvV2xhJq+esnkIbYQ9F1nITXoLfDDQLp7LBw/zzncg==} @@ -3776,10 +3840,6 @@ packages: resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} engines: {node: '>=16'} - isobject@3.0.1: - resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} - engines: {node: '>=0.10.0'} - isomorphic-ws@5.0.0: resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} peerDependencies: @@ -3831,6 +3891,9 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + js-types@1.0.0: resolution: {integrity: sha512-bfwqBW9cC/Lp7xcRpug7YrXm0IVw+T9e3g4mCYnv0Pjr3zIzU9PCQElYU9oSGAWzXlbdl9X5SAMPejO9sxkeUw==} engines: {node: '>=0.10.0'} @@ -3918,10 +3981,6 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - language-subtag-registry@0.3.22: resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} @@ -3965,10 +4024,6 @@ packages: resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} engines: {node: '>=4'} - locate-path@3.0.0: - resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} - engines: {node: '>=6'} - locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -4046,10 +4101,6 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - make-dir@2.1.0: - resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} - engines: {node: '>=6'} - make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} @@ -4137,9 +4188,6 @@ packages: resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} engines: {node: 20 || >=22} - minimatch@3.0.5: - resolution: {integrity: sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==} - minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -4203,21 +4251,30 @@ packages: moment@2.30.1: resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nan@2.22.2: - resolution: {integrity: sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==} + nan@2.23.0: + resolution: {integrity: sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ==} nano-spawn@1.0.2: resolution: {integrity: sha512-21t+ozMQDAL/UGgQVBbZ/xXvNO10++ZPuTmKRO8k9V3AClVRht49ahtDjfY8l1q6nSHOrE5ASfthzH3ol6R/hg==} engines: {node: '>=20.17'} - napi-postinstall@0.2.4: - resolution: {integrity: sha512-ZEzHJwBhZ8qQSbknHqYcdtQVr8zUgGyM/q6h6qAyhtyVMNrSgDhrC4disf03dYW0e+czXyLnZINnCTEkWy0eJg==} + napi-postinstall@0.2.5: + resolution: {integrity: sha512-kmsgUvCRIJohHjbZ3V8avP0I1Pekw329MVAMDzVxsrkjgdnqiwvMX5XwR+hWV66vsAtZ+iM+fVnq8RTQawUmCQ==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + hasBin: true + + napi-postinstall@0.3.2: + resolution: {integrity: sha512-tWVJxJHmBWLy69PvO96TZMZDrzmw5KeiZBz3RHmiM2XZ9grBJ2WgMAFVVg25nqp3ZjTFUs2Ftw1JhscL3Teliw==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} hasBin: true @@ -4247,9 +4304,6 @@ packages: resolution: {integrity: sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==} engines: {node: '>=18'} - node-environment-flags@1.0.6: - resolution: {integrity: sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==} - node-fetch@3.3.2: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -4275,10 +4329,6 @@ packages: resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} engines: {node: '>=0.10.0'} - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - normalize-url@8.0.0: resolution: {integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==} engines: {node: '>=14.16'} @@ -4409,10 +4459,6 @@ packages: resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} engines: {node: '>= 0.4'} - object.getownpropertydescriptors@2.1.8: - resolution: {integrity: sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==} - engines: {node: '>= 0.8'} - object.values@1.2.0: resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} engines: {node: '>= 0.4'} @@ -4480,10 +4526,6 @@ packages: resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} engines: {node: '>=4'} - p-locate@3.0.0: - resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} - engines: {node: '>=6'} - p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -4515,6 +4557,9 @@ packages: package-json-from-dist@1.0.0: resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + package-manager-detector@1.3.0: + resolution: {integrity: sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -4538,10 +4583,6 @@ packages: resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} engines: {node: '>=18'} - parse-passwd@1.0.0: - resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} - engines: {node: '>=0.10.0'} - parse-statements@1.0.11: resolution: {integrity: sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==} @@ -4596,6 +4637,9 @@ packages: resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} engines: {node: '>=12'} + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + pathval@2.0.0: resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} engines: {node: '>= 14.16'} @@ -4623,26 +4667,17 @@ packages: resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} engines: {node: '>=4'} - pify@4.0.1: - resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} - engines: {node: '>=6'} - - pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - pkg-conf@2.1.0: resolution: {integrity: sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==} engines: {node: '>=4'} - pkg-dir@3.0.0: - resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} - engines: {node: '>=6'} - pkg-dir@5.0.0: resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} engines: {node: '>=10'} + pkg-types@2.2.0: + resolution: {integrity: sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==} + pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} @@ -4700,6 +4735,11 @@ packages: psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + publint@0.3.12: + resolution: {integrity: sha512-1w3MMtL9iotBjm1mmXtG3Nk06wnq9UhGNRpQ2j6n1Zq7YAD6gnxMMZMIxlRPAydVjVbjSm+n0lhwqsD1m4LD5w==} + engines: {node: '>=18'} + hasBin: true + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -4708,6 +4748,9 @@ packages: resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} engines: {node: '>=0.6'} + quansync@0.2.10: + resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -4748,10 +4791,6 @@ packages: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - readdirp@4.1.2: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} @@ -4779,9 +4818,6 @@ packages: regenerate@1.4.2: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - regexp-ast-analysis@0.7.1: resolution: {integrity: sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -4824,11 +4860,6 @@ packages: remove-trailing-separator@1.1.0: resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} - replace@1.2.2: - resolution: {integrity: sha512-C4EDifm22XZM2b2JOYe6Mhn+lBsLBAvLbK8drfUQLTfD1KYl/n3VaW/CDju0Ny4w3xTtegBpg8YNSpFJPUDSjA==} - engines: {node: '>= 6'} - hasBin: true - req-all@0.1.0: resolution: {integrity: sha512-ZdvPr8uXy9ujX3KujwE2P1HWkMYgogIhqeAeyb47MqWjSfyxERSm0TNbN/IapCCmWDufXab04AYrRgObaJCJ6Q==} engines: {node: '>=4'} @@ -4842,9 +4873,6 @@ packages: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} - require-main-filename@2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - requireindex@1.1.0: resolution: {integrity: sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg==} engines: {node: '>=0.10.5'} @@ -4893,15 +4921,30 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - rimraf@6.0.1: - resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} - engines: {node: 20 || >=22} - hasBin: true - roarr@7.21.1: resolution: {integrity: sha512-3niqt5bXFY1InKU8HKWqqYTYjtrBaxBMnXELXCXUYgtNYGUtZM5rB46HIC430AyacL95iEniGf7RgqsesykLmQ==} engines: {node: '>=18.0'} + rolldown-plugin-dts@0.14.3: + resolution: {integrity: sha512-LsUPsPV2XpACe5wikxQzYBD0qg4nyxwUkLos5oF8v8qVO9jPpH6GRg2S5ZUELFry04Ab58C9Tibbi7dEbVLp2w==} + engines: {node: '>=20.18.0'} + peerDependencies: + '@typescript/native-preview': '>=7.0.0-dev.20250601.1' + rolldown: ^1.0.0-beta.9 + typescript: ^5.0.0 + vue-tsc: ~3.0.3 + peerDependenciesMeta: + '@typescript/native-preview': + optional: true + typescript: + optional: true + vue-tsc: + optional: true + + rolldown@1.0.0-beta.30: + resolution: {integrity: sha512-H/LmDTUPlm65hWOTjXvd1k0qrGinNi8LrG3JsHVm6Oit7STg0upBmgoG5PZUHbAnGTHr0MLoLyzjmH261lIqSg==} + hasBin: true + run-applescript@7.0.0: resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} engines: {node: '>=18'} @@ -4909,6 +4952,10 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + safe-array-concat@1.1.2: resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} @@ -4962,10 +5009,6 @@ packages: resolution: {integrity: sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==} engines: {node: '>=12'} - semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -4978,9 +5021,6 @@ packages: serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} - set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -4993,10 +5033,6 @@ packages: resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} engines: {node: '>= 0.4'} - shallow-clone@3.0.1: - resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} - engines: {node: '>=8'} - shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -5040,10 +5076,6 @@ packages: resolution: {integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==} engines: {node: '>=8'} - slash@2.0.0: - resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==} - engines: {node: '>=6'} - slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -5068,13 +5100,10 @@ packages: resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} engines: {node: '>= 14'} - socks@2.8.5: - resolution: {integrity: sha512-iF+tNDQla22geJdTyJB1wM/qrX9DMRwWrciEPwWLPRWAUEM8sQiyxgckLxWT1f7+9VabJS0jTGGr4QgBuvi6Ww==} + socks@2.8.6: + resolution: {integrity: sha512-pe4Y2yzru68lXCb38aAqRf5gvN8YdjP1lok5o0J7BOHljkyCGKVz7H3vpVIXKD27rj2giOJ7DwVyk/GWrPHDWA==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} @@ -5119,8 +5148,8 @@ packages: resolution: {integrity: sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - stable-hash-x@0.1.1: - resolution: {integrity: sha512-l0x1D6vhnsNUGPFVDx45eif0y6eedVC8nm5uACTrVFJFtl2mLRW17aWtVyxFCpn5t94VUPkjU8vSLwIuwwqtJQ==} + stable-hash-x@0.2.0: + resolution: {integrity: sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==} engines: {node: '>=12.0.0'} stable-hash@0.0.5: @@ -5314,6 +5343,9 @@ packages: tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + tinyexec@1.0.1: + resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} + tinyglobby@0.2.14: resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} @@ -5322,10 +5354,6 @@ packages: resolution: {integrity: sha512-noj0KdpWTBhwsKxMOXk0rN9otg4kTgLm4WohERRHbJ9IY+kSDKr3RmjitaQ3JFzny+DyvBOQKlFZhp0G0qNSfg==} hasBin: true - to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -5362,6 +5390,28 @@ packages: resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} engines: {node: '>=6'} + tsdown@0.13.0: + resolution: {integrity: sha512-+1ZqbLIYDAiNxtAvq9RsTg55PRvaMxGmtvRFBW2J+i4GfDKiyHAkxez1eB3EPvHG1Z917nsf2madsSeblJS3GA==} + engines: {node: '>=20.19.0'} + hasBin: true + peerDependencies: + '@arethetypeswrong/core': ^0.18.1 + publint: ^0.3.0 + typescript: ^5.0.0 + unplugin-lightningcss: ^0.4.0 + unplugin-unused: ^0.5.0 + peerDependenciesMeta: + '@arethetypeswrong/core': + optional: true + publint: + optional: true + typescript: + optional: true + unplugin-lightningcss: + optional: true + unplugin-unused: + optional: true + tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -5434,6 +5484,11 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' + typescript@5.6.1-rc: + resolution: {integrity: sha512-E3b2+1zEFu84jB0YQi9BORDjz9+jGbwwy1Zi3G0LUNw7a7cePUrHMRNy8aPh53nXpkFGVHSxIZo5vKTfYaFiBQ==} + engines: {node: '>=14.17'} + hasBin: true + typescript@5.8.3: resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} engines: {node: '>=14.17'} @@ -5451,6 +5506,9 @@ packages: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} + unconfig@7.3.2: + resolution: {integrity: sha512-nqG5NNL2wFVGZ0NA/aCFw0oJ2pxSf1lwg4Z5ill8wd7K4KX/rQbHlwbh+bjctXL5Ly1xtzHenHGOK0b+lG6JVg==} + undici-types@7.8.0: resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} @@ -5505,12 +5563,20 @@ packages: resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==} engines: {node: '>=0.10.0'} + unplugin-unused@0.5.1: + resolution: {integrity: sha512-USnsy4XsInQFcIb/kSt5HbTkwIIYfW1ujGN0jPanq76IvG7RsqHPk4kJqDoZSqCgDkTjolr72a/f7K1Hr2XmWg==} + engines: {node: '>=20.18.0'} + + unplugin@2.3.5: + resolution: {integrity: sha512-RyWSb5AHmGtjjNQ6gIlA67sHOsWpsbWpwDokLwTcejVdOjEkJZh7QKu14J00gDDVSh8kGH4KYC/TNBceXFZhtw==} + engines: {node: '>=18.12.0'} + + unrs-resolver@1.11.1: + resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} + unrs-resolver@1.7.8: resolution: {integrity: sha512-2zsXwyOXmCX9nGz4vhtZRYhe30V78heAv+KDc21A/KMdovGHbZcixeD5JHEF0DrFXzdytwuzYclcPbvp8A3Jlw==} - unrs-resolver@1.9.0: - resolution: {integrity: sha512-wqaRu4UnzBD2ABTC1kLfBjAqIDZ5YUTr/MLGa7By47JV1bJDSW7jq/ZSLigB7enLe7ubNaJhtnBXgrc/50cEhg==} - update-browserslist-db@1.1.3: resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} hasBin: true @@ -5551,13 +5617,13 @@ packages: resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} engines: {node: '>=10.12.0'} - v8flags@3.2.0: - resolution: {integrity: sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==} - engines: {node: '>= 0.10'} - validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + validate-npm-package-name@5.0.1: + resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + verror@1.10.0: resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} engines: {'0': node >=0.6.0} @@ -5566,6 +5632,9 @@ packages: resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} engines: {node: '>= 8'} + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + whatwg-mimetype@4.0.0: resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} engines: {node: '>=18'} @@ -5588,9 +5657,6 @@ packages: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} engines: {node: '>= 0.4'} - which-module@2.0.1: - resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - which-typed-array@1.1.15: resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} engines: {node: '>= 0.4'} @@ -5619,10 +5685,6 @@ packages: workerpool@9.3.2: resolution: {integrity: sha512-Xz4Nm9c+LiBHhDR5bDLnNzmj6+5F+cyEAWPMkbs2awq/dYazR/efelZzUAjB/y3kNHL+uzkHvxVVpaOfGCPV7A==} - wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} - wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -5661,9 +5723,6 @@ packages: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} - y18n@4.0.3: - resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} - y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -5683,10 +5742,6 @@ packages: engines: {node: '>= 14.6'} hasBin: true - yargs-parser@18.1.3: - resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} - engines: {node: '>=6'} - yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} @@ -5699,10 +5754,6 @@ packages: resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} engines: {node: '>=10'} - yargs@15.4.1: - resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} - engines: {node: '>=8'} - yargs@16.2.0: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} engines: {node: '>=10'} @@ -5732,19 +5783,18 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@babel/cli@7.27.2(@babel/core@7.27.4)': + '@andrewbranch/untar.js@1.0.3': {} + + '@arethetypeswrong/core@0.18.2': dependencies: - '@babel/core': 7.27.4 - '@jridgewell/trace-mapping': 0.3.25 - commander: 6.2.1 - convert-source-map: 2.0.0 - fs-readdir-recursive: 1.1.0 - glob: 7.2.3 - make-dir: 2.1.0 - slash: 2.0.0 - optionalDependencies: - '@nicolo-ribaudo/chokidar-2': 2.1.8-no-fsevents.3 - chokidar: 3.6.0 + '@andrewbranch/untar.js': 1.0.3 + '@loaderkit/resolve': 1.0.4 + cjs-module-lexer: 1.4.3 + fflate: 0.8.2 + lru-cache: 11.1.0 + semver: 7.7.2 + typescript: 5.6.1-rc + validate-npm-package-name: 5.0.1 '@babel/code-frame@7.24.7': dependencies: @@ -5803,9 +5853,17 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.0.2 + '@babel/generator@7.28.0': + dependencies: + '@babel/parser': 7.28.0 + '@babel/types': 7.28.2 + '@jridgewell/gen-mapping': 0.3.12 + '@jridgewell/trace-mapping': 0.3.29 + jsesc: 3.1.0 + '@babel/helper-annotate-as-pure@7.24.7': dependencies: - '@babel/types': 7.25.2 + '@babel/types': 7.27.3 '@babel/helper-annotate-as-pure@7.27.3': dependencies: @@ -5926,12 +5984,8 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-string-parser@7.24.8': {} - '@babel/helper-string-parser@7.27.1': {} - '@babel/helper-validator-identifier@7.24.7': {} - '@babel/helper-validator-identifier@7.27.1': {} '@babel/helper-validator-option@7.27.1': {} @@ -5951,28 +6005,18 @@ snapshots: '@babel/highlight@7.24.7': dependencies: - '@babel/helper-validator-identifier': 7.24.7 + '@babel/helper-validator-identifier': 7.27.1 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/node@7.27.1(@babel/core@7.27.4)': - dependencies: - '@babel/core': 7.27.4 - '@babel/register': 7.27.1(@babel/core@7.27.4) - commander: 6.2.1 - core-js: 3.37.1 - node-environment-flags: 1.0.6 - regenerator-runtime: 0.14.1 - v8flags: 3.2.0 - - '@babel/parser@7.24.7': + '@babel/parser@7.27.4': dependencies: - '@babel/types': 7.25.2 + '@babel/types': 7.27.3 - '@babel/parser@7.27.4': + '@babel/parser@7.28.0': dependencies: - '@babel/types': 7.27.3 + '@babel/types': 7.28.2 '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.27.4)': dependencies: @@ -6443,18 +6487,9 @@ snapshots: dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/types': 7.25.2 + '@babel/types': 7.27.3 esutils: 2.0.3 - '@babel/register@7.27.1(@babel/core@7.27.4)': - dependencies: - '@babel/core': 7.27.4 - clone-deep: 4.0.1 - find-cache-dir: 2.1.0 - make-dir: 2.1.0 - pirates: 4.0.6 - source-map-support: 0.5.21 - '@babel/regjsgen@0.8.0': {} '@babel/template@7.27.2': @@ -6475,34 +6510,35 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/types@7.25.2': + '@babel/types@7.27.3': dependencies: - '@babel/helper-string-parser': 7.24.8 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 - '@babel/types@7.27.3': + '@babel/types@7.28.2': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 '@bcoe/v8-coverage@1.0.2': {} + '@braidai/lang@1.1.1': {} + '@colors/colors@1.5.0': optional: true - '@emnapi/core@1.4.3': + '@emnapi/core@1.4.5': dependencies: - '@emnapi/wasi-threads': 1.0.2 + '@emnapi/wasi-threads': 1.0.4 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.4.3': + '@emnapi/runtime@1.4.5': dependencies: tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.0.2': + '@emnapi/wasi-threads@1.0.4': dependencies: tslib: 2.8.1 optional: true @@ -6916,6 +6952,11 @@ snapshots: '@istanbuljs/schema@0.1.3': {} + '@jridgewell/gen-mapping@0.3.12': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 @@ -6928,25 +6969,40 @@ snapshots: '@jridgewell/sourcemap-codec@1.4.15': {} + '@jridgewell/sourcemap-codec@1.5.4': {} + '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 - '@napi-rs/wasm-runtime@0.2.11': + '@jridgewell/trace-mapping@0.3.29': + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + + '@loaderkit/resolve@1.0.4': + dependencies: + '@braidai/lang': 1.1.1 + + '@napi-rs/wasm-runtime@0.2.12': + dependencies: + '@emnapi/core': 1.4.5 + '@emnapi/runtime': 1.4.5 + '@tybys/wasm-util': 0.10.0 + optional: true + + '@napi-rs/wasm-runtime@1.0.1': dependencies: - '@emnapi/core': 1.4.3 - '@emnapi/runtime': 1.4.3 - '@tybys/wasm-util': 0.9.0 + '@emnapi/core': 1.4.5 + '@emnapi/runtime': 1.4.5 + '@tybys/wasm-util': 0.10.0 optional: true '@next/eslint-plugin-next@15.3.3': dependencies: fast-glob: 3.3.1 - '@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3': - optional: true - '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': dependencies: eslint-scope: 5.1.1 @@ -6967,7 +7023,7 @@ snapshots: '@npmcli/agent@2.2.2': dependencies: - agent-base: 7.1.3 + agent-base: 7.1.4 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 lru-cache: 10.4.3 @@ -7040,6 +7096,10 @@ snapshots: dependencies: '@octokit/openapi-types': 25.1.0 + '@oxc-project/runtime@0.78.0': {} + + '@oxc-project/types@0.78.0': {} + '@pkgjs/parseargs@0.11.0': optional: true @@ -7057,10 +7117,62 @@ snapshots: '@pnpm/network.ca-file': 1.0.2 config-chain: 1.1.13 + '@publint/pack@0.1.2': {} + + '@quansync/fs@0.1.3': + dependencies: + quansync: 0.2.10 + '@repeaterjs/repeater@3.0.5': {} '@repeaterjs/repeater@3.0.6': {} + '@rolldown/binding-android-arm64@1.0.0-beta.30': + optional: true + + '@rolldown/binding-darwin-arm64@1.0.0-beta.30': + optional: true + + '@rolldown/binding-darwin-x64@1.0.0-beta.30': + optional: true + + '@rolldown/binding-freebsd-x64@1.0.0-beta.30': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.30': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.30': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.30': + optional: true + + '@rolldown/binding-linux-arm64-ohos@1.0.0-beta.30': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.30': + optional: true + + '@rolldown/binding-linux-x64-musl@1.0.0-beta.30': + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.0-beta.30': + dependencies: + '@napi-rs/wasm-runtime': 1.0.1 + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.30': + optional: true + + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.30': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.30': + optional: true + + '@rolldown/pluginutils@1.0.0-beta.30': {} + '@sec-ant/readable-stream@0.4.1': {} '@semantic-release/commit-analyzer@13.0.1(semantic-release@24.2.5(typescript@5.8.3))': @@ -7152,7 +7264,7 @@ snapshots: - supports-color - typescript - '@tybys/wasm-util@0.9.0': + '@tybys/wasm-util@0.10.0': dependencies: tslib: 2.8.1 optional: true @@ -7369,6 +7481,8 @@ snapshots: '@typescript-eslint/types@8.34.1': {} + '@typescript-eslint/types@8.38.0': {} + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.8.3)': dependencies: '@typescript-eslint/types': 6.21.0 @@ -7485,118 +7599,118 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@unrs/resolver-binding-android-arm-eabi@1.9.0': + '@unrs/resolver-binding-android-arm-eabi@1.11.1': optional: true - '@unrs/resolver-binding-android-arm64@1.9.0': + '@unrs/resolver-binding-android-arm64@1.11.1': + optional: true + + '@unrs/resolver-binding-darwin-arm64@1.11.1': optional: true '@unrs/resolver-binding-darwin-arm64@1.7.8': optional: true - '@unrs/resolver-binding-darwin-arm64@1.9.0': + '@unrs/resolver-binding-darwin-x64@1.11.1': optional: true '@unrs/resolver-binding-darwin-x64@1.7.8': optional: true - '@unrs/resolver-binding-darwin-x64@1.9.0': + '@unrs/resolver-binding-freebsd-x64@1.11.1': optional: true '@unrs/resolver-binding-freebsd-x64@1.7.8': optional: true - '@unrs/resolver-binding-freebsd-x64@1.9.0': + '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': optional: true '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.8': optional: true - '@unrs/resolver-binding-linux-arm-gnueabihf@1.9.0': + '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': optional: true '@unrs/resolver-binding-linux-arm-musleabihf@1.7.8': optional: true - '@unrs/resolver-binding-linux-arm-musleabihf@1.9.0': + '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': optional: true '@unrs/resolver-binding-linux-arm64-gnu@1.7.8': optional: true - '@unrs/resolver-binding-linux-arm64-gnu@1.9.0': + '@unrs/resolver-binding-linux-arm64-musl@1.11.1': optional: true '@unrs/resolver-binding-linux-arm64-musl@1.7.8': optional: true - '@unrs/resolver-binding-linux-arm64-musl@1.9.0': + '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': optional: true '@unrs/resolver-binding-linux-ppc64-gnu@1.7.8': optional: true - '@unrs/resolver-binding-linux-ppc64-gnu@1.9.0': + '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': optional: true '@unrs/resolver-binding-linux-riscv64-gnu@1.7.8': optional: true - '@unrs/resolver-binding-linux-riscv64-gnu@1.9.0': + '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': optional: true '@unrs/resolver-binding-linux-riscv64-musl@1.7.8': optional: true - '@unrs/resolver-binding-linux-riscv64-musl@1.9.0': + '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': optional: true '@unrs/resolver-binding-linux-s390x-gnu@1.7.8': optional: true - '@unrs/resolver-binding-linux-s390x-gnu@1.9.0': + '@unrs/resolver-binding-linux-x64-gnu@1.11.1': optional: true '@unrs/resolver-binding-linux-x64-gnu@1.7.8': optional: true - '@unrs/resolver-binding-linux-x64-gnu@1.9.0': + '@unrs/resolver-binding-linux-x64-musl@1.11.1': optional: true '@unrs/resolver-binding-linux-x64-musl@1.7.8': optional: true - '@unrs/resolver-binding-linux-x64-musl@1.9.0': + '@unrs/resolver-binding-wasm32-wasi@1.11.1': + dependencies: + '@napi-rs/wasm-runtime': 0.2.12 optional: true '@unrs/resolver-binding-wasm32-wasi@1.7.8': dependencies: - '@napi-rs/wasm-runtime': 0.2.11 + '@napi-rs/wasm-runtime': 0.2.12 optional: true - '@unrs/resolver-binding-wasm32-wasi@1.9.0': - dependencies: - '@napi-rs/wasm-runtime': 0.2.11 + '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': optional: true '@unrs/resolver-binding-win32-arm64-msvc@1.7.8': optional: true - '@unrs/resolver-binding-win32-arm64-msvc@1.9.0': + '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': optional: true '@unrs/resolver-binding-win32-ia32-msvc@1.7.8': optional: true - '@unrs/resolver-binding-win32-ia32-msvc@1.9.0': + '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true '@unrs/resolver-binding-win32-x64-msvc@1.7.8': optional: true - '@unrs/resolver-binding-win32-x64-msvc@1.9.0': - optional: true - '@vitest/eslint-plugin@1.2.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@typescript-eslint/utils': 8.33.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) @@ -7634,10 +7748,6 @@ snapshots: dependencies: acorn: 2.7.0 - acorn-jsx@5.3.2(acorn@8.14.1): - dependencies: - acorn: 8.14.1 - acorn-jsx@5.3.2(acorn@8.15.0): dependencies: acorn: 8.15.0 @@ -7646,8 +7756,6 @@ snapshots: acorn@8.12.0: {} - acorn@8.14.1: {} - acorn@8.15.0: {} agent-base@7.1.0: @@ -7656,7 +7764,7 @@ snapshots: transitivePeerDependencies: - supports-color - agent-base@7.1.3: + agent-base@7.1.4: optional: true aggregate-error@3.1.0: @@ -7697,13 +7805,9 @@ snapshots: ansi-styles@6.2.1: {} - any-promise@1.3.0: {} + ansis@4.1.0: {} - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - optional: true + any-promise@1.3.0: {} are-docs-informative@0.0.2: {} @@ -7770,16 +7874,6 @@ snapshots: es-abstract: 1.24.0 es-shim-unscopables: 1.0.2 - array.prototype.reduce@1.0.7: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-array-method-boxes-properly: 1.0.0 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - is-string: 1.0.7 - array.prototype.tosorted@1.1.4: dependencies: call-bind: 1.0.7 @@ -7819,6 +7913,11 @@ snapshots: assertion-error@2.0.1: {} + ast-kit@2.1.1: + dependencies: + '@babel/parser': 7.28.0 + pathe: 2.0.3 + ast-types-flow@0.0.8: {} ast-types@0.16.1: @@ -7889,8 +7988,7 @@ snapshots: before-after-hook@4.0.0: {} - binary-extensions@2.2.0: - optional: true + birpc@2.5.0: {} bluebird@2.11.0: {} @@ -7924,8 +8022,6 @@ snapshots: node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.25.0) - buffer-from@1.1.2: {} - builtin-modules@4.0.0: {} bundle-name@4.1.0: @@ -7946,6 +8042,8 @@ snapshots: yargs: 17.7.2 yargs-parser: 21.1.1 + cac@6.7.14: {} + cacache@18.0.4: dependencies: '@npmcli/fs': 3.1.1 @@ -8024,19 +8122,6 @@ snapshots: check-error@2.1.1: {} - chokidar@3.6.0: - dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - optional: true - chokidar@4.0.3: dependencies: readdirp: 4.1.2 @@ -8046,6 +8131,8 @@ snapshots: ci-info@4.2.0: {} + cjs-module-lexer@1.4.3: {} + clean-regexp@1.0.0: dependencies: escape-string-regexp: 1.0.5 @@ -8081,12 +8168,6 @@ snapshots: slice-ansi: 5.0.0 string-width: 7.0.0 - cliui@6.0.0: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 6.2.0 - cliui@7.0.4: dependencies: string-width: 4.2.3 @@ -8099,12 +8180,6 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - clone-deep@4.0.1: - dependencies: - is-plain-object: 2.0.4 - kind-of: 6.0.3 - shallow-clone: 3.0.1 - clone-regexp@3.0.0: dependencies: is-regexp: 3.1.0 @@ -8129,12 +8204,8 @@ snapshots: commander@14.0.0: {} - commander@6.2.1: {} - comment-parser@1.4.1: {} - commondir@1.0.1: {} - compare-func@2.0.0: dependencies: array-ify: 1.0.0 @@ -8142,6 +8213,8 @@ snapshots: concat-map@0.0.1: {} + confbox@0.2.2: {} + config-chain@1.1.13: dependencies: ini: 1.3.8 @@ -8178,8 +8251,6 @@ snapshots: dependencies: browserslist: 4.25.0 - core-js@3.37.1: {} - core-util-is@1.0.2: {} core-util-is@1.0.3: {} @@ -8288,8 +8359,6 @@ snapshots: optionalDependencies: supports-color: 8.1.1 - decamelize@1.2.0: {} - decamelize@4.0.0: {} decamelize@6.0.0: {} @@ -8323,10 +8392,14 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 + defu@6.1.4: {} + delayed-stream@1.0.0: {} diff@7.0.0: {} + diff@8.0.2: {} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 @@ -8363,6 +8436,8 @@ snapshots: dset@3.1.4: {} + dts-resolver@2.1.1: {} + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -8390,6 +8465,8 @@ snapshots: emojilib@2.4.0: {} + empathic@2.0.0: {} + encoding@0.1.13: dependencies: iconv-lite: 0.6.3 @@ -8532,8 +8609,6 @@ snapshots: unbox-primitive: 1.1.0 which-typed-array: 1.1.19 - es-array-method-boxes-properly@1.0.0: {} - es-define-property@1.0.0: dependencies: get-intrinsic: 1.2.4 @@ -8634,7 +8709,7 @@ snapshots: eslint: 9.29.0(jiti@2.4.2) semver: 7.7.2 - eslint-config-canonical@44.9.5(@types/eslint@9.6.1)(@types/node@24.0.3)(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): + eslint-config-canonical@44.9.5(@types/eslint@9.6.1)(@types/node@24.0.3)(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): dependencies: '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.0.3)(eslint@9.29.0(jiti@2.4.2))(graphql@16.11.0)(typescript@5.8.3) '@next/eslint-plugin-next': 15.3.3 @@ -8644,13 +8719,13 @@ snapshots: '@vitest/eslint-plugin': 1.2.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) eslint: 9.29.0(jiti@2.4.2) eslint-config-prettier: 10.1.5(eslint@9.29.0(jiti@2.4.2)) - eslint-import-resolver-typescript: 4.4.2(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 4.4.2(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) eslint-plugin-ava: 15.0.1(eslint@9.29.0(jiti@2.4.2)) - eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) eslint-plugin-eslint-comments: 3.2.0(eslint@9.29.0(jiti@2.4.2)) eslint-plugin-fp: 2.3.0(eslint@9.29.0(jiti@2.4.2)) eslint-plugin-functional: 9.0.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - eslint-plugin-import: eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) eslint-plugin-jest: 28.12.0(@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) eslint-plugin-jsdoc: 50.6.17(eslint@9.29.0(jiti@2.4.2)) eslint-plugin-jsonc: 2.20.1(eslint@9.29.0(jiti@2.4.2)) @@ -8706,12 +8781,12 @@ snapshots: optionalDependencies: unrs-resolver: 1.7.8 - eslint-import-context@0.1.8(unrs-resolver@1.9.0): + eslint-import-context@0.1.9(unrs-resolver@1.11.1): dependencies: get-tsconfig: 4.10.1 - stable-hash-x: 0.1.1 + stable-hash-x: 0.2.0 optionalDependencies: - unrs-resolver: 1.9.0 + unrs-resolver: 1.11.1 eslint-import-resolver-node@0.3.9: dependencies: @@ -8722,7 +8797,7 @@ snapshots: - supports-color optional: true - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.1(supports-color@8.1.1) @@ -8731,14 +8806,14 @@ snapshots: is-bun-module: 2.0.0 stable-hash: 0.0.5 tinyglobby: 0.2.14 - unrs-resolver: 1.9.0 + unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) - eslint-plugin-import-x: 4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@4.4.2(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)): + eslint-import-resolver-typescript@4.4.2(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)): dependencies: debug: 4.4.1(supports-color@8.1.1) eslint: 9.29.0(jiti@2.4.2) @@ -8749,8 +8824,8 @@ snapshots: tinyglobby: 0.2.14 unrs-resolver: 1.7.8 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) - eslint-plugin-import-x: 4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color @@ -8760,14 +8835,14 @@ snapshots: esquery: 1.6.0 jsonc-eslint-parser: 2.4.0 - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) eslint: 9.29.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color @@ -8783,14 +8858,14 @@ snapshots: pkg-dir: 5.0.0 resolve-from: 5.0.0 - eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): + eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): dependencies: '@typescript-eslint/utils': 8.33.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) array-includes: 3.1.8 debug: 4.4.1(supports-color@8.1.1) doctrine: 3.0.0 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) is-get-set-prop: 1.0.0 is-js-type: 2.0.0 is-obj-prop: 1.0.0 @@ -8845,18 +8920,18 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)): + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)): dependencies: - '@typescript-eslint/types': 8.34.1 + '@typescript-eslint/types': 8.38.0 comment-parser: 1.4.1 debug: 4.4.1(supports-color@8.1.1) eslint: 9.29.0(jiti@2.4.2) - eslint-import-context: 0.1.8(unrs-resolver@1.9.0) + eslint-import-context: 0.1.9(unrs-resolver@1.11.1) is-glob: 4.0.3 minimatch: 10.0.3 semver: 7.7.2 - stable-hash-x: 0.1.1 - unrs-resolver: 1.9.0 + stable-hash-x: 0.2.0 + unrs-resolver: 1.11.1 optionalDependencies: '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) eslint-import-resolver-node: 0.3.9 @@ -9170,8 +9245,8 @@ snapshots: espree@9.6.1: dependencies: - acorn: 8.14.1 - acorn-jsx: 5.3.2(acorn@8.14.1) + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) eslint-visitor-keys: 3.4.3 esprima@4.0.1: {} @@ -9254,6 +9329,8 @@ snapshots: exponential-backoff@3.1.2: optional: true + exsolve@1.0.7: {} + extend@3.0.2: {} extsprintf@1.3.0: {} @@ -9301,6 +9378,8 @@ snapshots: node-domexception: 1.0.0 web-streams-polyfill: 3.2.1 + fflate@0.8.2: {} + figures@2.0.0: dependencies: escape-string-regexp: 1.0.5 @@ -9323,22 +9402,12 @@ snapshots: dependencies: to-regex-range: 5.0.1 - find-cache-dir@2.1.0: - dependencies: - commondir: 1.0.1 - make-dir: 2.1.0 - pkg-dir: 3.0.0 - find-up-simple@1.0.0: {} find-up@2.1.0: dependencies: locate-path: 2.0.0 - find-up@3.0.0: - dependencies: - locate-path: 3.0.0 - find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -9420,13 +9489,8 @@ snapshots: minipass: 7.1.2 optional: true - fs-readdir-recursive@1.1.0: {} - fs.realpath@1.0.0: {} - fsevents@2.3.3: - optional: true - function-bind@1.1.2: {} function-timeout@0.1.1: {} @@ -9730,12 +9794,10 @@ snapshots: highlight.js@10.7.3: {} - homedir-polyfill@1.0.3: - dependencies: - parse-passwd: 1.0.0 - hook-std@3.0.0: {} + hookable@5.5.3: {} + hosted-git-info@7.0.1: dependencies: lru-cache: 10.4.3 @@ -9767,7 +9829,7 @@ snapshots: http-proxy-agent@7.0.2: dependencies: - agent-base: 7.1.3 + agent-base: 7.1.4 debug: 4.4.1(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -9788,7 +9850,7 @@ snapshots: https-proxy-agent@7.0.6: dependencies: - agent-base: 7.1.3 + agent-base: 7.1.4 debug: 4.4.1(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -9907,11 +9969,6 @@ snapshots: dependencies: has-bigints: 1.0.2 - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.2.0 - optional: true - is-boolean-object@1.1.2: dependencies: call-bind: 1.0.7 @@ -10038,10 +10095,6 @@ snapshots: is-plain-obj@4.1.0: {} - is-plain-object@2.0.4: - dependencies: - isobject: 3.0.1 - is-proto-prop@2.0.0: dependencies: lowercase-keys: 1.0.1 @@ -10136,8 +10189,6 @@ snapshots: isexe@3.1.1: optional: true - isobject@3.0.1: {} - isomorphic-ws@5.0.0(ws@8.18.2): dependencies: ws: 8.18.2 @@ -10157,7 +10208,7 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: '@babel/core': 7.27.4 - '@babel/parser': 7.24.7 + '@babel/parser': 7.27.4 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.7.2 @@ -10200,6 +10251,8 @@ snapshots: js-tokens@4.0.0: {} + js-tokens@9.0.1: {} + js-types@1.0.0: {} js-yaml@3.14.1: @@ -10263,7 +10316,7 @@ snapshots: jsonc-eslint-parser@2.4.0: dependencies: - acorn: 8.14.1 + acorn: 8.15.0 eslint-visitor-keys: 3.4.3 espree: 9.6.1 semver: 7.7.2 @@ -10292,8 +10345,6 @@ snapshots: dependencies: json-buffer: 3.0.1 - kind-of@6.0.3: {} - language-subtag-registry@0.3.22: {} language-tags@1.0.9: @@ -10354,11 +10405,6 @@ snapshots: p-locate: 2.0.0 path-exists: 3.0.0 - locate-path@3.0.0: - dependencies: - p-locate: 3.0.0 - path-exists: 3.0.0 - locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -10424,11 +10470,6 @@ snapshots: dependencies: yallist: 3.1.1 - make-dir@2.1.0: - dependencies: - pify: 4.0.1 - semver: 5.7.2 - make-dir@4.0.0: dependencies: semver: 7.7.2 @@ -10508,10 +10549,6 @@ snapshots: dependencies: '@isaacs/brace-expansion': 5.0.0 - minimatch@3.0.5: - dependencies: - brace-expansion: 1.1.11 - minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -10599,6 +10636,8 @@ snapshots: moment@2.30.1: {} + mri@1.2.0: {} + ms@2.1.3: {} mz@2.7.0: @@ -10607,12 +10646,14 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 - nan@2.22.2: + nan@2.23.0: optional: true nano-spawn@1.0.2: {} - napi-postinstall@0.2.4: {} + napi-postinstall@0.2.5: {} + + napi-postinstall@0.3.2: {} natural-compare@1.4.0: {} @@ -10634,11 +10675,6 @@ snapshots: emojilib: 2.4.0 skin-tone: 2.0.0 - node-environment-flags@1.0.6: - dependencies: - object.getownpropertydescriptors: 2.1.8 - semver: 5.7.2 - node-fetch@3.3.2: dependencies: data-uri-to-buffer: 4.0.1 @@ -10679,9 +10715,6 @@ snapshots: dependencies: remove-trailing-separator: 1.1.0 - normalize-path@3.0.0: - optional: true - normalize-url@8.0.0: {} npm-run-path@5.2.0: @@ -10739,16 +10772,6 @@ snapshots: es-abstract: 1.23.3 es-object-atoms: 1.0.0 - object.getownpropertydescriptors@2.1.8: - dependencies: - array.prototype.reduce: 1.0.7 - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - gopd: 1.0.1 - safe-array-concat: 1.1.2 - object.values@1.2.0: dependencies: call-bind: 1.0.7 @@ -10836,10 +10859,6 @@ snapshots: dependencies: p-limit: 1.3.0 - p-locate@3.0.0: - dependencies: - p-limit: 2.3.0 - p-locate@4.1.0: dependencies: p-limit: 2.3.0 @@ -10863,6 +10882,8 @@ snapshots: package-json-from-dist@1.0.0: {} + package-manager-detector@1.3.0: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -10891,8 +10912,6 @@ snapshots: parse-ms@4.0.0: {} - parse-passwd@1.0.0: {} - parse-statements@1.0.11: {} parse5-htmlparser2-tree-adapter@6.0.1: @@ -10931,6 +10950,8 @@ snapshots: path-type@5.0.0: {} + pathe@2.0.3: {} + pathval@2.0.0: {} performance-now@2.1.0: {} @@ -10945,23 +10966,21 @@ snapshots: pify@3.0.0: {} - pify@4.0.1: {} - - pirates@4.0.6: {} - pkg-conf@2.1.0: dependencies: find-up: 2.1.0 load-json-file: 4.0.0 - pkg-dir@3.0.0: - dependencies: - find-up: 3.0.0 - pkg-dir@5.0.0: dependencies: find-up: 5.0.0 + pkg-types@2.2.0: + dependencies: + confbox: 0.2.2 + exsolve: 1.0.7 + pathe: 2.0.3 + pluralize@8.0.0: {} possible-typed-array-names@1.0.0: {} @@ -11007,10 +11026,19 @@ snapshots: psl@1.9.0: {} + publint@0.3.12: + dependencies: + '@publint/pack': 0.1.2 + package-manager-detector: 1.3.0 + picocolors: 1.1.1 + sade: 1.8.1 + punycode@2.3.1: {} qs@6.5.3: {} + quansync@0.2.10: {} + queue-microtask@1.2.3: {} rambda@7.5.0: {} @@ -11033,7 +11061,7 @@ snapshots: re2@1.20.9: dependencies: install-artifact-from-github: 1.4.0 - nan: 2.22.2 + nan: 2.23.0 node-gyp: 10.3.1 transitivePeerDependencies: - supports-color @@ -11071,11 +11099,6 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 - readdirp@3.6.0: - dependencies: - picomatch: 2.3.1 - optional: true - readdirp@4.1.2: {} recast@0.23.11: @@ -11111,8 +11134,6 @@ snapshots: regenerate@1.4.2: {} - regenerator-runtime@0.14.1: {} - regexp-ast-analysis@0.7.1: dependencies: '@eslint-community/regexpp': 4.12.1 @@ -11170,12 +11191,6 @@ snapshots: remove-trailing-separator@1.1.0: {} - replace@1.2.2: - dependencies: - chalk: 2.4.2 - minimatch: 3.0.5 - yargs: 15.4.1 - req-all@0.1.0: {} request@2.88.2: @@ -11203,8 +11218,6 @@ snapshots: require-directory@2.1.1: {} - require-main-filename@2.0.0: {} - requireindex@1.1.0: {} resolve-from@4.0.0: {} @@ -11248,23 +11261,61 @@ snapshots: dependencies: glob: 7.2.3 - rimraf@6.0.1: - dependencies: - glob: 11.0.3 - package-json-from-dist: 1.0.0 - roarr@7.21.1: dependencies: fast-printf: 1.6.9 safe-stable-stringify: 2.4.3 semver-compare: 1.0.0 + rolldown-plugin-dts@0.14.3(rolldown@1.0.0-beta.30)(typescript@5.8.3): + dependencies: + '@babel/generator': 7.28.0 + '@babel/parser': 7.28.0 + '@babel/types': 7.28.2 + ast-kit: 2.1.1 + birpc: 2.5.0 + debug: 4.4.1(supports-color@8.1.1) + dts-resolver: 2.1.1 + get-tsconfig: 4.10.1 + rolldown: 1.0.0-beta.30 + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - oxc-resolver + - supports-color + + rolldown@1.0.0-beta.30: + dependencies: + '@oxc-project/runtime': 0.78.0 + '@oxc-project/types': 0.78.0 + '@rolldown/pluginutils': 1.0.0-beta.30 + ansis: 4.1.0 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.0-beta.30 + '@rolldown/binding-darwin-arm64': 1.0.0-beta.30 + '@rolldown/binding-darwin-x64': 1.0.0-beta.30 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.30 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.30 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.30 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.30 + '@rolldown/binding-linux-arm64-ohos': 1.0.0-beta.30 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.30 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.30 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.30 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.30 + '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.30 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.30 + run-applescript@7.0.0: {} run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 + sade@1.8.1: + dependencies: + mri: 1.2.0 + safe-array-concat@1.1.2: dependencies: call-bind: 1.0.7 @@ -11354,8 +11405,6 @@ snapshots: semver-regex@4.0.5: {} - semver@5.7.2: {} - semver@6.3.1: {} semver@7.7.2: {} @@ -11364,8 +11413,6 @@ snapshots: dependencies: randombytes: 2.1.0 - set-blocking@2.0.0: {} - set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -11388,10 +11435,6 @@ snapshots: es-errors: 1.3.0 es-object-atoms: 1.1.1 - shallow-clone@3.0.1: - dependencies: - kind-of: 6.0.3 - shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -11447,8 +11490,6 @@ snapshots: dependencies: unicode-emoji-modifier-base: 1.0.0 - slash@2.0.0: {} - slash@3.0.0: {} slash@5.1.0: {} @@ -11468,24 +11509,19 @@ snapshots: socks-proxy-agent@8.0.5: dependencies: - agent-base: 7.1.3 + agent-base: 7.1.4 debug: 4.4.1(supports-color@8.1.1) - socks: 2.8.5 + socks: 2.8.6 transitivePeerDependencies: - supports-color optional: true - socks@2.8.5: + socks@2.8.6: dependencies: ip-address: 9.0.5 smart-buffer: 4.2.0 optional: true - source-map-support@0.5.21: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - source-map@0.6.1: {} source-map@0.7.4: @@ -11538,7 +11574,7 @@ snapshots: minipass: 7.1.2 optional: true - stable-hash-x@0.1.1: {} + stable-hash-x@0.2.0: {} stable-hash@0.0.5: {} @@ -11771,6 +11807,8 @@ snapshots: tiny-invariant@1.3.3: {} + tinyexec@1.0.1: {} + tinyglobby@0.2.14: dependencies: fdir: 6.4.5(picomatch@4.0.2) @@ -11778,8 +11816,6 @@ snapshots: tlds@1.248.0: {} - to-fast-properties@2.0.0: {} - to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -11812,6 +11848,32 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 + tsdown@0.13.0(@arethetypeswrong/core@0.18.2)(publint@0.3.12)(typescript@5.8.3)(unplugin-unused@0.5.1): + dependencies: + ansis: 4.1.0 + cac: 6.7.14 + chokidar: 4.0.3 + debug: 4.4.1(supports-color@8.1.1) + diff: 8.0.2 + empathic: 2.0.0 + hookable: 5.5.3 + rolldown: 1.0.0-beta.30 + rolldown-plugin-dts: 0.14.3(rolldown@1.0.0-beta.30)(typescript@5.8.3) + semver: 7.7.2 + tinyexec: 1.0.1 + tinyglobby: 0.2.14 + unconfig: 7.3.2 + optionalDependencies: + '@arethetypeswrong/core': 0.18.2 + publint: 0.3.12 + typescript: 5.8.3 + unplugin-unused: 0.5.1 + transitivePeerDependencies: + - '@typescript/native-preview' + - oxc-resolver + - supports-color + - vue-tsc + tslib@2.8.1: {} tunnel-agent@0.6.0: @@ -11911,6 +11973,8 @@ snapshots: transitivePeerDependencies: - supports-color + typescript@5.6.1-rc: {} + typescript@5.8.3: {} uglify-js@3.17.4: @@ -11930,6 +11994,13 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 + unconfig@7.3.2: + dependencies: + '@quansync/fs': 0.1.3 + defu: 6.1.4 + jiti: 2.4.2 + quansync: 0.2.10 + undici-types@7.8.0: {} unicode-canonical-property-names-ecmascript@2.0.0: {} @@ -11971,9 +12042,46 @@ snapshots: dependencies: normalize-path: 2.1.1 + unplugin-unused@0.5.1: + dependencies: + js-tokens: 9.0.1 + picocolors: 1.1.1 + pkg-types: 2.2.0 + unplugin: 2.3.5 + + unplugin@2.3.5: + dependencies: + acorn: 8.15.0 + picomatch: 4.0.2 + webpack-virtual-modules: 0.6.2 + + unrs-resolver@1.11.1: + dependencies: + napi-postinstall: 0.3.2 + optionalDependencies: + '@unrs/resolver-binding-android-arm-eabi': 1.11.1 + '@unrs/resolver-binding-android-arm64': 1.11.1 + '@unrs/resolver-binding-darwin-arm64': 1.11.1 + '@unrs/resolver-binding-darwin-x64': 1.11.1 + '@unrs/resolver-binding-freebsd-x64': 1.11.1 + '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.1 + '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.1 + '@unrs/resolver-binding-linux-arm64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-arm64-musl': 1.11.1 + '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-riscv64-musl': 1.11.1 + '@unrs/resolver-binding-linux-s390x-gnu': 1.11.1 + '@unrs/resolver-binding-linux-x64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-x64-musl': 1.11.1 + '@unrs/resolver-binding-wasm32-wasi': 1.11.1 + '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1 + '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 + '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 + unrs-resolver@1.7.8: dependencies: - napi-postinstall: 0.2.4 + napi-postinstall: 0.2.5 optionalDependencies: '@unrs/resolver-binding-darwin-arm64': 1.7.8 '@unrs/resolver-binding-darwin-x64': 1.7.8 @@ -11993,30 +12101,6 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.7.8 '@unrs/resolver-binding-win32-x64-msvc': 1.7.8 - unrs-resolver@1.9.0: - dependencies: - napi-postinstall: 0.2.4 - optionalDependencies: - '@unrs/resolver-binding-android-arm-eabi': 1.9.0 - '@unrs/resolver-binding-android-arm64': 1.9.0 - '@unrs/resolver-binding-darwin-arm64': 1.9.0 - '@unrs/resolver-binding-darwin-x64': 1.9.0 - '@unrs/resolver-binding-freebsd-x64': 1.9.0 - '@unrs/resolver-binding-linux-arm-gnueabihf': 1.9.0 - '@unrs/resolver-binding-linux-arm-musleabihf': 1.9.0 - '@unrs/resolver-binding-linux-arm64-gnu': 1.9.0 - '@unrs/resolver-binding-linux-arm64-musl': 1.9.0 - '@unrs/resolver-binding-linux-ppc64-gnu': 1.9.0 - '@unrs/resolver-binding-linux-riscv64-gnu': 1.9.0 - '@unrs/resolver-binding-linux-riscv64-musl': 1.9.0 - '@unrs/resolver-binding-linux-s390x-gnu': 1.9.0 - '@unrs/resolver-binding-linux-x64-gnu': 1.9.0 - '@unrs/resolver-binding-linux-x64-musl': 1.9.0 - '@unrs/resolver-binding-wasm32-wasi': 1.9.0 - '@unrs/resolver-binding-win32-arm64-msvc': 1.9.0 - '@unrs/resolver-binding-win32-ia32-msvc': 1.9.0 - '@unrs/resolver-binding-win32-x64-msvc': 1.9.0 - update-browserslist-db@1.1.3(browserslist@4.25.0): dependencies: browserslist: 4.25.0 @@ -12050,15 +12134,13 @@ snapshots: '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 - v8flags@3.2.0: - dependencies: - homedir-polyfill: 1.0.3 - validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 + validate-npm-package-name@5.0.1: {} + verror@1.10.0: dependencies: assert-plus: 1.0.0 @@ -12067,6 +12149,8 @@ snapshots: web-streams-polyfill@3.2.1: {} + webpack-virtual-modules@0.6.2: {} + whatwg-mimetype@4.0.0: {} whatwg-url-compat@0.6.5: @@ -12112,8 +12196,6 @@ snapshots: is-weakmap: 2.0.2 is-weakset: 2.0.4 - which-module@2.0.1: {} - which-typed-array@1.1.15: dependencies: available-typed-arrays: 1.0.7 @@ -12147,12 +12229,6 @@ snapshots: workerpool@9.3.2: {} - wrap-ansi@6.2.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 @@ -12181,8 +12257,6 @@ snapshots: xtend@4.0.2: {} - y18n@4.0.3: {} - y18n@5.0.8: {} yallist@3.1.1: {} @@ -12197,11 +12271,6 @@ snapshots: yaml@2.8.0: {} - yargs-parser@18.1.3: - dependencies: - camelcase: 5.3.1 - decamelize: 1.2.0 - yargs-parser@20.2.9: {} yargs-parser@21.1.1: {} @@ -12213,20 +12282,6 @@ snapshots: flat: 5.0.2 is-plain-obj: 2.1.0 - yargs@15.4.1: - dependencies: - cliui: 6.0.0 - decamelize: 1.2.0 - find-up: 4.1.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - require-main-filename: 2.0.0 - set-blocking: 2.0.0 - string-width: 4.2.3 - which-module: 2.0.1 - y18n: 4.0.3 - yargs-parser: 18.1.3 - yargs@16.2.0: dependencies: cliui: 7.0.4 diff --git a/src/bin/generateOptions.mjs b/src/bin/generateOptions.js similarity index 100% rename from src/bin/generateOptions.mjs rename to src/bin/generateOptions.js diff --git a/tsconfig-prod.json b/tsconfig-prod.json deleted file mode 100644 index 7ae6b80fa..000000000 --- a/tsconfig-prod.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "compilerOptions": { - "lib": ["es2023"], - "moduleResolution": "Bundler", - "module": "ESNext", - "allowJs": true, - "checkJs": true, - "noEmit": false, - "emitDeclarationOnly": true, - "declaration": true, - "declarationMap": true, - "strict": true, - "skipLibCheck": true, - "target": "es2024", - "outDir": "dist" - }, - "include": [ - "src/**/*.js" - ], - "exclude": ["node_modules", "src/bin/*.js"] -} diff --git a/tsdown.config.ts b/tsdown.config.ts new file mode 100644 index 000000000..911e5d76d --- /dev/null +++ b/tsdown.config.ts @@ -0,0 +1,34 @@ +import { + defineConfig, +} from 'tsdown'; + +export default defineConfig({ + attw: { + level: 'error', + profile: 'node16', + }, + dts: { + sourcemap: true, + }, + entry: [ + './src/index.js', + './src/getJsdocProcessorPlugin.js', + './src/iterateJsdoc.js', + ], + format: [ + 'es', + 'cjs', + ], + outputOptions: { + exports: 'named', + }, + publint: { + level: 'error', + strict: true, + }, + sourcemap: true, + unbundle: true, + unused: { + level: 'error', + }, +}); From 43e7e6d756c5d10f2fd806ec730f16b745a5dbe8 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Wed, 6 Aug 2025 16:11:21 +0800 Subject: [PATCH 031/189] fix: revert "fix: move to tsdown for proper types (#1440)"; fixes #1443 (#1444) This reverts commit af03395541586307ceb215452166254b9fe2e160. --- .npmignore | 18 + package.json | 62 +- pnpm-lock.yaml | 1413 ++++++++--------- ...generateOptions.js => generateOptions.mjs} | 0 tsconfig-prod.json | 21 + tsdown.config.ts | 34 - 6 files changed, 741 insertions(+), 807 deletions(-) create mode 100755 .npmignore rename src/bin/{generateOptions.js => generateOptions.mjs} (100%) create mode 100644 tsconfig-prod.json delete mode 100644 tsdown.config.ts diff --git a/.npmignore b/.npmignore new file mode 100755 index 000000000..5219b9654 --- /dev/null +++ b/.npmignore @@ -0,0 +1,18 @@ +coverage +bin +test +.* +*.log +CONTRIBUTING.md +tsconfig*.json +pnpm-workspace.yaml +eslint.config.js +*.d.ts +*.d.ts.map +!dist/index.d.ts +!dist/index.d.ts.map +!dist/getJsdocProcessorPlugin.d.ts +!dist/getJsdocProcessorPlugin.d.ts.map +!dist/iterateJsdoc.d.ts +!dist/iterateJsdoc.d.ts.map +docs diff --git a/package.json b/package.json index 1d26e2dab..da3f0960e 100644 --- a/package.json +++ b/package.json @@ -18,9 +18,10 @@ }, "description": "JSDoc linting rules for ESLint.", "devDependencies": { - "@arethetypeswrong/core": "^0.18.2", + "@babel/cli": "^7.27.2", "@babel/core": "^7.27.4", "@babel/eslint-parser": "^7.27.5", + "@babel/node": "^7.27.1", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-transform-flow-strip-types": "^7.27.1", "@babel/preset-env": "^7.27.2", @@ -62,12 +63,11 @@ "lodash.defaultsdeep": "^4.6.1", "mocha": "^11.7.0", "open-editor": "^5.1.0", - "publint": "^0.3.12", + "replace": "^1.2.2", + "rimraf": "^6.0.1", "semantic-release": "^24.2.5", - "tsdown": "^0.13.0", "typescript": "5.8.3", - "typescript-eslint": "^8.34.1", - "unplugin-unused": "^0.5.1" + "typescript-eslint": "^8.34.1" }, "engines": { "node": ">=20.11.0" @@ -82,42 +82,25 @@ "*.js": "eslint --fix" }, "type": "module", + "main": "./dist/index.cjs", + "types": "./dist/index.d.ts", "exports": { ".": { - "import": { - "types": "./dist/index.d.ts", - "default": "./dist/index.js" - }, - "default": { - "types": "./dist/index.d.cts", - "default": "./dist/index.cjs" - } + "types": "./dist/index.d.ts", + "import": "./src/index.js", + "require": "./dist/index.cjs" }, "./getJsdocProcessorPlugin.js": { - "import": { - "types": "./dist/getJsdocProcessorPlugin.d.ts", - "default": "./dist/getJsdocProcessorPlugin.js" - }, - "default": { - "types": "./dist/getJsdocProcessorPlugin.d.cts", - "default": "./dist/getJsdocProcessorPlugin.cjs" - } + "types": "./dist/getJsdocProcessorPlugin.d.ts", + "import": "./dist/getJsdocProcessorPlugin.cjs", + "require": "./src/getJsdocProcessorPlugin.js" }, "./iterateJsdoc.js": { - "import": { - "types": "./dist/iterateJsdoc.d.ts", - "default": "./dist/iterateJsdoc.js" - }, - "default": { - "types": "./dist/iterateJsdoc.d.cts", - "default": "./dist/iterateJsdoc.cjs" - } - }, - "./package.json": "./package.json" + "types": "./dist/iterateJsdoc.d.ts", + "import": "./dist/iterateJsdoc.cjs", + "require": "./src/iterateJsdoc.js" + } }, - "files": [ - "dist/" - ], "name": "eslint-plugin-jsdoc", "mocha": { "reporter": "dot", @@ -156,11 +139,12 @@ }, "scripts": { "tsc": "tsc", - "build": "tsdown", - "check-docs": "node ./src/bin/generateDocs.js --check", - "create-docs": "pnpm run create-options && node ./src/bin/generateDocs.js", - "create-rule": "node ./src/bin/generateRule.js", - "create-options": "node ./src/bin/generateOptions.js", + "tsc-build": "tsc -p tsconfig-prod.json", + "build": "rimraf ./dist && NODE_ENV=production babel ./src --out-file-extension .cjs --out-dir ./dist --copy-files --source-maps --ignore ./src/bin/*.js --no-copy-ignored && replace 'require\\(\"\\.(.*?)\\.[^.]*?\"\\)' 'require(\".$1.cjs\")' 'dist' -r --include=\"*.cjs\" && pnpm tsc-build", + "check-docs": "babel-node ./src/bin/generateDocs.js --check", + "create-docs": "pnpm run create-options && babel-node ./src/bin/generateDocs.js", + "create-rule": "babel-node ./src/bin/generateRule.js", + "create-options": "node ./src/bin/generateOptions.mjs", "install-offline": "pnpm install --prefer-offline --no-audit", "lint": "eslint", "lint-fix": "eslint --fix", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 382c3dc6b..ddb1167eb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -39,15 +39,18 @@ importers: specifier: ^4.0.0 version: 4.0.0 devDependencies: - '@arethetypeswrong/core': - specifier: ^0.18.2 - version: 0.18.2 + '@babel/cli': + specifier: ^7.27.2 + version: 7.27.2(@babel/core@7.27.4) '@babel/core': specifier: ^7.27.4 version: 7.27.4 '@babel/eslint-parser': specifier: ^7.27.5 version: 7.27.5(@babel/core@7.27.4)(eslint@9.29.0(jiti@2.4.2)) + '@babel/node': + specifier: ^7.27.1 + version: 7.27.1(@babel/core@7.27.4) '@babel/plugin-syntax-class-properties': specifier: ^7.12.13 version: 7.12.13(@babel/core@7.27.4) @@ -140,7 +143,7 @@ importers: version: 9.29.0(jiti@2.4.2) eslint-config-canonical: specifier: ~44.9.5 - version: 44.9.5(@types/eslint@9.6.1)(@types/node@24.0.3)(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + version: 44.9.5(@types/eslint@9.6.1)(@types/node@24.0.3)(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) gitdown: specifier: ^4.1.1 version: 4.1.1(re2@1.20.9) @@ -171,24 +174,21 @@ importers: open-editor: specifier: ^5.1.0 version: 5.1.0 - publint: - specifier: ^0.3.12 - version: 0.3.12 + replace: + specifier: ^1.2.2 + version: 1.2.2 + rimraf: + specifier: ^6.0.1 + version: 6.0.1 semantic-release: specifier: ^24.2.5 version: 24.2.5(typescript@5.8.3) - tsdown: - specifier: ^0.13.0 - version: 0.13.0(@arethetypeswrong/core@0.18.2)(publint@0.3.12)(typescript@5.8.3)(unplugin-unused@0.5.1) typescript: specifier: 5.8.3 version: 5.8.3 typescript-eslint: specifier: ^8.34.1 version: 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - unplugin-unused: - specifier: ^0.5.1 - version: 0.5.1 packages: @@ -200,12 +200,12 @@ packages: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} - '@andrewbranch/untar.js@1.0.3': - resolution: {integrity: sha512-Jh15/qVmrLGhkKJBdXlK1+9tY4lZruYjsgkDFj08ZmDiWVBLJcqkok7Z0/R0In+i1rScBpJlSvrTS2Lm41Pbnw==} - - '@arethetypeswrong/core@0.18.2': - resolution: {integrity: sha512-GiwTmBFOU1/+UVNqqCGzFJYfBXEytUkiI+iRZ6Qx7KmUVtLm00sYySkfe203C9QtPG11yOz1ZaMek8dT/xnlgg==} - engines: {node: '>=20'} + '@babel/cli@7.27.2': + resolution: {integrity: sha512-cfd7DnGlhH6OIyuPSSj3vcfIdnbXukhAyKY8NaZrFadC7pXyL9mOL5WgjcptiEJLi5k3j8aYvLIVCzezrWTaiA==} + engines: {node: '>=6.9.0'} + hasBin: true + peerDependencies: + '@babel/core': ^7.0.0-0 '@babel/code-frame@7.24.7': resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} @@ -234,10 +234,6 @@ packages: resolution: {integrity: sha512-xnlJYj5zepml8NXtjkG0WquFUv8RskFqyFcVgTBp5k+NaA/8uw/K+OSVf8AMGw5e9HKP2ETd5xpK5MLZQD6b4Q==} engines: {node: '>=6.9.0'} - '@babel/generator@7.28.0': - resolution: {integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==} - engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.24.7': resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} engines: {node: '>=6.9.0'} @@ -324,10 +320,18 @@ packages: resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.24.8': + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.27.1': resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.24.7': + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.27.1': resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} engines: {node: '>=6.9.0'} @@ -348,13 +352,20 @@ packages: resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.27.4': - resolution: {integrity: sha512-BRmLHGwpUqLFR2jzx9orBuX/ABDkj2jLKOXrHDTN2aOKL+jFDDKaRNo9nyYsIl9h/UE/7lMKdDjKQQyxKKDZ7g==} + '@babel/node@7.27.1': + resolution: {integrity: sha512-ef8ZrhxIku9LrphvyNywpiMf1UJsYQll7S4eKa228ivswPcwmObp98o5h5wL2n9FrSAuo1dsMwJ8cS1LEcBSog==} + engines: {node: '>=6.9.0'} + hasBin: true + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/parser@7.24.7': + resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.28.0': - resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==} + '@babel/parser@7.27.4': + resolution: {integrity: sha512-BRmLHGwpUqLFR2jzx9orBuX/ABDkj2jLKOXrHDTN2aOKL+jFDDKaRNo9nyYsIl9h/UE/7lMKdDjKQQyxKKDZ7g==} engines: {node: '>=6.0.0'} hasBin: true @@ -740,6 +751,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + '@babel/register@7.27.1': + resolution: {integrity: sha512-K13lQpoV54LATKkzBpBAEu1GGSIRzxR9f4IN4V8DCDgiUMo2UDGagEZr3lPeVNJPLkWUi5JE4hCHKneVTwQlYQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/regjsgen@0.8.0': resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} @@ -751,33 +768,30 @@ packages: resolution: {integrity: sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==} engines: {node: '>=6.9.0'} - '@babel/types@7.27.3': - resolution: {integrity: sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==} + '@babel/types@7.25.2': + resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==} engines: {node: '>=6.9.0'} - '@babel/types@7.28.2': - resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} + '@babel/types@7.27.3': + resolution: {integrity: sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==} engines: {node: '>=6.9.0'} '@bcoe/v8-coverage@1.0.2': resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} - '@braidai/lang@1.1.1': - resolution: {integrity: sha512-5uM+no3i3DafVgkoW7ayPhEGHNNBZCSj5TrGDQt0ayEKQda5f3lAXlmQg0MR5E0gKgmTzUUEtSWHsEC3h9jUcg==} - '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} - '@emnapi/core@1.4.5': - resolution: {integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==} + '@emnapi/core@1.4.3': + resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==} - '@emnapi/runtime@1.4.5': - resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==} + '@emnapi/runtime@1.4.3': + resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} - '@emnapi/wasi-threads@1.0.4': - resolution: {integrity: sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==} + '@emnapi/wasi-threads@1.0.2': + resolution: {integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==} '@envelop/core@5.2.3': resolution: {integrity: sha512-KfoGlYD/XXQSc3BkM1/k15+JQbkQ4ateHazeZoWl9P71FsLTDXSjGy6j7QqfhpIDSbxNISqhPMfZHYSbDFOofQ==} @@ -1054,9 +1068,6 @@ packages: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} - '@jridgewell/gen-mapping@0.3.12': - resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} - '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} @@ -1072,27 +1083,18 @@ packages: '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - '@jridgewell/sourcemap-codec@1.5.4': - resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} - '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - '@jridgewell/trace-mapping@0.3.29': - resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} - - '@loaderkit/resolve@1.0.4': - resolution: {integrity: sha512-rJzYKVcV4dxJv+vW6jlvagF8zvGxHJ2+HTr1e2qOejfmGhAApgJHl8Aog4mMszxceTRiKTTbnpgmTO1bEZHV/A==} - - '@napi-rs/wasm-runtime@0.2.12': - resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} - - '@napi-rs/wasm-runtime@1.0.1': - resolution: {integrity: sha512-KVlQ/jgywZpixGCKMNwxStmmbYEMyokZpCf2YuIChhfJA2uqfAKNEM8INz7zzTo55iEXfBhIIs3VqYyqzDLj8g==} + '@napi-rs/wasm-runtime@0.2.11': + resolution: {integrity: sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==} '@next/eslint-plugin-next@15.3.3': resolution: {integrity: sha512-VKZJEiEdpKkfBmcokGjHu0vGDG+8CehGs90tBEy/IDoDDKGngeyIStt2MmE5FYNyU9BhgR7tybNWTAJY/30u+Q==} + '@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3': + resolution: {integrity: sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==} + '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} @@ -1168,13 +1170,6 @@ packages: '@octokit/types@14.1.0': resolution: {integrity: sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==} - '@oxc-project/runtime@0.78.0': - resolution: {integrity: sha512-jOU7sDFMyq5ShGJC21UobalVzqcdtWGfySVp8ELvKoVLzMpLHb4kv1bs9VKxaP8XC7Z9hlAXwEKVhCTN+j21aQ==} - engines: {node: '>=6.9.0'} - - '@oxc-project/types@0.78.0': - resolution: {integrity: sha512-8FvExh0WRWN1FoSTjah1xa9RlavZcJQ8/yxRbZ7ElmSa2Ij5f5Em7MvRbSthE6FbwC6Wh8iAw0Gpna7QdoqLGg==} - '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -1195,93 +1190,12 @@ packages: resolution: {integrity: sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==} engines: {node: '>=12'} - '@publint/pack@0.1.2': - resolution: {integrity: sha512-S+9ANAvUmjutrshV4jZjaiG8XQyuJIZ8a4utWmN/vW1sgQ9IfBnPndwkmQYw53QmouOIytT874u65HEmu6H5jw==} - engines: {node: '>=18'} - - '@quansync/fs@0.1.3': - resolution: {integrity: sha512-G0OnZbMWEs5LhDyqy2UL17vGhSVHkQIfVojMtEWVenvj0V5S84VBgy86kJIuNsGDp2p7sTKlpSIpBUWdC35OKg==} - engines: {node: '>=20.0.0'} - '@repeaterjs/repeater@3.0.5': resolution: {integrity: sha512-l3YHBLAol6d/IKnB9LhpD0cEZWAoe3eFKUyTYWmFmCO2Q/WOckxLQAUyMZWwZV2M/m3+4vgRoaolFqaII82/TA==} '@repeaterjs/repeater@3.0.6': resolution: {integrity: sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==} - '@rolldown/binding-android-arm64@1.0.0-beta.30': - resolution: {integrity: sha512-4j7QBitb/WMT1fzdJo7BsFvVNaFR5WCQPdf/RPDHEsgQIYwBaHaL47KTZxncGFQDD1UAKN3XScJ0k7LAsZfsvg==} - cpu: [arm64] - os: [android] - - '@rolldown/binding-darwin-arm64@1.0.0-beta.30': - resolution: {integrity: sha512-4vWFTe1o5LXeitI2lW8qMGRxxwrH/LhKd2HDLa/QPhdxohvdnfKyDZWN96XUhDyje2bHFCFyhMs3ak2lg2mJFA==} - cpu: [arm64] - os: [darwin] - - '@rolldown/binding-darwin-x64@1.0.0-beta.30': - resolution: {integrity: sha512-MxrfodqImbsDFFFU/8LxyFPZjt7s4ht8g2Zb76EmIQ+xlmit46L9IzvWiuMpEaSJ5WbnjO7fCDWwakMGyJJ+Dw==} - cpu: [x64] - os: [darwin] - - '@rolldown/binding-freebsd-x64@1.0.0-beta.30': - resolution: {integrity: sha512-c/TQXcATKoO8qE1bCjCOkymZTu7yVUAxBSNLp42Q97XHCb0Cu9v6MjZpB6c7Hq9NQ9NzW44uglak9D/r77JeDw==} - cpu: [x64] - os: [freebsd] - - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.30': - resolution: {integrity: sha512-Vxci4xylM11zVqvrmezAaRjGBDyOlMRtlt7TDgxaBmSYLuiokXbZpD8aoSuOyjUAeN0/tmWItkxNGQza8UWGNQ==} - cpu: [arm] - os: [linux] - - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.30': - resolution: {integrity: sha512-iEBEdSs25Ol0lXyVNs763f7YPAIP0t1EAjoXME81oJ94DesJslaLTj71Rn1shoMDVA+dfkYA286w5uYnOs9ZNA==} - cpu: [arm64] - os: [linux] - - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.30': - resolution: {integrity: sha512-Ny684Sn1X8c+gGLuDlxkOuwiEE3C7eEOqp1/YVBzQB4HO7U/b4n7alvHvShboOEY5DP1fFUjq6Z+sBLYlCIZbQ==} - cpu: [arm64] - os: [linux] - - '@rolldown/binding-linux-arm64-ohos@1.0.0-beta.30': - resolution: {integrity: sha512-6moyULHDPKwt5RDEV72EqYw5n+s46AerTwtEBau5wCsZd1wuHS1L9z6wqhKISXAFTK9sneN0TEjvYKo+sgbbiA==} - cpu: [arm64] - os: [openharmony] - - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.30': - resolution: {integrity: sha512-p0yoPdoGg5Ow2YZKKB5Ypbn58i7u4XFk3PvMkriFnEcgtVk40c5u7miaX7jH0JdzahyXVBJ/KT5yEpJrzQn8yg==} - cpu: [x64] - os: [linux] - - '@rolldown/binding-linux-x64-musl@1.0.0-beta.30': - resolution: {integrity: sha512-sM/KhCrsT0YdHX10mFSr0cvbfk1+btG6ftepAfqhbcDfhi0s65J4dTOxGmklJnJL9i1LXZ8WA3N4wmnqsfoK8Q==} - cpu: [x64] - os: [linux] - - '@rolldown/binding-wasm32-wasi@1.0.0-beta.30': - resolution: {integrity: sha512-i3kD5OWs8PQP0V+JW3TFyCLuyjuNzrB45em0g84Jc+gvnDsGVlzVjMNPo7txE/yT8CfE90HC/lDs3ry9FvaUyw==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.30': - resolution: {integrity: sha512-q7mrYln30V35VrCqnBVQQvNPQm8Om9HC59I3kMYiOWogvJobzSPyO+HA1MP363+Qgwe39I2I1nqBKPOtWZ33AQ==} - cpu: [arm64] - os: [win32] - - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.30': - resolution: {integrity: sha512-nUqGBt39XTpbBEREEnyKofdP3uz+SN/x2884BH+N3B2NjSUrP6NXwzltM35C0wKK42hX/nthRrwSgj715m99Jw==} - cpu: [ia32] - os: [win32] - - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.30': - resolution: {integrity: sha512-lbnvUwAXIVWSXAeZrCa4b1KvV/DW0rBnMHuX0T7I6ey1IsXZ90J37dEgt3j48Ex1Cw1E+5H7VDNP2gyOX8iu3w==} - cpu: [x64] - os: [win32] - - '@rolldown/pluginutils@1.0.0-beta.30': - resolution: {integrity: sha512-whXaSoNUFiyDAjkUF8OBpOm77Szdbk5lGNqFe6CbVbJFrhCCPinCbRA3NjawwlNHla1No7xvXXh+CpSxnPfUEw==} - '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} @@ -1331,8 +1245,8 @@ packages: peerDependencies: eslint: '>=9.0.0' - '@tybys/wasm-util@0.10.0': - resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==} + '@tybys/wasm-util@0.9.0': + resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} '@types/chai@5.2.2': resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} @@ -1503,10 +1417,6 @@ packages: resolution: {integrity: sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.38.0': - resolution: {integrity: sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@6.21.0': resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -1574,29 +1484,24 @@ packages: '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - '@unrs/resolver-binding-android-arm-eabi@1.11.1': - resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} + '@unrs/resolver-binding-android-arm-eabi@1.9.0': + resolution: {integrity: sha512-h1T2c2Di49ekF2TE8ZCoJkb+jwETKUIPDJ/nO3tJBKlLFPu+fyd93f0rGP/BvArKx2k2HlRM4kqkNarj3dvZlg==} cpu: [arm] os: [android] - '@unrs/resolver-binding-android-arm64@1.11.1': - resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==} + '@unrs/resolver-binding-android-arm64@1.9.0': + resolution: {integrity: sha512-sG1NHtgXtX8owEkJ11yn34vt0Xqzi3k9TJ8zppDmyG8GZV4kVWw44FHwKwHeEFl07uKPeC4ZoyuQaGh5ruJYPA==} cpu: [arm64] os: [android] - '@unrs/resolver-binding-darwin-arm64@1.11.1': - resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==} - cpu: [arm64] - os: [darwin] - '@unrs/resolver-binding-darwin-arm64@1.7.8': resolution: {integrity: sha512-rsRK8T7yxraNRDmpFLZCWqpea6OlXPNRRCjWMx24O1V86KFol7u2gj9zJCv6zB1oJjtnzWceuqdnCgOipFcJPA==} cpu: [arm64] os: [darwin] - '@unrs/resolver-binding-darwin-x64@1.11.1': - resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==} - cpu: [x64] + '@unrs/resolver-binding-darwin-arm64@1.9.0': + resolution: {integrity: sha512-nJ9z47kfFnCxN1z/oYZS7HSNsFh43y2asePzTEZpEvK7kGyuShSl3RRXnm/1QaqFL+iP+BjMwuB+DYUymOkA5A==} + cpu: [arm64] os: [darwin] '@unrs/resolver-binding-darwin-x64@1.7.8': @@ -1604,28 +1509,28 @@ packages: cpu: [x64] os: [darwin] - '@unrs/resolver-binding-freebsd-x64@1.11.1': - resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==} + '@unrs/resolver-binding-darwin-x64@1.9.0': + resolution: {integrity: sha512-TK+UA1TTa0qS53rjWn7cVlEKVGz2B6JYe0C++TdQjvWYIyx83ruwh0wd4LRxYBM5HeuAzXcylA9BH2trARXJTw==} cpu: [x64] - os: [freebsd] + os: [darwin] '@unrs/resolver-binding-freebsd-x64@1.7.8': resolution: {integrity: sha512-ST4uqF6FmdZQgv+Q73FU1uHzppeT4mhX3IIEmHlLObrv5Ep50olWRz0iQ4PWovadjHMTAmpuJAGaAuCZYb7UAQ==} cpu: [x64] os: [freebsd] - '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': - resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==} - cpu: [arm] - os: [linux] + '@unrs/resolver-binding-freebsd-x64@1.9.0': + resolution: {integrity: sha512-6uZwzMRFcD7CcCd0vz3Hp+9qIL2jseE/bx3ZjaLwn8t714nYGwiE84WpaMCYjU+IQET8Vu/+BNAGtYD7BG/0yA==} + cpu: [x64] + os: [freebsd] '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.8': resolution: {integrity: sha512-Z/A/4Rm2VWku2g25C3tVb986fY6unx5jaaCFpx1pbAj0OKkyuJ5wcQLHvNbIcJ9qhiYwXfrkB7JNlxrAbg7YFg==} cpu: [arm] os: [linux] - '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': - resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==} + '@unrs/resolver-binding-linux-arm-gnueabihf@1.9.0': + resolution: {integrity: sha512-bPUBksQfrgcfv2+mm+AZinaKq8LCFvt5PThYqRotqSuuZK1TVKkhbVMS/jvSRfYl7jr3AoZLYbDkItxgqMKRkg==} cpu: [arm] os: [linux] @@ -1634,9 +1539,9 @@ packages: cpu: [arm] os: [linux] - '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': - resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==} - cpu: [arm64] + '@unrs/resolver-binding-linux-arm-musleabihf@1.9.0': + resolution: {integrity: sha512-uT6E7UBIrTdCsFQ+y0tQd3g5oudmrS/hds5pbU3h4s2t/1vsGWbbSKhBSCD9mcqaqkBwoqlECpUrRJCmldl8PA==} + cpu: [arm] os: [linux] '@unrs/resolver-binding-linux-arm64-gnu@1.7.8': @@ -1644,8 +1549,8 @@ packages: cpu: [arm64] os: [linux] - '@unrs/resolver-binding-linux-arm64-musl@1.11.1': - resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==} + '@unrs/resolver-binding-linux-arm64-gnu@1.9.0': + resolution: {integrity: sha512-vdqBh911wc5awE2bX2zx3eflbyv8U9xbE/jVKAm425eRoOVv/VseGZsqi3A3SykckSpF4wSROkbQPvbQFn8EsA==} cpu: [arm64] os: [linux] @@ -1654,9 +1559,9 @@ packages: cpu: [arm64] os: [linux] - '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': - resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==} - cpu: [ppc64] + '@unrs/resolver-binding-linux-arm64-musl@1.9.0': + resolution: {integrity: sha512-/8JFZ/SnuDr1lLEVsxsuVwrsGquTvT51RZGvyDB/dOK3oYK2UqeXzgeyq6Otp8FZXQcEYqJwxb9v+gtdXn03eQ==} + cpu: [arm64] os: [linux] '@unrs/resolver-binding-linux-ppc64-gnu@1.7.8': @@ -1664,9 +1569,9 @@ packages: cpu: [ppc64] os: [linux] - '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': - resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==} - cpu: [riscv64] + '@unrs/resolver-binding-linux-ppc64-gnu@1.9.0': + resolution: {integrity: sha512-FkJjybtrl+rajTw4loI3L6YqSOpeZfDls4SstL/5lsP2bka9TiHUjgMBjygeZEis1oC8LfJTS8FSgpKPaQx2tQ==} + cpu: [ppc64] os: [linux] '@unrs/resolver-binding-linux-riscv64-gnu@1.7.8': @@ -1674,8 +1579,8 @@ packages: cpu: [riscv64] os: [linux] - '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': - resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==} + '@unrs/resolver-binding-linux-riscv64-gnu@1.9.0': + resolution: {integrity: sha512-w/NZfHNeDusbqSZ8r/hp8iL4S39h4+vQMc9/vvzuIKMWKppyUGKm3IST0Qv0aOZ1rzIbl9SrDeIqK86ZpUK37w==} cpu: [riscv64] os: [linux] @@ -1684,9 +1589,9 @@ packages: cpu: [riscv64] os: [linux] - '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': - resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==} - cpu: [s390x] + '@unrs/resolver-binding-linux-riscv64-musl@1.9.0': + resolution: {integrity: sha512-bEPBosut8/8KQbUixPry8zg/fOzVOWyvwzOfz0C0Rw6dp+wIBseyiHKjkcSyZKv/98edrbMknBaMNJfA/UEdqw==} + cpu: [riscv64] os: [linux] '@unrs/resolver-binding-linux-s390x-gnu@1.7.8': @@ -1694,9 +1599,9 @@ packages: cpu: [s390x] os: [linux] - '@unrs/resolver-binding-linux-x64-gnu@1.11.1': - resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==} - cpu: [x64] + '@unrs/resolver-binding-linux-s390x-gnu@1.9.0': + resolution: {integrity: sha512-LDtMT7moE3gK753gG4pc31AAqGUC86j3AplaFusc717EUGF9ZFJ356sdQzzZzkBk1XzMdxFyZ4f/i35NKM/lFA==} + cpu: [s390x] os: [linux] '@unrs/resolver-binding-linux-x64-gnu@1.7.8': @@ -1704,8 +1609,8 @@ packages: cpu: [x64] os: [linux] - '@unrs/resolver-binding-linux-x64-musl@1.11.1': - resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==} + '@unrs/resolver-binding-linux-x64-gnu@1.9.0': + resolution: {integrity: sha512-WmFd5KINHIXj8o1mPaT8QRjA9HgSXhN1gl9Da4IZihARihEnOylu4co7i/yeaIpcfsI6sYs33cNZKyHYDh0lrA==} cpu: [x64] os: [linux] @@ -1714,29 +1619,29 @@ packages: cpu: [x64] os: [linux] - '@unrs/resolver-binding-wasm32-wasi@1.11.1': - resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] + '@unrs/resolver-binding-linux-x64-musl@1.9.0': + resolution: {integrity: sha512-CYuXbANW+WgzVRIl8/QvZmDaZxrqvOldOwlbUjIM4pQ46FJ0W5cinJ/Ghwa/Ng1ZPMJMk1VFdsD/XwmCGIXBWg==} + cpu: [x64] + os: [linux] '@unrs/resolver-binding-wasm32-wasi@1.7.8': resolution: {integrity: sha512-x94WnaU5g+pCPDVedfnXzoG6lCOF2xFGebNwhtbJCWfceE94Zj8aysSxdxotlrZrxnz5D3ijtyFUYtpz04n39Q==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': - resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==} - cpu: [arm64] - os: [win32] + '@unrs/resolver-binding-wasm32-wasi@1.9.0': + resolution: {integrity: sha512-6Rp2WH0OoitMYR57Z6VE8Y6corX8C6QEMWLgOV6qXiJIeZ1F9WGXY/yQ8yDC4iTraotyLOeJ2Asea0urWj2fKQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] '@unrs/resolver-binding-win32-arm64-msvc@1.7.8': resolution: {integrity: sha512-vst2u8EJZ5L6jhJ6iLis3w9rg16aYqRxQuBAMYQRVrPMI43693hLP7DuqyOBRKgsQXy9/jgh204k0ViHkqQgdg==} cpu: [arm64] os: [win32] - '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': - resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==} - cpu: [ia32] + '@unrs/resolver-binding-win32-arm64-msvc@1.9.0': + resolution: {integrity: sha512-rknkrTRuvujprrbPmGeHi8wYWxmNVlBoNW8+4XF2hXUnASOjmuC9FNF1tGbDiRQWn264q9U/oGtixyO3BT8adQ==} + cpu: [arm64] os: [win32] '@unrs/resolver-binding-win32-ia32-msvc@1.7.8': @@ -1744,9 +1649,9 @@ packages: cpu: [ia32] os: [win32] - '@unrs/resolver-binding-win32-x64-msvc@1.11.1': - resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==} - cpu: [x64] + '@unrs/resolver-binding-win32-ia32-msvc@1.9.0': + resolution: {integrity: sha512-Ceymm+iBl+bgAICtgiHyMLz6hjxmLJKqBim8tDzpX61wpZOx2bPK6Gjuor7I2RiUynVjvvkoRIkrPyMwzBzF3A==} + cpu: [ia32] os: [win32] '@unrs/resolver-binding-win32-x64-msvc@1.7.8': @@ -1754,6 +1659,11 @@ packages: cpu: [x64] os: [win32] + '@unrs/resolver-binding-win32-x64-msvc@1.9.0': + resolution: {integrity: sha512-k59o9ZyeyS0hAlcaKFezYSH2agQeRFEB7KoQLXl3Nb3rgkqT1NY9Vwy+SqODiLmYnEjxWJVRE/yq2jFVqdIxZw==} + cpu: [x64] + os: [win32] + '@vitest/eslint-plugin@1.2.1': resolution: {integrity: sha512-JQr1jdVcrsoS7Sdzn83h9sq4DvREf9Q/onTZbJCqTVlv/76qb+TZrLv/9VhjnjSMHweQH5FdpMDeCR6aDe2fgw==} peerDependencies: @@ -1804,6 +1714,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.14.1: + resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} + engines: {node: '>=0.4.0'} + hasBin: true + acorn@8.15.0: resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} @@ -1813,8 +1728,8 @@ packages: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} engines: {node: '>= 14'} - agent-base@7.1.4: - resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + agent-base@7.1.3: + resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} engines: {node: '>= 14'} aggregate-error@3.1.0: @@ -1856,13 +1771,13 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} - ansis@4.1.0: - resolution: {integrity: sha512-BGcItUBWSMRgOCe+SVZJ+S7yTRG0eGt9cXAHev72yuGcY23hnLA7Bky5L/xLyPINoSN95geovfBkqoTlNZYa7w==} - engines: {node: '>=14'} - any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + are-docs-informative@0.0.2: resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} engines: {node: '>=14'} @@ -1915,6 +1830,10 @@ packages: resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} engines: {node: '>= 0.4'} + array.prototype.reduce@1.0.7: + resolution: {integrity: sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==} + engines: {node: '>= 0.4'} + array.prototype.tosorted@1.1.4: resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} engines: {node: '>= 0.4'} @@ -1942,10 +1861,6 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} - ast-kit@2.1.1: - resolution: {integrity: sha512-mfh6a7gKXE8pDlxTvqIc/syH/P3RkzbOF6LeHdcKztLEzYe6IMsRCL7N8vI7hqTGWNxpkCuuRTpT21xNWqhRtQ==} - engines: {node: '>=20.18.0'} - ast-types-flow@0.0.8: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} @@ -2010,8 +1925,9 @@ packages: before-after-hook@4.0.0: resolution: {integrity: sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==} - birpc@2.5.0: - resolution: {integrity: sha512-VSWO/W6nNQdyP520F1mhf+Lc2f8pjGQOtoHHm7Ze8Go1kX7akpVIrtTa0fn+HB0QJEDVacl6aO08YE0PgXfdnQ==} + binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} bluebird@2.11.0: resolution: {integrity: sha512-UfFSr22dmHPQqPP9XWHRhq+gWnHCYguQGkXQlbyPtW5qTnhFWA8/iXg765tH0cAjy7l/zPJ1aBTO0g5XgA7kvQ==} @@ -2048,6 +1964,9 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + builtin-modules@4.0.0: resolution: {integrity: sha512-p1n8zyCkt1BVrKNFymOHjcDSAl7oq/gUvfgULv2EblgpPVQlQr9yHnWjg9IJ2MhfwPqiYqMMrr01OY7yQoK2yA==} engines: {node: '>=18.20'} @@ -2066,10 +1985,6 @@ packages: monocart-coverage-reports: optional: true - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - cacache@18.0.4: resolution: {integrity: sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==} engines: {node: ^16.14.0 || >=18.0.0} @@ -2136,6 +2051,10 @@ packages: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} @@ -2148,9 +2067,6 @@ packages: resolution: {integrity: sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==} engines: {node: '>=8'} - cjs-module-lexer@1.4.3: - resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} - clean-regexp@1.0.0: resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} engines: {node: '>=4'} @@ -2180,6 +2096,9 @@ packages: resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} engines: {node: '>=18'} + cliui@6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + cliui@7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} @@ -2187,6 +2106,10 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} + clone-deep@4.0.1: + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} + clone-regexp@3.0.0: resolution: {integrity: sha512-ujdnoq2Kxb8s3ItNBtnYeXdm07FcU0u8ARAT1lQ2YdMwQC+cdiXX8KoqMVuglztILivceTtp4ivqGSmEmhBUJw==} engines: {node: '>=12'} @@ -2215,19 +2138,23 @@ packages: resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==} engines: {node: '>=20'} + commander@6.2.1: + resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} + engines: {node: '>= 6'} + comment-parser@1.4.1: resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} engines: {node: '>= 12.0.0'} + commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - confbox@0.2.2: - resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} - config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} @@ -2262,6 +2189,9 @@ packages: core-js-compat@3.42.0: resolution: {integrity: sha512-bQasjMfyDGyaeWKBIu33lHh9qlSR0MFE/Nmc6nMjf/iU9b3rSMdAYz1Baxrv4lPdGUsTqZudHA4jIGSJy0SWZQ==} + core-js@3.37.1: + resolution: {integrity: sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==} + core-util-is@1.0.2: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} @@ -2367,6 +2297,10 @@ packages: supports-color: optional: true + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + decamelize@4.0.0: resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} engines: {node: '>=10'} @@ -2410,9 +2344,6 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} - defu@6.1.4: - resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} - delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -2421,10 +2352,6 @@ packages: resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==} engines: {node: '>=0.3.1'} - diff@8.0.2: - resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} - engines: {node: '>=0.3.1'} - dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -2460,15 +2387,6 @@ packages: resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} engines: {node: '>=4'} - dts-resolver@2.1.1: - resolution: {integrity: sha512-3BiGFhB6mj5Kv+W2vdJseQUYW+SKVzAFJL6YNP6ursbrwy1fXHRotfHi3xLNxe4wZl/K8qbAFeCDjZLjzqxxRw==} - engines: {node: '>=20.18.0'} - peerDependencies: - oxc-resolver: '>=11.0.0' - peerDependenciesMeta: - oxc-resolver: - optional: true - dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -2497,10 +2415,6 @@ packages: emojilib@2.4.0: resolution: {integrity: sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==} - empathic@2.0.0: - resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} - engines: {node: '>=14'} - encoding@0.1.13: resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} @@ -2548,6 +2462,9 @@ packages: resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} engines: {node: '>= 0.4'} + es-array-method-boxes-properly@1.0.0: + resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} + es-define-property@1.0.0: resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} engines: {node: '>= 0.4'} @@ -2657,8 +2574,8 @@ packages: unrs-resolver: optional: true - eslint-import-context@0.1.9: - resolution: {integrity: sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg==} + eslint-import-context@0.1.8: + resolution: {integrity: sha512-bq+F7nyc65sKpZGT09dY0S0QrOnQtuDVIfyTGQ8uuvtMIF7oHp6CEP3mouN0rrnYF3Jqo6Ke0BfU/5wASZue1w==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} peerDependencies: unrs-resolver: ^1.0.0 @@ -2765,8 +2682,8 @@ packages: typescript: optional: true - eslint-plugin-import-x@4.16.1: - resolution: {integrity: sha512-vPZZsiOKaBAIATpFE2uMI4w5IRwdv/FpQ+qZZMR4E+PeOcM4OeoEbqxRMnywdxP19TyB/3h6QBB0EWon7letSQ==} + eslint-plugin-import-x@4.15.1: + resolution: {integrity: sha512-JfVpNg1qMkPD66iaSgmMoSYeUCGS8UFSm3GwHV0IbuV3Knar/SyK5qqCct9+AxoMIzaM+KSO7KK5pOeOkC/3GQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/utils': ^8.0.0 @@ -3005,9 +2922,6 @@ packages: exponential-backoff@3.1.2: resolution: {integrity: sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==} - exsolve@1.0.7: - resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==} - extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -3057,9 +2971,6 @@ packages: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} - fflate@0.8.2: - resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} - figures@2.0.0: resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} engines: {node: '>=4'} @@ -3084,6 +2995,10 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + find-cache-dir@2.1.0: + resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} + engines: {node: '>=6'} + find-up-simple@1.0.0: resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==} engines: {node: '>=18'} @@ -3092,6 +3007,10 @@ packages: resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} engines: {node: '>=4'} + find-up@3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} + find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -3160,9 +3079,17 @@ packages: resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + fs-readdir-recursive@1.1.0: + resolution: {integrity: sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==} + fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} @@ -3436,13 +3363,14 @@ packages: highlight.js@10.7.3: resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + homedir-polyfill@1.0.3: + resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} + engines: {node: '>=0.10.0'} + hook-std@3.0.0: resolution: {integrity: sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hookable@5.5.3: - resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} - hosted-git-info@7.0.1: resolution: {integrity: sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==} engines: {node: ^16.14.0 || >=18.0.0} @@ -3604,6 +3532,10 @@ packages: resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} engines: {node: '>= 0.4'} + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} @@ -3738,6 +3670,10 @@ packages: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} + is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + is-proto-prop@2.0.0: resolution: {integrity: sha512-jl3NbQ/fGLv5Jhan4uX+Ge9ohnemqyblWVVCpAvtTQzNFvV2xhJq+esnkIbYQ9F1nITXoLfDDQLp7LBw/zzncg==} @@ -3840,6 +3776,10 @@ packages: resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} engines: {node: '>=16'} + isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + isomorphic-ws@5.0.0: resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} peerDependencies: @@ -3891,9 +3831,6 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-tokens@9.0.1: - resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} - js-types@1.0.0: resolution: {integrity: sha512-bfwqBW9cC/Lp7xcRpug7YrXm0IVw+T9e3g4mCYnv0Pjr3zIzU9PCQElYU9oSGAWzXlbdl9X5SAMPejO9sxkeUw==} engines: {node: '>=0.10.0'} @@ -3981,6 +3918,10 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + language-subtag-registry@0.3.22: resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} @@ -4024,6 +3965,10 @@ packages: resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} engines: {node: '>=4'} + locate-path@3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} + locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -4101,6 +4046,10 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + make-dir@2.1.0: + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} + engines: {node: '>=6'} + make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} @@ -4188,6 +4137,9 @@ packages: resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} engines: {node: 20 || >=22} + minimatch@3.0.5: + resolution: {integrity: sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -4251,30 +4203,21 @@ packages: moment@2.30.1: resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} - mri@1.2.0: - resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} - engines: {node: '>=4'} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nan@2.23.0: - resolution: {integrity: sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ==} + nan@2.22.2: + resolution: {integrity: sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==} nano-spawn@1.0.2: resolution: {integrity: sha512-21t+ozMQDAL/UGgQVBbZ/xXvNO10++ZPuTmKRO8k9V3AClVRht49ahtDjfY8l1q6nSHOrE5ASfthzH3ol6R/hg==} engines: {node: '>=20.17'} - napi-postinstall@0.2.5: - resolution: {integrity: sha512-kmsgUvCRIJohHjbZ3V8avP0I1Pekw329MVAMDzVxsrkjgdnqiwvMX5XwR+hWV66vsAtZ+iM+fVnq8RTQawUmCQ==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - hasBin: true - - napi-postinstall@0.3.2: - resolution: {integrity: sha512-tWVJxJHmBWLy69PvO96TZMZDrzmw5KeiZBz3RHmiM2XZ9grBJ2WgMAFVVg25nqp3ZjTFUs2Ftw1JhscL3Teliw==} + napi-postinstall@0.2.4: + resolution: {integrity: sha512-ZEzHJwBhZ8qQSbknHqYcdtQVr8zUgGyM/q6h6qAyhtyVMNrSgDhrC4disf03dYW0e+czXyLnZINnCTEkWy0eJg==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} hasBin: true @@ -4304,6 +4247,9 @@ packages: resolution: {integrity: sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==} engines: {node: '>=18'} + node-environment-flags@1.0.6: + resolution: {integrity: sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==} + node-fetch@3.3.2: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -4329,6 +4275,10 @@ packages: resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} engines: {node: '>=0.10.0'} + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + normalize-url@8.0.0: resolution: {integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==} engines: {node: '>=14.16'} @@ -4459,6 +4409,10 @@ packages: resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} engines: {node: '>= 0.4'} + object.getownpropertydescriptors@2.1.8: + resolution: {integrity: sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==} + engines: {node: '>= 0.8'} + object.values@1.2.0: resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} engines: {node: '>= 0.4'} @@ -4526,6 +4480,10 @@ packages: resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} engines: {node: '>=4'} + p-locate@3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} + p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -4557,9 +4515,6 @@ packages: package-json-from-dist@1.0.0: resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} - package-manager-detector@1.3.0: - resolution: {integrity: sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==} - parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -4583,6 +4538,10 @@ packages: resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} engines: {node: '>=18'} + parse-passwd@1.0.0: + resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} + engines: {node: '>=0.10.0'} + parse-statements@1.0.11: resolution: {integrity: sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==} @@ -4637,9 +4596,6 @@ packages: resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} engines: {node: '>=12'} - pathe@2.0.3: - resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - pathval@2.0.0: resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} engines: {node: '>= 14.16'} @@ -4667,17 +4623,26 @@ packages: resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} engines: {node: '>=4'} + pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + pkg-conf@2.1.0: resolution: {integrity: sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==} engines: {node: '>=4'} + pkg-dir@3.0.0: + resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} + engines: {node: '>=6'} + pkg-dir@5.0.0: resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} engines: {node: '>=10'} - pkg-types@2.2.0: - resolution: {integrity: sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==} - pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} @@ -4735,11 +4700,6 @@ packages: psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} - publint@0.3.12: - resolution: {integrity: sha512-1w3MMtL9iotBjm1mmXtG3Nk06wnq9UhGNRpQ2j6n1Zq7YAD6gnxMMZMIxlRPAydVjVbjSm+n0lhwqsD1m4LD5w==} - engines: {node: '>=18'} - hasBin: true - punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -4748,9 +4708,6 @@ packages: resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} engines: {node: '>=0.6'} - quansync@0.2.10: - resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==} - queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -4791,6 +4748,10 @@ packages: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + readdirp@4.1.2: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} @@ -4818,6 +4779,9 @@ packages: regenerate@1.4.2: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + regexp-ast-analysis@0.7.1: resolution: {integrity: sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -4860,6 +4824,11 @@ packages: remove-trailing-separator@1.1.0: resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} + replace@1.2.2: + resolution: {integrity: sha512-C4EDifm22XZM2b2JOYe6Mhn+lBsLBAvLbK8drfUQLTfD1KYl/n3VaW/CDju0Ny4w3xTtegBpg8YNSpFJPUDSjA==} + engines: {node: '>= 6'} + hasBin: true + req-all@0.1.0: resolution: {integrity: sha512-ZdvPr8uXy9ujX3KujwE2P1HWkMYgogIhqeAeyb47MqWjSfyxERSm0TNbN/IapCCmWDufXab04AYrRgObaJCJ6Q==} engines: {node: '>=4'} @@ -4873,6 +4842,9 @@ packages: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} + require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + requireindex@1.1.0: resolution: {integrity: sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg==} engines: {node: '>=0.10.5'} @@ -4921,30 +4893,15 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true + rimraf@6.0.1: + resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} + engines: {node: 20 || >=22} + hasBin: true + roarr@7.21.1: resolution: {integrity: sha512-3niqt5bXFY1InKU8HKWqqYTYjtrBaxBMnXELXCXUYgtNYGUtZM5rB46HIC430AyacL95iEniGf7RgqsesykLmQ==} engines: {node: '>=18.0'} - rolldown-plugin-dts@0.14.3: - resolution: {integrity: sha512-LsUPsPV2XpACe5wikxQzYBD0qg4nyxwUkLos5oF8v8qVO9jPpH6GRg2S5ZUELFry04Ab58C9Tibbi7dEbVLp2w==} - engines: {node: '>=20.18.0'} - peerDependencies: - '@typescript/native-preview': '>=7.0.0-dev.20250601.1' - rolldown: ^1.0.0-beta.9 - typescript: ^5.0.0 - vue-tsc: ~3.0.3 - peerDependenciesMeta: - '@typescript/native-preview': - optional: true - typescript: - optional: true - vue-tsc: - optional: true - - rolldown@1.0.0-beta.30: - resolution: {integrity: sha512-H/LmDTUPlm65hWOTjXvd1k0qrGinNi8LrG3JsHVm6Oit7STg0upBmgoG5PZUHbAnGTHr0MLoLyzjmH261lIqSg==} - hasBin: true - run-applescript@7.0.0: resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} engines: {node: '>=18'} @@ -4952,10 +4909,6 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - sade@1.8.1: - resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} - engines: {node: '>=6'} - safe-array-concat@1.1.2: resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} @@ -5009,6 +4962,10 @@ packages: resolution: {integrity: sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==} engines: {node: '>=12'} + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -5021,6 +4978,9 @@ packages: serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -5033,6 +4993,10 @@ packages: resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} engines: {node: '>= 0.4'} + shallow-clone@3.0.1: + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -5076,6 +5040,10 @@ packages: resolution: {integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==} engines: {node: '>=8'} + slash@2.0.0: + resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==} + engines: {node: '>=6'} + slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -5100,10 +5068,13 @@ packages: resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} engines: {node: '>= 14'} - socks@2.8.6: - resolution: {integrity: sha512-pe4Y2yzru68lXCb38aAqRf5gvN8YdjP1lok5o0J7BOHljkyCGKVz7H3vpVIXKD27rj2giOJ7DwVyk/GWrPHDWA==} + socks@2.8.5: + resolution: {integrity: sha512-iF+tNDQla22geJdTyJB1wM/qrX9DMRwWrciEPwWLPRWAUEM8sQiyxgckLxWT1f7+9VabJS0jTGGr4QgBuvi6Ww==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} @@ -5148,8 +5119,8 @@ packages: resolution: {integrity: sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - stable-hash-x@0.2.0: - resolution: {integrity: sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==} + stable-hash-x@0.1.1: + resolution: {integrity: sha512-l0x1D6vhnsNUGPFVDx45eif0y6eedVC8nm5uACTrVFJFtl2mLRW17aWtVyxFCpn5t94VUPkjU8vSLwIuwwqtJQ==} engines: {node: '>=12.0.0'} stable-hash@0.0.5: @@ -5343,9 +5314,6 @@ packages: tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - tinyexec@1.0.1: - resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} - tinyglobby@0.2.14: resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} @@ -5354,6 +5322,10 @@ packages: resolution: {integrity: sha512-noj0KdpWTBhwsKxMOXk0rN9otg4kTgLm4WohERRHbJ9IY+kSDKr3RmjitaQ3JFzny+DyvBOQKlFZhp0G0qNSfg==} hasBin: true + to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -5390,28 +5362,6 @@ packages: resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} engines: {node: '>=6'} - tsdown@0.13.0: - resolution: {integrity: sha512-+1ZqbLIYDAiNxtAvq9RsTg55PRvaMxGmtvRFBW2J+i4GfDKiyHAkxez1eB3EPvHG1Z917nsf2madsSeblJS3GA==} - engines: {node: '>=20.19.0'} - hasBin: true - peerDependencies: - '@arethetypeswrong/core': ^0.18.1 - publint: ^0.3.0 - typescript: ^5.0.0 - unplugin-lightningcss: ^0.4.0 - unplugin-unused: ^0.5.0 - peerDependenciesMeta: - '@arethetypeswrong/core': - optional: true - publint: - optional: true - typescript: - optional: true - unplugin-lightningcss: - optional: true - unplugin-unused: - optional: true - tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -5484,11 +5434,6 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - typescript@5.6.1-rc: - resolution: {integrity: sha512-E3b2+1zEFu84jB0YQi9BORDjz9+jGbwwy1Zi3G0LUNw7a7cePUrHMRNy8aPh53nXpkFGVHSxIZo5vKTfYaFiBQ==} - engines: {node: '>=14.17'} - hasBin: true - typescript@5.8.3: resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} engines: {node: '>=14.17'} @@ -5506,9 +5451,6 @@ packages: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} - unconfig@7.3.2: - resolution: {integrity: sha512-nqG5NNL2wFVGZ0NA/aCFw0oJ2pxSf1lwg4Z5ill8wd7K4KX/rQbHlwbh+bjctXL5Ly1xtzHenHGOK0b+lG6JVg==} - undici-types@7.8.0: resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} @@ -5563,20 +5505,12 @@ packages: resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==} engines: {node: '>=0.10.0'} - unplugin-unused@0.5.1: - resolution: {integrity: sha512-USnsy4XsInQFcIb/kSt5HbTkwIIYfW1ujGN0jPanq76IvG7RsqHPk4kJqDoZSqCgDkTjolr72a/f7K1Hr2XmWg==} - engines: {node: '>=20.18.0'} - - unplugin@2.3.5: - resolution: {integrity: sha512-RyWSb5AHmGtjjNQ6gIlA67sHOsWpsbWpwDokLwTcejVdOjEkJZh7QKu14J00gDDVSh8kGH4KYC/TNBceXFZhtw==} - engines: {node: '>=18.12.0'} - - unrs-resolver@1.11.1: - resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} - unrs-resolver@1.7.8: resolution: {integrity: sha512-2zsXwyOXmCX9nGz4vhtZRYhe30V78heAv+KDc21A/KMdovGHbZcixeD5JHEF0DrFXzdytwuzYclcPbvp8A3Jlw==} + unrs-resolver@1.9.0: + resolution: {integrity: sha512-wqaRu4UnzBD2ABTC1kLfBjAqIDZ5YUTr/MLGa7By47JV1bJDSW7jq/ZSLigB7enLe7ubNaJhtnBXgrc/50cEhg==} + update-browserslist-db@1.1.3: resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} hasBin: true @@ -5617,13 +5551,13 @@ packages: resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} engines: {node: '>=10.12.0'} + v8flags@3.2.0: + resolution: {integrity: sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==} + engines: {node: '>= 0.10'} + validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - validate-npm-package-name@5.0.1: - resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - verror@1.10.0: resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} engines: {'0': node >=0.6.0} @@ -5632,9 +5566,6 @@ packages: resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} engines: {node: '>= 8'} - webpack-virtual-modules@0.6.2: - resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} - whatwg-mimetype@4.0.0: resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} engines: {node: '>=18'} @@ -5657,6 +5588,9 @@ packages: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} engines: {node: '>= 0.4'} + which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + which-typed-array@1.1.15: resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} engines: {node: '>= 0.4'} @@ -5685,6 +5619,10 @@ packages: workerpool@9.3.2: resolution: {integrity: sha512-Xz4Nm9c+LiBHhDR5bDLnNzmj6+5F+cyEAWPMkbs2awq/dYazR/efelZzUAjB/y3kNHL+uzkHvxVVpaOfGCPV7A==} + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -5723,6 +5661,9 @@ packages: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} + y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -5742,6 +5683,10 @@ packages: engines: {node: '>= 14.6'} hasBin: true + yargs-parser@18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} @@ -5754,6 +5699,10 @@ packages: resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} engines: {node: '>=10'} + yargs@15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + yargs@16.2.0: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} engines: {node: '>=10'} @@ -5783,18 +5732,19 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@andrewbranch/untar.js@1.0.3': {} - - '@arethetypeswrong/core@0.18.2': + '@babel/cli@7.27.2(@babel/core@7.27.4)': dependencies: - '@andrewbranch/untar.js': 1.0.3 - '@loaderkit/resolve': 1.0.4 - cjs-module-lexer: 1.4.3 - fflate: 0.8.2 - lru-cache: 11.1.0 - semver: 7.7.2 - typescript: 5.6.1-rc - validate-npm-package-name: 5.0.1 + '@babel/core': 7.27.4 + '@jridgewell/trace-mapping': 0.3.25 + commander: 6.2.1 + convert-source-map: 2.0.0 + fs-readdir-recursive: 1.1.0 + glob: 7.2.3 + make-dir: 2.1.0 + slash: 2.0.0 + optionalDependencies: + '@nicolo-ribaudo/chokidar-2': 2.1.8-no-fsevents.3 + chokidar: 3.6.0 '@babel/code-frame@7.24.7': dependencies: @@ -5853,17 +5803,9 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.0.2 - '@babel/generator@7.28.0': - dependencies: - '@babel/parser': 7.28.0 - '@babel/types': 7.28.2 - '@jridgewell/gen-mapping': 0.3.12 - '@jridgewell/trace-mapping': 0.3.29 - jsesc: 3.1.0 - '@babel/helper-annotate-as-pure@7.24.7': dependencies: - '@babel/types': 7.27.3 + '@babel/types': 7.25.2 '@babel/helper-annotate-as-pure@7.27.3': dependencies: @@ -5984,8 +5926,12 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-string-parser@7.24.8': {} + '@babel/helper-string-parser@7.27.1': {} + '@babel/helper-validator-identifier@7.24.7': {} + '@babel/helper-validator-identifier@7.27.1': {} '@babel/helper-validator-option@7.27.1': {} @@ -6005,18 +5951,28 @@ snapshots: '@babel/highlight@7.24.7': dependencies: - '@babel/helper-validator-identifier': 7.27.1 + '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/parser@7.27.4': + '@babel/node@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/types': 7.27.3 + '@babel/core': 7.27.4 + '@babel/register': 7.27.1(@babel/core@7.27.4) + commander: 6.2.1 + core-js: 3.37.1 + node-environment-flags: 1.0.6 + regenerator-runtime: 0.14.1 + v8flags: 3.2.0 + + '@babel/parser@7.24.7': + dependencies: + '@babel/types': 7.25.2 - '@babel/parser@7.28.0': + '@babel/parser@7.27.4': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.27.3 '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.27.4)': dependencies: @@ -6487,9 +6443,18 @@ snapshots: dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/types': 7.27.3 + '@babel/types': 7.25.2 esutils: 2.0.3 + '@babel/register@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + clone-deep: 4.0.1 + find-cache-dir: 2.1.0 + make-dir: 2.1.0 + pirates: 4.0.6 + source-map-support: 0.5.21 + '@babel/regjsgen@0.8.0': {} '@babel/template@7.27.2': @@ -6510,35 +6475,34 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/types@7.27.3': + '@babel/types@7.25.2': dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 - '@babel/types@7.28.2': + '@babel/types@7.27.3': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 '@bcoe/v8-coverage@1.0.2': {} - '@braidai/lang@1.1.1': {} - '@colors/colors@1.5.0': optional: true - '@emnapi/core@1.4.5': + '@emnapi/core@1.4.3': dependencies: - '@emnapi/wasi-threads': 1.0.4 + '@emnapi/wasi-threads': 1.0.2 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.4.5': + '@emnapi/runtime@1.4.3': dependencies: tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.0.4': + '@emnapi/wasi-threads@1.0.2': dependencies: tslib: 2.8.1 optional: true @@ -6952,11 +6916,6 @@ snapshots: '@istanbuljs/schema@0.1.3': {} - '@jridgewell/gen-mapping@0.3.12': - dependencies: - '@jridgewell/sourcemap-codec': 1.5.4 - '@jridgewell/trace-mapping': 0.3.29 - '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 @@ -6969,40 +6928,25 @@ snapshots: '@jridgewell/sourcemap-codec@1.4.15': {} - '@jridgewell/sourcemap-codec@1.5.4': {} - '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping@0.3.29': - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 - - '@loaderkit/resolve@1.0.4': - dependencies: - '@braidai/lang': 1.1.1 - - '@napi-rs/wasm-runtime@0.2.12': - dependencies: - '@emnapi/core': 1.4.5 - '@emnapi/runtime': 1.4.5 - '@tybys/wasm-util': 0.10.0 - optional: true - - '@napi-rs/wasm-runtime@1.0.1': + '@napi-rs/wasm-runtime@0.2.11': dependencies: - '@emnapi/core': 1.4.5 - '@emnapi/runtime': 1.4.5 - '@tybys/wasm-util': 0.10.0 + '@emnapi/core': 1.4.3 + '@emnapi/runtime': 1.4.3 + '@tybys/wasm-util': 0.9.0 optional: true '@next/eslint-plugin-next@15.3.3': dependencies: fast-glob: 3.3.1 + '@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3': + optional: true + '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': dependencies: eslint-scope: 5.1.1 @@ -7023,7 +6967,7 @@ snapshots: '@npmcli/agent@2.2.2': dependencies: - agent-base: 7.1.4 + agent-base: 7.1.3 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 lru-cache: 10.4.3 @@ -7096,10 +7040,6 @@ snapshots: dependencies: '@octokit/openapi-types': 25.1.0 - '@oxc-project/runtime@0.78.0': {} - - '@oxc-project/types@0.78.0': {} - '@pkgjs/parseargs@0.11.0': optional: true @@ -7117,62 +7057,10 @@ snapshots: '@pnpm/network.ca-file': 1.0.2 config-chain: 1.1.13 - '@publint/pack@0.1.2': {} - - '@quansync/fs@0.1.3': - dependencies: - quansync: 0.2.10 - '@repeaterjs/repeater@3.0.5': {} '@repeaterjs/repeater@3.0.6': {} - '@rolldown/binding-android-arm64@1.0.0-beta.30': - optional: true - - '@rolldown/binding-darwin-arm64@1.0.0-beta.30': - optional: true - - '@rolldown/binding-darwin-x64@1.0.0-beta.30': - optional: true - - '@rolldown/binding-freebsd-x64@1.0.0-beta.30': - optional: true - - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.30': - optional: true - - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.30': - optional: true - - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.30': - optional: true - - '@rolldown/binding-linux-arm64-ohos@1.0.0-beta.30': - optional: true - - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.30': - optional: true - - '@rolldown/binding-linux-x64-musl@1.0.0-beta.30': - optional: true - - '@rolldown/binding-wasm32-wasi@1.0.0-beta.30': - dependencies: - '@napi-rs/wasm-runtime': 1.0.1 - optional: true - - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.30': - optional: true - - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.30': - optional: true - - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.30': - optional: true - - '@rolldown/pluginutils@1.0.0-beta.30': {} - '@sec-ant/readable-stream@0.4.1': {} '@semantic-release/commit-analyzer@13.0.1(semantic-release@24.2.5(typescript@5.8.3))': @@ -7264,7 +7152,7 @@ snapshots: - supports-color - typescript - '@tybys/wasm-util@0.10.0': + '@tybys/wasm-util@0.9.0': dependencies: tslib: 2.8.1 optional: true @@ -7481,8 +7369,6 @@ snapshots: '@typescript-eslint/types@8.34.1': {} - '@typescript-eslint/types@8.38.0': {} - '@typescript-eslint/typescript-estree@6.21.0(typescript@5.8.3)': dependencies: '@typescript-eslint/types': 6.21.0 @@ -7599,118 +7485,118 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@unrs/resolver-binding-android-arm-eabi@1.11.1': + '@unrs/resolver-binding-android-arm-eabi@1.9.0': optional: true - '@unrs/resolver-binding-android-arm64@1.11.1': - optional: true - - '@unrs/resolver-binding-darwin-arm64@1.11.1': + '@unrs/resolver-binding-android-arm64@1.9.0': optional: true '@unrs/resolver-binding-darwin-arm64@1.7.8': optional: true - '@unrs/resolver-binding-darwin-x64@1.11.1': + '@unrs/resolver-binding-darwin-arm64@1.9.0': optional: true '@unrs/resolver-binding-darwin-x64@1.7.8': optional: true - '@unrs/resolver-binding-freebsd-x64@1.11.1': + '@unrs/resolver-binding-darwin-x64@1.9.0': optional: true '@unrs/resolver-binding-freebsd-x64@1.7.8': optional: true - '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': + '@unrs/resolver-binding-freebsd-x64@1.9.0': optional: true '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.8': optional: true - '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': + '@unrs/resolver-binding-linux-arm-gnueabihf@1.9.0': optional: true '@unrs/resolver-binding-linux-arm-musleabihf@1.7.8': optional: true - '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': + '@unrs/resolver-binding-linux-arm-musleabihf@1.9.0': optional: true '@unrs/resolver-binding-linux-arm64-gnu@1.7.8': optional: true - '@unrs/resolver-binding-linux-arm64-musl@1.11.1': + '@unrs/resolver-binding-linux-arm64-gnu@1.9.0': optional: true '@unrs/resolver-binding-linux-arm64-musl@1.7.8': optional: true - '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': + '@unrs/resolver-binding-linux-arm64-musl@1.9.0': optional: true '@unrs/resolver-binding-linux-ppc64-gnu@1.7.8': optional: true - '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': + '@unrs/resolver-binding-linux-ppc64-gnu@1.9.0': optional: true '@unrs/resolver-binding-linux-riscv64-gnu@1.7.8': optional: true - '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': + '@unrs/resolver-binding-linux-riscv64-gnu@1.9.0': optional: true '@unrs/resolver-binding-linux-riscv64-musl@1.7.8': optional: true - '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': + '@unrs/resolver-binding-linux-riscv64-musl@1.9.0': optional: true '@unrs/resolver-binding-linux-s390x-gnu@1.7.8': optional: true - '@unrs/resolver-binding-linux-x64-gnu@1.11.1': + '@unrs/resolver-binding-linux-s390x-gnu@1.9.0': optional: true '@unrs/resolver-binding-linux-x64-gnu@1.7.8': optional: true - '@unrs/resolver-binding-linux-x64-musl@1.11.1': + '@unrs/resolver-binding-linux-x64-gnu@1.9.0': optional: true '@unrs/resolver-binding-linux-x64-musl@1.7.8': optional: true - '@unrs/resolver-binding-wasm32-wasi@1.11.1': - dependencies: - '@napi-rs/wasm-runtime': 0.2.12 + '@unrs/resolver-binding-linux-x64-musl@1.9.0': optional: true '@unrs/resolver-binding-wasm32-wasi@1.7.8': dependencies: - '@napi-rs/wasm-runtime': 0.2.12 + '@napi-rs/wasm-runtime': 0.2.11 optional: true - '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': + '@unrs/resolver-binding-wasm32-wasi@1.9.0': + dependencies: + '@napi-rs/wasm-runtime': 0.2.11 optional: true '@unrs/resolver-binding-win32-arm64-msvc@1.7.8': optional: true - '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': + '@unrs/resolver-binding-win32-arm64-msvc@1.9.0': optional: true '@unrs/resolver-binding-win32-ia32-msvc@1.7.8': optional: true - '@unrs/resolver-binding-win32-x64-msvc@1.11.1': + '@unrs/resolver-binding-win32-ia32-msvc@1.9.0': optional: true '@unrs/resolver-binding-win32-x64-msvc@1.7.8': optional: true + '@unrs/resolver-binding-win32-x64-msvc@1.9.0': + optional: true + '@vitest/eslint-plugin@1.2.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@typescript-eslint/utils': 8.33.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) @@ -7748,6 +7634,10 @@ snapshots: dependencies: acorn: 2.7.0 + acorn-jsx@5.3.2(acorn@8.14.1): + dependencies: + acorn: 8.14.1 + acorn-jsx@5.3.2(acorn@8.15.0): dependencies: acorn: 8.15.0 @@ -7756,6 +7646,8 @@ snapshots: acorn@8.12.0: {} + acorn@8.14.1: {} + acorn@8.15.0: {} agent-base@7.1.0: @@ -7764,7 +7656,7 @@ snapshots: transitivePeerDependencies: - supports-color - agent-base@7.1.4: + agent-base@7.1.3: optional: true aggregate-error@3.1.0: @@ -7805,10 +7697,14 @@ snapshots: ansi-styles@6.2.1: {} - ansis@4.1.0: {} - any-promise@1.3.0: {} + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + optional: true + are-docs-informative@0.0.2: {} argparse@1.0.10: @@ -7874,6 +7770,16 @@ snapshots: es-abstract: 1.24.0 es-shim-unscopables: 1.0.2 + array.prototype.reduce@1.0.7: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-array-method-boxes-properly: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + is-string: 1.0.7 + array.prototype.tosorted@1.1.4: dependencies: call-bind: 1.0.7 @@ -7913,11 +7819,6 @@ snapshots: assertion-error@2.0.1: {} - ast-kit@2.1.1: - dependencies: - '@babel/parser': 7.28.0 - pathe: 2.0.3 - ast-types-flow@0.0.8: {} ast-types@0.16.1: @@ -7988,7 +7889,8 @@ snapshots: before-after-hook@4.0.0: {} - birpc@2.5.0: {} + binary-extensions@2.2.0: + optional: true bluebird@2.11.0: {} @@ -8022,6 +7924,8 @@ snapshots: node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.25.0) + buffer-from@1.1.2: {} + builtin-modules@4.0.0: {} bundle-name@4.1.0: @@ -8042,8 +7946,6 @@ snapshots: yargs: 17.7.2 yargs-parser: 21.1.1 - cac@6.7.14: {} - cacache@18.0.4: dependencies: '@npmcli/fs': 3.1.1 @@ -8122,6 +8024,19 @@ snapshots: check-error@2.1.1: {} + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + optional: true + chokidar@4.0.3: dependencies: readdirp: 4.1.2 @@ -8131,8 +8046,6 @@ snapshots: ci-info@4.2.0: {} - cjs-module-lexer@1.4.3: {} - clean-regexp@1.0.0: dependencies: escape-string-regexp: 1.0.5 @@ -8168,6 +8081,12 @@ snapshots: slice-ansi: 5.0.0 string-width: 7.0.0 + cliui@6.0.0: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + cliui@7.0.4: dependencies: string-width: 4.2.3 @@ -8180,6 +8099,12 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + clone-deep@4.0.1: + dependencies: + is-plain-object: 2.0.4 + kind-of: 6.0.3 + shallow-clone: 3.0.1 + clone-regexp@3.0.0: dependencies: is-regexp: 3.1.0 @@ -8204,8 +8129,12 @@ snapshots: commander@14.0.0: {} + commander@6.2.1: {} + comment-parser@1.4.1: {} + commondir@1.0.1: {} + compare-func@2.0.0: dependencies: array-ify: 1.0.0 @@ -8213,8 +8142,6 @@ snapshots: concat-map@0.0.1: {} - confbox@0.2.2: {} - config-chain@1.1.13: dependencies: ini: 1.3.8 @@ -8251,6 +8178,8 @@ snapshots: dependencies: browserslist: 4.25.0 + core-js@3.37.1: {} + core-util-is@1.0.2: {} core-util-is@1.0.3: {} @@ -8359,6 +8288,8 @@ snapshots: optionalDependencies: supports-color: 8.1.1 + decamelize@1.2.0: {} + decamelize@4.0.0: {} decamelize@6.0.0: {} @@ -8392,14 +8323,10 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 - defu@6.1.4: {} - delayed-stream@1.0.0: {} diff@7.0.0: {} - diff@8.0.2: {} - dir-glob@3.0.1: dependencies: path-type: 4.0.0 @@ -8436,8 +8363,6 @@ snapshots: dset@3.1.4: {} - dts-resolver@2.1.1: {} - dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -8465,8 +8390,6 @@ snapshots: emojilib@2.4.0: {} - empathic@2.0.0: {} - encoding@0.1.13: dependencies: iconv-lite: 0.6.3 @@ -8609,6 +8532,8 @@ snapshots: unbox-primitive: 1.1.0 which-typed-array: 1.1.19 + es-array-method-boxes-properly@1.0.0: {} + es-define-property@1.0.0: dependencies: get-intrinsic: 1.2.4 @@ -8709,7 +8634,7 @@ snapshots: eslint: 9.29.0(jiti@2.4.2) semver: 7.7.2 - eslint-config-canonical@44.9.5(@types/eslint@9.6.1)(@types/node@24.0.3)(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): + eslint-config-canonical@44.9.5(@types/eslint@9.6.1)(@types/node@24.0.3)(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): dependencies: '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.0.3)(eslint@9.29.0(jiti@2.4.2))(graphql@16.11.0)(typescript@5.8.3) '@next/eslint-plugin-next': 15.3.3 @@ -8719,13 +8644,13 @@ snapshots: '@vitest/eslint-plugin': 1.2.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) eslint: 9.29.0(jiti@2.4.2) eslint-config-prettier: 10.1.5(eslint@9.29.0(jiti@2.4.2)) - eslint-import-resolver-typescript: 4.4.2(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 4.4.2(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) eslint-plugin-ava: 15.0.1(eslint@9.29.0(jiti@2.4.2)) - eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) eslint-plugin-eslint-comments: 3.2.0(eslint@9.29.0(jiti@2.4.2)) eslint-plugin-fp: 2.3.0(eslint@9.29.0(jiti@2.4.2)) eslint-plugin-functional: 9.0.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-import: eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) eslint-plugin-jest: 28.12.0(@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) eslint-plugin-jsdoc: 50.6.17(eslint@9.29.0(jiti@2.4.2)) eslint-plugin-jsonc: 2.20.1(eslint@9.29.0(jiti@2.4.2)) @@ -8781,12 +8706,12 @@ snapshots: optionalDependencies: unrs-resolver: 1.7.8 - eslint-import-context@0.1.9(unrs-resolver@1.11.1): + eslint-import-context@0.1.8(unrs-resolver@1.9.0): dependencies: get-tsconfig: 4.10.1 - stable-hash-x: 0.2.0 + stable-hash-x: 0.1.1 optionalDependencies: - unrs-resolver: 1.11.1 + unrs-resolver: 1.9.0 eslint-import-resolver-node@0.3.9: dependencies: @@ -8797,7 +8722,7 @@ snapshots: - supports-color optional: true - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.1(supports-color@8.1.1) @@ -8806,14 +8731,14 @@ snapshots: is-bun-module: 2.0.0 stable-hash: 0.0.5 tinyglobby: 0.2.14 - unrs-resolver: 1.11.1 + unrs-resolver: 1.9.0 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-import: eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-import-x: 4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@4.4.2(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)): + eslint-import-resolver-typescript@4.4.2(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)): dependencies: debug: 4.4.1(supports-color@8.1.1) eslint: 9.29.0(jiti@2.4.2) @@ -8824,8 +8749,8 @@ snapshots: tinyglobby: 0.2.14 unrs-resolver: 1.7.8 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-import: eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-import-x: 4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color @@ -8835,14 +8760,14 @@ snapshots: esquery: 1.6.0 jsonc-eslint-parser: 2.4.0 - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) eslint: 9.29.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color @@ -8858,14 +8783,14 @@ snapshots: pkg-dir: 5.0.0 resolve-from: 5.0.0 - eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): + eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): dependencies: '@typescript-eslint/utils': 8.33.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) array-includes: 3.1.8 debug: 4.4.1(supports-color@8.1.1) doctrine: 3.0.0 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) is-get-set-prop: 1.0.0 is-js-type: 2.0.0 is-obj-prop: 1.0.0 @@ -8920,18 +8845,18 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)): + eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)): dependencies: - '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/types': 8.34.1 comment-parser: 1.4.1 debug: 4.4.1(supports-color@8.1.1) eslint: 9.29.0(jiti@2.4.2) - eslint-import-context: 0.1.9(unrs-resolver@1.11.1) + eslint-import-context: 0.1.8(unrs-resolver@1.9.0) is-glob: 4.0.3 minimatch: 10.0.3 semver: 7.7.2 - stable-hash-x: 0.2.0 - unrs-resolver: 1.11.1 + stable-hash-x: 0.1.1 + unrs-resolver: 1.9.0 optionalDependencies: '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) eslint-import-resolver-node: 0.3.9 @@ -9245,8 +9170,8 @@ snapshots: espree@9.6.1: dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) + acorn: 8.14.1 + acorn-jsx: 5.3.2(acorn@8.14.1) eslint-visitor-keys: 3.4.3 esprima@4.0.1: {} @@ -9329,8 +9254,6 @@ snapshots: exponential-backoff@3.1.2: optional: true - exsolve@1.0.7: {} - extend@3.0.2: {} extsprintf@1.3.0: {} @@ -9378,8 +9301,6 @@ snapshots: node-domexception: 1.0.0 web-streams-polyfill: 3.2.1 - fflate@0.8.2: {} - figures@2.0.0: dependencies: escape-string-regexp: 1.0.5 @@ -9402,12 +9323,22 @@ snapshots: dependencies: to-regex-range: 5.0.1 + find-cache-dir@2.1.0: + dependencies: + commondir: 1.0.1 + make-dir: 2.1.0 + pkg-dir: 3.0.0 + find-up-simple@1.0.0: {} find-up@2.1.0: dependencies: locate-path: 2.0.0 + find-up@3.0.0: + dependencies: + locate-path: 3.0.0 + find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -9489,8 +9420,13 @@ snapshots: minipass: 7.1.2 optional: true + fs-readdir-recursive@1.1.0: {} + fs.realpath@1.0.0: {} + fsevents@2.3.3: + optional: true + function-bind@1.1.2: {} function-timeout@0.1.1: {} @@ -9794,9 +9730,11 @@ snapshots: highlight.js@10.7.3: {} - hook-std@3.0.0: {} + homedir-polyfill@1.0.3: + dependencies: + parse-passwd: 1.0.0 - hookable@5.5.3: {} + hook-std@3.0.0: {} hosted-git-info@7.0.1: dependencies: @@ -9829,7 +9767,7 @@ snapshots: http-proxy-agent@7.0.2: dependencies: - agent-base: 7.1.4 + agent-base: 7.1.3 debug: 4.4.1(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -9850,7 +9788,7 @@ snapshots: https-proxy-agent@7.0.6: dependencies: - agent-base: 7.1.4 + agent-base: 7.1.3 debug: 4.4.1(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -9969,6 +9907,11 @@ snapshots: dependencies: has-bigints: 1.0.2 + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.2.0 + optional: true + is-boolean-object@1.1.2: dependencies: call-bind: 1.0.7 @@ -10095,6 +10038,10 @@ snapshots: is-plain-obj@4.1.0: {} + is-plain-object@2.0.4: + dependencies: + isobject: 3.0.1 + is-proto-prop@2.0.0: dependencies: lowercase-keys: 1.0.1 @@ -10189,6 +10136,8 @@ snapshots: isexe@3.1.1: optional: true + isobject@3.0.1: {} + isomorphic-ws@5.0.0(ws@8.18.2): dependencies: ws: 8.18.2 @@ -10208,7 +10157,7 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: '@babel/core': 7.27.4 - '@babel/parser': 7.27.4 + '@babel/parser': 7.24.7 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.7.2 @@ -10251,8 +10200,6 @@ snapshots: js-tokens@4.0.0: {} - js-tokens@9.0.1: {} - js-types@1.0.0: {} js-yaml@3.14.1: @@ -10316,7 +10263,7 @@ snapshots: jsonc-eslint-parser@2.4.0: dependencies: - acorn: 8.15.0 + acorn: 8.14.1 eslint-visitor-keys: 3.4.3 espree: 9.6.1 semver: 7.7.2 @@ -10345,6 +10292,8 @@ snapshots: dependencies: json-buffer: 3.0.1 + kind-of@6.0.3: {} + language-subtag-registry@0.3.22: {} language-tags@1.0.9: @@ -10405,6 +10354,11 @@ snapshots: p-locate: 2.0.0 path-exists: 3.0.0 + locate-path@3.0.0: + dependencies: + p-locate: 3.0.0 + path-exists: 3.0.0 + locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -10470,6 +10424,11 @@ snapshots: dependencies: yallist: 3.1.1 + make-dir@2.1.0: + dependencies: + pify: 4.0.1 + semver: 5.7.2 + make-dir@4.0.0: dependencies: semver: 7.7.2 @@ -10549,6 +10508,10 @@ snapshots: dependencies: '@isaacs/brace-expansion': 5.0.0 + minimatch@3.0.5: + dependencies: + brace-expansion: 1.1.11 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -10636,8 +10599,6 @@ snapshots: moment@2.30.1: {} - mri@1.2.0: {} - ms@2.1.3: {} mz@2.7.0: @@ -10646,14 +10607,12 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 - nan@2.23.0: + nan@2.22.2: optional: true nano-spawn@1.0.2: {} - napi-postinstall@0.2.5: {} - - napi-postinstall@0.3.2: {} + napi-postinstall@0.2.4: {} natural-compare@1.4.0: {} @@ -10675,6 +10634,11 @@ snapshots: emojilib: 2.4.0 skin-tone: 2.0.0 + node-environment-flags@1.0.6: + dependencies: + object.getownpropertydescriptors: 2.1.8 + semver: 5.7.2 + node-fetch@3.3.2: dependencies: data-uri-to-buffer: 4.0.1 @@ -10715,6 +10679,9 @@ snapshots: dependencies: remove-trailing-separator: 1.1.0 + normalize-path@3.0.0: + optional: true + normalize-url@8.0.0: {} npm-run-path@5.2.0: @@ -10772,6 +10739,16 @@ snapshots: es-abstract: 1.23.3 es-object-atoms: 1.0.0 + object.getownpropertydescriptors@2.1.8: + dependencies: + array.prototype.reduce: 1.0.7 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + gopd: 1.0.1 + safe-array-concat: 1.1.2 + object.values@1.2.0: dependencies: call-bind: 1.0.7 @@ -10859,6 +10836,10 @@ snapshots: dependencies: p-limit: 1.3.0 + p-locate@3.0.0: + dependencies: + p-limit: 2.3.0 + p-locate@4.1.0: dependencies: p-limit: 2.3.0 @@ -10882,8 +10863,6 @@ snapshots: package-json-from-dist@1.0.0: {} - package-manager-detector@1.3.0: {} - parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -10912,6 +10891,8 @@ snapshots: parse-ms@4.0.0: {} + parse-passwd@1.0.0: {} + parse-statements@1.0.11: {} parse5-htmlparser2-tree-adapter@6.0.1: @@ -10950,8 +10931,6 @@ snapshots: path-type@5.0.0: {} - pathe@2.0.3: {} - pathval@2.0.0: {} performance-now@2.1.0: {} @@ -10966,20 +10945,22 @@ snapshots: pify@3.0.0: {} + pify@4.0.1: {} + + pirates@4.0.6: {} + pkg-conf@2.1.0: dependencies: find-up: 2.1.0 load-json-file: 4.0.0 - pkg-dir@5.0.0: + pkg-dir@3.0.0: dependencies: - find-up: 5.0.0 + find-up: 3.0.0 - pkg-types@2.2.0: + pkg-dir@5.0.0: dependencies: - confbox: 0.2.2 - exsolve: 1.0.7 - pathe: 2.0.3 + find-up: 5.0.0 pluralize@8.0.0: {} @@ -11026,19 +11007,10 @@ snapshots: psl@1.9.0: {} - publint@0.3.12: - dependencies: - '@publint/pack': 0.1.2 - package-manager-detector: 1.3.0 - picocolors: 1.1.1 - sade: 1.8.1 - punycode@2.3.1: {} qs@6.5.3: {} - quansync@0.2.10: {} - queue-microtask@1.2.3: {} rambda@7.5.0: {} @@ -11061,7 +11033,7 @@ snapshots: re2@1.20.9: dependencies: install-artifact-from-github: 1.4.0 - nan: 2.23.0 + nan: 2.22.2 node-gyp: 10.3.1 transitivePeerDependencies: - supports-color @@ -11099,6 +11071,11 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + optional: true + readdirp@4.1.2: {} recast@0.23.11: @@ -11134,6 +11111,8 @@ snapshots: regenerate@1.4.2: {} + regenerator-runtime@0.14.1: {} + regexp-ast-analysis@0.7.1: dependencies: '@eslint-community/regexpp': 4.12.1 @@ -11191,6 +11170,12 @@ snapshots: remove-trailing-separator@1.1.0: {} + replace@1.2.2: + dependencies: + chalk: 2.4.2 + minimatch: 3.0.5 + yargs: 15.4.1 + req-all@0.1.0: {} request@2.88.2: @@ -11218,6 +11203,8 @@ snapshots: require-directory@2.1.1: {} + require-main-filename@2.0.0: {} + requireindex@1.1.0: {} resolve-from@4.0.0: {} @@ -11261,61 +11248,23 @@ snapshots: dependencies: glob: 7.2.3 + rimraf@6.0.1: + dependencies: + glob: 11.0.3 + package-json-from-dist: 1.0.0 + roarr@7.21.1: dependencies: fast-printf: 1.6.9 safe-stable-stringify: 2.4.3 semver-compare: 1.0.0 - rolldown-plugin-dts@0.14.3(rolldown@1.0.0-beta.30)(typescript@5.8.3): - dependencies: - '@babel/generator': 7.28.0 - '@babel/parser': 7.28.0 - '@babel/types': 7.28.2 - ast-kit: 2.1.1 - birpc: 2.5.0 - debug: 4.4.1(supports-color@8.1.1) - dts-resolver: 2.1.1 - get-tsconfig: 4.10.1 - rolldown: 1.0.0-beta.30 - optionalDependencies: - typescript: 5.8.3 - transitivePeerDependencies: - - oxc-resolver - - supports-color - - rolldown@1.0.0-beta.30: - dependencies: - '@oxc-project/runtime': 0.78.0 - '@oxc-project/types': 0.78.0 - '@rolldown/pluginutils': 1.0.0-beta.30 - ansis: 4.1.0 - optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-beta.30 - '@rolldown/binding-darwin-arm64': 1.0.0-beta.30 - '@rolldown/binding-darwin-x64': 1.0.0-beta.30 - '@rolldown/binding-freebsd-x64': 1.0.0-beta.30 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.30 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.30 - '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.30 - '@rolldown/binding-linux-arm64-ohos': 1.0.0-beta.30 - '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.30 - '@rolldown/binding-linux-x64-musl': 1.0.0-beta.30 - '@rolldown/binding-wasm32-wasi': 1.0.0-beta.30 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.30 - '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.30 - '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.30 - run-applescript@7.0.0: {} run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - sade@1.8.1: - dependencies: - mri: 1.2.0 - safe-array-concat@1.1.2: dependencies: call-bind: 1.0.7 @@ -11405,6 +11354,8 @@ snapshots: semver-regex@4.0.5: {} + semver@5.7.2: {} + semver@6.3.1: {} semver@7.7.2: {} @@ -11413,6 +11364,8 @@ snapshots: dependencies: randombytes: 2.1.0 + set-blocking@2.0.0: {} + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -11435,6 +11388,10 @@ snapshots: es-errors: 1.3.0 es-object-atoms: 1.1.1 + shallow-clone@3.0.1: + dependencies: + kind-of: 6.0.3 + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -11490,6 +11447,8 @@ snapshots: dependencies: unicode-emoji-modifier-base: 1.0.0 + slash@2.0.0: {} + slash@3.0.0: {} slash@5.1.0: {} @@ -11509,19 +11468,24 @@ snapshots: socks-proxy-agent@8.0.5: dependencies: - agent-base: 7.1.4 + agent-base: 7.1.3 debug: 4.4.1(supports-color@8.1.1) - socks: 2.8.6 + socks: 2.8.5 transitivePeerDependencies: - supports-color optional: true - socks@2.8.6: + socks@2.8.5: dependencies: ip-address: 9.0.5 smart-buffer: 4.2.0 optional: true + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + source-map@0.6.1: {} source-map@0.7.4: @@ -11574,7 +11538,7 @@ snapshots: minipass: 7.1.2 optional: true - stable-hash-x@0.2.0: {} + stable-hash-x@0.1.1: {} stable-hash@0.0.5: {} @@ -11807,8 +11771,6 @@ snapshots: tiny-invariant@1.3.3: {} - tinyexec@1.0.1: {} - tinyglobby@0.2.14: dependencies: fdir: 6.4.5(picomatch@4.0.2) @@ -11816,6 +11778,8 @@ snapshots: tlds@1.248.0: {} + to-fast-properties@2.0.0: {} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -11848,32 +11812,6 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 - tsdown@0.13.0(@arethetypeswrong/core@0.18.2)(publint@0.3.12)(typescript@5.8.3)(unplugin-unused@0.5.1): - dependencies: - ansis: 4.1.0 - cac: 6.7.14 - chokidar: 4.0.3 - debug: 4.4.1(supports-color@8.1.1) - diff: 8.0.2 - empathic: 2.0.0 - hookable: 5.5.3 - rolldown: 1.0.0-beta.30 - rolldown-plugin-dts: 0.14.3(rolldown@1.0.0-beta.30)(typescript@5.8.3) - semver: 7.7.2 - tinyexec: 1.0.1 - tinyglobby: 0.2.14 - unconfig: 7.3.2 - optionalDependencies: - '@arethetypeswrong/core': 0.18.2 - publint: 0.3.12 - typescript: 5.8.3 - unplugin-unused: 0.5.1 - transitivePeerDependencies: - - '@typescript/native-preview' - - oxc-resolver - - supports-color - - vue-tsc - tslib@2.8.1: {} tunnel-agent@0.6.0: @@ -11973,8 +11911,6 @@ snapshots: transitivePeerDependencies: - supports-color - typescript@5.6.1-rc: {} - typescript@5.8.3: {} uglify-js@3.17.4: @@ -11994,13 +11930,6 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 - unconfig@7.3.2: - dependencies: - '@quansync/fs': 0.1.3 - defu: 6.1.4 - jiti: 2.4.2 - quansync: 0.2.10 - undici-types@7.8.0: {} unicode-canonical-property-names-ecmascript@2.0.0: {} @@ -12042,46 +11971,9 @@ snapshots: dependencies: normalize-path: 2.1.1 - unplugin-unused@0.5.1: - dependencies: - js-tokens: 9.0.1 - picocolors: 1.1.1 - pkg-types: 2.2.0 - unplugin: 2.3.5 - - unplugin@2.3.5: - dependencies: - acorn: 8.15.0 - picomatch: 4.0.2 - webpack-virtual-modules: 0.6.2 - - unrs-resolver@1.11.1: - dependencies: - napi-postinstall: 0.3.2 - optionalDependencies: - '@unrs/resolver-binding-android-arm-eabi': 1.11.1 - '@unrs/resolver-binding-android-arm64': 1.11.1 - '@unrs/resolver-binding-darwin-arm64': 1.11.1 - '@unrs/resolver-binding-darwin-x64': 1.11.1 - '@unrs/resolver-binding-freebsd-x64': 1.11.1 - '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.1 - '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.1 - '@unrs/resolver-binding-linux-arm64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-arm64-musl': 1.11.1 - '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-riscv64-musl': 1.11.1 - '@unrs/resolver-binding-linux-s390x-gnu': 1.11.1 - '@unrs/resolver-binding-linux-x64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-x64-musl': 1.11.1 - '@unrs/resolver-binding-wasm32-wasi': 1.11.1 - '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1 - '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 - '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 - unrs-resolver@1.7.8: dependencies: - napi-postinstall: 0.2.5 + napi-postinstall: 0.2.4 optionalDependencies: '@unrs/resolver-binding-darwin-arm64': 1.7.8 '@unrs/resolver-binding-darwin-x64': 1.7.8 @@ -12101,6 +11993,30 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.7.8 '@unrs/resolver-binding-win32-x64-msvc': 1.7.8 + unrs-resolver@1.9.0: + dependencies: + napi-postinstall: 0.2.4 + optionalDependencies: + '@unrs/resolver-binding-android-arm-eabi': 1.9.0 + '@unrs/resolver-binding-android-arm64': 1.9.0 + '@unrs/resolver-binding-darwin-arm64': 1.9.0 + '@unrs/resolver-binding-darwin-x64': 1.9.0 + '@unrs/resolver-binding-freebsd-x64': 1.9.0 + '@unrs/resolver-binding-linux-arm-gnueabihf': 1.9.0 + '@unrs/resolver-binding-linux-arm-musleabihf': 1.9.0 + '@unrs/resolver-binding-linux-arm64-gnu': 1.9.0 + '@unrs/resolver-binding-linux-arm64-musl': 1.9.0 + '@unrs/resolver-binding-linux-ppc64-gnu': 1.9.0 + '@unrs/resolver-binding-linux-riscv64-gnu': 1.9.0 + '@unrs/resolver-binding-linux-riscv64-musl': 1.9.0 + '@unrs/resolver-binding-linux-s390x-gnu': 1.9.0 + '@unrs/resolver-binding-linux-x64-gnu': 1.9.0 + '@unrs/resolver-binding-linux-x64-musl': 1.9.0 + '@unrs/resolver-binding-wasm32-wasi': 1.9.0 + '@unrs/resolver-binding-win32-arm64-msvc': 1.9.0 + '@unrs/resolver-binding-win32-ia32-msvc': 1.9.0 + '@unrs/resolver-binding-win32-x64-msvc': 1.9.0 + update-browserslist-db@1.1.3(browserslist@4.25.0): dependencies: browserslist: 4.25.0 @@ -12134,13 +12050,15 @@ snapshots: '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 + v8flags@3.2.0: + dependencies: + homedir-polyfill: 1.0.3 + validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - validate-npm-package-name@5.0.1: {} - verror@1.10.0: dependencies: assert-plus: 1.0.0 @@ -12149,8 +12067,6 @@ snapshots: web-streams-polyfill@3.2.1: {} - webpack-virtual-modules@0.6.2: {} - whatwg-mimetype@4.0.0: {} whatwg-url-compat@0.6.5: @@ -12196,6 +12112,8 @@ snapshots: is-weakmap: 2.0.2 is-weakset: 2.0.4 + which-module@2.0.1: {} + which-typed-array@1.1.15: dependencies: available-typed-arrays: 1.0.7 @@ -12229,6 +12147,12 @@ snapshots: workerpool@9.3.2: {} + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 @@ -12257,6 +12181,8 @@ snapshots: xtend@4.0.2: {} + y18n@4.0.3: {} + y18n@5.0.8: {} yallist@3.1.1: {} @@ -12271,6 +12197,11 @@ snapshots: yaml@2.8.0: {} + yargs-parser@18.1.3: + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + yargs-parser@20.2.9: {} yargs-parser@21.1.1: {} @@ -12282,6 +12213,20 @@ snapshots: flat: 5.0.2 is-plain-obj: 2.1.0 + yargs@15.4.1: + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.3 + which-module: 2.0.1 + y18n: 4.0.3 + yargs-parser: 18.1.3 + yargs@16.2.0: dependencies: cliui: 7.0.4 diff --git a/src/bin/generateOptions.js b/src/bin/generateOptions.mjs similarity index 100% rename from src/bin/generateOptions.js rename to src/bin/generateOptions.mjs diff --git a/tsconfig-prod.json b/tsconfig-prod.json new file mode 100644 index 000000000..7ae6b80fa --- /dev/null +++ b/tsconfig-prod.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "lib": ["es2023"], + "moduleResolution": "Bundler", + "module": "ESNext", + "allowJs": true, + "checkJs": true, + "noEmit": false, + "emitDeclarationOnly": true, + "declaration": true, + "declarationMap": true, + "strict": true, + "skipLibCheck": true, + "target": "es2024", + "outDir": "dist" + }, + "include": [ + "src/**/*.js" + ], + "exclude": ["node_modules", "src/bin/*.js"] +} diff --git a/tsdown.config.ts b/tsdown.config.ts deleted file mode 100644 index 911e5d76d..000000000 --- a/tsdown.config.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { - defineConfig, -} from 'tsdown'; - -export default defineConfig({ - attw: { - level: 'error', - profile: 'node16', - }, - dts: { - sourcemap: true, - }, - entry: [ - './src/index.js', - './src/getJsdocProcessorPlugin.js', - './src/iterateJsdoc.js', - ], - format: [ - 'es', - 'cjs', - ], - outputOptions: { - exports: 'named', - }, - publint: { - level: 'error', - strict: true, - }, - sourcemap: true, - unbundle: true, - unused: { - level: 'error', - }, -}); From b19f6f9a3ec2f76a570fdf14017b681189dbabe9 Mon Sep 17 00:00:00 2001 From: Eli <88557639+lishaduck@users.noreply.github.com> Date: Mon, 11 Aug 2025 13:46:01 -0500 Subject: [PATCH 032/189] fix: move to tsdown for proper types (#1447) BREAKING CHANGE: Changes `exports` and build routine for proper types. * refactor: move to tsdown (take 2) * chore: remove unused devDeps. and fix generateRule script * fix bad rebase --------- Co-authored-by: Brett Zamir --- .npmignore | 18 - package.json | 62 +- pnpm-lock.yaml | 1448 +++++++++-------- pnpm-workspace.yaml | 1 + ...generateOptions.mjs => generateOptions.js} | 0 src/bin/generateRule.js | 6 +- src/index.js | 533 +----- src/plugin.js | 533 ++++++ test/rules/index.js | 2 +- tsconfig-prod.json | 21 - tsdown.config.ts | 32 + 11 files changed, 1367 insertions(+), 1289 deletions(-) delete mode 100755 .npmignore rename src/bin/{generateOptions.mjs => generateOptions.js} (100%) create mode 100644 src/plugin.js delete mode 100644 tsconfig-prod.json create mode 100644 tsdown.config.ts diff --git a/.npmignore b/.npmignore deleted file mode 100755 index 5219b9654..000000000 --- a/.npmignore +++ /dev/null @@ -1,18 +0,0 @@ -coverage -bin -test -.* -*.log -CONTRIBUTING.md -tsconfig*.json -pnpm-workspace.yaml -eslint.config.js -*.d.ts -*.d.ts.map -!dist/index.d.ts -!dist/index.d.ts.map -!dist/getJsdocProcessorPlugin.d.ts -!dist/getJsdocProcessorPlugin.d.ts.map -!dist/iterateJsdoc.d.ts -!dist/iterateJsdoc.d.ts.map -docs diff --git a/package.json b/package.json index da3f0960e..bafda38cd 100644 --- a/package.json +++ b/package.json @@ -18,10 +18,9 @@ }, "description": "JSDoc linting rules for ESLint.", "devDependencies": { - "@babel/cli": "^7.27.2", + "@arethetypeswrong/core": "^0.18.2", "@babel/core": "^7.27.4", "@babel/eslint-parser": "^7.27.5", - "@babel/node": "^7.27.1", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-transform-flow-strip-types": "^7.27.1", "@babel/preset-env": "^7.27.2", @@ -63,11 +62,12 @@ "lodash.defaultsdeep": "^4.6.1", "mocha": "^11.7.0", "open-editor": "^5.1.0", - "replace": "^1.2.2", - "rimraf": "^6.0.1", + "publint": "^0.3.12", "semantic-release": "^24.2.5", + "tsdown": "^0.13.4", "typescript": "5.8.3", - "typescript-eslint": "^8.34.1" + "typescript-eslint": "^8.34.1", + "unplugin-unused": "^0.5.1" }, "engines": { "node": ">=20.11.0" @@ -82,25 +82,42 @@ "*.js": "eslint --fix" }, "type": "module", - "main": "./dist/index.cjs", - "types": "./dist/index.d.ts", "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./src/index.js", - "require": "./dist/index.cjs" + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + }, + "default": { + "types": "./dist/index.d.cts", + "default": "./dist/index.cjs" + } }, "./getJsdocProcessorPlugin.js": { - "types": "./dist/getJsdocProcessorPlugin.d.ts", - "import": "./dist/getJsdocProcessorPlugin.cjs", - "require": "./src/getJsdocProcessorPlugin.js" + "import": { + "types": "./dist/getJsdocProcessorPlugin.d.ts", + "default": "./dist/getJsdocProcessorPlugin.js" + }, + "default": { + "types": "./dist/getJsdocProcessorPlugin.d.cts", + "default": "./dist/getJsdocProcessorPlugin.cjs" + } }, "./iterateJsdoc.js": { - "types": "./dist/iterateJsdoc.d.ts", - "import": "./dist/iterateJsdoc.cjs", - "require": "./src/iterateJsdoc.js" - } + "import": { + "types": "./dist/iterateJsdoc.d.ts", + "default": "./dist/iterateJsdoc.js" + }, + "default": { + "types": "./dist/iterateJsdoc.d.cts", + "default": "./dist/iterateJsdoc.cjs" + } + }, + "./package.json": "./package.json" }, + "files": [ + "dist/" + ], "name": "eslint-plugin-jsdoc", "mocha": { "reporter": "dot", @@ -139,12 +156,11 @@ }, "scripts": { "tsc": "tsc", - "tsc-build": "tsc -p tsconfig-prod.json", - "build": "rimraf ./dist && NODE_ENV=production babel ./src --out-file-extension .cjs --out-dir ./dist --copy-files --source-maps --ignore ./src/bin/*.js --no-copy-ignored && replace 'require\\(\"\\.(.*?)\\.[^.]*?\"\\)' 'require(\".$1.cjs\")' 'dist' -r --include=\"*.cjs\" && pnpm tsc-build", - "check-docs": "babel-node ./src/bin/generateDocs.js --check", - "create-docs": "pnpm run create-options && babel-node ./src/bin/generateDocs.js", - "create-rule": "babel-node ./src/bin/generateRule.js", - "create-options": "node ./src/bin/generateOptions.mjs", + "build": "tsdown", + "check-docs": "node ./src/bin/generateDocs.js --check", + "create-docs": "pnpm run create-options && node ./src/bin/generateDocs.js", + "create-rule": "node ./src/bin/generateRule.js", + "create-options": "node ./src/bin/generateOptions.js", "install-offline": "pnpm install --prefer-offline --no-audit", "lint": "eslint", "lint-fix": "eslint --fix", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ddb1167eb..39f34e755 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -39,18 +39,15 @@ importers: specifier: ^4.0.0 version: 4.0.0 devDependencies: - '@babel/cli': - specifier: ^7.27.2 - version: 7.27.2(@babel/core@7.27.4) + '@arethetypeswrong/core': + specifier: ^0.18.2 + version: 0.18.2 '@babel/core': specifier: ^7.27.4 version: 7.27.4 '@babel/eslint-parser': specifier: ^7.27.5 version: 7.27.5(@babel/core@7.27.4)(eslint@9.29.0(jiti@2.4.2)) - '@babel/node': - specifier: ^7.27.1 - version: 7.27.1(@babel/core@7.27.4) '@babel/plugin-syntax-class-properties': specifier: ^7.12.13 version: 7.12.13(@babel/core@7.27.4) @@ -143,7 +140,7 @@ importers: version: 9.29.0(jiti@2.4.2) eslint-config-canonical: specifier: ~44.9.5 - version: 44.9.5(@types/eslint@9.6.1)(@types/node@24.0.3)(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + version: 44.9.5(@types/eslint@9.6.1)(@types/node@24.0.3)(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) gitdown: specifier: ^4.1.1 version: 4.1.1(re2@1.20.9) @@ -174,21 +171,24 @@ importers: open-editor: specifier: ^5.1.0 version: 5.1.0 - replace: - specifier: ^1.2.2 - version: 1.2.2 - rimraf: - specifier: ^6.0.1 - version: 6.0.1 + publint: + specifier: ^0.3.12 + version: 0.3.12 semantic-release: specifier: ^24.2.5 version: 24.2.5(typescript@5.8.3) + tsdown: + specifier: ^0.13.4 + version: 0.13.4(@arethetypeswrong/core@0.18.2)(publint@0.3.12)(typescript@5.8.3)(unplugin-unused@0.5.1) typescript: specifier: 5.8.3 version: 5.8.3 typescript-eslint: specifier: ^8.34.1 version: 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + unplugin-unused: + specifier: ^0.5.1 + version: 0.5.1 packages: @@ -200,12 +200,12 @@ packages: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} - '@babel/cli@7.27.2': - resolution: {integrity: sha512-cfd7DnGlhH6OIyuPSSj3vcfIdnbXukhAyKY8NaZrFadC7pXyL9mOL5WgjcptiEJLi5k3j8aYvLIVCzezrWTaiA==} - engines: {node: '>=6.9.0'} - hasBin: true - peerDependencies: - '@babel/core': ^7.0.0-0 + '@andrewbranch/untar.js@1.0.3': + resolution: {integrity: sha512-Jh15/qVmrLGhkKJBdXlK1+9tY4lZruYjsgkDFj08ZmDiWVBLJcqkok7Z0/R0In+i1rScBpJlSvrTS2Lm41Pbnw==} + + '@arethetypeswrong/core@0.18.2': + resolution: {integrity: sha512-GiwTmBFOU1/+UVNqqCGzFJYfBXEytUkiI+iRZ6Qx7KmUVtLm00sYySkfe203C9QtPG11yOz1ZaMek8dT/xnlgg==} + engines: {node: '>=20'} '@babel/code-frame@7.24.7': resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} @@ -234,6 +234,10 @@ packages: resolution: {integrity: sha512-xnlJYj5zepml8NXtjkG0WquFUv8RskFqyFcVgTBp5k+NaA/8uw/K+OSVf8AMGw5e9HKP2ETd5xpK5MLZQD6b4Q==} engines: {node: '>=6.9.0'} + '@babel/generator@7.28.0': + resolution: {integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==} + engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.24.7': resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} engines: {node: '>=6.9.0'} @@ -320,18 +324,10 @@ packages: resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.24.8': - resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} - engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.27.1': resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.24.7': - resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.27.1': resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} engines: {node: '>=6.9.0'} @@ -352,20 +348,13 @@ packages: resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} - '@babel/node@7.27.1': - resolution: {integrity: sha512-ef8ZrhxIku9LrphvyNywpiMf1UJsYQll7S4eKa228ivswPcwmObp98o5h5wL2n9FrSAuo1dsMwJ8cS1LEcBSog==} - engines: {node: '>=6.9.0'} - hasBin: true - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/parser@7.24.7': - resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} + '@babel/parser@7.27.4': + resolution: {integrity: sha512-BRmLHGwpUqLFR2jzx9orBuX/ABDkj2jLKOXrHDTN2aOKL+jFDDKaRNo9nyYsIl9h/UE/7lMKdDjKQQyxKKDZ7g==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.27.4': - resolution: {integrity: sha512-BRmLHGwpUqLFR2jzx9orBuX/ABDkj2jLKOXrHDTN2aOKL+jFDDKaRNo9nyYsIl9h/UE/7lMKdDjKQQyxKKDZ7g==} + '@babel/parser@7.28.0': + resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==} engines: {node: '>=6.0.0'} hasBin: true @@ -751,12 +740,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - '@babel/register@7.27.1': - resolution: {integrity: sha512-K13lQpoV54LATKkzBpBAEu1GGSIRzxR9f4IN4V8DCDgiUMo2UDGagEZr3lPeVNJPLkWUi5JE4hCHKneVTwQlYQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/regjsgen@0.8.0': resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} @@ -768,30 +751,33 @@ packages: resolution: {integrity: sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==} engines: {node: '>=6.9.0'} - '@babel/types@7.25.2': - resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==} - engines: {node: '>=6.9.0'} - '@babel/types@7.27.3': resolution: {integrity: sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==} engines: {node: '>=6.9.0'} + '@babel/types@7.28.2': + resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} + engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@1.0.2': resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} + '@braidai/lang@1.1.1': + resolution: {integrity: sha512-5uM+no3i3DafVgkoW7ayPhEGHNNBZCSj5TrGDQt0ayEKQda5f3lAXlmQg0MR5E0gKgmTzUUEtSWHsEC3h9jUcg==} + '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} - '@emnapi/core@1.4.3': - resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==} + '@emnapi/core@1.4.5': + resolution: {integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==} - '@emnapi/runtime@1.4.3': - resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} + '@emnapi/runtime@1.4.5': + resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==} - '@emnapi/wasi-threads@1.0.2': - resolution: {integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==} + '@emnapi/wasi-threads@1.0.4': + resolution: {integrity: sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==} '@envelop/core@5.2.3': resolution: {integrity: sha512-KfoGlYD/XXQSc3BkM1/k15+JQbkQ4ateHazeZoWl9P71FsLTDXSjGy6j7QqfhpIDSbxNISqhPMfZHYSbDFOofQ==} @@ -1068,6 +1054,9 @@ packages: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} + '@jridgewell/gen-mapping@0.3.12': + resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} + '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} @@ -1083,18 +1072,27 @@ packages: '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@jridgewell/sourcemap-codec@1.5.4': + resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} + '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - '@napi-rs/wasm-runtime@0.2.11': - resolution: {integrity: sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==} + '@jridgewell/trace-mapping@0.3.29': + resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} + + '@loaderkit/resolve@1.0.4': + resolution: {integrity: sha512-rJzYKVcV4dxJv+vW6jlvagF8zvGxHJ2+HTr1e2qOejfmGhAApgJHl8Aog4mMszxceTRiKTTbnpgmTO1bEZHV/A==} + + '@napi-rs/wasm-runtime@0.2.12': + resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} + + '@napi-rs/wasm-runtime@1.0.1': + resolution: {integrity: sha512-KVlQ/jgywZpixGCKMNwxStmmbYEMyokZpCf2YuIChhfJA2uqfAKNEM8INz7zzTo55iEXfBhIIs3VqYyqzDLj8g==} '@next/eslint-plugin-next@15.3.3': resolution: {integrity: sha512-VKZJEiEdpKkfBmcokGjHu0vGDG+8CehGs90tBEy/IDoDDKGngeyIStt2MmE5FYNyU9BhgR7tybNWTAJY/30u+Q==} - '@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3': - resolution: {integrity: sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==} - '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} @@ -1170,6 +1168,13 @@ packages: '@octokit/types@14.1.0': resolution: {integrity: sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==} + '@oxc-project/runtime@0.80.0': + resolution: {integrity: sha512-3rzy1bJAZ4s7zV9TKT60x119RwJDCDqEtCwK/Zc2qlm7wGhiIUxLLYUhE/mN91yB0u1kxm5sh4NjU12sPqQTpg==} + engines: {node: '>=6.9.0'} + + '@oxc-project/types@0.80.0': + resolution: {integrity: sha512-xxHQm8wfCv2e8EmtaDwpMeAHOWqgQDAYg+BJouLXSQt5oTKu9TIXrgNMGSrM2fLvKmECsRd9uUFAAD+hPyootA==} + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -1190,12 +1195,93 @@ packages: resolution: {integrity: sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==} engines: {node: '>=12'} + '@publint/pack@0.1.2': + resolution: {integrity: sha512-S+9ANAvUmjutrshV4jZjaiG8XQyuJIZ8a4utWmN/vW1sgQ9IfBnPndwkmQYw53QmouOIytT874u65HEmu6H5jw==} + engines: {node: '>=18'} + + '@quansync/fs@0.1.3': + resolution: {integrity: sha512-G0OnZbMWEs5LhDyqy2UL17vGhSVHkQIfVojMtEWVenvj0V5S84VBgy86kJIuNsGDp2p7sTKlpSIpBUWdC35OKg==} + engines: {node: '>=20.0.0'} + '@repeaterjs/repeater@3.0.5': resolution: {integrity: sha512-l3YHBLAol6d/IKnB9LhpD0cEZWAoe3eFKUyTYWmFmCO2Q/WOckxLQAUyMZWwZV2M/m3+4vgRoaolFqaII82/TA==} '@repeaterjs/repeater@3.0.6': resolution: {integrity: sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==} + '@rolldown/binding-android-arm64@1.0.0-beta.31': + resolution: {integrity: sha512-0mFtKwOG7smn0HkvQ6h8j0m/ohkR7Fp5eMTJ2Pns/HSbePHuDpxMaQ4TjZ6arlVXxpeWZlAHeT5BeNsOA3iWTg==} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.0.0-beta.31': + resolution: {integrity: sha512-BHfHJ8Nb5G7ZKJl6pimJacupONT4F7w6gmQHw41rouAnJF51ORDwGefWeb6OMLzGmJwzxlIVPERfnJf1EsMM7A==} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.0.0-beta.31': + resolution: {integrity: sha512-4MiuRtExC08jHbSU/diIL+IuQP+3Ck1FbWAplK+ysQJ7fxT3DMxy5FmnIGfmhaqow8oTjb2GEwZJKgTRjZL1Vw==} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.0.0-beta.31': + resolution: {integrity: sha512-nffC1u7ccm12qlAea8ExY3AvqlaHy/o/3L4p5Es8JFJ3zJSs6e3DyuxGZZVdl9EVwsLxPPTvioIl4tEm2afwyw==} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.31': + resolution: {integrity: sha512-LHmAaB3rB1GOJuHscKcL2Ts/LKLcb3YWTh2uQ/876rg/J9WE9kQ0kZ+3lRSYbth/YL8ln54j4JZmHpqQY3xptQ==} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.31': + resolution: {integrity: sha512-oTDZVfqIAjLB2I1yTiLyyhfPPO6dky33sTblxTCpe+ZT55WizN3KDoBKJ4yXG8shI6I4bRShVu29Xg0yAjyQYw==} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.31': + resolution: {integrity: sha512-duJ3IkEBj9Xe9NYW1n8Y3483VXHGi8zQ0ZsLbK8464EJUXLF7CXM8Ry+jkkUw+ZvA+Zu1E/+C6p2Y6T9el0C9g==} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-arm64-ohos@1.0.0-beta.31': + resolution: {integrity: sha512-qdbmU5QSZ0uoLZBYMxiHsMQmizqtzFGTVPU5oyU1n0jU0Mo+mkSzqZuL8VBnjHOHzhVxZsoAGH9JjiRzCnoGVA==} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.31': + resolution: {integrity: sha512-H7+r34TSV8udB2gAsebFM/YuEeNCkPGEAGJ1JE7SgI9XML6FflqcdKfrRSneQFsPaom/gCEc1g0WW5MZ0O3blw==} + cpu: [x64] + os: [linux] + + '@rolldown/binding-linux-x64-musl@1.0.0-beta.31': + resolution: {integrity: sha512-zRm2YmzFVqbsmUsyyZnHfJrOlQUcWS/FJ5ZWL8Q1kZh5PnLBrTVZNpakIWwAxpN5gNEi9MmFd5YHocVJp8ps1Q==} + cpu: [x64] + os: [linux] + + '@rolldown/binding-wasm32-wasi@1.0.0-beta.31': + resolution: {integrity: sha512-fM1eUIuHLsNJXRlWOuIIex1oBJ89I0skFWo5r/D3KSJ5gD9MBd3g4Hp+v1JGohvyFE+7ylnwRxSUyMEeYpA69A==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.31': + resolution: {integrity: sha512-4nftR9V2KHH3zjBwf6leuZZJQZ7v0d70ogjHIqB3SDsbDLvVEZiGSsSn2X6blSZRZeJSFzK0pp4kZ67zdZXwSw==} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.31': + resolution: {integrity: sha512-0TQcKu9xZVHYALit+WJsSuADGlTFfOXhnZoIHWWQhTk3OgbwwbYcSoZUXjRdFmR6Wswn4csHtJGN1oYKeQ6/2g==} + cpu: [ia32] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.31': + resolution: {integrity: sha512-3zMICWwpZh1jrkkKDYIUCx/2wY3PXLICAS0AnbeLlhzfWPhCcpNK9eKhiTlLAZyTp+3kyipoi/ZSVIh+WDnBpQ==} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.0-beta.31': + resolution: {integrity: sha512-IaDZ9NhjOIOkYtm+hH0GX33h3iVZ2OeSUnFF0+7Z4+1GuKs4Kj5wK3+I2zNV9IPLfqV4XlwWif8SXrZNutxciQ==} + '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} @@ -1245,8 +1331,8 @@ packages: peerDependencies: eslint: '>=9.0.0' - '@tybys/wasm-util@0.9.0': - resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} + '@tybys/wasm-util@0.10.0': + resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==} '@types/chai@5.2.2': resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} @@ -1417,6 +1503,10 @@ packages: resolution: {integrity: sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.38.0': + resolution: {integrity: sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@6.21.0': resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -1484,24 +1574,29 @@ packages: '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - '@unrs/resolver-binding-android-arm-eabi@1.9.0': - resolution: {integrity: sha512-h1T2c2Di49ekF2TE8ZCoJkb+jwETKUIPDJ/nO3tJBKlLFPu+fyd93f0rGP/BvArKx2k2HlRM4kqkNarj3dvZlg==} + '@unrs/resolver-binding-android-arm-eabi@1.11.1': + resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} cpu: [arm] os: [android] - '@unrs/resolver-binding-android-arm64@1.9.0': - resolution: {integrity: sha512-sG1NHtgXtX8owEkJ11yn34vt0Xqzi3k9TJ8zppDmyG8GZV4kVWw44FHwKwHeEFl07uKPeC4ZoyuQaGh5ruJYPA==} + '@unrs/resolver-binding-android-arm64@1.11.1': + resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==} cpu: [arm64] os: [android] + '@unrs/resolver-binding-darwin-arm64@1.11.1': + resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==} + cpu: [arm64] + os: [darwin] + '@unrs/resolver-binding-darwin-arm64@1.7.8': resolution: {integrity: sha512-rsRK8T7yxraNRDmpFLZCWqpea6OlXPNRRCjWMx24O1V86KFol7u2gj9zJCv6zB1oJjtnzWceuqdnCgOipFcJPA==} cpu: [arm64] os: [darwin] - '@unrs/resolver-binding-darwin-arm64@1.9.0': - resolution: {integrity: sha512-nJ9z47kfFnCxN1z/oYZS7HSNsFh43y2asePzTEZpEvK7kGyuShSl3RRXnm/1QaqFL+iP+BjMwuB+DYUymOkA5A==} - cpu: [arm64] + '@unrs/resolver-binding-darwin-x64@1.11.1': + resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==} + cpu: [x64] os: [darwin] '@unrs/resolver-binding-darwin-x64@1.7.8': @@ -1509,28 +1604,28 @@ packages: cpu: [x64] os: [darwin] - '@unrs/resolver-binding-darwin-x64@1.9.0': - resolution: {integrity: sha512-TK+UA1TTa0qS53rjWn7cVlEKVGz2B6JYe0C++TdQjvWYIyx83ruwh0wd4LRxYBM5HeuAzXcylA9BH2trARXJTw==} + '@unrs/resolver-binding-freebsd-x64@1.11.1': + resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==} cpu: [x64] - os: [darwin] + os: [freebsd] '@unrs/resolver-binding-freebsd-x64@1.7.8': resolution: {integrity: sha512-ST4uqF6FmdZQgv+Q73FU1uHzppeT4mhX3IIEmHlLObrv5Ep50olWRz0iQ4PWovadjHMTAmpuJAGaAuCZYb7UAQ==} cpu: [x64] os: [freebsd] - '@unrs/resolver-binding-freebsd-x64@1.9.0': - resolution: {integrity: sha512-6uZwzMRFcD7CcCd0vz3Hp+9qIL2jseE/bx3ZjaLwn8t714nYGwiE84WpaMCYjU+IQET8Vu/+BNAGtYD7BG/0yA==} - cpu: [x64] - os: [freebsd] + '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': + resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==} + cpu: [arm] + os: [linux] '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.8': resolution: {integrity: sha512-Z/A/4Rm2VWku2g25C3tVb986fY6unx5jaaCFpx1pbAj0OKkyuJ5wcQLHvNbIcJ9qhiYwXfrkB7JNlxrAbg7YFg==} cpu: [arm] os: [linux] - '@unrs/resolver-binding-linux-arm-gnueabihf@1.9.0': - resolution: {integrity: sha512-bPUBksQfrgcfv2+mm+AZinaKq8LCFvt5PThYqRotqSuuZK1TVKkhbVMS/jvSRfYl7jr3AoZLYbDkItxgqMKRkg==} + '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': + resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==} cpu: [arm] os: [linux] @@ -1539,9 +1634,9 @@ packages: cpu: [arm] os: [linux] - '@unrs/resolver-binding-linux-arm-musleabihf@1.9.0': - resolution: {integrity: sha512-uT6E7UBIrTdCsFQ+y0tQd3g5oudmrS/hds5pbU3h4s2t/1vsGWbbSKhBSCD9mcqaqkBwoqlECpUrRJCmldl8PA==} - cpu: [arm] + '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': + resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==} + cpu: [arm64] os: [linux] '@unrs/resolver-binding-linux-arm64-gnu@1.7.8': @@ -1549,8 +1644,8 @@ packages: cpu: [arm64] os: [linux] - '@unrs/resolver-binding-linux-arm64-gnu@1.9.0': - resolution: {integrity: sha512-vdqBh911wc5awE2bX2zx3eflbyv8U9xbE/jVKAm425eRoOVv/VseGZsqi3A3SykckSpF4wSROkbQPvbQFn8EsA==} + '@unrs/resolver-binding-linux-arm64-musl@1.11.1': + resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==} cpu: [arm64] os: [linux] @@ -1559,9 +1654,9 @@ packages: cpu: [arm64] os: [linux] - '@unrs/resolver-binding-linux-arm64-musl@1.9.0': - resolution: {integrity: sha512-/8JFZ/SnuDr1lLEVsxsuVwrsGquTvT51RZGvyDB/dOK3oYK2UqeXzgeyq6Otp8FZXQcEYqJwxb9v+gtdXn03eQ==} - cpu: [arm64] + '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': + resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==} + cpu: [ppc64] os: [linux] '@unrs/resolver-binding-linux-ppc64-gnu@1.7.8': @@ -1569,9 +1664,9 @@ packages: cpu: [ppc64] os: [linux] - '@unrs/resolver-binding-linux-ppc64-gnu@1.9.0': - resolution: {integrity: sha512-FkJjybtrl+rajTw4loI3L6YqSOpeZfDls4SstL/5lsP2bka9TiHUjgMBjygeZEis1oC8LfJTS8FSgpKPaQx2tQ==} - cpu: [ppc64] + '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': + resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==} + cpu: [riscv64] os: [linux] '@unrs/resolver-binding-linux-riscv64-gnu@1.7.8': @@ -1579,8 +1674,8 @@ packages: cpu: [riscv64] os: [linux] - '@unrs/resolver-binding-linux-riscv64-gnu@1.9.0': - resolution: {integrity: sha512-w/NZfHNeDusbqSZ8r/hp8iL4S39h4+vQMc9/vvzuIKMWKppyUGKm3IST0Qv0aOZ1rzIbl9SrDeIqK86ZpUK37w==} + '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': + resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==} cpu: [riscv64] os: [linux] @@ -1589,9 +1684,9 @@ packages: cpu: [riscv64] os: [linux] - '@unrs/resolver-binding-linux-riscv64-musl@1.9.0': - resolution: {integrity: sha512-bEPBosut8/8KQbUixPry8zg/fOzVOWyvwzOfz0C0Rw6dp+wIBseyiHKjkcSyZKv/98edrbMknBaMNJfA/UEdqw==} - cpu: [riscv64] + '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': + resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==} + cpu: [s390x] os: [linux] '@unrs/resolver-binding-linux-s390x-gnu@1.7.8': @@ -1599,9 +1694,9 @@ packages: cpu: [s390x] os: [linux] - '@unrs/resolver-binding-linux-s390x-gnu@1.9.0': - resolution: {integrity: sha512-LDtMT7moE3gK753gG4pc31AAqGUC86j3AplaFusc717EUGF9ZFJ356sdQzzZzkBk1XzMdxFyZ4f/i35NKM/lFA==} - cpu: [s390x] + '@unrs/resolver-binding-linux-x64-gnu@1.11.1': + resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==} + cpu: [x64] os: [linux] '@unrs/resolver-binding-linux-x64-gnu@1.7.8': @@ -1609,8 +1704,8 @@ packages: cpu: [x64] os: [linux] - '@unrs/resolver-binding-linux-x64-gnu@1.9.0': - resolution: {integrity: sha512-WmFd5KINHIXj8o1mPaT8QRjA9HgSXhN1gl9Da4IZihARihEnOylu4co7i/yeaIpcfsI6sYs33cNZKyHYDh0lrA==} + '@unrs/resolver-binding-linux-x64-musl@1.11.1': + resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==} cpu: [x64] os: [linux] @@ -1619,29 +1714,29 @@ packages: cpu: [x64] os: [linux] - '@unrs/resolver-binding-linux-x64-musl@1.9.0': - resolution: {integrity: sha512-CYuXbANW+WgzVRIl8/QvZmDaZxrqvOldOwlbUjIM4pQ46FJ0W5cinJ/Ghwa/Ng1ZPMJMk1VFdsD/XwmCGIXBWg==} - cpu: [x64] - os: [linux] + '@unrs/resolver-binding-wasm32-wasi@1.11.1': + resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] '@unrs/resolver-binding-wasm32-wasi@1.7.8': resolution: {integrity: sha512-x94WnaU5g+pCPDVedfnXzoG6lCOF2xFGebNwhtbJCWfceE94Zj8aysSxdxotlrZrxnz5D3ijtyFUYtpz04n39Q==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@unrs/resolver-binding-wasm32-wasi@1.9.0': - resolution: {integrity: sha512-6Rp2WH0OoitMYR57Z6VE8Y6corX8C6QEMWLgOV6qXiJIeZ1F9WGXY/yQ8yDC4iTraotyLOeJ2Asea0urWj2fKQ==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] + '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': + resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==} + cpu: [arm64] + os: [win32] '@unrs/resolver-binding-win32-arm64-msvc@1.7.8': resolution: {integrity: sha512-vst2u8EJZ5L6jhJ6iLis3w9rg16aYqRxQuBAMYQRVrPMI43693hLP7DuqyOBRKgsQXy9/jgh204k0ViHkqQgdg==} cpu: [arm64] os: [win32] - '@unrs/resolver-binding-win32-arm64-msvc@1.9.0': - resolution: {integrity: sha512-rknkrTRuvujprrbPmGeHi8wYWxmNVlBoNW8+4XF2hXUnASOjmuC9FNF1tGbDiRQWn264q9U/oGtixyO3BT8adQ==} - cpu: [arm64] + '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': + resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==} + cpu: [ia32] os: [win32] '@unrs/resolver-binding-win32-ia32-msvc@1.7.8': @@ -1649,9 +1744,9 @@ packages: cpu: [ia32] os: [win32] - '@unrs/resolver-binding-win32-ia32-msvc@1.9.0': - resolution: {integrity: sha512-Ceymm+iBl+bgAICtgiHyMLz6hjxmLJKqBim8tDzpX61wpZOx2bPK6Gjuor7I2RiUynVjvvkoRIkrPyMwzBzF3A==} - cpu: [ia32] + '@unrs/resolver-binding-win32-x64-msvc@1.11.1': + resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==} + cpu: [x64] os: [win32] '@unrs/resolver-binding-win32-x64-msvc@1.7.8': @@ -1659,11 +1754,6 @@ packages: cpu: [x64] os: [win32] - '@unrs/resolver-binding-win32-x64-msvc@1.9.0': - resolution: {integrity: sha512-k59o9ZyeyS0hAlcaKFezYSH2agQeRFEB7KoQLXl3Nb3rgkqT1NY9Vwy+SqODiLmYnEjxWJVRE/yq2jFVqdIxZw==} - cpu: [x64] - os: [win32] - '@vitest/eslint-plugin@1.2.1': resolution: {integrity: sha512-JQr1jdVcrsoS7Sdzn83h9sq4DvREf9Q/onTZbJCqTVlv/76qb+TZrLv/9VhjnjSMHweQH5FdpMDeCR6aDe2fgw==} peerDependencies: @@ -1714,11 +1804,6 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - acorn@8.14.1: - resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} - engines: {node: '>=0.4.0'} - hasBin: true - acorn@8.15.0: resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} @@ -1728,8 +1813,8 @@ packages: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} engines: {node: '>= 14'} - agent-base@7.1.3: - resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} aggregate-error@3.1.0: @@ -1771,13 +1856,13 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} + ansis@4.1.0: + resolution: {integrity: sha512-BGcItUBWSMRgOCe+SVZJ+S7yTRG0eGt9cXAHev72yuGcY23hnLA7Bky5L/xLyPINoSN95geovfBkqoTlNZYa7w==} + engines: {node: '>=14'} + any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - are-docs-informative@0.0.2: resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} engines: {node: '>=14'} @@ -1830,10 +1915,6 @@ packages: resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} engines: {node: '>= 0.4'} - array.prototype.reduce@1.0.7: - resolution: {integrity: sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==} - engines: {node: '>= 0.4'} - array.prototype.tosorted@1.1.4: resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} engines: {node: '>= 0.4'} @@ -1861,6 +1942,10 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} + ast-kit@2.1.1: + resolution: {integrity: sha512-mfh6a7gKXE8pDlxTvqIc/syH/P3RkzbOF6LeHdcKztLEzYe6IMsRCL7N8vI7hqTGWNxpkCuuRTpT21xNWqhRtQ==} + engines: {node: '>=20.18.0'} + ast-types-flow@0.0.8: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} @@ -1925,9 +2010,8 @@ packages: before-after-hook@4.0.0: resolution: {integrity: sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==} - binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} + birpc@2.5.0: + resolution: {integrity: sha512-VSWO/W6nNQdyP520F1mhf+Lc2f8pjGQOtoHHm7Ze8Go1kX7akpVIrtTa0fn+HB0QJEDVacl6aO08YE0PgXfdnQ==} bluebird@2.11.0: resolution: {integrity: sha512-UfFSr22dmHPQqPP9XWHRhq+gWnHCYguQGkXQlbyPtW5qTnhFWA8/iXg765tH0cAjy7l/zPJ1aBTO0g5XgA7kvQ==} @@ -1964,9 +2048,6 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - builtin-modules@4.0.0: resolution: {integrity: sha512-p1n8zyCkt1BVrKNFymOHjcDSAl7oq/gUvfgULv2EblgpPVQlQr9yHnWjg9IJ2MhfwPqiYqMMrr01OY7yQoK2yA==} engines: {node: '>=18.20'} @@ -1985,6 +2066,10 @@ packages: monocart-coverage-reports: optional: true + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + cacache@18.0.4: resolution: {integrity: sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==} engines: {node: ^16.14.0 || >=18.0.0} @@ -2051,10 +2136,6 @@ packages: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} - chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} - chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} @@ -2067,6 +2148,9 @@ packages: resolution: {integrity: sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==} engines: {node: '>=8'} + cjs-module-lexer@1.4.3: + resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} + clean-regexp@1.0.0: resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} engines: {node: '>=4'} @@ -2096,9 +2180,6 @@ packages: resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} engines: {node: '>=18'} - cliui@6.0.0: - resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} - cliui@7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} @@ -2106,10 +2187,6 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} - clone-deep@4.0.1: - resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} - engines: {node: '>=6'} - clone-regexp@3.0.0: resolution: {integrity: sha512-ujdnoq2Kxb8s3ItNBtnYeXdm07FcU0u8ARAT1lQ2YdMwQC+cdiXX8KoqMVuglztILivceTtp4ivqGSmEmhBUJw==} engines: {node: '>=12'} @@ -2138,23 +2215,19 @@ packages: resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==} engines: {node: '>=20'} - commander@6.2.1: - resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} - engines: {node: '>= 6'} - comment-parser@1.4.1: resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} engines: {node: '>= 12.0.0'} - commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + confbox@0.2.2: + resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} + config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} @@ -2189,9 +2262,6 @@ packages: core-js-compat@3.42.0: resolution: {integrity: sha512-bQasjMfyDGyaeWKBIu33lHh9qlSR0MFE/Nmc6nMjf/iU9b3rSMdAYz1Baxrv4lPdGUsTqZudHA4jIGSJy0SWZQ==} - core-js@3.37.1: - resolution: {integrity: sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==} - core-util-is@1.0.2: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} @@ -2297,10 +2367,6 @@ packages: supports-color: optional: true - decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - decamelize@4.0.0: resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} engines: {node: '>=10'} @@ -2344,6 +2410,9 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -2352,6 +2421,10 @@ packages: resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==} engines: {node: '>=0.3.1'} + diff@8.0.2: + resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} + engines: {node: '>=0.3.1'} + dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -2387,6 +2460,15 @@ packages: resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} engines: {node: '>=4'} + dts-resolver@2.1.1: + resolution: {integrity: sha512-3BiGFhB6mj5Kv+W2vdJseQUYW+SKVzAFJL6YNP6ursbrwy1fXHRotfHi3xLNxe4wZl/K8qbAFeCDjZLjzqxxRw==} + engines: {node: '>=20.18.0'} + peerDependencies: + oxc-resolver: '>=11.0.0' + peerDependenciesMeta: + oxc-resolver: + optional: true + dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -2415,6 +2497,10 @@ packages: emojilib@2.4.0: resolution: {integrity: sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==} + empathic@2.0.0: + resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} + engines: {node: '>=14'} + encoding@0.1.13: resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} @@ -2462,9 +2548,6 @@ packages: resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} engines: {node: '>= 0.4'} - es-array-method-boxes-properly@1.0.0: - resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} - es-define-property@1.0.0: resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} engines: {node: '>= 0.4'} @@ -2574,8 +2657,8 @@ packages: unrs-resolver: optional: true - eslint-import-context@0.1.8: - resolution: {integrity: sha512-bq+F7nyc65sKpZGT09dY0S0QrOnQtuDVIfyTGQ8uuvtMIF7oHp6CEP3mouN0rrnYF3Jqo6Ke0BfU/5wASZue1w==} + eslint-import-context@0.1.9: + resolution: {integrity: sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} peerDependencies: unrs-resolver: ^1.0.0 @@ -2682,8 +2765,8 @@ packages: typescript: optional: true - eslint-plugin-import-x@4.15.1: - resolution: {integrity: sha512-JfVpNg1qMkPD66iaSgmMoSYeUCGS8UFSm3GwHV0IbuV3Knar/SyK5qqCct9+AxoMIzaM+KSO7KK5pOeOkC/3GQ==} + eslint-plugin-import-x@4.16.1: + resolution: {integrity: sha512-vPZZsiOKaBAIATpFE2uMI4w5IRwdv/FpQ+qZZMR4E+PeOcM4OeoEbqxRMnywdxP19TyB/3h6QBB0EWon7letSQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/utils': ^8.0.0 @@ -2922,6 +3005,9 @@ packages: exponential-backoff@3.1.2: resolution: {integrity: sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==} + exsolve@1.0.7: + resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==} + extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -2971,6 +3057,9 @@ packages: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} + fflate@0.8.2: + resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} + figures@2.0.0: resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} engines: {node: '>=4'} @@ -2995,10 +3084,6 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - find-cache-dir@2.1.0: - resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} - engines: {node: '>=6'} - find-up-simple@1.0.0: resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==} engines: {node: '>=18'} @@ -3007,10 +3092,6 @@ packages: resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} engines: {node: '>=4'} - find-up@3.0.0: - resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} - engines: {node: '>=6'} - find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -3079,17 +3160,9 @@ packages: resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - fs-readdir-recursive@1.1.0: - resolution: {integrity: sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==} - fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} @@ -3363,14 +3436,13 @@ packages: highlight.js@10.7.3: resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} - homedir-polyfill@1.0.3: - resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} - engines: {node: '>=0.10.0'} - hook-std@3.0.0: resolution: {integrity: sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + hosted-git-info@7.0.1: resolution: {integrity: sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==} engines: {node: ^16.14.0 || >=18.0.0} @@ -3532,10 +3604,6 @@ packages: resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} engines: {node: '>= 0.4'} - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} @@ -3670,10 +3738,6 @@ packages: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} - is-plain-object@2.0.4: - resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} - engines: {node: '>=0.10.0'} - is-proto-prop@2.0.0: resolution: {integrity: sha512-jl3NbQ/fGLv5Jhan4uX+Ge9ohnemqyblWVVCpAvtTQzNFvV2xhJq+esnkIbYQ9F1nITXoLfDDQLp7LBw/zzncg==} @@ -3776,10 +3840,6 @@ packages: resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} engines: {node: '>=16'} - isobject@3.0.1: - resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} - engines: {node: '>=0.10.0'} - isomorphic-ws@5.0.0: resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} peerDependencies: @@ -3831,6 +3891,9 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + js-types@1.0.0: resolution: {integrity: sha512-bfwqBW9cC/Lp7xcRpug7YrXm0IVw+T9e3g4mCYnv0Pjr3zIzU9PCQElYU9oSGAWzXlbdl9X5SAMPejO9sxkeUw==} engines: {node: '>=0.10.0'} @@ -3918,10 +3981,6 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - language-subtag-registry@0.3.22: resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} @@ -3965,10 +4024,6 @@ packages: resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} engines: {node: '>=4'} - locate-path@3.0.0: - resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} - engines: {node: '>=6'} - locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -4046,10 +4101,6 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - make-dir@2.1.0: - resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} - engines: {node: '>=6'} - make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} @@ -4137,9 +4188,6 @@ packages: resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} engines: {node: 20 || >=22} - minimatch@3.0.5: - resolution: {integrity: sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==} - minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -4203,21 +4251,30 @@ packages: moment@2.30.1: resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nan@2.22.2: - resolution: {integrity: sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==} + nan@2.23.0: + resolution: {integrity: sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ==} nano-spawn@1.0.2: resolution: {integrity: sha512-21t+ozMQDAL/UGgQVBbZ/xXvNO10++ZPuTmKRO8k9V3AClVRht49ahtDjfY8l1q6nSHOrE5ASfthzH3ol6R/hg==} engines: {node: '>=20.17'} - napi-postinstall@0.2.4: - resolution: {integrity: sha512-ZEzHJwBhZ8qQSbknHqYcdtQVr8zUgGyM/q6h6qAyhtyVMNrSgDhrC4disf03dYW0e+czXyLnZINnCTEkWy0eJg==} + napi-postinstall@0.2.5: + resolution: {integrity: sha512-kmsgUvCRIJohHjbZ3V8avP0I1Pekw329MVAMDzVxsrkjgdnqiwvMX5XwR+hWV66vsAtZ+iM+fVnq8RTQawUmCQ==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + hasBin: true + + napi-postinstall@0.3.2: + resolution: {integrity: sha512-tWVJxJHmBWLy69PvO96TZMZDrzmw5KeiZBz3RHmiM2XZ9grBJ2WgMAFVVg25nqp3ZjTFUs2Ftw1JhscL3Teliw==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} hasBin: true @@ -4247,9 +4304,6 @@ packages: resolution: {integrity: sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==} engines: {node: '>=18'} - node-environment-flags@1.0.6: - resolution: {integrity: sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==} - node-fetch@3.3.2: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -4275,10 +4329,6 @@ packages: resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} engines: {node: '>=0.10.0'} - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - normalize-url@8.0.0: resolution: {integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==} engines: {node: '>=14.16'} @@ -4409,10 +4459,6 @@ packages: resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} engines: {node: '>= 0.4'} - object.getownpropertydescriptors@2.1.8: - resolution: {integrity: sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==} - engines: {node: '>= 0.8'} - object.values@1.2.0: resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} engines: {node: '>= 0.4'} @@ -4480,10 +4526,6 @@ packages: resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} engines: {node: '>=4'} - p-locate@3.0.0: - resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} - engines: {node: '>=6'} - p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -4515,6 +4557,9 @@ packages: package-json-from-dist@1.0.0: resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + package-manager-detector@1.3.0: + resolution: {integrity: sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -4538,10 +4583,6 @@ packages: resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} engines: {node: '>=18'} - parse-passwd@1.0.0: - resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} - engines: {node: '>=0.10.0'} - parse-statements@1.0.11: resolution: {integrity: sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==} @@ -4596,6 +4637,9 @@ packages: resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} engines: {node: '>=12'} + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + pathval@2.0.0: resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} engines: {node: '>= 14.16'} @@ -4623,26 +4667,17 @@ packages: resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} engines: {node: '>=4'} - pify@4.0.1: - resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} - engines: {node: '>=6'} - - pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - pkg-conf@2.1.0: resolution: {integrity: sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==} engines: {node: '>=4'} - pkg-dir@3.0.0: - resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} - engines: {node: '>=6'} - pkg-dir@5.0.0: resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} engines: {node: '>=10'} + pkg-types@2.2.0: + resolution: {integrity: sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==} + pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} @@ -4700,6 +4735,11 @@ packages: psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + publint@0.3.12: + resolution: {integrity: sha512-1w3MMtL9iotBjm1mmXtG3Nk06wnq9UhGNRpQ2j6n1Zq7YAD6gnxMMZMIxlRPAydVjVbjSm+n0lhwqsD1m4LD5w==} + engines: {node: '>=18'} + hasBin: true + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -4708,6 +4748,9 @@ packages: resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} engines: {node: '>=0.6'} + quansync@0.2.10: + resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -4748,10 +4791,6 @@ packages: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - readdirp@4.1.2: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} @@ -4779,9 +4818,6 @@ packages: regenerate@1.4.2: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - regexp-ast-analysis@0.7.1: resolution: {integrity: sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -4824,11 +4860,6 @@ packages: remove-trailing-separator@1.1.0: resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} - replace@1.2.2: - resolution: {integrity: sha512-C4EDifm22XZM2b2JOYe6Mhn+lBsLBAvLbK8drfUQLTfD1KYl/n3VaW/CDju0Ny4w3xTtegBpg8YNSpFJPUDSjA==} - engines: {node: '>= 6'} - hasBin: true - req-all@0.1.0: resolution: {integrity: sha512-ZdvPr8uXy9ujX3KujwE2P1HWkMYgogIhqeAeyb47MqWjSfyxERSm0TNbN/IapCCmWDufXab04AYrRgObaJCJ6Q==} engines: {node: '>=4'} @@ -4842,9 +4873,6 @@ packages: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} - require-main-filename@2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - requireindex@1.1.0: resolution: {integrity: sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg==} engines: {node: '>=0.10.5'} @@ -4893,15 +4921,30 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - rimraf@6.0.1: - resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} - engines: {node: 20 || >=22} - hasBin: true - roarr@7.21.1: resolution: {integrity: sha512-3niqt5bXFY1InKU8HKWqqYTYjtrBaxBMnXELXCXUYgtNYGUtZM5rB46HIC430AyacL95iEniGf7RgqsesykLmQ==} engines: {node: '>=18.0'} + rolldown-plugin-dts@0.15.6: + resolution: {integrity: sha512-AxQlyx3Nszob5QLmVUjz/VnC5BevtUo0h8tliuE0egddss7IbtCBU7GOe7biRU0fJNRQJmQjPKXFcc7K98j3+w==} + engines: {node: '>=20.18.0'} + peerDependencies: + '@typescript/native-preview': '>=7.0.0-dev.20250601.1' + rolldown: ^1.0.0-beta.9 + typescript: ^5.0.0 + vue-tsc: ~3.0.3 + peerDependenciesMeta: + '@typescript/native-preview': + optional: true + typescript: + optional: true + vue-tsc: + optional: true + + rolldown@1.0.0-beta.31: + resolution: {integrity: sha512-M2Q+RfG0FMJeSW3RSFTbvtjGVTcQpTQvN247D0EMSsPkpZFoinopR9oAnQiwgogQyzDuvKNnbyCbQQlmNAzSoQ==} + hasBin: true + run-applescript@7.0.0: resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} engines: {node: '>=18'} @@ -4909,6 +4952,10 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + safe-array-concat@1.1.2: resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} @@ -4962,10 +5009,6 @@ packages: resolution: {integrity: sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==} engines: {node: '>=12'} - semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -4978,9 +5021,6 @@ packages: serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} - set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -4993,10 +5033,6 @@ packages: resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} engines: {node: '>= 0.4'} - shallow-clone@3.0.1: - resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} - engines: {node: '>=8'} - shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -5040,10 +5076,6 @@ packages: resolution: {integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==} engines: {node: '>=8'} - slash@2.0.0: - resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==} - engines: {node: '>=6'} - slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -5068,13 +5100,10 @@ packages: resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} engines: {node: '>= 14'} - socks@2.8.5: - resolution: {integrity: sha512-iF+tNDQla22geJdTyJB1wM/qrX9DMRwWrciEPwWLPRWAUEM8sQiyxgckLxWT1f7+9VabJS0jTGGr4QgBuvi6Ww==} + socks@2.8.6: + resolution: {integrity: sha512-pe4Y2yzru68lXCb38aAqRf5gvN8YdjP1lok5o0J7BOHljkyCGKVz7H3vpVIXKD27rj2giOJ7DwVyk/GWrPHDWA==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} @@ -5119,8 +5148,8 @@ packages: resolution: {integrity: sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - stable-hash-x@0.1.1: - resolution: {integrity: sha512-l0x1D6vhnsNUGPFVDx45eif0y6eedVC8nm5uACTrVFJFtl2mLRW17aWtVyxFCpn5t94VUPkjU8vSLwIuwwqtJQ==} + stable-hash-x@0.2.0: + resolution: {integrity: sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==} engines: {node: '>=12.0.0'} stable-hash@0.0.5: @@ -5314,6 +5343,9 @@ packages: tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + tinyexec@1.0.1: + resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} + tinyglobby@0.2.14: resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} @@ -5322,10 +5354,6 @@ packages: resolution: {integrity: sha512-noj0KdpWTBhwsKxMOXk0rN9otg4kTgLm4WohERRHbJ9IY+kSDKr3RmjitaQ3JFzny+DyvBOQKlFZhp0G0qNSfg==} hasBin: true - to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -5341,6 +5369,10 @@ packages: resolution: {integrity: sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==} engines: {node: '>= 0.4'} + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + ts-api-utils@1.0.3: resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} @@ -5362,6 +5394,28 @@ packages: resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} engines: {node: '>=6'} + tsdown@0.13.4: + resolution: {integrity: sha512-2uf0Xo170gmxwJEOgfb7V9y3k+Uq/dQJx4xfXYova7pqqTw9ZjxSvEeq7Y6l+Ys54GlBrRKvxKoEyNhuUcoCTg==} + engines: {node: '>=20.19.0'} + hasBin: true + peerDependencies: + '@arethetypeswrong/core': ^0.18.1 + publint: ^0.3.0 + typescript: ^5.0.0 + unplugin-lightningcss: ^0.4.0 + unplugin-unused: ^0.5.0 + peerDependenciesMeta: + '@arethetypeswrong/core': + optional: true + publint: + optional: true + typescript: + optional: true + unplugin-lightningcss: + optional: true + unplugin-unused: + optional: true + tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -5434,6 +5488,11 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' + typescript@5.6.1-rc: + resolution: {integrity: sha512-E3b2+1zEFu84jB0YQi9BORDjz9+jGbwwy1Zi3G0LUNw7a7cePUrHMRNy8aPh53nXpkFGVHSxIZo5vKTfYaFiBQ==} + engines: {node: '>=14.17'} + hasBin: true + typescript@5.8.3: resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} engines: {node: '>=14.17'} @@ -5451,6 +5510,9 @@ packages: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} + unconfig@7.3.2: + resolution: {integrity: sha512-nqG5NNL2wFVGZ0NA/aCFw0oJ2pxSf1lwg4Z5ill8wd7K4KX/rQbHlwbh+bjctXL5Ly1xtzHenHGOK0b+lG6JVg==} + undici-types@7.8.0: resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} @@ -5505,12 +5567,20 @@ packages: resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==} engines: {node: '>=0.10.0'} + unplugin-unused@0.5.1: + resolution: {integrity: sha512-USnsy4XsInQFcIb/kSt5HbTkwIIYfW1ujGN0jPanq76IvG7RsqHPk4kJqDoZSqCgDkTjolr72a/f7K1Hr2XmWg==} + engines: {node: '>=20.18.0'} + + unplugin@2.3.5: + resolution: {integrity: sha512-RyWSb5AHmGtjjNQ6gIlA67sHOsWpsbWpwDokLwTcejVdOjEkJZh7QKu14J00gDDVSh8kGH4KYC/TNBceXFZhtw==} + engines: {node: '>=18.12.0'} + + unrs-resolver@1.11.1: + resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} + unrs-resolver@1.7.8: resolution: {integrity: sha512-2zsXwyOXmCX9nGz4vhtZRYhe30V78heAv+KDc21A/KMdovGHbZcixeD5JHEF0DrFXzdytwuzYclcPbvp8A3Jlw==} - unrs-resolver@1.9.0: - resolution: {integrity: sha512-wqaRu4UnzBD2ABTC1kLfBjAqIDZ5YUTr/MLGa7By47JV1bJDSW7jq/ZSLigB7enLe7ubNaJhtnBXgrc/50cEhg==} - update-browserslist-db@1.1.3: resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} hasBin: true @@ -5551,13 +5621,13 @@ packages: resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} engines: {node: '>=10.12.0'} - v8flags@3.2.0: - resolution: {integrity: sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==} - engines: {node: '>= 0.10'} - validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + validate-npm-package-name@5.0.1: + resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + verror@1.10.0: resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} engines: {'0': node >=0.6.0} @@ -5566,6 +5636,9 @@ packages: resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} engines: {node: '>= 8'} + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + whatwg-mimetype@4.0.0: resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} engines: {node: '>=18'} @@ -5588,9 +5661,6 @@ packages: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} engines: {node: '>= 0.4'} - which-module@2.0.1: - resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - which-typed-array@1.1.15: resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} engines: {node: '>= 0.4'} @@ -5619,10 +5689,6 @@ packages: workerpool@9.3.2: resolution: {integrity: sha512-Xz4Nm9c+LiBHhDR5bDLnNzmj6+5F+cyEAWPMkbs2awq/dYazR/efelZzUAjB/y3kNHL+uzkHvxVVpaOfGCPV7A==} - wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} - wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -5661,9 +5727,6 @@ packages: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} - y18n@4.0.3: - resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} - y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -5683,10 +5746,6 @@ packages: engines: {node: '>= 14.6'} hasBin: true - yargs-parser@18.1.3: - resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} - engines: {node: '>=6'} - yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} @@ -5699,10 +5758,6 @@ packages: resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} engines: {node: '>=10'} - yargs@15.4.1: - resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} - engines: {node: '>=8'} - yargs@16.2.0: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} engines: {node: '>=10'} @@ -5732,19 +5787,18 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@babel/cli@7.27.2(@babel/core@7.27.4)': + '@andrewbranch/untar.js@1.0.3': {} + + '@arethetypeswrong/core@0.18.2': dependencies: - '@babel/core': 7.27.4 - '@jridgewell/trace-mapping': 0.3.25 - commander: 6.2.1 - convert-source-map: 2.0.0 - fs-readdir-recursive: 1.1.0 - glob: 7.2.3 - make-dir: 2.1.0 - slash: 2.0.0 - optionalDependencies: - '@nicolo-ribaudo/chokidar-2': 2.1.8-no-fsevents.3 - chokidar: 3.6.0 + '@andrewbranch/untar.js': 1.0.3 + '@loaderkit/resolve': 1.0.4 + cjs-module-lexer: 1.4.3 + fflate: 0.8.2 + lru-cache: 11.1.0 + semver: 7.7.2 + typescript: 5.6.1-rc + validate-npm-package-name: 5.0.1 '@babel/code-frame@7.24.7': dependencies: @@ -5803,13 +5857,21 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.0.2 + '@babel/generator@7.28.0': + dependencies: + '@babel/parser': 7.28.0 + '@babel/types': 7.28.2 + '@jridgewell/gen-mapping': 0.3.12 + '@jridgewell/trace-mapping': 0.3.29 + jsesc: 3.1.0 + '@babel/helper-annotate-as-pure@7.24.7': dependencies: - '@babel/types': 7.25.2 + '@babel/types': 7.28.2 '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.27.3 + '@babel/types': 7.28.2 '@babel/helper-compilation-targets@7.27.2': dependencies: @@ -5871,14 +5933,14 @@ snapshots: '@babel/helper-member-expression-to-functions@7.27.1': dependencies: '@babel/traverse': 7.27.4 - '@babel/types': 7.27.3 + '@babel/types': 7.28.2 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.27.1': dependencies: '@babel/traverse': 7.27.4 - '@babel/types': 7.27.3 + '@babel/types': 7.28.2 transitivePeerDependencies: - supports-color @@ -5893,7 +5955,7 @@ snapshots: '@babel/helper-optimise-call-expression@7.27.1': dependencies: - '@babel/types': 7.27.3 + '@babel/types': 7.28.2 '@babel/helper-plugin-utils@7.22.5': {} @@ -5922,16 +5984,12 @@ snapshots: '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: '@babel/traverse': 7.27.4 - '@babel/types': 7.27.3 + '@babel/types': 7.28.2 transitivePeerDependencies: - supports-color - '@babel/helper-string-parser@7.24.8': {} - '@babel/helper-string-parser@7.27.1': {} - '@babel/helper-validator-identifier@7.24.7': {} - '@babel/helper-validator-identifier@7.27.1': {} '@babel/helper-validator-option@7.27.1': {} @@ -5940,7 +5998,7 @@ snapshots: dependencies: '@babel/template': 7.27.2 '@babel/traverse': 7.27.4 - '@babel/types': 7.27.3 + '@babel/types': 7.28.2 transitivePeerDependencies: - supports-color @@ -5951,29 +6009,19 @@ snapshots: '@babel/highlight@7.24.7': dependencies: - '@babel/helper-validator-identifier': 7.24.7 + '@babel/helper-validator-identifier': 7.27.1 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/node@7.27.1(@babel/core@7.27.4)': - dependencies: - '@babel/core': 7.27.4 - '@babel/register': 7.27.1(@babel/core@7.27.4) - commander: 6.2.1 - core-js: 3.37.1 - node-environment-flags: 1.0.6 - regenerator-runtime: 0.14.1 - v8flags: 3.2.0 - - '@babel/parser@7.24.7': - dependencies: - '@babel/types': 7.25.2 - '@babel/parser@7.27.4': dependencies: '@babel/types': 7.27.3 + '@babel/parser@7.28.0': + dependencies: + '@babel/types': 7.28.2 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -6443,18 +6491,9 @@ snapshots: dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/types': 7.25.2 + '@babel/types': 7.28.2 esutils: 2.0.3 - '@babel/register@7.27.1(@babel/core@7.27.4)': - dependencies: - '@babel/core': 7.27.4 - clone-deep: 4.0.1 - find-cache-dir: 2.1.0 - make-dir: 2.1.0 - pirates: 4.0.6 - source-map-support: 0.5.21 - '@babel/regjsgen@0.8.0': {} '@babel/template@7.27.2': @@ -6475,34 +6514,35 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/types@7.25.2': + '@babel/types@7.27.3': dependencies: - '@babel/helper-string-parser': 7.24.8 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 - '@babel/types@7.27.3': + '@babel/types@7.28.2': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 '@bcoe/v8-coverage@1.0.2': {} + '@braidai/lang@1.1.1': {} + '@colors/colors@1.5.0': optional: true - '@emnapi/core@1.4.3': + '@emnapi/core@1.4.5': dependencies: - '@emnapi/wasi-threads': 1.0.2 + '@emnapi/wasi-threads': 1.0.4 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.4.3': + '@emnapi/runtime@1.4.5': dependencies: tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.0.2': + '@emnapi/wasi-threads@1.0.4': dependencies: tslib: 2.8.1 optional: true @@ -6556,7 +6596,7 @@ snapshots: '@es-joy/jsdoccomment@0.50.2': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.34.1 + '@typescript-eslint/types': 8.38.0 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 4.1.0 @@ -6767,10 +6807,10 @@ snapshots: '@graphql-tools/graphql-tag-pluck@8.3.19(graphql@16.11.0)': dependencies: '@babel/core': 7.27.4 - '@babel/parser': 7.27.4 + '@babel/parser': 7.28.0 '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.27.4) '@babel/traverse': 7.27.4 - '@babel/types': 7.27.3 + '@babel/types': 7.28.2 '@graphql-tools/utils': 10.8.6(graphql@16.11.0) graphql: 16.11.0 tslib: 2.8.1 @@ -6916,11 +6956,16 @@ snapshots: '@istanbuljs/schema@0.1.3': {} + '@jridgewell/gen-mapping@0.3.12': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/trace-mapping': 0.3.29 '@jridgewell/resolve-uri@3.1.1': {} @@ -6928,25 +6973,40 @@ snapshots: '@jridgewell/sourcemap-codec@1.4.15': {} + '@jridgewell/sourcemap-codec@1.5.4': {} + '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 - '@napi-rs/wasm-runtime@0.2.11': + '@jridgewell/trace-mapping@0.3.29': + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.5.4 + + '@loaderkit/resolve@1.0.4': + dependencies: + '@braidai/lang': 1.1.1 + + '@napi-rs/wasm-runtime@0.2.12': dependencies: - '@emnapi/core': 1.4.3 - '@emnapi/runtime': 1.4.3 - '@tybys/wasm-util': 0.9.0 + '@emnapi/core': 1.4.5 + '@emnapi/runtime': 1.4.5 + '@tybys/wasm-util': 0.10.0 + optional: true + + '@napi-rs/wasm-runtime@1.0.1': + dependencies: + '@emnapi/core': 1.4.5 + '@emnapi/runtime': 1.4.5 + '@tybys/wasm-util': 0.10.0 optional: true '@next/eslint-plugin-next@15.3.3': dependencies: fast-glob: 3.3.1 - '@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3': - optional: true - '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': dependencies: eslint-scope: 5.1.1 @@ -6967,7 +7027,7 @@ snapshots: '@npmcli/agent@2.2.2': dependencies: - agent-base: 7.1.3 + agent-base: 7.1.4 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 lru-cache: 10.4.3 @@ -7040,6 +7100,10 @@ snapshots: dependencies: '@octokit/openapi-types': 25.1.0 + '@oxc-project/runtime@0.80.0': {} + + '@oxc-project/types@0.80.0': {} + '@pkgjs/parseargs@0.11.0': optional: true @@ -7057,10 +7121,62 @@ snapshots: '@pnpm/network.ca-file': 1.0.2 config-chain: 1.1.13 + '@publint/pack@0.1.2': {} + + '@quansync/fs@0.1.3': + dependencies: + quansync: 0.2.10 + '@repeaterjs/repeater@3.0.5': {} '@repeaterjs/repeater@3.0.6': {} + '@rolldown/binding-android-arm64@1.0.0-beta.31': + optional: true + + '@rolldown/binding-darwin-arm64@1.0.0-beta.31': + optional: true + + '@rolldown/binding-darwin-x64@1.0.0-beta.31': + optional: true + + '@rolldown/binding-freebsd-x64@1.0.0-beta.31': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.31': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.31': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.31': + optional: true + + '@rolldown/binding-linux-arm64-ohos@1.0.0-beta.31': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.31': + optional: true + + '@rolldown/binding-linux-x64-musl@1.0.0-beta.31': + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.0-beta.31': + dependencies: + '@napi-rs/wasm-runtime': 1.0.1 + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.31': + optional: true + + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.31': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.31': + optional: true + + '@rolldown/pluginutils@1.0.0-beta.31': {} + '@sec-ant/readable-stream@0.4.1': {} '@semantic-release/commit-analyzer@13.0.1(semantic-release@24.2.5(typescript@5.8.3))': @@ -7152,7 +7268,7 @@ snapshots: - supports-color - typescript - '@tybys/wasm-util@0.9.0': + '@tybys/wasm-util@0.10.0': dependencies: tslib: 2.8.1 optional: true @@ -7285,7 +7401,7 @@ snapshots: '@typescript-eslint/project-service@8.33.0(typescript@5.8.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.33.0(typescript@5.8.3) - '@typescript-eslint/types': 8.34.1 + '@typescript-eslint/types': 8.38.0 debug: 4.4.1(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -7294,7 +7410,7 @@ snapshots: '@typescript-eslint/project-service@8.34.1(typescript@5.8.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.34.1(typescript@5.8.3) - '@typescript-eslint/types': 8.34.1 + '@typescript-eslint/types': 8.38.0 debug: 4.4.1(supports-color@8.1.1) typescript: 5.8.3 transitivePeerDependencies: @@ -7369,6 +7485,8 @@ snapshots: '@typescript-eslint/types@8.34.1': {} + '@typescript-eslint/types@8.38.0': {} + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.8.3)': dependencies: '@typescript-eslint/types': 6.21.0 @@ -7485,118 +7603,118 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@unrs/resolver-binding-android-arm-eabi@1.9.0': + '@unrs/resolver-binding-android-arm-eabi@1.11.1': + optional: true + + '@unrs/resolver-binding-android-arm64@1.11.1': optional: true - '@unrs/resolver-binding-android-arm64@1.9.0': + '@unrs/resolver-binding-darwin-arm64@1.11.1': optional: true '@unrs/resolver-binding-darwin-arm64@1.7.8': optional: true - '@unrs/resolver-binding-darwin-arm64@1.9.0': + '@unrs/resolver-binding-darwin-x64@1.11.1': optional: true '@unrs/resolver-binding-darwin-x64@1.7.8': optional: true - '@unrs/resolver-binding-darwin-x64@1.9.0': + '@unrs/resolver-binding-freebsd-x64@1.11.1': optional: true '@unrs/resolver-binding-freebsd-x64@1.7.8': optional: true - '@unrs/resolver-binding-freebsd-x64@1.9.0': + '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': optional: true '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.8': optional: true - '@unrs/resolver-binding-linux-arm-gnueabihf@1.9.0': + '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': optional: true '@unrs/resolver-binding-linux-arm-musleabihf@1.7.8': optional: true - '@unrs/resolver-binding-linux-arm-musleabihf@1.9.0': + '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': optional: true '@unrs/resolver-binding-linux-arm64-gnu@1.7.8': optional: true - '@unrs/resolver-binding-linux-arm64-gnu@1.9.0': + '@unrs/resolver-binding-linux-arm64-musl@1.11.1': optional: true '@unrs/resolver-binding-linux-arm64-musl@1.7.8': optional: true - '@unrs/resolver-binding-linux-arm64-musl@1.9.0': + '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': optional: true '@unrs/resolver-binding-linux-ppc64-gnu@1.7.8': optional: true - '@unrs/resolver-binding-linux-ppc64-gnu@1.9.0': + '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': optional: true '@unrs/resolver-binding-linux-riscv64-gnu@1.7.8': optional: true - '@unrs/resolver-binding-linux-riscv64-gnu@1.9.0': + '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': optional: true '@unrs/resolver-binding-linux-riscv64-musl@1.7.8': optional: true - '@unrs/resolver-binding-linux-riscv64-musl@1.9.0': + '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': optional: true '@unrs/resolver-binding-linux-s390x-gnu@1.7.8': optional: true - '@unrs/resolver-binding-linux-s390x-gnu@1.9.0': + '@unrs/resolver-binding-linux-x64-gnu@1.11.1': optional: true '@unrs/resolver-binding-linux-x64-gnu@1.7.8': optional: true - '@unrs/resolver-binding-linux-x64-gnu@1.9.0': + '@unrs/resolver-binding-linux-x64-musl@1.11.1': optional: true '@unrs/resolver-binding-linux-x64-musl@1.7.8': optional: true - '@unrs/resolver-binding-linux-x64-musl@1.9.0': + '@unrs/resolver-binding-wasm32-wasi@1.11.1': + dependencies: + '@napi-rs/wasm-runtime': 0.2.12 optional: true '@unrs/resolver-binding-wasm32-wasi@1.7.8': dependencies: - '@napi-rs/wasm-runtime': 0.2.11 + '@napi-rs/wasm-runtime': 0.2.12 optional: true - '@unrs/resolver-binding-wasm32-wasi@1.9.0': - dependencies: - '@napi-rs/wasm-runtime': 0.2.11 + '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': optional: true '@unrs/resolver-binding-win32-arm64-msvc@1.7.8': optional: true - '@unrs/resolver-binding-win32-arm64-msvc@1.9.0': + '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': optional: true '@unrs/resolver-binding-win32-ia32-msvc@1.7.8': optional: true - '@unrs/resolver-binding-win32-ia32-msvc@1.9.0': + '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true '@unrs/resolver-binding-win32-x64-msvc@1.7.8': optional: true - '@unrs/resolver-binding-win32-x64-msvc@1.9.0': - optional: true - '@vitest/eslint-plugin@1.2.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@typescript-eslint/utils': 8.33.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) @@ -7634,10 +7752,6 @@ snapshots: dependencies: acorn: 2.7.0 - acorn-jsx@5.3.2(acorn@8.14.1): - dependencies: - acorn: 8.14.1 - acorn-jsx@5.3.2(acorn@8.15.0): dependencies: acorn: 8.15.0 @@ -7646,8 +7760,6 @@ snapshots: acorn@8.12.0: {} - acorn@8.14.1: {} - acorn@8.15.0: {} agent-base@7.1.0: @@ -7656,7 +7768,7 @@ snapshots: transitivePeerDependencies: - supports-color - agent-base@7.1.3: + agent-base@7.1.4: optional: true aggregate-error@3.1.0: @@ -7697,13 +7809,9 @@ snapshots: ansi-styles@6.2.1: {} - any-promise@1.3.0: {} + ansis@4.1.0: {} - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - optional: true + any-promise@1.3.0: {} are-docs-informative@0.0.2: {} @@ -7770,16 +7878,6 @@ snapshots: es-abstract: 1.24.0 es-shim-unscopables: 1.0.2 - array.prototype.reduce@1.0.7: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-array-method-boxes-properly: 1.0.0 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - is-string: 1.0.7 - array.prototype.tosorted@1.1.4: dependencies: call-bind: 1.0.7 @@ -7819,6 +7917,11 @@ snapshots: assertion-error@2.0.1: {} + ast-kit@2.1.1: + dependencies: + '@babel/parser': 7.28.0 + pathe: 2.0.3 + ast-types-flow@0.0.8: {} ast-types@0.16.1: @@ -7889,8 +7992,7 @@ snapshots: before-after-hook@4.0.0: {} - binary-extensions@2.2.0: - optional: true + birpc@2.5.0: {} bluebird@2.11.0: {} @@ -7924,8 +8026,6 @@ snapshots: node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.25.0) - buffer-from@1.1.2: {} - builtin-modules@4.0.0: {} bundle-name@4.1.0: @@ -7946,6 +8046,8 @@ snapshots: yargs: 17.7.2 yargs-parser: 21.1.1 + cac@6.7.14: {} + cacache@18.0.4: dependencies: '@npmcli/fs': 3.1.1 @@ -8024,19 +8126,6 @@ snapshots: check-error@2.1.1: {} - chokidar@3.6.0: - dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - optional: true - chokidar@4.0.3: dependencies: readdirp: 4.1.2 @@ -8046,6 +8135,8 @@ snapshots: ci-info@4.2.0: {} + cjs-module-lexer@1.4.3: {} + clean-regexp@1.0.0: dependencies: escape-string-regexp: 1.0.5 @@ -8081,12 +8172,6 @@ snapshots: slice-ansi: 5.0.0 string-width: 7.0.0 - cliui@6.0.0: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 6.2.0 - cliui@7.0.4: dependencies: string-width: 4.2.3 @@ -8099,12 +8184,6 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - clone-deep@4.0.1: - dependencies: - is-plain-object: 2.0.4 - kind-of: 6.0.3 - shallow-clone: 3.0.1 - clone-regexp@3.0.0: dependencies: is-regexp: 3.1.0 @@ -8129,12 +8208,8 @@ snapshots: commander@14.0.0: {} - commander@6.2.1: {} - comment-parser@1.4.1: {} - commondir@1.0.1: {} - compare-func@2.0.0: dependencies: array-ify: 1.0.0 @@ -8142,6 +8217,8 @@ snapshots: concat-map@0.0.1: {} + confbox@0.2.2: {} + config-chain@1.1.13: dependencies: ini: 1.3.8 @@ -8178,8 +8255,6 @@ snapshots: dependencies: browserslist: 4.25.0 - core-js@3.37.1: {} - core-util-is@1.0.2: {} core-util-is@1.0.3: {} @@ -8288,8 +8363,6 @@ snapshots: optionalDependencies: supports-color: 8.1.1 - decamelize@1.2.0: {} - decamelize@4.0.0: {} decamelize@6.0.0: {} @@ -8323,10 +8396,14 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 + defu@6.1.4: {} + delayed-stream@1.0.0: {} diff@7.0.0: {} + diff@8.0.2: {} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 @@ -8363,6 +8440,8 @@ snapshots: dset@3.1.4: {} + dts-resolver@2.1.1: {} + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -8390,6 +8469,8 @@ snapshots: emojilib@2.4.0: {} + empathic@2.0.0: {} + encoding@0.1.13: dependencies: iconv-lite: 0.6.3 @@ -8532,8 +8613,6 @@ snapshots: unbox-primitive: 1.1.0 which-typed-array: 1.1.19 - es-array-method-boxes-properly@1.0.0: {} - es-define-property@1.0.0: dependencies: get-intrinsic: 1.2.4 @@ -8634,7 +8713,7 @@ snapshots: eslint: 9.29.0(jiti@2.4.2) semver: 7.7.2 - eslint-config-canonical@44.9.5(@types/eslint@9.6.1)(@types/node@24.0.3)(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): + eslint-config-canonical@44.9.5(@types/eslint@9.6.1)(@types/node@24.0.3)(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): dependencies: '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.0.3)(eslint@9.29.0(jiti@2.4.2))(graphql@16.11.0)(typescript@5.8.3) '@next/eslint-plugin-next': 15.3.3 @@ -8644,13 +8723,13 @@ snapshots: '@vitest/eslint-plugin': 1.2.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) eslint: 9.29.0(jiti@2.4.2) eslint-config-prettier: 10.1.5(eslint@9.29.0(jiti@2.4.2)) - eslint-import-resolver-typescript: 4.4.2(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 4.4.2(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) eslint-plugin-ava: 15.0.1(eslint@9.29.0(jiti@2.4.2)) - eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) eslint-plugin-eslint-comments: 3.2.0(eslint@9.29.0(jiti@2.4.2)) eslint-plugin-fp: 2.3.0(eslint@9.29.0(jiti@2.4.2)) eslint-plugin-functional: 9.0.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - eslint-plugin-import: eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) eslint-plugin-jest: 28.12.0(@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) eslint-plugin-jsdoc: 50.6.17(eslint@9.29.0(jiti@2.4.2)) eslint-plugin-jsonc: 2.20.1(eslint@9.29.0(jiti@2.4.2)) @@ -8706,12 +8785,12 @@ snapshots: optionalDependencies: unrs-resolver: 1.7.8 - eslint-import-context@0.1.8(unrs-resolver@1.9.0): + eslint-import-context@0.1.9(unrs-resolver@1.11.1): dependencies: get-tsconfig: 4.10.1 - stable-hash-x: 0.1.1 + stable-hash-x: 0.2.0 optionalDependencies: - unrs-resolver: 1.9.0 + unrs-resolver: 1.11.1 eslint-import-resolver-node@0.3.9: dependencies: @@ -8722,7 +8801,7 @@ snapshots: - supports-color optional: true - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.1(supports-color@8.1.1) @@ -8731,14 +8810,14 @@ snapshots: is-bun-module: 2.0.0 stable-hash: 0.0.5 tinyglobby: 0.2.14 - unrs-resolver: 1.9.0 + unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) - eslint-plugin-import-x: 4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@4.4.2(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)): + eslint-import-resolver-typescript@4.4.2(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)): dependencies: debug: 4.4.1(supports-color@8.1.1) eslint: 9.29.0(jiti@2.4.2) @@ -8749,8 +8828,8 @@ snapshots: tinyglobby: 0.2.14 unrs-resolver: 1.7.8 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) - eslint-plugin-import-x: 4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color @@ -8760,14 +8839,14 @@ snapshots: esquery: 1.6.0 jsonc-eslint-parser: 2.4.0 - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) eslint: 9.29.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color @@ -8783,14 +8862,14 @@ snapshots: pkg-dir: 5.0.0 resolve-from: 5.0.0 - eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): + eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): dependencies: '@typescript-eslint/utils': 8.33.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) array-includes: 3.1.8 debug: 4.4.1(supports-color@8.1.1) doctrine: 3.0.0 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) is-get-set-prop: 1.0.0 is-js-type: 2.0.0 is-obj-prop: 1.0.0 @@ -8845,18 +8924,18 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)): + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)): dependencies: - '@typescript-eslint/types': 8.34.1 + '@typescript-eslint/types': 8.38.0 comment-parser: 1.4.1 debug: 4.4.1(supports-color@8.1.1) eslint: 9.29.0(jiti@2.4.2) - eslint-import-context: 0.1.8(unrs-resolver@1.9.0) + eslint-import-context: 0.1.9(unrs-resolver@1.11.1) is-glob: 4.0.3 minimatch: 10.0.3 semver: 7.7.2 - stable-hash-x: 0.1.1 - unrs-resolver: 1.9.0 + stable-hash-x: 0.2.0 + unrs-resolver: 1.11.1 optionalDependencies: '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) eslint-import-resolver-node: 0.3.9 @@ -9170,8 +9249,8 @@ snapshots: espree@9.6.1: dependencies: - acorn: 8.14.1 - acorn-jsx: 5.3.2(acorn@8.14.1) + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) eslint-visitor-keys: 3.4.3 esprima@4.0.1: {} @@ -9254,6 +9333,8 @@ snapshots: exponential-backoff@3.1.2: optional: true + exsolve@1.0.7: {} + extend@3.0.2: {} extsprintf@1.3.0: {} @@ -9301,6 +9382,8 @@ snapshots: node-domexception: 1.0.0 web-streams-polyfill: 3.2.1 + fflate@0.8.2: {} + figures@2.0.0: dependencies: escape-string-regexp: 1.0.5 @@ -9323,22 +9406,12 @@ snapshots: dependencies: to-regex-range: 5.0.1 - find-cache-dir@2.1.0: - dependencies: - commondir: 1.0.1 - make-dir: 2.1.0 - pkg-dir: 3.0.0 - find-up-simple@1.0.0: {} find-up@2.1.0: dependencies: locate-path: 2.0.0 - find-up@3.0.0: - dependencies: - locate-path: 3.0.0 - find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -9420,13 +9493,8 @@ snapshots: minipass: 7.1.2 optional: true - fs-readdir-recursive@1.1.0: {} - fs.realpath@1.0.0: {} - fsevents@2.3.3: - optional: true - function-bind@1.1.2: {} function-timeout@0.1.1: {} @@ -9730,12 +9798,10 @@ snapshots: highlight.js@10.7.3: {} - homedir-polyfill@1.0.3: - dependencies: - parse-passwd: 1.0.0 - hook-std@3.0.0: {} + hookable@5.5.3: {} + hosted-git-info@7.0.1: dependencies: lru-cache: 10.4.3 @@ -9767,7 +9833,7 @@ snapshots: http-proxy-agent@7.0.2: dependencies: - agent-base: 7.1.3 + agent-base: 7.1.4 debug: 4.4.1(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -9788,7 +9854,7 @@ snapshots: https-proxy-agent@7.0.6: dependencies: - agent-base: 7.1.3 + agent-base: 7.1.4 debug: 4.4.1(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -9907,11 +9973,6 @@ snapshots: dependencies: has-bigints: 1.0.2 - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.2.0 - optional: true - is-boolean-object@1.1.2: dependencies: call-bind: 1.0.7 @@ -10038,10 +10099,6 @@ snapshots: is-plain-obj@4.1.0: {} - is-plain-object@2.0.4: - dependencies: - isobject: 3.0.1 - is-proto-prop@2.0.0: dependencies: lowercase-keys: 1.0.1 @@ -10136,8 +10193,6 @@ snapshots: isexe@3.1.1: optional: true - isobject@3.0.1: {} - isomorphic-ws@5.0.0(ws@8.18.2): dependencies: ws: 8.18.2 @@ -10157,7 +10212,7 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: '@babel/core': 7.27.4 - '@babel/parser': 7.24.7 + '@babel/parser': 7.28.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.7.2 @@ -10200,6 +10255,8 @@ snapshots: js-tokens@4.0.0: {} + js-tokens@9.0.1: {} + js-types@1.0.0: {} js-yaml@3.14.1: @@ -10263,7 +10320,7 @@ snapshots: jsonc-eslint-parser@2.4.0: dependencies: - acorn: 8.14.1 + acorn: 8.15.0 eslint-visitor-keys: 3.4.3 espree: 9.6.1 semver: 7.7.2 @@ -10292,8 +10349,6 @@ snapshots: dependencies: json-buffer: 3.0.1 - kind-of@6.0.3: {} - language-subtag-registry@0.3.22: {} language-tags@1.0.9: @@ -10354,11 +10409,6 @@ snapshots: p-locate: 2.0.0 path-exists: 3.0.0 - locate-path@3.0.0: - dependencies: - p-locate: 3.0.0 - path-exists: 3.0.0 - locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -10424,11 +10474,6 @@ snapshots: dependencies: yallist: 3.1.1 - make-dir@2.1.0: - dependencies: - pify: 4.0.1 - semver: 5.7.2 - make-dir@4.0.0: dependencies: semver: 7.7.2 @@ -10508,10 +10553,6 @@ snapshots: dependencies: '@isaacs/brace-expansion': 5.0.0 - minimatch@3.0.5: - dependencies: - brace-expansion: 1.1.11 - minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -10599,6 +10640,8 @@ snapshots: moment@2.30.1: {} + mri@1.2.0: {} + ms@2.1.3: {} mz@2.7.0: @@ -10607,12 +10650,14 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 - nan@2.22.2: + nan@2.23.0: optional: true nano-spawn@1.0.2: {} - napi-postinstall@0.2.4: {} + napi-postinstall@0.2.5: {} + + napi-postinstall@0.3.2: {} natural-compare@1.4.0: {} @@ -10634,11 +10679,6 @@ snapshots: emojilib: 2.4.0 skin-tone: 2.0.0 - node-environment-flags@1.0.6: - dependencies: - object.getownpropertydescriptors: 2.1.8 - semver: 5.7.2 - node-fetch@3.3.2: dependencies: data-uri-to-buffer: 4.0.1 @@ -10679,9 +10719,6 @@ snapshots: dependencies: remove-trailing-separator: 1.1.0 - normalize-path@3.0.0: - optional: true - normalize-url@8.0.0: {} npm-run-path@5.2.0: @@ -10739,16 +10776,6 @@ snapshots: es-abstract: 1.23.3 es-object-atoms: 1.0.0 - object.getownpropertydescriptors@2.1.8: - dependencies: - array.prototype.reduce: 1.0.7 - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - gopd: 1.0.1 - safe-array-concat: 1.1.2 - object.values@1.2.0: dependencies: call-bind: 1.0.7 @@ -10836,10 +10863,6 @@ snapshots: dependencies: p-limit: 1.3.0 - p-locate@3.0.0: - dependencies: - p-limit: 2.3.0 - p-locate@4.1.0: dependencies: p-limit: 2.3.0 @@ -10863,6 +10886,8 @@ snapshots: package-json-from-dist@1.0.0: {} + package-manager-detector@1.3.0: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -10891,8 +10916,6 @@ snapshots: parse-ms@4.0.0: {} - parse-passwd@1.0.0: {} - parse-statements@1.0.11: {} parse5-htmlparser2-tree-adapter@6.0.1: @@ -10931,6 +10954,8 @@ snapshots: path-type@5.0.0: {} + pathe@2.0.3: {} + pathval@2.0.0: {} performance-now@2.1.0: {} @@ -10945,23 +10970,21 @@ snapshots: pify@3.0.0: {} - pify@4.0.1: {} - - pirates@4.0.6: {} - pkg-conf@2.1.0: dependencies: find-up: 2.1.0 load-json-file: 4.0.0 - pkg-dir@3.0.0: - dependencies: - find-up: 3.0.0 - pkg-dir@5.0.0: dependencies: find-up: 5.0.0 + pkg-types@2.2.0: + dependencies: + confbox: 0.2.2 + exsolve: 1.0.7 + pathe: 2.0.3 + pluralize@8.0.0: {} possible-typed-array-names@1.0.0: {} @@ -11007,10 +11030,19 @@ snapshots: psl@1.9.0: {} + publint@0.3.12: + dependencies: + '@publint/pack': 0.1.2 + package-manager-detector: 1.3.0 + picocolors: 1.1.1 + sade: 1.8.1 + punycode@2.3.1: {} qs@6.5.3: {} + quansync@0.2.10: {} + queue-microtask@1.2.3: {} rambda@7.5.0: {} @@ -11033,7 +11065,7 @@ snapshots: re2@1.20.9: dependencies: install-artifact-from-github: 1.4.0 - nan: 2.22.2 + nan: 2.23.0 node-gyp: 10.3.1 transitivePeerDependencies: - supports-color @@ -11071,11 +11103,6 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 - readdirp@3.6.0: - dependencies: - picomatch: 2.3.1 - optional: true - readdirp@4.1.2: {} recast@0.23.11: @@ -11111,8 +11138,6 @@ snapshots: regenerate@1.4.2: {} - regenerator-runtime@0.14.1: {} - regexp-ast-analysis@0.7.1: dependencies: '@eslint-community/regexpp': 4.12.1 @@ -11170,12 +11195,6 @@ snapshots: remove-trailing-separator@1.1.0: {} - replace@1.2.2: - dependencies: - chalk: 2.4.2 - minimatch: 3.0.5 - yargs: 15.4.1 - req-all@0.1.0: {} request@2.88.2: @@ -11203,8 +11222,6 @@ snapshots: require-directory@2.1.1: {} - require-main-filename@2.0.0: {} - requireindex@1.1.0: {} resolve-from@4.0.0: {} @@ -11248,23 +11265,61 @@ snapshots: dependencies: glob: 7.2.3 - rimraf@6.0.1: - dependencies: - glob: 11.0.3 - package-json-from-dist: 1.0.0 - roarr@7.21.1: dependencies: fast-printf: 1.6.9 safe-stable-stringify: 2.4.3 semver-compare: 1.0.0 + rolldown-plugin-dts@0.15.6(rolldown@1.0.0-beta.31)(typescript@5.8.3): + dependencies: + '@babel/generator': 7.28.0 + '@babel/parser': 7.28.0 + '@babel/types': 7.28.2 + ast-kit: 2.1.1 + birpc: 2.5.0 + debug: 4.4.1(supports-color@8.1.1) + dts-resolver: 2.1.1 + get-tsconfig: 4.10.1 + rolldown: 1.0.0-beta.31 + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - oxc-resolver + - supports-color + + rolldown@1.0.0-beta.31: + dependencies: + '@oxc-project/runtime': 0.80.0 + '@oxc-project/types': 0.80.0 + '@rolldown/pluginutils': 1.0.0-beta.31 + ansis: 4.1.0 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.0-beta.31 + '@rolldown/binding-darwin-arm64': 1.0.0-beta.31 + '@rolldown/binding-darwin-x64': 1.0.0-beta.31 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.31 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.31 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.31 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.31 + '@rolldown/binding-linux-arm64-ohos': 1.0.0-beta.31 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.31 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.31 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.31 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.31 + '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.31 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.31 + run-applescript@7.0.0: {} run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 + sade@1.8.1: + dependencies: + mri: 1.2.0 + safe-array-concat@1.1.2: dependencies: call-bind: 1.0.7 @@ -11354,8 +11409,6 @@ snapshots: semver-regex@4.0.5: {} - semver@5.7.2: {} - semver@6.3.1: {} semver@7.7.2: {} @@ -11364,8 +11417,6 @@ snapshots: dependencies: randombytes: 2.1.0 - set-blocking@2.0.0: {} - set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -11388,10 +11439,6 @@ snapshots: es-errors: 1.3.0 es-object-atoms: 1.1.1 - shallow-clone@3.0.1: - dependencies: - kind-of: 6.0.3 - shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -11447,8 +11494,6 @@ snapshots: dependencies: unicode-emoji-modifier-base: 1.0.0 - slash@2.0.0: {} - slash@3.0.0: {} slash@5.1.0: {} @@ -11468,24 +11513,19 @@ snapshots: socks-proxy-agent@8.0.5: dependencies: - agent-base: 7.1.3 + agent-base: 7.1.4 debug: 4.4.1(supports-color@8.1.1) - socks: 2.8.5 + socks: 2.8.6 transitivePeerDependencies: - supports-color optional: true - socks@2.8.5: + socks@2.8.6: dependencies: ip-address: 9.0.5 smart-buffer: 4.2.0 optional: true - source-map-support@0.5.21: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - source-map@0.6.1: {} source-map@0.7.4: @@ -11538,7 +11578,7 @@ snapshots: minipass: 7.1.2 optional: true - stable-hash-x@0.1.1: {} + stable-hash-x@0.2.0: {} stable-hash@0.0.5: {} @@ -11771,6 +11811,8 @@ snapshots: tiny-invariant@1.3.3: {} + tinyexec@1.0.1: {} + tinyglobby@0.2.14: dependencies: fdir: 6.4.5(picomatch@4.0.2) @@ -11778,8 +11820,6 @@ snapshots: tlds@1.248.0: {} - to-fast-properties@2.0.0: {} - to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -11793,6 +11833,8 @@ snapshots: traverse@0.6.8: {} + tree-kill@1.2.2: {} + ts-api-utils@1.0.3(typescript@5.8.3): dependencies: typescript: 5.8.3 @@ -11812,6 +11854,33 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 + tsdown@0.13.4(@arethetypeswrong/core@0.18.2)(publint@0.3.12)(typescript@5.8.3)(unplugin-unused@0.5.1): + dependencies: + ansis: 4.1.0 + cac: 6.7.14 + chokidar: 4.0.3 + debug: 4.4.1(supports-color@8.1.1) + diff: 8.0.2 + empathic: 2.0.0 + hookable: 5.5.3 + rolldown: 1.0.0-beta.31 + rolldown-plugin-dts: 0.15.6(rolldown@1.0.0-beta.31)(typescript@5.8.3) + semver: 7.7.2 + tinyexec: 1.0.1 + tinyglobby: 0.2.14 + tree-kill: 1.2.2 + unconfig: 7.3.2 + optionalDependencies: + '@arethetypeswrong/core': 0.18.2 + publint: 0.3.12 + typescript: 5.8.3 + unplugin-unused: 0.5.1 + transitivePeerDependencies: + - '@typescript/native-preview' + - oxc-resolver + - supports-color + - vue-tsc + tslib@2.8.1: {} tunnel-agent@0.6.0: @@ -11911,6 +11980,8 @@ snapshots: transitivePeerDependencies: - supports-color + typescript@5.6.1-rc: {} + typescript@5.8.3: {} uglify-js@3.17.4: @@ -11930,6 +12001,13 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 + unconfig@7.3.2: + dependencies: + '@quansync/fs': 0.1.3 + defu: 6.1.4 + jiti: 2.4.2 + quansync: 0.2.10 + undici-types@7.8.0: {} unicode-canonical-property-names-ecmascript@2.0.0: {} @@ -11971,9 +12049,46 @@ snapshots: dependencies: normalize-path: 2.1.1 + unplugin-unused@0.5.1: + dependencies: + js-tokens: 9.0.1 + picocolors: 1.1.1 + pkg-types: 2.2.0 + unplugin: 2.3.5 + + unplugin@2.3.5: + dependencies: + acorn: 8.15.0 + picomatch: 4.0.2 + webpack-virtual-modules: 0.6.2 + + unrs-resolver@1.11.1: + dependencies: + napi-postinstall: 0.3.2 + optionalDependencies: + '@unrs/resolver-binding-android-arm-eabi': 1.11.1 + '@unrs/resolver-binding-android-arm64': 1.11.1 + '@unrs/resolver-binding-darwin-arm64': 1.11.1 + '@unrs/resolver-binding-darwin-x64': 1.11.1 + '@unrs/resolver-binding-freebsd-x64': 1.11.1 + '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.1 + '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.1 + '@unrs/resolver-binding-linux-arm64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-arm64-musl': 1.11.1 + '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-riscv64-musl': 1.11.1 + '@unrs/resolver-binding-linux-s390x-gnu': 1.11.1 + '@unrs/resolver-binding-linux-x64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-x64-musl': 1.11.1 + '@unrs/resolver-binding-wasm32-wasi': 1.11.1 + '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1 + '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 + '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 + unrs-resolver@1.7.8: dependencies: - napi-postinstall: 0.2.4 + napi-postinstall: 0.2.5 optionalDependencies: '@unrs/resolver-binding-darwin-arm64': 1.7.8 '@unrs/resolver-binding-darwin-x64': 1.7.8 @@ -11993,30 +12108,6 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.7.8 '@unrs/resolver-binding-win32-x64-msvc': 1.7.8 - unrs-resolver@1.9.0: - dependencies: - napi-postinstall: 0.2.4 - optionalDependencies: - '@unrs/resolver-binding-android-arm-eabi': 1.9.0 - '@unrs/resolver-binding-android-arm64': 1.9.0 - '@unrs/resolver-binding-darwin-arm64': 1.9.0 - '@unrs/resolver-binding-darwin-x64': 1.9.0 - '@unrs/resolver-binding-freebsd-x64': 1.9.0 - '@unrs/resolver-binding-linux-arm-gnueabihf': 1.9.0 - '@unrs/resolver-binding-linux-arm-musleabihf': 1.9.0 - '@unrs/resolver-binding-linux-arm64-gnu': 1.9.0 - '@unrs/resolver-binding-linux-arm64-musl': 1.9.0 - '@unrs/resolver-binding-linux-ppc64-gnu': 1.9.0 - '@unrs/resolver-binding-linux-riscv64-gnu': 1.9.0 - '@unrs/resolver-binding-linux-riscv64-musl': 1.9.0 - '@unrs/resolver-binding-linux-s390x-gnu': 1.9.0 - '@unrs/resolver-binding-linux-x64-gnu': 1.9.0 - '@unrs/resolver-binding-linux-x64-musl': 1.9.0 - '@unrs/resolver-binding-wasm32-wasi': 1.9.0 - '@unrs/resolver-binding-win32-arm64-msvc': 1.9.0 - '@unrs/resolver-binding-win32-ia32-msvc': 1.9.0 - '@unrs/resolver-binding-win32-x64-msvc': 1.9.0 - update-browserslist-db@1.1.3(browserslist@4.25.0): dependencies: browserslist: 4.25.0 @@ -12046,19 +12137,17 @@ snapshots: v8-to-istanbul@9.2.0: dependencies: - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.29 '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 - v8flags@3.2.0: - dependencies: - homedir-polyfill: 1.0.3 - validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 + validate-npm-package-name@5.0.1: {} + verror@1.10.0: dependencies: assert-plus: 1.0.0 @@ -12067,6 +12156,8 @@ snapshots: web-streams-polyfill@3.2.1: {} + webpack-virtual-modules@0.6.2: {} + whatwg-mimetype@4.0.0: {} whatwg-url-compat@0.6.5: @@ -12112,8 +12203,6 @@ snapshots: is-weakmap: 2.0.2 is-weakset: 2.0.4 - which-module@2.0.1: {} - which-typed-array@1.1.15: dependencies: available-typed-arrays: 1.0.7 @@ -12147,12 +12236,6 @@ snapshots: workerpool@9.3.2: {} - wrap-ansi@6.2.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 @@ -12181,8 +12264,6 @@ snapshots: xtend@4.0.2: {} - y18n@4.0.3: {} - y18n@5.0.8: {} yallist@3.1.1: {} @@ -12197,11 +12278,6 @@ snapshots: yaml@2.8.0: {} - yargs-parser@18.1.3: - dependencies: - camelcase: 5.3.1 - decamelize: 1.2.0 - yargs-parser@20.2.9: {} yargs-parser@21.1.1: {} @@ -12213,20 +12289,6 @@ snapshots: flat: 5.0.2 is-plain-obj: 2.1.0 - yargs@15.4.1: - dependencies: - cliui: 6.0.0 - decamelize: 1.2.0 - find-up: 4.1.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - require-main-filename: 2.0.0 - set-blocking: 2.0.0 - string-width: 4.2.3 - which-module: 2.0.1 - y18n: 4.0.3 - yargs-parser: 18.1.3 - yargs@16.2.0: dependencies: cliui: 7.0.4 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 7263746d3..498bde719 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,5 +1,6 @@ ignoredBuiltDependencies: - core-js - core-js-pure + - unrs-resolver shellEmulator: true diff --git a/src/bin/generateOptions.mjs b/src/bin/generateOptions.js similarity index 100% rename from src/bin/generateOptions.mjs rename to src/bin/generateOptions.js diff --git a/src/bin/generateRule.js b/src/bin/generateRule.js index 7d78be2a0..ef161fc61 100644 --- a/src/bin/generateRule.js +++ b/src/bin/generateRule.js @@ -250,21 +250,21 @@ export default iterateJsdoc(({ newLine: `import ${camelCasedRuleName} from './rules/${camelCasedRuleName}.js';`, oldIsCamel: true, oldRegex: /\nimport (?[^ ]*) from '.\/rules\/\1\.js';/gv, - path: './src/index.js', + path: './src/plugin.js', }); await replaceInOrder({ checkName: 'index recommended', newLine: `${' '.repeat(6)}'jsdoc/${ruleName}': ${recommended ? 'warnOrError' : '\'off\''},`, oldRegex: /\n\s{6}'jsdoc\/(?[^']*)': .*?,/gv, - path: './src/index.js', + path: './src/plugin.js', }); await replaceInOrder({ checkName: 'index rules', newLine: `${' '.repeat(4)}'${ruleName}': ${camelCasedRuleName},`, oldRegex: /\n\s{4}'(?[^']*)': [^,]*,/gv, - path: './src/index.js', + path: './src/plugin.js', }); await import('./generateDocs.js'); diff --git a/src/index.js b/src/index.js index d26b80b58..7a2d009cd 100644 --- a/src/index.js +++ b/src/index.js @@ -1,530 +1,3 @@ -import { - getJsdocProcessorPlugin, -} from './getJsdocProcessorPlugin.js'; -import checkAccess from './rules/checkAccess.js'; -import checkAlignment from './rules/checkAlignment.js'; -import checkExamples from './rules/checkExamples.js'; -import checkIndentation from './rules/checkIndentation.js'; -import checkLineAlignment from './rules/checkLineAlignment.js'; -import checkParamNames from './rules/checkParamNames.js'; -import checkPropertyNames from './rules/checkPropertyNames.js'; -import checkSyntax from './rules/checkSyntax.js'; -import checkTagNames from './rules/checkTagNames.js'; -import checkTemplateNames from './rules/checkTemplateNames.js'; -import checkTypes from './rules/checkTypes.js'; -import checkValues from './rules/checkValues.js'; -import convertToJsdocComments from './rules/convertToJsdocComments.js'; -import emptyTags from './rules/emptyTags.js'; -import implementsOnClasses from './rules/implementsOnClasses.js'; -import importsAsDependencies from './rules/importsAsDependencies.js'; -import informativeDocs from './rules/informativeDocs.js'; -import linesBeforeBlock from './rules/linesBeforeBlock.js'; -import matchDescription from './rules/matchDescription.js'; -import matchName from './rules/matchName.js'; -import multilineBlocks from './rules/multilineBlocks.js'; -import noBadBlocks from './rules/noBadBlocks.js'; -import noBlankBlockDescriptions from './rules/noBlankBlockDescriptions.js'; -import noBlankBlocks from './rules/noBlankBlocks.js'; -import noDefaults from './rules/noDefaults.js'; -import noMissingSyntax from './rules/noMissingSyntax.js'; -import noMultiAsterisks from './rules/noMultiAsterisks.js'; -import noRestrictedSyntax from './rules/noRestrictedSyntax.js'; -import noTypes from './rules/noTypes.js'; -import noUndefinedTypes from './rules/noUndefinedTypes.js'; -import requireAsteriskPrefix from './rules/requireAsteriskPrefix.js'; -import requireDescription from './rules/requireDescription.js'; -import requireDescriptionCompleteSentence from './rules/requireDescriptionCompleteSentence.js'; -import requireExample from './rules/requireExample.js'; -import requireFileOverview from './rules/requireFileOverview.js'; -import requireHyphenBeforeParamDescription from './rules/requireHyphenBeforeParamDescription.js'; -import requireJsdoc from './rules/requireJsdoc.js'; -import requireParam from './rules/requireParam.js'; -import requireParamDescription from './rules/requireParamDescription.js'; -import requireParamName from './rules/requireParamName.js'; -import requireParamType from './rules/requireParamType.js'; -import requireProperty from './rules/requireProperty.js'; -import requirePropertyDescription from './rules/requirePropertyDescription.js'; -import requirePropertyName from './rules/requirePropertyName.js'; -import requirePropertyType from './rules/requirePropertyType.js'; -import requireReturns from './rules/requireReturns.js'; -import requireReturnsCheck from './rules/requireReturnsCheck.js'; -import requireReturnsDescription from './rules/requireReturnsDescription.js'; -import requireReturnsType from './rules/requireReturnsType.js'; -import requireTemplate from './rules/requireTemplate.js'; -import requireThrows from './rules/requireThrows.js'; -import requireYields from './rules/requireYields.js'; -import requireYieldsCheck from './rules/requireYieldsCheck.js'; -import sortTags from './rules/sortTags.js'; -import tagLines from './rules/tagLines.js'; -import textEscaping from './rules/textEscaping.js'; -import validTypes from './rules/validTypes.js'; - -/* eslint-disable jsdoc/valid-types -- Bug */ -/** - * @typedef {"recommended" | "stylistic" | "contents" | "logical" | "requirements"} ConfigGroups - * @typedef {"" | "-typescript" | "-typescript-flavor"} ConfigVariants - * @typedef {"" | "-error"} ErrorLevelVariants - * @type {import('eslint').ESLint.Plugin & { - * configs: Record<`flat/${ConfigGroups}${ConfigVariants}${ErrorLevelVariants}`, - * import('eslint').Linter.Config> - * }} - */ -const index = { - /* eslint-enable jsdoc/valid-types -- Bug */ - // @ts-expect-error Ok - configs: {}, - rules: { - 'check-access': checkAccess, - 'check-alignment': checkAlignment, - 'check-examples': checkExamples, - 'check-indentation': checkIndentation, - 'check-line-alignment': checkLineAlignment, - 'check-param-names': checkParamNames, - 'check-property-names': checkPropertyNames, - 'check-syntax': checkSyntax, - 'check-tag-names': checkTagNames, - 'check-template-names': checkTemplateNames, - 'check-types': checkTypes, - 'check-values': checkValues, - 'convert-to-jsdoc-comments': convertToJsdocComments, - 'empty-tags': emptyTags, - 'implements-on-classes': implementsOnClasses, - 'imports-as-dependencies': importsAsDependencies, - 'informative-docs': informativeDocs, - 'lines-before-block': linesBeforeBlock, - 'match-description': matchDescription, - 'match-name': matchName, - 'multiline-blocks': multilineBlocks, - 'no-bad-blocks': noBadBlocks, - 'no-blank-block-descriptions': noBlankBlockDescriptions, - 'no-blank-blocks': noBlankBlocks, - 'no-defaults': noDefaults, - 'no-missing-syntax': noMissingSyntax, - 'no-multi-asterisks': noMultiAsterisks, - 'no-restricted-syntax': noRestrictedSyntax, - 'no-types': noTypes, - 'no-undefined-types': noUndefinedTypes, - 'require-asterisk-prefix': requireAsteriskPrefix, - 'require-description': requireDescription, - 'require-description-complete-sentence': requireDescriptionCompleteSentence, - 'require-example': requireExample, - 'require-file-overview': requireFileOverview, - 'require-hyphen-before-param-description': requireHyphenBeforeParamDescription, - 'require-jsdoc': requireJsdoc, - 'require-param': requireParam, - 'require-param-description': requireParamDescription, - 'require-param-name': requireParamName, - 'require-param-type': requireParamType, - 'require-property': requireProperty, - 'require-property-description': requirePropertyDescription, - 'require-property-name': requirePropertyName, - 'require-property-type': requirePropertyType, - 'require-returns': requireReturns, - 'require-returns-check': requireReturnsCheck, - 'require-returns-description': requireReturnsDescription, - 'require-returns-type': requireReturnsType, - 'require-template': requireTemplate, - 'require-throws': requireThrows, - 'require-yields': requireYields, - 'require-yields-check': requireYieldsCheck, - 'sort-tags': sortTags, - 'tag-lines': tagLines, - 'text-escaping': textEscaping, - 'valid-types': validTypes, - }, -}; - -/** - * @param {"warn"|"error"} warnOrError - * @param {string} [flatName] - * @returns {import('eslint').Linter.FlatConfig} - */ -const createRecommendedRuleset = (warnOrError, flatName) => { - return { - ...(flatName ? { - name: 'jsdoc/' + flatName, - } : {}), - // @ts-expect-error Ok - plugins: - flatName ? { - jsdoc: index, - } : [ - 'jsdoc', - ], - rules: { - 'jsdoc/check-access': warnOrError, - 'jsdoc/check-alignment': warnOrError, - 'jsdoc/check-examples': 'off', - 'jsdoc/check-indentation': 'off', - 'jsdoc/check-line-alignment': 'off', - 'jsdoc/check-param-names': warnOrError, - 'jsdoc/check-property-names': warnOrError, - 'jsdoc/check-syntax': 'off', - 'jsdoc/check-tag-names': warnOrError, - 'jsdoc/check-template-names': 'off', - 'jsdoc/check-types': warnOrError, - 'jsdoc/check-values': warnOrError, - 'jsdoc/convert-to-jsdoc-comments': 'off', - 'jsdoc/empty-tags': warnOrError, - 'jsdoc/implements-on-classes': warnOrError, - 'jsdoc/imports-as-dependencies': 'off', - 'jsdoc/informative-docs': 'off', - 'jsdoc/lines-before-block': 'off', - 'jsdoc/match-description': 'off', - 'jsdoc/match-name': 'off', - 'jsdoc/multiline-blocks': warnOrError, - 'jsdoc/no-bad-blocks': 'off', - 'jsdoc/no-blank-block-descriptions': 'off', - 'jsdoc/no-blank-blocks': 'off', - 'jsdoc/no-defaults': warnOrError, - 'jsdoc/no-missing-syntax': 'off', - 'jsdoc/no-multi-asterisks': warnOrError, - 'jsdoc/no-restricted-syntax': 'off', - 'jsdoc/no-types': 'off', - 'jsdoc/no-undefined-types': warnOrError, - 'jsdoc/require-asterisk-prefix': 'off', - 'jsdoc/require-description': 'off', - 'jsdoc/require-description-complete-sentence': 'off', - 'jsdoc/require-example': 'off', - 'jsdoc/require-file-overview': 'off', - 'jsdoc/require-hyphen-before-param-description': 'off', - 'jsdoc/require-jsdoc': warnOrError, - 'jsdoc/require-param': warnOrError, - 'jsdoc/require-param-description': warnOrError, - 'jsdoc/require-param-name': warnOrError, - 'jsdoc/require-param-type': warnOrError, - 'jsdoc/require-property': warnOrError, - 'jsdoc/require-property-description': warnOrError, - 'jsdoc/require-property-name': warnOrError, - 'jsdoc/require-property-type': warnOrError, - 'jsdoc/require-returns': warnOrError, - 'jsdoc/require-returns-check': warnOrError, - 'jsdoc/require-returns-description': warnOrError, - 'jsdoc/require-returns-type': warnOrError, - 'jsdoc/require-template': 'off', - 'jsdoc/require-throws': 'off', - 'jsdoc/require-yields': warnOrError, - 'jsdoc/require-yields-check': warnOrError, - 'jsdoc/sort-tags': 'off', - 'jsdoc/tag-lines': warnOrError, - 'jsdoc/text-escaping': 'off', - 'jsdoc/valid-types': warnOrError, - }, - }; -}; - -/** - * @param {"warn"|"error"} warnOrError - * @param {string} [flatName] - * @returns {import('eslint').Linter.FlatConfig} - */ -const createRecommendedTypeScriptRuleset = (warnOrError, flatName) => { - const ruleset = createRecommendedRuleset(warnOrError, flatName); - - return { - ...ruleset, - rules: { - ...ruleset.rules, - /* eslint-disable @stylistic/indent -- Extra indent to avoid use by auto-rule-editing */ - 'jsdoc/check-tag-names': [ - warnOrError, { - typed: true, - }, - ], - 'jsdoc/no-types': warnOrError, - 'jsdoc/no-undefined-types': 'off', - 'jsdoc/require-param-type': 'off', - 'jsdoc/require-property-type': 'off', - 'jsdoc/require-returns-type': 'off', - /* eslint-enable @stylistic/indent */ - }, - }; -}; - -/** - * @param {"warn"|"error"} warnOrError - * @param {string} [flatName] - * @returns {import('eslint').Linter.FlatConfig} - */ -const createRecommendedTypeScriptFlavorRuleset = (warnOrError, flatName) => { - const ruleset = createRecommendedRuleset(warnOrError, flatName); - - return { - ...ruleset, - rules: { - ...ruleset.rules, - /* eslint-disable @stylistic/indent -- Extra indent to avoid use by auto-rule-editing */ - 'jsdoc/no-undefined-types': 'off', - /* eslint-enable @stylistic/indent */ - }, - }; -}; - -/** - * @param {(string | unknown[])[]} ruleNames - */ -const createStandaloneRulesetFactory = (ruleNames) => { - /** - * @param {"warn"|"error"} warnOrError - * @param {string} [flatName] - * @returns {import('eslint').Linter.FlatConfig} - */ - return (warnOrError, flatName) => { - return { - name: 'jsdoc/' + flatName, - plugins: { - jsdoc: index, - }, - rules: Object.fromEntries( - ruleNames.map( - (ruleName) => { - return (typeof ruleName === 'string' ? - [ - ruleName, warnOrError, - ] : - [ - ruleName[0], [ - warnOrError, ...ruleName.slice(1), - ], - ]); - }, - ), - ), - }; - }; -}; - -const contentsRules = [ - 'jsdoc/informative-docs', - 'jsdoc/match-description', - 'jsdoc/no-blank-block-descriptions', - 'jsdoc/no-blank-blocks', - [ - 'jsdoc/text-escaping', { - escapeHTML: true, - }, - ], -]; - -const createContentsTypescriptRuleset = createStandaloneRulesetFactory(contentsRules); - -const createContentsTypescriptFlavorRuleset = createStandaloneRulesetFactory(contentsRules); - -const logicalRules = [ - 'jsdoc/check-access', - 'jsdoc/check-param-names', - 'jsdoc/check-property-names', - 'jsdoc/check-syntax', - 'jsdoc/check-tag-names', - 'jsdoc/check-template-names', - 'jsdoc/check-types', - 'jsdoc/check-values', - 'jsdoc/empty-tags', - 'jsdoc/implements-on-classes', - 'jsdoc/require-returns-check', - 'jsdoc/require-yields-check', - 'jsdoc/no-bad-blocks', - 'jsdoc/no-defaults', - 'jsdoc/no-types', - 'jsdoc/no-undefined-types', - 'jsdoc/valid-types', -]; - -const createLogicalTypescriptRuleset = createStandaloneRulesetFactory(logicalRules); - -const createLogicalTypescriptFlavorRuleset = createStandaloneRulesetFactory(logicalRules); - -const requirementsRules = [ - 'jsdoc/require-example', - 'jsdoc/require-jsdoc', - 'jsdoc/require-param', - 'jsdoc/require-param-description', - 'jsdoc/require-param-name', - 'jsdoc/require-property', - 'jsdoc/require-property-description', - 'jsdoc/require-property-name', - 'jsdoc/require-returns', - 'jsdoc/require-returns-description', - 'jsdoc/require-yields', -]; - -const createRequirementsTypeScriptRuleset = createStandaloneRulesetFactory(requirementsRules); - -const createRequirementsTypeScriptFlavorRuleset = createStandaloneRulesetFactory([ - ...requirementsRules, - 'jsdoc/require-param-type', - 'jsdoc/require-property-type', - 'jsdoc/require-returns-type', - 'jsdoc/require-template', -]); - -const stylisticRules = [ - 'jsdoc/check-alignment', - 'jsdoc/check-line-alignment', - 'jsdoc/lines-before-block', - 'jsdoc/multiline-blocks', - 'jsdoc/no-multi-asterisks', - 'jsdoc/require-asterisk-prefix', - [ - 'jsdoc/require-hyphen-before-param-description', 'never', - ], - 'jsdoc/tag-lines', -]; - -const createStylisticTypeScriptRuleset = createStandaloneRulesetFactory(stylisticRules); - -const createStylisticTypeScriptFlavorRuleset = createStandaloneRulesetFactory(stylisticRules); - -/* c8 ignore next 3 -- TS */ -if (!index.configs) { - throw new Error('TypeScript guard'); -} - -index.configs.recommended = createRecommendedRuleset('warn'); -index.configs['recommended-error'] = createRecommendedRuleset('error'); -index.configs['recommended-typescript'] = createRecommendedTypeScriptRuleset('warn'); -index.configs['recommended-typescript-error'] = createRecommendedTypeScriptRuleset('error'); -index.configs['recommended-typescript-flavor'] = createRecommendedTypeScriptFlavorRuleset('warn'); -index.configs['recommended-typescript-flavor-error'] = createRecommendedTypeScriptFlavorRuleset('error'); - -index.configs['flat/recommended'] = createRecommendedRuleset('warn', 'flat/recommended'); -index.configs['flat/recommended-error'] = createRecommendedRuleset('error', 'flat/recommended-error'); -index.configs['flat/recommended-typescript'] = createRecommendedTypeScriptRuleset('warn', 'flat/recommended-typescript'); -index.configs['flat/recommended-typescript-error'] = createRecommendedTypeScriptRuleset('error', 'flat/recommended-typescript-error'); -index.configs['flat/recommended-typescript-flavor'] = createRecommendedTypeScriptFlavorRuleset('warn', 'flat/recommended-typescript-flavor'); -index.configs['flat/recommended-typescript-flavor-error'] = createRecommendedTypeScriptFlavorRuleset('error', 'flat/recommended-typescript-flavor-error'); - -index.configs['flat/contents-typescript'] = createContentsTypescriptRuleset('warn', 'flat/contents-typescript'); -index.configs['flat/contents-typescript-error'] = createContentsTypescriptRuleset('error', 'flat/contents-typescript-error'); -index.configs['flat/contents-typescript-flavor'] = createContentsTypescriptFlavorRuleset('warn', 'flat/contents-typescript-flavor'); -index.configs['flat/contents-typescript-flavor-error'] = createContentsTypescriptFlavorRuleset('error', 'flat/contents-typescript-error-flavor'); -index.configs['flat/logical-typescript'] = createLogicalTypescriptRuleset('warn', 'flat/logical-typescript'); -index.configs['flat/logical-typescript-error'] = createLogicalTypescriptRuleset('error', 'flat/logical-typescript-error'); -index.configs['flat/logical-typescript-flavor'] = createLogicalTypescriptFlavorRuleset('warn', 'flat/logical-typescript-flavor'); -index.configs['flat/logical-typescript-flavor-error'] = createLogicalTypescriptFlavorRuleset('error', 'flat/logical-typescript-error-flavor'); -index.configs['flat/requirements-typescript'] = createRequirementsTypeScriptRuleset('warn', 'flat/requirements-typescript'); -index.configs['flat/requirements-typescript-error'] = createRequirementsTypeScriptRuleset('error', 'flat/requirements-typescript-error'); -index.configs['flat/requirements-typescript-flavor'] = createRequirementsTypeScriptFlavorRuleset('warn', 'flat/requirements-typescript-flavor'); -index.configs['flat/requirements-typescript-flavor-error'] = createRequirementsTypeScriptFlavorRuleset('error', 'flat/requirements-typescript-error-flavor'); -index.configs['flat/stylistic-typescript'] = createStylisticTypeScriptRuleset('warn', 'flat/stylistic-typescript'); -index.configs['flat/stylistic-typescript-error'] = createStylisticTypeScriptRuleset('error', 'flat/stylistic-typescript-error'); -index.configs['flat/stylistic-typescript-flavor'] = createStylisticTypeScriptFlavorRuleset('warn', 'flat/stylistic-typescript-flavor'); -index.configs['flat/stylistic-typescript-flavor-error'] = createStylisticTypeScriptFlavorRuleset('error', 'flat/stylistic-typescript-error-flavor'); - -index.configs.examples = /** @type {import('eslint').Linter.FlatConfig[]} */ ([ - { - files: [ - '**/*.js', - ], - name: 'jsdoc/examples/processor', - plugins: { - examples: getJsdocProcessorPlugin(), - }, - processor: 'examples/examples', - }, - { - files: [ - '**/*.md/*.js', - ], - name: 'jsdoc/examples/rules', - rules: { - // "always" newline rule at end unlikely in sample code - 'eol-last': 0, - - // Wouldn't generally expect example paths to resolve relative to JS file - 'import/no-unresolved': 0, - - // Snippets likely too short to always include import/export info - 'import/unambiguous': 0, - - 'jsdoc/require-file-overview': 0, - - // The end of a multiline comment would end the comment the example is in. - 'jsdoc/require-jsdoc': 0, - - // Unlikely to have inadvertent debugging within examples - 'no-console': 0, - - // Often wish to start `@example` code after newline; also may use - // empty lines for spacing - 'no-multiple-empty-lines': 0, - - // Many variables in examples will be `undefined` - 'no-undef': 0, - - // Common to define variables for clarity without always using them - 'no-unused-vars': 0, - - // See import/no-unresolved - 'node/no-missing-import': 0, - 'node/no-missing-require': 0, - - // Can generally look nicer to pad a little even if code imposes more stringency - 'padded-blocks': 0, - }, - }, -]); - -index.configs['default-expressions'] = /** @type {import('eslint').Linter.FlatConfig[]} */ ([ - { - files: [ - '**/*.js', - ], - name: 'jsdoc/default-expressions/processor', - plugins: { - examples: getJsdocProcessorPlugin({ - checkDefaults: true, - checkParams: true, - checkProperties: true, - }), - }, - processor: 'examples/examples', - }, - { - files: [ - '**/*.jsdoc-defaults', '**/*.jsdoc-params', '**/*.jsdoc-properties', - ], - name: 'jsdoc/default-expressions/rules', - rules: { - ...index.configs.examples[1].rules, - 'chai-friendly/no-unused-expressions': 0, - 'no-empty-function': 0, - 'no-new': 0, - 'no-unused-expressions': 0, - quotes: [ - 'error', 'double', - ], - semi: [ - 'error', 'never', - ], - strict: 0, - }, - }, -]); - -index.configs['examples-and-default-expressions'] = /** @type {import('eslint').Linter.FlatConfig[]} */ ([ - { - name: 'jsdoc/examples-and-default-expressions', - plugins: { - examples: getJsdocProcessorPlugin({ - checkDefaults: true, - checkParams: true, - checkProperties: true, - }), - }, - }, - ...index.configs.examples.map((config) => { - return { - ...config, - plugins: {}, - }; - }), - ...index.configs['default-expressions'].map((config) => { - return { - ...config, - plugins: {}, - }; - }), -]); - -export default index; +export { + default, +} from './plugin.js'; diff --git a/src/plugin.js b/src/plugin.js new file mode 100644 index 000000000..d7d1ae1dc --- /dev/null +++ b/src/plugin.js @@ -0,0 +1,533 @@ +import { + getJsdocProcessorPlugin, +} from './getJsdocProcessorPlugin.js'; +import checkAccess from './rules/checkAccess.js'; +import checkAlignment from './rules/checkAlignment.js'; +import checkExamples from './rules/checkExamples.js'; +import checkIndentation from './rules/checkIndentation.js'; +import checkLineAlignment from './rules/checkLineAlignment.js'; +import checkParamNames from './rules/checkParamNames.js'; +import checkPropertyNames from './rules/checkPropertyNames.js'; +import checkSyntax from './rules/checkSyntax.js'; +import checkTagNames from './rules/checkTagNames.js'; +import checkTemplateNames from './rules/checkTemplateNames.js'; +import checkTypes from './rules/checkTypes.js'; +import checkValues from './rules/checkValues.js'; +import convertToJsdocComments from './rules/convertToJsdocComments.js'; +import emptyTags from './rules/emptyTags.js'; +import implementsOnClasses from './rules/implementsOnClasses.js'; +import importsAsDependencies from './rules/importsAsDependencies.js'; +import informativeDocs from './rules/informativeDocs.js'; +import linesBeforeBlock from './rules/linesBeforeBlock.js'; +import matchDescription from './rules/matchDescription.js'; +import matchName from './rules/matchName.js'; +import multilineBlocks from './rules/multilineBlocks.js'; +import noBadBlocks from './rules/noBadBlocks.js'; +import noBlankBlockDescriptions from './rules/noBlankBlockDescriptions.js'; +import noBlankBlocks from './rules/noBlankBlocks.js'; +import noDefaults from './rules/noDefaults.js'; +import noMissingSyntax from './rules/noMissingSyntax.js'; +import noMultiAsterisks from './rules/noMultiAsterisks.js'; +import noRestrictedSyntax from './rules/noRestrictedSyntax.js'; +import noTypes from './rules/noTypes.js'; +import noUndefinedTypes from './rules/noUndefinedTypes.js'; +import requireAsteriskPrefix from './rules/requireAsteriskPrefix.js'; +import requireDescription from './rules/requireDescription.js'; +import requireDescriptionCompleteSentence from './rules/requireDescriptionCompleteSentence.js'; +import requireExample from './rules/requireExample.js'; +import requireFileOverview from './rules/requireFileOverview.js'; +import requireHyphenBeforeParamDescription from './rules/requireHyphenBeforeParamDescription.js'; +import requireJsdoc from './rules/requireJsdoc.js'; +import requireParam from './rules/requireParam.js'; +import requireParamDescription from './rules/requireParamDescription.js'; +import requireParamName from './rules/requireParamName.js'; +import requireParamType from './rules/requireParamType.js'; +import requireProperty from './rules/requireProperty.js'; +import requirePropertyDescription from './rules/requirePropertyDescription.js'; +import requirePropertyName from './rules/requirePropertyName.js'; +import requirePropertyType from './rules/requirePropertyType.js'; +import requireReturns from './rules/requireReturns.js'; +import requireReturnsCheck from './rules/requireReturnsCheck.js'; +import requireReturnsDescription from './rules/requireReturnsDescription.js'; +import requireReturnsType from './rules/requireReturnsType.js'; +import requireTemplate from './rules/requireTemplate.js'; +import requireThrows from './rules/requireThrows.js'; +import requireYields from './rules/requireYields.js'; +import requireYieldsCheck from './rules/requireYieldsCheck.js'; +import sortTags from './rules/sortTags.js'; +import tagLines from './rules/tagLines.js'; +import textEscaping from './rules/textEscaping.js'; +import validTypes from './rules/validTypes.js'; + +/** + * @typedef {"recommended" | "stylistic" | "contents" | "logical" | "requirements"} ConfigGroups + * @typedef {"" | "-typescript" | "-typescript-flavor"} ConfigVariants + * @typedef {"" | "-error"} ErrorLevelVariants + */ + +/* eslint-disable jsdoc/valid-types -- Bug */ +/** + * @type {import('eslint').ESLint.Plugin & { + * configs: Record<`flat/${ConfigGroups}${ConfigVariants}${ErrorLevelVariants}`, + * import('eslint').Linter.Config> + * }} + */ +/* eslint-enable jsdoc/valid-types -- Bug */ +const plugin = { + // @ts-expect-error Ok + configs: {}, + rules: { + 'check-access': checkAccess, + 'check-alignment': checkAlignment, + 'check-examples': checkExamples, + 'check-indentation': checkIndentation, + 'check-line-alignment': checkLineAlignment, + 'check-param-names': checkParamNames, + 'check-property-names': checkPropertyNames, + 'check-syntax': checkSyntax, + 'check-tag-names': checkTagNames, + 'check-template-names': checkTemplateNames, + 'check-types': checkTypes, + 'check-values': checkValues, + 'convert-to-jsdoc-comments': convertToJsdocComments, + 'empty-tags': emptyTags, + 'implements-on-classes': implementsOnClasses, + 'imports-as-dependencies': importsAsDependencies, + 'informative-docs': informativeDocs, + 'lines-before-block': linesBeforeBlock, + 'match-description': matchDescription, + 'match-name': matchName, + 'multiline-blocks': multilineBlocks, + 'no-bad-blocks': noBadBlocks, + 'no-blank-block-descriptions': noBlankBlockDescriptions, + 'no-blank-blocks': noBlankBlocks, + 'no-defaults': noDefaults, + 'no-missing-syntax': noMissingSyntax, + 'no-multi-asterisks': noMultiAsterisks, + 'no-restricted-syntax': noRestrictedSyntax, + 'no-types': noTypes, + 'no-undefined-types': noUndefinedTypes, + 'require-asterisk-prefix': requireAsteriskPrefix, + 'require-description': requireDescription, + 'require-description-complete-sentence': requireDescriptionCompleteSentence, + 'require-example': requireExample, + 'require-file-overview': requireFileOverview, + 'require-hyphen-before-param-description': requireHyphenBeforeParamDescription, + 'require-jsdoc': requireJsdoc, + 'require-param': requireParam, + 'require-param-description': requireParamDescription, + 'require-param-name': requireParamName, + 'require-param-type': requireParamType, + 'require-property': requireProperty, + 'require-property-description': requirePropertyDescription, + 'require-property-name': requirePropertyName, + 'require-property-type': requirePropertyType, + 'require-returns': requireReturns, + 'require-returns-check': requireReturnsCheck, + 'require-returns-description': requireReturnsDescription, + 'require-returns-type': requireReturnsType, + 'require-template': requireTemplate, + 'require-throws': requireThrows, + 'require-yields': requireYields, + 'require-yields-check': requireYieldsCheck, + 'sort-tags': sortTags, + 'tag-lines': tagLines, + 'text-escaping': textEscaping, + 'valid-types': validTypes, + }, +}; + +/** + * @param {"warn"|"error"} warnOrError + * @param {string} [flatName] + * @returns {import('eslint').Linter.FlatConfig} + */ +const createRecommendedRuleset = (warnOrError, flatName) => { + return { + ...(flatName ? { + name: 'jsdoc/' + flatName, + } : {}), + // @ts-expect-error Ok + plugins: + flatName ? { + jsdoc: plugin, + } : [ + 'jsdoc', + ], + rules: { + 'jsdoc/check-access': warnOrError, + 'jsdoc/check-alignment': warnOrError, + 'jsdoc/check-examples': 'off', + 'jsdoc/check-indentation': 'off', + 'jsdoc/check-line-alignment': 'off', + 'jsdoc/check-param-names': warnOrError, + 'jsdoc/check-property-names': warnOrError, + 'jsdoc/check-syntax': 'off', + 'jsdoc/check-tag-names': warnOrError, + 'jsdoc/check-template-names': 'off', + 'jsdoc/check-types': warnOrError, + 'jsdoc/check-values': warnOrError, + 'jsdoc/convert-to-jsdoc-comments': 'off', + 'jsdoc/empty-tags': warnOrError, + 'jsdoc/implements-on-classes': warnOrError, + 'jsdoc/imports-as-dependencies': 'off', + 'jsdoc/informative-docs': 'off', + 'jsdoc/lines-before-block': 'off', + 'jsdoc/match-description': 'off', + 'jsdoc/match-name': 'off', + 'jsdoc/multiline-blocks': warnOrError, + 'jsdoc/no-bad-blocks': 'off', + 'jsdoc/no-blank-block-descriptions': 'off', + 'jsdoc/no-blank-blocks': 'off', + 'jsdoc/no-defaults': warnOrError, + 'jsdoc/no-missing-syntax': 'off', + 'jsdoc/no-multi-asterisks': warnOrError, + 'jsdoc/no-restricted-syntax': 'off', + 'jsdoc/no-types': 'off', + 'jsdoc/no-undefined-types': warnOrError, + 'jsdoc/require-asterisk-prefix': 'off', + 'jsdoc/require-description': 'off', + 'jsdoc/require-description-complete-sentence': 'off', + 'jsdoc/require-example': 'off', + 'jsdoc/require-file-overview': 'off', + 'jsdoc/require-hyphen-before-param-description': 'off', + 'jsdoc/require-jsdoc': warnOrError, + 'jsdoc/require-param': warnOrError, + 'jsdoc/require-param-description': warnOrError, + 'jsdoc/require-param-name': warnOrError, + 'jsdoc/require-param-type': warnOrError, + 'jsdoc/require-property': warnOrError, + 'jsdoc/require-property-description': warnOrError, + 'jsdoc/require-property-name': warnOrError, + 'jsdoc/require-property-type': warnOrError, + 'jsdoc/require-returns': warnOrError, + 'jsdoc/require-returns-check': warnOrError, + 'jsdoc/require-returns-description': warnOrError, + 'jsdoc/require-returns-type': warnOrError, + 'jsdoc/require-template': 'off', + 'jsdoc/require-throws': 'off', + 'jsdoc/require-yields': warnOrError, + 'jsdoc/require-yields-check': warnOrError, + 'jsdoc/sort-tags': 'off', + 'jsdoc/tag-lines': warnOrError, + 'jsdoc/text-escaping': 'off', + 'jsdoc/valid-types': warnOrError, + }, + }; +}; + +/** + * @param {"warn"|"error"} warnOrError + * @param {string} [flatName] + * @returns {import('eslint').Linter.FlatConfig} + */ +const createRecommendedTypeScriptRuleset = (warnOrError, flatName) => { + const ruleset = createRecommendedRuleset(warnOrError, flatName); + + return { + ...ruleset, + rules: { + ...ruleset.rules, + /* eslint-disable @stylistic/indent -- Extra indent to avoid use by auto-rule-editing */ + 'jsdoc/check-tag-names': [ + warnOrError, { + typed: true, + }, + ], + 'jsdoc/no-types': warnOrError, + 'jsdoc/no-undefined-types': 'off', + 'jsdoc/require-param-type': 'off', + 'jsdoc/require-property-type': 'off', + 'jsdoc/require-returns-type': 'off', + /* eslint-enable @stylistic/indent */ + }, + }; +}; + +/** + * @param {"warn"|"error"} warnOrError + * @param {string} [flatName] + * @returns {import('eslint').Linter.FlatConfig} + */ +const createRecommendedTypeScriptFlavorRuleset = (warnOrError, flatName) => { + const ruleset = createRecommendedRuleset(warnOrError, flatName); + + return { + ...ruleset, + rules: { + ...ruleset.rules, + /* eslint-disable @stylistic/indent -- Extra indent to avoid use by auto-rule-editing */ + 'jsdoc/no-undefined-types': 'off', + /* eslint-enable @stylistic/indent */ + }, + }; +}; + +/** + * @param {(string | unknown[])[]} ruleNames + */ +const createStandaloneRulesetFactory = (ruleNames) => { + /** + * @param {"warn"|"error"} warnOrError + * @param {string} [flatName] + * @returns {import('eslint').Linter.FlatConfig} + */ + return (warnOrError, flatName) => { + return { + name: 'jsdoc/' + flatName, + plugins: { + jsdoc: plugin, + }, + rules: Object.fromEntries( + ruleNames.map( + (ruleName) => { + return (typeof ruleName === 'string' ? + [ + ruleName, warnOrError, + ] : + [ + ruleName[0], [ + warnOrError, ...ruleName.slice(1), + ], + ]); + }, + ), + ), + }; + }; +}; + +const contentsRules = [ + 'jsdoc/informative-docs', + 'jsdoc/match-description', + 'jsdoc/no-blank-block-descriptions', + 'jsdoc/no-blank-blocks', + [ + 'jsdoc/text-escaping', { + escapeHTML: true, + }, + ], +]; + +const createContentsTypescriptRuleset = createStandaloneRulesetFactory(contentsRules); + +const createContentsTypescriptFlavorRuleset = createStandaloneRulesetFactory(contentsRules); + +const logicalRules = [ + 'jsdoc/check-access', + 'jsdoc/check-param-names', + 'jsdoc/check-property-names', + 'jsdoc/check-syntax', + 'jsdoc/check-tag-names', + 'jsdoc/check-template-names', + 'jsdoc/check-types', + 'jsdoc/check-values', + 'jsdoc/empty-tags', + 'jsdoc/implements-on-classes', + 'jsdoc/require-returns-check', + 'jsdoc/require-yields-check', + 'jsdoc/no-bad-blocks', + 'jsdoc/no-defaults', + 'jsdoc/no-types', + 'jsdoc/no-undefined-types', + 'jsdoc/valid-types', +]; + +const createLogicalTypescriptRuleset = createStandaloneRulesetFactory(logicalRules); + +const createLogicalTypescriptFlavorRuleset = createStandaloneRulesetFactory(logicalRules); + +const requirementsRules = [ + 'jsdoc/require-example', + 'jsdoc/require-jsdoc', + 'jsdoc/require-param', + 'jsdoc/require-param-description', + 'jsdoc/require-param-name', + 'jsdoc/require-property', + 'jsdoc/require-property-description', + 'jsdoc/require-property-name', + 'jsdoc/require-returns', + 'jsdoc/require-returns-description', + 'jsdoc/require-yields', +]; + +const createRequirementsTypeScriptRuleset = createStandaloneRulesetFactory(requirementsRules); + +const createRequirementsTypeScriptFlavorRuleset = createStandaloneRulesetFactory([ + ...requirementsRules, + 'jsdoc/require-param-type', + 'jsdoc/require-property-type', + 'jsdoc/require-returns-type', + 'jsdoc/require-template', +]); + +const stylisticRules = [ + 'jsdoc/check-alignment', + 'jsdoc/check-line-alignment', + 'jsdoc/lines-before-block', + 'jsdoc/multiline-blocks', + 'jsdoc/no-multi-asterisks', + 'jsdoc/require-asterisk-prefix', + [ + 'jsdoc/require-hyphen-before-param-description', 'never', + ], + 'jsdoc/tag-lines', +]; + +const createStylisticTypeScriptRuleset = createStandaloneRulesetFactory(stylisticRules); + +const createStylisticTypeScriptFlavorRuleset = createStandaloneRulesetFactory(stylisticRules); + +/* c8 ignore next 3 -- TS */ +if (!plugin.configs) { + throw new Error('TypeScript guard'); +} + +plugin.configs.recommended = createRecommendedRuleset('warn'); +plugin.configs['recommended-error'] = createRecommendedRuleset('error'); +plugin.configs['recommended-typescript'] = createRecommendedTypeScriptRuleset('warn'); +plugin.configs['recommended-typescript-error'] = createRecommendedTypeScriptRuleset('error'); +plugin.configs['recommended-typescript-flavor'] = createRecommendedTypeScriptFlavorRuleset('warn'); +plugin.configs['recommended-typescript-flavor-error'] = createRecommendedTypeScriptFlavorRuleset('error'); + +plugin.configs['flat/recommended'] = createRecommendedRuleset('warn', 'flat/recommended'); +plugin.configs['flat/recommended-error'] = createRecommendedRuleset('error', 'flat/recommended-error'); +plugin.configs['flat/recommended-typescript'] = createRecommendedTypeScriptRuleset('warn', 'flat/recommended-typescript'); +plugin.configs['flat/recommended-typescript-error'] = createRecommendedTypeScriptRuleset('error', 'flat/recommended-typescript-error'); +plugin.configs['flat/recommended-typescript-flavor'] = createRecommendedTypeScriptFlavorRuleset('warn', 'flat/recommended-typescript-flavor'); +plugin.configs['flat/recommended-typescript-flavor-error'] = createRecommendedTypeScriptFlavorRuleset('error', 'flat/recommended-typescript-flavor-error'); + +plugin.configs['flat/contents-typescript'] = createContentsTypescriptRuleset('warn', 'flat/contents-typescript'); +plugin.configs['flat/contents-typescript-error'] = createContentsTypescriptRuleset('error', 'flat/contents-typescript-error'); +plugin.configs['flat/contents-typescript-flavor'] = createContentsTypescriptFlavorRuleset('warn', 'flat/contents-typescript-flavor'); +plugin.configs['flat/contents-typescript-flavor-error'] = createContentsTypescriptFlavorRuleset('error', 'flat/contents-typescript-error-flavor'); +plugin.configs['flat/logical-typescript'] = createLogicalTypescriptRuleset('warn', 'flat/logical-typescript'); +plugin.configs['flat/logical-typescript-error'] = createLogicalTypescriptRuleset('error', 'flat/logical-typescript-error'); +plugin.configs['flat/logical-typescript-flavor'] = createLogicalTypescriptFlavorRuleset('warn', 'flat/logical-typescript-flavor'); +plugin.configs['flat/logical-typescript-flavor-error'] = createLogicalTypescriptFlavorRuleset('error', 'flat/logical-typescript-error-flavor'); +plugin.configs['flat/requirements-typescript'] = createRequirementsTypeScriptRuleset('warn', 'flat/requirements-typescript'); +plugin.configs['flat/requirements-typescript-error'] = createRequirementsTypeScriptRuleset('error', 'flat/requirements-typescript-error'); +plugin.configs['flat/requirements-typescript-flavor'] = createRequirementsTypeScriptFlavorRuleset('warn', 'flat/requirements-typescript-flavor'); +plugin.configs['flat/requirements-typescript-flavor-error'] = createRequirementsTypeScriptFlavorRuleset('error', 'flat/requirements-typescript-error-flavor'); +plugin.configs['flat/stylistic-typescript'] = createStylisticTypeScriptRuleset('warn', 'flat/stylistic-typescript'); +plugin.configs['flat/stylistic-typescript-error'] = createStylisticTypeScriptRuleset('error', 'flat/stylistic-typescript-error'); +plugin.configs['flat/stylistic-typescript-flavor'] = createStylisticTypeScriptFlavorRuleset('warn', 'flat/stylistic-typescript-flavor'); +plugin.configs['flat/stylistic-typescript-flavor-error'] = createStylisticTypeScriptFlavorRuleset('error', 'flat/stylistic-typescript-error-flavor'); + +plugin.configs.examples = /** @type {import('eslint').Linter.FlatConfig[]} */ ([ + { + files: [ + '**/*.js', + ], + name: 'jsdoc/examples/processor', + plugins: { + examples: getJsdocProcessorPlugin(), + }, + processor: 'examples/examples', + }, + { + files: [ + '**/*.md/*.js', + ], + name: 'jsdoc/examples/rules', + rules: { + // "always" newline rule at end unlikely in sample code + 'eol-last': 0, + + // Wouldn't generally expect example paths to resolve relative to JS file + 'import/no-unresolved': 0, + + // Snippets likely too short to always include import/export info + 'import/unambiguous': 0, + + 'jsdoc/require-file-overview': 0, + + // The end of a multiline comment would end the comment the example is in. + 'jsdoc/require-jsdoc': 0, + + // Unlikely to have inadvertent debugging within examples + 'no-console': 0, + + // Often wish to start `@example` code after newline; also may use + // empty lines for spacing + 'no-multiple-empty-lines': 0, + + // Many variables in examples will be `undefined` + 'no-undef': 0, + + // Common to define variables for clarity without always using them + 'no-unused-vars': 0, + + // See import/no-unresolved + 'node/no-missing-import': 0, + 'node/no-missing-require': 0, + + // Can generally look nicer to pad a little even if code imposes more stringency + 'padded-blocks': 0, + }, + }, +]); + +plugin.configs['default-expressions'] = /** @type {import('eslint').Linter.FlatConfig[]} */ ([ + { + files: [ + '**/*.js', + ], + name: 'jsdoc/default-expressions/processor', + plugins: { + examples: getJsdocProcessorPlugin({ + checkDefaults: true, + checkParams: true, + checkProperties: true, + }), + }, + processor: 'examples/examples', + }, + { + files: [ + '**/*.jsdoc-defaults', '**/*.jsdoc-params', '**/*.jsdoc-properties', + ], + name: 'jsdoc/default-expressions/rules', + rules: { + ...plugin.configs.examples[1].rules, + 'chai-friendly/no-unused-expressions': 0, + 'no-empty-function': 0, + 'no-new': 0, + 'no-unused-expressions': 0, + quotes: [ + 'error', 'double', + ], + semi: [ + 'error', 'never', + ], + strict: 0, + }, + }, +]); + +plugin.configs['examples-and-default-expressions'] = /** @type {import('eslint').Linter.FlatConfig[]} */ ([ + { + name: 'jsdoc/examples-and-default-expressions', + plugins: { + examples: getJsdocProcessorPlugin({ + checkDefaults: true, + checkParams: true, + checkProperties: true, + }), + }, + }, + ...plugin.configs.examples.map((config) => { + return { + ...config, + plugins: {}, + }; + }), + ...plugin.configs['default-expressions'].map((config) => { + return { + ...config, + plugins: {}, + }; + }), +]); + +export default plugin; diff --git a/test/rules/index.js b/test/rules/index.js index da65f5995..d650bcea6 100644 --- a/test/rules/index.js +++ b/test/rules/index.js @@ -1,4 +1,4 @@ -import config from '../../src/index.js'; +import config from '../../src/plugin.js'; import camelCase from 'camelcase'; import { ESLint, diff --git a/tsconfig-prod.json b/tsconfig-prod.json deleted file mode 100644 index 7ae6b80fa..000000000 --- a/tsconfig-prod.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "compilerOptions": { - "lib": ["es2023"], - "moduleResolution": "Bundler", - "module": "ESNext", - "allowJs": true, - "checkJs": true, - "noEmit": false, - "emitDeclarationOnly": true, - "declaration": true, - "declarationMap": true, - "strict": true, - "skipLibCheck": true, - "target": "es2024", - "outDir": "dist" - }, - "include": [ - "src/**/*.js" - ], - "exclude": ["node_modules", "src/bin/*.js"] -} diff --git a/tsdown.config.ts b/tsdown.config.ts new file mode 100644 index 000000000..307b15689 --- /dev/null +++ b/tsdown.config.ts @@ -0,0 +1,32 @@ +import { + defineConfig, +} from 'tsdown'; + +export default defineConfig({ + attw: { + level: 'error', + profile: 'node16', + }, + dts: { + sourcemap: true, + }, + entry: [ + './src/index.js', + './src/getJsdocProcessorPlugin.js', + './src/iterateJsdoc.js', + ], + failOnWarn: true, + format: [ + 'es', + 'cjs', + ], + publint: { + level: 'error', + strict: true, + }, + sourcemap: true, + unbundle: true, + unused: { + level: 'error', + }, +}); From 08677282ecab21a6181421368f8f8c451186a402 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 12 Aug 2025 04:01:00 +0800 Subject: [PATCH 033/189] fix(`no-types`, `require-example`, `implements-on-classes`): allow `any` to match function variable declarations; fixes #1446 (#1448) --- docs/rules/no-types.md | 18 +++++++ docs/rules/require-example.md | 9 ++++ src/iterateJsdoc.js | 35 ++++++++++--- src/rules/implementsOnClasses.js | 2 +- src/rules/noTypes.js | 2 +- src/rules/requireExample.js | 2 +- test/rules/assertions/noTypes.js | 68 +++++++++++++++++++++++++ test/rules/assertions/requireExample.js | 39 ++++++++++++++ 8 files changed, 166 insertions(+), 9 deletions(-) diff --git a/docs/rules/no-types.md b/docs/rules/no-types.md index 43a22262e..a5f8ed1e8 100644 --- a/docs/rules/no-types.md +++ b/docs/rules/no-types.md @@ -149,6 +149,24 @@ class Example { x: number; } // Message: Types are not permitted on @property in the supplied context. + +/** + * Returns a Promise... + * + * @param {number} ms - The number of ... + */ +const sleep = (ms: number): Promise => {}; +// "jsdoc/no-types": ["error"|"warn", {"contexts":["any"]}] +// Message: Types are not permitted on @param. + +/** + * Returns a Promise... + * + * @param {number} ms - The number of ... + */ +export const sleep = (ms: number): Promise => {}; +// "jsdoc/no-types": ["error"|"warn", {"contexts":["any"]}] +// Message: Types are not permitted on @param. ```` diff --git a/docs/rules/require-example.md b/docs/rules/require-example.md index b6ff44974..1b88cc22d 100644 --- a/docs/rules/require-example.md +++ b/docs/rules/require-example.md @@ -234,6 +234,15 @@ function quux (someParam) { } // "jsdoc/require-example": ["error"|"warn", {"enableFixer":false}] // Message: Missing JSDoc @example declaration. + +/** + * Returns a Promise... + * + * @param {number} ms - The number of ... + */ +const sleep = (ms: number): Promise => {}; +// "jsdoc/require-example": ["error"|"warn", {"contexts":["any"]}] +// Message: Missing JSDoc @example declaration. ```` diff --git a/src/iterateJsdoc.js b/src/iterateJsdoc.js index 728488b3d..803b34819 100644 --- a/src/iterateJsdoc.js +++ b/src/iterateJsdoc.js @@ -476,6 +476,7 @@ import esquery from 'esquery'; /** * @typedef {BasicUtils & { * isIteratingFunction: IsIteratingFunction, + * isIteratingFunctionOrVariable: IsIteratingFunction, * isVirtualFunction: IsVirtualFunction, * stringify: Stringify, * reportJSDoc: ReportJSDoc, @@ -716,14 +717,36 @@ const getUtils = ( tagNamePreference, } = settings; + const functionTypes = [ + 'ArrowFunctionExpression', + 'FunctionDeclaration', + 'FunctionExpression', + 'MethodDefinition', + ]; + /** @type {IsIteratingFunction} */ utils.isIteratingFunction = () => { - return !iteratingAll || [ - 'ArrowFunctionExpression', - 'FunctionDeclaration', - 'FunctionExpression', - 'MethodDefinition', - ].includes(String(node && node.type)); + return !iteratingAll || functionTypes.includes(String(node?.type)); + }; + + /** @type {IsIteratingFunction} */ + utils.isIteratingFunctionOrVariable = () => { + if (utils.isIteratingFunction()) { + return true; + } + + /** @type {import('estree').VariableDeclarator[]} */ + const declarations = node?.type === 'VariableDeclaration' ? + node.declarations : + (node?.type === 'ExportNamedDeclaration' && node.declaration?.type === 'VariableDeclaration' ? + node.declaration.declarations : + []); + + return declarations.some(({ + init, + }) => { + return functionTypes.includes(String(init?.type)); + }); }; /** @type {IsVirtualFunction} */ diff --git a/src/rules/implementsOnClasses.js b/src/rules/implementsOnClasses.js index 4a3709a28..266c7cab7 100644 --- a/src/rules/implementsOnClasses.js +++ b/src/rules/implementsOnClasses.js @@ -4,7 +4,7 @@ export default iterateJsdoc(({ report, utils, }) => { - const iteratingFunction = utils.isIteratingFunction(); + const iteratingFunction = utils.isIteratingFunctionOrVariable(); if (iteratingFunction) { if (utils.hasATag([ diff --git a/src/rules/noTypes.js b/src/rules/noTypes.js index 9c7244ff0..47aa59ae4 100644 --- a/src/rules/noTypes.js +++ b/src/rules/noTypes.js @@ -14,7 +14,7 @@ export default iterateJsdoc(({ node, utils, }) => { - if (!utils.isIteratingFunction() && !utils.isVirtualFunction()) { + if (!utils.isIteratingFunctionOrVariable() && !utils.isVirtualFunction()) { return; } diff --git a/src/rules/requireExample.js b/src/rules/requireExample.js index 6b35f95ca..e78d95968 100644 --- a/src/rules/requireExample.js +++ b/src/rules/requireExample.js @@ -24,7 +24,7 @@ export default iterateJsdoc(({ }); if (!functionExamples.length) { - if (exemptNoArguments && utils.isIteratingFunction() && + if (exemptNoArguments && utils.isIteratingFunctionOrVariable() && !utils.hasParams() ) { return; diff --git a/test/rules/assertions/noTypes.js b/test/rules/assertions/noTypes.js index 81462d0bd..c092390af 100644 --- a/test/rules/assertions/noTypes.js +++ b/test/rules/assertions/noTypes.js @@ -286,6 +286,74 @@ export default /** @type {import('../index.js').TestCases} */ ({ } `, }, + { + code: ` + /** + * Returns a Promise... + * + * @param {number} ms - The number of ... + */ + const sleep = (ms: number): Promise => {}; + `, + errors: [ + { + line: 5, + message: 'Types are not permitted on @param.', + }, + ], + languageOptions: { + parser: typescriptEslintParser, + }, + options: [ + { + contexts: [ + 'any', + ], + }, + ], + output: ` + /** + * Returns a Promise... + * + * @param ms - The number of ... + */ + const sleep = (ms: number): Promise => {}; + `, + }, + { + code: ` + /** + * Returns a Promise... + * + * @param {number} ms - The number of ... + */ + export const sleep = (ms: number): Promise => {}; + `, + errors: [ + { + line: 5, + message: 'Types are not permitted on @param.', + }, + ], + languageOptions: { + parser: typescriptEslintParser, + }, + options: [ + { + contexts: [ + 'any', + ], + }, + ], + output: ` + /** + * Returns a Promise... + * + * @param ms - The number of ... + */ + export const sleep = (ms: number): Promise => {}; + `, + }, ], valid: [ { diff --git a/test/rules/assertions/requireExample.js b/test/rules/assertions/requireExample.js index c0ecd1fe4..57ad7e4c3 100644 --- a/test/rules/assertions/requireExample.js +++ b/test/rules/assertions/requireExample.js @@ -1,3 +1,7 @@ +import { + parser as typescriptEslintParser, +} from 'typescript-eslint'; + export default /** @type {import('../index.js').TestCases} */ ({ invalid: [ { @@ -378,6 +382,41 @@ function quux () { ], output: null, }, + { + code: ` + /** + * Returns a Promise... + * + * @param {number} ms - The number of ... + */ + const sleep = (ms: number): Promise => {}; + `, + errors: [ + { + line: 2, + message: 'Missing JSDoc @example declaration.', + }, + ], + languageOptions: { + parser: typescriptEslintParser, + }, + options: [ + { + contexts: [ + 'any', + ], + }, + ], + output: ` + /** + * Returns a Promise... + * + * @param {number} ms - The number of ... + * @example + */ + const sleep = (ms: number): Promise => {}; + `, + }, ], valid: [ { From aeb97bfce627062824c60d357626baecc2ea3c9d Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Wed, 13 Aug 2025 10:40:15 +0800 Subject: [PATCH 034/189] fix: revert "fix: move to tsdown for proper types (#1447)" (#1450) BREAKING CHANGE: tsdown fix still not working properly, so reverting. This reverts commit b19f6f9a3ec2f76a570fdf14017b681189dbabe9. --- .npmignore | 18 + package.json | 62 +- pnpm-lock.yaml | 1450 ++++++++--------- pnpm-workspace.yaml | 1 - ...generateOptions.js => generateOptions.mjs} | 0 src/bin/generateRule.js | 6 +- src/index.js | 533 +++++- src/plugin.js | 533 ------ test/rules/index.js | 2 +- tsconfig-prod.json | 21 + tsdown.config.ts | 32 - 11 files changed, 1290 insertions(+), 1368 deletions(-) create mode 100755 .npmignore rename src/bin/{generateOptions.js => generateOptions.mjs} (100%) delete mode 100644 src/plugin.js create mode 100644 tsconfig-prod.json delete mode 100644 tsdown.config.ts diff --git a/.npmignore b/.npmignore new file mode 100755 index 000000000..5219b9654 --- /dev/null +++ b/.npmignore @@ -0,0 +1,18 @@ +coverage +bin +test +.* +*.log +CONTRIBUTING.md +tsconfig*.json +pnpm-workspace.yaml +eslint.config.js +*.d.ts +*.d.ts.map +!dist/index.d.ts +!dist/index.d.ts.map +!dist/getJsdocProcessorPlugin.d.ts +!dist/getJsdocProcessorPlugin.d.ts.map +!dist/iterateJsdoc.d.ts +!dist/iterateJsdoc.d.ts.map +docs diff --git a/package.json b/package.json index bafda38cd..da3f0960e 100644 --- a/package.json +++ b/package.json @@ -18,9 +18,10 @@ }, "description": "JSDoc linting rules for ESLint.", "devDependencies": { - "@arethetypeswrong/core": "^0.18.2", + "@babel/cli": "^7.27.2", "@babel/core": "^7.27.4", "@babel/eslint-parser": "^7.27.5", + "@babel/node": "^7.27.1", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-transform-flow-strip-types": "^7.27.1", "@babel/preset-env": "^7.27.2", @@ -62,12 +63,11 @@ "lodash.defaultsdeep": "^4.6.1", "mocha": "^11.7.0", "open-editor": "^5.1.0", - "publint": "^0.3.12", + "replace": "^1.2.2", + "rimraf": "^6.0.1", "semantic-release": "^24.2.5", - "tsdown": "^0.13.4", "typescript": "5.8.3", - "typescript-eslint": "^8.34.1", - "unplugin-unused": "^0.5.1" + "typescript-eslint": "^8.34.1" }, "engines": { "node": ">=20.11.0" @@ -82,42 +82,25 @@ "*.js": "eslint --fix" }, "type": "module", + "main": "./dist/index.cjs", + "types": "./dist/index.d.ts", "exports": { ".": { - "import": { - "types": "./dist/index.d.ts", - "default": "./dist/index.js" - }, - "default": { - "types": "./dist/index.d.cts", - "default": "./dist/index.cjs" - } + "types": "./dist/index.d.ts", + "import": "./src/index.js", + "require": "./dist/index.cjs" }, "./getJsdocProcessorPlugin.js": { - "import": { - "types": "./dist/getJsdocProcessorPlugin.d.ts", - "default": "./dist/getJsdocProcessorPlugin.js" - }, - "default": { - "types": "./dist/getJsdocProcessorPlugin.d.cts", - "default": "./dist/getJsdocProcessorPlugin.cjs" - } + "types": "./dist/getJsdocProcessorPlugin.d.ts", + "import": "./dist/getJsdocProcessorPlugin.cjs", + "require": "./src/getJsdocProcessorPlugin.js" }, "./iterateJsdoc.js": { - "import": { - "types": "./dist/iterateJsdoc.d.ts", - "default": "./dist/iterateJsdoc.js" - }, - "default": { - "types": "./dist/iterateJsdoc.d.cts", - "default": "./dist/iterateJsdoc.cjs" - } - }, - "./package.json": "./package.json" + "types": "./dist/iterateJsdoc.d.ts", + "import": "./dist/iterateJsdoc.cjs", + "require": "./src/iterateJsdoc.js" + } }, - "files": [ - "dist/" - ], "name": "eslint-plugin-jsdoc", "mocha": { "reporter": "dot", @@ -156,11 +139,12 @@ }, "scripts": { "tsc": "tsc", - "build": "tsdown", - "check-docs": "node ./src/bin/generateDocs.js --check", - "create-docs": "pnpm run create-options && node ./src/bin/generateDocs.js", - "create-rule": "node ./src/bin/generateRule.js", - "create-options": "node ./src/bin/generateOptions.js", + "tsc-build": "tsc -p tsconfig-prod.json", + "build": "rimraf ./dist && NODE_ENV=production babel ./src --out-file-extension .cjs --out-dir ./dist --copy-files --source-maps --ignore ./src/bin/*.js --no-copy-ignored && replace 'require\\(\"\\.(.*?)\\.[^.]*?\"\\)' 'require(\".$1.cjs\")' 'dist' -r --include=\"*.cjs\" && pnpm tsc-build", + "check-docs": "babel-node ./src/bin/generateDocs.js --check", + "create-docs": "pnpm run create-options && babel-node ./src/bin/generateDocs.js", + "create-rule": "babel-node ./src/bin/generateRule.js", + "create-options": "node ./src/bin/generateOptions.mjs", "install-offline": "pnpm install --prefer-offline --no-audit", "lint": "eslint", "lint-fix": "eslint --fix", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 39f34e755..ddb1167eb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -39,15 +39,18 @@ importers: specifier: ^4.0.0 version: 4.0.0 devDependencies: - '@arethetypeswrong/core': - specifier: ^0.18.2 - version: 0.18.2 + '@babel/cli': + specifier: ^7.27.2 + version: 7.27.2(@babel/core@7.27.4) '@babel/core': specifier: ^7.27.4 version: 7.27.4 '@babel/eslint-parser': specifier: ^7.27.5 version: 7.27.5(@babel/core@7.27.4)(eslint@9.29.0(jiti@2.4.2)) + '@babel/node': + specifier: ^7.27.1 + version: 7.27.1(@babel/core@7.27.4) '@babel/plugin-syntax-class-properties': specifier: ^7.12.13 version: 7.12.13(@babel/core@7.27.4) @@ -140,7 +143,7 @@ importers: version: 9.29.0(jiti@2.4.2) eslint-config-canonical: specifier: ~44.9.5 - version: 44.9.5(@types/eslint@9.6.1)(@types/node@24.0.3)(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + version: 44.9.5(@types/eslint@9.6.1)(@types/node@24.0.3)(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) gitdown: specifier: ^4.1.1 version: 4.1.1(re2@1.20.9) @@ -171,24 +174,21 @@ importers: open-editor: specifier: ^5.1.0 version: 5.1.0 - publint: - specifier: ^0.3.12 - version: 0.3.12 + replace: + specifier: ^1.2.2 + version: 1.2.2 + rimraf: + specifier: ^6.0.1 + version: 6.0.1 semantic-release: specifier: ^24.2.5 version: 24.2.5(typescript@5.8.3) - tsdown: - specifier: ^0.13.4 - version: 0.13.4(@arethetypeswrong/core@0.18.2)(publint@0.3.12)(typescript@5.8.3)(unplugin-unused@0.5.1) typescript: specifier: 5.8.3 version: 5.8.3 typescript-eslint: specifier: ^8.34.1 version: 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - unplugin-unused: - specifier: ^0.5.1 - version: 0.5.1 packages: @@ -200,12 +200,12 @@ packages: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} - '@andrewbranch/untar.js@1.0.3': - resolution: {integrity: sha512-Jh15/qVmrLGhkKJBdXlK1+9tY4lZruYjsgkDFj08ZmDiWVBLJcqkok7Z0/R0In+i1rScBpJlSvrTS2Lm41Pbnw==} - - '@arethetypeswrong/core@0.18.2': - resolution: {integrity: sha512-GiwTmBFOU1/+UVNqqCGzFJYfBXEytUkiI+iRZ6Qx7KmUVtLm00sYySkfe203C9QtPG11yOz1ZaMek8dT/xnlgg==} - engines: {node: '>=20'} + '@babel/cli@7.27.2': + resolution: {integrity: sha512-cfd7DnGlhH6OIyuPSSj3vcfIdnbXukhAyKY8NaZrFadC7pXyL9mOL5WgjcptiEJLi5k3j8aYvLIVCzezrWTaiA==} + engines: {node: '>=6.9.0'} + hasBin: true + peerDependencies: + '@babel/core': ^7.0.0-0 '@babel/code-frame@7.24.7': resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} @@ -234,10 +234,6 @@ packages: resolution: {integrity: sha512-xnlJYj5zepml8NXtjkG0WquFUv8RskFqyFcVgTBp5k+NaA/8uw/K+OSVf8AMGw5e9HKP2ETd5xpK5MLZQD6b4Q==} engines: {node: '>=6.9.0'} - '@babel/generator@7.28.0': - resolution: {integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==} - engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.24.7': resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} engines: {node: '>=6.9.0'} @@ -324,10 +320,18 @@ packages: resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.24.8': + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.27.1': resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.24.7': + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.27.1': resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} engines: {node: '>=6.9.0'} @@ -348,13 +352,20 @@ packages: resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.27.4': - resolution: {integrity: sha512-BRmLHGwpUqLFR2jzx9orBuX/ABDkj2jLKOXrHDTN2aOKL+jFDDKaRNo9nyYsIl9h/UE/7lMKdDjKQQyxKKDZ7g==} + '@babel/node@7.27.1': + resolution: {integrity: sha512-ef8ZrhxIku9LrphvyNywpiMf1UJsYQll7S4eKa228ivswPcwmObp98o5h5wL2n9FrSAuo1dsMwJ8cS1LEcBSog==} + engines: {node: '>=6.9.0'} + hasBin: true + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/parser@7.24.7': + resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.28.0': - resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==} + '@babel/parser@7.27.4': + resolution: {integrity: sha512-BRmLHGwpUqLFR2jzx9orBuX/ABDkj2jLKOXrHDTN2aOKL+jFDDKaRNo9nyYsIl9h/UE/7lMKdDjKQQyxKKDZ7g==} engines: {node: '>=6.0.0'} hasBin: true @@ -740,6 +751,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + '@babel/register@7.27.1': + resolution: {integrity: sha512-K13lQpoV54LATKkzBpBAEu1GGSIRzxR9f4IN4V8DCDgiUMo2UDGagEZr3lPeVNJPLkWUi5JE4hCHKneVTwQlYQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/regjsgen@0.8.0': resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} @@ -751,33 +768,30 @@ packages: resolution: {integrity: sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==} engines: {node: '>=6.9.0'} - '@babel/types@7.27.3': - resolution: {integrity: sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==} + '@babel/types@7.25.2': + resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==} engines: {node: '>=6.9.0'} - '@babel/types@7.28.2': - resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} + '@babel/types@7.27.3': + resolution: {integrity: sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==} engines: {node: '>=6.9.0'} '@bcoe/v8-coverage@1.0.2': resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} - '@braidai/lang@1.1.1': - resolution: {integrity: sha512-5uM+no3i3DafVgkoW7ayPhEGHNNBZCSj5TrGDQt0ayEKQda5f3lAXlmQg0MR5E0gKgmTzUUEtSWHsEC3h9jUcg==} - '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} - '@emnapi/core@1.4.5': - resolution: {integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==} + '@emnapi/core@1.4.3': + resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==} - '@emnapi/runtime@1.4.5': - resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==} + '@emnapi/runtime@1.4.3': + resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} - '@emnapi/wasi-threads@1.0.4': - resolution: {integrity: sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==} + '@emnapi/wasi-threads@1.0.2': + resolution: {integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==} '@envelop/core@5.2.3': resolution: {integrity: sha512-KfoGlYD/XXQSc3BkM1/k15+JQbkQ4ateHazeZoWl9P71FsLTDXSjGy6j7QqfhpIDSbxNISqhPMfZHYSbDFOofQ==} @@ -1054,9 +1068,6 @@ packages: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} - '@jridgewell/gen-mapping@0.3.12': - resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} - '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} @@ -1072,27 +1083,18 @@ packages: '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - '@jridgewell/sourcemap-codec@1.5.4': - resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} - '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - '@jridgewell/trace-mapping@0.3.29': - resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} - - '@loaderkit/resolve@1.0.4': - resolution: {integrity: sha512-rJzYKVcV4dxJv+vW6jlvagF8zvGxHJ2+HTr1e2qOejfmGhAApgJHl8Aog4mMszxceTRiKTTbnpgmTO1bEZHV/A==} - - '@napi-rs/wasm-runtime@0.2.12': - resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} - - '@napi-rs/wasm-runtime@1.0.1': - resolution: {integrity: sha512-KVlQ/jgywZpixGCKMNwxStmmbYEMyokZpCf2YuIChhfJA2uqfAKNEM8INz7zzTo55iEXfBhIIs3VqYyqzDLj8g==} + '@napi-rs/wasm-runtime@0.2.11': + resolution: {integrity: sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==} '@next/eslint-plugin-next@15.3.3': resolution: {integrity: sha512-VKZJEiEdpKkfBmcokGjHu0vGDG+8CehGs90tBEy/IDoDDKGngeyIStt2MmE5FYNyU9BhgR7tybNWTAJY/30u+Q==} + '@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3': + resolution: {integrity: sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==} + '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} @@ -1168,13 +1170,6 @@ packages: '@octokit/types@14.1.0': resolution: {integrity: sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==} - '@oxc-project/runtime@0.80.0': - resolution: {integrity: sha512-3rzy1bJAZ4s7zV9TKT60x119RwJDCDqEtCwK/Zc2qlm7wGhiIUxLLYUhE/mN91yB0u1kxm5sh4NjU12sPqQTpg==} - engines: {node: '>=6.9.0'} - - '@oxc-project/types@0.80.0': - resolution: {integrity: sha512-xxHQm8wfCv2e8EmtaDwpMeAHOWqgQDAYg+BJouLXSQt5oTKu9TIXrgNMGSrM2fLvKmECsRd9uUFAAD+hPyootA==} - '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -1195,93 +1190,12 @@ packages: resolution: {integrity: sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==} engines: {node: '>=12'} - '@publint/pack@0.1.2': - resolution: {integrity: sha512-S+9ANAvUmjutrshV4jZjaiG8XQyuJIZ8a4utWmN/vW1sgQ9IfBnPndwkmQYw53QmouOIytT874u65HEmu6H5jw==} - engines: {node: '>=18'} - - '@quansync/fs@0.1.3': - resolution: {integrity: sha512-G0OnZbMWEs5LhDyqy2UL17vGhSVHkQIfVojMtEWVenvj0V5S84VBgy86kJIuNsGDp2p7sTKlpSIpBUWdC35OKg==} - engines: {node: '>=20.0.0'} - '@repeaterjs/repeater@3.0.5': resolution: {integrity: sha512-l3YHBLAol6d/IKnB9LhpD0cEZWAoe3eFKUyTYWmFmCO2Q/WOckxLQAUyMZWwZV2M/m3+4vgRoaolFqaII82/TA==} '@repeaterjs/repeater@3.0.6': resolution: {integrity: sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==} - '@rolldown/binding-android-arm64@1.0.0-beta.31': - resolution: {integrity: sha512-0mFtKwOG7smn0HkvQ6h8j0m/ohkR7Fp5eMTJ2Pns/HSbePHuDpxMaQ4TjZ6arlVXxpeWZlAHeT5BeNsOA3iWTg==} - cpu: [arm64] - os: [android] - - '@rolldown/binding-darwin-arm64@1.0.0-beta.31': - resolution: {integrity: sha512-BHfHJ8Nb5G7ZKJl6pimJacupONT4F7w6gmQHw41rouAnJF51ORDwGefWeb6OMLzGmJwzxlIVPERfnJf1EsMM7A==} - cpu: [arm64] - os: [darwin] - - '@rolldown/binding-darwin-x64@1.0.0-beta.31': - resolution: {integrity: sha512-4MiuRtExC08jHbSU/diIL+IuQP+3Ck1FbWAplK+ysQJ7fxT3DMxy5FmnIGfmhaqow8oTjb2GEwZJKgTRjZL1Vw==} - cpu: [x64] - os: [darwin] - - '@rolldown/binding-freebsd-x64@1.0.0-beta.31': - resolution: {integrity: sha512-nffC1u7ccm12qlAea8ExY3AvqlaHy/o/3L4p5Es8JFJ3zJSs6e3DyuxGZZVdl9EVwsLxPPTvioIl4tEm2afwyw==} - cpu: [x64] - os: [freebsd] - - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.31': - resolution: {integrity: sha512-LHmAaB3rB1GOJuHscKcL2Ts/LKLcb3YWTh2uQ/876rg/J9WE9kQ0kZ+3lRSYbth/YL8ln54j4JZmHpqQY3xptQ==} - cpu: [arm] - os: [linux] - - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.31': - resolution: {integrity: sha512-oTDZVfqIAjLB2I1yTiLyyhfPPO6dky33sTblxTCpe+ZT55WizN3KDoBKJ4yXG8shI6I4bRShVu29Xg0yAjyQYw==} - cpu: [arm64] - os: [linux] - - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.31': - resolution: {integrity: sha512-duJ3IkEBj9Xe9NYW1n8Y3483VXHGi8zQ0ZsLbK8464EJUXLF7CXM8Ry+jkkUw+ZvA+Zu1E/+C6p2Y6T9el0C9g==} - cpu: [arm64] - os: [linux] - - '@rolldown/binding-linux-arm64-ohos@1.0.0-beta.31': - resolution: {integrity: sha512-qdbmU5QSZ0uoLZBYMxiHsMQmizqtzFGTVPU5oyU1n0jU0Mo+mkSzqZuL8VBnjHOHzhVxZsoAGH9JjiRzCnoGVA==} - cpu: [arm64] - os: [openharmony] - - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.31': - resolution: {integrity: sha512-H7+r34TSV8udB2gAsebFM/YuEeNCkPGEAGJ1JE7SgI9XML6FflqcdKfrRSneQFsPaom/gCEc1g0WW5MZ0O3blw==} - cpu: [x64] - os: [linux] - - '@rolldown/binding-linux-x64-musl@1.0.0-beta.31': - resolution: {integrity: sha512-zRm2YmzFVqbsmUsyyZnHfJrOlQUcWS/FJ5ZWL8Q1kZh5PnLBrTVZNpakIWwAxpN5gNEi9MmFd5YHocVJp8ps1Q==} - cpu: [x64] - os: [linux] - - '@rolldown/binding-wasm32-wasi@1.0.0-beta.31': - resolution: {integrity: sha512-fM1eUIuHLsNJXRlWOuIIex1oBJ89I0skFWo5r/D3KSJ5gD9MBd3g4Hp+v1JGohvyFE+7ylnwRxSUyMEeYpA69A==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.31': - resolution: {integrity: sha512-4nftR9V2KHH3zjBwf6leuZZJQZ7v0d70ogjHIqB3SDsbDLvVEZiGSsSn2X6blSZRZeJSFzK0pp4kZ67zdZXwSw==} - cpu: [arm64] - os: [win32] - - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.31': - resolution: {integrity: sha512-0TQcKu9xZVHYALit+WJsSuADGlTFfOXhnZoIHWWQhTk3OgbwwbYcSoZUXjRdFmR6Wswn4csHtJGN1oYKeQ6/2g==} - cpu: [ia32] - os: [win32] - - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.31': - resolution: {integrity: sha512-3zMICWwpZh1jrkkKDYIUCx/2wY3PXLICAS0AnbeLlhzfWPhCcpNK9eKhiTlLAZyTp+3kyipoi/ZSVIh+WDnBpQ==} - cpu: [x64] - os: [win32] - - '@rolldown/pluginutils@1.0.0-beta.31': - resolution: {integrity: sha512-IaDZ9NhjOIOkYtm+hH0GX33h3iVZ2OeSUnFF0+7Z4+1GuKs4Kj5wK3+I2zNV9IPLfqV4XlwWif8SXrZNutxciQ==} - '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} @@ -1331,8 +1245,8 @@ packages: peerDependencies: eslint: '>=9.0.0' - '@tybys/wasm-util@0.10.0': - resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==} + '@tybys/wasm-util@0.9.0': + resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} '@types/chai@5.2.2': resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} @@ -1503,10 +1417,6 @@ packages: resolution: {integrity: sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.38.0': - resolution: {integrity: sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@6.21.0': resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -1574,29 +1484,24 @@ packages: '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - '@unrs/resolver-binding-android-arm-eabi@1.11.1': - resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} + '@unrs/resolver-binding-android-arm-eabi@1.9.0': + resolution: {integrity: sha512-h1T2c2Di49ekF2TE8ZCoJkb+jwETKUIPDJ/nO3tJBKlLFPu+fyd93f0rGP/BvArKx2k2HlRM4kqkNarj3dvZlg==} cpu: [arm] os: [android] - '@unrs/resolver-binding-android-arm64@1.11.1': - resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==} + '@unrs/resolver-binding-android-arm64@1.9.0': + resolution: {integrity: sha512-sG1NHtgXtX8owEkJ11yn34vt0Xqzi3k9TJ8zppDmyG8GZV4kVWw44FHwKwHeEFl07uKPeC4ZoyuQaGh5ruJYPA==} cpu: [arm64] os: [android] - '@unrs/resolver-binding-darwin-arm64@1.11.1': - resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==} - cpu: [arm64] - os: [darwin] - '@unrs/resolver-binding-darwin-arm64@1.7.8': resolution: {integrity: sha512-rsRK8T7yxraNRDmpFLZCWqpea6OlXPNRRCjWMx24O1V86KFol7u2gj9zJCv6zB1oJjtnzWceuqdnCgOipFcJPA==} cpu: [arm64] os: [darwin] - '@unrs/resolver-binding-darwin-x64@1.11.1': - resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==} - cpu: [x64] + '@unrs/resolver-binding-darwin-arm64@1.9.0': + resolution: {integrity: sha512-nJ9z47kfFnCxN1z/oYZS7HSNsFh43y2asePzTEZpEvK7kGyuShSl3RRXnm/1QaqFL+iP+BjMwuB+DYUymOkA5A==} + cpu: [arm64] os: [darwin] '@unrs/resolver-binding-darwin-x64@1.7.8': @@ -1604,28 +1509,28 @@ packages: cpu: [x64] os: [darwin] - '@unrs/resolver-binding-freebsd-x64@1.11.1': - resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==} + '@unrs/resolver-binding-darwin-x64@1.9.0': + resolution: {integrity: sha512-TK+UA1TTa0qS53rjWn7cVlEKVGz2B6JYe0C++TdQjvWYIyx83ruwh0wd4LRxYBM5HeuAzXcylA9BH2trARXJTw==} cpu: [x64] - os: [freebsd] + os: [darwin] '@unrs/resolver-binding-freebsd-x64@1.7.8': resolution: {integrity: sha512-ST4uqF6FmdZQgv+Q73FU1uHzppeT4mhX3IIEmHlLObrv5Ep50olWRz0iQ4PWovadjHMTAmpuJAGaAuCZYb7UAQ==} cpu: [x64] os: [freebsd] - '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': - resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==} - cpu: [arm] - os: [linux] + '@unrs/resolver-binding-freebsd-x64@1.9.0': + resolution: {integrity: sha512-6uZwzMRFcD7CcCd0vz3Hp+9qIL2jseE/bx3ZjaLwn8t714nYGwiE84WpaMCYjU+IQET8Vu/+BNAGtYD7BG/0yA==} + cpu: [x64] + os: [freebsd] '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.8': resolution: {integrity: sha512-Z/A/4Rm2VWku2g25C3tVb986fY6unx5jaaCFpx1pbAj0OKkyuJ5wcQLHvNbIcJ9qhiYwXfrkB7JNlxrAbg7YFg==} cpu: [arm] os: [linux] - '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': - resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==} + '@unrs/resolver-binding-linux-arm-gnueabihf@1.9.0': + resolution: {integrity: sha512-bPUBksQfrgcfv2+mm+AZinaKq8LCFvt5PThYqRotqSuuZK1TVKkhbVMS/jvSRfYl7jr3AoZLYbDkItxgqMKRkg==} cpu: [arm] os: [linux] @@ -1634,9 +1539,9 @@ packages: cpu: [arm] os: [linux] - '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': - resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==} - cpu: [arm64] + '@unrs/resolver-binding-linux-arm-musleabihf@1.9.0': + resolution: {integrity: sha512-uT6E7UBIrTdCsFQ+y0tQd3g5oudmrS/hds5pbU3h4s2t/1vsGWbbSKhBSCD9mcqaqkBwoqlECpUrRJCmldl8PA==} + cpu: [arm] os: [linux] '@unrs/resolver-binding-linux-arm64-gnu@1.7.8': @@ -1644,8 +1549,8 @@ packages: cpu: [arm64] os: [linux] - '@unrs/resolver-binding-linux-arm64-musl@1.11.1': - resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==} + '@unrs/resolver-binding-linux-arm64-gnu@1.9.0': + resolution: {integrity: sha512-vdqBh911wc5awE2bX2zx3eflbyv8U9xbE/jVKAm425eRoOVv/VseGZsqi3A3SykckSpF4wSROkbQPvbQFn8EsA==} cpu: [arm64] os: [linux] @@ -1654,9 +1559,9 @@ packages: cpu: [arm64] os: [linux] - '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': - resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==} - cpu: [ppc64] + '@unrs/resolver-binding-linux-arm64-musl@1.9.0': + resolution: {integrity: sha512-/8JFZ/SnuDr1lLEVsxsuVwrsGquTvT51RZGvyDB/dOK3oYK2UqeXzgeyq6Otp8FZXQcEYqJwxb9v+gtdXn03eQ==} + cpu: [arm64] os: [linux] '@unrs/resolver-binding-linux-ppc64-gnu@1.7.8': @@ -1664,9 +1569,9 @@ packages: cpu: [ppc64] os: [linux] - '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': - resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==} - cpu: [riscv64] + '@unrs/resolver-binding-linux-ppc64-gnu@1.9.0': + resolution: {integrity: sha512-FkJjybtrl+rajTw4loI3L6YqSOpeZfDls4SstL/5lsP2bka9TiHUjgMBjygeZEis1oC8LfJTS8FSgpKPaQx2tQ==} + cpu: [ppc64] os: [linux] '@unrs/resolver-binding-linux-riscv64-gnu@1.7.8': @@ -1674,8 +1579,8 @@ packages: cpu: [riscv64] os: [linux] - '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': - resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==} + '@unrs/resolver-binding-linux-riscv64-gnu@1.9.0': + resolution: {integrity: sha512-w/NZfHNeDusbqSZ8r/hp8iL4S39h4+vQMc9/vvzuIKMWKppyUGKm3IST0Qv0aOZ1rzIbl9SrDeIqK86ZpUK37w==} cpu: [riscv64] os: [linux] @@ -1684,9 +1589,9 @@ packages: cpu: [riscv64] os: [linux] - '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': - resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==} - cpu: [s390x] + '@unrs/resolver-binding-linux-riscv64-musl@1.9.0': + resolution: {integrity: sha512-bEPBosut8/8KQbUixPry8zg/fOzVOWyvwzOfz0C0Rw6dp+wIBseyiHKjkcSyZKv/98edrbMknBaMNJfA/UEdqw==} + cpu: [riscv64] os: [linux] '@unrs/resolver-binding-linux-s390x-gnu@1.7.8': @@ -1694,9 +1599,9 @@ packages: cpu: [s390x] os: [linux] - '@unrs/resolver-binding-linux-x64-gnu@1.11.1': - resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==} - cpu: [x64] + '@unrs/resolver-binding-linux-s390x-gnu@1.9.0': + resolution: {integrity: sha512-LDtMT7moE3gK753gG4pc31AAqGUC86j3AplaFusc717EUGF9ZFJ356sdQzzZzkBk1XzMdxFyZ4f/i35NKM/lFA==} + cpu: [s390x] os: [linux] '@unrs/resolver-binding-linux-x64-gnu@1.7.8': @@ -1704,8 +1609,8 @@ packages: cpu: [x64] os: [linux] - '@unrs/resolver-binding-linux-x64-musl@1.11.1': - resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==} + '@unrs/resolver-binding-linux-x64-gnu@1.9.0': + resolution: {integrity: sha512-WmFd5KINHIXj8o1mPaT8QRjA9HgSXhN1gl9Da4IZihARihEnOylu4co7i/yeaIpcfsI6sYs33cNZKyHYDh0lrA==} cpu: [x64] os: [linux] @@ -1714,29 +1619,29 @@ packages: cpu: [x64] os: [linux] - '@unrs/resolver-binding-wasm32-wasi@1.11.1': - resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] + '@unrs/resolver-binding-linux-x64-musl@1.9.0': + resolution: {integrity: sha512-CYuXbANW+WgzVRIl8/QvZmDaZxrqvOldOwlbUjIM4pQ46FJ0W5cinJ/Ghwa/Ng1ZPMJMk1VFdsD/XwmCGIXBWg==} + cpu: [x64] + os: [linux] '@unrs/resolver-binding-wasm32-wasi@1.7.8': resolution: {integrity: sha512-x94WnaU5g+pCPDVedfnXzoG6lCOF2xFGebNwhtbJCWfceE94Zj8aysSxdxotlrZrxnz5D3ijtyFUYtpz04n39Q==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': - resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==} - cpu: [arm64] - os: [win32] + '@unrs/resolver-binding-wasm32-wasi@1.9.0': + resolution: {integrity: sha512-6Rp2WH0OoitMYR57Z6VE8Y6corX8C6QEMWLgOV6qXiJIeZ1F9WGXY/yQ8yDC4iTraotyLOeJ2Asea0urWj2fKQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] '@unrs/resolver-binding-win32-arm64-msvc@1.7.8': resolution: {integrity: sha512-vst2u8EJZ5L6jhJ6iLis3w9rg16aYqRxQuBAMYQRVrPMI43693hLP7DuqyOBRKgsQXy9/jgh204k0ViHkqQgdg==} cpu: [arm64] os: [win32] - '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': - resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==} - cpu: [ia32] + '@unrs/resolver-binding-win32-arm64-msvc@1.9.0': + resolution: {integrity: sha512-rknkrTRuvujprrbPmGeHi8wYWxmNVlBoNW8+4XF2hXUnASOjmuC9FNF1tGbDiRQWn264q9U/oGtixyO3BT8adQ==} + cpu: [arm64] os: [win32] '@unrs/resolver-binding-win32-ia32-msvc@1.7.8': @@ -1744,9 +1649,9 @@ packages: cpu: [ia32] os: [win32] - '@unrs/resolver-binding-win32-x64-msvc@1.11.1': - resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==} - cpu: [x64] + '@unrs/resolver-binding-win32-ia32-msvc@1.9.0': + resolution: {integrity: sha512-Ceymm+iBl+bgAICtgiHyMLz6hjxmLJKqBim8tDzpX61wpZOx2bPK6Gjuor7I2RiUynVjvvkoRIkrPyMwzBzF3A==} + cpu: [ia32] os: [win32] '@unrs/resolver-binding-win32-x64-msvc@1.7.8': @@ -1754,6 +1659,11 @@ packages: cpu: [x64] os: [win32] + '@unrs/resolver-binding-win32-x64-msvc@1.9.0': + resolution: {integrity: sha512-k59o9ZyeyS0hAlcaKFezYSH2agQeRFEB7KoQLXl3Nb3rgkqT1NY9Vwy+SqODiLmYnEjxWJVRE/yq2jFVqdIxZw==} + cpu: [x64] + os: [win32] + '@vitest/eslint-plugin@1.2.1': resolution: {integrity: sha512-JQr1jdVcrsoS7Sdzn83h9sq4DvREf9Q/onTZbJCqTVlv/76qb+TZrLv/9VhjnjSMHweQH5FdpMDeCR6aDe2fgw==} peerDependencies: @@ -1804,6 +1714,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.14.1: + resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} + engines: {node: '>=0.4.0'} + hasBin: true + acorn@8.15.0: resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} @@ -1813,8 +1728,8 @@ packages: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} engines: {node: '>= 14'} - agent-base@7.1.4: - resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + agent-base@7.1.3: + resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} engines: {node: '>= 14'} aggregate-error@3.1.0: @@ -1856,13 +1771,13 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} - ansis@4.1.0: - resolution: {integrity: sha512-BGcItUBWSMRgOCe+SVZJ+S7yTRG0eGt9cXAHev72yuGcY23hnLA7Bky5L/xLyPINoSN95geovfBkqoTlNZYa7w==} - engines: {node: '>=14'} - any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + are-docs-informative@0.0.2: resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} engines: {node: '>=14'} @@ -1915,6 +1830,10 @@ packages: resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} engines: {node: '>= 0.4'} + array.prototype.reduce@1.0.7: + resolution: {integrity: sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==} + engines: {node: '>= 0.4'} + array.prototype.tosorted@1.1.4: resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} engines: {node: '>= 0.4'} @@ -1942,10 +1861,6 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} - ast-kit@2.1.1: - resolution: {integrity: sha512-mfh6a7gKXE8pDlxTvqIc/syH/P3RkzbOF6LeHdcKztLEzYe6IMsRCL7N8vI7hqTGWNxpkCuuRTpT21xNWqhRtQ==} - engines: {node: '>=20.18.0'} - ast-types-flow@0.0.8: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} @@ -2010,8 +1925,9 @@ packages: before-after-hook@4.0.0: resolution: {integrity: sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==} - birpc@2.5.0: - resolution: {integrity: sha512-VSWO/W6nNQdyP520F1mhf+Lc2f8pjGQOtoHHm7Ze8Go1kX7akpVIrtTa0fn+HB0QJEDVacl6aO08YE0PgXfdnQ==} + binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} bluebird@2.11.0: resolution: {integrity: sha512-UfFSr22dmHPQqPP9XWHRhq+gWnHCYguQGkXQlbyPtW5qTnhFWA8/iXg765tH0cAjy7l/zPJ1aBTO0g5XgA7kvQ==} @@ -2048,6 +1964,9 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + builtin-modules@4.0.0: resolution: {integrity: sha512-p1n8zyCkt1BVrKNFymOHjcDSAl7oq/gUvfgULv2EblgpPVQlQr9yHnWjg9IJ2MhfwPqiYqMMrr01OY7yQoK2yA==} engines: {node: '>=18.20'} @@ -2066,10 +1985,6 @@ packages: monocart-coverage-reports: optional: true - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - cacache@18.0.4: resolution: {integrity: sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==} engines: {node: ^16.14.0 || >=18.0.0} @@ -2136,6 +2051,10 @@ packages: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} @@ -2148,9 +2067,6 @@ packages: resolution: {integrity: sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==} engines: {node: '>=8'} - cjs-module-lexer@1.4.3: - resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} - clean-regexp@1.0.0: resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} engines: {node: '>=4'} @@ -2180,6 +2096,9 @@ packages: resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} engines: {node: '>=18'} + cliui@6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + cliui@7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} @@ -2187,6 +2106,10 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} + clone-deep@4.0.1: + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} + clone-regexp@3.0.0: resolution: {integrity: sha512-ujdnoq2Kxb8s3ItNBtnYeXdm07FcU0u8ARAT1lQ2YdMwQC+cdiXX8KoqMVuglztILivceTtp4ivqGSmEmhBUJw==} engines: {node: '>=12'} @@ -2215,19 +2138,23 @@ packages: resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==} engines: {node: '>=20'} + commander@6.2.1: + resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} + engines: {node: '>= 6'} + comment-parser@1.4.1: resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} engines: {node: '>= 12.0.0'} + commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - confbox@0.2.2: - resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} - config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} @@ -2262,6 +2189,9 @@ packages: core-js-compat@3.42.0: resolution: {integrity: sha512-bQasjMfyDGyaeWKBIu33lHh9qlSR0MFE/Nmc6nMjf/iU9b3rSMdAYz1Baxrv4lPdGUsTqZudHA4jIGSJy0SWZQ==} + core-js@3.37.1: + resolution: {integrity: sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==} + core-util-is@1.0.2: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} @@ -2367,6 +2297,10 @@ packages: supports-color: optional: true + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + decamelize@4.0.0: resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} engines: {node: '>=10'} @@ -2410,9 +2344,6 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} - defu@6.1.4: - resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} - delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -2421,10 +2352,6 @@ packages: resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==} engines: {node: '>=0.3.1'} - diff@8.0.2: - resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} - engines: {node: '>=0.3.1'} - dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -2460,15 +2387,6 @@ packages: resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} engines: {node: '>=4'} - dts-resolver@2.1.1: - resolution: {integrity: sha512-3BiGFhB6mj5Kv+W2vdJseQUYW+SKVzAFJL6YNP6ursbrwy1fXHRotfHi3xLNxe4wZl/K8qbAFeCDjZLjzqxxRw==} - engines: {node: '>=20.18.0'} - peerDependencies: - oxc-resolver: '>=11.0.0' - peerDependenciesMeta: - oxc-resolver: - optional: true - dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -2497,10 +2415,6 @@ packages: emojilib@2.4.0: resolution: {integrity: sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==} - empathic@2.0.0: - resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} - engines: {node: '>=14'} - encoding@0.1.13: resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} @@ -2548,6 +2462,9 @@ packages: resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} engines: {node: '>= 0.4'} + es-array-method-boxes-properly@1.0.0: + resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} + es-define-property@1.0.0: resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} engines: {node: '>= 0.4'} @@ -2657,8 +2574,8 @@ packages: unrs-resolver: optional: true - eslint-import-context@0.1.9: - resolution: {integrity: sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg==} + eslint-import-context@0.1.8: + resolution: {integrity: sha512-bq+F7nyc65sKpZGT09dY0S0QrOnQtuDVIfyTGQ8uuvtMIF7oHp6CEP3mouN0rrnYF3Jqo6Ke0BfU/5wASZue1w==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} peerDependencies: unrs-resolver: ^1.0.0 @@ -2765,8 +2682,8 @@ packages: typescript: optional: true - eslint-plugin-import-x@4.16.1: - resolution: {integrity: sha512-vPZZsiOKaBAIATpFE2uMI4w5IRwdv/FpQ+qZZMR4E+PeOcM4OeoEbqxRMnywdxP19TyB/3h6QBB0EWon7letSQ==} + eslint-plugin-import-x@4.15.1: + resolution: {integrity: sha512-JfVpNg1qMkPD66iaSgmMoSYeUCGS8UFSm3GwHV0IbuV3Knar/SyK5qqCct9+AxoMIzaM+KSO7KK5pOeOkC/3GQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/utils': ^8.0.0 @@ -3005,9 +2922,6 @@ packages: exponential-backoff@3.1.2: resolution: {integrity: sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==} - exsolve@1.0.7: - resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==} - extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -3057,9 +2971,6 @@ packages: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} - fflate@0.8.2: - resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} - figures@2.0.0: resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} engines: {node: '>=4'} @@ -3084,6 +2995,10 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + find-cache-dir@2.1.0: + resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} + engines: {node: '>=6'} + find-up-simple@1.0.0: resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==} engines: {node: '>=18'} @@ -3092,6 +3007,10 @@ packages: resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} engines: {node: '>=4'} + find-up@3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} + find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -3160,9 +3079,17 @@ packages: resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + fs-readdir-recursive@1.1.0: + resolution: {integrity: sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==} + fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} @@ -3436,13 +3363,14 @@ packages: highlight.js@10.7.3: resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + homedir-polyfill@1.0.3: + resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} + engines: {node: '>=0.10.0'} + hook-std@3.0.0: resolution: {integrity: sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hookable@5.5.3: - resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} - hosted-git-info@7.0.1: resolution: {integrity: sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==} engines: {node: ^16.14.0 || >=18.0.0} @@ -3604,6 +3532,10 @@ packages: resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} engines: {node: '>= 0.4'} + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} @@ -3738,6 +3670,10 @@ packages: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} + is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + is-proto-prop@2.0.0: resolution: {integrity: sha512-jl3NbQ/fGLv5Jhan4uX+Ge9ohnemqyblWVVCpAvtTQzNFvV2xhJq+esnkIbYQ9F1nITXoLfDDQLp7LBw/zzncg==} @@ -3840,6 +3776,10 @@ packages: resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} engines: {node: '>=16'} + isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + isomorphic-ws@5.0.0: resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} peerDependencies: @@ -3891,9 +3831,6 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-tokens@9.0.1: - resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} - js-types@1.0.0: resolution: {integrity: sha512-bfwqBW9cC/Lp7xcRpug7YrXm0IVw+T9e3g4mCYnv0Pjr3zIzU9PCQElYU9oSGAWzXlbdl9X5SAMPejO9sxkeUw==} engines: {node: '>=0.10.0'} @@ -3981,6 +3918,10 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + language-subtag-registry@0.3.22: resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} @@ -4024,6 +3965,10 @@ packages: resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} engines: {node: '>=4'} + locate-path@3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} + locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -4101,6 +4046,10 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + make-dir@2.1.0: + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} + engines: {node: '>=6'} + make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} @@ -4188,6 +4137,9 @@ packages: resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} engines: {node: 20 || >=22} + minimatch@3.0.5: + resolution: {integrity: sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -4251,30 +4203,21 @@ packages: moment@2.30.1: resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} - mri@1.2.0: - resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} - engines: {node: '>=4'} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nan@2.23.0: - resolution: {integrity: sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ==} + nan@2.22.2: + resolution: {integrity: sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==} nano-spawn@1.0.2: resolution: {integrity: sha512-21t+ozMQDAL/UGgQVBbZ/xXvNO10++ZPuTmKRO8k9V3AClVRht49ahtDjfY8l1q6nSHOrE5ASfthzH3ol6R/hg==} engines: {node: '>=20.17'} - napi-postinstall@0.2.5: - resolution: {integrity: sha512-kmsgUvCRIJohHjbZ3V8avP0I1Pekw329MVAMDzVxsrkjgdnqiwvMX5XwR+hWV66vsAtZ+iM+fVnq8RTQawUmCQ==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - hasBin: true - - napi-postinstall@0.3.2: - resolution: {integrity: sha512-tWVJxJHmBWLy69PvO96TZMZDrzmw5KeiZBz3RHmiM2XZ9grBJ2WgMAFVVg25nqp3ZjTFUs2Ftw1JhscL3Teliw==} + napi-postinstall@0.2.4: + resolution: {integrity: sha512-ZEzHJwBhZ8qQSbknHqYcdtQVr8zUgGyM/q6h6qAyhtyVMNrSgDhrC4disf03dYW0e+czXyLnZINnCTEkWy0eJg==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} hasBin: true @@ -4304,6 +4247,9 @@ packages: resolution: {integrity: sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==} engines: {node: '>=18'} + node-environment-flags@1.0.6: + resolution: {integrity: sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==} + node-fetch@3.3.2: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -4329,6 +4275,10 @@ packages: resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} engines: {node: '>=0.10.0'} + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + normalize-url@8.0.0: resolution: {integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==} engines: {node: '>=14.16'} @@ -4459,6 +4409,10 @@ packages: resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} engines: {node: '>= 0.4'} + object.getownpropertydescriptors@2.1.8: + resolution: {integrity: sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==} + engines: {node: '>= 0.8'} + object.values@1.2.0: resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} engines: {node: '>= 0.4'} @@ -4526,6 +4480,10 @@ packages: resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} engines: {node: '>=4'} + p-locate@3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} + p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -4557,9 +4515,6 @@ packages: package-json-from-dist@1.0.0: resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} - package-manager-detector@1.3.0: - resolution: {integrity: sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==} - parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -4583,6 +4538,10 @@ packages: resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} engines: {node: '>=18'} + parse-passwd@1.0.0: + resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} + engines: {node: '>=0.10.0'} + parse-statements@1.0.11: resolution: {integrity: sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==} @@ -4637,9 +4596,6 @@ packages: resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} engines: {node: '>=12'} - pathe@2.0.3: - resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - pathval@2.0.0: resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} engines: {node: '>= 14.16'} @@ -4667,17 +4623,26 @@ packages: resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} engines: {node: '>=4'} + pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + pkg-conf@2.1.0: resolution: {integrity: sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==} engines: {node: '>=4'} + pkg-dir@3.0.0: + resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} + engines: {node: '>=6'} + pkg-dir@5.0.0: resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} engines: {node: '>=10'} - pkg-types@2.2.0: - resolution: {integrity: sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==} - pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} @@ -4735,11 +4700,6 @@ packages: psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} - publint@0.3.12: - resolution: {integrity: sha512-1w3MMtL9iotBjm1mmXtG3Nk06wnq9UhGNRpQ2j6n1Zq7YAD6gnxMMZMIxlRPAydVjVbjSm+n0lhwqsD1m4LD5w==} - engines: {node: '>=18'} - hasBin: true - punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -4748,9 +4708,6 @@ packages: resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} engines: {node: '>=0.6'} - quansync@0.2.10: - resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==} - queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -4791,6 +4748,10 @@ packages: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + readdirp@4.1.2: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} @@ -4818,6 +4779,9 @@ packages: regenerate@1.4.2: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + regexp-ast-analysis@0.7.1: resolution: {integrity: sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -4860,6 +4824,11 @@ packages: remove-trailing-separator@1.1.0: resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} + replace@1.2.2: + resolution: {integrity: sha512-C4EDifm22XZM2b2JOYe6Mhn+lBsLBAvLbK8drfUQLTfD1KYl/n3VaW/CDju0Ny4w3xTtegBpg8YNSpFJPUDSjA==} + engines: {node: '>= 6'} + hasBin: true + req-all@0.1.0: resolution: {integrity: sha512-ZdvPr8uXy9ujX3KujwE2P1HWkMYgogIhqeAeyb47MqWjSfyxERSm0TNbN/IapCCmWDufXab04AYrRgObaJCJ6Q==} engines: {node: '>=4'} @@ -4873,6 +4842,9 @@ packages: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} + require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + requireindex@1.1.0: resolution: {integrity: sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg==} engines: {node: '>=0.10.5'} @@ -4921,30 +4893,15 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true + rimraf@6.0.1: + resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} + engines: {node: 20 || >=22} + hasBin: true + roarr@7.21.1: resolution: {integrity: sha512-3niqt5bXFY1InKU8HKWqqYTYjtrBaxBMnXELXCXUYgtNYGUtZM5rB46HIC430AyacL95iEniGf7RgqsesykLmQ==} engines: {node: '>=18.0'} - rolldown-plugin-dts@0.15.6: - resolution: {integrity: sha512-AxQlyx3Nszob5QLmVUjz/VnC5BevtUo0h8tliuE0egddss7IbtCBU7GOe7biRU0fJNRQJmQjPKXFcc7K98j3+w==} - engines: {node: '>=20.18.0'} - peerDependencies: - '@typescript/native-preview': '>=7.0.0-dev.20250601.1' - rolldown: ^1.0.0-beta.9 - typescript: ^5.0.0 - vue-tsc: ~3.0.3 - peerDependenciesMeta: - '@typescript/native-preview': - optional: true - typescript: - optional: true - vue-tsc: - optional: true - - rolldown@1.0.0-beta.31: - resolution: {integrity: sha512-M2Q+RfG0FMJeSW3RSFTbvtjGVTcQpTQvN247D0EMSsPkpZFoinopR9oAnQiwgogQyzDuvKNnbyCbQQlmNAzSoQ==} - hasBin: true - run-applescript@7.0.0: resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} engines: {node: '>=18'} @@ -4952,10 +4909,6 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - sade@1.8.1: - resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} - engines: {node: '>=6'} - safe-array-concat@1.1.2: resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} @@ -5009,6 +4962,10 @@ packages: resolution: {integrity: sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==} engines: {node: '>=12'} + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -5021,6 +4978,9 @@ packages: serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -5033,6 +4993,10 @@ packages: resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} engines: {node: '>= 0.4'} + shallow-clone@3.0.1: + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -5076,6 +5040,10 @@ packages: resolution: {integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==} engines: {node: '>=8'} + slash@2.0.0: + resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==} + engines: {node: '>=6'} + slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -5100,10 +5068,13 @@ packages: resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} engines: {node: '>= 14'} - socks@2.8.6: - resolution: {integrity: sha512-pe4Y2yzru68lXCb38aAqRf5gvN8YdjP1lok5o0J7BOHljkyCGKVz7H3vpVIXKD27rj2giOJ7DwVyk/GWrPHDWA==} + socks@2.8.5: + resolution: {integrity: sha512-iF+tNDQla22geJdTyJB1wM/qrX9DMRwWrciEPwWLPRWAUEM8sQiyxgckLxWT1f7+9VabJS0jTGGr4QgBuvi6Ww==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} @@ -5148,8 +5119,8 @@ packages: resolution: {integrity: sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - stable-hash-x@0.2.0: - resolution: {integrity: sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==} + stable-hash-x@0.1.1: + resolution: {integrity: sha512-l0x1D6vhnsNUGPFVDx45eif0y6eedVC8nm5uACTrVFJFtl2mLRW17aWtVyxFCpn5t94VUPkjU8vSLwIuwwqtJQ==} engines: {node: '>=12.0.0'} stable-hash@0.0.5: @@ -5343,9 +5314,6 @@ packages: tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - tinyexec@1.0.1: - resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} - tinyglobby@0.2.14: resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} @@ -5354,6 +5322,10 @@ packages: resolution: {integrity: sha512-noj0KdpWTBhwsKxMOXk0rN9otg4kTgLm4WohERRHbJ9IY+kSDKr3RmjitaQ3JFzny+DyvBOQKlFZhp0G0qNSfg==} hasBin: true + to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -5369,10 +5341,6 @@ packages: resolution: {integrity: sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==} engines: {node: '>= 0.4'} - tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true - ts-api-utils@1.0.3: resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} @@ -5394,28 +5362,6 @@ packages: resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} engines: {node: '>=6'} - tsdown@0.13.4: - resolution: {integrity: sha512-2uf0Xo170gmxwJEOgfb7V9y3k+Uq/dQJx4xfXYova7pqqTw9ZjxSvEeq7Y6l+Ys54GlBrRKvxKoEyNhuUcoCTg==} - engines: {node: '>=20.19.0'} - hasBin: true - peerDependencies: - '@arethetypeswrong/core': ^0.18.1 - publint: ^0.3.0 - typescript: ^5.0.0 - unplugin-lightningcss: ^0.4.0 - unplugin-unused: ^0.5.0 - peerDependenciesMeta: - '@arethetypeswrong/core': - optional: true - publint: - optional: true - typescript: - optional: true - unplugin-lightningcss: - optional: true - unplugin-unused: - optional: true - tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -5488,11 +5434,6 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - typescript@5.6.1-rc: - resolution: {integrity: sha512-E3b2+1zEFu84jB0YQi9BORDjz9+jGbwwy1Zi3G0LUNw7a7cePUrHMRNy8aPh53nXpkFGVHSxIZo5vKTfYaFiBQ==} - engines: {node: '>=14.17'} - hasBin: true - typescript@5.8.3: resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} engines: {node: '>=14.17'} @@ -5510,9 +5451,6 @@ packages: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} - unconfig@7.3.2: - resolution: {integrity: sha512-nqG5NNL2wFVGZ0NA/aCFw0oJ2pxSf1lwg4Z5ill8wd7K4KX/rQbHlwbh+bjctXL5Ly1xtzHenHGOK0b+lG6JVg==} - undici-types@7.8.0: resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} @@ -5567,20 +5505,12 @@ packages: resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==} engines: {node: '>=0.10.0'} - unplugin-unused@0.5.1: - resolution: {integrity: sha512-USnsy4XsInQFcIb/kSt5HbTkwIIYfW1ujGN0jPanq76IvG7RsqHPk4kJqDoZSqCgDkTjolr72a/f7K1Hr2XmWg==} - engines: {node: '>=20.18.0'} - - unplugin@2.3.5: - resolution: {integrity: sha512-RyWSb5AHmGtjjNQ6gIlA67sHOsWpsbWpwDokLwTcejVdOjEkJZh7QKu14J00gDDVSh8kGH4KYC/TNBceXFZhtw==} - engines: {node: '>=18.12.0'} - - unrs-resolver@1.11.1: - resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} - unrs-resolver@1.7.8: resolution: {integrity: sha512-2zsXwyOXmCX9nGz4vhtZRYhe30V78heAv+KDc21A/KMdovGHbZcixeD5JHEF0DrFXzdytwuzYclcPbvp8A3Jlw==} + unrs-resolver@1.9.0: + resolution: {integrity: sha512-wqaRu4UnzBD2ABTC1kLfBjAqIDZ5YUTr/MLGa7By47JV1bJDSW7jq/ZSLigB7enLe7ubNaJhtnBXgrc/50cEhg==} + update-browserslist-db@1.1.3: resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} hasBin: true @@ -5621,13 +5551,13 @@ packages: resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} engines: {node: '>=10.12.0'} + v8flags@3.2.0: + resolution: {integrity: sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==} + engines: {node: '>= 0.10'} + validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - validate-npm-package-name@5.0.1: - resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - verror@1.10.0: resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} engines: {'0': node >=0.6.0} @@ -5636,9 +5566,6 @@ packages: resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} engines: {node: '>= 8'} - webpack-virtual-modules@0.6.2: - resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} - whatwg-mimetype@4.0.0: resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} engines: {node: '>=18'} @@ -5661,6 +5588,9 @@ packages: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} engines: {node: '>= 0.4'} + which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + which-typed-array@1.1.15: resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} engines: {node: '>= 0.4'} @@ -5689,6 +5619,10 @@ packages: workerpool@9.3.2: resolution: {integrity: sha512-Xz4Nm9c+LiBHhDR5bDLnNzmj6+5F+cyEAWPMkbs2awq/dYazR/efelZzUAjB/y3kNHL+uzkHvxVVpaOfGCPV7A==} + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -5727,6 +5661,9 @@ packages: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} + y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -5746,6 +5683,10 @@ packages: engines: {node: '>= 14.6'} hasBin: true + yargs-parser@18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} @@ -5758,6 +5699,10 @@ packages: resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} engines: {node: '>=10'} + yargs@15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + yargs@16.2.0: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} engines: {node: '>=10'} @@ -5787,18 +5732,19 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@andrewbranch/untar.js@1.0.3': {} - - '@arethetypeswrong/core@0.18.2': + '@babel/cli@7.27.2(@babel/core@7.27.4)': dependencies: - '@andrewbranch/untar.js': 1.0.3 - '@loaderkit/resolve': 1.0.4 - cjs-module-lexer: 1.4.3 - fflate: 0.8.2 - lru-cache: 11.1.0 - semver: 7.7.2 - typescript: 5.6.1-rc - validate-npm-package-name: 5.0.1 + '@babel/core': 7.27.4 + '@jridgewell/trace-mapping': 0.3.25 + commander: 6.2.1 + convert-source-map: 2.0.0 + fs-readdir-recursive: 1.1.0 + glob: 7.2.3 + make-dir: 2.1.0 + slash: 2.0.0 + optionalDependencies: + '@nicolo-ribaudo/chokidar-2': 2.1.8-no-fsevents.3 + chokidar: 3.6.0 '@babel/code-frame@7.24.7': dependencies: @@ -5857,21 +5803,13 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.0.2 - '@babel/generator@7.28.0': - dependencies: - '@babel/parser': 7.28.0 - '@babel/types': 7.28.2 - '@jridgewell/gen-mapping': 0.3.12 - '@jridgewell/trace-mapping': 0.3.29 - jsesc: 3.1.0 - '@babel/helper-annotate-as-pure@7.24.7': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.25.2 '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.27.3 '@babel/helper-compilation-targets@7.27.2': dependencies: @@ -5933,14 +5871,14 @@ snapshots: '@babel/helper-member-expression-to-functions@7.27.1': dependencies: '@babel/traverse': 7.27.4 - '@babel/types': 7.28.2 + '@babel/types': 7.27.3 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.27.1': dependencies: '@babel/traverse': 7.27.4 - '@babel/types': 7.28.2 + '@babel/types': 7.27.3 transitivePeerDependencies: - supports-color @@ -5955,7 +5893,7 @@ snapshots: '@babel/helper-optimise-call-expression@7.27.1': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.27.3 '@babel/helper-plugin-utils@7.22.5': {} @@ -5984,12 +5922,16 @@ snapshots: '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: '@babel/traverse': 7.27.4 - '@babel/types': 7.28.2 + '@babel/types': 7.27.3 transitivePeerDependencies: - supports-color + '@babel/helper-string-parser@7.24.8': {} + '@babel/helper-string-parser@7.27.1': {} + '@babel/helper-validator-identifier@7.24.7': {} + '@babel/helper-validator-identifier@7.27.1': {} '@babel/helper-validator-option@7.27.1': {} @@ -5998,7 +5940,7 @@ snapshots: dependencies: '@babel/template': 7.27.2 '@babel/traverse': 7.27.4 - '@babel/types': 7.28.2 + '@babel/types': 7.27.3 transitivePeerDependencies: - supports-color @@ -6009,18 +5951,28 @@ snapshots: '@babel/highlight@7.24.7': dependencies: - '@babel/helper-validator-identifier': 7.27.1 + '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/parser@7.27.4': + '@babel/node@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/types': 7.27.3 + '@babel/core': 7.27.4 + '@babel/register': 7.27.1(@babel/core@7.27.4) + commander: 6.2.1 + core-js: 3.37.1 + node-environment-flags: 1.0.6 + regenerator-runtime: 0.14.1 + v8flags: 3.2.0 - '@babel/parser@7.28.0': + '@babel/parser@7.24.7': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.25.2 + + '@babel/parser@7.27.4': + dependencies: + '@babel/types': 7.27.3 '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.27.4)': dependencies: @@ -6491,9 +6443,18 @@ snapshots: dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/types': 7.28.2 + '@babel/types': 7.25.2 esutils: 2.0.3 + '@babel/register@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + clone-deep: 4.0.1 + find-cache-dir: 2.1.0 + make-dir: 2.1.0 + pirates: 4.0.6 + source-map-support: 0.5.21 + '@babel/regjsgen@0.8.0': {} '@babel/template@7.27.2': @@ -6514,35 +6475,34 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/types@7.27.3': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 + '@babel/types@7.25.2': + dependencies: + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 - '@babel/types@7.28.2': + '@babel/types@7.27.3': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 '@bcoe/v8-coverage@1.0.2': {} - '@braidai/lang@1.1.1': {} - '@colors/colors@1.5.0': optional: true - '@emnapi/core@1.4.5': + '@emnapi/core@1.4.3': dependencies: - '@emnapi/wasi-threads': 1.0.4 + '@emnapi/wasi-threads': 1.0.2 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.4.5': + '@emnapi/runtime@1.4.3': dependencies: tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.0.4': + '@emnapi/wasi-threads@1.0.2': dependencies: tslib: 2.8.1 optional: true @@ -6596,7 +6556,7 @@ snapshots: '@es-joy/jsdoccomment@0.50.2': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/types': 8.34.1 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 4.1.0 @@ -6807,10 +6767,10 @@ snapshots: '@graphql-tools/graphql-tag-pluck@8.3.19(graphql@16.11.0)': dependencies: '@babel/core': 7.27.4 - '@babel/parser': 7.28.0 + '@babel/parser': 7.27.4 '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.27.4) '@babel/traverse': 7.27.4 - '@babel/types': 7.28.2 + '@babel/types': 7.27.3 '@graphql-tools/utils': 10.8.6(graphql@16.11.0) graphql: 16.11.0 tslib: 2.8.1 @@ -6956,16 +6916,11 @@ snapshots: '@istanbuljs/schema@0.1.3': {} - '@jridgewell/gen-mapping@0.3.12': - dependencies: - '@jridgewell/sourcemap-codec': 1.5.4 - '@jridgewell/trace-mapping': 0.3.29 - '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.4 - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.25 '@jridgewell/resolve-uri@3.1.1': {} @@ -6973,40 +6928,25 @@ snapshots: '@jridgewell/sourcemap-codec@1.4.15': {} - '@jridgewell/sourcemap-codec@1.5.4': {} - '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping@0.3.29': - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.5.4 - - '@loaderkit/resolve@1.0.4': - dependencies: - '@braidai/lang': 1.1.1 - - '@napi-rs/wasm-runtime@0.2.12': + '@napi-rs/wasm-runtime@0.2.11': dependencies: - '@emnapi/core': 1.4.5 - '@emnapi/runtime': 1.4.5 - '@tybys/wasm-util': 0.10.0 - optional: true - - '@napi-rs/wasm-runtime@1.0.1': - dependencies: - '@emnapi/core': 1.4.5 - '@emnapi/runtime': 1.4.5 - '@tybys/wasm-util': 0.10.0 + '@emnapi/core': 1.4.3 + '@emnapi/runtime': 1.4.3 + '@tybys/wasm-util': 0.9.0 optional: true '@next/eslint-plugin-next@15.3.3': dependencies: fast-glob: 3.3.1 + '@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3': + optional: true + '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': dependencies: eslint-scope: 5.1.1 @@ -7027,7 +6967,7 @@ snapshots: '@npmcli/agent@2.2.2': dependencies: - agent-base: 7.1.4 + agent-base: 7.1.3 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 lru-cache: 10.4.3 @@ -7100,10 +7040,6 @@ snapshots: dependencies: '@octokit/openapi-types': 25.1.0 - '@oxc-project/runtime@0.80.0': {} - - '@oxc-project/types@0.80.0': {} - '@pkgjs/parseargs@0.11.0': optional: true @@ -7121,62 +7057,10 @@ snapshots: '@pnpm/network.ca-file': 1.0.2 config-chain: 1.1.13 - '@publint/pack@0.1.2': {} - - '@quansync/fs@0.1.3': - dependencies: - quansync: 0.2.10 - '@repeaterjs/repeater@3.0.5': {} '@repeaterjs/repeater@3.0.6': {} - '@rolldown/binding-android-arm64@1.0.0-beta.31': - optional: true - - '@rolldown/binding-darwin-arm64@1.0.0-beta.31': - optional: true - - '@rolldown/binding-darwin-x64@1.0.0-beta.31': - optional: true - - '@rolldown/binding-freebsd-x64@1.0.0-beta.31': - optional: true - - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.31': - optional: true - - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.31': - optional: true - - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.31': - optional: true - - '@rolldown/binding-linux-arm64-ohos@1.0.0-beta.31': - optional: true - - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.31': - optional: true - - '@rolldown/binding-linux-x64-musl@1.0.0-beta.31': - optional: true - - '@rolldown/binding-wasm32-wasi@1.0.0-beta.31': - dependencies: - '@napi-rs/wasm-runtime': 1.0.1 - optional: true - - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.31': - optional: true - - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.31': - optional: true - - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.31': - optional: true - - '@rolldown/pluginutils@1.0.0-beta.31': {} - '@sec-ant/readable-stream@0.4.1': {} '@semantic-release/commit-analyzer@13.0.1(semantic-release@24.2.5(typescript@5.8.3))': @@ -7268,7 +7152,7 @@ snapshots: - supports-color - typescript - '@tybys/wasm-util@0.10.0': + '@tybys/wasm-util@0.9.0': dependencies: tslib: 2.8.1 optional: true @@ -7401,7 +7285,7 @@ snapshots: '@typescript-eslint/project-service@8.33.0(typescript@5.8.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.33.0(typescript@5.8.3) - '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/types': 8.34.1 debug: 4.4.1(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -7410,7 +7294,7 @@ snapshots: '@typescript-eslint/project-service@8.34.1(typescript@5.8.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.34.1(typescript@5.8.3) - '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/types': 8.34.1 debug: 4.4.1(supports-color@8.1.1) typescript: 5.8.3 transitivePeerDependencies: @@ -7485,8 +7369,6 @@ snapshots: '@typescript-eslint/types@8.34.1': {} - '@typescript-eslint/types@8.38.0': {} - '@typescript-eslint/typescript-estree@6.21.0(typescript@5.8.3)': dependencies: '@typescript-eslint/types': 6.21.0 @@ -7603,118 +7485,118 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@unrs/resolver-binding-android-arm-eabi@1.11.1': - optional: true - - '@unrs/resolver-binding-android-arm64@1.11.1': + '@unrs/resolver-binding-android-arm-eabi@1.9.0': optional: true - '@unrs/resolver-binding-darwin-arm64@1.11.1': + '@unrs/resolver-binding-android-arm64@1.9.0': optional: true '@unrs/resolver-binding-darwin-arm64@1.7.8': optional: true - '@unrs/resolver-binding-darwin-x64@1.11.1': + '@unrs/resolver-binding-darwin-arm64@1.9.0': optional: true '@unrs/resolver-binding-darwin-x64@1.7.8': optional: true - '@unrs/resolver-binding-freebsd-x64@1.11.1': + '@unrs/resolver-binding-darwin-x64@1.9.0': optional: true '@unrs/resolver-binding-freebsd-x64@1.7.8': optional: true - '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': + '@unrs/resolver-binding-freebsd-x64@1.9.0': optional: true '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.8': optional: true - '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': + '@unrs/resolver-binding-linux-arm-gnueabihf@1.9.0': optional: true '@unrs/resolver-binding-linux-arm-musleabihf@1.7.8': optional: true - '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': + '@unrs/resolver-binding-linux-arm-musleabihf@1.9.0': optional: true '@unrs/resolver-binding-linux-arm64-gnu@1.7.8': optional: true - '@unrs/resolver-binding-linux-arm64-musl@1.11.1': + '@unrs/resolver-binding-linux-arm64-gnu@1.9.0': optional: true '@unrs/resolver-binding-linux-arm64-musl@1.7.8': optional: true - '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': + '@unrs/resolver-binding-linux-arm64-musl@1.9.0': optional: true '@unrs/resolver-binding-linux-ppc64-gnu@1.7.8': optional: true - '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': + '@unrs/resolver-binding-linux-ppc64-gnu@1.9.0': optional: true '@unrs/resolver-binding-linux-riscv64-gnu@1.7.8': optional: true - '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': + '@unrs/resolver-binding-linux-riscv64-gnu@1.9.0': optional: true '@unrs/resolver-binding-linux-riscv64-musl@1.7.8': optional: true - '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': + '@unrs/resolver-binding-linux-riscv64-musl@1.9.0': optional: true '@unrs/resolver-binding-linux-s390x-gnu@1.7.8': optional: true - '@unrs/resolver-binding-linux-x64-gnu@1.11.1': + '@unrs/resolver-binding-linux-s390x-gnu@1.9.0': optional: true '@unrs/resolver-binding-linux-x64-gnu@1.7.8': optional: true - '@unrs/resolver-binding-linux-x64-musl@1.11.1': + '@unrs/resolver-binding-linux-x64-gnu@1.9.0': optional: true '@unrs/resolver-binding-linux-x64-musl@1.7.8': optional: true - '@unrs/resolver-binding-wasm32-wasi@1.11.1': - dependencies: - '@napi-rs/wasm-runtime': 0.2.12 + '@unrs/resolver-binding-linux-x64-musl@1.9.0': optional: true '@unrs/resolver-binding-wasm32-wasi@1.7.8': dependencies: - '@napi-rs/wasm-runtime': 0.2.12 + '@napi-rs/wasm-runtime': 0.2.11 optional: true - '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': + '@unrs/resolver-binding-wasm32-wasi@1.9.0': + dependencies: + '@napi-rs/wasm-runtime': 0.2.11 optional: true '@unrs/resolver-binding-win32-arm64-msvc@1.7.8': optional: true - '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': + '@unrs/resolver-binding-win32-arm64-msvc@1.9.0': optional: true '@unrs/resolver-binding-win32-ia32-msvc@1.7.8': optional: true - '@unrs/resolver-binding-win32-x64-msvc@1.11.1': + '@unrs/resolver-binding-win32-ia32-msvc@1.9.0': optional: true '@unrs/resolver-binding-win32-x64-msvc@1.7.8': optional: true + '@unrs/resolver-binding-win32-x64-msvc@1.9.0': + optional: true + '@vitest/eslint-plugin@1.2.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@typescript-eslint/utils': 8.33.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) @@ -7752,6 +7634,10 @@ snapshots: dependencies: acorn: 2.7.0 + acorn-jsx@5.3.2(acorn@8.14.1): + dependencies: + acorn: 8.14.1 + acorn-jsx@5.3.2(acorn@8.15.0): dependencies: acorn: 8.15.0 @@ -7760,6 +7646,8 @@ snapshots: acorn@8.12.0: {} + acorn@8.14.1: {} + acorn@8.15.0: {} agent-base@7.1.0: @@ -7768,7 +7656,7 @@ snapshots: transitivePeerDependencies: - supports-color - agent-base@7.1.4: + agent-base@7.1.3: optional: true aggregate-error@3.1.0: @@ -7809,10 +7697,14 @@ snapshots: ansi-styles@6.2.1: {} - ansis@4.1.0: {} - any-promise@1.3.0: {} + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + optional: true + are-docs-informative@0.0.2: {} argparse@1.0.10: @@ -7878,6 +7770,16 @@ snapshots: es-abstract: 1.24.0 es-shim-unscopables: 1.0.2 + array.prototype.reduce@1.0.7: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-array-method-boxes-properly: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + is-string: 1.0.7 + array.prototype.tosorted@1.1.4: dependencies: call-bind: 1.0.7 @@ -7917,11 +7819,6 @@ snapshots: assertion-error@2.0.1: {} - ast-kit@2.1.1: - dependencies: - '@babel/parser': 7.28.0 - pathe: 2.0.3 - ast-types-flow@0.0.8: {} ast-types@0.16.1: @@ -7992,7 +7889,8 @@ snapshots: before-after-hook@4.0.0: {} - birpc@2.5.0: {} + binary-extensions@2.2.0: + optional: true bluebird@2.11.0: {} @@ -8026,6 +7924,8 @@ snapshots: node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.25.0) + buffer-from@1.1.2: {} + builtin-modules@4.0.0: {} bundle-name@4.1.0: @@ -8046,8 +7946,6 @@ snapshots: yargs: 17.7.2 yargs-parser: 21.1.1 - cac@6.7.14: {} - cacache@18.0.4: dependencies: '@npmcli/fs': 3.1.1 @@ -8126,6 +8024,19 @@ snapshots: check-error@2.1.1: {} + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + optional: true + chokidar@4.0.3: dependencies: readdirp: 4.1.2 @@ -8135,8 +8046,6 @@ snapshots: ci-info@4.2.0: {} - cjs-module-lexer@1.4.3: {} - clean-regexp@1.0.0: dependencies: escape-string-regexp: 1.0.5 @@ -8172,6 +8081,12 @@ snapshots: slice-ansi: 5.0.0 string-width: 7.0.0 + cliui@6.0.0: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + cliui@7.0.4: dependencies: string-width: 4.2.3 @@ -8184,6 +8099,12 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + clone-deep@4.0.1: + dependencies: + is-plain-object: 2.0.4 + kind-of: 6.0.3 + shallow-clone: 3.0.1 + clone-regexp@3.0.0: dependencies: is-regexp: 3.1.0 @@ -8208,8 +8129,12 @@ snapshots: commander@14.0.0: {} + commander@6.2.1: {} + comment-parser@1.4.1: {} + commondir@1.0.1: {} + compare-func@2.0.0: dependencies: array-ify: 1.0.0 @@ -8217,8 +8142,6 @@ snapshots: concat-map@0.0.1: {} - confbox@0.2.2: {} - config-chain@1.1.13: dependencies: ini: 1.3.8 @@ -8255,6 +8178,8 @@ snapshots: dependencies: browserslist: 4.25.0 + core-js@3.37.1: {} + core-util-is@1.0.2: {} core-util-is@1.0.3: {} @@ -8363,6 +8288,8 @@ snapshots: optionalDependencies: supports-color: 8.1.1 + decamelize@1.2.0: {} + decamelize@4.0.0: {} decamelize@6.0.0: {} @@ -8396,14 +8323,10 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 - defu@6.1.4: {} - delayed-stream@1.0.0: {} diff@7.0.0: {} - diff@8.0.2: {} - dir-glob@3.0.1: dependencies: path-type: 4.0.0 @@ -8440,8 +8363,6 @@ snapshots: dset@3.1.4: {} - dts-resolver@2.1.1: {} - dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -8469,8 +8390,6 @@ snapshots: emojilib@2.4.0: {} - empathic@2.0.0: {} - encoding@0.1.13: dependencies: iconv-lite: 0.6.3 @@ -8613,6 +8532,8 @@ snapshots: unbox-primitive: 1.1.0 which-typed-array: 1.1.19 + es-array-method-boxes-properly@1.0.0: {} + es-define-property@1.0.0: dependencies: get-intrinsic: 1.2.4 @@ -8713,7 +8634,7 @@ snapshots: eslint: 9.29.0(jiti@2.4.2) semver: 7.7.2 - eslint-config-canonical@44.9.5(@types/eslint@9.6.1)(@types/node@24.0.3)(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): + eslint-config-canonical@44.9.5(@types/eslint@9.6.1)(@types/node@24.0.3)(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): dependencies: '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.0.3)(eslint@9.29.0(jiti@2.4.2))(graphql@16.11.0)(typescript@5.8.3) '@next/eslint-plugin-next': 15.3.3 @@ -8723,13 +8644,13 @@ snapshots: '@vitest/eslint-plugin': 1.2.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) eslint: 9.29.0(jiti@2.4.2) eslint-config-prettier: 10.1.5(eslint@9.29.0(jiti@2.4.2)) - eslint-import-resolver-typescript: 4.4.2(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 4.4.2(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) eslint-plugin-ava: 15.0.1(eslint@9.29.0(jiti@2.4.2)) - eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) eslint-plugin-eslint-comments: 3.2.0(eslint@9.29.0(jiti@2.4.2)) eslint-plugin-fp: 2.3.0(eslint@9.29.0(jiti@2.4.2)) eslint-plugin-functional: 9.0.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-import: eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) eslint-plugin-jest: 28.12.0(@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) eslint-plugin-jsdoc: 50.6.17(eslint@9.29.0(jiti@2.4.2)) eslint-plugin-jsonc: 2.20.1(eslint@9.29.0(jiti@2.4.2)) @@ -8785,12 +8706,12 @@ snapshots: optionalDependencies: unrs-resolver: 1.7.8 - eslint-import-context@0.1.9(unrs-resolver@1.11.1): + eslint-import-context@0.1.8(unrs-resolver@1.9.0): dependencies: get-tsconfig: 4.10.1 - stable-hash-x: 0.2.0 + stable-hash-x: 0.1.1 optionalDependencies: - unrs-resolver: 1.11.1 + unrs-resolver: 1.9.0 eslint-import-resolver-node@0.3.9: dependencies: @@ -8801,7 +8722,7 @@ snapshots: - supports-color optional: true - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.1(supports-color@8.1.1) @@ -8810,14 +8731,14 @@ snapshots: is-bun-module: 2.0.0 stable-hash: 0.0.5 tinyglobby: 0.2.14 - unrs-resolver: 1.11.1 + unrs-resolver: 1.9.0 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-import: eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-import-x: 4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@4.4.2(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)): + eslint-import-resolver-typescript@4.4.2(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)): dependencies: debug: 4.4.1(supports-color@8.1.1) eslint: 9.29.0(jiti@2.4.2) @@ -8828,8 +8749,8 @@ snapshots: tinyglobby: 0.2.14 unrs-resolver: 1.7.8 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-import: eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-import-x: 4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color @@ -8839,14 +8760,14 @@ snapshots: esquery: 1.6.0 jsonc-eslint-parser: 2.4.0 - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) eslint: 9.29.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color @@ -8862,14 +8783,14 @@ snapshots: pkg-dir: 5.0.0 resolve-from: 5.0.0 - eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): + eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): dependencies: '@typescript-eslint/utils': 8.33.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) array-includes: 3.1.8 debug: 4.4.1(supports-color@8.1.1) doctrine: 3.0.0 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) is-get-set-prop: 1.0.0 is-js-type: 2.0.0 is-obj-prop: 1.0.0 @@ -8924,18 +8845,18 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)): + eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)): dependencies: - '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/types': 8.34.1 comment-parser: 1.4.1 debug: 4.4.1(supports-color@8.1.1) eslint: 9.29.0(jiti@2.4.2) - eslint-import-context: 0.1.9(unrs-resolver@1.11.1) + eslint-import-context: 0.1.8(unrs-resolver@1.9.0) is-glob: 4.0.3 minimatch: 10.0.3 semver: 7.7.2 - stable-hash-x: 0.2.0 - unrs-resolver: 1.11.1 + stable-hash-x: 0.1.1 + unrs-resolver: 1.9.0 optionalDependencies: '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) eslint-import-resolver-node: 0.3.9 @@ -9249,8 +9170,8 @@ snapshots: espree@9.6.1: dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) + acorn: 8.14.1 + acorn-jsx: 5.3.2(acorn@8.14.1) eslint-visitor-keys: 3.4.3 esprima@4.0.1: {} @@ -9333,8 +9254,6 @@ snapshots: exponential-backoff@3.1.2: optional: true - exsolve@1.0.7: {} - extend@3.0.2: {} extsprintf@1.3.0: {} @@ -9382,8 +9301,6 @@ snapshots: node-domexception: 1.0.0 web-streams-polyfill: 3.2.1 - fflate@0.8.2: {} - figures@2.0.0: dependencies: escape-string-regexp: 1.0.5 @@ -9406,12 +9323,22 @@ snapshots: dependencies: to-regex-range: 5.0.1 + find-cache-dir@2.1.0: + dependencies: + commondir: 1.0.1 + make-dir: 2.1.0 + pkg-dir: 3.0.0 + find-up-simple@1.0.0: {} find-up@2.1.0: dependencies: locate-path: 2.0.0 + find-up@3.0.0: + dependencies: + locate-path: 3.0.0 + find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -9493,8 +9420,13 @@ snapshots: minipass: 7.1.2 optional: true + fs-readdir-recursive@1.1.0: {} + fs.realpath@1.0.0: {} + fsevents@2.3.3: + optional: true + function-bind@1.1.2: {} function-timeout@0.1.1: {} @@ -9798,9 +9730,11 @@ snapshots: highlight.js@10.7.3: {} - hook-std@3.0.0: {} + homedir-polyfill@1.0.3: + dependencies: + parse-passwd: 1.0.0 - hookable@5.5.3: {} + hook-std@3.0.0: {} hosted-git-info@7.0.1: dependencies: @@ -9833,7 +9767,7 @@ snapshots: http-proxy-agent@7.0.2: dependencies: - agent-base: 7.1.4 + agent-base: 7.1.3 debug: 4.4.1(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -9854,7 +9788,7 @@ snapshots: https-proxy-agent@7.0.6: dependencies: - agent-base: 7.1.4 + agent-base: 7.1.3 debug: 4.4.1(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -9973,6 +9907,11 @@ snapshots: dependencies: has-bigints: 1.0.2 + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.2.0 + optional: true + is-boolean-object@1.1.2: dependencies: call-bind: 1.0.7 @@ -10099,6 +10038,10 @@ snapshots: is-plain-obj@4.1.0: {} + is-plain-object@2.0.4: + dependencies: + isobject: 3.0.1 + is-proto-prop@2.0.0: dependencies: lowercase-keys: 1.0.1 @@ -10193,6 +10136,8 @@ snapshots: isexe@3.1.1: optional: true + isobject@3.0.1: {} + isomorphic-ws@5.0.0(ws@8.18.2): dependencies: ws: 8.18.2 @@ -10212,7 +10157,7 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: '@babel/core': 7.27.4 - '@babel/parser': 7.28.0 + '@babel/parser': 7.24.7 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.7.2 @@ -10255,8 +10200,6 @@ snapshots: js-tokens@4.0.0: {} - js-tokens@9.0.1: {} - js-types@1.0.0: {} js-yaml@3.14.1: @@ -10320,7 +10263,7 @@ snapshots: jsonc-eslint-parser@2.4.0: dependencies: - acorn: 8.15.0 + acorn: 8.14.1 eslint-visitor-keys: 3.4.3 espree: 9.6.1 semver: 7.7.2 @@ -10349,6 +10292,8 @@ snapshots: dependencies: json-buffer: 3.0.1 + kind-of@6.0.3: {} + language-subtag-registry@0.3.22: {} language-tags@1.0.9: @@ -10409,6 +10354,11 @@ snapshots: p-locate: 2.0.0 path-exists: 3.0.0 + locate-path@3.0.0: + dependencies: + p-locate: 3.0.0 + path-exists: 3.0.0 + locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -10474,6 +10424,11 @@ snapshots: dependencies: yallist: 3.1.1 + make-dir@2.1.0: + dependencies: + pify: 4.0.1 + semver: 5.7.2 + make-dir@4.0.0: dependencies: semver: 7.7.2 @@ -10553,6 +10508,10 @@ snapshots: dependencies: '@isaacs/brace-expansion': 5.0.0 + minimatch@3.0.5: + dependencies: + brace-expansion: 1.1.11 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -10640,8 +10599,6 @@ snapshots: moment@2.30.1: {} - mri@1.2.0: {} - ms@2.1.3: {} mz@2.7.0: @@ -10650,14 +10607,12 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 - nan@2.23.0: + nan@2.22.2: optional: true nano-spawn@1.0.2: {} - napi-postinstall@0.2.5: {} - - napi-postinstall@0.3.2: {} + napi-postinstall@0.2.4: {} natural-compare@1.4.0: {} @@ -10679,6 +10634,11 @@ snapshots: emojilib: 2.4.0 skin-tone: 2.0.0 + node-environment-flags@1.0.6: + dependencies: + object.getownpropertydescriptors: 2.1.8 + semver: 5.7.2 + node-fetch@3.3.2: dependencies: data-uri-to-buffer: 4.0.1 @@ -10719,6 +10679,9 @@ snapshots: dependencies: remove-trailing-separator: 1.1.0 + normalize-path@3.0.0: + optional: true + normalize-url@8.0.0: {} npm-run-path@5.2.0: @@ -10776,6 +10739,16 @@ snapshots: es-abstract: 1.23.3 es-object-atoms: 1.0.0 + object.getownpropertydescriptors@2.1.8: + dependencies: + array.prototype.reduce: 1.0.7 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + gopd: 1.0.1 + safe-array-concat: 1.1.2 + object.values@1.2.0: dependencies: call-bind: 1.0.7 @@ -10863,6 +10836,10 @@ snapshots: dependencies: p-limit: 1.3.0 + p-locate@3.0.0: + dependencies: + p-limit: 2.3.0 + p-locate@4.1.0: dependencies: p-limit: 2.3.0 @@ -10886,8 +10863,6 @@ snapshots: package-json-from-dist@1.0.0: {} - package-manager-detector@1.3.0: {} - parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -10916,6 +10891,8 @@ snapshots: parse-ms@4.0.0: {} + parse-passwd@1.0.0: {} + parse-statements@1.0.11: {} parse5-htmlparser2-tree-adapter@6.0.1: @@ -10954,8 +10931,6 @@ snapshots: path-type@5.0.0: {} - pathe@2.0.3: {} - pathval@2.0.0: {} performance-now@2.1.0: {} @@ -10970,20 +10945,22 @@ snapshots: pify@3.0.0: {} + pify@4.0.1: {} + + pirates@4.0.6: {} + pkg-conf@2.1.0: dependencies: find-up: 2.1.0 load-json-file: 4.0.0 - pkg-dir@5.0.0: + pkg-dir@3.0.0: dependencies: - find-up: 5.0.0 + find-up: 3.0.0 - pkg-types@2.2.0: + pkg-dir@5.0.0: dependencies: - confbox: 0.2.2 - exsolve: 1.0.7 - pathe: 2.0.3 + find-up: 5.0.0 pluralize@8.0.0: {} @@ -11030,19 +11007,10 @@ snapshots: psl@1.9.0: {} - publint@0.3.12: - dependencies: - '@publint/pack': 0.1.2 - package-manager-detector: 1.3.0 - picocolors: 1.1.1 - sade: 1.8.1 - punycode@2.3.1: {} qs@6.5.3: {} - quansync@0.2.10: {} - queue-microtask@1.2.3: {} rambda@7.5.0: {} @@ -11065,7 +11033,7 @@ snapshots: re2@1.20.9: dependencies: install-artifact-from-github: 1.4.0 - nan: 2.23.0 + nan: 2.22.2 node-gyp: 10.3.1 transitivePeerDependencies: - supports-color @@ -11103,6 +11071,11 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + optional: true + readdirp@4.1.2: {} recast@0.23.11: @@ -11138,6 +11111,8 @@ snapshots: regenerate@1.4.2: {} + regenerator-runtime@0.14.1: {} + regexp-ast-analysis@0.7.1: dependencies: '@eslint-community/regexpp': 4.12.1 @@ -11195,6 +11170,12 @@ snapshots: remove-trailing-separator@1.1.0: {} + replace@1.2.2: + dependencies: + chalk: 2.4.2 + minimatch: 3.0.5 + yargs: 15.4.1 + req-all@0.1.0: {} request@2.88.2: @@ -11222,6 +11203,8 @@ snapshots: require-directory@2.1.1: {} + require-main-filename@2.0.0: {} + requireindex@1.1.0: {} resolve-from@4.0.0: {} @@ -11265,61 +11248,23 @@ snapshots: dependencies: glob: 7.2.3 + rimraf@6.0.1: + dependencies: + glob: 11.0.3 + package-json-from-dist: 1.0.0 + roarr@7.21.1: dependencies: fast-printf: 1.6.9 safe-stable-stringify: 2.4.3 semver-compare: 1.0.0 - rolldown-plugin-dts@0.15.6(rolldown@1.0.0-beta.31)(typescript@5.8.3): - dependencies: - '@babel/generator': 7.28.0 - '@babel/parser': 7.28.0 - '@babel/types': 7.28.2 - ast-kit: 2.1.1 - birpc: 2.5.0 - debug: 4.4.1(supports-color@8.1.1) - dts-resolver: 2.1.1 - get-tsconfig: 4.10.1 - rolldown: 1.0.0-beta.31 - optionalDependencies: - typescript: 5.8.3 - transitivePeerDependencies: - - oxc-resolver - - supports-color - - rolldown@1.0.0-beta.31: - dependencies: - '@oxc-project/runtime': 0.80.0 - '@oxc-project/types': 0.80.0 - '@rolldown/pluginutils': 1.0.0-beta.31 - ansis: 4.1.0 - optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-beta.31 - '@rolldown/binding-darwin-arm64': 1.0.0-beta.31 - '@rolldown/binding-darwin-x64': 1.0.0-beta.31 - '@rolldown/binding-freebsd-x64': 1.0.0-beta.31 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.31 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.31 - '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.31 - '@rolldown/binding-linux-arm64-ohos': 1.0.0-beta.31 - '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.31 - '@rolldown/binding-linux-x64-musl': 1.0.0-beta.31 - '@rolldown/binding-wasm32-wasi': 1.0.0-beta.31 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.31 - '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.31 - '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.31 - run-applescript@7.0.0: {} run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - sade@1.8.1: - dependencies: - mri: 1.2.0 - safe-array-concat@1.1.2: dependencies: call-bind: 1.0.7 @@ -11409,6 +11354,8 @@ snapshots: semver-regex@4.0.5: {} + semver@5.7.2: {} + semver@6.3.1: {} semver@7.7.2: {} @@ -11417,6 +11364,8 @@ snapshots: dependencies: randombytes: 2.1.0 + set-blocking@2.0.0: {} + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -11439,6 +11388,10 @@ snapshots: es-errors: 1.3.0 es-object-atoms: 1.1.1 + shallow-clone@3.0.1: + dependencies: + kind-of: 6.0.3 + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -11494,6 +11447,8 @@ snapshots: dependencies: unicode-emoji-modifier-base: 1.0.0 + slash@2.0.0: {} + slash@3.0.0: {} slash@5.1.0: {} @@ -11513,19 +11468,24 @@ snapshots: socks-proxy-agent@8.0.5: dependencies: - agent-base: 7.1.4 + agent-base: 7.1.3 debug: 4.4.1(supports-color@8.1.1) - socks: 2.8.6 + socks: 2.8.5 transitivePeerDependencies: - supports-color optional: true - socks@2.8.6: + socks@2.8.5: dependencies: ip-address: 9.0.5 smart-buffer: 4.2.0 optional: true + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + source-map@0.6.1: {} source-map@0.7.4: @@ -11578,7 +11538,7 @@ snapshots: minipass: 7.1.2 optional: true - stable-hash-x@0.2.0: {} + stable-hash-x@0.1.1: {} stable-hash@0.0.5: {} @@ -11811,8 +11771,6 @@ snapshots: tiny-invariant@1.3.3: {} - tinyexec@1.0.1: {} - tinyglobby@0.2.14: dependencies: fdir: 6.4.5(picomatch@4.0.2) @@ -11820,6 +11778,8 @@ snapshots: tlds@1.248.0: {} + to-fast-properties@2.0.0: {} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -11833,8 +11793,6 @@ snapshots: traverse@0.6.8: {} - tree-kill@1.2.2: {} - ts-api-utils@1.0.3(typescript@5.8.3): dependencies: typescript: 5.8.3 @@ -11854,33 +11812,6 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 - tsdown@0.13.4(@arethetypeswrong/core@0.18.2)(publint@0.3.12)(typescript@5.8.3)(unplugin-unused@0.5.1): - dependencies: - ansis: 4.1.0 - cac: 6.7.14 - chokidar: 4.0.3 - debug: 4.4.1(supports-color@8.1.1) - diff: 8.0.2 - empathic: 2.0.0 - hookable: 5.5.3 - rolldown: 1.0.0-beta.31 - rolldown-plugin-dts: 0.15.6(rolldown@1.0.0-beta.31)(typescript@5.8.3) - semver: 7.7.2 - tinyexec: 1.0.1 - tinyglobby: 0.2.14 - tree-kill: 1.2.2 - unconfig: 7.3.2 - optionalDependencies: - '@arethetypeswrong/core': 0.18.2 - publint: 0.3.12 - typescript: 5.8.3 - unplugin-unused: 0.5.1 - transitivePeerDependencies: - - '@typescript/native-preview' - - oxc-resolver - - supports-color - - vue-tsc - tslib@2.8.1: {} tunnel-agent@0.6.0: @@ -11980,8 +11911,6 @@ snapshots: transitivePeerDependencies: - supports-color - typescript@5.6.1-rc: {} - typescript@5.8.3: {} uglify-js@3.17.4: @@ -12001,13 +11930,6 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 - unconfig@7.3.2: - dependencies: - '@quansync/fs': 0.1.3 - defu: 6.1.4 - jiti: 2.4.2 - quansync: 0.2.10 - undici-types@7.8.0: {} unicode-canonical-property-names-ecmascript@2.0.0: {} @@ -12049,46 +11971,9 @@ snapshots: dependencies: normalize-path: 2.1.1 - unplugin-unused@0.5.1: - dependencies: - js-tokens: 9.0.1 - picocolors: 1.1.1 - pkg-types: 2.2.0 - unplugin: 2.3.5 - - unplugin@2.3.5: - dependencies: - acorn: 8.15.0 - picomatch: 4.0.2 - webpack-virtual-modules: 0.6.2 - - unrs-resolver@1.11.1: - dependencies: - napi-postinstall: 0.3.2 - optionalDependencies: - '@unrs/resolver-binding-android-arm-eabi': 1.11.1 - '@unrs/resolver-binding-android-arm64': 1.11.1 - '@unrs/resolver-binding-darwin-arm64': 1.11.1 - '@unrs/resolver-binding-darwin-x64': 1.11.1 - '@unrs/resolver-binding-freebsd-x64': 1.11.1 - '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.1 - '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.1 - '@unrs/resolver-binding-linux-arm64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-arm64-musl': 1.11.1 - '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-riscv64-musl': 1.11.1 - '@unrs/resolver-binding-linux-s390x-gnu': 1.11.1 - '@unrs/resolver-binding-linux-x64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-x64-musl': 1.11.1 - '@unrs/resolver-binding-wasm32-wasi': 1.11.1 - '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1 - '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 - '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 - unrs-resolver@1.7.8: dependencies: - napi-postinstall: 0.2.5 + napi-postinstall: 0.2.4 optionalDependencies: '@unrs/resolver-binding-darwin-arm64': 1.7.8 '@unrs/resolver-binding-darwin-x64': 1.7.8 @@ -12108,6 +11993,30 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.7.8 '@unrs/resolver-binding-win32-x64-msvc': 1.7.8 + unrs-resolver@1.9.0: + dependencies: + napi-postinstall: 0.2.4 + optionalDependencies: + '@unrs/resolver-binding-android-arm-eabi': 1.9.0 + '@unrs/resolver-binding-android-arm64': 1.9.0 + '@unrs/resolver-binding-darwin-arm64': 1.9.0 + '@unrs/resolver-binding-darwin-x64': 1.9.0 + '@unrs/resolver-binding-freebsd-x64': 1.9.0 + '@unrs/resolver-binding-linux-arm-gnueabihf': 1.9.0 + '@unrs/resolver-binding-linux-arm-musleabihf': 1.9.0 + '@unrs/resolver-binding-linux-arm64-gnu': 1.9.0 + '@unrs/resolver-binding-linux-arm64-musl': 1.9.0 + '@unrs/resolver-binding-linux-ppc64-gnu': 1.9.0 + '@unrs/resolver-binding-linux-riscv64-gnu': 1.9.0 + '@unrs/resolver-binding-linux-riscv64-musl': 1.9.0 + '@unrs/resolver-binding-linux-s390x-gnu': 1.9.0 + '@unrs/resolver-binding-linux-x64-gnu': 1.9.0 + '@unrs/resolver-binding-linux-x64-musl': 1.9.0 + '@unrs/resolver-binding-wasm32-wasi': 1.9.0 + '@unrs/resolver-binding-win32-arm64-msvc': 1.9.0 + '@unrs/resolver-binding-win32-ia32-msvc': 1.9.0 + '@unrs/resolver-binding-win32-x64-msvc': 1.9.0 + update-browserslist-db@1.1.3(browserslist@4.25.0): dependencies: browserslist: 4.25.0 @@ -12137,17 +12046,19 @@ snapshots: v8-to-istanbul@9.2.0: dependencies: - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/trace-mapping': 0.3.25 '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 + v8flags@3.2.0: + dependencies: + homedir-polyfill: 1.0.3 + validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - validate-npm-package-name@5.0.1: {} - verror@1.10.0: dependencies: assert-plus: 1.0.0 @@ -12156,8 +12067,6 @@ snapshots: web-streams-polyfill@3.2.1: {} - webpack-virtual-modules@0.6.2: {} - whatwg-mimetype@4.0.0: {} whatwg-url-compat@0.6.5: @@ -12203,6 +12112,8 @@ snapshots: is-weakmap: 2.0.2 is-weakset: 2.0.4 + which-module@2.0.1: {} + which-typed-array@1.1.15: dependencies: available-typed-arrays: 1.0.7 @@ -12236,6 +12147,12 @@ snapshots: workerpool@9.3.2: {} + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 @@ -12264,6 +12181,8 @@ snapshots: xtend@4.0.2: {} + y18n@4.0.3: {} + y18n@5.0.8: {} yallist@3.1.1: {} @@ -12278,6 +12197,11 @@ snapshots: yaml@2.8.0: {} + yargs-parser@18.1.3: + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + yargs-parser@20.2.9: {} yargs-parser@21.1.1: {} @@ -12289,6 +12213,20 @@ snapshots: flat: 5.0.2 is-plain-obj: 2.1.0 + yargs@15.4.1: + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.3 + which-module: 2.0.1 + y18n: 4.0.3 + yargs-parser: 18.1.3 + yargs@16.2.0: dependencies: cliui: 7.0.4 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 498bde719..7263746d3 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,6 +1,5 @@ ignoredBuiltDependencies: - core-js - core-js-pure - - unrs-resolver shellEmulator: true diff --git a/src/bin/generateOptions.js b/src/bin/generateOptions.mjs similarity index 100% rename from src/bin/generateOptions.js rename to src/bin/generateOptions.mjs diff --git a/src/bin/generateRule.js b/src/bin/generateRule.js index ef161fc61..7d78be2a0 100644 --- a/src/bin/generateRule.js +++ b/src/bin/generateRule.js @@ -250,21 +250,21 @@ export default iterateJsdoc(({ newLine: `import ${camelCasedRuleName} from './rules/${camelCasedRuleName}.js';`, oldIsCamel: true, oldRegex: /\nimport (?[^ ]*) from '.\/rules\/\1\.js';/gv, - path: './src/plugin.js', + path: './src/index.js', }); await replaceInOrder({ checkName: 'index recommended', newLine: `${' '.repeat(6)}'jsdoc/${ruleName}': ${recommended ? 'warnOrError' : '\'off\''},`, oldRegex: /\n\s{6}'jsdoc\/(?[^']*)': .*?,/gv, - path: './src/plugin.js', + path: './src/index.js', }); await replaceInOrder({ checkName: 'index rules', newLine: `${' '.repeat(4)}'${ruleName}': ${camelCasedRuleName},`, oldRegex: /\n\s{4}'(?[^']*)': [^,]*,/gv, - path: './src/plugin.js', + path: './src/index.js', }); await import('./generateDocs.js'); diff --git a/src/index.js b/src/index.js index 7a2d009cd..d26b80b58 100644 --- a/src/index.js +++ b/src/index.js @@ -1,3 +1,530 @@ -export { - default, -} from './plugin.js'; +import { + getJsdocProcessorPlugin, +} from './getJsdocProcessorPlugin.js'; +import checkAccess from './rules/checkAccess.js'; +import checkAlignment from './rules/checkAlignment.js'; +import checkExamples from './rules/checkExamples.js'; +import checkIndentation from './rules/checkIndentation.js'; +import checkLineAlignment from './rules/checkLineAlignment.js'; +import checkParamNames from './rules/checkParamNames.js'; +import checkPropertyNames from './rules/checkPropertyNames.js'; +import checkSyntax from './rules/checkSyntax.js'; +import checkTagNames from './rules/checkTagNames.js'; +import checkTemplateNames from './rules/checkTemplateNames.js'; +import checkTypes from './rules/checkTypes.js'; +import checkValues from './rules/checkValues.js'; +import convertToJsdocComments from './rules/convertToJsdocComments.js'; +import emptyTags from './rules/emptyTags.js'; +import implementsOnClasses from './rules/implementsOnClasses.js'; +import importsAsDependencies from './rules/importsAsDependencies.js'; +import informativeDocs from './rules/informativeDocs.js'; +import linesBeforeBlock from './rules/linesBeforeBlock.js'; +import matchDescription from './rules/matchDescription.js'; +import matchName from './rules/matchName.js'; +import multilineBlocks from './rules/multilineBlocks.js'; +import noBadBlocks from './rules/noBadBlocks.js'; +import noBlankBlockDescriptions from './rules/noBlankBlockDescriptions.js'; +import noBlankBlocks from './rules/noBlankBlocks.js'; +import noDefaults from './rules/noDefaults.js'; +import noMissingSyntax from './rules/noMissingSyntax.js'; +import noMultiAsterisks from './rules/noMultiAsterisks.js'; +import noRestrictedSyntax from './rules/noRestrictedSyntax.js'; +import noTypes from './rules/noTypes.js'; +import noUndefinedTypes from './rules/noUndefinedTypes.js'; +import requireAsteriskPrefix from './rules/requireAsteriskPrefix.js'; +import requireDescription from './rules/requireDescription.js'; +import requireDescriptionCompleteSentence from './rules/requireDescriptionCompleteSentence.js'; +import requireExample from './rules/requireExample.js'; +import requireFileOverview from './rules/requireFileOverview.js'; +import requireHyphenBeforeParamDescription from './rules/requireHyphenBeforeParamDescription.js'; +import requireJsdoc from './rules/requireJsdoc.js'; +import requireParam from './rules/requireParam.js'; +import requireParamDescription from './rules/requireParamDescription.js'; +import requireParamName from './rules/requireParamName.js'; +import requireParamType from './rules/requireParamType.js'; +import requireProperty from './rules/requireProperty.js'; +import requirePropertyDescription from './rules/requirePropertyDescription.js'; +import requirePropertyName from './rules/requirePropertyName.js'; +import requirePropertyType from './rules/requirePropertyType.js'; +import requireReturns from './rules/requireReturns.js'; +import requireReturnsCheck from './rules/requireReturnsCheck.js'; +import requireReturnsDescription from './rules/requireReturnsDescription.js'; +import requireReturnsType from './rules/requireReturnsType.js'; +import requireTemplate from './rules/requireTemplate.js'; +import requireThrows from './rules/requireThrows.js'; +import requireYields from './rules/requireYields.js'; +import requireYieldsCheck from './rules/requireYieldsCheck.js'; +import sortTags from './rules/sortTags.js'; +import tagLines from './rules/tagLines.js'; +import textEscaping from './rules/textEscaping.js'; +import validTypes from './rules/validTypes.js'; + +/* eslint-disable jsdoc/valid-types -- Bug */ +/** + * @typedef {"recommended" | "stylistic" | "contents" | "logical" | "requirements"} ConfigGroups + * @typedef {"" | "-typescript" | "-typescript-flavor"} ConfigVariants + * @typedef {"" | "-error"} ErrorLevelVariants + * @type {import('eslint').ESLint.Plugin & { + * configs: Record<`flat/${ConfigGroups}${ConfigVariants}${ErrorLevelVariants}`, + * import('eslint').Linter.Config> + * }} + */ +const index = { + /* eslint-enable jsdoc/valid-types -- Bug */ + // @ts-expect-error Ok + configs: {}, + rules: { + 'check-access': checkAccess, + 'check-alignment': checkAlignment, + 'check-examples': checkExamples, + 'check-indentation': checkIndentation, + 'check-line-alignment': checkLineAlignment, + 'check-param-names': checkParamNames, + 'check-property-names': checkPropertyNames, + 'check-syntax': checkSyntax, + 'check-tag-names': checkTagNames, + 'check-template-names': checkTemplateNames, + 'check-types': checkTypes, + 'check-values': checkValues, + 'convert-to-jsdoc-comments': convertToJsdocComments, + 'empty-tags': emptyTags, + 'implements-on-classes': implementsOnClasses, + 'imports-as-dependencies': importsAsDependencies, + 'informative-docs': informativeDocs, + 'lines-before-block': linesBeforeBlock, + 'match-description': matchDescription, + 'match-name': matchName, + 'multiline-blocks': multilineBlocks, + 'no-bad-blocks': noBadBlocks, + 'no-blank-block-descriptions': noBlankBlockDescriptions, + 'no-blank-blocks': noBlankBlocks, + 'no-defaults': noDefaults, + 'no-missing-syntax': noMissingSyntax, + 'no-multi-asterisks': noMultiAsterisks, + 'no-restricted-syntax': noRestrictedSyntax, + 'no-types': noTypes, + 'no-undefined-types': noUndefinedTypes, + 'require-asterisk-prefix': requireAsteriskPrefix, + 'require-description': requireDescription, + 'require-description-complete-sentence': requireDescriptionCompleteSentence, + 'require-example': requireExample, + 'require-file-overview': requireFileOverview, + 'require-hyphen-before-param-description': requireHyphenBeforeParamDescription, + 'require-jsdoc': requireJsdoc, + 'require-param': requireParam, + 'require-param-description': requireParamDescription, + 'require-param-name': requireParamName, + 'require-param-type': requireParamType, + 'require-property': requireProperty, + 'require-property-description': requirePropertyDescription, + 'require-property-name': requirePropertyName, + 'require-property-type': requirePropertyType, + 'require-returns': requireReturns, + 'require-returns-check': requireReturnsCheck, + 'require-returns-description': requireReturnsDescription, + 'require-returns-type': requireReturnsType, + 'require-template': requireTemplate, + 'require-throws': requireThrows, + 'require-yields': requireYields, + 'require-yields-check': requireYieldsCheck, + 'sort-tags': sortTags, + 'tag-lines': tagLines, + 'text-escaping': textEscaping, + 'valid-types': validTypes, + }, +}; + +/** + * @param {"warn"|"error"} warnOrError + * @param {string} [flatName] + * @returns {import('eslint').Linter.FlatConfig} + */ +const createRecommendedRuleset = (warnOrError, flatName) => { + return { + ...(flatName ? { + name: 'jsdoc/' + flatName, + } : {}), + // @ts-expect-error Ok + plugins: + flatName ? { + jsdoc: index, + } : [ + 'jsdoc', + ], + rules: { + 'jsdoc/check-access': warnOrError, + 'jsdoc/check-alignment': warnOrError, + 'jsdoc/check-examples': 'off', + 'jsdoc/check-indentation': 'off', + 'jsdoc/check-line-alignment': 'off', + 'jsdoc/check-param-names': warnOrError, + 'jsdoc/check-property-names': warnOrError, + 'jsdoc/check-syntax': 'off', + 'jsdoc/check-tag-names': warnOrError, + 'jsdoc/check-template-names': 'off', + 'jsdoc/check-types': warnOrError, + 'jsdoc/check-values': warnOrError, + 'jsdoc/convert-to-jsdoc-comments': 'off', + 'jsdoc/empty-tags': warnOrError, + 'jsdoc/implements-on-classes': warnOrError, + 'jsdoc/imports-as-dependencies': 'off', + 'jsdoc/informative-docs': 'off', + 'jsdoc/lines-before-block': 'off', + 'jsdoc/match-description': 'off', + 'jsdoc/match-name': 'off', + 'jsdoc/multiline-blocks': warnOrError, + 'jsdoc/no-bad-blocks': 'off', + 'jsdoc/no-blank-block-descriptions': 'off', + 'jsdoc/no-blank-blocks': 'off', + 'jsdoc/no-defaults': warnOrError, + 'jsdoc/no-missing-syntax': 'off', + 'jsdoc/no-multi-asterisks': warnOrError, + 'jsdoc/no-restricted-syntax': 'off', + 'jsdoc/no-types': 'off', + 'jsdoc/no-undefined-types': warnOrError, + 'jsdoc/require-asterisk-prefix': 'off', + 'jsdoc/require-description': 'off', + 'jsdoc/require-description-complete-sentence': 'off', + 'jsdoc/require-example': 'off', + 'jsdoc/require-file-overview': 'off', + 'jsdoc/require-hyphen-before-param-description': 'off', + 'jsdoc/require-jsdoc': warnOrError, + 'jsdoc/require-param': warnOrError, + 'jsdoc/require-param-description': warnOrError, + 'jsdoc/require-param-name': warnOrError, + 'jsdoc/require-param-type': warnOrError, + 'jsdoc/require-property': warnOrError, + 'jsdoc/require-property-description': warnOrError, + 'jsdoc/require-property-name': warnOrError, + 'jsdoc/require-property-type': warnOrError, + 'jsdoc/require-returns': warnOrError, + 'jsdoc/require-returns-check': warnOrError, + 'jsdoc/require-returns-description': warnOrError, + 'jsdoc/require-returns-type': warnOrError, + 'jsdoc/require-template': 'off', + 'jsdoc/require-throws': 'off', + 'jsdoc/require-yields': warnOrError, + 'jsdoc/require-yields-check': warnOrError, + 'jsdoc/sort-tags': 'off', + 'jsdoc/tag-lines': warnOrError, + 'jsdoc/text-escaping': 'off', + 'jsdoc/valid-types': warnOrError, + }, + }; +}; + +/** + * @param {"warn"|"error"} warnOrError + * @param {string} [flatName] + * @returns {import('eslint').Linter.FlatConfig} + */ +const createRecommendedTypeScriptRuleset = (warnOrError, flatName) => { + const ruleset = createRecommendedRuleset(warnOrError, flatName); + + return { + ...ruleset, + rules: { + ...ruleset.rules, + /* eslint-disable @stylistic/indent -- Extra indent to avoid use by auto-rule-editing */ + 'jsdoc/check-tag-names': [ + warnOrError, { + typed: true, + }, + ], + 'jsdoc/no-types': warnOrError, + 'jsdoc/no-undefined-types': 'off', + 'jsdoc/require-param-type': 'off', + 'jsdoc/require-property-type': 'off', + 'jsdoc/require-returns-type': 'off', + /* eslint-enable @stylistic/indent */ + }, + }; +}; + +/** + * @param {"warn"|"error"} warnOrError + * @param {string} [flatName] + * @returns {import('eslint').Linter.FlatConfig} + */ +const createRecommendedTypeScriptFlavorRuleset = (warnOrError, flatName) => { + const ruleset = createRecommendedRuleset(warnOrError, flatName); + + return { + ...ruleset, + rules: { + ...ruleset.rules, + /* eslint-disable @stylistic/indent -- Extra indent to avoid use by auto-rule-editing */ + 'jsdoc/no-undefined-types': 'off', + /* eslint-enable @stylistic/indent */ + }, + }; +}; + +/** + * @param {(string | unknown[])[]} ruleNames + */ +const createStandaloneRulesetFactory = (ruleNames) => { + /** + * @param {"warn"|"error"} warnOrError + * @param {string} [flatName] + * @returns {import('eslint').Linter.FlatConfig} + */ + return (warnOrError, flatName) => { + return { + name: 'jsdoc/' + flatName, + plugins: { + jsdoc: index, + }, + rules: Object.fromEntries( + ruleNames.map( + (ruleName) => { + return (typeof ruleName === 'string' ? + [ + ruleName, warnOrError, + ] : + [ + ruleName[0], [ + warnOrError, ...ruleName.slice(1), + ], + ]); + }, + ), + ), + }; + }; +}; + +const contentsRules = [ + 'jsdoc/informative-docs', + 'jsdoc/match-description', + 'jsdoc/no-blank-block-descriptions', + 'jsdoc/no-blank-blocks', + [ + 'jsdoc/text-escaping', { + escapeHTML: true, + }, + ], +]; + +const createContentsTypescriptRuleset = createStandaloneRulesetFactory(contentsRules); + +const createContentsTypescriptFlavorRuleset = createStandaloneRulesetFactory(contentsRules); + +const logicalRules = [ + 'jsdoc/check-access', + 'jsdoc/check-param-names', + 'jsdoc/check-property-names', + 'jsdoc/check-syntax', + 'jsdoc/check-tag-names', + 'jsdoc/check-template-names', + 'jsdoc/check-types', + 'jsdoc/check-values', + 'jsdoc/empty-tags', + 'jsdoc/implements-on-classes', + 'jsdoc/require-returns-check', + 'jsdoc/require-yields-check', + 'jsdoc/no-bad-blocks', + 'jsdoc/no-defaults', + 'jsdoc/no-types', + 'jsdoc/no-undefined-types', + 'jsdoc/valid-types', +]; + +const createLogicalTypescriptRuleset = createStandaloneRulesetFactory(logicalRules); + +const createLogicalTypescriptFlavorRuleset = createStandaloneRulesetFactory(logicalRules); + +const requirementsRules = [ + 'jsdoc/require-example', + 'jsdoc/require-jsdoc', + 'jsdoc/require-param', + 'jsdoc/require-param-description', + 'jsdoc/require-param-name', + 'jsdoc/require-property', + 'jsdoc/require-property-description', + 'jsdoc/require-property-name', + 'jsdoc/require-returns', + 'jsdoc/require-returns-description', + 'jsdoc/require-yields', +]; + +const createRequirementsTypeScriptRuleset = createStandaloneRulesetFactory(requirementsRules); + +const createRequirementsTypeScriptFlavorRuleset = createStandaloneRulesetFactory([ + ...requirementsRules, + 'jsdoc/require-param-type', + 'jsdoc/require-property-type', + 'jsdoc/require-returns-type', + 'jsdoc/require-template', +]); + +const stylisticRules = [ + 'jsdoc/check-alignment', + 'jsdoc/check-line-alignment', + 'jsdoc/lines-before-block', + 'jsdoc/multiline-blocks', + 'jsdoc/no-multi-asterisks', + 'jsdoc/require-asterisk-prefix', + [ + 'jsdoc/require-hyphen-before-param-description', 'never', + ], + 'jsdoc/tag-lines', +]; + +const createStylisticTypeScriptRuleset = createStandaloneRulesetFactory(stylisticRules); + +const createStylisticTypeScriptFlavorRuleset = createStandaloneRulesetFactory(stylisticRules); + +/* c8 ignore next 3 -- TS */ +if (!index.configs) { + throw new Error('TypeScript guard'); +} + +index.configs.recommended = createRecommendedRuleset('warn'); +index.configs['recommended-error'] = createRecommendedRuleset('error'); +index.configs['recommended-typescript'] = createRecommendedTypeScriptRuleset('warn'); +index.configs['recommended-typescript-error'] = createRecommendedTypeScriptRuleset('error'); +index.configs['recommended-typescript-flavor'] = createRecommendedTypeScriptFlavorRuleset('warn'); +index.configs['recommended-typescript-flavor-error'] = createRecommendedTypeScriptFlavorRuleset('error'); + +index.configs['flat/recommended'] = createRecommendedRuleset('warn', 'flat/recommended'); +index.configs['flat/recommended-error'] = createRecommendedRuleset('error', 'flat/recommended-error'); +index.configs['flat/recommended-typescript'] = createRecommendedTypeScriptRuleset('warn', 'flat/recommended-typescript'); +index.configs['flat/recommended-typescript-error'] = createRecommendedTypeScriptRuleset('error', 'flat/recommended-typescript-error'); +index.configs['flat/recommended-typescript-flavor'] = createRecommendedTypeScriptFlavorRuleset('warn', 'flat/recommended-typescript-flavor'); +index.configs['flat/recommended-typescript-flavor-error'] = createRecommendedTypeScriptFlavorRuleset('error', 'flat/recommended-typescript-flavor-error'); + +index.configs['flat/contents-typescript'] = createContentsTypescriptRuleset('warn', 'flat/contents-typescript'); +index.configs['flat/contents-typescript-error'] = createContentsTypescriptRuleset('error', 'flat/contents-typescript-error'); +index.configs['flat/contents-typescript-flavor'] = createContentsTypescriptFlavorRuleset('warn', 'flat/contents-typescript-flavor'); +index.configs['flat/contents-typescript-flavor-error'] = createContentsTypescriptFlavorRuleset('error', 'flat/contents-typescript-error-flavor'); +index.configs['flat/logical-typescript'] = createLogicalTypescriptRuleset('warn', 'flat/logical-typescript'); +index.configs['flat/logical-typescript-error'] = createLogicalTypescriptRuleset('error', 'flat/logical-typescript-error'); +index.configs['flat/logical-typescript-flavor'] = createLogicalTypescriptFlavorRuleset('warn', 'flat/logical-typescript-flavor'); +index.configs['flat/logical-typescript-flavor-error'] = createLogicalTypescriptFlavorRuleset('error', 'flat/logical-typescript-error-flavor'); +index.configs['flat/requirements-typescript'] = createRequirementsTypeScriptRuleset('warn', 'flat/requirements-typescript'); +index.configs['flat/requirements-typescript-error'] = createRequirementsTypeScriptRuleset('error', 'flat/requirements-typescript-error'); +index.configs['flat/requirements-typescript-flavor'] = createRequirementsTypeScriptFlavorRuleset('warn', 'flat/requirements-typescript-flavor'); +index.configs['flat/requirements-typescript-flavor-error'] = createRequirementsTypeScriptFlavorRuleset('error', 'flat/requirements-typescript-error-flavor'); +index.configs['flat/stylistic-typescript'] = createStylisticTypeScriptRuleset('warn', 'flat/stylistic-typescript'); +index.configs['flat/stylistic-typescript-error'] = createStylisticTypeScriptRuleset('error', 'flat/stylistic-typescript-error'); +index.configs['flat/stylistic-typescript-flavor'] = createStylisticTypeScriptFlavorRuleset('warn', 'flat/stylistic-typescript-flavor'); +index.configs['flat/stylistic-typescript-flavor-error'] = createStylisticTypeScriptFlavorRuleset('error', 'flat/stylistic-typescript-error-flavor'); + +index.configs.examples = /** @type {import('eslint').Linter.FlatConfig[]} */ ([ + { + files: [ + '**/*.js', + ], + name: 'jsdoc/examples/processor', + plugins: { + examples: getJsdocProcessorPlugin(), + }, + processor: 'examples/examples', + }, + { + files: [ + '**/*.md/*.js', + ], + name: 'jsdoc/examples/rules', + rules: { + // "always" newline rule at end unlikely in sample code + 'eol-last': 0, + + // Wouldn't generally expect example paths to resolve relative to JS file + 'import/no-unresolved': 0, + + // Snippets likely too short to always include import/export info + 'import/unambiguous': 0, + + 'jsdoc/require-file-overview': 0, + + // The end of a multiline comment would end the comment the example is in. + 'jsdoc/require-jsdoc': 0, + + // Unlikely to have inadvertent debugging within examples + 'no-console': 0, + + // Often wish to start `@example` code after newline; also may use + // empty lines for spacing + 'no-multiple-empty-lines': 0, + + // Many variables in examples will be `undefined` + 'no-undef': 0, + + // Common to define variables for clarity without always using them + 'no-unused-vars': 0, + + // See import/no-unresolved + 'node/no-missing-import': 0, + 'node/no-missing-require': 0, + + // Can generally look nicer to pad a little even if code imposes more stringency + 'padded-blocks': 0, + }, + }, +]); + +index.configs['default-expressions'] = /** @type {import('eslint').Linter.FlatConfig[]} */ ([ + { + files: [ + '**/*.js', + ], + name: 'jsdoc/default-expressions/processor', + plugins: { + examples: getJsdocProcessorPlugin({ + checkDefaults: true, + checkParams: true, + checkProperties: true, + }), + }, + processor: 'examples/examples', + }, + { + files: [ + '**/*.jsdoc-defaults', '**/*.jsdoc-params', '**/*.jsdoc-properties', + ], + name: 'jsdoc/default-expressions/rules', + rules: { + ...index.configs.examples[1].rules, + 'chai-friendly/no-unused-expressions': 0, + 'no-empty-function': 0, + 'no-new': 0, + 'no-unused-expressions': 0, + quotes: [ + 'error', 'double', + ], + semi: [ + 'error', 'never', + ], + strict: 0, + }, + }, +]); + +index.configs['examples-and-default-expressions'] = /** @type {import('eslint').Linter.FlatConfig[]} */ ([ + { + name: 'jsdoc/examples-and-default-expressions', + plugins: { + examples: getJsdocProcessorPlugin({ + checkDefaults: true, + checkParams: true, + checkProperties: true, + }), + }, + }, + ...index.configs.examples.map((config) => { + return { + ...config, + plugins: {}, + }; + }), + ...index.configs['default-expressions'].map((config) => { + return { + ...config, + plugins: {}, + }; + }), +]); + +export default index; diff --git a/src/plugin.js b/src/plugin.js deleted file mode 100644 index d7d1ae1dc..000000000 --- a/src/plugin.js +++ /dev/null @@ -1,533 +0,0 @@ -import { - getJsdocProcessorPlugin, -} from './getJsdocProcessorPlugin.js'; -import checkAccess from './rules/checkAccess.js'; -import checkAlignment from './rules/checkAlignment.js'; -import checkExamples from './rules/checkExamples.js'; -import checkIndentation from './rules/checkIndentation.js'; -import checkLineAlignment from './rules/checkLineAlignment.js'; -import checkParamNames from './rules/checkParamNames.js'; -import checkPropertyNames from './rules/checkPropertyNames.js'; -import checkSyntax from './rules/checkSyntax.js'; -import checkTagNames from './rules/checkTagNames.js'; -import checkTemplateNames from './rules/checkTemplateNames.js'; -import checkTypes from './rules/checkTypes.js'; -import checkValues from './rules/checkValues.js'; -import convertToJsdocComments from './rules/convertToJsdocComments.js'; -import emptyTags from './rules/emptyTags.js'; -import implementsOnClasses from './rules/implementsOnClasses.js'; -import importsAsDependencies from './rules/importsAsDependencies.js'; -import informativeDocs from './rules/informativeDocs.js'; -import linesBeforeBlock from './rules/linesBeforeBlock.js'; -import matchDescription from './rules/matchDescription.js'; -import matchName from './rules/matchName.js'; -import multilineBlocks from './rules/multilineBlocks.js'; -import noBadBlocks from './rules/noBadBlocks.js'; -import noBlankBlockDescriptions from './rules/noBlankBlockDescriptions.js'; -import noBlankBlocks from './rules/noBlankBlocks.js'; -import noDefaults from './rules/noDefaults.js'; -import noMissingSyntax from './rules/noMissingSyntax.js'; -import noMultiAsterisks from './rules/noMultiAsterisks.js'; -import noRestrictedSyntax from './rules/noRestrictedSyntax.js'; -import noTypes from './rules/noTypes.js'; -import noUndefinedTypes from './rules/noUndefinedTypes.js'; -import requireAsteriskPrefix from './rules/requireAsteriskPrefix.js'; -import requireDescription from './rules/requireDescription.js'; -import requireDescriptionCompleteSentence from './rules/requireDescriptionCompleteSentence.js'; -import requireExample from './rules/requireExample.js'; -import requireFileOverview from './rules/requireFileOverview.js'; -import requireHyphenBeforeParamDescription from './rules/requireHyphenBeforeParamDescription.js'; -import requireJsdoc from './rules/requireJsdoc.js'; -import requireParam from './rules/requireParam.js'; -import requireParamDescription from './rules/requireParamDescription.js'; -import requireParamName from './rules/requireParamName.js'; -import requireParamType from './rules/requireParamType.js'; -import requireProperty from './rules/requireProperty.js'; -import requirePropertyDescription from './rules/requirePropertyDescription.js'; -import requirePropertyName from './rules/requirePropertyName.js'; -import requirePropertyType from './rules/requirePropertyType.js'; -import requireReturns from './rules/requireReturns.js'; -import requireReturnsCheck from './rules/requireReturnsCheck.js'; -import requireReturnsDescription from './rules/requireReturnsDescription.js'; -import requireReturnsType from './rules/requireReturnsType.js'; -import requireTemplate from './rules/requireTemplate.js'; -import requireThrows from './rules/requireThrows.js'; -import requireYields from './rules/requireYields.js'; -import requireYieldsCheck from './rules/requireYieldsCheck.js'; -import sortTags from './rules/sortTags.js'; -import tagLines from './rules/tagLines.js'; -import textEscaping from './rules/textEscaping.js'; -import validTypes from './rules/validTypes.js'; - -/** - * @typedef {"recommended" | "stylistic" | "contents" | "logical" | "requirements"} ConfigGroups - * @typedef {"" | "-typescript" | "-typescript-flavor"} ConfigVariants - * @typedef {"" | "-error"} ErrorLevelVariants - */ - -/* eslint-disable jsdoc/valid-types -- Bug */ -/** - * @type {import('eslint').ESLint.Plugin & { - * configs: Record<`flat/${ConfigGroups}${ConfigVariants}${ErrorLevelVariants}`, - * import('eslint').Linter.Config> - * }} - */ -/* eslint-enable jsdoc/valid-types -- Bug */ -const plugin = { - // @ts-expect-error Ok - configs: {}, - rules: { - 'check-access': checkAccess, - 'check-alignment': checkAlignment, - 'check-examples': checkExamples, - 'check-indentation': checkIndentation, - 'check-line-alignment': checkLineAlignment, - 'check-param-names': checkParamNames, - 'check-property-names': checkPropertyNames, - 'check-syntax': checkSyntax, - 'check-tag-names': checkTagNames, - 'check-template-names': checkTemplateNames, - 'check-types': checkTypes, - 'check-values': checkValues, - 'convert-to-jsdoc-comments': convertToJsdocComments, - 'empty-tags': emptyTags, - 'implements-on-classes': implementsOnClasses, - 'imports-as-dependencies': importsAsDependencies, - 'informative-docs': informativeDocs, - 'lines-before-block': linesBeforeBlock, - 'match-description': matchDescription, - 'match-name': matchName, - 'multiline-blocks': multilineBlocks, - 'no-bad-blocks': noBadBlocks, - 'no-blank-block-descriptions': noBlankBlockDescriptions, - 'no-blank-blocks': noBlankBlocks, - 'no-defaults': noDefaults, - 'no-missing-syntax': noMissingSyntax, - 'no-multi-asterisks': noMultiAsterisks, - 'no-restricted-syntax': noRestrictedSyntax, - 'no-types': noTypes, - 'no-undefined-types': noUndefinedTypes, - 'require-asterisk-prefix': requireAsteriskPrefix, - 'require-description': requireDescription, - 'require-description-complete-sentence': requireDescriptionCompleteSentence, - 'require-example': requireExample, - 'require-file-overview': requireFileOverview, - 'require-hyphen-before-param-description': requireHyphenBeforeParamDescription, - 'require-jsdoc': requireJsdoc, - 'require-param': requireParam, - 'require-param-description': requireParamDescription, - 'require-param-name': requireParamName, - 'require-param-type': requireParamType, - 'require-property': requireProperty, - 'require-property-description': requirePropertyDescription, - 'require-property-name': requirePropertyName, - 'require-property-type': requirePropertyType, - 'require-returns': requireReturns, - 'require-returns-check': requireReturnsCheck, - 'require-returns-description': requireReturnsDescription, - 'require-returns-type': requireReturnsType, - 'require-template': requireTemplate, - 'require-throws': requireThrows, - 'require-yields': requireYields, - 'require-yields-check': requireYieldsCheck, - 'sort-tags': sortTags, - 'tag-lines': tagLines, - 'text-escaping': textEscaping, - 'valid-types': validTypes, - }, -}; - -/** - * @param {"warn"|"error"} warnOrError - * @param {string} [flatName] - * @returns {import('eslint').Linter.FlatConfig} - */ -const createRecommendedRuleset = (warnOrError, flatName) => { - return { - ...(flatName ? { - name: 'jsdoc/' + flatName, - } : {}), - // @ts-expect-error Ok - plugins: - flatName ? { - jsdoc: plugin, - } : [ - 'jsdoc', - ], - rules: { - 'jsdoc/check-access': warnOrError, - 'jsdoc/check-alignment': warnOrError, - 'jsdoc/check-examples': 'off', - 'jsdoc/check-indentation': 'off', - 'jsdoc/check-line-alignment': 'off', - 'jsdoc/check-param-names': warnOrError, - 'jsdoc/check-property-names': warnOrError, - 'jsdoc/check-syntax': 'off', - 'jsdoc/check-tag-names': warnOrError, - 'jsdoc/check-template-names': 'off', - 'jsdoc/check-types': warnOrError, - 'jsdoc/check-values': warnOrError, - 'jsdoc/convert-to-jsdoc-comments': 'off', - 'jsdoc/empty-tags': warnOrError, - 'jsdoc/implements-on-classes': warnOrError, - 'jsdoc/imports-as-dependencies': 'off', - 'jsdoc/informative-docs': 'off', - 'jsdoc/lines-before-block': 'off', - 'jsdoc/match-description': 'off', - 'jsdoc/match-name': 'off', - 'jsdoc/multiline-blocks': warnOrError, - 'jsdoc/no-bad-blocks': 'off', - 'jsdoc/no-blank-block-descriptions': 'off', - 'jsdoc/no-blank-blocks': 'off', - 'jsdoc/no-defaults': warnOrError, - 'jsdoc/no-missing-syntax': 'off', - 'jsdoc/no-multi-asterisks': warnOrError, - 'jsdoc/no-restricted-syntax': 'off', - 'jsdoc/no-types': 'off', - 'jsdoc/no-undefined-types': warnOrError, - 'jsdoc/require-asterisk-prefix': 'off', - 'jsdoc/require-description': 'off', - 'jsdoc/require-description-complete-sentence': 'off', - 'jsdoc/require-example': 'off', - 'jsdoc/require-file-overview': 'off', - 'jsdoc/require-hyphen-before-param-description': 'off', - 'jsdoc/require-jsdoc': warnOrError, - 'jsdoc/require-param': warnOrError, - 'jsdoc/require-param-description': warnOrError, - 'jsdoc/require-param-name': warnOrError, - 'jsdoc/require-param-type': warnOrError, - 'jsdoc/require-property': warnOrError, - 'jsdoc/require-property-description': warnOrError, - 'jsdoc/require-property-name': warnOrError, - 'jsdoc/require-property-type': warnOrError, - 'jsdoc/require-returns': warnOrError, - 'jsdoc/require-returns-check': warnOrError, - 'jsdoc/require-returns-description': warnOrError, - 'jsdoc/require-returns-type': warnOrError, - 'jsdoc/require-template': 'off', - 'jsdoc/require-throws': 'off', - 'jsdoc/require-yields': warnOrError, - 'jsdoc/require-yields-check': warnOrError, - 'jsdoc/sort-tags': 'off', - 'jsdoc/tag-lines': warnOrError, - 'jsdoc/text-escaping': 'off', - 'jsdoc/valid-types': warnOrError, - }, - }; -}; - -/** - * @param {"warn"|"error"} warnOrError - * @param {string} [flatName] - * @returns {import('eslint').Linter.FlatConfig} - */ -const createRecommendedTypeScriptRuleset = (warnOrError, flatName) => { - const ruleset = createRecommendedRuleset(warnOrError, flatName); - - return { - ...ruleset, - rules: { - ...ruleset.rules, - /* eslint-disable @stylistic/indent -- Extra indent to avoid use by auto-rule-editing */ - 'jsdoc/check-tag-names': [ - warnOrError, { - typed: true, - }, - ], - 'jsdoc/no-types': warnOrError, - 'jsdoc/no-undefined-types': 'off', - 'jsdoc/require-param-type': 'off', - 'jsdoc/require-property-type': 'off', - 'jsdoc/require-returns-type': 'off', - /* eslint-enable @stylistic/indent */ - }, - }; -}; - -/** - * @param {"warn"|"error"} warnOrError - * @param {string} [flatName] - * @returns {import('eslint').Linter.FlatConfig} - */ -const createRecommendedTypeScriptFlavorRuleset = (warnOrError, flatName) => { - const ruleset = createRecommendedRuleset(warnOrError, flatName); - - return { - ...ruleset, - rules: { - ...ruleset.rules, - /* eslint-disable @stylistic/indent -- Extra indent to avoid use by auto-rule-editing */ - 'jsdoc/no-undefined-types': 'off', - /* eslint-enable @stylistic/indent */ - }, - }; -}; - -/** - * @param {(string | unknown[])[]} ruleNames - */ -const createStandaloneRulesetFactory = (ruleNames) => { - /** - * @param {"warn"|"error"} warnOrError - * @param {string} [flatName] - * @returns {import('eslint').Linter.FlatConfig} - */ - return (warnOrError, flatName) => { - return { - name: 'jsdoc/' + flatName, - plugins: { - jsdoc: plugin, - }, - rules: Object.fromEntries( - ruleNames.map( - (ruleName) => { - return (typeof ruleName === 'string' ? - [ - ruleName, warnOrError, - ] : - [ - ruleName[0], [ - warnOrError, ...ruleName.slice(1), - ], - ]); - }, - ), - ), - }; - }; -}; - -const contentsRules = [ - 'jsdoc/informative-docs', - 'jsdoc/match-description', - 'jsdoc/no-blank-block-descriptions', - 'jsdoc/no-blank-blocks', - [ - 'jsdoc/text-escaping', { - escapeHTML: true, - }, - ], -]; - -const createContentsTypescriptRuleset = createStandaloneRulesetFactory(contentsRules); - -const createContentsTypescriptFlavorRuleset = createStandaloneRulesetFactory(contentsRules); - -const logicalRules = [ - 'jsdoc/check-access', - 'jsdoc/check-param-names', - 'jsdoc/check-property-names', - 'jsdoc/check-syntax', - 'jsdoc/check-tag-names', - 'jsdoc/check-template-names', - 'jsdoc/check-types', - 'jsdoc/check-values', - 'jsdoc/empty-tags', - 'jsdoc/implements-on-classes', - 'jsdoc/require-returns-check', - 'jsdoc/require-yields-check', - 'jsdoc/no-bad-blocks', - 'jsdoc/no-defaults', - 'jsdoc/no-types', - 'jsdoc/no-undefined-types', - 'jsdoc/valid-types', -]; - -const createLogicalTypescriptRuleset = createStandaloneRulesetFactory(logicalRules); - -const createLogicalTypescriptFlavorRuleset = createStandaloneRulesetFactory(logicalRules); - -const requirementsRules = [ - 'jsdoc/require-example', - 'jsdoc/require-jsdoc', - 'jsdoc/require-param', - 'jsdoc/require-param-description', - 'jsdoc/require-param-name', - 'jsdoc/require-property', - 'jsdoc/require-property-description', - 'jsdoc/require-property-name', - 'jsdoc/require-returns', - 'jsdoc/require-returns-description', - 'jsdoc/require-yields', -]; - -const createRequirementsTypeScriptRuleset = createStandaloneRulesetFactory(requirementsRules); - -const createRequirementsTypeScriptFlavorRuleset = createStandaloneRulesetFactory([ - ...requirementsRules, - 'jsdoc/require-param-type', - 'jsdoc/require-property-type', - 'jsdoc/require-returns-type', - 'jsdoc/require-template', -]); - -const stylisticRules = [ - 'jsdoc/check-alignment', - 'jsdoc/check-line-alignment', - 'jsdoc/lines-before-block', - 'jsdoc/multiline-blocks', - 'jsdoc/no-multi-asterisks', - 'jsdoc/require-asterisk-prefix', - [ - 'jsdoc/require-hyphen-before-param-description', 'never', - ], - 'jsdoc/tag-lines', -]; - -const createStylisticTypeScriptRuleset = createStandaloneRulesetFactory(stylisticRules); - -const createStylisticTypeScriptFlavorRuleset = createStandaloneRulesetFactory(stylisticRules); - -/* c8 ignore next 3 -- TS */ -if (!plugin.configs) { - throw new Error('TypeScript guard'); -} - -plugin.configs.recommended = createRecommendedRuleset('warn'); -plugin.configs['recommended-error'] = createRecommendedRuleset('error'); -plugin.configs['recommended-typescript'] = createRecommendedTypeScriptRuleset('warn'); -plugin.configs['recommended-typescript-error'] = createRecommendedTypeScriptRuleset('error'); -plugin.configs['recommended-typescript-flavor'] = createRecommendedTypeScriptFlavorRuleset('warn'); -plugin.configs['recommended-typescript-flavor-error'] = createRecommendedTypeScriptFlavorRuleset('error'); - -plugin.configs['flat/recommended'] = createRecommendedRuleset('warn', 'flat/recommended'); -plugin.configs['flat/recommended-error'] = createRecommendedRuleset('error', 'flat/recommended-error'); -plugin.configs['flat/recommended-typescript'] = createRecommendedTypeScriptRuleset('warn', 'flat/recommended-typescript'); -plugin.configs['flat/recommended-typescript-error'] = createRecommendedTypeScriptRuleset('error', 'flat/recommended-typescript-error'); -plugin.configs['flat/recommended-typescript-flavor'] = createRecommendedTypeScriptFlavorRuleset('warn', 'flat/recommended-typescript-flavor'); -plugin.configs['flat/recommended-typescript-flavor-error'] = createRecommendedTypeScriptFlavorRuleset('error', 'flat/recommended-typescript-flavor-error'); - -plugin.configs['flat/contents-typescript'] = createContentsTypescriptRuleset('warn', 'flat/contents-typescript'); -plugin.configs['flat/contents-typescript-error'] = createContentsTypescriptRuleset('error', 'flat/contents-typescript-error'); -plugin.configs['flat/contents-typescript-flavor'] = createContentsTypescriptFlavorRuleset('warn', 'flat/contents-typescript-flavor'); -plugin.configs['flat/contents-typescript-flavor-error'] = createContentsTypescriptFlavorRuleset('error', 'flat/contents-typescript-error-flavor'); -plugin.configs['flat/logical-typescript'] = createLogicalTypescriptRuleset('warn', 'flat/logical-typescript'); -plugin.configs['flat/logical-typescript-error'] = createLogicalTypescriptRuleset('error', 'flat/logical-typescript-error'); -plugin.configs['flat/logical-typescript-flavor'] = createLogicalTypescriptFlavorRuleset('warn', 'flat/logical-typescript-flavor'); -plugin.configs['flat/logical-typescript-flavor-error'] = createLogicalTypescriptFlavorRuleset('error', 'flat/logical-typescript-error-flavor'); -plugin.configs['flat/requirements-typescript'] = createRequirementsTypeScriptRuleset('warn', 'flat/requirements-typescript'); -plugin.configs['flat/requirements-typescript-error'] = createRequirementsTypeScriptRuleset('error', 'flat/requirements-typescript-error'); -plugin.configs['flat/requirements-typescript-flavor'] = createRequirementsTypeScriptFlavorRuleset('warn', 'flat/requirements-typescript-flavor'); -plugin.configs['flat/requirements-typescript-flavor-error'] = createRequirementsTypeScriptFlavorRuleset('error', 'flat/requirements-typescript-error-flavor'); -plugin.configs['flat/stylistic-typescript'] = createStylisticTypeScriptRuleset('warn', 'flat/stylistic-typescript'); -plugin.configs['flat/stylistic-typescript-error'] = createStylisticTypeScriptRuleset('error', 'flat/stylistic-typescript-error'); -plugin.configs['flat/stylistic-typescript-flavor'] = createStylisticTypeScriptFlavorRuleset('warn', 'flat/stylistic-typescript-flavor'); -plugin.configs['flat/stylistic-typescript-flavor-error'] = createStylisticTypeScriptFlavorRuleset('error', 'flat/stylistic-typescript-error-flavor'); - -plugin.configs.examples = /** @type {import('eslint').Linter.FlatConfig[]} */ ([ - { - files: [ - '**/*.js', - ], - name: 'jsdoc/examples/processor', - plugins: { - examples: getJsdocProcessorPlugin(), - }, - processor: 'examples/examples', - }, - { - files: [ - '**/*.md/*.js', - ], - name: 'jsdoc/examples/rules', - rules: { - // "always" newline rule at end unlikely in sample code - 'eol-last': 0, - - // Wouldn't generally expect example paths to resolve relative to JS file - 'import/no-unresolved': 0, - - // Snippets likely too short to always include import/export info - 'import/unambiguous': 0, - - 'jsdoc/require-file-overview': 0, - - // The end of a multiline comment would end the comment the example is in. - 'jsdoc/require-jsdoc': 0, - - // Unlikely to have inadvertent debugging within examples - 'no-console': 0, - - // Often wish to start `@example` code after newline; also may use - // empty lines for spacing - 'no-multiple-empty-lines': 0, - - // Many variables in examples will be `undefined` - 'no-undef': 0, - - // Common to define variables for clarity without always using them - 'no-unused-vars': 0, - - // See import/no-unresolved - 'node/no-missing-import': 0, - 'node/no-missing-require': 0, - - // Can generally look nicer to pad a little even if code imposes more stringency - 'padded-blocks': 0, - }, - }, -]); - -plugin.configs['default-expressions'] = /** @type {import('eslint').Linter.FlatConfig[]} */ ([ - { - files: [ - '**/*.js', - ], - name: 'jsdoc/default-expressions/processor', - plugins: { - examples: getJsdocProcessorPlugin({ - checkDefaults: true, - checkParams: true, - checkProperties: true, - }), - }, - processor: 'examples/examples', - }, - { - files: [ - '**/*.jsdoc-defaults', '**/*.jsdoc-params', '**/*.jsdoc-properties', - ], - name: 'jsdoc/default-expressions/rules', - rules: { - ...plugin.configs.examples[1].rules, - 'chai-friendly/no-unused-expressions': 0, - 'no-empty-function': 0, - 'no-new': 0, - 'no-unused-expressions': 0, - quotes: [ - 'error', 'double', - ], - semi: [ - 'error', 'never', - ], - strict: 0, - }, - }, -]); - -plugin.configs['examples-and-default-expressions'] = /** @type {import('eslint').Linter.FlatConfig[]} */ ([ - { - name: 'jsdoc/examples-and-default-expressions', - plugins: { - examples: getJsdocProcessorPlugin({ - checkDefaults: true, - checkParams: true, - checkProperties: true, - }), - }, - }, - ...plugin.configs.examples.map((config) => { - return { - ...config, - plugins: {}, - }; - }), - ...plugin.configs['default-expressions'].map((config) => { - return { - ...config, - plugins: {}, - }; - }), -]); - -export default plugin; diff --git a/test/rules/index.js b/test/rules/index.js index d650bcea6..da65f5995 100644 --- a/test/rules/index.js +++ b/test/rules/index.js @@ -1,4 +1,4 @@ -import config from '../../src/plugin.js'; +import config from '../../src/index.js'; import camelCase from 'camelcase'; import { ESLint, diff --git a/tsconfig-prod.json b/tsconfig-prod.json new file mode 100644 index 000000000..7ae6b80fa --- /dev/null +++ b/tsconfig-prod.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "lib": ["es2023"], + "moduleResolution": "Bundler", + "module": "ESNext", + "allowJs": true, + "checkJs": true, + "noEmit": false, + "emitDeclarationOnly": true, + "declaration": true, + "declarationMap": true, + "strict": true, + "skipLibCheck": true, + "target": "es2024", + "outDir": "dist" + }, + "include": [ + "src/**/*.js" + ], + "exclude": ["node_modules", "src/bin/*.js"] +} diff --git a/tsdown.config.ts b/tsdown.config.ts deleted file mode 100644 index 307b15689..000000000 --- a/tsdown.config.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { - defineConfig, -} from 'tsdown'; - -export default defineConfig({ - attw: { - level: 'error', - profile: 'node16', - }, - dts: { - sourcemap: true, - }, - entry: [ - './src/index.js', - './src/getJsdocProcessorPlugin.js', - './src/iterateJsdoc.js', - ], - failOnWarn: true, - format: [ - 'es', - 'cjs', - ], - publint: { - level: 'error', - strict: true, - }, - sourcemap: true, - unbundle: true, - unused: { - level: 'error', - }, -}); From e51a7a89af6c39554e98a50a34fa5c45f065ac5e Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Fri, 15 Aug 2025 10:05:51 +0800 Subject: [PATCH 035/189] feat: update devDeps. (#1451) --- package.json | 40 +- pnpm-lock.yaml | 4700 +++++++++++++-------------------- pnpm-workspace.yaml | 1 + src/iterateJsdoc.js | 3 +- src/rules/noUndefinedTypes.js | 6 +- src/rules/requireJsdoc.js | 3 +- 6 files changed, 1794 insertions(+), 2959 deletions(-) diff --git a/package.json b/package.json index da3f0960e..022ac6a2d 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "url": "http://gajus.com" }, "dependencies": { - "@es-joy/jsdoccomment": "~0.52.0", + "@es-joy/jsdoccomment": "~0.53.0", "are-docs-informative": "^0.0.2", "comment-parser": "1.4.1", "debug": "^4.4.1", @@ -18,19 +18,19 @@ }, "description": "JSDoc linting rules for ESLint.", "devDependencies": { - "@babel/cli": "^7.27.2", - "@babel/core": "^7.27.4", - "@babel/eslint-parser": "^7.27.5", - "@babel/node": "^7.27.1", + "@babel/cli": "^7.28.3", + "@babel/core": "^7.28.3", + "@babel/eslint-parser": "^7.28.0", + "@babel/node": "^7.28.0", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-transform-flow-strip-types": "^7.27.1", - "@babel/preset-env": "^7.27.2", + "@babel/preset-env": "^7.28.3", "@es-joy/escodegen": "^3.5.1", "@es-joy/jsdoc-eslint-parser": "^0.21.1", "@hkdobrev/run-if-changed": "^0.6.3", "@semantic-release/commit-analyzer": "^13.0.1", - "@semantic-release/github": "^11.0.3", - "@semantic-release/npm": "^12.0.1", + "@semantic-release/github": "^11.0.4", + "@semantic-release/npm": "^12.0.2", "@types/chai": "^5.2.2", "@types/debug": "^4.1.12", "@types/eslint": "^9.6.1", @@ -40,34 +40,34 @@ "@types/json-schema": "^7.0.15", "@types/lodash.defaultsdeep": "^4.6.9", "@types/mocha": "^10.0.10", - "@types/node": "^24.0.3", + "@types/node": "^24.2.1", "@types/semver": "^7.7.0", "@types/spdx-expression-parse": "^3.0.5", - "@typescript-eslint/types": "^8.34.1", + "@typescript-eslint/types": "^8.39.1", "babel-plugin-add-module-exports": "^1.0.4", "babel-plugin-istanbul": "^7.0.0", "babel-plugin-transform-import-meta": "^2.3.3", "c8": "^10.1.3", "camelcase": "^8.0.0", - "chai": "^5.2.0", + "chai": "^5.2.1", "decamelize": "^6.0.0", - "eslint": "9.29.0", - "eslint-config-canonical": "~44.9.5", + "eslint": "9.33.0", + "eslint-config-canonical": "~44.9.9", "gitdown": "^4.1.1", "glob": "^11.0.3", - "globals": "^16.2.0", + "globals": "^16.3.0", "husky": "^9.1.7", - "jsdoc-type-pratt-parser": "^4.1.0", + "jsdoc-type-pratt-parser": "^4.8.0", "json-schema": "^0.4.0", - "lint-staged": "^16.1.2", + "lint-staged": "^16.1.5", "lodash.defaultsdeep": "^4.6.1", - "mocha": "^11.7.0", + "mocha": "^11.7.1", "open-editor": "^5.1.0", "replace": "^1.2.2", "rimraf": "^6.0.1", - "semantic-release": "^24.2.5", - "typescript": "5.8.3", - "typescript-eslint": "^8.34.1" + "semantic-release": "^24.2.7", + "typescript": "5.9.2", + "typescript-eslint": "^8.39.1" }, "engines": { "node": ">=20.11.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ddb1167eb..62f18a08c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: dependencies: '@es-joy/jsdoccomment': - specifier: ~0.52.0 - version: 0.52.0 + specifier: ~0.53.0 + version: 0.53.0 are-docs-informative: specifier: ^0.0.2 version: 0.0.2 @@ -40,26 +40,26 @@ importers: version: 4.0.0 devDependencies: '@babel/cli': - specifier: ^7.27.2 - version: 7.27.2(@babel/core@7.27.4) + specifier: ^7.28.3 + version: 7.28.3(@babel/core@7.28.3) '@babel/core': - specifier: ^7.27.4 - version: 7.27.4 + specifier: ^7.28.3 + version: 7.28.3 '@babel/eslint-parser': - specifier: ^7.27.5 - version: 7.27.5(@babel/core@7.27.4)(eslint@9.29.0(jiti@2.4.2)) + specifier: ^7.28.0 + version: 7.28.0(@babel/core@7.28.3)(eslint@9.33.0(jiti@2.5.1)) '@babel/node': - specifier: ^7.27.1 - version: 7.27.1(@babel/core@7.27.4) + specifier: ^7.28.0 + version: 7.28.0(@babel/core@7.28.3) '@babel/plugin-syntax-class-properties': specifier: ^7.12.13 - version: 7.12.13(@babel/core@7.27.4) + version: 7.12.13(@babel/core@7.28.3) '@babel/plugin-transform-flow-strip-types': specifier: ^7.27.1 - version: 7.27.1(@babel/core@7.27.4) + version: 7.27.1(@babel/core@7.28.3) '@babel/preset-env': - specifier: ^7.27.2 - version: 7.27.2(@babel/core@7.27.4) + specifier: ^7.28.3 + version: 7.28.3(@babel/core@7.28.3) '@es-joy/escodegen': specifier: ^3.5.1 version: 3.5.1 @@ -68,16 +68,16 @@ importers: version: 0.21.1 '@hkdobrev/run-if-changed': specifier: ^0.6.3 - version: 0.6.3(typescript@5.8.3) + version: 0.6.3(typescript@5.9.2) '@semantic-release/commit-analyzer': specifier: ^13.0.1 - version: 13.0.1(semantic-release@24.2.5(typescript@5.8.3)) + version: 13.0.1(semantic-release@24.2.7(typescript@5.9.2)) '@semantic-release/github': - specifier: ^11.0.3 - version: 11.0.3(semantic-release@24.2.5(typescript@5.8.3)) + specifier: ^11.0.4 + version: 11.0.4(semantic-release@24.2.7(typescript@5.9.2)) '@semantic-release/npm': - specifier: ^12.0.1 - version: 12.0.1(semantic-release@24.2.5(typescript@5.8.3)) + specifier: ^12.0.2 + version: 12.0.2(semantic-release@24.2.7(typescript@5.9.2)) '@types/chai': specifier: ^5.2.2 version: 5.2.2 @@ -106,8 +106,8 @@ importers: specifier: ^10.0.10 version: 10.0.10 '@types/node': - specifier: ^24.0.3 - version: 24.0.3 + specifier: ^24.2.1 + version: 24.2.1 '@types/semver': specifier: ^7.7.0 version: 7.7.0 @@ -115,8 +115,8 @@ importers: specifier: ^3.0.5 version: 3.0.5 '@typescript-eslint/types': - specifier: ^8.34.1 - version: 8.34.1 + specifier: ^8.39.1 + version: 8.39.1 babel-plugin-add-module-exports: specifier: ^1.0.4 version: 1.0.4 @@ -125,7 +125,7 @@ importers: version: 7.0.0 babel-plugin-transform-import-meta: specifier: ^2.3.3 - version: 2.3.3(@babel/core@7.27.4) + version: 2.3.3(@babel/core@7.28.3) c8: specifier: ^10.1.3 version: 10.1.3 @@ -133,17 +133,17 @@ importers: specifier: ^8.0.0 version: 8.0.0 chai: - specifier: ^5.2.0 - version: 5.2.0 + specifier: ^5.2.1 + version: 5.2.1 decamelize: specifier: ^6.0.0 version: 6.0.0 eslint: - specifier: 9.29.0 - version: 9.29.0(jiti@2.4.2) + specifier: 9.33.0 + version: 9.33.0(jiti@2.5.1) eslint-config-canonical: - specifier: ~44.9.5 - version: 44.9.5(@types/eslint@9.6.1)(@types/node@24.0.3)(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + specifier: ~44.9.9 + version: 44.9.9(@types/eslint@9.6.1)(@types/node@24.2.1)(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) gitdown: specifier: ^4.1.1 version: 4.1.1(re2@1.20.9) @@ -151,26 +151,26 @@ importers: specifier: ^11.0.3 version: 11.0.3 globals: - specifier: ^16.2.0 - version: 16.2.0 + specifier: ^16.3.0 + version: 16.3.0 husky: specifier: ^9.1.7 version: 9.1.7 jsdoc-type-pratt-parser: - specifier: ^4.1.0 - version: 4.1.0 + specifier: ^4.8.0 + version: 4.8.0 json-schema: specifier: ^0.4.0 version: 0.4.0 lint-staged: - specifier: ^16.1.2 - version: 16.1.2 + specifier: ^16.1.5 + version: 16.1.5 lodash.defaultsdeep: specifier: ^4.6.1 version: 4.6.1 mocha: - specifier: ^11.7.0 - version: 11.7.0 + specifier: ^11.7.1 + version: 11.7.1 open-editor: specifier: ^5.1.0 version: 5.1.0 @@ -181,61 +181,49 @@ importers: specifier: ^6.0.1 version: 6.0.1 semantic-release: - specifier: ^24.2.5 - version: 24.2.5(typescript@5.8.3) + specifier: ^24.2.7 + version: 24.2.7(typescript@5.9.2) typescript: - specifier: 5.8.3 - version: 5.8.3 + specifier: 5.9.2 + version: 5.9.2 typescript-eslint: - specifier: ^8.34.1 - version: 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + specifier: ^8.39.1 + version: 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) packages: - '@aashutoshrathi/word-wrap@1.2.6': - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - - '@ampproject/remapping@2.2.1': - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@babel/cli@7.27.2': - resolution: {integrity: sha512-cfd7DnGlhH6OIyuPSSj3vcfIdnbXukhAyKY8NaZrFadC7pXyL9mOL5WgjcptiEJLi5k3j8aYvLIVCzezrWTaiA==} + '@babel/cli@7.28.3': + resolution: {integrity: sha512-n1RU5vuCX0CsaqaXm9I0KUCNKNQMy5epmzl/xdSSm70bSqhg9GWhgeosypyQLc0bK24+Xpk1WGzZlI9pJtkZdg==} engines: {node: '>=6.9.0'} hasBin: true peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/code-frame@7.24.7': - resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} - engines: {node: '>=6.9.0'} - '@babel/code-frame@7.27.1': resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.27.3': - resolution: {integrity: sha512-V42wFfx1ymFte+ecf6iXghnnP8kWTO+ZLXIyZq+1LAXHHvTZdVxicn4yiVYdYMGaCO3tmqub11AorKkv+iodqw==} + '@babel/compat-data@7.28.0': + resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==} engines: {node: '>=6.9.0'} - '@babel/core@7.27.4': - resolution: {integrity: sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==} + '@babel/core@7.28.3': + resolution: {integrity: sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==} engines: {node: '>=6.9.0'} - '@babel/eslint-parser@7.27.5': - resolution: {integrity: sha512-HLkYQfRICudzcOtjGwkPvGc5nF1b4ljLZh1IRDj50lRZ718NAKVgQpIAUX8bfg6u/yuSKY3L7E0YzIV+OxrB8Q==} + '@babel/eslint-parser@7.28.0': + resolution: {integrity: sha512-N4ntErOlKvcbTt01rr5wj3y55xnIdx1ymrfIr8C2WnM1Y9glFgWaGDEULJIazOX3XM9NRzhfJ6zZnQ1sBNWU+w==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} peerDependencies: '@babel/core': ^7.11.0 eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 - '@babel/generator@7.27.3': - resolution: {integrity: sha512-xnlJYj5zepml8NXtjkG0WquFUv8RskFqyFcVgTBp5k+NaA/8uw/K+OSVf8AMGw5e9HKP2ETd5xpK5MLZQD6b4Q==} - engines: {node: '>=6.9.0'} - - '@babel/helper-annotate-as-pure@7.24.7': - resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} + '@babel/generator@7.28.3': + resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} engines: {node: '>=6.9.0'} '@babel/helper-annotate-as-pure@7.27.3': @@ -246,14 +234,8 @@ packages: resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.27.1': - resolution: {integrity: sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-create-regexp-features-plugin@7.25.2': - resolution: {integrity: sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==} + '@babel/helper-create-class-features-plugin@7.28.3': + resolution: {integrity: sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -264,15 +246,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-define-polyfill-provider@0.6.1': - resolution: {integrity: sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==} + '@babel/helper-define-polyfill-provider@0.6.5': + resolution: {integrity: sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - '@babel/helper-define-polyfill-provider@0.6.4': - resolution: {integrity: sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} '@babel/helper-member-expression-to-functions@7.27.1': resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==} @@ -282,8 +263,8 @@ packages: resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.27.3': - resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==} + '@babel/helper-module-transforms@7.28.3': + resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -292,14 +273,6 @@ packages: resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.22.5': - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-plugin-utils@7.24.7': - resolution: {integrity: sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==} - engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.27.1': resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} engines: {node: '>=6.9.0'} @@ -320,18 +293,10 @@ packages: resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.24.8': - resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} - engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.27.1': resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.24.7': - resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.27.1': resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} engines: {node: '>=6.9.0'} @@ -340,32 +305,23 @@ packages: resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} - '@babel/helper-wrap-function@7.27.1': - resolution: {integrity: sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.27.4': - resolution: {integrity: sha512-Y+bO6U+I7ZKaM5G5rDUZiYfUvQPUibYmAFe7EnKdnKBbVXDZxvp+MWOH5gYciY0EPk4EScsuFMQBbEfpdRKSCQ==} + '@babel/helper-wrap-function@7.28.3': + resolution: {integrity: sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.24.7': - resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + '@babel/helpers@7.28.3': + resolution: {integrity: sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==} engines: {node: '>=6.9.0'} - '@babel/node@7.27.1': - resolution: {integrity: sha512-ef8ZrhxIku9LrphvyNywpiMf1UJsYQll7S4eKa228ivswPcwmObp98o5h5wL2n9FrSAuo1dsMwJ8cS1LEcBSog==} + '@babel/node@7.28.0': + resolution: {integrity: sha512-6u1Mmn3SIMUH8uwTq543L062X3JDgms9HPf06o/pIGdDjeD/zNQ+dfZPQD27sCyvtP0ZOlJtwnl2RIdPe9bHeQ==} engines: {node: '>=6.9.0'} hasBin: true peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/parser@7.24.7': - resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/parser@7.27.4': - resolution: {integrity: sha512-BRmLHGwpUqLFR2jzx9orBuX/ABDkj2jLKOXrHDTN2aOKL+jFDDKaRNo9nyYsIl9h/UE/7lMKdDjKQQyxKKDZ7g==} + '@babel/parser@7.28.3': + resolution: {integrity: sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==} engines: {node: '>=6.0.0'} hasBin: true @@ -393,8 +349,8 @@ packages: peerDependencies: '@babel/core': ^7.13.0 - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1': - resolution: {integrity: sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==} + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3': + resolution: {integrity: sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -440,8 +396,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-async-generator-functions@7.27.1': - resolution: {integrity: sha512-eST9RrwlpaoJBDHShc+DS2SG4ATTi2MYNb4OxYkf3n+7eb49LWpnS+HSpVfW4x927qQwgk8A2hGNVaajAEw0EA==} + '@babel/plugin-transform-async-generator-functions@7.28.0': + resolution: {integrity: sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -458,8 +414,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoping@7.27.3': - resolution: {integrity: sha512-+F8CnfhuLhwUACIJMLWnjz6zvzYM2r0yeIHKlbgfw7ml8rOMJsXNXV/hyRcb3nb493gRs4WvYpQAndWj/qQmkQ==} + '@babel/plugin-transform-block-scoping@7.28.0': + resolution: {integrity: sha512-gKKnwjpdx5sER/wl0WN0efUBFzF/56YZO0RJrSYP4CljXnP31ByY7fol89AzomdlLNzI36AvOTmYHsnZTCkq8Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -470,14 +426,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-class-static-block@7.27.1': - resolution: {integrity: sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==} + '@babel/plugin-transform-class-static-block@7.28.3': + resolution: {integrity: sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 - '@babel/plugin-transform-classes@7.27.1': - resolution: {integrity: sha512-7iLhfFAubmpeJe/Wo2TVuDrykh/zlWXLzPNdL0Jqn/Xu8R3QQ8h9ff8FQoISZOsw74/HFqFI7NX63HN7QFIHKA==} + '@babel/plugin-transform-classes@7.28.3': + resolution: {integrity: sha512-DoEWC5SuxuARF2KdKmGUq3ghfPMO6ZzR12Dnp5gubwbeWJo4dbNWXJPVlwvh4Zlq6Z7YVvL8VFxeSOJgjsx4Sg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -488,8 +444,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-destructuring@7.27.3': - resolution: {integrity: sha512-s4Jrok82JpiaIprtY2nHsYmrThKvvwgHwjgd7UMiYhZaN0asdXNLr0y+NjTfkA7SyQE5i2Fb7eawUOZmLvyqOA==} + '@babel/plugin-transform-destructuring@7.28.0': + resolution: {integrity: sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -518,6 +474,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-explicit-resource-management@7.28.0': + resolution: {integrity: sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-exponentiation-operator@7.27.1': resolution: {integrity: sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==} engines: {node: '>=6.9.0'} @@ -620,8 +582,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-rest-spread@7.27.3': - resolution: {integrity: sha512-7ZZtznF9g4l2JCImCo5LNKFHB5eXnN39lLtLY5Tg+VkR0jwOt7TBciMckuiQIOIW7L5tkQOCh3bVGYeXgMx52Q==} + '@babel/plugin-transform-object-rest-spread@7.28.0': + resolution: {integrity: sha512-9VNGikXxzu5eCiQjdE4IZn8sb9q7Xsk5EXLDBKUYg1e/Tve8/05+KJEtcxGxAgCY5t/BpKQM+JEL/yT4tvgiUA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -644,8 +606,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-parameters@7.27.1': - resolution: {integrity: sha512-018KRk76HWKeZ5l4oTj2zPpSh+NbGdt0st5S6x0pga6HgrjBOJb24mMDHorFopOOd6YHkLgOZ+zaCjZGPO4aKg==} + '@babel/plugin-transform-parameters@7.27.7': + resolution: {integrity: sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -668,8 +630,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-regenerator@7.27.4': - resolution: {integrity: sha512-Glp/0n8xuj+E1588otw5rjJkTXfzW7FjH3IIUrfqiZOPQCd2vbg8e+DQE8jK9g4V5/zrxFW+D9WM9gboRPELpQ==} + '@babel/plugin-transform-regenerator@7.28.3': + resolution: {integrity: sha512-K3/M/a4+ESb5LEldjQb+XSrpY0nF+ZBFlTCbSnKaYAMfD8v33O6PMs4uYnOk19HlcsI8WMu3McdFPTiQHF/1/A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -740,8 +702,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/preset-env@7.27.2': - resolution: {integrity: sha512-Ma4zSuYSlGNRlCLO+EAzLnCmJK2vdstgv+n7aUP+/IKZrOfWHOJVdSJtuub8RzHTj3ahD37k5OKJWvzf16TQyQ==} + '@babel/preset-env@7.28.3': + resolution: {integrity: sha512-ROiDcM+GbYVPYBOeCR6uBXKkQpBExLl8k9HO1ygXEyds39j+vCCsjmj7S8GOniZQlEs81QlkdJZe76IpLSiqpg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -751,29 +713,22 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - '@babel/register@7.27.1': - resolution: {integrity: sha512-K13lQpoV54LATKkzBpBAEu1GGSIRzxR9f4IN4V8DCDgiUMo2UDGagEZr3lPeVNJPLkWUi5JE4hCHKneVTwQlYQ==} + '@babel/register@7.28.3': + resolution: {integrity: sha512-CieDOtd8u208eI49bYl4z1J22ySFw87IGwE+IswFEExH7e3rLgKb0WNQeumnacQ1+VoDJLYI5QFA3AJZuyZQfA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/regjsgen@0.8.0': - resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} - '@babel/template@7.27.2': resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.27.4': - resolution: {integrity: sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.25.2': - resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==} + '@babel/traverse@7.28.3': + resolution: {integrity: sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.27.3': - resolution: {integrity: sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==} + '@babel/types@7.28.2': + resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} engines: {node: '>=6.9.0'} '@bcoe/v8-coverage@1.0.2': @@ -784,17 +739,17 @@ packages: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} - '@emnapi/core@1.4.3': - resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==} + '@emnapi/core@1.4.5': + resolution: {integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==} - '@emnapi/runtime@1.4.3': - resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} + '@emnapi/runtime@1.4.5': + resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==} - '@emnapi/wasi-threads@1.0.2': - resolution: {integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==} + '@emnapi/wasi-threads@1.0.4': + resolution: {integrity: sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==} - '@envelop/core@5.2.3': - resolution: {integrity: sha512-KfoGlYD/XXQSc3BkM1/k15+JQbkQ4ateHazeZoWl9P71FsLTDXSjGy6j7QqfhpIDSbxNISqhPMfZHYSbDFOofQ==} + '@envelop/core@5.3.0': + resolution: {integrity: sha512-xvUkOWXI8JsG2OOnqiI2tOkEc52wbmIqWORr7yGc8B8E53Oh1MMGGGck4mbR80s25LnHVzfNIiIlNkuDgZRuuA==} engines: {node: '>=18.0.0'} '@envelop/instrumentation@1.0.0': @@ -826,8 +781,8 @@ packages: resolution: {integrity: sha512-YAdE/IJSpwbOTiaURNCKECdAwqrJuFiZhylmesBcIRawtYKnBR2wxPhoIewMg+Yu+QuYvHfJNReWpoxGBKOChA==} engines: {node: '>=18'} - '@es-joy/jsdoccomment@0.52.0': - resolution: {integrity: sha512-BXuN7BII+8AyNtn57euU2Yxo9yA/KUDNzrpXyi3pfqKmBhhysR6ZWOebFh3vyPoqA3/j1SOvGgucElMGwlXing==} + '@es-joy/jsdoccomment@0.53.0': + resolution: {integrity: sha512-Wyed8Wfn3vMNVwrZrgLMxmqwmlcCE1/RfUAOHFzMJb3QLH03mi9Yv1iOCZjif0yx5EZUeJ+17VD1MHPka9IQjQ==} engines: {node: '>=20.11.0'} '@eslint-community/eslint-utils@4.7.0': @@ -836,24 +791,20 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.11.0': - resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint-community/regexpp@4.12.1': resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.20.1': - resolution: {integrity: sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==} + '@eslint/config-array@0.21.0': + resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-helpers@0.2.2': - resolution: {integrity: sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==} + '@eslint/config-helpers@0.3.1': + resolution: {integrity: sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.14.0': - resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==} + '@eslint/core@0.15.2': + resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/eslintrc@2.1.4': @@ -864,20 +815,20 @@ packages: resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@8.56.0': - resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} + '@eslint/js@8.57.1': + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@eslint/js@9.29.0': - resolution: {integrity: sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==} + '@eslint/js@9.33.0': + resolution: {integrity: sha512-5K1/mKhWaMfreBGJTwval43JJmkip0RmM+3+IuqupeSKNC/Th2Kc7ucaq5ovTSra/OOKB9c58CGSz3QMVbWt0A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.3.1': - resolution: {integrity: sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==} + '@eslint/plugin-kit@0.3.5': + resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@fastify/busboy@3.1.1': @@ -901,20 +852,20 @@ packages: resolution: {integrity: sha512-RiwLMc89lTjvyLEivZ/qxAC5nBHoS2CtsWFSOsN35sxG9zoo5Z+JsFHM8MlvmO9yt+MJNIyC5MLE1rsbOphlag==} engines: {node: '>=18.0.0'} - '@graphql-tools/batch-execute@9.0.16': - resolution: {integrity: sha512-sLAzEPrmrMTJrlNqmmsc34DtMA//FsoTsGC3V5bHA+EnNlwbwhsSQBSNXvIwsPLRSRwSjGKOpDG7KSxldDe2Rg==} + '@graphql-tools/batch-execute@9.0.19': + resolution: {integrity: sha512-VGamgY4PLzSx48IHPoblRw0oTaBa7S26RpZXt0Y4NN90ytoE0LutlpB2484RbkfcTjv9wa64QD474+YP1kEgGA==} engines: {node: '>=18.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/code-file-loader@8.1.20': - resolution: {integrity: sha512-GzIbjjWJIc04KWnEr8VKuPe0FA2vDTlkaeub5p4lLimljnJ6C0QSkOyCUnFmsB9jetQcHm0Wfmn/akMnFUG+wA==} + '@graphql-tools/code-file-loader@8.1.22': + resolution: {integrity: sha512-FSka29kqFkfFmw36CwoQ+4iyhchxfEzPbXOi37lCEjWLHudGaPkXc3RyB9LdmBxx3g3GHEu43a5n5W8gfcrMdA==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/delegate@10.2.18': - resolution: {integrity: sha512-UynhjLwBZUapjNSHJ7FhGMd7/sRjqB7nk6EcYDZFWQkACTaQKa14Vkv2y2O6rEu61xQxP3/E1+fr/mLn46Zf9A==} + '@graphql-tools/delegate@10.2.23': + resolution: {integrity: sha512-xrPtl7f1LxS+B6o+W7ueuQh67CwRkfl+UKJncaslnqYdkxKmNBB4wnzVcW8ZsRdwbsla/v43PtwAvSlzxCzq2w==} engines: {node: '>=18.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -925,8 +876,14 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/executor-graphql-ws@2.0.5': - resolution: {integrity: sha512-gI/D9VUzI1Jt1G28GYpvm5ckupgJ5O8mi5Y657UyuUozX34ErfVdZ81g6oVcKFQZ60LhCzk7jJeykK48gaLhDw==} + '@graphql-tools/executor-common@0.0.6': + resolution: {integrity: sha512-JAH/R1zf77CSkpYATIJw+eOJwsbWocdDjY+avY7G+P5HCXxwQjAjWVkJI1QJBQYjPQDVxwf1fmTZlIN3VOadow==} + engines: {node: '>=18.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/executor-graphql-ws@2.0.7': + resolution: {integrity: sha512-J27za7sKF6RjhmvSOwOQFeNhNHyP4f4niqPnerJmq73OtLx9Y2PGOhkXOEB0PjhvPJceuttkD2O1yMgEkTGs3Q==} engines: {node: '>=18.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -937,74 +894,74 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/executor-legacy-ws@1.1.17': - resolution: {integrity: sha512-TvltY6eL4DY1Vt66Z8kt9jVmNcI+WkvVPQZrPbMCM3rv2Jw/sWvSwzUBezRuWX0sIckMifYVh23VPcGBUKX/wg==} + '@graphql-tools/executor-legacy-ws@1.1.19': + resolution: {integrity: sha512-bEbv/SlEdhWQD0WZLUX1kOenEdVZk1yYtilrAWjRUgfHRZoEkY9s+oiqOxnth3z68wC2MWYx7ykkS5hhDamixg==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/executor@1.4.7': - resolution: {integrity: sha512-U0nK9jzJRP9/9Izf1+0Gggd6K6RNRsheFo1gC/VWzfnsr0qjcOSS9qTjY0OTC5iTPt4tQ+W5Zpw/uc7mebI6aA==} + '@graphql-tools/executor@1.4.9': + resolution: {integrity: sha512-SAUlDT70JAvXeqV87gGzvDzUGofn39nvaVcVhNf12Dt+GfWHtNNO/RCn/Ea4VJaSLGzraUd41ObnN3i80EBU7w==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/graphql-file-loader@8.0.20': - resolution: {integrity: sha512-inds4My+JJxmg5mxKWYtMIJNRxa7MtX+XIYqqD/nu6G4LzQ5KGaBJg6wEl103KxXli7qNOWeVAUmEjZeYhwNEg==} + '@graphql-tools/graphql-file-loader@8.0.22': + resolution: {integrity: sha512-KFUbjXgWr5+w/AioOuIuULy4LwcyDuQqTRFQGe+US1d9Z4+ZopcJLwsJTqp5B+icDkCqld4paN0y0qi9MrIvbg==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/graphql-tag-pluck@8.3.19': - resolution: {integrity: sha512-LEw/6IYOUz48HjbWntZXDCzSXsOIM1AyWZrlLoJOrA8QAlhFd8h5Tny7opCypj8FO9VvpPFugWoNDh5InPOEQA==} + '@graphql-tools/graphql-tag-pluck@8.3.21': + resolution: {integrity: sha512-TJhELNvR1tmghXMi6HVKp/Swxbx1rcSp/zdkuJZT0DCM3vOY11FXY6NW3aoxumcuYDNN3jqXcCPKstYGFPi5GQ==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/import@7.0.19': - resolution: {integrity: sha512-Xtku8G4bxnrr6I3hVf8RrBFGYIbQ1OYVjl7jgcy092aBkNZvy1T6EDmXmYXn5F+oLd9Bks3K3WaMm8gma/nM/Q==} + '@graphql-tools/import@7.0.21': + resolution: {integrity: sha512-bcAqNWm/gLVEOy55o/WdaROERpDyUEmIfZ9E6NDjVk1ZGWfZe47+RgriTV80j6J5S5J1g+6loFkVWGAMqdN06g==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/json-file-loader@8.0.18': - resolution: {integrity: sha512-JjjIxxewgk8HeMR3npR3YbOkB7fxmdgmqB9kZLWdkRKBxrRXVzhryyq+mhmI0Evzt6pNoHIc3vqwmSctG2sddg==} + '@graphql-tools/json-file-loader@8.0.20': + resolution: {integrity: sha512-5v6W+ZLBBML5SgntuBDLsYoqUvwfNboAwL6BwPHi3z/hH1f8BS9/0+MCW9OGY712g7E4pc3y9KqS67mWF753eA==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/load@8.1.0': - resolution: {integrity: sha512-OGfOm09VyXdNGJS/rLqZ6ztCiG2g6AMxhwtET8GZXTbnjptFc17GtKwJ3Jv5w7mjJ8dn0BHydvIuEKEUK4ciYw==} + '@graphql-tools/load@8.1.2': + resolution: {integrity: sha512-WhDPv25/jRND+0uripofMX0IEwo6mrv+tJg6HifRmDu8USCD7nZhufT0PP7lIcuutqjIQFyogqT70BQsy6wOgw==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/merge@9.0.24': - resolution: {integrity: sha512-NzWx/Afl/1qHT3Nm1bghGG2l4jub28AdvtG11PoUlmjcIjnFBJMv4vqL0qnxWe8A82peWo4/TkVdjJRLXwgGEw==} + '@graphql-tools/merge@9.1.1': + resolution: {integrity: sha512-BJ5/7Y7GOhTuvzzO5tSBFL4NGr7PVqTJY3KeIDlVTT8YLcTXtBR+hlrC3uyEym7Ragn+zyWdHeJ9ev+nRX1X2w==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/schema@10.0.23': - resolution: {integrity: sha512-aEGVpd1PCuGEwqTXCStpEkmheTHNdMayiIKH1xDWqYp9i8yKv9FRDgkGrY4RD8TNxnf7iII+6KOBGaJ3ygH95A==} + '@graphql-tools/schema@10.0.25': + resolution: {integrity: sha512-/PqE8US8kdQ7lB9M5+jlW8AyVjRGCKU7TSktuW3WNKSKmDO0MK1wakvb5gGdyT49MjAIb4a3LWxIpwo5VygZuw==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/url-loader@8.0.31': - resolution: {integrity: sha512-QGP3py6DAdKERHO5D38Oi+6j+v0O3rkBbnLpyOo87rmIRbwE6sOkL5JeHegHs7EEJ279fBX6lMt8ry0wBMGtyA==} + '@graphql-tools/url-loader@8.0.33': + resolution: {integrity: sha512-Fu626qcNHcqAj8uYd7QRarcJn5XZ863kmxsg1sm0fyjyfBJnsvC7ddFt6Hayz5kxVKfsnjxiDfPMXanvsQVBKw==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/utils@10.8.6': - resolution: {integrity: sha512-Alc9Vyg0oOsGhRapfL3xvqh1zV8nKoFUdtLhXX7Ki4nClaIJXckrA86j+uxEuG3ic6j4jlM1nvcWXRn/71AVLQ==} + '@graphql-tools/utils@10.9.1': + resolution: {integrity: sha512-B1wwkXk9UvU7LCBkPs8513WxOQ2H8Fo5p8HR1+Id9WmYE5+bd51vqN+MbrqvWczHCH2gwkREgHJN88tE0n1FCw==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/wrap@10.0.36': - resolution: {integrity: sha512-sLm9j/T6mlKklSMOCDjrGMi39MRAUzRXsc8tTugZZl0yJEtfU7tX1UaYJQNVsar7vkjLofaWtS7Jf6vcWgGYgQ==} + '@graphql-tools/wrap@10.1.4': + resolution: {integrity: sha512-7pyNKqXProRjlSdqOtrbnFRMQAVamCmEREilOXtZujxY6kYit3tvWWSjUrcIOheltTffoRh7EQSjpy2JDCzasg==} engines: {node: '>=18.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -1027,8 +984,8 @@ packages: resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} engines: {node: '>=18.18.0'} - '@humanwhocodes/config-array@0.11.13': - resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} + '@humanwhocodes/config-array@0.13.0': + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} engines: {node: '>=10.10.0'} deprecated: Use @eslint/config-array instead @@ -1040,8 +997,8 @@ packages: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} deprecated: Use @eslint/object-schema instead - '@humanwhocodes/retry@0.3.0': - resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==} + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} engines: {node: '>=18.18'} '@humanwhocodes/retry@0.4.3': @@ -1068,29 +1025,24 @@ packages: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} - '@jridgewell/gen-mapping@0.3.5': - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} - engines: {node: '>=6.0.0'} - - '@jridgewell/resolve-uri@3.1.1': - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} - engines: {node: '>=6.0.0'} + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - '@jridgewell/sourcemap-codec@1.4.15': - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/trace-mapping@0.3.30': + resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==} - '@napi-rs/wasm-runtime@0.2.11': - resolution: {integrity: sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==} + '@napi-rs/wasm-runtime@0.2.12': + resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} - '@next/eslint-plugin-next@15.3.3': - resolution: {integrity: sha512-VKZJEiEdpKkfBmcokGjHu0vGDG+8CehGs90tBEy/IDoDDKGngeyIStt2MmE5FYNyU9BhgR7tybNWTAJY/30u+Q==} + '@next/eslint-plugin-next@15.4.6': + resolution: {integrity: sha512-2NOu3ln+BTcpnbIDuxx6MNq+pRrCyey4WSXGaJIyt0D2TYicHeO9QrUENNjcf673n3B1s7hsiV5xBYRCK1Q8kA==} '@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3': resolution: {integrity: sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==} @@ -1126,8 +1078,8 @@ packages: resolution: {integrity: sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==} engines: {node: '>= 20'} - '@octokit/core@7.0.2': - resolution: {integrity: sha512-ODsoD39Lq6vR6aBgvjTnA3nZGliknKboc9Gtxr7E4WDNqY24MxANKcuDQSF0jzapvGb3KWOEDrKfve4HoWGK+g==} + '@octokit/core@7.0.3': + resolution: {integrity: sha512-oNXsh2ywth5aowwIa7RKtawnkdH6LgU1ztfP9AIUCQCvzysB+WeU8o2kyyosDPwBZutPpjZDKPQGIzzrfTWweQ==} engines: {node: '>= 20'} '@octokit/endpoint@11.0.0': @@ -1141,8 +1093,8 @@ packages: '@octokit/openapi-types@25.1.0': resolution: {integrity: sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA==} - '@octokit/plugin-paginate-rest@13.0.1': - resolution: {integrity: sha512-m1KvHlueScy4mQJWvFDCxFBTIdXS0K1SgFGLmqHyX90mZdCIv6gWBbKRhatxRjhGlONuTK/hztYdaqrTXcFZdQ==} + '@octokit/plugin-paginate-rest@13.1.1': + resolution: {integrity: sha512-q9iQGlZlxAVNRN2jDNskJW/Cafy7/XE52wjZ5TTvyhyOD904Cvx//DNyoO3J/MXJ0ve3rPoNWKEg5iZrisQSuw==} engines: {node: '>= 20'} peerDependencies: '@octokit/core': '>=6' @@ -1163,8 +1115,8 @@ packages: resolution: {integrity: sha512-KRA7VTGdVyJlh0cP5Tf94hTiYVVqmt2f3I6mnimmaVz4UG3gQV/k4mDJlJv3X67iX6rmN7gSHCF8ssqeMnmhZg==} engines: {node: '>= 20'} - '@octokit/request@10.0.2': - resolution: {integrity: sha512-iYj4SJG/2bbhh+iIpFmG5u49DtJ4lipQ+aPakjL9OKpsGY93wM8w06gvFbEQxcMsZcCvk5th5KkIm2m8o14aWA==} + '@octokit/request@10.0.3': + resolution: {integrity: sha512-V6jhKokg35vk098iBqp2FBKunk3kMTXlmq+PtbV9Gl3TfskWlebSofU9uunVKhUN7xl+0+i5vt0TGTG8/p/7HA==} engines: {node: '>= 20'} '@octokit/types@14.1.0': @@ -1174,8 +1126,8 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@pkgr/core@0.2.4': - resolution: {integrity: sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw==} + '@pkgr/core@0.2.9': + resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} '@pnpm/config.env-replace@1.1.0': @@ -1186,13 +1138,10 @@ packages: resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} engines: {node: '>=12.22.0'} - '@pnpm/npm-conf@2.2.2': - resolution: {integrity: sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==} + '@pnpm/npm-conf@2.3.1': + resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==} engines: {node: '>=12'} - '@repeaterjs/repeater@3.0.5': - resolution: {integrity: sha512-l3YHBLAol6d/IKnB9LhpD0cEZWAoe3eFKUyTYWmFmCO2Q/WOckxLQAUyMZWwZV2M/m3+4vgRoaolFqaII82/TA==} - '@repeaterjs/repeater@3.0.6': resolution: {integrity: sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==} @@ -1209,20 +1158,20 @@ packages: resolution: {integrity: sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==} engines: {node: '>=18'} - '@semantic-release/github@11.0.3': - resolution: {integrity: sha512-T2fKUyFkHHkUNa5XNmcsEcDPuG23hwBKptfUVcFXDVG2cSjXXZYDOfVYwfouqbWo/8UefotLaoGfQeK+k3ep6A==} + '@semantic-release/github@11.0.4': + resolution: {integrity: sha512-fU/nLSjkp9DmB0h7FVO5imhhWJMvq2LjD4+3lz3ZAzpDLY9+KYwC+trJ+g7LbZeJv9y3L9fSFSg2DduUpiT6bw==} engines: {node: '>=20.8.1'} peerDependencies: semantic-release: '>=24.1.0' - '@semantic-release/npm@12.0.1': - resolution: {integrity: sha512-/6nntGSUGK2aTOI0rHPwY3ZjgY9FkXmEHbW9Kr+62NVOsyqpKKeP0lrCH+tphv+EsNdJNmqqwijTEnVWUMQ2Nw==} + '@semantic-release/npm@12.0.2': + resolution: {integrity: sha512-+M9/Lb35IgnlUO6OSJ40Ie+hUsZLuph2fqXC/qrKn0fMvUU/jiCjpoL6zEm69vzcmaZJ8yNKtMBEKHWN49WBbQ==} engines: {node: '>=20.8.1'} peerDependencies: semantic-release: '>=20.1.0' - '@semantic-release/release-notes-generator@14.0.1': - resolution: {integrity: sha512-K0w+5220TM4HZTthE5dDpIuFrnkN1NfTGPidJFm04ULT1DEZ9WG89VNXN7F0c+6nMEpWgqmPvb7vY7JkB2jyyA==} + '@semantic-release/release-notes-generator@14.0.3': + resolution: {integrity: sha512-XxAZRPWGwO5JwJtS83bRdoIhCiYIx8Vhr+u231pQAsdFIAbm19rSVJLdnBN+Avvk7CKvNQE/nJ4y7uqKH6WTiw==} engines: {node: '>=20.8.1'} peerDependencies: semantic-release: '>=20.1.0' @@ -1231,22 +1180,28 @@ packages: resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} - '@sindresorhus/merge-streams@1.0.0': - resolution: {integrity: sha512-rUV5WyJrJLoloD4NDN1V1+LDMDWOa4OTsT4yYJwQNpTU6FWxkxHpL7eu4w+DmiH8x/EAM1otkPE1+LaspIbplw==} + '@sindresorhus/merge-streams@2.3.0': + resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} engines: {node: '>=18'} '@sindresorhus/merge-streams@4.0.0': resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} engines: {node: '>=18'} - '@stylistic/eslint-plugin@4.4.0': - resolution: {integrity: sha512-bIh/d9X+OQLCAMdhHtps+frvyjvAM4B1YlSJzcEEhl7wXLIqPar3ngn9DrHhkBOrTA/z9J0bUMtctAspe0dxdQ==} + '@stylistic/eslint-plugin@4.4.1': + resolution: {integrity: sha512-CEigAk7eOLyHvdgmpZsKFwtiqS2wFwI1fn4j09IU9GmD4euFM4jEBAViWeCqaNLlbX2k2+A/Fq9cje4HQBXuJQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=9.0.0' - '@tybys/wasm-util@0.9.0': - resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} + '@theguild/federation-composition@0.19.1': + resolution: {integrity: sha512-E4kllHSRYh+FsY0VR+fwl0rmWhDV8xUgWawLZTXmy15nCWQwj0BDsoEpdEXjPh7xes+75cRaeJcSbZ4jkBuSdg==} + engines: {node: '>=18'} + peerDependencies: + graphql: ^16.0.0 + + '@tybys/wasm-util@0.10.0': + resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==} '@types/chai@5.2.2': resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} @@ -1278,17 +1233,17 @@ packages: '@types/lodash.defaultsdeep@4.6.9': resolution: {integrity: sha512-pLtCFK0YkHfGtGLYLNMTbFB5/G5+RsmQCIbbHH8GOAXjv+gDkVilY98kILfe8JH2Kev0OCReYxp1AjxEjP8ixA==} - '@types/lodash@4.14.202': - resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==} + '@types/lodash@4.17.20': + resolution: {integrity: sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==} '@types/mocha@10.0.10': resolution: {integrity: sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==} - '@types/ms@0.7.34': - resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@24.0.3': - resolution: {integrity: sha512-R4I/kzCYAdRLzfiCabn9hxWfbuHS573x+r0dJMkkzThEa7pbrcDWK+9zu3e7aBOouf+rQAciqPFMnxwr0aWgKg==} + '@types/node@24.2.1': + resolution: {integrity: sha512-DRh5K+ka5eJic8CjH7td8QpYEV6Zo10gfRkjHCO3weqZHWDtAaSTFtl4+VMqOJ4N5jcuhZ9/l+yy8rVgw7BQeQ==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -1299,24 +1254,16 @@ packages: '@types/spdx-expression-parse@3.0.5': resolution: {integrity: sha512-XrojSCTzVxPAfWeAiw8Hg27OW/4jalE7yiohCHRPprqfPyt2oG+Osy1HstUPMF26cEdno3IeEhv31Pzl0wwsQw==} - '@types/ws@8.5.10': - resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} + '@types/ws@8.18.1': + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} - '@typescript-eslint/eslint-plugin@8.32.1': - resolution: {integrity: sha512-6u6Plg9nP/J1GRpe/vcjjabo6Uc5YQPAMxsgQyGC/I0RuukiG1wIe3+Vtg3IrSCVJDmqK3j8adrtzXSENRtFgg==} + '@typescript-eslint/eslint-plugin@8.39.1': + resolution: {integrity: sha512-yYegZ5n3Yr6eOcqgj2nJH8cH/ZZgF+l0YIdKILSDjYFRjgYQMgv/lRjV5Z7Up04b9VYUondt8EPMqg7kTWgJ2g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + '@typescript-eslint/parser': ^8.39.1 eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/eslint-plugin@8.34.1': - resolution: {integrity: sha512-STXcN6ebF6li4PxwNeFnqF8/2BNDvBupf2OPx2yWNzr6mKNGF7q49VM00Pz5FaomJyqvbXpY6PhO+T9w139YEQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.34.1 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' '@typescript-eslint/parser@6.21.0': resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} @@ -1328,93 +1275,46 @@ packages: typescript: optional: true - '@typescript-eslint/parser@8.32.1': - resolution: {integrity: sha512-LKMrmwCPoLhM45Z00O1ulb6jwyVr2kr3XJp+G+tSEZcbauNnScewcQwtJqXDhXeYPDEjZ8C1SjXm015CirEmGg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/parser@8.34.1': - resolution: {integrity: sha512-4O3idHxhyzjClSMJ0a29AcoK0+YwnEqzI6oz3vlRf3xw0zbzt15MzXwItOlnr5nIth6zlY2RENLsOPvhyrKAQA==} + '@typescript-eslint/parser@8.39.1': + resolution: {integrity: sha512-pUXGCuHnnKw6PyYq93lLRiZm3vjuslIy7tus1lIQTYVK9bL8XBgJnCWm8a0KcTtHC84Yya1Q6rtll+duSMj0dg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.33.0': - resolution: {integrity: sha512-d1hz0u9l6N+u/gcrk6s6gYdl7/+pp8yHheRTqP6X5hVDKALEaTn8WfGiit7G511yueBEL3OpOEpD+3/MBdoN+A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/project-service@8.34.1': - resolution: {integrity: sha512-nuHlOmFZfuRwLJKDGQOVc0xnQrAmuq1Mj/ISou5044y1ajGNp2BNliIqp7F2LPQ5sForz8lempMFCovfeS1XoA==} + '@typescript-eslint/project-service@8.39.1': + resolution: {integrity: sha512-8fZxek3ONTwBu9ptw5nCKqZOSkXshZB7uAxuFF0J/wTMkKydjXCzqqga7MlFMpHi9DoG4BadhmTkITBcg8Aybw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' '@typescript-eslint/scope-manager@6.21.0': resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/scope-manager@8.32.1': - resolution: {integrity: sha512-7IsIaIDeZn7kffk7qXC3o6Z4UblZJKV3UBpkvRNpr5NSyLji7tvTcvmnMNYuYLyh26mN8W723xpo3i4MlD33vA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/scope-manager@8.33.0': - resolution: {integrity: sha512-LMi/oqrzpqxyO72ltP+dBSP6V0xiUb4saY7WLtxSfiNEBI8m321LLVFU9/QDJxjDQG9/tjSqKz/E3380TEqSTw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/scope-manager@8.34.1': - resolution: {integrity: sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/tsconfig-utils@8.33.0': - resolution: {integrity: sha512-sTkETlbqhEoiFmGr1gsdq5HyVbSOF0145SYDJ/EQmXHtKViCaGvnyLqWFFHtEXoS0J1yU8Wyou2UGmgW88fEug==} + '@typescript-eslint/scope-manager@8.39.1': + resolution: {integrity: sha512-RkBKGBrjgskFGWuyUGz/EtD8AF/GW49S21J8dvMzpJitOF1slLEbbHnNEtAHtnDAnx8qDEdRrULRnWVx27wGBw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/tsconfig-utils@8.34.1': - resolution: {integrity: sha512-K4Sjdo4/xF9NEeA2khOb7Y5nY6NSXBnod87uniVYW9kHP+hNlDV8trUSFeynA2uxWam4gIWgWoygPrv9VMWrYg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/type-utils@8.32.1': - resolution: {integrity: sha512-mv9YpQGA8iIsl5KyUPi+FGLm7+bA4fgXaeRcFKRDRwDMu4iwrSHeDPipwueNXhdIIZltwCJv+NkxftECbIZWfA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/type-utils@8.33.0': - resolution: {integrity: sha512-lScnHNCBqL1QayuSrWeqAL5GmqNdVUQAAMTaCwdYEdWfIrSrOGzyLGRCHXcCixa5NK6i5l0AfSO2oBSjCjf4XQ==} + '@typescript-eslint/tsconfig-utils@8.39.1': + resolution: {integrity: sha512-ePUPGVtTMR8XMU2Hee8kD0Pu4NDE1CN9Q1sxGSGd/mbOtGZDM7pnhXNJnzW63zk/q+Z54zVzj44HtwXln5CvHA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.34.1': - resolution: {integrity: sha512-Tv7tCCr6e5m8hP4+xFugcrwTOucB8lshffJ6zf1mF1TbU67R+ntCc6DzLNKM+s/uzDyv8gLq7tufaAhIBYeV8g==} + '@typescript-eslint/type-utils@8.39.1': + resolution: {integrity: sha512-gu9/ahyatyAdQbKeHnhT4R+y3YLtqqHyvkfDxaBYk97EcbfChSJXyaJnIL3ygUv7OuZatePHmQvuH5ru0lnVeA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' '@typescript-eslint/types@6.21.0': resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/types@8.32.1': - resolution: {integrity: sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/types@8.33.0': - resolution: {integrity: sha512-DKuXOKpM5IDT1FA2g9x9x1Ug81YuKrzf4mYX8FAVSNu5Wo/LELHWQyM1pQaDkI42bX15PWl0vNPt1uGiIFUOpg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/types@8.34.1': - resolution: {integrity: sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==} + '@typescript-eslint/types@8.39.1': + resolution: {integrity: sha512-7sPDKQQp+S11laqTrhHqeAbsCfMkwJMrV7oTDvtDds4mEofJYir414bYKUEb8YPUm9QL3U+8f6L6YExSoAGdQw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@6.21.0': @@ -1426,246 +1326,127 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@8.32.1': - resolution: {integrity: sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/typescript-estree@8.33.0': - resolution: {integrity: sha512-vegY4FQoB6jL97Tu/lWRsAiUUp8qJTqzAmENH2k59SJhw0Th1oszb9Idq/FyyONLuNqT1OADJPXfyUNOR8SzAQ==} + '@typescript-eslint/typescript-estree@8.39.1': + resolution: {integrity: sha512-EKkpcPuIux48dddVDXyQBlKdeTPMmALqBUbEk38McWv0qVEZwOpVJBi7ugK5qVNgeuYjGNQxrrnoM/5+TI/BPw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/typescript-estree@8.34.1': - resolution: {integrity: sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/utils@8.32.1': - resolution: {integrity: sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/utils@8.33.0': - resolution: {integrity: sha512-lPFuQaLA9aSNa7D5u2EpRiqdAUhzShwGg/nhpBlc4GR6kcTABttCuyjFs8BcEZ8VWrjCBof/bePhP3Q3fS+Yrw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/utils@8.34.1': - resolution: {integrity: sha512-mqOwUdZ3KjtGk7xJJnLbHxTuWVn3GO2WZZuM+Slhkun4+qthLdXx32C8xIXbO1kfCECb3jIs3eoxK3eryk7aoQ==} + '@typescript-eslint/utils@8.39.1': + resolution: {integrity: sha512-VF5tZ2XnUSTuiqZFXCZfZs1cgkdd3O/sSYmdo2EpSyDlC86UM/8YytTmKnehOW3TGAlivqTDT6bS87B/GQ/jyg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' '@typescript-eslint/visitor-keys@6.21.0': resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/visitor-keys@8.32.1': - resolution: {integrity: sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/visitor-keys@8.33.0': - resolution: {integrity: sha512-7RW7CMYoskiz5OOGAWjJFxgb7c5UNjTG292gYhWeOAcFmYCtVCSqjqSBj5zMhxbXo2JOW95YYrUWJfU0zrpaGQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/visitor-keys@8.34.1': - resolution: {integrity: sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw==} + '@typescript-eslint/visitor-keys@8.39.1': + resolution: {integrity: sha512-W8FQi6kEh2e8zVhQ0eeRnxdvIoOkAp/CPAahcNio6nO9dsIwb9b34z90KOlheoyuVf6LSOEdjlkxSkapNEc+4A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@ungap/structured-clone@1.2.0': - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - '@unrs/resolver-binding-android-arm-eabi@1.9.0': - resolution: {integrity: sha512-h1T2c2Di49ekF2TE8ZCoJkb+jwETKUIPDJ/nO3tJBKlLFPu+fyd93f0rGP/BvArKx2k2HlRM4kqkNarj3dvZlg==} + '@unrs/resolver-binding-android-arm-eabi@1.11.1': + resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} cpu: [arm] os: [android] - '@unrs/resolver-binding-android-arm64@1.9.0': - resolution: {integrity: sha512-sG1NHtgXtX8owEkJ11yn34vt0Xqzi3k9TJ8zppDmyG8GZV4kVWw44FHwKwHeEFl07uKPeC4ZoyuQaGh5ruJYPA==} + '@unrs/resolver-binding-android-arm64@1.11.1': + resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==} cpu: [arm64] os: [android] - '@unrs/resolver-binding-darwin-arm64@1.7.8': - resolution: {integrity: sha512-rsRK8T7yxraNRDmpFLZCWqpea6OlXPNRRCjWMx24O1V86KFol7u2gj9zJCv6zB1oJjtnzWceuqdnCgOipFcJPA==} - cpu: [arm64] - os: [darwin] - - '@unrs/resolver-binding-darwin-arm64@1.9.0': - resolution: {integrity: sha512-nJ9z47kfFnCxN1z/oYZS7HSNsFh43y2asePzTEZpEvK7kGyuShSl3RRXnm/1QaqFL+iP+BjMwuB+DYUymOkA5A==} + '@unrs/resolver-binding-darwin-arm64@1.11.1': + resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==} cpu: [arm64] os: [darwin] - '@unrs/resolver-binding-darwin-x64@1.7.8': - resolution: {integrity: sha512-16yEMWa+Olqkk8Kl6Bu0ltT5OgEedkSAsxcz1B3yEctrDYp3EMBu/5PPAGhWVGnwhtf3hNe3y15gfYBAjOv5tQ==} - cpu: [x64] - os: [darwin] - - '@unrs/resolver-binding-darwin-x64@1.9.0': - resolution: {integrity: sha512-TK+UA1TTa0qS53rjWn7cVlEKVGz2B6JYe0C++TdQjvWYIyx83ruwh0wd4LRxYBM5HeuAzXcylA9BH2trARXJTw==} + '@unrs/resolver-binding-darwin-x64@1.11.1': + resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==} cpu: [x64] os: [darwin] - '@unrs/resolver-binding-freebsd-x64@1.7.8': - resolution: {integrity: sha512-ST4uqF6FmdZQgv+Q73FU1uHzppeT4mhX3IIEmHlLObrv5Ep50olWRz0iQ4PWovadjHMTAmpuJAGaAuCZYb7UAQ==} - cpu: [x64] - os: [freebsd] - - '@unrs/resolver-binding-freebsd-x64@1.9.0': - resolution: {integrity: sha512-6uZwzMRFcD7CcCd0vz3Hp+9qIL2jseE/bx3ZjaLwn8t714nYGwiE84WpaMCYjU+IQET8Vu/+BNAGtYD7BG/0yA==} + '@unrs/resolver-binding-freebsd-x64@1.11.1': + resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==} cpu: [x64] os: [freebsd] - '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.8': - resolution: {integrity: sha512-Z/A/4Rm2VWku2g25C3tVb986fY6unx5jaaCFpx1pbAj0OKkyuJ5wcQLHvNbIcJ9qhiYwXfrkB7JNlxrAbg7YFg==} + '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': + resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==} cpu: [arm] os: [linux] - '@unrs/resolver-binding-linux-arm-gnueabihf@1.9.0': - resolution: {integrity: sha512-bPUBksQfrgcfv2+mm+AZinaKq8LCFvt5PThYqRotqSuuZK1TVKkhbVMS/jvSRfYl7jr3AoZLYbDkItxgqMKRkg==} + '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': + resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==} cpu: [arm] os: [linux] - '@unrs/resolver-binding-linux-arm-musleabihf@1.7.8': - resolution: {integrity: sha512-HN0p7o38qKmDo3bZUiQa6gP7Qhf0sKgJZtRfSHi6JL2Gi4NaUVF0EO1sQ1RHbeQ4VvfjUGMh3QE5dxEh06BgQQ==} - cpu: [arm] - os: [linux] - - '@unrs/resolver-binding-linux-arm-musleabihf@1.9.0': - resolution: {integrity: sha512-uT6E7UBIrTdCsFQ+y0tQd3g5oudmrS/hds5pbU3h4s2t/1vsGWbbSKhBSCD9mcqaqkBwoqlECpUrRJCmldl8PA==} - cpu: [arm] - os: [linux] - - '@unrs/resolver-binding-linux-arm64-gnu@1.7.8': - resolution: {integrity: sha512-HsoVqDBt9G69AN0KWeDNJW+7i8KFlwxrbbnJffgTGpiZd6Jw+Q95sqkXp8y458KhKduKLmXfVZGnKBTNxAgPjw==} - cpu: [arm64] - os: [linux] - - '@unrs/resolver-binding-linux-arm64-gnu@1.9.0': - resolution: {integrity: sha512-vdqBh911wc5awE2bX2zx3eflbyv8U9xbE/jVKAm425eRoOVv/VseGZsqi3A3SykckSpF4wSROkbQPvbQFn8EsA==} - cpu: [arm64] - os: [linux] - - '@unrs/resolver-binding-linux-arm64-musl@1.7.8': - resolution: {integrity: sha512-VfR2yTDUbUvn+e/Aw22CC9fQg9zdShHAfwWctNBdOk7w9CHWl2OtYlcMvjzMAns8QxoHQoqn3/CEnZ4Ts7hfrA==} + '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': + resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==} cpu: [arm64] os: [linux] - '@unrs/resolver-binding-linux-arm64-musl@1.9.0': - resolution: {integrity: sha512-/8JFZ/SnuDr1lLEVsxsuVwrsGquTvT51RZGvyDB/dOK3oYK2UqeXzgeyq6Otp8FZXQcEYqJwxb9v+gtdXn03eQ==} + '@unrs/resolver-binding-linux-arm64-musl@1.11.1': + resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==} cpu: [arm64] os: [linux] - '@unrs/resolver-binding-linux-ppc64-gnu@1.7.8': - resolution: {integrity: sha512-xUauVQNz4uDgs4UJJiUAwMe3N0PA0wvtImh7V0IFu++UKZJhssXbKHBRR4ecUJpUHCX2bc4Wc8sGsB6P+7BANg==} + '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': + resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==} cpu: [ppc64] os: [linux] - '@unrs/resolver-binding-linux-ppc64-gnu@1.9.0': - resolution: {integrity: sha512-FkJjybtrl+rajTw4loI3L6YqSOpeZfDls4SstL/5lsP2bka9TiHUjgMBjygeZEis1oC8LfJTS8FSgpKPaQx2tQ==} - cpu: [ppc64] - os: [linux] - - '@unrs/resolver-binding-linux-riscv64-gnu@1.7.8': - resolution: {integrity: sha512-GqyIB+CuSHGhhc8ph5RrurtNetYJjb6SctSHafqmdGcRuGi6uyTMR8l18hMEhZFsXdFMc/MpInPLvmNV22xn+A==} - cpu: [riscv64] - os: [linux] - - '@unrs/resolver-binding-linux-riscv64-gnu@1.9.0': - resolution: {integrity: sha512-w/NZfHNeDusbqSZ8r/hp8iL4S39h4+vQMc9/vvzuIKMWKppyUGKm3IST0Qv0aOZ1rzIbl9SrDeIqK86ZpUK37w==} - cpu: [riscv64] - os: [linux] - - '@unrs/resolver-binding-linux-riscv64-musl@1.7.8': - resolution: {integrity: sha512-eEU3rWIFRv60xaAbtsgwHNWRZGD7cqkpCvNtio/f1TjEE3HfKLzPNB24fA9X/8ZXQrGldE65b7UKK3PmO4eWIQ==} + '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': + resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==} cpu: [riscv64] os: [linux] - '@unrs/resolver-binding-linux-riscv64-musl@1.9.0': - resolution: {integrity: sha512-bEPBosut8/8KQbUixPry8zg/fOzVOWyvwzOfz0C0Rw6dp+wIBseyiHKjkcSyZKv/98edrbMknBaMNJfA/UEdqw==} + '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': + resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==} cpu: [riscv64] os: [linux] - '@unrs/resolver-binding-linux-s390x-gnu@1.7.8': - resolution: {integrity: sha512-GVLI0f4I4TlLqEUoOFvTWedLsJEdvsD0+sxhdvQ5s+N+m2DSynTs8h9jxR0qQbKlpHWpc2Ortz3z48NHRT4l+w==} - cpu: [s390x] - os: [linux] - - '@unrs/resolver-binding-linux-s390x-gnu@1.9.0': - resolution: {integrity: sha512-LDtMT7moE3gK753gG4pc31AAqGUC86j3AplaFusc717EUGF9ZFJ356sdQzzZzkBk1XzMdxFyZ4f/i35NKM/lFA==} + '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': + resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==} cpu: [s390x] os: [linux] - '@unrs/resolver-binding-linux-x64-gnu@1.7.8': - resolution: {integrity: sha512-GX1pZ/4ncUreB0Rlp1l7bhKAZ8ZmvDIgXdeb5V2iK0eRRF332+6gRfR/r5LK88xfbtOpsmRHU6mQ4N8ZnwvGEA==} + '@unrs/resolver-binding-linux-x64-gnu@1.11.1': + resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==} cpu: [x64] os: [linux] - '@unrs/resolver-binding-linux-x64-gnu@1.9.0': - resolution: {integrity: sha512-WmFd5KINHIXj8o1mPaT8QRjA9HgSXhN1gl9Da4IZihARihEnOylu4co7i/yeaIpcfsI6sYs33cNZKyHYDh0lrA==} + '@unrs/resolver-binding-linux-x64-musl@1.11.1': + resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==} cpu: [x64] os: [linux] - '@unrs/resolver-binding-linux-x64-musl@1.7.8': - resolution: {integrity: sha512-n1N84MnsvDupzVuYqJGj+2pb9s8BI1A5RgXHvtVFHedGZVBCFjDpQVRlmsFMt6xZiKwDPaqsM16O/1isCUGt7w==} - cpu: [x64] - os: [linux] - - '@unrs/resolver-binding-linux-x64-musl@1.9.0': - resolution: {integrity: sha512-CYuXbANW+WgzVRIl8/QvZmDaZxrqvOldOwlbUjIM4pQ46FJ0W5cinJ/Ghwa/Ng1ZPMJMk1VFdsD/XwmCGIXBWg==} - cpu: [x64] - os: [linux] - - '@unrs/resolver-binding-wasm32-wasi@1.7.8': - resolution: {integrity: sha512-x94WnaU5g+pCPDVedfnXzoG6lCOF2xFGebNwhtbJCWfceE94Zj8aysSxdxotlrZrxnz5D3ijtyFUYtpz04n39Q==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - - '@unrs/resolver-binding-wasm32-wasi@1.9.0': - resolution: {integrity: sha512-6Rp2WH0OoitMYR57Z6VE8Y6corX8C6QEMWLgOV6qXiJIeZ1F9WGXY/yQ8yDC4iTraotyLOeJ2Asea0urWj2fKQ==} + '@unrs/resolver-binding-wasm32-wasi@1.11.1': + resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@unrs/resolver-binding-win32-arm64-msvc@1.7.8': - resolution: {integrity: sha512-vst2u8EJZ5L6jhJ6iLis3w9rg16aYqRxQuBAMYQRVrPMI43693hLP7DuqyOBRKgsQXy9/jgh204k0ViHkqQgdg==} - cpu: [arm64] - os: [win32] - - '@unrs/resolver-binding-win32-arm64-msvc@1.9.0': - resolution: {integrity: sha512-rknkrTRuvujprrbPmGeHi8wYWxmNVlBoNW8+4XF2hXUnASOjmuC9FNF1tGbDiRQWn264q9U/oGtixyO3BT8adQ==} + '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': + resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==} cpu: [arm64] os: [win32] - '@unrs/resolver-binding-win32-ia32-msvc@1.7.8': - resolution: {integrity: sha512-yb3LZOLMFqnA+/ShlE1E5bpYPGDsA590VHHJPB+efnyowT776GJXBoh82em6O9WmYBUq57YblGTcMYAFBm72HA==} + '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': + resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==} cpu: [ia32] os: [win32] - '@unrs/resolver-binding-win32-ia32-msvc@1.9.0': - resolution: {integrity: sha512-Ceymm+iBl+bgAICtgiHyMLz6hjxmLJKqBim8tDzpX61wpZOx2bPK6Gjuor7I2RiUynVjvvkoRIkrPyMwzBzF3A==} - cpu: [ia32] - os: [win32] - - '@unrs/resolver-binding-win32-x64-msvc@1.7.8': - resolution: {integrity: sha512-hHKFx+opG5BA3/owMXon8ypwSotBGTdblG6oda/iOu9+OEYnk0cxD2uIcGyGT8jCK578kV+xMrNxqbn8Zjlpgw==} - cpu: [x64] - os: [win32] - - '@unrs/resolver-binding-win32-x64-msvc@1.9.0': - resolution: {integrity: sha512-k59o9ZyeyS0hAlcaKFezYSH2agQeRFEB7KoQLXl3Nb3rgkqT1NY9Vwy+SqODiLmYnEjxWJVRE/yq2jFVqdIxZw==} + '@unrs/resolver-binding-win32-x64-msvc@1.11.1': + resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==} cpu: [x64] os: [win32] - '@vitest/eslint-plugin@1.2.1': - resolution: {integrity: sha512-JQr1jdVcrsoS7Sdzn83h9sq4DvREf9Q/onTZbJCqTVlv/76qb+TZrLv/9VhjnjSMHweQH5FdpMDeCR6aDe2fgw==} + '@vitest/eslint-plugin@1.3.4': + resolution: {integrity: sha512-EOg8d0jn3BAiKnR55WkFxmxfWA3nmzrbIIuOXyTe6A72duryNgyU+bdBEauA97Aab3ho9kLmAwgPX63Ckj4QEg==} peerDependencies: eslint: '>= 8.57.0' typescript: '>= 5.0.0' @@ -1680,12 +1461,12 @@ packages: resolution: {integrity: sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw==} engines: {node: '>=18.0.0'} - '@whatwg-node/fetch@0.10.8': - resolution: {integrity: sha512-Rw9z3ctmeEj8QIB9MavkNJqekiu9usBCSMZa+uuAvM0lF3v70oQVCXNppMIqaV6OTZbdaHF1M2HLow58DEw+wg==} + '@whatwg-node/fetch@0.10.10': + resolution: {integrity: sha512-watz4i/Vv4HpoJ+GranJ7HH75Pf+OkPQ63NoVmru6Srgc8VezTArB00i/oQlnn0KWh14gM42F22Qcc9SU9mo/w==} engines: {node: '>=18.0.0'} - '@whatwg-node/node-fetch@0.7.21': - resolution: {integrity: sha512-QC16IdsEyIW7kZd77aodrMO7zAoDyyqRCTLg+qG4wqtP4JV9AA+p7/lgqMdD29XyiYdVvIdFrfI9yh7B1QvRvw==} + '@whatwg-node/node-fetch@0.7.25': + resolution: {integrity: sha512-szCTESNJV+Xd56zU6ShOi/JWROxE9IwCic8o5D9z5QECZloas6Ez5tUuKqXTAdu6fHFx1t6C+5gwj8smzOLjtg==} engines: {node: '>=18.0.0'} '@whatwg-node/promise-helpers@1.3.2': @@ -1709,27 +1490,13 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - acorn@8.12.0: - resolution: {integrity: sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==} - engines: {node: '>=0.4.0'} - hasBin: true - - acorn@8.14.1: - resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} - engines: {node: '>=0.4.0'} - hasBin: true - acorn@8.15.0: resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} hasBin: true - agent-base@7.1.0: - resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} - engines: {node: '>= 14'} - - agent-base@7.1.3: - resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} aggregate-error@3.1.0: @@ -1751,10 +1518,6 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} - ansi-regex@6.1.0: resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} engines: {node: '>=12'} @@ -1795,10 +1558,6 @@ packages: resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} engines: {node: '>= 0.4'} - array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} - engines: {node: '>= 0.4'} - array-buffer-byte-length@1.0.2: resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} engines: {node: '>= 0.4'} @@ -1806,8 +1565,8 @@ packages: array-ify@1.0.0: resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} - array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + array-includes@3.1.9: + resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} engines: {node: '>= 0.4'} array-union@2.1.0: @@ -1818,30 +1577,22 @@ packages: resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} engines: {node: '>= 0.4'} - array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} - - array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + array.prototype.flat@1.3.3: + resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} engines: {node: '>= 0.4'} array.prototype.flatmap@1.3.3: resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} engines: {node: '>= 0.4'} - array.prototype.reduce@1.0.7: - resolution: {integrity: sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==} + array.prototype.reduce@1.0.8: + resolution: {integrity: sha512-DwuEqgXFBwbmZSRqt3BpQigWNUoqw9Ml2dTWdF3B2zQlQX4OeUE0zyuzX0fX0IbTvjdkZbcBTU3idgpO78qkTw==} engines: {node: '>= 0.4'} array.prototype.tosorted@1.1.4: resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} engines: {node: '>= 0.4'} - arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} - engines: {node: '>= 0.4'} - arraybuffer.prototype.slice@1.0.4: resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} @@ -1868,6 +1619,10 @@ packages: resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} engines: {node: '>=4'} + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -1878,8 +1633,8 @@ packages: aws-sign2@0.7.0: resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} - aws4@1.12.0: - resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} + aws4@1.13.2: + resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==} axe-core@4.10.3: resolution: {integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==} @@ -1896,18 +1651,18 @@ packages: resolution: {integrity: sha512-C5OzENSx/A+gt7t4VH1I2XsflxyPUmXRFPKBxt33xncdOmq7oROVM3bZv9Ysjjkv8OJYDMa+tKuKMvqU/H3xdw==} engines: {node: '>=12'} - babel-plugin-polyfill-corejs2@0.4.10: - resolution: {integrity: sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ==} + babel-plugin-polyfill-corejs2@0.4.14: + resolution: {integrity: sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-polyfill-corejs3@0.11.1: - resolution: {integrity: sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==} + babel-plugin-polyfill-corejs3@0.13.0: + resolution: {integrity: sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-polyfill-regenerator@0.6.1: - resolution: {integrity: sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g==} + babel-plugin-polyfill-regenerator@0.6.5: + resolution: {integrity: sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -1925,8 +1680,8 @@ packages: before-after-hook@4.0.0: resolution: {integrity: sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==} - binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} bluebird@2.11.0: @@ -1935,18 +1690,14 @@ packages: bluebird@3.7.2: resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} - boolean@3.2.0: - resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - bottleneck@2.19.5: resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==} - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} @@ -1959,8 +1710,8 @@ packages: browser-stdout@1.3.1: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} - browserslist@4.25.0: - resolution: {integrity: sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==} + browserslist@4.25.2: + resolution: {integrity: sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -1993,10 +1744,6 @@ packages: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} - call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} - call-bind@1.0.8: resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} engines: {node: '>= 0.4'} @@ -2021,15 +1768,15 @@ packages: resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} engines: {node: '>=16'} - caniuse-lite@1.0.30001720: - resolution: {integrity: sha512-Ec/2yV2nNPwb4DnTANEV99ZWwm3ZWfdlfkQbWSDDt+PsXEVYwlhPH8tdMaPunYTKKmz7AnHi2oNEi1GcmKCD8g==} + caniuse-lite@1.0.30001735: + resolution: {integrity: sha512-EV/laoX7Wq2J9TQlyIXRxTJqIw4sxfXS4OYgudGxBYRuTv0q7AM6yMEpU/Vo1I94thg9U6EZ2NfZx9GJq83u7w==} caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} - chai@5.2.0: - resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} - engines: {node: '>=12'} + chai@5.2.1: + resolution: {integrity: sha512-5nFxhUrX0PqtyogoYOA8IPswy5sZFTOsBFl/9bNsmDLgsxYTzSZQJDPppDnZPTQbzSEm0hqGjWPzRemQCYbD6A==} + engines: {node: '>=18'} chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} @@ -2039,8 +1786,8 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chalk@5.4.1: - resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + chalk@5.5.0: + resolution: {integrity: sha512-1tm8DTaJhPBG3bIkVeZt1iZM9GfSX2lzOeDVZH9R9ffRHpmHvxZ/QhgQH/aDTkswQVt+YHdXAdS/In/30OjCbg==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} char-regex@1.0.2: @@ -2063,8 +1810,8 @@ packages: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} - ci-info@4.2.0: - resolution: {integrity: sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==} + ci-info@4.3.0: + resolution: {integrity: sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==} engines: {node: '>=8'} clean-regexp@1.0.0: @@ -2158,6 +1905,9 @@ packages: config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} + constant-case@3.0.4: + resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} + contents@5.0.0: resolution: {integrity: sha512-wnnGorqo07ZSIzMQmUc4vUv1NEXl7elBtqoz5UcysV+pbSvphZYfI763rXgpFK2H9o5rvjQQ8kZxp7hOOwIe3A==} @@ -2165,8 +1915,8 @@ packages: resolution: {integrity: sha512-CLf+zr6St0wIxos4bmaKHRXWAcsCXrJU6F4VdNDrGRK3B8LDLKoX3zuMV5GhtbGkVR/LohZ6MT6im43vZLSjmA==} engines: {node: '>=18'} - conventional-changelog-writer@8.0.0: - resolution: {integrity: sha512-TQcoYGRatlAnT2qEWDON/XSfnVG38JzA7E0wcGScu7RElQBkg9WWgZd1peCWFcWDh1xfb2CfsrcvOn1bbSzztA==} + conventional-changelog-writer@8.2.0: + resolution: {integrity: sha512-Y2aW4596l9AEvFJRwFGJGiQjt2sBYTjPD18DdvxX9Vpz0Z7HQ+g1Z+6iYDAm1vR3QOJrDBkRHixHK/+FhkR6Pw==} engines: {node: '>=18'} hasBin: true @@ -2174,8 +1924,8 @@ packages: resolution: {integrity: sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q==} engines: {node: '>=18'} - conventional-commits-parser@6.0.0: - resolution: {integrity: sha512-TbsINLp48XeMXR8EvGjTnKGsZqBemisPoyWESlpRyR8lif0lcwzqz+NMtYSj1ooF/WYjSuu7wX0CtdeeMEQAmA==} + conventional-commits-parser@6.2.0: + resolution: {integrity: sha512-uLnoLeIW4XaoFtH37qEcg/SXMJmKF4vi7V0H2rnPueg+VEtFGA/asSCNTcq4M/GQ6QmlzchAEtOoDTtKqWeHag==} engines: {node: '>=18'} hasBin: true @@ -2186,11 +1936,11 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - core-js-compat@3.42.0: - resolution: {integrity: sha512-bQasjMfyDGyaeWKBIu33lHh9qlSR0MFE/Nmc6nMjf/iU9b3rSMdAYz1Baxrv4lPdGUsTqZudHA4jIGSJy0SWZQ==} + core-js-compat@3.45.0: + resolution: {integrity: sha512-gRoVMBawZg0OnxaVv3zpqLLxaHmsubEGyTnqdpI/CEBvX4JadI1dMSHxagThprYRtSVbuQxvi6iUatdPxohHpA==} - core-js@3.37.1: - resolution: {integrity: sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==} + core-js@3.45.0: + resolution: {integrity: sha512-c2KZL9lP4DjkN3hk/an4pWn5b5ZefhRJnAc42n6LJ19kSnbeRbdQZE5dSeE2LBol1OwJD3X1BQvFTAsa8ReeDA==} core-util-is@1.0.2: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} @@ -2249,26 +1999,14 @@ packages: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} - data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} - engines: {node: '>= 0.4'} - data-view-buffer@1.0.2: resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} engines: {node: '>= 0.4'} - data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} - engines: {node: '>= 0.4'} - data-view-byte-length@1.0.2: resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} engines: {node: '>= 0.4'} - data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} - engines: {node: '>= 0.4'} - data-view-byte-offset@1.0.1: resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} engines: {node: '>= 0.4'} @@ -2400,11 +2138,11 @@ packages: ecc-jsbn@0.1.2: resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} - electron-to-chromium@1.5.161: - resolution: {integrity: sha512-hwtetwfKNZo/UlwHIVBlKZVdy7o8bIZxxKs0Mv/ROPiQQQmDgdm5a+KvKtBsxM8ZjFzTaCeLoodZ8jiBE3o9rA==} + electron-to-chromium@1.5.201: + resolution: {integrity: sha512-ZG65vsrLClodGqywuigc+7m0gr4ISoTQttfVh7nfpLv0M7SIwF4WbFNEOywcqTiujs12AUeeXbFyQieDICAIxg==} - emoji-regex@10.3.0: - resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} + emoji-regex@10.4.0: + resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2422,8 +2160,8 @@ packages: resolution: {integrity: sha512-+29eJLiUixTEDRaZ35Vu8jP3gPLNcQQkQkOQjLp2X+6cZGGPDD/uasbFzvLsJKnGZnvmyZ0srxudwOtskHeIDA==} engines: {node: '>=4.0.0'} - enhanced-resolve@5.18.1: - resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} + enhanced-resolve@5.18.3: + resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} engines: {node: '>=10.13.0'} entities@1.1.2: @@ -2432,8 +2170,8 @@ packages: entities@2.2.0: resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} - env-ci@11.0.0: - resolution: {integrity: sha512-apikxMgkipkgTvMdRT9MNqWx5VLOci79F4VBd7Op/7OPjjoanjdAvn6fglMCCEf/1bAh8eOiuEVCUs4V3qP3nQ==} + env-ci@11.1.1: + resolution: {integrity: sha512-mT3ks8F0kwpo7SYNds6nWj0PaRh+qJxIeBVBXAKTN9hphAzZv7s0QAZQbqnB1fAv/r4pJUGE15BV9UrS31FP2w==} engines: {node: ^18.17 || >=20.6.1} env-editor@1.1.0: @@ -2454,10 +2192,6 @@ packages: error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - es-abstract@1.23.3: - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} - engines: {node: '>= 0.4'} - es-abstract@1.24.0: resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} engines: {node: '>= 0.4'} @@ -2465,10 +2199,6 @@ packages: es-array-method-boxes-properly@1.0.0: resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} - es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} - es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -2481,41 +2211,22 @@ packages: resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} engines: {node: '>= 0.4'} - es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} - engines: {node: '>= 0.4'} - es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} - es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} - engines: {node: '>= 0.4'} - es-set-tostringtag@2.1.0: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} - es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} - - es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + es-shim-unscopables@1.1.0: + resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} engines: {node: '>= 0.4'} es-to-primitive@1.3.0: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} - escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - - escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} - engines: {node: '>=6'} - escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -2553,29 +2264,20 @@ packages: peerDependencies: eslint: '>=6.0.0' - eslint-config-canonical@44.9.5: - resolution: {integrity: sha512-XYgjYUVTaVXFVBaUicESNch7SSu1IwL41ICmF4HB2CHafl5rjjjnavnwf/v8KEUJ2xII0sHw1Gh19E4hZTNgxw==} + eslint-config-canonical@44.9.9: + resolution: {integrity: sha512-pAva0j7rE2D7x4JA/vWqrETvg2mkt99fN1LcRpZSyrDg7CdzLy4d80ShvOsm9KSj/Ouv1XDJ/H10vun0EPON8g==} engines: {node: '>=16.0.0'} peerDependencies: eslint: ^9 - eslint-config-prettier@10.1.5: - resolution: {integrity: sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==} + eslint-config-prettier@10.1.8: + resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} hasBin: true peerDependencies: eslint: '>=7.0.0' - eslint-import-context@0.1.6: - resolution: {integrity: sha512-/e2ZNPDLCrU8niIy0pddcvXuoO2YrKjf3NAIX+60mHJBT4yv7mqCqvVdyCW2E720e25e4S/1OSVef4U6efGLFg==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - peerDependencies: - unrs-resolver: ^1.0.0 - peerDependenciesMeta: - unrs-resolver: - optional: true - - eslint-import-context@0.1.8: - resolution: {integrity: sha512-bq+F7nyc65sKpZGT09dY0S0QrOnQtuDVIfyTGQ8uuvtMIF7oHp6CEP3mouN0rrnYF3Jqo6Ke0BfU/5wASZue1w==} + eslint-import-context@0.1.9: + resolution: {integrity: sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} peerDependencies: unrs-resolver: ^1.0.0 @@ -2599,8 +2301,8 @@ packages: eslint-plugin-import-x: optional: true - eslint-import-resolver-typescript@4.4.2: - resolution: {integrity: sha512-GdSOy0PwLYpQCrmnEQujvA+X0NKrdnVCICEbZq1zlmjjD12NHOHCN9MYyrGFR9ydCs4wJwHEV9tts44ajSlGeA==} + eslint-import-resolver-typescript@4.4.4: + resolution: {integrity: sha512-1iM2zeBvrYmUNTj2vSC/90JTHDth+dfOfiNKkxApWRsTJYNrc8rOdxxIf5vazX+BiAXTeOT0UvWpGI/7qIWQOw==} engines: {node: ^16.17.0 || >=18.6.0} peerDependencies: eslint: '*' @@ -2623,8 +2325,8 @@ packages: '@eslint/json': optional: true - eslint-module-utils@2.12.0: - resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} + eslint-module-utils@2.12.1: + resolution: {integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -2644,8 +2346,8 @@ packages: eslint-import-resolver-webpack: optional: true - eslint-plugin-ava@15.0.1: - resolution: {integrity: sha512-eRX7mLFPvalGDWztJ4zm+anez2X6J/88r9CqLFfPAIMvFlGyJ+dUoFppoohgUQZLV09mIBNz5guP07zFJOLF8g==} + eslint-plugin-ava@15.1.0: + resolution: {integrity: sha512-+6Zxk1uYW3mf7lxCLWIQsFYgn3hfuCMbsKc0MtqfloOz1F6fiV5/PaWEaLgkL1egrSQmnyR7vOFP1wSPJbVUbw==} engines: {node: ^18.18 || >=20} peerDependencies: eslint: '>=9' @@ -2672,8 +2374,8 @@ packages: peerDependencies: eslint: '>=3' - eslint-plugin-functional@9.0.1: - resolution: {integrity: sha512-FR9b/LH2ODuGURSjGlAiEn5LkK+Bumwo0mZHmcSB3SDXCmzQfhcnLCTXL69p/jElWEASSRe4rmarfhHLhAnbXw==} + eslint-plugin-functional@9.0.2: + resolution: {integrity: sha512-N8kP9HX1CJ2HrufPHLzsKNJ81O1IB25jw2mxOc1H1z3CamEu8MYTn9dOo/FPfQwsqHZVuf7wyDCBcL8r8H7N0w==} engines: {node: '>=v18.18.0'} peerDependencies: eslint: ^9.0.0 @@ -2682,8 +2384,8 @@ packages: typescript: optional: true - eslint-plugin-import-x@4.15.1: - resolution: {integrity: sha512-JfVpNg1qMkPD66iaSgmMoSYeUCGS8UFSm3GwHV0IbuV3Knar/SyK5qqCct9+AxoMIzaM+KSO7KK5pOeOkC/3GQ==} + eslint-plugin-import-x@4.16.1: + resolution: {integrity: sha512-vPZZsiOKaBAIATpFE2uMI4w5IRwdv/FpQ+qZZMR4E+PeOcM4OeoEbqxRMnywdxP19TyB/3h6QBB0EWon7letSQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/utils': ^8.0.0 @@ -2695,8 +2397,8 @@ packages: eslint-import-resolver-node: optional: true - eslint-plugin-jest@28.12.0: - resolution: {integrity: sha512-J6zmDp8WiQ9tyvYXE+3RFy7/+l4hraWLzmsabYXyehkmmDd36qV4VQFc7XzcsD8C1PTNt646MSx25bO1mdd9Yw==} + eslint-plugin-jest@28.14.0: + resolution: {integrity: sha512-P9s/qXSMTpRTerE2FQ0qJet2gKbcGyFTPAJipoKxmWqR6uuFqIqk8FuEfg5yBieOezVrEfAMZrEwJ6yEp+1MFQ==} engines: {node: ^16.10.0 || ^18.12.0 || >=20.0.0} peerDependencies: '@typescript-eslint/eslint-plugin': ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -2708,8 +2410,8 @@ packages: jest: optional: true - eslint-plugin-jsdoc@50.6.17: - resolution: {integrity: sha512-hq+VQylhd12l8qjexyriDsejZhqiP33WgMTy2AmaGZ9+MrMWVqPECsM87GPxgHfQn0zw+YTuhqjUfk1f+q67aQ==} + eslint-plugin-jsdoc@50.8.0: + resolution: {integrity: sha512-UyGb5755LMFWPrZTEqqvTJ3urLz1iqj+bYOHFNag+sw3NvaMWP9K2z+uIn37XfNALmQLQyrBlJ5mkiVPL7ADEg==} engines: {node: '>=18'} peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 @@ -2742,20 +2444,20 @@ packages: resolution: {integrity: sha512-69NpBr68U6pmXL+y+KHl/64PwRarceC3/sCNUVxRbe0gPI32SIw8AtdpkqNiJYCa2yMd4lRrkrnU09Yio7KVzA==} engines: {node: '>=0.10.0'} - eslint-plugin-n@17.18.0: - resolution: {integrity: sha512-hvZ/HusueqTJ7VDLoCpjN0hx4N4+jHIWTXD4TMLHy9F23XkDagR9v+xQWRWR57yY55GPF8NnD4ox9iGTxirY8A==} + eslint-plugin-n@17.21.3: + resolution: {integrity: sha512-MtxYjDZhMQgsWRm/4xYLL0i2EhusWT7itDxlJ80l1NND2AL2Vi5Mvneqv/ikG9+zpran0VsVRXTEHrpLmUZRNw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=8.23.0' - eslint-plugin-perfectionist@4.13.0: - resolution: {integrity: sha512-dsPwXwV7IrG26PJ+h1crQ1f5kxay/gQAU0NJnbVTQc91l5Mz9kPjyIZ7fXgie+QSgi8a+0TwGbfaJx+GIhzuoQ==} + eslint-plugin-perfectionist@4.15.0: + resolution: {integrity: sha512-pC7PgoXyDnEXe14xvRUhBII8A3zRgggKqJFx2a82fjrItDs1BSI7zdZnQtM2yQvcyod6/ujmzb7ejKPx8lZTnw==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: eslint: '>=8.45.0' - eslint-plugin-prettier@5.4.1: - resolution: {integrity: sha512-9dF+KuU/Ilkq27A8idRP7N2DH8iUR6qXcjF3FR2wETY21PZdBrIjwCau8oboyGj9b7etWmTGEeM8e7oOed6ZWg==} + eslint-plugin-prettier@5.5.4: + resolution: {integrity: sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: '@types/eslint': '>=8.0.0' @@ -2786,8 +2488,8 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - eslint-plugin-regexp@2.7.0: - resolution: {integrity: sha512-U8oZI77SBtH8U3ulZ05iu0qEzIizyEDXd+BWHvyVxTOjGwcDcvy/kEpgFG4DYca2ByRLiVPFZ2GeH7j1pdvZTA==} + eslint-plugin-regexp@2.10.0: + resolution: {integrity: sha512-ovzQT8ESVn5oOe5a7gIDPD5v9bCSjIFJu57sVPDqgPRXicQzOnYfFN21WoQBQF18vrhT5o7UMKFwJQVVjyJ0ng==} engines: {node: ^18 || >=20} peerDependencies: eslint: '>=8.44.0' @@ -2836,26 +2538,18 @@ packages: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-visitor-keys@4.0.0: - resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint-visitor-keys@4.2.0: - resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint-visitor-keys@4.2.1: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@8.56.0: - resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} + eslint@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true - eslint@9.29.0: - resolution: {integrity: sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==} + eslint@9.33.0: + resolution: {integrity: sha512-TS9bTNIryDzStCpJN93aC5VRSW3uTx9sClUn4B87pwiCaJh220otoI0X8mJKr+VcPtniMdN8GKjlwgWGUv5ZKA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -2907,14 +2601,6 @@ packages: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} - execa@9.1.0: - resolution: {integrity: sha512-lSgHc4Elo2m6bUDhc3Hl/VxvUDJdQWI40RZ4KMY9bKRc+hgMOT7II/JjbNDhI8VnMtrCb7U/fhpJIkLORZozWw==} - engines: {node: '>=18'} - - execa@9.3.0: - resolution: {integrity: sha512-l6JFbqnHEadBoVAVpN5dl2yCyfX28WoBAGaoQcNmLLSedOxTxcn2Qa83s8I/PA5i56vWru2OHOtrwF7Om2vqlg==} - engines: {node: ^18.19.0 || >=20.5.0} - execa@9.6.0: resolution: {integrity: sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==} engines: {node: ^18.19.0 || >=20.5.0} @@ -2942,8 +2628,8 @@ packages: resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} engines: {node: '>=8.6.0'} - fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} fast-json-stable-stringify@2.1.0: @@ -2952,15 +2638,16 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-printf@1.6.9: - resolution: {integrity: sha512-FChq8hbz65WMj4rstcQsFB0O7Cy++nmbNfLYnD9cYv2cRn8EG6k/MGn9kO/tjO66t09DLDugj3yL+V2o6Qftrg==} + fast-printf@1.6.10: + resolution: {integrity: sha512-GwTgG9O4FVIdShhbVF3JxOgSBY2+ePGsu2V/UONgoCPzF9VY6ZdBMKsHKCYQHZwNk3qNouUolRDsgVxcVA5G1w==} engines: {node: '>=10.0'} - fastq@1.16.0: - resolution: {integrity: sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==} + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} - fdir@6.4.5: - resolution: {integrity: sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==} + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -2987,8 +2674,8 @@ packages: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} - filesize@10.1.4: - resolution: {integrity: sha512-ryBwPIIeErmxgPnm6cbESAzXjuEFubs+yKYLBZvg3CaiNcmkJChoOGcBSrZ6IwkMwPABwPpVXE6IlNdGJJrvEg==} + filesize@10.1.6: + resolution: {integrity: sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w==} engines: {node: '>= 10.4.0'} fill-range@7.1.1: @@ -2999,8 +2686,8 @@ packages: resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} engines: {node: '>=6'} - find-up-simple@1.0.0: - resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==} + find-up-simple@1.0.1: + resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} engines: {node: '>=18'} find-up@2.1.0: @@ -3035,20 +2722,13 @@ packages: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true - flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} - - for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} for-each@0.3.5: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} engines: {node: '>= 0.4'} - foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} - engines: {node: '>=14'} - foreground-child@3.3.1: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} @@ -3067,8 +2747,8 @@ packages: from2@2.3.0: resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==} - fs-extra@11.2.0: - resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + fs-extra@11.3.1: + resolution: {integrity: sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==} engines: {node: '>=14.14'} fs-minipass@2.1.0: @@ -3097,14 +2777,10 @@ packages: resolution: {integrity: sha512-0NVVC0TaP7dSTvn1yMiy6d6Q8gifzbvQafO46RtLG/kHJUBNd+pVRGOBoK44wNBvtSPUJRfdVvkFdD3p0xvyZg==} engines: {node: '>=14.16'} - function-timeout@1.0.1: - resolution: {integrity: sha512-6yPMImFFuaMPNaTMTBuolA8EanHJWF5Vju0NHpObRURT105J6x1Mf2a7J4P7Sqk2xDxv24N5L0RatEhTBhNmdA==} + function-timeout@1.0.2: + resolution: {integrity: sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA==} engines: {node: '>=18'} - function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} - function.prototype.name@1.1.8: resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} engines: {node: '>= 0.4'} @@ -3120,17 +2796,10 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-east-asian-width@1.2.0: - resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} + get-east-asian-width@1.3.0: + resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} engines: {node: '>=18'} - get-func-name@2.0.2: - resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - - get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} - get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -3163,10 +2832,6 @@ packages: resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} engines: {node: '>=18'} - get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} - engines: {node: '>= 0.4'} - get-symbol-description@1.1.0: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} @@ -3181,8 +2846,8 @@ packages: getpass@0.1.7: resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} - git-log-parser@1.2.0: - resolution: {integrity: sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA==} + git-log-parser@1.2.1: + resolution: {integrity: sha512-PI+sPDvHXNPl5WNOErAK05s3j0lgwUzMN6o8cyQrDaKfT3qd7TmNJKeXX+SknI5I0QhG5fVPAEwSY4tRGDtYoQ==} gitdown@4.1.1: resolution: {integrity: sha512-46RxNJDW9Gao+FZot2xFazGoQ/heGt0eXRn+ww2Lh+aFBlsRIq1ln8rGwbFeEJbF9Ozus+Ox0ibCzyKW/z6Olg==} @@ -3213,10 +2878,6 @@ packages: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported - globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - globals@13.24.0: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} @@ -3229,14 +2890,10 @@ packages: resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} engines: {node: '>=18'} - globals@16.2.0: - resolution: {integrity: sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==} + globals@16.3.0: + resolution: {integrity: sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==} engines: {node: '>=18'} - globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} - engines: {node: '>= 0.4'} - globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} @@ -3245,12 +2902,12 @@ packages: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} - globby@14.0.0: - resolution: {integrity: sha512-/1WM/LNHRAOH9lZta77uGbq0dAEQM+XjNesWwhlERDVenqothRbnzTrL3/LrIoEPPjeUHC3vrS6TwoyxeHs7MQ==} + globby@14.1.0: + resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} engines: {node: '>=18'} - gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + globrex@0.1.2: + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} @@ -3281,8 +2938,8 @@ packages: peerDependencies: graphql: '*' - graphql-ws@6.0.5: - resolution: {integrity: sha512-HzYw057ch0hx2gZjkbgk1pur4kAtgljlWRP+Gccudqm3BRrTpExjWCQ9OHdIsq47Y6lHL++1lTvuQHhgRRcevw==} + graphql-ws@6.0.6: + resolution: {integrity: sha512-zgfER9s+ftkGKUZgc0xbx8T7/HMO4AV5/YuYiFc+AtgcO5T0v8AxYYNQ+ltzuzDZgNkYJaFspm5MMYLjQzrkmw==} engines: {node: '>=20'} peerDependencies: '@fastify/websocket': ^10 || ^11 @@ -3318,8 +2975,9 @@ packages: engines: {node: '>=6'} deprecated: this library is no longer supported - has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} @@ -3332,18 +2990,10 @@ packages: has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} - has-proto@1.2.0: resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} engines: {node: '>= 0.4'} - has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} @@ -3371,12 +3021,12 @@ packages: resolution: {integrity: sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hosted-git-info@7.0.1: - resolution: {integrity: sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==} + hosted-git-info@7.0.2: + resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} engines: {node: ^16.14.0 || >=18.0.0} - hosted-git-info@8.0.0: - resolution: {integrity: sha512-4nw3vOVR+vHUOT8+U4giwe2tcGv+R3pwwRidUe67DoMBTjhrfr6rZYJVVwdkBE+Um050SG+X9tf0Jo4fOpn01w==} + hosted-git-info@8.1.0: + resolution: {integrity: sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==} engines: {node: ^18.17.0 || >=20.5.0} html-escaper@2.0.2: @@ -3388,10 +3038,6 @@ packages: http-cache-semantics@4.2.0: resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} - http-proxy-agent@7.0.0: - resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==} - engines: {node: '>= 14'} - http-proxy-agent@7.0.2: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} @@ -3400,10 +3046,6 @@ packages: resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} engines: {node: '>=0.8', npm: '>=1.3.7'} - https-proxy-agent@7.0.2: - resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} - engines: {node: '>= 14'} - https-proxy-agent@7.0.6: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} @@ -3412,10 +3054,6 @@ packages: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} - human-signals@7.0.0: - resolution: {integrity: sha512-74kytxOUSvNbjrT9KisAbaTZ/eJwD/LrbM/kh5j0IhPuJzwuA19dWvniFGwBzN9rVjg+O/e+F310PjObDXS+9Q==} - engines: {node: '>=18.18.0'} - human-signals@8.0.1: resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} engines: {node: '>=18.18.0'} @@ -3429,32 +3067,24 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} - ignore@5.3.1: - resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} - engines: {node: '>= 4'} - ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - ignore@7.0.4: - resolution: {integrity: sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==} + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} engines: {node: '>= 4'} - import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} - import-from-esm@1.3.3: - resolution: {integrity: sha512-U3Qt/CyfFpTUv6LOP2jRTLYjphH6zg3okMfHbyqRa/W2w6hr8OsJWVggNlR4jxuojQy81TgTJTxgSkyoteRGMQ==} - engines: {node: '>=16.20'} - import-from-esm@2.0.0: resolution: {integrity: sha512-YVt14UZCgsX1vZQ3gKjkWVdBdHQ6eu3MPU1TBgL1H5orXe2+jWD006WCPPtOuwlQm10NuzOW5WawiF1Q9veW8g==} engines: {node: '>=18.20'} - import-meta-resolve@4.0.0: - resolution: {integrity: sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==} + import-meta-resolve@4.1.0: + resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} import-modules@2.1.0: resolution: {integrity: sha512-8HEWcnkbGpovH9yInoisxaSoIg9Brbul+Ju3Kqe2UsYDUBJD/iQjSgEj0zPcTDPKfPp2fs5xlv1i+JSye/m1/A==} @@ -3472,8 +3102,8 @@ packages: resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} engines: {node: '>=12'} - index-to-position@0.1.2: - resolution: {integrity: sha512-MWDKS3AS1bGCHLBA2VLImJz42f7bJh8wQsTGCzI3j519/CASStoDONUBVz2I/VID0MpiX3SGSnbOD2xUalbE5g==} + index-to-position@1.1.0: + resolution: {integrity: sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==} engines: {node: '>=18'} inflight@1.0.6: @@ -3490,10 +3120,6 @@ packages: resolution: {integrity: sha512-+y6WywKZREw5rq7U2jvr2nmZpT7cbWbQQ0N/qfcseYnzHFz2cZz1Et52oY+XttYuYeTkI8Y+R2JNWj68MpQFSg==} hasBin: true - internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} - engines: {node: '>= 0.4'} - internal-slot@1.1.0: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} @@ -3502,18 +3128,14 @@ packages: resolution: {integrity: sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw==} engines: {node: '>=12'} - ip-address@9.0.5: - resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + ip-address@10.0.1: + resolution: {integrity: sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==} engines: {node: '>= 12'} ip-regex@4.3.0: resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==} engines: {node: '>=8'} - is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} - engines: {node: '>= 0.4'} - is-array-buffer@3.0.5: resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} engines: {node: '>= 0.4'} @@ -3521,13 +3143,10 @@ packages: is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} engines: {node: '>= 0.4'} - is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - is-bigint@1.1.0: resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} engines: {node: '>= 0.4'} @@ -3536,10 +3155,6 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} - is-boolean-object@1.2.2: resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} engines: {node: '>= 0.4'} @@ -3555,25 +3170,14 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} - is-core-module@2.16.1: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} - is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} - engines: {node: '>= 0.4'} - is-data-view@1.0.2: resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} engines: {node: '>= 0.4'} - is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} - is-date-object@1.1.0: resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} engines: {node: '>= 0.4'} @@ -3603,8 +3207,8 @@ packages: resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} engines: {node: '>=18'} - is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + is-generator-function@1.1.0: + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} engines: {node: '>= 0.4'} is-get-set-prop@1.0.0: @@ -3639,10 +3243,6 @@ packages: resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} - is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} - is-number-object@1.1.1: resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} engines: {node: '>= 0.4'} @@ -3677,10 +3277,6 @@ packages: is-proto-prop@2.0.0: resolution: {integrity: sha512-jl3NbQ/fGLv5Jhan4uX+Ge9ohnemqyblWVVCpAvtTQzNFvV2xhJq+esnkIbYQ9F1nITXoLfDDQLp7LBw/zzncg==} - is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - is-regex@1.2.1: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} @@ -3693,10 +3289,6 @@ packages: resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} engines: {node: '>= 0.4'} - is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} - engines: {node: '>= 0.4'} - is-shared-array-buffer@1.0.4: resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} engines: {node: '>= 0.4'} @@ -3709,26 +3301,14 @@ packages: resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} engines: {node: '>=18'} - is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} - is-string@1.1.1: resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} engines: {node: '>= 0.4'} - is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - is-symbol@1.1.1: resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} engines: {node: '>= 0.4'} - is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} - engines: {node: '>= 0.4'} - is-typed-array@1.1.15: resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} @@ -3740,17 +3320,14 @@ packages: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} - is-unicode-supported@2.0.0: - resolution: {integrity: sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==} + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} engines: {node: '>=18'} is-weakmap@2.0.2: resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} engines: {node: '>= 0.4'} - is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - is-weakref@1.1.1: resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} engines: {node: '>= 0.4'} @@ -3788,8 +3365,8 @@ packages: isstream@0.1.2: resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} - issue-parser@7.0.0: - resolution: {integrity: sha512-jgAw78HO3gs9UrKqJNQvfDj9Ouy8Mhu40fbEJ8yXff4MW8+/Fcn9iFjyWUQ6SKbX8ipPk3X5A3AyfYHRu6uVLw==} + issue-parser@7.0.1: + resolution: {integrity: sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg==} engines: {node: ^18.17 || >=20.6.1} istanbul-lib-coverage@3.2.2: @@ -3804,17 +3381,16 @@ packages: resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} - istanbul-reports@3.1.6: - resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} engines: {node: '>=8'} iterator.prototype@1.1.5: resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} engines: {node: '>= 0.4'} - jackspeak@3.1.2: - resolution: {integrity: sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==} - engines: {node: '>=14'} + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} jackspeak@4.1.1: resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==} @@ -3824,8 +3400,8 @@ packages: resolution: {integrity: sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==} engines: {node: '>= 0.6.0'} - jiti@2.4.2: - resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + jiti@2.5.1: + resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==} hasBin: true js-tokens@4.0.0: @@ -3846,9 +3422,6 @@ packages: jsbn@0.1.1: resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} - jsbn@1.1.0: - resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - jsdoc-type-pratt-parser@4.0.0: resolution: {integrity: sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==} engines: {node: '>=12.0.0'} @@ -3857,13 +3430,13 @@ packages: resolution: {integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==} engines: {node: '>=12.0.0'} + jsdoc-type-pratt-parser@4.8.0: + resolution: {integrity: sha512-iZ8Bdb84lWRuGHamRXFyML07r21pcwBrLkHEuHgEY5UbCouBwv7ECknDRKzsQIXMiqpPymqtIf8TC/shYKB5rw==} + engines: {node: '>=12.0.0'} + jsdom@6.5.1: resolution: {integrity: sha512-KeCN3yqR+MmjAZDnVZgIaL2tP9BxSFlsYZw9Z+zy64+jJzHc1m8ruccb83Qe8AG0xKUjpo2kxEGFCMtiF4MmAg==} - jsesc@0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true - jsesc@3.0.2: resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} engines: {node: '>=6'} @@ -3904,8 +3477,8 @@ packages: resolution: {integrity: sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonfile@6.2.0: + resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} jsprim@1.4.2: resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} @@ -3922,8 +3495,8 @@ packages: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} - language-subtag-registry@0.3.22: - resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} + language-subtag-registry@0.3.23: + resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} language-tags@1.0.9: resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} @@ -3948,8 +3521,8 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - lint-staged@16.1.2: - resolution: {integrity: sha512-sQKw2Si2g9KUZNY3XNvRuDq4UJqpHwF0/FQzZR2M7I5MvtpWvibikCjUVJzZdGE0ByurEl3KQNvsGetd1ty1/Q==} + lint-staged@16.1.5: + resolution: {integrity: sha512-uAeQQwByI6dfV7wpt/gVqg+jAPaSp8WwOA8kKC/dv1qw14oGpnpAisY65ibGHUGDUv0rYaZ8CAJZ/1U8hUvC2A==} engines: {node: '>=20.17'} hasBin: true @@ -3957,6 +3530,10 @@ packages: resolution: {integrity: sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==} engines: {node: '>=18.0.0'} + listr2@9.0.1: + resolution: {integrity: sha512-SL0JY3DaxylDuo/MecFeiC+7pedM0zia33zl0vcjgwcq1q1FWWF1To9EIauPbl8GbMCU0R2e0uJ8bZunhYKD2g==} + engines: {node: '>=20.0.0'} + load-json-file@4.0.0: resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} engines: {node: '>=4'} @@ -4008,6 +3585,9 @@ packages: lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + lodash.uniqby@4.7.0: resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==} @@ -4029,8 +3609,11 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - loupe@3.1.1: - resolution: {integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==} + loupe@3.2.0: + resolution: {integrity: sha512-2NCfZcT5VGVNX9mSZIxLRkEAegDGBpuQZBy13desuHeVORmBDyAET4TkJr4SjqQy3A8JDofMN6LpkK8Xcm/dlw==} + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} lowercase-keys@1.0.1: resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} @@ -4067,8 +3650,8 @@ packages: peerDependencies: marked: '>=1 <16' - marked@13.0.2: - resolution: {integrity: sha512-J6CPjP8pS5sgrRqxVRvkCIkZ6MFdRIjDkwUwgJ9nL2fbmM6qGQeB2C16hi8Cc9BOzj6xXzy0jyi0iPIfnMHYzA==} + marked@13.0.3: + resolution: {integrity: sha512-rqRix3/TWzE9rIoFGIn8JmsVfhiuC8VIQ8IdX5TfzmeBucdY05/0UlzKaw0eVtpcN/OdVFpBk7CjKGo9iHJ/zA==} engines: {node: '>= 18'} hasBin: true @@ -4092,8 +3675,8 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - meros@1.3.0: - resolution: {integrity: sha512-2BNGOimxEz5hmjUG2FwoxCt5HN7BXdaWyFqEwxPTrJzVdABtrL4TiHTcsWSFAxPQ/tOnEaQEJh3qWq71QRMY+w==} + meros@1.3.1: + resolution: {integrity: sha512-eV7dRObfTrckdmAz4/n7pT1njIsIJXRIZkgCiX43xEsPNy4gjXQzOYYxmGcolAMtF7HyfqRuDBh3Lgs4hmhVEw==} engines: {node: '>=13'} peerDependencies: '@types/node': '>=13' @@ -4116,8 +3699,8 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} - mime@4.0.1: - resolution: {integrity: sha512-5lZ5tyrIfliMXzFtkYyekWbtRXObT9OWa8IwQ5uxTBDHucNNwniRqo0yInflj+iYi5CBa6qxadGzGarDfuEOxA==} + mime@4.0.7: + resolution: {integrity: sha512-2OfDPL+e03E0LrXaGYOtTFIYhiuzep94NSsuhrNULq+stylcJedcHdzHtz0atMUuGwJfFYs0YL5xeC/Ca2x0eQ==} engines: {node: '>=16'} hasBin: true @@ -4195,8 +3778,8 @@ packages: engines: {node: '>=10'} hasBin: true - mocha@11.7.0: - resolution: {integrity: sha512-bXfLy/mI8n4QICg+pWj1G8VduX5vC0SHRwFpiR5/Fxc8S2G906pSfkyMmHVsdJNQJQNh3LE67koad9GzEvkV6g==} + mocha@11.7.1: + resolution: {integrity: sha512-5EK+Cty6KheMS/YLPPMJC64g5V61gIR25KsRItHw6x4hEKT6Njp1n9LOlH4gpevuwMVS66SXaBBpg+RWZkza4A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true @@ -4209,15 +3792,15 @@ packages: mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nan@2.22.2: - resolution: {integrity: sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==} + nan@2.23.0: + resolution: {integrity: sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ==} nano-spawn@1.0.2: resolution: {integrity: sha512-21t+ozMQDAL/UGgQVBbZ/xXvNO10++ZPuTmKRO8k9V3AClVRht49ahtDjfY8l1q6nSHOrE5ASfthzH3ol6R/hg==} engines: {node: '>=20.17'} - napi-postinstall@0.2.4: - resolution: {integrity: sha512-ZEzHJwBhZ8qQSbknHqYcdtQVr8zUgGyM/q6h6qAyhtyVMNrSgDhrC4disf03dYW0e+czXyLnZINnCTEkWy0eJg==} + napi-postinstall@0.3.3: + resolution: {integrity: sha512-uTp172LLXSxuSYHv/kou+f6KW3SMppU9ivthaVTXian9sOt3XM/zHYHpRZiLgQoxeWfYUnslNWQHF1+G71xcow==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} hasBin: true @@ -4238,6 +3821,9 @@ packages: nerf-dart@1.0.0: resolution: {integrity: sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==} + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} @@ -4267,8 +3853,8 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} hasBin: true - normalize-package-data@6.0.0: - resolution: {integrity: sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==} + normalize-package-data@6.0.2: + resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} engines: {node: ^16.14.0 || >=18.0.0} normalize-path@2.1.1: @@ -4279,20 +3865,20 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - normalize-url@8.0.0: - resolution: {integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==} + normalize-url@8.0.2: + resolution: {integrity: sha512-Ee/R3SyN4BuynXcnTaekmaVdbDAEiNrHqjQIA37mHU8G9pf7aaAD4ZX3XjBLo6rsdcxA/gtkcNYZLt30ACgynw==} engines: {node: '>=14.16'} - npm-run-path@5.2.0: - resolution: {integrity: sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==} + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} npm-run-path@6.0.0: resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} engines: {node: '>=18'} - npm@10.5.1: - resolution: {integrity: sha512-RozZuGuWbbhDM2sRhOSLIRb3DLyof6TREi0TW5b3xUEBropDhDqEHv0iAjA1zsIwXKgfIkR8GvQMd4oeKKg9eQ==} + npm@10.9.3: + resolution: {integrity: sha512-6Eh1u5Q+kIVXeA8e7l2c/HpnFFcwrkt37xDMujD5be1gloWa9p6j3Fsv3mByXXmqJHy+2cElRMML8opNT7xIJQ==} engines: {node: ^18.17.0 || >=20.5.0} hasBin: true bundledDependencies: @@ -4312,8 +3898,6 @@ packages: - chalk - ci-info - cli-columns - - cli-table3 - - columnify - fastest-levenshtein - fs-minipass - glob @@ -4349,7 +3933,6 @@ packages: - npm-profile - npm-registry-fetch - npm-user-validate - - npmlog - p-map - pacote - parse-conflict-json @@ -4382,9 +3965,6 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} - object-inspect@1.13.4: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} @@ -4393,10 +3973,6 @@ packages: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} - object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} - object.assign@4.1.7: resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} engines: {node: '>= 0.4'} @@ -4413,10 +3989,6 @@ packages: resolution: {integrity: sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==} engines: {node: '>= 0.8'} - object.values@1.2.0: - resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} - engines: {node: '>= 0.4'} - object.values@1.2.1: resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} @@ -4436,16 +4008,16 @@ packages: resolution: {integrity: sha512-KkNqM6FdoegD6WhY2YXmWcovOux45NV+zBped2+G3+V74zkDPkIl4cqh6hte2zNDojtwO2nBOV8U+sgziWfPrg==} engines: {node: '>=18'} - open@10.1.0: - resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} + open@10.2.0: + resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} engines: {node: '>=18'} optionator@0.8.3: resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} engines: {node: '>= 0.8.0'} - optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} own-keys@1.0.1: @@ -4496,8 +4068,8 @@ packages: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} - p-map@7.0.1: - resolution: {integrity: sha512-2wnaR0XL/FDOj+TgpDuRb2KTjLnu3Fma6b1ZUwGY7LcqenMcvP/YFpjpbPKY6WVGsbuJZRuoUz8iPrt8ORnAFw==} + p-map@7.0.3: + resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==} engines: {node: '>=18'} p-reduce@3.0.0: @@ -4512,8 +4084,8 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - package-json-from-dist@1.0.0: - resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} @@ -4530,8 +4102,8 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} - parse-json@8.1.0: - resolution: {integrity: sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==} + parse-json@8.3.0: + resolution: {integrity: sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==} engines: {node: '>=18'} parse-ms@4.0.0: @@ -4592,12 +4164,12 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - path-type@5.0.0: - resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} - engines: {node: '>=12'} + path-type@6.0.0: + resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} + engines: {node: '>=18'} - pathval@2.0.0: - resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + pathval@2.0.1: + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} engines: {node: '>= 14.16'} performance-now@2.1.0: @@ -4610,8 +4182,8 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - picomatch@4.0.2: - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} pidtree@0.6.0: @@ -4627,8 +4199,8 @@ packages: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} - pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + pirates@4.0.7: + resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} pkg-conf@2.1.0: @@ -4647,8 +4219,8 @@ packages: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} - possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} prelude-ls@1.1.2: @@ -4663,15 +4235,11 @@ packages: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} - prettier@3.5.3: - resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} + prettier@3.6.2: + resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} engines: {node: '>=14'} hasBin: true - pretty-ms@9.0.0: - resolution: {integrity: sha512-E9e9HJ9R9NasGOgPaPE8VMeiPKAyWR5jcFpNnwIejslIhWqdqOrb2wShBsncMPUb+BcCd2OPYfh7p2W6oemTng==} - engines: {node: '>=18'} - pretty-ms@9.2.0: resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} engines: {node: '>=18'} @@ -4697,8 +4265,8 @@ packages: resolution: {integrity: sha512-2yma2tog9VaRZY2mn3Wq51uiSW4NcPYT1cQdBagwyrznrilKSZwIZ0UG3ZPL/mx+axEns0hE35T5ufOYZXEnBQ==} engines: {node: '>=4'} - psl@1.9.0: - resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + psl@1.15.0: + resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} @@ -4768,10 +4336,6 @@ packages: resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} - regenerate-unicode-properties@10.1.1: - resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} - engines: {node: '>=4'} - regenerate-unicode-properties@10.2.0: resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} engines: {node: '>=4'} @@ -4790,24 +4354,16 @@ packages: resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} hasBin: true - regexp.prototype.flags@1.5.2: - resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} - engines: {node: '>= 0.4'} - regexp.prototype.flags@1.5.4: resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} engines: {node: '>= 0.4'} - regexpu-core@5.3.2: - resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} - engines: {node: '>=4'} - regexpu-core@6.2.0: resolution: {integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==} engines: {node: '>=4'} - registry-auth-token@5.0.2: - resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==} + registry-auth-token@5.1.0: + resolution: {integrity: sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==} engines: {node: '>=14'} regjsgen@0.8.0: @@ -4817,10 +4373,6 @@ packages: resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} hasBin: true - regjsparser@0.9.1: - resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} - hasBin: true - remove-trailing-separator@1.1.0: resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} @@ -4865,10 +4417,6 @@ packages: engines: {node: '>= 0.4'} hasBin: true - resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true - resolve@2.0.0-next.5: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} hasBin: true @@ -4881,8 +4429,8 @@ packages: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} rfdc@1.4.1: @@ -4909,10 +4457,6 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} - engines: {node: '>=0.4'} - safe-array-concat@1.1.3: resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} engines: {node: '>=0.4'} @@ -4927,16 +4471,12 @@ packages: resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} engines: {node: '>= 0.4'} - safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} - engines: {node: '>= 0.4'} - safe-regex-test@1.1.0: resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} engines: {node: '>= 0.4'} - safe-stable-stringify@2.4.3: - resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} engines: {node: '>=10'} safer-buffer@2.1.2: @@ -4946,8 +4486,8 @@ packages: resolution: {integrity: sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==} engines: {node: ^14.0.0 || >=16.0.0} - semantic-release@24.2.5: - resolution: {integrity: sha512-9xV49HNY8C0/WmPWxTlaNleiXhWb//qfMzG2c5X8/k7tuWcu8RssbuS+sujb/h7PiWSXv53mrQvV9hrO9b7vuQ==} + semantic-release@24.2.7: + resolution: {integrity: sha512-g7RssbTAbir1k/S7uSwSVZFfFXwpomUB9Oas0+xi9KStSCmeDXcA7rNhiskjLqvUe/Evhx8fVCT16OSa34eM5g==} engines: {node: '>=20.8.1'} hasBin: true @@ -5017,10 +4557,6 @@ packages: resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} engines: {node: '>= 0.4'} - side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} - engines: {node: '>= 0.4'} - side-channel@1.1.0: resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} engines: {node: '>= 0.4'} @@ -5068,8 +4604,8 @@ packages: resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} engines: {node: '>= 14'} - socks@2.8.5: - resolution: {integrity: sha512-iF+tNDQla22geJdTyJB1wM/qrX9DMRwWrciEPwWLPRWAUEM8sQiyxgckLxWT1f7+9VabJS0jTGGr4QgBuvi6Ww==} + socks@2.8.7: + resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} source-map-support@0.5.21: @@ -5079,9 +4615,9 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} + source-map@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} spawn-error-forwarder@1.0.0: resolution: {integrity: sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==} @@ -5089,8 +4625,8 @@ packages: spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} - spdx-exceptions@2.3.0: - resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} @@ -5098,8 +4634,8 @@ packages: spdx-expression-parse@4.0.0: resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} - spdx-license-ids@3.0.16: - resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} + spdx-license-ids@3.0.22: + resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==} split2@1.0.0: resolution: {integrity: sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==} @@ -5107,9 +4643,6 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - sprintf-js@1.1.3: - resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - sshpk@1.18.0: resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} engines: {node: '>=0.10.0'} @@ -5119,8 +4652,8 @@ packages: resolution: {integrity: sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - stable-hash-x@0.1.1: - resolution: {integrity: sha512-l0x1D6vhnsNUGPFVDx45eif0y6eedVC8nm5uACTrVFJFtl2mLRW17aWtVyxFCpn5t94VUPkjU8vSLwIuwwqtJQ==} + stable-hash-x@0.2.0: + resolution: {integrity: sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==} engines: {node: '>=12.0.0'} stable-hash@0.0.5: @@ -5151,8 +4684,8 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} - string-width@7.0.0: - resolution: {integrity: sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==} + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} string.prototype.includes@2.0.1: @@ -5170,13 +4703,6 @@ packages: resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} engines: {node: '>= 0.4'} - string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} - string.prototype.trimend@1.0.9: resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} engines: {node: '>= 0.4'} @@ -5258,16 +4784,12 @@ packages: resolution: {integrity: sha512-c7AfkZ9udatCuAy9RSfiGPpeOKKUAUK5e1cXadLOGUjasdxqYqAK0jTNkM/FSEyJ3a5Ra27j/tw/PS0qLmaF/A==} engines: {node: '>=18'} - synckit@0.11.8: - resolution: {integrity: sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==} + synckit@0.11.11: + resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} engines: {node: ^14.18.0 || >=16.0.0} - synckit@0.6.2: - resolution: {integrity: sha512-Vhf+bUa//YSTYKseDiiEuQmhGCoIF3CVBhunm3r/DQnYiGT4JssmnKQc44BIyOZRK2pKjXXAgbhfmbeoC9CJpA==} - engines: {node: '>=12.20'} - - tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + tapable@2.2.2: + resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==} engines: {node: '>=6'} tar@6.2.1: @@ -5318,14 +4840,10 @@ packages: resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} - tlds@1.248.0: - resolution: {integrity: sha512-noj0KdpWTBhwsKxMOXk0rN9otg4kTgLm4WohERRHbJ9IY+kSDKr3RmjitaQ3JFzny+DyvBOQKlFZhp0G0qNSfg==} + tlds@1.259.0: + resolution: {integrity: sha512-AldGGlDP0PNgwppe2quAvuBl18UcjuNtOnDuUkqhd6ipPqrYYBt3aTxK1QTsBVknk97lS2JcafWMghjGWFtunw==} hasBin: true - to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -5341,9 +4859,9 @@ packages: resolution: {integrity: sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==} engines: {node: '>= 0.4'} - ts-api-utils@1.0.3: - resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} - engines: {node: '>=16.13.0'} + ts-api-utils@1.4.3: + resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} + engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' @@ -5391,71 +4909,52 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} - type-fest@4.9.0: - resolution: {integrity: sha512-KS/6lh/ynPGiHD/LnAobrEFq3Ad4pBzOlJ1wAnJx9N4EYoqFhMfLIBjUT2UEx4wg5ZE+cC1ob6DCSpppVo+rtg==} + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} - typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} - engines: {node: '>= 0.4'} - typed-array-buffer@1.0.3: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} - typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} - engines: {node: '>= 0.4'} - typed-array-byte-length@1.0.3: resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} engines: {node: '>= 0.4'} - typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} - engines: {node: '>= 0.4'} - typed-array-byte-offset@1.0.4: resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} engines: {node: '>= 0.4'} - typed-array-length@1.0.6: - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} - engines: {node: '>= 0.4'} - typed-array-length@1.0.7: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} - typescript-eslint@8.34.1: - resolution: {integrity: sha512-XjS+b6Vg9oT1BaIUfkW3M3LvqZE++rbzAMEHuccCfO/YkP43ha6w3jTEMilQxMF92nVOYCcdjv1ZUhAa1D/0ow==} + typescript-eslint@8.39.1: + resolution: {integrity: sha512-GDUv6/NDYngUlNvwaHM1RamYftxf782IyEDbdj3SeaIHHv8fNQVRC++fITT7kUJV/5rIA/tkoRSSskt6osEfqg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - typescript@5.8.3: - resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} + typescript@5.9.2: + resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} engines: {node: '>=14.17'} hasBin: true - uglify-js@3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + uglify-js@3.19.3: + resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} engines: {node: '>=0.8.0'} hasBin: true - unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - unbox-primitive@1.1.0: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} - undici-types@7.8.0: - resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} + undici-types@7.10.0: + resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==} - unicode-canonical-property-names-ecmascript@2.0.0: - resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + unicode-canonical-property-names-ecmascript@2.0.1: + resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} engines: {node: '>=4'} unicode-emoji-modifier-base@1.0.0: @@ -5466,8 +4965,8 @@ packages: resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} engines: {node: '>=4'} - unicode-match-property-value-ecmascript@2.1.0: - resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} + unicode-match-property-value-ecmascript@2.2.0: + resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} engines: {node: '>=4'} unicode-property-aliases-ecmascript@2.1.0: @@ -5494,8 +4993,8 @@ packages: resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} engines: {node: '>=12'} - universal-user-agent@7.0.2: - resolution: {integrity: sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==} + universal-user-agent@7.0.3: + resolution: {integrity: sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==} universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} @@ -5505,11 +5004,8 @@ packages: resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==} engines: {node: '>=0.10.0'} - unrs-resolver@1.7.8: - resolution: {integrity: sha512-2zsXwyOXmCX9nGz4vhtZRYhe30V78heAv+KDc21A/KMdovGHbZcixeD5JHEF0DrFXzdytwuzYclcPbvp8A3Jlw==} - - unrs-resolver@1.9.0: - resolution: {integrity: sha512-wqaRu4UnzBD2ABTC1kLfBjAqIDZ5YUTr/MLGa7By47JV1bJDSW7jq/ZSLigB7enLe7ubNaJhtnBXgrc/50cEhg==} + unrs-resolver@1.11.1: + resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} update-browserslist-db@1.1.3: resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} @@ -5517,6 +5013,9 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + upper-case@2.0.2: + resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} + uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -5547,8 +5046,8 @@ packages: deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. hasBin: true - v8-to-istanbul@9.2.0: - resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} + v8-to-istanbul@9.3.0: + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} engines: {node: '>=10.12.0'} v8flags@3.2.0: @@ -5562,8 +5061,8 @@ packages: resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} engines: {'0': node >=0.6.0} - web-streams-polyfill@3.2.1: - resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} + web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} whatwg-mimetype@4.0.0: @@ -5573,9 +5072,6 @@ packages: whatwg-url-compat@0.6.5: resolution: {integrity: sha512-vbg5+JVNwGtHRI3GheZGWrcUlxF9BXHbA80dLa+2XqJjlV/BK6upoi2j8dIRW9FGPUUyaMm7Hf1pTexHnsk85g==} - which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - which-boxed-primitive@1.1.1: resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} engines: {node: '>= 0.4'} @@ -5591,10 +5087,6 @@ packages: which-module@2.0.1: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} - engines: {node: '>= 0.4'} - which-typed-array@1.1.19: resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} engines: {node: '>= 0.4'} @@ -5616,8 +5108,8 @@ packages: wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - workerpool@9.3.2: - resolution: {integrity: sha512-Xz4Nm9c+LiBHhDR5bDLnNzmj6+5F+cyEAWPMkbs2awq/dYazR/efelZzUAjB/y3kNHL+uzkHvxVVpaOfGCPV7A==} + workerpool@9.3.3: + resolution: {integrity: sha512-slxCaKbYjEdFT/o2rH9xS1hf4uRDch1w7Uo+apxhZ+sf/1d9e0ZVkn42kPNGP2dgjIx6YFvSevj0zHvbWe2jdw==} wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} @@ -5638,8 +5130,8 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - ws@8.18.2: - resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==} + ws@8.18.3: + resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -5650,6 +5142,10 @@ packages: utf-8-validate: optional: true + wsl-utils@0.1.0: + resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} + engines: {node: '>=18'} + xml-name-validator@2.0.1: resolution: {integrity: sha512-jRKe/iQYMyVJpzPH+3HL97Lgu5HrCfii+qSo+TfjKHtOnvbnvdVfMYrn9Q34YV81M2e5sviJlI6Ko9y+nByzvA==} @@ -5678,8 +5174,8 @@ packages: resolution: {integrity: sha512-E/+VitOorXSLiAqtTd7Yqax0/pAS3xaYMP+AUUJGOK1OZG3rhcj9fcJOM5HJ2VrP1FrStVCWr1muTfQCdj4tAA==} engines: {node: ^14.17.0 || >=16.0.0} - yaml@2.8.0: - resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==} + yaml@2.8.1: + resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} engines: {node: '>= 14.6'} hasBin: true @@ -5715,27 +5211,21 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - yoctocolors@2.0.2: - resolution: {integrity: sha512-Ct97huExsu7cWeEjmrXlofevF8CvzUglJ4iGUet5B8xn1oumtAZBpHU4GzYuoE6PVqcZ5hghtBrSlhwHuR1Jmw==} - engines: {node: '>=18'} - yoctocolors@2.1.1: resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} engines: {node: '>=18'} snapshots: - '@aashutoshrathi/word-wrap@1.2.6': {} - - '@ampproject/remapping@2.2.1': + '@ampproject/remapping@2.3.0': dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.30 - '@babel/cli@7.27.2(@babel/core@7.27.4)': + '@babel/cli@7.28.3(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 - '@jridgewell/trace-mapping': 0.3.25 + '@babel/core': 7.28.3 + '@jridgewell/trace-mapping': 0.3.30 commander: 6.2.1 convert-source-map: 2.0.0 fs-readdir-recursive: 1.1.0 @@ -5746,31 +5236,26 @@ snapshots: '@nicolo-ribaudo/chokidar-2': 2.1.8-no-fsevents.3 chokidar: 3.6.0 - '@babel/code-frame@7.24.7': - dependencies: - '@babel/highlight': 7.24.7 - picocolors: 1.1.1 - '@babel/code-frame@7.27.1': dependencies: '@babel/helper-validator-identifier': 7.27.1 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.27.3': {} + '@babel/compat-data@7.28.0': {} - '@babel/core@7.27.4': + '@babel/core@7.28.3': dependencies: - '@ampproject/remapping': 2.2.1 + '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.27.1 - '@babel/generator': 7.27.3 + '@babel/generator': 7.28.3 '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4) - '@babel/helpers': 7.27.4 - '@babel/parser': 7.27.4 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.3) + '@babel/helpers': 7.28.3 + '@babel/parser': 7.28.3 '@babel/template': 7.27.2 - '@babel/traverse': 7.27.4 - '@babel/types': 7.27.3 + '@babel/traverse': 7.28.3 + '@babel/types': 7.28.2 convert-source-map: 2.0.0 debug: 4.4.1(supports-color@8.1.1) gensync: 1.0.0-beta.2 @@ -5779,709 +5264,677 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/eslint-parser@7.27.5(@babel/core@7.27.4)(eslint@8.56.0)': + '@babel/eslint-parser@7.28.0(@babel/core@7.28.3)(eslint@8.57.1)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 8.56.0 + eslint: 8.57.1 eslint-visitor-keys: 2.1.0 semver: 6.3.1 - '@babel/eslint-parser@7.27.5(@babel/core@7.27.4)(eslint@9.29.0(jiti@2.4.2))': + '@babel/eslint-parser@7.28.0(@babel/core@7.28.3)(eslint@9.33.0(jiti@2.5.1))': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 9.29.0(jiti@2.4.2) + eslint: 9.33.0(jiti@2.5.1) eslint-visitor-keys: 2.1.0 semver: 6.3.1 - '@babel/generator@7.27.3': - dependencies: - '@babel/parser': 7.27.4 - '@babel/types': 7.27.3 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 3.0.2 - - '@babel/helper-annotate-as-pure@7.24.7': + '@babel/generator@7.28.3': dependencies: - '@babel/types': 7.25.2 + '@babel/parser': 7.28.3 + '@babel/types': 7.28.2 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.30 + jsesc: 3.1.0 '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.27.3 + '@babel/types': 7.28.2 '@babel/helper-compilation-targets@7.27.2': dependencies: - '@babel/compat-data': 7.27.3 + '@babel/compat-data': 7.28.0 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.25.0 + browserslist: 4.25.2 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.27.4)': + '@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.4) + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.3) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.28.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.25.2(@babel/core@7.27.4)': - dependencies: - '@babel/core': 7.27.4 - '@babel/helper-annotate-as-pure': 7.24.7 - regexpu-core: 5.3.2 - semver: 6.3.1 - - '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.27.4)': + '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-annotate-as-pure': 7.27.3 regexpu-core: 6.2.0 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.1(@babel/core@7.27.4)': + '@babel/helper-define-polyfill-provider@0.6.5(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 debug: 4.4.1(supports-color@8.1.1) lodash.debounce: 4.0.8 - resolve: 1.22.8 + resolve: 1.22.10 transitivePeerDependencies: - supports-color - '@babel/helper-define-polyfill-provider@0.6.4(@babel/core@7.27.4)': - dependencies: - '@babel/core': 7.27.4 - '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-plugin-utils': 7.27.1 - debug: 4.4.1(supports-color@8.1.1) - lodash.debounce: 4.0.8 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color + '@babel/helper-globals@7.28.0': {} '@babel/helper-member-expression-to-functions@7.27.1': dependencies: - '@babel/traverse': 7.27.4 - '@babel/types': 7.27.3 + '@babel/traverse': 7.28.3 + '@babel/types': 7.28.2 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.27.1': dependencies: - '@babel/traverse': 7.27.4 - '@babel/types': 7.27.3 + '@babel/traverse': 7.28.3 + '@babel/types': 7.28.2 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.27.3(@babel/core@7.27.4)': + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-module-imports': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.28.3 transitivePeerDependencies: - supports-color '@babel/helper-optimise-call-expression@7.27.1': dependencies: - '@babel/types': 7.27.3 - - '@babel/helper-plugin-utils@7.22.5': {} - - '@babel/helper-plugin-utils@7.24.7': {} + '@babel/types': 7.28.2 '@babel/helper-plugin-utils@7.27.1': {} - '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.27.4)': + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-wrap-function': 7.27.1 - '@babel/traverse': 7.27.4 + '@babel/helper-wrap-function': 7.28.3 + '@babel/traverse': 7.28.3 transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.27.1(@babel/core@7.27.4)': + '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.28.3 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: - '@babel/traverse': 7.27.4 - '@babel/types': 7.27.3 + '@babel/traverse': 7.28.3 + '@babel/types': 7.28.2 transitivePeerDependencies: - supports-color - '@babel/helper-string-parser@7.24.8': {} - '@babel/helper-string-parser@7.27.1': {} - '@babel/helper-validator-identifier@7.24.7': {} - '@babel/helper-validator-identifier@7.27.1': {} '@babel/helper-validator-option@7.27.1': {} - '@babel/helper-wrap-function@7.27.1': + '@babel/helper-wrap-function@7.28.3': dependencies: '@babel/template': 7.27.2 - '@babel/traverse': 7.27.4 - '@babel/types': 7.27.3 + '@babel/traverse': 7.28.3 + '@babel/types': 7.28.2 transitivePeerDependencies: - supports-color - '@babel/helpers@7.27.4': + '@babel/helpers@7.28.3': dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.27.3 - - '@babel/highlight@7.24.7': - dependencies: - '@babel/helper-validator-identifier': 7.24.7 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.1.1 + '@babel/types': 7.28.2 - '@babel/node@7.27.1(@babel/core@7.27.4)': + '@babel/node@7.28.0(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 - '@babel/register': 7.27.1(@babel/core@7.27.4) + '@babel/core': 7.28.3 + '@babel/register': 7.28.3(@babel/core@7.28.3) commander: 6.2.1 - core-js: 3.37.1 + core-js: 3.45.0 node-environment-flags: 1.0.6 regenerator-runtime: 0.14.1 v8flags: 3.2.0 - '@babel/parser@7.24.7': - dependencies: - '@babel/types': 7.25.2 - - '@babel/parser@7.27.4': + '@babel/parser@7.28.3': dependencies: - '@babel/types': 7.27.3 + '@babel/types': 7.28.2 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.28.3 transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.3) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.28.3 transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.4)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.27.4)': + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.28.3 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-flow@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-syntax-flow@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.27.4)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 - '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.27.4) + '@babel/core': 7.28.3 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-async-generator-functions@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-async-generator-functions@7.28.0(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.4) - '@babel/traverse': 7.27.4 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.3) + '@babel/traverse': 7.28.3 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.4) + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.3) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-block-scoping@7.27.3(@babel/core@7.27.4)': + '@babel/plugin-transform-block-scoping@7.28.0(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4) + '@babel/core': 7.28.3 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-class-static-block@7.28.3(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4) + '@babel/core': 7.28.3 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-classes@7.28.3(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-globals': 7.28.0 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.4) - '@babel/traverse': 7.27.4 - globals: 11.12.0 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.3) + '@babel/traverse': 7.28.3 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 '@babel/template': 7.27.2 - '@babel/plugin-transform-destructuring@7.27.3(@babel/core@7.27.4)': + '@babel/plugin-transform-destructuring@7.28.0(@babel/core@7.28.3)': + dependencies: + '@babel/core': 7.28.3 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.28.3 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-explicit-resource-management@7.28.0(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.3) + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-flow-strip-types@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-flow-strip-types@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-flow': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-syntax-flow': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.28.3 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-literals@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4) + '@babel/core': 7.28.3 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4) + '@babel/core': 7.28.3 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4) + '@babel/core': 7.28.3 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.28.3 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4) + '@babel/core': 7.28.3 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) + '@babel/core': 7.28.3 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-object-rest-spread@7.27.3(@babel/core@7.27.4)': + '@babel/plugin-transform-object-rest-spread@7.28.0(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-destructuring': 7.27.3(@babel/core@7.27.4) - '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.3) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.3) + '@babel/traverse': 7.28.3 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.4) + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.3) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4) + '@babel/core': 7.28.3 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4) + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-regenerator@7.27.4(@babel/core@7.27.4)': + '@babel/plugin-transform-regenerator@7.28.3(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) + '@babel/core': 7.28.3 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-spread@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-spread@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) + '@babel/core': 7.28.3 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) + '@babel/core': 7.28.3 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) + '@babel/core': 7.28.3 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 - '@babel/preset-env@7.27.2(@babel/core@7.27.4)': + '@babel/preset-env@7.28.3(@babel/core@7.28.3)': dependencies: - '@babel/compat-data': 7.27.3 - '@babel/core': 7.27.4 + '@babel/compat-data': 7.28.0 + '@babel/core': 7.28.3 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.4) - '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.27.4) - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-async-generator-functions': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-block-scoping': 7.27.3(@babel/core@7.27.4) - '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-class-static-block': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-classes': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-destructuring': 7.27.3(@babel/core@7.27.4) - '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-object-rest-spread': 7.27.3(@babel/core@7.27.4) - '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-regenerator': 7.27.4(@babel/core@7.27.4) - '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.27.4) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.27.4) - babel-plugin-polyfill-corejs2: 0.4.10(@babel/core@7.27.4) - babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.27.4) - babel-plugin-polyfill-regenerator: 0.6.1(@babel/core@7.27.4) - core-js-compat: 3.42.0 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.3(@babel/core@7.28.3) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.3) + '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.28.3) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.28.3) + '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-block-scoping': 7.28.0(@babel/core@7.28.3) + '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-class-static-block': 7.28.3(@babel/core@7.28.3) + '@babel/plugin-transform-classes': 7.28.3(@babel/core@7.28.3) + '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.3) + '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-explicit-resource-management': 7.28.0(@babel/core@7.28.3) + '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-object-rest-spread': 7.28.0(@babel/core@7.28.3) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.3) + '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-regenerator': 7.28.3(@babel/core@7.28.3) + '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.28.3) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.28.3) + babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.3) + babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.3) + babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.3) + core-js-compat: 3.45.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.27.4)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/types': 7.25.2 + '@babel/types': 7.28.2 esutils: 2.0.3 - '@babel/register@7.27.1(@babel/core@7.27.4)': + '@babel/register@7.28.3(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 clone-deep: 4.0.1 find-cache-dir: 2.1.0 make-dir: 2.1.0 - pirates: 4.0.6 + pirates: 4.0.7 source-map-support: 0.5.21 - '@babel/regjsgen@0.8.0': {} - '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 - '@babel/parser': 7.27.4 - '@babel/types': 7.27.3 + '@babel/parser': 7.28.3 + '@babel/types': 7.28.2 - '@babel/traverse@7.27.4': + '@babel/traverse@7.28.3': dependencies: '@babel/code-frame': 7.27.1 - '@babel/generator': 7.27.3 - '@babel/parser': 7.27.4 + '@babel/generator': 7.28.3 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.28.3 '@babel/template': 7.27.2 - '@babel/types': 7.27.3 + '@babel/types': 7.28.2 debug: 4.4.1(supports-color@8.1.1) - globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.25.2': - dependencies: - '@babel/helper-string-parser': 7.24.8 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 - - '@babel/types@7.27.3': + '@babel/types@7.28.2': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 @@ -6491,23 +5944,23 @@ snapshots: '@colors/colors@1.5.0': optional: true - '@emnapi/core@1.4.3': + '@emnapi/core@1.4.5': dependencies: - '@emnapi/wasi-threads': 1.0.2 + '@emnapi/wasi-threads': 1.0.4 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.4.3': + '@emnapi/runtime@1.4.5': dependencies: tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.0.2': + '@emnapi/wasi-threads@1.0.4': dependencies: tslib: 2.8.1 optional: true - '@envelop/core@5.2.3': + '@envelop/core@5.3.0': dependencies: '@envelop/instrumentation': 1.0.0 '@envelop/types': 5.2.1 @@ -6529,21 +5982,21 @@ snapshots: '@es-joy/estraverse': 6.0.0 esprima: 4.0.1 esutils: 2.0.3 - optionator: 0.9.3 + optionator: 0.9.4 optionalDependencies: - source-map: 0.7.4 + source-map: 0.7.6 '@es-joy/estraverse@6.0.0': {} '@es-joy/jsdoc-eslint-parser@0.21.1': dependencies: - '@babel/core': 7.27.4 - '@babel/eslint-parser': 7.27.5(@babel/core@7.27.4)(eslint@8.56.0) + '@babel/core': 7.28.3 + '@babel/eslint-parser': 7.28.0(@babel/core@7.28.3)(eslint@8.57.1) '@es-joy/jsdoccomment': 0.41.0 - '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.8.3) - eslint: 8.56.0 + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.9.2) + eslint: 8.57.1 esquery: 1.6.0 - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -6556,34 +6009,32 @@ snapshots: '@es-joy/jsdoccomment@0.50.2': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.34.1 + '@typescript-eslint/types': 8.39.1 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 4.1.0 - '@es-joy/jsdoccomment@0.52.0': + '@es-joy/jsdoccomment@0.53.0': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.34.1 + '@typescript-eslint/types': 8.39.1 comment-parser: 1.4.1 esquery: 1.6.0 - jsdoc-type-pratt-parser: 4.1.0 + jsdoc-type-pratt-parser: 4.8.0 - '@eslint-community/eslint-utils@4.7.0(eslint@8.56.0)': + '@eslint-community/eslint-utils@4.7.0(eslint@8.57.1)': dependencies: - eslint: 8.56.0 + eslint: 8.57.1 eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.7.0(eslint@9.29.0(jiti@2.4.2))': + '@eslint-community/eslint-utils@4.7.0(eslint@9.33.0(jiti@2.5.1))': dependencies: - eslint: 9.29.0(jiti@2.4.2) + eslint: 9.33.0(jiti@2.5.1) eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.11.0': {} - '@eslint-community/regexpp@4.12.1': {} - '@eslint/config-array@0.20.1': + '@eslint/config-array@0.21.0': dependencies: '@eslint/object-schema': 2.1.6 debug: 4.4.1(supports-color@8.1.1) @@ -6591,9 +6042,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.2.2': {} + '@eslint/config-helpers@0.3.1': {} - '@eslint/core@0.14.0': + '@eslint/core@0.15.2': dependencies: '@types/json-schema': 7.0.15 @@ -6604,7 +6055,7 @@ snapshots: espree: 9.6.1 globals: 13.24.0 ignore: 5.3.2 - import-fresh: 3.3.0 + import-fresh: 3.3.1 js-yaml: 4.1.0 minimatch: 3.1.2 strip-json-comments: 3.1.1 @@ -6618,36 +6069,36 @@ snapshots: espree: 10.4.0 globals: 14.0.0 ignore: 5.3.2 - import-fresh: 3.3.0 + import-fresh: 3.3.1 js-yaml: 4.1.0 minimatch: 3.1.2 strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - '@eslint/js@8.56.0': {} + '@eslint/js@8.57.1': {} - '@eslint/js@9.29.0': {} + '@eslint/js@9.33.0': {} '@eslint/object-schema@2.1.6': {} - '@eslint/plugin-kit@0.3.1': + '@eslint/plugin-kit@0.3.5': dependencies: - '@eslint/core': 0.14.0 + '@eslint/core': 0.15.2 levn: 0.4.1 '@fastify/busboy@3.1.1': {} - '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.0.3)(eslint@9.29.0(jiti@2.4.2))(graphql@16.11.0)(typescript@5.8.3)': + '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.2.1)(eslint@9.33.0(jiti@2.5.1))(graphql@16.11.0)(typescript@5.9.2)': dependencies: - '@graphql-tools/code-file-loader': 8.1.20(graphql@16.11.0) - '@graphql-tools/graphql-tag-pluck': 8.3.19(graphql@16.11.0) - '@graphql-tools/utils': 10.8.6(graphql@16.11.0) + '@graphql-tools/code-file-loader': 8.1.22(graphql@16.11.0) + '@graphql-tools/graphql-tag-pluck': 8.3.21(graphql@16.11.0) + '@graphql-tools/utils': 10.9.1(graphql@16.11.0) debug: 4.4.1(supports-color@8.1.1) - eslint: 9.29.0(jiti@2.4.2) - fast-glob: 3.3.2 + eslint: 9.33.0(jiti@2.5.1) + fast-glob: 3.3.3 graphql: 16.11.0 - graphql-config: 5.1.5(@types/node@24.0.3)(graphql@16.11.0)(typescript@5.8.3) + graphql-config: 5.1.5(@types/node@24.2.1)(graphql@16.11.0)(typescript@5.9.2) graphql-depth-limit: 1.1.0(graphql@16.11.0) lodash.lowercase: 4.3.0 transitivePeerDependencies: @@ -6663,18 +6114,18 @@ snapshots: '@graphql-hive/signal@1.0.0': {} - '@graphql-tools/batch-execute@9.0.16(graphql@16.11.0)': + '@graphql-tools/batch-execute@9.0.19(graphql@16.11.0)': dependencies: - '@graphql-tools/utils': 10.8.6(graphql@16.11.0) + '@graphql-tools/utils': 10.9.1(graphql@16.11.0) '@whatwg-node/promise-helpers': 1.3.2 dataloader: 2.2.3 graphql: 16.11.0 tslib: 2.8.1 - '@graphql-tools/code-file-loader@8.1.20(graphql@16.11.0)': + '@graphql-tools/code-file-loader@8.1.22(graphql@16.11.0)': dependencies: - '@graphql-tools/graphql-tag-pluck': 8.3.19(graphql@16.11.0) - '@graphql-tools/utils': 10.8.6(graphql@16.11.0) + '@graphql-tools/graphql-tag-pluck': 8.3.21(graphql@16.11.0) + '@graphql-tools/utils': 10.9.1(graphql@16.11.0) globby: 11.1.0 graphql: 16.11.0 tslib: 2.8.1 @@ -6682,12 +6133,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@graphql-tools/delegate@10.2.18(graphql@16.11.0)': + '@graphql-tools/delegate@10.2.23(graphql@16.11.0)': dependencies: - '@graphql-tools/batch-execute': 9.0.16(graphql@16.11.0) - '@graphql-tools/executor': 1.4.7(graphql@16.11.0) - '@graphql-tools/schema': 10.0.23(graphql@16.11.0) - '@graphql-tools/utils': 10.8.6(graphql@16.11.0) + '@graphql-tools/batch-execute': 9.0.19(graphql@16.11.0) + '@graphql-tools/executor': 1.4.9(graphql@16.11.0) + '@graphql-tools/schema': 10.0.25(graphql@16.11.0) + '@graphql-tools/utils': 10.9.1(graphql@16.11.0) '@repeaterjs/repeater': 3.0.6 '@whatwg-node/promise-helpers': 1.3.2 dataloader: 2.2.3 @@ -6697,20 +6148,26 @@ snapshots: '@graphql-tools/executor-common@0.0.4(graphql@16.11.0)': dependencies: - '@envelop/core': 5.2.3 - '@graphql-tools/utils': 10.8.6(graphql@16.11.0) + '@envelop/core': 5.3.0 + '@graphql-tools/utils': 10.9.1(graphql@16.11.0) graphql: 16.11.0 - '@graphql-tools/executor-graphql-ws@2.0.5(graphql@16.11.0)': + '@graphql-tools/executor-common@0.0.6(graphql@16.11.0)': dependencies: - '@graphql-tools/executor-common': 0.0.4(graphql@16.11.0) - '@graphql-tools/utils': 10.8.6(graphql@16.11.0) + '@envelop/core': 5.3.0 + '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + graphql: 16.11.0 + + '@graphql-tools/executor-graphql-ws@2.0.7(graphql@16.11.0)': + dependencies: + '@graphql-tools/executor-common': 0.0.6(graphql@16.11.0) + '@graphql-tools/utils': 10.9.1(graphql@16.11.0) '@whatwg-node/disposablestack': 0.0.6 graphql: 16.11.0 - graphql-ws: 6.0.5(graphql@16.11.0)(ws@8.18.2) - isomorphic-ws: 5.0.0(ws@8.18.2) + graphql-ws: 6.0.6(graphql@16.11.0)(ws@8.18.3) + isomorphic-ws: 5.0.0(ws@8.18.3) tslib: 2.8.1 - ws: 8.18.2 + ws: 8.18.3 transitivePeerDependencies: - '@fastify/websocket' - bufferutil @@ -6718,36 +6175,36 @@ snapshots: - uWebSockets.js - utf-8-validate - '@graphql-tools/executor-http@1.3.3(@types/node@24.0.3)(graphql@16.11.0)': + '@graphql-tools/executor-http@1.3.3(@types/node@24.2.1)(graphql@16.11.0)': dependencies: '@graphql-hive/signal': 1.0.0 '@graphql-tools/executor-common': 0.0.4(graphql@16.11.0) - '@graphql-tools/utils': 10.8.6(graphql@16.11.0) - '@repeaterjs/repeater': 3.0.5 + '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + '@repeaterjs/repeater': 3.0.6 '@whatwg-node/disposablestack': 0.0.6 - '@whatwg-node/fetch': 0.10.8 + '@whatwg-node/fetch': 0.10.10 '@whatwg-node/promise-helpers': 1.3.2 graphql: 16.11.0 - meros: 1.3.0(@types/node@24.0.3) + meros: 1.3.1(@types/node@24.2.1) tslib: 2.8.1 transitivePeerDependencies: - '@types/node' - '@graphql-tools/executor-legacy-ws@1.1.17(graphql@16.11.0)': + '@graphql-tools/executor-legacy-ws@1.1.19(graphql@16.11.0)': dependencies: - '@graphql-tools/utils': 10.8.6(graphql@16.11.0) - '@types/ws': 8.5.10 + '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + '@types/ws': 8.18.1 graphql: 16.11.0 - isomorphic-ws: 5.0.0(ws@8.18.2) + isomorphic-ws: 5.0.0(ws@8.18.3) tslib: 2.8.1 - ws: 8.18.2 + ws: 8.18.3 transitivePeerDependencies: - bufferutil - utf-8-validate - '@graphql-tools/executor@1.4.7(graphql@16.11.0)': + '@graphql-tools/executor@1.4.9(graphql@16.11.0)': dependencies: - '@graphql-tools/utils': 10.8.6(graphql@16.11.0) + '@graphql-tools/utils': 10.9.1(graphql@16.11.0) '@graphql-typed-document-node/core': 3.2.0(graphql@16.11.0) '@repeaterjs/repeater': 3.0.6 '@whatwg-node/disposablestack': 0.0.6 @@ -6755,79 +6212,84 @@ snapshots: graphql: 16.11.0 tslib: 2.8.1 - '@graphql-tools/graphql-file-loader@8.0.20(graphql@16.11.0)': + '@graphql-tools/graphql-file-loader@8.0.22(graphql@16.11.0)': dependencies: - '@graphql-tools/import': 7.0.19(graphql@16.11.0) - '@graphql-tools/utils': 10.8.6(graphql@16.11.0) + '@graphql-tools/import': 7.0.21(graphql@16.11.0) + '@graphql-tools/utils': 10.9.1(graphql@16.11.0) globby: 11.1.0 graphql: 16.11.0 tslib: 2.8.1 unixify: 1.0.0 + transitivePeerDependencies: + - supports-color - '@graphql-tools/graphql-tag-pluck@8.3.19(graphql@16.11.0)': + '@graphql-tools/graphql-tag-pluck@8.3.21(graphql@16.11.0)': dependencies: - '@babel/core': 7.27.4 - '@babel/parser': 7.27.4 - '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.27.4) - '@babel/traverse': 7.27.4 - '@babel/types': 7.27.3 - '@graphql-tools/utils': 10.8.6(graphql@16.11.0) + '@babel/core': 7.28.3 + '@babel/parser': 7.28.3 + '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.3) + '@babel/traverse': 7.28.3 + '@babel/types': 7.28.2 + '@graphql-tools/utils': 10.9.1(graphql@16.11.0) graphql: 16.11.0 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@graphql-tools/import@7.0.19(graphql@16.11.0)': + '@graphql-tools/import@7.0.21(graphql@16.11.0)': dependencies: - '@graphql-tools/utils': 10.8.6(graphql@16.11.0) + '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + '@theguild/federation-composition': 0.19.1(graphql@16.11.0) graphql: 16.11.0 resolve-from: 5.0.0 tslib: 2.8.1 + transitivePeerDependencies: + - supports-color - '@graphql-tools/json-file-loader@8.0.18(graphql@16.11.0)': + '@graphql-tools/json-file-loader@8.0.20(graphql@16.11.0)': dependencies: - '@graphql-tools/utils': 10.8.6(graphql@16.11.0) + '@graphql-tools/utils': 10.9.1(graphql@16.11.0) globby: 11.1.0 graphql: 16.11.0 tslib: 2.8.1 unixify: 1.0.0 - '@graphql-tools/load@8.1.0(graphql@16.11.0)': + '@graphql-tools/load@8.1.2(graphql@16.11.0)': dependencies: - '@graphql-tools/schema': 10.0.23(graphql@16.11.0) - '@graphql-tools/utils': 10.8.6(graphql@16.11.0) + '@graphql-tools/schema': 10.0.25(graphql@16.11.0) + '@graphql-tools/utils': 10.9.1(graphql@16.11.0) graphql: 16.11.0 p-limit: 3.1.0 tslib: 2.8.1 - '@graphql-tools/merge@9.0.24(graphql@16.11.0)': + '@graphql-tools/merge@9.1.1(graphql@16.11.0)': dependencies: - '@graphql-tools/utils': 10.8.6(graphql@16.11.0) + '@graphql-tools/utils': 10.9.1(graphql@16.11.0) graphql: 16.11.0 tslib: 2.8.1 - '@graphql-tools/schema@10.0.23(graphql@16.11.0)': + '@graphql-tools/schema@10.0.25(graphql@16.11.0)': dependencies: - '@graphql-tools/merge': 9.0.24(graphql@16.11.0) - '@graphql-tools/utils': 10.8.6(graphql@16.11.0) + '@graphql-tools/merge': 9.1.1(graphql@16.11.0) + '@graphql-tools/utils': 10.9.1(graphql@16.11.0) graphql: 16.11.0 tslib: 2.8.1 - '@graphql-tools/url-loader@8.0.31(@types/node@24.0.3)(graphql@16.11.0)': + '@graphql-tools/url-loader@8.0.33(@types/node@24.2.1)(graphql@16.11.0)': dependencies: - '@graphql-tools/executor-graphql-ws': 2.0.5(graphql@16.11.0) - '@graphql-tools/executor-http': 1.3.3(@types/node@24.0.3)(graphql@16.11.0) - '@graphql-tools/executor-legacy-ws': 1.1.17(graphql@16.11.0) - '@graphql-tools/utils': 10.8.6(graphql@16.11.0) - '@graphql-tools/wrap': 10.0.36(graphql@16.11.0) - '@types/ws': 8.5.10 - '@whatwg-node/fetch': 0.10.8 + '@graphql-tools/executor-graphql-ws': 2.0.7(graphql@16.11.0) + '@graphql-tools/executor-http': 1.3.3(@types/node@24.2.1)(graphql@16.11.0) + '@graphql-tools/executor-legacy-ws': 1.1.19(graphql@16.11.0) + '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + '@graphql-tools/wrap': 10.1.4(graphql@16.11.0) + '@types/ws': 8.18.1 + '@whatwg-node/fetch': 0.10.10 '@whatwg-node/promise-helpers': 1.3.2 graphql: 16.11.0 - isomorphic-ws: 5.0.0(ws@8.18.2) + isomorphic-ws: 5.0.0(ws@8.18.3) sync-fetch: 0.6.0-2 tslib: 2.8.1 - ws: 8.18.2 + ws: 8.18.3 transitivePeerDependencies: - '@fastify/websocket' - '@types/node' @@ -6836,7 +6298,7 @@ snapshots: - uWebSockets.js - utf-8-validate - '@graphql-tools/utils@10.8.6(graphql@16.11.0)': + '@graphql-tools/utils@10.9.1(graphql@16.11.0)': dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.11.0) '@whatwg-node/promise-helpers': 1.3.2 @@ -6845,11 +6307,11 @@ snapshots: graphql: 16.11.0 tslib: 2.8.1 - '@graphql-tools/wrap@10.0.36(graphql@16.11.0)': + '@graphql-tools/wrap@10.1.4(graphql@16.11.0)': dependencies: - '@graphql-tools/delegate': 10.2.18(graphql@16.11.0) - '@graphql-tools/schema': 10.0.23(graphql@16.11.0) - '@graphql-tools/utils': 10.8.6(graphql@16.11.0) + '@graphql-tools/delegate': 10.2.23(graphql@16.11.0) + '@graphql-tools/schema': 10.0.25(graphql@16.11.0) + '@graphql-tools/utils': 10.9.1(graphql@16.11.0) '@whatwg-node/promise-helpers': 1.3.2 graphql: 16.11.0 tslib: 2.8.1 @@ -6858,9 +6320,9 @@ snapshots: dependencies: graphql: 16.11.0 - '@hkdobrev/run-if-changed@0.6.3(typescript@5.8.3)': + '@hkdobrev/run-if-changed@0.6.3(typescript@5.9.2)': dependencies: - cosmiconfig: 9.0.0(typescript@5.8.3) + cosmiconfig: 9.0.0(typescript@5.9.2) execa: 9.6.0 listr2: 8.3.3 micromatch: 4.0.8 @@ -6873,9 +6335,9 @@ snapshots: '@humanfs/node@0.16.6': dependencies: '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.3.0 + '@humanwhocodes/retry': 0.3.1 - '@humanwhocodes/config-array@0.11.13': + '@humanwhocodes/config-array@0.13.0': dependencies: '@humanwhocodes/object-schema': 2.0.3 debug: 4.4.1(supports-color@8.1.1) @@ -6887,7 +6349,7 @@ snapshots: '@humanwhocodes/object-schema@2.0.3': {} - '@humanwhocodes/retry@0.3.0': {} + '@humanwhocodes/retry@0.3.1': {} '@humanwhocodes/retry@0.4.3': {} @@ -6916,31 +6378,28 @@ snapshots: '@istanbuljs/schema@0.1.3': {} - '@jridgewell/gen-mapping@0.3.5': + '@jridgewell/gen-mapping@0.3.13': dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.30 - '@jridgewell/resolve-uri@3.1.1': {} + '@jridgewell/resolve-uri@3.1.2': {} - '@jridgewell/set-array@1.2.1': {} + '@jridgewell/sourcemap-codec@1.5.5': {} - '@jridgewell/sourcemap-codec@1.4.15': {} - - '@jridgewell/trace-mapping@0.3.25': + '@jridgewell/trace-mapping@0.3.30': dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 - '@napi-rs/wasm-runtime@0.2.11': + '@napi-rs/wasm-runtime@0.2.12': dependencies: - '@emnapi/core': 1.4.3 - '@emnapi/runtime': 1.4.3 - '@tybys/wasm-util': 0.9.0 + '@emnapi/core': 1.4.5 + '@emnapi/runtime': 1.4.5 + '@tybys/wasm-util': 0.10.0 optional: true - '@next/eslint-plugin-next@15.3.3': + '@next/eslint-plugin-next@15.4.6': dependencies: fast-glob: 3.3.1 @@ -6961,13 +6420,13 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.16.0 + fastq: 1.19.1 '@nolyfill/is-core-module@1.0.39': {} '@npmcli/agent@2.2.2': dependencies: - agent-base: 7.1.3 + agent-base: 7.1.4 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 lru-cache: 10.4.3 @@ -6983,44 +6442,44 @@ snapshots: '@octokit/auth-token@6.0.0': {} - '@octokit/core@7.0.2': + '@octokit/core@7.0.3': dependencies: '@octokit/auth-token': 6.0.0 '@octokit/graphql': 9.0.1 - '@octokit/request': 10.0.2 + '@octokit/request': 10.0.3 '@octokit/request-error': 7.0.0 '@octokit/types': 14.1.0 before-after-hook: 4.0.0 - universal-user-agent: 7.0.2 + universal-user-agent: 7.0.3 '@octokit/endpoint@11.0.0': dependencies: '@octokit/types': 14.1.0 - universal-user-agent: 7.0.2 + universal-user-agent: 7.0.3 '@octokit/graphql@9.0.1': dependencies: - '@octokit/request': 10.0.2 + '@octokit/request': 10.0.3 '@octokit/types': 14.1.0 - universal-user-agent: 7.0.2 + universal-user-agent: 7.0.3 '@octokit/openapi-types@25.1.0': {} - '@octokit/plugin-paginate-rest@13.0.1(@octokit/core@7.0.2)': + '@octokit/plugin-paginate-rest@13.1.1(@octokit/core@7.0.3)': dependencies: - '@octokit/core': 7.0.2 + '@octokit/core': 7.0.3 '@octokit/types': 14.1.0 - '@octokit/plugin-retry@8.0.1(@octokit/core@7.0.2)': + '@octokit/plugin-retry@8.0.1(@octokit/core@7.0.3)': dependencies: - '@octokit/core': 7.0.2 + '@octokit/core': 7.0.3 '@octokit/request-error': 7.0.0 '@octokit/types': 14.1.0 bottleneck: 2.19.5 - '@octokit/plugin-throttling@11.0.1(@octokit/core@7.0.2)': + '@octokit/plugin-throttling@11.0.1(@octokit/core@7.0.3)': dependencies: - '@octokit/core': 7.0.2 + '@octokit/core': 7.0.3 '@octokit/types': 14.1.0 bottleneck: 2.19.5 @@ -7028,13 +6487,13 @@ snapshots: dependencies: '@octokit/types': 14.1.0 - '@octokit/request@10.0.2': + '@octokit/request@10.0.3': dependencies: '@octokit/endpoint': 11.0.0 '@octokit/request-error': 7.0.0 '@octokit/types': 14.1.0 fast-content-type-parse: 3.0.0 - universal-user-agent: 7.0.2 + universal-user-agent: 7.0.3 '@octokit/types@14.1.0': dependencies: @@ -7043,7 +6502,7 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@pkgr/core@0.2.4': {} + '@pkgr/core@0.2.9': {} '@pnpm/config.env-replace@1.1.0': {} @@ -7051,108 +6510,116 @@ snapshots: dependencies: graceful-fs: 4.2.10 - '@pnpm/npm-conf@2.2.2': + '@pnpm/npm-conf@2.3.1': dependencies: '@pnpm/config.env-replace': 1.1.0 '@pnpm/network.ca-file': 1.0.2 config-chain: 1.1.13 - '@repeaterjs/repeater@3.0.5': {} - '@repeaterjs/repeater@3.0.6': {} '@sec-ant/readable-stream@0.4.1': {} - '@semantic-release/commit-analyzer@13.0.1(semantic-release@24.2.5(typescript@5.8.3))': + '@semantic-release/commit-analyzer@13.0.1(semantic-release@24.2.7(typescript@5.9.2))': dependencies: conventional-changelog-angular: 8.0.0 - conventional-changelog-writer: 8.0.0 + conventional-changelog-writer: 8.2.0 conventional-commits-filter: 5.0.0 - conventional-commits-parser: 6.0.0 + conventional-commits-parser: 6.2.0 debug: 4.4.1(supports-color@8.1.1) import-from-esm: 2.0.0 lodash-es: 4.17.21 micromatch: 4.0.8 - semantic-release: 24.2.5(typescript@5.8.3) + semantic-release: 24.2.7(typescript@5.9.2) transitivePeerDependencies: - supports-color '@semantic-release/error@4.0.0': {} - '@semantic-release/github@11.0.3(semantic-release@24.2.5(typescript@5.8.3))': + '@semantic-release/github@11.0.4(semantic-release@24.2.7(typescript@5.9.2))': dependencies: - '@octokit/core': 7.0.2 - '@octokit/plugin-paginate-rest': 13.0.1(@octokit/core@7.0.2) - '@octokit/plugin-retry': 8.0.1(@octokit/core@7.0.2) - '@octokit/plugin-throttling': 11.0.1(@octokit/core@7.0.2) + '@octokit/core': 7.0.3 + '@octokit/plugin-paginate-rest': 13.1.1(@octokit/core@7.0.3) + '@octokit/plugin-retry': 8.0.1(@octokit/core@7.0.3) + '@octokit/plugin-throttling': 11.0.1(@octokit/core@7.0.3) '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 debug: 4.4.1(supports-color@8.1.1) dir-glob: 3.0.1 - globby: 14.0.0 - http-proxy-agent: 7.0.0 - https-proxy-agent: 7.0.2 - issue-parser: 7.0.0 + globby: 14.1.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + issue-parser: 7.0.1 lodash-es: 4.17.21 - mime: 4.0.1 + mime: 4.0.7 p-filter: 4.1.0 - semantic-release: 24.2.5(typescript@5.8.3) + semantic-release: 24.2.7(typescript@5.9.2) url-join: 5.0.0 transitivePeerDependencies: - supports-color - '@semantic-release/npm@12.0.1(semantic-release@24.2.5(typescript@5.8.3))': + '@semantic-release/npm@12.0.2(semantic-release@24.2.7(typescript@5.9.2))': dependencies: '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 - execa: 9.1.0 - fs-extra: 11.2.0 + execa: 9.6.0 + fs-extra: 11.3.1 lodash-es: 4.17.21 nerf-dart: 1.0.0 - normalize-url: 8.0.0 - npm: 10.5.1 + normalize-url: 8.0.2 + npm: 10.9.3 rc: 1.2.8 read-pkg: 9.0.1 - registry-auth-token: 5.0.2 - semantic-release: 24.2.5(typescript@5.8.3) + registry-auth-token: 5.1.0 + semantic-release: 24.2.7(typescript@5.9.2) semver: 7.7.2 tempy: 3.1.0 - '@semantic-release/release-notes-generator@14.0.1(semantic-release@24.2.5(typescript@5.8.3))': + '@semantic-release/release-notes-generator@14.0.3(semantic-release@24.2.7(typescript@5.9.2))': dependencies: conventional-changelog-angular: 8.0.0 - conventional-changelog-writer: 8.0.0 + conventional-changelog-writer: 8.2.0 conventional-commits-filter: 5.0.0 - conventional-commits-parser: 6.0.0 + conventional-commits-parser: 6.2.0 debug: 4.4.1(supports-color@8.1.1) get-stream: 7.0.1 - import-from-esm: 1.3.3 + import-from-esm: 2.0.0 into-stream: 7.0.0 lodash-es: 4.17.21 read-package-up: 11.0.0 - semantic-release: 24.2.5(typescript@5.8.3) + semantic-release: 24.2.7(typescript@5.9.2) transitivePeerDependencies: - supports-color '@sindresorhus/is@4.6.0': {} - '@sindresorhus/merge-streams@1.0.0': {} + '@sindresorhus/merge-streams@2.3.0': {} '@sindresorhus/merge-streams@4.0.0': {} - '@stylistic/eslint-plugin@4.4.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': + '@stylistic/eslint-plugin@4.4.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@typescript-eslint/utils': 8.33.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.29.0(jiti@2.4.2) - eslint-visitor-keys: 4.2.0 + '@typescript-eslint/utils': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.33.0(jiti@2.5.1) + eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 - picomatch: 4.0.2 + picomatch: 4.0.3 transitivePeerDependencies: - supports-color - typescript - '@tybys/wasm-util@0.9.0': + '@theguild/federation-composition@0.19.1(graphql@16.11.0)': + dependencies: + constant-case: 3.0.4 + debug: 4.4.1(supports-color@8.1.1) + graphql: 16.11.0 + json5: 2.2.3 + lodash.sortby: 4.7.0 + transitivePeerDependencies: + - supports-color + + '@tybys/wasm-util@0.10.0': dependencies: tslib: 2.8.1 optional: true @@ -7163,7 +6630,7 @@ snapshots: '@types/debug@4.1.12': dependencies: - '@types/ms': 0.7.34 + '@types/ms': 2.1.0 '@types/deep-eql@4.0.2': {} @@ -7174,8 +6641,8 @@ snapshots: '@types/espree@10.1.0': dependencies: - acorn: 8.12.0 - eslint-visitor-keys: 4.0.0 + acorn: 8.15.0 + eslint-visitor-keys: 4.2.1 '@types/esquery@1.5.4': dependencies: @@ -7189,17 +6656,17 @@ snapshots: '@types/lodash.defaultsdeep@4.6.9': dependencies: - '@types/lodash': 4.14.202 + '@types/lodash': 4.17.20 - '@types/lodash@4.14.202': {} + '@types/lodash@4.17.20': {} '@types/mocha@10.0.10': {} - '@types/ms@0.7.34': {} + '@types/ms@2.1.0': {} - '@types/node@24.0.3': + '@types/node@24.2.1': dependencies: - undici-types: 7.8.0 + undici-types: 7.10.0 '@types/normalize-package-data@2.4.4': {} @@ -7207,96 +6674,58 @@ snapshots: '@types/spdx-expression-parse@3.0.5': {} - '@types/ws@8.5.10': + '@types/ws@8.18.1': dependencies: - '@types/node': 24.0.3 + '@types/node': 24.2.1 - '@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.39.1(@typescript-eslint/parser@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.32.1 - '@typescript-eslint/type-utils': 8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.32.1 - eslint: 9.29.0(jiti@2.4.2) + '@typescript-eslint/parser': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.39.1 + '@typescript-eslint/type-utils': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.39.1 + eslint: 9.33.0(jiti@2.5.1) graphemer: 1.4.0 - ignore: 7.0.4 + ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': - dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.34.1 - '@typescript-eslint/type-utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.34.1 - eslint: 9.29.0(jiti@2.4.2) - graphemer: 1.4.0 - ignore: 7.0.4 - natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.8.3)': + '@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.2)': dependencies: '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.2) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.4.1(supports-color@8.1.1) - eslint: 8.56.0 + eslint: 8.57.1 optionalDependencies: - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.32.1 - '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.32.1 - debug: 4.4.1(supports-color@8.1.1) - eslint: 9.29.0(jiti@2.4.2) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.34.1 - '@typescript-eslint/types': 8.34.1 - '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.34.1 - debug: 4.4.1(supports-color@8.1.1) - eslint: 9.29.0(jiti@2.4.2) - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.33.0(typescript@5.8.3)': + '@typescript-eslint/parser@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.33.0(typescript@5.8.3) - '@typescript-eslint/types': 8.34.1 + '@typescript-eslint/scope-manager': 8.39.1 + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/typescript-estree': 8.39.1(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.39.1 debug: 4.4.1(supports-color@8.1.1) + eslint: 9.33.0(jiti@2.5.1) + typescript: 5.9.2 transitivePeerDependencies: - supports-color - - typescript - '@typescript-eslint/project-service@8.34.1(typescript@5.8.3)': + '@typescript-eslint/project-service@8.39.1(typescript@5.9.2)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.34.1(typescript@5.8.3) - '@typescript-eslint/types': 8.34.1 + '@typescript-eslint/tsconfig-utils': 8.39.1(typescript@5.9.2) + '@typescript-eslint/types': 8.39.1 debug: 4.4.1(supports-color@8.1.1) - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -7305,71 +6734,32 @@ snapshots: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 - '@typescript-eslint/scope-manager@8.32.1': - dependencies: - '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/visitor-keys': 8.32.1 - - '@typescript-eslint/scope-manager@8.33.0': - dependencies: - '@typescript-eslint/types': 8.33.0 - '@typescript-eslint/visitor-keys': 8.33.0 - - '@typescript-eslint/scope-manager@8.34.1': - dependencies: - '@typescript-eslint/types': 8.34.1 - '@typescript-eslint/visitor-keys': 8.34.1 - - '@typescript-eslint/tsconfig-utils@8.33.0(typescript@5.8.3)': + '@typescript-eslint/scope-manager@8.39.1': dependencies: - typescript: 5.8.3 + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/visitor-keys': 8.39.1 - '@typescript-eslint/tsconfig-utils@8.34.1(typescript@5.8.3)': + '@typescript-eslint/tsconfig-utils@8.39.1(typescript@5.9.2)': dependencies: - typescript: 5.8.3 + typescript: 5.9.2 - '@typescript-eslint/type-utils@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/typescript-estree': 8.39.1(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) debug: 4.4.1(supports-color@8.1.1) - eslint: 9.29.0(jiti@2.4.2) - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/type-utils@8.33.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': - dependencies: - '@typescript-eslint/typescript-estree': 8.33.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.33.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - debug: 4.4.1(supports-color@8.1.1) - eslint: 9.29.0(jiti@2.4.2) - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/type-utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': - dependencies: - '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3) - '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - debug: 4.4.1(supports-color@8.1.1) - eslint: 9.29.0(jiti@2.4.2) - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 + eslint: 9.33.0(jiti@2.5.1) + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - supports-color '@typescript-eslint/types@6.21.0': {} - '@typescript-eslint/types@8.32.1': {} - - '@typescript-eslint/types@8.33.0': {} - - '@typescript-eslint/types@8.34.1': {} + '@typescript-eslint/types@8.39.1': {} - '@typescript-eslint/typescript-estree@6.21.0(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.9.2)': dependencies: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 @@ -7378,88 +6768,36 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.7.2 - ts-api-utils: 1.0.3(typescript@5.8.3) + ts-api-utils: 1.4.3(typescript@5.9.2) optionalDependencies: - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/typescript-estree@8.32.1(typescript@5.8.3)': - dependencies: - '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/visitor-keys': 8.32.1 - debug: 4.4.1(supports-color@8.1.1) - fast-glob: 3.3.2 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/typescript-estree@8.33.0(typescript@5.8.3)': - dependencies: - '@typescript-eslint/project-service': 8.33.0(typescript@5.8.3) - '@typescript-eslint/tsconfig-utils': 8.33.0(typescript@5.8.3) - '@typescript-eslint/types': 8.33.0 - '@typescript-eslint/visitor-keys': 8.33.0 - debug: 4.4.1(supports-color@8.1.1) - fast-glob: 3.3.2 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.34.1(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.39.1(typescript@5.9.2)': dependencies: - '@typescript-eslint/project-service': 8.34.1(typescript@5.8.3) - '@typescript-eslint/tsconfig-utils': 8.34.1(typescript@5.8.3) - '@typescript-eslint/types': 8.34.1 - '@typescript-eslint/visitor-keys': 8.34.1 + '@typescript-eslint/project-service': 8.39.1(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.39.1(typescript@5.9.2) + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/visitor-keys': 8.39.1 debug: 4.4.1(supports-color@8.1.1) - fast-glob: 3.3.2 + fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.32.1 - '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - eslint: 9.29.0(jiti@2.4.2) - typescript: 5.8.3 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.33.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.33.0 - '@typescript-eslint/types': 8.33.0 - '@typescript-eslint/typescript-estree': 8.33.0(typescript@5.8.3) - eslint: 9.29.0(jiti@2.4.2) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.34.1 - '@typescript-eslint/types': 8.34.1 - '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3) - eslint: 9.29.0(jiti@2.4.2) - typescript: 5.8.3 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1)) + '@typescript-eslint/scope-manager': 8.39.1 + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/typescript-estree': 8.39.1(typescript@5.9.2) + eslint: 9.33.0(jiti@2.5.1) + typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -7468,141 +6806,78 @@ snapshots: '@typescript-eslint/types': 6.21.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@8.32.1': - dependencies: - '@typescript-eslint/types': 8.32.1 - eslint-visitor-keys: 4.2.0 - - '@typescript-eslint/visitor-keys@8.33.0': - dependencies: - '@typescript-eslint/types': 8.33.0 - eslint-visitor-keys: 4.2.0 - - '@typescript-eslint/visitor-keys@8.34.1': + '@typescript-eslint/visitor-keys@8.39.1': dependencies: - '@typescript-eslint/types': 8.34.1 + '@typescript-eslint/types': 8.39.1 eslint-visitor-keys: 4.2.1 - '@ungap/structured-clone@1.2.0': {} - - '@unrs/resolver-binding-android-arm-eabi@1.9.0': - optional: true - - '@unrs/resolver-binding-android-arm64@1.9.0': - optional: true - - '@unrs/resolver-binding-darwin-arm64@1.7.8': - optional: true - - '@unrs/resolver-binding-darwin-arm64@1.9.0': - optional: true - - '@unrs/resolver-binding-darwin-x64@1.7.8': - optional: true - - '@unrs/resolver-binding-darwin-x64@1.9.0': - optional: true - - '@unrs/resolver-binding-freebsd-x64@1.7.8': - optional: true - - '@unrs/resolver-binding-freebsd-x64@1.9.0': - optional: true - - '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.8': - optional: true - - '@unrs/resolver-binding-linux-arm-gnueabihf@1.9.0': - optional: true - - '@unrs/resolver-binding-linux-arm-musleabihf@1.7.8': - optional: true - - '@unrs/resolver-binding-linux-arm-musleabihf@1.9.0': - optional: true - - '@unrs/resolver-binding-linux-arm64-gnu@1.7.8': - optional: true - - '@unrs/resolver-binding-linux-arm64-gnu@1.9.0': - optional: true + '@ungap/structured-clone@1.3.0': {} - '@unrs/resolver-binding-linux-arm64-musl@1.7.8': + '@unrs/resolver-binding-android-arm-eabi@1.11.1': optional: true - '@unrs/resolver-binding-linux-arm64-musl@1.9.0': + '@unrs/resolver-binding-android-arm64@1.11.1': optional: true - '@unrs/resolver-binding-linux-ppc64-gnu@1.7.8': + '@unrs/resolver-binding-darwin-arm64@1.11.1': optional: true - '@unrs/resolver-binding-linux-ppc64-gnu@1.9.0': + '@unrs/resolver-binding-darwin-x64@1.11.1': optional: true - '@unrs/resolver-binding-linux-riscv64-gnu@1.7.8': + '@unrs/resolver-binding-freebsd-x64@1.11.1': optional: true - '@unrs/resolver-binding-linux-riscv64-gnu@1.9.0': + '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': optional: true - '@unrs/resolver-binding-linux-riscv64-musl@1.7.8': + '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': optional: true - '@unrs/resolver-binding-linux-riscv64-musl@1.9.0': + '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': optional: true - '@unrs/resolver-binding-linux-s390x-gnu@1.7.8': + '@unrs/resolver-binding-linux-arm64-musl@1.11.1': optional: true - '@unrs/resolver-binding-linux-s390x-gnu@1.9.0': + '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': optional: true - '@unrs/resolver-binding-linux-x64-gnu@1.7.8': + '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': optional: true - '@unrs/resolver-binding-linux-x64-gnu@1.9.0': + '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': optional: true - '@unrs/resolver-binding-linux-x64-musl@1.7.8': + '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': optional: true - '@unrs/resolver-binding-linux-x64-musl@1.9.0': + '@unrs/resolver-binding-linux-x64-gnu@1.11.1': optional: true - '@unrs/resolver-binding-wasm32-wasi@1.7.8': - dependencies: - '@napi-rs/wasm-runtime': 0.2.11 + '@unrs/resolver-binding-linux-x64-musl@1.11.1': optional: true - '@unrs/resolver-binding-wasm32-wasi@1.9.0': + '@unrs/resolver-binding-wasm32-wasi@1.11.1': dependencies: - '@napi-rs/wasm-runtime': 0.2.11 - optional: true - - '@unrs/resolver-binding-win32-arm64-msvc@1.7.8': - optional: true - - '@unrs/resolver-binding-win32-arm64-msvc@1.9.0': - optional: true - - '@unrs/resolver-binding-win32-ia32-msvc@1.7.8': + '@napi-rs/wasm-runtime': 0.2.12 optional: true - '@unrs/resolver-binding-win32-ia32-msvc@1.9.0': + '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': optional: true - '@unrs/resolver-binding-win32-x64-msvc@1.7.8': + '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': optional: true - '@unrs/resolver-binding-win32-x64-msvc@1.9.0': + '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - '@vitest/eslint-plugin@1.2.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': + '@vitest/eslint-plugin@1.3.4(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@typescript-eslint/utils': 8.33.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.29.0(jiti@2.4.2) + '@typescript-eslint/utils': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.33.0(jiti@2.5.1) optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -7611,12 +6886,12 @@ snapshots: '@whatwg-node/promise-helpers': 1.3.2 tslib: 2.8.1 - '@whatwg-node/fetch@0.10.8': + '@whatwg-node/fetch@0.10.10': dependencies: - '@whatwg-node/node-fetch': 0.7.21 + '@whatwg-node/node-fetch': 0.7.25 urlpattern-polyfill: 10.1.0 - '@whatwg-node/node-fetch@0.7.21': + '@whatwg-node/node-fetch@0.7.25': dependencies: '@fastify/busboy': 3.1.1 '@whatwg-node/disposablestack': 0.0.6 @@ -7634,30 +6909,15 @@ snapshots: dependencies: acorn: 2.7.0 - acorn-jsx@5.3.2(acorn@8.14.1): - dependencies: - acorn: 8.14.1 - acorn-jsx@5.3.2(acorn@8.15.0): dependencies: acorn: 8.15.0 acorn@2.7.0: {} - acorn@8.12.0: {} - - acorn@8.14.1: {} - acorn@8.15.0: {} - agent-base@7.1.0: - dependencies: - debug: 4.4.1(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color - - agent-base@7.1.3: - optional: true + agent-base@7.1.4: {} aggregate-error@3.1.0: dependencies: @@ -7683,8 +6943,6 @@ snapshots: ansi-regex@5.0.1: {} - ansi-regex@6.0.1: {} - ansi-regex@6.1.0: {} ansi-styles@3.2.1: @@ -7717,11 +6975,6 @@ snapshots: aria-query@5.3.2: {} - array-buffer-byte-length@1.0.1: - dependencies: - call-bind: 1.0.7 - is-array-buffer: 3.0.4 - array-buffer-byte-length@1.0.2: dependencies: call-bound: 1.0.4 @@ -7729,75 +6982,60 @@ snapshots: array-ify@1.0.0: {} - array-includes@3.1.8: + array-includes@3.1.9: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - is-string: 1.0.7 + es-abstract: 1.24.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + is-string: 1.1.1 + math-intrinsics: 1.1.0 array-union@2.1.0: {} array.prototype.findlast@1.2.5: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.24.0 es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-shim-unscopables: 1.0.2 - - array.prototype.flat@1.3.2: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 + es-object-atoms: 1.1.1 + es-shim-unscopables: 1.1.0 - array.prototype.flatmap@1.3.2: + array.prototype.flat@1.3.3: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 + es-abstract: 1.24.0 + es-shim-unscopables: 1.1.0 array.prototype.flatmap@1.3.3: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.24.0 - es-shim-unscopables: 1.0.2 + es-shim-unscopables: 1.1.0 - array.prototype.reduce@1.0.7: + array.prototype.reduce@1.0.8: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.24.0 es-array-method-boxes-properly: 1.0.0 es-errors: 1.3.0 - es-object-atoms: 1.0.0 - is-string: 1.0.7 + es-object-atoms: 1.1.1 + is-string: 1.1.1 array.prototype.tosorted@1.1.4: dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-shim-unscopables: 1.0.2 - - arraybuffer.prototype.slice@1.0.3: - dependencies: - array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.24.0 es-errors: 1.3.0 - get-intrinsic: 1.2.4 - is-array-buffer: 3.0.4 - is-shared-array-buffer: 1.0.3 + es-shim-unscopables: 1.1.0 arraybuffer.prototype.slice@1.0.4: dependencies: @@ -7825,15 +7063,17 @@ snapshots: dependencies: tslib: 2.8.1 + async-function@1.0.0: {} + asynckit@0.4.0: {} available-typed-arrays@1.0.7: dependencies: - possible-typed-array-names: 1.0.0 + possible-typed-array-names: 1.1.0 aws-sign2@0.7.0: {} - aws4@1.12.0: {} + aws4@1.13.2: {} axe-core@4.10.3: {} @@ -7843,7 +7083,7 @@ snapshots: babel-plugin-istanbul@7.0.0: dependencies: - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.27.1 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 6.0.3 @@ -7851,33 +7091,33 @@ snapshots: transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs2@0.4.10(@babel/core@7.27.4): + babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.28.3): dependencies: - '@babel/compat-data': 7.27.3 - '@babel/core': 7.27.4 - '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.27.4) + '@babel/compat-data': 7.28.0 + '@babel/core': 7.28.3 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.3) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.27.4): + babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.28.3): dependencies: - '@babel/core': 7.27.4 - '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.4) - core-js-compat: 3.42.0 + '@babel/core': 7.28.3 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.3) + core-js-compat: 3.45.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.1(@babel/core@7.27.4): + babel-plugin-polyfill-regenerator@0.6.5(@babel/core@7.28.3): dependencies: - '@babel/core': 7.27.4 - '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.27.4) + '@babel/core': 7.28.3 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.3) transitivePeerDependencies: - supports-color - babel-plugin-transform-import-meta@2.3.3(@babel/core@7.27.4): + babel-plugin-transform-import-meta@2.3.3(@babel/core@7.28.3): dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.3 '@babel/template': 7.27.2 tslib: 2.8.1 @@ -7889,23 +7129,21 @@ snapshots: before-after-hook@4.0.0: {} - binary-extensions@2.2.0: + binary-extensions@2.3.0: optional: true bluebird@2.11.0: {} bluebird@3.7.2: {} - boolean@3.2.0: {} - bottleneck@2.19.5: {} - brace-expansion@1.1.11: + brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.0.1: + brace-expansion@2.0.2: dependencies: balanced-match: 1.0.2 @@ -7917,12 +7155,12 @@ snapshots: browser-stdout@1.3.1: {} - browserslist@4.25.0: + browserslist@4.25.2: dependencies: - caniuse-lite: 1.0.30001720 - electron-to-chromium: 1.5.161 + caniuse-lite: 1.0.30001735 + electron-to-chromium: 1.5.201 node-releases: 2.0.19 - update-browserslist-db: 1.1.3(browserslist@4.25.0) + update-browserslist-db: 1.1.3(browserslist@4.25.2) buffer-from@1.1.2: {} @@ -7937,12 +7175,12 @@ snapshots: '@bcoe/v8-coverage': 1.0.2 '@istanbuljs/schema': 0.1.3 find-up: 5.0.0 - foreground-child: 3.1.1 + foreground-child: 3.3.1 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 - istanbul-reports: 3.1.6 + istanbul-reports: 3.1.7 test-exclude: 7.0.1 - v8-to-istanbul: 9.2.0 + v8-to-istanbul: 9.3.0 yargs: 17.7.2 yargs-parser: 21.1.1 @@ -7967,19 +7205,11 @@ snapshots: es-errors: 1.3.0 function-bind: 1.1.2 - call-bind@1.0.7: - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - set-function-length: 1.2.2 - call-bind@1.0.8: dependencies: call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.0 - get-intrinsic: 1.2.4 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 set-function-length: 1.2.2 call-bound@1.0.4: @@ -7995,17 +7225,17 @@ snapshots: camelcase@8.0.0: {} - caniuse-lite@1.0.30001720: {} + caniuse-lite@1.0.30001735: {} caseless@0.12.0: {} - chai@5.2.0: + chai@5.2.1: dependencies: assertion-error: 2.0.1 check-error: 2.1.1 deep-eql: 5.0.2 - loupe: 3.1.1 - pathval: 2.0.0 + loupe: 3.2.0 + pathval: 2.0.1 chalk@2.4.2: dependencies: @@ -8018,7 +7248,7 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - chalk@5.4.1: {} + chalk@5.5.0: {} char-regex@1.0.2: {} @@ -8044,7 +7274,7 @@ snapshots: chownr@2.0.0: optional: true - ci-info@4.2.0: {} + ci-info@4.3.0: {} clean-regexp@1.0.0: dependencies: @@ -8079,7 +7309,7 @@ snapshots: cli-truncate@4.0.0: dependencies: slice-ansi: 5.0.0 - string-width: 7.0.0 + string-width: 7.2.0 cliui@6.0.0: dependencies: @@ -8147,6 +7377,12 @@ snapshots: ini: 1.3.8 proto-list: 1.2.4 + constant-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + upper-case: 2.0.2 + contents@5.0.0: dependencies: lodash: 4.17.21 @@ -8156,9 +7392,8 @@ snapshots: dependencies: compare-func: 2.0.0 - conventional-changelog-writer@8.0.0: + conventional-changelog-writer@8.2.0: dependencies: - '@types/semver': 7.7.0 conventional-commits-filter: 5.0.0 handlebars: 4.7.8 meow: 13.2.0 @@ -8166,7 +7401,7 @@ snapshots: conventional-commits-filter@5.0.0: {} - conventional-commits-parser@6.0.0: + conventional-commits-parser@6.2.0: dependencies: meow: 13.2.0 @@ -8174,33 +7409,33 @@ snapshots: convert-source-map@2.0.0: {} - core-js-compat@3.42.0: + core-js-compat@3.45.0: dependencies: - browserslist: 4.25.0 + browserslist: 4.25.2 - core-js@3.37.1: {} + core-js@3.45.0: {} core-util-is@1.0.2: {} core-util-is@1.0.3: {} - cosmiconfig@8.3.6(typescript@5.8.3): + cosmiconfig@8.3.6(typescript@5.9.2): dependencies: - import-fresh: 3.3.0 + import-fresh: 3.3.1 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 - cosmiconfig@9.0.0(typescript@5.8.3): + cosmiconfig@9.0.0(typescript@5.9.2): dependencies: env-paths: 2.2.1 - import-fresh: 3.3.0 + import-fresh: 3.3.1 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 create-eslint-index@1.0.0: dependencies: @@ -8234,36 +7469,18 @@ snapshots: data-uri-to-buffer@4.0.1: {} - data-view-buffer@1.0.1: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - data-view-buffer@1.0.2: dependencies: call-bound: 1.0.4 es-errors: 1.3.0 is-data-view: 1.0.2 - data-view-byte-length@1.0.1: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - data-view-byte-length@1.0.2: dependencies: call-bound: 1.0.4 es-errors: 1.3.0 is-data-view: 1.0.2 - data-view-byte-offset@1.0.0: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - data-view-byte-offset@1.0.1: dependencies: call-bound: 1.0.4 @@ -8311,9 +7528,9 @@ snapshots: define-data-property@1.1.4: dependencies: - es-define-property: 1.0.0 + es-define-property: 1.0.1 es-errors: 1.3.0 - gopd: 1.0.1 + gopd: 1.2.0 define-lazy-prop@3.0.0: {} @@ -8380,9 +7597,9 @@ snapshots: jsbn: 0.1.1 safer-buffer: 2.1.2 - electron-to-chromium@1.5.161: {} + electron-to-chromium@1.5.201: {} - emoji-regex@10.3.0: {} + emoji-regex@10.4.0: {} emoji-regex@8.0.0: {} @@ -8399,16 +7616,16 @@ snapshots: dependencies: lodash: 4.17.21 - enhanced-resolve@5.18.1: + enhanced-resolve@5.18.3: dependencies: graceful-fs: 4.2.11 - tapable: 2.2.1 + tapable: 2.2.2 entities@1.1.2: {} entities@2.2.0: {} - env-ci@11.0.0: + env-ci@11.1.1: dependencies: execa: 8.0.1 java-properties: 1.0.2 @@ -8426,55 +7643,6 @@ snapshots: dependencies: is-arrayish: 0.2.1 - es-abstract@1.23.3: - dependencies: - array-buffer-byte-length: 1.0.1 - arraybuffer.prototype.slice: 1.0.3 - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - data-view-buffer: 1.0.1 - data-view-byte-length: 1.0.1 - data-view-byte-offset: 1.0.0 - es-define-property: 1.0.0 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-set-tostringtag: 2.0.3 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.4 - get-symbol-description: 1.0.2 - globalthis: 1.0.3 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - internal-slot: 1.0.7 - is-array-buffer: 3.0.4 - is-callable: 1.2.7 - is-data-view: 1.0.1 - is-negative-zero: 2.0.3 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 - is-string: 1.0.7 - is-typed-array: 1.1.13 - is-weakref: 1.0.2 - object-inspect: 1.13.1 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 - safe-array-concat: 1.1.2 - safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.9 - string.prototype.trimend: 1.0.8 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.2 - typed-array-byte-length: 1.0.1 - typed-array-byte-offset: 1.0.2 - typed-array-length: 1.0.6 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.15 - es-abstract@1.24.0: dependencies: array-buffer-byte-length: 1.0.2 @@ -8534,10 +7702,6 @@ snapshots: es-array-method-boxes-properly@1.0.0: {} - es-define-property@1.0.0: - dependencies: - get-intrinsic: 1.2.4 - es-define-property@1.0.1: {} es-errors@1.3.0: {} @@ -8549,7 +7713,7 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.24.0 es-errors: 1.3.0 - es-set-tostringtag: 2.0.3 + es-set-tostringtag: 2.1.0 function-bind: 1.1.2 get-intrinsic: 1.3.0 globalthis: 1.0.4 @@ -8561,20 +7725,10 @@ snapshots: iterator.prototype: 1.1.5 safe-array-concat: 1.1.3 - es-object-atoms@1.0.0: - dependencies: - es-errors: 1.3.0 - es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 - es-set-tostringtag@2.0.3: - dependencies: - get-intrinsic: 1.3.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - es-set-tostringtag@2.1.0: dependencies: es-errors: 1.3.0 @@ -8582,25 +7736,15 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 - es-shim-unscopables@1.0.2: + es-shim-unscopables@1.1.0: dependencies: hasown: 2.0.2 - es-to-primitive@1.2.1: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - es-to-primitive@1.3.0: dependencies: is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - - escalade@3.1.1: {} - - escalade@3.1.2: {} + is-date-object: 1.1.0 + is-symbol: 1.1.1 escalade@3.2.0: {} @@ -8624,55 +7768,55 @@ snapshots: lodash.get: 4.4.2 lodash.zip: 4.2.0 - eslint-compat-utils@0.5.1(eslint@9.29.0(jiti@2.4.2)): + eslint-compat-utils@0.5.1(eslint@9.33.0(jiti@2.5.1)): dependencies: - eslint: 9.29.0(jiti@2.4.2) + eslint: 9.33.0(jiti@2.5.1) semver: 7.7.2 - eslint-compat-utils@0.6.5(eslint@9.29.0(jiti@2.4.2)): + eslint-compat-utils@0.6.5(eslint@9.33.0(jiti@2.5.1)): dependencies: - eslint: 9.29.0(jiti@2.4.2) + eslint: 9.33.0(jiti@2.5.1) semver: 7.7.2 - eslint-config-canonical@44.9.5(@types/eslint@9.6.1)(@types/node@24.0.3)(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): - dependencies: - '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.0.3)(eslint@9.29.0(jiti@2.4.2))(graphql@16.11.0)(typescript@5.8.3) - '@next/eslint-plugin-next': 15.3.3 - '@stylistic/eslint-plugin': 4.4.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/eslint-plugin': 8.32.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/parser': 8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - '@vitest/eslint-plugin': 1.2.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.29.0(jiti@2.4.2) - eslint-config-prettier: 10.1.5(eslint@9.29.0(jiti@2.4.2)) - eslint-import-resolver-typescript: 4.4.2(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) - eslint-plugin-ava: 15.0.1(eslint@9.29.0(jiti@2.4.2)) - eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - eslint-plugin-eslint-comments: 3.2.0(eslint@9.29.0(jiti@2.4.2)) - eslint-plugin-fp: 2.3.0(eslint@9.29.0(jiti@2.4.2)) - eslint-plugin-functional: 9.0.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - eslint-plugin-import: eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) - eslint-plugin-jest: 28.12.0(@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - eslint-plugin-jsdoc: 50.6.17(eslint@9.29.0(jiti@2.4.2)) - eslint-plugin-jsonc: 2.20.1(eslint@9.29.0(jiti@2.4.2)) - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.29.0(jiti@2.4.2)) - eslint-plugin-lodash: 8.0.0(eslint@9.29.0(jiti@2.4.2)) - eslint-plugin-mocha: 10.5.0(eslint@9.29.0(jiti@2.4.2)) + eslint-config-canonical@44.9.9(@types/eslint@9.6.1)(@types/node@24.2.1)(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2): + dependencies: + '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.2.1)(eslint@9.33.0(jiti@2.5.1))(graphql@16.11.0)(typescript@5.9.2) + '@next/eslint-plugin-next': 15.4.6 + '@stylistic/eslint-plugin': 4.4.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/eslint-plugin': 8.39.1(@typescript-eslint/parser@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/parser': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + '@vitest/eslint-plugin': 1.3.4(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.33.0(jiti@2.5.1) + eslint-config-prettier: 10.1.8(eslint@9.33.0(jiti@2.5.1)) + eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1)) + eslint-plugin-ava: 15.1.0(eslint@9.33.0(jiti@2.5.1)) + eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + eslint-plugin-eslint-comments: 3.2.0(eslint@9.33.0(jiti@2.5.1)) + eslint-plugin-fp: 2.3.0(eslint@9.33.0(jiti@2.5.1)) + eslint-plugin-functional: 9.0.2(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)) + eslint-plugin-jest: 28.14.0(@typescript-eslint/eslint-plugin@8.39.1(@typescript-eslint/parser@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + eslint-plugin-jsdoc: 50.8.0(eslint@9.33.0(jiti@2.5.1)) + eslint-plugin-jsonc: 2.20.1(eslint@9.33.0(jiti@2.5.1)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.33.0(jiti@2.5.1)) + eslint-plugin-lodash: 8.0.0(eslint@9.33.0(jiti@2.5.1)) + eslint-plugin-mocha: 10.5.0(eslint@9.33.0(jiti@2.5.1)) eslint-plugin-modules-newline: 0.0.6 - eslint-plugin-n: 17.18.0(eslint@9.29.0(jiti@2.4.2)) - eslint-plugin-perfectionist: 4.13.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - eslint-plugin-prettier: 5.4.1(@types/eslint@9.6.1)(eslint-config-prettier@10.1.5(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(prettier@3.5.3) - eslint-plugin-promise: 7.2.1(eslint@9.29.0(jiti@2.4.2)) - eslint-plugin-react: 7.37.5(eslint@9.29.0(jiti@2.4.2)) - eslint-plugin-react-hooks: 5.2.0(eslint@9.29.0(jiti@2.4.2)) - eslint-plugin-regexp: 2.7.0(eslint@9.29.0(jiti@2.4.2)) - eslint-plugin-unicorn: 57.0.0(eslint@9.29.0(jiti@2.4.2)) - eslint-plugin-yml: 1.18.0(eslint@9.29.0(jiti@2.4.2)) - eslint-plugin-zod: 1.4.0(eslint@9.29.0(jiti@2.4.2)) - globals: 16.2.0 + eslint-plugin-n: 17.21.3(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + eslint-plugin-perfectionist: 4.15.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + eslint-plugin-prettier: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1))(prettier@3.6.2) + eslint-plugin-promise: 7.2.1(eslint@9.33.0(jiti@2.5.1)) + eslint-plugin-react: 7.37.5(eslint@9.33.0(jiti@2.5.1)) + eslint-plugin-react-hooks: 5.2.0(eslint@9.33.0(jiti@2.5.1)) + eslint-plugin-regexp: 2.10.0(eslint@9.33.0(jiti@2.5.1)) + eslint-plugin-unicorn: 57.0.0(eslint@9.33.0(jiti@2.5.1)) + eslint-plugin-yml: 1.18.0(eslint@9.33.0(jiti@2.5.1)) + eslint-plugin-zod: 1.4.0(eslint@9.33.0(jiti@2.5.1)) + globals: 16.3.0 graphql: 16.11.0 - prettier: 3.5.3 + prettier: 3.6.2 ramda: 0.30.1 - typescript-eslint: 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + typescript-eslint: 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) yaml-eslint-parser: 1.3.0 transitivePeerDependencies: - '@apollo/subgraph' @@ -8695,23 +7839,16 @@ snapshots: - utf-8-validate - vitest - eslint-config-prettier@10.1.5(eslint@9.29.0(jiti@2.4.2)): + eslint-config-prettier@10.1.8(eslint@9.33.0(jiti@2.5.1)): dependencies: - eslint: 9.29.0(jiti@2.4.2) + eslint: 9.33.0(jiti@2.5.1) - eslint-import-context@0.1.6(unrs-resolver@1.7.8): + eslint-import-context@0.1.9(unrs-resolver@1.11.1): dependencies: get-tsconfig: 4.10.1 - stable-hash: 0.0.5 + stable-hash-x: 0.2.0 optionalDependencies: - unrs-resolver: 1.7.8 - - eslint-import-context@0.1.8(unrs-resolver@1.9.0): - dependencies: - get-tsconfig: 4.10.1 - stable-hash-x: 0.1.1 - optionalDependencies: - unrs-resolver: 1.9.0 + unrs-resolver: 1.11.1 eslint-import-resolver-node@0.3.9: dependencies: @@ -8722,60 +7859,60 @@ snapshots: - supports-color optional: true - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.1(supports-color@8.1.1) - eslint: 9.29.0(jiti@2.4.2) + eslint: 9.33.0(jiti@2.5.1) get-tsconfig: 4.10.1 is-bun-module: 2.0.0 stable-hash: 0.0.5 tinyglobby: 0.2.14 - unrs-resolver: 1.9.0 + unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) - eslint-plugin-import-x: 4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)) transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@4.4.2(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)): + eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1)): dependencies: debug: 4.4.1(supports-color@8.1.1) - eslint: 9.29.0(jiti@2.4.2) - eslint-import-context: 0.1.6(unrs-resolver@1.7.8) + eslint: 9.33.0(jiti@2.5.1) + eslint-import-context: 0.1.9(unrs-resolver@1.11.1) get-tsconfig: 4.10.1 is-bun-module: 2.0.0 - stable-hash: 0.0.5 + stable-hash-x: 0.2.0 tinyglobby: 0.2.14 - unrs-resolver: 1.7.8 + unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) - eslint-plugin-import-x: 4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)) transitivePeerDependencies: - supports-color - eslint-json-compat-utils@0.2.1(eslint@9.29.0(jiti@2.4.2))(jsonc-eslint-parser@2.4.0): + eslint-json-compat-utils@0.2.1(eslint@9.33.0(jiti@2.5.1))(jsonc-eslint-parser@2.4.0): dependencies: - eslint: 9.29.0(jiti@2.4.2) + eslint: 9.33.0(jiti@2.5.1) esquery: 1.6.0 jsonc-eslint-parser: 2.4.0 - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.29.0(jiti@2.4.2) + '@typescript-eslint/parser': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.33.0(jiti@2.5.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1)) transitivePeerDependencies: - supports-color - eslint-plugin-ava@15.0.1(eslint@9.29.0(jiti@2.4.2)): + eslint-plugin-ava@15.1.0(eslint@9.33.0(jiti@2.5.1)): dependencies: enhance-visitors: 1.0.0 - eslint: 9.29.0(jiti@2.4.2) - eslint-utils: 3.0.0(eslint@9.29.0(jiti@2.4.2)) + eslint: 9.33.0(jiti@2.5.1) + eslint-utils: 3.0.0(eslint@9.33.0(jiti@2.5.1)) espree: 9.6.1 espurify: 2.1.1 import-modules: 2.1.0 @@ -8783,14 +7920,14 @@ snapshots: pkg-dir: 5.0.0 resolve-from: 5.0.0 - eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): + eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/utils': 8.33.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - array-includes: 3.1.8 + '@typescript-eslint/utils': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + array-includes: 3.1.9 debug: 4.4.1(supports-color@8.1.1) doctrine: 3.0.0 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1)) is-get-set-prop: 1.0.0 is-js-type: 2.0.0 is-obj-prop: 1.0.0 @@ -8810,77 +7947,77 @@ snapshots: - supports-color - typescript - eslint-plugin-es-x@7.8.0(eslint@9.29.0(jiti@2.4.2)): + eslint-plugin-es-x@7.8.0(eslint@9.33.0(jiti@2.5.1)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1)) '@eslint-community/regexpp': 4.12.1 - eslint: 9.29.0(jiti@2.4.2) - eslint-compat-utils: 0.5.1(eslint@9.29.0(jiti@2.4.2)) + eslint: 9.33.0(jiti@2.5.1) + eslint-compat-utils: 0.5.1(eslint@9.33.0(jiti@2.5.1)) - eslint-plugin-eslint-comments@3.2.0(eslint@9.29.0(jiti@2.4.2)): + eslint-plugin-eslint-comments@3.2.0(eslint@9.33.0(jiti@2.5.1)): dependencies: escape-string-regexp: 1.0.5 - eslint: 9.29.0(jiti@2.4.2) + eslint: 9.33.0(jiti@2.5.1) ignore: 5.3.2 - eslint-plugin-fp@2.3.0(eslint@9.29.0(jiti@2.4.2)): + eslint-plugin-fp@2.3.0(eslint@9.33.0(jiti@2.5.1)): dependencies: create-eslint-index: 1.0.0 - eslint: 9.29.0(jiti@2.4.2) + eslint: 9.33.0(jiti@2.5.1) eslint-ast-utils: 1.1.0 lodash: 4.17.21 req-all: 0.1.0 - eslint-plugin-functional@9.0.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): + eslint-plugin-functional@9.0.2(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/utils': 8.33.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) deepmerge-ts: 7.1.5 escape-string-regexp: 5.0.0 - eslint: 9.29.0(jiti@2.4.2) - is-immutable-type: 5.0.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - ts-api-utils: 2.1.0(typescript@5.8.3) - ts-declaration-location: 1.0.7(typescript@5.8.3) + eslint: 9.33.0(jiti@2.5.1) + is-immutable-type: 5.0.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + ts-api-utils: 2.1.0(typescript@5.9.2) + ts-declaration-location: 1.0.7(typescript@5.9.2) optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@2.4.2)): + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)): dependencies: - '@typescript-eslint/types': 8.34.1 + '@typescript-eslint/types': 8.39.1 comment-parser: 1.4.1 debug: 4.4.1(supports-color@8.1.1) - eslint: 9.29.0(jiti@2.4.2) - eslint-import-context: 0.1.8(unrs-resolver@1.9.0) + eslint: 9.33.0(jiti@2.5.1) + eslint-import-context: 0.1.9(unrs-resolver@1.11.1) is-glob: 4.0.3 minimatch: 10.0.3 semver: 7.7.2 - stable-hash-x: 0.1.1 - unrs-resolver: 1.9.0 + stable-hash-x: 0.2.0 + unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-jest@28.12.0(@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): + eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.39.1(@typescript-eslint/parser@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/utils': 8.33.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.29.0(jiti@2.4.2) + '@typescript-eslint/utils': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.33.0(jiti@2.5.1) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.32.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/eslint-plugin': 8.39.1(@typescript-eslint/parser@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-jsdoc@50.6.17(eslint@9.29.0(jiti@2.4.2)): + eslint-plugin-jsdoc@50.8.0(eslint@9.33.0(jiti@2.5.1)): dependencies: '@es-joy/jsdoccomment': 0.50.2 are-docs-informative: 0.0.2 comment-parser: 1.4.1 debug: 4.4.1(supports-color@8.1.1) escape-string-regexp: 4.0.0 - eslint: 9.29.0(jiti@2.4.2) + eslint: 9.33.0(jiti@2.5.1) espree: 10.4.0 esquery: 1.6.0 parse-imports-exports: 0.2.4 @@ -8889,48 +8026,48 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-jsonc@2.20.1(eslint@9.29.0(jiti@2.4.2)): + eslint-plugin-jsonc@2.20.1(eslint@9.33.0(jiti@2.5.1)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) - eslint: 9.29.0(jiti@2.4.2) - eslint-compat-utils: 0.6.5(eslint@9.29.0(jiti@2.4.2)) - eslint-json-compat-utils: 0.2.1(eslint@9.29.0(jiti@2.4.2))(jsonc-eslint-parser@2.4.0) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1)) + eslint: 9.33.0(jiti@2.5.1) + eslint-compat-utils: 0.6.5(eslint@9.33.0(jiti@2.5.1)) + eslint-json-compat-utils: 0.2.1(eslint@9.33.0(jiti@2.5.1))(jsonc-eslint-parser@2.4.0) espree: 10.4.0 graphemer: 1.4.0 jsonc-eslint-parser: 2.4.0 natural-compare: 1.4.0 - synckit: 0.6.2 + synckit: 0.11.11 transitivePeerDependencies: - '@eslint/json' - eslint-plugin-jsx-a11y@6.10.2(eslint@9.29.0(jiti@2.4.2)): + eslint-plugin-jsx-a11y@6.10.2(eslint@9.33.0(jiti@2.5.1)): dependencies: aria-query: 5.3.2 - array-includes: 3.1.8 - array.prototype.flatmap: 1.3.2 + array-includes: 3.1.9 + array.prototype.flatmap: 1.3.3 ast-types-flow: 0.0.8 axe-core: 4.10.3 axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 9.29.0(jiti@2.4.2) + eslint: 9.33.0(jiti@2.5.1) hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 minimatch: 3.1.2 object.fromentries: 2.0.8 - safe-regex-test: 1.0.3 + safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 - eslint-plugin-lodash@8.0.0(eslint@9.29.0(jiti@2.4.2)): + eslint-plugin-lodash@8.0.0(eslint@9.33.0(jiti@2.5.1)): dependencies: - eslint: 9.29.0(jiti@2.4.2) + eslint: 9.33.0(jiti@2.5.1) lodash: 4.17.21 - eslint-plugin-mocha@10.5.0(eslint@9.29.0(jiti@2.4.2)): + eslint-plugin-mocha@10.5.0(eslint@9.33.0(jiti@2.5.1)): dependencies: - eslint: 9.29.0(jiti@2.4.2) - eslint-utils: 3.0.0(eslint@9.29.0(jiti@2.4.2)) + eslint: 9.33.0(jiti@2.5.1) + eslint-utils: 3.0.0(eslint@9.33.0(jiti@2.5.1)) globals: 13.24.0 rambda: 7.5.0 @@ -8938,56 +8075,59 @@ snapshots: dependencies: requireindex: 1.1.0 - eslint-plugin-n@17.18.0(eslint@9.29.0(jiti@2.4.2)): + eslint-plugin-n@17.21.3(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) - enhanced-resolve: 5.18.1 - eslint: 9.29.0(jiti@2.4.2) - eslint-plugin-es-x: 7.8.0(eslint@9.29.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1)) + enhanced-resolve: 5.18.3 + eslint: 9.33.0(jiti@2.5.1) + eslint-plugin-es-x: 7.8.0(eslint@9.33.0(jiti@2.5.1)) get-tsconfig: 4.10.1 globals: 15.15.0 + globrex: 0.1.2 ignore: 5.3.2 - minimatch: 9.0.5 semver: 7.7.2 + ts-declaration-location: 1.0.7(typescript@5.9.2) + transitivePeerDependencies: + - typescript - eslint-plugin-perfectionist@4.13.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): + eslint-plugin-perfectionist@4.15.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/types': 8.34.1 - '@typescript-eslint/utils': 8.33.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.29.0(jiti@2.4.2) + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/utils': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.33.0(jiti@2.5.1) natural-orderby: 5.0.0 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-prettier@5.4.1(@types/eslint@9.6.1)(eslint-config-prettier@10.1.5(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(prettier@3.5.3): + eslint-plugin-prettier@5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1))(prettier@3.6.2): dependencies: - eslint: 9.29.0(jiti@2.4.2) - prettier: 3.5.3 + eslint: 9.33.0(jiti@2.5.1) + prettier: 3.6.2 prettier-linter-helpers: 1.0.0 - synckit: 0.11.8 + synckit: 0.11.11 optionalDependencies: '@types/eslint': 9.6.1 - eslint-config-prettier: 10.1.5(eslint@9.29.0(jiti@2.4.2)) + eslint-config-prettier: 10.1.8(eslint@9.33.0(jiti@2.5.1)) - eslint-plugin-promise@7.2.1(eslint@9.29.0(jiti@2.4.2)): + eslint-plugin-promise@7.2.1(eslint@9.33.0(jiti@2.5.1)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) - eslint: 9.29.0(jiti@2.4.2) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1)) + eslint: 9.33.0(jiti@2.5.1) - eslint-plugin-react-hooks@5.2.0(eslint@9.29.0(jiti@2.4.2)): + eslint-plugin-react-hooks@5.2.0(eslint@9.33.0(jiti@2.5.1)): dependencies: - eslint: 9.29.0(jiti@2.4.2) + eslint: 9.33.0(jiti@2.5.1) - eslint-plugin-react@7.37.5(eslint@9.29.0(jiti@2.4.2)): + eslint-plugin-react@7.37.5(eslint@9.33.0(jiti@2.5.1)): dependencies: - array-includes: 3.1.8 + array-includes: 3.1.9 array.prototype.findlast: 1.2.5 array.prototype.flatmap: 1.3.3 array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.1 - eslint: 9.29.0(jiti@2.4.2) + eslint: 9.33.0(jiti@2.5.1) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -9001,25 +8141,25 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-regexp@2.7.0(eslint@9.29.0(jiti@2.4.2)): + eslint-plugin-regexp@2.10.0(eslint@9.33.0(jiti@2.5.1)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1)) '@eslint-community/regexpp': 4.12.1 comment-parser: 1.4.1 - eslint: 9.29.0(jiti@2.4.2) - jsdoc-type-pratt-parser: 4.1.0 + eslint: 9.33.0(jiti@2.5.1) + jsdoc-type-pratt-parser: 4.8.0 refa: 0.12.1 regexp-ast-analysis: 0.7.1 scslre: 0.3.0 - eslint-plugin-unicorn@57.0.0(eslint@9.29.0(jiti@2.4.2)): + eslint-plugin-unicorn@57.0.0(eslint@9.33.0(jiti@2.5.1)): dependencies: '@babel/helper-validator-identifier': 7.27.1 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) - ci-info: 4.2.0 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1)) + ci-info: 4.3.0 clean-regexp: 1.0.0 - core-js-compat: 3.42.0 - eslint: 9.29.0(jiti@2.4.2) + core-js-compat: 3.45.0 + eslint: 9.33.0(jiti@2.5.1) esquery: 1.6.0 globals: 15.15.0 indent-string: 5.0.0 @@ -9032,20 +8172,20 @@ snapshots: semver: 7.7.2 strip-indent: 4.0.0 - eslint-plugin-yml@1.18.0(eslint@9.29.0(jiti@2.4.2)): + eslint-plugin-yml@1.18.0(eslint@9.33.0(jiti@2.5.1)): dependencies: debug: 4.4.1(supports-color@8.1.1) escape-string-regexp: 4.0.0 - eslint: 9.29.0(jiti@2.4.2) - eslint-compat-utils: 0.6.5(eslint@9.29.0(jiti@2.4.2)) + eslint: 9.33.0(jiti@2.5.1) + eslint-compat-utils: 0.6.5(eslint@9.33.0(jiti@2.5.1)) natural-compare: 1.4.0 yaml-eslint-parser: 1.3.0 transitivePeerDependencies: - supports-color - eslint-plugin-zod@1.4.0(eslint@9.29.0(jiti@2.4.2)): + eslint-plugin-zod@1.4.0(eslint@9.33.0(jiti@2.5.1)): dependencies: - eslint: 9.29.0(jiti@2.4.2) + eslint: 9.33.0(jiti@2.5.1) eslint-scope@5.1.1: dependencies: @@ -9062,31 +8202,27 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-utils@3.0.0(eslint@9.29.0(jiti@2.4.2)): + eslint-utils@3.0.0(eslint@9.33.0(jiti@2.5.1)): dependencies: - eslint: 9.29.0(jiti@2.4.2) + eslint: 9.33.0(jiti@2.5.1) eslint-visitor-keys: 2.1.0 eslint-visitor-keys@2.1.0: {} eslint-visitor-keys@3.4.3: {} - eslint-visitor-keys@4.0.0: {} - - eslint-visitor-keys@4.2.0: {} - eslint-visitor-keys@4.2.1: {} - eslint@8.56.0: + eslint@8.57.1: dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@8.56.0) - '@eslint-community/regexpp': 4.11.0 + '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) + '@eslint-community/regexpp': 4.12.1 '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.56.0 - '@humanwhocodes/config-array': 0.11.13 + '@eslint/js': 8.57.1 + '@humanwhocodes/config-array': 0.13.0 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 + '@ungap/structured-clone': 1.3.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 @@ -9104,7 +8240,7 @@ snapshots: glob-parent: 6.0.2 globals: 13.24.0 graphemer: 1.4.0 - ignore: 5.3.1 + ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -9114,22 +8250,22 @@ snapshots: lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.3 + optionator: 0.9.4 strip-ansi: 6.0.1 text-table: 0.2.0 transitivePeerDependencies: - supports-color - eslint@9.29.0(jiti@2.4.2): + eslint@9.33.0(jiti@2.5.1): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1)) '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.20.1 - '@eslint/config-helpers': 0.2.2 - '@eslint/core': 0.14.0 + '@eslint/config-array': 0.21.0 + '@eslint/config-helpers': 0.3.1 + '@eslint/core': 0.15.2 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.29.0 - '@eslint/plugin-kit': 0.3.1 + '@eslint/js': 9.33.0 + '@eslint/plugin-kit': 0.3.5 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 @@ -9156,9 +8292,9 @@ snapshots: lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.3 + optionator: 0.9.4 optionalDependencies: - jiti: 2.4.2 + jiti: 2.5.1 transitivePeerDependencies: - supports-color @@ -9170,8 +8306,8 @@ snapshots: espree@9.6.1: dependencies: - acorn: 8.14.1 - acorn-jsx: 5.3.2(acorn@8.14.1) + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) eslint-visitor-keys: 3.4.3 esprima@4.0.1: {} @@ -9201,41 +8337,11 @@ snapshots: human-signals: 5.0.0 is-stream: 3.0.0 merge-stream: 2.0.0 - npm-run-path: 5.2.0 + npm-run-path: 5.3.0 onetime: 6.0.0 signal-exit: 4.1.0 strip-final-newline: 3.0.0 - execa@9.1.0: - dependencies: - '@sindresorhus/merge-streams': 4.0.0 - cross-spawn: 7.0.6 - figures: 6.1.0 - get-stream: 9.0.1 - human-signals: 7.0.0 - is-plain-obj: 4.1.0 - is-stream: 4.0.1 - npm-run-path: 5.2.0 - pretty-ms: 9.0.0 - signal-exit: 4.1.0 - strip-final-newline: 4.0.0 - yoctocolors: 2.0.2 - - execa@9.3.0: - dependencies: - '@sindresorhus/merge-streams': 4.0.0 - cross-spawn: 7.0.6 - figures: 6.1.0 - get-stream: 9.0.1 - human-signals: 7.0.0 - is-plain-obj: 4.1.0 - is-stream: 4.0.1 - npm-run-path: 5.2.0 - pretty-ms: 9.0.0 - signal-exit: 4.1.0 - strip-final-newline: 4.0.0 - yoctocolors: 2.0.2 - execa@9.6.0: dependencies: '@sindresorhus/merge-streams': 4.0.0 @@ -9272,7 +8378,7 @@ snapshots: merge2: 1.4.1 micromatch: 4.0.8 - fast-glob@3.3.2: + fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 @@ -9284,22 +8390,20 @@ snapshots: fast-levenshtein@2.0.6: {} - fast-printf@1.6.9: - dependencies: - boolean: 3.2.0 + fast-printf@1.6.10: {} - fastq@1.16.0: + fastq@1.19.1: dependencies: - reusify: 1.0.4 + reusify: 1.1.0 - fdir@6.4.5(picomatch@4.0.2): + fdir@6.5.0(picomatch@4.0.3): optionalDependencies: - picomatch: 4.0.2 + picomatch: 4.0.3 fetch-blob@3.2.0: dependencies: node-domexception: 1.0.0 - web-streams-polyfill: 3.2.1 + web-streams-polyfill: 3.3.3 figures@2.0.0: dependencies: @@ -9307,7 +8411,7 @@ snapshots: figures@6.1.0: dependencies: - is-unicode-supported: 2.0.0 + is-unicode-supported: 2.1.0 file-entry-cache@6.0.1: dependencies: @@ -9317,7 +8421,7 @@ snapshots: dependencies: flat-cache: 4.0.1 - filesize@10.1.4: {} + filesize@10.1.6: {} fill-range@7.1.1: dependencies: @@ -9329,7 +8433,7 @@ snapshots: make-dir: 2.1.0 pkg-dir: 3.0.0 - find-up-simple@1.0.0: {} + find-up-simple@1.0.1: {} find-up@2.1.0: dependencies: @@ -9356,32 +8460,23 @@ snapshots: flat-cache@3.2.0: dependencies: - flatted: 3.2.9 + flatted: 3.3.3 keyv: 4.5.4 rimraf: 3.0.2 flat-cache@4.0.1: dependencies: - flatted: 3.2.9 + flatted: 3.3.3 keyv: 4.5.4 flat@5.0.2: {} - flatted@3.2.9: {} - - for-each@0.3.3: - dependencies: - is-callable: 1.2.7 + flatted@3.3.3: {} for-each@0.3.5: dependencies: is-callable: 1.2.7 - foreground-child@3.1.1: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - foreground-child@3.3.1: dependencies: cross-spawn: 7.0.6 @@ -9404,10 +8499,10 @@ snapshots: inherits: 2.0.4 readable-stream: 2.3.8 - fs-extra@11.2.0: + fs-extra@11.3.1: dependencies: graceful-fs: 4.2.11 - jsonfile: 6.1.0 + jsonfile: 6.2.0 universalify: 2.0.1 fs-minipass@2.1.0: @@ -9431,14 +8526,7 @@ snapshots: function-timeout@0.1.1: {} - function-timeout@1.0.1: {} - - function.prototype.name@1.1.6: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - functions-have-names: 1.2.3 + function-timeout@1.0.2: {} function.prototype.name@1.1.8: dependencies: @@ -9455,17 +8543,7 @@ snapshots: get-caller-file@2.0.5: {} - get-east-asian-width@1.2.0: {} - - get-func-name@2.0.2: {} - - get-intrinsic@1.2.4: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 + get-east-asian-width@1.3.0: {} get-intrinsic@1.3.0: dependencies: @@ -9500,12 +8578,6 @@ snapshots: '@sec-ant/readable-stream': 0.4.1 is-stream: 4.0.1 - get-symbol-description@1.0.2: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - get-symbol-description@1.1.0: dependencies: call-bound: 1.0.4 @@ -9518,7 +8590,7 @@ snapshots: get-urls@12.1.0(re2@1.20.9): dependencies: - normalize-url: 8.0.0 + normalize-url: 8.0.2 super-regex: 0.2.0 url-regex-safe: 4.0.0(re2@1.20.9) transitivePeerDependencies: @@ -9528,7 +8600,7 @@ snapshots: dependencies: assert-plus: 1.0.0 - git-log-parser@1.2.0: + git-log-parser@1.2.1: dependencies: argv-formatter: 1.0.0 spawn-error-forwarder: 1.0.0 @@ -9541,14 +8613,14 @@ snapshots: dependencies: bluebird: 3.7.2 deadlink: 1.1.3 - filesize: 10.1.4 + filesize: 10.1.6 get-urls: 12.1.0(re2@1.20.9) gitinfo: 2.4.0 glob: 10.4.5 - jsonfile: 6.1.0 + jsonfile: 6.2.0 lodash: 4.17.21 markdown-contents: 1.0.11 - marked: 13.0.2 + marked: 13.0.3 moment: 2.30.1 stack-trace: 0.0.10 yargs: 17.7.2 @@ -9570,11 +8642,11 @@ snapshots: glob@10.4.5: dependencies: - foreground-child: 3.1.1 - jackspeak: 3.1.2 + foreground-child: 3.3.1 + jackspeak: 3.4.3 minimatch: 9.0.5 minipass: 7.1.2 - package-json-from-dist: 1.0.0 + package-json-from-dist: 1.0.1 path-scurry: 1.11.1 glob@11.0.3: @@ -9583,7 +8655,7 @@ snapshots: jackspeak: 4.1.1 minimatch: 10.0.3 minipass: 7.1.2 - package-json-from-dist: 1.0.0 + package-json-from-dist: 1.0.1 path-scurry: 2.0.0 glob@7.2.3: @@ -9595,8 +8667,6 @@ snapshots: once: 1.4.0 path-is-absolute: 1.0.1 - globals@11.12.0: {} - globals@13.24.0: dependencies: type-fest: 0.20.2 @@ -9605,11 +8675,7 @@ snapshots: globals@15.15.0: {} - globals@16.2.0: {} - - globalthis@1.0.3: - dependencies: - define-properties: 1.2.1 + globals@16.3.0: {} globalthis@1.0.4: dependencies: @@ -9620,23 +8686,21 @@ snapshots: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.3.2 + fast-glob: 3.3.3 ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 - globby@14.0.0: + globby@14.1.0: dependencies: - '@sindresorhus/merge-streams': 1.0.0 - fast-glob: 3.3.2 - ignore: 5.3.2 - path-type: 5.0.0 + '@sindresorhus/merge-streams': 2.3.0 + fast-glob: 3.3.3 + ignore: 7.0.5 + path-type: 6.0.0 slash: 5.1.0 - unicorn-magic: 0.1.0 + unicorn-magic: 0.3.0 - gopd@1.0.1: - dependencies: - get-intrinsic: 1.2.4 + globrex@0.1.2: {} gopd@1.2.0: {} @@ -9646,17 +8710,17 @@ snapshots: graphemer@1.4.0: {} - graphql-config@5.1.5(@types/node@24.0.3)(graphql@16.11.0)(typescript@5.8.3): + graphql-config@5.1.5(@types/node@24.2.1)(graphql@16.11.0)(typescript@5.9.2): dependencies: - '@graphql-tools/graphql-file-loader': 8.0.20(graphql@16.11.0) - '@graphql-tools/json-file-loader': 8.0.18(graphql@16.11.0) - '@graphql-tools/load': 8.1.0(graphql@16.11.0) - '@graphql-tools/merge': 9.0.24(graphql@16.11.0) - '@graphql-tools/url-loader': 8.0.31(@types/node@24.0.3)(graphql@16.11.0) - '@graphql-tools/utils': 10.8.6(graphql@16.11.0) - cosmiconfig: 8.3.6(typescript@5.8.3) + '@graphql-tools/graphql-file-loader': 8.0.22(graphql@16.11.0) + '@graphql-tools/json-file-loader': 8.0.20(graphql@16.11.0) + '@graphql-tools/load': 8.1.2(graphql@16.11.0) + '@graphql-tools/merge': 9.1.1(graphql@16.11.0) + '@graphql-tools/url-loader': 8.0.33(@types/node@24.2.1)(graphql@16.11.0) + '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + cosmiconfig: 8.3.6(typescript@5.9.2) graphql: 16.11.0 - jiti: 2.4.2 + jiti: 2.5.1 minimatch: 9.0.5 string-env-interpolation: 1.0.1 tslib: 2.8.1 @@ -9665,6 +8729,7 @@ snapshots: - '@types/node' - bufferutil - crossws + - supports-color - typescript - uWebSockets.js - utf-8-validate @@ -9674,11 +8739,11 @@ snapshots: arrify: 1.0.1 graphql: 16.11.0 - graphql-ws@6.0.5(graphql@16.11.0)(ws@8.18.2): + graphql-ws@6.0.6(graphql@16.11.0)(ws@8.18.3): dependencies: graphql: 16.11.0 optionalDependencies: - ws: 8.18.2 + ws: 8.18.3 graphql@16.11.0: {} @@ -9689,7 +8754,7 @@ snapshots: source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: 3.17.4 + uglify-js: 3.19.3 har-schema@2.0.0: {} @@ -9698,7 +8763,7 @@ snapshots: ajv: 6.12.6 har-schema: 2.0.0 - has-bigints@1.0.2: {} + has-bigints@1.1.0: {} has-flag@3.0.0: {} @@ -9706,21 +8771,17 @@ snapshots: has-property-descriptors@1.0.2: dependencies: - es-define-property: 1.0.0 - - has-proto@1.0.3: {} + es-define-property: 1.0.1 has-proto@1.2.0: dependencies: dunder-proto: 1.0.1 - has-symbols@1.0.3: {} - has-symbols@1.1.0: {} has-tostringtag@1.0.2: dependencies: - has-symbols: 1.0.3 + has-symbols: 1.1.0 hasown@2.0.2: dependencies: @@ -9736,11 +8797,11 @@ snapshots: hook-std@3.0.0: {} - hosted-git-info@7.0.1: + hosted-git-info@7.0.2: dependencies: lru-cache: 10.4.3 - hosted-git-info@8.0.0: + hosted-git-info@8.1.0: dependencies: lru-cache: 10.4.3 @@ -9758,20 +8819,12 @@ snapshots: http-cache-semantics@4.2.0: optional: true - http-proxy-agent@7.0.0: - dependencies: - agent-base: 7.1.0 - debug: 4.4.1(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color - http-proxy-agent@7.0.2: dependencies: - agent-base: 7.1.3 + agent-base: 7.1.4 debug: 4.4.1(supports-color@8.1.1) transitivePeerDependencies: - supports-color - optional: true http-signature@1.2.0: dependencies: @@ -9779,25 +8832,15 @@ snapshots: jsprim: 1.4.2 sshpk: 1.18.0 - https-proxy-agent@7.0.2: - dependencies: - agent-base: 7.1.0 - debug: 4.4.1(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color - https-proxy-agent@7.0.6: dependencies: - agent-base: 7.1.3 + agent-base: 7.1.4 debug: 4.4.1(supports-color@8.1.1) transitivePeerDependencies: - supports-color - optional: true human-signals@5.0.0: {} - human-signals@7.0.0: {} - human-signals@8.0.1: {} husky@9.1.7: {} @@ -9807,32 +8850,23 @@ snapshots: safer-buffer: 2.1.2 optional: true - ignore@5.3.1: {} - ignore@5.3.2: {} - ignore@7.0.4: {} + ignore@7.0.5: {} - import-fresh@3.3.0: + import-fresh@3.3.1: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - import-from-esm@1.3.3: - dependencies: - debug: 4.4.1(supports-color@8.1.1) - import-meta-resolve: 4.0.0 - transitivePeerDependencies: - - supports-color - import-from-esm@2.0.0: dependencies: debug: 4.4.1(supports-color@8.1.1) - import-meta-resolve: 4.0.0 + import-meta-resolve: 4.1.0 transitivePeerDependencies: - supports-color - import-meta-resolve@4.0.0: {} + import-meta-resolve@4.1.0: {} import-modules@2.1.0: {} @@ -9843,7 +8877,7 @@ snapshots: indent-string@5.0.0: {} - index-to-position@0.1.2: {} + index-to-position@1.1.0: {} inflight@1.0.6: dependencies: @@ -9857,12 +8891,6 @@ snapshots: install-artifact-from-github@1.4.0: optional: true - internal-slot@1.0.7: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.0.6 - internal-slot@1.1.0: dependencies: es-errors: 1.3.0 @@ -9874,19 +8902,11 @@ snapshots: from2: 2.3.0 p-is-promise: 3.0.0 - ip-address@9.0.5: - dependencies: - jsbn: 1.1.0 - sprintf-js: 1.1.3 + ip-address@10.0.1: optional: true ip-regex@4.3.0: {} - is-array-buffer@3.0.4: - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - is-array-buffer@3.0.5: dependencies: call-bind: 1.0.8 @@ -9895,28 +8915,23 @@ snapshots: is-arrayish@0.2.1: {} - is-async-function@2.0.0: + is-async-function@2.1.1: dependencies: + async-function: 1.0.0 + call-bound: 1.0.4 + get-proto: 1.0.1 has-tostringtag: 1.0.2 - - is-bigint@1.0.4: - dependencies: - has-bigints: 1.0.2 + safe-regex-test: 1.1.0 is-bigint@1.1.0: dependencies: - has-bigints: 1.0.2 + has-bigints: 1.1.0 is-binary-path@2.1.0: dependencies: - binary-extensions: 2.2.0 + binary-extensions: 2.3.0 optional: true - is-boolean-object@1.1.2: - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - is-boolean-object@1.2.2: dependencies: call-bound: 1.0.4 @@ -9932,18 +8947,9 @@ snapshots: is-callable@1.2.7: {} - is-core-module@2.13.1: - dependencies: - hasown: 2.0.2 - is-core-module@2.16.1: dependencies: hasown: 2.0.2 - optional: true - - is-data-view@1.0.1: - dependencies: - is-typed-array: 1.1.13 is-data-view@1.0.2: dependencies: @@ -9951,10 +8957,6 @@ snapshots: get-intrinsic: 1.3.0 is-typed-array: 1.1.15 - is-date-object@1.0.5: - dependencies: - has-tostringtag: 1.0.2 - is-date-object@1.1.0: dependencies: call-bound: 1.0.4 @@ -9974,11 +8976,14 @@ snapshots: is-fullwidth-code-point@5.0.0: dependencies: - get-east-asian-width: 1.2.0 + get-east-asian-width: 1.3.0 - is-generator-function@1.0.10: + is-generator-function@1.1.0: dependencies: + call-bound: 1.0.4 + get-proto: 1.0.1 has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 is-get-set-prop@1.0.0: dependencies: @@ -9989,13 +8994,13 @@ snapshots: dependencies: is-extglob: 2.1.1 - is-immutable-type@5.0.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): + is-immutable-type@5.0.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/type-utils': 8.33.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.29.0(jiti@2.4.2) - ts-api-utils: 2.1.0(typescript@5.8.3) - ts-declaration-location: 1.0.7(typescript@5.8.3) - typescript: 5.8.3 + '@typescript-eslint/type-utils': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.33.0(jiti@2.5.1) + ts-api-utils: 2.1.0(typescript@5.9.2) + ts-declaration-location: 1.0.7(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -10014,10 +9019,6 @@ snapshots: is-negative-zero@2.0.3: {} - is-number-object@1.0.7: - dependencies: - has-tostringtag: 1.0.2 - is-number-object@1.1.1: dependencies: call-bound: 1.0.4 @@ -10047,11 +9048,6 @@ snapshots: lowercase-keys: 1.0.1 proto-props: 2.0.0 - is-regex@1.1.4: - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - is-regex@1.2.1: dependencies: call-bound: 1.0.4 @@ -10063,10 +9059,6 @@ snapshots: is-set@2.0.3: {} - is-shared-array-buffer@1.0.3: - dependencies: - call-bind: 1.0.7 - is-shared-array-buffer@1.0.4: dependencies: call-bound: 1.0.4 @@ -10075,29 +9067,17 @@ snapshots: is-stream@4.0.1: {} - is-string@1.0.7: - dependencies: - has-tostringtag: 1.0.2 - is-string@1.1.1: dependencies: call-bound: 1.0.4 has-tostringtag: 1.0.2 - is-symbol@1.0.4: - dependencies: - has-symbols: 1.0.3 - is-symbol@1.1.1: dependencies: call-bound: 1.0.4 has-symbols: 1.1.0 safe-regex-test: 1.1.0 - is-typed-array@1.1.13: - dependencies: - which-typed-array: 1.1.15 - is-typed-array@1.1.15: dependencies: which-typed-array: 1.1.19 @@ -10106,14 +9086,10 @@ snapshots: is-unicode-supported@0.1.0: {} - is-unicode-supported@2.0.0: {} + is-unicode-supported@2.1.0: {} is-weakmap@2.0.2: {} - is-weakref@1.0.2: - dependencies: - call-bind: 1.0.7 - is-weakref@1.1.1: dependencies: call-bound: 1.0.4 @@ -10138,13 +9114,13 @@ snapshots: isobject@3.0.1: {} - isomorphic-ws@5.0.0(ws@8.18.2): + isomorphic-ws@5.0.0(ws@8.18.3): dependencies: - ws: 8.18.2 + ws: 8.18.3 isstream@0.1.2: {} - issue-parser@7.0.0: + issue-parser@7.0.1: dependencies: lodash.capitalize: 4.2.1 lodash.escaperegexp: 4.1.2 @@ -10156,8 +9132,8 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: - '@babel/core': 7.27.4 - '@babel/parser': 7.24.7 + '@babel/core': 7.28.3 + '@babel/parser': 7.28.3 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.7.2 @@ -10170,7 +9146,7 @@ snapshots: make-dir: 4.0.0 supports-color: 7.2.0 - istanbul-reports@3.1.6: + istanbul-reports@3.1.7: dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 @@ -10178,13 +9154,13 @@ snapshots: iterator.prototype@1.1.5: dependencies: define-data-property: 1.1.4 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 get-proto: 1.0.1 has-symbols: 1.1.0 set-function-name: 2.0.2 - jackspeak@3.1.2: + jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: @@ -10196,7 +9172,7 @@ snapshots: java-properties@1.0.2: {} - jiti@2.4.2: {} + jiti@2.5.1: {} js-tokens@4.0.0: {} @@ -10213,13 +9189,12 @@ snapshots: jsbn@0.1.1: {} - jsbn@1.1.0: - optional: true - jsdoc-type-pratt-parser@4.0.0: {} jsdoc-type-pratt-parser@4.1.0: {} + jsdoc-type-pratt-parser@4.8.0: {} + jsdom@6.5.1: dependencies: acorn: 2.7.0 @@ -10239,8 +9214,6 @@ snapshots: xmlhttprequest: 1.8.0 xtend: 4.0.2 - jsesc@0.5.0: {} - jsesc@3.0.2: {} jsesc@3.1.0: {} @@ -10263,12 +9236,12 @@ snapshots: jsonc-eslint-parser@2.4.0: dependencies: - acorn: 8.14.1 + acorn: 8.15.0 eslint-visitor-keys: 3.4.3 espree: 9.6.1 semver: 7.7.2 - jsonfile@6.1.0: + jsonfile@6.2.0: dependencies: universalify: 2.0.1 optionalDependencies: @@ -10283,10 +9256,10 @@ snapshots: jsx-ast-utils@3.3.5: dependencies: - array-includes: 3.1.8 - array.prototype.flat: 1.3.2 - object.assign: 4.1.5 - object.values: 1.2.0 + array-includes: 3.1.9 + array.prototype.flat: 1.3.3 + object.assign: 4.1.7 + object.values: 1.2.1 keyv@4.5.4: dependencies: @@ -10294,11 +9267,11 @@ snapshots: kind-of@6.0.3: {} - language-subtag-registry@0.3.22: {} + language-subtag-registry@0.3.23: {} language-tags@1.0.9: dependencies: - language-subtag-registry: 0.3.22 + language-subtag-registry: 0.3.23 levn@0.3.0: dependencies: @@ -10318,18 +9291,18 @@ snapshots: lines-and-columns@1.2.4: {} - lint-staged@16.1.2: + lint-staged@16.1.5: dependencies: - chalk: 5.4.1 + chalk: 5.5.0 commander: 14.0.0 debug: 4.4.1(supports-color@8.1.1) lilconfig: 3.1.3 - listr2: 8.3.3 + listr2: 9.0.1 micromatch: 4.0.8 nano-spawn: 1.0.2 pidtree: 0.6.0 string-argv: 0.3.2 - yaml: 2.8.0 + yaml: 2.8.1 transitivePeerDependencies: - supports-color @@ -10342,6 +9315,15 @@ snapshots: rfdc: 1.4.1 wrap-ansi: 9.0.0 + listr2@9.0.1: + dependencies: + cli-truncate: 4.0.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 6.1.0 + rfdc: 1.4.1 + wrap-ansi: 9.0.0 + load-json-file@4.0.0: dependencies: graceful-fs: 4.2.11 @@ -10387,6 +9369,8 @@ snapshots: lodash.merge@4.6.2: {} + lodash.sortby@4.7.0: {} + lodash.uniqby@4.7.0: {} lodash.zip@4.2.0: {} @@ -10410,9 +9394,11 @@ snapshots: dependencies: js-tokens: 4.0.0 - loupe@3.1.1: + loupe@3.2.0: {} + + lower-case@2.0.2: dependencies: - get-func-name: 2.0.2 + tslib: 2.8.1 lowercase-keys@1.0.1: {} @@ -10460,14 +9446,14 @@ snapshots: dependencies: ansi-escapes: 7.0.0 ansi-regex: 6.1.0 - chalk: 5.4.1 + chalk: 5.5.0 cli-highlight: 2.1.11 cli-table3: 0.6.5 marked: 15.0.12 node-emoji: 2.2.0 supports-hyperlinks: 3.2.0 - marked@13.0.2: {} + marked@13.0.3: {} marked@15.0.12: {} @@ -10479,9 +9465,9 @@ snapshots: merge2@1.4.1: {} - meros@1.3.0(@types/node@24.0.3): + meros@1.3.1(@types/node@24.2.1): optionalDependencies: - '@types/node': 24.0.3 + '@types/node': 24.2.1 micro-spelling-correcter@1.1.1: {} @@ -10496,7 +9482,7 @@ snapshots: dependencies: mime-db: 1.52.0 - mime@4.0.1: {} + mime@4.0.7: {} mimic-fn@4.0.0: {} @@ -10510,19 +9496,19 @@ snapshots: minimatch@3.0.5: dependencies: - brace-expansion: 1.1.11 + brace-expansion: 1.1.12 minimatch@3.1.2: dependencies: - brace-expansion: 1.1.11 + brace-expansion: 1.1.12 minimatch@9.0.3: dependencies: - brace-expansion: 2.0.1 + brace-expansion: 2.0.2 minimatch@9.0.5: dependencies: - brace-expansion: 2.0.1 + brace-expansion: 2.0.2 minimist@1.2.8: {} @@ -10574,7 +9560,7 @@ snapshots: mkdirp@1.0.4: optional: true - mocha@11.7.0: + mocha@11.7.1: dependencies: browser-stdout: 1.3.1 chokidar: 4.0.3 @@ -10592,7 +9578,7 @@ snapshots: serialize-javascript: 6.0.2 strip-json-comments: 3.1.1 supports-color: 8.1.1 - workerpool: 9.3.2 + workerpool: 9.3.3 yargs: 17.7.2 yargs-parser: 21.1.1 yargs-unparser: 2.0.0 @@ -10607,12 +9593,12 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 - nan@2.22.2: + nan@2.23.0: optional: true nano-spawn@1.0.2: {} - napi-postinstall@0.2.4: {} + napi-postinstall@0.3.3: {} natural-compare@1.4.0: {} @@ -10625,6 +9611,11 @@ snapshots: nerf-dart@1.0.0: {} + no-case@3.0.4: + dependencies: + lower-case: 2.0.2 + tslib: 2.8.1 + node-domexception@1.0.0: {} node-emoji@2.2.0: @@ -10668,10 +9659,9 @@ snapshots: abbrev: 2.0.0 optional: true - normalize-package-data@6.0.0: + normalize-package-data@6.0.2: dependencies: - hosted-git-info: 7.0.1 - is-core-module: 2.13.1 + hosted-git-info: 7.0.2 semver: 7.7.2 validate-npm-package-license: 3.0.4 @@ -10682,9 +9672,9 @@ snapshots: normalize-path@3.0.0: optional: true - normalize-url@8.0.0: {} + normalize-url@8.0.2: {} - npm-run-path@5.2.0: + npm-run-path@5.3.0: dependencies: path-key: 4.0.0 @@ -10693,7 +9683,7 @@ snapshots: path-key: 4.0.0 unicorn-magic: 0.3.0 - npm@10.5.1: {} + npm@10.9.3: {} nwmatcher@1.4.4: {} @@ -10703,19 +9693,10 @@ snapshots: object-assign@4.1.1: {} - object-inspect@1.13.1: {} - object-inspect@1.13.4: {} object-keys@1.1.1: {} - object.assign@4.1.5: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 - object.assign@4.1.7: dependencies: call-bind: 1.0.8 @@ -10734,33 +9715,27 @@ snapshots: object.fromentries@2.0.8: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 + es-abstract: 1.24.0 + es-object-atoms: 1.1.1 object.getownpropertydescriptors@2.1.8: dependencies: - array.prototype.reduce: 1.0.7 - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - gopd: 1.0.1 - safe-array-concat: 1.1.2 - - object.values@1.2.0: - dependencies: - call-bind: 1.0.7 + array.prototype.reduce: 1.0.8 + call-bind: 1.0.8 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-abstract: 1.24.0 + es-object-atoms: 1.1.1 + gopd: 1.2.0 + safe-array-concat: 1.1.3 object.values@1.2.1: dependencies: call-bind: 1.0.8 call-bound: 1.0.4 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 once@1.4.0: dependencies: @@ -10777,16 +9752,16 @@ snapshots: open-editor@5.1.0: dependencies: env-editor: 1.1.0 - execa: 9.3.0 + execa: 9.6.0 line-column-path: 3.0.0 - open: 10.1.0 + open: 10.2.0 - open@10.1.0: + open@10.2.0: dependencies: default-browser: 5.2.1 define-lazy-prop: 3.0.0 is-inside-container: 1.0.0 - is-wsl: 3.1.0 + wsl-utils: 0.1.0 optionator@0.8.3: dependencies: @@ -10797,14 +9772,14 @@ snapshots: type-check: 0.3.2 word-wrap: 1.2.5 - optionator@0.9.3: + optionator@0.9.4: dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 + word-wrap: 1.2.5 own-keys@1.0.1: dependencies: @@ -10816,7 +9791,7 @@ snapshots: p-filter@4.1.0: dependencies: - p-map: 7.0.1 + p-map: 7.0.3 p-is-promise@3.0.0: {} @@ -10853,7 +9828,7 @@ snapshots: aggregate-error: 3.1.0 optional: true - p-map@7.0.1: {} + p-map@7.0.3: {} p-reduce@3.0.0: {} @@ -10861,7 +9836,7 @@ snapshots: p-try@2.2.0: {} - package-json-from-dist@1.0.0: {} + package-json-from-dist@1.0.1: {} parent-module@1.0.1: dependencies: @@ -10878,16 +9853,16 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.27.1 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - parse-json@8.1.0: + parse-json@8.3.0: dependencies: - '@babel/code-frame': 7.24.7 - index-to-position: 0.1.2 - type-fest: 4.9.0 + '@babel/code-frame': 7.27.1 + index-to-position: 1.1.0 + type-fest: 4.41.0 parse-ms@4.0.0: {} @@ -10929,9 +9904,9 @@ snapshots: path-type@4.0.0: {} - path-type@5.0.0: {} + path-type@6.0.0: {} - pathval@2.0.0: {} + pathval@2.0.1: {} performance-now@2.1.0: {} @@ -10939,7 +9914,7 @@ snapshots: picomatch@2.3.1: {} - picomatch@4.0.2: {} + picomatch@4.0.3: {} pidtree@0.6.0: {} @@ -10947,7 +9922,7 @@ snapshots: pify@4.0.1: {} - pirates@4.0.6: {} + pirates@4.0.7: {} pkg-conf@2.1.0: dependencies: @@ -10964,7 +9939,7 @@ snapshots: pluralize@8.0.0: {} - possible-typed-array-names@1.0.0: {} + possible-typed-array-names@1.1.0: {} prelude-ls@1.1.2: {} @@ -10974,11 +9949,7 @@ snapshots: dependencies: fast-diff: 1.3.0 - prettier@3.5.3: {} - - pretty-ms@9.0.0: - dependencies: - parse-ms: 4.0.0 + prettier@3.6.2: {} pretty-ms@9.2.0: dependencies: @@ -11005,7 +9976,9 @@ snapshots: proto-props@2.0.0: {} - psl@1.9.0: {} + psl@1.15.0: + dependencies: + punycode: 2.3.1 punycode@2.3.1: {} @@ -11033,7 +10006,7 @@ snapshots: re2@1.20.9: dependencies: install-artifact-from-github: 1.4.0 - nan: 2.22.2 + nan: 2.23.0 node-gyp: 10.3.1 transitivePeerDependencies: - supports-color @@ -11043,16 +10016,16 @@ snapshots: read-package-up@11.0.0: dependencies: - find-up-simple: 1.0.0 + find-up-simple: 1.0.1 read-pkg: 9.0.1 - type-fest: 4.9.0 + type-fest: 4.41.0 read-pkg@9.0.1: dependencies: '@types/normalize-package-data': 2.4.4 - normalize-package-data: 6.0.0 - parse-json: 8.1.0 - type-fest: 4.9.0 + normalize-package-data: 6.0.2 + parse-json: 8.3.0 + type-fest: 4.41.0 unicorn-magic: 0.1.0 readable-stream@2.3.8: @@ -11101,10 +10074,6 @@ snapshots: get-proto: 1.0.1 which-builtin-type: 1.2.1 - regenerate-unicode-properties@10.1.1: - dependencies: - regenerate: 1.4.2 - regenerate-unicode-properties@10.2.0: dependencies: regenerate: 1.4.2 @@ -11120,13 +10089,6 @@ snapshots: regexp-tree@0.1.27: {} - regexp.prototype.flags@1.5.2: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-errors: 1.3.0 - set-function-name: 2.0.2 - regexp.prototype.flags@1.5.4: dependencies: call-bind: 1.0.8 @@ -11136,15 +10098,6 @@ snapshots: gopd: 1.2.0 set-function-name: 2.0.2 - regexpu-core@5.3.2: - dependencies: - '@babel/regjsgen': 0.8.0 - regenerate: 1.4.2 - regenerate-unicode-properties: 10.1.1 - regjsparser: 0.9.1 - unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.1.0 - regexpu-core@6.2.0: dependencies: regenerate: 1.4.2 @@ -11152,11 +10105,11 @@ snapshots: regjsgen: 0.8.0 regjsparser: 0.12.0 unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.1.0 + unicode-match-property-value-ecmascript: 2.2.0 - registry-auth-token@5.0.2: + registry-auth-token@5.1.0: dependencies: - '@pnpm/npm-conf': 2.2.2 + '@pnpm/npm-conf': 2.3.1 regjsgen@0.8.0: {} @@ -11164,10 +10117,6 @@ snapshots: dependencies: jsesc: 3.0.2 - regjsparser@0.9.1: - dependencies: - jsesc: 0.5.0 - remove-trailing-separator@1.1.0: {} replace@1.2.2: @@ -11181,7 +10130,7 @@ snapshots: request@2.88.2: dependencies: aws-sign2: 0.7.0 - aws4: 1.12.0 + aws4: 1.13.2 caseless: 0.12.0 combined-stream: 1.0.8 extend: 3.0.2 @@ -11218,17 +10167,10 @@ snapshots: is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - optional: true - - resolve@1.22.8: - dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 resolve@2.0.0-next.5: dependencies: - is-core-module: 2.13.1 + is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -11240,7 +10182,7 @@ snapshots: retry@0.12.0: optional: true - reusify@1.0.4: {} + reusify@1.1.0: {} rfdc@1.4.1: {} @@ -11251,12 +10193,12 @@ snapshots: rimraf@6.0.1: dependencies: glob: 11.0.3 - package-json-from-dist: 1.0.0 + package-json-from-dist: 1.0.1 roarr@7.21.1: dependencies: - fast-printf: 1.6.9 - safe-stable-stringify: 2.4.3 + fast-printf: 1.6.10 + safe-stable-stringify: 2.5.0 semver-compare: 1.0.0 run-applescript@7.0.0: {} @@ -11265,13 +10207,6 @@ snapshots: dependencies: queue-microtask: 1.2.3 - safe-array-concat@1.1.2: - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - isarray: 2.0.5 - safe-array-concat@1.1.3: dependencies: call-bind: 1.0.8 @@ -11289,19 +10224,13 @@ snapshots: es-errors: 1.3.0 isarray: 2.0.5 - safe-regex-test@1.0.3: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-regex: 1.1.4 - safe-regex-test@1.1.0: dependencies: call-bound: 1.0.4 es-errors: 1.3.0 is-regex: 1.2.1 - safe-stable-stringify@2.4.3: {} + safe-stable-stringify@2.5.0: {} safer-buffer@2.1.2: {} @@ -11311,24 +10240,24 @@ snapshots: refa: 0.12.1 regexp-ast-analysis: 0.7.1 - semantic-release@24.2.5(typescript@5.8.3): + semantic-release@24.2.7(typescript@5.9.2): dependencies: - '@semantic-release/commit-analyzer': 13.0.1(semantic-release@24.2.5(typescript@5.8.3)) + '@semantic-release/commit-analyzer': 13.0.1(semantic-release@24.2.7(typescript@5.9.2)) '@semantic-release/error': 4.0.0 - '@semantic-release/github': 11.0.3(semantic-release@24.2.5(typescript@5.8.3)) - '@semantic-release/npm': 12.0.1(semantic-release@24.2.5(typescript@5.8.3)) - '@semantic-release/release-notes-generator': 14.0.1(semantic-release@24.2.5(typescript@5.8.3)) + '@semantic-release/github': 11.0.4(semantic-release@24.2.7(typescript@5.9.2)) + '@semantic-release/npm': 12.0.2(semantic-release@24.2.7(typescript@5.9.2)) + '@semantic-release/release-notes-generator': 14.0.3(semantic-release@24.2.7(typescript@5.9.2)) aggregate-error: 5.0.0 - cosmiconfig: 9.0.0(typescript@5.8.3) + cosmiconfig: 9.0.0(typescript@5.9.2) debug: 4.4.1(supports-color@8.1.1) - env-ci: 11.0.0 - execa: 9.3.0 + env-ci: 11.1.1 + execa: 9.6.0 figures: 6.1.0 find-versions: 6.0.0 get-stream: 6.0.1 - git-log-parser: 1.2.0 + git-log-parser: 1.2.1 hook-std: 3.0.0 - hosted-git-info: 8.0.0 + hosted-git-info: 8.1.0 import-from-esm: 2.0.0 lodash-es: 4.17.21 marked: 15.0.12 @@ -11371,8 +10300,8 @@ snapshots: define-data-property: 1.1.4 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 + get-intrinsic: 1.3.0 + gopd: 1.2.0 has-property-descriptors: 1.0.2 set-function-name@2.0.2: @@ -11418,13 +10347,6 @@ snapshots: object-inspect: 1.13.4 side-channel-map: 1.0.1 - side-channel@1.0.6: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - object-inspect: 1.13.1 - side-channel@1.1.0: dependencies: es-errors: 1.3.0 @@ -11468,16 +10390,16 @@ snapshots: socks-proxy-agent@8.0.5: dependencies: - agent-base: 7.1.3 + agent-base: 7.1.4 debug: 4.4.1(supports-color@8.1.1) - socks: 2.8.5 + socks: 2.8.7 transitivePeerDependencies: - supports-color optional: true - socks@2.8.5: + socks@2.8.7: dependencies: - ip-address: 9.0.5 + ip-address: 10.0.1 smart-buffer: 4.2.0 optional: true @@ -11488,7 +10410,7 @@ snapshots: source-map@0.6.1: {} - source-map@0.7.4: + source-map@0.7.6: optional: true spawn-error-forwarder@1.0.0: {} @@ -11496,21 +10418,21 @@ snapshots: spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.16 + spdx-license-ids: 3.0.22 - spdx-exceptions@2.3.0: {} + spdx-exceptions@2.5.0: {} spdx-expression-parse@3.0.1: dependencies: - spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.16 + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.22 spdx-expression-parse@4.0.0: dependencies: - spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.16 + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.22 - spdx-license-ids@3.0.16: {} + spdx-license-ids@3.0.22: {} split2@1.0.0: dependencies: @@ -11518,9 +10440,6 @@ snapshots: sprintf-js@1.0.3: {} - sprintf-js@1.1.3: - optional: true - sshpk@1.18.0: dependencies: asn1: 0.2.6 @@ -11538,7 +10457,7 @@ snapshots: minipass: 7.1.2 optional: true - stable-hash-x@0.1.1: {} + stable-hash-x@0.2.0: {} stable-hash@0.0.5: {} @@ -11570,17 +10489,17 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 - string-width@7.0.0: + string-width@7.2.0: dependencies: - emoji-regex: 10.3.0 - get-east-asian-width: 1.2.0 + emoji-regex: 10.4.0 + get-east-asian-width: 1.3.0 strip-ansi: 7.1.0 string.prototype.includes@2.0.1: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.24.0 string.prototype.matchall@4.0.12: dependencies: @@ -11589,7 +10508,7 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.24.0 es-errors: 1.3.0 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 gopd: 1.2.0 has-symbols: 1.1.0 @@ -11601,7 +10520,7 @@ snapshots: string.prototype.repeat@1.0.0: dependencies: define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.24.0 string.prototype.trim@1.2.10: dependencies: @@ -11613,19 +10532,6 @@ snapshots: es-object-atoms: 1.1.1 has-property-descriptors: 1.0.2 - string.prototype.trim@1.2.9: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - - string.prototype.trimend@1.0.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - string.prototype.trimend@1.0.9: dependencies: call-bind: 1.0.8 @@ -11635,9 +10541,9 @@ snapshots: string.prototype.trimstart@1.0.8: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 string_decoder@1.1.1: dependencies: @@ -11653,7 +10559,7 @@ snapshots: strip-ansi@7.1.0: dependencies: - ansi-regex: 6.0.1 + ansi-regex: 6.1.0 strip-bom@3.0.0: {} @@ -11677,7 +10583,7 @@ snapshots: super-regex@1.0.0: dependencies: - function-timeout: 1.0.1 + function-timeout: 1.0.2 time-span: 5.1.0 supports-color@5.5.0: @@ -11707,15 +10613,11 @@ snapshots: timeout-signal: 2.0.0 whatwg-mimetype: 4.0.0 - synckit@0.11.8: + synckit@0.11.11: dependencies: - '@pkgr/core': 0.2.4 + '@pkgr/core': 0.2.9 - synckit@0.6.2: - dependencies: - tslib: 2.8.1 - - tapable@2.2.1: {} + tapable@2.2.2: {} tar@6.2.1: dependencies: @@ -11773,12 +10675,10 @@ snapshots: tinyglobby@0.2.14: dependencies: - fdir: 6.4.5(picomatch@4.0.2) - picomatch: 4.0.2 - - tlds@1.248.0: {} + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 - to-fast-properties@2.0.0: {} + tlds@1.259.0: {} to-regex-range@5.0.1: dependencies: @@ -11786,25 +10686,25 @@ snapshots: tough-cookie@2.5.0: dependencies: - psl: 1.9.0 + psl: 1.15.0 punycode: 2.3.1 tr46@0.0.3: {} traverse@0.6.8: {} - ts-api-utils@1.0.3(typescript@5.8.3): + ts-api-utils@1.4.3(typescript@5.9.2): dependencies: - typescript: 5.8.3 + typescript: 5.9.2 - ts-api-utils@2.1.0(typescript@5.8.3): + ts-api-utils@2.1.0(typescript@5.9.2): dependencies: - typescript: 5.8.3 + typescript: 5.9.2 - ts-declaration-location@1.0.7(typescript@5.8.3): + ts-declaration-location@1.0.7(typescript@5.9.2): dependencies: - picomatch: 4.0.2 - typescript: 5.8.3 + picomatch: 4.0.3 + typescript: 5.9.2 tsconfig-paths@4.2.0: dependencies: @@ -11834,13 +10734,7 @@ snapshots: type-fest@2.19.0: {} - type-fest@4.9.0: {} - - typed-array-buffer@1.0.2: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-typed-array: 1.1.13 + type-fest@4.41.0: {} typed-array-buffer@1.0.3: dependencies: @@ -11848,100 +10742,68 @@ snapshots: es-errors: 1.3.0 is-typed-array: 1.1.15 - typed-array-byte-length@1.0.1: - dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - typed-array-byte-length@1.0.3: dependencies: call-bind: 1.0.8 - for-each: 0.3.3 + for-each: 0.3.5 gopd: 1.2.0 has-proto: 1.2.0 is-typed-array: 1.1.15 - typed-array-byte-offset@1.0.2: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - typed-array-byte-offset@1.0.4: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.8 - for-each: 0.3.3 + for-each: 0.3.5 gopd: 1.2.0 has-proto: 1.2.0 is-typed-array: 1.1.15 reflect.getprototypeof: 1.0.10 - typed-array-length@1.0.6: - dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - possible-typed-array-names: 1.0.0 - typed-array-length@1.0.7: dependencies: call-bind: 1.0.8 - for-each: 0.3.3 + for-each: 0.3.5 gopd: 1.2.0 is-typed-array: 1.1.15 - possible-typed-array-names: 1.0.0 + possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): + typescript-eslint@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/parser': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.29.0(jiti@2.4.2) - typescript: 5.8.3 + '@typescript-eslint/eslint-plugin': 8.39.1(@typescript-eslint/parser@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/parser': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.39.1(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.33.0(jiti@2.5.1) + typescript: 5.9.2 transitivePeerDependencies: - supports-color - typescript@5.8.3: {} + typescript@5.9.2: {} - uglify-js@3.17.4: + uglify-js@3.19.3: optional: true - unbox-primitive@1.0.2: - dependencies: - call-bind: 1.0.7 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 - unbox-primitive@1.1.0: dependencies: call-bound: 1.0.4 - has-bigints: 1.0.2 + has-bigints: 1.1.0 has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 - undici-types@7.8.0: {} + undici-types@7.10.0: {} - unicode-canonical-property-names-ecmascript@2.0.0: {} + unicode-canonical-property-names-ecmascript@2.0.1: {} unicode-emoji-modifier-base@1.0.0: {} unicode-match-property-ecmascript@2.0.0: dependencies: - unicode-canonical-property-names-ecmascript: 2.0.0 + unicode-canonical-property-names-ecmascript: 2.0.1 unicode-property-aliases-ecmascript: 2.1.0 - unicode-match-property-value-ecmascript@2.1.0: {} + unicode-match-property-value-ecmascript@2.2.0: {} unicode-property-aliases-ecmascript@2.1.0: {} @@ -11963,7 +10825,7 @@ snapshots: dependencies: crypto-random-string: 4.0.0 - universal-user-agent@7.0.2: {} + universal-user-agent@7.0.3: {} universalify@2.0.1: {} @@ -11971,58 +10833,40 @@ snapshots: dependencies: normalize-path: 2.1.1 - unrs-resolver@1.7.8: + unrs-resolver@1.11.1: dependencies: - napi-postinstall: 0.2.4 - optionalDependencies: - '@unrs/resolver-binding-darwin-arm64': 1.7.8 - '@unrs/resolver-binding-darwin-x64': 1.7.8 - '@unrs/resolver-binding-freebsd-x64': 1.7.8 - '@unrs/resolver-binding-linux-arm-gnueabihf': 1.7.8 - '@unrs/resolver-binding-linux-arm-musleabihf': 1.7.8 - '@unrs/resolver-binding-linux-arm64-gnu': 1.7.8 - '@unrs/resolver-binding-linux-arm64-musl': 1.7.8 - '@unrs/resolver-binding-linux-ppc64-gnu': 1.7.8 - '@unrs/resolver-binding-linux-riscv64-gnu': 1.7.8 - '@unrs/resolver-binding-linux-riscv64-musl': 1.7.8 - '@unrs/resolver-binding-linux-s390x-gnu': 1.7.8 - '@unrs/resolver-binding-linux-x64-gnu': 1.7.8 - '@unrs/resolver-binding-linux-x64-musl': 1.7.8 - '@unrs/resolver-binding-wasm32-wasi': 1.7.8 - '@unrs/resolver-binding-win32-arm64-msvc': 1.7.8 - '@unrs/resolver-binding-win32-ia32-msvc': 1.7.8 - '@unrs/resolver-binding-win32-x64-msvc': 1.7.8 - - unrs-resolver@1.9.0: - dependencies: - napi-postinstall: 0.2.4 + napi-postinstall: 0.3.3 optionalDependencies: - '@unrs/resolver-binding-android-arm-eabi': 1.9.0 - '@unrs/resolver-binding-android-arm64': 1.9.0 - '@unrs/resolver-binding-darwin-arm64': 1.9.0 - '@unrs/resolver-binding-darwin-x64': 1.9.0 - '@unrs/resolver-binding-freebsd-x64': 1.9.0 - '@unrs/resolver-binding-linux-arm-gnueabihf': 1.9.0 - '@unrs/resolver-binding-linux-arm-musleabihf': 1.9.0 - '@unrs/resolver-binding-linux-arm64-gnu': 1.9.0 - '@unrs/resolver-binding-linux-arm64-musl': 1.9.0 - '@unrs/resolver-binding-linux-ppc64-gnu': 1.9.0 - '@unrs/resolver-binding-linux-riscv64-gnu': 1.9.0 - '@unrs/resolver-binding-linux-riscv64-musl': 1.9.0 - '@unrs/resolver-binding-linux-s390x-gnu': 1.9.0 - '@unrs/resolver-binding-linux-x64-gnu': 1.9.0 - '@unrs/resolver-binding-linux-x64-musl': 1.9.0 - '@unrs/resolver-binding-wasm32-wasi': 1.9.0 - '@unrs/resolver-binding-win32-arm64-msvc': 1.9.0 - '@unrs/resolver-binding-win32-ia32-msvc': 1.9.0 - '@unrs/resolver-binding-win32-x64-msvc': 1.9.0 - - update-browserslist-db@1.1.3(browserslist@4.25.0): - dependencies: - browserslist: 4.25.0 + '@unrs/resolver-binding-android-arm-eabi': 1.11.1 + '@unrs/resolver-binding-android-arm64': 1.11.1 + '@unrs/resolver-binding-darwin-arm64': 1.11.1 + '@unrs/resolver-binding-darwin-x64': 1.11.1 + '@unrs/resolver-binding-freebsd-x64': 1.11.1 + '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.1 + '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.1 + '@unrs/resolver-binding-linux-arm64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-arm64-musl': 1.11.1 + '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-riscv64-musl': 1.11.1 + '@unrs/resolver-binding-linux-s390x-gnu': 1.11.1 + '@unrs/resolver-binding-linux-x64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-x64-musl': 1.11.1 + '@unrs/resolver-binding-wasm32-wasi': 1.11.1 + '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1 + '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 + '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 + + update-browserslist-db@1.1.3(browserslist@4.25.2): + dependencies: + browserslist: 4.25.2 escalade: 3.2.0 picocolors: 1.1.1 + upper-case@2.0.2: + dependencies: + tslib: 2.8.1 + uri-js@4.4.1: dependencies: punycode: 2.3.1 @@ -12032,7 +10876,7 @@ snapshots: url-regex-safe@4.0.0(re2@1.20.9): dependencies: ip-regex: 4.3.0 - tlds: 1.248.0 + tlds: 1.259.0 optionalDependencies: re2: 1.20.9 @@ -12044,9 +10888,9 @@ snapshots: uuid@3.4.0: {} - v8-to-istanbul@9.2.0: + v8-to-istanbul@9.3.0: dependencies: - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.30 '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 @@ -12065,7 +10909,7 @@ snapshots: core-util-is: 1.0.2 extsprintf: 1.3.0 - web-streams-polyfill@3.2.1: {} + web-streams-polyfill@3.3.3: {} whatwg-mimetype@4.0.0: {} @@ -12073,14 +10917,6 @@ snapshots: dependencies: tr46: 0.0.3 - which-boxed-primitive@1.0.2: - dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 - which-boxed-primitive@1.1.1: dependencies: is-bigint: 1.1.0 @@ -12094,10 +10930,10 @@ snapshots: call-bound: 1.0.4 function.prototype.name: 1.1.8 has-tostringtag: 1.0.2 - is-async-function: 2.0.0 + is-async-function: 2.1.1 is-date-object: 1.1.0 is-finalizationregistry: 1.1.1 - is-generator-function: 1.0.10 + is-generator-function: 1.1.0 is-regex: 1.2.1 is-weakref: 1.1.1 isarray: 2.0.5 @@ -12114,14 +10950,6 @@ snapshots: which-module@2.0.1: {} - which-typed-array@1.1.15: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.2 - which-typed-array@1.1.19: dependencies: available-typed-arrays: 1.0.7 @@ -12145,7 +10973,7 @@ snapshots: wordwrap@1.0.0: {} - workerpool@9.3.2: {} + workerpool@9.3.3: {} wrap-ansi@6.2.0: dependencies: @@ -12168,12 +10996,16 @@ snapshots: wrap-ansi@9.0.0: dependencies: ansi-styles: 6.2.1 - string-width: 7.0.0 + string-width: 7.2.0 strip-ansi: 7.1.0 wrappy@1.0.2: {} - ws@8.18.2: {} + ws@8.18.3: {} + + wsl-utils@0.1.0: + dependencies: + is-wsl: 3.1.0 xml-name-validator@2.0.1: {} @@ -12193,9 +11025,9 @@ snapshots: yaml-eslint-parser@1.3.0: dependencies: eslint-visitor-keys: 3.4.3 - yaml: 2.8.0 + yaml: 2.8.1 - yaml@2.8.0: {} + yaml@2.8.1: {} yargs-parser@18.1.3: dependencies: @@ -12230,7 +11062,7 @@ snapshots: yargs@16.2.0: dependencies: cliui: 7.0.4 - escalade: 3.1.2 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 @@ -12240,7 +11072,7 @@ snapshots: yargs@17.7.2: dependencies: cliui: 8.0.1 - escalade: 3.1.1 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 @@ -12249,6 +11081,4 @@ snapshots: yocto-queue@0.1.0: {} - yoctocolors@2.0.2: {} - yoctocolors@2.1.1: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 7263746d3..498bde719 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,5 +1,6 @@ ignoredBuiltDependencies: - core-js - core-js-pure + - unrs-resolver shellEmulator: true diff --git a/src/iterateJsdoc.js b/src/iterateJsdoc.js index 803b34819..8b7748d78 100644 --- a/src/iterateJsdoc.js +++ b/src/iterateJsdoc.js @@ -692,9 +692,10 @@ const getUtils = ( (sc.getAncestors ? ( sc.getAncestors(node) - /* c8 ignore next 4 */ + /* c8 ignore next 5 */ ) : ( + // @ts-expect-error ESLint 8 context.getAncestors() )) : []); diff --git a/src/rules/noUndefinedTypes.js b/src/rules/noUndefinedTypes.js index 83205db1e..73b8f06be 100644 --- a/src/rules/noUndefinedTypes.js +++ b/src/rules/noUndefinedTypes.js @@ -375,8 +375,9 @@ export default iterateJsdoc(({ })()) .concat(...getValidRuntimeIdentifiers(node && ( (sourceCode.getScope && - /* c8 ignore next 2 */ + /* c8 ignore next 3 */ sourceCode.getScope(node)) || + // @ts-expect-error ESLint 8 context.getScope() ))) .concat( @@ -503,8 +504,9 @@ export default iterateJsdoc(({ } else if (markVariablesAsUsed && !extraTypes.includes(val)) { if (sourceCode.markVariableAsUsed) { sourceCode.markVariableAsUsed(val); - /* c8 ignore next 3 */ + /* c8 ignore next 4 */ } else { + // @ts-expect-error ESLint 8 context.markVariableAsUsed(val); } } diff --git a/src/rules/requireJsdoc.js b/src/rules/requireJsdoc.js index 34cf36966..23d34254e 100644 --- a/src/rules/requireJsdoc.js +++ b/src/rules/requireJsdoc.js @@ -250,8 +250,9 @@ const isExemptedImplementer = (node, sourceCode, context, settings) => { const interfaceMethodNode = getMethodOnInterface(interfaceName, methodName, node && ( (sourceCode.getScope && - /* c8 ignore next 2 */ + /* c8 ignore next 3 */ sourceCode.getScope(node)) || + // @ts-expect-error ESLint 8 context.getScope() )); if (interfaceMethodNode) { From 3fcd4e8dc0fa8ff826109928a030d35a558e6864 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sat, 16 Aug 2025 07:06:31 +0800 Subject: [PATCH 036/189] chore: update types (#1453) --- package.json | 3 +-- pnpm-lock.yaml | 42 ++++++++++++++++++++---------------------- 2 files changed, 21 insertions(+), 24 deletions(-) diff --git a/package.json b/package.json index 022ac6a2d..d5105d43c 100644 --- a/package.json +++ b/package.json @@ -33,14 +33,13 @@ "@semantic-release/npm": "^12.0.2", "@types/chai": "^5.2.2", "@types/debug": "^4.1.12", - "@types/eslint": "^9.6.1", "@types/espree": "^10.1.0", "@types/esquery": "^1.5.4", "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@types/lodash.defaultsdeep": "^4.6.9", "@types/mocha": "^10.0.10", - "@types/node": "^24.2.1", + "@types/node": "^24.3.0", "@types/semver": "^7.7.0", "@types/spdx-expression-parse": "^3.0.5", "@typescript-eslint/types": "^8.39.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 62f18a08c..28d42162b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -84,9 +84,6 @@ importers: '@types/debug': specifier: ^4.1.12 version: 4.1.12 - '@types/eslint': - specifier: ^9.6.1 - version: 9.6.1 '@types/espree': specifier: ^10.1.0 version: 10.1.0 @@ -106,8 +103,8 @@ importers: specifier: ^10.0.10 version: 10.0.10 '@types/node': - specifier: ^24.2.1 - version: 24.2.1 + specifier: ^24.3.0 + version: 24.3.0 '@types/semver': specifier: ^7.7.0 version: 7.7.0 @@ -143,7 +140,7 @@ importers: version: 9.33.0(jiti@2.5.1) eslint-config-canonical: specifier: ~44.9.9 - version: 44.9.9(@types/eslint@9.6.1)(@types/node@24.2.1)(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + version: 44.9.9(@types/eslint@9.6.1)(@types/node@24.3.0)(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) gitdown: specifier: ^4.1.1 version: 4.1.1(re2@1.20.9) @@ -1242,8 +1239,8 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@24.2.1': - resolution: {integrity: sha512-DRh5K+ka5eJic8CjH7td8QpYEV6Zo10gfRkjHCO3weqZHWDtAaSTFtl4+VMqOJ4N5jcuhZ9/l+yy8rVgw7BQeQ==} + '@types/node@24.3.0': + resolution: {integrity: sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -6089,7 +6086,7 @@ snapshots: '@fastify/busboy@3.1.1': {} - '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.2.1)(eslint@9.33.0(jiti@2.5.1))(graphql@16.11.0)(typescript@5.9.2)': + '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.3.0)(eslint@9.33.0(jiti@2.5.1))(graphql@16.11.0)(typescript@5.9.2)': dependencies: '@graphql-tools/code-file-loader': 8.1.22(graphql@16.11.0) '@graphql-tools/graphql-tag-pluck': 8.3.21(graphql@16.11.0) @@ -6098,7 +6095,7 @@ snapshots: eslint: 9.33.0(jiti@2.5.1) fast-glob: 3.3.3 graphql: 16.11.0 - graphql-config: 5.1.5(@types/node@24.2.1)(graphql@16.11.0)(typescript@5.9.2) + graphql-config: 5.1.5(@types/node@24.3.0)(graphql@16.11.0)(typescript@5.9.2) graphql-depth-limit: 1.1.0(graphql@16.11.0) lodash.lowercase: 4.3.0 transitivePeerDependencies: @@ -6175,7 +6172,7 @@ snapshots: - uWebSockets.js - utf-8-validate - '@graphql-tools/executor-http@1.3.3(@types/node@24.2.1)(graphql@16.11.0)': + '@graphql-tools/executor-http@1.3.3(@types/node@24.3.0)(graphql@16.11.0)': dependencies: '@graphql-hive/signal': 1.0.0 '@graphql-tools/executor-common': 0.0.4(graphql@16.11.0) @@ -6185,7 +6182,7 @@ snapshots: '@whatwg-node/fetch': 0.10.10 '@whatwg-node/promise-helpers': 1.3.2 graphql: 16.11.0 - meros: 1.3.1(@types/node@24.2.1) + meros: 1.3.1(@types/node@24.3.0) tslib: 2.8.1 transitivePeerDependencies: - '@types/node' @@ -6275,10 +6272,10 @@ snapshots: graphql: 16.11.0 tslib: 2.8.1 - '@graphql-tools/url-loader@8.0.33(@types/node@24.2.1)(graphql@16.11.0)': + '@graphql-tools/url-loader@8.0.33(@types/node@24.3.0)(graphql@16.11.0)': dependencies: '@graphql-tools/executor-graphql-ws': 2.0.7(graphql@16.11.0) - '@graphql-tools/executor-http': 1.3.3(@types/node@24.2.1)(graphql@16.11.0) + '@graphql-tools/executor-http': 1.3.3(@types/node@24.3.0)(graphql@16.11.0) '@graphql-tools/executor-legacy-ws': 1.1.19(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) '@graphql-tools/wrap': 10.1.4(graphql@16.11.0) @@ -6638,6 +6635,7 @@ snapshots: dependencies: '@types/estree': 1.0.8 '@types/json-schema': 7.0.15 + optional: true '@types/espree@10.1.0': dependencies: @@ -6664,7 +6662,7 @@ snapshots: '@types/ms@2.1.0': {} - '@types/node@24.2.1': + '@types/node@24.3.0': dependencies: undici-types: 7.10.0 @@ -6676,7 +6674,7 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 24.2.1 + '@types/node': 24.3.0 '@typescript-eslint/eslint-plugin@8.39.1(@typescript-eslint/parser@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: @@ -7778,9 +7776,9 @@ snapshots: eslint: 9.33.0(jiti@2.5.1) semver: 7.7.2 - eslint-config-canonical@44.9.9(@types/eslint@9.6.1)(@types/node@24.2.1)(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2): + eslint-config-canonical@44.9.9(@types/eslint@9.6.1)(@types/node@24.3.0)(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.2.1)(eslint@9.33.0(jiti@2.5.1))(graphql@16.11.0)(typescript@5.9.2) + '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.3.0)(eslint@9.33.0(jiti@2.5.1))(graphql@16.11.0)(typescript@5.9.2) '@next/eslint-plugin-next': 15.4.6 '@stylistic/eslint-plugin': 4.4.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/eslint-plugin': 8.39.1(@typescript-eslint/parser@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) @@ -8710,13 +8708,13 @@ snapshots: graphemer@1.4.0: {} - graphql-config@5.1.5(@types/node@24.2.1)(graphql@16.11.0)(typescript@5.9.2): + graphql-config@5.1.5(@types/node@24.3.0)(graphql@16.11.0)(typescript@5.9.2): dependencies: '@graphql-tools/graphql-file-loader': 8.0.22(graphql@16.11.0) '@graphql-tools/json-file-loader': 8.0.20(graphql@16.11.0) '@graphql-tools/load': 8.1.2(graphql@16.11.0) '@graphql-tools/merge': 9.1.1(graphql@16.11.0) - '@graphql-tools/url-loader': 8.0.33(@types/node@24.2.1)(graphql@16.11.0) + '@graphql-tools/url-loader': 8.0.33(@types/node@24.3.0)(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) cosmiconfig: 8.3.6(typescript@5.9.2) graphql: 16.11.0 @@ -9465,9 +9463,9 @@ snapshots: merge2@1.4.1: {} - meros@1.3.1(@types/node@24.2.1): + meros@1.3.1(@types/node@24.3.0): optionalDependencies: - '@types/node': 24.2.1 + '@types/node': 24.3.0 micro-spelling-correcter@1.1.1: {} From 3bf911c48105a760d1d90a87a817522696eaf8f0 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Wed, 20 Aug 2025 09:03:00 +0800 Subject: [PATCH 037/189] fix(`valid-types`): allow `extends` for namepath; fixes #1455 (#1456) --- src/rules/validTypes.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/rules/validTypes.js b/src/rules/validTypes.js index 3164a5c7f..bf92cad0e 100644 --- a/src/rules/validTypes.js +++ b/src/rules/validTypes.js @@ -11,6 +11,7 @@ const inlineTags = new Set([ ]); const jsdocTypePrattKeywords = new Set([ + 'extends', 'import', 'is', 'readonly', From 3afb15122e244d8826a0449019d036d25b5a34b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josh=20Goldberg=20=E2=9C=A8?= Date: Wed, 27 Aug 2025 12:40:32 -0400 Subject: [PATCH 038/189] docs: correct alphabetization of rules in example config block (#1458) --- .README/README.md | 10 +++++----- README.md | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.README/README.md b/.README/README.md index b3119911a..c934f8ea4 100644 --- a/.README/README.md +++ b/.README/README.md @@ -143,10 +143,10 @@ Finally, enable all of the rules that you would like to use. "jsdoc/check-indentation": 1, "jsdoc/check-line-alignment": 1, "jsdoc/check-param-names": 1, // Recommended - "jsdoc/check-template-names": 1, "jsdoc/check-property-names": 1, // Recommended "jsdoc/check-syntax": 1, "jsdoc/check-tag-names": 1, // Recommended + "jsdoc/check-template-names": 1, "jsdoc/check-types": 1, // Recommended "jsdoc/check-values": 1, // Recommended "jsdoc/empty-tags": 1, // Recommended @@ -169,22 +169,22 @@ Finally, enable all of the rules that you would like to use. "jsdoc/require-file-overview": 1, "jsdoc/require-hyphen-before-param-description": 1, "jsdoc/require-jsdoc": 1, // Recommended - "jsdoc/require-param": 1, // Recommended "jsdoc/require-param-description": 1, // Recommended "jsdoc/require-param-name": 1, // Recommended "jsdoc/require-param-type": 1, // Recommended - "jsdoc/require-property": 1, // Recommended + "jsdoc/require-param": 1, // Recommended "jsdoc/require-property-description": 1, // Recommended "jsdoc/require-property-name": 1, // Recommended "jsdoc/require-property-type": 1, // Recommended - "jsdoc/require-returns": 1, // Recommended + "jsdoc/require-property": 1, // Recommended "jsdoc/require-returns-check": 1, // Recommended "jsdoc/require-returns-description": 1, // Recommended "jsdoc/require-returns-type": 1, // Recommended + "jsdoc/require-returns": 1, // Recommended "jsdoc/require-template": 1, "jsdoc/require-throws": 1, - "jsdoc/require-yields": 1, // Recommended "jsdoc/require-yields-check": 1, // Recommended + "jsdoc/require-yields": 1, // Recommended "jsdoc/sort-tags": 1, "jsdoc/tag-lines": 1, // Recommended "jsdoc/valid-types": 1 // Recommended diff --git a/README.md b/README.md index 6835f072c..a97f41f5f 100644 --- a/README.md +++ b/README.md @@ -167,10 +167,10 @@ Finally, enable all of the rules that you would like to use. "jsdoc/check-indentation": 1, "jsdoc/check-line-alignment": 1, "jsdoc/check-param-names": 1, // Recommended - "jsdoc/check-template-names": 1, "jsdoc/check-property-names": 1, // Recommended "jsdoc/check-syntax": 1, "jsdoc/check-tag-names": 1, // Recommended + "jsdoc/check-template-names": 1, "jsdoc/check-types": 1, // Recommended "jsdoc/check-values": 1, // Recommended "jsdoc/empty-tags": 1, // Recommended @@ -193,22 +193,22 @@ Finally, enable all of the rules that you would like to use. "jsdoc/require-file-overview": 1, "jsdoc/require-hyphen-before-param-description": 1, "jsdoc/require-jsdoc": 1, // Recommended - "jsdoc/require-param": 1, // Recommended "jsdoc/require-param-description": 1, // Recommended "jsdoc/require-param-name": 1, // Recommended "jsdoc/require-param-type": 1, // Recommended - "jsdoc/require-property": 1, // Recommended + "jsdoc/require-param": 1, // Recommended "jsdoc/require-property-description": 1, // Recommended "jsdoc/require-property-name": 1, // Recommended "jsdoc/require-property-type": 1, // Recommended - "jsdoc/require-returns": 1, // Recommended + "jsdoc/require-property": 1, // Recommended "jsdoc/require-returns-check": 1, // Recommended "jsdoc/require-returns-description": 1, // Recommended "jsdoc/require-returns-type": 1, // Recommended + "jsdoc/require-returns": 1, // Recommended "jsdoc/require-template": 1, "jsdoc/require-throws": 1, - "jsdoc/require-yields": 1, // Recommended "jsdoc/require-yields-check": 1, // Recommended + "jsdoc/require-yields": 1, // Recommended "jsdoc/sort-tags": 1, "jsdoc/tag-lines": 1, // Recommended "jsdoc/valid-types": 1 // Recommended From b4c9b58c62bbea59f296d601861053c4cc49f6c4 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Fri, 29 Aug 2025 10:22:27 +0800 Subject: [PATCH 039/189] chore: update devDeps. (#1459) --- package.json | 14 +- pnpm-lock.yaml | 851 +++++++----------- src/bin/generateDocs.js | 2 +- src/iterateJsdoc.js | 3 +- src/rules/noBlankBlocks.js | 2 +- .../requireDescriptionCompleteSentence.js | 2 +- src/rules/tagLines.js | 2 +- test/getJsdocProcessPlugin.js | 39 +- 8 files changed, 392 insertions(+), 523 deletions(-) diff --git a/package.json b/package.json index d5105d43c..a25fda057 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "@babel/plugin-transform-flow-strip-types": "^7.27.1", "@babel/preset-env": "^7.28.3", "@es-joy/escodegen": "^3.5.1", - "@es-joy/jsdoc-eslint-parser": "^0.21.1", + "@es-joy/jsdoc-eslint-parser": "^0.22.0", "@hkdobrev/run-if-changed": "^0.6.3", "@semantic-release/commit-analyzer": "^13.0.1", "@semantic-release/github": "^11.0.4", @@ -42,16 +42,16 @@ "@types/node": "^24.3.0", "@types/semver": "^7.7.0", "@types/spdx-expression-parse": "^3.0.5", - "@typescript-eslint/types": "^8.39.1", + "@typescript-eslint/types": "^8.41.0", "babel-plugin-add-module-exports": "^1.0.4", "babel-plugin-istanbul": "^7.0.0", "babel-plugin-transform-import-meta": "^2.3.3", "c8": "^10.1.3", "camelcase": "^8.0.0", - "chai": "^5.2.1", - "decamelize": "^6.0.0", - "eslint": "9.33.0", - "eslint-config-canonical": "~44.9.9", + "chai": "^6.0.1", + "decamelize": "^6.0.1", + "eslint": "9.34.0", + "eslint-config-canonical": "~45.0.0", "gitdown": "^4.1.1", "glob": "^11.0.3", "globals": "^16.3.0", @@ -66,7 +66,7 @@ "rimraf": "^6.0.1", "semantic-release": "^24.2.7", "typescript": "5.9.2", - "typescript-eslint": "^8.39.1" + "typescript-eslint": "^8.41.0" }, "engines": { "node": ">=20.11.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 28d42162b..f1e57be9c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -47,7 +47,7 @@ importers: version: 7.28.3 '@babel/eslint-parser': specifier: ^7.28.0 - version: 7.28.0(@babel/core@7.28.3)(eslint@9.33.0(jiti@2.5.1)) + version: 7.28.0(@babel/core@7.28.3)(eslint@9.34.0(jiti@2.5.1)) '@babel/node': specifier: ^7.28.0 version: 7.28.0(@babel/core@7.28.3) @@ -64,8 +64,8 @@ importers: specifier: ^3.5.1 version: 3.5.1 '@es-joy/jsdoc-eslint-parser': - specifier: ^0.21.1 - version: 0.21.1 + specifier: ^0.22.0 + version: 0.22.0(jiti@2.5.1) '@hkdobrev/run-if-changed': specifier: ^0.6.3 version: 0.6.3(typescript@5.9.2) @@ -112,8 +112,8 @@ importers: specifier: ^3.0.5 version: 3.0.5 '@typescript-eslint/types': - specifier: ^8.39.1 - version: 8.39.1 + specifier: ^8.41.0 + version: 8.41.0 babel-plugin-add-module-exports: specifier: ^1.0.4 version: 1.0.4 @@ -130,17 +130,17 @@ importers: specifier: ^8.0.0 version: 8.0.0 chai: - specifier: ^5.2.1 - version: 5.2.1 + specifier: ^6.0.1 + version: 6.0.1 decamelize: - specifier: ^6.0.0 - version: 6.0.0 + specifier: ^6.0.1 + version: 6.0.1 eslint: - specifier: 9.33.0 - version: 9.33.0(jiti@2.5.1) + specifier: 9.34.0 + version: 9.34.0(jiti@2.5.1) eslint-config-canonical: - specifier: ~44.9.9 - version: 44.9.9(@types/eslint@9.6.1)(@types/node@24.3.0)(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + specifier: ~45.0.0 + version: 45.0.0(@types/eslint@9.6.1)(@types/node@24.3.0)(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) gitdown: specifier: ^4.1.1 version: 4.1.1(re2@1.20.9) @@ -184,8 +184,8 @@ importers: specifier: 5.9.2 version: 5.9.2 typescript-eslint: - specifier: ^8.39.1 - version: 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + specifier: ^8.41.0 + version: 8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) packages: @@ -766,14 +766,10 @@ packages: resolution: {integrity: sha512-lk61BuRPDm3KCm2x8Y629+szoRuChn83kG8ll+CniQM07u5dRVzQRkBFnn/hCdL+Urdsj4/6qeOJWr+QRRkKgw==} engines: {node: '>=4.0'} - '@es-joy/jsdoc-eslint-parser@0.21.1': - resolution: {integrity: sha512-SZopkdH2PHgdr/tMa32m/74cLzHPXuBqyTqoODA3ExlHC3u47Fy/5wBacoA+6uOnjwVP4tVDi2gtqS4vX+6F7g==} + '@es-joy/jsdoc-eslint-parser@0.22.0': + resolution: {integrity: sha512-paqzt2X6GXMvlJUhMlA5zUnTpLRa5VmEJdw3aaHV3IkDGmZFWEC0GylLV/ANKQ+EnnLcDy7LcerA8Nd5YCMkGA==} engines: {node: '>=18.0.0'} - '@es-joy/jsdoccomment@0.41.0': - resolution: {integrity: sha512-aKUhyn1QI5Ksbqcr3fFJj16p99QdjUxXAEuFst1Z47DRyoiMwivIH9MV/ARcJOCXVjPfjITciej8ZD2O/6qUmw==} - engines: {node: '>=16'} - '@es-joy/jsdoccomment@0.50.2': resolution: {integrity: sha512-YAdE/IJSpwbOTiaURNCKECdAwqrJuFiZhylmesBcIRawtYKnBR2wxPhoIewMg+Yu+QuYvHfJNReWpoxGBKOChA==} engines: {node: '>=18'} @@ -782,6 +778,10 @@ packages: resolution: {integrity: sha512-Wyed8Wfn3vMNVwrZrgLMxmqwmlcCE1/RfUAOHFzMJb3QLH03mi9Yv1iOCZjif0yx5EZUeJ+17VD1MHPka9IQjQ==} engines: {node: '>=20.11.0'} + '@es-joy/jsdoccomment@0.54.0': + resolution: {integrity: sha512-r+DsSLA9rhdL9+IXySvqi/4VfhVwMlMztv7xJCxki82DvcTSlk4AT878sUKxizUwSJ8UieuCbjjbNi1OL5by+Q==} + engines: {node: '>=20.11.0'} + '@eslint-community/eslint-utils@4.7.0': resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -804,20 +804,12 @@ packages: resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@eslint/eslintrc@3.3.1': resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@8.57.1': - resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@eslint/js@9.33.0': - resolution: {integrity: sha512-5K1/mKhWaMfreBGJTwval43JJmkip0RmM+3+IuqupeSKNC/Th2Kc7ucaq5ovTSra/OOKB9c58CGSz3QMVbWt0A==} + '@eslint/js@9.34.0': + resolution: {integrity: sha512-EoyvqQnBNsV1CWaEJ559rxXL4c8V92gxirbawSmVUOWXlsRxxQXl6LmCpdUblgxgSkDIqKnhzba2SjRTI/A5Rw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': @@ -981,19 +973,10 @@ packages: resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} engines: {node: '>=18.18.0'} - '@humanwhocodes/config-array@0.13.0': - resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead - '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/object-schema@2.0.3': - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead - '@humanwhocodes/retry@0.3.1': resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} engines: {node: '>=18.18'} @@ -1038,8 +1021,8 @@ packages: '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} - '@next/eslint-plugin-next@15.4.6': - resolution: {integrity: sha512-2NOu3ln+BTcpnbIDuxx6MNq+pRrCyey4WSXGaJIyt0D2TYicHeO9QrUENNjcf673n3B1s7hsiV5xBYRCK1Q8kA==} + '@next/eslint-plugin-next@15.5.2': + resolution: {integrity: sha512-lkLrRVxcftuOsJNhWatf1P2hNVfh98k/omQHrCEPPriUypR6RcS13IvLdIrEvkm9AH2Nu2YpR5vLqBuy6twH3Q==} '@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3': resolution: {integrity: sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==} @@ -1254,26 +1237,16 @@ packages: '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} - '@typescript-eslint/eslint-plugin@8.39.1': - resolution: {integrity: sha512-yYegZ5n3Yr6eOcqgj2nJH8cH/ZZgF+l0YIdKILSDjYFRjgYQMgv/lRjV5Z7Up04b9VYUondt8EPMqg7kTWgJ2g==} + '@typescript-eslint/eslint-plugin@8.41.0': + resolution: {integrity: sha512-8fz6oa6wEKZrhXWro/S3n2eRJqlRcIa6SlDh59FXJ5Wp5XRZ8B9ixpJDcjadHq47hMx0u+HW6SNa6LjJQ6NLtw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.39.1 + '@typescript-eslint/parser': ^8.41.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@6.21.0': - resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/parser@8.39.1': - resolution: {integrity: sha512-pUXGCuHnnKw6PyYq93lLRiZm3vjuslIy7tus1lIQTYVK9bL8XBgJnCWm8a0KcTtHC84Yya1Q6rtll+duSMj0dg==} + '@typescript-eslint/parser@8.41.0': + resolution: {integrity: sha512-gTtSdWX9xiMPA/7MV9STjJOOYtWwIJIYxkQxnSV1U3xcE+mnJSH3f6zI0RYP+ew66WSlZ5ed+h0VCxsvdC1jJg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -1285,20 +1258,32 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@6.21.0': - resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/project-service@8.41.0': + resolution: {integrity: sha512-b8V9SdGBQzQdjJ/IO3eDifGpDBJfvrNTp2QD9P2BeqWTGrRibgfgIlBSw6z3b6R7dPzg752tOs4u/7yCLxksSQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' '@typescript-eslint/scope-manager@8.39.1': resolution: {integrity: sha512-RkBKGBrjgskFGWuyUGz/EtD8AF/GW49S21J8dvMzpJitOF1slLEbbHnNEtAHtnDAnx8qDEdRrULRnWVx27wGBw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/scope-manager@8.41.0': + resolution: {integrity: sha512-n6m05bXn/Cd6DZDGyrpXrELCPVaTnLdPToyhBoFkLIMznRUQUEQdSp96s/pcWSQdqOhrgR1mzJ+yItK7T+WPMQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/tsconfig-utils@8.39.1': resolution: {integrity: sha512-ePUPGVtTMR8XMU2Hee8kD0Pu4NDE1CN9Q1sxGSGd/mbOtGZDM7pnhXNJnzW63zk/q+Z54zVzj44HtwXln5CvHA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/tsconfig-utils@8.41.0': + resolution: {integrity: sha512-TDhxYFPUYRFxFhuU5hTIJk+auzM/wKvWgoNYOPcOf6i4ReYlOoYN8q1dV5kOTjNQNJgzWN3TUUQMtlLOcUgdUw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/type-utils@8.39.1': resolution: {integrity: sha512-gu9/ahyatyAdQbKeHnhT4R+y3YLtqqHyvkfDxaBYk97EcbfChSJXyaJnIL3ygUv7OuZatePHmQvuH5ru0lnVeA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1306,22 +1291,20 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@6.21.0': - resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/type-utils@8.41.0': + resolution: {integrity: sha512-63qt1h91vg3KsjVVonFJWjgSK7pZHSQFKH6uwqxAH9bBrsyRhO6ONoKyXxyVBzG1lJnFAJcKAcxLS54N1ee1OQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' '@typescript-eslint/types@8.39.1': resolution: {integrity: sha512-7sPDKQQp+S11laqTrhHqeAbsCfMkwJMrV7oTDvtDds4mEofJYir414bYKUEb8YPUm9QL3U+8f6L6YExSoAGdQw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@6.21.0': - resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/types@8.41.0': + resolution: {integrity: sha512-9EwxsWdVqh42afLbHP90n2VdHaWU/oWgbH2P0CfcNfdKL7CuKpwMQGjwev56vWu9cSKU7FWSu6r9zck6CVfnag==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@8.39.1': resolution: {integrity: sha512-EKkpcPuIux48dddVDXyQBlKdeTPMmALqBUbEk38McWv0qVEZwOpVJBi7ugK5qVNgeuYjGNQxrrnoM/5+TI/BPw==} @@ -1329,6 +1312,12 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/typescript-estree@8.41.0': + resolution: {integrity: sha512-D43UwUYJmGhuwHfY7MtNKRZMmfd8+p/eNSfFe6tH5mbVDto+VQCayeAt35rOx3Cs6wxD16DQtIKw/YXxt5E0UQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/utils@8.39.1': resolution: {integrity: sha512-VF5tZ2XnUSTuiqZFXCZfZs1cgkdd3O/sSYmdo2EpSyDlC86UM/8YytTmKnehOW3TGAlivqTDT6bS87B/GQ/jyg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1336,16 +1325,20 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@6.21.0': - resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/utils@8.41.0': + resolution: {integrity: sha512-udbCVstxZ5jiPIXrdH+BZWnPatjlYwJuJkDA4Tbo3WyYLh8NvB+h/bKeSZHDOFKfphsZYJQqaFtLeXEqurQn1A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' '@typescript-eslint/visitor-keys@8.39.1': resolution: {integrity: sha512-W8FQi6kEh2e8zVhQ0eeRnxdvIoOkAp/CPAahcNio6nO9dsIwb9b34z90KOlheoyuVf6LSOEdjlkxSkapNEc+4A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@ungap/structured-clone@1.3.0': - resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + '@typescript-eslint/visitor-keys@8.41.0': + resolution: {integrity: sha512-+GeGMebMCy0elMNg67LRNoVnUFPIm37iu5CmHESVx56/9Jsfdpsvbv605DQ81Pi/x11IdKUsS5nzgTYbCQU9fg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@unrs/resolver-binding-android-arm-eabi@1.11.1': resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} @@ -1605,10 +1598,6 @@ packages: resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} engines: {node: '>=0.8'} - assertion-error@2.0.1: - resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} - engines: {node: '>=12'} - ast-types-flow@0.0.8: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} @@ -1715,8 +1704,8 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - builtin-modules@4.0.0: - resolution: {integrity: sha512-p1n8zyCkt1BVrKNFymOHjcDSAl7oq/gUvfgULv2EblgpPVQlQr9yHnWjg9IJ2MhfwPqiYqMMrr01OY7yQoK2yA==} + builtin-modules@5.0.0: + resolution: {integrity: sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==} engines: {node: '>=18.20'} bundle-name@4.1.0: @@ -1771,8 +1760,8 @@ packages: caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} - chai@5.2.1: - resolution: {integrity: sha512-5nFxhUrX0PqtyogoYOA8IPswy5sZFTOsBFl/9bNsmDLgsxYTzSZQJDPppDnZPTQbzSEm0hqGjWPzRemQCYbD6A==} + chai@6.0.1: + resolution: {integrity: sha512-/JOoU2//6p5vCXh00FpNgtlw0LjvhGttaWc+y7wpW9yjBm3ys0dI8tSKZxIOgNruz5J0RleccatSIC3uxEZP0g==} engines: {node: '>=18'} chalk@2.4.2: @@ -1787,14 +1776,13 @@ packages: resolution: {integrity: sha512-1tm8DTaJhPBG3bIkVeZt1iZM9GfSX2lzOeDVZH9R9ffRHpmHvxZ/QhgQH/aDTkswQVt+YHdXAdS/In/30OjCbg==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + change-case@5.4.4: + resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} + char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} - check-error@2.1.1: - resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} - engines: {node: '>= 16'} - chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -2040,14 +2028,10 @@ packages: resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} engines: {node: '>=10'} - decamelize@6.0.0: - resolution: {integrity: sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==} + decamelize@6.0.1: + resolution: {integrity: sha512-G7Cqgaelq68XHJNGlZ7lrNQyhZGsFqpwtGFexqUv4IQdjKoSYF7ipZ9UuTJZUSQXFj/XaoBLuEVIVqr8EJngEQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - deep-eql@5.0.2: - resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} - engines: {node: '>=6'} - deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} @@ -2261,8 +2245,8 @@ packages: peerDependencies: eslint: '>=6.0.0' - eslint-config-canonical@44.9.9: - resolution: {integrity: sha512-pAva0j7rE2D7x4JA/vWqrETvg2mkt99fN1LcRpZSyrDg7CdzLy4d80ShvOsm9KSj/Ouv1XDJ/H10vun0EPON8g==} + eslint-config-canonical@45.0.0: + resolution: {integrity: sha512-Ar0FukYoH/42WdiZOBVNdfCAJ4owQ8iAf6pXWDULHCUx2Lw+KNmfj/d3dup40LIiEnc//6anHEwwY4+KyzZPVA==} engines: {node: '>=16.0.0'} peerDependencies: eslint: ^9 @@ -2491,11 +2475,11 @@ packages: peerDependencies: eslint: '>=8.44.0' - eslint-plugin-unicorn@57.0.0: - resolution: {integrity: sha512-zUYYa6zfNdTeG9BISWDlcLmz16c+2Ck2o5ZDHh0UzXJz3DEP7xjmlVDTzbyV0W+XksgZ0q37WEWzN2D2Ze+g9Q==} - engines: {node: '>=18.18'} + eslint-plugin-unicorn@60.0.0: + resolution: {integrity: sha512-QUzTefvP8stfSXsqKQ+vBQSEsXIlAiCduS/V1Em+FKgL9c21U/IIm20/e3MFy1jyCf14tHAhqC1sX8OTy6VUCg==} + engines: {node: ^20.10.0 || >=21.0.0} peerDependencies: - eslint: '>=9.20.0' + eslint: '>=9.29.0' eslint-plugin-yml@1.18.0: resolution: {integrity: sha512-9NtbhHRN2NJa/s3uHchO3qVVZw0vyOIvWlXWGaKCr/6l3Go62wsvJK5byiI6ZoYztDsow4GnS69BZD3GnqH3hA==} @@ -2513,10 +2497,6 @@ packages: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-scope@8.4.0: resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2539,14 +2519,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@8.57.1: - resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. - hasBin: true - - eslint@9.33.0: - resolution: {integrity: sha512-TS9bTNIryDzStCpJN93aC5VRSW3uTx9sClUn4B87pwiCaJh220otoI0X8mJKr+VcPtniMdN8GKjlwgWGUv5ZKA==} + eslint@9.34.0: + resolution: {integrity: sha512-RNCHRX5EwdrESy3Jc9o8ie8Bog+PeYvvSR8sDGoZxNFTvZ4dlxUB3WzQ3bQMztFrSRODGrLLj8g6OFuGY/aiQg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -2663,10 +2637,6 @@ packages: resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} engines: {node: '>=18'} - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} @@ -2707,10 +2677,6 @@ packages: resolution: {integrity: sha512-2kCCtc+JvcZ86IGAz3Z2Y0A1baIz9fL31pH/0S1IqZr9Iwnjq8izfPtrCyQKO6TLMPELLsQMre7VDqeIKCsHkA==} engines: {node: '>=18'} - flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} - flat-cache@4.0.1: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} @@ -3156,8 +3122,8 @@ packages: resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} engines: {node: '>= 0.4'} - is-builtin-module@4.0.0: - resolution: {integrity: sha512-rWP3AMAalQSesXO8gleROyL2iKU73SX5Er66losQn9rWOWL4Gef0a/xOEOVqjWGMuR2vHG3FJ8UUmT700O8oFg==} + is-builtin-module@5.0.0: + resolution: {integrity: sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==} engines: {node: '>=18.20'} is-bun-module@2.0.0: @@ -3255,10 +3221,6 @@ packages: resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} engines: {node: '>=8'} - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - is-plain-obj@2.1.0: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} @@ -3419,10 +3381,6 @@ packages: jsbn@0.1.1: resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} - jsdoc-type-pratt-parser@4.0.0: - resolution: {integrity: sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==} - engines: {node: '>=12.0.0'} - jsdoc-type-pratt-parser@4.1.0: resolution: {integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==} engines: {node: '>=12.0.0'} @@ -3606,9 +3564,6 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - loupe@3.2.0: - resolution: {integrity: sha512-2NCfZcT5VGVNX9mSZIxLRkEAegDGBpuQZBy13desuHeVORmBDyAET4TkJr4SjqQy3A8JDofMN6LpkK8Xcm/dlw==} - lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} @@ -3723,10 +3678,6 @@ packages: minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} - minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} @@ -4165,10 +4116,6 @@ packages: resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} engines: {node: '>=18'} - pathval@2.0.1: - resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} - engines: {node: '>= 14.16'} - performance-now@2.1.0: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} @@ -4433,11 +4380,6 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - rimraf@6.0.1: resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} engines: {node: 20 || >=22} @@ -4809,9 +4751,6 @@ packages: resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} engines: {node: '>=18'} - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} @@ -4856,12 +4795,6 @@ packages: resolution: {integrity: sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==} engines: {node: '>= 0.4'} - ts-api-utils@1.4.3: - resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} - engines: {node: '>=16'} - peerDependencies: - typescript: '>=4.2.0' - ts-api-utils@2.1.0: resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} engines: {node: '>=18.12'} @@ -4926,8 +4859,8 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} - typescript-eslint@8.39.1: - resolution: {integrity: sha512-GDUv6/NDYngUlNvwaHM1RamYftxf782IyEDbdj3SeaIHHv8fNQVRC++fITT7kUJV/5rIA/tkoRSSskt6osEfqg==} + typescript-eslint@8.41.0: + resolution: {integrity: sha512-n66rzs5OBXW3SFSnZHr2T685q1i4ODm2nulFJhMZBotaTavsS8TrI3d7bDlRSs9yWo7HmyWrN9qDu14Qv7Y0Dw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -5261,19 +5194,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/eslint-parser@7.28.0(@babel/core@7.28.3)(eslint@8.57.1)': - dependencies: - '@babel/core': 7.28.3 - '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 8.57.1 - eslint-visitor-keys: 2.1.0 - semver: 6.3.1 - - '@babel/eslint-parser@7.28.0(@babel/core@7.28.3)(eslint@9.33.0(jiti@2.5.1))': + '@babel/eslint-parser@7.28.0(@babel/core@7.28.3)(eslint@9.34.0(jiti@2.5.1))': dependencies: '@babel/core': 7.28.3 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 9.33.0(jiti@2.5.1) + eslint: 9.34.0(jiti@2.5.1) eslint-visitor-keys: 2.1.0 semver: 6.3.1 @@ -5985,28 +5910,23 @@ snapshots: '@es-joy/estraverse@6.0.0': {} - '@es-joy/jsdoc-eslint-parser@0.21.1': + '@es-joy/jsdoc-eslint-parser@0.22.0(jiti@2.5.1)': dependencies: '@babel/core': 7.28.3 - '@babel/eslint-parser': 7.28.0(@babel/core@7.28.3)(eslint@8.57.1) - '@es-joy/jsdoccomment': 0.41.0 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.9.2) - eslint: 8.57.1 + '@babel/eslint-parser': 7.28.0(@babel/core@7.28.3)(eslint@9.34.0(jiti@2.5.1)) + '@es-joy/jsdoccomment': 0.54.0 + '@typescript-eslint/parser': 8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.34.0(jiti@2.5.1) esquery: 1.6.0 typescript: 5.9.2 transitivePeerDependencies: + - jiti - supports-color - '@es-joy/jsdoccomment@0.41.0': - dependencies: - comment-parser: 1.4.1 - esquery: 1.6.0 - jsdoc-type-pratt-parser: 4.0.0 - '@es-joy/jsdoccomment@0.50.2': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/types': 8.41.0 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 4.1.0 @@ -6014,19 +5934,22 @@ snapshots: '@es-joy/jsdoccomment@0.53.0': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/types': 8.41.0 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 4.8.0 - '@eslint-community/eslint-utils@4.7.0(eslint@8.57.1)': + '@es-joy/jsdoccomment@0.54.0': dependencies: - eslint: 8.57.1 - eslint-visitor-keys: 3.4.3 + '@types/estree': 1.0.8 + '@typescript-eslint/types': 8.41.0 + comment-parser: 1.4.1 + esquery: 1.6.0 + jsdoc-type-pratt-parser: 4.8.0 - '@eslint-community/eslint-utils@4.7.0(eslint@9.33.0(jiti@2.5.1))': + '@eslint-community/eslint-utils@4.7.0(eslint@9.34.0(jiti@2.5.1))': dependencies: - eslint: 9.33.0(jiti@2.5.1) + eslint: 9.34.0(jiti@2.5.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -6045,20 +5968,6 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/eslintrc@2.1.4': - dependencies: - ajv: 6.12.6 - debug: 4.4.1(supports-color@8.1.1) - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.2 - import-fresh: 3.3.1 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 @@ -6073,9 +5982,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@8.57.1': {} - - '@eslint/js@9.33.0': {} + '@eslint/js@9.34.0': {} '@eslint/object-schema@2.1.6': {} @@ -6086,13 +5993,13 @@ snapshots: '@fastify/busboy@3.1.1': {} - '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.3.0)(eslint@9.33.0(jiti@2.5.1))(graphql@16.11.0)(typescript@5.9.2)': + '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.3.0)(eslint@9.34.0(jiti@2.5.1))(graphql@16.11.0)(typescript@5.9.2)': dependencies: '@graphql-tools/code-file-loader': 8.1.22(graphql@16.11.0) '@graphql-tools/graphql-tag-pluck': 8.3.21(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) debug: 4.4.1(supports-color@8.1.1) - eslint: 9.33.0(jiti@2.5.1) + eslint: 9.34.0(jiti@2.5.1) fast-glob: 3.3.3 graphql: 16.11.0 graphql-config: 5.1.5(@types/node@24.3.0)(graphql@16.11.0)(typescript@5.9.2) @@ -6334,18 +6241,8 @@ snapshots: '@humanfs/core': 0.19.1 '@humanwhocodes/retry': 0.3.1 - '@humanwhocodes/config-array@0.13.0': - dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.4.1(supports-color@8.1.1) - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/object-schema@2.0.3': {} - '@humanwhocodes/retry@0.3.1': {} '@humanwhocodes/retry@0.4.3': {} @@ -6396,7 +6293,7 @@ snapshots: '@tybys/wasm-util': 0.10.0 optional: true - '@next/eslint-plugin-next@15.4.6': + '@next/eslint-plugin-next@15.5.2': dependencies: fast-glob: 3.3.1 @@ -6594,10 +6491,10 @@ snapshots: '@sindresorhus/merge-streams@4.0.0': {} - '@stylistic/eslint-plugin@4.4.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': + '@stylistic/eslint-plugin@4.4.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@typescript-eslint/utils': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.33.0(jiti@2.5.1) + '@typescript-eslint/utils': 8.39.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.34.0(jiti@2.5.1) eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 @@ -6676,15 +6573,15 @@ snapshots: dependencies: '@types/node': 24.3.0 - '@typescript-eslint/eslint-plugin@8.39.1(@typescript-eslint/parser@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/eslint-plugin@8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/scope-manager': 8.39.1 - '@typescript-eslint/type-utils': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/utils': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.39.1 - eslint: 9.33.0(jiti@2.5.1) + '@typescript-eslint/parser': 8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.41.0 + '@typescript-eslint/type-utils': 8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.41.0 + eslint: 9.34.0(jiti@2.5.1) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -6693,85 +6590,82 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.2)': + '@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 6.21.0 + '@typescript-eslint/scope-manager': 8.41.0 + '@typescript-eslint/types': 8.41.0 + '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.41.0 debug: 4.4.1(supports-color@8.1.1) - eslint: 8.57.1 - optionalDependencies: + eslint: 9.34.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/project-service@8.39.1(typescript@5.9.2)': dependencies: - '@typescript-eslint/scope-manager': 8.39.1 - '@typescript-eslint/types': 8.39.1 - '@typescript-eslint/typescript-estree': 8.39.1(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.39.1 + '@typescript-eslint/tsconfig-utils': 8.39.1(typescript@5.9.2) + '@typescript-eslint/types': 8.41.0 debug: 4.4.1(supports-color@8.1.1) - eslint: 9.33.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.39.1(typescript@5.9.2)': + '@typescript-eslint/project-service@8.41.0(typescript@5.9.2)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.39.1(typescript@5.9.2) - '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/tsconfig-utils': 8.41.0(typescript@5.9.2) + '@typescript-eslint/types': 8.41.0 debug: 4.4.1(supports-color@8.1.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@6.21.0': - dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 - '@typescript-eslint/scope-manager@8.39.1': dependencies: '@typescript-eslint/types': 8.39.1 '@typescript-eslint/visitor-keys': 8.39.1 + '@typescript-eslint/scope-manager@8.41.0': + dependencies: + '@typescript-eslint/types': 8.41.0 + '@typescript-eslint/visitor-keys': 8.41.0 + '@typescript-eslint/tsconfig-utils@8.39.1(typescript@5.9.2)': dependencies: typescript: 5.9.2 - '@typescript-eslint/type-utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/tsconfig-utils@8.41.0(typescript@5.9.2)': + dependencies: + typescript: 5.9.2 + + '@typescript-eslint/type-utils@8.39.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@typescript-eslint/types': 8.39.1 '@typescript-eslint/typescript-estree': 8.39.1(typescript@5.9.2) - '@typescript-eslint/utils': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) debug: 4.4.1(supports-color@8.1.1) - eslint: 9.33.0(jiti@2.5.1) + eslint: 9.34.0(jiti@2.5.1) ts-api-utils: 2.1.0(typescript@5.9.2) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@6.21.0': {} - - '@typescript-eslint/types@8.39.1': {} - - '@typescript-eslint/typescript-estree@6.21.0(typescript@5.9.2)': + '@typescript-eslint/type-utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 + '@typescript-eslint/types': 8.41.0 + '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) debug: 4.4.1(supports-color@8.1.1) - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.7.2 - ts-api-utils: 1.4.3(typescript@5.9.2) - optionalDependencies: + eslint: 9.34.0(jiti@2.5.1) + ts-api-utils: 2.1.0(typescript@5.9.2) typescript: 5.9.2 transitivePeerDependencies: - supports-color + '@typescript-eslint/types@8.39.1': {} + + '@typescript-eslint/types@8.41.0': {} + '@typescript-eslint/typescript-estree@8.39.1(typescript@5.9.2)': dependencies: '@typescript-eslint/project-service': 8.39.1(typescript@5.9.2) @@ -6788,28 +6682,53 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/typescript-estree@8.41.0(typescript@5.9.2)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1)) + '@typescript-eslint/project-service': 8.41.0(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.41.0(typescript@5.9.2) + '@typescript-eslint/types': 8.41.0 + '@typescript-eslint/visitor-keys': 8.41.0 + debug: 4.4.1(supports-color@8.1.1) + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.2 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.39.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)': + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.5.1)) '@typescript-eslint/scope-manager': 8.39.1 '@typescript-eslint/types': 8.39.1 '@typescript-eslint/typescript-estree': 8.39.1(typescript@5.9.2) - eslint: 9.33.0(jiti@2.5.1) + eslint: 9.34.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@6.21.0': + '@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@typescript-eslint/types': 6.21.0 - eslint-visitor-keys: 3.4.3 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.5.1)) + '@typescript-eslint/scope-manager': 8.41.0 + '@typescript-eslint/types': 8.41.0 + '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.9.2) + eslint: 9.34.0(jiti@2.5.1) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color '@typescript-eslint/visitor-keys@8.39.1': dependencies: '@typescript-eslint/types': 8.39.1 eslint-visitor-keys: 4.2.1 - '@ungap/structured-clone@1.3.0': {} + '@typescript-eslint/visitor-keys@8.41.0': + dependencies: + '@typescript-eslint/types': 8.41.0 + eslint-visitor-keys: 4.2.1 '@unrs/resolver-binding-android-arm-eabi@1.11.1': optional: true @@ -6870,10 +6789,10 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - '@vitest/eslint-plugin@1.3.4(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': + '@vitest/eslint-plugin@1.3.4(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@typescript-eslint/utils': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.33.0(jiti@2.5.1) + '@typescript-eslint/utils': 8.39.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.34.0(jiti@2.5.1) optionalDependencies: typescript: 5.9.2 transitivePeerDependencies: @@ -7053,8 +6972,6 @@ snapshots: assert-plus@1.0.0: {} - assertion-error@2.0.1: {} - ast-types-flow@0.0.8: {} ast-types@0.16.1: @@ -7162,7 +7079,7 @@ snapshots: buffer-from@1.1.2: {} - builtin-modules@4.0.0: {} + builtin-modules@5.0.0: {} bundle-name@4.1.0: dependencies: @@ -7227,13 +7144,7 @@ snapshots: caseless@0.12.0: {} - chai@5.2.1: - dependencies: - assertion-error: 2.0.1 - check-error: 2.1.1 - deep-eql: 5.0.2 - loupe: 3.2.0 - pathval: 2.0.1 + chai@6.0.1: {} chalk@2.4.2: dependencies: @@ -7248,9 +7159,9 @@ snapshots: chalk@5.5.0: {} - char-regex@1.0.2: {} + change-case@5.4.4: {} - check-error@2.1.1: {} + char-regex@1.0.2: {} chokidar@3.6.0: dependencies: @@ -7507,9 +7418,7 @@ snapshots: decamelize@4.0.0: {} - decamelize@6.0.0: {} - - deep-eql@5.0.2: {} + decamelize@6.0.1: {} deep-extend@0.6.0: {} @@ -7766,55 +7675,55 @@ snapshots: lodash.get: 4.4.2 lodash.zip: 4.2.0 - eslint-compat-utils@0.5.1(eslint@9.33.0(jiti@2.5.1)): + eslint-compat-utils@0.5.1(eslint@9.34.0(jiti@2.5.1)): dependencies: - eslint: 9.33.0(jiti@2.5.1) + eslint: 9.34.0(jiti@2.5.1) semver: 7.7.2 - eslint-compat-utils@0.6.5(eslint@9.33.0(jiti@2.5.1)): + eslint-compat-utils@0.6.5(eslint@9.34.0(jiti@2.5.1)): dependencies: - eslint: 9.33.0(jiti@2.5.1) + eslint: 9.34.0(jiti@2.5.1) semver: 7.7.2 - eslint-config-canonical@44.9.9(@types/eslint@9.6.1)(@types/node@24.3.0)(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2): - dependencies: - '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.3.0)(eslint@9.33.0(jiti@2.5.1))(graphql@16.11.0)(typescript@5.9.2) - '@next/eslint-plugin-next': 15.4.6 - '@stylistic/eslint-plugin': 4.4.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/eslint-plugin': 8.39.1(@typescript-eslint/parser@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/parser': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) - '@vitest/eslint-plugin': 1.3.4(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.33.0(jiti@2.5.1) - eslint-config-prettier: 10.1.8(eslint@9.33.0(jiti@2.5.1)) - eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1)) - eslint-plugin-ava: 15.1.0(eslint@9.33.0(jiti@2.5.1)) - eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) - eslint-plugin-eslint-comments: 3.2.0(eslint@9.33.0(jiti@2.5.1)) - eslint-plugin-fp: 2.3.0(eslint@9.33.0(jiti@2.5.1)) - eslint-plugin-functional: 9.0.2(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)) - eslint-plugin-jest: 28.14.0(@typescript-eslint/eslint-plugin@8.39.1(@typescript-eslint/parser@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) - eslint-plugin-jsdoc: 50.8.0(eslint@9.33.0(jiti@2.5.1)) - eslint-plugin-jsonc: 2.20.1(eslint@9.33.0(jiti@2.5.1)) - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.33.0(jiti@2.5.1)) - eslint-plugin-lodash: 8.0.0(eslint@9.33.0(jiti@2.5.1)) - eslint-plugin-mocha: 10.5.0(eslint@9.33.0(jiti@2.5.1)) + eslint-config-canonical@45.0.0(@types/eslint@9.6.1)(@types/node@24.3.0)(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2): + dependencies: + '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.3.0)(eslint@9.34.0(jiti@2.5.1))(graphql@16.11.0)(typescript@5.9.2) + '@next/eslint-plugin-next': 15.5.2 + '@stylistic/eslint-plugin': 4.4.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/eslint-plugin': 8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/parser': 8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + '@vitest/eslint-plugin': 1.3.4(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.34.0(jiti@2.5.1) + eslint-config-prettier: 10.1.8(eslint@9.34.0(jiti@2.5.1)) + eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)) + eslint-plugin-ava: 15.1.0(eslint@9.34.0(jiti@2.5.1)) + eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + eslint-plugin-eslint-comments: 3.2.0(eslint@9.34.0(jiti@2.5.1)) + eslint-plugin-fp: 2.3.0(eslint@9.34.0(jiti@2.5.1)) + eslint-plugin-functional: 9.0.2(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)) + eslint-plugin-jest: 28.14.0(@typescript-eslint/eslint-plugin@8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + eslint-plugin-jsdoc: 50.8.0(eslint@9.34.0(jiti@2.5.1)) + eslint-plugin-jsonc: 2.20.1(eslint@9.34.0(jiti@2.5.1)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.34.0(jiti@2.5.1)) + eslint-plugin-lodash: 8.0.0(eslint@9.34.0(jiti@2.5.1)) + eslint-plugin-mocha: 10.5.0(eslint@9.34.0(jiti@2.5.1)) eslint-plugin-modules-newline: 0.0.6 - eslint-plugin-n: 17.21.3(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) - eslint-plugin-perfectionist: 4.15.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) - eslint-plugin-prettier: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1))(prettier@3.6.2) - eslint-plugin-promise: 7.2.1(eslint@9.33.0(jiti@2.5.1)) - eslint-plugin-react: 7.37.5(eslint@9.33.0(jiti@2.5.1)) - eslint-plugin-react-hooks: 5.2.0(eslint@9.33.0(jiti@2.5.1)) - eslint-plugin-regexp: 2.10.0(eslint@9.33.0(jiti@2.5.1)) - eslint-plugin-unicorn: 57.0.0(eslint@9.33.0(jiti@2.5.1)) - eslint-plugin-yml: 1.18.0(eslint@9.33.0(jiti@2.5.1)) - eslint-plugin-zod: 1.4.0(eslint@9.33.0(jiti@2.5.1)) + eslint-plugin-n: 17.21.3(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + eslint-plugin-perfectionist: 4.15.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + eslint-plugin-prettier: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1))(prettier@3.6.2) + eslint-plugin-promise: 7.2.1(eslint@9.34.0(jiti@2.5.1)) + eslint-plugin-react: 7.37.5(eslint@9.34.0(jiti@2.5.1)) + eslint-plugin-react-hooks: 5.2.0(eslint@9.34.0(jiti@2.5.1)) + eslint-plugin-regexp: 2.10.0(eslint@9.34.0(jiti@2.5.1)) + eslint-plugin-unicorn: 60.0.0(eslint@9.34.0(jiti@2.5.1)) + eslint-plugin-yml: 1.18.0(eslint@9.34.0(jiti@2.5.1)) + eslint-plugin-zod: 1.4.0(eslint@9.34.0(jiti@2.5.1)) globals: 16.3.0 graphql: 16.11.0 prettier: 3.6.2 ramda: 0.30.1 - typescript-eslint: 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + typescript-eslint: 8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) yaml-eslint-parser: 1.3.0 transitivePeerDependencies: - '@apollo/subgraph' @@ -7837,9 +7746,9 @@ snapshots: - utf-8-validate - vitest - eslint-config-prettier@10.1.8(eslint@9.33.0(jiti@2.5.1)): + eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.5.1)): dependencies: - eslint: 9.33.0(jiti@2.5.1) + eslint: 9.34.0(jiti@2.5.1) eslint-import-context@0.1.9(unrs-resolver@1.11.1): dependencies: @@ -7857,26 +7766,26 @@ snapshots: - supports-color optional: true - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.1(supports-color@8.1.1) - eslint: 9.33.0(jiti@2.5.1) + eslint: 9.34.0(jiti@2.5.1) get-tsconfig: 4.10.1 is-bun-module: 2.0.0 stable-hash: 0.0.5 tinyglobby: 0.2.14 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)) transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1)): + eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)): dependencies: debug: 4.4.1(supports-color@8.1.1) - eslint: 9.33.0(jiti@2.5.1) + eslint: 9.34.0(jiti@2.5.1) eslint-import-context: 0.1.9(unrs-resolver@1.11.1) get-tsconfig: 4.10.1 is-bun-module: 2.0.0 @@ -7884,33 +7793,33 @@ snapshots: tinyglobby: 0.2.14 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)) transitivePeerDependencies: - supports-color - eslint-json-compat-utils@0.2.1(eslint@9.33.0(jiti@2.5.1))(jsonc-eslint-parser@2.4.0): + eslint-json-compat-utils@0.2.1(eslint@9.34.0(jiti@2.5.1))(jsonc-eslint-parser@2.4.0): dependencies: - eslint: 9.33.0(jiti@2.5.1) + eslint: 9.34.0(jiti@2.5.1) esquery: 1.6.0 jsonc-eslint-parser: 2.4.0 - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.33.0(jiti@2.5.1) + '@typescript-eslint/parser': 8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.34.0(jiti@2.5.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)) transitivePeerDependencies: - supports-color - eslint-plugin-ava@15.1.0(eslint@9.33.0(jiti@2.5.1)): + eslint-plugin-ava@15.1.0(eslint@9.34.0(jiti@2.5.1)): dependencies: enhance-visitors: 1.0.0 - eslint: 9.33.0(jiti@2.5.1) - eslint-utils: 3.0.0(eslint@9.33.0(jiti@2.5.1)) + eslint: 9.34.0(jiti@2.5.1) + eslint-utils: 3.0.0(eslint@9.34.0(jiti@2.5.1)) espree: 9.6.1 espurify: 2.1.1 import-modules: 2.1.0 @@ -7918,14 +7827,14 @@ snapshots: pkg-dir: 5.0.0 resolve-from: 5.0.0 - eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2): + eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/utils': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) array-includes: 3.1.9 debug: 4.4.1(supports-color@8.1.1) doctrine: 3.0.0 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1)) - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)) is-get-set-prop: 1.0.0 is-js-type: 2.0.0 is-obj-prop: 1.0.0 @@ -7945,34 +7854,34 @@ snapshots: - supports-color - typescript - eslint-plugin-es-x@7.8.0(eslint@9.33.0(jiti@2.5.1)): + eslint-plugin-es-x@7.8.0(eslint@9.34.0(jiti@2.5.1)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.5.1)) '@eslint-community/regexpp': 4.12.1 - eslint: 9.33.0(jiti@2.5.1) - eslint-compat-utils: 0.5.1(eslint@9.33.0(jiti@2.5.1)) + eslint: 9.34.0(jiti@2.5.1) + eslint-compat-utils: 0.5.1(eslint@9.34.0(jiti@2.5.1)) - eslint-plugin-eslint-comments@3.2.0(eslint@9.33.0(jiti@2.5.1)): + eslint-plugin-eslint-comments@3.2.0(eslint@9.34.0(jiti@2.5.1)): dependencies: escape-string-regexp: 1.0.5 - eslint: 9.33.0(jiti@2.5.1) + eslint: 9.34.0(jiti@2.5.1) ignore: 5.3.2 - eslint-plugin-fp@2.3.0(eslint@9.33.0(jiti@2.5.1)): + eslint-plugin-fp@2.3.0(eslint@9.34.0(jiti@2.5.1)): dependencies: create-eslint-index: 1.0.0 - eslint: 9.33.0(jiti@2.5.1) + eslint: 9.34.0(jiti@2.5.1) eslint-ast-utils: 1.1.0 lodash: 4.17.21 req-all: 0.1.0 - eslint-plugin-functional@9.0.2(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2): + eslint-plugin-functional@9.0.2(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/utils': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) deepmerge-ts: 7.1.5 escape-string-regexp: 5.0.0 - eslint: 9.33.0(jiti@2.5.1) - is-immutable-type: 5.0.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.34.0(jiti@2.5.1) + is-immutable-type: 5.0.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) ts-api-utils: 2.1.0(typescript@5.9.2) ts-declaration-location: 1.0.7(typescript@5.9.2) optionalDependencies: @@ -7980,12 +7889,12 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.5.1)): + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)): dependencies: - '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/types': 8.41.0 comment-parser: 1.4.1 debug: 4.4.1(supports-color@8.1.1) - eslint: 9.33.0(jiti@2.5.1) + eslint: 9.34.0(jiti@2.5.1) eslint-import-context: 0.1.9(unrs-resolver@1.11.1) is-glob: 4.0.3 minimatch: 10.0.3 @@ -7993,29 +7902,29 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.39.1(@typescript-eslint/parser@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2): + eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/utils': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.33.0(jiti@2.5.1) + '@typescript-eslint/utils': 8.39.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.34.0(jiti@2.5.1) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.39.1(@typescript-eslint/parser@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/eslint-plugin': 8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-jsdoc@50.8.0(eslint@9.33.0(jiti@2.5.1)): + eslint-plugin-jsdoc@50.8.0(eslint@9.34.0(jiti@2.5.1)): dependencies: '@es-joy/jsdoccomment': 0.50.2 are-docs-informative: 0.0.2 comment-parser: 1.4.1 debug: 4.4.1(supports-color@8.1.1) escape-string-regexp: 4.0.0 - eslint: 9.33.0(jiti@2.5.1) + eslint: 9.34.0(jiti@2.5.1) espree: 10.4.0 esquery: 1.6.0 parse-imports-exports: 0.2.4 @@ -8024,12 +7933,12 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-jsonc@2.20.1(eslint@9.33.0(jiti@2.5.1)): + eslint-plugin-jsonc@2.20.1(eslint@9.34.0(jiti@2.5.1)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1)) - eslint: 9.33.0(jiti@2.5.1) - eslint-compat-utils: 0.6.5(eslint@9.33.0(jiti@2.5.1)) - eslint-json-compat-utils: 0.2.1(eslint@9.33.0(jiti@2.5.1))(jsonc-eslint-parser@2.4.0) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.5.1)) + eslint: 9.34.0(jiti@2.5.1) + eslint-compat-utils: 0.6.5(eslint@9.34.0(jiti@2.5.1)) + eslint-json-compat-utils: 0.2.1(eslint@9.34.0(jiti@2.5.1))(jsonc-eslint-parser@2.4.0) espree: 10.4.0 graphemer: 1.4.0 jsonc-eslint-parser: 2.4.0 @@ -8038,7 +7947,7 @@ snapshots: transitivePeerDependencies: - '@eslint/json' - eslint-plugin-jsx-a11y@6.10.2(eslint@9.33.0(jiti@2.5.1)): + eslint-plugin-jsx-a11y@6.10.2(eslint@9.34.0(jiti@2.5.1)): dependencies: aria-query: 5.3.2 array-includes: 3.1.9 @@ -8048,7 +7957,7 @@ snapshots: axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 9.33.0(jiti@2.5.1) + eslint: 9.34.0(jiti@2.5.1) hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 @@ -8057,15 +7966,15 @@ snapshots: safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 - eslint-plugin-lodash@8.0.0(eslint@9.33.0(jiti@2.5.1)): + eslint-plugin-lodash@8.0.0(eslint@9.34.0(jiti@2.5.1)): dependencies: - eslint: 9.33.0(jiti@2.5.1) + eslint: 9.34.0(jiti@2.5.1) lodash: 4.17.21 - eslint-plugin-mocha@10.5.0(eslint@9.33.0(jiti@2.5.1)): + eslint-plugin-mocha@10.5.0(eslint@9.34.0(jiti@2.5.1)): dependencies: - eslint: 9.33.0(jiti@2.5.1) - eslint-utils: 3.0.0(eslint@9.33.0(jiti@2.5.1)) + eslint: 9.34.0(jiti@2.5.1) + eslint-utils: 3.0.0(eslint@9.34.0(jiti@2.5.1)) globals: 13.24.0 rambda: 7.5.0 @@ -8073,12 +7982,12 @@ snapshots: dependencies: requireindex: 1.1.0 - eslint-plugin-n@17.21.3(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2): + eslint-plugin-n@17.21.3(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.5.1)) enhanced-resolve: 5.18.3 - eslint: 9.33.0(jiti@2.5.1) - eslint-plugin-es-x: 7.8.0(eslint@9.33.0(jiti@2.5.1)) + eslint: 9.34.0(jiti@2.5.1) + eslint-plugin-es-x: 7.8.0(eslint@9.34.0(jiti@2.5.1)) get-tsconfig: 4.10.1 globals: 15.15.0 globrex: 0.1.2 @@ -8088,36 +7997,36 @@ snapshots: transitivePeerDependencies: - typescript - eslint-plugin-perfectionist@4.15.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2): + eslint-plugin-perfectionist@4.15.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/types': 8.39.1 - '@typescript-eslint/utils': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.33.0(jiti@2.5.1) + '@typescript-eslint/types': 8.41.0 + '@typescript-eslint/utils': 8.39.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.34.0(jiti@2.5.1) natural-orderby: 5.0.0 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-prettier@5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1))(prettier@3.6.2): + eslint-plugin-prettier@5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1))(prettier@3.6.2): dependencies: - eslint: 9.33.0(jiti@2.5.1) + eslint: 9.34.0(jiti@2.5.1) prettier: 3.6.2 prettier-linter-helpers: 1.0.0 synckit: 0.11.11 optionalDependencies: '@types/eslint': 9.6.1 - eslint-config-prettier: 10.1.8(eslint@9.33.0(jiti@2.5.1)) + eslint-config-prettier: 10.1.8(eslint@9.34.0(jiti@2.5.1)) - eslint-plugin-promise@7.2.1(eslint@9.33.0(jiti@2.5.1)): + eslint-plugin-promise@7.2.1(eslint@9.34.0(jiti@2.5.1)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1)) - eslint: 9.33.0(jiti@2.5.1) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.5.1)) + eslint: 9.34.0(jiti@2.5.1) - eslint-plugin-react-hooks@5.2.0(eslint@9.33.0(jiti@2.5.1)): + eslint-plugin-react-hooks@5.2.0(eslint@9.34.0(jiti@2.5.1)): dependencies: - eslint: 9.33.0(jiti@2.5.1) + eslint: 9.34.0(jiti@2.5.1) - eslint-plugin-react@7.37.5(eslint@9.33.0(jiti@2.5.1)): + eslint-plugin-react@7.37.5(eslint@9.34.0(jiti@2.5.1)): dependencies: array-includes: 3.1.9 array.prototype.findlast: 1.2.5 @@ -8125,7 +8034,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.1 - eslint: 9.33.0(jiti@2.5.1) + eslint: 9.34.0(jiti@2.5.1) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -8139,70 +8048,67 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-regexp@2.10.0(eslint@9.33.0(jiti@2.5.1)): + eslint-plugin-regexp@2.10.0(eslint@9.34.0(jiti@2.5.1)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.5.1)) '@eslint-community/regexpp': 4.12.1 comment-parser: 1.4.1 - eslint: 9.33.0(jiti@2.5.1) + eslint: 9.34.0(jiti@2.5.1) jsdoc-type-pratt-parser: 4.8.0 refa: 0.12.1 regexp-ast-analysis: 0.7.1 scslre: 0.3.0 - eslint-plugin-unicorn@57.0.0(eslint@9.33.0(jiti@2.5.1)): + eslint-plugin-unicorn@60.0.0(eslint@9.34.0(jiti@2.5.1)): dependencies: '@babel/helper-validator-identifier': 7.27.1 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.5.1)) + '@eslint/plugin-kit': 0.3.5 + change-case: 5.4.4 ci-info: 4.3.0 clean-regexp: 1.0.0 core-js-compat: 3.45.0 - eslint: 9.33.0(jiti@2.5.1) + eslint: 9.34.0(jiti@2.5.1) esquery: 1.6.0 - globals: 15.15.0 + find-up-simple: 1.0.1 + globals: 16.3.0 indent-string: 5.0.0 - is-builtin-module: 4.0.0 + is-builtin-module: 5.0.0 jsesc: 3.1.0 pluralize: 8.0.0 - read-package-up: 11.0.0 regexp-tree: 0.1.27 regjsparser: 0.12.0 semver: 7.7.2 strip-indent: 4.0.0 - eslint-plugin-yml@1.18.0(eslint@9.33.0(jiti@2.5.1)): + eslint-plugin-yml@1.18.0(eslint@9.34.0(jiti@2.5.1)): dependencies: debug: 4.4.1(supports-color@8.1.1) escape-string-regexp: 4.0.0 - eslint: 9.33.0(jiti@2.5.1) - eslint-compat-utils: 0.6.5(eslint@9.33.0(jiti@2.5.1)) + eslint: 9.34.0(jiti@2.5.1) + eslint-compat-utils: 0.6.5(eslint@9.34.0(jiti@2.5.1)) natural-compare: 1.4.0 yaml-eslint-parser: 1.3.0 transitivePeerDependencies: - supports-color - eslint-plugin-zod@1.4.0(eslint@9.33.0(jiti@2.5.1)): + eslint-plugin-zod@1.4.0(eslint@9.34.0(jiti@2.5.1)): dependencies: - eslint: 9.33.0(jiti@2.5.1) + eslint: 9.34.0(jiti@2.5.1) eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 - eslint-scope@7.2.2: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - eslint-scope@8.4.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-utils@3.0.0(eslint@9.33.0(jiti@2.5.1)): + eslint-utils@3.0.0(eslint@9.34.0(jiti@2.5.1)): dependencies: - eslint: 9.33.0(jiti@2.5.1) + eslint: 9.34.0(jiti@2.5.1) eslint-visitor-keys: 2.1.0 eslint-visitor-keys@2.1.0: {} @@ -8211,58 +8117,15 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@8.57.1: + eslint@9.34.0(jiti@2.5.1): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) - '@eslint-community/regexpp': 4.12.1 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.1 - '@humanwhocodes/config-array': 0.13.0 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.3.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.1(supports-color@8.1.1) - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.6.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.4 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - - eslint@9.33.0(jiti@2.5.1): - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.5.1)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.21.0 '@eslint/config-helpers': 0.3.1 '@eslint/core': 0.15.2 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.33.0 + '@eslint/js': 9.34.0 '@eslint/plugin-kit': 0.3.5 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 @@ -8411,10 +8274,6 @@ snapshots: dependencies: is-unicode-supported: 2.1.0 - file-entry-cache@6.0.1: - dependencies: - flat-cache: 3.2.0 - file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 @@ -8456,12 +8315,6 @@ snapshots: semver-regex: 4.0.5 super-regex: 1.0.0 - flat-cache@3.2.0: - dependencies: - flatted: 3.3.3 - keyv: 4.5.4 - rimraf: 3.0.2 - flat-cache@4.0.1: dependencies: flatted: 3.3.3 @@ -8935,9 +8788,9 @@ snapshots: call-bound: 1.0.4 has-tostringtag: 1.0.2 - is-builtin-module@4.0.0: + is-builtin-module@5.0.0: dependencies: - builtin-modules: 4.0.0 + builtin-modules: 5.0.0 is-bun-module@2.0.0: dependencies: @@ -8992,10 +8845,10 @@ snapshots: dependencies: is-extglob: 2.1.1 - is-immutable-type@5.0.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2): + is-immutable-type@5.0.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/type-utils': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.33.0(jiti@2.5.1) + '@typescript-eslint/type-utils': 8.39.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.34.0(jiti@2.5.1) ts-api-utils: 2.1.0(typescript@5.9.2) ts-declaration-location: 1.0.7(typescript@5.9.2) typescript: 5.9.2 @@ -9031,8 +8884,6 @@ snapshots: is-obj@2.0.0: {} - is-path-inside@3.0.3: {} - is-plain-obj@2.1.0: {} is-plain-obj@4.1.0: {} @@ -9187,8 +9038,6 @@ snapshots: jsbn@0.1.1: {} - jsdoc-type-pratt-parser@4.0.0: {} - jsdoc-type-pratt-parser@4.1.0: {} jsdoc-type-pratt-parser@4.8.0: {} @@ -9392,8 +9241,6 @@ snapshots: dependencies: js-tokens: 4.0.0 - loupe@3.2.0: {} - lower-case@2.0.2: dependencies: tslib: 2.8.1 @@ -9500,10 +9347,6 @@ snapshots: dependencies: brace-expansion: 1.1.12 - minimatch@9.0.3: - dependencies: - brace-expansion: 2.0.2 - minimatch@9.0.5: dependencies: brace-expansion: 2.0.2 @@ -9904,8 +9747,6 @@ snapshots: path-type@6.0.0: {} - pathval@2.0.1: {} - performance-now@2.1.0: {} picocolors@1.1.1: {} @@ -10184,10 +10025,6 @@ snapshots: rfdc@1.4.1: {} - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - rimraf@6.0.1: dependencies: glob: 11.0.3 @@ -10648,8 +10485,6 @@ snapshots: glob: 10.4.5 minimatch: 9.0.5 - text-table@0.2.0: {} - thenify-all@1.6.0: dependencies: thenify: 3.3.1 @@ -10691,10 +10526,6 @@ snapshots: traverse@0.6.8: {} - ts-api-utils@1.4.3(typescript@5.9.2): - dependencies: - typescript: 5.9.2 - ts-api-utils@2.1.0(typescript@5.9.2): dependencies: typescript: 5.9.2 @@ -10767,13 +10598,13 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2): + typescript-eslint@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.39.1(@typescript-eslint/parser@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/parser': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/typescript-estree': 8.39.1(typescript@5.9.2) - '@typescript-eslint/utils': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.33.0(jiti@2.5.1) + '@typescript-eslint/eslint-plugin': 8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/parser': 8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.34.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color diff --git a/src/bin/generateDocs.js b/src/bin/generateDocs.js index 22f989fdc..e2b802409 100644 --- a/src/bin/generateDocs.js +++ b/src/bin/generateDocs.js @@ -66,7 +66,7 @@ const formatCodeSnippet = (setup, ruleName) => { const getAssertions = async () => { const assertionFiles = (await glob(path.resolve(dirname, '../../test/rules/assertions/*.js'))).filter((file) => { return !file.includes('flatConfig'); - }).reverse(); + }).toReversed(); const assertionNames = assertionFiles.map((filePath) => { return path.basename(filePath, '.js'); diff --git a/src/iterateJsdoc.js b/src/iterateJsdoc.js index 8b7748d78..0953abefe 100644 --- a/src/iterateJsdoc.js +++ b/src/iterateJsdoc.js @@ -1636,9 +1636,10 @@ const getUtils = ( /** @type {GetClassNode} */ utils.getClassNode = () => { + // eslint-disable-next-line canonical/no-use-extend-native -- Not extending return [ ...ancestors, node, - ].reverse().find((parent) => { + ].toReversed().find((parent) => { return parent && [ 'ClassDeclaration', 'ClassExpression', ].includes(parent.type); diff --git a/src/rules/noBlankBlocks.js b/src/rules/noBlankBlocks.js index 7bc34af96..e4b53a979 100644 --- a/src/rules/noBlankBlocks.js +++ b/src/rules/noBlankBlocks.js @@ -27,7 +27,7 @@ export default iterateJsdoc(({ line: lastDescriptionLine, }, enableFixer ? () => { - jsdoc.source.splice(0, jsdoc.source.length); + jsdoc.source.splice(0); } : null, ); }, { diff --git a/src/rules/requireDescriptionCompleteSentence.js b/src/rules/requireDescriptionCompleteSentence.js index a066eaced..0f5a1b158 100644 --- a/src/rules/requireDescriptionCompleteSentence.js +++ b/src/rules/requireDescriptionCompleteSentence.js @@ -247,7 +247,7 @@ export default iterateJsdoc(({ index, length, }; - }).reverse(); + }).toReversed(); for (const { index, diff --git a/src/rules/tagLines.js b/src/rules/tagLines.js index cff8789af..c6bcd0e6b 100644 --- a/src/rules/tagLines.js +++ b/src/rules/tagLines.js @@ -169,7 +169,7 @@ export default iterateJsdoc(({ }, ] of tg.source.entries()) { if (description) { - lines.splice(0, lines.length); + lines.splice(0); tagSourceIdx = idx; } diff --git a/test/getJsdocProcessPlugin.js b/test/getJsdocProcessPlugin.js index fbc2be578..86c04f41a 100644 --- a/test/getJsdocProcessPlugin.js +++ b/test/getJsdocProcessPlugin.js @@ -23,6 +23,10 @@ const check = ({ text, }) => { const plugin = getJsdocProcessorPlugin(options); + if (!plugin.processors || typeof plugin.processors.examples.preprocess !== 'function') { + throw new Error('No processors'); + } + const results = plugin.processors.examples.preprocess( text, filename, ); @@ -168,6 +172,10 @@ describe('`getJsdocProcessorPlugin`', () => { `; const plugin = getJsdocProcessorPlugin(options); + if (!plugin.processors || typeof plugin.processors.examples.preprocess !== 'function') { + throw new Error('No processors'); + } + const results = plugin.processors.examples.preprocess( text, filename, ); @@ -179,6 +187,10 @@ describe('`getJsdocProcessorPlugin`', () => { }, ]); + if (!plugin.processors || typeof plugin.processors.examples.postprocess !== 'function') { + throw new Error('No processors'); + } + const postResults = plugin.processors.examples.postprocess( [ [], @@ -380,7 +392,6 @@ describe('`getJsdocProcessorPlugin`', () => { `; check({ filename, - // @ts-expect-error Ok? options, result: [ text, @@ -651,6 +662,10 @@ describe('`getJsdocProcessorPlugin`', () => { `; const plugin = getJsdocProcessorPlugin(options); + if (!plugin.processors || typeof plugin.processors.examples.preprocess !== 'function') { + throw new Error('No processors'); + } + const results = plugin.processors.examples.preprocess( text, filename, ); @@ -662,6 +677,10 @@ describe('`getJsdocProcessorPlugin`', () => { }, ]); + if (!plugin.processors || typeof plugin.processors.examples.postprocess !== 'function') { + throw new Error('No processors'); + } + const postResults = plugin.processors.examples.postprocess( [ [], [ @@ -700,6 +719,11 @@ describe('`getJsdocProcessorPlugin`', () => { `; const plugin = getJsdocProcessorPlugin(options); + + if (!plugin.processors || typeof plugin.processors.examples.preprocess !== 'function') { + throw new Error('No processors'); + } + const results = plugin.processors.examples.preprocess( text, filename, ); @@ -711,6 +735,10 @@ describe('`getJsdocProcessorPlugin`', () => { }, ]); + if (!plugin.processors || typeof plugin.processors.examples.postprocess !== 'function') { + throw new Error('No processors'); + } + const postResults = plugin.processors.examples.postprocess( [ [], [ @@ -750,6 +778,11 @@ describe('`getJsdocProcessorPlugin`', () => { `; const plugin = getJsdocProcessorPlugin(options); + + if (!plugin.processors || typeof plugin.processors.examples.preprocess !== 'function') { + throw new Error('No processors'); + } + const results = plugin.processors.examples.preprocess( text, filename, ); @@ -761,6 +794,10 @@ describe('`getJsdocProcessorPlugin`', () => { }, ]); + if (!plugin.processors || typeof plugin.processors.examples.postprocess !== 'function') { + throw new Error('No processors'); + } + const postResults = plugin.processors.examples.postprocess( [ [], [ From 09ee4ab2479fc3ec7e97fa1d9562a4dd34345e57 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 2 Sep 2025 16:20:41 +0800 Subject: [PATCH 040/189] feat(`require-template`): add `exemptedBy`; fixes #1460 (#1463) --- .README/rules/require-template.md | 10 ++++++- docs/rules/require-template.md | 24 ++++++++++++++++- src/rules/requireTemplate.js | 10 +++++++ test/rules/assertions/requireTemplate.js | 33 ++++++++++++++++++++++++ 4 files changed, 75 insertions(+), 2 deletions(-) diff --git a/.README/rules/require-template.md b/.README/rules/require-template.md index 83efdda97..173c4db41 100644 --- a/.README/rules/require-template.md +++ b/.README/rules/require-template.md @@ -38,13 +38,21 @@ templates of this format: Defaults to `false`. +### `exemptedBy` + +Array of tags (e.g., `['type']`) whose presence on the document +block avoids the need for a `@template`. Defaults to an array with +`inheritdoc`. If you set this array, it will overwrite the default, +so be sure to add back `inheritdoc` if you wish its presence to cause +exemption of the rule. + ||| |---|---| |Context|everywhere| |Tags|`template`| |Recommended|false| |Settings|| -|Options|`requireSeparateTemplates`| +|Options|`exemptedBy`, `requireSeparateTemplates`| ## Failing examples diff --git a/docs/rules/require-template.md b/docs/rules/require-template.md index 55d713c45..abbfea674 100644 --- a/docs/rules/require-template.md +++ b/docs/rules/require-template.md @@ -44,13 +44,23 @@ templates of this format: Defaults to `false`. + + +### exemptedBy + +Array of tags (e.g., `['type']`) whose presence on the document +block avoids the need for a `@template`. Defaults to an array with +`inheritdoc`. If you set this array, it will overwrite the default, +so be sure to add back `inheritdoc` if you wish its presence to cause +exemption of the rule. + ||| |---|---| |Context|everywhere| |Tags|`template`| |Recommended|false| |Settings|| -|Options|`requireSeparateTemplates`| +|Options|`exemptedBy`, `requireSeparateTemplates`| @@ -362,5 +372,17 @@ export default class { * @property {U} aNumber number * @property {string} parentPath path */ + +/** + * @type {Something} + */ +type Pairs = [D, V | undefined]; +// "jsdoc/require-template": ["error"|"warn", {"exemptedBy":["type"]}] + +/** + * @inheritdoc + * @typedef {[D, V | undefined]} Pairs + */ +// "jsdoc/require-template": ["error"|"warn", {"exemptedBy":["inheritdoc"]}] ```` diff --git a/src/rules/requireTemplate.js b/src/rules/requireTemplate.js index f1e5eeb97..feadeba11 100644 --- a/src/rules/requireTemplate.js +++ b/src/rules/requireTemplate.js @@ -12,6 +12,10 @@ export default iterateJsdoc(({ settings, utils, }) => { + if (utils.avoidDocs()) { + return; + } + const { requireSeparateTemplates = false, } = context.options[0] || {}; @@ -189,6 +193,12 @@ export default iterateJsdoc(({ { additionalProperties: false, properties: { + exemptedBy: { + items: { + type: 'string', + }, + type: 'array', + }, requireSeparateTemplates: { type: 'boolean', }, diff --git a/test/rules/assertions/requireTemplate.js b/test/rules/assertions/requireTemplate.js index e3b6a9b5b..8336a7936 100644 --- a/test/rules/assertions/requireTemplate.js +++ b/test/rules/assertions/requireTemplate.js @@ -645,5 +645,38 @@ export default /** @type {import('../index.js').TestCases} */ ({ */ `, }, + { + code: ` + /** + * @type {Something} + */ + type Pairs = [D, V | undefined]; + `, + languageOptions: { + parser: typescriptEslintParser, + }, + options: [ + { + exemptedBy: [ + 'type', + ], + }, + ], + }, + { + code: ` + /** + * @inheritdoc + * @typedef {[D, V | undefined]} Pairs + */ + `, + options: [ + { + exemptedBy: [ + 'inheritdoc', + ], + }, + ], + }, ], }); From 81323920dbe3ee7401f64e062e72432e10f03661 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 2 Sep 2025 20:08:45 +0800 Subject: [PATCH 041/189] fix(`valid-types`): try parsing whole item before splitting into commas; fixes #1464 (#1465) --- docs/rules/valid-types.md | 14 ++++++++++++++ src/rules/validTypes.js | 11 +++++++++-- test/rules/assertions/validTypes.js | 17 +++++++++++++++++ 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/docs/rules/valid-types.md b/docs/rules/valid-types.md index 57df7de03..7e346ae9e 100644 --- a/docs/rules/valid-types.md +++ b/docs/rules/valid-types.md @@ -888,5 +888,19 @@ function quux() { /** * @returns {@link SomeType} */ + +/** + * @template {string} Selector + * @template {keyof GlobalEventHandlersEventMap} TEventType + * @template {Element} [TElement=import('typed-query-selector/parser').ParseSelector] + * @param {Selector} selector + * @param {TEventType} type + * @param {import('delegate-it').DelegateEventHandler} callback + * @param {Omit} [options] + * @returns {void} + */ +export function onGlobalEvent (selector, type, callback, options) { + delegate(document, selector, type, callback, options) +} ```` diff --git a/src/rules/validTypes.js b/src/rules/validTypes.js index bf92cad0e..bc0bc10a7 100644 --- a/src/rules/validTypes.js +++ b/src/rules/validTypes.js @@ -358,8 +358,15 @@ export default iterateJsdoc(({ if (hasNameOrNamepathPosition) { if (mode !== 'jsdoc' && tag.tag === 'template') { - for (const namepath of utils.parseClosureTemplateTag(tag)) { - validNamepathParsing(namepath); + if (!tryParsePathIgnoreError( + // May be an issue with the commas of + // `utils.parseClosureTemplateTag`, so first try a raw + // value; we really need a proper parser instead, however. + tag.name.trim().replace(/^\[?(?.*?)=.*$/v, '$'), + )) { + for (const namepath of utils.parseClosureTemplateTag(tag)) { + validNamepathParsing(namepath); + } } } else { validNamepathParsing(tag.name, tag.tag); diff --git a/test/rules/assertions/validTypes.js b/test/rules/assertions/validTypes.js index 6a5e09c93..b72198ea4 100644 --- a/test/rules/assertions/validTypes.js +++ b/test/rules/assertions/validTypes.js @@ -1869,5 +1869,22 @@ export default /** @type {import('../index.js').TestCases} */ ({ */ `, }, + { + code: ` + /** + * @template {string} Selector + * @template {keyof GlobalEventHandlersEventMap} TEventType + * @template {Element} [TElement=import('typed-query-selector/parser').ParseSelector] + * @param {Selector} selector + * @param {TEventType} type + * @param {import('delegate-it').DelegateEventHandler} callback + * @param {Omit} [options] + * @returns {void} + */ + export function onGlobalEvent (selector, type, callback, options) { + delegate(document, selector, type, callback, options) + } + `, + }, ], }); From 95f33808772733623549d1399a2b3b43cc652c65 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Wed, 3 Sep 2025 03:03:49 +0800 Subject: [PATCH 042/189] feat(`require-hyphen-before-param-description`): when `always` is set, disallow hyphen at end of line; fixes #1435 (#1454) --- ...require-hyphen-before-param-description.md | 7 ++- ...require-hyphen-before-param-description.md | 34 ++++++++++- .../requireHyphenBeforeParamDescription.js | 57 ++++++++++++------- .../requireHyphenBeforeParamDescription.js | 52 +++++++++++++++++ 4 files changed, 128 insertions(+), 22 deletions(-) diff --git a/.README/rules/require-hyphen-before-param-description.md b/.README/rules/require-hyphen-before-param-description.md index bb490f176..87403b0db 100644 --- a/.README/rules/require-hyphen-before-param-description.md +++ b/.README/rules/require-hyphen-before-param-description.md @@ -6,7 +6,7 @@ Requires (or disallows) a hyphen before the `@param` description. ## Fixer -(Todo) +Adds a hyphen for "always" and removes a hyphen for "never". ## Options @@ -16,6 +16,11 @@ If the string is `"always"` then a problem is raised when there is no hyphen before the description. If it is `"never"` then a problem is raised when there is a hyphen before the description. The default value is `"always"`. +Even if hyphens are set to "always" appear after the tag name, they will +actually be forbidden in the event that they are followed immediately by +the end of a line (this will otherwise cause Visual Studio Code to display +incorrectly). + The options object may have the following properties to indicate behavior for other tags besides the `@param` tag (or the `@arg` tag if so set): diff --git a/docs/rules/require-hyphen-before-param-description.md b/docs/rules/require-hyphen-before-param-description.md index 6022aa17c..0fa4f882d 100644 --- a/docs/rules/require-hyphen-before-param-description.md +++ b/docs/rules/require-hyphen-before-param-description.md @@ -15,7 +15,7 @@ Requires (or disallows) a hyphen before the `@param` description. ## Fixer -(Todo) +Adds a hyphen for "always" and removes a hyphen for "never". @@ -27,6 +27,11 @@ If the string is `"always"` then a problem is raised when there is no hyphen before the description. If it is `"never"` then a problem is raised when there is a hyphen before the description. The default value is `"always"`. +Even if hyphens are set to "always" appear after the tag name, they will +actually be forbidden in the event that they are followed immediately by +the end of a line (this will otherwise cause Visual Studio Code to display +incorrectly). + The options object may have the following properties to indicate behavior for other tags besides the `@param` tag (or the `@arg` tag if so set): @@ -202,6 +207,14 @@ function quux () { */ function test(input) {} // Message: There must be a hyphen before @param description. + +/** + * @param foo - + * The possible values for `foo` are as follows. + * - `"option1"`: Description of option 1. + * - `"option2"`: Description of option 2. + */ +// Message: There must be no hyphen followed by newline after the @param name. ```` @@ -294,5 +307,24 @@ function main(argv) { * @typedef {any} Test */ // "jsdoc/require-hyphen-before-param-description": ["error"|"warn", "always",{"tags":{"template":"always"}}] + +/** + * @param foo - The possible values for `foo` are as follows. + * - `"option1"`: Description of option 1. + * - `"option2"`: Description of option 2. + */ + +/** + * @param foo + * The possible values for `foo` are as follows. + * - `"option1"`: Description of option 1. + * - `"option2"`: Description of option 2. + */ + +/** + * @param foo + * - `"option1"`: Description of option 1. + * - `"option2"`: Description of option 2. + */ ```` diff --git a/src/rules/requireHyphenBeforeParamDescription.js b/src/rules/requireHyphenBeforeParamDescription.js index cc2617d94..d48b4e32b 100644 --- a/src/rules/requireHyphenBeforeParamDescription.js +++ b/src/rules/requireHyphenBeforeParamDescription.js @@ -30,6 +30,8 @@ export default iterateJsdoc(({ } const startsWithHyphen = (/^\s*-/v).test(desc); + const hyphenNewline = (/^\s*-\n/v).test(desc); + let lines = 0; for (const { tokens, @@ -41,30 +43,41 @@ export default iterateJsdoc(({ lines++; } - if (always) { + if (always && !hyphenNewline) { if (!startsWithHyphen) { - utils.reportJSDoc( - `There must be a hyphen before @${targetTagName} description.`, - { - line: jsdocTag.source[0].number + lines, - }, - () => { - for (const { - tokens, - } of jsdocTag.source) { - if (tokens.description) { - tokens.description = tokens.description.replace( - /^(\s*)/v, '$1- ', - ); - break; - } - } - }, - ); + let fixIt = true; + for (const { + tokens, + } of jsdocTag.source) { + if (tokens.description) { + tokens.description = tokens.description.replace( + /^(\s*)/v, '$1- ', + ); + break; + } + + // Linebreak after name since has no description + if (tokens.name) { + fixIt = false; + break; + } + } + + if (fixIt) { + utils.reportJSDoc( + `There must be a hyphen before @${targetTagName} description.`, + { + line: jsdocTag.source[0].number + lines, + }, + () => {}, + ); + } } } else if (startsWithHyphen) { utils.reportJSDoc( - `There must be no hyphen before @${targetTagName} description.`, + always ? + `There must be no hyphen followed by newline after the @${targetTagName} name.` : + `There must be no hyphen before @${targetTagName} description.`, { line: jsdocTag.source[0].number + lines, }, @@ -76,6 +89,10 @@ export default iterateJsdoc(({ tokens.description = tokens.description.replace( /^\s*-\s*/v, '', ); + if (hyphenNewline) { + tokens.postName = ''; + } + break; } } diff --git a/test/rules/assertions/requireHyphenBeforeParamDescription.js b/test/rules/assertions/requireHyphenBeforeParamDescription.js index 1cb254c25..be5b4beee 100644 --- a/test/rules/assertions/requireHyphenBeforeParamDescription.js +++ b/test/rules/assertions/requireHyphenBeforeParamDescription.js @@ -496,6 +496,30 @@ export default /** @type {import('../index.js').TestCases} */ ({ function test(name) {} `, }, + { + code: ` + /** + * @param foo - + * The possible values for \`foo\` are as follows. + * - \`"option1"\`: Description of option 1. + * - \`"option2"\`: Description of option 2. + */ + `, + errors: [ + { + line: 3, + message: 'There must be no hyphen followed by newline after the @param name.', + }, + ], + output: ` + /** + * @param foo + * The possible values for \`foo\` are as follows. + * - \`"option1"\`: Description of option 1. + * - \`"option2"\`: Description of option 2. + */ + `, + }, ], valid: [ { @@ -658,5 +682,33 @@ export default /** @type {import('../index.js').TestCases} */ ({ }, ], }, + { + code: ` + /** + * @param foo - The possible values for \`foo\` are as follows. + * - \`"option1"\`: Description of option 1. + * - \`"option2"\`: Description of option 2. + */ + `, + }, + { + code: ` + /** + * @param foo + * The possible values for \`foo\` are as follows. + * - \`"option1"\`: Description of option 1. + * - \`"option2"\`: Description of option 2. + */ + `, + }, + { + code: ` + /** + * @param foo + * - \`"option1"\`: Description of option 1. + * - \`"option2"\`: Description of option 2. + */ + `, + }, ], }); From d67dc2d9aa8305f5a89c09dbe9cdc497389dff21 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Wed, 3 Sep 2025 16:26:31 +0800 Subject: [PATCH 043/189] chore: avoid TS on binary files (#1467) Also: - docs: non-deprecated TS --- package.json | 2 +- .../{generateOptions.mjs => generateOptions.js} | 0 src/index.js | 14 +++++++------- tsconfig-prod.json | 4 +++- tsconfig.json | 4 +++- 5 files changed, 14 insertions(+), 10 deletions(-) rename src/bin/{generateOptions.mjs => generateOptions.js} (100%) diff --git a/package.json b/package.json index a25fda057..4bdf49b58 100644 --- a/package.json +++ b/package.json @@ -143,7 +143,7 @@ "check-docs": "babel-node ./src/bin/generateDocs.js --check", "create-docs": "pnpm run create-options && babel-node ./src/bin/generateDocs.js", "create-rule": "babel-node ./src/bin/generateRule.js", - "create-options": "node ./src/bin/generateOptions.mjs", + "create-options": "node ./src/bin/generateOptions.js", "install-offline": "pnpm install --prefer-offline --no-audit", "lint": "eslint", "lint-fix": "eslint --fix", diff --git a/src/bin/generateOptions.mjs b/src/bin/generateOptions.js similarity index 100% rename from src/bin/generateOptions.mjs rename to src/bin/generateOptions.js diff --git a/src/index.js b/src/index.js index d26b80b58..569ceb9c5 100644 --- a/src/index.js +++ b/src/index.js @@ -137,7 +137,7 @@ const index = { /** * @param {"warn"|"error"} warnOrError * @param {string} [flatName] - * @returns {import('eslint').Linter.FlatConfig} + * @returns {import('eslint').Linter.Config} */ const createRecommendedRuleset = (warnOrError, flatName) => { return { @@ -216,7 +216,7 @@ const createRecommendedRuleset = (warnOrError, flatName) => { /** * @param {"warn"|"error"} warnOrError * @param {string} [flatName] - * @returns {import('eslint').Linter.FlatConfig} + * @returns {import('eslint').Linter.Config} */ const createRecommendedTypeScriptRuleset = (warnOrError, flatName) => { const ruleset = createRecommendedRuleset(warnOrError, flatName); @@ -244,7 +244,7 @@ const createRecommendedTypeScriptRuleset = (warnOrError, flatName) => { /** * @param {"warn"|"error"} warnOrError * @param {string} [flatName] - * @returns {import('eslint').Linter.FlatConfig} + * @returns {import('eslint').Linter.Config} */ const createRecommendedTypeScriptFlavorRuleset = (warnOrError, flatName) => { const ruleset = createRecommendedRuleset(warnOrError, flatName); @@ -267,7 +267,7 @@ const createStandaloneRulesetFactory = (ruleNames) => { /** * @param {"warn"|"error"} warnOrError * @param {string} [flatName] - * @returns {import('eslint').Linter.FlatConfig} + * @returns {import('eslint').Linter.Config} */ return (warnOrError, flatName) => { return { @@ -411,7 +411,7 @@ index.configs['flat/stylistic-typescript-error'] = createStylisticTypeScriptRule index.configs['flat/stylistic-typescript-flavor'] = createStylisticTypeScriptFlavorRuleset('warn', 'flat/stylistic-typescript-flavor'); index.configs['flat/stylistic-typescript-flavor-error'] = createStylisticTypeScriptFlavorRuleset('error', 'flat/stylistic-typescript-error-flavor'); -index.configs.examples = /** @type {import('eslint').Linter.FlatConfig[]} */ ([ +index.configs.examples = /** @type {import('eslint').Linter.Config[]} */ ([ { files: [ '**/*.js', @@ -465,7 +465,7 @@ index.configs.examples = /** @type {import('eslint').Linter.FlatConfig[]} */ ([ }, ]); -index.configs['default-expressions'] = /** @type {import('eslint').Linter.FlatConfig[]} */ ([ +index.configs['default-expressions'] = /** @type {import('eslint').Linter.Config[]} */ ([ { files: [ '**/*.js', @@ -502,7 +502,7 @@ index.configs['default-expressions'] = /** @type {import('eslint').Linter.FlatCo }, ]); -index.configs['examples-and-default-expressions'] = /** @type {import('eslint').Linter.FlatConfig[]} */ ([ +index.configs['examples-and-default-expressions'] = /** @type {import('eslint').Linter.Config[]} */ ([ { name: 'jsdoc/examples-and-default-expressions', plugins: { diff --git a/tsconfig-prod.json b/tsconfig-prod.json index 7ae6b80fa..188689b9d 100644 --- a/tsconfig-prod.json +++ b/tsconfig-prod.json @@ -15,7 +15,9 @@ "outDir": "dist" }, "include": [ - "src/**/*.js" + "src/*.js", + "src/rules/*.js", + "src/utils/*.js", ], "exclude": ["node_modules", "src/bin/*.js"] } diff --git a/tsconfig.json b/tsconfig.json index 1e2e5172b..a8e115696 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -14,7 +14,9 @@ "outDir": "dist" }, "include": [ - "src/**/*.js", + "src/*.js", + "src/rules/*.js", + "src/utils/*.js", "test/**/*.js", "typings/gitdown.d.ts", "typings/babel__eslint-parser.d.ts" From 5fbab65f0f1fe7375e749eb22c032b018d030ca8 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Wed, 3 Sep 2025 16:49:18 +0800 Subject: [PATCH 044/189] fix(`check-template-names`, `require-template`): ensure template name is based on what is within any brackets and preceding equal sign; fixes #1466 (#1468) --- docs/rules/check-template-names.md | 16 ++++++++++++++++ src/rules/checkTemplateNames.js | 5 +---- src/rules/requireTemplate.js | 5 +---- test/rules/assertions/checkTemplateNames.js | 19 +++++++++++++++++++ 4 files changed, 37 insertions(+), 8 deletions(-) diff --git a/docs/rules/check-template-names.md b/docs/rules/check-template-names.md index 42c958786..794f75d4d 100644 --- a/docs/rules/check-template-names.md +++ b/docs/rules/check-template-names.md @@ -395,5 +395,21 @@ export class User { } methodToIgnore() {} } + +/** + * @template [ChannelDataType=undefined] + * @param {string} messageType - A key used for sending and receiving messages. + * @returns {MessageChannel} A channel that can create messages of its + * own type. + */ +export function createMessageChannel(messageType) { + // Note: It should also infer the type if the new channel is returned + // directly rather than returned as a typed variable. + + /** @type {MessageChannel} */ + const messageChannel = new MessageChannel(messageType); + + return messageChannel; +} ```` diff --git a/src/rules/checkTemplateNames.js b/src/rules/checkTemplateNames.js index 8b8a9276a..f43dc7248 100644 --- a/src/rules/checkTemplateNames.js +++ b/src/rules/checkTemplateNames.js @@ -70,10 +70,7 @@ export default iterateJsdoc(({ const checkTemplateTags = () => { for (const tag of templateTags) { - const { - name, - } = tag; - const names = name.split(/,\s*/v); + const names = utils.parseClosureTemplateTag(tag); for (const nme of names) { if (!usedNames.has(nme)) { report(`@template ${nme} not in use`, null, tag); diff --git a/src/rules/requireTemplate.js b/src/rules/requireTemplate.js index feadeba11..1823383f4 100644 --- a/src/rules/requireTemplate.js +++ b/src/rules/requireTemplate.js @@ -32,10 +32,7 @@ export default iterateJsdoc(({ if (requireSeparateTemplates) { for (const tag of templateTags) { - const { - name, - } = tag; - const names = name.split(/,\s*/v); + const names = utils.parseClosureTemplateTag(tag); if (names.length > 1) { report(`Missing separate @template for ${names[1]}`, null, tag); } diff --git a/test/rules/assertions/checkTemplateNames.js b/test/rules/assertions/checkTemplateNames.js index 67db66b65..b5b113954 100644 --- a/test/rules/assertions/checkTemplateNames.js +++ b/test/rules/assertions/checkTemplateNames.js @@ -748,5 +748,24 @@ export default /** @type {import('../index.js').TestCases} */ ({ } `, }, + { + code: ` + /** + * @template [ChannelDataType=undefined] + * @param {string} messageType - A key used for sending and receiving messages. + * @returns {MessageChannel} A channel that can create messages of its + * own type. + */ + export function createMessageChannel(messageType) { + // Note: It should also infer the type if the new channel is returned + // directly rather than returned as a typed variable. + + /** @type {MessageChannel} */ + const messageChannel = new MessageChannel(messageType); + + return messageChannel; + } + `, + }, ], }); From 784ce62ff9ce390049b6ea434358e8538af3bb92 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sat, 6 Sep 2025 17:41:08 +0800 Subject: [PATCH 045/189] feat(check-alignment): add `innerIndent` integer option; fixes #1351 (#1471) --- docs/rules/check-alignment.md | 40 ++++++++++ src/rules/checkAlignment.js | 50 ++++++++----- test/rules/assertions/checkAlignment.js | 97 +++++++++++++++++++++++++ 3 files changed, 170 insertions(+), 17 deletions(-) diff --git a/docs/rules/check-alignment.md b/docs/rules/check-alignment.md index fdbf534ba..5a20c67b6 100644 --- a/docs/rules/check-alignment.md +++ b/docs/rules/check-alignment.md @@ -117,6 +117,27 @@ export const myVar = {/** myProperty: 'hello' } // Message: Expected JSDoc block to be aligned. + +/** + * @param {Number} foo +* @access private +*/ +function quux (foo) { + // with spaces +} +// "jsdoc/check-alignment": ["error"|"warn", {"innerIndent":0}] +// Message: Expected JSDoc block to be aligned. + +/** +Some desc. +@param {Number} foo +@access private + */ +function quux (foo) { + // with spaces +} +// "jsdoc/check-alignment": ["error"|"warn", {"innerIndent":0}] +// Message: Expected JSDoc block to be aligned. ```` @@ -172,5 +193,24 @@ function quux (foo) { // with spaces } // Settings: {"jsdoc":{"ignorePrivate":true}} + +/** +* @param {Number} foo +* @access private +*/ +function quux (foo) { + // with spaces +} +// "jsdoc/check-alignment": ["error"|"warn", {"innerIndent":0}] + +/** +Some desc. +@param {Number} foo +@access private +*/ +function quux (foo) { + // with spaces +} +// "jsdoc/check-alignment": ["error"|"warn", {"innerIndent":0}] ```` diff --git a/src/rules/checkAlignment.js b/src/rules/checkAlignment.js index dafd3c1ee..69e6d2d3e 100644 --- a/src/rules/checkAlignment.js +++ b/src/rules/checkAlignment.js @@ -1,28 +1,30 @@ import iterateJsdoc from '../iterateJsdoc.js'; -/** - * @param {string} string - * @returns {string} - */ -const trimStart = (string) => { - return string.replace(/^\s+/v, ''); -}; - export default iterateJsdoc(({ + context, indent, jsdocNode, report, sourceCode, }) => { + const { + innerIndent = 1, + } = context.options[0] || {}; + // `indent` is whitespace from line 1 (`/**`), so slice and account for "/". - const indentLevel = indent.length + 1; + const indentLevel = indent.length + innerIndent; const sourceLines = sourceCode.getText(jsdocNode).split('\n') .slice(1) - .map((line) => { - return line.split('*')[0]; + .map((line, number) => { + return { + line: line.split('*')[0], + number, + }; }) - .filter((line) => { - return !trimStart(line).length; + .filter(({ + line, + }) => { + return !line.trimStart().length; }); /** @type {import('eslint').Rule.ReportFixer} */ @@ -30,19 +32,22 @@ export default iterateJsdoc(({ const replacement = sourceCode.getText(jsdocNode).split('\n') .map((line, index) => { // Ignore the first line and all lines not starting with `*` - const ignored = !index || trimStart(line.split('*')[0]).length; + const ignored = !index || line.split('*')[0].trimStart().length; - return ignored ? line : `${indent} ${trimStart(line)}`; + return ignored ? line : `${indent}${''.padStart(innerIndent, ' ')}${line.trimStart()}`; }) .join('\n'); return fixer.replaceText(jsdocNode, replacement); }; - sourceLines.some((line, lineNum) => { + sourceLines.some(({ + line, + number, + }) => { if (line.length !== indentLevel) { report('Expected JSDoc block to be aligned.', fix, { - line: lineNum + 1, + line: number + 1, }); return true; @@ -58,6 +63,17 @@ export default iterateJsdoc(({ url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-alignment.md#repos-sticky-header', }, fixable: 'code', + schema: [ + { + additionalProperties: false, + properties: { + innerIndent: { + default: 1, + type: 'integer', + }, + }, + }, + ], type: 'layout', }, }); diff --git a/test/rules/assertions/checkAlignment.js b/test/rules/assertions/checkAlignment.js index d5f3b9fbb..6301873fe 100644 --- a/test/rules/assertions/checkAlignment.js +++ b/test/rules/assertions/checkAlignment.js @@ -258,6 +258,70 @@ export const myVar = {/** } `, }, + { + code: ` + /** + * @param {Number} foo + * @access private + */ + function quux (foo) { + // with spaces + } + `, + errors: [ + { + line: 3, + message: 'Expected JSDoc block to be aligned.', + }, + ], + options: [ + { + innerIndent: 0, + }, + ], + output: ` + /** + * @param {Number} foo + * @access private + */ + function quux (foo) { + // with spaces + } + `, + }, + { + code: ` + /** + Some desc. + @param {Number} foo + @access private + */ + function quux (foo) { + // with spaces + } + `, + errors: [ + { + line: 6, + message: 'Expected JSDoc block to be aligned.', + }, + ], + options: [ + { + innerIndent: 0, + }, + ], + output: ` + /** + Some desc. + @param {Number} foo + @access private + */ + function quux (foo) { + // with spaces + } + `, + }, ], valid: [ { @@ -328,5 +392,38 @@ export const myVar = {/** }, }, }, + { + code: ` + /** + * @param {Number} foo + * @access private + */ + function quux (foo) { + // with spaces + } + `, + options: [ + { + innerIndent: 0, + }, + ], + }, + { + code: ` + /** + Some desc. + @param {Number} foo + @access private + */ + function quux (foo) { + // with spaces + } + `, + options: [ + { + innerIndent: 0, + }, + ], + }, ], }); From 30346eb3c7a9871c345d1d1b1411ac5e02806034 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sat, 6 Sep 2025 17:53:27 +0800 Subject: [PATCH 046/189] docs(`check-alignment`): `innerIndent` option (#1472) --- .README/rules/check-alignment.md | 8 ++++++++ docs/rules/check-alignment.md | 14 ++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/.README/rules/check-alignment.md b/.README/rules/check-alignment.md index 8b2c0060a..2414b0e15 100644 --- a/.README/rules/check-alignment.md +++ b/.README/rules/check-alignment.md @@ -8,6 +8,13 @@ Reports invalid alignment of JSDoc block asterisks. Fixes alignment. +## Options + +### `innerIndent` + +Set to 0 if you wish to avoid the normal requirement for an inner indentation of +one space. Defaults to 1 (one space of normal inner indentation). + ## Context and settings ||| @@ -15,6 +22,7 @@ Fixes alignment. |Context|everywhere| |Tags|N/A| |Recommended|true| +|Options|`innerIndent`| ## Failing examples diff --git a/docs/rules/check-alignment.md b/docs/rules/check-alignment.md index 5a20c67b6..3c2b6b86b 100644 --- a/docs/rules/check-alignment.md +++ b/docs/rules/check-alignment.md @@ -3,6 +3,8 @@ # check-alignment * [Fixer](#user-content-check-alignment-fixer) +* [Options](#user-content-check-alignment-options) + * [`innerIndent`](#user-content-check-alignment-options-innerindent) * [Context and settings](#user-content-check-alignment-context-and-settings) * [Failing examples](#user-content-check-alignment-failing-examples) * [Passing examples](#user-content-check-alignment-passing-examples) @@ -16,6 +18,17 @@ Reports invalid alignment of JSDoc block asterisks. Fixes alignment. + + +## Options + + + +### innerIndent + +Set to 0 if you wish to avoid the normal requirement for an inner indentation of +one space. Defaults to 1 (one space of normal inner indentation). + ## Context and settings @@ -25,6 +38,7 @@ Fixes alignment. |Context|everywhere| |Tags|N/A| |Recommended|true| +|Options|`innerIndent`| From e45b7263f947fb11d5eb9e3beecc49ee2782709d Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sun, 7 Sep 2025 22:24:04 +0800 Subject: [PATCH 047/189] fix(`getJsdocProcessorPlugin`): reenable fixes (but disabling fixers for @example issues); fixes #1431 (#1473) --- src/getJsdocProcessorPlugin.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/getJsdocProcessorPlugin.js b/src/getJsdocProcessorPlugin.js index 62913fe96..1324d6c2b 100644 --- a/src/getJsdocProcessorPlugin.js +++ b/src/getJsdocProcessorPlugin.js @@ -543,6 +543,7 @@ export const getJsdocProcessorPlugin = (options = {}) => { // fix: {range: [number, number], text: string} // suggestions: {desc: , messageId:, fix: }[], } = msg; + delete msg.fix; const [ codeCtxLine, @@ -664,8 +665,7 @@ export const getJsdocProcessorPlugin = (options = {}) => { return []; }, - // Todo: Reenable - supportsAutofix: false, + supportsAutofix: true, }, }, }; From ed119688c14cadefb8f9932b81b97ac3ab142275 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Fri, 15 Aug 2025 19:17:26 +0800 Subject: [PATCH 048/189] feat(`require-jsdoc`, `require-param`): update jsdoccomment to disable overload skipping except conditionally for require-jsdoc with new on-by-default `skipInterveningOverloadedDeclarations` option; fixes #1434 Now requires default `skipInterveningOverloadedDeclarations: true` option to get behavior of checking at the top of overloaded functions from #1369 --- .README/rules/require-jsdoc.md | 8 +- docs/rules/require-jsdoc.md | 49 +++++++++++- docs/rules/require-param.md | 11 +++ package.json | 2 +- pnpm-lock.yaml | 16 +--- src/rules/requireJsdoc.js | 14 +++- test/rules/assertions/requireJsdoc.js | 108 ++++++++++++++++++++++++++ test/rules/assertions/requireParam.js | 18 +++++ 8 files changed, 208 insertions(+), 18 deletions(-) diff --git a/.README/rules/require-jsdoc.md b/.README/rules/require-jsdoc.md index ef5abc597..9b6797026 100644 --- a/.README/rules/require-jsdoc.md +++ b/.README/rules/require-jsdoc.md @@ -113,6 +113,12 @@ apply to any context; see `contexts` for line counts per context. An optional message to add to the inserted JSDoc block. Defaults to the empty string. +### `skipInterveningOverloadedDeclarations` + +If `true`, will skip above uncommented overloaded functions to check +for a comment block (e.g., at the top of a set of overloaded functions). +Defaults to `true`. + ## Context and settings ||| @@ -120,7 +126,7 @@ empty string. |Context|`ArrowFunctionExpression`, `ClassDeclaration`, `ClassExpression`, `FunctionDeclaration`, `FunctionExpression`; others when `contexts` option enabled| |Tags|N/A| |Recommended|true| -|Options|`publicOnly`, `require`, `contexts`, `exemptEmptyConstructors`, `exemptEmptyFunctions`, `enableFixer`, `minLineCount`, `fixerMessage`| +|Options|`publicOnly`, `require`, `contexts`, `exemptEmptyConstructors`, `exemptEmptyFunctions`, `enableFixer`, `minLineCount`, `fixerMessage`, `skipInterveningOverloadedDeclarations`| ## Failing examples diff --git a/docs/rules/require-jsdoc.md b/docs/rules/require-jsdoc.md index f54f21ad9..0196e5bf1 100644 --- a/docs/rules/require-jsdoc.md +++ b/docs/rules/require-jsdoc.md @@ -15,6 +15,7 @@ * [`enableFixer`](#user-content-require-jsdoc-options-enablefixer) * [`minLineCount`](#user-content-require-jsdoc-options-minlinecount) * [`fixerMessage`](#user-content-require-jsdoc-options-fixermessage) + * [`skipInterveningOverloadedDeclarations`](#user-content-require-jsdoc-options-skipinterveningoverloadeddeclarations) * [Context and settings](#user-content-require-jsdoc-context-and-settings) * [Failing examples](#user-content-require-jsdoc-failing-examples) * [Passing examples](#user-content-require-jsdoc-passing-examples) @@ -157,6 +158,14 @@ apply to any context; see `contexts` for line counts per context. An optional message to add to the inserted JSDoc block. Defaults to the empty string. + + +### skipInterveningOverloadedDeclarations + +If `true`, will skip above uncommented overloaded functions to check +for a comment block (e.g., at the top of a set of overloaded functions). +Defaults to `true`. + ## Context and settings @@ -166,7 +175,7 @@ empty string. |Context|`ArrowFunctionExpression`, `ClassDeclaration`, `ClassExpression`, `FunctionDeclaration`, `FunctionExpression`; others when `contexts` option enabled| |Tags|N/A| |Recommended|true| -|Options|`publicOnly`, `require`, `contexts`, `exemptEmptyConstructors`, `exemptEmptyFunctions`, `enableFixer`, `minLineCount`, `fixerMessage`| +|Options|`publicOnly`, `require`, `contexts`, `exemptEmptyConstructors`, `exemptEmptyFunctions`, `enableFixer`, `minLineCount`, `fixerMessage`, `skipInterveningOverloadedDeclarations`| @@ -1041,6 +1050,32 @@ export class B implements A, B { } // "jsdoc/require-jsdoc": ["error"|"warn", {"contexts":["MethodDefinition"]}] // Message: Missing JSDoc comment. + +/** + * Test function with param. + * @param foo - Test param. + */ +function myFunction(foo: string): void; +/** + * Test function without param. + */ +function myFunction(): void; +function myFunction(foo?: string) {} +// "jsdoc/require-jsdoc": ["error"|"warn", {"skipInterveningOverloadedDeclarations":false}] +// Message: Missing JSDoc comment. + +/** + * Test function without param. + */ +function myFunction(): void; +/** + * Test function with param. + * @param foo - Test param. + */ +function myFunction(foo: string): void; +function myFunction(foo?: string) {} +// "jsdoc/require-jsdoc": ["error"|"warn", {"skipInterveningOverloadedDeclarations":false}] +// Message: Missing JSDoc comment. ```` @@ -1944,6 +1979,7 @@ export function arrayMap>(data: Source, ca export function arrayMap(data: Source, callback: MapCallback): AnyArrayType { return data.map(callback); } +// "jsdoc/require-jsdoc": ["error"|"warn", {"skipInterveningOverloadedDeclarations":true}] export interface A { a: string; @@ -1960,5 +1996,16 @@ export class B implements A { } } // "jsdoc/require-jsdoc": ["error"|"warn", {"contexts":["MethodDefinition"]}] + +/** + * Test function with param. + * @param foo - Test param. + */ +function myFunction(foo: string): void; +/** + * Test function without param. + */ +function myFunction(): void; +function myFunction(foo?: string) {} ```` diff --git a/docs/rules/require-param.md b/docs/rules/require-param.md index 84d3dcb8e..281c7190c 100644 --- a/docs/rules/require-param.md +++ b/docs/rules/require-param.md @@ -1842,5 +1842,16 @@ const inner = (c: number, d: string): void => { */ function quux (a, b) {} // "jsdoc/require-param": ["error"|"warn", {"ignoreWhenAllParamsMissing":true}] + +/** + * Test function with param. + * @param foo - Test param. + */ +function myFunction(foo: string): void; +/** + * Test function without param. + */ +function myFunction(): void; +function myFunction(foo?: string) {} ```` diff --git a/package.json b/package.json index 4bdf49b58..d2da3968b 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "url": "http://gajus.com" }, "dependencies": { - "@es-joy/jsdoccomment": "~0.53.0", + "@es-joy/jsdoccomment": "~0.54.0", "are-docs-informative": "^0.0.2", "comment-parser": "1.4.1", "debug": "^4.4.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f1e57be9c..e77462632 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: dependencies: '@es-joy/jsdoccomment': - specifier: ~0.53.0 - version: 0.53.0 + specifier: ~0.54.0 + version: 0.54.0 are-docs-informative: specifier: ^0.0.2 version: 0.0.2 @@ -774,10 +774,6 @@ packages: resolution: {integrity: sha512-YAdE/IJSpwbOTiaURNCKECdAwqrJuFiZhylmesBcIRawtYKnBR2wxPhoIewMg+Yu+QuYvHfJNReWpoxGBKOChA==} engines: {node: '>=18'} - '@es-joy/jsdoccomment@0.53.0': - resolution: {integrity: sha512-Wyed8Wfn3vMNVwrZrgLMxmqwmlcCE1/RfUAOHFzMJb3QLH03mi9Yv1iOCZjif0yx5EZUeJ+17VD1MHPka9IQjQ==} - engines: {node: '>=20.11.0'} - '@es-joy/jsdoccomment@0.54.0': resolution: {integrity: sha512-r+DsSLA9rhdL9+IXySvqi/4VfhVwMlMztv7xJCxki82DvcTSlk4AT878sUKxizUwSJ8UieuCbjjbNi1OL5by+Q==} engines: {node: '>=20.11.0'} @@ -5931,14 +5927,6 @@ snapshots: esquery: 1.6.0 jsdoc-type-pratt-parser: 4.1.0 - '@es-joy/jsdoccomment@0.53.0': - dependencies: - '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.41.0 - comment-parser: 1.4.1 - esquery: 1.6.0 - jsdoc-type-pratt-parser: 4.8.0 - '@es-joy/jsdoccomment@0.54.0': dependencies: '@types/estree': 1.0.8 diff --git a/src/rules/requireJsdoc.js b/src/rules/requireJsdoc.js index 23d34254e..669bc4a2c 100644 --- a/src/rules/requireJsdoc.js +++ b/src/rules/requireJsdoc.js @@ -169,6 +169,10 @@ const OPTIONS_SCHEMA = { }, type: 'object', }, + skipInterveningOverloadedDeclarations: { + default: true, + type: 'boolean', + }, }, type: 'object', }; @@ -302,6 +306,7 @@ const getOption = (context, baseObject, option, key) => { * enableFixer: boolean, * exemptEmptyConstructors: boolean, * exemptEmptyFunctions: boolean, + * skipInterveningOverloadedDeclarations: boolean, * fixerMessage: string, * minLineCount: undefined|import('../iterateJsdoc.js').Integer, * publicOnly: boolean|{[key: string]: boolean|undefined} @@ -317,6 +322,7 @@ const getOptions = (context, settings) => { fixerMessage = '', minLineCount = undefined, publicOnly, + skipInterveningOverloadedDeclarations = true, } = context.options[0] || {}; return { @@ -386,6 +392,7 @@ const getOptions = (context, settings) => { /** @type {import('json-schema').JSONSchema4Object} */ (OPTIONS_SCHEMA.properties).require, ), + skipInterveningOverloadedDeclarations, }; }; @@ -411,6 +418,7 @@ export default { fixerMessage, minLineCount, require: requireOption, + skipInterveningOverloadedDeclarations, } = opts; const publicOnly = @@ -476,7 +484,11 @@ export default { } } - const jsDocNode = getJSDocComment(sourceCode, node, settings); + const jsDocNode = getJSDocComment( + sourceCode, node, settings, { + checkOverloads: skipInterveningOverloadedDeclarations, + }, + ); if (jsDocNode) { return; diff --git a/test/rules/assertions/requireJsdoc.js b/test/rules/assertions/requireJsdoc.js index 156d941a0..5d547c5d3 100644 --- a/test/rules/assertions/requireJsdoc.js +++ b/test/rules/assertions/requireJsdoc.js @@ -4296,6 +4296,92 @@ function quux (foo) { } `, }, + { + code: ` + /** + * Test function with param. + * @param foo - Test param. + */ + function myFunction(foo: string): void; + /** + * Test function without param. + */ + function myFunction(): void; + function myFunction(foo?: string) {} + `, + errors: [ + { + line: 11, + message: 'Missing JSDoc comment.', + }, + ], + languageOptions: { + parser: typescriptEslintParser, + }, + options: [ + { + skipInterveningOverloadedDeclarations: false, + }, + ], + output: ` + /** + * Test function with param. + * @param foo - Test param. + */ + function myFunction(foo: string): void; + /** + * Test function without param. + */ + function myFunction(): void; + /** + * + */ + function myFunction(foo?: string) {} + `, + }, + { + code: ` + /** + * Test function without param. + */ + function myFunction(): void; + /** + * Test function with param. + * @param foo - Test param. + */ + function myFunction(foo: string): void; + function myFunction(foo?: string) {} + `, + errors: [ + { + line: 11, + message: 'Missing JSDoc comment.', + }, + ], + languageOptions: { + parser: typescriptEslintParser, + }, + options: [ + { + skipInterveningOverloadedDeclarations: false, + }, + ], + output: ` + /** + * Test function without param. + */ + function myFunction(): void; + /** + * Test function with param. + * @param foo - Test param. + */ + function myFunction(foo: string): void; + /** + * + */ + function myFunction(foo?: string) {} + `, + }, ], valid: [ { @@ -6442,6 +6528,11 @@ function quux (foo) { languageOptions: { parser: typescriptEslintParser, }, + options: [ + { + skipInterveningOverloadedDeclarations: true, + }, + ], }, { code: ` @@ -6471,5 +6562,22 @@ function quux (foo) { }, ], }, + { + code: ` + /** + * Test function with param. + * @param foo - Test param. + */ + function myFunction(foo: string): void; + /** + * Test function without param. + */ + function myFunction(): void; + function myFunction(foo?: string) {} + `, + languageOptions: { + parser: typescriptEslintParser, + }, + }, ], }); diff --git a/test/rules/assertions/requireParam.js b/test/rules/assertions/requireParam.js index 73c5cff7f..5d4d13d57 100644 --- a/test/rules/assertions/requireParam.js +++ b/test/rules/assertions/requireParam.js @@ -3677,5 +3677,23 @@ export default /** @type {import('../index.js').TestCases} */ ({ }, ], }, + { + code: ` + /** + * Test function with param. + * @param foo - Test param. + */ + function myFunction(foo: string): void; + /** + * Test function without param. + */ + function myFunction(): void; + function myFunction(foo?: string) {} + `, + languageOptions: { + parser: typescriptEslintParser, + sourceType: 'module', + }, + }, ], }); From b29bc3a3ec63318cc66c5f3114b568de42fb29e6 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Wed, 3 Sep 2025 04:52:41 +0800 Subject: [PATCH 049/189] feat(`require-jsdoc`): add `exemptOverloadedImplementations` option --- .README/rules/require-jsdoc.md | 10 + docs/rules/require-jsdoc.md | 95 +++++++++ package.json | 12 +- pnpm-lock.yaml | 292 ++++++++++++++++++++------ src/rules/requireJsdoc.js | 54 +++++ test/rules/assertions/requireJsdoc.js | 203 ++++++++++++++++++ 6 files changed, 599 insertions(+), 67 deletions(-) diff --git a/.README/rules/require-jsdoc.md b/.README/rules/require-jsdoc.md index 9b6797026..bd5bd2097 100644 --- a/.README/rules/require-jsdoc.md +++ b/.README/rules/require-jsdoc.md @@ -117,8 +117,18 @@ empty string. If `true`, will skip above uncommented overloaded functions to check for a comment block (e.g., at the top of a set of overloaded functions). + +If `false`, will force each overloaded function to be checked for a +comment block. + Defaults to `true`. +### `exemptOverloadedImplementations` + +If set to `true` will avoid checking an overloaded function's implementation. + +Defaults to `false`. + ## Context and settings ||| diff --git a/docs/rules/require-jsdoc.md b/docs/rules/require-jsdoc.md index 0196e5bf1..1d5ca1e45 100644 --- a/docs/rules/require-jsdoc.md +++ b/docs/rules/require-jsdoc.md @@ -16,6 +16,7 @@ * [`minLineCount`](#user-content-require-jsdoc-options-minlinecount) * [`fixerMessage`](#user-content-require-jsdoc-options-fixermessage) * [`skipInterveningOverloadedDeclarations`](#user-content-require-jsdoc-options-skipinterveningoverloadeddeclarations) + * [`exemptOverloadedImplementations`](#user-content-require-jsdoc-options-exemptoverloadedimplementations) * [Context and settings](#user-content-require-jsdoc-context-and-settings) * [Failing examples](#user-content-require-jsdoc-failing-examples) * [Passing examples](#user-content-require-jsdoc-passing-examples) @@ -164,8 +165,20 @@ empty string. If `true`, will skip above uncommented overloaded functions to check for a comment block (e.g., at the top of a set of overloaded functions). + +If `false`, will force each overloaded function to be checked for a +comment block. + Defaults to `true`. + + +### exemptOverloadedImplementations + +If set to `true` will avoid checking an overloaded function's implementation. + +Defaults to `false`. + ## Context and settings @@ -1076,6 +1089,30 @@ function myFunction(foo: string): void; function myFunction(foo?: string) {} // "jsdoc/require-jsdoc": ["error"|"warn", {"skipInterveningOverloadedDeclarations":false}] // Message: Missing JSDoc comment. + +/** + * Test function with param. + * @param foo - Test param. + */ +function myFunction(foo: string): void; +function myFunction(): void; +/** + * Function implementation + * @param foo + */ +function myFunction(foo?: string) {} +// "jsdoc/require-jsdoc": ["error"|"warn", {"contexts":["TSDeclareFunction"],"exemptOverloadedImplementations":false,"skipInterveningOverloadedDeclarations":false}] +// Message: Missing JSDoc comment. + +/** + * Test function with param. + * @param foo - Test param. + */ +function myFunction(foo: string): void; +function myFunction(): void; +function myFunction(foo?: string) {} +// "jsdoc/require-jsdoc": ["error"|"warn", {"contexts":["TSDeclareFunction"],"exemptOverloadedImplementations":true,"skipInterveningOverloadedDeclarations":false}] +// Message: Missing JSDoc comment. ```` @@ -1981,6 +2018,29 @@ export function arrayMap(data: Source, call } // "jsdoc/require-jsdoc": ["error"|"warn", {"skipInterveningOverloadedDeclarations":true}] +/** + * Array map function with overload for NonEmptyArray + * @example + * const data = [{value: 'value'}] as const; + * const result1: NonEmptyReadonlyArray<'value'> = arrayMap(data, (value) => value.value); // pick type from data + * const result2: NonEmptyReadonlyArray<'value'> = arrayMap<'value', typeof data>(data, (value) => value.value); // enforce output type + * @template Target - The type of the array to map to + * @template Source - The type of the array to map from + * @param {Source} data - The array to map + * @param {MapCallback} callback - Callback function to map data from the array + * @returns {AnyArrayType} Mapped array + * @since v0.2.0 + */ +export function arrayMap | NonEmptyReadonlyArray>( + data: Source, + callback: MapCallback, +): NonEmptyArray; +export function arrayMap>(data: Source, callback: MapCallback): Array; +export function arrayMap(data: Source, callback: MapCallback): AnyArrayType { + return data.map(callback); +} +// "jsdoc/require-jsdoc": ["error"|"warn", {"contexts":["TSDeclareFunction"],"exemptOverloadedImplementations":false,"skipInterveningOverloadedDeclarations":true}] + export interface A { a: string; /** @@ -2007,5 +2067,40 @@ function myFunction(foo: string): void; */ function myFunction(): void; function myFunction(foo?: string) {} + +/** + * Test function with param. + * @param foo - Test param. + */ +function myFunction(foo: string): void; +/** + * Test function without param. + */ +function myFunction(): void; +function myFunction(foo?: string) {} +// "jsdoc/require-jsdoc": ["error"|"warn", {"contexts":["TSDeclareFunction"],"exemptOverloadedImplementations":true,"skipInterveningOverloadedDeclarations":false}] + +/** + * Test function with param. + * @param foo - Test param. + */ +export function myFunction(foo: string): void; +/** + * Test function without param. + */ +export function myFunction(): void; +export function myFunction(foo?: string) {} +// "jsdoc/require-jsdoc": ["error"|"warn", {"contexts":["TSDeclareFunction"],"exemptOverloadedImplementations":true,"skipInterveningOverloadedDeclarations":false}] + +/** + * + */ +const quux = () => { + /** + * + */ + function myFunction(foo?: string) {} +}; +// "jsdoc/require-jsdoc": ["error"|"warn", {"exemptOverloadedImplementations":true,"require":{"ArrowFunctionExpression":true}}] ```` diff --git a/package.json b/package.json index d2da3968b..96202f1ed 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "url": "http://gajus.com" }, "dependencies": { - "@es-joy/jsdoccomment": "~0.54.0", + "@es-joy/jsdoccomment": "~0.54.1", "are-docs-informative": "^0.0.2", "comment-parser": "1.4.1", "debug": "^4.4.1", @@ -29,7 +29,7 @@ "@es-joy/jsdoc-eslint-parser": "^0.22.0", "@hkdobrev/run-if-changed": "^0.6.3", "@semantic-release/commit-analyzer": "^13.0.1", - "@semantic-release/github": "^11.0.4", + "@semantic-release/github": "^11.0.5", "@semantic-release/npm": "^12.0.2", "@types/chai": "^5.2.2", "@types/debug": "^4.1.12", @@ -42,7 +42,7 @@ "@types/node": "^24.3.0", "@types/semver": "^7.7.0", "@types/spdx-expression-parse": "^3.0.5", - "@typescript-eslint/types": "^8.41.0", + "@typescript-eslint/types": "^8.42.0", "babel-plugin-add-module-exports": "^1.0.4", "babel-plugin-istanbul": "^7.0.0", "babel-plugin-transform-import-meta": "^2.3.3", @@ -58,15 +58,15 @@ "husky": "^9.1.7", "jsdoc-type-pratt-parser": "^4.8.0", "json-schema": "^0.4.0", - "lint-staged": "^16.1.5", + "lint-staged": "^16.1.6", "lodash.defaultsdeep": "^4.6.1", - "mocha": "^11.7.1", + "mocha": "^11.7.2", "open-editor": "^5.1.0", "replace": "^1.2.2", "rimraf": "^6.0.1", "semantic-release": "^24.2.7", "typescript": "5.9.2", - "typescript-eslint": "^8.41.0" + "typescript-eslint": "^8.42.0" }, "engines": { "node": ">=20.11.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e77462632..266a7d966 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: dependencies: '@es-joy/jsdoccomment': - specifier: ~0.54.0 - version: 0.54.0 + specifier: ~0.54.1 + version: 0.54.1 are-docs-informative: specifier: ^0.0.2 version: 0.0.2 @@ -73,8 +73,8 @@ importers: specifier: ^13.0.1 version: 13.0.1(semantic-release@24.2.7(typescript@5.9.2)) '@semantic-release/github': - specifier: ^11.0.4 - version: 11.0.4(semantic-release@24.2.7(typescript@5.9.2)) + specifier: ^11.0.5 + version: 11.0.5(semantic-release@24.2.7(typescript@5.9.2)) '@semantic-release/npm': specifier: ^12.0.2 version: 12.0.2(semantic-release@24.2.7(typescript@5.9.2)) @@ -112,8 +112,8 @@ importers: specifier: ^3.0.5 version: 3.0.5 '@typescript-eslint/types': - specifier: ^8.41.0 - version: 8.41.0 + specifier: ^8.42.0 + version: 8.42.0 babel-plugin-add-module-exports: specifier: ^1.0.4 version: 1.0.4 @@ -140,7 +140,7 @@ importers: version: 9.34.0(jiti@2.5.1) eslint-config-canonical: specifier: ~45.0.0 - version: 45.0.0(@types/eslint@9.6.1)(@types/node@24.3.0)(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + version: 45.0.0(@types/eslint@9.6.1)(@types/node@24.3.0)(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) gitdown: specifier: ^4.1.1 version: 4.1.1(re2@1.20.9) @@ -160,14 +160,14 @@ importers: specifier: ^0.4.0 version: 0.4.0 lint-staged: - specifier: ^16.1.5 - version: 16.1.5 + specifier: ^16.1.6 + version: 16.1.6 lodash.defaultsdeep: specifier: ^4.6.1 version: 4.6.1 mocha: - specifier: ^11.7.1 - version: 11.7.1 + specifier: ^11.7.2 + version: 11.7.2 open-editor: specifier: ^5.1.0 version: 5.1.0 @@ -184,8 +184,8 @@ importers: specifier: 5.9.2 version: 5.9.2 typescript-eslint: - specifier: ^8.41.0 - version: 8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + specifier: ^8.42.0 + version: 8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) packages: @@ -778,6 +778,10 @@ packages: resolution: {integrity: sha512-r+DsSLA9rhdL9+IXySvqi/4VfhVwMlMztv7xJCxki82DvcTSlk4AT878sUKxizUwSJ8UieuCbjjbNi1OL5by+Q==} engines: {node: '>=20.11.0'} + '@es-joy/jsdoccomment@0.54.1': + resolution: {integrity: sha512-2hJOXWybEqoA10KrQlP9XFV5luQpYZrAOIZzn2/0b0jLnLMxiRMnFz535HcoxFN1DkUWOV7B8qPbHp52VuKMeg==} + engines: {node: '>=20.11.0'} + '@eslint-community/eslint-utils@4.7.0': resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1134,8 +1138,8 @@ packages: resolution: {integrity: sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==} engines: {node: '>=18'} - '@semantic-release/github@11.0.4': - resolution: {integrity: sha512-fU/nLSjkp9DmB0h7FVO5imhhWJMvq2LjD4+3lz3ZAzpDLY9+KYwC+trJ+g7LbZeJv9y3L9fSFSg2DduUpiT6bw==} + '@semantic-release/github@11.0.5': + resolution: {integrity: sha512-wJamzHteXwBdopvkTD6BJjPz1UHLm20twlVCSMA9zpd3B5KrOQX137jfTbNJT6ZVz3pXtg0S1DroQl4wifJ4WQ==} engines: {node: '>=20.8.1'} peerDependencies: semantic-release: '>=24.1.0' @@ -1241,6 +1245,14 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/eslint-plugin@8.42.0': + resolution: {integrity: sha512-Aq2dPqsQkxHOLfb2OPv43RnIvfj05nw8v/6n3B2NABIPpHnjQnaLo9QGMTvml+tv4korl/Cjfrb/BYhoL8UUTQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.42.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/parser@8.41.0': resolution: {integrity: sha512-gTtSdWX9xiMPA/7MV9STjJOOYtWwIJIYxkQxnSV1U3xcE+mnJSH3f6zI0RYP+ew66WSlZ5ed+h0VCxsvdC1jJg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1248,6 +1260,13 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/parser@8.42.0': + resolution: {integrity: sha512-r1XG74QgShUgXph1BYseJ+KZd17bKQib/yF3SR+demvytiRXrwd12Blnz5eYGm8tXaeRdd4x88MlfwldHoudGg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/project-service@8.39.1': resolution: {integrity: sha512-8fZxek3ONTwBu9ptw5nCKqZOSkXshZB7uAxuFF0J/wTMkKydjXCzqqga7MlFMpHi9DoG4BadhmTkITBcg8Aybw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1260,6 +1279,12 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/project-service@8.42.0': + resolution: {integrity: sha512-vfVpLHAhbPjilrabtOSNcUDmBboQNrJUiNAGoImkZKnMjs2TIcWG33s4Ds0wY3/50aZmTMqJa6PiwkwezaAklg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/scope-manager@8.39.1': resolution: {integrity: sha512-RkBKGBrjgskFGWuyUGz/EtD8AF/GW49S21J8dvMzpJitOF1slLEbbHnNEtAHtnDAnx8qDEdRrULRnWVx27wGBw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1268,6 +1293,10 @@ packages: resolution: {integrity: sha512-n6m05bXn/Cd6DZDGyrpXrELCPVaTnLdPToyhBoFkLIMznRUQUEQdSp96s/pcWSQdqOhrgR1mzJ+yItK7T+WPMQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/scope-manager@8.42.0': + resolution: {integrity: sha512-51+x9o78NBAVgQzOPd17DkNTnIzJ8T/O2dmMBLoK9qbY0Gm52XJcdJcCl18ExBMiHo6jPMErUQWUv5RLE51zJw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/tsconfig-utils@8.39.1': resolution: {integrity: sha512-ePUPGVtTMR8XMU2Hee8kD0Pu4NDE1CN9Q1sxGSGd/mbOtGZDM7pnhXNJnzW63zk/q+Z54zVzj44HtwXln5CvHA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1280,6 +1309,12 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/tsconfig-utils@8.42.0': + resolution: {integrity: sha512-kHeFUOdwAJfUmYKjR3CLgZSglGHjbNTi1H8sTYRYV2xX6eNz4RyJ2LIgsDLKf8Yi0/GL1WZAC/DgZBeBft8QAQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/type-utils@8.39.1': resolution: {integrity: sha512-gu9/ahyatyAdQbKeHnhT4R+y3YLtqqHyvkfDxaBYk97EcbfChSJXyaJnIL3ygUv7OuZatePHmQvuH5ru0lnVeA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1294,6 +1329,13 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/type-utils@8.42.0': + resolution: {integrity: sha512-9KChw92sbPTYVFw3JLRH1ockhyR3zqqn9lQXol3/YbI6jVxzWoGcT3AsAW0mu1MY0gYtsXnUGV/AKpkAj5tVlQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/types@8.39.1': resolution: {integrity: sha512-7sPDKQQp+S11laqTrhHqeAbsCfMkwJMrV7oTDvtDds4mEofJYir414bYKUEb8YPUm9QL3U+8f6L6YExSoAGdQw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1302,6 +1344,10 @@ packages: resolution: {integrity: sha512-9EwxsWdVqh42afLbHP90n2VdHaWU/oWgbH2P0CfcNfdKL7CuKpwMQGjwev56vWu9cSKU7FWSu6r9zck6CVfnag==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.42.0': + resolution: {integrity: sha512-LdtAWMiFmbRLNP7JNeY0SqEtJvGMYSzfiWBSmx+VSZ1CH+1zyl8Mmw1TT39OrtsRvIYShjJWzTDMPWZJCpwBlw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@8.39.1': resolution: {integrity: sha512-EKkpcPuIux48dddVDXyQBlKdeTPMmALqBUbEk38McWv0qVEZwOpVJBi7ugK5qVNgeuYjGNQxrrnoM/5+TI/BPw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1314,6 +1360,12 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/typescript-estree@8.42.0': + resolution: {integrity: sha512-ku/uYtT4QXY8sl9EDJETD27o3Ewdi72hcXg1ah/kkUgBvAYHLwj2ofswFFNXS+FL5G+AGkxBtvGt8pFBHKlHsQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/utils@8.39.1': resolution: {integrity: sha512-VF5tZ2XnUSTuiqZFXCZfZs1cgkdd3O/sSYmdo2EpSyDlC86UM/8YytTmKnehOW3TGAlivqTDT6bS87B/GQ/jyg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1328,6 +1380,13 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/utils@8.42.0': + resolution: {integrity: sha512-JnIzu7H3RH5BrKC4NoZqRfmjqCIS1u3hGZltDYJgkVdqAezl4L9d1ZLw+36huCujtSBSAirGINF/S4UxOcR+/g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/visitor-keys@8.39.1': resolution: {integrity: sha512-W8FQi6kEh2e8zVhQ0eeRnxdvIoOkAp/CPAahcNio6nO9dsIwb9b34z90KOlheoyuVf6LSOEdjlkxSkapNEc+4A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1336,6 +1395,10 @@ packages: resolution: {integrity: sha512-+GeGMebMCy0elMNg67LRNoVnUFPIm37iu5CmHESVx56/9Jsfdpsvbv605DQ81Pi/x11IdKUsS5nzgTYbCQU9fg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.42.0': + resolution: {integrity: sha512-3WbiuzoEowaEn8RSnhJBrxSwX8ULYE9CXaPepS2C2W3NSA5NNIvBaslpBSBElPq0UGr0xVJlXFWOAKIkyylydQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@unrs/resolver-binding-android-arm-eabi@1.11.1': resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} cpu: [arm] @@ -1772,6 +1835,10 @@ packages: resolution: {integrity: sha512-1tm8DTaJhPBG3bIkVeZt1iZM9GfSX2lzOeDVZH9R9ffRHpmHvxZ/QhgQH/aDTkswQVt+YHdXAdS/In/30OjCbg==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + chalk@5.6.0: + resolution: {integrity: sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + change-case@5.4.4: resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} @@ -3472,8 +3539,8 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - lint-staged@16.1.5: - resolution: {integrity: sha512-uAeQQwByI6dfV7wpt/gVqg+jAPaSp8WwOA8kKC/dv1qw14oGpnpAisY65ibGHUGDUv0rYaZ8CAJZ/1U8hUvC2A==} + lint-staged@16.1.6: + resolution: {integrity: sha512-U4kuulU3CKIytlkLlaHcGgKscNfJPNTiDF2avIUGFCv7K95/DCYQ7Ra62ydeRWmgQGg9zJYw2dzdbztwJlqrow==} engines: {node: '>=20.17'} hasBin: true @@ -3481,8 +3548,8 @@ packages: resolution: {integrity: sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==} engines: {node: '>=18.0.0'} - listr2@9.0.1: - resolution: {integrity: sha512-SL0JY3DaxylDuo/MecFeiC+7pedM0zia33zl0vcjgwcq1q1FWWF1To9EIauPbl8GbMCU0R2e0uJ8bZunhYKD2g==} + listr2@9.0.3: + resolution: {integrity: sha512-0aeh5HHHgmq1KRdMMDHfhMWQmIT/m7nRDTlxlFqni2Sp0had9baqsjJRvDGdlvgd6NmPE0nPloOipiQJGFtTHQ==} engines: {node: '>=20.0.0'} load-json-file@4.0.0: @@ -3722,8 +3789,8 @@ packages: engines: {node: '>=10'} hasBin: true - mocha@11.7.1: - resolution: {integrity: sha512-5EK+Cty6KheMS/YLPPMJC64g5V61gIR25KsRItHw6x4hEKT6Njp1n9LOlH4gpevuwMVS66SXaBBpg+RWZkza4A==} + mocha@11.7.2: + resolution: {integrity: sha512-lkqVJPmqqG/w5jmmFtiRvtA2jkDyNVUcefFJKb2uyX4dekk8Okgqop3cgbFiaIvj8uCRJVTP5x9dfxGyXm2jvQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true @@ -4855,8 +4922,8 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} - typescript-eslint@8.41.0: - resolution: {integrity: sha512-n66rzs5OBXW3SFSnZHr2T685q1i4ODm2nulFJhMZBotaTavsS8TrI3d7bDlRSs9yWo7HmyWrN9qDu14Qv7Y0Dw==} + typescript-eslint@8.42.0: + resolution: {integrity: sha512-ozR/rQn+aQXQxh1YgbCzQWDFrsi9mcg+1PM3l/z5o1+20P7suOIaNg515bpr/OYt6FObz/NHcBstydDLHWeEKg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -5922,7 +5989,7 @@ snapshots: '@es-joy/jsdoccomment@0.50.2': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.41.0 + '@typescript-eslint/types': 8.42.0 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 4.1.0 @@ -5930,7 +5997,15 @@ snapshots: '@es-joy/jsdoccomment@0.54.0': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.41.0 + '@typescript-eslint/types': 8.42.0 + comment-parser: 1.4.1 + esquery: 1.6.0 + jsdoc-type-pratt-parser: 4.8.0 + + '@es-joy/jsdoccomment@0.54.1': + dependencies: + '@types/estree': 1.0.8 + '@typescript-eslint/types': 8.42.0 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 4.8.0 @@ -6418,7 +6493,7 @@ snapshots: '@semantic-release/error@4.0.0': {} - '@semantic-release/github@11.0.4(semantic-release@24.2.7(typescript@5.9.2))': + '@semantic-release/github@11.0.5(semantic-release@24.2.7(typescript@5.9.2))': dependencies: '@octokit/core': 7.0.3 '@octokit/plugin-paginate-rest': 13.1.1(@octokit/core@7.0.3) @@ -6578,6 +6653,23 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/eslint-plugin@8.42.0(@typescript-eslint/parser@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.42.0 + '@typescript-eslint/type-utils': 8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.42.0 + eslint: 9.34.0(jiti@2.5.1) + graphemer: 1.4.0 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@typescript-eslint/scope-manager': 8.41.0 @@ -6590,10 +6682,22 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/parser@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)': + dependencies: + '@typescript-eslint/scope-manager': 8.42.0 + '@typescript-eslint/types': 8.42.0 + '@typescript-eslint/typescript-estree': 8.42.0(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.42.0 + debug: 4.4.1(supports-color@8.1.1) + eslint: 9.34.0(jiti@2.5.1) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/project-service@8.39.1(typescript@5.9.2)': dependencies: '@typescript-eslint/tsconfig-utils': 8.39.1(typescript@5.9.2) - '@typescript-eslint/types': 8.41.0 + '@typescript-eslint/types': 8.42.0 debug: 4.4.1(supports-color@8.1.1) typescript: 5.9.2 transitivePeerDependencies: @@ -6602,7 +6706,16 @@ snapshots: '@typescript-eslint/project-service@8.41.0(typescript@5.9.2)': dependencies: '@typescript-eslint/tsconfig-utils': 8.41.0(typescript@5.9.2) - '@typescript-eslint/types': 8.41.0 + '@typescript-eslint/types': 8.42.0 + debug: 4.4.1(supports-color@8.1.1) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.42.0(typescript@5.9.2)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.42.0(typescript@5.9.2) + '@typescript-eslint/types': 8.42.0 debug: 4.4.1(supports-color@8.1.1) typescript: 5.9.2 transitivePeerDependencies: @@ -6618,6 +6731,11 @@ snapshots: '@typescript-eslint/types': 8.41.0 '@typescript-eslint/visitor-keys': 8.41.0 + '@typescript-eslint/scope-manager@8.42.0': + dependencies: + '@typescript-eslint/types': 8.42.0 + '@typescript-eslint/visitor-keys': 8.42.0 + '@typescript-eslint/tsconfig-utils@8.39.1(typescript@5.9.2)': dependencies: typescript: 5.9.2 @@ -6626,6 +6744,10 @@ snapshots: dependencies: typescript: 5.9.2 + '@typescript-eslint/tsconfig-utils@8.42.0(typescript@5.9.2)': + dependencies: + typescript: 5.9.2 + '@typescript-eslint/type-utils@8.39.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@typescript-eslint/types': 8.39.1 @@ -6650,10 +6772,24 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/type-utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)': + dependencies: + '@typescript-eslint/types': 8.42.0 + '@typescript-eslint/typescript-estree': 8.42.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + debug: 4.4.1(supports-color@8.1.1) + eslint: 9.34.0(jiti@2.5.1) + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/types@8.39.1': {} '@typescript-eslint/types@8.41.0': {} + '@typescript-eslint/types@8.42.0': {} + '@typescript-eslint/typescript-estree@8.39.1(typescript@5.9.2)': dependencies: '@typescript-eslint/project-service': 8.39.1(typescript@5.9.2) @@ -6686,6 +6822,22 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/typescript-estree@8.42.0(typescript@5.9.2)': + dependencies: + '@typescript-eslint/project-service': 8.42.0(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.42.0(typescript@5.9.2) + '@typescript-eslint/types': 8.42.0 + '@typescript-eslint/visitor-keys': 8.42.0 + debug: 4.4.1(supports-color@8.1.1) + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.2 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/utils@8.39.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.5.1)) @@ -6708,6 +6860,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)': + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.5.1)) + '@typescript-eslint/scope-manager': 8.42.0 + '@typescript-eslint/types': 8.42.0 + '@typescript-eslint/typescript-estree': 8.42.0(typescript@5.9.2) + eslint: 9.34.0(jiti@2.5.1) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/visitor-keys@8.39.1': dependencies: '@typescript-eslint/types': 8.39.1 @@ -6718,6 +6881,11 @@ snapshots: '@typescript-eslint/types': 8.41.0 eslint-visitor-keys: 4.2.1 + '@typescript-eslint/visitor-keys@8.42.0': + dependencies: + '@typescript-eslint/types': 8.42.0 + eslint-visitor-keys: 4.2.1 + '@unrs/resolver-binding-android-arm-eabi@1.11.1': optional: true @@ -7147,6 +7315,8 @@ snapshots: chalk@5.5.0: {} + chalk@5.6.0: {} + change-case@5.4.4: {} char-regex@1.0.2: {} @@ -7673,7 +7843,7 @@ snapshots: eslint: 9.34.0(jiti@2.5.1) semver: 7.7.2 - eslint-config-canonical@45.0.0(@types/eslint@9.6.1)(@types/node@24.3.0)(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2): + eslint-config-canonical@45.0.0(@types/eslint@9.6.1)(@types/node@24.3.0)(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2): dependencies: '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.3.0)(eslint@9.34.0(jiti@2.5.1))(graphql@16.11.0)(typescript@5.9.2) '@next/eslint-plugin-next': 15.5.2 @@ -7683,14 +7853,14 @@ snapshots: '@vitest/eslint-plugin': 1.3.4(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.34.0(jiti@2.5.1) eslint-config-prettier: 10.1.8(eslint@9.34.0(jiti@2.5.1)) - eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)) + eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)) eslint-plugin-ava: 15.1.0(eslint@9.34.0(jiti@2.5.1)) - eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) eslint-plugin-eslint-comments: 3.2.0(eslint@9.34.0(jiti@2.5.1)) eslint-plugin-fp: 2.3.0(eslint@9.34.0(jiti@2.5.1)) eslint-plugin-functional: 9.0.2(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)) - eslint-plugin-jest: 28.14.0(@typescript-eslint/eslint-plugin@8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)) + eslint-plugin-jest: 28.14.0(@typescript-eslint/eslint-plugin@8.41.0(@typescript-eslint/parser@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) eslint-plugin-jsdoc: 50.8.0(eslint@9.34.0(jiti@2.5.1)) eslint-plugin-jsonc: 2.20.1(eslint@9.34.0(jiti@2.5.1)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.34.0(jiti@2.5.1)) @@ -7711,7 +7881,7 @@ snapshots: graphql: 16.11.0 prettier: 3.6.2 ramda: 0.30.1 - typescript-eslint: 8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + typescript-eslint: 8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) yaml-eslint-parser: 1.3.0 transitivePeerDependencies: - '@apollo/subgraph' @@ -7754,7 +7924,7 @@ snapshots: - supports-color optional: true - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.1(supports-color@8.1.1) @@ -7765,12 +7935,12 @@ snapshots: tinyglobby: 0.2.14 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)) transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)): + eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)): dependencies: debug: 4.4.1(supports-color@8.1.1) eslint: 9.34.0(jiti@2.5.1) @@ -7781,8 +7951,8 @@ snapshots: tinyglobby: 0.2.14 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)) transitivePeerDependencies: - supports-color @@ -7792,14 +7962,14 @@ snapshots: esquery: 1.6.0 jsonc-eslint-parser: 2.4.0 - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.34.0(jiti@2.5.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)) transitivePeerDependencies: - supports-color @@ -7815,14 +7985,14 @@ snapshots: pkg-dir: 5.0.0 resolve-from: 5.0.0 - eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2): + eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2): dependencies: '@typescript-eslint/utils': 8.39.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) array-includes: 3.1.9 debug: 4.4.1(supports-color@8.1.1) doctrine: 3.0.0 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)) - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)) is-get-set-prop: 1.0.0 is-js-type: 2.0.0 is-obj-prop: 1.0.0 @@ -7877,9 +8047,9 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)): + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)): dependencies: - '@typescript-eslint/types': 8.41.0 + '@typescript-eslint/types': 8.42.0 comment-parser: 1.4.1 debug: 4.4.1(supports-color@8.1.1) eslint: 9.34.0(jiti@2.5.1) @@ -7890,12 +8060,12 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2): + eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.41.0(@typescript-eslint/parser@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2): dependencies: '@typescript-eslint/utils': 8.39.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.34.0(jiti@2.5.1) @@ -7987,7 +8157,7 @@ snapshots: eslint-plugin-perfectionist@4.15.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/types': 8.41.0 + '@typescript-eslint/types': 8.42.0 '@typescript-eslint/utils': 8.39.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.34.0(jiti@2.5.1) natural-orderby: 5.0.0 @@ -9126,13 +9296,13 @@ snapshots: lines-and-columns@1.2.4: {} - lint-staged@16.1.5: + lint-staged@16.1.6: dependencies: - chalk: 5.5.0 + chalk: 5.6.0 commander: 14.0.0 debug: 4.4.1(supports-color@8.1.1) lilconfig: 3.1.3 - listr2: 9.0.1 + listr2: 9.0.3 micromatch: 4.0.8 nano-spawn: 1.0.2 pidtree: 0.6.0 @@ -9150,7 +9320,7 @@ snapshots: rfdc: 1.4.1 wrap-ansi: 9.0.0 - listr2@9.0.1: + listr2@9.0.3: dependencies: cli-truncate: 4.0.0 colorette: 2.0.20 @@ -9389,7 +9559,7 @@ snapshots: mkdirp@1.0.4: optional: true - mocha@11.7.1: + mocha@11.7.2: dependencies: browser-stdout: 1.3.1 chokidar: 4.0.3 @@ -10067,7 +10237,7 @@ snapshots: dependencies: '@semantic-release/commit-analyzer': 13.0.1(semantic-release@24.2.7(typescript@5.9.2)) '@semantic-release/error': 4.0.0 - '@semantic-release/github': 11.0.4(semantic-release@24.2.7(typescript@5.9.2)) + '@semantic-release/github': 11.0.5(semantic-release@24.2.7(typescript@5.9.2)) '@semantic-release/npm': 12.0.2(semantic-release@24.2.7(typescript@5.9.2)) '@semantic-release/release-notes-generator': 14.0.3(semantic-release@24.2.7(typescript@5.9.2)) aggregate-error: 5.0.0 @@ -10586,12 +10756,12 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2): + typescript-eslint@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/parser': 8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/eslint-plugin': 8.42.0(@typescript-eslint/parser@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/parser': 8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.42.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.34.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: diff --git a/src/rules/requireJsdoc.js b/src/rules/requireJsdoc.js index 669bc4a2c..527ce193d 100644 --- a/src/rules/requireJsdoc.js +++ b/src/rules/requireJsdoc.js @@ -104,6 +104,10 @@ const OPTIONS_SCHEMA = { default: false, type: 'boolean', }, + exemptOverloadedImplementations: { + default: false, + type: 'boolean', + }, fixerMessage: { default: '', type: 'string', @@ -307,6 +311,7 @@ const getOption = (context, baseObject, option, key) => { * exemptEmptyConstructors: boolean, * exemptEmptyFunctions: boolean, * skipInterveningOverloadedDeclarations: boolean, + * exemptOverloadedImplementations: boolean, * fixerMessage: string, * minLineCount: undefined|import('../iterateJsdoc.js').Integer, * publicOnly: boolean|{[key: string]: boolean|undefined} @@ -319,6 +324,7 @@ const getOptions = (context, settings) => { enableFixer = true, exemptEmptyConstructors = true, exemptEmptyFunctions = false, + exemptOverloadedImplementations = false, fixerMessage = '', minLineCount = undefined, publicOnly, @@ -330,6 +336,7 @@ const getOptions = (context, settings) => { enableFixer, exemptEmptyConstructors, exemptEmptyFunctions, + exemptOverloadedImplementations, fixerMessage, minLineCount, publicOnly: ((baseObj) => { @@ -396,6 +403,48 @@ const getOptions = (context, settings) => { }; }; +/** + * @param {ESLintOrTSNode} node + */ +const isFunctionWithOverload = (node) => { + if (node.type !== 'FunctionDeclaration') { + return false; + } + + let parent; + let child; + + if (node.parent?.type === 'Program') { + parent = node.parent; + child = node; + } else if (node.parent?.type === 'ExportNamedDeclaration' && + node.parent?.parent.type === 'Program') { + parent = node.parent?.parent; + child = node.parent; + } + + if (!child || !parent) { + return false; + } + + const functionName = node.id.name; + + const idx = parent.body.indexOf(child); + const prevSibling = parent.body[idx - 1]; + + return ( + // @ts-expect-error Should be ok + (prevSibling?.type === 'TSDeclareFunction' && + // @ts-expect-error Should be ok + functionName === prevSibling.id.name) || + (prevSibling?.type === 'ExportNamedDeclaration' && + // @ts-expect-error Should be ok + prevSibling.declaration?.type === 'TSDeclareFunction' && + // @ts-expect-error Should be ok + prevSibling.declaration?.id?.name === functionName) + ); +}; + /** @type {import('eslint').Rule.RuleModule} */ export default { create (context) { @@ -415,6 +464,7 @@ export default { enableFixer, exemptEmptyConstructors, exemptEmptyFunctions, + exemptOverloadedImplementations, fixerMessage, minLineCount, require: requireOption, @@ -484,6 +534,10 @@ export default { } } + if (exemptOverloadedImplementations && isFunctionWithOverload(node)) { + return; + } + const jsDocNode = getJSDocComment( sourceCode, node, settings, { checkOverloads: skipInterveningOverloadedDeclarations, diff --git a/test/rules/assertions/requireJsdoc.js b/test/rules/assertions/requireJsdoc.js index 5d547c5d3..bbd203351 100644 --- a/test/rules/assertions/requireJsdoc.js +++ b/test/rules/assertions/requireJsdoc.js @@ -4382,6 +4382,96 @@ function quux (foo) { function myFunction(foo?: string) {} `, }, + { + code: ` + /** + * Test function with param. + * @param foo - Test param. + */ + function myFunction(foo: string): void; + function myFunction(): void; + /** + * Function implementation + * @param foo + */ + function myFunction(foo?: string) {} + `, + errors: [ + { + line: 7, + message: 'Missing JSDoc comment.', + }, + ], + languageOptions: { + parser: typescriptEslintParser, + }, + options: [ + { + contexts: [ + 'TSDeclareFunction', + ], + exemptOverloadedImplementations: false, + skipInterveningOverloadedDeclarations: false, + }, + ], + output: ` + /** + * Test function with param. + * @param foo - Test param. + */ + function myFunction(foo: string): void; + /** + * + */ + function myFunction(): void; + /** + * Function implementation + * @param foo + */ + function myFunction(foo?: string) {} + `, + }, + { + code: ` + /** + * Test function with param. + * @param foo - Test param. + */ + function myFunction(foo: string): void; + function myFunction(): void; + function myFunction(foo?: string) {} + `, + errors: [ + { + line: 7, + message: 'Missing JSDoc comment.', + }, + ], + languageOptions: { + parser: typescriptEslintParser, + }, + options: [ + { + contexts: [ + 'TSDeclareFunction', + ], + exemptOverloadedImplementations: true, + skipInterveningOverloadedDeclarations: false, + }, + ], + output: ` + /** + * Test function with param. + * @param foo - Test param. + */ + function myFunction(foo: string): void; + /** + * + */ + function myFunction(): void; + function myFunction(foo?: string) {} + `, + }, ], valid: [ { @@ -6534,6 +6624,43 @@ function quux (foo) { }, ], }, + { + code: ` + /** + * Array map function with overload for NonEmptyArray + * @example + * const data = [{value: 'value'}] as const; + * const result1: NonEmptyReadonlyArray<'value'> = arrayMap(data, (value) => value.value); // pick type from data + * const result2: NonEmptyReadonlyArray<'value'> = arrayMap<'value', typeof data>(data, (value) => value.value); // enforce output type + * @template Target - The type of the array to map to + * @template Source - The type of the array to map from + * @param {Source} data - The array to map + * @param {MapCallback} callback - Callback function to map data from the array + * @returns {AnyArrayType} Mapped array + * @since v0.2.0 + */ + export function arrayMap | NonEmptyReadonlyArray>( + data: Source, + callback: MapCallback, + ): NonEmptyArray; + export function arrayMap>(data: Source, callback: MapCallback): Array; + export function arrayMap(data: Source, callback: MapCallback): AnyArrayType { + return data.map(callback); + } + `, + languageOptions: { + parser: typescriptEslintParser, + }, + options: [ + { + contexts: [ + 'TSDeclareFunction', + ], + exemptOverloadedImplementations: false, + skipInterveningOverloadedDeclarations: true, + }, + ], + }, { code: ` export interface A { @@ -6579,5 +6706,81 @@ function quux (foo) { parser: typescriptEslintParser, }, }, + { + code: ` + /** + * Test function with param. + * @param foo - Test param. + */ + function myFunction(foo: string): void; + /** + * Test function without param. + */ + function myFunction(): void; + function myFunction(foo?: string) {} + `, + languageOptions: { + parser: typescriptEslintParser, + }, + options: [ + { + contexts: [ + 'TSDeclareFunction', + ], + exemptOverloadedImplementations: true, + skipInterveningOverloadedDeclarations: false, + }, + ], + }, + { + code: ` + /** + * Test function with param. + * @param foo - Test param. + */ + export function myFunction(foo: string): void; + /** + * Test function without param. + */ + export function myFunction(): void; + export function myFunction(foo?: string) {} + `, + languageOptions: { + parser: typescriptEslintParser, + }, + options: [ + { + contexts: [ + 'TSDeclareFunction', + ], + exemptOverloadedImplementations: true, + skipInterveningOverloadedDeclarations: false, + }, + ], + }, + { + code: ` + /** + * + */ + const quux = () => { + /** + * + */ + function myFunction(foo?: string) {} + }; + `, + languageOptions: { + parser: typescriptEslintParser, + }, + options: [ + { + exemptOverloadedImplementations: true, + require: { + ArrowFunctionExpression: true, + }, + }, + ], + }, ], }); From 2693a881a3e16d7fcd5d41cb362de09cd8a6f6fa Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Fri, 5 Sep 2025 11:44:14 +0800 Subject: [PATCH 050/189] fix(`require-template`): check `TSDeclareFunction` (including overloads) for templates; fixes #1462 --- .README/rules/require-template.md | 2 +- docs/rules/require-template.md | 14 +++++++++++++- src/rules/requireTemplate.js | 3 +++ test/rules/assertions/requireTemplate.js | 23 +++++++++++++++++++++++ 4 files changed, 40 insertions(+), 2 deletions(-) diff --git a/.README/rules/require-template.md b/.README/rules/require-template.md index 173c4db41..b1aafaf81 100644 --- a/.README/rules/require-template.md +++ b/.README/rules/require-template.md @@ -3,7 +3,7 @@ Checks to see that `@template` tags are present for any detected type parameters. -Currently checks `ClassDeclaration`, `FunctionDeclaration`, +Currently checks `ClassDeclaration`, `FunctionDeclaration`, `TSDeclareFunction`, `TSInterfaceDeclaration` or `TSTypeAliasDeclaration` such as: ```ts diff --git a/docs/rules/require-template.md b/docs/rules/require-template.md index abbfea674..30826cab9 100644 --- a/docs/rules/require-template.md +++ b/docs/rules/require-template.md @@ -5,7 +5,7 @@ Checks to see that `@template` tags are present for any detected type parameters. -Currently checks `ClassDeclaration`, `FunctionDeclaration`, +Currently checks `ClassDeclaration`, `FunctionDeclaration`, `TSDeclareFunction`, `TSInterfaceDeclaration` or `TSTypeAliasDeclaration` such as: ```ts @@ -221,6 +221,18 @@ export default class { * @returns {[D, V | undefined]} */ // Message: Missing @template D + +/** + * @param bar + * @param baz + * @returns + */ +function foo(bar: T, baz: number): T; +function foo(bar: T, baz: boolean): T; +function foo(bar: T, baz: number | boolean): T { + return bar; +} +// Message: Missing @template T ```` diff --git a/src/rules/requireTemplate.js b/src/rules/requireTemplate.js index 1823383f4..ccf98ac62 100644 --- a/src/rules/requireTemplate.js +++ b/src/rules/requireTemplate.js @@ -42,6 +42,7 @@ export default iterateJsdoc(({ /** * @param {import('@typescript-eslint/types').TSESTree.FunctionDeclaration| * import('@typescript-eslint/types').TSESTree.ClassDeclaration| + * import('@typescript-eslint/types').TSESTree.TSDeclareFunction| * import('@typescript-eslint/types').TSESTree.TSInterfaceDeclaration| * import('@typescript-eslint/types').TSESTree.TSTypeAliasDeclaration} aliasDeclaration */ @@ -79,6 +80,7 @@ export default iterateJsdoc(({ switch (nde.type) { case 'ClassDeclaration': case 'FunctionDeclaration': + case 'TSDeclareFunction': case 'TSInterfaceDeclaration': case 'TSTypeAliasDeclaration': checkTypeParams(nde); @@ -97,6 +99,7 @@ export default iterateJsdoc(({ switch (nde.declaration?.type) { case 'ClassDeclaration': case 'FunctionDeclaration': + case 'TSDeclareFunction': case 'TSInterfaceDeclaration': case 'TSTypeAliasDeclaration': checkTypeParams(nde.declaration); diff --git a/test/rules/assertions/requireTemplate.js b/test/rules/assertions/requireTemplate.js index 8336a7936..53fb24c0c 100644 --- a/test/rules/assertions/requireTemplate.js +++ b/test/rules/assertions/requireTemplate.js @@ -403,6 +403,29 @@ export default /** @type {import('../index.js').TestCases} */ ({ }, ], }, + { + code: ` + /** + * @param bar + * @param baz + * @returns + */ + function foo(bar: T, baz: number): T; + function foo(bar: T, baz: boolean): T; + function foo(bar: T, baz: number | boolean): T { + return bar; + } + `, + errors: [ + { + line: 2, + message: 'Missing @template T', + }, + ], + languageOptions: { + parser: typescriptEslintParser, + }, + }, ], valid: [ { From b2764fc5544acb004890d46aaf96e7de61602e6e Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sat, 6 Sep 2025 12:35:00 +0800 Subject: [PATCH 051/189] chore: update jsdoccomment and devDeps. --- package.json | 18 +- pnpm-lock.yaml | 1092 +++++++++++++++++++++++++----------------------- 2 files changed, 574 insertions(+), 536 deletions(-) diff --git a/package.json b/package.json index 96202f1ed..a394a2068 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "url": "http://gajus.com" }, "dependencies": { - "@es-joy/jsdoccomment": "~0.54.1", + "@es-joy/jsdoccomment": "~0.56.0", "are-docs-informative": "^0.0.2", "comment-parser": "1.4.1", "debug": "^4.4.1", @@ -19,14 +19,14 @@ "description": "JSDoc linting rules for ESLint.", "devDependencies": { "@babel/cli": "^7.28.3", - "@babel/core": "^7.28.3", - "@babel/eslint-parser": "^7.28.0", + "@babel/core": "^7.28.4", + "@babel/eslint-parser": "^7.28.4", "@babel/node": "^7.28.0", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-transform-flow-strip-types": "^7.27.1", "@babel/preset-env": "^7.28.3", "@es-joy/escodegen": "^3.5.1", - "@es-joy/jsdoc-eslint-parser": "^0.22.0", + "@es-joy/jsdoc-eslint-parser": "^0.23.0", "@hkdobrev/run-if-changed": "^0.6.3", "@semantic-release/commit-analyzer": "^13.0.1", "@semantic-release/github": "^11.0.5", @@ -39,24 +39,24 @@ "@types/json-schema": "^7.0.15", "@types/lodash.defaultsdeep": "^4.6.9", "@types/mocha": "^10.0.10", - "@types/node": "^24.3.0", - "@types/semver": "^7.7.0", + "@types/node": "^24.3.1", + "@types/semver": "^7.7.1", "@types/spdx-expression-parse": "^3.0.5", "@typescript-eslint/types": "^8.42.0", "babel-plugin-add-module-exports": "^1.0.4", - "babel-plugin-istanbul": "^7.0.0", + "babel-plugin-istanbul": "^7.0.1", "babel-plugin-transform-import-meta": "^2.3.3", "c8": "^10.1.3", "camelcase": "^8.0.0", "chai": "^6.0.1", "decamelize": "^6.0.1", - "eslint": "9.34.0", + "eslint": "9.35.0", "eslint-config-canonical": "~45.0.0", "gitdown": "^4.1.1", "glob": "^11.0.3", "globals": "^16.3.0", "husky": "^9.1.7", - "jsdoc-type-pratt-parser": "^4.8.0", + "jsdoc-type-pratt-parser": "^5.1.1", "json-schema": "^0.4.0", "lint-staged": "^16.1.6", "lodash.defaultsdeep": "^4.6.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 266a7d966..1ed2981b7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: dependencies: '@es-joy/jsdoccomment': - specifier: ~0.54.1 - version: 0.54.1 + specifier: ~0.56.0 + version: 0.56.0 are-docs-informative: specifier: ^0.0.2 version: 0.0.2 @@ -41,31 +41,31 @@ importers: devDependencies: '@babel/cli': specifier: ^7.28.3 - version: 7.28.3(@babel/core@7.28.3) + version: 7.28.3(@babel/core@7.28.4) '@babel/core': - specifier: ^7.28.3 - version: 7.28.3 + specifier: ^7.28.4 + version: 7.28.4 '@babel/eslint-parser': - specifier: ^7.28.0 - version: 7.28.0(@babel/core@7.28.3)(eslint@9.34.0(jiti@2.5.1)) + specifier: ^7.28.4 + version: 7.28.4(@babel/core@7.28.4)(eslint@9.35.0(jiti@2.5.1)) '@babel/node': specifier: ^7.28.0 - version: 7.28.0(@babel/core@7.28.3) + version: 7.28.0(@babel/core@7.28.4) '@babel/plugin-syntax-class-properties': specifier: ^7.12.13 - version: 7.12.13(@babel/core@7.28.3) + version: 7.12.13(@babel/core@7.28.4) '@babel/plugin-transform-flow-strip-types': specifier: ^7.27.1 - version: 7.27.1(@babel/core@7.28.3) + version: 7.27.1(@babel/core@7.28.4) '@babel/preset-env': specifier: ^7.28.3 - version: 7.28.3(@babel/core@7.28.3) + version: 7.28.3(@babel/core@7.28.4) '@es-joy/escodegen': specifier: ^3.5.1 version: 3.5.1 '@es-joy/jsdoc-eslint-parser': - specifier: ^0.22.0 - version: 0.22.0(jiti@2.5.1) + specifier: ^0.23.0 + version: 0.23.0(jiti@2.5.1) '@hkdobrev/run-if-changed': specifier: ^0.6.3 version: 0.6.3(typescript@5.9.2) @@ -103,11 +103,11 @@ importers: specifier: ^10.0.10 version: 10.0.10 '@types/node': - specifier: ^24.3.0 - version: 24.3.0 + specifier: ^24.3.1 + version: 24.3.1 '@types/semver': - specifier: ^7.7.0 - version: 7.7.0 + specifier: ^7.7.1 + version: 7.7.1 '@types/spdx-expression-parse': specifier: ^3.0.5 version: 3.0.5 @@ -118,11 +118,11 @@ importers: specifier: ^1.0.4 version: 1.0.4 babel-plugin-istanbul: - specifier: ^7.0.0 - version: 7.0.0 + specifier: ^7.0.1 + version: 7.0.1 babel-plugin-transform-import-meta: specifier: ^2.3.3 - version: 2.3.3(@babel/core@7.28.3) + version: 2.3.3(@babel/core@7.28.4) c8: specifier: ^10.1.3 version: 10.1.3 @@ -136,11 +136,11 @@ importers: specifier: ^6.0.1 version: 6.0.1 eslint: - specifier: 9.34.0 - version: 9.34.0(jiti@2.5.1) + specifier: 9.35.0 + version: 9.35.0(jiti@2.5.1) eslint-config-canonical: specifier: ~45.0.0 - version: 45.0.0(@types/eslint@9.6.1)(@types/node@24.3.0)(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + version: 45.0.0(@types/eslint@9.6.1)(@types/node@24.3.1)(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) gitdown: specifier: ^4.1.1 version: 4.1.1(re2@1.20.9) @@ -154,8 +154,8 @@ importers: specifier: ^9.1.7 version: 9.1.7 jsdoc-type-pratt-parser: - specifier: ^4.8.0 - version: 4.8.0 + specifier: ^5.1.1 + version: 5.1.1 json-schema: specifier: ^0.4.0 version: 0.4.0 @@ -185,14 +185,10 @@ importers: version: 5.9.2 typescript-eslint: specifier: ^8.42.0 - version: 8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + version: 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) packages: - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - '@babel/cli@7.28.3': resolution: {integrity: sha512-n1RU5vuCX0CsaqaXm9I0KUCNKNQMy5epmzl/xdSSm70bSqhg9GWhgeosypyQLc0bK24+Xpk1WGzZlI9pJtkZdg==} engines: {node: '>=6.9.0'} @@ -208,12 +204,12 @@ packages: resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==} engines: {node: '>=6.9.0'} - '@babel/core@7.28.3': - resolution: {integrity: sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==} + '@babel/core@7.28.4': + resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==} engines: {node: '>=6.9.0'} - '@babel/eslint-parser@7.28.0': - resolution: {integrity: sha512-N4ntErOlKvcbTt01rr5wj3y55xnIdx1ymrfIr8C2WnM1Y9glFgWaGDEULJIazOX3XM9NRzhfJ6zZnQ1sBNWU+w==} + '@babel/eslint-parser@7.28.4': + resolution: {integrity: sha512-Aa+yDiH87980jR6zvRfFuCR1+dLb00vBydhTL+zI992Rz/wQhSvuxjmOOuJOgO3XmakO6RykRGD2S1mq1AtgHA==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} peerDependencies: '@babel/core': ^7.11.0 @@ -306,8 +302,8 @@ packages: resolution: {integrity: sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.28.3': - resolution: {integrity: sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==} + '@babel/helpers@7.28.4': + resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} engines: {node: '>=6.9.0'} '@babel/node@7.28.0': @@ -322,6 +318,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.28.4': + resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1': resolution: {integrity: sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==} engines: {node: '>=6.9.0'} @@ -724,10 +725,18 @@ packages: resolution: {integrity: sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==} engines: {node: '>=6.9.0'} + '@babel/traverse@7.28.4': + resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==} + engines: {node: '>=6.9.0'} + '@babel/types@7.28.2': resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} engines: {node: '>=6.9.0'} + '@babel/types@7.28.4': + resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} + engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@1.0.2': resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} @@ -766,20 +775,16 @@ packages: resolution: {integrity: sha512-lk61BuRPDm3KCm2x8Y629+szoRuChn83kG8ll+CniQM07u5dRVzQRkBFnn/hCdL+Urdsj4/6qeOJWr+QRRkKgw==} engines: {node: '>=4.0'} - '@es-joy/jsdoc-eslint-parser@0.22.0': - resolution: {integrity: sha512-paqzt2X6GXMvlJUhMlA5zUnTpLRa5VmEJdw3aaHV3IkDGmZFWEC0GylLV/ANKQ+EnnLcDy7LcerA8Nd5YCMkGA==} + '@es-joy/jsdoc-eslint-parser@0.23.0': + resolution: {integrity: sha512-ttZajF3WNK6hgGkgssGFo4JBx4TO57G6VXge6yYVu4/Gbf2K1qlP6+TU0hVJsmmw9dFuchVhqDSPjpmnVBIxdA==} engines: {node: '>=18.0.0'} '@es-joy/jsdoccomment@0.50.2': resolution: {integrity: sha512-YAdE/IJSpwbOTiaURNCKECdAwqrJuFiZhylmesBcIRawtYKnBR2wxPhoIewMg+Yu+QuYvHfJNReWpoxGBKOChA==} engines: {node: '>=18'} - '@es-joy/jsdoccomment@0.54.0': - resolution: {integrity: sha512-r+DsSLA9rhdL9+IXySvqi/4VfhVwMlMztv7xJCxki82DvcTSlk4AT878sUKxizUwSJ8UieuCbjjbNi1OL5by+Q==} - engines: {node: '>=20.11.0'} - - '@es-joy/jsdoccomment@0.54.1': - resolution: {integrity: sha512-2hJOXWybEqoA10KrQlP9XFV5luQpYZrAOIZzn2/0b0jLnLMxiRMnFz535HcoxFN1DkUWOV7B8qPbHp52VuKMeg==} + '@es-joy/jsdoccomment@0.56.0': + resolution: {integrity: sha512-c6EW+aA1w2rjqOMjbL93nZlwxp6c1Ln06vTYs5FjRRhmJXK8V/OrSXdT+pUr4aRYgjCgu8/OkiZr0tzeVrRSbw==} engines: {node: '>=20.11.0'} '@eslint-community/eslint-utils@4.7.0': @@ -788,6 +793,12 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/eslint-utils@4.8.0': + resolution: {integrity: sha512-MJQFqrZgcW0UNYLGOuQpey/oTN59vyWwplvCGZztn1cKz9agZPPYpJB7h2OMmuu7VLqkvEjN8feFZJmxNF9D+Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/regexpp@4.12.1': resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -808,8 +819,8 @@ packages: resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.34.0': - resolution: {integrity: sha512-EoyvqQnBNsV1CWaEJ559rxXL4c8V92gxirbawSmVUOWXlsRxxQXl6LmCpdUblgxgSkDIqKnhzba2SjRTI/A5Rw==} + '@eslint/js@9.35.0': + resolution: {integrity: sha512-30iXE9whjlILfWobBkNerJo+TXYsgVM5ERQwMcMKCHckHflCmf7wXDAHlARoWnh0s1U72WqlbeyE7iAcCzuCPw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': @@ -1008,6 +1019,9 @@ packages: '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} @@ -1222,14 +1236,14 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@24.3.0': - resolution: {integrity: sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==} + '@types/node@24.3.1': + resolution: {integrity: sha512-3vXmQDXy+woz+gnrTvuvNrPzekOi+Ds0ReMxw0LzBiK3a+1k0kQn9f2NWk+lgD4rJehFUmYy2gMhJ2ZI+7YP9g==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - '@types/semver@7.7.0': - resolution: {integrity: sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==} + '@types/semver@7.7.1': + resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} '@types/spdx-expression-parse@3.0.5': resolution: {integrity: sha512-XrojSCTzVxPAfWeAiw8Hg27OW/4jalE7yiohCHRPprqfPyt2oG+Osy1HstUPMF26cEdno3IeEhv31Pzl0wwsQw==} @@ -1692,8 +1706,8 @@ packages: babel-plugin-add-module-exports@1.0.4: resolution: {integrity: sha512-g+8yxHUZ60RcyaUpfNzy56OtWW+x9cyEe9j+CranqLiqbju2yf/Cy6ZtYK40EZxtrdHllzlVZgLmcOUCTlJ7Jg==} - babel-plugin-istanbul@7.0.0: - resolution: {integrity: sha512-C5OzENSx/A+gt7t4VH1I2XsflxyPUmXRFPKBxt33xncdOmq7oROVM3bZv9Ysjjkv8OJYDMa+tKuKMvqU/H3xdw==} + babel-plugin-istanbul@7.0.1: + resolution: {integrity: sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==} engines: {node: '>=12'} babel-plugin-polyfill-corejs2@0.4.14: @@ -2582,8 +2596,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.34.0: - resolution: {integrity: sha512-RNCHRX5EwdrESy3Jc9o8ie8Bog+PeYvvSR8sDGoZxNFTvZ4dlxUB3WzQ3bQMztFrSRODGrLLj8g6OFuGY/aiQg==} + eslint@9.35.0: + resolution: {integrity: sha512-QePbBFMJFjgmlE+cXAlbHZbHpdFVS2E/6vzCy7aKlebddvl1vadiC4JFV5u/wqTkNUwEV8WrQi257jf5f06hrg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -3452,6 +3466,10 @@ packages: resolution: {integrity: sha512-iZ8Bdb84lWRuGHamRXFyML07r21pcwBrLkHEuHgEY5UbCouBwv7ECknDRKzsQIXMiqpPymqtIf8TC/shYKB5rw==} engines: {node: '>=12.0.0'} + jsdoc-type-pratt-parser@5.1.1: + resolution: {integrity: sha512-DYYlVP1fe4QBMh2xTIs20/YeTz2GYVbWAEZweHSZD+qQ/Cx2d5RShuhhsdk64eTjNq0FeVnteP/qVOgaywSRbg==} + engines: {node: '>=12.0.0'} + jsdom@6.5.1: resolution: {integrity: sha512-KeCN3yqR+MmjAZDnVZgIaL2tP9BxSFlsYZw9Z+zy64+jJzHc1m8ruccb83Qe8AG0xKUjpo2kxEGFCMtiF4MmAg==} @@ -5210,14 +5228,9 @@ packages: snapshots: - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.30 - - '@babel/cli@7.28.3(@babel/core@7.28.3)': + '@babel/cli@7.28.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@jridgewell/trace-mapping': 0.3.30 commander: 6.2.1 convert-source-map: 2.0.0 @@ -5237,18 +5250,18 @@ snapshots: '@babel/compat-data@7.28.0': {} - '@babel/core@7.28.3': + '@babel/core@7.28.4': dependencies: - '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.27.1 '@babel/generator': 7.28.3 '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.3) - '@babel/helpers': 7.28.3 - '@babel/parser': 7.28.3 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/helpers': 7.28.4 + '@babel/parser': 7.28.4 '@babel/template': 7.27.2 - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 debug: 4.4.1(supports-color@8.1.1) gensync: 1.0.0-beta.2 @@ -5257,11 +5270,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/eslint-parser@7.28.0(@babel/core@7.28.3)(eslint@9.34.0(jiti@2.5.1))': + '@babel/eslint-parser@7.28.4(@babel/core@7.28.4)(eslint@9.35.0(jiti@2.5.1))': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.35.0(jiti@2.5.1) eslint-visitor-keys: 2.1.0 semver: 6.3.1 @@ -5285,29 +5298,29 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.28.3)': + '@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.3) + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 '@babel/traverse': 7.28.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.28.3)': + '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-annotate-as-pure': 7.27.3 regexpu-core: 6.2.0 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.5(@babel/core@7.28.3)': + '@babel/helper-define-polyfill-provider@0.6.5(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 debug: 4.4.1(supports-color@8.1.1) @@ -5332,9 +5345,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.3)': + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-module-imports': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 '@babel/traverse': 7.28.3 @@ -5347,18 +5360,18 @@ snapshots: '@babel/helper-plugin-utils@7.27.1': {} - '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.28.3)': + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-wrap-function': 7.28.3 '@babel/traverse': 7.28.3 transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.3)': + '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 '@babel/traverse': 7.28.3 @@ -5386,15 +5399,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helpers@7.28.3': + '@babel/helpers@7.28.4': dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 - '@babel/node@7.28.0(@babel/core@7.28.3)': + '@babel/node@7.28.0(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/register': 7.28.3(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/register': 7.28.3(@babel/core@7.28.4) commander: 6.2.1 core-js: 3.45.0 node-environment-flags: 1.0.6 @@ -5405,496 +5418,500 @@ snapshots: dependencies: '@babel/types': 7.28.2 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.28.3)': + '@babel/parser@7.28.4': dependencies: - '@babel/core': 7.28.3 + '@babel/types': 7.28.4 + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/traverse': 7.28.3 transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.4) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3(@babel/core@7.28.3)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/traverse': 7.28.3 transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.3)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.3)': + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-flow@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-syntax-flow@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.3)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-async-generator-functions@7.28.0(@babel/core@7.28.3)': + '@babel/plugin-transform-async-generator-functions@7.28.0(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.3) + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.4) '@babel/traverse': 7.28.3 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.3) + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.4) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-block-scoping@7.28.0(@babel/core@7.28.3)': + '@babel/plugin-transform-block-scoping@7.28.0(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.28.3(@babel/core@7.28.3)': + '@babel/plugin-transform-class-static-block@7.28.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.28.3(@babel/core@7.28.3)': + '@babel/plugin-transform-classes@7.28.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-globals': 7.28.0 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.3) + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) '@babel/traverse': 7.28.3 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/template': 7.27.2 - '@babel/plugin-transform-destructuring@7.28.0(@babel/core@7.28.3)': + '@babel/plugin-transform-destructuring@7.28.0(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/traverse': 7.28.3 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-explicit-resource-management@7.28.0(@babel/core@7.28.3)': + '@babel/plugin-transform-explicit-resource-management@7.28.0(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.3) + '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.4) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-flow-strip-types@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-flow-strip-types@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-flow': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-syntax-flow': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 '@babel/traverse': 7.28.3 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-literals@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 '@babel/traverse': 7.28.3 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-object-rest-spread@7.28.0(@babel/core@7.28.3)': + '@babel/plugin-transform-object-rest-spread@7.28.0(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.3) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.3) + '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.4) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.4) '@babel/traverse': 7.28.3 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.3) + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.28.3)': + '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.3) + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-regenerator@7.28.3(@babel/core@7.28.3)': + '@babel/plugin-transform-regenerator@7.28.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-spread@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-spread@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 - '@babel/preset-env@7.28.3(@babel/core@7.28.3)': + '@babel/preset-env@7.28.3(@babel/core@7.28.4)': dependencies: '@babel/compat-data': 7.28.0 - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.3(@babel/core@7.28.3) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.3) - '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.28.3) - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.28.3) - '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-block-scoping': 7.28.0(@babel/core@7.28.3) - '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-class-static-block': 7.28.3(@babel/core@7.28.3) - '@babel/plugin-transform-classes': 7.28.3(@babel/core@7.28.3) - '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.3) - '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-explicit-resource-management': 7.28.0(@babel/core@7.28.3) - '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-object-rest-spread': 7.28.0(@babel/core@7.28.3) - '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.3) - '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-regenerator': 7.28.3(@babel/core@7.28.3) - '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.28.3) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.28.3) - babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.3) - babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.3) - babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.3) + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.3(@babel/core@7.28.4) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.4) + '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.28.4) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.28.4) + '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-block-scoping': 7.28.0(@babel/core@7.28.4) + '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-class-static-block': 7.28.3(@babel/core@7.28.4) + '@babel/plugin-transform-classes': 7.28.3(@babel/core@7.28.4) + '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.4) + '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-explicit-resource-management': 7.28.0(@babel/core@7.28.4) + '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-object-rest-spread': 7.28.0(@babel/core@7.28.4) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.4) + '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-regenerator': 7.28.3(@babel/core@7.28.4) + '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.28.4) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.28.4) + babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.4) + babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.4) + babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.4) core-js-compat: 3.45.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.3)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/types': 7.28.2 esutils: 2.0.3 - '@babel/register@7.28.3(@babel/core@7.28.3)': + '@babel/register@7.28.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 clone-deep: 4.0.1 find-cache-dir: 2.1.0 make-dir: 2.1.0 @@ -5919,11 +5936,28 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/traverse@7.28.4': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.3 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.28.4 + '@babel/template': 7.27.2 + '@babel/types': 7.28.4 + debug: 4.4.1(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + '@babel/types@7.28.2': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 + '@babel/types@7.28.4': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@bcoe/v8-coverage@1.0.2': {} '@colors/colors@1.5.0': @@ -5973,13 +6007,13 @@ snapshots: '@es-joy/estraverse@6.0.0': {} - '@es-joy/jsdoc-eslint-parser@0.22.0(jiti@2.5.1)': + '@es-joy/jsdoc-eslint-parser@0.23.0(jiti@2.5.1)': dependencies: - '@babel/core': 7.28.3 - '@babel/eslint-parser': 7.28.0(@babel/core@7.28.3)(eslint@9.34.0(jiti@2.5.1)) - '@es-joy/jsdoccomment': 0.54.0 - '@typescript-eslint/parser': 8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.34.0(jiti@2.5.1) + '@babel/core': 7.28.4 + '@babel/eslint-parser': 7.28.4(@babel/core@7.28.4)(eslint@9.35.0(jiti@2.5.1)) + '@es-joy/jsdoccomment': 0.56.0 + '@typescript-eslint/parser': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.35.0(jiti@2.5.1) esquery: 1.6.0 typescript: 5.9.2 transitivePeerDependencies: @@ -5994,25 +6028,22 @@ snapshots: esquery: 1.6.0 jsdoc-type-pratt-parser: 4.1.0 - '@es-joy/jsdoccomment@0.54.0': + '@es-joy/jsdoccomment@0.56.0': dependencies: '@types/estree': 1.0.8 '@typescript-eslint/types': 8.42.0 comment-parser: 1.4.1 esquery: 1.6.0 - jsdoc-type-pratt-parser: 4.8.0 + jsdoc-type-pratt-parser: 5.1.1 - '@es-joy/jsdoccomment@0.54.1': + '@eslint-community/eslint-utils@4.7.0(eslint@9.35.0(jiti@2.5.1))': dependencies: - '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.42.0 - comment-parser: 1.4.1 - esquery: 1.6.0 - jsdoc-type-pratt-parser: 4.8.0 + eslint: 9.35.0(jiti@2.5.1) + eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.7.0(eslint@9.34.0(jiti@2.5.1))': + '@eslint-community/eslint-utils@4.8.0(eslint@9.35.0(jiti@2.5.1))': dependencies: - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.35.0(jiti@2.5.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -6045,7 +6076,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.34.0': {} + '@eslint/js@9.35.0': {} '@eslint/object-schema@2.1.6': {} @@ -6056,16 +6087,16 @@ snapshots: '@fastify/busboy@3.1.1': {} - '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.3.0)(eslint@9.34.0(jiti@2.5.1))(graphql@16.11.0)(typescript@5.9.2)': + '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.3.1)(eslint@9.35.0(jiti@2.5.1))(graphql@16.11.0)(typescript@5.9.2)': dependencies: '@graphql-tools/code-file-loader': 8.1.22(graphql@16.11.0) '@graphql-tools/graphql-tag-pluck': 8.3.21(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) debug: 4.4.1(supports-color@8.1.1) - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.35.0(jiti@2.5.1) fast-glob: 3.3.3 graphql: 16.11.0 - graphql-config: 5.1.5(@types/node@24.3.0)(graphql@16.11.0)(typescript@5.9.2) + graphql-config: 5.1.5(@types/node@24.3.1)(graphql@16.11.0)(typescript@5.9.2) graphql-depth-limit: 1.1.0(graphql@16.11.0) lodash.lowercase: 4.3.0 transitivePeerDependencies: @@ -6142,7 +6173,7 @@ snapshots: - uWebSockets.js - utf-8-validate - '@graphql-tools/executor-http@1.3.3(@types/node@24.3.0)(graphql@16.11.0)': + '@graphql-tools/executor-http@1.3.3(@types/node@24.3.1)(graphql@16.11.0)': dependencies: '@graphql-hive/signal': 1.0.0 '@graphql-tools/executor-common': 0.0.4(graphql@16.11.0) @@ -6152,7 +6183,7 @@ snapshots: '@whatwg-node/fetch': 0.10.10 '@whatwg-node/promise-helpers': 1.3.2 graphql: 16.11.0 - meros: 1.3.1(@types/node@24.3.0) + meros: 1.3.1(@types/node@24.3.1) tslib: 2.8.1 transitivePeerDependencies: - '@types/node' @@ -6192,9 +6223,9 @@ snapshots: '@graphql-tools/graphql-tag-pluck@8.3.21(graphql@16.11.0)': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/parser': 7.28.3 - '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.4) '@babel/traverse': 7.28.3 '@babel/types': 7.28.2 '@graphql-tools/utils': 10.9.1(graphql@16.11.0) @@ -6242,10 +6273,10 @@ snapshots: graphql: 16.11.0 tslib: 2.8.1 - '@graphql-tools/url-loader@8.0.33(@types/node@24.3.0)(graphql@16.11.0)': + '@graphql-tools/url-loader@8.0.33(@types/node@24.3.1)(graphql@16.11.0)': dependencies: '@graphql-tools/executor-graphql-ws': 2.0.7(graphql@16.11.0) - '@graphql-tools/executor-http': 1.3.3(@types/node@24.3.0)(graphql@16.11.0) + '@graphql-tools/executor-http': 1.3.3(@types/node@24.3.1)(graphql@16.11.0) '@graphql-tools/executor-legacy-ws': 1.1.19(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) '@graphql-tools/wrap': 10.1.4(graphql@16.11.0) @@ -6340,6 +6371,11 @@ snapshots: '@jridgewell/sourcemap-codec': 1.5.5 '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/sourcemap-codec@1.5.5': {} @@ -6554,10 +6590,10 @@ snapshots: '@sindresorhus/merge-streams@4.0.0': {} - '@stylistic/eslint-plugin@4.4.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)': + '@stylistic/eslint-plugin@4.4.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@typescript-eslint/utils': 8.39.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.34.0(jiti@2.5.1) + '@typescript-eslint/utils': 8.39.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.35.0(jiti@2.5.1) eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 @@ -6622,29 +6658,29 @@ snapshots: '@types/ms@2.1.0': {} - '@types/node@24.3.0': + '@types/node@24.3.1': dependencies: undici-types: 7.10.0 '@types/normalize-package-data@2.4.4': {} - '@types/semver@7.7.0': {} + '@types/semver@7.7.1': {} '@types/spdx-expression-parse@3.0.5': {} '@types/ws@8.18.1': dependencies: - '@types/node': 24.3.0 + '@types/node': 24.3.1 - '@typescript-eslint/eslint-plugin@8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/eslint-plugin@8.41.0(@typescript-eslint/parser@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/parser': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/scope-manager': 8.41.0 - '@typescript-eslint/type-utils': 8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/utils': 8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/type-utils': 8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/visitor-keys': 8.41.0 - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.35.0(jiti@2.5.1) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -6653,15 +6689,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.42.0(@typescript-eslint/parser@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/eslint-plugin@8.42.0(@typescript-eslint/parser@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/parser': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/scope-manager': 8.42.0 - '@typescript-eslint/type-utils': 8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/utils': 8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/type-utils': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/visitor-keys': 8.42.0 - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.35.0(jiti@2.5.1) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -6670,26 +6706,26 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/parser@8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@typescript-eslint/scope-manager': 8.41.0 '@typescript-eslint/types': 8.41.0 '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.9.2) '@typescript-eslint/visitor-keys': 8.41.0 debug: 4.4.1(supports-color@8.1.1) - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.35.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/parser@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@typescript-eslint/scope-manager': 8.42.0 '@typescript-eslint/types': 8.42.0 '@typescript-eslint/typescript-estree': 8.42.0(typescript@5.9.2) '@typescript-eslint/visitor-keys': 8.42.0 debug: 4.4.1(supports-color@8.1.1) - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.35.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -6748,37 +6784,37 @@ snapshots: dependencies: typescript: 5.9.2 - '@typescript-eslint/type-utils@8.39.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/type-utils@8.39.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@typescript-eslint/types': 8.39.1 '@typescript-eslint/typescript-estree': 8.39.1(typescript@5.9.2) - '@typescript-eslint/utils': 8.39.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) debug: 4.4.1(supports-color@8.1.1) - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.35.0(jiti@2.5.1) ts-api-utils: 2.1.0(typescript@5.9.2) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/type-utils@8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@typescript-eslint/types': 8.41.0 '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) debug: 4.4.1(supports-color@8.1.1) - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.35.0(jiti@2.5.1) ts-api-utils: 2.1.0(typescript@5.9.2) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/type-utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@typescript-eslint/types': 8.42.0 '@typescript-eslint/typescript-estree': 8.42.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) debug: 4.4.1(supports-color@8.1.1) - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.35.0(jiti@2.5.1) ts-api-utils: 2.1.0(typescript@5.9.2) typescript: 5.9.2 transitivePeerDependencies: @@ -6838,35 +6874,35 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.39.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/utils@8.39.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.35.0(jiti@2.5.1)) '@typescript-eslint/scope-manager': 8.39.1 '@typescript-eslint/types': 8.39.1 '@typescript-eslint/typescript-estree': 8.39.1(typescript@5.9.2) - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.35.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/utils@8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.35.0(jiti@2.5.1)) '@typescript-eslint/scope-manager': 8.41.0 '@typescript-eslint/types': 8.41.0 '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.9.2) - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.35.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.35.0(jiti@2.5.1)) '@typescript-eslint/scope-manager': 8.42.0 '@typescript-eslint/types': 8.42.0 '@typescript-eslint/typescript-estree': 8.42.0(typescript@5.9.2) - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.35.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -6945,10 +6981,10 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - '@vitest/eslint-plugin@1.3.4(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)': + '@vitest/eslint-plugin@1.3.4(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@typescript-eslint/utils': 8.39.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.34.0(jiti@2.5.1) + '@typescript-eslint/utils': 8.39.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.35.0(jiti@2.5.1) optionalDependencies: typescript: 5.9.2 transitivePeerDependencies: @@ -7152,7 +7188,7 @@ snapshots: babel-plugin-add-module-exports@1.0.4: {} - babel-plugin-istanbul@7.0.0: + babel-plugin-istanbul@7.0.1: dependencies: '@babel/helper-plugin-utils': 7.27.1 '@istanbuljs/load-nyc-config': 1.1.0 @@ -7162,33 +7198,33 @@ snapshots: transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.28.3): + babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.28.4): dependencies: '@babel/compat-data': 7.28.0 - '@babel/core': 7.28.3 - '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.28.3): + babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.28.4): dependencies: - '@babel/core': 7.28.3 - '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4) core-js-compat: 3.45.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.5(@babel/core@7.28.3): + babel-plugin-polyfill-regenerator@0.6.5(@babel/core@7.28.4): dependencies: - '@babel/core': 7.28.3 - '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.3) + '@babel/core': 7.28.4 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4) transitivePeerDependencies: - supports-color - babel-plugin-transform-import-meta@2.3.3(@babel/core@7.28.3): + babel-plugin-transform-import-meta@2.3.3(@babel/core@7.28.4): dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/template': 7.27.2 tslib: 2.8.1 @@ -7833,55 +7869,55 @@ snapshots: lodash.get: 4.4.2 lodash.zip: 4.2.0 - eslint-compat-utils@0.5.1(eslint@9.34.0(jiti@2.5.1)): + eslint-compat-utils@0.5.1(eslint@9.35.0(jiti@2.5.1)): dependencies: - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.35.0(jiti@2.5.1) semver: 7.7.2 - eslint-compat-utils@0.6.5(eslint@9.34.0(jiti@2.5.1)): + eslint-compat-utils@0.6.5(eslint@9.35.0(jiti@2.5.1)): dependencies: - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.35.0(jiti@2.5.1) semver: 7.7.2 - eslint-config-canonical@45.0.0(@types/eslint@9.6.1)(@types/node@24.3.0)(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2): + eslint-config-canonical@45.0.0(@types/eslint@9.6.1)(@types/node@24.3.1)(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.3.0)(eslint@9.34.0(jiti@2.5.1))(graphql@16.11.0)(typescript@5.9.2) + '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.3.1)(eslint@9.35.0(jiti@2.5.1))(graphql@16.11.0)(typescript@5.9.2) '@next/eslint-plugin-next': 15.5.2 - '@stylistic/eslint-plugin': 4.4.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/eslint-plugin': 8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/parser': 8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) - '@vitest/eslint-plugin': 1.3.4(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.34.0(jiti@2.5.1) - eslint-config-prettier: 10.1.8(eslint@9.34.0(jiti@2.5.1)) - eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)) - eslint-plugin-ava: 15.1.0(eslint@9.34.0(jiti@2.5.1)) - eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) - eslint-plugin-eslint-comments: 3.2.0(eslint@9.34.0(jiti@2.5.1)) - eslint-plugin-fp: 2.3.0(eslint@9.34.0(jiti@2.5.1)) - eslint-plugin-functional: 9.0.2(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)) - eslint-plugin-jest: 28.14.0(@typescript-eslint/eslint-plugin@8.41.0(@typescript-eslint/parser@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) - eslint-plugin-jsdoc: 50.8.0(eslint@9.34.0(jiti@2.5.1)) - eslint-plugin-jsonc: 2.20.1(eslint@9.34.0(jiti@2.5.1)) - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.34.0(jiti@2.5.1)) - eslint-plugin-lodash: 8.0.0(eslint@9.34.0(jiti@2.5.1)) - eslint-plugin-mocha: 10.5.0(eslint@9.34.0(jiti@2.5.1)) + '@stylistic/eslint-plugin': 4.4.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/eslint-plugin': 8.41.0(@typescript-eslint/parser@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/parser': 8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@vitest/eslint-plugin': 1.3.4(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.35.0(jiti@2.5.1) + eslint-config-prettier: 10.1.8(eslint@9.35.0(jiti@2.5.1)) + eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-ava: 15.1.0(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + eslint-plugin-eslint-comments: 3.2.0(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-fp: 2.3.0(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-functional: 9.0.2(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-jest: 28.14.0(@typescript-eslint/eslint-plugin@8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + eslint-plugin-jsdoc: 50.8.0(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-jsonc: 2.20.1(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-lodash: 8.0.0(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-mocha: 10.5.0(eslint@9.35.0(jiti@2.5.1)) eslint-plugin-modules-newline: 0.0.6 - eslint-plugin-n: 17.21.3(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) - eslint-plugin-perfectionist: 4.15.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) - eslint-plugin-prettier: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1))(prettier@3.6.2) - eslint-plugin-promise: 7.2.1(eslint@9.34.0(jiti@2.5.1)) - eslint-plugin-react: 7.37.5(eslint@9.34.0(jiti@2.5.1)) - eslint-plugin-react-hooks: 5.2.0(eslint@9.34.0(jiti@2.5.1)) - eslint-plugin-regexp: 2.10.0(eslint@9.34.0(jiti@2.5.1)) - eslint-plugin-unicorn: 60.0.0(eslint@9.34.0(jiti@2.5.1)) - eslint-plugin-yml: 1.18.0(eslint@9.34.0(jiti@2.5.1)) - eslint-plugin-zod: 1.4.0(eslint@9.34.0(jiti@2.5.1)) + eslint-plugin-n: 17.21.3(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + eslint-plugin-perfectionist: 4.15.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + eslint-plugin-prettier: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(prettier@3.6.2) + eslint-plugin-promise: 7.2.1(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-react: 7.37.5(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-react-hooks: 5.2.0(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-regexp: 2.10.0(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-unicorn: 60.0.0(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-yml: 1.18.0(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-zod: 1.4.0(eslint@9.35.0(jiti@2.5.1)) globals: 16.3.0 graphql: 16.11.0 prettier: 3.6.2 ramda: 0.30.1 - typescript-eslint: 8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + typescript-eslint: 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) yaml-eslint-parser: 1.3.0 transitivePeerDependencies: - '@apollo/subgraph' @@ -7904,9 +7940,9 @@ snapshots: - utf-8-validate - vitest - eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.5.1)): + eslint-config-prettier@10.1.8(eslint@9.35.0(jiti@2.5.1)): dependencies: - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.35.0(jiti@2.5.1) eslint-import-context@0.1.9(unrs-resolver@1.11.1): dependencies: @@ -7924,26 +7960,26 @@ snapshots: - supports-color optional: true - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.1(supports-color@8.1.1) - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.35.0(jiti@2.5.1) get-tsconfig: 4.10.1 is-bun-module: 2.0.0 stable-hash: 0.0.5 tinyglobby: 0.2.14 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)) transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)): + eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)): dependencies: debug: 4.4.1(supports-color@8.1.1) - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.35.0(jiti@2.5.1) eslint-import-context: 0.1.9(unrs-resolver@1.11.1) get-tsconfig: 4.10.1 is-bun-module: 2.0.0 @@ -7951,33 +7987,33 @@ snapshots: tinyglobby: 0.2.14 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)) transitivePeerDependencies: - supports-color - eslint-json-compat-utils@0.2.1(eslint@9.34.0(jiti@2.5.1))(jsonc-eslint-parser@2.4.0): + eslint-json-compat-utils@0.2.1(eslint@9.35.0(jiti@2.5.1))(jsonc-eslint-parser@2.4.0): dependencies: - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.35.0(jiti@2.5.1) esquery: 1.6.0 jsonc-eslint-parser: 2.4.0 - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.34.0(jiti@2.5.1) + '@typescript-eslint/parser': 8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.35.0(jiti@2.5.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)) transitivePeerDependencies: - supports-color - eslint-plugin-ava@15.1.0(eslint@9.34.0(jiti@2.5.1)): + eslint-plugin-ava@15.1.0(eslint@9.35.0(jiti@2.5.1)): dependencies: enhance-visitors: 1.0.0 - eslint: 9.34.0(jiti@2.5.1) - eslint-utils: 3.0.0(eslint@9.34.0(jiti@2.5.1)) + eslint: 9.35.0(jiti@2.5.1) + eslint-utils: 3.0.0(eslint@9.35.0(jiti@2.5.1)) espree: 9.6.1 espurify: 2.1.1 import-modules: 2.1.0 @@ -7985,14 +8021,14 @@ snapshots: pkg-dir: 5.0.0 resolve-from: 5.0.0 - eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2): + eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/utils': 8.39.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) array-includes: 3.1.9 debug: 4.4.1(supports-color@8.1.1) doctrine: 3.0.0 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)) - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)) is-get-set-prop: 1.0.0 is-js-type: 2.0.0 is-obj-prop: 1.0.0 @@ -8012,34 +8048,34 @@ snapshots: - supports-color - typescript - eslint-plugin-es-x@7.8.0(eslint@9.34.0(jiti@2.5.1)): + eslint-plugin-es-x@7.8.0(eslint@9.35.0(jiti@2.5.1)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.35.0(jiti@2.5.1)) '@eslint-community/regexpp': 4.12.1 - eslint: 9.34.0(jiti@2.5.1) - eslint-compat-utils: 0.5.1(eslint@9.34.0(jiti@2.5.1)) + eslint: 9.35.0(jiti@2.5.1) + eslint-compat-utils: 0.5.1(eslint@9.35.0(jiti@2.5.1)) - eslint-plugin-eslint-comments@3.2.0(eslint@9.34.0(jiti@2.5.1)): + eslint-plugin-eslint-comments@3.2.0(eslint@9.35.0(jiti@2.5.1)): dependencies: escape-string-regexp: 1.0.5 - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.35.0(jiti@2.5.1) ignore: 5.3.2 - eslint-plugin-fp@2.3.0(eslint@9.34.0(jiti@2.5.1)): + eslint-plugin-fp@2.3.0(eslint@9.35.0(jiti@2.5.1)): dependencies: create-eslint-index: 1.0.0 - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.35.0(jiti@2.5.1) eslint-ast-utils: 1.1.0 lodash: 4.17.21 req-all: 0.1.0 - eslint-plugin-functional@9.0.2(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2): + eslint-plugin-functional@9.0.2(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/utils': 8.39.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) deepmerge-ts: 7.1.5 escape-string-regexp: 5.0.0 - eslint: 9.34.0(jiti@2.5.1) - is-immutable-type: 5.0.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.35.0(jiti@2.5.1) + is-immutable-type: 5.0.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) ts-api-utils: 2.1.0(typescript@5.9.2) ts-declaration-location: 1.0.7(typescript@5.9.2) optionalDependencies: @@ -8047,12 +8083,12 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)): + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)): dependencies: '@typescript-eslint/types': 8.42.0 comment-parser: 1.4.1 debug: 4.4.1(supports-color@8.1.1) - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.35.0(jiti@2.5.1) eslint-import-context: 0.1.9(unrs-resolver@1.11.1) is-glob: 4.0.3 minimatch: 10.0.3 @@ -8060,29 +8096,29 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.41.0(@typescript-eslint/parser@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2): + eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/utils': 8.39.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.34.0(jiti@2.5.1) + '@typescript-eslint/utils': 8.39.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.35.0(jiti@2.5.1) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/eslint-plugin': 8.41.0(@typescript-eslint/parser@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-jsdoc@50.8.0(eslint@9.34.0(jiti@2.5.1)): + eslint-plugin-jsdoc@50.8.0(eslint@9.35.0(jiti@2.5.1)): dependencies: '@es-joy/jsdoccomment': 0.50.2 are-docs-informative: 0.0.2 comment-parser: 1.4.1 debug: 4.4.1(supports-color@8.1.1) escape-string-regexp: 4.0.0 - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.35.0(jiti@2.5.1) espree: 10.4.0 esquery: 1.6.0 parse-imports-exports: 0.2.4 @@ -8091,12 +8127,12 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-jsonc@2.20.1(eslint@9.34.0(jiti@2.5.1)): + eslint-plugin-jsonc@2.20.1(eslint@9.35.0(jiti@2.5.1)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.5.1)) - eslint: 9.34.0(jiti@2.5.1) - eslint-compat-utils: 0.6.5(eslint@9.34.0(jiti@2.5.1)) - eslint-json-compat-utils: 0.2.1(eslint@9.34.0(jiti@2.5.1))(jsonc-eslint-parser@2.4.0) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.35.0(jiti@2.5.1)) + eslint: 9.35.0(jiti@2.5.1) + eslint-compat-utils: 0.6.5(eslint@9.35.0(jiti@2.5.1)) + eslint-json-compat-utils: 0.2.1(eslint@9.35.0(jiti@2.5.1))(jsonc-eslint-parser@2.4.0) espree: 10.4.0 graphemer: 1.4.0 jsonc-eslint-parser: 2.4.0 @@ -8105,7 +8141,7 @@ snapshots: transitivePeerDependencies: - '@eslint/json' - eslint-plugin-jsx-a11y@6.10.2(eslint@9.34.0(jiti@2.5.1)): + eslint-plugin-jsx-a11y@6.10.2(eslint@9.35.0(jiti@2.5.1)): dependencies: aria-query: 5.3.2 array-includes: 3.1.9 @@ -8115,7 +8151,7 @@ snapshots: axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.35.0(jiti@2.5.1) hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 @@ -8124,15 +8160,15 @@ snapshots: safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 - eslint-plugin-lodash@8.0.0(eslint@9.34.0(jiti@2.5.1)): + eslint-plugin-lodash@8.0.0(eslint@9.35.0(jiti@2.5.1)): dependencies: - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.35.0(jiti@2.5.1) lodash: 4.17.21 - eslint-plugin-mocha@10.5.0(eslint@9.34.0(jiti@2.5.1)): + eslint-plugin-mocha@10.5.0(eslint@9.35.0(jiti@2.5.1)): dependencies: - eslint: 9.34.0(jiti@2.5.1) - eslint-utils: 3.0.0(eslint@9.34.0(jiti@2.5.1)) + eslint: 9.35.0(jiti@2.5.1) + eslint-utils: 3.0.0(eslint@9.35.0(jiti@2.5.1)) globals: 13.24.0 rambda: 7.5.0 @@ -8140,12 +8176,12 @@ snapshots: dependencies: requireindex: 1.1.0 - eslint-plugin-n@17.21.3(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2): + eslint-plugin-n@17.21.3(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.35.0(jiti@2.5.1)) enhanced-resolve: 5.18.3 - eslint: 9.34.0(jiti@2.5.1) - eslint-plugin-es-x: 7.8.0(eslint@9.34.0(jiti@2.5.1)) + eslint: 9.35.0(jiti@2.5.1) + eslint-plugin-es-x: 7.8.0(eslint@9.35.0(jiti@2.5.1)) get-tsconfig: 4.10.1 globals: 15.15.0 globrex: 0.1.2 @@ -8155,36 +8191,36 @@ snapshots: transitivePeerDependencies: - typescript - eslint-plugin-perfectionist@4.15.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2): + eslint-plugin-perfectionist@4.15.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): dependencies: '@typescript-eslint/types': 8.42.0 - '@typescript-eslint/utils': 8.39.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.34.0(jiti@2.5.1) + '@typescript-eslint/utils': 8.39.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.35.0(jiti@2.5.1) natural-orderby: 5.0.0 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-prettier@5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1))(prettier@3.6.2): + eslint-plugin-prettier@5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(prettier@3.6.2): dependencies: - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.35.0(jiti@2.5.1) prettier: 3.6.2 prettier-linter-helpers: 1.0.0 synckit: 0.11.11 optionalDependencies: '@types/eslint': 9.6.1 - eslint-config-prettier: 10.1.8(eslint@9.34.0(jiti@2.5.1)) + eslint-config-prettier: 10.1.8(eslint@9.35.0(jiti@2.5.1)) - eslint-plugin-promise@7.2.1(eslint@9.34.0(jiti@2.5.1)): + eslint-plugin-promise@7.2.1(eslint@9.35.0(jiti@2.5.1)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.5.1)) - eslint: 9.34.0(jiti@2.5.1) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.35.0(jiti@2.5.1)) + eslint: 9.35.0(jiti@2.5.1) - eslint-plugin-react-hooks@5.2.0(eslint@9.34.0(jiti@2.5.1)): + eslint-plugin-react-hooks@5.2.0(eslint@9.35.0(jiti@2.5.1)): dependencies: - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.35.0(jiti@2.5.1) - eslint-plugin-react@7.37.5(eslint@9.34.0(jiti@2.5.1)): + eslint-plugin-react@7.37.5(eslint@9.35.0(jiti@2.5.1)): dependencies: array-includes: 3.1.9 array.prototype.findlast: 1.2.5 @@ -8192,7 +8228,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.1 - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.35.0(jiti@2.5.1) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -8206,27 +8242,27 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-regexp@2.10.0(eslint@9.34.0(jiti@2.5.1)): + eslint-plugin-regexp@2.10.0(eslint@9.35.0(jiti@2.5.1)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.35.0(jiti@2.5.1)) '@eslint-community/regexpp': 4.12.1 comment-parser: 1.4.1 - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.35.0(jiti@2.5.1) jsdoc-type-pratt-parser: 4.8.0 refa: 0.12.1 regexp-ast-analysis: 0.7.1 scslre: 0.3.0 - eslint-plugin-unicorn@60.0.0(eslint@9.34.0(jiti@2.5.1)): + eslint-plugin-unicorn@60.0.0(eslint@9.35.0(jiti@2.5.1)): dependencies: '@babel/helper-validator-identifier': 7.27.1 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.35.0(jiti@2.5.1)) '@eslint/plugin-kit': 0.3.5 change-case: 5.4.4 ci-info: 4.3.0 clean-regexp: 1.0.0 core-js-compat: 3.45.0 - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.35.0(jiti@2.5.1) esquery: 1.6.0 find-up-simple: 1.0.1 globals: 16.3.0 @@ -8239,20 +8275,20 @@ snapshots: semver: 7.7.2 strip-indent: 4.0.0 - eslint-plugin-yml@1.18.0(eslint@9.34.0(jiti@2.5.1)): + eslint-plugin-yml@1.18.0(eslint@9.35.0(jiti@2.5.1)): dependencies: debug: 4.4.1(supports-color@8.1.1) escape-string-regexp: 4.0.0 - eslint: 9.34.0(jiti@2.5.1) - eslint-compat-utils: 0.6.5(eslint@9.34.0(jiti@2.5.1)) + eslint: 9.35.0(jiti@2.5.1) + eslint-compat-utils: 0.6.5(eslint@9.35.0(jiti@2.5.1)) natural-compare: 1.4.0 yaml-eslint-parser: 1.3.0 transitivePeerDependencies: - supports-color - eslint-plugin-zod@1.4.0(eslint@9.34.0(jiti@2.5.1)): + eslint-plugin-zod@1.4.0(eslint@9.35.0(jiti@2.5.1)): dependencies: - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.35.0(jiti@2.5.1) eslint-scope@5.1.1: dependencies: @@ -8264,9 +8300,9 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-utils@3.0.0(eslint@9.34.0(jiti@2.5.1)): + eslint-utils@3.0.0(eslint@9.35.0(jiti@2.5.1)): dependencies: - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.35.0(jiti@2.5.1) eslint-visitor-keys: 2.1.0 eslint-visitor-keys@2.1.0: {} @@ -8275,15 +8311,15 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.34.0(jiti@2.5.1): + eslint@9.35.0(jiti@2.5.1): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.21.0 '@eslint/config-helpers': 0.3.1 '@eslint/core': 0.15.2 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.34.0 + '@eslint/js': 9.35.0 '@eslint/plugin-kit': 0.3.5 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 @@ -8719,13 +8755,13 @@ snapshots: graphemer@1.4.0: {} - graphql-config@5.1.5(@types/node@24.3.0)(graphql@16.11.0)(typescript@5.9.2): + graphql-config@5.1.5(@types/node@24.3.1)(graphql@16.11.0)(typescript@5.9.2): dependencies: '@graphql-tools/graphql-file-loader': 8.0.22(graphql@16.11.0) '@graphql-tools/json-file-loader': 8.0.20(graphql@16.11.0) '@graphql-tools/load': 8.1.2(graphql@16.11.0) '@graphql-tools/merge': 9.1.1(graphql@16.11.0) - '@graphql-tools/url-loader': 8.0.33(@types/node@24.3.0)(graphql@16.11.0) + '@graphql-tools/url-loader': 8.0.33(@types/node@24.3.1)(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) cosmiconfig: 8.3.6(typescript@5.9.2) graphql: 16.11.0 @@ -9003,10 +9039,10 @@ snapshots: dependencies: is-extglob: 2.1.1 - is-immutable-type@5.0.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2): + is-immutable-type@5.0.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/type-utils': 8.39.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.34.0(jiti@2.5.1) + '@typescript-eslint/type-utils': 8.39.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.35.0(jiti@2.5.1) ts-api-utils: 2.1.0(typescript@5.9.2) ts-declaration-location: 1.0.7(typescript@5.9.2) typescript: 5.9.2 @@ -9139,7 +9175,7 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.28.4 '@babel/parser': 7.28.3 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 @@ -9200,6 +9236,8 @@ snapshots: jsdoc-type-pratt-parser@4.8.0: {} + jsdoc-type-pratt-parser@5.1.1: {} + jsdom@6.5.1: dependencies: acorn: 2.7.0 @@ -9468,9 +9506,9 @@ snapshots: merge2@1.4.1: {} - meros@1.3.1(@types/node@24.3.0): + meros@1.3.1(@types/node@24.3.1): optionalDependencies: - '@types/node': 24.3.0 + '@types/node': 24.3.1 micro-spelling-correcter@1.1.1: {} @@ -10756,13 +10794,13 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2): + typescript-eslint@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.42.0(@typescript-eslint/parser@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/parser': 8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/eslint-plugin': 8.42.0(@typescript-eslint/parser@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/parser': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/typescript-estree': 8.42.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.34.0(jiti@2.5.1) + '@typescript-eslint/utils': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.35.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color From 9fe05e0568fa322977b3f5b09566a99903457e79 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Mon, 8 Sep 2025 20:01:15 +0800 Subject: [PATCH 052/189] feat: export function for building configs (#1469) --- .README/README.md | 67 ++++- README.md | 84 +++++- package.json | 10 +- pnpm-lock.yaml | 253 ++---------------- src/bin/generateRule.js | 2 +- src/index.js | 188 ++++++++----- test/index.js | 125 +++++++++ .../{eslint.config.mjs => eslint.config.js} | 0 test/rules/index.js | 11 +- 9 files changed, 417 insertions(+), 323 deletions(-) create mode 100644 test/index.js rename test/rules/data/{eslint.config.mjs => eslint.config.js} (100%) diff --git a/.README/README.md b/.README/README.md index c934f8ea4..1ebbccfd0 100644 --- a/.README/README.md +++ b/.README/README.md @@ -27,7 +27,69 @@ npm install --save-dev eslint-plugin-jsdoc ## Configuration -### Flat config +### Flat config (procedural) + +This is the currently recommended approach. + +```js +import jsdoc from 'eslint-plugin-jsdoc'; + +export default [ + ...jsdoc({ + config: 'flat/recommended', + }) +]; +``` + +Or with settings supplied: + +```js +import jsdoc from 'eslint-plugin-jsdoc'; + +export default [ + ...jsdoc({ + config: 'flat/recommended', + // Uncomment this if you wish your `settings` to overwrite the config's own settings; + // otherwise, the default behavior is to merge recursively + // mergeSettings: false, + settings: { + // Do not add a `jsdoc` child object here as you would for regular ESLint `settings` + structuredTags: { + see: { + name: 'namepath-referencing', + required: [ + 'name', + ], + }, + }, + /* + // Since the recommended config has been chosen, the above settings will + // be merged by default with the following (which are tags that are + // being allowed and requiring a type): + structuredTags: { + next: { + required: [ + 'type', + ], + }, + throws: { + required: [ + 'type', + ], + }, + yields: { + required: [ + 'type', + ], + }, + }, + */ + } + }) +]; +``` + +### Flat config (declarative) ```js import jsdoc from 'eslint-plugin-jsdoc'; @@ -38,6 +100,7 @@ const config = [ // other configuration objects... { files: ['**/*.js'], + // `plugins` here is not necessary if including the above config plugins: { jsdoc, }, @@ -74,7 +137,7 @@ These each only enable mostly or only rules from the recommended starting rules: - `jsdoc.configs['flat/logical-typescript-error']`: for TypeScript files, with reports set to error - `jsdoc.configs['flat/logical-typescript-flavor']`: for files using JavaScript syntax and JSDoc types, with reports set to warn - `jsdoc.configs['flat/logical-typescript-flavor-error']`: for files using JavaScript syntax and JSDoc types, with reports set to error -- **Requirements**: rules that enforce tags exist +- **Requirements**: rules that enforce tags exist or have or don't have types - `jsdoc.configs['flat/requirements-typescript']`: for TypeScript files, with reports set to warn - `jsdoc.configs['flat/requirements-typescript-error']`: for TypeScript files, with reports set to error - `jsdoc.configs['flat/requirements-typescript-flavor']`: for files using JavaScript syntax and JSDoc types, with reports set to warn diff --git a/README.md b/README.md index a97f41f5f..f12abbf60 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,8 @@ JSDoc linting rules for ESLint. * [eslint-plugin-jsdoc](#user-content-eslint-plugin-jsdoc) * [Installation](#user-content-eslint-plugin-jsdoc-installation) * [Configuration](#user-content-eslint-plugin-jsdoc-configuration) - * [Flat config](#user-content-eslint-plugin-jsdoc-configuration-flat-config) + * [Flat config (procedural)](#user-content-eslint-plugin-jsdoc-configuration-flat-config-procedural) + * [Flat config (declarative)](#user-content-eslint-plugin-jsdoc-configuration-flat-config-declarative) * [`eslintrc`](#user-content-eslint-plugin-jsdoc-configuration-eslintrc) * [Options](#user-content-eslint-plugin-jsdoc-options) * [Settings](#user-content-eslint-plugin-jsdoc-settings) @@ -43,9 +44,73 @@ npm install --save-dev eslint-plugin-jsdoc ## Configuration - - -### Flat config + + +### Flat config (procedural) + +This is the currently recommended approach. + +```js +import jsdoc from 'eslint-plugin-jsdoc'; + +export default [ + ...jsdoc({ + config: 'flat/recommended', + }) +]; +``` + +Or with settings supplied: + +```js +import jsdoc from 'eslint-plugin-jsdoc'; + +export default [ + ...jsdoc({ + config: 'flat/recommended', + // Uncomment this if you wish your `settings` to overwrite the config's own settings; + // otherwise, the default behavior is to merge recursively + // mergeSettings: false, + settings: { + // Do not add a `jsdoc` child object here as you would for regular ESLint `settings` + structuredTags: { + see: { + name: 'namepath-referencing', + required: [ + 'name', + ], + }, + }, + /* + // Since the recommended config has been chosen, the above settings will + // be merged by default with the following (which are tags that are + // being allowed and requiring a type): + structuredTags: { + next: { + required: [ + 'type', + ], + }, + throws: { + required: [ + 'type', + ], + }, + yields: { + required: [ + 'type', + ], + }, + }, + */ + } + }) +]; +``` + + + +### Flat config (declarative) ```js import jsdoc from 'eslint-plugin-jsdoc'; @@ -56,6 +121,7 @@ const config = [ // other configuration objects... { files: ['**/*.js'], + // `plugins` here is not necessary if including the above config plugins: { jsdoc, }, @@ -77,8 +143,8 @@ The general starting rulesets you can extend from in flat config are: - `jsdoc.configs['flat/recommended-typescript-flavor']`: A similar recommended starting list, adjusted for projects using JavaScript syntax (source files that are still `.js`) but using TypeScript flavor within JSDoc (i.e., the default "typescript" `mode` in `eslint-plugin-jsdoc`) - `jsdoc.configs['flat/recommended-typescript-flavor-error']`: The same, reporting with failing errors instead of mere warnings - - + + #### Granular Flat Configs There also exist several more granular, standalone TypeScript rulesets you can extend from. @@ -94,7 +160,7 @@ These each only enable mostly or only rules from the recommended starting rules: - `jsdoc.configs['flat/logical-typescript-error']`: for TypeScript files, with reports set to error - `jsdoc.configs['flat/logical-typescript-flavor']`: for files using JavaScript syntax and JSDoc types, with reports set to warn - `jsdoc.configs['flat/logical-typescript-flavor-error']`: for files using JavaScript syntax and JSDoc types, with reports set to error -- **Requirements**: rules that enforce tags exist +- **Requirements**: rules that enforce tags exist or have or don't have types - `jsdoc.configs['flat/requirements-typescript']`: for TypeScript files, with reports set to warn - `jsdoc.configs['flat/requirements-typescript-error']`: for TypeScript files, with reports set to error - `jsdoc.configs['flat/requirements-typescript-flavor']`: for files using JavaScript syntax and JSDoc types, with reports set to warn @@ -117,8 +183,8 @@ export default [ ]; ``` - - + + ##### Why certain rules were excluded from the granular configs A few rules were left out of the granular configs. Here is why: diff --git a/package.json b/package.json index a394a2068..80d250b9a 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "escape-string-regexp": "^4.0.0", "espree": "^10.4.0", "esquery": "^1.6.0", + "object-deep-merge": "^1.0.5", "parse-imports-exports": "^0.2.4", "semver": "^7.7.2", "spdx-expression-parse": "^4.0.0" @@ -21,7 +22,6 @@ "@babel/cli": "^7.28.3", "@babel/core": "^7.28.4", "@babel/eslint-parser": "^7.28.4", - "@babel/node": "^7.28.0", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-transform-flow-strip-types": "^7.27.1", "@babel/preset-env": "^7.28.3", @@ -37,7 +37,6 @@ "@types/esquery": "^1.5.4", "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", - "@types/lodash.defaultsdeep": "^4.6.9", "@types/mocha": "^10.0.10", "@types/node": "^24.3.1", "@types/semver": "^7.7.1", @@ -59,7 +58,6 @@ "jsdoc-type-pratt-parser": "^5.1.1", "json-schema": "^0.4.0", "lint-staged": "^16.1.6", - "lodash.defaultsdeep": "^4.6.1", "mocha": "^11.7.2", "open-editor": "^5.1.0", "replace": "^1.2.2", @@ -140,9 +138,9 @@ "tsc": "tsc", "tsc-build": "tsc -p tsconfig-prod.json", "build": "rimraf ./dist && NODE_ENV=production babel ./src --out-file-extension .cjs --out-dir ./dist --copy-files --source-maps --ignore ./src/bin/*.js --no-copy-ignored && replace 'require\\(\"\\.(.*?)\\.[^.]*?\"\\)' 'require(\".$1.cjs\")' 'dist' -r --include=\"*.cjs\" && pnpm tsc-build", - "check-docs": "babel-node ./src/bin/generateDocs.js --check", - "create-docs": "pnpm run create-options && babel-node ./src/bin/generateDocs.js", - "create-rule": "babel-node ./src/bin/generateRule.js", + "check-docs": "node ./src/bin/generateDocs.js --check", + "create-docs": "pnpm run create-options && node ./src/bin/generateDocs.js", + "create-rule": "node ./src/bin/generateRule.js", "create-options": "node ./src/bin/generateOptions.js", "install-offline": "pnpm install --prefer-offline --no-audit", "lint": "eslint", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1ed2981b7..b3fdbcd49 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,6 +29,9 @@ importers: esquery: specifier: ^1.6.0 version: 1.6.0 + object-deep-merge: + specifier: ^1.0.5 + version: 1.0.5 parse-imports-exports: specifier: ^0.2.4 version: 0.2.4 @@ -48,9 +51,6 @@ importers: '@babel/eslint-parser': specifier: ^7.28.4 version: 7.28.4(@babel/core@7.28.4)(eslint@9.35.0(jiti@2.5.1)) - '@babel/node': - specifier: ^7.28.0 - version: 7.28.0(@babel/core@7.28.4) '@babel/plugin-syntax-class-properties': specifier: ^7.12.13 version: 7.12.13(@babel/core@7.28.4) @@ -96,9 +96,6 @@ importers: '@types/json-schema': specifier: ^7.0.15 version: 7.0.15 - '@types/lodash.defaultsdeep': - specifier: ^4.6.9 - version: 4.6.9 '@types/mocha': specifier: ^10.0.10 version: 10.0.10 @@ -162,9 +159,6 @@ importers: lint-staged: specifier: ^16.1.6 version: 16.1.6 - lodash.defaultsdeep: - specifier: ^4.6.1 - version: 4.6.1 mocha: specifier: ^11.7.2 version: 11.7.2 @@ -306,13 +300,6 @@ packages: resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} engines: {node: '>=6.9.0'} - '@babel/node@7.28.0': - resolution: {integrity: sha512-6u1Mmn3SIMUH8uwTq543L062X3JDgms9HPf06o/pIGdDjeD/zNQ+dfZPQD27sCyvtP0ZOlJtwnl2RIdPe9bHeQ==} - engines: {node: '>=6.9.0'} - hasBin: true - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/parser@7.28.3': resolution: {integrity: sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==} engines: {node: '>=6.0.0'} @@ -711,12 +698,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - '@babel/register@7.28.3': - resolution: {integrity: sha512-CieDOtd8u208eI49bYl4z1J22ySFw87IGwE+IswFEExH7e3rLgKb0WNQeumnacQ1+VoDJLYI5QFA3AJZuyZQfA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/template@7.27.2': resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} @@ -1224,12 +1205,6 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/lodash.defaultsdeep@4.6.9': - resolution: {integrity: sha512-pLtCFK0YkHfGtGLYLNMTbFB5/G5+RsmQCIbbHH8GOAXjv+gDkVilY98kILfe8JH2Kev0OCReYxp1AjxEjP8ixA==} - - '@types/lodash@4.17.20': - resolution: {integrity: sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==} - '@types/mocha@10.0.10': resolution: {integrity: sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==} @@ -1648,10 +1623,6 @@ packages: resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} engines: {node: '>= 0.4'} - array.prototype.reduce@1.0.8: - resolution: {integrity: sha512-DwuEqgXFBwbmZSRqt3BpQigWNUoqw9Ml2dTWdF3B2zQlQX4OeUE0zyuzX0fX0IbTvjdkZbcBTU3idgpO78qkTw==} - engines: {node: '>= 0.4'} - array.prototype.tosorted@1.1.4: resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} engines: {node: '>= 0.4'} @@ -1774,9 +1745,6 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - builtin-modules@5.0.0: resolution: {integrity: sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==} engines: {node: '>=18.20'} @@ -1915,10 +1883,6 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} - clone-deep@4.0.1: - resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} - engines: {node: '>=6'} - clone-regexp@3.0.0: resolution: {integrity: sha512-ujdnoq2Kxb8s3ItNBtnYeXdm07FcU0u8ARAT1lQ2YdMwQC+cdiXX8KoqMVuglztILivceTtp4ivqGSmEmhBUJw==} engines: {node: '>=12'} @@ -1955,9 +1919,6 @@ packages: resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} engines: {node: '>= 12.0.0'} - commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} @@ -2001,9 +1962,6 @@ packages: core-js-compat@3.45.0: resolution: {integrity: sha512-gRoVMBawZg0OnxaVv3zpqLLxaHmsubEGyTnqdpI/CEBvX4JadI1dMSHxagThprYRtSVbuQxvi6iUatdPxohHpA==} - core-js@3.45.0: - resolution: {integrity: sha512-c2KZL9lP4DjkN3hk/an4pWn5b5ZefhRJnAc42n6LJ19kSnbeRbdQZE5dSeE2LBol1OwJD3X1BQvFTAsa8ReeDA==} - core-util-is@1.0.2: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} @@ -2254,9 +2212,6 @@ packages: resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} engines: {node: '>= 0.4'} - es-array-method-boxes-properly@1.0.0: - resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} - es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -2726,10 +2681,6 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - find-cache-dir@2.1.0: - resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} - engines: {node: '>=6'} - find-up-simple@1.0.1: resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} engines: {node: '>=18'} @@ -2738,10 +2689,6 @@ packages: resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} engines: {node: '>=4'} - find-up@3.0.0: - resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} - engines: {node: '>=6'} - find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -3053,10 +3000,6 @@ packages: highlight.js@10.7.3: resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} - homedir-polyfill@1.0.3: - resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} - engines: {node: '>=0.10.0'} - hook-std@3.0.0: resolution: {integrity: sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3306,10 +3249,6 @@ packages: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} - is-plain-object@2.0.4: - resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} - engines: {node: '>=0.10.0'} - is-proto-prop@2.0.0: resolution: {integrity: sha512-jl3NbQ/fGLv5Jhan4uX+Ge9ohnemqyblWVVCpAvtTQzNFvV2xhJq+esnkIbYQ9F1nITXoLfDDQLp7LBw/zzncg==} @@ -3389,10 +3328,6 @@ packages: resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} engines: {node: '>=16'} - isobject@3.0.1: - resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} - engines: {node: '>=0.10.0'} - isomorphic-ws@5.0.0: resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} peerDependencies: @@ -3527,10 +3462,6 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - language-subtag-registry@0.3.23: resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} @@ -3578,10 +3509,6 @@ packages: resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} engines: {node: '>=4'} - locate-path@3.0.0: - resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} - engines: {node: '>=6'} - locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -3599,9 +3526,6 @@ packages: lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - lodash.defaultsdeep@4.6.1: - resolution: {integrity: sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==} - lodash.escaperegexp@4.1.2: resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==} @@ -3862,9 +3786,6 @@ packages: resolution: {integrity: sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==} engines: {node: '>=18'} - node-environment-flags@1.0.6: - resolution: {integrity: sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==} - node-fetch@3.3.2: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3994,6 +3915,9 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} + object-deep-merge@1.0.5: + resolution: {integrity: sha512-3DioFgOzetbxbeUq8pB2NunXo8V0n4EvqsWM/cJoI6IA9zghd7cl/2pBOuWRf4dlvA+fcg5ugFMZaN2/RuoaGg==} + object-inspect@1.13.4: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} @@ -4014,10 +3938,6 @@ packages: resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} engines: {node: '>= 0.4'} - object.getownpropertydescriptors@2.1.8: - resolution: {integrity: sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==} - engines: {node: '>= 0.8'} - object.values@1.2.1: resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} @@ -4081,10 +4001,6 @@ packages: resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} engines: {node: '>=4'} - p-locate@3.0.0: - resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} - engines: {node: '>=6'} - p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -4139,10 +4055,6 @@ packages: resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} engines: {node: '>=18'} - parse-passwd@1.0.0: - resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} - engines: {node: '>=0.10.0'} - parse-statements@1.0.11: resolution: {integrity: sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==} @@ -4224,18 +4136,10 @@ packages: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} - pirates@4.0.7: - resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} - engines: {node: '>= 6'} - pkg-conf@2.1.0: resolution: {integrity: sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==} engines: {node: '>=4'} - pkg-dir@3.0.0: - resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} - engines: {node: '>=6'} - pkg-dir@5.0.0: resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} engines: {node: '>=10'} @@ -4368,9 +4272,6 @@ packages: regenerate@1.4.2: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - regexp-ast-analysis@0.7.1: resolution: {integrity: sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -4553,10 +4454,6 @@ packages: resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} engines: {node: '>= 0.4'} - shallow-clone@3.0.1: - resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} - engines: {node: '>=8'} - shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -4628,9 +4525,6 @@ packages: resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} @@ -4920,6 +4814,10 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} + type-fest@4.2.0: + resolution: {integrity: sha512-5zknd7Dss75pMSED270A1RQS3KloqRJA9XbXLe0eCxyw7xXFb3rd+9B0UQ/0E+LQT6lnrLviEolYORlRWamn4w==} + engines: {node: '>=16'} + type-fest@4.41.0: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} @@ -5061,10 +4959,6 @@ packages: resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} engines: {node: '>=10.12.0'} - v8flags@3.2.0: - resolution: {integrity: sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==} - engines: {node: '>= 0.10'} - validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} @@ -5404,16 +5298,6 @@ snapshots: '@babel/template': 7.27.2 '@babel/types': 7.28.4 - '@babel/node@7.28.0(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/register': 7.28.3(@babel/core@7.28.4) - commander: 6.2.1 - core-js: 3.45.0 - node-environment-flags: 1.0.6 - regenerator-runtime: 0.14.1 - v8flags: 3.2.0 - '@babel/parser@7.28.3': dependencies: '@babel/types': 7.28.2 @@ -5909,15 +5793,6 @@ snapshots: '@babel/types': 7.28.2 esutils: 2.0.3 - '@babel/register@7.28.3(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - clone-deep: 4.0.1 - find-cache-dir: 2.1.0 - make-dir: 2.1.0 - pirates: 4.0.7 - source-map-support: 0.5.21 - '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 @@ -6648,12 +6523,6 @@ snapshots: '@types/json-schema@7.0.15': {} - '@types/lodash.defaultsdeep@4.6.9': - dependencies: - '@types/lodash': 4.17.20 - - '@types/lodash@4.17.20': {} - '@types/mocha@10.0.10': {} '@types/ms@2.1.0': {} @@ -7127,17 +6996,6 @@ snapshots: es-abstract: 1.24.0 es-shim-unscopables: 1.1.0 - array.prototype.reduce@1.0.8: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-array-method-boxes-properly: 1.0.0 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - is-string: 1.1.1 - array.prototype.tosorted@1.1.4: dependencies: call-bind: 1.0.8 @@ -7269,8 +7127,6 @@ snapshots: node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.25.2) - buffer-from@1.1.2: {} - builtin-modules@5.0.0: {} bundle-name@4.1.0: @@ -7432,12 +7288,6 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - clone-deep@4.0.1: - dependencies: - is-plain-object: 2.0.4 - kind-of: 6.0.3 - shallow-clone: 3.0.1 - clone-regexp@3.0.0: dependencies: is-regexp: 3.1.0 @@ -7466,8 +7316,6 @@ snapshots: comment-parser@1.4.1: {} - commondir@1.0.1: {} - compare-func@2.0.0: dependencies: array-ify: 1.0.0 @@ -7516,8 +7364,6 @@ snapshots: dependencies: browserslist: 4.25.2 - core-js@3.45.0: {} - core-util-is@1.0.2: {} core-util-is@1.0.3: {} @@ -7801,8 +7647,6 @@ snapshots: unbox-primitive: 1.1.0 which-typed-array: 1.1.19 - es-array-method-boxes-properly@1.0.0: {} - es-define-property@1.0.1: {} es-errors@1.3.0: {} @@ -8478,22 +8322,12 @@ snapshots: dependencies: to-regex-range: 5.0.1 - find-cache-dir@2.1.0: - dependencies: - commondir: 1.0.1 - make-dir: 2.1.0 - pkg-dir: 3.0.0 - find-up-simple@1.0.1: {} find-up@2.1.0: dependencies: locate-path: 2.0.0 - find-up@3.0.0: - dependencies: - locate-path: 3.0.0 - find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -8836,10 +8670,6 @@ snapshots: highlight.js@10.7.3: {} - homedir-polyfill@1.0.3: - dependencies: - parse-passwd: 1.0.0 - hook-std@3.0.0: {} hosted-git-info@7.0.2: @@ -9082,10 +8912,6 @@ snapshots: is-plain-obj@4.1.0: {} - is-plain-object@2.0.4: - dependencies: - isobject: 3.0.1 - is-proto-prop@2.0.0: dependencies: lowercase-keys: 1.0.1 @@ -9155,8 +8981,6 @@ snapshots: isexe@3.1.1: optional: true - isobject@3.0.1: {} - isomorphic-ws@5.0.0(ws@8.18.3): dependencies: ws: 8.18.3 @@ -9308,8 +9132,6 @@ snapshots: dependencies: json-buffer: 3.0.1 - kind-of@6.0.3: {} - language-subtag-registry@0.3.23: {} language-tags@1.0.9: @@ -9379,11 +9201,6 @@ snapshots: p-locate: 2.0.0 path-exists: 3.0.0 - locate-path@3.0.0: - dependencies: - p-locate: 3.0.0 - path-exists: 3.0.0 - locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -9398,8 +9215,6 @@ snapshots: lodash.debounce@4.0.8: {} - lodash.defaultsdeep@4.6.1: {} - lodash.escaperegexp@4.1.2: {} lodash.get@4.4.2: {} @@ -9662,11 +9477,6 @@ snapshots: emojilib: 2.4.0 skin-tone: 2.0.0 - node-environment-flags@1.0.6: - dependencies: - object.getownpropertydescriptors: 2.1.8 - semver: 5.7.2 - node-fetch@3.3.2: dependencies: data-uri-to-buffer: 4.0.1 @@ -9730,6 +9540,10 @@ snapshots: object-assign@4.1.1: {} + object-deep-merge@1.0.5: + dependencies: + type-fest: 4.2.0 + object-inspect@1.13.4: {} object-keys@1.1.1: {} @@ -9757,16 +9571,6 @@ snapshots: es-abstract: 1.24.0 es-object-atoms: 1.1.1 - object.getownpropertydescriptors@2.1.8: - dependencies: - array.prototype.reduce: 1.0.8 - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-object-atoms: 1.1.1 - gopd: 1.2.0 - safe-array-concat: 1.1.3 - object.values@1.2.1: dependencies: call-bind: 1.0.8 @@ -9848,10 +9652,6 @@ snapshots: dependencies: p-limit: 1.3.0 - p-locate@3.0.0: - dependencies: - p-limit: 2.3.0 - p-locate@4.1.0: dependencies: p-limit: 2.3.0 @@ -9903,8 +9703,6 @@ snapshots: parse-ms@4.0.0: {} - parse-passwd@1.0.0: {} - parse-statements@1.0.11: {} parse5-htmlparser2-tree-adapter@6.0.1: @@ -9957,17 +9755,11 @@ snapshots: pify@4.0.1: {} - pirates@4.0.7: {} - pkg-conf@2.1.0: dependencies: find-up: 2.1.0 load-json-file: 4.0.0 - pkg-dir@3.0.0: - dependencies: - find-up: 3.0.0 - pkg-dir@5.0.0: dependencies: find-up: 5.0.0 @@ -10115,8 +9907,6 @@ snapshots: regenerate@1.4.2: {} - regenerator-runtime@0.14.1: {} - regexp-ast-analysis@0.7.1: dependencies: '@eslint-community/regexpp': 4.12.1 @@ -10348,10 +10138,6 @@ snapshots: es-errors: 1.3.0 es-object-atoms: 1.1.1 - shallow-clone@3.0.1: - dependencies: - kind-of: 6.0.3 - shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -10434,11 +10220,6 @@ snapshots: smart-buffer: 4.2.0 optional: true - source-map-support@0.5.21: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - source-map@0.6.1: {} source-map@0.7.6: @@ -10759,6 +10540,8 @@ snapshots: type-fest@2.19.0: {} + type-fest@4.2.0: {} + type-fest@4.41.0: {} typed-array-buffer@1.0.3: @@ -10919,10 +10702,6 @@ snapshots: '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 - v8flags@3.2.0: - dependencies: - homedir-polyfill: 1.0.3 - validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 diff --git a/src/bin/generateRule.js b/src/bin/generateRule.js index 7d78be2a0..d01e2c7e3 100644 --- a/src/bin/generateRule.js +++ b/src/bin/generateRule.js @@ -263,7 +263,7 @@ export default iterateJsdoc(({ await replaceInOrder({ checkName: 'index rules', newLine: `${' '.repeat(4)}'${ruleName}': ${camelCasedRuleName},`, - oldRegex: /\n\s{4}'(?[^']*)': [^,]*,/gv, + oldRegex: /\n\s{2}'(?[^']*)': [^,]*,/gv, path: './src/index.js', }); diff --git a/src/index.js b/src/index.js index 569ceb9c5..c27fb6376 100644 --- a/src/index.js +++ b/src/index.js @@ -58,80 +58,140 @@ import sortTags from './rules/sortTags.js'; import tagLines from './rules/tagLines.js'; import textEscaping from './rules/textEscaping.js'; import validTypes from './rules/validTypes.js'; +import { + merge, +} from 'object-deep-merge'; /* eslint-disable jsdoc/valid-types -- Bug */ /** * @typedef {"recommended" | "stylistic" | "contents" | "logical" | "requirements"} ConfigGroups * @typedef {"" | "-typescript" | "-typescript-flavor"} ConfigVariants * @typedef {"" | "-error"} ErrorLevelVariants - * @type {import('eslint').ESLint.Plugin & { + * @type {(( + * cfg?: { + * mergeSettings?: boolean, + * config?: `flat/${ConfigGroups}${ConfigVariants}${ErrorLevelVariants}`, + * settings?: Partial + * } + * ) => import('eslint').Linter.Config) & import('eslint').ESLint.Plugin & { * configs: Record<`flat/${ConfigGroups}${ConfigVariants}${ErrorLevelVariants}`, * import('eslint').Linter.Config> * }} */ -const index = { - /* eslint-enable jsdoc/valid-types -- Bug */ - // @ts-expect-error Ok - configs: {}, - rules: { - 'check-access': checkAccess, - 'check-alignment': checkAlignment, - 'check-examples': checkExamples, - 'check-indentation': checkIndentation, - 'check-line-alignment': checkLineAlignment, - 'check-param-names': checkParamNames, - 'check-property-names': checkPropertyNames, - 'check-syntax': checkSyntax, - 'check-tag-names': checkTagNames, - 'check-template-names': checkTemplateNames, - 'check-types': checkTypes, - 'check-values': checkValues, - 'convert-to-jsdoc-comments': convertToJsdocComments, - 'empty-tags': emptyTags, - 'implements-on-classes': implementsOnClasses, - 'imports-as-dependencies': importsAsDependencies, - 'informative-docs': informativeDocs, - 'lines-before-block': linesBeforeBlock, - 'match-description': matchDescription, - 'match-name': matchName, - 'multiline-blocks': multilineBlocks, - 'no-bad-blocks': noBadBlocks, - 'no-blank-block-descriptions': noBlankBlockDescriptions, - 'no-blank-blocks': noBlankBlocks, - 'no-defaults': noDefaults, - 'no-missing-syntax': noMissingSyntax, - 'no-multi-asterisks': noMultiAsterisks, - 'no-restricted-syntax': noRestrictedSyntax, - 'no-types': noTypes, - 'no-undefined-types': noUndefinedTypes, - 'require-asterisk-prefix': requireAsteriskPrefix, - 'require-description': requireDescription, - 'require-description-complete-sentence': requireDescriptionCompleteSentence, - 'require-example': requireExample, - 'require-file-overview': requireFileOverview, - 'require-hyphen-before-param-description': requireHyphenBeforeParamDescription, - 'require-jsdoc': requireJsdoc, - 'require-param': requireParam, - 'require-param-description': requireParamDescription, - 'require-param-name': requireParamName, - 'require-param-type': requireParamType, - 'require-property': requireProperty, - 'require-property-description': requirePropertyDescription, - 'require-property-name': requirePropertyName, - 'require-property-type': requirePropertyType, - 'require-returns': requireReturns, - 'require-returns-check': requireReturnsCheck, - 'require-returns-description': requireReturnsDescription, - 'require-returns-type': requireReturnsType, - 'require-template': requireTemplate, - 'require-throws': requireThrows, - 'require-yields': requireYields, - 'require-yields-check': requireYieldsCheck, - 'sort-tags': sortTags, - 'tag-lines': tagLines, - 'text-escaping': textEscaping, - 'valid-types': validTypes, - }, +// @ts-expect-error Ok +const index = function (cfg) { + /** @type {import('eslint').Linter.Config} */ + let outputConfig = { + plugins: { + jsdoc: index, + }, + }; + if ( + cfg?.config + ) { + // @ts-expect-error Security check + if (cfg.config === '__proto__') { + throw new TypeError('Disallowed config value'); + } + + outputConfig = index.configs[cfg.config]; + } + + outputConfig.settings = { + jsdoc: cfg?.mergeSettings === false ? + cfg.settings : + merge( + {}, + cfg?.settings ?? {}, + cfg?.config?.includes('recommended') ? + { + // We may need to drop these for "typescript" (non-"flavor") configs, + // if support is later added: https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html + structuredTags: { + next: { + required: [ + 'type', + ], + }, + throws: { + required: [ + 'type', + ], + }, + yields: { + required: [ + 'type', + ], + }, + }, + } : + {}, + ), + }; + + return outputConfig; +}; +/* eslint-enable jsdoc/valid-types -- Bug */ + +index.configs = {}; +index.rules = { + 'check-access': checkAccess, + 'check-alignment': checkAlignment, + 'check-examples': checkExamples, + 'check-indentation': checkIndentation, + 'check-line-alignment': checkLineAlignment, + 'check-param-names': checkParamNames, + 'check-property-names': checkPropertyNames, + 'check-syntax': checkSyntax, + 'check-tag-names': checkTagNames, + 'check-template-names': checkTemplateNames, + 'check-types': checkTypes, + 'check-values': checkValues, + 'convert-to-jsdoc-comments': convertToJsdocComments, + 'empty-tags': emptyTags, + 'implements-on-classes': implementsOnClasses, + 'imports-as-dependencies': importsAsDependencies, + 'informative-docs': informativeDocs, + 'lines-before-block': linesBeforeBlock, + 'match-description': matchDescription, + 'match-name': matchName, + 'multiline-blocks': multilineBlocks, + 'no-bad-blocks': noBadBlocks, + 'no-blank-block-descriptions': noBlankBlockDescriptions, + 'no-blank-blocks': noBlankBlocks, + 'no-defaults': noDefaults, + 'no-missing-syntax': noMissingSyntax, + 'no-multi-asterisks': noMultiAsterisks, + 'no-restricted-syntax': noRestrictedSyntax, + 'no-types': noTypes, + 'no-undefined-types': noUndefinedTypes, + 'require-asterisk-prefix': requireAsteriskPrefix, + 'require-description': requireDescription, + 'require-description-complete-sentence': requireDescriptionCompleteSentence, + 'require-example': requireExample, + 'require-file-overview': requireFileOverview, + 'require-hyphen-before-param-description': requireHyphenBeforeParamDescription, + 'require-jsdoc': requireJsdoc, + 'require-param': requireParam, + 'require-param-description': requireParamDescription, + 'require-param-name': requireParamName, + 'require-param-type': requireParamType, + 'require-property': requireProperty, + 'require-property-description': requirePropertyDescription, + 'require-property-name': requirePropertyName, + 'require-property-type': requirePropertyType, + 'require-returns': requireReturns, + 'require-returns-check': requireReturnsCheck, + 'require-returns-description': requireReturnsDescription, + 'require-returns-type': requireReturnsType, + 'require-template': requireTemplate, + 'require-throws': requireThrows, + 'require-yields': requireYields, + 'require-yields-check': requireYieldsCheck, + 'sort-tags': sortTags, + 'tag-lines': tagLines, + 'text-escaping': textEscaping, + 'valid-types': validTypes, }; /** diff --git a/test/index.js b/test/index.js new file mode 100644 index 000000000..e9ede2fbb --- /dev/null +++ b/test/index.js @@ -0,0 +1,125 @@ +import jsdoc from '../src/index.js'; +import { + expect, +} from 'chai'; + +describe('jsdoc()', () => { + it('Builds simple plugins config', () => { + const cfg = jsdoc(); + expect(cfg.plugins?.jsdoc).to.equal(jsdoc); + expect(cfg.settings).to.deep.equal({ + jsdoc: {}, + }); + }); + + it('Throws with bad config', () => { + expect(() => { + jsdoc({ + // @ts-expect-error Deliberately bad argument + config: '__proto__', + }); + }).to.throw(TypeError); + }); + + it('Builds supplied config', () => { + const cfg = jsdoc({ + config: 'flat/recommended', + }); + + expect(cfg.settings).to.deep.equal({ + jsdoc: { + structuredTags: { + next: { + required: [ + 'type', + ], + }, + throws: { + required: [ + 'type', + ], + }, + yields: { + required: [ + 'type', + ], + }, + }, + }, + }); + }); + + it('Builds supplied config with merged settings', () => { + const cfg = jsdoc({ + config: 'flat/recommended', + settings: { + structuredTags: { + see: { + name: 'namepath-referencing', + required: [ + 'name', + ], + }, + }, + }, + }); + + expect(cfg.settings).to.deep.equal({ + jsdoc: { + structuredTags: { + next: { + required: [ + 'type', + ], + }, + see: { + name: 'namepath-referencing', + required: [ + 'name', + ], + }, + throws: { + required: [ + 'type', + ], + }, + yields: { + required: [ + 'type', + ], + }, + }, + }, + }); + }); + + it('Builds supplied config with non-merged settings', () => { + const cfg = jsdoc({ + config: 'flat/recommended', + mergeSettings: false, + settings: { + structuredTags: { + see: { + name: 'namepath-referencing', + required: [ + 'name', + ], + }, + }, + }, + }); + + expect(cfg.settings).to.deep.equal({ + jsdoc: { + structuredTags: { + see: { + name: 'namepath-referencing', + required: [ + 'name', + ], + }, + }, + }, + }); + }); +}); diff --git a/test/rules/data/eslint.config.mjs b/test/rules/data/eslint.config.js similarity index 100% rename from test/rules/data/eslint.config.mjs rename to test/rules/data/eslint.config.js diff --git a/test/rules/index.js b/test/rules/index.js index da65f5995..e46add23c 100644 --- a/test/rules/index.js +++ b/test/rules/index.js @@ -7,10 +7,12 @@ import { import { readFileSync, } from 'fs'; -import defaultsDeep from 'lodash.defaultsdeep'; import { parseArgs, } from 'node:util'; +import { + merge, +} from 'object-deep-merge'; import { join, } from 'path'; @@ -70,8 +72,9 @@ const main = async () => { config.rules[ruleName] ); + /** @type {{ecmaVersion: import('eslint').Linter.EcmaVersion}} */ const languageOptions = { - ecmaVersion: 6, + ecmaVersion: 'latest', }; // Catch syntax errors @@ -108,7 +111,7 @@ const main = async () => { let count = 0; assertions.invalid = assertions.invalid.map((assertion) => { Reflect.deleteProperty(assertion, 'ignoreReadme'); - assertion.languageOptions = defaultsDeep(assertion.languageOptions, languageOptions); + assertion.languageOptions = merge(assertion.languageOptions ?? {}, languageOptions); for (const error of /** @type {import('eslint').RuleTester.TestCaseError[]} */ ( assertion.errors || [] )) { @@ -148,7 +151,7 @@ const main = async () => { throw new Error(`Valid assertions for rule ${ruleName} should not have an \`output\` property.`); } - assertion.languageOptions = defaultsDeep(assertion.languageOptions, languageOptions); + assertion.languageOptions = merge(assertion.languageOptions ?? {}, languageOptions); return assertion; }); From 427273e8c5169ff78056d9b5bf9b40e23d151d96 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Mon, 8 Sep 2025 20:58:22 +0800 Subject: [PATCH 053/189] feat: revert "feat: export function for building configs (#1469)"; fixes #1474 (#1476) This reverts commit 9fe05e0568fa322977b3f5b09566a99903457e79. --- .README/README.md | 67 +---- README.md | 84 +----- package.json | 10 +- pnpm-lock.yaml | 253 ++++++++++++++++-- src/bin/generateRule.js | 2 +- src/index.js | 188 +++++-------- test/index.js | 125 --------- .../{eslint.config.js => eslint.config.mjs} | 0 test/rules/index.js | 11 +- 9 files changed, 323 insertions(+), 417 deletions(-) delete mode 100644 test/index.js rename test/rules/data/{eslint.config.js => eslint.config.mjs} (100%) diff --git a/.README/README.md b/.README/README.md index 1ebbccfd0..c934f8ea4 100644 --- a/.README/README.md +++ b/.README/README.md @@ -27,69 +27,7 @@ npm install --save-dev eslint-plugin-jsdoc ## Configuration -### Flat config (procedural) - -This is the currently recommended approach. - -```js -import jsdoc from 'eslint-plugin-jsdoc'; - -export default [ - ...jsdoc({ - config: 'flat/recommended', - }) -]; -``` - -Or with settings supplied: - -```js -import jsdoc from 'eslint-plugin-jsdoc'; - -export default [ - ...jsdoc({ - config: 'flat/recommended', - // Uncomment this if you wish your `settings` to overwrite the config's own settings; - // otherwise, the default behavior is to merge recursively - // mergeSettings: false, - settings: { - // Do not add a `jsdoc` child object here as you would for regular ESLint `settings` - structuredTags: { - see: { - name: 'namepath-referencing', - required: [ - 'name', - ], - }, - }, - /* - // Since the recommended config has been chosen, the above settings will - // be merged by default with the following (which are tags that are - // being allowed and requiring a type): - structuredTags: { - next: { - required: [ - 'type', - ], - }, - throws: { - required: [ - 'type', - ], - }, - yields: { - required: [ - 'type', - ], - }, - }, - */ - } - }) -]; -``` - -### Flat config (declarative) +### Flat config ```js import jsdoc from 'eslint-plugin-jsdoc'; @@ -100,7 +38,6 @@ const config = [ // other configuration objects... { files: ['**/*.js'], - // `plugins` here is not necessary if including the above config plugins: { jsdoc, }, @@ -137,7 +74,7 @@ These each only enable mostly or only rules from the recommended starting rules: - `jsdoc.configs['flat/logical-typescript-error']`: for TypeScript files, with reports set to error - `jsdoc.configs['flat/logical-typescript-flavor']`: for files using JavaScript syntax and JSDoc types, with reports set to warn - `jsdoc.configs['flat/logical-typescript-flavor-error']`: for files using JavaScript syntax and JSDoc types, with reports set to error -- **Requirements**: rules that enforce tags exist or have or don't have types +- **Requirements**: rules that enforce tags exist - `jsdoc.configs['flat/requirements-typescript']`: for TypeScript files, with reports set to warn - `jsdoc.configs['flat/requirements-typescript-error']`: for TypeScript files, with reports set to error - `jsdoc.configs['flat/requirements-typescript-flavor']`: for files using JavaScript syntax and JSDoc types, with reports set to warn diff --git a/README.md b/README.md index f12abbf60..a97f41f5f 100644 --- a/README.md +++ b/README.md @@ -12,8 +12,7 @@ JSDoc linting rules for ESLint. * [eslint-plugin-jsdoc](#user-content-eslint-plugin-jsdoc) * [Installation](#user-content-eslint-plugin-jsdoc-installation) * [Configuration](#user-content-eslint-plugin-jsdoc-configuration) - * [Flat config (procedural)](#user-content-eslint-plugin-jsdoc-configuration-flat-config-procedural) - * [Flat config (declarative)](#user-content-eslint-plugin-jsdoc-configuration-flat-config-declarative) + * [Flat config](#user-content-eslint-plugin-jsdoc-configuration-flat-config) * [`eslintrc`](#user-content-eslint-plugin-jsdoc-configuration-eslintrc) * [Options](#user-content-eslint-plugin-jsdoc-options) * [Settings](#user-content-eslint-plugin-jsdoc-settings) @@ -44,73 +43,9 @@ npm install --save-dev eslint-plugin-jsdoc ## Configuration - - -### Flat config (procedural) - -This is the currently recommended approach. - -```js -import jsdoc from 'eslint-plugin-jsdoc'; - -export default [ - ...jsdoc({ - config: 'flat/recommended', - }) -]; -``` - -Or with settings supplied: - -```js -import jsdoc from 'eslint-plugin-jsdoc'; - -export default [ - ...jsdoc({ - config: 'flat/recommended', - // Uncomment this if you wish your `settings` to overwrite the config's own settings; - // otherwise, the default behavior is to merge recursively - // mergeSettings: false, - settings: { - // Do not add a `jsdoc` child object here as you would for regular ESLint `settings` - structuredTags: { - see: { - name: 'namepath-referencing', - required: [ - 'name', - ], - }, - }, - /* - // Since the recommended config has been chosen, the above settings will - // be merged by default with the following (which are tags that are - // being allowed and requiring a type): - structuredTags: { - next: { - required: [ - 'type', - ], - }, - throws: { - required: [ - 'type', - ], - }, - yields: { - required: [ - 'type', - ], - }, - }, - */ - } - }) -]; -``` - - - -### Flat config (declarative) + + +### Flat config ```js import jsdoc from 'eslint-plugin-jsdoc'; @@ -121,7 +56,6 @@ const config = [ // other configuration objects... { files: ['**/*.js'], - // `plugins` here is not necessary if including the above config plugins: { jsdoc, }, @@ -143,8 +77,8 @@ The general starting rulesets you can extend from in flat config are: - `jsdoc.configs['flat/recommended-typescript-flavor']`: A similar recommended starting list, adjusted for projects using JavaScript syntax (source files that are still `.js`) but using TypeScript flavor within JSDoc (i.e., the default "typescript" `mode` in `eslint-plugin-jsdoc`) - `jsdoc.configs['flat/recommended-typescript-flavor-error']`: The same, reporting with failing errors instead of mere warnings - - + + #### Granular Flat Configs There also exist several more granular, standalone TypeScript rulesets you can extend from. @@ -160,7 +94,7 @@ These each only enable mostly or only rules from the recommended starting rules: - `jsdoc.configs['flat/logical-typescript-error']`: for TypeScript files, with reports set to error - `jsdoc.configs['flat/logical-typescript-flavor']`: for files using JavaScript syntax and JSDoc types, with reports set to warn - `jsdoc.configs['flat/logical-typescript-flavor-error']`: for files using JavaScript syntax and JSDoc types, with reports set to error -- **Requirements**: rules that enforce tags exist or have or don't have types +- **Requirements**: rules that enforce tags exist - `jsdoc.configs['flat/requirements-typescript']`: for TypeScript files, with reports set to warn - `jsdoc.configs['flat/requirements-typescript-error']`: for TypeScript files, with reports set to error - `jsdoc.configs['flat/requirements-typescript-flavor']`: for files using JavaScript syntax and JSDoc types, with reports set to warn @@ -183,8 +117,8 @@ export default [ ]; ``` - - + + ##### Why certain rules were excluded from the granular configs A few rules were left out of the granular configs. Here is why: diff --git a/package.json b/package.json index 80d250b9a..a394a2068 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,6 @@ "escape-string-regexp": "^4.0.0", "espree": "^10.4.0", "esquery": "^1.6.0", - "object-deep-merge": "^1.0.5", "parse-imports-exports": "^0.2.4", "semver": "^7.7.2", "spdx-expression-parse": "^4.0.0" @@ -22,6 +21,7 @@ "@babel/cli": "^7.28.3", "@babel/core": "^7.28.4", "@babel/eslint-parser": "^7.28.4", + "@babel/node": "^7.28.0", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-transform-flow-strip-types": "^7.27.1", "@babel/preset-env": "^7.28.3", @@ -37,6 +37,7 @@ "@types/esquery": "^1.5.4", "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", + "@types/lodash.defaultsdeep": "^4.6.9", "@types/mocha": "^10.0.10", "@types/node": "^24.3.1", "@types/semver": "^7.7.1", @@ -58,6 +59,7 @@ "jsdoc-type-pratt-parser": "^5.1.1", "json-schema": "^0.4.0", "lint-staged": "^16.1.6", + "lodash.defaultsdeep": "^4.6.1", "mocha": "^11.7.2", "open-editor": "^5.1.0", "replace": "^1.2.2", @@ -138,9 +140,9 @@ "tsc": "tsc", "tsc-build": "tsc -p tsconfig-prod.json", "build": "rimraf ./dist && NODE_ENV=production babel ./src --out-file-extension .cjs --out-dir ./dist --copy-files --source-maps --ignore ./src/bin/*.js --no-copy-ignored && replace 'require\\(\"\\.(.*?)\\.[^.]*?\"\\)' 'require(\".$1.cjs\")' 'dist' -r --include=\"*.cjs\" && pnpm tsc-build", - "check-docs": "node ./src/bin/generateDocs.js --check", - "create-docs": "pnpm run create-options && node ./src/bin/generateDocs.js", - "create-rule": "node ./src/bin/generateRule.js", + "check-docs": "babel-node ./src/bin/generateDocs.js --check", + "create-docs": "pnpm run create-options && babel-node ./src/bin/generateDocs.js", + "create-rule": "babel-node ./src/bin/generateRule.js", "create-options": "node ./src/bin/generateOptions.js", "install-offline": "pnpm install --prefer-offline --no-audit", "lint": "eslint", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b3fdbcd49..1ed2981b7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,9 +29,6 @@ importers: esquery: specifier: ^1.6.0 version: 1.6.0 - object-deep-merge: - specifier: ^1.0.5 - version: 1.0.5 parse-imports-exports: specifier: ^0.2.4 version: 0.2.4 @@ -51,6 +48,9 @@ importers: '@babel/eslint-parser': specifier: ^7.28.4 version: 7.28.4(@babel/core@7.28.4)(eslint@9.35.0(jiti@2.5.1)) + '@babel/node': + specifier: ^7.28.0 + version: 7.28.0(@babel/core@7.28.4) '@babel/plugin-syntax-class-properties': specifier: ^7.12.13 version: 7.12.13(@babel/core@7.28.4) @@ -96,6 +96,9 @@ importers: '@types/json-schema': specifier: ^7.0.15 version: 7.0.15 + '@types/lodash.defaultsdeep': + specifier: ^4.6.9 + version: 4.6.9 '@types/mocha': specifier: ^10.0.10 version: 10.0.10 @@ -159,6 +162,9 @@ importers: lint-staged: specifier: ^16.1.6 version: 16.1.6 + lodash.defaultsdeep: + specifier: ^4.6.1 + version: 4.6.1 mocha: specifier: ^11.7.2 version: 11.7.2 @@ -300,6 +306,13 @@ packages: resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} engines: {node: '>=6.9.0'} + '@babel/node@7.28.0': + resolution: {integrity: sha512-6u1Mmn3SIMUH8uwTq543L062X3JDgms9HPf06o/pIGdDjeD/zNQ+dfZPQD27sCyvtP0ZOlJtwnl2RIdPe9bHeQ==} + engines: {node: '>=6.9.0'} + hasBin: true + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/parser@7.28.3': resolution: {integrity: sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==} engines: {node: '>=6.0.0'} @@ -698,6 +711,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + '@babel/register@7.28.3': + resolution: {integrity: sha512-CieDOtd8u208eI49bYl4z1J22ySFw87IGwE+IswFEExH7e3rLgKb0WNQeumnacQ1+VoDJLYI5QFA3AJZuyZQfA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/template@7.27.2': resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} @@ -1205,6 +1224,12 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/lodash.defaultsdeep@4.6.9': + resolution: {integrity: sha512-pLtCFK0YkHfGtGLYLNMTbFB5/G5+RsmQCIbbHH8GOAXjv+gDkVilY98kILfe8JH2Kev0OCReYxp1AjxEjP8ixA==} + + '@types/lodash@4.17.20': + resolution: {integrity: sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==} + '@types/mocha@10.0.10': resolution: {integrity: sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==} @@ -1623,6 +1648,10 @@ packages: resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} engines: {node: '>= 0.4'} + array.prototype.reduce@1.0.8: + resolution: {integrity: sha512-DwuEqgXFBwbmZSRqt3BpQigWNUoqw9Ml2dTWdF3B2zQlQX4OeUE0zyuzX0fX0IbTvjdkZbcBTU3idgpO78qkTw==} + engines: {node: '>= 0.4'} + array.prototype.tosorted@1.1.4: resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} engines: {node: '>= 0.4'} @@ -1745,6 +1774,9 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + builtin-modules@5.0.0: resolution: {integrity: sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==} engines: {node: '>=18.20'} @@ -1883,6 +1915,10 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} + clone-deep@4.0.1: + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} + clone-regexp@3.0.0: resolution: {integrity: sha512-ujdnoq2Kxb8s3ItNBtnYeXdm07FcU0u8ARAT1lQ2YdMwQC+cdiXX8KoqMVuglztILivceTtp4ivqGSmEmhBUJw==} engines: {node: '>=12'} @@ -1919,6 +1955,9 @@ packages: resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} engines: {node: '>= 12.0.0'} + commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} @@ -1962,6 +2001,9 @@ packages: core-js-compat@3.45.0: resolution: {integrity: sha512-gRoVMBawZg0OnxaVv3zpqLLxaHmsubEGyTnqdpI/CEBvX4JadI1dMSHxagThprYRtSVbuQxvi6iUatdPxohHpA==} + core-js@3.45.0: + resolution: {integrity: sha512-c2KZL9lP4DjkN3hk/an4pWn5b5ZefhRJnAc42n6LJ19kSnbeRbdQZE5dSeE2LBol1OwJD3X1BQvFTAsa8ReeDA==} + core-util-is@1.0.2: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} @@ -2212,6 +2254,9 @@ packages: resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} engines: {node: '>= 0.4'} + es-array-method-boxes-properly@1.0.0: + resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} + es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -2681,6 +2726,10 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + find-cache-dir@2.1.0: + resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} + engines: {node: '>=6'} + find-up-simple@1.0.1: resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} engines: {node: '>=18'} @@ -2689,6 +2738,10 @@ packages: resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} engines: {node: '>=4'} + find-up@3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} + find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -3000,6 +3053,10 @@ packages: highlight.js@10.7.3: resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + homedir-polyfill@1.0.3: + resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} + engines: {node: '>=0.10.0'} + hook-std@3.0.0: resolution: {integrity: sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3249,6 +3306,10 @@ packages: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} + is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + is-proto-prop@2.0.0: resolution: {integrity: sha512-jl3NbQ/fGLv5Jhan4uX+Ge9ohnemqyblWVVCpAvtTQzNFvV2xhJq+esnkIbYQ9F1nITXoLfDDQLp7LBw/zzncg==} @@ -3328,6 +3389,10 @@ packages: resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} engines: {node: '>=16'} + isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + isomorphic-ws@5.0.0: resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} peerDependencies: @@ -3462,6 +3527,10 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + language-subtag-registry@0.3.23: resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} @@ -3509,6 +3578,10 @@ packages: resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} engines: {node: '>=4'} + locate-path@3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} + locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -3526,6 +3599,9 @@ packages: lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + lodash.defaultsdeep@4.6.1: + resolution: {integrity: sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==} + lodash.escaperegexp@4.1.2: resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==} @@ -3786,6 +3862,9 @@ packages: resolution: {integrity: sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==} engines: {node: '>=18'} + node-environment-flags@1.0.6: + resolution: {integrity: sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==} + node-fetch@3.3.2: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3915,9 +3994,6 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - object-deep-merge@1.0.5: - resolution: {integrity: sha512-3DioFgOzetbxbeUq8pB2NunXo8V0n4EvqsWM/cJoI6IA9zghd7cl/2pBOuWRf4dlvA+fcg5ugFMZaN2/RuoaGg==} - object-inspect@1.13.4: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} @@ -3938,6 +4014,10 @@ packages: resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} engines: {node: '>= 0.4'} + object.getownpropertydescriptors@2.1.8: + resolution: {integrity: sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==} + engines: {node: '>= 0.8'} + object.values@1.2.1: resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} @@ -4001,6 +4081,10 @@ packages: resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} engines: {node: '>=4'} + p-locate@3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} + p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -4055,6 +4139,10 @@ packages: resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} engines: {node: '>=18'} + parse-passwd@1.0.0: + resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} + engines: {node: '>=0.10.0'} + parse-statements@1.0.11: resolution: {integrity: sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==} @@ -4136,10 +4224,18 @@ packages: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} + pirates@4.0.7: + resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} + engines: {node: '>= 6'} + pkg-conf@2.1.0: resolution: {integrity: sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==} engines: {node: '>=4'} + pkg-dir@3.0.0: + resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} + engines: {node: '>=6'} + pkg-dir@5.0.0: resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} engines: {node: '>=10'} @@ -4272,6 +4368,9 @@ packages: regenerate@1.4.2: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + regexp-ast-analysis@0.7.1: resolution: {integrity: sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -4454,6 +4553,10 @@ packages: resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} engines: {node: '>= 0.4'} + shallow-clone@3.0.1: + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -4525,6 +4628,9 @@ packages: resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} @@ -4814,10 +4920,6 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} - type-fest@4.2.0: - resolution: {integrity: sha512-5zknd7Dss75pMSED270A1RQS3KloqRJA9XbXLe0eCxyw7xXFb3rd+9B0UQ/0E+LQT6lnrLviEolYORlRWamn4w==} - engines: {node: '>=16'} - type-fest@4.41.0: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} @@ -4959,6 +5061,10 @@ packages: resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} engines: {node: '>=10.12.0'} + v8flags@3.2.0: + resolution: {integrity: sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==} + engines: {node: '>= 0.10'} + validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} @@ -5298,6 +5404,16 @@ snapshots: '@babel/template': 7.27.2 '@babel/types': 7.28.4 + '@babel/node@7.28.0(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/register': 7.28.3(@babel/core@7.28.4) + commander: 6.2.1 + core-js: 3.45.0 + node-environment-flags: 1.0.6 + regenerator-runtime: 0.14.1 + v8flags: 3.2.0 + '@babel/parser@7.28.3': dependencies: '@babel/types': 7.28.2 @@ -5793,6 +5909,15 @@ snapshots: '@babel/types': 7.28.2 esutils: 2.0.3 + '@babel/register@7.28.3(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + clone-deep: 4.0.1 + find-cache-dir: 2.1.0 + make-dir: 2.1.0 + pirates: 4.0.7 + source-map-support: 0.5.21 + '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 @@ -6523,6 +6648,12 @@ snapshots: '@types/json-schema@7.0.15': {} + '@types/lodash.defaultsdeep@4.6.9': + dependencies: + '@types/lodash': 4.17.20 + + '@types/lodash@4.17.20': {} + '@types/mocha@10.0.10': {} '@types/ms@2.1.0': {} @@ -6996,6 +7127,17 @@ snapshots: es-abstract: 1.24.0 es-shim-unscopables: 1.1.0 + array.prototype.reduce@1.0.8: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-array-method-boxes-properly: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + is-string: 1.1.1 + array.prototype.tosorted@1.1.4: dependencies: call-bind: 1.0.8 @@ -7127,6 +7269,8 @@ snapshots: node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.25.2) + buffer-from@1.1.2: {} + builtin-modules@5.0.0: {} bundle-name@4.1.0: @@ -7288,6 +7432,12 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + clone-deep@4.0.1: + dependencies: + is-plain-object: 2.0.4 + kind-of: 6.0.3 + shallow-clone: 3.0.1 + clone-regexp@3.0.0: dependencies: is-regexp: 3.1.0 @@ -7316,6 +7466,8 @@ snapshots: comment-parser@1.4.1: {} + commondir@1.0.1: {} + compare-func@2.0.0: dependencies: array-ify: 1.0.0 @@ -7364,6 +7516,8 @@ snapshots: dependencies: browserslist: 4.25.2 + core-js@3.45.0: {} + core-util-is@1.0.2: {} core-util-is@1.0.3: {} @@ -7647,6 +7801,8 @@ snapshots: unbox-primitive: 1.1.0 which-typed-array: 1.1.19 + es-array-method-boxes-properly@1.0.0: {} + es-define-property@1.0.1: {} es-errors@1.3.0: {} @@ -8322,12 +8478,22 @@ snapshots: dependencies: to-regex-range: 5.0.1 + find-cache-dir@2.1.0: + dependencies: + commondir: 1.0.1 + make-dir: 2.1.0 + pkg-dir: 3.0.0 + find-up-simple@1.0.1: {} find-up@2.1.0: dependencies: locate-path: 2.0.0 + find-up@3.0.0: + dependencies: + locate-path: 3.0.0 + find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -8670,6 +8836,10 @@ snapshots: highlight.js@10.7.3: {} + homedir-polyfill@1.0.3: + dependencies: + parse-passwd: 1.0.0 + hook-std@3.0.0: {} hosted-git-info@7.0.2: @@ -8912,6 +9082,10 @@ snapshots: is-plain-obj@4.1.0: {} + is-plain-object@2.0.4: + dependencies: + isobject: 3.0.1 + is-proto-prop@2.0.0: dependencies: lowercase-keys: 1.0.1 @@ -8981,6 +9155,8 @@ snapshots: isexe@3.1.1: optional: true + isobject@3.0.1: {} + isomorphic-ws@5.0.0(ws@8.18.3): dependencies: ws: 8.18.3 @@ -9132,6 +9308,8 @@ snapshots: dependencies: json-buffer: 3.0.1 + kind-of@6.0.3: {} + language-subtag-registry@0.3.23: {} language-tags@1.0.9: @@ -9201,6 +9379,11 @@ snapshots: p-locate: 2.0.0 path-exists: 3.0.0 + locate-path@3.0.0: + dependencies: + p-locate: 3.0.0 + path-exists: 3.0.0 + locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -9215,6 +9398,8 @@ snapshots: lodash.debounce@4.0.8: {} + lodash.defaultsdeep@4.6.1: {} + lodash.escaperegexp@4.1.2: {} lodash.get@4.4.2: {} @@ -9477,6 +9662,11 @@ snapshots: emojilib: 2.4.0 skin-tone: 2.0.0 + node-environment-flags@1.0.6: + dependencies: + object.getownpropertydescriptors: 2.1.8 + semver: 5.7.2 + node-fetch@3.3.2: dependencies: data-uri-to-buffer: 4.0.1 @@ -9540,10 +9730,6 @@ snapshots: object-assign@4.1.1: {} - object-deep-merge@1.0.5: - dependencies: - type-fest: 4.2.0 - object-inspect@1.13.4: {} object-keys@1.1.1: {} @@ -9571,6 +9757,16 @@ snapshots: es-abstract: 1.24.0 es-object-atoms: 1.1.1 + object.getownpropertydescriptors@2.1.8: + dependencies: + array.prototype.reduce: 1.0.8 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-object-atoms: 1.1.1 + gopd: 1.2.0 + safe-array-concat: 1.1.3 + object.values@1.2.1: dependencies: call-bind: 1.0.8 @@ -9652,6 +9848,10 @@ snapshots: dependencies: p-limit: 1.3.0 + p-locate@3.0.0: + dependencies: + p-limit: 2.3.0 + p-locate@4.1.0: dependencies: p-limit: 2.3.0 @@ -9703,6 +9903,8 @@ snapshots: parse-ms@4.0.0: {} + parse-passwd@1.0.0: {} + parse-statements@1.0.11: {} parse5-htmlparser2-tree-adapter@6.0.1: @@ -9755,11 +9957,17 @@ snapshots: pify@4.0.1: {} + pirates@4.0.7: {} + pkg-conf@2.1.0: dependencies: find-up: 2.1.0 load-json-file: 4.0.0 + pkg-dir@3.0.0: + dependencies: + find-up: 3.0.0 + pkg-dir@5.0.0: dependencies: find-up: 5.0.0 @@ -9907,6 +10115,8 @@ snapshots: regenerate@1.4.2: {} + regenerator-runtime@0.14.1: {} + regexp-ast-analysis@0.7.1: dependencies: '@eslint-community/regexpp': 4.12.1 @@ -10138,6 +10348,10 @@ snapshots: es-errors: 1.3.0 es-object-atoms: 1.1.1 + shallow-clone@3.0.1: + dependencies: + kind-of: 6.0.3 + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -10220,6 +10434,11 @@ snapshots: smart-buffer: 4.2.0 optional: true + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + source-map@0.6.1: {} source-map@0.7.6: @@ -10540,8 +10759,6 @@ snapshots: type-fest@2.19.0: {} - type-fest@4.2.0: {} - type-fest@4.41.0: {} typed-array-buffer@1.0.3: @@ -10702,6 +10919,10 @@ snapshots: '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 + v8flags@3.2.0: + dependencies: + homedir-polyfill: 1.0.3 + validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 diff --git a/src/bin/generateRule.js b/src/bin/generateRule.js index d01e2c7e3..7d78be2a0 100644 --- a/src/bin/generateRule.js +++ b/src/bin/generateRule.js @@ -263,7 +263,7 @@ export default iterateJsdoc(({ await replaceInOrder({ checkName: 'index rules', newLine: `${' '.repeat(4)}'${ruleName}': ${camelCasedRuleName},`, - oldRegex: /\n\s{2}'(?[^']*)': [^,]*,/gv, + oldRegex: /\n\s{4}'(?[^']*)': [^,]*,/gv, path: './src/index.js', }); diff --git a/src/index.js b/src/index.js index c27fb6376..569ceb9c5 100644 --- a/src/index.js +++ b/src/index.js @@ -58,140 +58,80 @@ import sortTags from './rules/sortTags.js'; import tagLines from './rules/tagLines.js'; import textEscaping from './rules/textEscaping.js'; import validTypes from './rules/validTypes.js'; -import { - merge, -} from 'object-deep-merge'; /* eslint-disable jsdoc/valid-types -- Bug */ /** * @typedef {"recommended" | "stylistic" | "contents" | "logical" | "requirements"} ConfigGroups * @typedef {"" | "-typescript" | "-typescript-flavor"} ConfigVariants * @typedef {"" | "-error"} ErrorLevelVariants - * @type {(( - * cfg?: { - * mergeSettings?: boolean, - * config?: `flat/${ConfigGroups}${ConfigVariants}${ErrorLevelVariants}`, - * settings?: Partial - * } - * ) => import('eslint').Linter.Config) & import('eslint').ESLint.Plugin & { + * @type {import('eslint').ESLint.Plugin & { * configs: Record<`flat/${ConfigGroups}${ConfigVariants}${ErrorLevelVariants}`, * import('eslint').Linter.Config> * }} */ -// @ts-expect-error Ok -const index = function (cfg) { - /** @type {import('eslint').Linter.Config} */ - let outputConfig = { - plugins: { - jsdoc: index, - }, - }; - if ( - cfg?.config - ) { - // @ts-expect-error Security check - if (cfg.config === '__proto__') { - throw new TypeError('Disallowed config value'); - } - - outputConfig = index.configs[cfg.config]; - } - - outputConfig.settings = { - jsdoc: cfg?.mergeSettings === false ? - cfg.settings : - merge( - {}, - cfg?.settings ?? {}, - cfg?.config?.includes('recommended') ? - { - // We may need to drop these for "typescript" (non-"flavor") configs, - // if support is later added: https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html - structuredTags: { - next: { - required: [ - 'type', - ], - }, - throws: { - required: [ - 'type', - ], - }, - yields: { - required: [ - 'type', - ], - }, - }, - } : - {}, - ), - }; - - return outputConfig; -}; -/* eslint-enable jsdoc/valid-types -- Bug */ - -index.configs = {}; -index.rules = { - 'check-access': checkAccess, - 'check-alignment': checkAlignment, - 'check-examples': checkExamples, - 'check-indentation': checkIndentation, - 'check-line-alignment': checkLineAlignment, - 'check-param-names': checkParamNames, - 'check-property-names': checkPropertyNames, - 'check-syntax': checkSyntax, - 'check-tag-names': checkTagNames, - 'check-template-names': checkTemplateNames, - 'check-types': checkTypes, - 'check-values': checkValues, - 'convert-to-jsdoc-comments': convertToJsdocComments, - 'empty-tags': emptyTags, - 'implements-on-classes': implementsOnClasses, - 'imports-as-dependencies': importsAsDependencies, - 'informative-docs': informativeDocs, - 'lines-before-block': linesBeforeBlock, - 'match-description': matchDescription, - 'match-name': matchName, - 'multiline-blocks': multilineBlocks, - 'no-bad-blocks': noBadBlocks, - 'no-blank-block-descriptions': noBlankBlockDescriptions, - 'no-blank-blocks': noBlankBlocks, - 'no-defaults': noDefaults, - 'no-missing-syntax': noMissingSyntax, - 'no-multi-asterisks': noMultiAsterisks, - 'no-restricted-syntax': noRestrictedSyntax, - 'no-types': noTypes, - 'no-undefined-types': noUndefinedTypes, - 'require-asterisk-prefix': requireAsteriskPrefix, - 'require-description': requireDescription, - 'require-description-complete-sentence': requireDescriptionCompleteSentence, - 'require-example': requireExample, - 'require-file-overview': requireFileOverview, - 'require-hyphen-before-param-description': requireHyphenBeforeParamDescription, - 'require-jsdoc': requireJsdoc, - 'require-param': requireParam, - 'require-param-description': requireParamDescription, - 'require-param-name': requireParamName, - 'require-param-type': requireParamType, - 'require-property': requireProperty, - 'require-property-description': requirePropertyDescription, - 'require-property-name': requirePropertyName, - 'require-property-type': requirePropertyType, - 'require-returns': requireReturns, - 'require-returns-check': requireReturnsCheck, - 'require-returns-description': requireReturnsDescription, - 'require-returns-type': requireReturnsType, - 'require-template': requireTemplate, - 'require-throws': requireThrows, - 'require-yields': requireYields, - 'require-yields-check': requireYieldsCheck, - 'sort-tags': sortTags, - 'tag-lines': tagLines, - 'text-escaping': textEscaping, - 'valid-types': validTypes, +const index = { + /* eslint-enable jsdoc/valid-types -- Bug */ + // @ts-expect-error Ok + configs: {}, + rules: { + 'check-access': checkAccess, + 'check-alignment': checkAlignment, + 'check-examples': checkExamples, + 'check-indentation': checkIndentation, + 'check-line-alignment': checkLineAlignment, + 'check-param-names': checkParamNames, + 'check-property-names': checkPropertyNames, + 'check-syntax': checkSyntax, + 'check-tag-names': checkTagNames, + 'check-template-names': checkTemplateNames, + 'check-types': checkTypes, + 'check-values': checkValues, + 'convert-to-jsdoc-comments': convertToJsdocComments, + 'empty-tags': emptyTags, + 'implements-on-classes': implementsOnClasses, + 'imports-as-dependencies': importsAsDependencies, + 'informative-docs': informativeDocs, + 'lines-before-block': linesBeforeBlock, + 'match-description': matchDescription, + 'match-name': matchName, + 'multiline-blocks': multilineBlocks, + 'no-bad-blocks': noBadBlocks, + 'no-blank-block-descriptions': noBlankBlockDescriptions, + 'no-blank-blocks': noBlankBlocks, + 'no-defaults': noDefaults, + 'no-missing-syntax': noMissingSyntax, + 'no-multi-asterisks': noMultiAsterisks, + 'no-restricted-syntax': noRestrictedSyntax, + 'no-types': noTypes, + 'no-undefined-types': noUndefinedTypes, + 'require-asterisk-prefix': requireAsteriskPrefix, + 'require-description': requireDescription, + 'require-description-complete-sentence': requireDescriptionCompleteSentence, + 'require-example': requireExample, + 'require-file-overview': requireFileOverview, + 'require-hyphen-before-param-description': requireHyphenBeforeParamDescription, + 'require-jsdoc': requireJsdoc, + 'require-param': requireParam, + 'require-param-description': requireParamDescription, + 'require-param-name': requireParamName, + 'require-param-type': requireParamType, + 'require-property': requireProperty, + 'require-property-description': requirePropertyDescription, + 'require-property-name': requirePropertyName, + 'require-property-type': requirePropertyType, + 'require-returns': requireReturns, + 'require-returns-check': requireReturnsCheck, + 'require-returns-description': requireReturnsDescription, + 'require-returns-type': requireReturnsType, + 'require-template': requireTemplate, + 'require-throws': requireThrows, + 'require-yields': requireYields, + 'require-yields-check': requireYieldsCheck, + 'sort-tags': sortTags, + 'tag-lines': tagLines, + 'text-escaping': textEscaping, + 'valid-types': validTypes, + }, }; /** diff --git a/test/index.js b/test/index.js deleted file mode 100644 index e9ede2fbb..000000000 --- a/test/index.js +++ /dev/null @@ -1,125 +0,0 @@ -import jsdoc from '../src/index.js'; -import { - expect, -} from 'chai'; - -describe('jsdoc()', () => { - it('Builds simple plugins config', () => { - const cfg = jsdoc(); - expect(cfg.plugins?.jsdoc).to.equal(jsdoc); - expect(cfg.settings).to.deep.equal({ - jsdoc: {}, - }); - }); - - it('Throws with bad config', () => { - expect(() => { - jsdoc({ - // @ts-expect-error Deliberately bad argument - config: '__proto__', - }); - }).to.throw(TypeError); - }); - - it('Builds supplied config', () => { - const cfg = jsdoc({ - config: 'flat/recommended', - }); - - expect(cfg.settings).to.deep.equal({ - jsdoc: { - structuredTags: { - next: { - required: [ - 'type', - ], - }, - throws: { - required: [ - 'type', - ], - }, - yields: { - required: [ - 'type', - ], - }, - }, - }, - }); - }); - - it('Builds supplied config with merged settings', () => { - const cfg = jsdoc({ - config: 'flat/recommended', - settings: { - structuredTags: { - see: { - name: 'namepath-referencing', - required: [ - 'name', - ], - }, - }, - }, - }); - - expect(cfg.settings).to.deep.equal({ - jsdoc: { - structuredTags: { - next: { - required: [ - 'type', - ], - }, - see: { - name: 'namepath-referencing', - required: [ - 'name', - ], - }, - throws: { - required: [ - 'type', - ], - }, - yields: { - required: [ - 'type', - ], - }, - }, - }, - }); - }); - - it('Builds supplied config with non-merged settings', () => { - const cfg = jsdoc({ - config: 'flat/recommended', - mergeSettings: false, - settings: { - structuredTags: { - see: { - name: 'namepath-referencing', - required: [ - 'name', - ], - }, - }, - }, - }); - - expect(cfg.settings).to.deep.equal({ - jsdoc: { - structuredTags: { - see: { - name: 'namepath-referencing', - required: [ - 'name', - ], - }, - }, - }, - }); - }); -}); diff --git a/test/rules/data/eslint.config.js b/test/rules/data/eslint.config.mjs similarity index 100% rename from test/rules/data/eslint.config.js rename to test/rules/data/eslint.config.mjs diff --git a/test/rules/index.js b/test/rules/index.js index e46add23c..da65f5995 100644 --- a/test/rules/index.js +++ b/test/rules/index.js @@ -7,12 +7,10 @@ import { import { readFileSync, } from 'fs'; +import defaultsDeep from 'lodash.defaultsdeep'; import { parseArgs, } from 'node:util'; -import { - merge, -} from 'object-deep-merge'; import { join, } from 'path'; @@ -72,9 +70,8 @@ const main = async () => { config.rules[ruleName] ); - /** @type {{ecmaVersion: import('eslint').Linter.EcmaVersion}} */ const languageOptions = { - ecmaVersion: 'latest', + ecmaVersion: 6, }; // Catch syntax errors @@ -111,7 +108,7 @@ const main = async () => { let count = 0; assertions.invalid = assertions.invalid.map((assertion) => { Reflect.deleteProperty(assertion, 'ignoreReadme'); - assertion.languageOptions = merge(assertion.languageOptions ?? {}, languageOptions); + assertion.languageOptions = defaultsDeep(assertion.languageOptions, languageOptions); for (const error of /** @type {import('eslint').RuleTester.TestCaseError[]} */ ( assertion.errors || [] )) { @@ -151,7 +148,7 @@ const main = async () => { throw new Error(`Valid assertions for rule ${ruleName} should not have an \`output\` property.`); } - assertion.languageOptions = merge(assertion.languageOptions ?? {}, languageOptions); + assertion.languageOptions = defaultsDeep(assertion.languageOptions, languageOptions); return assertion; }); From 0b0a0582a5ad77284c146e01f5347b3fe541e80f Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Mon, 8 Sep 2025 21:29:36 +0800 Subject: [PATCH 054/189] feat: export named function for building configs (#1477) BREAKING CHANGE: Although not technically breaking, this is being released as such to encourage use of the named import function. import {jsdoc} from 'eslint-plugin-jsdoc'; // A named import now is encouraged export default [ ...jsdoc({config: 'flat/recommended'}); // Now invoke the function to build the config ]; --- .README/README.md | 67 ++++- README.md | 84 +++++- eslint.config.js | 8 +- package.json | 10 +- pnpm-lock.yaml | 253 ++---------------- src/bin/generateRule.js | 2 +- src/index.js | 195 +++++++++----- test/index.js | 127 +++++++++ .../{eslint.config.mjs => eslint.config.js} | 0 test/rules/index.js | 11 +- 10 files changed, 433 insertions(+), 324 deletions(-) create mode 100644 test/index.js rename test/rules/data/{eslint.config.mjs => eslint.config.js} (100%) diff --git a/.README/README.md b/.README/README.md index c934f8ea4..0d46b21bb 100644 --- a/.README/README.md +++ b/.README/README.md @@ -27,7 +27,69 @@ npm install --save-dev eslint-plugin-jsdoc ## Configuration -### Flat config +### Flat config (procedural) + +This is the currently recommended approach. + +```js +import {jsdoc} from 'eslint-plugin-jsdoc'; + +export default [ + ...jsdoc({ + config: 'flat/recommended', + }) +]; +``` + +Or with settings supplied: + +```js +import {jsdoc} from 'eslint-plugin-jsdoc'; + +export default [ + ...jsdoc({ + config: 'flat/recommended', + // Uncomment this if you wish your `settings` to overwrite the config's own settings; + // otherwise, the default behavior is to merge recursively + // mergeSettings: false, + settings: { + // Do not add a `jsdoc` child object here as you would for regular ESLint `settings` + structuredTags: { + see: { + name: 'namepath-referencing', + required: [ + 'name', + ], + }, + }, + /* + // Since the recommended config has been chosen, the above settings will + // be merged by default with the following (which are tags that are + // being allowed and requiring a type): + structuredTags: { + next: { + required: [ + 'type', + ], + }, + throws: { + required: [ + 'type', + ], + }, + yields: { + required: [ + 'type', + ], + }, + }, + */ + } + }) +]; +``` + +### Flat config (declarative) ```js import jsdoc from 'eslint-plugin-jsdoc'; @@ -38,6 +100,7 @@ const config = [ // other configuration objects... { files: ['**/*.js'], + // `plugins` here is not necessary if including the above config plugins: { jsdoc, }, @@ -74,7 +137,7 @@ These each only enable mostly or only rules from the recommended starting rules: - `jsdoc.configs['flat/logical-typescript-error']`: for TypeScript files, with reports set to error - `jsdoc.configs['flat/logical-typescript-flavor']`: for files using JavaScript syntax and JSDoc types, with reports set to warn - `jsdoc.configs['flat/logical-typescript-flavor-error']`: for files using JavaScript syntax and JSDoc types, with reports set to error -- **Requirements**: rules that enforce tags exist +- **Requirements**: rules that enforce tags exist or have or don't have types - `jsdoc.configs['flat/requirements-typescript']`: for TypeScript files, with reports set to warn - `jsdoc.configs['flat/requirements-typescript-error']`: for TypeScript files, with reports set to error - `jsdoc.configs['flat/requirements-typescript-flavor']`: for files using JavaScript syntax and JSDoc types, with reports set to warn diff --git a/README.md b/README.md index a97f41f5f..79e91f6d6 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,8 @@ JSDoc linting rules for ESLint. * [eslint-plugin-jsdoc](#user-content-eslint-plugin-jsdoc) * [Installation](#user-content-eslint-plugin-jsdoc-installation) * [Configuration](#user-content-eslint-plugin-jsdoc-configuration) - * [Flat config](#user-content-eslint-plugin-jsdoc-configuration-flat-config) + * [Flat config (procedural)](#user-content-eslint-plugin-jsdoc-configuration-flat-config-procedural) + * [Flat config (declarative)](#user-content-eslint-plugin-jsdoc-configuration-flat-config-declarative) * [`eslintrc`](#user-content-eslint-plugin-jsdoc-configuration-eslintrc) * [Options](#user-content-eslint-plugin-jsdoc-options) * [Settings](#user-content-eslint-plugin-jsdoc-settings) @@ -43,9 +44,73 @@ npm install --save-dev eslint-plugin-jsdoc ## Configuration - - -### Flat config + + +### Flat config (procedural) + +This is the currently recommended approach. + +```js +import {jsdoc} from 'eslint-plugin-jsdoc'; + +export default [ + ...jsdoc({ + config: 'flat/recommended', + }) +]; +``` + +Or with settings supplied: + +```js +import {jsdoc} from 'eslint-plugin-jsdoc'; + +export default [ + ...jsdoc({ + config: 'flat/recommended', + // Uncomment this if you wish your `settings` to overwrite the config's own settings; + // otherwise, the default behavior is to merge recursively + // mergeSettings: false, + settings: { + // Do not add a `jsdoc` child object here as you would for regular ESLint `settings` + structuredTags: { + see: { + name: 'namepath-referencing', + required: [ + 'name', + ], + }, + }, + /* + // Since the recommended config has been chosen, the above settings will + // be merged by default with the following (which are tags that are + // being allowed and requiring a type): + structuredTags: { + next: { + required: [ + 'type', + ], + }, + throws: { + required: [ + 'type', + ], + }, + yields: { + required: [ + 'type', + ], + }, + }, + */ + } + }) +]; +``` + + + +### Flat config (declarative) ```js import jsdoc from 'eslint-plugin-jsdoc'; @@ -56,6 +121,7 @@ const config = [ // other configuration objects... { files: ['**/*.js'], + // `plugins` here is not necessary if including the above config plugins: { jsdoc, }, @@ -77,8 +143,8 @@ The general starting rulesets you can extend from in flat config are: - `jsdoc.configs['flat/recommended-typescript-flavor']`: A similar recommended starting list, adjusted for projects using JavaScript syntax (source files that are still `.js`) but using TypeScript flavor within JSDoc (i.e., the default "typescript" `mode` in `eslint-plugin-jsdoc`) - `jsdoc.configs['flat/recommended-typescript-flavor-error']`: The same, reporting with failing errors instead of mere warnings - - + + #### Granular Flat Configs There also exist several more granular, standalone TypeScript rulesets you can extend from. @@ -94,7 +160,7 @@ These each only enable mostly or only rules from the recommended starting rules: - `jsdoc.configs['flat/logical-typescript-error']`: for TypeScript files, with reports set to error - `jsdoc.configs['flat/logical-typescript-flavor']`: for files using JavaScript syntax and JSDoc types, with reports set to warn - `jsdoc.configs['flat/logical-typescript-flavor-error']`: for files using JavaScript syntax and JSDoc types, with reports set to error -- **Requirements**: rules that enforce tags exist +- **Requirements**: rules that enforce tags exist or have or don't have types - `jsdoc.configs['flat/requirements-typescript']`: for TypeScript files, with reports set to warn - `jsdoc.configs['flat/requirements-typescript-error']`: for TypeScript files, with reports set to error - `jsdoc.configs['flat/requirements-typescript-flavor']`: for files using JavaScript syntax and JSDoc types, with reports set to warn @@ -117,8 +183,8 @@ export default [ ]; ``` - - + + ##### Why certain rules were excluded from the granular configs A few rules were left out of the granular configs. Here is why: diff --git a/eslint.config.js b/eslint.config.js index 55b37e3e7..293151c42 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,4 +1,6 @@ -import jsdoc from './src/index.js'; +import { + jsdoc, +} from './src/index.js'; import { recommended as canonical, } from 'eslint-config-canonical/canonical'; @@ -16,7 +18,9 @@ const common = { export default [ ...canonical, ...canonicalJsdoc, - ...jsdoc.configs['examples-and-default-expressions'], + ...jsdoc({ + config: 'examples-and-default-expressions', + }), { // Must be by itself ignores: [ diff --git a/package.json b/package.json index a394a2068..80d250b9a 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "escape-string-regexp": "^4.0.0", "espree": "^10.4.0", "esquery": "^1.6.0", + "object-deep-merge": "^1.0.5", "parse-imports-exports": "^0.2.4", "semver": "^7.7.2", "spdx-expression-parse": "^4.0.0" @@ -21,7 +22,6 @@ "@babel/cli": "^7.28.3", "@babel/core": "^7.28.4", "@babel/eslint-parser": "^7.28.4", - "@babel/node": "^7.28.0", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-transform-flow-strip-types": "^7.27.1", "@babel/preset-env": "^7.28.3", @@ -37,7 +37,6 @@ "@types/esquery": "^1.5.4", "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", - "@types/lodash.defaultsdeep": "^4.6.9", "@types/mocha": "^10.0.10", "@types/node": "^24.3.1", "@types/semver": "^7.7.1", @@ -59,7 +58,6 @@ "jsdoc-type-pratt-parser": "^5.1.1", "json-schema": "^0.4.0", "lint-staged": "^16.1.6", - "lodash.defaultsdeep": "^4.6.1", "mocha": "^11.7.2", "open-editor": "^5.1.0", "replace": "^1.2.2", @@ -140,9 +138,9 @@ "tsc": "tsc", "tsc-build": "tsc -p tsconfig-prod.json", "build": "rimraf ./dist && NODE_ENV=production babel ./src --out-file-extension .cjs --out-dir ./dist --copy-files --source-maps --ignore ./src/bin/*.js --no-copy-ignored && replace 'require\\(\"\\.(.*?)\\.[^.]*?\"\\)' 'require(\".$1.cjs\")' 'dist' -r --include=\"*.cjs\" && pnpm tsc-build", - "check-docs": "babel-node ./src/bin/generateDocs.js --check", - "create-docs": "pnpm run create-options && babel-node ./src/bin/generateDocs.js", - "create-rule": "babel-node ./src/bin/generateRule.js", + "check-docs": "node ./src/bin/generateDocs.js --check", + "create-docs": "pnpm run create-options && node ./src/bin/generateDocs.js", + "create-rule": "node ./src/bin/generateRule.js", "create-options": "node ./src/bin/generateOptions.js", "install-offline": "pnpm install --prefer-offline --no-audit", "lint": "eslint", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1ed2981b7..b3fdbcd49 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,6 +29,9 @@ importers: esquery: specifier: ^1.6.0 version: 1.6.0 + object-deep-merge: + specifier: ^1.0.5 + version: 1.0.5 parse-imports-exports: specifier: ^0.2.4 version: 0.2.4 @@ -48,9 +51,6 @@ importers: '@babel/eslint-parser': specifier: ^7.28.4 version: 7.28.4(@babel/core@7.28.4)(eslint@9.35.0(jiti@2.5.1)) - '@babel/node': - specifier: ^7.28.0 - version: 7.28.0(@babel/core@7.28.4) '@babel/plugin-syntax-class-properties': specifier: ^7.12.13 version: 7.12.13(@babel/core@7.28.4) @@ -96,9 +96,6 @@ importers: '@types/json-schema': specifier: ^7.0.15 version: 7.0.15 - '@types/lodash.defaultsdeep': - specifier: ^4.6.9 - version: 4.6.9 '@types/mocha': specifier: ^10.0.10 version: 10.0.10 @@ -162,9 +159,6 @@ importers: lint-staged: specifier: ^16.1.6 version: 16.1.6 - lodash.defaultsdeep: - specifier: ^4.6.1 - version: 4.6.1 mocha: specifier: ^11.7.2 version: 11.7.2 @@ -306,13 +300,6 @@ packages: resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} engines: {node: '>=6.9.0'} - '@babel/node@7.28.0': - resolution: {integrity: sha512-6u1Mmn3SIMUH8uwTq543L062X3JDgms9HPf06o/pIGdDjeD/zNQ+dfZPQD27sCyvtP0ZOlJtwnl2RIdPe9bHeQ==} - engines: {node: '>=6.9.0'} - hasBin: true - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/parser@7.28.3': resolution: {integrity: sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==} engines: {node: '>=6.0.0'} @@ -711,12 +698,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - '@babel/register@7.28.3': - resolution: {integrity: sha512-CieDOtd8u208eI49bYl4z1J22ySFw87IGwE+IswFEExH7e3rLgKb0WNQeumnacQ1+VoDJLYI5QFA3AJZuyZQfA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/template@7.27.2': resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} @@ -1224,12 +1205,6 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/lodash.defaultsdeep@4.6.9': - resolution: {integrity: sha512-pLtCFK0YkHfGtGLYLNMTbFB5/G5+RsmQCIbbHH8GOAXjv+gDkVilY98kILfe8JH2Kev0OCReYxp1AjxEjP8ixA==} - - '@types/lodash@4.17.20': - resolution: {integrity: sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==} - '@types/mocha@10.0.10': resolution: {integrity: sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==} @@ -1648,10 +1623,6 @@ packages: resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} engines: {node: '>= 0.4'} - array.prototype.reduce@1.0.8: - resolution: {integrity: sha512-DwuEqgXFBwbmZSRqt3BpQigWNUoqw9Ml2dTWdF3B2zQlQX4OeUE0zyuzX0fX0IbTvjdkZbcBTU3idgpO78qkTw==} - engines: {node: '>= 0.4'} - array.prototype.tosorted@1.1.4: resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} engines: {node: '>= 0.4'} @@ -1774,9 +1745,6 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - builtin-modules@5.0.0: resolution: {integrity: sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==} engines: {node: '>=18.20'} @@ -1915,10 +1883,6 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} - clone-deep@4.0.1: - resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} - engines: {node: '>=6'} - clone-regexp@3.0.0: resolution: {integrity: sha512-ujdnoq2Kxb8s3ItNBtnYeXdm07FcU0u8ARAT1lQ2YdMwQC+cdiXX8KoqMVuglztILivceTtp4ivqGSmEmhBUJw==} engines: {node: '>=12'} @@ -1955,9 +1919,6 @@ packages: resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} engines: {node: '>= 12.0.0'} - commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} @@ -2001,9 +1962,6 @@ packages: core-js-compat@3.45.0: resolution: {integrity: sha512-gRoVMBawZg0OnxaVv3zpqLLxaHmsubEGyTnqdpI/CEBvX4JadI1dMSHxagThprYRtSVbuQxvi6iUatdPxohHpA==} - core-js@3.45.0: - resolution: {integrity: sha512-c2KZL9lP4DjkN3hk/an4pWn5b5ZefhRJnAc42n6LJ19kSnbeRbdQZE5dSeE2LBol1OwJD3X1BQvFTAsa8ReeDA==} - core-util-is@1.0.2: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} @@ -2254,9 +2212,6 @@ packages: resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} engines: {node: '>= 0.4'} - es-array-method-boxes-properly@1.0.0: - resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} - es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -2726,10 +2681,6 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - find-cache-dir@2.1.0: - resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} - engines: {node: '>=6'} - find-up-simple@1.0.1: resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} engines: {node: '>=18'} @@ -2738,10 +2689,6 @@ packages: resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} engines: {node: '>=4'} - find-up@3.0.0: - resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} - engines: {node: '>=6'} - find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -3053,10 +3000,6 @@ packages: highlight.js@10.7.3: resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} - homedir-polyfill@1.0.3: - resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} - engines: {node: '>=0.10.0'} - hook-std@3.0.0: resolution: {integrity: sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3306,10 +3249,6 @@ packages: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} - is-plain-object@2.0.4: - resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} - engines: {node: '>=0.10.0'} - is-proto-prop@2.0.0: resolution: {integrity: sha512-jl3NbQ/fGLv5Jhan4uX+Ge9ohnemqyblWVVCpAvtTQzNFvV2xhJq+esnkIbYQ9F1nITXoLfDDQLp7LBw/zzncg==} @@ -3389,10 +3328,6 @@ packages: resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} engines: {node: '>=16'} - isobject@3.0.1: - resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} - engines: {node: '>=0.10.0'} - isomorphic-ws@5.0.0: resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} peerDependencies: @@ -3527,10 +3462,6 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - language-subtag-registry@0.3.23: resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} @@ -3578,10 +3509,6 @@ packages: resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} engines: {node: '>=4'} - locate-path@3.0.0: - resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} - engines: {node: '>=6'} - locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -3599,9 +3526,6 @@ packages: lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - lodash.defaultsdeep@4.6.1: - resolution: {integrity: sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==} - lodash.escaperegexp@4.1.2: resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==} @@ -3862,9 +3786,6 @@ packages: resolution: {integrity: sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==} engines: {node: '>=18'} - node-environment-flags@1.0.6: - resolution: {integrity: sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==} - node-fetch@3.3.2: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3994,6 +3915,9 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} + object-deep-merge@1.0.5: + resolution: {integrity: sha512-3DioFgOzetbxbeUq8pB2NunXo8V0n4EvqsWM/cJoI6IA9zghd7cl/2pBOuWRf4dlvA+fcg5ugFMZaN2/RuoaGg==} + object-inspect@1.13.4: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} @@ -4014,10 +3938,6 @@ packages: resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} engines: {node: '>= 0.4'} - object.getownpropertydescriptors@2.1.8: - resolution: {integrity: sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==} - engines: {node: '>= 0.8'} - object.values@1.2.1: resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} @@ -4081,10 +4001,6 @@ packages: resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} engines: {node: '>=4'} - p-locate@3.0.0: - resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} - engines: {node: '>=6'} - p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -4139,10 +4055,6 @@ packages: resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} engines: {node: '>=18'} - parse-passwd@1.0.0: - resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} - engines: {node: '>=0.10.0'} - parse-statements@1.0.11: resolution: {integrity: sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==} @@ -4224,18 +4136,10 @@ packages: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} - pirates@4.0.7: - resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} - engines: {node: '>= 6'} - pkg-conf@2.1.0: resolution: {integrity: sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==} engines: {node: '>=4'} - pkg-dir@3.0.0: - resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} - engines: {node: '>=6'} - pkg-dir@5.0.0: resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} engines: {node: '>=10'} @@ -4368,9 +4272,6 @@ packages: regenerate@1.4.2: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - regexp-ast-analysis@0.7.1: resolution: {integrity: sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -4553,10 +4454,6 @@ packages: resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} engines: {node: '>= 0.4'} - shallow-clone@3.0.1: - resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} - engines: {node: '>=8'} - shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -4628,9 +4525,6 @@ packages: resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} @@ -4920,6 +4814,10 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} + type-fest@4.2.0: + resolution: {integrity: sha512-5zknd7Dss75pMSED270A1RQS3KloqRJA9XbXLe0eCxyw7xXFb3rd+9B0UQ/0E+LQT6lnrLviEolYORlRWamn4w==} + engines: {node: '>=16'} + type-fest@4.41.0: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} @@ -5061,10 +4959,6 @@ packages: resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} engines: {node: '>=10.12.0'} - v8flags@3.2.0: - resolution: {integrity: sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==} - engines: {node: '>= 0.10'} - validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} @@ -5404,16 +5298,6 @@ snapshots: '@babel/template': 7.27.2 '@babel/types': 7.28.4 - '@babel/node@7.28.0(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/register': 7.28.3(@babel/core@7.28.4) - commander: 6.2.1 - core-js: 3.45.0 - node-environment-flags: 1.0.6 - regenerator-runtime: 0.14.1 - v8flags: 3.2.0 - '@babel/parser@7.28.3': dependencies: '@babel/types': 7.28.2 @@ -5909,15 +5793,6 @@ snapshots: '@babel/types': 7.28.2 esutils: 2.0.3 - '@babel/register@7.28.3(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - clone-deep: 4.0.1 - find-cache-dir: 2.1.0 - make-dir: 2.1.0 - pirates: 4.0.7 - source-map-support: 0.5.21 - '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 @@ -6648,12 +6523,6 @@ snapshots: '@types/json-schema@7.0.15': {} - '@types/lodash.defaultsdeep@4.6.9': - dependencies: - '@types/lodash': 4.17.20 - - '@types/lodash@4.17.20': {} - '@types/mocha@10.0.10': {} '@types/ms@2.1.0': {} @@ -7127,17 +6996,6 @@ snapshots: es-abstract: 1.24.0 es-shim-unscopables: 1.1.0 - array.prototype.reduce@1.0.8: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-array-method-boxes-properly: 1.0.0 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - is-string: 1.1.1 - array.prototype.tosorted@1.1.4: dependencies: call-bind: 1.0.8 @@ -7269,8 +7127,6 @@ snapshots: node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.25.2) - buffer-from@1.1.2: {} - builtin-modules@5.0.0: {} bundle-name@4.1.0: @@ -7432,12 +7288,6 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - clone-deep@4.0.1: - dependencies: - is-plain-object: 2.0.4 - kind-of: 6.0.3 - shallow-clone: 3.0.1 - clone-regexp@3.0.0: dependencies: is-regexp: 3.1.0 @@ -7466,8 +7316,6 @@ snapshots: comment-parser@1.4.1: {} - commondir@1.0.1: {} - compare-func@2.0.0: dependencies: array-ify: 1.0.0 @@ -7516,8 +7364,6 @@ snapshots: dependencies: browserslist: 4.25.2 - core-js@3.45.0: {} - core-util-is@1.0.2: {} core-util-is@1.0.3: {} @@ -7801,8 +7647,6 @@ snapshots: unbox-primitive: 1.1.0 which-typed-array: 1.1.19 - es-array-method-boxes-properly@1.0.0: {} - es-define-property@1.0.1: {} es-errors@1.3.0: {} @@ -8478,22 +8322,12 @@ snapshots: dependencies: to-regex-range: 5.0.1 - find-cache-dir@2.1.0: - dependencies: - commondir: 1.0.1 - make-dir: 2.1.0 - pkg-dir: 3.0.0 - find-up-simple@1.0.1: {} find-up@2.1.0: dependencies: locate-path: 2.0.0 - find-up@3.0.0: - dependencies: - locate-path: 3.0.0 - find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -8836,10 +8670,6 @@ snapshots: highlight.js@10.7.3: {} - homedir-polyfill@1.0.3: - dependencies: - parse-passwd: 1.0.0 - hook-std@3.0.0: {} hosted-git-info@7.0.2: @@ -9082,10 +8912,6 @@ snapshots: is-plain-obj@4.1.0: {} - is-plain-object@2.0.4: - dependencies: - isobject: 3.0.1 - is-proto-prop@2.0.0: dependencies: lowercase-keys: 1.0.1 @@ -9155,8 +8981,6 @@ snapshots: isexe@3.1.1: optional: true - isobject@3.0.1: {} - isomorphic-ws@5.0.0(ws@8.18.3): dependencies: ws: 8.18.3 @@ -9308,8 +9132,6 @@ snapshots: dependencies: json-buffer: 3.0.1 - kind-of@6.0.3: {} - language-subtag-registry@0.3.23: {} language-tags@1.0.9: @@ -9379,11 +9201,6 @@ snapshots: p-locate: 2.0.0 path-exists: 3.0.0 - locate-path@3.0.0: - dependencies: - p-locate: 3.0.0 - path-exists: 3.0.0 - locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -9398,8 +9215,6 @@ snapshots: lodash.debounce@4.0.8: {} - lodash.defaultsdeep@4.6.1: {} - lodash.escaperegexp@4.1.2: {} lodash.get@4.4.2: {} @@ -9662,11 +9477,6 @@ snapshots: emojilib: 2.4.0 skin-tone: 2.0.0 - node-environment-flags@1.0.6: - dependencies: - object.getownpropertydescriptors: 2.1.8 - semver: 5.7.2 - node-fetch@3.3.2: dependencies: data-uri-to-buffer: 4.0.1 @@ -9730,6 +9540,10 @@ snapshots: object-assign@4.1.1: {} + object-deep-merge@1.0.5: + dependencies: + type-fest: 4.2.0 + object-inspect@1.13.4: {} object-keys@1.1.1: {} @@ -9757,16 +9571,6 @@ snapshots: es-abstract: 1.24.0 es-object-atoms: 1.1.1 - object.getownpropertydescriptors@2.1.8: - dependencies: - array.prototype.reduce: 1.0.8 - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-object-atoms: 1.1.1 - gopd: 1.2.0 - safe-array-concat: 1.1.3 - object.values@1.2.1: dependencies: call-bind: 1.0.8 @@ -9848,10 +9652,6 @@ snapshots: dependencies: p-limit: 1.3.0 - p-locate@3.0.0: - dependencies: - p-limit: 2.3.0 - p-locate@4.1.0: dependencies: p-limit: 2.3.0 @@ -9903,8 +9703,6 @@ snapshots: parse-ms@4.0.0: {} - parse-passwd@1.0.0: {} - parse-statements@1.0.11: {} parse5-htmlparser2-tree-adapter@6.0.1: @@ -9957,17 +9755,11 @@ snapshots: pify@4.0.1: {} - pirates@4.0.7: {} - pkg-conf@2.1.0: dependencies: find-up: 2.1.0 load-json-file: 4.0.0 - pkg-dir@3.0.0: - dependencies: - find-up: 3.0.0 - pkg-dir@5.0.0: dependencies: find-up: 5.0.0 @@ -10115,8 +9907,6 @@ snapshots: regenerate@1.4.2: {} - regenerator-runtime@0.14.1: {} - regexp-ast-analysis@0.7.1: dependencies: '@eslint-community/regexpp': 4.12.1 @@ -10348,10 +10138,6 @@ snapshots: es-errors: 1.3.0 es-object-atoms: 1.1.1 - shallow-clone@3.0.1: - dependencies: - kind-of: 6.0.3 - shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -10434,11 +10220,6 @@ snapshots: smart-buffer: 4.2.0 optional: true - source-map-support@0.5.21: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - source-map@0.6.1: {} source-map@0.7.6: @@ -10759,6 +10540,8 @@ snapshots: type-fest@2.19.0: {} + type-fest@4.2.0: {} + type-fest@4.41.0: {} typed-array-buffer@1.0.3: @@ -10919,10 +10702,6 @@ snapshots: '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 - v8flags@3.2.0: - dependencies: - homedir-polyfill: 1.0.3 - validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 diff --git a/src/bin/generateRule.js b/src/bin/generateRule.js index 7d78be2a0..d01e2c7e3 100644 --- a/src/bin/generateRule.js +++ b/src/bin/generateRule.js @@ -263,7 +263,7 @@ export default iterateJsdoc(({ await replaceInOrder({ checkName: 'index rules', newLine: `${' '.repeat(4)}'${ruleName}': ${camelCasedRuleName},`, - oldRegex: /\n\s{4}'(?[^']*)': [^,]*,/gv, + oldRegex: /\n\s{2}'(?[^']*)': [^,]*,/gv, path: './src/index.js', }); diff --git a/src/index.js b/src/index.js index 569ceb9c5..ae1bb7eaa 100644 --- a/src/index.js +++ b/src/index.js @@ -58,6 +58,9 @@ import sortTags from './rules/sortTags.js'; import tagLines from './rules/tagLines.js'; import textEscaping from './rules/textEscaping.js'; import validTypes from './rules/validTypes.js'; +import { + merge, +} from 'object-deep-merge'; /* eslint-disable jsdoc/valid-types -- Bug */ /** @@ -69,69 +72,67 @@ import validTypes from './rules/validTypes.js'; * import('eslint').Linter.Config> * }} */ -const index = { - /* eslint-enable jsdoc/valid-types -- Bug */ - // @ts-expect-error Ok - configs: {}, - rules: { - 'check-access': checkAccess, - 'check-alignment': checkAlignment, - 'check-examples': checkExamples, - 'check-indentation': checkIndentation, - 'check-line-alignment': checkLineAlignment, - 'check-param-names': checkParamNames, - 'check-property-names': checkPropertyNames, - 'check-syntax': checkSyntax, - 'check-tag-names': checkTagNames, - 'check-template-names': checkTemplateNames, - 'check-types': checkTypes, - 'check-values': checkValues, - 'convert-to-jsdoc-comments': convertToJsdocComments, - 'empty-tags': emptyTags, - 'implements-on-classes': implementsOnClasses, - 'imports-as-dependencies': importsAsDependencies, - 'informative-docs': informativeDocs, - 'lines-before-block': linesBeforeBlock, - 'match-description': matchDescription, - 'match-name': matchName, - 'multiline-blocks': multilineBlocks, - 'no-bad-blocks': noBadBlocks, - 'no-blank-block-descriptions': noBlankBlockDescriptions, - 'no-blank-blocks': noBlankBlocks, - 'no-defaults': noDefaults, - 'no-missing-syntax': noMissingSyntax, - 'no-multi-asterisks': noMultiAsterisks, - 'no-restricted-syntax': noRestrictedSyntax, - 'no-types': noTypes, - 'no-undefined-types': noUndefinedTypes, - 'require-asterisk-prefix': requireAsteriskPrefix, - 'require-description': requireDescription, - 'require-description-complete-sentence': requireDescriptionCompleteSentence, - 'require-example': requireExample, - 'require-file-overview': requireFileOverview, - 'require-hyphen-before-param-description': requireHyphenBeforeParamDescription, - 'require-jsdoc': requireJsdoc, - 'require-param': requireParam, - 'require-param-description': requireParamDescription, - 'require-param-name': requireParamName, - 'require-param-type': requireParamType, - 'require-property': requireProperty, - 'require-property-description': requirePropertyDescription, - 'require-property-name': requirePropertyName, - 'require-property-type': requirePropertyType, - 'require-returns': requireReturns, - 'require-returns-check': requireReturnsCheck, - 'require-returns-description': requireReturnsDescription, - 'require-returns-type': requireReturnsType, - 'require-template': requireTemplate, - 'require-throws': requireThrows, - 'require-yields': requireYields, - 'require-yields-check': requireYieldsCheck, - 'sort-tags': sortTags, - 'tag-lines': tagLines, - 'text-escaping': textEscaping, - 'valid-types': validTypes, - }, +const index = {}; +/* eslint-enable jsdoc/valid-types -- Bug */ +index.configs = {}; +index.rules = { + 'check-access': checkAccess, + 'check-alignment': checkAlignment, + 'check-examples': checkExamples, + 'check-indentation': checkIndentation, + 'check-line-alignment': checkLineAlignment, + 'check-param-names': checkParamNames, + 'check-property-names': checkPropertyNames, + 'check-syntax': checkSyntax, + 'check-tag-names': checkTagNames, + 'check-template-names': checkTemplateNames, + 'check-types': checkTypes, + 'check-values': checkValues, + 'convert-to-jsdoc-comments': convertToJsdocComments, + 'empty-tags': emptyTags, + 'implements-on-classes': implementsOnClasses, + 'imports-as-dependencies': importsAsDependencies, + 'informative-docs': informativeDocs, + 'lines-before-block': linesBeforeBlock, + 'match-description': matchDescription, + 'match-name': matchName, + 'multiline-blocks': multilineBlocks, + 'no-bad-blocks': noBadBlocks, + 'no-blank-block-descriptions': noBlankBlockDescriptions, + 'no-blank-blocks': noBlankBlocks, + 'no-defaults': noDefaults, + 'no-missing-syntax': noMissingSyntax, + 'no-multi-asterisks': noMultiAsterisks, + 'no-restricted-syntax': noRestrictedSyntax, + 'no-types': noTypes, + 'no-undefined-types': noUndefinedTypes, + 'require-asterisk-prefix': requireAsteriskPrefix, + 'require-description': requireDescription, + 'require-description-complete-sentence': requireDescriptionCompleteSentence, + 'require-example': requireExample, + 'require-file-overview': requireFileOverview, + 'require-hyphen-before-param-description': requireHyphenBeforeParamDescription, + 'require-jsdoc': requireJsdoc, + 'require-param': requireParam, + 'require-param-description': requireParamDescription, + 'require-param-name': requireParamName, + 'require-param-type': requireParamType, + 'require-property': requireProperty, + 'require-property-description': requirePropertyDescription, + 'require-property-name': requirePropertyName, + 'require-property-type': requirePropertyType, + 'require-returns': requireReturns, + 'require-returns-check': requireReturnsCheck, + 'require-returns-description': requireReturnsDescription, + 'require-returns-type': requireReturnsType, + 'require-template': requireTemplate, + 'require-throws': requireThrows, + 'require-yields': requireYields, + 'require-yields-check': requireYieldsCheck, + 'sort-tags': sortTags, + 'tag-lines': tagLines, + 'text-escaping': textEscaping, + 'valid-types': validTypes, }; /** @@ -527,4 +528,72 @@ index.configs['examples-and-default-expressions'] = /** @type {import('eslint'). }), ]); +/* eslint-disable jsdoc/valid-types -- Bug */ +/** + * @type {(( + * cfg?: { + * mergeSettings?: boolean, + * config?: `flat/${ConfigGroups}${ConfigVariants}${ErrorLevelVariants}`, + * settings?: Partial + * } + * ) => import('eslint').Linter.Config) & import('eslint').ESLint.Plugin & { + * configs: Record<`flat/${ConfigGroups}${ConfigVariants}${ErrorLevelVariants}`, + * import('eslint').Linter.Config> + * }} + */ +/* eslint-enable jsdoc/valid-types -- Bug */ +// @ts-expect-error Ok +export const jsdoc = function (cfg) { + /** @type {import('eslint').Linter.Config} */ + let outputConfig = { + plugins: { + jsdoc: index, + }, + }; + if ( + cfg?.config + ) { + // @ts-expect-error Security check + if (cfg.config === '__proto__') { + throw new TypeError('Disallowed config value'); + } + + outputConfig = index.configs[cfg.config]; + } + + outputConfig.settings = { + jsdoc: cfg?.mergeSettings === false ? + cfg.settings : + merge( + {}, + cfg?.settings ?? {}, + cfg?.config?.includes('recommended') ? + { + // We may need to drop these for "typescript" (non-"flavor") configs, + // if support is later added: https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html + structuredTags: { + next: { + required: [ + 'type', + ], + }, + throws: { + required: [ + 'type', + ], + }, + yields: { + required: [ + 'type', + ], + }, + }, + } : + {}, + ), + }; + + return outputConfig; +}; + export default index; diff --git a/test/index.js b/test/index.js new file mode 100644 index 000000000..84335a9b3 --- /dev/null +++ b/test/index.js @@ -0,0 +1,127 @@ +import jsdocDefault, { + jsdoc, +} from '../src/index.js'; +import { + expect, +} from 'chai'; + +describe('jsdoc()', () => { + it('Builds simple plugins config', () => { + const cfg = jsdoc(); + expect(cfg.plugins?.jsdoc).to.equal(jsdocDefault); + expect(cfg.settings).to.deep.equal({ + jsdoc: {}, + }); + }); + + it('Throws with bad config', () => { + expect(() => { + jsdoc({ + // @ts-expect-error Deliberately bad argument + config: '__proto__', + }); + }).to.throw(TypeError); + }); + + it('Builds supplied config', () => { + const cfg = jsdoc({ + config: 'flat/recommended', + }); + + expect(cfg.settings).to.deep.equal({ + jsdoc: { + structuredTags: { + next: { + required: [ + 'type', + ], + }, + throws: { + required: [ + 'type', + ], + }, + yields: { + required: [ + 'type', + ], + }, + }, + }, + }); + }); + + it('Builds supplied config with merged settings', () => { + const cfg = jsdoc({ + config: 'flat/recommended', + settings: { + structuredTags: { + see: { + name: 'namepath-referencing', + required: [ + 'name', + ], + }, + }, + }, + }); + + expect(cfg.settings).to.deep.equal({ + jsdoc: { + structuredTags: { + next: { + required: [ + 'type', + ], + }, + see: { + name: 'namepath-referencing', + required: [ + 'name', + ], + }, + throws: { + required: [ + 'type', + ], + }, + yields: { + required: [ + 'type', + ], + }, + }, + }, + }); + }); + + it('Builds supplied config with non-merged settings', () => { + const cfg = jsdoc({ + config: 'flat/recommended', + mergeSettings: false, + settings: { + structuredTags: { + see: { + name: 'namepath-referencing', + required: [ + 'name', + ], + }, + }, + }, + }); + + expect(cfg.settings).to.deep.equal({ + jsdoc: { + structuredTags: { + see: { + name: 'namepath-referencing', + required: [ + 'name', + ], + }, + }, + }, + }); + }); +}); diff --git a/test/rules/data/eslint.config.mjs b/test/rules/data/eslint.config.js similarity index 100% rename from test/rules/data/eslint.config.mjs rename to test/rules/data/eslint.config.js diff --git a/test/rules/index.js b/test/rules/index.js index da65f5995..e46add23c 100644 --- a/test/rules/index.js +++ b/test/rules/index.js @@ -7,10 +7,12 @@ import { import { readFileSync, } from 'fs'; -import defaultsDeep from 'lodash.defaultsdeep'; import { parseArgs, } from 'node:util'; +import { + merge, +} from 'object-deep-merge'; import { join, } from 'path'; @@ -70,8 +72,9 @@ const main = async () => { config.rules[ruleName] ); + /** @type {{ecmaVersion: import('eslint').Linter.EcmaVersion}} */ const languageOptions = { - ecmaVersion: 6, + ecmaVersion: 'latest', }; // Catch syntax errors @@ -108,7 +111,7 @@ const main = async () => { let count = 0; assertions.invalid = assertions.invalid.map((assertion) => { Reflect.deleteProperty(assertion, 'ignoreReadme'); - assertion.languageOptions = defaultsDeep(assertion.languageOptions, languageOptions); + assertion.languageOptions = merge(assertion.languageOptions ?? {}, languageOptions); for (const error of /** @type {import('eslint').RuleTester.TestCaseError[]} */ ( assertion.errors || [] )) { @@ -148,7 +151,7 @@ const main = async () => { throw new Error(`Valid assertions for rule ${ruleName} should not have an \`output\` property.`); } - assertion.languageOptions = defaultsDeep(assertion.languageOptions, languageOptions); + assertion.languageOptions = merge(assertion.languageOptions ?? {}, languageOptions); return assertion; }); From c8ea39ae0baf0b53d8ba056ea5bffd973583bbf3 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 9 Sep 2025 06:07:32 +0800 Subject: [PATCH 055/189] fix: ensure CJS export is accessible; fixes #1478 (#1479) --- eslint.config.js | 2 + package.json | 2 +- src/index-cjs.js | 528 ++++++++++++++++++++++++++++++++++++++++++++++ src/index.js | 534 +---------------------------------------------- 4 files changed, 536 insertions(+), 530 deletions(-) create mode 100644 src/index-cjs.js diff --git a/eslint.config.js b/eslint.config.js index 293151c42..df8ecd569 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -37,6 +37,8 @@ export default [ rules: { '@stylistic/array-element-newline': 0, '@stylistic/no-extra-parens': 0, + 'canonical/filename-match-exported': 0, + 'canonical/filename-match-regex': 0, 'filenames/match-regex': 0, 'import/extensions': 0, 'import/no-useless-path-segments': 0, diff --git a/package.json b/package.json index 80d250b9a..7d8f8ff7c 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ ".": { "types": "./dist/index.d.ts", "import": "./src/index.js", - "require": "./dist/index.cjs" + "require": "./dist/index-cjs.cjs" }, "./getJsdocProcessorPlugin.js": { "types": "./dist/getJsdocProcessorPlugin.d.ts", diff --git a/src/index-cjs.js b/src/index-cjs.js new file mode 100644 index 000000000..5c50a65e6 --- /dev/null +++ b/src/index-cjs.js @@ -0,0 +1,528 @@ +import { + getJsdocProcessorPlugin, +} from './getJsdocProcessorPlugin.js'; +import checkAccess from './rules/checkAccess.js'; +import checkAlignment from './rules/checkAlignment.js'; +import checkExamples from './rules/checkExamples.js'; +import checkIndentation from './rules/checkIndentation.js'; +import checkLineAlignment from './rules/checkLineAlignment.js'; +import checkParamNames from './rules/checkParamNames.js'; +import checkPropertyNames from './rules/checkPropertyNames.js'; +import checkSyntax from './rules/checkSyntax.js'; +import checkTagNames from './rules/checkTagNames.js'; +import checkTemplateNames from './rules/checkTemplateNames.js'; +import checkTypes from './rules/checkTypes.js'; +import checkValues from './rules/checkValues.js'; +import convertToJsdocComments from './rules/convertToJsdocComments.js'; +import emptyTags from './rules/emptyTags.js'; +import implementsOnClasses from './rules/implementsOnClasses.js'; +import importsAsDependencies from './rules/importsAsDependencies.js'; +import informativeDocs from './rules/informativeDocs.js'; +import linesBeforeBlock from './rules/linesBeforeBlock.js'; +import matchDescription from './rules/matchDescription.js'; +import matchName from './rules/matchName.js'; +import multilineBlocks from './rules/multilineBlocks.js'; +import noBadBlocks from './rules/noBadBlocks.js'; +import noBlankBlockDescriptions from './rules/noBlankBlockDescriptions.js'; +import noBlankBlocks from './rules/noBlankBlocks.js'; +import noDefaults from './rules/noDefaults.js'; +import noMissingSyntax from './rules/noMissingSyntax.js'; +import noMultiAsterisks from './rules/noMultiAsterisks.js'; +import noRestrictedSyntax from './rules/noRestrictedSyntax.js'; +import noTypes from './rules/noTypes.js'; +import noUndefinedTypes from './rules/noUndefinedTypes.js'; +import requireAsteriskPrefix from './rules/requireAsteriskPrefix.js'; +import requireDescription from './rules/requireDescription.js'; +import requireDescriptionCompleteSentence from './rules/requireDescriptionCompleteSentence.js'; +import requireExample from './rules/requireExample.js'; +import requireFileOverview from './rules/requireFileOverview.js'; +import requireHyphenBeforeParamDescription from './rules/requireHyphenBeforeParamDescription.js'; +import requireJsdoc from './rules/requireJsdoc.js'; +import requireParam from './rules/requireParam.js'; +import requireParamDescription from './rules/requireParamDescription.js'; +import requireParamName from './rules/requireParamName.js'; +import requireParamType from './rules/requireParamType.js'; +import requireProperty from './rules/requireProperty.js'; +import requirePropertyDescription from './rules/requirePropertyDescription.js'; +import requirePropertyName from './rules/requirePropertyName.js'; +import requirePropertyType from './rules/requirePropertyType.js'; +import requireReturns from './rules/requireReturns.js'; +import requireReturnsCheck from './rules/requireReturnsCheck.js'; +import requireReturnsDescription from './rules/requireReturnsDescription.js'; +import requireReturnsType from './rules/requireReturnsType.js'; +import requireTemplate from './rules/requireTemplate.js'; +import requireThrows from './rules/requireThrows.js'; +import requireYields from './rules/requireYields.js'; +import requireYieldsCheck from './rules/requireYieldsCheck.js'; +import sortTags from './rules/sortTags.js'; +import tagLines from './rules/tagLines.js'; +import textEscaping from './rules/textEscaping.js'; +import validTypes from './rules/validTypes.js'; + +/* eslint-disable jsdoc/valid-types -- Bug */ +/** + * @typedef {"recommended" | "stylistic" | "contents" | "logical" | "requirements"} ConfigGroups + * @typedef {"" | "-typescript" | "-typescript-flavor"} ConfigVariants + * @typedef {"" | "-error"} ErrorLevelVariants + * @type {import('eslint').ESLint.Plugin & { + * configs: Record<`flat/${ConfigGroups}${ConfigVariants}${ErrorLevelVariants}`, + * import('eslint').Linter.Config> + * }} + */ +const index = {}; +/* eslint-enable jsdoc/valid-types -- Bug */ +index.configs = {}; +index.rules = { + 'check-access': checkAccess, + 'check-alignment': checkAlignment, + 'check-examples': checkExamples, + 'check-indentation': checkIndentation, + 'check-line-alignment': checkLineAlignment, + 'check-param-names': checkParamNames, + 'check-property-names': checkPropertyNames, + 'check-syntax': checkSyntax, + 'check-tag-names': checkTagNames, + 'check-template-names': checkTemplateNames, + 'check-types': checkTypes, + 'check-values': checkValues, + 'convert-to-jsdoc-comments': convertToJsdocComments, + 'empty-tags': emptyTags, + 'implements-on-classes': implementsOnClasses, + 'imports-as-dependencies': importsAsDependencies, + 'informative-docs': informativeDocs, + 'lines-before-block': linesBeforeBlock, + 'match-description': matchDescription, + 'match-name': matchName, + 'multiline-blocks': multilineBlocks, + 'no-bad-blocks': noBadBlocks, + 'no-blank-block-descriptions': noBlankBlockDescriptions, + 'no-blank-blocks': noBlankBlocks, + 'no-defaults': noDefaults, + 'no-missing-syntax': noMissingSyntax, + 'no-multi-asterisks': noMultiAsterisks, + 'no-restricted-syntax': noRestrictedSyntax, + 'no-types': noTypes, + 'no-undefined-types': noUndefinedTypes, + 'require-asterisk-prefix': requireAsteriskPrefix, + 'require-description': requireDescription, + 'require-description-complete-sentence': requireDescriptionCompleteSentence, + 'require-example': requireExample, + 'require-file-overview': requireFileOverview, + 'require-hyphen-before-param-description': requireHyphenBeforeParamDescription, + 'require-jsdoc': requireJsdoc, + 'require-param': requireParam, + 'require-param-description': requireParamDescription, + 'require-param-name': requireParamName, + 'require-param-type': requireParamType, + 'require-property': requireProperty, + 'require-property-description': requirePropertyDescription, + 'require-property-name': requirePropertyName, + 'require-property-type': requirePropertyType, + 'require-returns': requireReturns, + 'require-returns-check': requireReturnsCheck, + 'require-returns-description': requireReturnsDescription, + 'require-returns-type': requireReturnsType, + 'require-template': requireTemplate, + 'require-throws': requireThrows, + 'require-yields': requireYields, + 'require-yields-check': requireYieldsCheck, + 'sort-tags': sortTags, + 'tag-lines': tagLines, + 'text-escaping': textEscaping, + 'valid-types': validTypes, +}; + +/** + * @param {"warn"|"error"} warnOrError + * @param {string} [flatName] + * @returns {import('eslint').Linter.Config} + */ +const createRecommendedRuleset = (warnOrError, flatName) => { + return { + ...(flatName ? { + name: 'jsdoc/' + flatName, + } : {}), + // @ts-expect-error Ok + plugins: + flatName ? { + jsdoc: index, + } : [ + 'jsdoc', + ], + rules: { + 'jsdoc/check-access': warnOrError, + 'jsdoc/check-alignment': warnOrError, + 'jsdoc/check-examples': 'off', + 'jsdoc/check-indentation': 'off', + 'jsdoc/check-line-alignment': 'off', + 'jsdoc/check-param-names': warnOrError, + 'jsdoc/check-property-names': warnOrError, + 'jsdoc/check-syntax': 'off', + 'jsdoc/check-tag-names': warnOrError, + 'jsdoc/check-template-names': 'off', + 'jsdoc/check-types': warnOrError, + 'jsdoc/check-values': warnOrError, + 'jsdoc/convert-to-jsdoc-comments': 'off', + 'jsdoc/empty-tags': warnOrError, + 'jsdoc/implements-on-classes': warnOrError, + 'jsdoc/imports-as-dependencies': 'off', + 'jsdoc/informative-docs': 'off', + 'jsdoc/lines-before-block': 'off', + 'jsdoc/match-description': 'off', + 'jsdoc/match-name': 'off', + 'jsdoc/multiline-blocks': warnOrError, + 'jsdoc/no-bad-blocks': 'off', + 'jsdoc/no-blank-block-descriptions': 'off', + 'jsdoc/no-blank-blocks': 'off', + 'jsdoc/no-defaults': warnOrError, + 'jsdoc/no-missing-syntax': 'off', + 'jsdoc/no-multi-asterisks': warnOrError, + 'jsdoc/no-restricted-syntax': 'off', + 'jsdoc/no-types': 'off', + 'jsdoc/no-undefined-types': warnOrError, + 'jsdoc/require-asterisk-prefix': 'off', + 'jsdoc/require-description': 'off', + 'jsdoc/require-description-complete-sentence': 'off', + 'jsdoc/require-example': 'off', + 'jsdoc/require-file-overview': 'off', + 'jsdoc/require-hyphen-before-param-description': 'off', + 'jsdoc/require-jsdoc': warnOrError, + 'jsdoc/require-param': warnOrError, + 'jsdoc/require-param-description': warnOrError, + 'jsdoc/require-param-name': warnOrError, + 'jsdoc/require-param-type': warnOrError, + 'jsdoc/require-property': warnOrError, + 'jsdoc/require-property-description': warnOrError, + 'jsdoc/require-property-name': warnOrError, + 'jsdoc/require-property-type': warnOrError, + 'jsdoc/require-returns': warnOrError, + 'jsdoc/require-returns-check': warnOrError, + 'jsdoc/require-returns-description': warnOrError, + 'jsdoc/require-returns-type': warnOrError, + 'jsdoc/require-template': 'off', + 'jsdoc/require-throws': 'off', + 'jsdoc/require-yields': warnOrError, + 'jsdoc/require-yields-check': warnOrError, + 'jsdoc/sort-tags': 'off', + 'jsdoc/tag-lines': warnOrError, + 'jsdoc/text-escaping': 'off', + 'jsdoc/valid-types': warnOrError, + }, + }; +}; + +/** + * @param {"warn"|"error"} warnOrError + * @param {string} [flatName] + * @returns {import('eslint').Linter.Config} + */ +const createRecommendedTypeScriptRuleset = (warnOrError, flatName) => { + const ruleset = createRecommendedRuleset(warnOrError, flatName); + + return { + ...ruleset, + rules: { + ...ruleset.rules, + /* eslint-disable @stylistic/indent -- Extra indent to avoid use by auto-rule-editing */ + 'jsdoc/check-tag-names': [ + warnOrError, { + typed: true, + }, + ], + 'jsdoc/no-types': warnOrError, + 'jsdoc/no-undefined-types': 'off', + 'jsdoc/require-param-type': 'off', + 'jsdoc/require-property-type': 'off', + 'jsdoc/require-returns-type': 'off', + /* eslint-enable @stylistic/indent */ + }, + }; +}; + +/** + * @param {"warn"|"error"} warnOrError + * @param {string} [flatName] + * @returns {import('eslint').Linter.Config} + */ +const createRecommendedTypeScriptFlavorRuleset = (warnOrError, flatName) => { + const ruleset = createRecommendedRuleset(warnOrError, flatName); + + return { + ...ruleset, + rules: { + ...ruleset.rules, + /* eslint-disable @stylistic/indent -- Extra indent to avoid use by auto-rule-editing */ + 'jsdoc/no-undefined-types': 'off', + /* eslint-enable @stylistic/indent */ + }, + }; +}; + +/** + * @param {(string | unknown[])[]} ruleNames + */ +const createStandaloneRulesetFactory = (ruleNames) => { + /** + * @param {"warn"|"error"} warnOrError + * @param {string} [flatName] + * @returns {import('eslint').Linter.Config} + */ + return (warnOrError, flatName) => { + return { + name: 'jsdoc/' + flatName, + plugins: { + jsdoc: index, + }, + rules: Object.fromEntries( + ruleNames.map( + (ruleName) => { + return (typeof ruleName === 'string' ? + [ + ruleName, warnOrError, + ] : + [ + ruleName[0], [ + warnOrError, ...ruleName.slice(1), + ], + ]); + }, + ), + ), + }; + }; +}; + +const contentsRules = [ + 'jsdoc/informative-docs', + 'jsdoc/match-description', + 'jsdoc/no-blank-block-descriptions', + 'jsdoc/no-blank-blocks', + [ + 'jsdoc/text-escaping', { + escapeHTML: true, + }, + ], +]; + +const createContentsTypescriptRuleset = createStandaloneRulesetFactory(contentsRules); + +const createContentsTypescriptFlavorRuleset = createStandaloneRulesetFactory(contentsRules); + +const logicalRules = [ + 'jsdoc/check-access', + 'jsdoc/check-param-names', + 'jsdoc/check-property-names', + 'jsdoc/check-syntax', + 'jsdoc/check-tag-names', + 'jsdoc/check-template-names', + 'jsdoc/check-types', + 'jsdoc/check-values', + 'jsdoc/empty-tags', + 'jsdoc/implements-on-classes', + 'jsdoc/require-returns-check', + 'jsdoc/require-yields-check', + 'jsdoc/no-bad-blocks', + 'jsdoc/no-defaults', + 'jsdoc/no-types', + 'jsdoc/no-undefined-types', + 'jsdoc/valid-types', +]; + +const createLogicalTypescriptRuleset = createStandaloneRulesetFactory(logicalRules); + +const createLogicalTypescriptFlavorRuleset = createStandaloneRulesetFactory(logicalRules); + +const requirementsRules = [ + 'jsdoc/require-example', + 'jsdoc/require-jsdoc', + 'jsdoc/require-param', + 'jsdoc/require-param-description', + 'jsdoc/require-param-name', + 'jsdoc/require-property', + 'jsdoc/require-property-description', + 'jsdoc/require-property-name', + 'jsdoc/require-returns', + 'jsdoc/require-returns-description', + 'jsdoc/require-yields', +]; + +const createRequirementsTypeScriptRuleset = createStandaloneRulesetFactory(requirementsRules); + +const createRequirementsTypeScriptFlavorRuleset = createStandaloneRulesetFactory([ + ...requirementsRules, + 'jsdoc/require-param-type', + 'jsdoc/require-property-type', + 'jsdoc/require-returns-type', + 'jsdoc/require-template', +]); + +const stylisticRules = [ + 'jsdoc/check-alignment', + 'jsdoc/check-line-alignment', + 'jsdoc/lines-before-block', + 'jsdoc/multiline-blocks', + 'jsdoc/no-multi-asterisks', + 'jsdoc/require-asterisk-prefix', + [ + 'jsdoc/require-hyphen-before-param-description', 'never', + ], + 'jsdoc/tag-lines', +]; + +const createStylisticTypeScriptRuleset = createStandaloneRulesetFactory(stylisticRules); + +const createStylisticTypeScriptFlavorRuleset = createStandaloneRulesetFactory(stylisticRules); + +/* c8 ignore next 3 -- TS */ +if (!index.configs) { + throw new Error('TypeScript guard'); +} + +index.configs.recommended = createRecommendedRuleset('warn'); +index.configs['recommended-error'] = createRecommendedRuleset('error'); +index.configs['recommended-typescript'] = createRecommendedTypeScriptRuleset('warn'); +index.configs['recommended-typescript-error'] = createRecommendedTypeScriptRuleset('error'); +index.configs['recommended-typescript-flavor'] = createRecommendedTypeScriptFlavorRuleset('warn'); +index.configs['recommended-typescript-flavor-error'] = createRecommendedTypeScriptFlavorRuleset('error'); + +index.configs['flat/recommended'] = createRecommendedRuleset('warn', 'flat/recommended'); +index.configs['flat/recommended-error'] = createRecommendedRuleset('error', 'flat/recommended-error'); +index.configs['flat/recommended-typescript'] = createRecommendedTypeScriptRuleset('warn', 'flat/recommended-typescript'); +index.configs['flat/recommended-typescript-error'] = createRecommendedTypeScriptRuleset('error', 'flat/recommended-typescript-error'); +index.configs['flat/recommended-typescript-flavor'] = createRecommendedTypeScriptFlavorRuleset('warn', 'flat/recommended-typescript-flavor'); +index.configs['flat/recommended-typescript-flavor-error'] = createRecommendedTypeScriptFlavorRuleset('error', 'flat/recommended-typescript-flavor-error'); + +index.configs['flat/contents-typescript'] = createContentsTypescriptRuleset('warn', 'flat/contents-typescript'); +index.configs['flat/contents-typescript-error'] = createContentsTypescriptRuleset('error', 'flat/contents-typescript-error'); +index.configs['flat/contents-typescript-flavor'] = createContentsTypescriptFlavorRuleset('warn', 'flat/contents-typescript-flavor'); +index.configs['flat/contents-typescript-flavor-error'] = createContentsTypescriptFlavorRuleset('error', 'flat/contents-typescript-error-flavor'); +index.configs['flat/logical-typescript'] = createLogicalTypescriptRuleset('warn', 'flat/logical-typescript'); +index.configs['flat/logical-typescript-error'] = createLogicalTypescriptRuleset('error', 'flat/logical-typescript-error'); +index.configs['flat/logical-typescript-flavor'] = createLogicalTypescriptFlavorRuleset('warn', 'flat/logical-typescript-flavor'); +index.configs['flat/logical-typescript-flavor-error'] = createLogicalTypescriptFlavorRuleset('error', 'flat/logical-typescript-error-flavor'); +index.configs['flat/requirements-typescript'] = createRequirementsTypeScriptRuleset('warn', 'flat/requirements-typescript'); +index.configs['flat/requirements-typescript-error'] = createRequirementsTypeScriptRuleset('error', 'flat/requirements-typescript-error'); +index.configs['flat/requirements-typescript-flavor'] = createRequirementsTypeScriptFlavorRuleset('warn', 'flat/requirements-typescript-flavor'); +index.configs['flat/requirements-typescript-flavor-error'] = createRequirementsTypeScriptFlavorRuleset('error', 'flat/requirements-typescript-error-flavor'); +index.configs['flat/stylistic-typescript'] = createStylisticTypeScriptRuleset('warn', 'flat/stylistic-typescript'); +index.configs['flat/stylistic-typescript-error'] = createStylisticTypeScriptRuleset('error', 'flat/stylistic-typescript-error'); +index.configs['flat/stylistic-typescript-flavor'] = createStylisticTypeScriptFlavorRuleset('warn', 'flat/stylistic-typescript-flavor'); +index.configs['flat/stylistic-typescript-flavor-error'] = createStylisticTypeScriptFlavorRuleset('error', 'flat/stylistic-typescript-error-flavor'); + +index.configs.examples = /** @type {import('eslint').Linter.Config[]} */ ([ + { + files: [ + '**/*.js', + ], + name: 'jsdoc/examples/processor', + plugins: { + examples: getJsdocProcessorPlugin(), + }, + processor: 'examples/examples', + }, + { + files: [ + '**/*.md/*.js', + ], + name: 'jsdoc/examples/rules', + rules: { + // "always" newline rule at end unlikely in sample code + 'eol-last': 0, + + // Wouldn't generally expect example paths to resolve relative to JS file + 'import/no-unresolved': 0, + + // Snippets likely too short to always include import/export info + 'import/unambiguous': 0, + + 'jsdoc/require-file-overview': 0, + + // The end of a multiline comment would end the comment the example is in. + 'jsdoc/require-jsdoc': 0, + + // Unlikely to have inadvertent debugging within examples + 'no-console': 0, + + // Often wish to start `@example` code after newline; also may use + // empty lines for spacing + 'no-multiple-empty-lines': 0, + + // Many variables in examples will be `undefined` + 'no-undef': 0, + + // Common to define variables for clarity without always using them + 'no-unused-vars': 0, + + // See import/no-unresolved + 'node/no-missing-import': 0, + 'node/no-missing-require': 0, + + // Can generally look nicer to pad a little even if code imposes more stringency + 'padded-blocks': 0, + }, + }, +]); + +index.configs['default-expressions'] = /** @type {import('eslint').Linter.Config[]} */ ([ + { + files: [ + '**/*.js', + ], + name: 'jsdoc/default-expressions/processor', + plugins: { + examples: getJsdocProcessorPlugin({ + checkDefaults: true, + checkParams: true, + checkProperties: true, + }), + }, + processor: 'examples/examples', + }, + { + files: [ + '**/*.jsdoc-defaults', '**/*.jsdoc-params', '**/*.jsdoc-properties', + ], + name: 'jsdoc/default-expressions/rules', + rules: { + ...index.configs.examples[1].rules, + 'chai-friendly/no-unused-expressions': 0, + 'no-empty-function': 0, + 'no-new': 0, + 'no-unused-expressions': 0, + quotes: [ + 'error', 'double', + ], + semi: [ + 'error', 'never', + ], + strict: 0, + }, + }, +]); + +index.configs['examples-and-default-expressions'] = /** @type {import('eslint').Linter.Config[]} */ ([ + { + name: 'jsdoc/examples-and-default-expressions', + plugins: { + examples: getJsdocProcessorPlugin({ + checkDefaults: true, + checkParams: true, + checkProperties: true, + }), + }, + }, + ...index.configs.examples.map((config) => { + return { + ...config, + plugins: {}, + }; + }), + ...index.configs['default-expressions'].map((config) => { + return { + ...config, + plugins: {}, + }; + }), +]); + +export default index; diff --git a/src/index.js b/src/index.js index ae1bb7eaa..7e946f4c5 100644 --- a/src/index.js +++ b/src/index.js @@ -1,543 +1,21 @@ -import { - getJsdocProcessorPlugin, -} from './getJsdocProcessorPlugin.js'; -import checkAccess from './rules/checkAccess.js'; -import checkAlignment from './rules/checkAlignment.js'; -import checkExamples from './rules/checkExamples.js'; -import checkIndentation from './rules/checkIndentation.js'; -import checkLineAlignment from './rules/checkLineAlignment.js'; -import checkParamNames from './rules/checkParamNames.js'; -import checkPropertyNames from './rules/checkPropertyNames.js'; -import checkSyntax from './rules/checkSyntax.js'; -import checkTagNames from './rules/checkTagNames.js'; -import checkTemplateNames from './rules/checkTemplateNames.js'; -import checkTypes from './rules/checkTypes.js'; -import checkValues from './rules/checkValues.js'; -import convertToJsdocComments from './rules/convertToJsdocComments.js'; -import emptyTags from './rules/emptyTags.js'; -import implementsOnClasses from './rules/implementsOnClasses.js'; -import importsAsDependencies from './rules/importsAsDependencies.js'; -import informativeDocs from './rules/informativeDocs.js'; -import linesBeforeBlock from './rules/linesBeforeBlock.js'; -import matchDescription from './rules/matchDescription.js'; -import matchName from './rules/matchName.js'; -import multilineBlocks from './rules/multilineBlocks.js'; -import noBadBlocks from './rules/noBadBlocks.js'; -import noBlankBlockDescriptions from './rules/noBlankBlockDescriptions.js'; -import noBlankBlocks from './rules/noBlankBlocks.js'; -import noDefaults from './rules/noDefaults.js'; -import noMissingSyntax from './rules/noMissingSyntax.js'; -import noMultiAsterisks from './rules/noMultiAsterisks.js'; -import noRestrictedSyntax from './rules/noRestrictedSyntax.js'; -import noTypes from './rules/noTypes.js'; -import noUndefinedTypes from './rules/noUndefinedTypes.js'; -import requireAsteriskPrefix from './rules/requireAsteriskPrefix.js'; -import requireDescription from './rules/requireDescription.js'; -import requireDescriptionCompleteSentence from './rules/requireDescriptionCompleteSentence.js'; -import requireExample from './rules/requireExample.js'; -import requireFileOverview from './rules/requireFileOverview.js'; -import requireHyphenBeforeParamDescription from './rules/requireHyphenBeforeParamDescription.js'; -import requireJsdoc from './rules/requireJsdoc.js'; -import requireParam from './rules/requireParam.js'; -import requireParamDescription from './rules/requireParamDescription.js'; -import requireParamName from './rules/requireParamName.js'; -import requireParamType from './rules/requireParamType.js'; -import requireProperty from './rules/requireProperty.js'; -import requirePropertyDescription from './rules/requirePropertyDescription.js'; -import requirePropertyName from './rules/requirePropertyName.js'; -import requirePropertyType from './rules/requirePropertyType.js'; -import requireReturns from './rules/requireReturns.js'; -import requireReturnsCheck from './rules/requireReturnsCheck.js'; -import requireReturnsDescription from './rules/requireReturnsDescription.js'; -import requireReturnsType from './rules/requireReturnsType.js'; -import requireTemplate from './rules/requireTemplate.js'; -import requireThrows from './rules/requireThrows.js'; -import requireYields from './rules/requireYields.js'; -import requireYieldsCheck from './rules/requireYieldsCheck.js'; -import sortTags from './rules/sortTags.js'; -import tagLines from './rules/tagLines.js'; -import textEscaping from './rules/textEscaping.js'; -import validTypes from './rules/validTypes.js'; +import index from './index-cjs.js'; import { merge, } from 'object-deep-merge'; -/* eslint-disable jsdoc/valid-types -- Bug */ -/** - * @typedef {"recommended" | "stylistic" | "contents" | "logical" | "requirements"} ConfigGroups - * @typedef {"" | "-typescript" | "-typescript-flavor"} ConfigVariants - * @typedef {"" | "-error"} ErrorLevelVariants - * @type {import('eslint').ESLint.Plugin & { - * configs: Record<`flat/${ConfigGroups}${ConfigVariants}${ErrorLevelVariants}`, - * import('eslint').Linter.Config> - * }} - */ -const index = {}; -/* eslint-enable jsdoc/valid-types -- Bug */ -index.configs = {}; -index.rules = { - 'check-access': checkAccess, - 'check-alignment': checkAlignment, - 'check-examples': checkExamples, - 'check-indentation': checkIndentation, - 'check-line-alignment': checkLineAlignment, - 'check-param-names': checkParamNames, - 'check-property-names': checkPropertyNames, - 'check-syntax': checkSyntax, - 'check-tag-names': checkTagNames, - 'check-template-names': checkTemplateNames, - 'check-types': checkTypes, - 'check-values': checkValues, - 'convert-to-jsdoc-comments': convertToJsdocComments, - 'empty-tags': emptyTags, - 'implements-on-classes': implementsOnClasses, - 'imports-as-dependencies': importsAsDependencies, - 'informative-docs': informativeDocs, - 'lines-before-block': linesBeforeBlock, - 'match-description': matchDescription, - 'match-name': matchName, - 'multiline-blocks': multilineBlocks, - 'no-bad-blocks': noBadBlocks, - 'no-blank-block-descriptions': noBlankBlockDescriptions, - 'no-blank-blocks': noBlankBlocks, - 'no-defaults': noDefaults, - 'no-missing-syntax': noMissingSyntax, - 'no-multi-asterisks': noMultiAsterisks, - 'no-restricted-syntax': noRestrictedSyntax, - 'no-types': noTypes, - 'no-undefined-types': noUndefinedTypes, - 'require-asterisk-prefix': requireAsteriskPrefix, - 'require-description': requireDescription, - 'require-description-complete-sentence': requireDescriptionCompleteSentence, - 'require-example': requireExample, - 'require-file-overview': requireFileOverview, - 'require-hyphen-before-param-description': requireHyphenBeforeParamDescription, - 'require-jsdoc': requireJsdoc, - 'require-param': requireParam, - 'require-param-description': requireParamDescription, - 'require-param-name': requireParamName, - 'require-param-type': requireParamType, - 'require-property': requireProperty, - 'require-property-description': requirePropertyDescription, - 'require-property-name': requirePropertyName, - 'require-property-type': requirePropertyType, - 'require-returns': requireReturns, - 'require-returns-check': requireReturnsCheck, - 'require-returns-description': requireReturnsDescription, - 'require-returns-type': requireReturnsType, - 'require-template': requireTemplate, - 'require-throws': requireThrows, - 'require-yields': requireYields, - 'require-yields-check': requireYieldsCheck, - 'sort-tags': sortTags, - 'tag-lines': tagLines, - 'text-escaping': textEscaping, - 'valid-types': validTypes, -}; - -/** - * @param {"warn"|"error"} warnOrError - * @param {string} [flatName] - * @returns {import('eslint').Linter.Config} - */ -const createRecommendedRuleset = (warnOrError, flatName) => { - return { - ...(flatName ? { - name: 'jsdoc/' + flatName, - } : {}), - // @ts-expect-error Ok - plugins: - flatName ? { - jsdoc: index, - } : [ - 'jsdoc', - ], - rules: { - 'jsdoc/check-access': warnOrError, - 'jsdoc/check-alignment': warnOrError, - 'jsdoc/check-examples': 'off', - 'jsdoc/check-indentation': 'off', - 'jsdoc/check-line-alignment': 'off', - 'jsdoc/check-param-names': warnOrError, - 'jsdoc/check-property-names': warnOrError, - 'jsdoc/check-syntax': 'off', - 'jsdoc/check-tag-names': warnOrError, - 'jsdoc/check-template-names': 'off', - 'jsdoc/check-types': warnOrError, - 'jsdoc/check-values': warnOrError, - 'jsdoc/convert-to-jsdoc-comments': 'off', - 'jsdoc/empty-tags': warnOrError, - 'jsdoc/implements-on-classes': warnOrError, - 'jsdoc/imports-as-dependencies': 'off', - 'jsdoc/informative-docs': 'off', - 'jsdoc/lines-before-block': 'off', - 'jsdoc/match-description': 'off', - 'jsdoc/match-name': 'off', - 'jsdoc/multiline-blocks': warnOrError, - 'jsdoc/no-bad-blocks': 'off', - 'jsdoc/no-blank-block-descriptions': 'off', - 'jsdoc/no-blank-blocks': 'off', - 'jsdoc/no-defaults': warnOrError, - 'jsdoc/no-missing-syntax': 'off', - 'jsdoc/no-multi-asterisks': warnOrError, - 'jsdoc/no-restricted-syntax': 'off', - 'jsdoc/no-types': 'off', - 'jsdoc/no-undefined-types': warnOrError, - 'jsdoc/require-asterisk-prefix': 'off', - 'jsdoc/require-description': 'off', - 'jsdoc/require-description-complete-sentence': 'off', - 'jsdoc/require-example': 'off', - 'jsdoc/require-file-overview': 'off', - 'jsdoc/require-hyphen-before-param-description': 'off', - 'jsdoc/require-jsdoc': warnOrError, - 'jsdoc/require-param': warnOrError, - 'jsdoc/require-param-description': warnOrError, - 'jsdoc/require-param-name': warnOrError, - 'jsdoc/require-param-type': warnOrError, - 'jsdoc/require-property': warnOrError, - 'jsdoc/require-property-description': warnOrError, - 'jsdoc/require-property-name': warnOrError, - 'jsdoc/require-property-type': warnOrError, - 'jsdoc/require-returns': warnOrError, - 'jsdoc/require-returns-check': warnOrError, - 'jsdoc/require-returns-description': warnOrError, - 'jsdoc/require-returns-type': warnOrError, - 'jsdoc/require-template': 'off', - 'jsdoc/require-throws': 'off', - 'jsdoc/require-yields': warnOrError, - 'jsdoc/require-yields-check': warnOrError, - 'jsdoc/sort-tags': 'off', - 'jsdoc/tag-lines': warnOrError, - 'jsdoc/text-escaping': 'off', - 'jsdoc/valid-types': warnOrError, - }, - }; -}; - -/** - * @param {"warn"|"error"} warnOrError - * @param {string} [flatName] - * @returns {import('eslint').Linter.Config} - */ -const createRecommendedTypeScriptRuleset = (warnOrError, flatName) => { - const ruleset = createRecommendedRuleset(warnOrError, flatName); - - return { - ...ruleset, - rules: { - ...ruleset.rules, - /* eslint-disable @stylistic/indent -- Extra indent to avoid use by auto-rule-editing */ - 'jsdoc/check-tag-names': [ - warnOrError, { - typed: true, - }, - ], - 'jsdoc/no-types': warnOrError, - 'jsdoc/no-undefined-types': 'off', - 'jsdoc/require-param-type': 'off', - 'jsdoc/require-property-type': 'off', - 'jsdoc/require-returns-type': 'off', - /* eslint-enable @stylistic/indent */ - }, - }; -}; - -/** - * @param {"warn"|"error"} warnOrError - * @param {string} [flatName] - * @returns {import('eslint').Linter.Config} - */ -const createRecommendedTypeScriptFlavorRuleset = (warnOrError, flatName) => { - const ruleset = createRecommendedRuleset(warnOrError, flatName); - - return { - ...ruleset, - rules: { - ...ruleset.rules, - /* eslint-disable @stylistic/indent -- Extra indent to avoid use by auto-rule-editing */ - 'jsdoc/no-undefined-types': 'off', - /* eslint-enable @stylistic/indent */ - }, - }; -}; - -/** - * @param {(string | unknown[])[]} ruleNames - */ -const createStandaloneRulesetFactory = (ruleNames) => { - /** - * @param {"warn"|"error"} warnOrError - * @param {string} [flatName] - * @returns {import('eslint').Linter.Config} - */ - return (warnOrError, flatName) => { - return { - name: 'jsdoc/' + flatName, - plugins: { - jsdoc: index, - }, - rules: Object.fromEntries( - ruleNames.map( - (ruleName) => { - return (typeof ruleName === 'string' ? - [ - ruleName, warnOrError, - ] : - [ - ruleName[0], [ - warnOrError, ...ruleName.slice(1), - ], - ]); - }, - ), - ), - }; - }; -}; - -const contentsRules = [ - 'jsdoc/informative-docs', - 'jsdoc/match-description', - 'jsdoc/no-blank-block-descriptions', - 'jsdoc/no-blank-blocks', - [ - 'jsdoc/text-escaping', { - escapeHTML: true, - }, - ], -]; - -const createContentsTypescriptRuleset = createStandaloneRulesetFactory(contentsRules); - -const createContentsTypescriptFlavorRuleset = createStandaloneRulesetFactory(contentsRules); - -const logicalRules = [ - 'jsdoc/check-access', - 'jsdoc/check-param-names', - 'jsdoc/check-property-names', - 'jsdoc/check-syntax', - 'jsdoc/check-tag-names', - 'jsdoc/check-template-names', - 'jsdoc/check-types', - 'jsdoc/check-values', - 'jsdoc/empty-tags', - 'jsdoc/implements-on-classes', - 'jsdoc/require-returns-check', - 'jsdoc/require-yields-check', - 'jsdoc/no-bad-blocks', - 'jsdoc/no-defaults', - 'jsdoc/no-types', - 'jsdoc/no-undefined-types', - 'jsdoc/valid-types', -]; - -const createLogicalTypescriptRuleset = createStandaloneRulesetFactory(logicalRules); - -const createLogicalTypescriptFlavorRuleset = createStandaloneRulesetFactory(logicalRules); - -const requirementsRules = [ - 'jsdoc/require-example', - 'jsdoc/require-jsdoc', - 'jsdoc/require-param', - 'jsdoc/require-param-description', - 'jsdoc/require-param-name', - 'jsdoc/require-property', - 'jsdoc/require-property-description', - 'jsdoc/require-property-name', - 'jsdoc/require-returns', - 'jsdoc/require-returns-description', - 'jsdoc/require-yields', -]; - -const createRequirementsTypeScriptRuleset = createStandaloneRulesetFactory(requirementsRules); - -const createRequirementsTypeScriptFlavorRuleset = createStandaloneRulesetFactory([ - ...requirementsRules, - 'jsdoc/require-param-type', - 'jsdoc/require-property-type', - 'jsdoc/require-returns-type', - 'jsdoc/require-template', -]); - -const stylisticRules = [ - 'jsdoc/check-alignment', - 'jsdoc/check-line-alignment', - 'jsdoc/lines-before-block', - 'jsdoc/multiline-blocks', - 'jsdoc/no-multi-asterisks', - 'jsdoc/require-asterisk-prefix', - [ - 'jsdoc/require-hyphen-before-param-description', 'never', - ], - 'jsdoc/tag-lines', -]; - -const createStylisticTypeScriptRuleset = createStandaloneRulesetFactory(stylisticRules); - -const createStylisticTypeScriptFlavorRuleset = createStandaloneRulesetFactory(stylisticRules); - -/* c8 ignore next 3 -- TS */ -if (!index.configs) { - throw new Error('TypeScript guard'); -} - -index.configs.recommended = createRecommendedRuleset('warn'); -index.configs['recommended-error'] = createRecommendedRuleset('error'); -index.configs['recommended-typescript'] = createRecommendedTypeScriptRuleset('warn'); -index.configs['recommended-typescript-error'] = createRecommendedTypeScriptRuleset('error'); -index.configs['recommended-typescript-flavor'] = createRecommendedTypeScriptFlavorRuleset('warn'); -index.configs['recommended-typescript-flavor-error'] = createRecommendedTypeScriptFlavorRuleset('error'); - -index.configs['flat/recommended'] = createRecommendedRuleset('warn', 'flat/recommended'); -index.configs['flat/recommended-error'] = createRecommendedRuleset('error', 'flat/recommended-error'); -index.configs['flat/recommended-typescript'] = createRecommendedTypeScriptRuleset('warn', 'flat/recommended-typescript'); -index.configs['flat/recommended-typescript-error'] = createRecommendedTypeScriptRuleset('error', 'flat/recommended-typescript-error'); -index.configs['flat/recommended-typescript-flavor'] = createRecommendedTypeScriptFlavorRuleset('warn', 'flat/recommended-typescript-flavor'); -index.configs['flat/recommended-typescript-flavor-error'] = createRecommendedTypeScriptFlavorRuleset('error', 'flat/recommended-typescript-flavor-error'); - -index.configs['flat/contents-typescript'] = createContentsTypescriptRuleset('warn', 'flat/contents-typescript'); -index.configs['flat/contents-typescript-error'] = createContentsTypescriptRuleset('error', 'flat/contents-typescript-error'); -index.configs['flat/contents-typescript-flavor'] = createContentsTypescriptFlavorRuleset('warn', 'flat/contents-typescript-flavor'); -index.configs['flat/contents-typescript-flavor-error'] = createContentsTypescriptFlavorRuleset('error', 'flat/contents-typescript-error-flavor'); -index.configs['flat/logical-typescript'] = createLogicalTypescriptRuleset('warn', 'flat/logical-typescript'); -index.configs['flat/logical-typescript-error'] = createLogicalTypescriptRuleset('error', 'flat/logical-typescript-error'); -index.configs['flat/logical-typescript-flavor'] = createLogicalTypescriptFlavorRuleset('warn', 'flat/logical-typescript-flavor'); -index.configs['flat/logical-typescript-flavor-error'] = createLogicalTypescriptFlavorRuleset('error', 'flat/logical-typescript-error-flavor'); -index.configs['flat/requirements-typescript'] = createRequirementsTypeScriptRuleset('warn', 'flat/requirements-typescript'); -index.configs['flat/requirements-typescript-error'] = createRequirementsTypeScriptRuleset('error', 'flat/requirements-typescript-error'); -index.configs['flat/requirements-typescript-flavor'] = createRequirementsTypeScriptFlavorRuleset('warn', 'flat/requirements-typescript-flavor'); -index.configs['flat/requirements-typescript-flavor-error'] = createRequirementsTypeScriptFlavorRuleset('error', 'flat/requirements-typescript-error-flavor'); -index.configs['flat/stylistic-typescript'] = createStylisticTypeScriptRuleset('warn', 'flat/stylistic-typescript'); -index.configs['flat/stylistic-typescript-error'] = createStylisticTypeScriptRuleset('error', 'flat/stylistic-typescript-error'); -index.configs['flat/stylistic-typescript-flavor'] = createStylisticTypeScriptFlavorRuleset('warn', 'flat/stylistic-typescript-flavor'); -index.configs['flat/stylistic-typescript-flavor-error'] = createStylisticTypeScriptFlavorRuleset('error', 'flat/stylistic-typescript-error-flavor'); - -index.configs.examples = /** @type {import('eslint').Linter.Config[]} */ ([ - { - files: [ - '**/*.js', - ], - name: 'jsdoc/examples/processor', - plugins: { - examples: getJsdocProcessorPlugin(), - }, - processor: 'examples/examples', - }, - { - files: [ - '**/*.md/*.js', - ], - name: 'jsdoc/examples/rules', - rules: { - // "always" newline rule at end unlikely in sample code - 'eol-last': 0, - - // Wouldn't generally expect example paths to resolve relative to JS file - 'import/no-unresolved': 0, - - // Snippets likely too short to always include import/export info - 'import/unambiguous': 0, - - 'jsdoc/require-file-overview': 0, - - // The end of a multiline comment would end the comment the example is in. - 'jsdoc/require-jsdoc': 0, - - // Unlikely to have inadvertent debugging within examples - 'no-console': 0, - - // Often wish to start `@example` code after newline; also may use - // empty lines for spacing - 'no-multiple-empty-lines': 0, - - // Many variables in examples will be `undefined` - 'no-undef': 0, - - // Common to define variables for clarity without always using them - 'no-unused-vars': 0, - - // See import/no-unresolved - 'node/no-missing-import': 0, - 'node/no-missing-require': 0, - - // Can generally look nicer to pad a little even if code imposes more stringency - 'padded-blocks': 0, - }, - }, -]); - -index.configs['default-expressions'] = /** @type {import('eslint').Linter.Config[]} */ ([ - { - files: [ - '**/*.js', - ], - name: 'jsdoc/default-expressions/processor', - plugins: { - examples: getJsdocProcessorPlugin({ - checkDefaults: true, - checkParams: true, - checkProperties: true, - }), - }, - processor: 'examples/examples', - }, - { - files: [ - '**/*.jsdoc-defaults', '**/*.jsdoc-params', '**/*.jsdoc-properties', - ], - name: 'jsdoc/default-expressions/rules', - rules: { - ...index.configs.examples[1].rules, - 'chai-friendly/no-unused-expressions': 0, - 'no-empty-function': 0, - 'no-new': 0, - 'no-unused-expressions': 0, - quotes: [ - 'error', 'double', - ], - semi: [ - 'error', 'never', - ], - strict: 0, - }, - }, -]); - -index.configs['examples-and-default-expressions'] = /** @type {import('eslint').Linter.Config[]} */ ([ - { - name: 'jsdoc/examples-and-default-expressions', - plugins: { - examples: getJsdocProcessorPlugin({ - checkDefaults: true, - checkParams: true, - checkProperties: true, - }), - }, - }, - ...index.configs.examples.map((config) => { - return { - ...config, - plugins: {}, - }; - }), - ...index.configs['default-expressions'].map((config) => { - return { - ...config, - plugins: {}, - }; - }), -]); +// eslint-disable-next-line unicorn/prefer-export-from --- Reusing `index` +export default index; /* eslint-disable jsdoc/valid-types -- Bug */ /** * @type {(( * cfg?: { * mergeSettings?: boolean, - * config?: `flat/${ConfigGroups}${ConfigVariants}${ErrorLevelVariants}`, + * config?: `flat/${import('./index-cjs.js').ConfigGroups}${import('./index-cjs.js').ConfigVariants}${import('./index-cjs.js').ErrorLevelVariants}`, * settings?: Partial * } * ) => import('eslint').Linter.Config) & import('eslint').ESLint.Plugin & { - * configs: Record<`flat/${ConfigGroups}${ConfigVariants}${ErrorLevelVariants}`, + * configs: Record<`flat/${import('./index-cjs.js').ConfigGroups}${import('./index-cjs.js').ConfigVariants}${import('./index-cjs.js').ErrorLevelVariants}`, * import('eslint').Linter.Config> * }} */ @@ -595,5 +73,3 @@ export const jsdoc = function (cfg) { return outputConfig; }; - -export default index; From 005c3fd3ea648cb7060d4361b74c095cba73b91a Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 9 Sep 2025 06:22:59 +0800 Subject: [PATCH 056/189] fix: ensure docs reflect proper usage of new jsdoc export function (#1480) --- .README/README.md | 4 ++-- README.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.README/README.md b/.README/README.md index 0d46b21bb..fae493141 100644 --- a/.README/README.md +++ b/.README/README.md @@ -35,7 +35,7 @@ This is the currently recommended approach. import {jsdoc} from 'eslint-plugin-jsdoc'; export default [ - ...jsdoc({ + jsdoc({ config: 'flat/recommended', }) ]; @@ -47,7 +47,7 @@ Or with settings supplied: import {jsdoc} from 'eslint-plugin-jsdoc'; export default [ - ...jsdoc({ + jsdoc({ config: 'flat/recommended', // Uncomment this if you wish your `settings` to overwrite the config's own settings; // otherwise, the default behavior is to merge recursively diff --git a/README.md b/README.md index 79e91f6d6..b2afcd408 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ This is the currently recommended approach. import {jsdoc} from 'eslint-plugin-jsdoc'; export default [ - ...jsdoc({ + jsdoc({ config: 'flat/recommended', }) ]; @@ -66,7 +66,7 @@ Or with settings supplied: import {jsdoc} from 'eslint-plugin-jsdoc'; export default [ - ...jsdoc({ + jsdoc({ config: 'flat/recommended', // Uncomment this if you wish your `settings` to overwrite the config's own settings; // otherwise, the default behavior is to merge recursively From e433f7d53c558a59f4deedb62579d6fa0a391176 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 9 Sep 2025 09:00:52 +0800 Subject: [PATCH 057/189] fix(typescript): remove properties from return value of config function (#1481) --- src/index-cjs.js | 2 +- src/index.js | 6 +----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/index-cjs.js b/src/index-cjs.js index 5c50a65e6..25a94c798 100644 --- a/src/index-cjs.js +++ b/src/index-cjs.js @@ -142,7 +142,7 @@ const createRecommendedRuleset = (warnOrError, flatName) => { ...(flatName ? { name: 'jsdoc/' + flatName, } : {}), - // @ts-expect-error Ok + // @ts-expect-error ESLint 8 plugins plugins: flatName ? { jsdoc: index, diff --git a/src/index.js b/src/index.js index 7e946f4c5..f7a897143 100644 --- a/src/index.js +++ b/src/index.js @@ -14,13 +14,9 @@ export default index; * config?: `flat/${import('./index-cjs.js').ConfigGroups}${import('./index-cjs.js').ConfigVariants}${import('./index-cjs.js').ErrorLevelVariants}`, * settings?: Partial * } - * ) => import('eslint').Linter.Config) & import('eslint').ESLint.Plugin & { - * configs: Record<`flat/${import('./index-cjs.js').ConfigGroups}${import('./index-cjs.js').ConfigVariants}${import('./index-cjs.js').ErrorLevelVariants}`, - * import('eslint').Linter.Config> - * }} + * ) => import('eslint').Linter.Config)} */ /* eslint-enable jsdoc/valid-types -- Bug */ -// @ts-expect-error Ok export const jsdoc = function (cfg) { /** @type {import('eslint').Linter.Config} */ let outputConfig = { From 9261da0153a6fcc76b6a87eb00907f168cfe4f38 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 9 Sep 2025 20:57:36 +0800 Subject: [PATCH 058/189] fix(typescript): attempt to fix types export (#1483) --- package.json | 23 +- pnpm-lock.yaml | 97 ++++++ src/bin/buildEntryFileForTS.js | 16 + src/index-esm.js | 75 +++++ src/index.js | 531 ++++++++++++++++++++++++++++++++- 5 files changed, 732 insertions(+), 10 deletions(-) create mode 100644 src/bin/buildEntryFileForTS.js create mode 100644 src/index-esm.js diff --git a/package.json b/package.json index 7d8f8ff7c..0a1e0aa64 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ }, "description": "JSDoc linting rules for ESLint.", "devDependencies": { + "@arethetypeswrong/cli": "^0.18.2", "@babel/cli": "^7.28.3", "@babel/core": "^7.28.4", "@babel/eslint-parser": "^7.28.4", @@ -83,19 +84,24 @@ "types": "./dist/index.d.ts", "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./src/index.js", - "require": "./dist/index-cjs.cjs" + "import": { + "types": "./dist/index.d.ts", + "default": "./src/index.js" + }, + "require": { + "types": "./dist/index-cjs.d.ts", + "default": "./dist/index-cjs.cjs" + } }, "./getJsdocProcessorPlugin.js": { "types": "./dist/getJsdocProcessorPlugin.d.ts", - "import": "./dist/getJsdocProcessorPlugin.cjs", - "require": "./src/getJsdocProcessorPlugin.js" + "import": "./src/getJsdocProcessorPlugin.js", + "require": "./dist/getJsdocProcessorPlugin.cjs" }, "./iterateJsdoc.js": { "types": "./dist/iterateJsdoc.d.ts", - "import": "./dist/iterateJsdoc.cjs", - "require": "./src/iterateJsdoc.js" + "import": "./src/iterateJsdoc.js", + "require": "./dist/iterateJsdoc.cjs" } }, "name": "eslint-plugin-jsdoc", @@ -137,7 +143,8 @@ "scripts": { "tsc": "tsc", "tsc-build": "tsc -p tsconfig-prod.json", - "build": "rimraf ./dist && NODE_ENV=production babel ./src --out-file-extension .cjs --out-dir ./dist --copy-files --source-maps --ignore ./src/bin/*.js --no-copy-ignored && replace 'require\\(\"\\.(.*?)\\.[^.]*?\"\\)' 'require(\".$1.cjs\")' 'dist' -r --include=\"*.cjs\" && pnpm tsc-build", + "build": "node ./src/bin/buildEntryFileForTS.js && rimraf ./dist && NODE_ENV=production babel ./src --out-file-extension .cjs --out-dir ./dist --copy-files --source-maps --ignore ./src/bin/*.js --no-copy-ignored && replace 'require\\(\"\\.(.*?)\\.[^.]*?\"\\)' 'require(\".$1.cjs\")' 'dist' -r --include=\"*.cjs\" && pnpm tsc-build", + "attw": "attw --pack .", "check-docs": "node ./src/bin/generateDocs.js --check", "create-docs": "pnpm run create-options && node ./src/bin/generateDocs.js", "create-rule": "node ./src/bin/generateRule.js", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b3fdbcd49..95a2183ef 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -42,6 +42,9 @@ importers: specifier: ^4.0.0 version: 4.0.0 devDependencies: + '@arethetypeswrong/cli': + specifier: ^0.18.2 + version: 0.18.2 '@babel/cli': specifier: ^7.28.3 version: 7.28.3(@babel/core@7.28.4) @@ -183,6 +186,18 @@ importers: packages: + '@andrewbranch/untar.js@1.0.3': + resolution: {integrity: sha512-Jh15/qVmrLGhkKJBdXlK1+9tY4lZruYjsgkDFj08ZmDiWVBLJcqkok7Z0/R0In+i1rScBpJlSvrTS2Lm41Pbnw==} + + '@arethetypeswrong/cli@0.18.2': + resolution: {integrity: sha512-PcFM20JNlevEDKBg4Re29Rtv2xvjvQZzg7ENnrWFSS0PHgdP2njibVFw+dRUhNkPgNfac9iUqO0ohAXqQL4hbw==} + engines: {node: '>=20'} + hasBin: true + + '@arethetypeswrong/core@0.18.2': + resolution: {integrity: sha512-GiwTmBFOU1/+UVNqqCGzFJYfBXEytUkiI+iRZ6Qx7KmUVtLm00sYySkfe203C9QtPG11yOz1ZaMek8dT/xnlgg==} + engines: {node: '>=20'} + '@babel/cli@7.28.3': resolution: {integrity: sha512-n1RU5vuCX0CsaqaXm9I0KUCNKNQMy5epmzl/xdSSm70bSqhg9GWhgeosypyQLc0bK24+Xpk1WGzZlI9pJtkZdg==} engines: {node: '>=6.9.0'} @@ -722,6 +737,9 @@ packages: resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} + '@braidai/lang@1.1.2': + resolution: {integrity: sha512-qBcknbBufNHlui137Hft8xauQMTZDKdophmLFv05r2eNmdIv/MlPuP4TdUknHG68UdWLgVZwgxVe735HzJNIwA==} + '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} @@ -1013,6 +1031,9 @@ packages: '@jridgewell/trace-mapping@0.3.30': resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==} + '@loaderkit/resolve@1.0.4': + resolution: {integrity: sha512-rJzYKVcV4dxJv+vW6jlvagF8zvGxHJ2+HTr1e2qOejfmGhAApgJHl8Aog4mMszxceTRiKTTbnpgmTO1bEZHV/A==} + '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} @@ -1844,6 +1865,9 @@ packages: resolution: {integrity: sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==} engines: {node: '>=8'} + cjs-module-lexer@1.4.3: + resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} + clean-regexp@1.0.0: resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} engines: {node: '>=4'} @@ -1907,6 +1931,10 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} + commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + commander@14.0.0: resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==} engines: {node: '>=20'} @@ -2661,6 +2689,9 @@ packages: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} + fflate@0.8.2: + resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} + figures@2.0.0: resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} engines: {node: '>=4'} @@ -3617,6 +3648,11 @@ packages: engines: {node: '>= 18'} hasBin: true + marked@9.1.6: + resolution: {integrity: sha512-jcByLnIFkd5gSXZmjNvS1TlmRhCXZjIzHYlaGkPlLIekG55JDR2Z4va9tZwCiP+/RDERiNhMOFu01xd6O5ct1Q==} + engines: {node: '>= 16'} + hasBin: true + math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} @@ -4845,6 +4881,11 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' + typescript@5.6.1-rc: + resolution: {integrity: sha512-E3b2+1zEFu84jB0YQi9BORDjz9+jGbwwy1Zi3G0LUNw7a7cePUrHMRNy8aPh53nXpkFGVHSxIZo5vKTfYaFiBQ==} + engines: {node: '>=14.17'} + hasBin: true + typescript@5.9.2: resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} engines: {node: '>=14.17'} @@ -4962,6 +5003,10 @@ packages: validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + validate-npm-package-name@5.0.1: + resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + verror@1.10.0: resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} engines: {'0': node >=0.6.0} @@ -5122,6 +5167,29 @@ packages: snapshots: + '@andrewbranch/untar.js@1.0.3': {} + + '@arethetypeswrong/cli@0.18.2': + dependencies: + '@arethetypeswrong/core': 0.18.2 + chalk: 4.1.2 + cli-table3: 0.6.5 + commander: 10.0.1 + marked: 9.1.6 + marked-terminal: 7.3.0(marked@9.1.6) + semver: 7.7.2 + + '@arethetypeswrong/core@0.18.2': + dependencies: + '@andrewbranch/untar.js': 1.0.3 + '@loaderkit/resolve': 1.0.4 + cjs-module-lexer: 1.4.3 + fflate: 0.8.2 + lru-cache: 11.1.0 + semver: 7.7.2 + typescript: 5.6.1-rc + validate-npm-package-name: 5.0.1 + '@babel/cli@7.28.3(@babel/core@7.28.4)': dependencies: '@babel/core': 7.28.4 @@ -5835,6 +5903,8 @@ snapshots: '@bcoe/v8-coverage@1.0.2': {} + '@braidai/lang@1.1.2': {} + '@colors/colors@1.5.0': optional: true @@ -6260,6 +6330,10 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 + '@loaderkit/resolve@1.0.4': + dependencies: + '@braidai/lang': 1.1.2 + '@napi-rs/wasm-runtime@0.2.12': dependencies: '@emnapi/core': 1.4.5 @@ -7235,6 +7309,8 @@ snapshots: ci-info@4.3.0: {} + cjs-module-lexer@1.4.3: {} + clean-regexp@1.0.0: dependencies: escape-string-regexp: 1.0.5 @@ -7310,6 +7386,8 @@ snapshots: dependencies: delayed-stream: 1.0.0 + commander@10.0.1: {} + commander@14.0.0: {} commander@6.2.1: {} @@ -8304,6 +8382,8 @@ snapshots: node-domexception: 1.0.0 web-streams-polyfill: 3.3.3 + fflate@0.8.2: {} + figures@2.0.0: dependencies: escape-string-regexp: 1.0.5 @@ -9309,10 +9389,23 @@ snapshots: node-emoji: 2.2.0 supports-hyperlinks: 3.2.0 + marked-terminal@7.3.0(marked@9.1.6): + dependencies: + ansi-escapes: 7.0.0 + ansi-regex: 6.1.0 + chalk: 5.5.0 + cli-highlight: 2.1.11 + cli-table3: 0.6.5 + marked: 9.1.6 + node-emoji: 2.2.0 + supports-hyperlinks: 3.2.0 + marked@13.0.3: {} marked@15.0.12: {} + marked@9.1.6: {} + math-intrinsics@1.1.0: {} meow@13.2.0: {} @@ -10588,6 +10681,8 @@ snapshots: transitivePeerDependencies: - supports-color + typescript@5.6.1-rc: {} + typescript@5.9.2: {} uglify-js@3.19.3: @@ -10707,6 +10802,8 @@ snapshots: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 + validate-npm-package-name@5.0.1: {} + verror@1.10.0: dependencies: assert-plus: 1.0.0 diff --git a/src/bin/buildEntryFileForTS.js b/src/bin/buildEntryFileForTS.js new file mode 100644 index 000000000..a139c1c1b --- /dev/null +++ b/src/bin/buildEntryFileForTS.js @@ -0,0 +1,16 @@ +import { + readFile, + writeFile, +} from 'node:fs/promises'; + +const { + dirname, +} = import.meta; +const dataToEmbed = await readFile(dirname + '/../index-cjs.js', 'utf8'); +const templateContent = await readFile(dirname + '/../index-esm.js', 'utf8'); + +const finalContent = '/* AUTO-GENERATED BY build SCRIPT */\n' + templateContent.replace( + /\/\/ BEGIN REPLACE[\s\S]*\/\/ END REPLACE\n/v, + `${dataToEmbed}`, +); +await writeFile(dirname + '/../index.js', finalContent); diff --git a/src/index-esm.js b/src/index-esm.js new file mode 100644 index 000000000..6099369d8 --- /dev/null +++ b/src/index-esm.js @@ -0,0 +1,75 @@ +/* eslint-disable perfectionist/sort-imports -- For auto-generate; Do not remove */ +import { + merge, +} from 'object-deep-merge'; + +// BEGIN REPLACE +import index from './index-cjs.js'; + +// eslint-disable-next-line unicorn/prefer-export-from --- Reusing `index` +export default index; +// END REPLACE + +/* eslint-disable jsdoc/valid-types -- Bug */ +/** + * @type {(( + * cfg?: { + * mergeSettings?: boolean, + * config?: `flat/${import('./index-cjs.js').ConfigGroups}${import('./index-cjs.js').ConfigVariants}${import('./index-cjs.js').ErrorLevelVariants}`, + * settings?: Partial + * } + * ) => import('eslint').Linter.Config)} + */ +/* eslint-enable jsdoc/valid-types -- Bug */ +export const jsdoc = function (cfg) { + /** @type {import('eslint').Linter.Config} */ + let outputConfig = { + plugins: { + jsdoc: index, + }, + }; + if ( + cfg?.config + ) { + // @ts-expect-error Security check + if (cfg.config === '__proto__') { + throw new TypeError('Disallowed config value'); + } + + outputConfig = index.configs[cfg.config]; + } + + outputConfig.settings = { + jsdoc: cfg?.mergeSettings === false ? + cfg.settings : + merge( + {}, + cfg?.settings ?? {}, + cfg?.config?.includes('recommended') ? + { + // We may need to drop these for "typescript" (non-"flavor") configs, + // if support is later added: https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html + structuredTags: { + next: { + required: [ + 'type', + ], + }, + throws: { + required: [ + 'type', + ], + }, + yields: { + required: [ + 'type', + ], + }, + }, + } : + {}, + ), + }; + + return outputConfig; +}; diff --git a/src/index.js b/src/index.js index f7a897143..eba24c658 100644 --- a/src/index.js +++ b/src/index.js @@ -1,9 +1,536 @@ -import index from './index-cjs.js'; +/* AUTO-GENERATED BY build SCRIPT */ +/* eslint-disable perfectionist/sort-imports -- For auto-generate; Do not remove */ import { merge, } from 'object-deep-merge'; -// eslint-disable-next-line unicorn/prefer-export-from --- Reusing `index` +import { + getJsdocProcessorPlugin, +} from './getJsdocProcessorPlugin.js'; +import checkAccess from './rules/checkAccess.js'; +import checkAlignment from './rules/checkAlignment.js'; +import checkExamples from './rules/checkExamples.js'; +import checkIndentation from './rules/checkIndentation.js'; +import checkLineAlignment from './rules/checkLineAlignment.js'; +import checkParamNames from './rules/checkParamNames.js'; +import checkPropertyNames from './rules/checkPropertyNames.js'; +import checkSyntax from './rules/checkSyntax.js'; +import checkTagNames from './rules/checkTagNames.js'; +import checkTemplateNames from './rules/checkTemplateNames.js'; +import checkTypes from './rules/checkTypes.js'; +import checkValues from './rules/checkValues.js'; +import convertToJsdocComments from './rules/convertToJsdocComments.js'; +import emptyTags from './rules/emptyTags.js'; +import implementsOnClasses from './rules/implementsOnClasses.js'; +import importsAsDependencies from './rules/importsAsDependencies.js'; +import informativeDocs from './rules/informativeDocs.js'; +import linesBeforeBlock from './rules/linesBeforeBlock.js'; +import matchDescription from './rules/matchDescription.js'; +import matchName from './rules/matchName.js'; +import multilineBlocks from './rules/multilineBlocks.js'; +import noBadBlocks from './rules/noBadBlocks.js'; +import noBlankBlockDescriptions from './rules/noBlankBlockDescriptions.js'; +import noBlankBlocks from './rules/noBlankBlocks.js'; +import noDefaults from './rules/noDefaults.js'; +import noMissingSyntax from './rules/noMissingSyntax.js'; +import noMultiAsterisks from './rules/noMultiAsterisks.js'; +import noRestrictedSyntax from './rules/noRestrictedSyntax.js'; +import noTypes from './rules/noTypes.js'; +import noUndefinedTypes from './rules/noUndefinedTypes.js'; +import requireAsteriskPrefix from './rules/requireAsteriskPrefix.js'; +import requireDescription from './rules/requireDescription.js'; +import requireDescriptionCompleteSentence from './rules/requireDescriptionCompleteSentence.js'; +import requireExample from './rules/requireExample.js'; +import requireFileOverview from './rules/requireFileOverview.js'; +import requireHyphenBeforeParamDescription from './rules/requireHyphenBeforeParamDescription.js'; +import requireJsdoc from './rules/requireJsdoc.js'; +import requireParam from './rules/requireParam.js'; +import requireParamDescription from './rules/requireParamDescription.js'; +import requireParamName from './rules/requireParamName.js'; +import requireParamType from './rules/requireParamType.js'; +import requireProperty from './rules/requireProperty.js'; +import requirePropertyDescription from './rules/requirePropertyDescription.js'; +import requirePropertyName from './rules/requirePropertyName.js'; +import requirePropertyType from './rules/requirePropertyType.js'; +import requireReturns from './rules/requireReturns.js'; +import requireReturnsCheck from './rules/requireReturnsCheck.js'; +import requireReturnsDescription from './rules/requireReturnsDescription.js'; +import requireReturnsType from './rules/requireReturnsType.js'; +import requireTemplate from './rules/requireTemplate.js'; +import requireThrows from './rules/requireThrows.js'; +import requireYields from './rules/requireYields.js'; +import requireYieldsCheck from './rules/requireYieldsCheck.js'; +import sortTags from './rules/sortTags.js'; +import tagLines from './rules/tagLines.js'; +import textEscaping from './rules/textEscaping.js'; +import validTypes from './rules/validTypes.js'; + +/* eslint-disable jsdoc/valid-types -- Bug */ +/** + * @typedef {"recommended" | "stylistic" | "contents" | "logical" | "requirements"} ConfigGroups + * @typedef {"" | "-typescript" | "-typescript-flavor"} ConfigVariants + * @typedef {"" | "-error"} ErrorLevelVariants + * @type {import('eslint').ESLint.Plugin & { + * configs: Record<`flat/${ConfigGroups}${ConfigVariants}${ErrorLevelVariants}`, + * import('eslint').Linter.Config> + * }} + */ +const index = {}; +/* eslint-enable jsdoc/valid-types -- Bug */ +index.configs = {}; +index.rules = { + 'check-access': checkAccess, + 'check-alignment': checkAlignment, + 'check-examples': checkExamples, + 'check-indentation': checkIndentation, + 'check-line-alignment': checkLineAlignment, + 'check-param-names': checkParamNames, + 'check-property-names': checkPropertyNames, + 'check-syntax': checkSyntax, + 'check-tag-names': checkTagNames, + 'check-template-names': checkTemplateNames, + 'check-types': checkTypes, + 'check-values': checkValues, + 'convert-to-jsdoc-comments': convertToJsdocComments, + 'empty-tags': emptyTags, + 'implements-on-classes': implementsOnClasses, + 'imports-as-dependencies': importsAsDependencies, + 'informative-docs': informativeDocs, + 'lines-before-block': linesBeforeBlock, + 'match-description': matchDescription, + 'match-name': matchName, + 'multiline-blocks': multilineBlocks, + 'no-bad-blocks': noBadBlocks, + 'no-blank-block-descriptions': noBlankBlockDescriptions, + 'no-blank-blocks': noBlankBlocks, + 'no-defaults': noDefaults, + 'no-missing-syntax': noMissingSyntax, + 'no-multi-asterisks': noMultiAsterisks, + 'no-restricted-syntax': noRestrictedSyntax, + 'no-types': noTypes, + 'no-undefined-types': noUndefinedTypes, + 'require-asterisk-prefix': requireAsteriskPrefix, + 'require-description': requireDescription, + 'require-description-complete-sentence': requireDescriptionCompleteSentence, + 'require-example': requireExample, + 'require-file-overview': requireFileOverview, + 'require-hyphen-before-param-description': requireHyphenBeforeParamDescription, + 'require-jsdoc': requireJsdoc, + 'require-param': requireParam, + 'require-param-description': requireParamDescription, + 'require-param-name': requireParamName, + 'require-param-type': requireParamType, + 'require-property': requireProperty, + 'require-property-description': requirePropertyDescription, + 'require-property-name': requirePropertyName, + 'require-property-type': requirePropertyType, + 'require-returns': requireReturns, + 'require-returns-check': requireReturnsCheck, + 'require-returns-description': requireReturnsDescription, + 'require-returns-type': requireReturnsType, + 'require-template': requireTemplate, + 'require-throws': requireThrows, + 'require-yields': requireYields, + 'require-yields-check': requireYieldsCheck, + 'sort-tags': sortTags, + 'tag-lines': tagLines, + 'text-escaping': textEscaping, + 'valid-types': validTypes, +}; + +/** + * @param {"warn"|"error"} warnOrError + * @param {string} [flatName] + * @returns {import('eslint').Linter.Config} + */ +const createRecommendedRuleset = (warnOrError, flatName) => { + return { + ...(flatName ? { + name: 'jsdoc/' + flatName, + } : {}), + // @ts-expect-error ESLint 8 plugins + plugins: + flatName ? { + jsdoc: index, + } : [ + 'jsdoc', + ], + rules: { + 'jsdoc/check-access': warnOrError, + 'jsdoc/check-alignment': warnOrError, + 'jsdoc/check-examples': 'off', + 'jsdoc/check-indentation': 'off', + 'jsdoc/check-line-alignment': 'off', + 'jsdoc/check-param-names': warnOrError, + 'jsdoc/check-property-names': warnOrError, + 'jsdoc/check-syntax': 'off', + 'jsdoc/check-tag-names': warnOrError, + 'jsdoc/check-template-names': 'off', + 'jsdoc/check-types': warnOrError, + 'jsdoc/check-values': warnOrError, + 'jsdoc/convert-to-jsdoc-comments': 'off', + 'jsdoc/empty-tags': warnOrError, + 'jsdoc/implements-on-classes': warnOrError, + 'jsdoc/imports-as-dependencies': 'off', + 'jsdoc/informative-docs': 'off', + 'jsdoc/lines-before-block': 'off', + 'jsdoc/match-description': 'off', + 'jsdoc/match-name': 'off', + 'jsdoc/multiline-blocks': warnOrError, + 'jsdoc/no-bad-blocks': 'off', + 'jsdoc/no-blank-block-descriptions': 'off', + 'jsdoc/no-blank-blocks': 'off', + 'jsdoc/no-defaults': warnOrError, + 'jsdoc/no-missing-syntax': 'off', + 'jsdoc/no-multi-asterisks': warnOrError, + 'jsdoc/no-restricted-syntax': 'off', + 'jsdoc/no-types': 'off', + 'jsdoc/no-undefined-types': warnOrError, + 'jsdoc/require-asterisk-prefix': 'off', + 'jsdoc/require-description': 'off', + 'jsdoc/require-description-complete-sentence': 'off', + 'jsdoc/require-example': 'off', + 'jsdoc/require-file-overview': 'off', + 'jsdoc/require-hyphen-before-param-description': 'off', + 'jsdoc/require-jsdoc': warnOrError, + 'jsdoc/require-param': warnOrError, + 'jsdoc/require-param-description': warnOrError, + 'jsdoc/require-param-name': warnOrError, + 'jsdoc/require-param-type': warnOrError, + 'jsdoc/require-property': warnOrError, + 'jsdoc/require-property-description': warnOrError, + 'jsdoc/require-property-name': warnOrError, + 'jsdoc/require-property-type': warnOrError, + 'jsdoc/require-returns': warnOrError, + 'jsdoc/require-returns-check': warnOrError, + 'jsdoc/require-returns-description': warnOrError, + 'jsdoc/require-returns-type': warnOrError, + 'jsdoc/require-template': 'off', + 'jsdoc/require-throws': 'off', + 'jsdoc/require-yields': warnOrError, + 'jsdoc/require-yields-check': warnOrError, + 'jsdoc/sort-tags': 'off', + 'jsdoc/tag-lines': warnOrError, + 'jsdoc/text-escaping': 'off', + 'jsdoc/valid-types': warnOrError, + }, + }; +}; + +/** + * @param {"warn"|"error"} warnOrError + * @param {string} [flatName] + * @returns {import('eslint').Linter.Config} + */ +const createRecommendedTypeScriptRuleset = (warnOrError, flatName) => { + const ruleset = createRecommendedRuleset(warnOrError, flatName); + + return { + ...ruleset, + rules: { + ...ruleset.rules, + /* eslint-disable @stylistic/indent -- Extra indent to avoid use by auto-rule-editing */ + 'jsdoc/check-tag-names': [ + warnOrError, { + typed: true, + }, + ], + 'jsdoc/no-types': warnOrError, + 'jsdoc/no-undefined-types': 'off', + 'jsdoc/require-param-type': 'off', + 'jsdoc/require-property-type': 'off', + 'jsdoc/require-returns-type': 'off', + /* eslint-enable @stylistic/indent */ + }, + }; +}; + +/** + * @param {"warn"|"error"} warnOrError + * @param {string} [flatName] + * @returns {import('eslint').Linter.Config} + */ +const createRecommendedTypeScriptFlavorRuleset = (warnOrError, flatName) => { + const ruleset = createRecommendedRuleset(warnOrError, flatName); + + return { + ...ruleset, + rules: { + ...ruleset.rules, + /* eslint-disable @stylistic/indent -- Extra indent to avoid use by auto-rule-editing */ + 'jsdoc/no-undefined-types': 'off', + /* eslint-enable @stylistic/indent */ + }, + }; +}; + +/** + * @param {(string | unknown[])[]} ruleNames + */ +const createStandaloneRulesetFactory = (ruleNames) => { + /** + * @param {"warn"|"error"} warnOrError + * @param {string} [flatName] + * @returns {import('eslint').Linter.Config} + */ + return (warnOrError, flatName) => { + return { + name: 'jsdoc/' + flatName, + plugins: { + jsdoc: index, + }, + rules: Object.fromEntries( + ruleNames.map( + (ruleName) => { + return (typeof ruleName === 'string' ? + [ + ruleName, warnOrError, + ] : + [ + ruleName[0], [ + warnOrError, ...ruleName.slice(1), + ], + ]); + }, + ), + ), + }; + }; +}; + +const contentsRules = [ + 'jsdoc/informative-docs', + 'jsdoc/match-description', + 'jsdoc/no-blank-block-descriptions', + 'jsdoc/no-blank-blocks', + [ + 'jsdoc/text-escaping', { + escapeHTML: true, + }, + ], +]; + +const createContentsTypescriptRuleset = createStandaloneRulesetFactory(contentsRules); + +const createContentsTypescriptFlavorRuleset = createStandaloneRulesetFactory(contentsRules); + +const logicalRules = [ + 'jsdoc/check-access', + 'jsdoc/check-param-names', + 'jsdoc/check-property-names', + 'jsdoc/check-syntax', + 'jsdoc/check-tag-names', + 'jsdoc/check-template-names', + 'jsdoc/check-types', + 'jsdoc/check-values', + 'jsdoc/empty-tags', + 'jsdoc/implements-on-classes', + 'jsdoc/require-returns-check', + 'jsdoc/require-yields-check', + 'jsdoc/no-bad-blocks', + 'jsdoc/no-defaults', + 'jsdoc/no-types', + 'jsdoc/no-undefined-types', + 'jsdoc/valid-types', +]; + +const createLogicalTypescriptRuleset = createStandaloneRulesetFactory(logicalRules); + +const createLogicalTypescriptFlavorRuleset = createStandaloneRulesetFactory(logicalRules); + +const requirementsRules = [ + 'jsdoc/require-example', + 'jsdoc/require-jsdoc', + 'jsdoc/require-param', + 'jsdoc/require-param-description', + 'jsdoc/require-param-name', + 'jsdoc/require-property', + 'jsdoc/require-property-description', + 'jsdoc/require-property-name', + 'jsdoc/require-returns', + 'jsdoc/require-returns-description', + 'jsdoc/require-yields', +]; + +const createRequirementsTypeScriptRuleset = createStandaloneRulesetFactory(requirementsRules); + +const createRequirementsTypeScriptFlavorRuleset = createStandaloneRulesetFactory([ + ...requirementsRules, + 'jsdoc/require-param-type', + 'jsdoc/require-property-type', + 'jsdoc/require-returns-type', + 'jsdoc/require-template', +]); + +const stylisticRules = [ + 'jsdoc/check-alignment', + 'jsdoc/check-line-alignment', + 'jsdoc/lines-before-block', + 'jsdoc/multiline-blocks', + 'jsdoc/no-multi-asterisks', + 'jsdoc/require-asterisk-prefix', + [ + 'jsdoc/require-hyphen-before-param-description', 'never', + ], + 'jsdoc/tag-lines', +]; + +const createStylisticTypeScriptRuleset = createStandaloneRulesetFactory(stylisticRules); + +const createStylisticTypeScriptFlavorRuleset = createStandaloneRulesetFactory(stylisticRules); + +/* c8 ignore next 3 -- TS */ +if (!index.configs) { + throw new Error('TypeScript guard'); +} + +index.configs.recommended = createRecommendedRuleset('warn'); +index.configs['recommended-error'] = createRecommendedRuleset('error'); +index.configs['recommended-typescript'] = createRecommendedTypeScriptRuleset('warn'); +index.configs['recommended-typescript-error'] = createRecommendedTypeScriptRuleset('error'); +index.configs['recommended-typescript-flavor'] = createRecommendedTypeScriptFlavorRuleset('warn'); +index.configs['recommended-typescript-flavor-error'] = createRecommendedTypeScriptFlavorRuleset('error'); + +index.configs['flat/recommended'] = createRecommendedRuleset('warn', 'flat/recommended'); +index.configs['flat/recommended-error'] = createRecommendedRuleset('error', 'flat/recommended-error'); +index.configs['flat/recommended-typescript'] = createRecommendedTypeScriptRuleset('warn', 'flat/recommended-typescript'); +index.configs['flat/recommended-typescript-error'] = createRecommendedTypeScriptRuleset('error', 'flat/recommended-typescript-error'); +index.configs['flat/recommended-typescript-flavor'] = createRecommendedTypeScriptFlavorRuleset('warn', 'flat/recommended-typescript-flavor'); +index.configs['flat/recommended-typescript-flavor-error'] = createRecommendedTypeScriptFlavorRuleset('error', 'flat/recommended-typescript-flavor-error'); + +index.configs['flat/contents-typescript'] = createContentsTypescriptRuleset('warn', 'flat/contents-typescript'); +index.configs['flat/contents-typescript-error'] = createContentsTypescriptRuleset('error', 'flat/contents-typescript-error'); +index.configs['flat/contents-typescript-flavor'] = createContentsTypescriptFlavorRuleset('warn', 'flat/contents-typescript-flavor'); +index.configs['flat/contents-typescript-flavor-error'] = createContentsTypescriptFlavorRuleset('error', 'flat/contents-typescript-error-flavor'); +index.configs['flat/logical-typescript'] = createLogicalTypescriptRuleset('warn', 'flat/logical-typescript'); +index.configs['flat/logical-typescript-error'] = createLogicalTypescriptRuleset('error', 'flat/logical-typescript-error'); +index.configs['flat/logical-typescript-flavor'] = createLogicalTypescriptFlavorRuleset('warn', 'flat/logical-typescript-flavor'); +index.configs['flat/logical-typescript-flavor-error'] = createLogicalTypescriptFlavorRuleset('error', 'flat/logical-typescript-error-flavor'); +index.configs['flat/requirements-typescript'] = createRequirementsTypeScriptRuleset('warn', 'flat/requirements-typescript'); +index.configs['flat/requirements-typescript-error'] = createRequirementsTypeScriptRuleset('error', 'flat/requirements-typescript-error'); +index.configs['flat/requirements-typescript-flavor'] = createRequirementsTypeScriptFlavorRuleset('warn', 'flat/requirements-typescript-flavor'); +index.configs['flat/requirements-typescript-flavor-error'] = createRequirementsTypeScriptFlavorRuleset('error', 'flat/requirements-typescript-error-flavor'); +index.configs['flat/stylistic-typescript'] = createStylisticTypeScriptRuleset('warn', 'flat/stylistic-typescript'); +index.configs['flat/stylistic-typescript-error'] = createStylisticTypeScriptRuleset('error', 'flat/stylistic-typescript-error'); +index.configs['flat/stylistic-typescript-flavor'] = createStylisticTypeScriptFlavorRuleset('warn', 'flat/stylistic-typescript-flavor'); +index.configs['flat/stylistic-typescript-flavor-error'] = createStylisticTypeScriptFlavorRuleset('error', 'flat/stylistic-typescript-error-flavor'); + +index.configs.examples = /** @type {import('eslint').Linter.Config[]} */ ([ + { + files: [ + '**/*.js', + ], + name: 'jsdoc/examples/processor', + plugins: { + examples: getJsdocProcessorPlugin(), + }, + processor: 'examples/examples', + }, + { + files: [ + '**/*.md/*.js', + ], + name: 'jsdoc/examples/rules', + rules: { + // "always" newline rule at end unlikely in sample code + 'eol-last': 0, + + // Wouldn't generally expect example paths to resolve relative to JS file + 'import/no-unresolved': 0, + + // Snippets likely too short to always include import/export info + 'import/unambiguous': 0, + + 'jsdoc/require-file-overview': 0, + + // The end of a multiline comment would end the comment the example is in. + 'jsdoc/require-jsdoc': 0, + + // Unlikely to have inadvertent debugging within examples + 'no-console': 0, + + // Often wish to start `@example` code after newline; also may use + // empty lines for spacing + 'no-multiple-empty-lines': 0, + + // Many variables in examples will be `undefined` + 'no-undef': 0, + + // Common to define variables for clarity without always using them + 'no-unused-vars': 0, + + // See import/no-unresolved + 'node/no-missing-import': 0, + 'node/no-missing-require': 0, + + // Can generally look nicer to pad a little even if code imposes more stringency + 'padded-blocks': 0, + }, + }, +]); + +index.configs['default-expressions'] = /** @type {import('eslint').Linter.Config[]} */ ([ + { + files: [ + '**/*.js', + ], + name: 'jsdoc/default-expressions/processor', + plugins: { + examples: getJsdocProcessorPlugin({ + checkDefaults: true, + checkParams: true, + checkProperties: true, + }), + }, + processor: 'examples/examples', + }, + { + files: [ + '**/*.jsdoc-defaults', '**/*.jsdoc-params', '**/*.jsdoc-properties', + ], + name: 'jsdoc/default-expressions/rules', + rules: { + ...index.configs.examples[1].rules, + 'chai-friendly/no-unused-expressions': 0, + 'no-empty-function': 0, + 'no-new': 0, + 'no-unused-expressions': 0, + quotes: [ + 'error', 'double', + ], + semi: [ + 'error', 'never', + ], + strict: 0, + }, + }, +]); + +index.configs['examples-and-default-expressions'] = /** @type {import('eslint').Linter.Config[]} */ ([ + { + name: 'jsdoc/examples-and-default-expressions', + plugins: { + examples: getJsdocProcessorPlugin({ + checkDefaults: true, + checkParams: true, + checkProperties: true, + }), + }, + }, + ...index.configs.examples.map((config) => { + return { + ...config, + plugins: {}, + }; + }), + ...index.configs['default-expressions'].map((config) => { + return { + ...config, + plugins: {}, + }; + }), +]); + export default index; /* eslint-disable jsdoc/valid-types -- Bug */ From 23c9791f5c30440a15f085865ab4bf6e659a7325 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 9 Sep 2025 21:25:45 +0800 Subject: [PATCH 059/189] fix(typescript): ensure configs available via config-building function (#1484) --- src/bin/buildEntryFileForTS.js | 4 ++++ src/index.js | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/bin/buildEntryFileForTS.js b/src/bin/buildEntryFileForTS.js index a139c1c1b..0f7e5e425 100644 --- a/src/bin/buildEntryFileForTS.js +++ b/src/bin/buildEntryFileForTS.js @@ -12,5 +12,9 @@ const templateContent = await readFile(dirname + '/../index-esm.js', 'utf8'); const finalContent = '/* AUTO-GENERATED BY build SCRIPT */\n' + templateContent.replace( /\/\/ BEGIN REPLACE[\s\S]*\/\/ END REPLACE\n/v, `${dataToEmbed}`, +).replaceAll( + // When inserted, will be in the same file + 'import(\'./index-cjs.js\').', + '', ); await writeFile(dirname + '/../index.js', finalContent); diff --git a/src/index.js b/src/index.js index eba24c658..758726502 100644 --- a/src/index.js +++ b/src/index.js @@ -538,7 +538,7 @@ export default index; * @type {(( * cfg?: { * mergeSettings?: boolean, - * config?: `flat/${import('./index-cjs.js').ConfigGroups}${import('./index-cjs.js').ConfigVariants}${import('./index-cjs.js').ErrorLevelVariants}`, + * config?: `flat/${ConfigGroups}${ConfigVariants}${ErrorLevelVariants}`, * settings?: Partial * } * ) => import('eslint').Linter.Config)} From ff4a55ccd329a9c9d3e042840f7ad830e4fe6017 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 9 Sep 2025 23:51:31 +0800 Subject: [PATCH 060/189] feat(typescript): allow function to supply TS-aware rules (#1485) --- .README/README.md | 12 +- README.md | 12 +- package.json | 2 + pnpm-lock.yaml | 40 ++ src/bin/generateRuleTypes.js | 37 ++ src/index-esm.js | 7 +- src/index.js | 7 +- src/jsdocUtils.js | 3 +- src/rules.d.ts | 766 +++++++++++++++++++++++++++++++++++ test/index.js | 21 + tsconfig-prod.json | 1 + tsconfig.json | 1 + 12 files changed, 904 insertions(+), 5 deletions(-) create mode 100644 src/bin/generateRuleTypes.js create mode 100644 src/rules.d.ts diff --git a/.README/README.md b/.README/README.md index fae493141..7b8b9b67d 100644 --- a/.README/README.md +++ b/.README/README.md @@ -41,7 +41,7 @@ export default [ ]; ``` -Or with settings supplied: +Or with TypeScript-aware extra rules and settings supplied: ```js import {jsdoc} from 'eslint-plugin-jsdoc'; @@ -49,6 +49,16 @@ import {jsdoc} from 'eslint-plugin-jsdoc'; export default [ jsdoc({ config: 'flat/recommended', + rules: { + 'jsdoc/check-values': [ + 'error', + { + allowedLicenses: [ + 'MIT', 'ISC', + ], + }, + ], + }, // Uncomment this if you wish your `settings` to overwrite the config's own settings; // otherwise, the default behavior is to merge recursively // mergeSettings: false, diff --git a/README.md b/README.md index b2afcd408..963b8ac04 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ export default [ ]; ``` -Or with settings supplied: +Or with TypeScript-aware extra rules and settings supplied: ```js import {jsdoc} from 'eslint-plugin-jsdoc'; @@ -68,6 +68,16 @@ import {jsdoc} from 'eslint-plugin-jsdoc'; export default [ jsdoc({ config: 'flat/recommended', + rules: { + 'jsdoc/check-values': [ + 'error', + { + allowedLicenses: [ + 'MIT', 'ISC', + ], + }, + ], + }, // Uncomment this if you wish your `settings` to overwrite the config's own settings; // otherwise, the default behavior is to merge recursively // mergeSettings: false, diff --git a/package.json b/package.json index 0a1e0aa64..f20983742 100644 --- a/package.json +++ b/package.json @@ -58,6 +58,7 @@ "husky": "^9.1.7", "jsdoc-type-pratt-parser": "^5.1.1", "json-schema": "^0.4.0", + "json-schema-to-typescript": "^15.0.4", "lint-staged": "^16.1.6", "mocha": "^11.7.2", "open-editor": "^5.1.0", @@ -141,6 +142,7 @@ "package-lock.json": "pnpm run install-offline" }, "scripts": { + "ruleTypes": "node ./src/bin/generateRuleTypes.js", "tsc": "tsc", "tsc-build": "tsc -p tsconfig-prod.json", "build": "node ./src/bin/buildEntryFileForTS.js && rimraf ./dist && NODE_ENV=production babel ./src --out-file-extension .cjs --out-dir ./dist --copy-files --source-maps --ignore ./src/bin/*.js --no-copy-ignored && replace 'require\\(\"\\.(.*?)\\.[^.]*?\"\\)' 'require(\".$1.cjs\")' 'dist' -r --include=\"*.cjs\" && pnpm tsc-build", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 95a2183ef..e2416a0a2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -159,6 +159,9 @@ importers: json-schema: specifier: ^0.4.0 version: 0.4.0 + json-schema-to-typescript: + specifier: ^15.0.4 + version: 15.0.4 lint-staged: specifier: ^16.1.6 version: 16.1.6 @@ -189,6 +192,10 @@ packages: '@andrewbranch/untar.js@1.0.3': resolution: {integrity: sha512-Jh15/qVmrLGhkKJBdXlK1+9tY4lZruYjsgkDFj08ZmDiWVBLJcqkok7Z0/R0In+i1rScBpJlSvrTS2Lm41Pbnw==} + '@apidevtools/json-schema-ref-parser@11.9.3': + resolution: {integrity: sha512-60vepv88RwcJtSHrD6MjIL6Ta3SOYbgfnkHb+ppAVK+o9mXprRtulx7VlRl3lN3bbvysAfCS7WMVfhUYemB0IQ==} + engines: {node: '>= 16'} + '@arethetypeswrong/cli@0.18.2': resolution: {integrity: sha512-PcFM20JNlevEDKBg4Re29Rtv2xvjvQZzg7ENnrWFSS0PHgdP2njibVFw+dRUhNkPgNfac9iUqO0ohAXqQL4hbw==} engines: {node: '>=20'} @@ -1031,6 +1038,9 @@ packages: '@jridgewell/trace-mapping@0.3.30': resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==} + '@jsdevtools/ono@7.1.3': + resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} + '@loaderkit/resolve@1.0.4': resolution: {integrity: sha512-rJzYKVcV4dxJv+vW6jlvagF8zvGxHJ2+HTr1e2qOejfmGhAApgJHl8Aog4mMszxceTRiKTTbnpgmTO1bEZHV/A==} @@ -1226,6 +1236,9 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/lodash@4.17.20': + resolution: {integrity: sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==} + '@types/mocha@10.0.10': resolution: {integrity: sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==} @@ -3458,6 +3471,11 @@ packages: json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + json-schema-to-typescript@15.0.4: + resolution: {integrity: sha512-Su9oK8DR4xCmDsLlyvadkXzX6+GGXJpbhwoLtOGArAG61dvbW4YQmSEno2y66ahpIdmLMg6YUf/QHLgiwvkrHQ==} + engines: {node: '>=16.0.0'} + hasBin: true + json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -5169,6 +5187,12 @@ snapshots: '@andrewbranch/untar.js@1.0.3': {} + '@apidevtools/json-schema-ref-parser@11.9.3': + dependencies: + '@jsdevtools/ono': 7.1.3 + '@types/json-schema': 7.0.15 + js-yaml: 4.1.0 + '@arethetypeswrong/cli@0.18.2': dependencies: '@arethetypeswrong/core': 0.18.2 @@ -6330,6 +6354,8 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 + '@jsdevtools/ono@7.1.3': {} + '@loaderkit/resolve@1.0.4': dependencies: '@braidai/lang': 1.1.2 @@ -6597,6 +6623,8 @@ snapshots: '@types/json-schema@7.0.15': {} + '@types/lodash@4.17.20': {} + '@types/mocha@10.0.10': {} '@types/ms@2.1.0': {} @@ -9171,6 +9199,18 @@ snapshots: json-parse-even-better-errors@2.3.1: {} + json-schema-to-typescript@15.0.4: + dependencies: + '@apidevtools/json-schema-ref-parser': 11.9.3 + '@types/json-schema': 7.0.15 + '@types/lodash': 4.17.20 + is-glob: 4.0.3 + js-yaml: 4.1.0 + lodash: 4.17.21 + minimist: 1.2.8 + prettier: 3.6.2 + tinyglobby: 0.2.14 + json-schema-traverse@0.4.1: {} json-schema@0.4.0: {} diff --git a/src/bin/generateRuleTypes.js b/src/bin/generateRuleTypes.js new file mode 100644 index 000000000..e65ae9892 --- /dev/null +++ b/src/bin/generateRuleTypes.js @@ -0,0 +1,37 @@ +import index from '../index.js'; +import { + compile, +} from 'json-schema-to-typescript'; +import { + writeFile, +} from 'node:fs/promises'; + +let str = 'export interface Rules {\n'; + +for (const [ + ruleName, + rule, +] of Object.entries(index.rules)) { + if (rule.meta?.schema?.[0]) { + str += ` "jsdoc/${ruleName}": `; + const ts = await compile({ + items: rule.meta.schema, + type: 'array', + }, 'Test', { + bannerComment: '', + }); + + str += ts + .replace(/^export type Test = ?/v, '') + .replace(/^export interface Test /v, '') + .replaceAll('\n', '\n ').trimEnd().replace(/;$/v, '') + + ';\n\n'; + } +} + +str = str.replace(/\n$/v, '') + '}\n'; + +await writeFile(import.meta.dirname + '/../rules.d.ts', str); + +// eslint-disable-next-line no-console -- Todo +console.log('str', str); diff --git a/src/index-esm.js b/src/index-esm.js index 6099369d8..90b49c0a0 100644 --- a/src/index-esm.js +++ b/src/index-esm.js @@ -16,7 +16,8 @@ export default index; * cfg?: { * mergeSettings?: boolean, * config?: `flat/${import('./index-cjs.js').ConfigGroups}${import('./index-cjs.js').ConfigVariants}${import('./index-cjs.js').ErrorLevelVariants}`, - * settings?: Partial + * settings?: Partial, + * rules?: {[key in keyof import('./rules.d.ts').Rules]?: ["error"|"warn"|"off", ...import('./rules.d.ts').Rules[key]]} * } * ) => import('eslint').Linter.Config)} */ @@ -39,6 +40,10 @@ export const jsdoc = function (cfg) { outputConfig = index.configs[cfg.config]; } + if (cfg?.rules) { + outputConfig.rules = cfg.rules; + } + outputConfig.settings = { jsdoc: cfg?.mergeSettings === false ? cfg.settings : diff --git a/src/index.js b/src/index.js index 758726502..2ae0cf375 100644 --- a/src/index.js +++ b/src/index.js @@ -539,7 +539,8 @@ export default index; * cfg?: { * mergeSettings?: boolean, * config?: `flat/${ConfigGroups}${ConfigVariants}${ErrorLevelVariants}`, - * settings?: Partial + * settings?: Partial, + * rules?: {[key in keyof import('./rules.d.ts').Rules]?: ["error"|"warn"|"off", ...import('./rules.d.ts').Rules[key]]} * } * ) => import('eslint').Linter.Config)} */ @@ -562,6 +563,10 @@ export const jsdoc = function (cfg) { outputConfig = index.configs[cfg.config]; } + if (cfg?.rules) { + outputConfig.rules = cfg.rules; + } + outputConfig.settings = { jsdoc: cfg?.mergeSettings === false ? cfg.settings : diff --git a/src/jsdocUtils.js b/src/jsdocUtils.js index bbada743d..fedfb2bc7 100644 --- a/src/jsdocUtils.js +++ b/src/jsdocUtils.js @@ -529,7 +529,8 @@ const getTagNamesForMode = (mode, context) => { case 'permissive': return closureTags; case 'jsdoc': - return jsdocTags; case 'typescript': + return jsdocTags; + case 'typescript': return typeScriptTags; default: if (!modeWarnSettings.hasBeenWarned(context, 'mode')) { diff --git a/src/rules.d.ts b/src/rules.d.ts new file mode 100644 index 000000000..b89c0f9b0 --- /dev/null +++ b/src/rules.d.ts @@ -0,0 +1,766 @@ +export interface Rules { + "jsdoc/check-alignment": + | [] + | [ + { + innerIndent?: number; + } + ]; + + "jsdoc/check-examples": + | [] + | [ + { + allowInlineConfig?: boolean; + baseConfig?: { + [k: string]: unknown; + }; + captionRequired?: boolean; + checkDefaults?: boolean; + checkEslintrc?: boolean; + checkParams?: boolean; + checkProperties?: boolean; + configFile?: string; + exampleCodeRegex?: string; + matchingFileName?: string; + matchingFileNameDefaults?: string; + matchingFileNameParams?: string; + matchingFileNameProperties?: string; + noDefaultExampleRules?: boolean; + paddedIndent?: number; + rejectExampleCodeRegex?: string; + reportUnusedDisableDirectives?: boolean; + } + ]; + + "jsdoc/check-indentation": + | [] + | [ + { + excludeTags?: string[]; + } + ]; + + "jsdoc/check-line-alignment": + | [] + | ["always" | "never" | "any"] + | [ + "always" | "never" | "any", + { + customSpacings?: { + postDelimiter?: number; + postHyphen?: number; + postName?: number; + postTag?: number; + postType?: number; + }; + disableWrapIndent?: boolean; + preserveMainDescriptionPostDelimiter?: boolean; + tags?: string[]; + wrapIndent?: string; + } + ]; + + "jsdoc/check-param-names": + | [] + | [ + { + allowExtraTrailingParamDocs?: boolean; + checkDestructured?: boolean; + checkRestProperty?: boolean; + checkTypesPattern?: string; + disableExtraPropertyReporting?: boolean; + disableMissingParamChecks?: boolean; + enableFixer?: boolean; + useDefaultObjectProperties?: boolean; + } + ]; + + "jsdoc/check-property-names": + | [] + | [ + { + enableFixer?: boolean; + } + ]; + + "jsdoc/check-tag-names": + | [] + | [ + { + definedTags?: string[]; + enableFixer?: boolean; + jsxTags?: boolean; + typed?: boolean; + } + ]; + + "jsdoc/check-types": + | [] + | [ + { + exemptTagContexts?: { + tag?: string; + types?: boolean | string[]; + }[]; + noDefaults?: boolean; + unifyParentAndChildTypeChecks?: boolean; + } + ]; + + "jsdoc/check-values": + | [] + | [ + { + allowedAuthors?: string[]; + allowedLicenses?: string[] | boolean; + licensePattern?: string; + numericOnlyVariation?: boolean; + } + ]; + + "jsdoc/convert-to-jsdoc-comments": + | [] + | [ + { + allowedPrefixes?: string[]; + contexts?: ( + | string + | { + context?: string; + inlineCommentBlock?: boolean; + } + )[]; + contextsAfter?: ( + | string + | { + context?: string; + inlineCommentBlock?: boolean; + } + )[]; + contextsBeforeAndAfter?: ( + | string + | { + context?: string; + inlineCommentBlock?: boolean; + } + )[]; + enableFixer?: boolean; + enforceJsdocLineStyle?: "multi" | "single"; + lineOrBlockStyle?: "block" | "line" | "both"; + } + ]; + + "jsdoc/empty-tags": + | [] + | [ + { + tags?: string[]; + } + ]; + + "jsdoc/implements-on-classes": + | [] + | [ + { + contexts?: ( + | string + | { + comment?: string; + context?: string; + } + )[]; + } + ]; + + "jsdoc/informative-docs": + | [] + | [ + { + aliases?: { + /** + * This interface was referenced by `undefined`'s JSON-Schema definition + * via the `patternProperty` ".*". + */ + [k: string]: string[]; + }; + excludedTags?: string[]; + uselessWords?: string[]; + } + ]; + + "jsdoc/lines-before-block": + | [] + | [ + { + checkBlockStarts?: boolean; + excludedTags?: string[]; + ignoreSameLine?: boolean; + ignoreSingleLines?: boolean; + lines?: number; + } + ]; + + "jsdoc/match-description": + | [] + | [ + { + contexts?: ( + | string + | { + comment?: string; + context?: string; + } + )[]; + mainDescription?: + | string + | boolean + | { + match?: string | boolean; + message?: string; + }; + matchDescription?: string; + message?: string; + nonemptyTags?: boolean; + tags?: { + /** + * This interface was referenced by `undefined`'s JSON-Schema definition + * via the `patternProperty` ".*". + */ + [k: string]: + | string + | true + | { + match?: string | true; + message?: string; + }; + }; + } + ]; + + "jsdoc/match-name": + | [] + | [ + { + match: { + allowName?: string; + comment?: string; + context?: string; + disallowName?: string; + message?: string; + replacement?: string; + tags?: string[]; + }[]; + } + ]; + + "jsdoc/multiline-blocks": + | [] + | [ + { + allowMultipleTags?: boolean; + minimumLengthForMultiline?: number; + multilineTags?: "*" | string[]; + noFinalLineText?: boolean; + noMultilineBlocks?: boolean; + noSingleLineBlocks?: boolean; + noZeroLineText?: boolean; + requireSingleLineUnderCount?: number; + singleLineTags?: string[]; + } + ]; + + "jsdoc/no-bad-blocks": + | [] + | [ + { + ignore?: string[]; + preventAllMultiAsteriskBlocks?: boolean; + } + ]; + + "jsdoc/no-blank-blocks": + | [] + | [ + { + enableFixer?: boolean; + } + ]; + + "jsdoc/no-defaults": + | [] + | [ + { + contexts?: ( + | string + | { + comment?: string; + context?: string; + } + )[]; + noOptionalParamNames?: boolean; + } + ]; + + "jsdoc/no-missing-syntax": + | [] + | [ + { + contexts?: ( + | string + | { + comment?: string; + context?: string; + message?: string; + minimum?: number; + } + )[]; + } + ]; + + "jsdoc/no-multi-asterisks": + | [] + | [ + { + allowWhitespace?: boolean; + preventAtEnd?: boolean; + preventAtMiddleLines?: boolean; + } + ]; + + "jsdoc/no-restricted-syntax": + | [] + | [ + { + contexts: ( + | string + | { + comment?: string; + context?: string; + message?: string; + } + )[]; + } + ]; + + "jsdoc/no-types": + | [] + | [ + { + contexts?: ( + | string + | { + comment?: string; + context?: string; + } + )[]; + } + ]; + + "jsdoc/no-undefined-types": + | [] + | [ + { + definedTypes?: string[]; + disableReporting?: boolean; + markVariablesAsUsed?: boolean; + } + ]; + + "jsdoc/require-asterisk-prefix": + | [] + | ["always" | "never" | "any"] + | [ + "always" | "never" | "any", + { + tags?: { + always?: string[]; + any?: string[]; + never?: string[]; + }; + } + ]; + + "jsdoc/require-description": + | [] + | [ + { + checkConstructors?: boolean; + checkGetters?: boolean; + checkSetters?: boolean; + contexts?: ( + | string + | { + comment?: string; + context?: string; + } + )[]; + descriptionStyle?: "body" | "tag" | "any"; + exemptedBy?: string[]; + } + ]; + + "jsdoc/require-description-complete-sentence": + | [] + | [ + { + abbreviations?: string[]; + newlineBeforeCapsAssumesBadSentenceEnd?: boolean; + tags?: string[]; + } + ]; + + "jsdoc/require-example": + | [] + | [ + { + checkConstructors?: boolean; + checkGetters?: boolean; + checkSetters?: boolean; + contexts?: ( + | string + | { + comment?: string; + context?: string; + } + )[]; + enableFixer?: boolean; + exemptedBy?: string[]; + exemptNoArguments?: boolean; + } + ]; + + "jsdoc/require-file-overview": + | [] + | [ + { + tags?: { + /** + * This interface was referenced by `undefined`'s JSON-Schema definition + * via the `patternProperty` ".*". + */ + [k: string]: { + initialCommentsOnly?: boolean; + mustExist?: boolean; + preventDuplicates?: boolean; + }; + }; + } + ]; + + "jsdoc/require-hyphen-before-param-description": + | [] + | ["always" | "never"] + | [ + "always" | "never", + { + tags?: + | { + /** + * This interface was referenced by `undefined`'s JSON-Schema definition + * via the `patternProperty` ".*". + */ + [k: string]: "always" | "never"; + } + | "any"; + } + ]; + + "jsdoc/require-jsdoc": + | [] + | [ + { + checkConstructors?: boolean; + checkGetters?: boolean | "no-setter"; + checkSetters?: boolean | "no-getter"; + contexts?: ( + | string + | { + context?: string; + inlineCommentBlock?: boolean; + minLineCount?: number; + } + )[]; + enableFixer?: boolean; + exemptEmptyConstructors?: boolean; + exemptEmptyFunctions?: boolean; + exemptOverloadedImplementations?: boolean; + fixerMessage?: string; + minLineCount?: number; + publicOnly?: + | boolean + | { + ancestorsOnly?: boolean; + cjs?: boolean; + esm?: boolean; + window?: boolean; + }; + require?: { + ArrowFunctionExpression?: boolean; + ClassDeclaration?: boolean; + ClassExpression?: boolean; + FunctionDeclaration?: boolean; + FunctionExpression?: boolean; + MethodDefinition?: boolean; + }; + skipInterveningOverloadedDeclarations?: boolean; + } + ]; + + "jsdoc/require-param": + | [] + | [ + { + autoIncrementBase?: number; + checkConstructors?: boolean; + checkDestructured?: boolean; + checkDestructuredRoots?: boolean; + checkGetters?: boolean; + checkRestProperty?: boolean; + checkSetters?: boolean; + checkTypesPattern?: string; + contexts?: ( + | string + | { + comment?: string; + context?: string; + } + )[]; + enableFixer?: boolean; + enableRestElementFixer?: boolean; + enableRootFixer?: boolean; + exemptedBy?: string[]; + ignoreWhenAllParamsMissing?: boolean; + unnamedRootBase?: string[]; + useDefaultObjectProperties?: boolean; + } + ]; + + "jsdoc/require-param-description": + | [] + | [ + { + contexts?: ( + | string + | { + comment?: string; + context?: string; + } + )[]; + defaultDestructuredRootDescription?: string; + setDefaultDestructuredRootDescription?: boolean; + } + ]; + + "jsdoc/require-param-name": + | [] + | [ + { + contexts?: ( + | string + | { + comment?: string; + context?: string; + } + )[]; + } + ]; + + "jsdoc/require-param-type": + | [] + | [ + { + contexts?: ( + | string + | { + comment?: string; + context?: string; + } + )[]; + defaultDestructuredRootType?: string; + setDefaultDestructuredRootType?: boolean; + } + ]; + + "jsdoc/require-returns": + | [] + | [ + { + checkConstructors?: boolean; + checkGetters?: boolean; + contexts?: ( + | string + | { + comment?: string; + context?: string; + forceRequireReturn?: boolean; + } + )[]; + enableFixer?: boolean; + exemptedBy?: string[]; + forceRequireReturn?: boolean; + forceReturnsWithAsync?: boolean; + publicOnly?: + | boolean + | { + ancestorsOnly?: boolean; + cjs?: boolean; + esm?: boolean; + window?: boolean; + }; + } + ]; + + "jsdoc/require-returns-check": + | [] + | [ + { + exemptAsync?: boolean; + exemptGenerators?: boolean; + reportMissingReturnForUndefinedTypes?: boolean; + } + ]; + + "jsdoc/require-returns-description": + | [] + | [ + { + contexts?: ( + | string + | { + comment?: string; + context?: string; + } + )[]; + } + ]; + + "jsdoc/require-returns-type": + | [] + | [ + { + contexts?: ( + | string + | { + comment?: string; + context?: string; + } + )[]; + } + ]; + + "jsdoc/require-template": + | [] + | [ + { + exemptedBy?: string[]; + requireSeparateTemplates?: boolean; + } + ]; + + "jsdoc/require-throws": + | [] + | [ + { + contexts?: ( + | string + | { + comment?: string; + context?: string; + } + )[]; + exemptedBy?: string[]; + } + ]; + + "jsdoc/require-yields": + | [] + | [ + { + contexts?: ( + | string + | { + comment?: string; + context?: string; + } + )[]; + exemptedBy?: string[]; + forceRequireNext?: boolean; + forceRequireYields?: boolean; + next?: boolean; + nextWithGeneratorTag?: boolean; + withGeneratorTag?: boolean; + } + ]; + + "jsdoc/require-yields-check": + | [] + | [ + { + checkGeneratorsOnly?: boolean; + contexts?: ( + | string + | { + comment?: string; + context?: string; + } + )[]; + exemptedBy?: string[]; + next?: boolean; + } + ]; + + "jsdoc/sort-tags": + | [] + | [ + { + alphabetizeExtras?: boolean; + linesBetween?: number; + reportIntraTagGroupSpacing?: boolean; + reportTagGroupSpacing?: boolean; + tagSequence?: { + tags?: string[]; + }[]; + } + ]; + + "jsdoc/tag-lines": + | [] + | ["always" | "any" | "never"] + | [ + "always" | "any" | "never", + { + applyToEndTag?: boolean; + count?: number; + endLines?: number | null; + startLines?: number | null; + tags?: { + /** + * This interface was referenced by `undefined`'s JSON-Schema definition + * via the `patternProperty` ".*". + */ + [k: string]: { + count?: number; + lines?: "always" | "never" | "any"; + }; + }; + } + ]; + + "jsdoc/text-escaping": + | [] + | [ + { + escapeHTML?: boolean; + escapeMarkdown?: boolean; + } + ]; + + "jsdoc/valid-types": + | [] + | [ + { + allowEmptyNamepaths?: boolean; + } + ]; +} diff --git a/test/index.js b/test/index.js index 84335a9b3..1dbfa3464 100644 --- a/test/index.js +++ b/test/index.js @@ -14,6 +14,27 @@ describe('jsdoc()', () => { }); }); + it('Builds simple plugins config with rules', () => { + /* eslint-disable jsdoc/valid-types -- Bug */ + const rules = /** @type {{[key in keyof import('../src/rules.d.ts').Rules]?: ["error"|"warn"|"off", ...import('../src/rules.d.ts').Rules[key]]}} */ ({ + /* eslint-enable jsdoc/valid-types -- Bug */ + 'jsdoc/check-alignment': [ + 'error', + { + innerIndent: 0, + }, + ], + }); + const cfg = jsdoc({ + rules, + }); + expect(cfg.plugins?.jsdoc).to.equal(jsdocDefault); + expect(cfg.settings).to.deep.equal({ + jsdoc: {}, + }); + expect(cfg.rules).to.deep.equal(rules); + }); + it('Throws with bad config', () => { expect(() => { jsdoc({ diff --git a/tsconfig-prod.json b/tsconfig-prod.json index 188689b9d..d69aa780a 100644 --- a/tsconfig-prod.json +++ b/tsconfig-prod.json @@ -17,6 +17,7 @@ "include": [ "src/*.js", "src/rules/*.js", + "src/rules.d.ts", "src/utils/*.js", ], "exclude": ["node_modules", "src/bin/*.js"] diff --git a/tsconfig.json b/tsconfig.json index a8e115696..2a09f32cc 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -16,6 +16,7 @@ "include": [ "src/*.js", "src/rules/*.js", + "src/rules.d.ts", "src/utils/*.js", "test/**/*.js", "typings/gitdown.d.ts", From a268541e7b6ee7f6b9982438d1a4699b54dee85c Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Wed, 10 Sep 2025 00:14:29 +0800 Subject: [PATCH 061/189] fix(typescript): include full set of declaration files (#1486) --- .npmignore | 7 ------- 1 file changed, 7 deletions(-) diff --git a/.npmignore b/.npmignore index 5219b9654..00b280b66 100755 --- a/.npmignore +++ b/.npmignore @@ -7,12 +7,5 @@ CONTRIBUTING.md tsconfig*.json pnpm-workspace.yaml eslint.config.js -*.d.ts *.d.ts.map -!dist/index.d.ts -!dist/index.d.ts.map -!dist/getJsdocProcessorPlugin.d.ts -!dist/getJsdocProcessorPlugin.d.ts.map -!dist/iterateJsdoc.d.ts -!dist/iterateJsdoc.d.ts.map docs From 2ccd6292e139768828faf810d49031b490435e09 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Wed, 10 Sep 2025 07:23:41 +0800 Subject: [PATCH 062/189] fix(typescript): allow string and numeric rule entries in config function (#1487) --- src/index-esm.js | 2 +- src/index.js | 2 +- test/index.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/index-esm.js b/src/index-esm.js index 90b49c0a0..e4e7942b0 100644 --- a/src/index-esm.js +++ b/src/index-esm.js @@ -17,7 +17,7 @@ export default index; * mergeSettings?: boolean, * config?: `flat/${import('./index-cjs.js').ConfigGroups}${import('./index-cjs.js').ConfigVariants}${import('./index-cjs.js').ErrorLevelVariants}`, * settings?: Partial, - * rules?: {[key in keyof import('./rules.d.ts').Rules]?: ["error"|"warn"|"off", ...import('./rules.d.ts').Rules[key]]} + * rules?: {[key in keyof import('./rules.d.ts').Rules]?: import('eslint').Linter.RuleEntry} * } * ) => import('eslint').Linter.Config)} */ diff --git a/src/index.js b/src/index.js index 2ae0cf375..8775e658b 100644 --- a/src/index.js +++ b/src/index.js @@ -540,7 +540,7 @@ export default index; * mergeSettings?: boolean, * config?: `flat/${ConfigGroups}${ConfigVariants}${ErrorLevelVariants}`, * settings?: Partial, - * rules?: {[key in keyof import('./rules.d.ts').Rules]?: ["error"|"warn"|"off", ...import('./rules.d.ts').Rules[key]]} + * rules?: {[key in keyof import('./rules.d.ts').Rules]?: import('eslint').Linter.RuleEntry} * } * ) => import('eslint').Linter.Config)} */ diff --git a/test/index.js b/test/index.js index 1dbfa3464..b0b55e302 100644 --- a/test/index.js +++ b/test/index.js @@ -16,7 +16,7 @@ describe('jsdoc()', () => { it('Builds simple plugins config with rules', () => { /* eslint-disable jsdoc/valid-types -- Bug */ - const rules = /** @type {{[key in keyof import('../src/rules.d.ts').Rules]?: ["error"|"warn"|"off", ...import('../src/rules.d.ts').Rules[key]]}} */ ({ + const rules = /** @type {{[key in keyof import('../src/rules.d.ts').Rules]?: import('eslint').Linter.RuleEntry}} */ ({ /* eslint-enable jsdoc/valid-types -- Bug */ 'jsdoc/check-alignment': [ 'error', From 18d2c0f70c9445ee9a327c7f969bd5519e9b4a1d Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Wed, 10 Sep 2025 16:42:58 +0800 Subject: [PATCH 063/189] chore: update jsdoccomment and devDeps. --- package.json | 10 +- pnpm-lock.yaml | 318 ++++++++++++++++++++++++++----------------------- 2 files changed, 177 insertions(+), 151 deletions(-) diff --git a/package.json b/package.json index f20983742..a8b99ca18 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "url": "http://gajus.com" }, "dependencies": { - "@es-joy/jsdoccomment": "~0.56.0", + "@es-joy/jsdoccomment": "~0.57.0", "are-docs-informative": "^0.0.2", "comment-parser": "1.4.1", "debug": "^4.4.1", @@ -42,7 +42,7 @@ "@types/node": "^24.3.1", "@types/semver": "^7.7.1", "@types/spdx-expression-parse": "^3.0.5", - "@typescript-eslint/types": "^8.42.0", + "@typescript-eslint/types": "^8.43.0", "babel-plugin-add-module-exports": "^1.0.4", "babel-plugin-istanbul": "^7.0.1", "babel-plugin-transform-import-meta": "^2.3.3", @@ -54,9 +54,9 @@ "eslint-config-canonical": "~45.0.0", "gitdown": "^4.1.1", "glob": "^11.0.3", - "globals": "^16.3.0", + "globals": "^16.4.0", "husky": "^9.1.7", - "jsdoc-type-pratt-parser": "^5.1.1", + "jsdoc-type-pratt-parser": "^5.2.0", "json-schema": "^0.4.0", "json-schema-to-typescript": "^15.0.4", "lint-staged": "^16.1.6", @@ -66,7 +66,7 @@ "rimraf": "^6.0.1", "semantic-release": "^24.2.7", "typescript": "5.9.2", - "typescript-eslint": "^8.42.0" + "typescript-eslint": "^8.43.0" }, "engines": { "node": ">=20.11.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e2416a0a2..75d7de58d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: dependencies: '@es-joy/jsdoccomment': - specifier: ~0.56.0 - version: 0.56.0 + specifier: ~0.57.0 + version: 0.57.0 are-docs-informative: specifier: ^0.0.2 version: 0.0.2 @@ -112,8 +112,8 @@ importers: specifier: ^3.0.5 version: 3.0.5 '@typescript-eslint/types': - specifier: ^8.42.0 - version: 8.42.0 + specifier: ^8.43.0 + version: 8.43.0 babel-plugin-add-module-exports: specifier: ^1.0.4 version: 1.0.4 @@ -140,7 +140,7 @@ importers: version: 9.35.0(jiti@2.5.1) eslint-config-canonical: specifier: ~45.0.0 - version: 45.0.0(@types/eslint@9.6.1)(@types/node@24.3.1)(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + version: 45.0.0(@types/eslint@9.6.1)(@types/node@24.3.1)(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) gitdown: specifier: ^4.1.1 version: 4.1.1(re2@1.20.9) @@ -148,14 +148,14 @@ importers: specifier: ^11.0.3 version: 11.0.3 globals: - specifier: ^16.3.0 - version: 16.3.0 + specifier: ^16.4.0 + version: 16.4.0 husky: specifier: ^9.1.7 version: 9.1.7 jsdoc-type-pratt-parser: - specifier: ^5.1.1 - version: 5.1.1 + specifier: ^5.2.0 + version: 5.2.0 json-schema: specifier: ^0.4.0 version: 0.4.0 @@ -184,8 +184,8 @@ importers: specifier: 5.9.2 version: 5.9.2 typescript-eslint: - specifier: ^8.42.0 - version: 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + specifier: ^8.43.0 + version: 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) packages: @@ -793,11 +793,9 @@ packages: resolution: {integrity: sha512-c6EW+aA1w2rjqOMjbL93nZlwxp6c1Ln06vTYs5FjRRhmJXK8V/OrSXdT+pUr4aRYgjCgu8/OkiZr0tzeVrRSbw==} engines: {node: '>=20.11.0'} - '@eslint-community/eslint-utils@4.7.0': - resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@es-joy/jsdoccomment@0.57.0': + resolution: {integrity: sha512-M4isJXgy+ZLXvt9EFLHuG5+6Q8hl1iSn3ZnO5R+DiPLUBvsTOh93fZ9X/X1z3l6/pmq3STZtqrEAi6SaPzB4AQ==} + engines: {node: '>=20.11.0'} '@eslint-community/eslint-utils@4.8.0': resolution: {integrity: sha512-MJQFqrZgcW0UNYLGOuQpey/oTN59vyWwplvCGZztn1cKz9agZPPYpJB7h2OMmuu7VLqkvEjN8feFZJmxNF9D+Q==} @@ -1268,11 +1266,11 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/eslint-plugin@8.42.0': - resolution: {integrity: sha512-Aq2dPqsQkxHOLfb2OPv43RnIvfj05nw8v/6n3B2NABIPpHnjQnaLo9QGMTvml+tv4korl/Cjfrb/BYhoL8UUTQ==} + '@typescript-eslint/eslint-plugin@8.43.0': + resolution: {integrity: sha512-8tg+gt7ENL7KewsKMKDHXR1vm8tt9eMxjJBYINf6swonlWgkYn5NwyIgXpbbDxTNU5DgpDFfj95prcTq2clIQQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.42.0 + '@typescript-eslint/parser': ^8.43.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' @@ -1290,10 +1288,11 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.39.1': - resolution: {integrity: sha512-8fZxek3ONTwBu9ptw5nCKqZOSkXshZB7uAxuFF0J/wTMkKydjXCzqqga7MlFMpHi9DoG4BadhmTkITBcg8Aybw==} + '@typescript-eslint/parser@8.43.0': + resolution: {integrity: sha512-B7RIQiTsCBBmY+yW4+ILd6mF5h1FUwJsVvpqkrgpszYifetQ2Ke+Z4u6aZh0CblkUGIdR59iYVyXqqZGkZ3aBw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: + eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' '@typescript-eslint/project-service@8.41.0': @@ -1308,9 +1307,11 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.39.1': - resolution: {integrity: sha512-RkBKGBrjgskFGWuyUGz/EtD8AF/GW49S21J8dvMzpJitOF1slLEbbHnNEtAHtnDAnx8qDEdRrULRnWVx27wGBw==} + '@typescript-eslint/project-service@8.43.0': + resolution: {integrity: sha512-htB/+D/BIGoNTQYffZw4uM4NzzuolCoaA/BusuSIcC8YjmBYQioew5VUZAYdAETPjeed0hqCaW7EHg+Robq8uw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' '@typescript-eslint/scope-manager@8.41.0': resolution: {integrity: sha512-n6m05bXn/Cd6DZDGyrpXrELCPVaTnLdPToyhBoFkLIMznRUQUEQdSp96s/pcWSQdqOhrgR1mzJ+yItK7T+WPMQ==} @@ -1320,11 +1321,9 @@ packages: resolution: {integrity: sha512-51+x9o78NBAVgQzOPd17DkNTnIzJ8T/O2dmMBLoK9qbY0Gm52XJcdJcCl18ExBMiHo6jPMErUQWUv5RLE51zJw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.39.1': - resolution: {integrity: sha512-ePUPGVtTMR8XMU2Hee8kD0Pu4NDE1CN9Q1sxGSGd/mbOtGZDM7pnhXNJnzW63zk/q+Z54zVzj44HtwXln5CvHA==} + '@typescript-eslint/scope-manager@8.43.0': + resolution: {integrity: sha512-daSWlQ87ZhsjrbMLvpuuMAt3y4ba57AuvadcR7f3nl8eS3BjRc8L9VLxFLk92RL5xdXOg6IQ+qKjjqNEimGuAg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' '@typescript-eslint/tsconfig-utils@8.41.0': resolution: {integrity: sha512-TDhxYFPUYRFxFhuU5hTIJk+auzM/wKvWgoNYOPcOf6i4ReYlOoYN8q1dV5kOTjNQNJgzWN3TUUQMtlLOcUgdUw==} @@ -1338,11 +1337,10 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.39.1': - resolution: {integrity: sha512-gu9/ahyatyAdQbKeHnhT4R+y3YLtqqHyvkfDxaBYk97EcbfChSJXyaJnIL3ygUv7OuZatePHmQvuH5ru0lnVeA==} + '@typescript-eslint/tsconfig-utils@8.43.0': + resolution: {integrity: sha512-ALC2prjZcj2YqqL5X/bwWQmHA2em6/94GcbB/KKu5SX3EBDOsqztmmX1kMkvAJHzxk7TazKzJfFiEIagNV3qEA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' '@typescript-eslint/type-utils@8.41.0': @@ -1359,9 +1357,12 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.39.1': - resolution: {integrity: sha512-7sPDKQQp+S11laqTrhHqeAbsCfMkwJMrV7oTDvtDds4mEofJYir414bYKUEb8YPUm9QL3U+8f6L6YExSoAGdQw==} + '@typescript-eslint/type-utils@8.43.0': + resolution: {integrity: sha512-qaH1uLBpBuBBuRf8c1mLJ6swOfzCXryhKND04Igr4pckzSEW9JX5Aw9AgW00kwfjWJF0kk0ps9ExKTfvXfw4Qg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' '@typescript-eslint/types@8.41.0': resolution: {integrity: sha512-9EwxsWdVqh42afLbHP90n2VdHaWU/oWgbH2P0CfcNfdKL7CuKpwMQGjwev56vWu9cSKU7FWSu6r9zck6CVfnag==} @@ -1371,11 +1372,9 @@ packages: resolution: {integrity: sha512-LdtAWMiFmbRLNP7JNeY0SqEtJvGMYSzfiWBSmx+VSZ1CH+1zyl8Mmw1TT39OrtsRvIYShjJWzTDMPWZJCpwBlw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.39.1': - resolution: {integrity: sha512-EKkpcPuIux48dddVDXyQBlKdeTPMmALqBUbEk38McWv0qVEZwOpVJBi7ugK5qVNgeuYjGNQxrrnoM/5+TI/BPw==} + '@typescript-eslint/types@8.43.0': + resolution: {integrity: sha512-vQ2FZaxJpydjSZJKiSW/LJsabFFvV7KgLC5DiLhkBcykhQj8iK9BOaDmQt74nnKdLvceM5xmhaTF+pLekrxEkw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' '@typescript-eslint/typescript-estree@8.41.0': resolution: {integrity: sha512-D43UwUYJmGhuwHfY7MtNKRZMmfd8+p/eNSfFe6tH5mbVDto+VQCayeAt35rOx3Cs6wxD16DQtIKw/YXxt5E0UQ==} @@ -1389,11 +1388,10 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.39.1': - resolution: {integrity: sha512-VF5tZ2XnUSTuiqZFXCZfZs1cgkdd3O/sSYmdo2EpSyDlC86UM/8YytTmKnehOW3TGAlivqTDT6bS87B/GQ/jyg==} + '@typescript-eslint/typescript-estree@8.43.0': + resolution: {integrity: sha512-7Vv6zlAhPb+cvEpP06WXXy/ZByph9iL6BQRBDj4kmBsW98AqEeQHlj/13X+sZOrKSo9/rNKH4Ul4f6EICREFdw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' '@typescript-eslint/utils@8.41.0': @@ -1410,9 +1408,12 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.39.1': - resolution: {integrity: sha512-W8FQi6kEh2e8zVhQ0eeRnxdvIoOkAp/CPAahcNio6nO9dsIwb9b34z90KOlheoyuVf6LSOEdjlkxSkapNEc+4A==} + '@typescript-eslint/utils@8.43.0': + resolution: {integrity: sha512-S1/tEmkUeeswxd0GGcnwuVQPFWo8NzZTOMxCvw8BX7OMxnNae+i8Tm7REQen/SwUIPoPqfKn7EaZ+YLpiB3k9g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' '@typescript-eslint/visitor-keys@8.41.0': resolution: {integrity: sha512-+GeGMebMCy0elMNg67LRNoVnUFPIm37iu5CmHESVx56/9Jsfdpsvbv605DQ81Pi/x11IdKUsS5nzgTYbCQU9fg==} @@ -1422,6 +1423,10 @@ packages: resolution: {integrity: sha512-3WbiuzoEowaEn8RSnhJBrxSwX8ULYE9CXaPepS2C2W3NSA5NNIvBaslpBSBElPq0UGr0xVJlXFWOAKIkyylydQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.43.0': + resolution: {integrity: sha512-T+S1KqRD4sg/bHfLwrpF/K3gQLBM1n7Rp7OjjikjTEssI2YJzQpi5WXoynOaQ93ERIuq3O8RBTOUYDKszUCEHw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@unrs/resolver-binding-android-arm-eabi@1.11.1': resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} cpu: [arm] @@ -2921,8 +2926,8 @@ packages: resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} engines: {node: '>=18'} - globals@16.3.0: - resolution: {integrity: sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==} + globals@16.4.0: + resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==} engines: {node: '>=18'} globalthis@1.0.4: @@ -3449,6 +3454,10 @@ packages: resolution: {integrity: sha512-DYYlVP1fe4QBMh2xTIs20/YeTz2GYVbWAEZweHSZD+qQ/Cx2d5RShuhhsdk64eTjNq0FeVnteP/qVOgaywSRbg==} engines: {node: '>=12.0.0'} + jsdoc-type-pratt-parser@5.2.0: + resolution: {integrity: sha512-qJmErzgL4DLj4lyRkDWnEXZRNu3X3CJxVKKhuUPwqPFMiJV6K7/6O//D2Uf+rRi6+qTPgHWxDAgfGllEXoGkMA==} + engines: {node: '>=12.0.0'} + jsdom@6.5.1: resolution: {integrity: sha512-KeCN3yqR+MmjAZDnVZgIaL2tP9BxSFlsYZw9Z+zy64+jJzHc1m8ruccb83Qe8AG0xKUjpo2kxEGFCMtiF4MmAg==} @@ -4892,8 +4901,8 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} - typescript-eslint@8.42.0: - resolution: {integrity: sha512-ozR/rQn+aQXQxh1YgbCzQWDFrsi9mcg+1PM3l/z5o1+20P7suOIaNg515bpr/OYt6FObz/NHcBstydDLHWeEKg==} + typescript-eslint@8.43.0: + resolution: {integrity: sha512-FyRGJKUGvcFekRRcBKFBlAhnp4Ng8rhe8tuvvkR9OiU0gfd4vyvTRQHEckO6VDlH57jbeUQem2IpqPq9kLJH+w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -5992,7 +6001,7 @@ snapshots: '@es-joy/jsdoccomment@0.50.2': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.42.0 + '@typescript-eslint/types': 8.43.0 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 4.1.0 @@ -6000,15 +6009,18 @@ snapshots: '@es-joy/jsdoccomment@0.56.0': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.42.0 + '@typescript-eslint/types': 8.43.0 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 5.1.1 - '@eslint-community/eslint-utils@4.7.0(eslint@9.35.0(jiti@2.5.1))': + '@es-joy/jsdoccomment@0.57.0': dependencies: - eslint: 9.35.0(jiti@2.5.1) - eslint-visitor-keys: 3.4.3 + '@types/estree': 1.0.8 + '@typescript-eslint/types': 8.43.0 + comment-parser: 1.4.1 + esquery: 1.6.0 + jsdoc-type-pratt-parser: 5.2.0 '@eslint-community/eslint-utils@4.8.0(eslint@9.35.0(jiti@2.5.1))': dependencies: @@ -6567,7 +6579,7 @@ snapshots: '@stylistic/eslint-plugin@4.4.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@typescript-eslint/utils': 8.39.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.35.0(jiti@2.5.1) eslint-visitor-keys: 4.2.1 espree: 10.4.0 @@ -6643,10 +6655,10 @@ snapshots: dependencies: '@types/node': 24.3.1 - '@typescript-eslint/eslint-plugin@8.41.0(@typescript-eslint/parser@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/eslint-plugin@8.41.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/parser': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/scope-manager': 8.41.0 '@typescript-eslint/type-utils': 8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/utils': 8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) @@ -6660,14 +6672,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.42.0(@typescript-eslint/parser@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/eslint-plugin@8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/scope-manager': 8.42.0 - '@typescript-eslint/type-utils': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/utils': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.42.0 + '@typescript-eslint/parser': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.43.0 + '@typescript-eslint/type-utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.43.0 eslint: 9.35.0(jiti@2.5.1) graphemer: 1.4.0 ignore: 7.0.5 @@ -6701,11 +6713,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.39.1(typescript@5.9.2)': + '@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.39.1(typescript@5.9.2) - '@typescript-eslint/types': 8.42.0 + '@typescript-eslint/scope-manager': 8.43.0 + '@typescript-eslint/types': 8.43.0 + '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.43.0 debug: 4.4.1(supports-color@8.1.1) + eslint: 9.35.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -6713,7 +6728,7 @@ snapshots: '@typescript-eslint/project-service@8.41.0(typescript@5.9.2)': dependencies: '@typescript-eslint/tsconfig-utils': 8.41.0(typescript@5.9.2) - '@typescript-eslint/types': 8.42.0 + '@typescript-eslint/types': 8.43.0 debug: 4.4.1(supports-color@8.1.1) typescript: 5.9.2 transitivePeerDependencies: @@ -6722,16 +6737,20 @@ snapshots: '@typescript-eslint/project-service@8.42.0(typescript@5.9.2)': dependencies: '@typescript-eslint/tsconfig-utils': 8.42.0(typescript@5.9.2) - '@typescript-eslint/types': 8.42.0 + '@typescript-eslint/types': 8.43.0 debug: 4.4.1(supports-color@8.1.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.39.1': + '@typescript-eslint/project-service@8.43.0(typescript@5.9.2)': dependencies: - '@typescript-eslint/types': 8.39.1 - '@typescript-eslint/visitor-keys': 8.39.1 + '@typescript-eslint/tsconfig-utils': 8.43.0(typescript@5.9.2) + '@typescript-eslint/types': 8.43.0 + debug: 4.4.1(supports-color@8.1.1) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color '@typescript-eslint/scope-manager@8.41.0': dependencies: @@ -6743,9 +6762,10 @@ snapshots: '@typescript-eslint/types': 8.42.0 '@typescript-eslint/visitor-keys': 8.42.0 - '@typescript-eslint/tsconfig-utils@8.39.1(typescript@5.9.2)': + '@typescript-eslint/scope-manager@8.43.0': dependencies: - typescript: 5.9.2 + '@typescript-eslint/types': 8.43.0 + '@typescript-eslint/visitor-keys': 8.43.0 '@typescript-eslint/tsconfig-utils@8.41.0(typescript@5.9.2)': dependencies: @@ -6755,17 +6775,9 @@ snapshots: dependencies: typescript: 5.9.2 - '@typescript-eslint/type-utils@8.39.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/tsconfig-utils@8.43.0(typescript@5.9.2)': dependencies: - '@typescript-eslint/types': 8.39.1 - '@typescript-eslint/typescript-estree': 8.39.1(typescript@5.9.2) - '@typescript-eslint/utils': 8.39.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - debug: 4.4.1(supports-color@8.1.1) - eslint: 9.35.0(jiti@2.5.1) - ts-api-utils: 2.1.0(typescript@5.9.2) typescript: 5.9.2 - transitivePeerDependencies: - - supports-color '@typescript-eslint/type-utils@8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: @@ -6791,28 +6803,24 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.39.1': {} - - '@typescript-eslint/types@8.41.0': {} - - '@typescript-eslint/types@8.42.0': {} - - '@typescript-eslint/typescript-estree@8.39.1(typescript@5.9.2)': + '@typescript-eslint/type-utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@typescript-eslint/project-service': 8.39.1(typescript@5.9.2) - '@typescript-eslint/tsconfig-utils': 8.39.1(typescript@5.9.2) - '@typescript-eslint/types': 8.39.1 - '@typescript-eslint/visitor-keys': 8.39.1 + '@typescript-eslint/types': 8.43.0 + '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) debug: 4.4.1(supports-color@8.1.1) - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.2 + eslint: 9.35.0(jiti@2.5.1) ts-api-utils: 2.1.0(typescript@5.9.2) typescript: 5.9.2 transitivePeerDependencies: - supports-color + '@typescript-eslint/types@8.41.0': {} + + '@typescript-eslint/types@8.42.0': {} + + '@typescript-eslint/types@8.43.0': {} + '@typescript-eslint/typescript-estree@8.41.0(typescript@5.9.2)': dependencies: '@typescript-eslint/project-service': 8.41.0(typescript@5.9.2) @@ -6845,20 +6853,25 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.39.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/typescript-estree@8.43.0(typescript@5.9.2)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.35.0(jiti@2.5.1)) - '@typescript-eslint/scope-manager': 8.39.1 - '@typescript-eslint/types': 8.39.1 - '@typescript-eslint/typescript-estree': 8.39.1(typescript@5.9.2) - eslint: 9.35.0(jiti@2.5.1) + '@typescript-eslint/project-service': 8.43.0(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.43.0(typescript@5.9.2) + '@typescript-eslint/types': 8.43.0 + '@typescript-eslint/visitor-keys': 8.43.0 + debug: 4.4.1(supports-color@8.1.1) + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.2 + ts-api-utils: 2.1.0(typescript@5.9.2) typescript: 5.9.2 transitivePeerDependencies: - supports-color '@typescript-eslint/utils@8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.35.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) '@typescript-eslint/scope-manager': 8.41.0 '@typescript-eslint/types': 8.41.0 '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.9.2) @@ -6869,7 +6882,7 @@ snapshots: '@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.35.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) '@typescript-eslint/scope-manager': 8.42.0 '@typescript-eslint/types': 8.42.0 '@typescript-eslint/typescript-estree': 8.42.0(typescript@5.9.2) @@ -6878,10 +6891,16 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.39.1': + '@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@typescript-eslint/types': 8.39.1 - eslint-visitor-keys: 4.2.1 + '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) + '@typescript-eslint/scope-manager': 8.43.0 + '@typescript-eslint/types': 8.43.0 + '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2) + eslint: 9.35.0(jiti@2.5.1) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color '@typescript-eslint/visitor-keys@8.41.0': dependencies: @@ -6893,6 +6912,11 @@ snapshots: '@typescript-eslint/types': 8.42.0 eslint-visitor-keys: 4.2.1 + '@typescript-eslint/visitor-keys@8.43.0': + dependencies: + '@typescript-eslint/types': 8.43.0 + eslint-visitor-keys: 4.2.1 + '@unrs/resolver-binding-android-arm-eabi@1.11.1': optional: true @@ -6954,7 +6978,7 @@ snapshots: '@vitest/eslint-plugin@1.3.4(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@typescript-eslint/utils': 8.39.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.35.0(jiti@2.5.1) optionalDependencies: typescript: 5.9.2 @@ -7829,23 +7853,23 @@ snapshots: eslint: 9.35.0(jiti@2.5.1) semver: 7.7.2 - eslint-config-canonical@45.0.0(@types/eslint@9.6.1)(@types/node@24.3.1)(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): + eslint-config-canonical@45.0.0(@types/eslint@9.6.1)(@types/node@24.3.1)(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): dependencies: '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.3.1)(eslint@9.35.0(jiti@2.5.1))(graphql@16.11.0)(typescript@5.9.2) '@next/eslint-plugin-next': 15.5.2 '@stylistic/eslint-plugin': 4.4.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/eslint-plugin': 8.41.0(@typescript-eslint/parser@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/eslint-plugin': 8.41.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/parser': 8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) '@vitest/eslint-plugin': 1.3.4(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.35.0(jiti@2.5.1) eslint-config-prettier: 10.1.8(eslint@9.35.0(jiti@2.5.1)) - eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)) + eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)) eslint-plugin-ava: 15.1.0(eslint@9.35.0(jiti@2.5.1)) - eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) eslint-plugin-eslint-comments: 3.2.0(eslint@9.35.0(jiti@2.5.1)) eslint-plugin-fp: 2.3.0(eslint@9.35.0(jiti@2.5.1)) eslint-plugin-functional: 9.0.2(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)) eslint-plugin-jest: 28.14.0(@typescript-eslint/eslint-plugin@8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) eslint-plugin-jsdoc: 50.8.0(eslint@9.35.0(jiti@2.5.1)) eslint-plugin-jsonc: 2.20.1(eslint@9.35.0(jiti@2.5.1)) @@ -7863,11 +7887,11 @@ snapshots: eslint-plugin-unicorn: 60.0.0(eslint@9.35.0(jiti@2.5.1)) eslint-plugin-yml: 1.18.0(eslint@9.35.0(jiti@2.5.1)) eslint-plugin-zod: 1.4.0(eslint@9.35.0(jiti@2.5.1)) - globals: 16.3.0 + globals: 16.4.0 graphql: 16.11.0 prettier: 3.6.2 ramda: 0.30.1 - typescript-eslint: 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + typescript-eslint: 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) yaml-eslint-parser: 1.3.0 transitivePeerDependencies: - '@apollo/subgraph' @@ -7910,7 +7934,7 @@ snapshots: - supports-color optional: true - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.1(supports-color@8.1.1) @@ -7921,12 +7945,12 @@ snapshots: tinyglobby: 0.2.14 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)) transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)): + eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)): dependencies: debug: 4.4.1(supports-color@8.1.1) eslint: 9.35.0(jiti@2.5.1) @@ -7937,8 +7961,8 @@ snapshots: tinyglobby: 0.2.14 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)) transitivePeerDependencies: - supports-color @@ -7948,14 +7972,14 @@ snapshots: esquery: 1.6.0 jsonc-eslint-parser: 2.4.0 - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.35.0(jiti@2.5.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)) transitivePeerDependencies: - supports-color @@ -7971,14 +7995,14 @@ snapshots: pkg-dir: 5.0.0 resolve-from: 5.0.0 - eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): + eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/utils': 8.39.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) array-includes: 3.1.9 debug: 4.4.1(supports-color@8.1.1) doctrine: 3.0.0 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)) - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)) is-get-set-prop: 1.0.0 is-js-type: 2.0.0 is-obj-prop: 1.0.0 @@ -8000,7 +8024,7 @@ snapshots: eslint-plugin-es-x@7.8.0(eslint@9.35.0(jiti@2.5.1)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.35.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) '@eslint-community/regexpp': 4.12.1 eslint: 9.35.0(jiti@2.5.1) eslint-compat-utils: 0.5.1(eslint@9.35.0(jiti@2.5.1)) @@ -8021,7 +8045,7 @@ snapshots: eslint-plugin-functional@9.0.2(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/utils': 8.39.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) deepmerge-ts: 7.1.5 escape-string-regexp: 5.0.0 eslint: 9.35.0(jiti@2.5.1) @@ -8033,9 +8057,9 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)): + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)): dependencies: - '@typescript-eslint/types': 8.42.0 + '@typescript-eslint/types': 8.43.0 comment-parser: 1.4.1 debug: 4.4.1(supports-color@8.1.1) eslint: 9.35.0(jiti@2.5.1) @@ -8046,17 +8070,17 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/utils': 8.39.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.35.0(jiti@2.5.1) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.41.0(@typescript-eslint/parser@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/eslint-plugin': 8.41.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) transitivePeerDependencies: - supports-color - typescript @@ -8079,7 +8103,7 @@ snapshots: eslint-plugin-jsonc@2.20.1(eslint@9.35.0(jiti@2.5.1)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.35.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) eslint: 9.35.0(jiti@2.5.1) eslint-compat-utils: 0.6.5(eslint@9.35.0(jiti@2.5.1)) eslint-json-compat-utils: 0.2.1(eslint@9.35.0(jiti@2.5.1))(jsonc-eslint-parser@2.4.0) @@ -8128,7 +8152,7 @@ snapshots: eslint-plugin-n@17.21.3(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.35.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) enhanced-resolve: 5.18.3 eslint: 9.35.0(jiti@2.5.1) eslint-plugin-es-x: 7.8.0(eslint@9.35.0(jiti@2.5.1)) @@ -8143,8 +8167,8 @@ snapshots: eslint-plugin-perfectionist@4.15.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/types': 8.42.0 - '@typescript-eslint/utils': 8.39.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/types': 8.43.0 + '@typescript-eslint/utils': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.35.0(jiti@2.5.1) natural-orderby: 5.0.0 transitivePeerDependencies: @@ -8163,7 +8187,7 @@ snapshots: eslint-plugin-promise@7.2.1(eslint@9.35.0(jiti@2.5.1)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.35.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) eslint: 9.35.0(jiti@2.5.1) eslint-plugin-react-hooks@5.2.0(eslint@9.35.0(jiti@2.5.1)): @@ -8194,7 +8218,7 @@ snapshots: eslint-plugin-regexp@2.10.0(eslint@9.35.0(jiti@2.5.1)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.35.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) '@eslint-community/regexpp': 4.12.1 comment-parser: 1.4.1 eslint: 9.35.0(jiti@2.5.1) @@ -8206,7 +8230,7 @@ snapshots: eslint-plugin-unicorn@60.0.0(eslint@9.35.0(jiti@2.5.1)): dependencies: '@babel/helper-validator-identifier': 7.27.1 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.35.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) '@eslint/plugin-kit': 0.3.5 change-case: 5.4.4 ci-info: 4.3.0 @@ -8215,7 +8239,7 @@ snapshots: eslint: 9.35.0(jiti@2.5.1) esquery: 1.6.0 find-up-simple: 1.0.1 - globals: 16.3.0 + globals: 16.4.0 indent-string: 5.0.0 is-builtin-module: 5.0.0 jsesc: 3.1.0 @@ -8662,7 +8686,7 @@ snapshots: globals@15.15.0: {} - globals@16.3.0: {} + globals@16.4.0: {} globalthis@1.0.4: dependencies: @@ -8979,7 +9003,7 @@ snapshots: is-immutable-type@5.0.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/type-utils': 8.39.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/type-utils': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.35.0(jiti@2.5.1) ts-api-utils: 2.1.0(typescript@5.9.2) ts-declaration-location: 1.0.7(typescript@5.9.2) @@ -9170,6 +9194,8 @@ snapshots: jsdoc-type-pratt-parser@5.1.1: {} + jsdoc-type-pratt-parser@5.2.0: {} + jsdom@6.5.1: dependencies: acorn: 2.7.0 @@ -10710,12 +10736,12 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): + typescript-eslint@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.42.0(@typescript-eslint/parser@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/parser': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/typescript-estree': 8.42.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/eslint-plugin': 8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/parser': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.35.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: From 93e6b1cef1a67d0d44652f7c9c9941b458a6d750 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Wed, 10 Sep 2025 16:49:34 +0800 Subject: [PATCH 064/189] feat: copy over config properties Also: - fix: avoid config function rules overwriting config's rules - feat: reexport `getJsdocProcessorPlugin` --- .README/README.md | 6 +++- .README/processors.md | 2 +- README.md | 6 +++- docs/processors.md | 2 +- src/index-esm.js | 69 ++++++++++++++++++++++++++++++++++++------- src/index.js | 69 ++++++++++++++++++++++++++++++++++++------- test/index.js | 58 ++++++++++++++++++++++++++++++++++++ 7 files changed, 186 insertions(+), 26 deletions(-) diff --git a/.README/README.md b/.README/README.md index 7b8b9b67d..ba7563828 100644 --- a/.README/README.md +++ b/.README/README.md @@ -41,7 +41,7 @@ export default [ ]; ``` -Or with TypeScript-aware extra rules and settings supplied: +Or with TypeScript-aware extra rules and/or settings supplied: ```js import {jsdoc} from 'eslint-plugin-jsdoc'; @@ -99,6 +99,10 @@ export default [ ]; ``` +A `plugins` property can also be supplied to merge with the resulting `jsdoc` plugin. + +Other config properties such as `files`, `ignores`, etc. are also copied over. + ### Flat config (declarative) ```js diff --git a/.README/processors.md b/.README/processors.md index cd3757821..73ae34497 100644 --- a/.README/processors.md +++ b/.README/processors.md @@ -9,7 +9,7 @@ The approach below works in ESLint 9. For ESLint 7, please see our [`check-examp The approach requires that we first indicate the JavaScript files that will be checked for `@example` tags. ```js -import {getJsdocProcessorPlugin} from 'eslint-plugin-jsdoc/getJsdocProcessorPlugin.js'; +import {getJsdocProcessorPlugin} from 'eslint-plugin-jsdoc'; export default [ { diff --git a/README.md b/README.md index 963b8ac04..eb81a02de 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ export default [ ]; ``` -Or with TypeScript-aware extra rules and settings supplied: +Or with TypeScript-aware extra rules and/or settings supplied: ```js import {jsdoc} from 'eslint-plugin-jsdoc'; @@ -118,6 +118,10 @@ export default [ ]; ``` +A `plugins` property can also be supplied to merge with the resulting `jsdoc` plugin. + +Other config properties such as `files`, `ignores`, etc. are also copied over. + ### Flat config (declarative) diff --git a/docs/processors.md b/docs/processors.md index af7f06814..ef9388de3 100644 --- a/docs/processors.md +++ b/docs/processors.md @@ -11,7 +11,7 @@ The approach below works in ESLint 9. For ESLint 7, please see our [`check-examp The approach requires that we first indicate the JavaScript files that will be checked for `@example` tags. ```js -import {getJsdocProcessorPlugin} from 'eslint-plugin-jsdoc/getJsdocProcessorPlugin.js'; +import {getJsdocProcessorPlugin} from 'eslint-plugin-jsdoc'; export default [ { diff --git a/src/index-esm.js b/src/index-esm.js index e4e7942b0..9afc9c21b 100644 --- a/src/index-esm.js +++ b/src/index-esm.js @@ -13,7 +13,7 @@ export default index; /* eslint-disable jsdoc/valid-types -- Bug */ /** * @type {(( - * cfg?: { + * cfg?: import('eslint').Linter.Config & { * mergeSettings?: boolean, * config?: `flat/${import('./index-cjs.js').ConfigGroups}${import('./index-cjs.js').ConfigVariants}${import('./index-cjs.js').ErrorLevelVariants}`, * settings?: Partial, @@ -29,19 +29,62 @@ export const jsdoc = function (cfg) { jsdoc: index, }, }; - if ( - cfg?.config - ) { - // @ts-expect-error Security check - if (cfg.config === '__proto__') { - throw new TypeError('Disallowed config value'); + + if (cfg) { + if (cfg.config) { + // @ts-expect-error Security check + if (cfg.config === '__proto__') { + throw new TypeError('Disallowed config value'); + } + + outputConfig = index.configs[cfg.config]; } - outputConfig = index.configs[cfg.config]; - } + if (cfg.rules) { + outputConfig.rules = { + ...outputConfig.rules, + ...cfg.rules, + }; + } + + if (cfg.plugins) { + outputConfig.plugins = { + ...outputConfig.plugins, + ...cfg.plugins, + }; + } + + if (cfg.name) { + outputConfig.name = cfg.name; + } + + if (cfg.basePath) { + outputConfig.basePath = cfg.basePath; + } + + if (cfg.files) { + outputConfig.files = cfg.files; + } + + if (cfg.ignores) { + outputConfig.ignores = cfg.ignores; + } - if (cfg?.rules) { - outputConfig.rules = cfg.rules; + if (cfg.language) { + outputConfig.language = cfg.language; + } + + if (cfg.languageOptions) { + outputConfig.languageOptions = cfg.languageOptions; + } + + if (cfg.linterOptions) { + outputConfig.linterOptions = cfg.linterOptions; + } + + if (cfg.processor) { + outputConfig.processor = cfg.processor; + } } outputConfig.settings = { @@ -78,3 +121,7 @@ export const jsdoc = function (cfg) { return outputConfig; }; + +export { + getJsdocProcessorPlugin, +} from './getJsdocProcessorPlugin.js'; diff --git a/src/index.js b/src/index.js index 8775e658b..0be1c5c52 100644 --- a/src/index.js +++ b/src/index.js @@ -536,7 +536,7 @@ export default index; /* eslint-disable jsdoc/valid-types -- Bug */ /** * @type {(( - * cfg?: { + * cfg?: import('eslint').Linter.Config & { * mergeSettings?: boolean, * config?: `flat/${ConfigGroups}${ConfigVariants}${ErrorLevelVariants}`, * settings?: Partial, @@ -552,19 +552,62 @@ export const jsdoc = function (cfg) { jsdoc: index, }, }; - if ( - cfg?.config - ) { - // @ts-expect-error Security check - if (cfg.config === '__proto__') { - throw new TypeError('Disallowed config value'); + + if (cfg) { + if (cfg.config) { + // @ts-expect-error Security check + if (cfg.config === '__proto__') { + throw new TypeError('Disallowed config value'); + } + + outputConfig = index.configs[cfg.config]; } - outputConfig = index.configs[cfg.config]; - } + if (cfg.rules) { + outputConfig.rules = { + ...outputConfig.rules, + ...cfg.rules, + }; + } + + if (cfg.plugins) { + outputConfig.plugins = { + ...outputConfig.plugins, + ...cfg.plugins, + }; + } + + if (cfg.name) { + outputConfig.name = cfg.name; + } + + if (cfg.basePath) { + outputConfig.basePath = cfg.basePath; + } + + if (cfg.files) { + outputConfig.files = cfg.files; + } - if (cfg?.rules) { - outputConfig.rules = cfg.rules; + if (cfg.ignores) { + outputConfig.ignores = cfg.ignores; + } + + if (cfg.language) { + outputConfig.language = cfg.language; + } + + if (cfg.languageOptions) { + outputConfig.languageOptions = cfg.languageOptions; + } + + if (cfg.linterOptions) { + outputConfig.linterOptions = cfg.linterOptions; + } + + if (cfg.processor) { + outputConfig.processor = cfg.processor; + } } outputConfig.settings = { @@ -601,3 +644,7 @@ export const jsdoc = function (cfg) { return outputConfig; }; + +export { + getJsdocProcessorPlugin, +} from './getJsdocProcessorPlugin.js'; diff --git a/test/index.js b/test/index.js index b0b55e302..335656b83 100644 --- a/test/index.js +++ b/test/index.js @@ -14,6 +14,64 @@ describe('jsdoc()', () => { }); }); + it('Builds config with additional plugin', () => { + const pluginCfg = /** @type {Record} */ ({ + something: { + configs: { + testConfig: { + rules: { + semi: 'off', + }, + }, + }, + }, + }); + const cfg = jsdoc({ + plugins: pluginCfg, + }); + expect(cfg.plugins?.jsdoc).to.equal(jsdocDefault); + expect(cfg.plugins?.something).to.equal(pluginCfg.something); + expect(cfg.settings).to.deep.equal({ + jsdoc: {}, + }); + }); + + it('Builds config reflecting copied properties', () => { + const expected = { + basePath: 'aPath', + files: [ + 'someFiles', + ], + ignores: [ + 'ignore1', 'dist', + ], + language: 'json/jsonc', + languageOptions: { + ecmaVersion: /** @type {const} */ (2_023), + }, + linterOptions: { + noInlineConfig: true, + }, + name: 'test', + processor: 'abc', + }; + + const config = structuredClone(expected); + const cfg = jsdoc(config); + expect(cfg.plugins?.jsdoc).to.equal(jsdocDefault); + expect(cfg.settings).to.deep.equal({ + jsdoc: {}, + }); + for (const [ + prop, + val, + ] of Object.entries(expected)) { + expect(cfg[ + /** @type {keyof import('eslint').Linter.Config} */ (prop) + ]).to.deep.equal(val); + } + }); + it('Builds simple plugins config with rules', () => { /* eslint-disable jsdoc/valid-types -- Bug */ const rules = /** @type {{[key in keyof import('../src/rules.d.ts').Rules]?: import('eslint').Linter.RuleEntry}} */ ({ From 81cb787e021b7cd774dae908a8cfe830150672bf Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sat, 21 Jun 2025 21:52:30 +0800 Subject: [PATCH 065/189] feat: add `type-formatting` rule --- .README/rules/type-formatting.md | 74 ++++ docs/rules/type-formatting.md | 258 ++++++++++++ src/bin/generateRule.js | 8 +- src/index-cjs.js | 3 + src/index.js | 3 + src/rules.d.ts | 22 + src/rules/typeFormatting.js | 348 ++++++++++++++++ test/rules/assertions/typeFormatting.js | 520 ++++++++++++++++++++++++ test/rules/ruleNames.json | 1 + 9 files changed, 1233 insertions(+), 4 deletions(-) create mode 100644 .README/rules/type-formatting.md create mode 100644 docs/rules/type-formatting.md create mode 100644 src/rules/typeFormatting.js create mode 100644 test/rules/assertions/typeFormatting.js diff --git a/.README/rules/type-formatting.md b/.README/rules/type-formatting.md new file mode 100644 index 000000000..b650dff15 --- /dev/null +++ b/.README/rules/type-formatting.md @@ -0,0 +1,74 @@ +# `type-formatting` + +Formats JSDoc type values. + +Note that this rule should be considered **experimental**. The stringification +might not preserve other aspects of your original formatting and there could be +errors. + +Currently offers the following options for formatting types. + +## Options + +### `arrayBrackets` + +Determines how array generics are represented. Set to `angle` for the style `Array` or `square` for the style `type[]`. Defaults to "square". + +### `enableFixer` + +Whether to enable the fixer. Defaults to `true`. + +### `genericDot` + +Boolean value of whether to use a dot before the angled brackets of a generic (e.g., `SomeType.`). Defaults to `false`. + +### `objectFieldQuote` + +Whether and how object field properties should be quoted (e.g., `{"a": string}`). +Set to `single`, `double`, or `null`. Defaults to `null` (no quotes unless +required due to whitespace within the field). + +### `propertyQuotes` + +Whether and how namepath properties should be quoted (e.g., `ab."cd"."ef"`). +Set to `single`, `double`, or `null`. Defaults to `null` (no quotes unless +required due to whitespace within the property). + +### stringQuotes + +How string literals should be quoted (e.g., `"abc"`). Set to `single` +or `double`. Defaults to 'single'. + +### `objectFieldSeparator` + +For object properties, specify whether a "semicolon", "comma", "linebreak", +"semicolon-and-linebreak", or "comma-and-linebreak" should be used after +each object property-value pair. + +Defaults to `null` which is equivalent to "semicolon". + +### `objectFieldIndent` + +Indicates the whitespace to be added on each line preceding an object +property-value field. Defaults to the empty string. + +### `separatorForSingleObjectField` + +Whether to apply the `objectFieldSeparator` when there is only one +property-value object field present. Defaults to `false`. + +||| +|---|---| +|Context|everywhere| +|Tags|``| +|Recommended|false| +|Settings|| +|Options|`arrayBrackets`, `enableFixer`, `genericDot`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `propertyQuotes`, `separatorForSingleObjectField`, `stringQuotes`| + +## Failing examples + + + +## Passing examples + + diff --git a/docs/rules/type-formatting.md b/docs/rules/type-formatting.md new file mode 100644 index 000000000..b5ad20e96 --- /dev/null +++ b/docs/rules/type-formatting.md @@ -0,0 +1,258 @@ + + +# type-formatting + +Formats JSDoc type values. + +Note that this rule should be considered **experimental**. The stringification +might not preserve other aspects of your original formatting and there could be +errors. + +Currently offers the following options for formatting types. + + + +## Options + + + +### arrayBrackets + +Determines how array generics are represented. Set to `angle` for the style `Array` or `square` for the style `type[]`. Defaults to "square". + + + +### enableFixer + +Whether to enable the fixer. Defaults to `true`. + + + +### genericDot + +Boolean value of whether to use a dot before the angled brackets of a generic (e.g., `SomeType.`). Defaults to `false`. + + + +### objectFieldQuote + +Whether and how object field properties should be quoted (e.g., `{"a": string}`). +Set to `single`, `double`, or `null`. Defaults to `null` (no quotes unless +required due to whitespace within the field). + + + +### propertyQuotes + +Whether and how namepath properties should be quoted (e.g., `ab."cd"."ef"`). +Set to `single`, `double`, or `null`. Defaults to `null` (no quotes unless +required due to whitespace within the property). + + + +### stringQuotes + +How string literals should be quoted (e.g., `"abc"`). Set to `single` +or `double`. Defaults to 'single'. + + + +### objectFieldSeparator + +For object properties, specify whether a "semicolon", "comma", "linebreak", +"semicolon-and-linebreak", or "comma-and-linebreak" should be used after +each object property-value pair. + +Defaults to `null` which is equivalent to "semicolon". + + + +### objectFieldIndent + +Indicates the whitespace to be added on each line preceding an object +property-value field. Defaults to the empty string. + + + +### separatorForSingleObjectField + +Whether to apply the `objectFieldSeparator` when there is only one +property-value object field present. Defaults to `false`. + +||| +|---|---| +|Context|everywhere| +|Tags|``| +|Recommended|false| +|Settings|| +|Options|`arrayBrackets`, `enableFixer`, `genericDot`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `propertyQuotes`, `separatorForSingleObjectField`, `stringQuotes`| + + + +## Failing examples + +The following patterns are considered problems: + +````ts +/** + * @param {{a: string; b: number; c: boolean,}} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"objectFieldSeparator":"semicolon"}] +// Message: Inconsistent semicolon usage + +/** + * @param {{a: string; b: number; c: boolean,}} cfg + */ +// Settings: {"jsdoc":{"mode":"permissive"}} +// "jsdoc/type-formatting": ["error"|"warn", {"objectFieldSeparator":"semicolon"}] +// Message: Inconsistent semicolon usage + +/** + * @param {{a: string; b: number; c: boolean,}} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"enableFixer":false,"objectFieldSeparator":"semicolon"}] +// Message: Inconsistent semicolon usage + +/** + * @param {{a: string, b: number; c: boolean;}} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"objectFieldSeparator":"comma"}] +// Message: Inconsistent comma usage + +/** + * @param {{a: string, b: number; c: boolean,}} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"objectFieldIndent":" ","objectFieldSeparator":"linebreak"}] +// Message: Inconsistent linebreak usage + +/** + * @param {{ + * a: string, + * b: number; + * c: boolean, + * }} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"objectFieldIndent":" ","objectFieldSeparator":"linebreak"}] +// Message: Inconsistent linebreak usage + +/** + * @param {'abc'} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"stringQuotes":"double"}] +// Message: Inconsistent double string quotes usage + +/** + * @param {Array} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"arrayBrackets":"square"}] +// Message: Array bracket style should be square + +/** + * @param {SomeType} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"genericDot":true}] +// Message: Dot usage should be true + +/** + * @param {{a: string}} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"objectFieldQuote":"double"}] +// Message: Inconsistent object field quotes double + +/** + * @param {ab.cd.ef} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"propertyQuotes":"double"}] +// Message: Inconsistent double property quotes usage + +/** + * @param {{a: string}} cfg A long + * description + */ +// "jsdoc/type-formatting": ["error"|"warn", {"objectFieldIndent":" ","objectFieldSeparator":"semicolon","separatorForSingleObjectField":true}] +// Message: Inconsistent semicolon usage + +/** @param {{a: string, b: number; c: boolean,}} cfg */ +// "jsdoc/type-formatting": ["error"|"warn", {"objectFieldIndent":" ","objectFieldSeparator":"linebreak"}] +// Message: Inconsistent linebreak usage + +/** + * @param {{a: string, b: number; c: boolean,}} cfg */ +// "jsdoc/type-formatting": ["error"|"warn", {"objectFieldIndent":" ","objectFieldSeparator":"linebreak"}] +// Message: Inconsistent linebreak usage + +/** @param {{a: string, b: number; c: boolean,}} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"objectFieldIndent":" ","objectFieldSeparator":"linebreak"}] +// Message: Inconsistent linebreak usage + +/** + * @param {{ + * a: string, + * b: number + * }} cfg A long + * description + */ +// "jsdoc/type-formatting": ["error"|"warn", {"objectFieldIndent":" ","objectFieldSeparator":"semicolon-and-linebreak"}] +// Message: Inconsistent semicolon-and-linebreak usage +```` + + + + + +## Passing examples + +The following patterns are not considered problems: + +````ts +/** + * @param {{a: string; b: number; c: boolean}} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"objectFieldSeparator":"semicolon"}] + +/** + * @param {"abc"} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"stringQuotes":"double"}] + +/** + * @param {string[]} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"arrayBrackets":"square"}] + +/** + * @param {SomeType.} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"genericDot":true}] + +/** + * Due to jsdoc-type-pratt-parser representing the separator at the + * object level, this will not be reported. + * @param {{a: string, b: number; c: boolean,}} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"objectFieldSeparator":"comma"}] + +/** + * @param {A<} badParam + */ + +/** + * @param {{"a bc": string}} quotedKeyParam + */ + +/** + * @param {ab.cd.ef} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"propertyQuotes":null}] + +/** + * @param {ab."cd ef".gh} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"propertyQuotes":null}] + +/** + * @param cfg + */ +```` + diff --git a/src/bin/generateRule.js b/src/bin/generateRule.js index d01e2c7e3..77a69311c 100644 --- a/src/bin/generateRule.js +++ b/src/bin/generateRule.js @@ -250,21 +250,21 @@ export default iterateJsdoc(({ newLine: `import ${camelCasedRuleName} from './rules/${camelCasedRuleName}.js';`, oldIsCamel: true, oldRegex: /\nimport (?[^ ]*) from '.\/rules\/\1\.js';/gv, - path: './src/index.js', + path: './src/index-cjs.js', }); await replaceInOrder({ checkName: 'index recommended', newLine: `${' '.repeat(6)}'jsdoc/${ruleName}': ${recommended ? 'warnOrError' : '\'off\''},`, oldRegex: /\n\s{6}'jsdoc\/(?[^']*)': .*?,/gv, - path: './src/index.js', + path: './src/index-cjs.js', }); await replaceInOrder({ checkName: 'index rules', - newLine: `${' '.repeat(4)}'${ruleName}': ${camelCasedRuleName},`, + newLine: `${' '.repeat(2)}'${ruleName}': ${camelCasedRuleName},`, oldRegex: /\n\s{2}'(?[^']*)': [^,]*,/gv, - path: './src/index.js', + path: './src/index-cjs.js', }); await import('./generateDocs.js'); diff --git a/src/index-cjs.js b/src/index-cjs.js index 25a94c798..bbb4872dd 100644 --- a/src/index-cjs.js +++ b/src/index-cjs.js @@ -57,6 +57,7 @@ import requireYieldsCheck from './rules/requireYieldsCheck.js'; import sortTags from './rules/sortTags.js'; import tagLines from './rules/tagLines.js'; import textEscaping from './rules/textEscaping.js'; +import typeFormatting from './rules/typeFormatting.js'; import validTypes from './rules/validTypes.js'; /* eslint-disable jsdoc/valid-types -- Bug */ @@ -129,6 +130,7 @@ index.rules = { 'sort-tags': sortTags, 'tag-lines': tagLines, 'text-escaping': textEscaping, + 'type-formatting': typeFormatting, 'valid-types': validTypes, }; @@ -206,6 +208,7 @@ const createRecommendedRuleset = (warnOrError, flatName) => { 'jsdoc/sort-tags': 'off', 'jsdoc/tag-lines': warnOrError, 'jsdoc/text-escaping': 'off', + 'jsdoc/type-formatting': 'off', 'jsdoc/valid-types': warnOrError, }, }; diff --git a/src/index.js b/src/index.js index 0be1c5c52..546b12c9c 100644 --- a/src/index.js +++ b/src/index.js @@ -63,6 +63,7 @@ import requireYieldsCheck from './rules/requireYieldsCheck.js'; import sortTags from './rules/sortTags.js'; import tagLines from './rules/tagLines.js'; import textEscaping from './rules/textEscaping.js'; +import typeFormatting from './rules/typeFormatting.js'; import validTypes from './rules/validTypes.js'; /* eslint-disable jsdoc/valid-types -- Bug */ @@ -135,6 +136,7 @@ index.rules = { 'sort-tags': sortTags, 'tag-lines': tagLines, 'text-escaping': textEscaping, + 'type-formatting': typeFormatting, 'valid-types': validTypes, }; @@ -212,6 +214,7 @@ const createRecommendedRuleset = (warnOrError, flatName) => { 'jsdoc/sort-tags': 'off', 'jsdoc/tag-lines': warnOrError, 'jsdoc/text-escaping': 'off', + 'jsdoc/type-formatting': 'off', 'jsdoc/valid-types': warnOrError, }, }; diff --git a/src/rules.d.ts b/src/rules.d.ts index b89c0f9b0..47de0f95d 100644 --- a/src/rules.d.ts +++ b/src/rules.d.ts @@ -756,6 +756,28 @@ export interface Rules { } ]; + "jsdoc/type-formatting": + | [] + | [ + { + arrayBrackets?: "angle" | "square"; + enableFixer?: boolean; + genericDot?: boolean; + objectFieldIndent?: string; + objectFieldQuote?: "double" | "single" | null; + objectFieldSeparator?: + | "comma" + | "comma-and-linebreak" + | "linebreak" + | "semicolon" + | "semicolon-and-linebreak" + | null; + propertyQuotes?: "double" | "single" | null; + separatorForSingleObjectField?: boolean; + stringQuotes?: "double" | "single"; + } + ]; + "jsdoc/valid-types": | [] | [ diff --git a/src/rules/typeFormatting.js b/src/rules/typeFormatting.js new file mode 100644 index 000000000..21b7285f6 --- /dev/null +++ b/src/rules/typeFormatting.js @@ -0,0 +1,348 @@ +import iterateJsdoc from '../iterateJsdoc.js'; +import { + parse as parseType, + stringify, + traverse, + tryParse as tryParseType, +} from '@es-joy/jsdoccomment'; + +export default iterateJsdoc(({ + context, + indent, + jsdoc, + settings, + utils, +}) => { + const { + arrayBrackets = 'square', + enableFixer = true, + genericDot = false, + objectFieldIndent = '', + objectFieldQuote = null, + objectFieldSeparator = null, + propertyQuotes = null, + separatorForSingleObjectField = false, + stringQuotes = 'single', + } = context.options[0] || {}; + + const { + mode, + } = settings; + + /** + * @param {import('@es-joy/jsdoccomment').JsdocTagWithInline} tag + */ + const checkTypeFormats = (tag) => { + const potentialType = tag.type; + let parsedType; + try { + parsedType = mode === 'permissive' ? + tryParseType(/** @type {string} */ (potentialType)) : + parseType(/** @type {string} */ (potentialType), mode); + } catch { + return; + } + + const fix = () => { + const typeLines = stringify(parsedType).split('\n'); + const firstTypeLine = typeLines.shift(); + const lastTypeLine = typeLines.pop(); + + const beginNameOrDescIdx = tag.source.findIndex(({ + tokens, + }) => { + return tokens.name || tokens.description; + }); + + const nameAndDesc = tag.source.slice(beginNameOrDescIdx); + const initialNumber = tag.source[0].number; + const src = [ + // Get inevitably present tag from first `tag.source` + { + number: initialNumber, + source: '', + tokens: { + ...tag.source[0].tokens, + ...(typeLines.length || lastTypeLine ? { + end: '', + name: '', + postName: '', + postType: '', + } : {}), + type: '{' + firstTypeLine + (!typeLines.length && lastTypeLine === undefined ? '}' : ''), + }, + }, + // Get any intervening type lines + ...(typeLines.length ? typeLines.map((typeLine, idx) => { + return { + number: initialNumber + idx + 1, + source: '', + tokens: { + // Grab any delimiter info from first item + ...tag.source[0].tokens, + delimiter: tag.source[0].tokens.delimiter === '/**' ? '*' : tag.source[0].tokens.delimiter, + end: '', + name: '', + postName: '', + postTag: '', + postType: '', + start: indent + ' ', + tag: '', + type: typeLine, + }, + }; + }) : []), + ]; + + // Merge any final type line and name and description + if ( + // Name and description may be already included if present with the tag + beginNameOrDescIdx > 0 + ) { + src.push({ + number: src.length + 1, + source: '', + tokens: { + ...nameAndDesc[0].tokens, + type: lastTypeLine + '}', + }, + }); + + if ( + // Get any remaining description lines + nameAndDesc.length > 1 + ) { + src.push( + ...nameAndDesc.slice(1).map(({ + source, + tokens, + }, idx) => { + return { + number: src.length + idx + 2, + source, + tokens, + }; + }), + ); + } + } else { + if (lastTypeLine) { + src.push({ + number: src.length + 1, + source: '', + tokens: { + ...nameAndDesc[0].tokens, + delimiter: nameAndDesc[0].tokens.delimiter === '/**' ? '*' : nameAndDesc[0].tokens.delimiter, + postTag: '', + start: indent + ' ', + tag: '', + type: lastTypeLine + '}', + }, + }); + } + + if ( + // Get any remaining description lines + nameAndDesc.length > 1 + ) { + src.push( + ...nameAndDesc.slice(1).map(({ + source, + tokens, + }, idx) => { + return { + number: src.length + idx + 2, + source, + tokens, + }; + }), + ); + } + } + + tag.source = src; + + // Properly rewire `jsdoc.source` + const firstTagIdx = jsdoc.source.findIndex(({ + tokens: { + tag: tg, + }, + }) => { + return tg; + }); + + jsdoc.source = [ + ...jsdoc.source.slice(0, firstTagIdx), + ...jsdoc.tags.flatMap(({ + source, + }) => { + return source; + }), + ]; + }; + + /** @type {string[]} */ + const errorMessages = []; + let needToReport = false; + traverse(parsedType, (nde) => { + let typeFound = true; + let errorMessage = ''; + const initialType = stringify( + /** @type {import('jsdoc-type-pratt-parser').RootResult} */ (nde), + ); + switch (nde.type) { + case 'JsdocTypeGeneric': { + const typeNode = /** @type {import('jsdoc-type-pratt-parser').GenericResult} */ (nde); + if ('value' in typeNode.left && typeNode.left.value === 'Array') { + typeNode.meta.brackets = arrayBrackets; + errorMessage = `Array bracket style should be ${arrayBrackets}`; + } else { + typeNode.meta.dot = genericDot; + errorMessage = `Dot usage should be ${genericDot}`; + } + + break; + } + + case 'JsdocTypeObject': { + const typeNode = /** @type {import('jsdoc-type-pratt-parser').ObjectResult} */ (nde); + typeNode.meta.separator = objectFieldSeparator ?? undefined; + typeNode.meta.separatorForSingleObjectField = separatorForSingleObjectField; + typeNode.meta.propertyIndent = objectFieldIndent; + errorMessage = `Inconsistent ${objectFieldSeparator} usage`; + break; + } + + case 'JsdocTypeObjectField': { + const typeNode = /** @type {import('jsdoc-type-pratt-parser').ObjectFieldResult} */ (nde); + if (objectFieldQuote || + (typeof typeNode.key === 'string' && !(/\s/v).test(typeNode.key)) + ) { + typeNode.meta.quote = objectFieldQuote ?? undefined; + errorMessage = `Inconsistent object field quotes ${objectFieldQuote}`; + } else { + typeFound = false; + } + + break; + } + + case 'JsdocTypeProperty': { + const typeNode = /** @type {import('jsdoc-type-pratt-parser').PropertyResult} */ (nde); + + if (propertyQuotes || + (typeof typeNode.value === 'string' && !(/\s/v).test(typeNode.value)) + ) { + typeNode.meta.quote = propertyQuotes ?? undefined; + errorMessage = `Inconsistent ${propertyQuotes} property quotes usage`; + } else { + typeFound = false; + } + + break; + } + + case 'JsdocTypeStringValue': { + const typeNode = /** @type {import('jsdoc-type-pratt-parser').StringValueResult} */ (nde); + typeNode.meta.quote = stringQuotes; + errorMessage = `Inconsistent ${stringQuotes} string quotes usage`; + break; + } + + default: + typeFound = false; + break; + } + + if (typeFound) { + const convertedType = stringify(/** @type {import('jsdoc-type-pratt-parser').RootResult} */ (nde)); + if (initialType !== convertedType) { + needToReport = true; + errorMessages.push(errorMessage); + } + } + }); + + if (needToReport) { + for (const errorMessage of errorMessages) { + utils.reportJSDoc( + errorMessage, tag, enableFixer ? fix : null, true, + ); + } + } + }; + + const tags = utils.getPresentTags([ + 'param', + 'returns', + ]); + for (const tag of tags) { + checkTypeFormats(tag); + } +}, { + iterateAllJsdocs: true, + meta: { + docs: { + description: 'Formats JSDoc type values.', + url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/type-formatting.md#repos-sticky-header', + }, + fixable: 'code', + schema: [ + { + additionalProperties: false, + properties: { + arrayBrackets: { + enum: [ + 'angle', + 'square', + ], + }, + enableFixer: { + type: 'boolean', + }, + genericDot: { + type: 'boolean', + }, + objectFieldIndent: { + type: 'string', + }, + objectFieldQuote: { + enum: [ + 'double', + 'single', + null, + ], + }, + objectFieldSeparator: { + enum: [ + 'comma', + 'comma-and-linebreak', + 'linebreak', + 'semicolon', + 'semicolon-and-linebreak', + null, + ], + }, + propertyQuotes: { + enum: [ + 'double', + 'single', + null, + ], + }, + separatorForSingleObjectField: { + type: 'boolean', + }, + stringQuotes: { + enum: [ + 'double', + 'single', + ], + }, + }, + type: 'object', + }, + ], + type: 'suggestion', + }, +}); diff --git a/test/rules/assertions/typeFormatting.js b/test/rules/assertions/typeFormatting.js new file mode 100644 index 000000000..462e79011 --- /dev/null +++ b/test/rules/assertions/typeFormatting.js @@ -0,0 +1,520 @@ +export default { + invalid: [ + { + code: ` + /** + * @param {{a: string; b: number; c: boolean,}} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Inconsistent semicolon usage', + }, + ], + options: [ + { + objectFieldSeparator: 'semicolon', + }, + ], + output: ` + /** + * @param {{a: string; b: number; c: boolean}} cfg + */ + `, + }, + { + code: ` + /** + * @param {{a: string; b: number; c: boolean,}} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Inconsistent semicolon usage', + }, + ], + options: [ + { + objectFieldSeparator: 'semicolon', + }, + ], + output: ` + /** + * @param {{a: string; b: number; c: boolean}} cfg + */ + `, + settings: { + jsdoc: { + mode: 'permissive', + }, + }, + }, + { + code: ` + /** + * @param {{a: string; b: number; c: boolean,}} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Inconsistent semicolon usage', + }, + ], + options: [ + { + enableFixer: false, + objectFieldSeparator: 'semicolon', + }, + ], + }, + { + code: ` + /** + * @param {{a: string, b: number; c: boolean;}} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Inconsistent comma usage', + }, + ], + options: [ + { + objectFieldSeparator: 'comma', + }, + ], + output: ` + /** + * @param {{a: string, b: number, c: boolean}} cfg + */ + `, + }, + { + code: ` + /** + * @param {{a: string, b: number; c: boolean,}} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Inconsistent linebreak usage', + }, + ], + options: [ + { + objectFieldIndent: ' ', + objectFieldSeparator: 'linebreak', + }, + ], + output: ` + /** + * @param {{ + * a: string + * b: number + * c: boolean + * }} cfg + */ + `, + }, + { + code: ` + /** + * @param {{ + * a: string, + * b: number; + * c: boolean, + * }} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Inconsistent linebreak usage', + }, + ], + options: [ + { + objectFieldIndent: ' ', + objectFieldSeparator: 'linebreak', + }, + ], + output: ` + /** + * @param {{ + * a: string + * b: number + * c: boolean + * }} cfg + */ + `, + }, + { + code: ` + /** + * @param {'abc'} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Inconsistent double string quotes usage', + }, + ], + options: [ + { + stringQuotes: 'double', + }, + ], + output: ` + /** + * @param {"abc"} cfg + */ + `, + }, + { + code: ` + /** + * @param {Array} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Array bracket style should be square', + }, + ], + options: [ + { + arrayBrackets: 'square', + }, + ], + output: ` + /** + * @param {string[]} cfg + */ + `, + }, + { + code: ` + /** + * @param {SomeType} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Dot usage should be true', + }, + ], + options: [ + { + genericDot: true, + }, + ], + output: ` + /** + * @param {SomeType.} cfg + */ + `, + }, + { + code: ` + /** + * @param {{a: string}} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Inconsistent object field quotes double', + }, + ], + options: [ + { + objectFieldQuote: 'double', + }, + ], + output: ` + /** + * @param {{"a": string}} cfg + */ + `, + }, + { + code: ` + /** + * @param {ab.cd.ef} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Inconsistent double property quotes usage', + }, + { + line: 3, + message: 'Inconsistent double property quotes usage', + }, + ], + options: [ + { + propertyQuotes: 'double', + }, + ], + output: ` + /** + * @param {ab."cd"."ef"} cfg + */ + `, + }, + { + code: ` + /** + * @param {{a: string}} cfg A long + * description + */ + `, + errors: [ + { + line: 3, + message: 'Inconsistent semicolon usage', + }, + ], + options: [ + { + objectFieldIndent: ' ', + objectFieldSeparator: 'semicolon', + separatorForSingleObjectField: true, + }, + ], + output: ` + /** + * @param {{a: string;}} cfg A long + * description + */ + `, + }, + { + code: ` + /** @param {{a: string, b: number; c: boolean,}} cfg */ + `, + errors: [ + { + line: 2, + message: 'Inconsistent linebreak usage', + }, + ], + options: [ + { + objectFieldIndent: ' ', + objectFieldSeparator: 'linebreak', + }, + ], + output: ` + /** @param {{ + * a: string + * b: number + * c: boolean + * }} cfg */ + `, + }, + { + code: ` + /** + * @param {{a: string, b: number; c: boolean,}} cfg */ + `, + errors: [ + { + line: 3, + message: 'Inconsistent linebreak usage', + }, + ], + options: [ + { + objectFieldIndent: ' ', + objectFieldSeparator: 'linebreak', + }, + ], + output: ` + /** + * @param {{ + * a: string + * b: number + * c: boolean + * }} cfg */ + `, + }, + { + code: ` + /** @param {{a: string, b: number; c: boolean,}} cfg + */ + `, + errors: [ + { + line: 2, + message: 'Inconsistent linebreak usage', + }, + ], + options: [ + { + objectFieldIndent: ' ', + objectFieldSeparator: 'linebreak', + }, + ], + output: ` + /** @param {{ + * a: string + * b: number + * c: boolean + * }} cfg + */ + `, + }, + { + code: ` + /** + * @param {{ + * a: string, + * b: number + * }} cfg A long + * description + */ + `, + errors: [ + { + line: 3, + message: 'Inconsistent semicolon-and-linebreak usage', + }, + ], + options: [ + { + objectFieldIndent: ' ', + objectFieldSeparator: 'semicolon-and-linebreak', + }, + ], + output: ` + /** + * @param {{ + * a: string; + * b: number + * }} cfg A long + * description + */ + `, + }, + ], + valid: [ + { + code: ` + /** + * @param {{a: string; b: number; c: boolean}} cfg + */ + `, + options: [ + { + objectFieldSeparator: 'semicolon', + }, + ], + }, + { + code: ` + /** + * @param {"abc"} cfg + */ + `, + options: [ + { + stringQuotes: 'double', + }, + ], + }, + { + code: ` + /** + * @param {string[]} cfg + */ + `, + options: [ + { + arrayBrackets: 'square', + }, + ], + }, + { + code: ` + /** + * @param {SomeType.} cfg + */ + `, + options: [ + { + genericDot: true, + }, + ], + }, + { + code: ` + /** + * Due to jsdoc-type-pratt-parser representing the separator at the + * object level, this will not be reported. + * @param {{a: string, b: number; c: boolean,}} cfg + */ + `, + options: [ + { + objectFieldSeparator: 'comma', + }, + ], + }, + { + code: ` + /** + * @param {A<} badParam + */ + `, + }, + { + code: ` + /** + * @param {{"a bc": string}} quotedKeyParam + */ + `, + }, + { + code: ` + /** + * @param {ab.cd.ef} cfg + */ + `, + options: [ + { + propertyQuotes: null, + }, + ], + }, + { + code: ` + /** + * @param {ab."cd ef".gh} cfg + */ + `, + options: [ + { + propertyQuotes: null, + }, + ], + }, + { + code: ` + /** + * @param cfg + */ + `, + }, + ], +}; diff --git a/test/rules/ruleNames.json b/test/rules/ruleNames.json index df037553d..4f5ed3b1d 100644 --- a/test/rules/ruleNames.json +++ b/test/rules/ruleNames.json @@ -55,5 +55,6 @@ "sort-tags", "tag-lines", "text-escaping", + "type-formatting", "valid-types" ] From cc7f253f9f4c26693300abcc6ed6316b600b42e2 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Thu, 11 Sep 2025 06:16:10 +0800 Subject: [PATCH 066/189] feat(`type-formatting`): enhance error detection and add `unionSpacing` option; fixes #1143 --- .README/rules/type-formatting.md | 6 +- docs/rules/type-formatting.md | 67 ++++++++---- package.json | 6 +- pnpm-lock.yaml | 72 ++++++------- src/rules/typeFormatting.js | 92 +++++++++++------ test/rules/assertions/typeFormatting.js | 131 +++++++++++++++++++----- 6 files changed, 258 insertions(+), 116 deletions(-) diff --git a/.README/rules/type-formatting.md b/.README/rules/type-formatting.md index b650dff15..be9211638 100644 --- a/.README/rules/type-formatting.md +++ b/.README/rules/type-formatting.md @@ -57,13 +57,17 @@ property-value field. Defaults to the empty string. Whether to apply the `objectFieldSeparator` when there is only one property-value object field present. Defaults to `false`. +### `unionSpacing` + +Determines the spacing to add to unions (`|`). Defaults to a single space. + ||| |---|---| |Context|everywhere| |Tags|``| |Recommended|false| |Settings|| -|Options|`arrayBrackets`, `enableFixer`, `genericDot`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `propertyQuotes`, `separatorForSingleObjectField`, `stringQuotes`| +|Options|`arrayBrackets`, `enableFixer`, `genericDot`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `propertyQuotes`, `separatorForSingleObjectField`, `stringQuotes`, `unionSpacing`| ## Failing examples diff --git a/docs/rules/type-formatting.md b/docs/rules/type-formatting.md index b5ad20e96..f246d732a 100644 --- a/docs/rules/type-formatting.md +++ b/docs/rules/type-formatting.md @@ -79,13 +79,19 @@ property-value field. Defaults to the empty string. Whether to apply the `objectFieldSeparator` when there is only one property-value object field present. Defaults to `false`. + + +### unionSpacing + +Determines the spacing to add to unions (`|`). Defaults to a single space. + ||| |---|---| |Context|everywhere| |Tags|``| |Recommended|false| |Settings|| -|Options|`arrayBrackets`, `enableFixer`, `genericDot`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `propertyQuotes`, `separatorForSingleObjectField`, `stringQuotes`| +|Options|`arrayBrackets`, `enableFixer`, `genericDot`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `propertyQuotes`, `separatorForSingleObjectField`, `stringQuotes`, `unionSpacing`| @@ -98,32 +104,32 @@ The following patterns are considered problems: * @param {{a: string; b: number; c: boolean,}} cfg */ // "jsdoc/type-formatting": ["error"|"warn", {"objectFieldSeparator":"semicolon"}] -// Message: Inconsistent semicolon usage +// Message: Inconsistent semicolon separator usage /** * @param {{a: string; b: number; c: boolean,}} cfg */ // Settings: {"jsdoc":{"mode":"permissive"}} // "jsdoc/type-formatting": ["error"|"warn", {"objectFieldSeparator":"semicolon"}] -// Message: Inconsistent semicolon usage +// Message: Inconsistent semicolon separator usage /** * @param {{a: string; b: number; c: boolean,}} cfg */ // "jsdoc/type-formatting": ["error"|"warn", {"enableFixer":false,"objectFieldSeparator":"semicolon"}] -// Message: Inconsistent semicolon usage +// Message: Inconsistent semicolon separator usage /** * @param {{a: string, b: number; c: boolean;}} cfg */ // "jsdoc/type-formatting": ["error"|"warn", {"objectFieldSeparator":"comma"}] -// Message: Inconsistent comma usage +// Message: Inconsistent comma separator usage /** * @param {{a: string, b: number; c: boolean,}} cfg */ // "jsdoc/type-formatting": ["error"|"warn", {"objectFieldIndent":" ","objectFieldSeparator":"linebreak"}] -// Message: Inconsistent linebreak usage +// Message: Inconsistent linebreak separator usage /** * @param {{ @@ -133,7 +139,7 @@ The following patterns are considered problems: * }} cfg */ // "jsdoc/type-formatting": ["error"|"warn", {"objectFieldIndent":" ","objectFieldSeparator":"linebreak"}] -// Message: Inconsistent linebreak usage +// Message: Inconsistent linebreak separator usage /** * @param {'abc'} cfg @@ -170,21 +176,21 @@ The following patterns are considered problems: * description */ // "jsdoc/type-formatting": ["error"|"warn", {"objectFieldIndent":" ","objectFieldSeparator":"semicolon","separatorForSingleObjectField":true}] -// Message: Inconsistent semicolon usage +// Message: Inconsistent semicolon separator usage /** @param {{a: string, b: number; c: boolean,}} cfg */ // "jsdoc/type-formatting": ["error"|"warn", {"objectFieldIndent":" ","objectFieldSeparator":"linebreak"}] -// Message: Inconsistent linebreak usage +// Message: Inconsistent linebreak separator usage /** * @param {{a: string, b: number; c: boolean,}} cfg */ // "jsdoc/type-formatting": ["error"|"warn", {"objectFieldIndent":" ","objectFieldSeparator":"linebreak"}] -// Message: Inconsistent linebreak usage +// Message: Inconsistent linebreak separator usage /** @param {{a: string, b: number; c: boolean,}} cfg */ // "jsdoc/type-formatting": ["error"|"warn", {"objectFieldIndent":" ","objectFieldSeparator":"linebreak"}] -// Message: Inconsistent linebreak usage +// Message: Inconsistent linebreak separator usage /** * @param {{ @@ -194,7 +200,27 @@ The following patterns are considered problems: * description */ // "jsdoc/type-formatting": ["error"|"warn", {"objectFieldIndent":" ","objectFieldSeparator":"semicolon-and-linebreak"}] -// Message: Inconsistent semicolon-and-linebreak usage +// Message: Inconsistent semicolon-and-linebreak separator usage + +/** + * @param {ab | cd} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"unionSpacing":""}] +// Message: Inconsistent "" union spacing usage + +/** + * @param {ab|cd} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"unionSpacing":" "}] +// Message: Inconsistent " " union spacing usage + +/** + * Due to jsdoc-type-pratt-parser representing the separator at the + * object level, the exact error will not be reported. + * @param {{a: string, b: number; c: boolean,}} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"objectFieldSeparator":"comma"}] +// Message: There was an error with type formatting ```` @@ -226,13 +252,6 @@ The following patterns are not considered problems: */ // "jsdoc/type-formatting": ["error"|"warn", {"genericDot":true}] -/** - * Due to jsdoc-type-pratt-parser representing the separator at the - * object level, this will not be reported. - * @param {{a: string, b: number; c: boolean,}} cfg - */ -// "jsdoc/type-formatting": ["error"|"warn", {"objectFieldSeparator":"comma"}] - /** * @param {A<} badParam */ @@ -251,6 +270,16 @@ The following patterns are not considered problems: */ // "jsdoc/type-formatting": ["error"|"warn", {"propertyQuotes":null}] +/** + * @param {ab | cd} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"unionSpacing":" "}] + +/** + * @param {ab|cd} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"unionSpacing":""}] + /** * @param cfg */ diff --git a/package.json b/package.json index a8b99ca18..296031350 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "url": "http://gajus.com" }, "dependencies": { - "@es-joy/jsdoccomment": "~0.57.0", + "@es-joy/jsdoccomment": "~0.58.0", "are-docs-informative": "^0.0.2", "comment-parser": "1.4.1", "debug": "^4.4.1", @@ -56,7 +56,7 @@ "glob": "^11.0.3", "globals": "^16.4.0", "husky": "^9.1.7", - "jsdoc-type-pratt-parser": "^5.2.0", + "jsdoc-type-pratt-parser": "^5.4.0", "json-schema": "^0.4.0", "json-schema-to-typescript": "^15.0.4", "lint-staged": "^16.1.6", @@ -64,7 +64,7 @@ "open-editor": "^5.1.0", "replace": "^1.2.2", "rimraf": "^6.0.1", - "semantic-release": "^24.2.7", + "semantic-release": "^24.2.8", "typescript": "5.9.2", "typescript-eslint": "^8.43.0" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 75d7de58d..1e82c0a39 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: dependencies: '@es-joy/jsdoccomment': - specifier: ~0.57.0 - version: 0.57.0 + specifier: ~0.58.0 + version: 0.58.0 are-docs-informative: specifier: ^0.0.2 version: 0.0.2 @@ -74,13 +74,13 @@ importers: version: 0.6.3(typescript@5.9.2) '@semantic-release/commit-analyzer': specifier: ^13.0.1 - version: 13.0.1(semantic-release@24.2.7(typescript@5.9.2)) + version: 13.0.1(semantic-release@24.2.8(typescript@5.9.2)) '@semantic-release/github': specifier: ^11.0.5 - version: 11.0.5(semantic-release@24.2.7(typescript@5.9.2)) + version: 11.0.5(semantic-release@24.2.8(typescript@5.9.2)) '@semantic-release/npm': specifier: ^12.0.2 - version: 12.0.2(semantic-release@24.2.7(typescript@5.9.2)) + version: 12.0.2(semantic-release@24.2.8(typescript@5.9.2)) '@types/chai': specifier: ^5.2.2 version: 5.2.2 @@ -154,8 +154,8 @@ importers: specifier: ^9.1.7 version: 9.1.7 jsdoc-type-pratt-parser: - specifier: ^5.2.0 - version: 5.2.0 + specifier: ^5.4.0 + version: 5.4.0 json-schema: specifier: ^0.4.0 version: 0.4.0 @@ -178,8 +178,8 @@ importers: specifier: ^6.0.1 version: 6.0.1 semantic-release: - specifier: ^24.2.7 - version: 24.2.7(typescript@5.9.2) + specifier: ^24.2.8 + version: 24.2.8(typescript@5.9.2) typescript: specifier: 5.9.2 version: 5.9.2 @@ -793,8 +793,8 @@ packages: resolution: {integrity: sha512-c6EW+aA1w2rjqOMjbL93nZlwxp6c1Ln06vTYs5FjRRhmJXK8V/OrSXdT+pUr4aRYgjCgu8/OkiZr0tzeVrRSbw==} engines: {node: '>=20.11.0'} - '@es-joy/jsdoccomment@0.57.0': - resolution: {integrity: sha512-M4isJXgy+ZLXvt9EFLHuG5+6Q8hl1iSn3ZnO5R+DiPLUBvsTOh93fZ9X/X1z3l6/pmq3STZtqrEAi6SaPzB4AQ==} + '@es-joy/jsdoccomment@0.58.0': + resolution: {integrity: sha512-smMc5pDht/UVsCD3hhw/a/e/p8m0RdRYiluXToVfd+d4yaQQh7nn9bACjkk6nXJvat7EWPAxuFkMEFfrxeGa3Q==} engines: {node: '>=20.11.0'} '@eslint-community/eslint-utils@4.8.0': @@ -3049,9 +3049,9 @@ packages: highlight.js@10.7.3: resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} - hook-std@3.0.0: - resolution: {integrity: sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hook-std@4.0.0: + resolution: {integrity: sha512-IHI4bEVOt3vRUDJ+bFA9VUJlo7SzvFARPNLw75pqSmAOP2HmTWfFJtPvLBrDrlgjEYXY9zs7SFdHPQaJShkSCQ==} + engines: {node: '>=20'} hosted-git-info@7.0.2: resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} @@ -3454,8 +3454,8 @@ packages: resolution: {integrity: sha512-DYYlVP1fe4QBMh2xTIs20/YeTz2GYVbWAEZweHSZD+qQ/Cx2d5RShuhhsdk64eTjNq0FeVnteP/qVOgaywSRbg==} engines: {node: '>=12.0.0'} - jsdoc-type-pratt-parser@5.2.0: - resolution: {integrity: sha512-qJmErzgL4DLj4lyRkDWnEXZRNu3X3CJxVKKhuUPwqPFMiJV6K7/6O//D2Uf+rRi6+qTPgHWxDAgfGllEXoGkMA==} + jsdoc-type-pratt-parser@5.4.0: + resolution: {integrity: sha512-F9GQ+F1ZU6qvSrZV8fNFpjDNf614YzR2eF6S0+XbDjAcUI28FSoXnYZFjQmb1kFx3rrJb5PnxUH3/Yti6fcM+g==} engines: {node: '>=12.0.0'} jsdom@6.5.1: @@ -4470,8 +4470,8 @@ packages: resolution: {integrity: sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==} engines: {node: ^14.0.0 || >=16.0.0} - semantic-release@24.2.7: - resolution: {integrity: sha512-g7RssbTAbir1k/S7uSwSVZFfFXwpomUB9Oas0+xi9KStSCmeDXcA7rNhiskjLqvUe/Evhx8fVCT16OSa34eM5g==} + semantic-release@24.2.8: + resolution: {integrity: sha512-uvoLiKEB/AvvA3SCPE78cd90nVJXn220kkEA6sNGzDpas4s7pe4OgYWvhfR0lvWBdBH/T0RFCI6U+GvcT2CypQ==} engines: {node: '>=20.8.1'} hasBin: true @@ -6014,13 +6014,13 @@ snapshots: esquery: 1.6.0 jsdoc-type-pratt-parser: 5.1.1 - '@es-joy/jsdoccomment@0.57.0': + '@es-joy/jsdoccomment@0.58.0': dependencies: '@types/estree': 1.0.8 '@typescript-eslint/types': 8.43.0 comment-parser: 1.4.1 esquery: 1.6.0 - jsdoc-type-pratt-parser: 5.2.0 + jsdoc-type-pratt-parser: 5.4.0 '@eslint-community/eslint-utils@4.8.0(eslint@9.35.0(jiti@2.5.1))': dependencies: @@ -6500,7 +6500,7 @@ snapshots: '@sec-ant/readable-stream@0.4.1': {} - '@semantic-release/commit-analyzer@13.0.1(semantic-release@24.2.7(typescript@5.9.2))': + '@semantic-release/commit-analyzer@13.0.1(semantic-release@24.2.8(typescript@5.9.2))': dependencies: conventional-changelog-angular: 8.0.0 conventional-changelog-writer: 8.2.0 @@ -6510,13 +6510,13 @@ snapshots: import-from-esm: 2.0.0 lodash-es: 4.17.21 micromatch: 4.0.8 - semantic-release: 24.2.7(typescript@5.9.2) + semantic-release: 24.2.8(typescript@5.9.2) transitivePeerDependencies: - supports-color '@semantic-release/error@4.0.0': {} - '@semantic-release/github@11.0.5(semantic-release@24.2.7(typescript@5.9.2))': + '@semantic-release/github@11.0.5(semantic-release@24.2.8(typescript@5.9.2))': dependencies: '@octokit/core': 7.0.3 '@octokit/plugin-paginate-rest': 13.1.1(@octokit/core@7.0.3) @@ -6533,12 +6533,12 @@ snapshots: lodash-es: 4.17.21 mime: 4.0.7 p-filter: 4.1.0 - semantic-release: 24.2.7(typescript@5.9.2) + semantic-release: 24.2.8(typescript@5.9.2) url-join: 5.0.0 transitivePeerDependencies: - supports-color - '@semantic-release/npm@12.0.2(semantic-release@24.2.7(typescript@5.9.2))': + '@semantic-release/npm@12.0.2(semantic-release@24.2.8(typescript@5.9.2))': dependencies: '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 @@ -6551,11 +6551,11 @@ snapshots: rc: 1.2.8 read-pkg: 9.0.1 registry-auth-token: 5.1.0 - semantic-release: 24.2.7(typescript@5.9.2) + semantic-release: 24.2.8(typescript@5.9.2) semver: 7.7.2 tempy: 3.1.0 - '@semantic-release/release-notes-generator@14.0.3(semantic-release@24.2.7(typescript@5.9.2))': + '@semantic-release/release-notes-generator@14.0.3(semantic-release@24.2.8(typescript@5.9.2))': dependencies: conventional-changelog-angular: 8.0.0 conventional-changelog-writer: 8.2.0 @@ -6567,7 +6567,7 @@ snapshots: into-stream: 7.0.0 lodash-es: 4.17.21 read-package-up: 11.0.0 - semantic-release: 24.2.7(typescript@5.9.2) + semantic-release: 24.2.8(typescript@5.9.2) transitivePeerDependencies: - supports-color @@ -8802,7 +8802,7 @@ snapshots: highlight.js@10.7.3: {} - hook-std@3.0.0: {} + hook-std@4.0.0: {} hosted-git-info@7.0.2: dependencies: @@ -9194,7 +9194,7 @@ snapshots: jsdoc-type-pratt-parser@5.1.1: {} - jsdoc-type-pratt-parser@5.2.0: {} + jsdoc-type-pratt-parser@5.4.0: {} jsdom@6.5.1: dependencies: @@ -10220,13 +10220,13 @@ snapshots: refa: 0.12.1 regexp-ast-analysis: 0.7.1 - semantic-release@24.2.7(typescript@5.9.2): + semantic-release@24.2.8(typescript@5.9.2): dependencies: - '@semantic-release/commit-analyzer': 13.0.1(semantic-release@24.2.7(typescript@5.9.2)) + '@semantic-release/commit-analyzer': 13.0.1(semantic-release@24.2.8(typescript@5.9.2)) '@semantic-release/error': 4.0.0 - '@semantic-release/github': 11.0.5(semantic-release@24.2.7(typescript@5.9.2)) - '@semantic-release/npm': 12.0.2(semantic-release@24.2.7(typescript@5.9.2)) - '@semantic-release/release-notes-generator': 14.0.3(semantic-release@24.2.7(typescript@5.9.2)) + '@semantic-release/github': 11.0.5(semantic-release@24.2.8(typescript@5.9.2)) + '@semantic-release/npm': 12.0.2(semantic-release@24.2.8(typescript@5.9.2)) + '@semantic-release/release-notes-generator': 14.0.3(semantic-release@24.2.8(typescript@5.9.2)) aggregate-error: 5.0.0 cosmiconfig: 9.0.0(typescript@5.9.2) debug: 4.4.1(supports-color@8.1.1) @@ -10236,7 +10236,7 @@ snapshots: find-versions: 6.0.0 get-stream: 6.0.1 git-log-parser: 1.2.1 - hook-std: 3.0.0 + hook-std: 4.0.0 hosted-git-info: 8.1.0 import-from-esm: 2.0.0 lodash-es: 4.17.21 diff --git a/src/rules/typeFormatting.js b/src/rules/typeFormatting.js index 21b7285f6..af9414630 100644 --- a/src/rules/typeFormatting.js +++ b/src/rules/typeFormatting.js @@ -19,10 +19,11 @@ export default iterateJsdoc(({ genericDot = false, objectFieldIndent = '', objectFieldQuote = null, - objectFieldSeparator = null, + objectFieldSeparator = 'comma', propertyQuotes = null, separatorForSingleObjectField = false, stringQuotes = 'single', + unionSpacing = ' ', } = context.options[0] || {}; const { @@ -183,20 +184,20 @@ export default iterateJsdoc(({ /** @type {string[]} */ const errorMessages = []; - let needToReport = false; + + // eslint-disable-next-line complexity -- Todo traverse(parsedType, (nde) => { - let typeFound = true; let errorMessage = ''; - const initialType = stringify( - /** @type {import('jsdoc-type-pratt-parser').RootResult} */ (nde), - ); + switch (nde.type) { case 'JsdocTypeGeneric': { const typeNode = /** @type {import('jsdoc-type-pratt-parser').GenericResult} */ (nde); if ('value' in typeNode.left && typeNode.left.value === 'Array') { - typeNode.meta.brackets = arrayBrackets; - errorMessage = `Array bracket style should be ${arrayBrackets}`; - } else { + if (typeNode.meta.brackets !== arrayBrackets) { + typeNode.meta.brackets = arrayBrackets; + errorMessage = `Array bracket style should be ${arrayBrackets}`; + } + } else if (typeNode.meta.dot !== genericDot) { typeNode.meta.dot = genericDot; errorMessage = `Dot usage should be ${genericDot}`; } @@ -206,22 +207,28 @@ export default iterateJsdoc(({ case 'JsdocTypeObject': { const typeNode = /** @type {import('jsdoc-type-pratt-parser').ObjectResult} */ (nde); - typeNode.meta.separator = objectFieldSeparator ?? undefined; - typeNode.meta.separatorForSingleObjectField = separatorForSingleObjectField; - typeNode.meta.propertyIndent = objectFieldIndent; - errorMessage = `Inconsistent ${objectFieldSeparator} usage`; + if ( + (typeNode.meta.separator ?? 'comma') !== objectFieldSeparator || + (typeNode.meta.separatorForSingleObjectField ?? false) !== separatorForSingleObjectField || + (typeNode.meta.propertyIndent ?? '') !== objectFieldIndent + ) { + typeNode.meta.separator = objectFieldSeparator; + typeNode.meta.separatorForSingleObjectField = separatorForSingleObjectField; + typeNode.meta.propertyIndent = objectFieldIndent; + errorMessage = `Inconsistent ${objectFieldSeparator} separator usage`; + } + break; } case 'JsdocTypeObjectField': { const typeNode = /** @type {import('jsdoc-type-pratt-parser').ObjectFieldResult} */ (nde); - if (objectFieldQuote || - (typeof typeNode.key === 'string' && !(/\s/v).test(typeNode.key)) + if ((objectFieldQuote || + (typeof typeNode.key === 'string' && !(/\s/v).test(typeNode.key))) && + typeNode.meta.quote !== (objectFieldQuote ?? undefined) ) { typeNode.meta.quote = objectFieldQuote ?? undefined; errorMessage = `Inconsistent object field quotes ${objectFieldQuote}`; - } else { - typeFound = false; } break; @@ -230,13 +237,12 @@ export default iterateJsdoc(({ case 'JsdocTypeProperty': { const typeNode = /** @type {import('jsdoc-type-pratt-parser').PropertyResult} */ (nde); - if (propertyQuotes || - (typeof typeNode.value === 'string' && !(/\s/v).test(typeNode.value)) + if ((propertyQuotes || + (typeof typeNode.value === 'string' && !(/\s/v).test(typeNode.value))) && + typeNode.meta.quote !== (propertyQuotes ?? undefined) ) { typeNode.meta.quote = propertyQuotes ?? undefined; errorMessage = `Inconsistent ${propertyQuotes} property quotes usage`; - } else { - typeFound = false; } break; @@ -244,31 +250,49 @@ export default iterateJsdoc(({ case 'JsdocTypeStringValue': { const typeNode = /** @type {import('jsdoc-type-pratt-parser').StringValueResult} */ (nde); - typeNode.meta.quote = stringQuotes; - errorMessage = `Inconsistent ${stringQuotes} string quotes usage`; + if (typeNode.meta.quote !== stringQuotes) { + typeNode.meta.quote = stringQuotes; + errorMessage = `Inconsistent ${stringQuotes} string quotes usage`; + } + + break; + } + + case 'JsdocTypeUnion': { + const typeNode = /** @type {import('jsdoc-type-pratt-parser').UnionResult} */ (nde); + if (typeNode.meta?.spacing !== unionSpacing) { + typeNode.meta = { + spacing: unionSpacing, + }; + errorMessage = `Inconsistent "${unionSpacing}" union spacing usage`; + } + break; } default: - typeFound = false; break; } - if (typeFound) { - const convertedType = stringify(/** @type {import('jsdoc-type-pratt-parser').RootResult} */ (nde)); - if (initialType !== convertedType) { - needToReport = true; - errorMessages.push(errorMessage); - } + if (errorMessage) { + errorMessages.push(errorMessage); } }); - if (needToReport) { + const differentResult = tag.type !== stringify(parsedType); + + if (errorMessages.length && differentResult) { for (const errorMessage of errorMessages) { utils.reportJSDoc( - errorMessage, tag, enableFixer ? fix : null, true, + errorMessage, tag, enableFixer ? fix : null, ); } + // Stringification may have been equal previously (and thus no error reported) + // because the stringification doesn't preserve everything + } else if (differentResult) { + utils.reportJSDoc( + 'There was an error with type formatting', tag, enableFixer ? fix : null, + ); } }; @@ -320,7 +344,6 @@ export default iterateJsdoc(({ 'linebreak', 'semicolon', 'semicolon-and-linebreak', - null, ], }, propertyQuotes: { @@ -339,6 +362,9 @@ export default iterateJsdoc(({ 'single', ], }, + unionSpacing: { + type: 'string', + }, }, type: 'object', }, diff --git a/test/rules/assertions/typeFormatting.js b/test/rules/assertions/typeFormatting.js index 462e79011..f34ca0d1e 100644 --- a/test/rules/assertions/typeFormatting.js +++ b/test/rules/assertions/typeFormatting.js @@ -9,7 +9,7 @@ export default { errors: [ { line: 3, - message: 'Inconsistent semicolon usage', + message: 'Inconsistent semicolon separator usage', }, ], options: [ @@ -32,7 +32,7 @@ export default { errors: [ { line: 3, - message: 'Inconsistent semicolon usage', + message: 'Inconsistent semicolon separator usage', }, ], options: [ @@ -60,7 +60,7 @@ export default { errors: [ { line: 3, - message: 'Inconsistent semicolon usage', + message: 'Inconsistent semicolon separator usage', }, ], options: [ @@ -79,7 +79,7 @@ export default { errors: [ { line: 3, - message: 'Inconsistent comma usage', + message: 'Inconsistent comma separator usage', }, ], options: [ @@ -102,7 +102,7 @@ export default { errors: [ { line: 3, - message: 'Inconsistent linebreak usage', + message: 'Inconsistent linebreak separator usage', }, ], options: [ @@ -134,7 +134,7 @@ export default { errors: [ { line: 3, - message: 'Inconsistent linebreak usage', + message: 'Inconsistent linebreak separator usage', }, ], options: [ @@ -282,7 +282,7 @@ export default { errors: [ { line: 3, - message: 'Inconsistent semicolon usage', + message: 'Inconsistent semicolon separator usage', }, ], options: [ @@ -306,7 +306,7 @@ export default { errors: [ { line: 2, - message: 'Inconsistent linebreak usage', + message: 'Inconsistent linebreak separator usage', }, ], options: [ @@ -331,7 +331,7 @@ export default { errors: [ { line: 3, - message: 'Inconsistent linebreak usage', + message: 'Inconsistent linebreak separator usage', }, ], options: [ @@ -357,7 +357,7 @@ export default { errors: [ { line: 2, - message: 'Inconsistent linebreak usage', + message: 'Inconsistent linebreak separator usage', }, ], options: [ @@ -388,7 +388,7 @@ export default { errors: [ { line: 3, - message: 'Inconsistent semicolon-and-linebreak usage', + message: 'Inconsistent semicolon-and-linebreak separator usage', }, ], options: [ @@ -407,6 +407,79 @@ export default { */ `, }, + { + code: ` + /** + * @param {ab | cd} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Inconsistent "" union spacing usage', + }, + ], + options: [ + { + unionSpacing: '', + }, + ], + output: ` + /** + * @param {ab|cd} cfg + */ + `, + }, + { + code: ` + /** + * @param {ab|cd} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Inconsistent " " union spacing usage', + }, + ], + options: [ + { + unionSpacing: ' ', + }, + ], + output: ` + /** + * @param {ab | cd} cfg + */ + `, + }, + { + code: ` + /** + * Due to jsdoc-type-pratt-parser representing the separator at the + * object level, the exact error will not be reported. + * @param {{a: string, b: number; c: boolean,}} cfg + */ + `, + errors: [ + { + line: 5, + message: 'There was an error with type formatting', + }, + ], + options: [ + { + objectFieldSeparator: 'comma', + }, + ], + output: ` + /** + * Due to jsdoc-type-pratt-parser representing the separator at the + * object level, the exact error will not be reported. + * @param {{a: string, b: number, c: boolean}} cfg + */ + `, + }, ], valid: [ { @@ -460,35 +533,33 @@ export default { { code: ` /** - * Due to jsdoc-type-pratt-parser representing the separator at the - * object level, this will not be reported. - * @param {{a: string, b: number; c: boolean,}} cfg + * @param {A<} badParam */ `, - options: [ - { - objectFieldSeparator: 'comma', - }, - ], }, { code: ` /** - * @param {A<} badParam + * @param {{"a bc": string}} quotedKeyParam */ `, }, { code: ` /** - * @param {{"a bc": string}} quotedKeyParam + * @param {ab.cd.ef} cfg */ `, + options: [ + { + propertyQuotes: null, + }, + ], }, { code: ` /** - * @param {ab.cd.ef} cfg + * @param {ab."cd ef".gh} cfg */ `, options: [ @@ -500,12 +571,24 @@ export default { { code: ` /** - * @param {ab."cd ef".gh} cfg + * @param {ab | cd} cfg */ `, options: [ { - propertyQuotes: null, + unionSpacing: ' ', + }, + ], + }, + { + code: ` + /** + * @param {ab|cd} cfg + */ + `, + options: [ + { + unionSpacing: '', }, ], }, From 77e169180d779ee71e830fa3c9f68ee3d39667ba Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Thu, 11 Sep 2025 08:22:36 +0800 Subject: [PATCH 067/189] feat(`type-formatting`): check type and typedef tags and add `typeBracketSpacing` option --- .README/rules/type-formatting.md | 8 ++++- docs/rules/type-formatting.md | 22 +++++++++++- src/rules/typeFormatting.js | 48 ++++++++++++++++++++----- test/rules/assertions/typeFormatting.js | 46 ++++++++++++++++++++++++ 4 files changed, 113 insertions(+), 11 deletions(-) diff --git a/.README/rules/type-formatting.md b/.README/rules/type-formatting.md index be9211638..e1bfd8bc1 100644 --- a/.README/rules/type-formatting.md +++ b/.README/rules/type-formatting.md @@ -57,6 +57,12 @@ property-value field. Defaults to the empty string. Whether to apply the `objectFieldSeparator` when there is only one property-value object field present. Defaults to `false`. +### `typeBracketSpacing` + +A string of spaces that will be added immediately after the type's initial +curly bracket and immediately before its ending curly bracket. Defaults +to the empty string. + ### `unionSpacing` Determines the spacing to add to unions (`|`). Defaults to a single space. @@ -67,7 +73,7 @@ Determines the spacing to add to unions (`|`). Defaults to a single space. |Tags|``| |Recommended|false| |Settings|| -|Options|`arrayBrackets`, `enableFixer`, `genericDot`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `propertyQuotes`, `separatorForSingleObjectField`, `stringQuotes`, `unionSpacing`| +|Options|`arrayBrackets`, `enableFixer`, `genericDot`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `propertyQuotes`, `separatorForSingleObjectField`, `stringQuotes`, `typeBracketSpacing`, `unionSpacing`| ## Failing examples diff --git a/docs/rules/type-formatting.md b/docs/rules/type-formatting.md index f246d732a..eecdcf6f0 100644 --- a/docs/rules/type-formatting.md +++ b/docs/rules/type-formatting.md @@ -79,6 +79,14 @@ property-value field. Defaults to the empty string. Whether to apply the `objectFieldSeparator` when there is only one property-value object field present. Defaults to `false`. + + +### typeBracketSpacing + +A string of spaces that will be added immediately after the type's initial +curly bracket and immediately before its ending curly bracket. Defaults +to the empty string. + ### unionSpacing @@ -91,7 +99,7 @@ Determines the spacing to add to unions (`|`). Defaults to a single space. |Tags|``| |Recommended|false| |Settings|| -|Options|`arrayBrackets`, `enableFixer`, `genericDot`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `propertyQuotes`, `separatorForSingleObjectField`, `stringQuotes`, `unionSpacing`| +|Options|`arrayBrackets`, `enableFixer`, `genericDot`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `propertyQuotes`, `separatorForSingleObjectField`, `stringQuotes`, `typeBracketSpacing`, `unionSpacing`| @@ -221,6 +229,18 @@ The following patterns are considered problems: */ // "jsdoc/type-formatting": ["error"|"warn", {"objectFieldSeparator":"comma"}] // Message: There was an error with type formatting + +/** + * @type {string} + */ +// "jsdoc/type-formatting": ["error"|"warn", {"typeBracketSpacing":" "}] +// Message: Must have initial and final " " spacing + +/** + * @type { string } + */ +// "jsdoc/type-formatting": ["error"|"warn", {"typeBracketSpacing":""}] +// Message: Must have no initial spacing ```` diff --git a/src/rules/typeFormatting.js b/src/rules/typeFormatting.js index af9414630..d48f69362 100644 --- a/src/rules/typeFormatting.js +++ b/src/rules/typeFormatting.js @@ -23,6 +23,7 @@ export default iterateJsdoc(({ propertyQuotes = null, separatorForSingleObjectField = false, stringQuotes = 'single', + typeBracketSpacing = '', unionSpacing = ' ', } = context.options[0] || {}; @@ -55,7 +56,10 @@ export default iterateJsdoc(({ return tokens.name || tokens.description; }); - const nameAndDesc = tag.source.slice(beginNameOrDescIdx); + const nameAndDesc = beginNameOrDescIdx === -1 ? + null : + tag.source.slice(beginNameOrDescIdx); + const initialNumber = tag.source[0].number; const src = [ // Get inevitably present tag from first `tag.source` @@ -70,7 +74,7 @@ export default iterateJsdoc(({ postName: '', postType: '', } : {}), - type: '{' + firstTypeLine + (!typeLines.length && lastTypeLine === undefined ? '}' : ''), + type: '{' + typeBracketSpacing + firstTypeLine + (!typeLines.length && lastTypeLine === undefined ? typeBracketSpacing + '}' : ''), }, }, // Get any intervening type lines @@ -98,14 +102,14 @@ export default iterateJsdoc(({ // Merge any final type line and name and description if ( // Name and description may be already included if present with the tag - beginNameOrDescIdx > 0 + nameAndDesc && beginNameOrDescIdx > 0 ) { src.push({ number: src.length + 1, source: '', tokens: { ...nameAndDesc[0].tokens, - type: lastTypeLine + '}', + type: lastTypeLine + typeBracketSpacing + '}', }, }); @@ -126,7 +130,7 @@ export default iterateJsdoc(({ }), ); } - } else { + } else if (nameAndDesc) { if (lastTypeLine) { src.push({ number: src.length + 1, @@ -137,14 +141,14 @@ export default iterateJsdoc(({ postTag: '', start: indent + ' ', tag: '', - type: lastTypeLine + '}', + type: lastTypeLine + typeBracketSpacing + '}', }, }); } if ( // Get any remaining description lines - nameAndDesc.length > 1 + nameAndDesc && nameAndDesc.length > 1 ) { src.push( ...nameAndDesc.slice(1).map(({ @@ -172,6 +176,14 @@ export default iterateJsdoc(({ return tg; }); + const initialEndSource = jsdoc.source.find(({ + tokens: { + end, + }, + }) => { + return end; + }); + jsdoc.source = [ ...jsdoc.source.slice(0, firstTagIdx), ...jsdoc.tags.flatMap(({ @@ -180,11 +192,21 @@ export default iterateJsdoc(({ return source; }), ]; + + if (initialEndSource && !jsdoc.source.at(-1)?.tokens?.end) { + jsdoc.source.push(initialEndSource); + } }; /** @type {string[]} */ const errorMessages = []; + if (typeBracketSpacing && (!tag.type.startsWith(typeBracketSpacing) || !tag.type.endsWith(typeBracketSpacing))) { + errorMessages.push(`Must have initial and final "${typeBracketSpacing}" spacing`); + } else if (!typeBracketSpacing && ((/^\s/v).test(tag.type) || (/\s$/v).test(tag.type))) { + errorMessages.push('Must have no initial spacing'); + } + // eslint-disable-next-line complexity -- Todo traverse(parsedType, (nde) => { let errorMessage = ''; @@ -279,7 +301,8 @@ export default iterateJsdoc(({ } }); - const differentResult = tag.type !== stringify(parsedType); + const differentResult = tag.type !== + typeBracketSpacing + stringify(parsedType) + typeBracketSpacing; if (errorMessages.length && differentResult) { for (const errorMessage of errorMessages) { @@ -299,9 +322,13 @@ export default iterateJsdoc(({ const tags = utils.getPresentTags([ 'param', 'returns', + 'type', + 'typedef', ]); for (const tag of tags) { - checkTypeFormats(tag); + if (tag.type) { + checkTypeFormats(tag); + } } }, { iterateAllJsdocs: true, @@ -362,6 +389,9 @@ export default iterateJsdoc(({ 'single', ], }, + typeBracketSpacing: { + type: 'string', + }, unionSpacing: { type: 'string', }, diff --git a/test/rules/assertions/typeFormatting.js b/test/rules/assertions/typeFormatting.js index f34ca0d1e..9bf6f1690 100644 --- a/test/rules/assertions/typeFormatting.js +++ b/test/rules/assertions/typeFormatting.js @@ -480,6 +480,52 @@ export default { */ `, }, + { + code: ` + /** + * @type {string} + */ + `, + errors: [ + { + line: 3, + message: 'Must have initial and final " " spacing', + }, + ], + options: [ + { + typeBracketSpacing: ' ', + }, + ], + output: ` + /** + * @type { string } + */ + `, + }, + { + code: ` + /** + * @type { string } + */ + `, + errors: [ + { + line: 3, + message: 'Must have no initial spacing', + }, + ], + options: [ + { + typeBracketSpacing: '', + }, + ], + output: ` + /** + * @type {string} + */ + `, + }, ], valid: [ { From 5852fd9cfb32a4a60055ebffceb4b9b83e86a156 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Thu, 11 Sep 2025 08:28:50 +0800 Subject: [PATCH 068/189] feat(`type-formatting`): add `objectFieldSeparatorTrailingPunctuation` option; fixes #1430 --- .README/rules/type-formatting.md | 9 +++- docs/rules/type-formatting.md | 27 +++++++++++- src/rules/typeFormatting.js | 8 +++- test/rules/assertions/typeFormatting.js | 57 +++++++++++++++++++++++++ 4 files changed, 98 insertions(+), 3 deletions(-) diff --git a/.README/rules/type-formatting.md b/.README/rules/type-formatting.md index e1bfd8bc1..f7afc6ba2 100644 --- a/.README/rules/type-formatting.md +++ b/.README/rules/type-formatting.md @@ -52,6 +52,13 @@ Defaults to `null` which is equivalent to "semicolon". Indicates the whitespace to be added on each line preceding an object property-value field. Defaults to the empty string. +### `objectFieldSeparatorTrailingPunctuation` + +If `separatorForSingleObjectField` is not in effect (i.e., if it is `false` +or there are multiple property-value object fields present), this property +will determine whether to add trailing punctuation corresponding to the +`objectFieldSeparator`. Defaults to `false`. + ### `separatorForSingleObjectField` Whether to apply the `objectFieldSeparator` when there is only one @@ -73,7 +80,7 @@ Determines the spacing to add to unions (`|`). Defaults to a single space. |Tags|``| |Recommended|false| |Settings|| -|Options|`arrayBrackets`, `enableFixer`, `genericDot`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `propertyQuotes`, `separatorForSingleObjectField`, `stringQuotes`, `typeBracketSpacing`, `unionSpacing`| +|Options|`arrayBrackets`, `enableFixer`, `genericDot`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `objectFieldSeparatorTrailingPunctuation`, `propertyQuotes`, `separatorForSingleObjectField`, `stringQuotes`, `typeBracketSpacing`, `unionSpacing`| ## Failing examples diff --git a/docs/rules/type-formatting.md b/docs/rules/type-formatting.md index eecdcf6f0..6718caa39 100644 --- a/docs/rules/type-formatting.md +++ b/docs/rules/type-formatting.md @@ -72,6 +72,15 @@ Defaults to `null` which is equivalent to "semicolon". Indicates the whitespace to be added on each line preceding an object property-value field. Defaults to the empty string. + + +### objectFieldSeparatorTrailingPunctuation + +If `separatorForSingleObjectField` is not in effect (i.e., if it is `false` +or there are multiple property-value object fields present), this property +will determine whether to add trailing punctuation corresponding to the +`objectFieldSeparator`. Defaults to `false`. + ### separatorForSingleObjectField @@ -99,7 +108,7 @@ Determines the spacing to add to unions (`|`). Defaults to a single space. |Tags|``| |Recommended|false| |Settings|| -|Options|`arrayBrackets`, `enableFixer`, `genericDot`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `propertyQuotes`, `separatorForSingleObjectField`, `stringQuotes`, `typeBracketSpacing`, `unionSpacing`| +|Options|`arrayBrackets`, `enableFixer`, `genericDot`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `objectFieldSeparatorTrailingPunctuation`, `propertyQuotes`, `separatorForSingleObjectField`, `stringQuotes`, `typeBracketSpacing`, `unionSpacing`| @@ -114,6 +123,12 @@ The following patterns are considered problems: // "jsdoc/type-formatting": ["error"|"warn", {"objectFieldSeparator":"semicolon"}] // Message: Inconsistent semicolon separator usage +/** + * @param {{a: string; b: number; c: boolean,}} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"objectFieldSeparator":"semicolon","objectFieldSeparatorTrailingPunctuation":true}] +// Message: Inconsistent semicolon separator usage + /** * @param {{a: string; b: number; c: boolean,}} cfg */ @@ -210,6 +225,16 @@ The following patterns are considered problems: // "jsdoc/type-formatting": ["error"|"warn", {"objectFieldIndent":" ","objectFieldSeparator":"semicolon-and-linebreak"}] // Message: Inconsistent semicolon-and-linebreak separator usage +/** + * @param {{ + * a: string, + * b: number + * }} cfg A long + * description + */ +// "jsdoc/type-formatting": ["error"|"warn", {"objectFieldIndent":" ","objectFieldSeparator":"semicolon-and-linebreak","objectFieldSeparatorTrailingPunctuation":true}] +// Message: Inconsistent semicolon-and-linebreak separator usage + /** * @param {ab | cd} cfg */ diff --git a/src/rules/typeFormatting.js b/src/rules/typeFormatting.js index d48f69362..657dcba6c 100644 --- a/src/rules/typeFormatting.js +++ b/src/rules/typeFormatting.js @@ -20,6 +20,7 @@ export default iterateJsdoc(({ objectFieldIndent = '', objectFieldQuote = null, objectFieldSeparator = 'comma', + objectFieldSeparatorTrailingPunctuation = false, propertyQuotes = null, separatorForSingleObjectField = false, stringQuotes = 'single', @@ -232,11 +233,13 @@ export default iterateJsdoc(({ if ( (typeNode.meta.separator ?? 'comma') !== objectFieldSeparator || (typeNode.meta.separatorForSingleObjectField ?? false) !== separatorForSingleObjectField || - (typeNode.meta.propertyIndent ?? '') !== objectFieldIndent + (typeNode.meta.propertyIndent ?? '') !== objectFieldIndent || + (typeNode.meta.trailingPunctuation ?? false) !== objectFieldSeparatorTrailingPunctuation ) { typeNode.meta.separator = objectFieldSeparator; typeNode.meta.separatorForSingleObjectField = separatorForSingleObjectField; typeNode.meta.propertyIndent = objectFieldIndent; + typeNode.meta.trailingPunctuation = objectFieldSeparatorTrailingPunctuation; errorMessage = `Inconsistent ${objectFieldSeparator} separator usage`; } @@ -373,6 +376,9 @@ export default iterateJsdoc(({ 'semicolon-and-linebreak', ], }, + objectFieldSeparatorTrailingPunctuation: { + type: 'boolean', + }, propertyQuotes: { enum: [ 'double', diff --git a/test/rules/assertions/typeFormatting.js b/test/rules/assertions/typeFormatting.js index 9bf6f1690..076c33ea9 100644 --- a/test/rules/assertions/typeFormatting.js +++ b/test/rules/assertions/typeFormatting.js @@ -23,6 +23,30 @@ export default { */ `, }, + { + code: ` + /** + * @param {{a: string; b: number; c: boolean,}} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Inconsistent semicolon separator usage', + }, + ], + options: [ + { + objectFieldSeparator: 'semicolon', + objectFieldSeparatorTrailingPunctuation: true, + }, + ], + output: ` + /** + * @param {{a: string; b: number; c: boolean;}} cfg + */ + `, + }, { code: ` /** @@ -407,6 +431,39 @@ export default { */ `, }, + { + code: ` + /** + * @param {{ + * a: string, + * b: number + * }} cfg A long + * description + */ + `, + errors: [ + { + line: 3, + message: 'Inconsistent semicolon-and-linebreak separator usage', + }, + ], + options: [ + { + objectFieldIndent: ' ', + objectFieldSeparator: 'semicolon-and-linebreak', + objectFieldSeparatorTrailingPunctuation: true, + }, + ], + output: ` + /** + * @param {{ + * a: string; + * b: number; + * }} cfg A long + * description + */ + `, + }, { code: ` /** From 84a1d31cd0f15e0b2dd9dc1680cb39d659ae4711 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Thu, 11 Sep 2025 08:49:48 +0800 Subject: [PATCH 069/189] test: complete coverage --- docs/rules/type-formatting.md | 15 +++++- src/rules/typeFormatting.js | 4 +- test/rules/assertions/typeFormatting.js | 71 ++++++++++++++++++++++++- 3 files changed, 86 insertions(+), 4 deletions(-) diff --git a/docs/rules/type-formatting.md b/docs/rules/type-formatting.md index 6718caa39..259b0d5d8 100644 --- a/docs/rules/type-formatting.md +++ b/docs/rules/type-formatting.md @@ -188,6 +188,11 @@ The following patterns are considered problems: // "jsdoc/type-formatting": ["error"|"warn", {"objectFieldQuote":"double"}] // Message: Inconsistent object field quotes double +/** + * @param {{"a": string}} cfg + */ +// Message: Inconsistent object field quotes null + /** * @param {ab.cd.ef} cfg */ @@ -242,10 +247,12 @@ The following patterns are considered problems: // Message: Inconsistent "" union spacing usage /** + * Due to jsdoc-type-pratt-parser not consuming whitespace, the exact + * error will not be reported. * @param {ab|cd} cfg */ // "jsdoc/type-formatting": ["error"|"warn", {"unionSpacing":" "}] -// Message: Inconsistent " " union spacing usage +// Message: There was an error with type formatting /** * Due to jsdoc-type-pratt-parser representing the separator at the @@ -266,6 +273,12 @@ The following patterns are considered problems: */ // "jsdoc/type-formatting": ["error"|"warn", {"typeBracketSpacing":""}] // Message: Must have no initial spacing + +/** + * @param {ab."cd".ef} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"propertyQuotes":null}] +// Message: Inconsistent null property quotes usage ```` diff --git a/src/rules/typeFormatting.js b/src/rules/typeFormatting.js index 657dcba6c..2495e2b8a 100644 --- a/src/rules/typeFormatting.js +++ b/src/rules/typeFormatting.js @@ -231,6 +231,7 @@ export default iterateJsdoc(({ case 'JsdocTypeObject': { const typeNode = /** @type {import('jsdoc-type-pratt-parser').ObjectResult} */ (nde); if ( + /* c8 ignore next -- Guard */ (typeNode.meta.separator ?? 'comma') !== objectFieldSeparator || (typeNode.meta.separatorForSingleObjectField ?? false) !== separatorForSingleObjectField || (typeNode.meta.propertyIndent ?? '') !== objectFieldIndent || @@ -285,7 +286,8 @@ export default iterateJsdoc(({ case 'JsdocTypeUnion': { const typeNode = /** @type {import('jsdoc-type-pratt-parser').UnionResult} */ (nde); - if (typeNode.meta?.spacing !== unionSpacing) { + /* c8 ignore next -- Guard */ + if ((typeNode.meta?.spacing ?? ' ') !== unionSpacing) { typeNode.meta = { spacing: unionSpacing, }; diff --git a/test/rules/assertions/typeFormatting.js b/test/rules/assertions/typeFormatting.js index 076c33ea9..32ef14339 100644 --- a/test/rules/assertions/typeFormatting.js +++ b/test/rules/assertions/typeFormatting.js @@ -269,6 +269,24 @@ export default { */ `, }, + { + code: ` + /** + * @param {{"a": string}} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Inconsistent object field quotes null', + }, + ], + output: ` + /** + * @param {{a: string}} cfg + */ + `, + }, { code: ` /** @@ -490,13 +508,15 @@ export default { { code: ` /** + * Due to jsdoc-type-pratt-parser not consuming whitespace, the exact + * error will not be reported. * @param {ab|cd} cfg */ `, errors: [ { - line: 3, - message: 'Inconsistent " " union spacing usage', + line: 5, + message: 'There was an error with type formatting', }, ], options: [ @@ -506,10 +526,34 @@ export default { ], output: ` /** + * Due to jsdoc-type-pratt-parser not consuming whitespace, the exact + * error will not be reported. * @param {ab | cd} cfg */ `, }, + { + code: ` + /** + * Due to jsdoc-type-pratt-parser not consuming whitespace, the exact + * error will not be reported. + * @param {ab|cd} cfg + */ + `, + errors: [ + { + line: 5, + message: 'There was an error with type formatting', + }, + ], + ignoreReadme: true, + options: [ + { + enableFixer: false, + unionSpacing: ' ', + }, + ], + }, { code: ` /** @@ -583,6 +627,29 @@ export default { */ `, }, + { + code: ` + /** + * @param {ab."cd".ef} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Inconsistent null property quotes usage', + }, + ], + options: [ + { + propertyQuotes: null, + }, + ], + output: ` + /** + * @param {ab.cd.ef} cfg + */ + `, + }, ], valid: [ { From e6b065ccf2336f10bfe8ef66356a4d0622b2a5f2 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Thu, 11 Sep 2025 08:56:39 +0800 Subject: [PATCH 070/189] refactor: update types --- .README/rules/type-formatting.md | 2 +- docs/rules/type-formatting.md | 2 +- src/rules.d.ts | 11 ++++------- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/.README/rules/type-formatting.md b/.README/rules/type-formatting.md index f7afc6ba2..85b262a3d 100644 --- a/.README/rules/type-formatting.md +++ b/.README/rules/type-formatting.md @@ -45,7 +45,7 @@ For object properties, specify whether a "semicolon", "comma", "linebreak", "semicolon-and-linebreak", or "comma-and-linebreak" should be used after each object property-value pair. -Defaults to `null` which is equivalent to "semicolon". +Defaults to `"comma"`. ### `objectFieldIndent` diff --git a/docs/rules/type-formatting.md b/docs/rules/type-formatting.md index 259b0d5d8..720c699eb 100644 --- a/docs/rules/type-formatting.md +++ b/docs/rules/type-formatting.md @@ -63,7 +63,7 @@ For object properties, specify whether a "semicolon", "comma", "linebreak", "semicolon-and-linebreak", or "comma-and-linebreak" should be used after each object property-value pair. -Defaults to `null` which is equivalent to "semicolon". +Defaults to `"comma"`. diff --git a/src/rules.d.ts b/src/rules.d.ts index 47de0f95d..77a141411 100644 --- a/src/rules.d.ts +++ b/src/rules.d.ts @@ -765,16 +765,13 @@ export interface Rules { genericDot?: boolean; objectFieldIndent?: string; objectFieldQuote?: "double" | "single" | null; - objectFieldSeparator?: - | "comma" - | "comma-and-linebreak" - | "linebreak" - | "semicolon" - | "semicolon-and-linebreak" - | null; + objectFieldSeparator?: "comma" | "comma-and-linebreak" | "linebreak" | "semicolon" | "semicolon-and-linebreak"; + objectFieldSeparatorTrailingPunctuation?: boolean; propertyQuotes?: "double" | "single" | null; separatorForSingleObjectField?: boolean; stringQuotes?: "double" | "single"; + typeBracketSpacing?: string; + unionSpacing?: string; } ]; From be58cf19dee50c804d406e8239ae38d644ae64c1 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Thu, 11 Sep 2025 09:12:08 +0800 Subject: [PATCH 071/189] refactor: update src/rules/typeFormatting.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/rules/typeFormatting.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rules/typeFormatting.js b/src/rules/typeFormatting.js index 2495e2b8a..c73363129 100644 --- a/src/rules/typeFormatting.js +++ b/src/rules/typeFormatting.js @@ -149,7 +149,7 @@ export default iterateJsdoc(({ if ( // Get any remaining description lines - nameAndDesc && nameAndDesc.length > 1 + nameAndDesc.length > 1 ) { src.push( ...nameAndDesc.slice(1).map(({ From e3c8f1e2e2ae1207c054ddf0cf706c1456ebb44d Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Thu, 11 Sep 2025 11:52:33 +0800 Subject: [PATCH 072/189] feat: add CJS exports; fixes #1223 (#1491) BREAKING CHANGE: Changes exports paths. Should work without changes required. --- package.json | 29 ++++++++++++++++++++--------- src/getJsdocProcessorPlugin.cts | 3 +++ src/index.cjs.cts | 3 +++ src/iterateJsdoc.cts | 6 ++++++ tsconfig-cjs.json | 16 ++++++++++++++++ 5 files changed, 48 insertions(+), 9 deletions(-) create mode 100644 src/getJsdocProcessorPlugin.cts create mode 100644 src/index.cjs.cts create mode 100644 src/iterateJsdoc.cts create mode 100644 tsconfig-cjs.json diff --git a/package.json b/package.json index 296031350..ff7133c6c 100644 --- a/package.json +++ b/package.json @@ -90,19 +90,29 @@ "default": "./src/index.js" }, "require": { - "types": "./dist/index-cjs.d.ts", - "default": "./dist/index-cjs.cjs" + "types": "./dist/cjs/index.cjs.d.cts", + "default": "./dist/cjs/index.cjs.cts" } }, "./getJsdocProcessorPlugin.js": { - "types": "./dist/getJsdocProcessorPlugin.d.ts", - "import": "./src/getJsdocProcessorPlugin.js", - "require": "./dist/getJsdocProcessorPlugin.cjs" + "import": { + "types": "./dist/getJsdocProcessorPlugin.d.ts", + "default": "./src/getJsdocProcessorPlugin.js" + }, + "require": { + "types": "./dist/cjs/getJsdocProcessorPlugin.d.cts", + "default": "./dist/cjs/getJsdocProcessorPlugin.cjs" + } }, "./iterateJsdoc.js": { - "types": "./dist/iterateJsdoc.d.ts", - "import": "./src/iterateJsdoc.js", - "require": "./dist/iterateJsdoc.cjs" + "import": { + "types": "./dist/iterateJsdoc.d.ts", + "default": "./src/iterateJsdoc.js" + }, + "require": { + "types": "./dist/cjs/iterateJsdoc.d.cts", + "default": "./dist/cjs/iterateJsdoc.cjs" + } } }, "name": "eslint-plugin-jsdoc", @@ -145,7 +155,8 @@ "ruleTypes": "node ./src/bin/generateRuleTypes.js", "tsc": "tsc", "tsc-build": "tsc -p tsconfig-prod.json", - "build": "node ./src/bin/buildEntryFileForTS.js && rimraf ./dist && NODE_ENV=production babel ./src --out-file-extension .cjs --out-dir ./dist --copy-files --source-maps --ignore ./src/bin/*.js --no-copy-ignored && replace 'require\\(\"\\.(.*?)\\.[^.]*?\"\\)' 'require(\".$1.cjs\")' 'dist' -r --include=\"*.cjs\" && pnpm tsc-build", + "tsc-cjs": "tsc -p tsconfig-cjs.json", + "build": "node ./src/bin/buildEntryFileForTS.js && rimraf ./dist && NODE_ENV=production babel ./src --out-file-extension .cjs --out-dir ./dist --copy-files --source-maps --ignore ./src/bin/*.js --no-copy-ignored && replace 'require\\(\"\\.(.*?)\\.[^.]*?\"\\)' 'require(\".$1.cjs\")' 'dist' -r --include=\"*.cjs\" && pnpm tsc-build && pnpm tsc-cjs", "attw": "attw --pack .", "check-docs": "node ./src/bin/generateDocs.js --check", "create-docs": "pnpm run create-options && node ./src/bin/generateDocs.js", diff --git a/src/getJsdocProcessorPlugin.cts b/src/getJsdocProcessorPlugin.cts new file mode 100644 index 000000000..142035b65 --- /dev/null +++ b/src/getJsdocProcessorPlugin.cts @@ -0,0 +1,3 @@ +import {getJsdocProcessorPlugin} from './getJsdocProcessorPlugin.js'; + +exports.getJsdocProcessorPlugin = getJsdocProcessorPlugin; diff --git a/src/index.cjs.cts b/src/index.cjs.cts new file mode 100644 index 000000000..ecb4749a1 --- /dev/null +++ b/src/index.cjs.cts @@ -0,0 +1,3 @@ +import items from './index-cjs.js'; + +export = items; diff --git a/src/iterateJsdoc.cts b/src/iterateJsdoc.cts new file mode 100644 index 000000000..9b94cff80 --- /dev/null +++ b/src/iterateJsdoc.cts @@ -0,0 +1,6 @@ +import iterateJsdoc, {getSettings, parseComment} from './iterateJsdoc.js'; + +export = iterateJsdoc; + +exports.getSettings = getSettings; +exports.parseComment = parseComment; diff --git a/tsconfig-cjs.json b/tsconfig-cjs.json new file mode 100644 index 000000000..40342e4ac --- /dev/null +++ b/tsconfig-cjs.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "es2023", // Or your desired target + "module": "commonjs", // Crucial for CommonJS output + "allowJs": true, + "declaration": true, // Generates declaration files (.d.ts) + "outDir": "./dist/cjs", // Output directory for CommonJS files + "esModuleInterop": true, // Improves interoperability between ESM and CJS + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true + }, + "include": [ + "src/*.cts" + ] // Your source files +} From c29757db50c2d30f6565f9c60b23722c6511bbd7 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Thu, 11 Sep 2025 12:02:34 +0800 Subject: [PATCH 073/189] fix: export paths (#1492) --- package.json | 6 +++--- tsconfig-cjs.json | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index ff7133c6c..76652bd48 100644 --- a/package.json +++ b/package.json @@ -91,7 +91,7 @@ }, "require": { "types": "./dist/cjs/index.cjs.d.cts", - "default": "./dist/cjs/index.cjs.cts" + "default": "./dist/index-cjs.cjs" } }, "./getJsdocProcessorPlugin.js": { @@ -101,7 +101,7 @@ }, "require": { "types": "./dist/cjs/getJsdocProcessorPlugin.d.cts", - "default": "./dist/cjs/getJsdocProcessorPlugin.cjs" + "default": "./dist/getJsdocProcessorPlugin.cjs" } }, "./iterateJsdoc.js": { @@ -111,7 +111,7 @@ }, "require": { "types": "./dist/cjs/iterateJsdoc.d.cts", - "default": "./dist/cjs/iterateJsdoc.cjs" + "default": "./dist/iterateJsdoc.cjs" } } }, diff --git a/tsconfig-cjs.json b/tsconfig-cjs.json index 40342e4ac..2ff437d41 100644 --- a/tsconfig-cjs.json +++ b/tsconfig-cjs.json @@ -4,6 +4,7 @@ "module": "commonjs", // Crucial for CommonJS output "allowJs": true, "declaration": true, // Generates declaration files (.d.ts) + "emitDeclarationOnly": true, "outDir": "./dist/cjs", // Output directory for CommonJS files "esModuleInterop": true, // Improves interoperability between ESM and CJS "forceConsistentCasingInFileNames": true, From 5f0067254c3cfce5ca23b993ef59e4d768bf3362 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Thu, 11 Sep 2025 13:37:10 +0800 Subject: [PATCH 074/189] fix(`getJsdocComment`, `iterateJsdoc`): fix CJS type declarations (#1493) --- src/getJsdocProcessorPlugin.cts | 4 +++- src/iterateJsdoc.cts | 13 +++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/getJsdocProcessorPlugin.cts b/src/getJsdocProcessorPlugin.cts index 142035b65..8c56113eb 100644 --- a/src/getJsdocProcessorPlugin.cts +++ b/src/getJsdocProcessorPlugin.cts @@ -1,3 +1,5 @@ import {getJsdocProcessorPlugin} from './getJsdocProcessorPlugin.js'; -exports.getJsdocProcessorPlugin = getJsdocProcessorPlugin; +export = { + getJsdocProcessorPlugin: getJsdocProcessorPlugin as typeof getJsdocProcessorPlugin +}; diff --git a/src/iterateJsdoc.cts b/src/iterateJsdoc.cts index 9b94cff80..8bb743633 100644 --- a/src/iterateJsdoc.cts +++ b/src/iterateJsdoc.cts @@ -1,6 +1,11 @@ -import iterateJsdoc, {getSettings, parseComment} from './iterateJsdoc.js'; +import iterateJsdoc, {getSettings, parseComment, type JsdocVisitor, type RuleConfig} from './iterateJsdoc.js'; -export = iterateJsdoc; +const exp = iterateJsdoc as ((iterator: JsdocVisitor, ruleConfig: RuleConfig) => import('eslint').Rule.RuleModule) & { + getSettings: typeof getSettings, + parseComment: typeof parseComment +}; -exports.getSettings = getSettings; -exports.parseComment = parseComment; +exp.getSettings = getSettings; +exp.parseComment = parseComment; + +export = exp; From 2644c6e9ef73e22ae75c7ab3df82984b210b9379 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Thu, 11 Sep 2025 19:43:19 +0800 Subject: [PATCH 075/189] refactor: remove unnecessary lines in declaration file (#1495) Also: - docs: add `type-formatting` to README --- .README/README.md | 1 + README.md | 1 + src/iterateJsdoc.cts | 3 --- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.README/README.md b/.README/README.md index ba7563828..f00bf3237 100644 --- a/.README/README.md +++ b/.README/README.md @@ -432,4 +432,5 @@ non-default-recommended fixer). |||[sort-tags](./docs/rules/sort-tags.md#readme)|Sorts tags by a specified sequence according to tag name, optionally adding line breaks between tag groups| |:heavy_check_mark:|:wrench:|[tag-lines](./docs/rules/tag-lines.md#readme)|Enforces lines (or no lines) between tags| ||:wrench:|[text-escaping](./docs/rules/text-escaping.md#readme)|This rule can auto-escape certain characters that are input within block and tag descriptions| +||:wrench:|[type-formatting](./docs/rules/type-formatting.md#readme)|Formats JSDoc type values| |:heavy_check_mark:||[valid-types](./docs/rules/valid-types.md#readme)|Requires all types/namepaths to be valid JSDoc, Closure compiler, or TypeScript types (configurable in settings)| diff --git a/README.md b/README.md index eb81a02de..e554e28f1 100644 --- a/README.md +++ b/README.md @@ -469,4 +469,5 @@ non-default-recommended fixer). |||[sort-tags](./docs/rules/sort-tags.md#readme)|Sorts tags by a specified sequence according to tag name, optionally adding line breaks between tag groups| |:heavy_check_mark:|:wrench:|[tag-lines](./docs/rules/tag-lines.md#readme)|Enforces lines (or no lines) between tags| ||:wrench:|[text-escaping](./docs/rules/text-escaping.md#readme)|This rule can auto-escape certain characters that are input within block and tag descriptions| +||:wrench:|[type-formatting](./docs/rules/type-formatting.md#readme)|Formats JSDoc type values| |:heavy_check_mark:||[valid-types](./docs/rules/valid-types.md#readme)|Requires all types/namepaths to be valid JSDoc, Closure compiler, or TypeScript types (configurable in settings)| diff --git a/src/iterateJsdoc.cts b/src/iterateJsdoc.cts index 8bb743633..4a4a89663 100644 --- a/src/iterateJsdoc.cts +++ b/src/iterateJsdoc.cts @@ -5,7 +5,4 @@ const exp = iterateJsdoc as ((iterator: JsdocVisitor, ruleConfig: RuleConfig) => parseComment: typeof parseComment }; -exp.getSettings = getSettings; -exp.parseComment = parseComment; - export = exp; From 888662802ee2161dbb85d413a6b843eac07b7de3 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Thu, 11 Sep 2025 20:10:54 +0800 Subject: [PATCH 076/189] feat(`type-formatting`): add `property`, `this`, `throws`, and `yields` tags (#1496) * docs(`type-formatting`): clarify * feat(`type-formatting`): add `property`, `this`, `throws`, and `yields` tags --- .README/rules/type-formatting.md | 19 ++++++++++--------- docs/rules/type-formatting.md | 19 ++++++++++--------- src/rules/typeFormatting.js | 4 ++++ 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/.README/rules/type-formatting.md b/.README/rules/type-formatting.md index 85b262a3d..b01c5cb15 100644 --- a/.README/rules/type-formatting.md +++ b/.README/rules/type-formatting.md @@ -49,20 +49,21 @@ Defaults to `"comma"`. ### `objectFieldIndent` -Indicates the whitespace to be added on each line preceding an object -property-value field. Defaults to the empty string. +A string indicating the whitespace to be added on each line preceding an +object property-value field. Defaults to the empty string. ### `objectFieldSeparatorTrailingPunctuation` If `separatorForSingleObjectField` is not in effect (i.e., if it is `false` or there are multiple property-value object fields present), this property -will determine whether to add trailing punctuation corresponding to the -`objectFieldSeparator`. Defaults to `false`. +will determine whether to add punctuation corresponding to the +`objectFieldSeparator` (e.g., a semicolon) to the final object field. +Defaults to `false`. ### `separatorForSingleObjectField` -Whether to apply the `objectFieldSeparator` when there is only one -property-value object field present. Defaults to `false`. +Whether to apply the `objectFieldSeparator` (e.g., a semicolon) when there +is only one property-value object field present. Defaults to `false`. ### `typeBracketSpacing` @@ -72,14 +73,14 @@ to the empty string. ### `unionSpacing` -Determines the spacing to add to unions (`|`). Defaults to a single space. +Determines the spacing to add to unions (`|`). Defaults to a single space (`" "`). ||| |---|---| |Context|everywhere| -|Tags|``| +|Tags|`param`, `property`, `returns`, `this`, `throws`, `type`, `typedef`, `yields`| |Recommended|false| -|Settings|| +|Settings|`mode`| |Options|`arrayBrackets`, `enableFixer`, `genericDot`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `objectFieldSeparatorTrailingPunctuation`, `propertyQuotes`, `separatorForSingleObjectField`, `stringQuotes`, `typeBracketSpacing`, `unionSpacing`| ## Failing examples diff --git a/docs/rules/type-formatting.md b/docs/rules/type-formatting.md index 720c699eb..9f737357d 100644 --- a/docs/rules/type-formatting.md +++ b/docs/rules/type-formatting.md @@ -69,8 +69,8 @@ Defaults to `"comma"`. ### objectFieldIndent -Indicates the whitespace to be added on each line preceding an object -property-value field. Defaults to the empty string. +A string indicating the whitespace to be added on each line preceding an +object property-value field. Defaults to the empty string. @@ -78,15 +78,16 @@ property-value field. Defaults to the empty string. If `separatorForSingleObjectField` is not in effect (i.e., if it is `false` or there are multiple property-value object fields present), this property -will determine whether to add trailing punctuation corresponding to the -`objectFieldSeparator`. Defaults to `false`. +will determine whether to add punctuation corresponding to the +`objectFieldSeparator` (e.g., a semicolon) to the final object field. +Defaults to `false`. ### separatorForSingleObjectField -Whether to apply the `objectFieldSeparator` when there is only one -property-value object field present. Defaults to `false`. +Whether to apply the `objectFieldSeparator` (e.g., a semicolon) when there +is only one property-value object field present. Defaults to `false`. @@ -100,14 +101,14 @@ to the empty string. ### unionSpacing -Determines the spacing to add to unions (`|`). Defaults to a single space. +Determines the spacing to add to unions (`|`). Defaults to a single space (`" "`). ||| |---|---| |Context|everywhere| -|Tags|``| +|Tags|`param`, `property`, `returns`, `this`, `throws`, `type`, `typedef`, `yields`| |Recommended|false| -|Settings|| +|Settings|`mode`| |Options|`arrayBrackets`, `enableFixer`, `genericDot`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `objectFieldSeparatorTrailingPunctuation`, `propertyQuotes`, `separatorForSingleObjectField`, `stringQuotes`, `typeBracketSpacing`, `unionSpacing`| diff --git a/src/rules/typeFormatting.js b/src/rules/typeFormatting.js index c73363129..a2eeb032d 100644 --- a/src/rules/typeFormatting.js +++ b/src/rules/typeFormatting.js @@ -326,9 +326,13 @@ export default iterateJsdoc(({ const tags = utils.getPresentTags([ 'param', + 'property', 'returns', + 'this', + 'throws', 'type', 'typedef', + 'yields', ]); for (const tag of tags) { if (tag.type) { From d5fb1d1d0de158446dd4c0617b1311be30ae6f7f Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Thu, 11 Sep 2025 20:21:14 +0800 Subject: [PATCH 077/189] fix(`iterateJsdoc` export): ensure `default` has type (#1497) --- src/iterateJsdoc.cts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/iterateJsdoc.cts b/src/iterateJsdoc.cts index 4a4a89663..2a5423fcb 100644 --- a/src/iterateJsdoc.cts +++ b/src/iterateJsdoc.cts @@ -1,6 +1,7 @@ -import iterateJsdoc, {getSettings, parseComment, type JsdocVisitor, type RuleConfig} from './iterateJsdoc.js'; +import iterateJsdoc, {getSettings, parseComment} from './iterateJsdoc.js'; -const exp = iterateJsdoc as ((iterator: JsdocVisitor, ruleConfig: RuleConfig) => import('eslint').Rule.RuleModule) & { +const exp = { + default: typeof iterateJsdoc, getSettings: typeof getSettings, parseComment: typeof parseComment }; From be2b7ae0185ff51cb3b859e08f52a68c7343d325 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Thu, 11 Sep 2025 20:44:44 +0800 Subject: [PATCH 078/189] fix(`iterateJsdoc` export): fix export (#1498) --- src/iterateJsdoc.cts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/iterateJsdoc.cts b/src/iterateJsdoc.cts index 2a5423fcb..667cee877 100644 --- a/src/iterateJsdoc.cts +++ b/src/iterateJsdoc.cts @@ -1,9 +1,7 @@ import iterateJsdoc, {getSettings, parseComment} from './iterateJsdoc.js'; -const exp = { - default: typeof iterateJsdoc, - getSettings: typeof getSettings, - parseComment: typeof parseComment +export = { + default: iterateJsdoc as typeof iterateJsdoc, + getSettings: getSettings as typeof getSettings, + parseComment: parseComment as typeof parseComment }; - -export = exp; From 9f50083560ea987367343f5fc29d90e36b9f1d8b Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Thu, 11 Sep 2025 22:47:37 +0800 Subject: [PATCH 079/189] feat: `extraRuleDefinitions.forbid` option to jsdoc function --- package.json | 1 + pnpm-lock.yaml | 3 + src/index-esm.js | 105 ++++++++++++++++++- src/index.js | 105 ++++++++++++++++++- test/index.js | 77 ++++++++++++++ test/rules/index.js | 249 ++++++++++++++++++++++++-------------------- 6 files changed, 421 insertions(+), 119 deletions(-) diff --git a/package.json b/package.json index 76652bd48..5aef76ae3 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "@babel/preset-env": "^7.28.3", "@es-joy/escodegen": "^3.5.1", "@es-joy/jsdoc-eslint-parser": "^0.23.0", + "@eslint/core": "^0.15.2", "@hkdobrev/run-if-changed": "^0.6.3", "@semantic-release/commit-analyzer": "^13.0.1", "@semantic-release/github": "^11.0.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1e82c0a39..b9a25a106 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -69,6 +69,9 @@ importers: '@es-joy/jsdoc-eslint-parser': specifier: ^0.23.0 version: 0.23.0(jiti@2.5.1) + '@eslint/core': + specifier: ^0.15.2 + version: 0.15.2 '@hkdobrev/run-if-changed': specifier: ^0.6.3 version: 0.6.3(typescript@5.9.2) diff --git a/src/index-esm.js b/src/index-esm.js index 9afc9c21b..50c57790f 100644 --- a/src/index-esm.js +++ b/src/index-esm.js @@ -2,6 +2,7 @@ import { merge, } from 'object-deep-merge'; +import iterateJsdoc from './iterateJsdoc.js'; // BEGIN REPLACE import index from './index-cjs.js'; @@ -10,14 +11,91 @@ import index from './index-cjs.js'; export default index; // END REPLACE +/** + * @param {{ + * contexts: (string|{ + * comment: string, + * context: string, + * message: string + * })[], + * description?: string, + * contextName: string + * }} cfg + * @returns {import('@eslint/core').RuleDefinition< + * import('@eslint/core').RuleDefinitionTypeOptions + * >} + */ +const buildForbidRuleDefinition = ({ + contextName, + contexts, + description, +}) => { + return iterateJsdoc(({ + // context, + info: { + comment, + }, + report, + utils, + }) => { + const { + contextStr, + foundContext, + } = utils.findContext(contexts, comment); + + // We are not on the *particular* matching context/comment, so don't assume + // we need reporting + if (!foundContext) { + return; + } + + const message = /** @type {import('./iterateJsdoc.js').ContextObject} */ ( + foundContext + )?.message ?? + 'Syntax is restricted: {{context}}' + + (comment ? ' with {{comment}}' : ''); + + report(message, null, null, comment ? { + comment, + context: contextStr, + } : { + context: contextStr, + }); + }, { + contextSelected: true, + meta: { + docs: { + description: description ?? contextName ?? 'Reports when certain comment structures are present.', + url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-restricted-syntax.md#repos-sticky-header', + }, + fixable: 'code', + schema: [], + type: 'suggestion', + }, + nonGlobalSettings: true, + }); +}; + /* eslint-disable jsdoc/valid-types -- Bug */ /** * @type {(( * cfg?: import('eslint').Linter.Config & { - * mergeSettings?: boolean, * config?: `flat/${import('./index-cjs.js').ConfigGroups}${import('./index-cjs.js').ConfigVariants}${import('./index-cjs.js').ErrorLevelVariants}`, + * mergeSettings?: boolean, * settings?: Partial, - * rules?: {[key in keyof import('./rules.d.ts').Rules]?: import('eslint').Linter.RuleEntry} + * rules?: {[key in keyof import('./rules.d.ts').Rules]?: import('eslint').Linter.RuleEntry}, + * extraRuleDefinitions?: { + * forbid: { + * [contextName: string]: { + * description?: string, + * contexts: (string|{ + * message: string, + * context: string, + * comment: string + * })[] + * } + * } + * } * } * ) => import('eslint').Linter.Config)} */ @@ -85,6 +163,29 @@ export const jsdoc = function (cfg) { if (cfg.processor) { outputConfig.processor = cfg.processor; } + + if (cfg.extraRuleDefinitions) { + if (!outputConfig.plugins?.jsdoc?.rules) { + throw new Error('JSDoc plugin required for `extraRuleDefinitions`'); + } + + if (cfg.extraRuleDefinitions.forbid) { + for (const [ + contextName, + { + contexts, + description, + }, + ] of Object.entries(cfg.extraRuleDefinitions.forbid)) { + outputConfig.plugins.jsdoc.rules[`forbid-${contextName}`] = + buildForbidRuleDefinition({ + contextName, + contexts, + description, + }); + } + } + } } outputConfig.settings = { diff --git a/src/index.js b/src/index.js index 546b12c9c..70848be92 100644 --- a/src/index.js +++ b/src/index.js @@ -3,6 +3,7 @@ import { merge, } from 'object-deep-merge'; +import iterateJsdoc from './iterateJsdoc.js'; import { getJsdocProcessorPlugin, @@ -536,14 +537,91 @@ index.configs['examples-and-default-expressions'] = /** @type {import('eslint'). export default index; +/** + * @param {{ + * contexts: (string|{ + * comment: string, + * context: string, + * message: string + * })[], + * description?: string, + * contextName: string + * }} cfg + * @returns {import('@eslint/core').RuleDefinition< + * import('@eslint/core').RuleDefinitionTypeOptions + * >} + */ +const buildForbidRuleDefinition = ({ + contextName, + contexts, + description, +}) => { + return iterateJsdoc(({ + // context, + info: { + comment, + }, + report, + utils, + }) => { + const { + contextStr, + foundContext, + } = utils.findContext(contexts, comment); + + // We are not on the *particular* matching context/comment, so don't assume + // we need reporting + if (!foundContext) { + return; + } + + const message = /** @type {import('./iterateJsdoc.js').ContextObject} */ ( + foundContext + )?.message ?? + 'Syntax is restricted: {{context}}' + + (comment ? ' with {{comment}}' : ''); + + report(message, null, null, comment ? { + comment, + context: contextStr, + } : { + context: contextStr, + }); + }, { + contextSelected: true, + meta: { + docs: { + description: description ?? contextName ?? 'Reports when certain comment structures are present.', + url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-restricted-syntax.md#repos-sticky-header', + }, + fixable: 'code', + schema: [], + type: 'suggestion', + }, + nonGlobalSettings: true, + }); +}; + /* eslint-disable jsdoc/valid-types -- Bug */ /** * @type {(( * cfg?: import('eslint').Linter.Config & { - * mergeSettings?: boolean, * config?: `flat/${ConfigGroups}${ConfigVariants}${ErrorLevelVariants}`, + * mergeSettings?: boolean, * settings?: Partial, - * rules?: {[key in keyof import('./rules.d.ts').Rules]?: import('eslint').Linter.RuleEntry} + * rules?: {[key in keyof import('./rules.d.ts').Rules]?: import('eslint').Linter.RuleEntry}, + * extraRuleDefinitions?: { + * forbid: { + * [contextName: string]: { + * description?: string, + * contexts: (string|{ + * message: string, + * context: string, + * comment: string + * })[] + * } + * } + * } * } * ) => import('eslint').Linter.Config)} */ @@ -611,6 +689,29 @@ export const jsdoc = function (cfg) { if (cfg.processor) { outputConfig.processor = cfg.processor; } + + if (cfg.extraRuleDefinitions) { + if (!outputConfig.plugins?.jsdoc?.rules) { + throw new Error('JSDoc plugin required for `extraRuleDefinitions`'); + } + + if (cfg.extraRuleDefinitions.forbid) { + for (const [ + contextName, + { + contexts, + description, + }, + ] of Object.entries(cfg.extraRuleDefinitions.forbid)) { + outputConfig.plugins.jsdoc.rules[`forbid-${contextName}`] = + buildForbidRuleDefinition({ + contextName, + contexts, + description, + }); + } + } + } } outputConfig.settings = { diff --git a/test/index.js b/test/index.js index 335656b83..174e1ce7e 100644 --- a/test/index.js +++ b/test/index.js @@ -1,6 +1,9 @@ import jsdocDefault, { jsdoc, } from '../src/index.js'; +import { + runRuleTests, +} from './rules/index.js'; import { expect, } from 'chai'; @@ -204,3 +207,77 @@ describe('jsdoc()', () => { }); }); }); + +for (const [ + contextName, + contexts, + assertions, + description, +] of + /** + * @type {[ + * string, + * (string|{message: string; context: string; comment: string;})[], + * import('./rules/index.js').TestCases, + * string? + * ][] + * } + */ ([ + [ + 'Any', + [ + { + comment: 'JsdocBlock:has(JsdocTypeName[value="any"])', + context: 'any', + message: '`any` is not allowed; use a more specific type', + }, + ], + { + invalid: [ + { + code: ` + /** + * @param {Promise} + */ + function quux () { + + } + `, + errors: [ + { + line: 2, + message: '`any` is not allowed; use a more specific type', + }, + ], + }, + ], + valid: [ + { + code: ` + /** + * @param {Promise} + */ + function quux () { + + } + `, + }, + ], + }, + ], + ])) { + runRuleTests({ + assertions, + config: jsdoc({ + extraRuleDefinitions: { + forbid: { + [contextName]: { + contexts, + description, + }, + }, + }, + }).plugins?.jsdoc, + ruleName: `forbid-${contextName}`, + }); +} diff --git a/test/rules/index.js b/test/rules/index.js index e46add23c..255c23e55 100644 --- a/test/rules/index.js +++ b/test/rules/index.js @@ -1,4 +1,4 @@ -import config from '../../src/index.js'; +import index from '../../src/index.js'; import camelCase from 'camelcase'; import { ESLint, @@ -26,16 +26,138 @@ import semver from 'semver'; const ruleTester = new RuleTester(); +/** + * @param {{ + * config?: import('eslint').ESLint.Plugin + * assertions: TestCases, + * ruleName: string, + * valid?: string, + * invalid?: string + * }} cfg + */ +export const runRuleTests = ({ + assertions, + config, + invalid, + ruleName, + valid, +}) => { + if (!config || !config.rules) { + throw new Error('TypeScript guard'); + } + + const rule = /** @type {import('eslint').Rule.RuleModule} */ ( + config.rules[ruleName] + ); + + /** @type {{ecmaVersion: import('eslint').Linter.EcmaVersion}} */ + const languageOptions = { + ecmaVersion: 'latest', + }; + + if (!(rule.meta && 'schema' in rule.meta) && ( + assertions.invalid.some((item) => { + return item.options; + }) || + assertions.valid.some((item) => { + return item.options; + }) + )) { + throw new TypeError( + `Presence of testing options suggests that rule ${ruleName} should ` + + 'include a schema.', + ); + } + + let count = 0; + assertions.invalid = assertions.invalid.map((assertion) => { + Reflect.deleteProperty(assertion, 'ignoreReadme'); + assertion.languageOptions = merge(assertion.languageOptions ?? {}, languageOptions); + for (const error of /** @type {import('eslint').RuleTester.TestCaseError[]} */ ( + assertion.errors || [] + )) { + if (!('line' in error)) { + count++; + } + } + + return assertion; + }); + if (count) { + // Make an exception for now for `require-param` as it helps to find the + // many lines were it is missing to know which tests to check without + // adding false (or failing) expectations now + if (ruleName === 'require-param') { + // eslint-disable-next-line no-console -- CLI + console.log( + `Rule, \`${ruleName}\`, missing line numbers in errors: ${count}`, + ); + } else { + // eslint-disable-next-line no-console -- CLI + console.error(`Rule, \`${ruleName}\`, missing line numbers in errors: ${count}`); + + return; + } + } + + assertions.valid = assertions.valid.map((assertion) => { + Reflect.deleteProperty(assertion, 'ignoreReadme'); + // @ts-expect-error Bad valid format + if (assertion.errors) { + throw new Error(`Valid assertions for rule ${ruleName} should not have an \`errors\` array.`); + } + + // @ts-expect-error Bad valid format + if (assertion.output) { + throw new Error(`Valid assertions for rule ${ruleName} should not have an \`output\` property.`); + } + + assertion.languageOptions = merge(assertion.languageOptions ?? {}, languageOptions); + + return assertion; + }); + + if (invalid) { + const indexes = invalid.split(/[, ]/v); + assertions.invalid = assertions.invalid.filter((_assertion, idx) => { + return indexes.includes(String(idx)) || + indexes.includes(String(idx - assertions.invalid.length)); + }); + if (!valid) { + assertions.valid = []; + } + } + + if (valid) { + const indexes = valid.split(/[, ]/v); + assertions.valid = assertions.valid.filter((_assertion, idx) => { + return indexes.includes(String(idx)) || + indexes.includes(String(idx - assertions.valid.length)); + }); + if (!invalid) { + assertions.invalid = []; + } + } + + const cwd = process.cwd(); + if (ruleName === 'check-examples') { + // Change `process.cwd()` when testing `checkEslintrc: true` + process.chdir('test/rules/data'); + } + + ruleTester.run(ruleName, rule, assertions); + + if (ruleName === 'check-examples') { + process.chdir(cwd); + } +}; + // eslint-disable-next-line complexity -- Temporary const main = async () => { const ruleNames = JSON.parse(readFileSync(join( import.meta.dirname, './ruleNames.json', ), 'utf8')); - if (!config.rules) { - throw new Error('TypeScript guard'); - } - /** * @satisfies {import('node:util').ParseArgsOptionsConfig} */ @@ -68,23 +190,8 @@ const main = async () => { continue; } - const rule = /** @type {import('eslint').Rule.RuleModule} */ ( - config.rules[ruleName] - ); - - /** @type {{ecmaVersion: import('eslint').Linter.EcmaVersion}} */ - const languageOptions = { - ecmaVersion: 'latest', - }; - // Catch syntax errors - - /** - * @type {{ - * invalid: import('eslint').RuleTester.InvalidTestCase[], - * valid: import('eslint').RuleTester.ValidTestCase[] - * }} - */ + /** @type {TestCases} */ let assertions; try { assertions = (await import(`./assertions/${camelCase(ruleName)}.js`)).default; @@ -94,101 +201,13 @@ const main = async () => { return; } - if (!(rule.meta && 'schema' in rule.meta) && ( - assertions.invalid.some((item) => { - return item.options; - }) || - assertions.valid.some((item) => { - return item.options; - }) - )) { - throw new TypeError( - `Presence of testing options suggests that rule ${ruleName} should ` + - 'include a schema.', - ); - } - - let count = 0; - assertions.invalid = assertions.invalid.map((assertion) => { - Reflect.deleteProperty(assertion, 'ignoreReadme'); - assertion.languageOptions = merge(assertion.languageOptions ?? {}, languageOptions); - for (const error of /** @type {import('eslint').RuleTester.TestCaseError[]} */ ( - assertion.errors || [] - )) { - if (!('line' in error)) { - count++; - } - } - - return assertion; - }); - if (count) { - // Make an exception for now for `require-param` as it helps to find the - // many lines were it is missing to know which tests to check without - // adding false (or failing) expectations now - if (ruleName === 'require-param') { - // eslint-disable-next-line no-console -- CLI - console.log( - `Rule, \`${ruleName}\`, missing line numbers in errors: ${count}`, - ); - } else { - // eslint-disable-next-line no-console -- CLI - console.error(`Rule, \`${ruleName}\`, missing line numbers in errors: ${count}`); - - return; - } - } - - assertions.valid = assertions.valid.map((assertion) => { - Reflect.deleteProperty(assertion, 'ignoreReadme'); - // @ts-expect-error Bad valid format - if (assertion.errors) { - throw new Error(`Valid assertions for rule ${ruleName} should not have an \`errors\` array.`); - } - - // @ts-expect-error Bad valid format - if (assertion.output) { - throw new Error(`Valid assertions for rule ${ruleName} should not have an \`output\` property.`); - } - - assertion.languageOptions = merge(assertion.languageOptions ?? {}, languageOptions); - - return assertion; + runRuleTests({ + assertions, + config: index, + invalid, + ruleName, + valid, }); - - if (invalid) { - const indexes = invalid.split(/[, ]/v); - assertions.invalid = assertions.invalid.filter((_assertion, idx) => { - return indexes.includes(String(idx)) || - indexes.includes(String(idx - assertions.invalid.length)); - }); - if (!valid) { - assertions.valid = []; - } - } - - if (valid) { - const indexes = valid.split(/[, ]/v); - assertions.valid = assertions.valid.filter((_assertion, idx) => { - return indexes.includes(String(idx)) || - indexes.includes(String(idx - assertions.valid.length)); - }); - if (!invalid) { - assertions.invalid = []; - } - } - - const cwd = process.cwd(); - if (ruleName === 'check-examples') { - // Change `process.cwd()` when testing `checkEslintrc: true` - process.chdir('test/rules/data'); - } - - ruleTester.run(ruleName, rule, assertions); - - if (ruleName === 'check-examples') { - process.chdir(cwd); - } } }; From 9083d3d92b656a57baf6a11308a8e5d908d2762c Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Fri, 12 Sep 2025 09:56:48 +0800 Subject: [PATCH 080/189] refactor: replace `any` types and specify specific settings types --- eslint.config.js | 30 ++++++++++++++++++++++++++++++ src/index-esm.js | 34 ++++++++++++++++++++++++++++++++++ src/index.js | 34 ++++++++++++++++++++++++++++++++++ src/iterateJsdoc.js | 25 +++++++++++++++++-------- 4 files changed, 115 insertions(+), 8 deletions(-) diff --git a/eslint.config.js b/eslint.config.js index df8ecd569..4ce8267a3 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -15,12 +15,42 @@ const common = { }, }; +// /** +// * @param {any} abc Test +// */ +// export const a = (abc) => { +// // eslint-disable-next-line no-console -- Testing +// console.log('abc', abc); +// }; + export default [ ...canonical, ...canonicalJsdoc, ...jsdoc({ config: 'examples-and-default-expressions', }), + // jsdoc({ + // config: 'flat/recommended', + // extraRuleDefinitions: { + // forbid: { + // Any: { + // contexts: [ + // { + // comment: 'JsdocBlock:has(JsdocTypeName[value="any"])', + // context: 'any', + // message: '`any` is not allowed; use a more specific type', + // }, + // ], + // descriptions: 'Testing here', + // }, + // }, + // }, + // rules: { + // 'jsdoc/forbid-Any': [ + // 'error', + // ], + // }, + // }), { // Must be by itself ignores: [ diff --git a/src/index-esm.js b/src/index-esm.js index 50c57790f..93b9f6755 100644 --- a/src/index-esm.js +++ b/src/index-esm.js @@ -72,6 +72,40 @@ const buildForbidRuleDefinition = ({ schema: [], type: 'suggestion', }, + modifyContext: (context) => { + return { + cwd: context.cwd, + filename: context.filename, + getCwd (...args) { + return context.getCwd(...args); + }, + getFilename (...args) { + return context.getFilename(...args); + }, + getPhysicalFilename (...args) { + return context.getPhysicalFilename(...args); + }, + getSourceCode (...args) { + return context.getSourceCode(...args); + }, + id: context.id, + languageOptions: context.languageOptions, + // Here's why we override: + options: [ + { + contexts, + }, + ], + parserOptions: context.parserOptions, + parserPath: context.parserPath, + physicalFilename: context.physicalFilename, + report (...args) { + return context.report(...args); + }, + settings: context.settings, + sourceCode: context.sourceCode, + }; + }, nonGlobalSettings: true, }); }; diff --git a/src/index.js b/src/index.js index 70848be92..c5e3a0505 100644 --- a/src/index.js +++ b/src/index.js @@ -598,6 +598,40 @@ const buildForbidRuleDefinition = ({ schema: [], type: 'suggestion', }, + modifyContext: (context) => { + return { + cwd: context.cwd, + filename: context.filename, + getCwd (...args) { + return context.getCwd(...args); + }, + getFilename (...args) { + return context.getFilename(...args); + }, + getPhysicalFilename (...args) { + return context.getPhysicalFilename(...args); + }, + getSourceCode (...args) { + return context.getSourceCode(...args); + }, + id: context.id, + languageOptions: context.languageOptions, + // Here's why we override: + options: [ + { + contexts, + }, + ], + parserOptions: context.parserOptions, + parserPath: context.parserPath, + physicalFilename: context.physicalFilename, + report (...args) { + return context.report(...args); + }, + settings: context.settings, + sourceCode: context.sourceCode, + }; + }, nonGlobalSettings: true, }); }; diff --git a/src/iterateJsdoc.js b/src/iterateJsdoc.js index 0953abefe..4c82bc4cb 100644 --- a/src/iterateJsdoc.js +++ b/src/iterateJsdoc.js @@ -543,8 +543,6 @@ const { seedTokens, } = util; -// todo: Change these `any` types once importing types properly. - /** * Should use ESLint rule's typing. * @typedef {import('eslint').Rule.RuleMetaData} EslintRuleMeta @@ -1749,8 +1747,14 @@ const getUtils = ( * mode: import('./jsdocUtils.js').ParserMode, * preferredTypes: PreferredTypes, * structuredTags: StructuredTags, - * [name: string]: any, - * contexts?: Context[] + * contexts?: Context[], + * augmentsExtendsReplacesDocs?: boolean, + * ignoreReplacesDocs?: boolean, + * implementsReplacesDocs?: boolean, + * overrideReplacesDocs?: boolean, + * ignoreInternal?: boolean, + * ignorePrivate?: boolean, + * exemptDestructuredRootsFromChecks?: boolean, * }} Settings */ @@ -1923,7 +1927,7 @@ const makeReport = (context, commentNode) => { * settings: Settings, * utils: BasicUtils, * } - * ) => any } JsdocVisitorBasic + * ) => void } JsdocVisitorBasic */ /** * @typedef {( @@ -1948,7 +1952,7 @@ const makeReport = (context, commentNode) => { * settings: Settings, * utils: Utils, * } - * ) => any } JsdocVisitor + * ) => void } JsdocVisitor */ /** @@ -2084,6 +2088,7 @@ const getIndentAndJSDoc = function (lines, jsdocNode) { * @property {EslintRuleMeta} meta ESLint rule meta * @property {import('./jsdocUtils.js').DefaultContexts} [contextDefaults] Any default contexts * @property {true} [contextSelected] Whether to force a `contexts` check + * @property {(context: import('eslint').Rule.RuleContext) => import('eslint').Rule.RuleContext} [modifyContext] Modify the rule's context object * @property {true} [iterateAllJsdocs] Whether to iterate all JSDoc blocks by default * regardless of context * @property {true} [checkPrivate] Whether to check `@private` blocks (normally exempted) @@ -2391,13 +2396,17 @@ export default function iterateJsdoc (iterator, ruleConfig) { return { /** * The entrypoint for the JSDoc rule. - * @param {import('eslint').Rule.RuleContext} context + * @param {import('eslint').Rule.RuleContext} ctx * a reference to the context which hold all important information * like settings and the sourcecode to check. * @returns {import('eslint').Rule.RuleListener} * a listener with parser callback function. */ - create (context) { + create (ctx) { + const context = ruleConfig.modifyContext ? + ruleConfig.modifyContext(ctx) : + ctx; + const settings = getSettings(context); if (!settings) { return {}; From 78d9d3d69f495b2f73760a0d9ef03a2fbbf179c2 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sat, 13 Sep 2025 05:46:17 +0800 Subject: [PATCH 081/189] refactor: avoid generic Function type --- src/rules/checkParamNames.js | 2 +- src/rules/checkPropertyNames.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/rules/checkParamNames.js b/src/rules/checkParamNames.js index ab4927baa..044233756 100644 --- a/src/rules/checkParamNames.js +++ b/src/rules/checkParamNames.js @@ -315,7 +315,7 @@ const validateParameterNames = ( * idx: import('../iterateJsdoc.js').Integer * }[]} jsdocParameterNames * @param {import('comment-parser').Block} jsdoc - * @param {Function} report + * @param {import('../iterateJsdoc.js').Report} report * @returns {boolean} */ const validateParameterNamesDeep = ( diff --git a/src/rules/checkPropertyNames.js b/src/rules/checkPropertyNames.js index 64551e8df..dc778ce57 100644 --- a/src/rules/checkPropertyNames.js +++ b/src/rules/checkPropertyNames.js @@ -51,7 +51,7 @@ const validatePropertyNames = ( * type: string; * }[]} jsdocPropertyNames * @param {import('comment-parser').Block} jsdoc - * @param {Function} report + * @param {import('../iterateJsdoc.js').Report} report */ const validatePropertyNamesDeep = ( targetTagName, From dc884718227c4209bda6de64ef5d266066d5f42e Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sat, 13 Sep 2025 05:59:38 +0800 Subject: [PATCH 082/189] docs: add docs --- .README/README.md | 8 ++- .README/advanced.md | 76 +++++++++++++++++++++++++ .README/rules/no-restricted-syntax.md | 4 ++ README.md | 8 ++- docs/advanced.md | 82 +++++++++++++++++++++++++++ docs/rules/no-restricted-syntax.md | 4 ++ 6 files changed, 180 insertions(+), 2 deletions(-) diff --git a/.README/README.md b/.README/README.md index f00bf3237..cd2e82ee8 100644 --- a/.README/README.md +++ b/.README/README.md @@ -101,7 +101,13 @@ export default [ A `plugins` property can also be supplied to merge with the resulting `jsdoc` plugin. -Other config properties such as `files`, `ignores`, etc. are also copied over. +Other config properties such as `files`, `ignores`, etc. are also copied over, +though noting that if the specified config produces an array, they will not +currently function. + +There is also a `extraRuleDefinitions.forbid` option, the details of which are +explained in the [Advanced](./docs/advanced.md#forbidding-structures) docs +(under creating your own rules and forbidding structures). ### Flat config (declarative) diff --git a/.README/advanced.md b/.README/advanced.md index d4b4df069..53fb67185 100644 --- a/.README/advanced.md +++ b/.README/advanced.md @@ -86,3 +86,79 @@ we have to the selector you wish so as to get messages reported in the bottom right pane which match your [esquery](https://github.com/estools/esquery/#readme) selector). + +### Creating your own rules + +#### Forbidding structures + +Although `jsdoc/no-restricted-syntax` is available for restricting certain syntax, +it comes at a cost that, no matter how many restrictions one adds, one can only +disable a single restriction by disabling them all. + +With the `extraRuleDefinitions.forbid` option, one can add information that is used +to create extra individual rules forbidding specific structures, and these rules can +then be selectively enabled and optionally disabled on a case-by-case basis. + +For each `forbid` key, add the name of the context (this will be appended to +`forbid-` to decide the name of the rule, so with "Any" as the key, the rule +created will be `forbid-Any`). Then provide an optional `description` key +(which will be used for the created rule's `meta.docs.description`) and the +`contexts` array. See the `jsdoc/restricted-syntax` rule for more details. + +```js +import {jsdoc} from 'eslint-plugin-jsdoc'; + +export default [ + jsdoc({ + config: 'flat/recommended', + extraRuleDefinitions: { + forbid: { + Any: { + contexts: [ + { + comment: 'JsdocBlock:has(JsdocTypeName[value="any"])', + context: 'any', + message: '`any` is not allowed; use a more specific type', + }, + ], + descriptions: 'Testing here', + }, + Function: { + contexts: [ + { + comment: 'JsdocBlock:has(JsdocTypeName[value="Function"])', + context: 'any', + message: '`Function` is not allowed; use a more specific type', + }, + ], + }, + }, + }, + // Be sure to enable the rules as well + rules: { + 'jsdoc/forbid-Any': [ + 'error', + ], + 'jsdoc/forbid-Function': [ + 'warn', + ], + }, + }), +]; +``` + +Now you can selectively disable the rules you have created. In the following, +because of the individual disable directive, only the `Function` rule will be +triggered (as a warning since its rule was set to "warn"): + +```js +/* eslint-disable jsdoc/forbid-Any */ +/** + * @param {any} abc Test + * @param {Function} def Test2 + */ +export const a = (abc, def) => { + b(5, abc, def); +}; +/* eslint-enable jsdoc/forbid-Any */ +``` diff --git a/.README/rules/no-restricted-syntax.md b/.README/rules/no-restricted-syntax.md index 6e4f7b6b2..90ae2a0d6 100644 --- a/.README/rules/no-restricted-syntax.md +++ b/.README/rules/no-restricted-syntax.md @@ -16,6 +16,10 @@ structures, (whether or not you add a specific `comment` condition). Note that if your parser supports comment AST (as [jsdoc-eslint-parser](https://github.com/brettz9/jsdoc-eslint-parser) is designed to do), you can just use ESLint's rule. +For an alternative to this rule, see the +[Advanced](./docs/advanced.md#forbidding-structures) docs under +creating your own rules and forbidding structures. + ## Options ### `contexts` diff --git a/README.md b/README.md index e554e28f1..7430d0748 100644 --- a/README.md +++ b/README.md @@ -120,7 +120,13 @@ export default [ A `plugins` property can also be supplied to merge with the resulting `jsdoc` plugin. -Other config properties such as `files`, `ignores`, etc. are also copied over. +Other config properties such as `files`, `ignores`, etc. are also copied over, +though noting that if the specified config produces an array, they will not +currently function. + +There is also a `extraRuleDefinitions.forbid` option, the details of which are +explained in the [Advanced](./docs/advanced.md#forbidding-structures) docs +(under creating your own rules and forbidding structures). diff --git a/docs/advanced.md b/docs/advanced.md index 46ca8b380..83e80a42a 100644 --- a/docs/advanced.md +++ b/docs/advanced.md @@ -6,6 +6,8 @@ * [`contexts` format](#user-content-advanced-ast-and-selectors-contexts-format) * [Discovering available AST definitions](#user-content-advanced-ast-and-selectors-discovering-available-ast-definitions) * [Uses/Tips for AST](#user-content-advanced-ast-and-selectors-uses-tips-for-ast) +* [Creating your own rules](#user-content-advanced-creating-your-own-rules) + * [Forbidding structures](#user-content-advanced-creating-your-own-rules-forbidding-structures) @@ -100,3 +102,83 @@ we have to the selector you wish so as to get messages reported in the bottom right pane which match your [esquery](https://github.com/estools/esquery/#readme) selector). + + + +### Creating your own rules + + + +#### Forbidding structures + +Although `jsdoc/no-restricted-syntax` is available for restricting certain syntax, +it comes at a cost that, no matter how many restrictions one adds, one can only +disable a single restriction by disabling them all. + +With the `extraRuleDefinitions.forbid` option, one can add information that is used +to create extra individual rules forbidding specific structures, and these rules can +then be selectively enabled and optionally disabled on a case-by-case basis. + +For each `forbid` key, add the name of the context (this will be appended to +`forbid-` to decide the name of the rule, so with "Any" as the key, the rule +created will be `forbid-Any`). Then provide an optional `description` key +(which will be used for the created rule's `meta.docs.description`) and the +`contexts` array. See the `jsdoc/restricted-syntax` rule for more details. + +```js +import {jsdoc} from 'eslint-plugin-jsdoc'; + +export default [ + jsdoc({ + config: 'flat/recommended', + extraRuleDefinitions: { + forbid: { + Any: { + contexts: [ + { + comment: 'JsdocBlock:has(JsdocTypeName[value="any"])', + context: 'any', + message: '`any` is not allowed; use a more specific type', + }, + ], + descriptions: 'Testing here', + }, + Function: { + contexts: [ + { + comment: 'JsdocBlock:has(JsdocTypeName[value="Function"])', + context: 'any', + message: '`Function` is not allowed; use a more specific type', + }, + ], + }, + }, + }, + // Be sure to enable the rules as well + rules: { + 'jsdoc/forbid-Any': [ + 'error', + ], + 'jsdoc/forbid-Function': [ + 'warn', + ], + }, + }), +]; +``` + +Now you can selectively disable the rules you have created. In the following, +because of the individual disable directive, only the `Function` rule will be +triggered (as a warning since its rule was set to "warn"): + +```js +/* eslint-disable jsdoc/forbid-Any */ +/** + * @param {any} abc Test + * @param {Function} def Test2 + */ +export const a = (abc, def) => { + b(5, abc, def); +}; +/* eslint-enable jsdoc/forbid-Any */ +``` diff --git a/docs/rules/no-restricted-syntax.md b/docs/rules/no-restricted-syntax.md index 4544e6344..ea8a58ff3 100644 --- a/docs/rules/no-restricted-syntax.md +++ b/docs/rules/no-restricted-syntax.md @@ -23,6 +23,10 @@ structures, (whether or not you add a specific `comment` condition). Note that if your parser supports comment AST (as [jsdoc-eslint-parser](https://github.com/brettz9/jsdoc-eslint-parser) is designed to do), you can just use ESLint's rule. +For an alternative to this rule, see the +[Advanced](./docs/advanced.md#forbidding-structures) docs under +creating your own rules and forbidding structures. + ## Options From 06454288b7b1037923f6665afd0cb8af512ea6ef Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sat, 13 Sep 2025 08:43:39 +0800 Subject: [PATCH 083/189] feat(`require-next-type`, `require-throws-type`, `require-yields-type`): adds new rules and adds to recommended and required configs; fixes #1461 BREAKING CHANGE: It is unlikely to affect users but when using the jsdoc constructor with a recommended config , this commit removes `throws` and `yields` from the `structuredTags` settings recently added to the config output to require types for these tags in favor of the herein added equivalent recommended rules. (`next` is still part of `structuredTags` output, however, because this setting ensures the non-standard next tag is treated as allowable without need for separate configuration.) Also: - chore: remove unused linting directives --- .README/README.md | 13 +- .README/rules/require-next-type.md | 20 ++ .README/rules/require-throws-type.md | 19 ++ .README/rules/require-yields-type.md | 19 ++ README.md | 13 +- docs/rules/require-next-type.md | 42 ++++ docs/rules/require-throws-type.md | 41 ++++ docs/rules/require-yields-type.md | 41 ++++ eslint.config.js | 33 +-- src/exportParser.js | 6 - src/index-cjs.js | 120 +++++++++++ src/index-esm.js | 114 +--------- src/index.js | 230 +++++++++++---------- src/jsdocUtils.js | 3 - src/rules/informativeDocs.js | 3 - src/rules/matchName.js | 1 - src/rules/noMultiAsterisks.js | 1 - src/rules/requireReturnsCheck.js | 1 - src/rules/sortTags.js | 2 - src/rules/tagLines.js | 1 - test/index.js | 230 +++++++++++++++++++-- test/rules/assertions/requireNextType.js | 26 +++ test/rules/assertions/requireThrowsType.js | 26 +++ test/rules/assertions/requireYieldsType.js | 26 +++ test/rules/index.js | 12 +- test/rules/ruleNames.json | 3 + 26 files changed, 729 insertions(+), 317 deletions(-) create mode 100644 .README/rules/require-next-type.md create mode 100644 .README/rules/require-throws-type.md create mode 100644 .README/rules/require-yields-type.md create mode 100644 docs/rules/require-next-type.md create mode 100644 docs/rules/require-throws-type.md create mode 100644 docs/rules/require-yields-type.md create mode 100644 test/rules/assertions/requireNextType.js create mode 100644 test/rules/assertions/requireThrowsType.js create mode 100644 test/rules/assertions/requireYieldsType.js diff --git a/.README/README.md b/.README/README.md index cd2e82ee8..9da704e23 100644 --- a/.README/README.md +++ b/.README/README.md @@ -82,16 +82,6 @@ export default [ 'type', ], }, - throws: { - required: [ - 'type', - ], - }, - yields: { - required: [ - 'type', - ], - }, }, */ } @@ -419,6 +409,7 @@ non-default-recommended fixer). |||[require-file-overview](./docs/rules/require-file-overview.md#readme)|By default, requires a single `@file` tag at the beginning of each linted file| ||:wrench:|[require-hyphen-before-param-description](./docs/rules/require-hyphen-before-param-description.md#readme)|Requires a hyphen before `@param` descriptions (and optionally before `@property` descriptions)| |:heavy_check_mark:|:wrench:|[require-jsdoc](./docs/rules/require-jsdoc.md#readme)|Checks for presence of jsdoc comments, on functions and potentially other contexts (optionally limited to exports).| +|:heavy_check_mark:||[require-next-type](./docs/rules/require-next-type.md#readme)|Requires a type on the (non-standard) `@next` tag.| |:heavy_check_mark:|:wrench:|[require-param](./docs/rules/require-param.md#readme)|Requires that all function parameters are documented with a `@param` tag.| |:heavy_check_mark:||[require-param-description](./docs/rules/require-param-description.md#readme)|Requires that each `@param` tag has a `description` value.| |:heavy_check_mark:||[require-param-name](./docs/rules/require-param-name.md#readme)|Requires that all `@param` tags have names.| @@ -433,8 +424,10 @@ non-default-recommended fixer). |:heavy_check_mark: (off in TS)||[require-returns-type](./docs/rules/require-returns-type.md#readme)|Requires that `@returns` tag has a type value (in curly brackets).| | || [require-template](./docs/rules/require-template.md#readme) | Requires `@template` tags be present when type parameters are used.| |||[require-throws](./docs/rules/require-throws.md#readme)|Requires that throw statements are documented| +|:heavy_check_mark:||[require-throws-type](./docs/rules/require-throws-type.md#readme)|Requires a type on the `@throws` tag.| |:heavy_check_mark:||[require-yields](./docs/rules/require-yields.md#readme)|Requires that yields are documented| |:heavy_check_mark:||[require-yields-check](./docs/rules/require-yields-check.md#readme)|Ensures that if a `@yields` is present that a `yield` (or `yield` with a value) is present in the function body (or that if a `@next` is present that there is a `yield` with a return value present)| +|:heavy_check_mark:||[require-yields-type](./docs/rules/require-yields-type.md#readme)|Requires a type on the `@yields` tag.| |||[sort-tags](./docs/rules/sort-tags.md#readme)|Sorts tags by a specified sequence according to tag name, optionally adding line breaks between tag groups| |:heavy_check_mark:|:wrench:|[tag-lines](./docs/rules/tag-lines.md#readme)|Enforces lines (or no lines) between tags| ||:wrench:|[text-escaping](./docs/rules/text-escaping.md#readme)|This rule can auto-escape certain characters that are input within block and tag descriptions| diff --git a/.README/rules/require-next-type.md b/.README/rules/require-next-type.md new file mode 100644 index 000000000..91da5eb14 --- /dev/null +++ b/.README/rules/require-next-type.md @@ -0,0 +1,20 @@ +# `require-next-type` + +Requires a type on the (non-standard) `@next` tag. +See the `jsdoc/require-yields` rule for details on this tag. + +||| +|---|---| +|Context|everywhere| +|Tags|`next`| +|Recommended|true| +|Settings|| +|Options|| + +## Failing examples + + + +## Passing examples + + diff --git a/.README/rules/require-throws-type.md b/.README/rules/require-throws-type.md new file mode 100644 index 000000000..95018ea97 --- /dev/null +++ b/.README/rules/require-throws-type.md @@ -0,0 +1,19 @@ +# `require-throws-type` + +Requires a type on the `@throws` tag. + +||| +|---|---| +|Context|everywhere| +|Tags|`throws`| +|Recommended|true| +|Settings|| +|Options|| + +## Failing examples + + + +## Passing examples + + diff --git a/.README/rules/require-yields-type.md b/.README/rules/require-yields-type.md new file mode 100644 index 000000000..b30db493e --- /dev/null +++ b/.README/rules/require-yields-type.md @@ -0,0 +1,19 @@ +# `require-yields-type` + +Requires a type on the `@yields` tag. + +||| +|---|---| +|Context|everywhere| +|Tags|`yields`| +|Recommended|true| +|Settings|| +|Options|| + +## Failing examples + + + +## Passing examples + + diff --git a/README.md b/README.md index 7430d0748..6c81dd98e 100644 --- a/README.md +++ b/README.md @@ -101,16 +101,6 @@ export default [ 'type', ], }, - throws: { - required: [ - 'type', - ], - }, - yields: { - required: [ - 'type', - ], - }, }, */ } @@ -456,6 +446,7 @@ non-default-recommended fixer). |||[require-file-overview](./docs/rules/require-file-overview.md#readme)|By default, requires a single `@file` tag at the beginning of each linted file| ||:wrench:|[require-hyphen-before-param-description](./docs/rules/require-hyphen-before-param-description.md#readme)|Requires a hyphen before `@param` descriptions (and optionally before `@property` descriptions)| |:heavy_check_mark:|:wrench:|[require-jsdoc](./docs/rules/require-jsdoc.md#readme)|Checks for presence of jsdoc comments, on functions and potentially other contexts (optionally limited to exports).| +|:heavy_check_mark:||[require-next-type](./docs/rules/require-next-type.md#readme)|Requires a type on the (non-standard) `@next` tag.| |:heavy_check_mark:|:wrench:|[require-param](./docs/rules/require-param.md#readme)|Requires that all function parameters are documented with a `@param` tag.| |:heavy_check_mark:||[require-param-description](./docs/rules/require-param-description.md#readme)|Requires that each `@param` tag has a `description` value.| |:heavy_check_mark:||[require-param-name](./docs/rules/require-param-name.md#readme)|Requires that all `@param` tags have names.| @@ -470,8 +461,10 @@ non-default-recommended fixer). |:heavy_check_mark: (off in TS)||[require-returns-type](./docs/rules/require-returns-type.md#readme)|Requires that `@returns` tag has a type value (in curly brackets).| | || [require-template](./docs/rules/require-template.md#readme) | Requires `@template` tags be present when type parameters are used.| |||[require-throws](./docs/rules/require-throws.md#readme)|Requires that throw statements are documented| +|:heavy_check_mark:||[require-throws-type](./docs/rules/require-throws-type.md#readme)|Requires a type on the `@throws` tag.| |:heavy_check_mark:||[require-yields](./docs/rules/require-yields.md#readme)|Requires that yields are documented| |:heavy_check_mark:||[require-yields-check](./docs/rules/require-yields-check.md#readme)|Ensures that if a `@yields` is present that a `yield` (or `yield` with a value) is present in the function body (or that if a `@next` is present that there is a `yield` with a return value present)| +|:heavy_check_mark:||[require-yields-type](./docs/rules/require-yields-type.md#readme)|Requires a type on the `@yields` tag.| |||[sort-tags](./docs/rules/sort-tags.md#readme)|Sorts tags by a specified sequence according to tag name, optionally adding line breaks between tag groups| |:heavy_check_mark:|:wrench:|[tag-lines](./docs/rules/tag-lines.md#readme)|Enforces lines (or no lines) between tags| ||:wrench:|[text-escaping](./docs/rules/text-escaping.md#readme)|This rule can auto-escape certain characters that are input within block and tag descriptions| diff --git a/docs/rules/require-next-type.md b/docs/rules/require-next-type.md new file mode 100644 index 000000000..b25f07f60 --- /dev/null +++ b/docs/rules/require-next-type.md @@ -0,0 +1,42 @@ + + +# require-next-type + +Requires a type on the (non-standard) `@next` tag. +See the `jsdoc/require-yields` rule for details on this tag. + +||| +|---|---| +|Context|everywhere| +|Tags|`next`| +|Recommended|true| +|Settings|| +|Options|| + + + +## Failing examples + +The following patterns are considered problems: + +````ts +/** + * @next + */ +// Message: @next should have a type +```` + + + + + +## Passing examples + +The following patterns are not considered problems: + +````ts +/** + * @next {SomeType} + */ +```` + diff --git a/docs/rules/require-throws-type.md b/docs/rules/require-throws-type.md new file mode 100644 index 000000000..1332e9036 --- /dev/null +++ b/docs/rules/require-throws-type.md @@ -0,0 +1,41 @@ + + +# require-throws-type + +Requires a type on the `@throws` tag. + +||| +|---|---| +|Context|everywhere| +|Tags|`throws`| +|Recommended|true| +|Settings|| +|Options|| + + + +## Failing examples + +The following patterns are considered problems: + +````ts +/** + * @throws + */ +// Message: @throws should have a type +```` + + + + + +## Passing examples + +The following patterns are not considered problems: + +````ts +/** + * @throws {SomeType} + */ +```` + diff --git a/docs/rules/require-yields-type.md b/docs/rules/require-yields-type.md new file mode 100644 index 000000000..56b1a866a --- /dev/null +++ b/docs/rules/require-yields-type.md @@ -0,0 +1,41 @@ + + +# require-yields-type + +Requires a type on the `@yields` tag. + +||| +|---|---| +|Context|everywhere| +|Tags|`yields`| +|Recommended|true| +|Settings|| +|Options|| + + + +## Failing examples + +The following patterns are considered problems: + +````ts +/** + * @yields + */ +// Message: @yields should have a type +```` + + + + + +## Passing examples + +The following patterns are not considered problems: + +````ts +/** + * @yields {SomeType} + */ +```` + diff --git a/eslint.config.js b/eslint.config.js index 4ce8267a3..693e32343 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -11,46 +11,17 @@ import globals from 'globals'; const common = { linterOptions: { - reportUnusedDisableDirectives: 'off', + reportUnusedDisableDirectives: 'error', + reportUnusedInlineConfigs: 'error', }, }; -// /** -// * @param {any} abc Test -// */ -// export const a = (abc) => { -// // eslint-disable-next-line no-console -- Testing -// console.log('abc', abc); -// }; - export default [ ...canonical, ...canonicalJsdoc, ...jsdoc({ config: 'examples-and-default-expressions', }), - // jsdoc({ - // config: 'flat/recommended', - // extraRuleDefinitions: { - // forbid: { - // Any: { - // contexts: [ - // { - // comment: 'JsdocBlock:has(JsdocTypeName[value="any"])', - // context: 'any', - // message: '`any` is not allowed; use a more specific type', - // }, - // ], - // descriptions: 'Testing here', - // }, - // }, - // }, - // rules: { - // 'jsdoc/forbid-Any': [ - // 'error', - // ], - // }, - // }), { // Must be by itself ignores: [ diff --git a/src/exportParser.js b/src/exportParser.js index 7a3a7cb73..7898e92ec 100644 --- a/src/exportParser.js +++ b/src/exportParser.js @@ -103,8 +103,6 @@ const getIdentifier = function (node, globals, scope, opts) { /** @type {CreateSymbol} */ let createSymbol; // eslint-disable-line prefer-const -/* eslint-disable complexity -- Temporary */ - /** * @typedef {{ * simpleIdentifier?: boolean @@ -120,7 +118,6 @@ let createSymbol; // eslint-disable-line prefer-const * @returns {CreatedNode|null} */ const getSymbol = function (node, globals, scope, opt) { - /* eslint-enable complexity -- Temporary */ const opts = opt || {}; /* c8 ignore next */ switch (node.type) { @@ -478,8 +475,6 @@ const initVariables = function (node, globals, opts) { } }; -/* eslint-disable complexity -- Temporary */ - /** * Populates variable maps using AST * @param {import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node} node @@ -489,7 +484,6 @@ const initVariables = function (node, globals, opts) { * @returns {boolean} */ const mapVariables = function (node, globals, opt, isExport) { - /* eslint-enable complexity -- Temporary */ /* c8 ignore next */ const opts = opt || {}; /* c8 ignore next */ diff --git a/src/index-cjs.js b/src/index-cjs.js index bbb4872dd..b35c41f49 100644 --- a/src/index-cjs.js +++ b/src/index-cjs.js @@ -1,6 +1,7 @@ import { getJsdocProcessorPlugin, } from './getJsdocProcessorPlugin.js'; +import iterateJsdoc from './iterateJsdoc.js'; import checkAccess from './rules/checkAccess.js'; import checkAlignment from './rules/checkAlignment.js'; import checkExamples from './rules/checkExamples.js'; @@ -60,6 +61,89 @@ import textEscaping from './rules/textEscaping.js'; import typeFormatting from './rules/typeFormatting.js'; import validTypes from './rules/validTypes.js'; +/** + * @param {{ + * contexts: (string|{ + * comment: string, + * context: string, + * message: string + * })[], + * description?: string, + * contextName?: string + * }} cfg + * @returns {import('@eslint/core').RuleDefinition< + * import('@eslint/core').RuleDefinitionTypeOptions + * >} + */ +export const buildForbidRuleDefinition = ({ + contextName, + contexts, + description, +}) => { + return iterateJsdoc(({ + // context, + info: { + comment, + }, + report, + utils, + }) => { + const { + contextStr, + foundContext, + } = utils.findContext(contexts, comment); + + // We are not on the *particular* matching context/comment, so don't assume + // we need reporting + if (!foundContext) { + return; + } + + const message = /** @type {import('./iterateJsdoc.js').ContextObject} */ ( + foundContext + )?.message ?? + 'Syntax is restricted: {{context}}' + + (comment ? ' with {{comment}}' : ''); + + report(message, null, null, comment ? { + comment, + context: contextStr, + } : { + context: contextStr, + }); + }, { + contextSelected: true, + meta: { + docs: { + description: description ?? contextName ?? 'Reports when certain comment structures are present.', + url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-restricted-syntax.md#repos-sticky-header', + }, + fixable: 'code', + schema: [], + type: 'suggestion', + }, + modifyContext: (context) => { + // Reproduce context object with our own `contexts` + const propertyDescriptors = Object.getOwnPropertyDescriptors(context); + return Object.create( + Object.getPrototypeOf(context), + { + ...propertyDescriptors, + options: { + ...propertyDescriptors.options, + value: [ + { + contexts, + }, + ], + }, + }, + ); + }, + nonGlobalSettings: true, + }); +}; + /* eslint-disable jsdoc/valid-types -- Bug */ /** * @typedef {"recommended" | "stylistic" | "contents" | "logical" | "requirements"} ConfigGroups @@ -111,6 +195,16 @@ index.rules = { 'require-file-overview': requireFileOverview, 'require-hyphen-before-param-description': requireHyphenBeforeParamDescription, 'require-jsdoc': requireJsdoc, + 'require-next-type': buildForbidRuleDefinition({ + contexts: [ + { + comment: 'JsdocBlock:has(JsdocTag[tag=next]:not([parsedType.type]))', + context: 'any', + message: '@next should have a type', + }, + ], + description: 'Requires a type for @next tags', + }), 'require-param': requireParam, 'require-param-description': requireParamDescription, 'require-param-name': requireParamName, @@ -125,8 +219,28 @@ index.rules = { 'require-returns-type': requireReturnsType, 'require-template': requireTemplate, 'require-throws': requireThrows, + 'require-throws-type': buildForbidRuleDefinition({ + contexts: [ + { + comment: 'JsdocBlock:has(JsdocTag[tag=throws]:not([parsedType.type]))', + context: 'any', + message: '@throws should have a type', + }, + ], + description: 'Requires a type for @throws tags', + }), 'require-yields': requireYields, 'require-yields-check': requireYieldsCheck, + 'require-yields-type': buildForbidRuleDefinition({ + contexts: [ + { + comment: 'JsdocBlock:has(JsdocTag[tag=yields]:not([parsedType.type]))', + context: 'any', + message: '@yields should have a type', + }, + ], + description: 'Requires a type for @yields tags', + }), 'sort-tags': sortTags, 'tag-lines': tagLines, 'text-escaping': textEscaping, @@ -189,6 +303,7 @@ const createRecommendedRuleset = (warnOrError, flatName) => { 'jsdoc/require-file-overview': 'off', 'jsdoc/require-hyphen-before-param-description': 'off', 'jsdoc/require-jsdoc': warnOrError, + 'jsdoc/require-next-type': warnOrError, 'jsdoc/require-param': warnOrError, 'jsdoc/require-param-description': warnOrError, 'jsdoc/require-param-name': warnOrError, @@ -203,8 +318,10 @@ const createRecommendedRuleset = (warnOrError, flatName) => { 'jsdoc/require-returns-type': warnOrError, 'jsdoc/require-template': 'off', 'jsdoc/require-throws': 'off', + 'jsdoc/require-throws-type': warnOrError, 'jsdoc/require-yields': warnOrError, 'jsdoc/require-yields-check': warnOrError, + 'jsdoc/require-yields-type': warnOrError, 'jsdoc/sort-tags': 'off', 'jsdoc/tag-lines': warnOrError, 'jsdoc/text-escaping': 'off', @@ -338,6 +455,7 @@ const createLogicalTypescriptFlavorRuleset = createStandaloneRulesetFactory(logi const requirementsRules = [ 'jsdoc/require-example', 'jsdoc/require-jsdoc', + 'jsdoc/require-next-type', 'jsdoc/require-param', 'jsdoc/require-param-description', 'jsdoc/require-param-name', @@ -346,7 +464,9 @@ const requirementsRules = [ 'jsdoc/require-property-name', 'jsdoc/require-returns', 'jsdoc/require-returns-description', + 'jsdoc/require-throws-type', 'jsdoc/require-yields', + 'jsdoc/require-yields-type', ]; const createRequirementsTypeScriptRuleset = createStandaloneRulesetFactory(requirementsRules); diff --git a/src/index-esm.js b/src/index-esm.js index 93b9f6755..620e2ba02 100644 --- a/src/index-esm.js +++ b/src/index-esm.js @@ -2,114 +2,16 @@ import { merge, } from 'object-deep-merge'; -import iterateJsdoc from './iterateJsdoc.js'; // BEGIN REPLACE -import index from './index-cjs.js'; +import index, { + buildForbidRuleDefinition, +} from './index-cjs.js'; // eslint-disable-next-line unicorn/prefer-export-from --- Reusing `index` export default index; // END REPLACE -/** - * @param {{ - * contexts: (string|{ - * comment: string, - * context: string, - * message: string - * })[], - * description?: string, - * contextName: string - * }} cfg - * @returns {import('@eslint/core').RuleDefinition< - * import('@eslint/core').RuleDefinitionTypeOptions - * >} - */ -const buildForbidRuleDefinition = ({ - contextName, - contexts, - description, -}) => { - return iterateJsdoc(({ - // context, - info: { - comment, - }, - report, - utils, - }) => { - const { - contextStr, - foundContext, - } = utils.findContext(contexts, comment); - - // We are not on the *particular* matching context/comment, so don't assume - // we need reporting - if (!foundContext) { - return; - } - - const message = /** @type {import('./iterateJsdoc.js').ContextObject} */ ( - foundContext - )?.message ?? - 'Syntax is restricted: {{context}}' + - (comment ? ' with {{comment}}' : ''); - - report(message, null, null, comment ? { - comment, - context: contextStr, - } : { - context: contextStr, - }); - }, { - contextSelected: true, - meta: { - docs: { - description: description ?? contextName ?? 'Reports when certain comment structures are present.', - url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-restricted-syntax.md#repos-sticky-header', - }, - fixable: 'code', - schema: [], - type: 'suggestion', - }, - modifyContext: (context) => { - return { - cwd: context.cwd, - filename: context.filename, - getCwd (...args) { - return context.getCwd(...args); - }, - getFilename (...args) { - return context.getFilename(...args); - }, - getPhysicalFilename (...args) { - return context.getPhysicalFilename(...args); - }, - getSourceCode (...args) { - return context.getSourceCode(...args); - }, - id: context.id, - languageOptions: context.languageOptions, - // Here's why we override: - options: [ - { - contexts, - }, - ], - parserOptions: context.parserOptions, - parserPath: context.parserPath, - physicalFilename: context.physicalFilename, - report (...args) { - return context.report(...args); - }, - settings: context.settings, - sourceCode: context.sourceCode, - }; - }, - nonGlobalSettings: true, - }); -}; - /* eslint-disable jsdoc/valid-types -- Bug */ /** * @type {(( @@ -238,16 +140,6 @@ export const jsdoc = function (cfg) { 'type', ], }, - throws: { - required: [ - 'type', - ], - }, - yields: { - required: [ - 'type', - ], - }, }, } : {}, diff --git a/src/index.js b/src/index.js index c5e3a0505..5e1988cf9 100644 --- a/src/index.js +++ b/src/index.js @@ -3,11 +3,11 @@ import { merge, } from 'object-deep-merge'; -import iterateJsdoc from './iterateJsdoc.js'; import { getJsdocProcessorPlugin, } from './getJsdocProcessorPlugin.js'; +import iterateJsdoc from './iterateJsdoc.js'; import checkAccess from './rules/checkAccess.js'; import checkAlignment from './rules/checkAlignment.js'; import checkExamples from './rules/checkExamples.js'; @@ -67,6 +67,89 @@ import textEscaping from './rules/textEscaping.js'; import typeFormatting from './rules/typeFormatting.js'; import validTypes from './rules/validTypes.js'; +/** + * @param {{ + * contexts: (string|{ + * comment: string, + * context: string, + * message: string + * })[], + * description?: string, + * contextName?: string + * }} cfg + * @returns {import('@eslint/core').RuleDefinition< + * import('@eslint/core').RuleDefinitionTypeOptions + * >} + */ +export const buildForbidRuleDefinition = ({ + contextName, + contexts, + description, +}) => { + return iterateJsdoc(({ + // context, + info: { + comment, + }, + report, + utils, + }) => { + const { + contextStr, + foundContext, + } = utils.findContext(contexts, comment); + + // We are not on the *particular* matching context/comment, so don't assume + // we need reporting + if (!foundContext) { + return; + } + + const message = /** @type {import('./iterateJsdoc.js').ContextObject} */ ( + foundContext + )?.message ?? + 'Syntax is restricted: {{context}}' + + (comment ? ' with {{comment}}' : ''); + + report(message, null, null, comment ? { + comment, + context: contextStr, + } : { + context: contextStr, + }); + }, { + contextSelected: true, + meta: { + docs: { + description: description ?? contextName ?? 'Reports when certain comment structures are present.', + url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-restricted-syntax.md#repos-sticky-header', + }, + fixable: 'code', + schema: [], + type: 'suggestion', + }, + modifyContext: (context) => { + // Reproduce context object with our own `contexts` + const propertyDescriptors = Object.getOwnPropertyDescriptors(context); + return Object.create( + Object.getPrototypeOf(context), + { + ...propertyDescriptors, + options: { + ...propertyDescriptors.options, + value: [ + { + contexts, + }, + ], + }, + }, + ); + }, + nonGlobalSettings: true, + }); +}; + /* eslint-disable jsdoc/valid-types -- Bug */ /** * @typedef {"recommended" | "stylistic" | "contents" | "logical" | "requirements"} ConfigGroups @@ -118,6 +201,16 @@ index.rules = { 'require-file-overview': requireFileOverview, 'require-hyphen-before-param-description': requireHyphenBeforeParamDescription, 'require-jsdoc': requireJsdoc, + 'require-next-type': buildForbidRuleDefinition({ + contexts: [ + { + comment: 'JsdocBlock:has(JsdocTag[tag=next]:not([parsedType.type]))', + context: 'any', + message: '@next should have a type', + }, + ], + description: 'Requires a type for @next tags', + }), 'require-param': requireParam, 'require-param-description': requireParamDescription, 'require-param-name': requireParamName, @@ -132,8 +225,28 @@ index.rules = { 'require-returns-type': requireReturnsType, 'require-template': requireTemplate, 'require-throws': requireThrows, + 'require-throws-type': buildForbidRuleDefinition({ + contexts: [ + { + comment: 'JsdocBlock:has(JsdocTag[tag=throws]:not([parsedType.type]))', + context: 'any', + message: '@throws should have a type', + }, + ], + description: 'Requires a type for @throws tags', + }), 'require-yields': requireYields, 'require-yields-check': requireYieldsCheck, + 'require-yields-type': buildForbidRuleDefinition({ + contexts: [ + { + comment: 'JsdocBlock:has(JsdocTag[tag=yields]:not([parsedType.type]))', + context: 'any', + message: '@yields should have a type', + }, + ], + description: 'Requires a type for @yields tags', + }), 'sort-tags': sortTags, 'tag-lines': tagLines, 'text-escaping': textEscaping, @@ -196,6 +309,7 @@ const createRecommendedRuleset = (warnOrError, flatName) => { 'jsdoc/require-file-overview': 'off', 'jsdoc/require-hyphen-before-param-description': 'off', 'jsdoc/require-jsdoc': warnOrError, + 'jsdoc/require-next-type': warnOrError, 'jsdoc/require-param': warnOrError, 'jsdoc/require-param-description': warnOrError, 'jsdoc/require-param-name': warnOrError, @@ -210,8 +324,10 @@ const createRecommendedRuleset = (warnOrError, flatName) => { 'jsdoc/require-returns-type': warnOrError, 'jsdoc/require-template': 'off', 'jsdoc/require-throws': 'off', + 'jsdoc/require-throws-type': warnOrError, 'jsdoc/require-yields': warnOrError, 'jsdoc/require-yields-check': warnOrError, + 'jsdoc/require-yields-type': warnOrError, 'jsdoc/sort-tags': 'off', 'jsdoc/tag-lines': warnOrError, 'jsdoc/text-escaping': 'off', @@ -345,6 +461,7 @@ const createLogicalTypescriptFlavorRuleset = createStandaloneRulesetFactory(logi const requirementsRules = [ 'jsdoc/require-example', 'jsdoc/require-jsdoc', + 'jsdoc/require-next-type', 'jsdoc/require-param', 'jsdoc/require-param-description', 'jsdoc/require-param-name', @@ -353,7 +470,9 @@ const requirementsRules = [ 'jsdoc/require-property-name', 'jsdoc/require-returns', 'jsdoc/require-returns-description', + 'jsdoc/require-throws-type', 'jsdoc/require-yields', + 'jsdoc/require-yields-type', ]; const createRequirementsTypeScriptRuleset = createStandaloneRulesetFactory(requirementsRules); @@ -537,105 +656,6 @@ index.configs['examples-and-default-expressions'] = /** @type {import('eslint'). export default index; -/** - * @param {{ - * contexts: (string|{ - * comment: string, - * context: string, - * message: string - * })[], - * description?: string, - * contextName: string - * }} cfg - * @returns {import('@eslint/core').RuleDefinition< - * import('@eslint/core').RuleDefinitionTypeOptions - * >} - */ -const buildForbidRuleDefinition = ({ - contextName, - contexts, - description, -}) => { - return iterateJsdoc(({ - // context, - info: { - comment, - }, - report, - utils, - }) => { - const { - contextStr, - foundContext, - } = utils.findContext(contexts, comment); - - // We are not on the *particular* matching context/comment, so don't assume - // we need reporting - if (!foundContext) { - return; - } - - const message = /** @type {import('./iterateJsdoc.js').ContextObject} */ ( - foundContext - )?.message ?? - 'Syntax is restricted: {{context}}' + - (comment ? ' with {{comment}}' : ''); - - report(message, null, null, comment ? { - comment, - context: contextStr, - } : { - context: contextStr, - }); - }, { - contextSelected: true, - meta: { - docs: { - description: description ?? contextName ?? 'Reports when certain comment structures are present.', - url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-restricted-syntax.md#repos-sticky-header', - }, - fixable: 'code', - schema: [], - type: 'suggestion', - }, - modifyContext: (context) => { - return { - cwd: context.cwd, - filename: context.filename, - getCwd (...args) { - return context.getCwd(...args); - }, - getFilename (...args) { - return context.getFilename(...args); - }, - getPhysicalFilename (...args) { - return context.getPhysicalFilename(...args); - }, - getSourceCode (...args) { - return context.getSourceCode(...args); - }, - id: context.id, - languageOptions: context.languageOptions, - // Here's why we override: - options: [ - { - contexts, - }, - ], - parserOptions: context.parserOptions, - parserPath: context.parserPath, - physicalFilename: context.physicalFilename, - report (...args) { - return context.report(...args); - }, - settings: context.settings, - sourceCode: context.sourceCode, - }; - }, - nonGlobalSettings: true, - }); -}; - /* eslint-disable jsdoc/valid-types -- Bug */ /** * @type {(( @@ -764,16 +784,6 @@ export const jsdoc = function (cfg) { 'type', ], }, - throws: { - required: [ - 'type', - ], - }, - yields: { - required: [ - 'type', - ], - }, }, } : {}, diff --git a/src/jsdocUtils.js b/src/jsdocUtils.js index fedfb2bc7..49d21a517 100644 --- a/src/jsdocUtils.js +++ b/src/jsdocUtils.js @@ -1289,9 +1289,7 @@ const hasNonFunctionYield = (node, checkYieldReturnValue) => { hasNonFunctionYield(node.property, checkYieldReturnValue); case 'ObjectExpression': - /* eslint-disable no-fallthrough */ case 'ObjectPattern': - /* eslint-enable no-fallthrough */ return node.properties.some((property) => { return hasNonFunctionYield(property, checkYieldReturnValue); }); @@ -1414,7 +1412,6 @@ const hasYieldValue = (node, checkYieldReturnValue) => { * @param {boolean} [innerFunction] * @returns {boolean} */ -// eslint-disable-next-line complexity const hasThrowValue = (node, innerFunction) => { if (!node) { return false; diff --git a/src/rules/informativeDocs.js b/src/rules/informativeDocs.js index f08b078c4..6591bf020 100644 --- a/src/rules/informativeDocs.js +++ b/src/rules/informativeDocs.js @@ -13,8 +13,6 @@ const defaultUselessWords = [ 'a', 'an', 'i', 'in', 'of', 's', 'the', ]; -/* eslint-disable complexity -- Temporary */ - /** * @param {import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node|null|undefined} node * @returns {string[]} @@ -89,7 +87,6 @@ const getNamesFromNode = (node) => { return []; } }; -/* eslint-enable complexity -- Temporary */ export default iterateJsdoc(({ context, diff --git a/src/rules/matchName.js b/src/rules/matchName.js index 0f70568a7..908a12d46 100644 --- a/src/rules/matchName.js +++ b/src/rules/matchName.js @@ -1,6 +1,5 @@ import iterateJsdoc from '../iterateJsdoc.js'; -// eslint-disable-next-line complexity export default iterateJsdoc(({ context, info: { diff --git a/src/rules/noMultiAsterisks.js b/src/rules/noMultiAsterisks.js index 6e0cac6b8..282f5da41 100644 --- a/src/rules/noMultiAsterisks.js +++ b/src/rules/noMultiAsterisks.js @@ -22,7 +22,6 @@ export default iterateJsdoc(({ const middleAsterisks = allowWhitespace ? middleAsterisksNoBlockWS : middleAsterisksBlockWS; - // eslint-disable-next-line complexity -- Todo jsdoc.source.some(({ number, tokens, diff --git a/src/rules/requireReturnsCheck.js b/src/rules/requireReturnsCheck.js index 3a5238387..15f05c977 100755 --- a/src/rules/requireReturnsCheck.js +++ b/src/rules/requireReturnsCheck.js @@ -33,7 +33,6 @@ const canSkip = (utils, settings) => { settings.mode === 'closure' && utils.classHasTag('record'); }; -// eslint-disable-next-line complexity -- Temporary export default iterateJsdoc(({ context, node, diff --git a/src/rules/sortTags.js b/src/rules/sortTags.js index f238d4186..2dd019be7 100644 --- a/src/rules/sortTags.js +++ b/src/rules/sortTags.js @@ -1,7 +1,6 @@ import defaultTagOrder from '../defaultTagOrder.js'; import iterateJsdoc from '../iterateJsdoc.js'; -// eslint-disable-next-line complexity -- Temporary export default iterateJsdoc(({ context, jsdoc, @@ -330,7 +329,6 @@ export default iterateJsdoc(({ const ct = countTagEmptyLines(tag); if (ct) { - // eslint-disable-next-line complexity -- Temporary const fixer = () => { let foundFirstTag = false; diff --git a/src/rules/tagLines.js b/src/rules/tagLines.js index c6bcd0e6b..f5a6189ac 100644 --- a/src/rules/tagLines.js +++ b/src/rules/tagLines.js @@ -16,7 +16,6 @@ export default iterateJsdoc(({ } = {}, ] = context.options; - // eslint-disable-next-line complexity -- Temporary jsdoc.tags.some((tg, tagIdx) => { let lastTag; diff --git a/test/index.js b/test/index.js index 174e1ce7e..bdffd71d8 100644 --- a/test/index.js +++ b/test/index.js @@ -1,4 +1,5 @@ import jsdocDefault, { + buildForbidRuleDefinition, jsdoc, } from '../src/index.js'; import { @@ -7,6 +8,9 @@ import { import { expect, } from 'chai'; +import { + parser as typescriptEslintParser, +} from 'typescript-eslint'; describe('jsdoc()', () => { it('Builds simple plugins config', () => { @@ -118,16 +122,6 @@ describe('jsdoc()', () => { 'type', ], }, - throws: { - required: [ - 'type', - ], - }, - yields: { - required: [ - 'type', - ], - }, }, }, }); @@ -162,16 +156,6 @@ describe('jsdoc()', () => { 'name', ], }, - throws: { - required: [ - 'type', - ], - }, - yields: { - required: [ - 'type', - ], - }, }, }, }); @@ -206,6 +190,37 @@ describe('jsdoc()', () => { }, }); }); + + it('throws when no jsdoc plugin is present with `extraRuleDefinitions`', () => { + expect(() => { + jsdoc({ + config: 'flat/stylistic-typescript-flavor', + extraRuleDefinitions: { + forbid: {}, + }, + plugins: { + jsdoc: {}, + }, + }); + }).to.throw(); + }); +}); + +describe('buildForbidRuleDefinition', () => { + it('Falls back in description when `description` and `contextName` are missing', () => { + const rule = buildForbidRuleDefinition({ + contexts: [ + { + comment: 'JsdocBlock:has(JsdocTag[tag=yields]:not([parsedType.type]))', + context: 'any', + message: '@yields should have a type', + }, + ], + }); + expect(rule.meta?.docs?.description).to.equal( + 'Reports when certain comment structures are present.', + ); + }); }); for (const [ @@ -265,6 +280,178 @@ for (const [ ], }, ], + [ + 'AnyNoMessage', + [ + { + comment: 'JsdocBlock:has(JsdocTypeName[value="any"])', + context: 'any', + }, + ], + { + invalid: [ + { + code: ` + /** + * @param {Promise} + */ + function quux () { + + } + `, + errors: [ + { + line: 2, + message: 'Syntax is restricted: any with JsdocBlock:has(JsdocTypeName[value="any"])', + }, + ], + }, + ], + valid: [ + { + code: ` + /** + * @param {Promise} + */ + function quux () { + + } + `, + }, + ], + }, + ], + [ + 'FunctionDeclaration', + [ + { + context: 'FunctionDeclaration', + message: '`FunctionDeclaration` is not allowed with JSDoc; use another function type', + }, + ], + { + invalid: [ + { + code: ` + /** + * + */ + function quux () { + + } + `, + errors: [ + { + line: 2, + message: '`FunctionDeclaration` is not allowed with JSDoc; use another function type', + }, + ], + }, + ], + valid: [ + { + code: ` + /** + * + */ + const quux = function () { + + }; + `, + }, + ], + }, + ], + [ + 'FunctionDeclarationNoMessage', + [ + { + context: 'FunctionDeclaration', + }, + ], + { + invalid: [ + { + code: ` + /** + * + */ + function quux () { + + } + `, + errors: [ + { + line: 2, + message: 'Syntax is restricted: FunctionDeclaration', + }, + ], + }, + ], + valid: [ + { + code: ` + /** + * + */ + const quux = function () { + + }; + `, + }, + ], + }, + ], + [ + 'EnumAndAccess', + [ + { + comment: 'JsdocBlock[postDelimiter=""]:has(JsdocTag ~ JsdocTag[tag=/private|protected/])', + context: 'any', + message: 'Access modifier tags must come first', + }, + { + comment: 'JsdocBlock[postDelimiter=""]:has(JsdocTag[tag="enum"])', + context: ':declaration:not(TSEnumDeclaration):not(:has(ObjectExpression)), :function', + message: '@enum is only allowed on potential enum types', + }, + ], + { + invalid: [ + { + code: ` + /** + * @enum {String} + * @private + * Object holding values of some custom enum + */ + const MY_ENUM = Object.freeze({ + VAL_A: "myvala" + } as const); + `, + errors: [ + { + line: 2, + message: 'Access modifier tags must come first', + }, + ], + }, + ], + valid: [ + { + code: ` + /** + * @enum {String} + * Object holding values of some custom enum + */ + const MY_ENUM = Object.freeze({ + VAL_A: "myvala" + } as const); + `, + }, + ], + }, + ], ])) { runRuleTests({ assertions, @@ -278,6 +465,9 @@ for (const [ }, }, }).plugins?.jsdoc, + languageOptions: { + parser: typescriptEslintParser, + }, ruleName: `forbid-${contextName}`, }); } diff --git a/test/rules/assertions/requireNextType.js b/test/rules/assertions/requireNextType.js new file mode 100644 index 000000000..08e06ea38 --- /dev/null +++ b/test/rules/assertions/requireNextType.js @@ -0,0 +1,26 @@ +export default { + invalid: [ + { + code: ` + /** + * @next + */ + `, + errors: [ + { + line: 2, + message: '@next should have a type', + }, + ], + }, + ], + valid: [ + { + code: ` + /** + * @next {SomeType} + */ + `, + }, + ], +}; diff --git a/test/rules/assertions/requireThrowsType.js b/test/rules/assertions/requireThrowsType.js new file mode 100644 index 000000000..c9dd11539 --- /dev/null +++ b/test/rules/assertions/requireThrowsType.js @@ -0,0 +1,26 @@ +export default { + invalid: [ + { + code: ` + /** + * @throws + */ + `, + errors: [ + { + line: 2, + message: '@throws should have a type', + }, + ], + }, + ], + valid: [ + { + code: ` + /** + * @throws {SomeType} + */ + `, + }, + ], +}; diff --git a/test/rules/assertions/requireYieldsType.js b/test/rules/assertions/requireYieldsType.js new file mode 100644 index 000000000..60f80df76 --- /dev/null +++ b/test/rules/assertions/requireYieldsType.js @@ -0,0 +1,26 @@ +export default { + invalid: [ + { + code: ` + /** + * @yields + */ + `, + errors: [ + { + line: 2, + message: '@yields should have a type', + }, + ], + }, + ], + valid: [ + { + code: ` + /** + * @yields {SomeType} + */ + `, + }, + ], +}; diff --git a/test/rules/index.js b/test/rules/index.js index 255c23e55..311b98bf3 100644 --- a/test/rules/index.js +++ b/test/rules/index.js @@ -32,13 +32,17 @@ const ruleTester = new RuleTester(); * assertions: TestCases, * ruleName: string, * valid?: string, - * invalid?: string + * invalid?: string, + * languageOptions?: import('eslint').Linter.LanguageOptions, * }} cfg */ export const runRuleTests = ({ assertions, config, invalid, + languageOptions = { + ecmaVersion: 'latest', + }, ruleName, valid, }) => { @@ -50,11 +54,6 @@ export const runRuleTests = ({ config.rules[ruleName] ); - /** @type {{ecmaVersion: import('eslint').Linter.EcmaVersion}} */ - const languageOptions = { - ecmaVersion: 'latest', - }; - if (!(rule.meta && 'schema' in rule.meta) && ( assertions.invalid.some((item) => { return item.options; @@ -152,7 +151,6 @@ export const runRuleTests = ({ } }; -// eslint-disable-next-line complexity -- Temporary const main = async () => { const ruleNames = JSON.parse(readFileSync(join( import.meta.dirname, './ruleNames.json', diff --git a/test/rules/ruleNames.json b/test/rules/ruleNames.json index 4f5ed3b1d..31c48d291 100644 --- a/test/rules/ruleNames.json +++ b/test/rules/ruleNames.json @@ -36,6 +36,7 @@ "require-file-overview", "require-hyphen-before-param-description", "require-jsdoc", + "require-next-type", "require-param", "require-param-description", "require-param-name", @@ -50,8 +51,10 @@ "require-returns-type", "require-template", "require-throws", + "require-throws-type", "require-yields", "require-yields-check", + "require-yields-type", "sort-tags", "tag-lines", "text-escaping", From 33a4529ecbb2d7ef23bfaee2e28761cda98f97b3 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sat, 13 Sep 2025 19:28:49 +0800 Subject: [PATCH 084/189] fix(`require-next-type`, `require-throws-type`, `require-yields-type`): fix URL; fixes #1500 (#1501) Also: - fix: allows `url` as part of `extraRuleDefinitions.forbid` context objects --- src/index-cjs.js | 7 ++++++- src/index-esm.js | 3 +++ src/index.js | 10 +++++++++- test/index.js | 16 ++++++++++++++++ 4 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/index-cjs.js b/src/index-cjs.js index b35c41f49..61e067ae3 100644 --- a/src/index-cjs.js +++ b/src/index-cjs.js @@ -70,6 +70,7 @@ import validTypes from './rules/validTypes.js'; * })[], * description?: string, * contextName?: string + * url?: string, * }} cfg * @returns {import('@eslint/core').RuleDefinition< * import('@eslint/core').RuleDefinitionTypeOptions @@ -79,6 +80,7 @@ export const buildForbidRuleDefinition = ({ contextName, contexts, description, + url, }) => { return iterateJsdoc(({ // context, @@ -116,7 +118,7 @@ export const buildForbidRuleDefinition = ({ meta: { docs: { description: description ?? contextName ?? 'Reports when certain comment structures are present.', - url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-restricted-syntax.md#repos-sticky-header', + url: url ?? 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-restricted-syntax.md#repos-sticky-header', }, fixable: 'code', schema: [], @@ -204,6 +206,7 @@ index.rules = { }, ], description: 'Requires a type for @next tags', + url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-next-type.md#repos-sticky-header', }), 'require-param': requireParam, 'require-param-description': requireParamDescription, @@ -228,6 +231,7 @@ index.rules = { }, ], description: 'Requires a type for @throws tags', + url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-throws-type.md#repos-sticky-header', }), 'require-yields': requireYields, 'require-yields-check': requireYieldsCheck, @@ -240,6 +244,7 @@ index.rules = { }, ], description: 'Requires a type for @yields tags', + url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-yields-type.md#repos-sticky-header', }), 'sort-tags': sortTags, 'tag-lines': tagLines, diff --git a/src/index-esm.js b/src/index-esm.js index 620e2ba02..8c011d986 100644 --- a/src/index-esm.js +++ b/src/index-esm.js @@ -24,6 +24,7 @@ export default index; * forbid: { * [contextName: string]: { * description?: string, + * url?: string, * contexts: (string|{ * message: string, * context: string, @@ -111,6 +112,7 @@ export const jsdoc = function (cfg) { { contexts, description, + url, }, ] of Object.entries(cfg.extraRuleDefinitions.forbid)) { outputConfig.plugins.jsdoc.rules[`forbid-${contextName}`] = @@ -118,6 +120,7 @@ export const jsdoc = function (cfg) { contextName, contexts, description, + url, }); } } diff --git a/src/index.js b/src/index.js index 5e1988cf9..f095bd5fd 100644 --- a/src/index.js +++ b/src/index.js @@ -76,6 +76,7 @@ import validTypes from './rules/validTypes.js'; * })[], * description?: string, * contextName?: string + * url?: string, * }} cfg * @returns {import('@eslint/core').RuleDefinition< * import('@eslint/core').RuleDefinitionTypeOptions @@ -85,6 +86,7 @@ export const buildForbidRuleDefinition = ({ contextName, contexts, description, + url, }) => { return iterateJsdoc(({ // context, @@ -122,7 +124,7 @@ export const buildForbidRuleDefinition = ({ meta: { docs: { description: description ?? contextName ?? 'Reports when certain comment structures are present.', - url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-restricted-syntax.md#repos-sticky-header', + url: url ?? 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-restricted-syntax.md#repos-sticky-header', }, fixable: 'code', schema: [], @@ -210,6 +212,7 @@ index.rules = { }, ], description: 'Requires a type for @next tags', + url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-next-type.md#repos-sticky-header', }), 'require-param': requireParam, 'require-param-description': requireParamDescription, @@ -234,6 +237,7 @@ index.rules = { }, ], description: 'Requires a type for @throws tags', + url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-throws-type.md#repos-sticky-header', }), 'require-yields': requireYields, 'require-yields-check': requireYieldsCheck, @@ -246,6 +250,7 @@ index.rules = { }, ], description: 'Requires a type for @yields tags', + url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-yields-type.md#repos-sticky-header', }), 'sort-tags': sortTags, 'tag-lines': tagLines, @@ -668,6 +673,7 @@ export default index; * forbid: { * [contextName: string]: { * description?: string, + * url?: string, * contexts: (string|{ * message: string, * context: string, @@ -755,6 +761,7 @@ export const jsdoc = function (cfg) { { contexts, description, + url, }, ] of Object.entries(cfg.extraRuleDefinitions.forbid)) { outputConfig.plugins.jsdoc.rules[`forbid-${contextName}`] = @@ -762,6 +769,7 @@ export const jsdoc = function (cfg) { contextName, contexts, description, + url, }); } } diff --git a/test/index.js b/test/index.js index bdffd71d8..2d71d0b43 100644 --- a/test/index.js +++ b/test/index.js @@ -221,6 +221,22 @@ describe('buildForbidRuleDefinition', () => { 'Reports when certain comment structures are present.', ); }); + + it('Can supply `url`', () => { + const rule = buildForbidRuleDefinition({ + contexts: [ + { + comment: 'JsdocBlock:has(JsdocTag[tag=yields]:not([parsedType.type]))', + context: 'any', + message: '@yields should have a type', + }, + ], + url: 'https://example.com', + }); + expect(rule.meta?.docs?.url).to.equal( + 'https://example.com', + ); + }); }); for (const [ From 91f1c309298ef8454bc928108e37652c896a0897 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sat, 13 Sep 2025 19:42:18 +0800 Subject: [PATCH 085/189] fix(`extraRuleDefinitions.forbid` jsdoc function option): point default link to advanced page (#1502) Also: - docs: document `url` and fix `description` property --- .README/advanced.md | 10 ++++++---- docs/advanced.md | 10 ++++++---- src/index-cjs.js | 2 +- src/index.js | 2 +- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/.README/advanced.md b/.README/advanced.md index 53fb67185..3eef463c8 100644 --- a/.README/advanced.md +++ b/.README/advanced.md @@ -101,9 +101,10 @@ then be selectively enabled and optionally disabled on a case-by-case basis. For each `forbid` key, add the name of the context (this will be appended to `forbid-` to decide the name of the rule, so with "Any" as the key, the rule -created will be `forbid-Any`). Then provide an optional `description` key -(which will be used for the created rule's `meta.docs.description`) and the -`contexts` array. See the `jsdoc/restricted-syntax` rule for more details. +created will be `forbid-Any`). Then provide an optional `description` and +`url` keys (which will be used for the created rule's `meta.docs` +`description` and `url` properties) and the `contexts` array. +See the `jsdoc/restricted-syntax` rule for more details. ```js import {jsdoc} from 'eslint-plugin-jsdoc'; @@ -121,7 +122,8 @@ export default [ message: '`any` is not allowed; use a more specific type', }, ], - descriptions: 'Testing here', + description: 'Forbids `any` usage', + url: 'https://example.com/docs-for-my-any-rule/' }, Function: { contexts: [ diff --git a/docs/advanced.md b/docs/advanced.md index 83e80a42a..688157bbf 100644 --- a/docs/advanced.md +++ b/docs/advanced.md @@ -121,9 +121,10 @@ then be selectively enabled and optionally disabled on a case-by-case basis. For each `forbid` key, add the name of the context (this will be appended to `forbid-` to decide the name of the rule, so with "Any" as the key, the rule -created will be `forbid-Any`). Then provide an optional `description` key -(which will be used for the created rule's `meta.docs.description`) and the -`contexts` array. See the `jsdoc/restricted-syntax` rule for more details. +created will be `forbid-Any`). Then provide an optional `description` and +`url` keys (which will be used for the created rule's `meta.docs` +`description` and `url` properties) and the `contexts` array. +See the `jsdoc/restricted-syntax` rule for more details. ```js import {jsdoc} from 'eslint-plugin-jsdoc'; @@ -141,7 +142,8 @@ export default [ message: '`any` is not allowed; use a more specific type', }, ], - descriptions: 'Testing here', + description: 'Forbids `any` usage', + url: 'https://example.com/docs-for-my-any-rule/' }, Function: { contexts: [ diff --git a/src/index-cjs.js b/src/index-cjs.js index 61e067ae3..43ac25e95 100644 --- a/src/index-cjs.js +++ b/src/index-cjs.js @@ -118,7 +118,7 @@ export const buildForbidRuleDefinition = ({ meta: { docs: { description: description ?? contextName ?? 'Reports when certain comment structures are present.', - url: url ?? 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-restricted-syntax.md#repos-sticky-header', + url: url ?? 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/advanced.md#user-content-advanced-creating-your-own-rules', }, fixable: 'code', schema: [], diff --git a/src/index.js b/src/index.js index f095bd5fd..a762f3a02 100644 --- a/src/index.js +++ b/src/index.js @@ -124,7 +124,7 @@ export const buildForbidRuleDefinition = ({ meta: { docs: { description: description ?? contextName ?? 'Reports when certain comment structures are present.', - url: url ?? 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-restricted-syntax.md#repos-sticky-header', + url: url ?? 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/advanced.md#user-content-advanced-creating-your-own-rules', }, fixable: 'code', schema: [], From 76b8406cf9d3248c39c35d263451f3f3e320a99c Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sat, 13 Sep 2025 22:06:05 +0800 Subject: [PATCH 086/189] fix(`valid-types`): avoid reporting for `next` (handled by own rule) (#1503) --- docs/rules/valid-types.md | 9 +++++++++ src/rules/validTypes.js | 5 ++++- test/rules/assertions/validTypes.js | 22 ++++++++++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/docs/rules/valid-types.md b/docs/rules/valid-types.md index 7e346ae9e..f1aead8fd 100644 --- a/docs/rules/valid-types.md +++ b/docs/rules/valid-types.md @@ -902,5 +902,14 @@ function quux() { export function onGlobalEvent (selector, type, callback, options) { delegate(document, selector, type, callback, options) } + +/** + * Even if added to `structuredTags` as in our recommended config, + * we don't want `valid-types` to report since + * `jsdoc/require-next-type` already does this. + * @next + */ +function a () {} +// Settings: {"jsdoc":{"structuredTags":{"next":{"required":["type"]}}}} ```` diff --git a/src/rules/validTypes.js b/src/rules/validTypes.js index bc0bc10a7..d9ae185e5 100644 --- a/src/rules/validTypes.js +++ b/src/rules/validTypes.js @@ -328,7 +328,10 @@ export default iterateJsdoc(({ // REQUIRED TYPE const mustHaveTypePosition = utils.tagMustHaveTypePosition(tag.tag, otherModeMaps); - if (mustHaveTypePosition !== false && !tag.type) { + if (mustHaveTypePosition !== false && !tag.type && + // Auto-added to settings and has own rule already, so don't duplicate + tag.tag !== 'next' + ) { const modeInfo = mustHaveTypePosition === true ? '' : ` in "${mode}" mode`; report(`Tag @${tag.tag} must have a type${modeInfo}.`, null, tag); diff --git a/test/rules/assertions/validTypes.js b/test/rules/assertions/validTypes.js index b72198ea4..ab0ac0c7b 100644 --- a/test/rules/assertions/validTypes.js +++ b/test/rules/assertions/validTypes.js @@ -1886,5 +1886,27 @@ export default /** @type {import('../index.js').TestCases} */ ({ } `, }, + { + code: ` + /** + * Even if added to \`structuredTags\` as in our recommended config, + * we don't want \`valid-types\` to report since + * \`jsdoc/require-next-type\` already does this. + * @next + */ + function a () {} + `, + settings: { + jsdoc: { + structuredTags: { + next: { + required: [ + 'type', + ], + }, + }, + }, + }, + }, ], }); From ab149825b97bdbec054397e6dae9a848e459db3a Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sun, 14 Sep 2025 08:27:46 +0800 Subject: [PATCH 087/189] fix(`jsdoc/examples/rules` and `jsdoc/default-expressions/rules` configs): add @stylistic, @typescript-eslint, and eslint-plulgin-n equivalents to default disabled rules (#1504) --- .README/rules/check-examples.md | 23 +++++++++++++---------- docs/rules/check-examples.md | 23 +++++++++++++---------- src/index-cjs.js | 22 +++++++++++++++++++++- src/index.js | 22 +++++++++++++++++++++- src/rules/checkExamples.js | 23 ++++++++++++++++++++++- 5 files changed, 90 insertions(+), 23 deletions(-) diff --git a/.README/rules/check-examples.md b/.README/rules/check-examples.md index 022ac0c7d..ed00b4551 100644 --- a/.README/rules/check-examples.md +++ b/.README/rules/check-examples.md @@ -135,37 +135,40 @@ by decreasing precedence: ### Rules Disabled by Default Unless `noDefaultExampleRules` is Set to `true` -* `eol-last` - Insisting that a newline "always" be at the end is less likely - to be desired in sample code as with the code file convention. +* `eol-last` (and `@stylistic/eol-last`) - Insisting that a newline "always" + be at the end is less likely to be desired in sample code as with the code + file convention. * `no-console` - This rule is unlikely to have inadvertent temporary debugging within examples. -* `no-multiple-empty-lines` - This rule may be problematic for projects which +* `no-multiple-empty-lines` (and `@stylistic/no-multiple-empty-lines`) - This + rule may be problematic for projects which use an initial newline just to start an example. Also, projects may wish to use extra lines within examples just for easier illustration purposes. * `no-undef` - Many variables in examples will be `undefined`. * `no-unused-vars` - It is common to define variables for clarity without always using them within examples. -* `padded-blocks` - It can generally look nicer to pad a little even if one's - code follows more stringency as far as block padding. +* `padded-blocks` (and `@stylistic/padded-blocks`) - It can generally look + nicer to pad a little even if one's code follows more stringency as far + as block padding. * `jsdoc/require-file-overview` - Shouldn't check example for jsdoc blocks. * `jsdoc/require-jsdoc` - Wouldn't expect jsdoc blocks within jsdoc blocks. * `import/no-unresolved` - One wouldn't generally expect example paths to resolve relative to the current JavaScript file as one would with real code. * `import/unambiguous` - Snippets in examples are likely too short to always include full import/export info. -* `node/no-missing-import` - See `import/no-unresolved`. -* `node/no-missing-require` - See `import/no-unresolved`. +* `node/no-missing-import` (and `n/no-missing-import`) - See `import/no-unresolved`. +* `node/no-missing-require` (and `n/no-missing-require`) - See `import/no-unresolved`. For `checkDefaults`, `checkParams`, and `checkProperties`, the following expression-oriented rules will be used by default as well: -* `quotes` - Will insist on "double". -* `semi` - Will insist on "never". +* `quotes` (and `@stylistic/quotes`) - Will insist on "double". +* `semi` (and `@stylistic/semi`) - Will insist on "never". * `strict` - Disabled. * `no-empty-function` - Disabled. * `no-new` - Disabled. -* `no-unused-expressions` - Disabled. +* `no-unused-expressions` (and `@typescript-eslint/no-unused-expressions`) - Disabled. * `chai-friendly/no-unused-expressions` - Disabled. ### Options for checking other than `@example` (`checkDefaults`, `checkParams`, or `checkProperties`) diff --git a/docs/rules/check-examples.md b/docs/rules/check-examples.md index a2341519e..37b96d900 100644 --- a/docs/rules/check-examples.md +++ b/docs/rules/check-examples.md @@ -162,37 +162,40 @@ by decreasing precedence: ### Rules Disabled by Default Unless noDefaultExampleRules is Set to true -* `eol-last` - Insisting that a newline "always" be at the end is less likely - to be desired in sample code as with the code file convention. +* `eol-last` (and `@stylistic/eol-last`) - Insisting that a newline "always" + be at the end is less likely to be desired in sample code as with the code + file convention. * `no-console` - This rule is unlikely to have inadvertent temporary debugging within examples. -* `no-multiple-empty-lines` - This rule may be problematic for projects which +* `no-multiple-empty-lines` (and `@stylistic/no-multiple-empty-lines`) - This + rule may be problematic for projects which use an initial newline just to start an example. Also, projects may wish to use extra lines within examples just for easier illustration purposes. * `no-undef` - Many variables in examples will be `undefined`. * `no-unused-vars` - It is common to define variables for clarity without always using them within examples. -* `padded-blocks` - It can generally look nicer to pad a little even if one's - code follows more stringency as far as block padding. +* `padded-blocks` (and `@stylistic/padded-blocks`) - It can generally look + nicer to pad a little even if one's code follows more stringency as far + as block padding. * `jsdoc/require-file-overview` - Shouldn't check example for jsdoc blocks. * `jsdoc/require-jsdoc` - Wouldn't expect jsdoc blocks within jsdoc blocks. * `import/no-unresolved` - One wouldn't generally expect example paths to resolve relative to the current JavaScript file as one would with real code. * `import/unambiguous` - Snippets in examples are likely too short to always include full import/export info. -* `node/no-missing-import` - See `import/no-unresolved`. -* `node/no-missing-require` - See `import/no-unresolved`. +* `node/no-missing-import` (and `n/no-missing-import`) - See `import/no-unresolved`. +* `node/no-missing-require` (and `n/no-missing-require`) - See `import/no-unresolved`. For `checkDefaults`, `checkParams`, and `checkProperties`, the following expression-oriented rules will be used by default as well: -* `quotes` - Will insist on "double". -* `semi` - Will insist on "never". +* `quotes` (and `@stylistic/quotes`) - Will insist on "double". +* `semi` (and `@stylistic/semi`) - Will insist on "never". * `strict` - Disabled. * `no-empty-function` - Disabled. * `no-new` - Disabled. -* `no-unused-expressions` - Disabled. +* `no-unused-expressions` (and `@typescript-eslint/no-unused-expressions`) - Disabled. * `chai-friendly/no-unused-expressions` - Disabled. diff --git a/src/index-cjs.js b/src/index-cjs.js index 43ac25e95..a08e18a7d 100644 --- a/src/index-cjs.js +++ b/src/index-cjs.js @@ -554,6 +554,15 @@ index.configs.examples = /** @type {import('eslint').Linter.Config[]} */ ([ ], name: 'jsdoc/examples/rules', rules: { + // "always" newline rule at end unlikely in sample code + '@stylistic/eol-last': 0, + // Often wish to start `@example` code after newline; also may use + // empty lines for spacing + '@stylistic/no-multiple-empty-lines': 0, + + // Can generally look nicer to pad a little even if code imposes more stringency + '@stylistic/padded-blocks': 0, + // "always" newline rule at end unlikely in sample code 'eol-last': 0, @@ -568,6 +577,11 @@ index.configs.examples = /** @type {import('eslint').Linter.Config[]} */ ([ // The end of a multiline comment would end the comment the example is in. 'jsdoc/require-jsdoc': 0, + // See import/no-unresolved + 'n/no-missing-import': 0, + + 'n/no-missing-require': 0, + // Unlikely to have inadvertent debugging within examples 'no-console': 0, @@ -577,7 +591,6 @@ index.configs.examples = /** @type {import('eslint').Linter.Config[]} */ ([ // Many variables in examples will be `undefined` 'no-undef': 0, - // Common to define variables for clarity without always using them 'no-unused-vars': 0, @@ -613,6 +626,13 @@ index.configs['default-expressions'] = /** @type {import('eslint').Linter.Config name: 'jsdoc/default-expressions/rules', rules: { ...index.configs.examples[1].rules, + '@stylistic/quotes': [ + 'error', 'double', + ], + '@stylistic/semi': [ + 'error', 'never', + ], + '@typescript-eslint/no-unused-expressions': 0, 'chai-friendly/no-unused-expressions': 0, 'no-empty-function': 0, 'no-new': 0, diff --git a/src/index.js b/src/index.js index a762f3a02..b470cc38d 100644 --- a/src/index.js +++ b/src/index.js @@ -560,6 +560,15 @@ index.configs.examples = /** @type {import('eslint').Linter.Config[]} */ ([ ], name: 'jsdoc/examples/rules', rules: { + // "always" newline rule at end unlikely in sample code + '@stylistic/eol-last': 0, + // Often wish to start `@example` code after newline; also may use + // empty lines for spacing + '@stylistic/no-multiple-empty-lines': 0, + + // Can generally look nicer to pad a little even if code imposes more stringency + '@stylistic/padded-blocks': 0, + // "always" newline rule at end unlikely in sample code 'eol-last': 0, @@ -574,6 +583,11 @@ index.configs.examples = /** @type {import('eslint').Linter.Config[]} */ ([ // The end of a multiline comment would end the comment the example is in. 'jsdoc/require-jsdoc': 0, + // See import/no-unresolved + 'n/no-missing-import': 0, + + 'n/no-missing-require': 0, + // Unlikely to have inadvertent debugging within examples 'no-console': 0, @@ -583,7 +597,6 @@ index.configs.examples = /** @type {import('eslint').Linter.Config[]} */ ([ // Many variables in examples will be `undefined` 'no-undef': 0, - // Common to define variables for clarity without always using them 'no-unused-vars': 0, @@ -619,6 +632,13 @@ index.configs['default-expressions'] = /** @type {import('eslint').Linter.Config name: 'jsdoc/default-expressions/rules', rules: { ...index.configs.examples[1].rules, + '@stylistic/quotes': [ + 'error', 'double', + ], + '@stylistic/semi': [ + 'error', 'never', + ], + '@typescript-eslint/no-unused-expressions': 0, 'chai-friendly/no-unused-expressions': 0, 'no-empty-function': 0, 'no-new': 0, diff --git a/src/rules/checkExamples.js b/src/rules/checkExamples.js index 36497407d..54d980180 100644 --- a/src/rules/checkExamples.js +++ b/src/rules/checkExamples.js @@ -37,6 +37,16 @@ const countChars = (str, ch) => { /** @type {import('eslint').Linter.RulesRecord} */ const defaultMdRules = { + // "always" newline rule at end unlikely in sample code + '@stylistic/eol-last': 0, + + // Often wish to start `@example` code after newline; also may use + // empty lines for spacing + '@stylistic/no-multiple-empty-lines': 0, + + // Can generally look nicer to pad a little even if code imposes more stringency + '@stylistic/padded-blocks': 0, + // "always" newline rule at end unlikely in sample code 'eol-last': 0, @@ -51,13 +61,16 @@ const defaultMdRules = { // The end of a multiline comment would end the comment the example is in. 'jsdoc/require-jsdoc': 0, + // See import/no-unresolved + 'n/no-missing-import': 0, + 'n/no-missing-require': 0, + // Unlikely to have inadvertent debugging within examples 'no-console': 0, // Often wish to start `@example` code after newline; also may use // empty lines for spacing 'no-multiple-empty-lines': 0, - // Many variables in examples will be `undefined` 'no-undef': 0, @@ -66,6 +79,7 @@ const defaultMdRules = { // See import/no-unresolved 'node/no-missing-import': 0, + 'node/no-missing-require': 0, // Can generally look nicer to pad a little even if code imposes more stringency @@ -75,6 +89,13 @@ const defaultMdRules = { /** @type {import('eslint').Linter.RulesRecord} */ const defaultExpressionRules = { ...defaultMdRules, + '@stylistic/quotes': [ + 'error', 'double', + ], + '@stylistic/semi': [ + 'error', 'never', + ], + '@typescript-eslint/no-unused-expressions': 'off', 'chai-friendly/no-unused-expressions': 'off', 'no-empty-function': 'off', 'no-new': 'off', From f019adfc992a2596ec400a3eb2220ae9edb6174d Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sun, 14 Sep 2025 11:24:13 +0800 Subject: [PATCH 088/189] fix(types): add missing configs to `index.configs` type (#1505) --- .README/README.md | 4 +++- README.md | 4 +++- src/index-cjs.js | 2 +- src/index-esm.js | 4 ++-- src/index.js | 6 +++--- 5 files changed, 12 insertions(+), 8 deletions(-) diff --git a/.README/README.md b/.README/README.md index 9da704e23..107c45add 100644 --- a/.README/README.md +++ b/.README/README.md @@ -29,7 +29,9 @@ npm install --save-dev eslint-plugin-jsdoc ### Flat config (procedural) -This is the currently recommended approach. +This is the currently recommended approach for all flat configs (besides the +array-based `examples`, `default-expressions`, and +`examples-and-default-expressions` configs). ```js import {jsdoc} from 'eslint-plugin-jsdoc'; diff --git a/README.md b/README.md index 6c81dd98e..f4fbd5cc8 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,9 @@ npm install --save-dev eslint-plugin-jsdoc ### Flat config (procedural) -This is the currently recommended approach. +This is the currently recommended approach for all flat configs (besides the +array-based `examples`, `default-expressions`, and +`examples-and-default-expressions` configs). ```js import {jsdoc} from 'eslint-plugin-jsdoc'; diff --git a/src/index-cjs.js b/src/index-cjs.js index a08e18a7d..387809933 100644 --- a/src/index-cjs.js +++ b/src/index-cjs.js @@ -153,7 +153,7 @@ export const buildForbidRuleDefinition = ({ * @typedef {"" | "-error"} ErrorLevelVariants * @type {import('eslint').ESLint.Plugin & { * configs: Record<`flat/${ConfigGroups}${ConfigVariants}${ErrorLevelVariants}`, - * import('eslint').Linter.Config> + * import('eslint').Linter.Config>|Record<"examples"|"default-expressions"|"examples-and-default-expressions", import('eslint').Linter.Config[]> * }} */ const index = {}; diff --git a/src/index-esm.js b/src/index-esm.js index 8c011d986..081453a2c 100644 --- a/src/index-esm.js +++ b/src/index-esm.js @@ -36,8 +36,8 @@ export default index; * } * ) => import('eslint').Linter.Config)} */ -/* eslint-enable jsdoc/valid-types -- Bug */ export const jsdoc = function (cfg) { + /* eslint-enable jsdoc/valid-types -- Bug */ /** @type {import('eslint').Linter.Config} */ let outputConfig = { plugins: { @@ -52,7 +52,7 @@ export const jsdoc = function (cfg) { throw new TypeError('Disallowed config value'); } - outputConfig = index.configs[cfg.config]; + outputConfig = /** @type {import('eslint').Linter.Config} */ (index.configs[cfg.config]); } if (cfg.rules) { diff --git a/src/index.js b/src/index.js index b470cc38d..aa693a563 100644 --- a/src/index.js +++ b/src/index.js @@ -159,7 +159,7 @@ export const buildForbidRuleDefinition = ({ * @typedef {"" | "-error"} ErrorLevelVariants * @type {import('eslint').ESLint.Plugin & { * configs: Record<`flat/${ConfigGroups}${ConfigVariants}${ErrorLevelVariants}`, - * import('eslint').Linter.Config> + * import('eslint').Linter.Config>|Record<"examples"|"default-expressions"|"examples-and-default-expressions", import('eslint').Linter.Config[]> * }} */ const index = {}; @@ -705,8 +705,8 @@ export default index; * } * ) => import('eslint').Linter.Config)} */ -/* eslint-enable jsdoc/valid-types -- Bug */ export const jsdoc = function (cfg) { + /* eslint-enable jsdoc/valid-types -- Bug */ /** @type {import('eslint').Linter.Config} */ let outputConfig = { plugins: { @@ -721,7 +721,7 @@ export const jsdoc = function (cfg) { throw new TypeError('Disallowed config value'); } - outputConfig = index.configs[cfg.config]; + outputConfig = /** @type {import('eslint').Linter.Config} */ (index.configs[cfg.config]); } if (cfg.rules) { From d1370211624c4d328a51040a0d5994f44ad163c1 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sun, 14 Sep 2025 13:19:34 +0800 Subject: [PATCH 089/189] docs(processor): demonstrate use with TypeScript (#1506) --- .README/processors.md | 58 +++++++++++++++++++++++++++++++++++++++++ docs/processors.md | 60 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 118 insertions(+) diff --git a/.README/processors.md b/.README/processors.md index 73ae34497..04600b62f 100644 --- a/.README/processors.md +++ b/.README/processors.md @@ -93,6 +93,64 @@ For defaults, a couple rules are enabled which are usually useful: context for double quotes to be used. - `semi` - Set to 'never' since a semi-colon is not desirable in this context. +### Use with TypeScript + +```js +import {getJsdocProcessorPlugin} from 'eslint-plugin-jsdoc'; +import { + parser as typescriptEslintParser, +} from 'typescript-eslint'; + +export default [ + { + files: [ + '**/*.ts', + ], + languageOptions: { + // Allows normal processing of TS files + parser: typescriptEslintParser + }, + + // Apply the processor to these TypeScript files + name: 'jsdoc/examples/processor', + plugins: { + examples: getJsdocProcessorPlugin({ + // Allows processor to parse TS files for @example tags + parser: typescriptEslintParser, + // In order to avoid the default of processing our examples + // as *.js files, we indicate the inner blocks are TS. + // This allows us to target the examples as TS files, as + // we do below. + matchingFileName: 'dummy.md/*.ts', + // If you only want to match @example content within fenced + // Markdown blocks, use: + // exampleCodeRegex: "^```ts([\\s\\S]*)```\\s*$" + }), + }, + processor: 'examples/examples' + }, + { + // Target the blocks within TypeScript + files: [ + // `**/*.ts` could also work if you want to share this config + // with other non-@example TypeScript + '**/*.md/*.ts', + ], + name: 'jsdoc/examples/rules', + languageOptions: { + // Allows @example itself to use TS + parser: typescriptEslintParser, + }, + rules: { + // Add the rules you want to apply to @example here + 'no-extra-semi': 'error', + // disable problematic rules here, e.g., + // ...jsdoc.configs.examples[1].rules + } + } +]; +``` + ### Options #### `checkDefaults` diff --git a/docs/processors.md b/docs/processors.md index ef9388de3..4c87e3c21 100644 --- a/docs/processors.md +++ b/docs/processors.md @@ -95,6 +95,66 @@ For defaults, a couple rules are enabled which are usually useful: context for double quotes to be used. - `semi` - Set to 'never' since a semi-colon is not desirable in this context. + + +### Use with TypeScript + +```js +import {getJsdocProcessorPlugin} from 'eslint-plugin-jsdoc'; +import { + parser as typescriptEslintParser, +} from 'typescript-eslint'; + +export default [ + { + files: [ + '**/*.ts', + ], + languageOptions: { + // Allows normal processing of TS files + parser: typescriptEslintParser + }, + + // Apply the processor to these TypeScript files + name: 'jsdoc/examples/processor', + plugins: { + examples: getJsdocProcessorPlugin({ + // Allows processor to parse TS files for @example tags + parser: typescriptEslintParser, + // In order to avoid the default of processing our examples + // as *.js files, we indicate the inner blocks are TS. + // This allows us to target the examples as TS files, as + // we do below. + matchingFileName: 'dummy.md/*.ts', + // If you only want to match @example content within fenced + // Markdown blocks, use: + // exampleCodeRegex: "^```ts([\\s\\S]*)```\\s*$" + }), + }, + processor: 'examples/examples' + }, + { + // Target the blocks within TypeScript + files: [ + // `**/*.ts` could also work if you want to share this config + // with other non-@example TypeScript + '**/*.md/*.ts', + ], + name: 'jsdoc/examples/rules', + languageOptions: { + // Allows @example itself to use TS + parser: typescriptEslintParser, + }, + rules: { + // Add the rules you want to apply to @example here + 'no-extra-semi': 'error', + // disable problematic rules here, e.g., + // ...jsdoc.configs.examples[1].rules + } + } +]; +``` + ### Options From 34e5910410470b1790da9001af3a22d3eed1e28b Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sun, 14 Sep 2025 13:59:45 +0800 Subject: [PATCH 090/189] fix(`examples` configs): disable `@typescript-eslint/no-unsed-vars` (#1507) Also: - docs(processor): more on typescript usage --- .README/processors.md | 11 +++++++++-- .README/rules/check-examples.md | 2 +- docs/processors.md | 11 +++++++++-- docs/rules/check-examples.md | 2 +- src/index-cjs.js | 2 ++ src/index.js | 2 ++ src/rules/checkExamples.js | 2 ++ 7 files changed, 26 insertions(+), 6 deletions(-) diff --git a/.README/processors.md b/.README/processors.md index 04600b62f..39d7e754e 100644 --- a/.README/processors.md +++ b/.README/processors.md @@ -97,7 +97,7 @@ For defaults, a couple rules are enabled which are usually useful: ```js import {getJsdocProcessorPlugin} from 'eslint-plugin-jsdoc'; -import { +import ts, { parser as typescriptEslintParser, } from 'typescript-eslint'; @@ -129,8 +129,10 @@ export default [ }, processor: 'examples/examples' }, + // Apply your TypeScript config + ...ts.configs.recommended, { - // Target the blocks within TypeScript + // Target the @example blocks within TypeScript files: [ // `**/*.ts` could also work if you want to share this config // with other non-@example TypeScript @@ -144,8 +146,13 @@ export default [ rules: { // Add the rules you want to apply to @example here 'no-extra-semi': 'error', + // disable problematic rules here, e.g., // ...jsdoc.configs.examples[1].rules + + // Due to https://github.com/gajus/eslint-plugin-jsdoc/issues/1377 , + // `typescript-eslint` type-checked rules must currently be disbaled + ...ts.configs.disableTypeChecked.rules } } ]; diff --git a/.README/rules/check-examples.md b/.README/rules/check-examples.md index ed00b4551..e2afb2ec8 100644 --- a/.README/rules/check-examples.md +++ b/.README/rules/check-examples.md @@ -146,7 +146,7 @@ by decreasing precedence: use extra lines within examples just for easier illustration purposes. * `no-undef` - Many variables in examples will be `undefined`. -* `no-unused-vars` - It is common to define variables for clarity without +* `no-unused-vars` (and `@typescript-eslint/no-unused-vars`) - It is common to define variables for clarity without always using them within examples. * `padded-blocks` (and `@stylistic/padded-blocks`) - It can generally look nicer to pad a little even if one's code follows more stringency as far diff --git a/docs/processors.md b/docs/processors.md index 4c87e3c21..1744b1c2e 100644 --- a/docs/processors.md +++ b/docs/processors.md @@ -101,7 +101,7 @@ For defaults, a couple rules are enabled which are usually useful: ```js import {getJsdocProcessorPlugin} from 'eslint-plugin-jsdoc'; -import { +import ts, { parser as typescriptEslintParser, } from 'typescript-eslint'; @@ -133,8 +133,10 @@ export default [ }, processor: 'examples/examples' }, + // Apply your TypeScript config + ...ts.configs.recommended, { - // Target the blocks within TypeScript + // Target the @example blocks within TypeScript files: [ // `**/*.ts` could also work if you want to share this config // with other non-@example TypeScript @@ -148,8 +150,13 @@ export default [ rules: { // Add the rules you want to apply to @example here 'no-extra-semi': 'error', + // disable problematic rules here, e.g., // ...jsdoc.configs.examples[1].rules + + // Due to https://github.com/gajus/eslint-plugin-jsdoc/issues/1377 , + // `typescript-eslint` type-checked rules must currently be disbaled + ...ts.configs.disableTypeChecked.rules } } ]; diff --git a/docs/rules/check-examples.md b/docs/rules/check-examples.md index 37b96d900..db16a19be 100644 --- a/docs/rules/check-examples.md +++ b/docs/rules/check-examples.md @@ -173,7 +173,7 @@ by decreasing precedence: use extra lines within examples just for easier illustration purposes. * `no-undef` - Many variables in examples will be `undefined`. -* `no-unused-vars` - It is common to define variables for clarity without +* `no-unused-vars` (and `@typescript-eslint/no-unused-vars`) - It is common to define variables for clarity without always using them within examples. * `padded-blocks` (and `@stylistic/padded-blocks`) - It can generally look nicer to pad a little even if one's code follows more stringency as far diff --git a/src/index-cjs.js b/src/index-cjs.js index 387809933..fa253093f 100644 --- a/src/index-cjs.js +++ b/src/index-cjs.js @@ -563,6 +563,8 @@ index.configs.examples = /** @type {import('eslint').Linter.Config[]} */ ([ // Can generally look nicer to pad a little even if code imposes more stringency '@stylistic/padded-blocks': 0, + '@typescript-eslint/no-unused-vars': 0, + // "always" newline rule at end unlikely in sample code 'eol-last': 0, diff --git a/src/index.js b/src/index.js index aa693a563..796968c7f 100644 --- a/src/index.js +++ b/src/index.js @@ -569,6 +569,8 @@ index.configs.examples = /** @type {import('eslint').Linter.Config[]} */ ([ // Can generally look nicer to pad a little even if code imposes more stringency '@stylistic/padded-blocks': 0, + '@typescript-eslint/no-unused-vars': 0, + // "always" newline rule at end unlikely in sample code 'eol-last': 0, diff --git a/src/rules/checkExamples.js b/src/rules/checkExamples.js index 54d980180..1d0c73352 100644 --- a/src/rules/checkExamples.js +++ b/src/rules/checkExamples.js @@ -47,6 +47,8 @@ const defaultMdRules = { // Can generally look nicer to pad a little even if code imposes more stringency '@stylistic/padded-blocks': 0, + '@typescript-eslint/no-unused-vars': 0, + // "always" newline rule at end unlikely in sample code 'eol-last': 0, From 03a8a69abc07d4b6739b587cf582b4cfcab8daa2 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sun, 14 Sep 2025 15:30:47 +0800 Subject: [PATCH 091/189] fix: CJS export regression; fixes #1478 (#1508) --- src/buildForbidRuleDefinition.js | 86 ++++++++++++++++++++++++++++++ src/index-cjs.js | 89 ++------------------------------ src/index-esm.js | 5 +- src/index.js | 89 ++------------------------------ test/index.js | 4 +- 5 files changed, 98 insertions(+), 175 deletions(-) create mode 100644 src/buildForbidRuleDefinition.js diff --git a/src/buildForbidRuleDefinition.js b/src/buildForbidRuleDefinition.js new file mode 100644 index 000000000..652042e94 --- /dev/null +++ b/src/buildForbidRuleDefinition.js @@ -0,0 +1,86 @@ +import iterateJsdoc from './iterateJsdoc.js'; + +/** + * @param {{ + * contexts: (string|{ + * comment: string, + * context: string, + * message: string + * })[], + * description?: string, + * contextName?: string + * url?: string, + * }} cfg + * @returns {import('@eslint/core').RuleDefinition< + * import('@eslint/core').RuleDefinitionTypeOptions + * >} + */ +export const buildForbidRuleDefinition = ({ + contextName, + contexts, + description, + url, +}) => { + return iterateJsdoc(({ + // context, + info: { + comment, + }, + report, + utils, + }) => { + const { + contextStr, + foundContext, + } = utils.findContext(contexts, comment); + + // We are not on the *particular* matching context/comment, so don't assume + // we need reporting + if (!foundContext) { + return; + } + + const message = /** @type {import('./iterateJsdoc.js').ContextObject} */ ( + foundContext + )?.message ?? + 'Syntax is restricted: {{context}}' + + (comment ? ' with {{comment}}' : ''); + + report(message, null, null, comment ? { + comment, + context: contextStr, + } : { + context: contextStr, + }); + }, { + contextSelected: true, + meta: { + docs: { + description: description ?? contextName ?? 'Reports when certain comment structures are present.', + url: url ?? 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/advanced.md#user-content-advanced-creating-your-own-rules', + }, + fixable: 'code', + schema: [], + type: 'suggestion', + }, + modifyContext: (context) => { + // Reproduce context object with our own `contexts` + const propertyDescriptors = Object.getOwnPropertyDescriptors(context); + return Object.create( + Object.getPrototypeOf(context), + { + ...propertyDescriptors, + options: { + ...propertyDescriptors.options, + value: [ + { + contexts, + }, + ], + }, + }, + ); + }, + nonGlobalSettings: true, + }); +}; diff --git a/src/index-cjs.js b/src/index-cjs.js index fa253093f..c3a62e188 100644 --- a/src/index-cjs.js +++ b/src/index-cjs.js @@ -1,7 +1,9 @@ +import { + buildForbidRuleDefinition, +} from './buildForbidRuleDefinition.js'; import { getJsdocProcessorPlugin, } from './getJsdocProcessorPlugin.js'; -import iterateJsdoc from './iterateJsdoc.js'; import checkAccess from './rules/checkAccess.js'; import checkAlignment from './rules/checkAlignment.js'; import checkExamples from './rules/checkExamples.js'; @@ -61,91 +63,6 @@ import textEscaping from './rules/textEscaping.js'; import typeFormatting from './rules/typeFormatting.js'; import validTypes from './rules/validTypes.js'; -/** - * @param {{ - * contexts: (string|{ - * comment: string, - * context: string, - * message: string - * })[], - * description?: string, - * contextName?: string - * url?: string, - * }} cfg - * @returns {import('@eslint/core').RuleDefinition< - * import('@eslint/core').RuleDefinitionTypeOptions - * >} - */ -export const buildForbidRuleDefinition = ({ - contextName, - contexts, - description, - url, -}) => { - return iterateJsdoc(({ - // context, - info: { - comment, - }, - report, - utils, - }) => { - const { - contextStr, - foundContext, - } = utils.findContext(contexts, comment); - - // We are not on the *particular* matching context/comment, so don't assume - // we need reporting - if (!foundContext) { - return; - } - - const message = /** @type {import('./iterateJsdoc.js').ContextObject} */ ( - foundContext - )?.message ?? - 'Syntax is restricted: {{context}}' + - (comment ? ' with {{comment}}' : ''); - - report(message, null, null, comment ? { - comment, - context: contextStr, - } : { - context: contextStr, - }); - }, { - contextSelected: true, - meta: { - docs: { - description: description ?? contextName ?? 'Reports when certain comment structures are present.', - url: url ?? 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/advanced.md#user-content-advanced-creating-your-own-rules', - }, - fixable: 'code', - schema: [], - type: 'suggestion', - }, - modifyContext: (context) => { - // Reproduce context object with our own `contexts` - const propertyDescriptors = Object.getOwnPropertyDescriptors(context); - return Object.create( - Object.getPrototypeOf(context), - { - ...propertyDescriptors, - options: { - ...propertyDescriptors.options, - value: [ - { - contexts, - }, - ], - }, - }, - ); - }, - nonGlobalSettings: true, - }); -}; - /* eslint-disable jsdoc/valid-types -- Bug */ /** * @typedef {"recommended" | "stylistic" | "contents" | "logical" | "requirements"} ConfigGroups diff --git a/src/index-esm.js b/src/index-esm.js index 081453a2c..9ed80fb38 100644 --- a/src/index-esm.js +++ b/src/index-esm.js @@ -4,9 +4,10 @@ import { } from 'object-deep-merge'; // BEGIN REPLACE -import index, { +import index from './index-cjs.js'; +import { buildForbidRuleDefinition, -} from './index-cjs.js'; +} from './buildForbidRuleDefinition.js'; // eslint-disable-next-line unicorn/prefer-export-from --- Reusing `index` export default index; diff --git a/src/index.js b/src/index.js index 796968c7f..1b96ee9f6 100644 --- a/src/index.js +++ b/src/index.js @@ -4,10 +4,12 @@ import { merge, } from 'object-deep-merge'; +import { + buildForbidRuleDefinition, +} from './buildForbidRuleDefinition.js'; import { getJsdocProcessorPlugin, } from './getJsdocProcessorPlugin.js'; -import iterateJsdoc from './iterateJsdoc.js'; import checkAccess from './rules/checkAccess.js'; import checkAlignment from './rules/checkAlignment.js'; import checkExamples from './rules/checkExamples.js'; @@ -67,91 +69,6 @@ import textEscaping from './rules/textEscaping.js'; import typeFormatting from './rules/typeFormatting.js'; import validTypes from './rules/validTypes.js'; -/** - * @param {{ - * contexts: (string|{ - * comment: string, - * context: string, - * message: string - * })[], - * description?: string, - * contextName?: string - * url?: string, - * }} cfg - * @returns {import('@eslint/core').RuleDefinition< - * import('@eslint/core').RuleDefinitionTypeOptions - * >} - */ -export const buildForbidRuleDefinition = ({ - contextName, - contexts, - description, - url, -}) => { - return iterateJsdoc(({ - // context, - info: { - comment, - }, - report, - utils, - }) => { - const { - contextStr, - foundContext, - } = utils.findContext(contexts, comment); - - // We are not on the *particular* matching context/comment, so don't assume - // we need reporting - if (!foundContext) { - return; - } - - const message = /** @type {import('./iterateJsdoc.js').ContextObject} */ ( - foundContext - )?.message ?? - 'Syntax is restricted: {{context}}' + - (comment ? ' with {{comment}}' : ''); - - report(message, null, null, comment ? { - comment, - context: contextStr, - } : { - context: contextStr, - }); - }, { - contextSelected: true, - meta: { - docs: { - description: description ?? contextName ?? 'Reports when certain comment structures are present.', - url: url ?? 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/advanced.md#user-content-advanced-creating-your-own-rules', - }, - fixable: 'code', - schema: [], - type: 'suggestion', - }, - modifyContext: (context) => { - // Reproduce context object with our own `contexts` - const propertyDescriptors = Object.getOwnPropertyDescriptors(context); - return Object.create( - Object.getPrototypeOf(context), - { - ...propertyDescriptors, - options: { - ...propertyDescriptors.options, - value: [ - { - contexts, - }, - ], - }, - }, - ); - }, - nonGlobalSettings: true, - }); -}; - /* eslint-disable jsdoc/valid-types -- Bug */ /** * @typedef {"recommended" | "stylistic" | "contents" | "logical" | "requirements"} ConfigGroups diff --git a/test/index.js b/test/index.js index 2d71d0b43..d701b6ca0 100644 --- a/test/index.js +++ b/test/index.js @@ -1,5 +1,7 @@ -import jsdocDefault, { +import { buildForbidRuleDefinition, +} from '../src/buildForbidRuleDefinition.js'; +import jsdocDefault, { jsdoc, } from '../src/index.js'; import { From 6692d0e2d90cad836b110a6e50b9ebd9b56e22df Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sun, 14 Sep 2025 20:48:02 +0800 Subject: [PATCH 092/189] fix(types): plugin property should be an intersection; fixes #1509 (#1510) Also: - chore: update debug and devDeps. --- package.json | 6 +- pnpm-lock.yaml | 184 +++++++++++++++++++++-------------------------- src/index-cjs.js | 2 +- src/index.js | 2 +- 4 files changed, 88 insertions(+), 106 deletions(-) diff --git a/package.json b/package.json index 5aef76ae3..6e6623d58 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "@es-joy/jsdoccomment": "~0.58.0", "are-docs-informative": "^0.0.2", "comment-parser": "1.4.1", - "debug": "^4.4.1", + "debug": "^4.4.3", "escape-string-regexp": "^4.0.0", "espree": "^10.4.0", "esquery": "^1.6.0", @@ -31,7 +31,7 @@ "@eslint/core": "^0.15.2", "@hkdobrev/run-if-changed": "^0.6.3", "@semantic-release/commit-analyzer": "^13.0.1", - "@semantic-release/github": "^11.0.5", + "@semantic-release/github": "^11.0.6", "@semantic-release/npm": "^12.0.2", "@types/chai": "^5.2.2", "@types/debug": "^4.1.12", @@ -40,7 +40,7 @@ "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@types/mocha": "^10.0.10", - "@types/node": "^24.3.1", + "@types/node": "^24.4.0", "@types/semver": "^7.7.1", "@types/spdx-expression-parse": "^3.0.5", "@typescript-eslint/types": "^8.43.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b9a25a106..7dde368c2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,8 +18,8 @@ importers: specifier: 1.4.1 version: 1.4.1 debug: - specifier: ^4.4.1 - version: 4.4.1(supports-color@8.1.1) + specifier: ^4.4.3 + version: 4.4.3(supports-color@8.1.1) escape-string-regexp: specifier: ^4.0.0 version: 4.0.0 @@ -79,8 +79,8 @@ importers: specifier: ^13.0.1 version: 13.0.1(semantic-release@24.2.8(typescript@5.9.2)) '@semantic-release/github': - specifier: ^11.0.5 - version: 11.0.5(semantic-release@24.2.8(typescript@5.9.2)) + specifier: ^11.0.6 + version: 11.0.6(semantic-release@24.2.8(typescript@5.9.2)) '@semantic-release/npm': specifier: ^12.0.2 version: 12.0.2(semantic-release@24.2.8(typescript@5.9.2)) @@ -106,8 +106,8 @@ importers: specifier: ^10.0.10 version: 10.0.10 '@types/node': - specifier: ^24.3.1 - version: 24.3.1 + specifier: ^24.4.0 + version: 24.4.0 '@types/semver': specifier: ^7.7.1 version: 7.7.1 @@ -143,7 +143,7 @@ importers: version: 9.35.0(jiti@2.5.1) eslint-config-canonical: specifier: ~45.0.0 - version: 45.0.0(@types/eslint@9.6.1)(@types/node@24.3.1)(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + version: 45.0.0(@types/eslint@9.6.1)(@types/node@24.4.0)(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) gitdown: specifier: ^4.1.1 version: 4.1.1(re2@1.20.9) @@ -1165,8 +1165,8 @@ packages: resolution: {integrity: sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==} engines: {node: '>=18'} - '@semantic-release/github@11.0.5': - resolution: {integrity: sha512-wJamzHteXwBdopvkTD6BJjPz1UHLm20twlVCSMA9zpd3B5KrOQX137jfTbNJT6ZVz3pXtg0S1DroQl4wifJ4WQ==} + '@semantic-release/github@11.0.6': + resolution: {integrity: sha512-ctDzdSMrT3H+pwKBPdyCPty6Y47X8dSrjd3aPZ5KKIKKWTwZBE9De8GtsH3TyAlw3Uyo2stegMx6rJMXKpJwJA==} engines: {node: '>=20.8.1'} peerDependencies: semantic-release: '>=24.1.0' @@ -1187,10 +1187,6 @@ packages: resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} - '@sindresorhus/merge-streams@2.3.0': - resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} - engines: {node: '>=18'} - '@sindresorhus/merge-streams@4.0.0': resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} engines: {node: '>=18'} @@ -1246,8 +1242,8 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@24.3.1': - resolution: {integrity: sha512-3vXmQDXy+woz+gnrTvuvNrPzekOi+Ds0ReMxw0LzBiK3a+1k0kQn9f2NWk+lgD4rJehFUmYy2gMhJ2ZI+7YP9g==} + '@types/node@24.4.0': + resolution: {integrity: sha512-gUuVEAK4/u6F9wRLznPUU4WGUacSEBDPoC2TrBkw3GAnOLHBL45QdfHOXp1kJ4ypBGLxTOB+t7NJLpKoC3gznQ==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -2104,6 +2100,15 @@ packages: supports-color: optional: true + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + decamelize@1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} @@ -2941,10 +2946,6 @@ packages: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} - globby@14.1.0: - resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} - engines: {node: '>=18'} - globrex@0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} @@ -4171,10 +4172,6 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - path-type@6.0.0: - resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} - engines: {node: '>=18'} - performance-now@2.1.0: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} @@ -4567,10 +4564,6 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - slash@5.1.0: - resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} - engines: {node: '>=14.16'} - slice-ansi@5.0.0: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} @@ -4930,8 +4923,8 @@ packages: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} - undici-types@7.10.0: - resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==} + undici-types@7.11.0: + resolution: {integrity: sha512-kt1ZriHTi7MU+Z/r9DOdAI3ONdaR3M3csEaRc6ewa4f4dTvX4cQCbJ4NkEn0ohE4hHtq85+PhPSTY+pO/1PwgA==} unicode-canonical-property-names-ecmascript@2.0.1: resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} @@ -5261,7 +5254,7 @@ snapshots: '@babel/types': 7.28.4 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -5321,7 +5314,7 @@ snapshots: '@babel/core': 7.28.4 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) lodash.debounce: 4.0.8 resolve: 1.22.10 transitivePeerDependencies: @@ -5911,7 +5904,7 @@ snapshots: '@babel/parser': 7.28.3 '@babel/template': 7.27.2 '@babel/types': 7.28.2 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -5923,7 +5916,7 @@ snapshots: '@babel/parser': 7.28.4 '@babel/template': 7.27.2 '@babel/types': 7.28.4 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -6035,7 +6028,7 @@ snapshots: '@eslint/config-array@0.21.0': dependencies: '@eslint/object-schema': 2.1.6 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -6049,7 +6042,7 @@ snapshots: '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) espree: 10.4.0 globals: 14.0.0 ignore: 5.3.2 @@ -6071,16 +6064,16 @@ snapshots: '@fastify/busboy@3.1.1': {} - '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.3.1)(eslint@9.35.0(jiti@2.5.1))(graphql@16.11.0)(typescript@5.9.2)': + '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.4.0)(eslint@9.35.0(jiti@2.5.1))(graphql@16.11.0)(typescript@5.9.2)': dependencies: '@graphql-tools/code-file-loader': 8.1.22(graphql@16.11.0) '@graphql-tools/graphql-tag-pluck': 8.3.21(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) eslint: 9.35.0(jiti@2.5.1) fast-glob: 3.3.3 graphql: 16.11.0 - graphql-config: 5.1.5(@types/node@24.3.1)(graphql@16.11.0)(typescript@5.9.2) + graphql-config: 5.1.5(@types/node@24.4.0)(graphql@16.11.0)(typescript@5.9.2) graphql-depth-limit: 1.1.0(graphql@16.11.0) lodash.lowercase: 4.3.0 transitivePeerDependencies: @@ -6157,7 +6150,7 @@ snapshots: - uWebSockets.js - utf-8-validate - '@graphql-tools/executor-http@1.3.3(@types/node@24.3.1)(graphql@16.11.0)': + '@graphql-tools/executor-http@1.3.3(@types/node@24.4.0)(graphql@16.11.0)': dependencies: '@graphql-hive/signal': 1.0.0 '@graphql-tools/executor-common': 0.0.4(graphql@16.11.0) @@ -6167,7 +6160,7 @@ snapshots: '@whatwg-node/fetch': 0.10.10 '@whatwg-node/promise-helpers': 1.3.2 graphql: 16.11.0 - meros: 1.3.1(@types/node@24.3.1) + meros: 1.3.1(@types/node@24.4.0) tslib: 2.8.1 transitivePeerDependencies: - '@types/node' @@ -6257,10 +6250,10 @@ snapshots: graphql: 16.11.0 tslib: 2.8.1 - '@graphql-tools/url-loader@8.0.33(@types/node@24.3.1)(graphql@16.11.0)': + '@graphql-tools/url-loader@8.0.33(@types/node@24.4.0)(graphql@16.11.0)': dependencies: '@graphql-tools/executor-graphql-ws': 2.0.7(graphql@16.11.0) - '@graphql-tools/executor-http': 1.3.3(@types/node@24.3.1)(graphql@16.11.0) + '@graphql-tools/executor-http': 1.3.3(@types/node@24.4.0)(graphql@16.11.0) '@graphql-tools/executor-legacy-ws': 1.1.19(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) '@graphql-tools/wrap': 10.1.4(graphql@16.11.0) @@ -6509,7 +6502,7 @@ snapshots: conventional-changelog-writer: 8.2.0 conventional-commits-filter: 5.0.0 conventional-commits-parser: 6.2.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) import-from-esm: 2.0.0 lodash-es: 4.17.21 micromatch: 4.0.8 @@ -6519,7 +6512,7 @@ snapshots: '@semantic-release/error@4.0.0': {} - '@semantic-release/github@11.0.5(semantic-release@24.2.8(typescript@5.9.2))': + '@semantic-release/github@11.0.6(semantic-release@24.2.8(typescript@5.9.2))': dependencies: '@octokit/core': 7.0.3 '@octokit/plugin-paginate-rest': 13.1.1(@octokit/core@7.0.3) @@ -6527,9 +6520,8 @@ snapshots: '@octokit/plugin-throttling': 11.0.1(@octokit/core@7.0.3) '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) dir-glob: 3.0.1 - globby: 14.1.0 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 issue-parser: 7.0.1 @@ -6537,6 +6529,7 @@ snapshots: mime: 4.0.7 p-filter: 4.1.0 semantic-release: 24.2.8(typescript@5.9.2) + tinyglobby: 0.2.14 url-join: 5.0.0 transitivePeerDependencies: - supports-color @@ -6564,7 +6557,7 @@ snapshots: conventional-changelog-writer: 8.2.0 conventional-commits-filter: 5.0.0 conventional-commits-parser: 6.2.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) get-stream: 7.0.1 import-from-esm: 2.0.0 into-stream: 7.0.0 @@ -6576,8 +6569,6 @@ snapshots: '@sindresorhus/is@4.6.0': {} - '@sindresorhus/merge-streams@2.3.0': {} - '@sindresorhus/merge-streams@4.0.0': {} '@stylistic/eslint-plugin@4.4.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': @@ -6595,7 +6586,7 @@ snapshots: '@theguild/federation-composition@0.19.1(graphql@16.11.0)': dependencies: constant-case: 3.0.4 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.1 graphql: 16.11.0 json5: 2.2.3 lodash.sortby: 4.7.0 @@ -6644,9 +6635,9 @@ snapshots: '@types/ms@2.1.0': {} - '@types/node@24.3.1': + '@types/node@24.4.0': dependencies: - undici-types: 7.10.0 + undici-types: 7.11.0 '@types/normalize-package-data@2.4.4': {} @@ -6656,7 +6647,7 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 24.3.1 + '@types/node': 24.4.0 '@typescript-eslint/eslint-plugin@8.41.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: @@ -6698,7 +6689,7 @@ snapshots: '@typescript-eslint/types': 8.41.0 '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.9.2) '@typescript-eslint/visitor-keys': 8.41.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) eslint: 9.35.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: @@ -6710,7 +6701,7 @@ snapshots: '@typescript-eslint/types': 8.42.0 '@typescript-eslint/typescript-estree': 8.42.0(typescript@5.9.2) '@typescript-eslint/visitor-keys': 8.42.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) eslint: 9.35.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: @@ -6722,7 +6713,7 @@ snapshots: '@typescript-eslint/types': 8.43.0 '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2) '@typescript-eslint/visitor-keys': 8.43.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) eslint: 9.35.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: @@ -6732,7 +6723,7 @@ snapshots: dependencies: '@typescript-eslint/tsconfig-utils': 8.41.0(typescript@5.9.2) '@typescript-eslint/types': 8.43.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -6741,7 +6732,7 @@ snapshots: dependencies: '@typescript-eslint/tsconfig-utils': 8.42.0(typescript@5.9.2) '@typescript-eslint/types': 8.43.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -6750,7 +6741,7 @@ snapshots: dependencies: '@typescript-eslint/tsconfig-utils': 8.43.0(typescript@5.9.2) '@typescript-eslint/types': 8.43.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -6787,7 +6778,7 @@ snapshots: '@typescript-eslint/types': 8.41.0 '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.9.2) '@typescript-eslint/utils': 8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) eslint: 9.35.0(jiti@2.5.1) ts-api-utils: 2.1.0(typescript@5.9.2) typescript: 5.9.2 @@ -6799,7 +6790,7 @@ snapshots: '@typescript-eslint/types': 8.42.0 '@typescript-eslint/typescript-estree': 8.42.0(typescript@5.9.2) '@typescript-eslint/utils': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) eslint: 9.35.0(jiti@2.5.1) ts-api-utils: 2.1.0(typescript@5.9.2) typescript: 5.9.2 @@ -6811,7 +6802,7 @@ snapshots: '@typescript-eslint/types': 8.43.0 '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2) '@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) eslint: 9.35.0(jiti@2.5.1) ts-api-utils: 2.1.0(typescript@5.9.2) typescript: 5.9.2 @@ -6830,7 +6821,7 @@ snapshots: '@typescript-eslint/tsconfig-utils': 8.41.0(typescript@5.9.2) '@typescript-eslint/types': 8.41.0 '@typescript-eslint/visitor-keys': 8.41.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 @@ -6846,7 +6837,7 @@ snapshots: '@typescript-eslint/tsconfig-utils': 8.42.0(typescript@5.9.2) '@typescript-eslint/types': 8.42.0 '@typescript-eslint/visitor-keys': 8.42.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 @@ -6862,7 +6853,7 @@ snapshots: '@typescript-eslint/tsconfig-utils': 8.43.0(typescript@5.9.2) '@typescript-eslint/types': 8.43.0 '@typescript-eslint/visitor-keys': 8.43.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 @@ -7581,7 +7572,11 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.4.1(supports-color@8.1.1): + debug@4.4.1: + dependencies: + ms: 2.1.3 + + debug@4.4.3(supports-color@8.1.1): dependencies: ms: 2.1.3 optionalDependencies: @@ -7856,9 +7851,9 @@ snapshots: eslint: 9.35.0(jiti@2.5.1) semver: 7.7.2 - eslint-config-canonical@45.0.0(@types/eslint@9.6.1)(@types/node@24.3.1)(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): + eslint-config-canonical@45.0.0(@types/eslint@9.6.1)(@types/node@24.4.0)(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.3.1)(eslint@9.35.0(jiti@2.5.1))(graphql@16.11.0)(typescript@5.9.2) + '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.4.0)(eslint@9.35.0(jiti@2.5.1))(graphql@16.11.0)(typescript@5.9.2) '@next/eslint-plugin-next': 15.5.2 '@stylistic/eslint-plugin': 4.4.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/eslint-plugin': 8.41.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) @@ -7940,7 +7935,7 @@ snapshots: eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) eslint: 9.35.0(jiti@2.5.1) get-tsconfig: 4.10.1 is-bun-module: 2.0.0 @@ -7955,7 +7950,7 @@ snapshots: eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)): dependencies: - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) eslint: 9.35.0(jiti@2.5.1) eslint-import-context: 0.1.9(unrs-resolver@1.11.1) get-tsconfig: 4.10.1 @@ -8002,7 +7997,7 @@ snapshots: dependencies: '@typescript-eslint/utils': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) array-includes: 3.1.9 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) doctrine: 3.0.0 eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)) eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)) @@ -8064,7 +8059,7 @@ snapshots: dependencies: '@typescript-eslint/types': 8.43.0 comment-parser: 1.4.1 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) eslint: 9.35.0(jiti@2.5.1) eslint-import-context: 0.1.9(unrs-resolver@1.11.1) is-glob: 4.0.3 @@ -8093,7 +8088,7 @@ snapshots: '@es-joy/jsdoccomment': 0.50.2 are-docs-informative: 0.0.2 comment-parser: 1.4.1 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) escape-string-regexp: 4.0.0 eslint: 9.35.0(jiti@2.5.1) espree: 10.4.0 @@ -8254,7 +8249,7 @@ snapshots: eslint-plugin-yml@1.18.0(eslint@9.35.0(jiti@2.5.1)): dependencies: - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) escape-string-regexp: 4.0.0 eslint: 9.35.0(jiti@2.5.1) eslint-compat-utils: 0.6.5(eslint@9.35.0(jiti@2.5.1)) @@ -8306,7 +8301,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) escape-string-regexp: 4.0.0 eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 @@ -8705,15 +8700,6 @@ snapshots: merge2: 1.4.1 slash: 3.0.0 - globby@14.1.0: - dependencies: - '@sindresorhus/merge-streams': 2.3.0 - fast-glob: 3.3.3 - ignore: 7.0.5 - path-type: 6.0.0 - slash: 5.1.0 - unicorn-magic: 0.3.0 - globrex@0.1.2: {} gopd@1.2.0: {} @@ -8724,13 +8710,13 @@ snapshots: graphemer@1.4.0: {} - graphql-config@5.1.5(@types/node@24.3.1)(graphql@16.11.0)(typescript@5.9.2): + graphql-config@5.1.5(@types/node@24.4.0)(graphql@16.11.0)(typescript@5.9.2): dependencies: '@graphql-tools/graphql-file-loader': 8.0.22(graphql@16.11.0) '@graphql-tools/json-file-loader': 8.0.20(graphql@16.11.0) '@graphql-tools/load': 8.1.2(graphql@16.11.0) '@graphql-tools/merge': 9.1.1(graphql@16.11.0) - '@graphql-tools/url-loader': 8.0.33(@types/node@24.3.1)(graphql@16.11.0) + '@graphql-tools/url-loader': 8.0.33(@types/node@24.4.0)(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) cosmiconfig: 8.3.6(typescript@5.9.2) graphql: 16.11.0 @@ -8832,7 +8818,7 @@ snapshots: http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.4 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -8845,7 +8831,7 @@ snapshots: https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.4 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -8871,7 +8857,7 @@ snapshots: import-from-esm@2.0.0: dependencies: - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) import-meta-resolve: 4.1.0 transitivePeerDependencies: - supports-color @@ -9309,7 +9295,7 @@ snapshots: dependencies: chalk: 5.6.0 commander: 14.0.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) lilconfig: 3.1.3 listr2: 9.0.3 micromatch: 4.0.8 @@ -9483,9 +9469,9 @@ snapshots: merge2@1.4.1: {} - meros@1.3.1(@types/node@24.3.1): + meros@1.3.1(@types/node@24.4.0): optionalDependencies: - '@types/node': 24.3.1 + '@types/node': 24.4.0 micro-spelling-correcter@1.1.1: {} @@ -9578,7 +9564,7 @@ snapshots: dependencies: browser-stdout: 1.3.1 chokidar: 4.0.3 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) diff: 7.0.0 escape-string-regexp: 4.0.0 find-up: 5.0.0 @@ -9901,8 +9887,6 @@ snapshots: path-type@4.0.0: {} - path-type@6.0.0: {} - performance-now@2.1.0: {} picocolors@1.1.1: {} @@ -10227,12 +10211,12 @@ snapshots: dependencies: '@semantic-release/commit-analyzer': 13.0.1(semantic-release@24.2.8(typescript@5.9.2)) '@semantic-release/error': 4.0.0 - '@semantic-release/github': 11.0.5(semantic-release@24.2.8(typescript@5.9.2)) + '@semantic-release/github': 11.0.6(semantic-release@24.2.8(typescript@5.9.2)) '@semantic-release/npm': 12.0.2(semantic-release@24.2.8(typescript@5.9.2)) '@semantic-release/release-notes-generator': 14.0.3(semantic-release@24.2.8(typescript@5.9.2)) aggregate-error: 5.0.0 cosmiconfig: 9.0.0(typescript@5.9.2) - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) env-ci: 11.1.1 execa: 9.6.0 figures: 6.1.0 @@ -10352,8 +10336,6 @@ snapshots: slash@3.0.0: {} - slash@5.1.0: {} - slice-ansi@5.0.0: dependencies: ansi-styles: 6.2.1 @@ -10370,7 +10352,7 @@ snapshots: socks-proxy-agent@8.0.5: dependencies: agent-base: 7.1.4 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) socks: 2.8.7 transitivePeerDependencies: - supports-color @@ -10764,7 +10746,7 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 - undici-types@7.10.0: {} + undici-types@7.11.0: {} unicode-canonical-property-names-ecmascript@2.0.1: {} diff --git a/src/index-cjs.js b/src/index-cjs.js index c3a62e188..c6d5ec6eb 100644 --- a/src/index-cjs.js +++ b/src/index-cjs.js @@ -70,7 +70,7 @@ import validTypes from './rules/validTypes.js'; * @typedef {"" | "-error"} ErrorLevelVariants * @type {import('eslint').ESLint.Plugin & { * configs: Record<`flat/${ConfigGroups}${ConfigVariants}${ErrorLevelVariants}`, - * import('eslint').Linter.Config>|Record<"examples"|"default-expressions"|"examples-and-default-expressions", import('eslint').Linter.Config[]> + * import('eslint').Linter.Config> & Record<"examples"|"default-expressions"|"examples-and-default-expressions", import('eslint').Linter.Config[]> * }} */ const index = {}; diff --git a/src/index.js b/src/index.js index 1b96ee9f6..dec8d6e95 100644 --- a/src/index.js +++ b/src/index.js @@ -76,7 +76,7 @@ import validTypes from './rules/validTypes.js'; * @typedef {"" | "-error"} ErrorLevelVariants * @type {import('eslint').ESLint.Plugin & { * configs: Record<`flat/${ConfigGroups}${ConfigVariants}${ErrorLevelVariants}`, - * import('eslint').Linter.Config>|Record<"examples"|"default-expressions"|"examples-and-default-expressions", import('eslint').Linter.Config[]> + * import('eslint').Linter.Config> & Record<"examples"|"default-expressions"|"examples-and-default-expressions", import('eslint').Linter.Config[]> * }} */ const index = {}; From 261f4972b2b989f592668541c43786cd5ab8c1fc Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sun, 14 Sep 2025 21:42:48 +0800 Subject: [PATCH 093/189] refactor: avoid suppressing type errors --- src/bin/generateRule.js | 1 - src/getJsdocProcessorPlugin.js | 3 +-- src/rules/importsAsDependencies.js | 6 ++---- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/bin/generateRule.js b/src/bin/generateRule.js index 77a69311c..89a63b868 100644 --- a/src/bin/generateRule.js +++ b/src/bin/generateRule.js @@ -40,7 +40,6 @@ const recommended = options.includes('--recommended'); } const ruleNamesPath = './test/rules/ruleNames.json'; - // @ts-expect-error Older types? const ruleNames = JSON.parse(await fs.readFile( ruleNamesPath, )); diff --git a/src/getJsdocProcessorPlugin.js b/src/getJsdocProcessorPlugin.js index 1324d6c2b..3ae6f959d 100644 --- a/src/getJsdocProcessorPlugin.js +++ b/src/getJsdocProcessorPlugin.js @@ -30,8 +30,7 @@ import { const { version, } = JSON.parse( - // @ts-expect-error `Buffer` is ok for `JSON.parse` - readFileSync(join(import.meta.dirname, '../package.json')), + readFileSync(join(import.meta.dirname, '../package.json'), 'utf8'), ); // const zeroBasedLineIndexAdjust = -1; diff --git a/src/rules/importsAsDependencies.js b/src/rules/importsAsDependencies.js index 3b39b5bb5..2d731b02a 100644 --- a/src/rules/importsAsDependencies.js +++ b/src/rules/importsAsDependencies.js @@ -22,8 +22,7 @@ let deps; const setDeps = function () { try { const pkg = JSON.parse( - // @ts-expect-error It's ok - readFileSync(join(process.cwd(), './package.json')), + readFileSync(join(process.cwd(), './package.json'), 'utf8'), ); deps = new Set([ ...(pkg.dependencies ? @@ -98,8 +97,7 @@ export default iterateJsdoc(({ let pkg; try { pkg = JSON.parse( - // @ts-expect-error It's ok - readFileSync(join(process.cwd(), 'node_modules', mod, './package.json')), + readFileSync(join(process.cwd(), 'node_modules', mod, './package.json'), 'utf8'), ); } catch { // Ignore From d53884abb719089d4f93eaeda1be4fe127cf82a2 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 16 Sep 2025 03:28:31 +0800 Subject: [PATCH 094/189] fix(`type-formatting`): do not strip quotes for `objectFieldQuote` when not an ID; always allow unescaped digits --- .README/rules/type-formatting.md | 3 ++- docs/rules/type-formatting.md | 17 +++++++++++++- src/rules/typeFormatting.js | 11 +++++++-- test/rules/assertions/typeFormatting.js | 31 +++++++++++++++++++++++++ 4 files changed, 58 insertions(+), 4 deletions(-) diff --git a/.README/rules/type-formatting.md b/.README/rules/type-formatting.md index b01c5cb15..c83e06e45 100644 --- a/.README/rules/type-formatting.md +++ b/.README/rules/type-formatting.md @@ -26,7 +26,8 @@ Boolean value of whether to use a dot before the angled brackets of a generic (e Whether and how object field properties should be quoted (e.g., `{"a": string}`). Set to `single`, `double`, or `null`. Defaults to `null` (no quotes unless -required due to whitespace within the field). +required due to special characters within the field). Digits will be kept as is, +regardless of setting (they can either represent a digit or a string digit). ### `propertyQuotes` diff --git a/docs/rules/type-formatting.md b/docs/rules/type-formatting.md index 9f737357d..21a0527e4 100644 --- a/docs/rules/type-formatting.md +++ b/docs/rules/type-formatting.md @@ -38,7 +38,8 @@ Boolean value of whether to use a dot before the angled brackets of a generic (e Whether and how object field properties should be quoted (e.g., `{"a": string}`). Set to `single`, `double`, or `null`. Defaults to `null` (no quotes unless -required due to whitespace within the field). +required due to special characters within the field). Digits will be kept as is, +regardless of setting (they can either represent a digit or a string digit). @@ -319,6 +320,20 @@ The following patterns are not considered problems: * @param {{"a bc": string}} quotedKeyParam */ +/** + * @param {{55: string}} quotedKeyParam + */ + +/** + * @param {{"a-b-c": string}} quotedKeyParam + */ +// "jsdoc/type-formatting": ["error"|"warn", {"objectFieldQuote":null}] + +/** + * @param {{55: string}} quotedKeyParam + */ +// "jsdoc/type-formatting": ["error"|"warn", {"objectFieldQuote":"double"}] + /** * @param {ab.cd.ef} cfg */ diff --git a/src/rules/typeFormatting.js b/src/rules/typeFormatting.js index a2eeb032d..9ecf4563d 100644 --- a/src/rules/typeFormatting.js +++ b/src/rules/typeFormatting.js @@ -250,8 +250,15 @@ export default iterateJsdoc(({ case 'JsdocTypeObjectField': { const typeNode = /** @type {import('jsdoc-type-pratt-parser').ObjectFieldResult} */ (nde); if ((objectFieldQuote || - (typeof typeNode.key === 'string' && !(/\s/v).test(typeNode.key))) && - typeNode.meta.quote !== (objectFieldQuote ?? undefined) + (typeof typeNode.key === 'string' && + ( + (/^\p{ID_Start}\p{ID_Continue}*$/v).test(typeNode.key) || + (/^(\d+(\.\d*)?|\.\d+)([eE][\-+]?\d+)?$/v).test(typeNode.key) + ) + )) && + typeNode.meta.quote !== (objectFieldQuote ?? undefined) && + (typeof typeNode.key !== 'string' || + !(/^(\d+(\.\d*)?|\.\d+)([eE][\-+]?\d+)?$/v).test(typeNode.key)) ) { typeNode.meta.quote = objectFieldQuote ?? undefined; errorMessage = `Inconsistent object field quotes ${objectFieldQuote}`; diff --git a/test/rules/assertions/typeFormatting.js b/test/rules/assertions/typeFormatting.js index 32ef14339..c3e0cbdb7 100644 --- a/test/rules/assertions/typeFormatting.js +++ b/test/rules/assertions/typeFormatting.js @@ -714,6 +714,37 @@ export default { */ `, }, + { + code: ` + /** + * @param {{55: string}} quotedKeyParam + */ + `, + }, + { + code: ` + /** + * @param {{"a-b-c": string}} quotedKeyParam + */ + `, + options: [ + { + objectFieldQuote: null, + }, + ], + }, + { + code: ` + /** + * @param {{55: string}} quotedKeyParam + */ + `, + options: [ + { + objectFieldQuote: 'double', + }, + ], + }, { code: ` /** From dd0950ba66be3f1d7032e652a64f22983663d627 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 16 Sep 2025 04:13:19 +0800 Subject: [PATCH 095/189] fix(`type-formatting`): allow for $, _, and ZWNJ's without quoting (#1513) --- src/rules/typeFormatting.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/rules/typeFormatting.js b/src/rules/typeFormatting.js index 9ecf4563d..f17937f21 100644 --- a/src/rules/typeFormatting.js +++ b/src/rules/typeFormatting.js @@ -6,6 +6,8 @@ import { tryParse as tryParseType, } from '@es-joy/jsdoccomment'; +const digitRegex = (/^(\d+(\.\d*)?|\.\d+)([eE][\-+]?\d+)?$/v); + export default iterateJsdoc(({ context, indent, @@ -252,13 +254,13 @@ export default iterateJsdoc(({ if ((objectFieldQuote || (typeof typeNode.key === 'string' && ( - (/^\p{ID_Start}\p{ID_Continue}*$/v).test(typeNode.key) || - (/^(\d+(\.\d*)?|\.\d+)([eE][\-+]?\d+)?$/v).test(typeNode.key) + (/^[\p{ID_Start}$_][\p{ID_Continue}$\u200C\u200D]*$/v).test(typeNode.key) || + digitRegex.test(typeNode.key) ) )) && typeNode.meta.quote !== (objectFieldQuote ?? undefined) && (typeof typeNode.key !== 'string' || - !(/^(\d+(\.\d*)?|\.\d+)([eE][\-+]?\d+)?$/v).test(typeNode.key)) + !digitRegex.test(typeNode.key)) ) { typeNode.meta.quote = objectFieldQuote ?? undefined; errorMessage = `Inconsistent object field quotes ${objectFieldQuote}`; From 6b2013358d2c147faee355f1ae9d144bff25ff95 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 16 Sep 2025 06:15:51 +0800 Subject: [PATCH 096/189] feat(`type-formatting`): new `objectFieldSeparatorOptionalLinebreak` option (#1514) --- .README/rules/type-formatting.md | 9 ++- docs/rules/type-formatting.md | 39 ++++++++++- src/rules.d.ts | 1 + src/rules/typeFormatting.js | 19 ++++-- test/rules/assertions/typeFormatting.js | 87 +++++++++++++++++++++++++ 5 files changed, 149 insertions(+), 6 deletions(-) diff --git a/.README/rules/type-formatting.md b/.README/rules/type-formatting.md index c83e06e45..d38429bd6 100644 --- a/.README/rules/type-formatting.md +++ b/.README/rules/type-formatting.md @@ -48,6 +48,13 @@ each object property-value pair. Defaults to `"comma"`. +### `objectFieldSeparatorOptionalLinebreak` + +Whether `objectFieldSeparator` set to `"semicolon-and-linebreak"` or +`"comma-and-linebreak"` should be allowed to optionally drop the linebreak. + +Defaults to `true`. + ### `objectFieldIndent` A string indicating the whitespace to be added on each line preceding an @@ -82,7 +89,7 @@ Determines the spacing to add to unions (`|`). Defaults to a single space (`" "` |Tags|`param`, `property`, `returns`, `this`, `throws`, `type`, `typedef`, `yields`| |Recommended|false| |Settings|`mode`| -|Options|`arrayBrackets`, `enableFixer`, `genericDot`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `objectFieldSeparatorTrailingPunctuation`, `propertyQuotes`, `separatorForSingleObjectField`, `stringQuotes`, `typeBracketSpacing`, `unionSpacing`| +|Options|`arrayBrackets`, `enableFixer`, `genericDot`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `objectFieldSeparatorOptionalLinebreak`, `objectFieldSeparatorTrailingPunctuation`, `propertyQuotes`, `separatorForSingleObjectField`, `stringQuotes`, `typeBracketSpacing`, `unionSpacing`| ## Failing examples diff --git a/docs/rules/type-formatting.md b/docs/rules/type-formatting.md index 21a0527e4..223f093f0 100644 --- a/docs/rules/type-formatting.md +++ b/docs/rules/type-formatting.md @@ -66,6 +66,15 @@ each object property-value pair. Defaults to `"comma"`. + + +### objectFieldSeparatorOptionalLinebreak + +Whether `objectFieldSeparator` set to `"semicolon-and-linebreak"` or +`"comma-and-linebreak"` should be allowed to optionally drop the linebreak. + +Defaults to `true`. + ### objectFieldIndent @@ -110,7 +119,7 @@ Determines the spacing to add to unions (`|`). Defaults to a single space (`" "` |Tags|`param`, `property`, `returns`, `this`, `throws`, `type`, `typedef`, `yields`| |Recommended|false| |Settings|`mode`| -|Options|`arrayBrackets`, `enableFixer`, `genericDot`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `objectFieldSeparatorTrailingPunctuation`, `propertyQuotes`, `separatorForSingleObjectField`, `stringQuotes`, `typeBracketSpacing`, `unionSpacing`| +|Options|`arrayBrackets`, `enableFixer`, `genericDot`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `objectFieldSeparatorOptionalLinebreak`, `objectFieldSeparatorTrailingPunctuation`, `propertyQuotes`, `separatorForSingleObjectField`, `stringQuotes`, `typeBracketSpacing`, `unionSpacing`| @@ -281,6 +290,21 @@ The following patterns are considered problems: */ // "jsdoc/type-formatting": ["error"|"warn", {"propertyQuotes":null}] // Message: Inconsistent null property quotes usage + +/** + * @param {{a: string, b: number}} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"objectFieldIndent":" ","objectFieldSeparator":"semicolon-and-linebreak","objectFieldSeparatorOptionalLinebreak":true}] +// Message: Inconsistent semicolon-and-linebreak separator usage + +/** + * @param {{ + * a: string, + * b: number + * }} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"objectFieldIndent":" ","objectFieldSeparator":"semicolon-and-linebreak","objectFieldSeparatorOptionalLinebreak":true}] +// Message: Inconsistent semicolon-and-linebreak separator usage ```` @@ -357,5 +381,18 @@ The following patterns are not considered problems: /** * @param cfg */ + +/** + * @param {{a: string; b: number}} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"objectFieldIndent":" ","objectFieldSeparator":"semicolon-and-linebreak","objectFieldSeparatorOptionalLinebreak":true}] + +/** + * @param {{ + * a: string; + * b: number + * }} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"objectFieldIndent":" ","objectFieldSeparator":"semicolon-and-linebreak","objectFieldSeparatorOptionalLinebreak":true}] ```` diff --git a/src/rules.d.ts b/src/rules.d.ts index 77a141411..cd7c09ce4 100644 --- a/src/rules.d.ts +++ b/src/rules.d.ts @@ -766,6 +766,7 @@ export interface Rules { objectFieldIndent?: string; objectFieldQuote?: "double" | "single" | null; objectFieldSeparator?: "comma" | "comma-and-linebreak" | "linebreak" | "semicolon" | "semicolon-and-linebreak"; + objectFieldSeparatorOptionalLinebreak?: boolean; objectFieldSeparatorTrailingPunctuation?: boolean; propertyQuotes?: "double" | "single" | null; separatorForSingleObjectField?: boolean; diff --git a/src/rules/typeFormatting.js b/src/rules/typeFormatting.js index f17937f21..30fbd4b3e 100644 --- a/src/rules/typeFormatting.js +++ b/src/rules/typeFormatting.js @@ -22,6 +22,7 @@ export default iterateJsdoc(({ objectFieldIndent = '', objectFieldQuote = null, objectFieldSeparator = 'comma', + objectFieldSeparatorOptionalLinebreak = true, objectFieldSeparatorTrailingPunctuation = false, propertyQuotes = null, separatorForSingleObjectField = false, @@ -232,14 +233,21 @@ export default iterateJsdoc(({ case 'JsdocTypeObject': { const typeNode = /** @type {import('jsdoc-type-pratt-parser').ObjectResult} */ (nde); + /* c8 ignore next -- Guard */ + const separator = typeNode.meta.separator ?? 'comma'; if ( - /* c8 ignore next -- Guard */ - (typeNode.meta.separator ?? 'comma') !== objectFieldSeparator || + (separator !== objectFieldSeparator && + (!objectFieldSeparatorOptionalLinebreak || + !(objectFieldSeparator.endsWith('-linebreak') && + objectFieldSeparator.startsWith(separator)))) || (typeNode.meta.separatorForSingleObjectField ?? false) !== separatorForSingleObjectField || - (typeNode.meta.propertyIndent ?? '') !== objectFieldIndent || + ((typeNode.meta.propertyIndent ?? '') !== objectFieldIndent && + separator.endsWith('-linebreak')) || (typeNode.meta.trailingPunctuation ?? false) !== objectFieldSeparatorTrailingPunctuation ) { - typeNode.meta.separator = objectFieldSeparator; + typeNode.meta.separator = objectFieldSeparatorOptionalLinebreak && !separator.endsWith('and-linebreak') ? + objectFieldSeparator.replace(/-and-linebreak$/v, '') : + objectFieldSeparator; typeNode.meta.separatorForSingleObjectField = separatorForSingleObjectField; typeNode.meta.propertyIndent = objectFieldIndent; typeNode.meta.trailingPunctuation = objectFieldSeparatorTrailingPunctuation; @@ -391,6 +399,9 @@ export default iterateJsdoc(({ 'semicolon-and-linebreak', ], }, + objectFieldSeparatorOptionalLinebreak: { + type: 'boolean', + }, objectFieldSeparatorTrailingPunctuation: { type: 'boolean', }, diff --git a/test/rules/assertions/typeFormatting.js b/test/rules/assertions/typeFormatting.js index c3e0cbdb7..66be9f5ca 100644 --- a/test/rules/assertions/typeFormatting.js +++ b/test/rules/assertions/typeFormatting.js @@ -650,6 +650,62 @@ export default { */ `, }, + { + code: ` + /** + * @param {{a: string, b: number}} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Inconsistent semicolon-and-linebreak separator usage', + }, + ], + options: [ + { + objectFieldIndent: ' ', + objectFieldSeparator: 'semicolon-and-linebreak', + objectFieldSeparatorOptionalLinebreak: true, + }, + ], + output: ` + /** + * @param {{a: string; b: number}} cfg + */ + `, + }, + { + code: ` + /** + * @param {{ + * a: string, + * b: number + * }} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Inconsistent semicolon-and-linebreak separator usage', + }, + ], + options: [ + { + objectFieldIndent: ' ', + objectFieldSeparator: 'semicolon-and-linebreak', + objectFieldSeparatorOptionalLinebreak: true, + }, + ], + output: ` + /** + * @param {{ + * a: string; + * b: number + * }} cfg + */ + `, + }, ], valid: [ { @@ -800,5 +856,36 @@ export default { */ `, }, + { + code: ` + /** + * @param {{a: string; b: number}} cfg + */ + `, + options: [ + { + objectFieldIndent: ' ', + objectFieldSeparator: 'semicolon-and-linebreak', + objectFieldSeparatorOptionalLinebreak: true, + }, + ], + }, + { + code: ` + /** + * @param {{ + * a: string; + * b: number + * }} cfg + */ + `, + options: [ + { + objectFieldIndent: ' ', + objectFieldSeparator: 'semicolon-and-linebreak', + objectFieldSeparatorOptionalLinebreak: true, + }, + ], + }, ], }; From 7e155be1829c4327699b055b2552aa17b81c73b0 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 16 Sep 2025 07:38:03 +0800 Subject: [PATCH 097/189] fix(typescript): add rule descriptions (#1516) --- src/bin/generateRuleTypes.js | 1 + src/rules.d.ts | 49 ++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/src/bin/generateRuleTypes.js b/src/bin/generateRuleTypes.js index e65ae9892..8a04ab5a2 100644 --- a/src/bin/generateRuleTypes.js +++ b/src/bin/generateRuleTypes.js @@ -13,6 +13,7 @@ for (const [ rule, ] of Object.entries(index.rules)) { if (rule.meta?.schema?.[0]) { + str += ` /** ${rule.meta.docs.description} */\n`; str += ` "jsdoc/${ruleName}": `; const ts = await compile({ items: rule.meta.schema, diff --git a/src/rules.d.ts b/src/rules.d.ts index cd7c09ce4..c9d9451f0 100644 --- a/src/rules.d.ts +++ b/src/rules.d.ts @@ -1,4 +1,5 @@ export interface Rules { + /** Reports invalid alignment of JSDoc block asterisks. */ "jsdoc/check-alignment": | [] | [ @@ -7,6 +8,7 @@ export interface Rules { } ]; + /** Ensures that (JavaScript) examples within JSDoc adhere to ESLint rules. */ "jsdoc/check-examples": | [] | [ @@ -33,6 +35,7 @@ export interface Rules { } ]; + /** Reports invalid padding inside JSDoc blocks. */ "jsdoc/check-indentation": | [] | [ @@ -41,6 +44,7 @@ export interface Rules { } ]; + /** Reports invalid alignment of JSDoc block lines. */ "jsdoc/check-line-alignment": | [] | ["always" | "never" | "any"] @@ -61,6 +65,7 @@ export interface Rules { } ]; + /** Ensures that parameter names in JSDoc match those in the function declaration. */ "jsdoc/check-param-names": | [] | [ @@ -76,6 +81,7 @@ export interface Rules { } ]; + /** Ensures that property names in JSDoc are not duplicated on the same block and that nested properties have defined roots. */ "jsdoc/check-property-names": | [] | [ @@ -84,6 +90,7 @@ export interface Rules { } ]; + /** Reports invalid block tag names. */ "jsdoc/check-tag-names": | [] | [ @@ -95,6 +102,7 @@ export interface Rules { } ]; + /** Reports invalid types. */ "jsdoc/check-types": | [] | [ @@ -108,6 +116,7 @@ export interface Rules { } ]; + /** This rule checks the values for a handful of tags: `@version`, `@since`, `@license` and `@author`. */ "jsdoc/check-values": | [] | [ @@ -119,6 +128,7 @@ export interface Rules { } ]; + /** Converts non-JSDoc comments preceding or following nodes into JSDoc ones */ "jsdoc/convert-to-jsdoc-comments": | [] | [ @@ -151,6 +161,7 @@ export interface Rules { } ]; + /** Expects specific tags to be empty of any content. */ "jsdoc/empty-tags": | [] | [ @@ -159,6 +170,7 @@ export interface Rules { } ]; + /** Reports an issue with any non-constructor function using `@implements`. */ "jsdoc/implements-on-classes": | [] | [ @@ -173,6 +185,7 @@ export interface Rules { } ]; + /** This rule reports doc comments that only restate their attached name. */ "jsdoc/informative-docs": | [] | [ @@ -189,6 +202,7 @@ export interface Rules { } ]; + /** Enforces minimum number of newlines before JSDoc comment blocks */ "jsdoc/lines-before-block": | [] | [ @@ -201,6 +215,7 @@ export interface Rules { } ]; + /** Enforces a regular expression pattern on descriptions. */ "jsdoc/match-description": | [] | [ @@ -238,6 +253,7 @@ export interface Rules { } ]; + /** Reports the name portion of a JSDoc tag if matching or not matching a given regular expression. */ "jsdoc/match-name": | [] | [ @@ -254,6 +270,7 @@ export interface Rules { } ]; + /** Controls how and whether jsdoc blocks can be expressed as single or multiple line blocks. */ "jsdoc/multiline-blocks": | [] | [ @@ -270,6 +287,7 @@ export interface Rules { } ]; + /** This rule checks for multi-line-style comments which fail to meet the criteria of a jsdoc block. */ "jsdoc/no-bad-blocks": | [] | [ @@ -279,6 +297,7 @@ export interface Rules { } ]; + /** Removes empty blocks with nothing but possibly line breaks */ "jsdoc/no-blank-blocks": | [] | [ @@ -287,6 +306,7 @@ export interface Rules { } ]; + /** This rule reports defaults being used on the relevant portion of `@param` or `@default`. */ "jsdoc/no-defaults": | [] | [ @@ -302,6 +322,7 @@ export interface Rules { } ]; + /** Reports when certain comment structures are always expected. */ "jsdoc/no-missing-syntax": | [] | [ @@ -318,6 +339,7 @@ export interface Rules { } ]; + /** Prevents use of multiple asterisks at the beginning of lines. */ "jsdoc/no-multi-asterisks": | [] | [ @@ -328,6 +350,7 @@ export interface Rules { } ]; + /** Reports when certain comment structures are present. */ "jsdoc/no-restricted-syntax": | [] | [ @@ -343,6 +366,7 @@ export interface Rules { } ]; + /** This rule reports types being used on `@param` or `@returns`. */ "jsdoc/no-types": | [] | [ @@ -357,6 +381,7 @@ export interface Rules { } ]; + /** Checks that types in jsdoc comments are defined. */ "jsdoc/no-undefined-types": | [] | [ @@ -367,6 +392,7 @@ export interface Rules { } ]; + /** Requires that each JSDoc line starts with an `*`. */ "jsdoc/require-asterisk-prefix": | [] | ["always" | "never" | "any"] @@ -381,6 +407,7 @@ export interface Rules { } ]; + /** Requires that all functions have a description. */ "jsdoc/require-description": | [] | [ @@ -400,6 +427,7 @@ export interface Rules { } ]; + /** Requires that block description, explicit `@description`, and `@param`/`@returns` tag descriptions are written in complete sentences. */ "jsdoc/require-description-complete-sentence": | [] | [ @@ -410,6 +438,7 @@ export interface Rules { } ]; + /** Requires that all functions have examples. */ "jsdoc/require-example": | [] | [ @@ -430,6 +459,7 @@ export interface Rules { } ]; + /** Checks that all files have one `@file`, `@fileoverview`, or `@overview` tag at the beginning of the file. */ "jsdoc/require-file-overview": | [] | [ @@ -448,6 +478,7 @@ export interface Rules { } ]; + /** Requires a hyphen before the `@param` description. */ "jsdoc/require-hyphen-before-param-description": | [] | ["always" | "never"] @@ -466,6 +497,7 @@ export interface Rules { } ]; + /** Require JSDoc comments */ "jsdoc/require-jsdoc": | [] | [ @@ -507,6 +539,7 @@ export interface Rules { } ]; + /** Requires that all function parameters are documented. */ "jsdoc/require-param": | [] | [ @@ -536,6 +569,7 @@ export interface Rules { } ]; + /** Requires that each `@param` tag has a `description` value. */ "jsdoc/require-param-description": | [] | [ @@ -552,6 +586,7 @@ export interface Rules { } ]; + /** Requires that all function parameters have names. */ "jsdoc/require-param-name": | [] | [ @@ -566,6 +601,7 @@ export interface Rules { } ]; + /** Requires that each `@param` tag has a `type` value. */ "jsdoc/require-param-type": | [] | [ @@ -582,6 +618,7 @@ export interface Rules { } ]; + /** Requires that returns are documented. */ "jsdoc/require-returns": | [] | [ @@ -611,6 +648,7 @@ export interface Rules { } ]; + /** Requires a return statement in function body if a `@returns` tag is specified in jsdoc comment. */ "jsdoc/require-returns-check": | [] | [ @@ -621,6 +659,7 @@ export interface Rules { } ]; + /** Requires that the `@returns` tag has a `description` value. */ "jsdoc/require-returns-description": | [] | [ @@ -635,6 +674,7 @@ export interface Rules { } ]; + /** Requires that `@returns` tag has `type` value. */ "jsdoc/require-returns-type": | [] | [ @@ -649,6 +689,7 @@ export interface Rules { } ]; + /** Requires template tags for each generic type parameter */ "jsdoc/require-template": | [] | [ @@ -658,6 +699,7 @@ export interface Rules { } ]; + /** Requires that throw statements are documented. */ "jsdoc/require-throws": | [] | [ @@ -673,6 +715,7 @@ export interface Rules { } ]; + /** Requires yields are documented. */ "jsdoc/require-yields": | [] | [ @@ -693,6 +736,7 @@ export interface Rules { } ]; + /** Requires a yield statement in function body if a `@yields` tag is specified in jsdoc comment. */ "jsdoc/require-yields-check": | [] | [ @@ -710,6 +754,7 @@ export interface Rules { } ]; + /** Sorts tags by a specified sequence according to tag name. */ "jsdoc/sort-tags": | [] | [ @@ -724,6 +769,7 @@ export interface Rules { } ]; + /** Enforces lines (or no lines) between tags. */ "jsdoc/tag-lines": | [] | ["always" | "any" | "never"] @@ -747,6 +793,7 @@ export interface Rules { } ]; + /** Auto-escape certain characters that are input within block and tag descriptions. */ "jsdoc/text-escaping": | [] | [ @@ -756,6 +803,7 @@ export interface Rules { } ]; + /** Formats JSDoc type values. */ "jsdoc/type-formatting": | [] | [ @@ -776,6 +824,7 @@ export interface Rules { } ]; + /** Requires all types to be valid JSDoc or Closure compiler types without syntax errors. */ "jsdoc/valid-types": | [] | [ From 224bbe6141614f0b795aaaed56669ab986b57792 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 16 Sep 2025 09:56:14 +0800 Subject: [PATCH 098/189] feat(`check-types`): deprecate `unifyParentAndChildTypeChecks` option in favor of new `unifyParentAndChildTypeChecks` preferredTypes[preferredType] setting (#1517) --- .README/rules/check-types.md | 5 +- .README/settings.md | 2 + docs/rules/check-types.md | 34 +++++++- docs/settings.md | 2 + src/iterateJsdoc.js | 1 + src/rules.d.ts | 3 + src/rules/checkTypes.js | 111 +++++++++++++++----------- test/rules/assertions/checkTypes.js | 116 ++++++++++++++++++++++++++++ 8 files changed, 227 insertions(+), 47 deletions(-) diff --git a/.README/rules/check-types.md b/.README/rules/check-types.md index c980e6a9f..3c3231290 100644 --- a/.README/rules/check-types.md +++ b/.README/rules/check-types.md @@ -57,7 +57,10 @@ RegExp `*` is only a child type. Note that there is no detection of parent and child type together, e.g., you cannot specify preferences for `string[]` specifically as distinct from say `number[]`, but you can - target both with `[]` or the child types `number` or `string`. + target both with `[]` or the child types `number` or `string`. If + `unifyParentAndChildTypeChecks` is set instead on `preferredTypes`, + then that value will be used instead. Note that the latter is the + preferred approach. If a value is present both as a key and as a value, neither the key nor the value will be reported. Thus one can use this fact to allow both `object` diff --git a/.README/settings.md b/.README/settings.md index 858e6c39c..8b596e3b4 100644 --- a/.README/settings.md +++ b/.README/settings.md @@ -265,6 +265,8 @@ The format of the configuration is as follows: - `false` (for forbidding the type) - an optional key `skipRootChecking` (for `check-types`) to allow for this type in the context of a root (i.e., a parent object of some child type) + - an optional key `unifyParentAndChildTypeChecks` to override the + `jsdoc/check-types` option of the same name. Note that the preferred types indicated as targets in `settings.jsdoc.preferredTypes` map will be assumed to be defined by diff --git a/docs/rules/check-types.md b/docs/rules/check-types.md index fa1e6097a..e8263a783 100644 --- a/docs/rules/check-types.md +++ b/docs/rules/check-types.md @@ -68,7 +68,10 @@ RegExp `*` is only a child type. Note that there is no detection of parent and child type together, e.g., you cannot specify preferences for `string[]` specifically as distinct from say `number[]`, but you can - target both with `[]` or the child types `number` or `string`. + target both with `[]` or the child types `number` or `string`. If + `unifyParentAndChildTypeChecks` is set instead on `preferredTypes`, + then that value will be used instead. Note that the latter is the + preferred approach. If a value is present both as a key and as a value, neither the key nor the value will be reported. Thus one can use this fact to allow both `object` @@ -846,6 +849,29 @@ function abc(param) { function a () {} // Settings: {"jsdoc":{"preferredTypes":{"object":{"skipRootChecking":true}}}} // Message: Invalid JSDoc @param "b" type "object". + +/** + * @typedef {Object} foo + */ +function a () {} +// Settings: {"jsdoc":{"preferredTypes":{"Object":{"replacement":"object","unifyParentAndChildTypeChecks":true}}}} +// Message: Invalid JSDoc @typedef "foo" type "Object"; prefer: "object". + +/** + * @typedef {Object} foo + */ +function a () {} +// Settings: {"jsdoc":{"preferredTypes":{"Object":{"replacement":"object","unifyParentAndChildTypeChecks":true}}}} +// Message: Invalid JSDoc @typedef "foo" type "Object"; prefer: "object". + +/** + * @param {object.} foo + */ +function quux (foo) { + +} +// Settings: {"jsdoc":{"mode":"typescript","preferredTypes":{"Object":"object","object.<>":{"replacement":"Object<>","unifyParentAndChildTypeChecks":true},"Object.<>":"Object<>","object<>":"Object<>"}}} +// Message: Invalid JSDoc @param "foo" type "object"; prefer: "Object<>". ```` @@ -1185,5 +1211,11 @@ function a () {} function quux () {} // Settings: {"jsdoc":{"preferredTypes":{"[]":{"message":"Do not use *[], use Array<*> instead","replacement":"Array"}}}} // "jsdoc/check-types": ["error"|"warn", {"unifyParentAndChildTypeChecks":true}] + +/** + * @typedef {object} foo + */ +function a () {} +// Settings: {"jsdoc":{"preferredTypes":{"Object":{"replacement":"object","unifyParentAndChildTypeChecks":true}}}} ```` diff --git a/docs/settings.md b/docs/settings.md index 97648c26e..798a7fac4 100644 --- a/docs/settings.md +++ b/docs/settings.md @@ -290,6 +290,8 @@ The format of the configuration is as follows: - `false` (for forbidding the type) - an optional key `skipRootChecking` (for `check-types`) to allow for this type in the context of a root (i.e., a parent object of some child type) + - an optional key `unifyParentAndChildTypeChecks` to override the + `jsdoc/check-types` option of the same name. Note that the preferred types indicated as targets in `settings.jsdoc.preferredTypes` map will be assumed to be defined by diff --git a/src/iterateJsdoc.js b/src/iterateJsdoc.js index 4c82bc4cb..b55b9cf18 100644 --- a/src/iterateJsdoc.js +++ b/src/iterateJsdoc.js @@ -1726,6 +1726,7 @@ const getUtils = ( * message: string, * replacement?: false|string * skipRootChecking?: boolean + * unifyParentAndChildTypeChecks?: boolean * } * }} PreferredTypes */ diff --git a/src/rules.d.ts b/src/rules.d.ts index c9d9451f0..343e6c905 100644 --- a/src/rules.d.ts +++ b/src/rules.d.ts @@ -112,6 +112,9 @@ export interface Rules { types?: boolean | string[]; }[]; noDefaults?: boolean; + /** + * @deprecated Use the `preferredTypes[preferredType]` setting of the same name instead + */ unifyParentAndChildTypeChecks?: boolean; } ]; diff --git a/src/rules/checkTypes.js b/src/rules/checkTypes.js index f35778138..63751bf98 100644 --- a/src/rules/checkTypes.js +++ b/src/rules/checkTypes.js @@ -197,58 +197,78 @@ export default iterateJsdoc(({ let typeName = typeNodeName; const isNameOfGeneric = parentNode !== undefined && parentNode.type === 'JsdocTypeGeneric' && property === 'left'; - if (unifyParentAndChildTypeChecks || isNameOfGeneric) { - const brackets = /** @type {import('jsdoc-type-pratt-parser').GenericResult} */ ( - parentNode - )?.meta?.brackets; - const dot = /** @type {import('jsdoc-type-pratt-parser').GenericResult} */ ( - parentNode - )?.meta?.dot; - - if (brackets === 'angle') { - const checkPostFixes = dot ? [ - '.', '.<>', - ] : [ - '<>', - ]; - isGenericMatch = checkPostFixes.some((checkPostFix) => { - if (preferredTypes?.[typeNodeName + checkPostFix] !== undefined) { - typeName += checkPostFix; - - return true; - } - - return false; - }); - } - if ( - !isGenericMatch && property && - /** @type {import('jsdoc-type-pratt-parser').NonRootResult} */ ( - parentNode - ).type === 'JsdocTypeGeneric' - ) { - const checkPostFixes = dot ? [ - '.', '.<>', - ] : [ - brackets === 'angle' ? '<>' : '[]', - ]; + const brackets = /** @type {import('jsdoc-type-pratt-parser').GenericResult} */ ( + parentNode + )?.meta?.brackets; + const dot = /** @type {import('jsdoc-type-pratt-parser').GenericResult} */ ( + parentNode + )?.meta?.dot; + + if (brackets === 'angle') { + const checkPostFixes = dot ? [ + '.', '.<>', + ] : [ + '<>', + ]; + isGenericMatch = checkPostFixes.some((checkPostFix) => { + const preferredType = preferredTypes?.[typeNodeName + checkPostFix]; + + // Does `unifyParentAndChildTypeChecks` need to be checked here? + if ( + (unifyParentAndChildTypeChecks || isNameOfGeneric || + /* c8 ignore next 2 -- If checking `unifyParentAndChildTypeChecks` */ + (typeof preferredType === 'object' && + preferredType?.unifyParentAndChildTypeChecks) + ) && + preferredType !== undefined + ) { + typeName += checkPostFix; - isGenericMatch = checkPostFixes.some((checkPostFix) => { - if (preferredTypes?.[checkPostFix] !== undefined) { - typeName = checkPostFix; + return true; + } - return true; - } + return false; + }); + } - return false; - }); - } + if ( + !isGenericMatch && property && + /** @type {import('jsdoc-type-pratt-parser').NonRootResult} */ ( + parentNode + ).type === 'JsdocTypeGeneric' + ) { + const checkPostFixes = dot ? [ + '.', '.<>', + ] : [ + brackets === 'angle' ? '<>' : '[]', + ]; + + isGenericMatch = checkPostFixes.some((checkPostFix) => { + const preferredType = preferredTypes?.[checkPostFix]; + if ( + // Does `unifyParentAndChildTypeChecks` need to be checked here? + (unifyParentAndChildTypeChecks || isNameOfGeneric || + /* c8 ignore next 2 -- If checking `unifyParentAndChildTypeChecks` */ + (typeof preferredType === 'object' && + preferredType?.unifyParentAndChildTypeChecks)) && + preferredType !== undefined + ) { + typeName = checkPostFix; + + return true; + } + + return false; + }); } - const directNameMatch = preferredTypes?.[typeNodeName] !== undefined && + const prefType = preferredTypes?.[typeNodeName]; + const directNameMatch = prefType !== undefined && !Object.values(preferredTypes).includes(typeNodeName); - const unifiedSyntaxParentMatch = property && directNameMatch && unifyParentAndChildTypeChecks; + const specificUnify = typeof prefType === 'object' && + prefType?.unifyParentAndChildTypeChecks; + const unifiedSyntaxParentMatch = property && directNameMatch && (unifyParentAndChildTypeChecks || specificUnify); isGenericMatch = isGenericMatch || Boolean(unifiedSyntaxParentMatch); hasMatchingPreferredType = isGenericMatch || @@ -524,6 +544,7 @@ export default iterateJsdoc(({ type: 'boolean', }, unifyParentAndChildTypeChecks: { + description: '@deprecated Use the `preferredTypes[preferredType]` setting of the same name instead', type: 'boolean', }, }, diff --git a/test/rules/assertions/checkTypes.js b/test/rules/assertions/checkTypes.js index c06967f5f..e6c403b30 100644 --- a/test/rules/assertions/checkTypes.js +++ b/test/rules/assertions/checkTypes.js @@ -2371,6 +2371,104 @@ export default /** @type {import('../index.js').TestCases} */ ({ }, }, }, + { + code: ` + /** + * @typedef {Object} foo + */ + function a () {} + `, + errors: [ + { + line: 3, + message: 'Invalid JSDoc @typedef "foo" type "Object"; prefer: "object".', + }, + ], + output: ` + /** + * @typedef {object} foo + */ + function a () {} + `, + settings: { + jsdoc: { + preferredTypes: { + Object: { + replacement: 'object', + unifyParentAndChildTypeChecks: true, + }, + }, + }, + }, + }, + { + code: ` + /** + * @typedef {Object} foo + */ + function a () {} + `, + errors: [ + { + line: 3, + message: 'Invalid JSDoc @typedef "foo" type "Object"; prefer: "object".', + }, + ], + output: ` + /** + * @typedef {object} foo + */ + function a () {} + `, + settings: { + jsdoc: { + preferredTypes: { + Object: { + replacement: 'object', + unifyParentAndChildTypeChecks: true, + }, + }, + }, + }, + }, + { + code: ` + /** + * @param {object.} foo + */ + function quux (foo) { + + } + `, + errors: [ + { + line: 3, + message: 'Invalid JSDoc @param "foo" type "object"; prefer: "Object<>".', + }, + ], + output: ` + /** + * @param {Object} foo + */ + function quux (foo) { + + } + `, + settings: { + jsdoc: { + mode: 'typescript', + preferredTypes: { + Object: 'object', + 'object.<>': { + replacement: 'Object<>', + unifyParentAndChildTypeChecks: true, + }, + 'Object.<>': 'Object<>', + 'object<>': 'Object<>', + }, + }, + }, + }, ], valid: [ { @@ -3079,5 +3177,23 @@ export default /** @type {import('../index.js').TestCases} */ ({ }, }, }, + { + code: ` + /** + * @typedef {object} foo + */ + function a () {} + `, + settings: { + jsdoc: { + preferredTypes: { + Object: { + replacement: 'object', + unifyParentAndChildTypeChecks: true, + }, + }, + }, + }, + }, ], }); From c21a3f371277bd88dccb632351911f11278b82df Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 16 Sep 2025 10:25:49 +0800 Subject: [PATCH 099/189] fix(typescript): ensure rules without a schema are represented as well (#1518) --- src/bin/generateRuleTypes.js | 28 +++++++++++------------ src/rules.d.ts | 36 +++++++++++++++++++++++++++++ src/rules/checkTypes.js | 44 ++++++++++++++++++------------------ 3 files changed, 71 insertions(+), 37 deletions(-) diff --git a/src/bin/generateRuleTypes.js b/src/bin/generateRuleTypes.js index 8a04ab5a2..f34eaae61 100644 --- a/src/bin/generateRuleTypes.js +++ b/src/bin/generateRuleTypes.js @@ -12,22 +12,20 @@ for (const [ ruleName, rule, ] of Object.entries(index.rules)) { - if (rule.meta?.schema?.[0]) { - str += ` /** ${rule.meta.docs.description} */\n`; - str += ` "jsdoc/${ruleName}": `; - const ts = await compile({ - items: rule.meta.schema, - type: 'array', - }, 'Test', { - bannerComment: '', - }); + str += ` /** ${rule.meta.docs.description} */\n`; + str += ` "jsdoc/${ruleName}": `; + const ts = await compile({ + items: rule.meta.schema ?? [], + type: 'array', + }, 'Test', { + bannerComment: '', + }); - str += ts - .replace(/^export type Test = ?/v, '') - .replace(/^export interface Test /v, '') - .replaceAll('\n', '\n ').trimEnd().replace(/;$/v, '') + - ';\n\n'; - } + str += ts + .replace(/^export type Test = ?/v, '') + .replace(/^export interface Test /v, '') + .replaceAll('\n', '\n ').trimEnd().replace(/;$/v, '') + + ';\n\n'; } str = str.replace(/\n$/v, '') + '}\n'; diff --git a/src/rules.d.ts b/src/rules.d.ts index 343e6c905..920bb604b 100644 --- a/src/rules.d.ts +++ b/src/rules.d.ts @@ -1,4 +1,7 @@ export interface Rules { + /** Checks that `@access` tags have a valid value. */ + "jsdoc/check-access": []; + /** Reports invalid alignment of JSDoc block asterisks. */ "jsdoc/check-alignment": | [] @@ -90,6 +93,9 @@ export interface Rules { } ]; + /** Reports against syntax not valid for the mode (e.g., Google Closure Compiler in non-Closure mode). */ + "jsdoc/check-syntax": []; + /** Reports invalid block tag names. */ "jsdoc/check-tag-names": | [] @@ -102,6 +108,9 @@ export interface Rules { } ]; + /** Checks that any `@template` names are actually used in the connected `@typedef` or type alias. */ + "jsdoc/check-template-names": []; + /** Reports invalid types. */ "jsdoc/check-types": | [] @@ -188,6 +197,9 @@ export interface Rules { } ]; + /** Reports if JSDoc `import()` statements point to a package which is not listed in `dependencies` or `devDependencies` */ + "jsdoc/imports-as-dependencies": []; + /** This rule reports doc comments that only restate their attached name. */ "jsdoc/informative-docs": | [] @@ -300,6 +312,9 @@ export interface Rules { } ]; + /** Detects and removes extra lines of a blank block description */ + "jsdoc/no-blank-block-descriptions": []; + /** Removes empty blocks with nothing but possibly line breaks */ "jsdoc/no-blank-blocks": | [] @@ -542,6 +557,9 @@ export interface Rules { } ]; + /** Requires a type for @next tags */ + "jsdoc/require-next-type": []; + /** Requires that all function parameters are documented. */ "jsdoc/require-param": | [] @@ -621,6 +639,18 @@ export interface Rules { } ]; + /** Requires that all `@typedef` and `@namespace` tags have `@property` when their type is a plain `object`, `Object`, or `PlainObject`. */ + "jsdoc/require-property": []; + + /** Requires that each `@property` tag has a `description` value. */ + "jsdoc/require-property-description": []; + + /** Requires that all function `@property` tags have names. */ + "jsdoc/require-property-name": []; + + /** Requires that each `@property` tag has a `type` value. */ + "jsdoc/require-property-type": []; + /** Requires that returns are documented. */ "jsdoc/require-returns": | [] @@ -718,6 +748,9 @@ export interface Rules { } ]; + /** Requires a type for @throws tags */ + "jsdoc/require-throws-type": []; + /** Requires yields are documented. */ "jsdoc/require-yields": | [] @@ -757,6 +790,9 @@ export interface Rules { } ]; + /** Requires a type for @yields tags */ + "jsdoc/require-yields-type": []; + /** Sorts tags by a specified sequence according to tag name. */ "jsdoc/sort-tags": | [] diff --git a/src/rules/checkTypes.js b/src/rules/checkTypes.js index 63751bf98..5294a49be 100644 --- a/src/rules/checkTypes.js +++ b/src/rules/checkTypes.js @@ -88,6 +88,28 @@ const getMessage = (upperCase) => { '`' + (upperCase ? 'O' : 'o') + 'bject`, e.g., `{[key: string]: string}`'; }; +/** + * @type {{ + * message: string, + * replacement: false + * }} + */ +const info = { + message: getMessage(), + replacement: false, +}; + +/** + * @type {{ + * message: string, + * replacement: false + * }} + */ +const infoUC = { + message: getMessage(true), + replacement: false, +}; + export default iterateJsdoc(({ context, jsdocNode, @@ -120,28 +142,6 @@ export default iterateJsdoc(({ 'Object.<>' in preferredTypesOriginal || 'object<>' in preferredTypesOriginal); - /** - * @type {{ - * message: string, - * replacement: false - * }} - */ - const info = { - message: getMessage(), - replacement: false, - }; - - /** - * @type {{ - * message: string, - * replacement: false - * }} - */ - const infoUC = { - message: getMessage(true), - replacement: false, - }; - /** @type {import('../iterateJsdoc.js').PreferredTypes} */ const typeToInject = mode === 'typescript' ? { From 52c0c16b218315f0945ce8ea55176cc6f4c8e1c0 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 16 Sep 2025 10:32:24 +0800 Subject: [PATCH 100/189] fix(typescript): descriptions need tag Markdown escaping --- src/index-cjs.js | 6 +++--- src/index.js | 6 +++--- src/rules.d.ts | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/index-cjs.js b/src/index-cjs.js index c6d5ec6eb..55c50ebdc 100644 --- a/src/index-cjs.js +++ b/src/index-cjs.js @@ -122,7 +122,7 @@ index.rules = { message: '@next should have a type', }, ], - description: 'Requires a type for @next tags', + description: 'Requires a type for `@next` tags', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-next-type.md#repos-sticky-header', }), 'require-param': requireParam, @@ -147,7 +147,7 @@ index.rules = { message: '@throws should have a type', }, ], - description: 'Requires a type for @throws tags', + description: 'Requires a type for `@throws` tags', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-throws-type.md#repos-sticky-header', }), 'require-yields': requireYields, @@ -160,7 +160,7 @@ index.rules = { message: '@yields should have a type', }, ], - description: 'Requires a type for @yields tags', + description: 'Requires a type for `@yields` tags', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-yields-type.md#repos-sticky-header', }), 'sort-tags': sortTags, diff --git a/src/index.js b/src/index.js index dec8d6e95..dcd75876d 100644 --- a/src/index.js +++ b/src/index.js @@ -128,7 +128,7 @@ index.rules = { message: '@next should have a type', }, ], - description: 'Requires a type for @next tags', + description: 'Requires a type for `@next` tags', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-next-type.md#repos-sticky-header', }), 'require-param': requireParam, @@ -153,7 +153,7 @@ index.rules = { message: '@throws should have a type', }, ], - description: 'Requires a type for @throws tags', + description: 'Requires a type for `@throws` tags', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-throws-type.md#repos-sticky-header', }), 'require-yields': requireYields, @@ -166,7 +166,7 @@ index.rules = { message: '@yields should have a type', }, ], - description: 'Requires a type for @yields tags', + description: 'Requires a type for `@yields` tags', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-yields-type.md#repos-sticky-header', }), 'sort-tags': sortTags, diff --git a/src/rules.d.ts b/src/rules.d.ts index 920bb604b..04b9bf961 100644 --- a/src/rules.d.ts +++ b/src/rules.d.ts @@ -557,7 +557,7 @@ export interface Rules { } ]; - /** Requires a type for @next tags */ + /** Requires a type for `@next` tags */ "jsdoc/require-next-type": []; /** Requires that all function parameters are documented. */ @@ -748,7 +748,7 @@ export interface Rules { } ]; - /** Requires a type for @throws tags */ + /** Requires a type for `@throws` tags */ "jsdoc/require-throws-type": []; /** Requires yields are documented. */ @@ -790,7 +790,7 @@ export interface Rules { } ]; - /** Requires a type for @yields tags */ + /** Requires a type for `@yields` tags */ "jsdoc/require-yields-type": []; /** Sorts tags by a specified sequence according to tag name. */ From bb607b98db9ffa22b9e1c2862146e8efa91eb32e Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 16 Sep 2025 11:39:16 +0800 Subject: [PATCH 101/189] refactor: move check-types to reusable utility --- src/buildRejectOrPreferRuleDefinition.js | 466 ++++++++++++++++++ src/index-cjs.js | 17 + src/index.js | 17 + src/rules/checkTypes.js | 593 ++++------------------- 4 files changed, 582 insertions(+), 511 deletions(-) create mode 100644 src/buildRejectOrPreferRuleDefinition.js diff --git a/src/buildRejectOrPreferRuleDefinition.js b/src/buildRejectOrPreferRuleDefinition.js new file mode 100644 index 000000000..c29142168 --- /dev/null +++ b/src/buildRejectOrPreferRuleDefinition.js @@ -0,0 +1,466 @@ +import iterateJsdoc from './iterateJsdoc.js'; +import { + parse, + stringify, + traverse, + tryParse, +} from '@es-joy/jsdoccomment'; + +/** + * Adjusts the parent type node `meta` for generic matches (or type node + * `type` for `JsdocTypeAny`) and sets the type node `value`. + * @param {string} type The actual type + * @param {string} preferred The preferred type + * @param {boolean} isGenericMatch + * @param {string} typeNodeName + * @param {import('jsdoc-type-pratt-parser').NonRootResult} node + * @param {import('jsdoc-type-pratt-parser').NonRootResult|undefined} parentNode + * @returns {void} + */ +const adjustNames = (type, preferred, isGenericMatch, typeNodeName, node, parentNode) => { + let ret = preferred; + if (isGenericMatch) { + const parentMeta = /** @type {import('jsdoc-type-pratt-parser').GenericResult} */ ( + parentNode + ).meta; + if (preferred === '[]') { + parentMeta.brackets = 'square'; + parentMeta.dot = false; + ret = 'Array'; + } else { + const dotBracketEnd = preferred.match(/\.(?:<>)?$/v); + if (dotBracketEnd) { + parentMeta.brackets = 'angle'; + parentMeta.dot = true; + ret = preferred.slice(0, -dotBracketEnd[0].length); + } else { + const bracketEnd = preferred.endsWith('<>'); + if (bracketEnd) { + parentMeta.brackets = 'angle'; + parentMeta.dot = false; + ret = preferred.slice(0, -2); + } else if ( + parentMeta?.brackets === 'square' && + (typeNodeName === '[]' || typeNodeName === 'Array') + ) { + parentMeta.brackets = 'angle'; + parentMeta.dot = false; + } + } + } + } else if (type === 'JsdocTypeAny') { + node.type = 'JsdocTypeName'; + } + + /** @type {import('jsdoc-type-pratt-parser').NameResult} */ ( + node + ).value = ret.replace(/(?:\.|<>|\.<>|\[\])$/v, ''); + + // For bare pseudo-types like `<>` + if (!ret) { + /** @type {import('jsdoc-type-pratt-parser').NameResult} */ ( + node + ).value = typeNodeName; + } +}; + +/** + * @param {boolean} [upperCase] + * @returns {string} + */ +const getMessage = (upperCase) => { + return 'Use object shorthand or index signatures instead of ' + + '`' + (upperCase ? 'O' : 'o') + 'bject`, e.g., `{[key: string]: string}`'; +}; + +/** + * @type {{ + * message: string, + * replacement: false + * }} + */ +const info = { + message: getMessage(), + replacement: false, +}; + +/** + * @type {{ + * message: string, + * replacement: false + * }} + */ +const infoUC = { + message: getMessage(true), + replacement: false, +}; + +/** + * @param {{ + * checkNativeTypes: import('./rules/checkTypes.js').CheckNativeTypes|null + * overrideSettings?: null, + * description?: string, + * schema?: import('eslint').Rule.RuleMetaData['schema'], + * url?: string, + * }} cfg + * @returns {import('@eslint/core').RuleDefinition< + * import('@eslint/core').RuleDefinitionTypeOptions + * >} + */ +export const buildRejectOrPreferRuleDefinition = ({ + checkNativeTypes = null, + description = 'Reports invalid types.', + overrideSettings = null, + schema = [], + url = 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-types.md#repos-sticky-header', +}) => { + return iterateJsdoc( + ({ + context, + jsdocNode, + report, + settings, + sourceCode, + utils, + }) => { + const jsdocTagsWithPossibleType = utils.filterTags((tag) => { + return Boolean(utils.tagMightHaveTypePosition(tag.tag)); + }); + + const + /** + * @type {{ + * preferredTypes: import('./iterateJsdoc.js').PreferredTypes, + * structuredTags: import('./iterateJsdoc.js').StructuredTags, + * mode: import('./jsdocUtils.js').ParserMode + * }} + */ + { + mode = settings.mode, + preferredTypes: preferredTypesOriginal, + structuredTags = {}, + } = overrideSettings ?? settings; + + const injectObjectPreferredTypes = !('Object' in preferredTypesOriginal || + 'object' in preferredTypesOriginal || + 'object.<>' in preferredTypesOriginal || + 'Object.<>' in preferredTypesOriginal || + 'object<>' in preferredTypesOriginal); + + /** @type {import('./iterateJsdoc.js').PreferredTypes} */ + const typeToInject = mode === 'typescript' ? + { + Object: 'object', + 'object.<>': info, + 'Object.<>': infoUC, + 'object<>': info, + 'Object<>': infoUC, + } : + { + Object: 'object', + 'object.<>': 'Object<>', + 'Object.<>': 'Object<>', + 'object<>': 'Object<>', + }; + + /** @type {import('./iterateJsdoc.js').PreferredTypes} */ + const preferredTypes = { + ...injectObjectPreferredTypes ? + typeToInject : + {}, + ...preferredTypesOriginal, + }; + + const + /** + * @type {{ + * noDefaults: boolean, + * unifyParentAndChildTypeChecks: boolean, + * exemptTagContexts: ({ + * tag: string, + * types: true|string[] + * })[] + * }} + */ { + exemptTagContexts = [], + noDefaults, + unifyParentAndChildTypeChecks, + } = context.options[0] || {}; + + /** + * Gets information about the preferred type: whether there is a matching + * preferred type, what the type is, and whether it is a match to a generic. + * @param {string} _type Not currently in use + * @param {string} typeNodeName + * @param {import('jsdoc-type-pratt-parser').NonRootResult|undefined} parentNode + * @param {string|undefined} property + * @returns {[hasMatchingPreferredType: boolean, typeName: string, isGenericMatch: boolean]} + */ + const getPreferredTypeInfo = (_type, typeNodeName, parentNode, property) => { + let hasMatchingPreferredType = false; + let isGenericMatch = false; + let typeName = typeNodeName; + + const isNameOfGeneric = parentNode !== undefined && parentNode.type === 'JsdocTypeGeneric' && property === 'left'; + + const brackets = /** @type {import('jsdoc-type-pratt-parser').GenericResult} */ ( + parentNode + )?.meta?.brackets; + const dot = /** @type {import('jsdoc-type-pratt-parser').GenericResult} */ ( + parentNode + )?.meta?.dot; + + if (brackets === 'angle') { + const checkPostFixes = dot ? [ + '.', '.<>', + ] : [ + '<>', + ]; + isGenericMatch = checkPostFixes.some((checkPostFix) => { + const preferredType = preferredTypes?.[typeNodeName + checkPostFix]; + + // Does `unifyParentAndChildTypeChecks` need to be checked here? + if ( + (unifyParentAndChildTypeChecks || isNameOfGeneric || + /* c8 ignore next 2 -- If checking `unifyParentAndChildTypeChecks` */ + (typeof preferredType === 'object' && + preferredType?.unifyParentAndChildTypeChecks) + ) && + preferredType !== undefined + ) { + typeName += checkPostFix; + + return true; + } + + return false; + }); + } + + if ( + !isGenericMatch && property && + /** @type {import('jsdoc-type-pratt-parser').NonRootResult} */ ( + parentNode + ).type === 'JsdocTypeGeneric' + ) { + const checkPostFixes = dot ? [ + '.', '.<>', + ] : [ + brackets === 'angle' ? '<>' : '[]', + ]; + + isGenericMatch = checkPostFixes.some((checkPostFix) => { + const preferredType = preferredTypes?.[checkPostFix]; + if ( + // Does `unifyParentAndChildTypeChecks` need to be checked here? + (unifyParentAndChildTypeChecks || isNameOfGeneric || + /* c8 ignore next 2 -- If checking `unifyParentAndChildTypeChecks` */ + (typeof preferredType === 'object' && + preferredType?.unifyParentAndChildTypeChecks)) && + preferredType !== undefined + ) { + typeName = checkPostFix; + + return true; + } + + return false; + }); + } + + const prefType = preferredTypes?.[typeNodeName]; + const directNameMatch = prefType !== undefined && + !Object.values(preferredTypes).includes(typeNodeName); + const specificUnify = typeof prefType === 'object' && + prefType?.unifyParentAndChildTypeChecks; + const unifiedSyntaxParentMatch = property && directNameMatch && (unifyParentAndChildTypeChecks || specificUnify); + isGenericMatch = isGenericMatch || Boolean(unifiedSyntaxParentMatch); + + hasMatchingPreferredType = isGenericMatch || + directNameMatch && !property; + + return [ + hasMatchingPreferredType, typeName, isGenericMatch, + ]; + }; + + /** + * Collect invalid type info. + * @param {string} type + * @param {string} value + * @param {string} tagName + * @param {string} nameInTag + * @param {number} idx + * @param {string|undefined} property + * @param {import('jsdoc-type-pratt-parser').NonRootResult} node + * @param {import('jsdoc-type-pratt-parser').NonRootResult|undefined} parentNode + * @param {(string|false|undefined)[][]} invalidTypes + * @returns {void} + */ + const getInvalidTypes = (type, value, tagName, nameInTag, idx, property, node, parentNode, invalidTypes) => { + let typeNodeName = type === 'JsdocTypeAny' ? '*' : value; + + const [ + hasMatchingPreferredType, + typeName, + isGenericMatch, + ] = getPreferredTypeInfo(type, typeNodeName, parentNode, property); + + let preferred; + let types; + if (hasMatchingPreferredType) { + const preferredSetting = preferredTypes[typeName]; + typeNodeName = typeName === '[]' ? typeName : typeNodeName; + + if (!preferredSetting) { + invalidTypes.push([ + typeNodeName, + ]); + } else if (typeof preferredSetting === 'string') { + preferred = preferredSetting; + invalidTypes.push([ + typeNodeName, preferred, + ]); + } else if (preferredSetting && typeof preferredSetting === 'object') { + const nextItem = preferredSetting.skipRootChecking && jsdocTagsWithPossibleType[idx + 1]; + + if (!nextItem || !nextItem.name.startsWith(`${nameInTag}.`)) { + preferred = preferredSetting.replacement; + invalidTypes.push([ + typeNodeName, + preferred, + preferredSetting.message, + ]); + } + } else { + utils.reportSettings( + 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.', + ); + + return; + } + } else if (Object.entries(structuredTags).some(([ + tag, + { + type: typs, + }, + ]) => { + types = typs; + + return tag === tagName && + Array.isArray(types) && + !types.includes(typeNodeName); + })) { + invalidTypes.push([ + typeNodeName, types, + ]); + } else if (checkNativeTypes && !noDefaults && type === 'JsdocTypeName') { + preferred = checkNativeTypes( + preferredTypes, typeNodeName, preferred, parentNode, invalidTypes, + ); + } + + // For fixer + if (preferred) { + adjustNames(type, preferred, isGenericMatch, typeNodeName, node, parentNode); + } + }; + + for (const [ + idx, + jsdocTag, + ] of jsdocTagsWithPossibleType.entries()) { + /** @type {(string|false|undefined)[][]} */ + const invalidTypes = []; + let typeAst; + + try { + typeAst = mode === 'permissive' ? tryParse(jsdocTag.type) : parse(jsdocTag.type, mode); + } catch { + continue; + } + + const { + name: nameInTag, + tag: tagName, + } = jsdocTag; + + traverse(typeAst, (node, parentNode, property) => { + const { + type, + value, + } = + /** + * @type {import('jsdoc-type-pratt-parser').NameResult} + */ (node); + if (![ + 'JsdocTypeAny', 'JsdocTypeName', + ].includes(type)) { + return; + } + + getInvalidTypes(type, value, tagName, nameInTag, idx, property, node, parentNode, invalidTypes); + }); + + if (invalidTypes.length) { + const fixedType = stringify(typeAst); + + /** + * @type {import('eslint').Rule.ReportFixer} + */ + const fix = (fixer) => { + return fixer.replaceText( + jsdocNode, + sourceCode.getText(jsdocNode).replace( + `{${jsdocTag.type}}`, + `{${fixedType}}`, + ), + ); + }; + + for (const [ + badType, + preferredType = '', + msg, + ] of invalidTypes) { + const tagValue = jsdocTag.name ? ` "${jsdocTag.name}"` : ''; + if (exemptTagContexts.some(({ + tag, + types, + }) => { + return tag === tagName && + (types === true || types.includes(jsdocTag.type)); + })) { + continue; + } + + report( + msg || + `Invalid JSDoc @${tagName}${tagValue} type "${badType}"` + + (preferredType ? '; ' : '.') + + (preferredType ? `prefer: ${JSON.stringify(preferredType)}.` : ''), + preferredType ? fix : null, + jsdocTag, + msg ? { + tagName, + tagValue, + } : undefined, + ); + } + } + } + }, + { + iterateAllJsdocs: true, + meta: { + docs: { + description, + url, + }, + fixable: 'code', + schema, + type: 'suggestion', + }, + }, + ); +}; diff --git a/src/index-cjs.js b/src/index-cjs.js index 55c50ebdc..b49a385d1 100644 --- a/src/index-cjs.js +++ b/src/index-cjs.js @@ -1,6 +1,9 @@ import { buildForbidRuleDefinition, } from './buildForbidRuleDefinition.js'; +// import { +// buildRejectOrPreferRuleDefinition, +// } from './buildRejectOrPreferRuleDefinition.js'; import { getJsdocProcessorPlugin, } from './getJsdocProcessorPlugin.js'; @@ -107,6 +110,20 @@ index.rules = { 'no-restricted-syntax': noRestrictedSyntax, 'no-types': noTypes, 'no-undefined-types': noUndefinedTypes, + // 'reject-any-type': buildRejectOrPreferRuleDefinition({ + // contexts: [ + // { + // unifyParentAndChildTypeChecks: true, + // }, + // ], + // }), + // 'reject-function-type': buildRejectOrPreferRuleDefinition({ + // contexts: [ + // { + // unifyParentAndChildTypeChecks: true, + // }, + // ], + // }), 'require-asterisk-prefix': requireAsteriskPrefix, 'require-description': requireDescription, 'require-description-complete-sentence': requireDescriptionCompleteSentence, diff --git a/src/index.js b/src/index.js index dcd75876d..5f3d0d456 100644 --- a/src/index.js +++ b/src/index.js @@ -7,6 +7,9 @@ import { import { buildForbidRuleDefinition, } from './buildForbidRuleDefinition.js'; +// import { +// buildRejectOrPreferRuleDefinition, +// } from './buildRejectOrPreferRuleDefinition.js'; import { getJsdocProcessorPlugin, } from './getJsdocProcessorPlugin.js'; @@ -113,6 +116,20 @@ index.rules = { 'no-restricted-syntax': noRestrictedSyntax, 'no-types': noTypes, 'no-undefined-types': noUndefinedTypes, + // 'reject-any-type': buildRejectOrPreferRuleDefinition({ + // contexts: [ + // { + // unifyParentAndChildTypeChecks: true, + // }, + // ], + // }), + // 'reject-function-type': buildRejectOrPreferRuleDefinition({ + // contexts: [ + // { + // unifyParentAndChildTypeChecks: true, + // }, + // ], + // }), 'require-asterisk-prefix': requireAsteriskPrefix, 'require-description': requireDescription, 'require-description-complete-sentence': requireDescriptionCompleteSentence, diff --git a/src/rules/checkTypes.js b/src/rules/checkTypes.js index 5294a49be..652069b24 100644 --- a/src/rules/checkTypes.js +++ b/src/rules/checkTypes.js @@ -1,10 +1,6 @@ -import iterateJsdoc from '../iterateJsdoc.js'; import { - parse, - stringify, - traverse, - tryParse, -} from '@es-joy/jsdoccomment'; + buildRejectOrPreferRuleDefinition, +} from '../buildRejectOrPreferRuleDefinition.js'; const strictNativeTypes = [ 'undefined', @@ -22,535 +18,110 @@ const strictNativeTypes = [ ]; /** - * Adjusts the parent type node `meta` for generic matches (or type node - * `type` for `JsdocTypeAny`) and sets the type node `value`. - * @param {string} type The actual type - * @param {string} preferred The preferred type - * @param {boolean} isGenericMatch + * @callback CheckNativeTypes + * Iterates strict types to see if any should be added to `invalidTypes` (and + * the the relevant strict type returned as the new preferred type). + * @param {import('../iterateJsdoc.js').PreferredTypes} preferredTypes * @param {string} typeNodeName - * @param {import('jsdoc-type-pratt-parser').NonRootResult} node + * @param {string|undefined} preferred * @param {import('jsdoc-type-pratt-parser').NonRootResult|undefined} parentNode - * @returns {void} + * @param {(string|false|undefined)[][]} invalidTypes + * @returns {string|undefined} The `preferred` type string, optionally changed */ -const adjustNames = (type, preferred, isGenericMatch, typeNodeName, node, parentNode) => { - let ret = preferred; - if (isGenericMatch) { - const parentMeta = /** @type {import('jsdoc-type-pratt-parser').GenericResult} */ ( - parentNode - ).meta; - if (preferred === '[]') { - parentMeta.brackets = 'square'; - parentMeta.dot = false; - ret = 'Array'; - } else { - const dotBracketEnd = preferred.match(/\.(?:<>)?$/v); - if (dotBracketEnd) { - parentMeta.brackets = 'angle'; - parentMeta.dot = true; - ret = preferred.slice(0, -dotBracketEnd[0].length); - } else { - const bracketEnd = preferred.endsWith('<>'); - if (bracketEnd) { - parentMeta.brackets = 'angle'; - parentMeta.dot = false; - ret = preferred.slice(0, -2); - } else if ( - parentMeta?.brackets === 'square' && - (typeNodeName === '[]' || typeNodeName === 'Array') - ) { - parentMeta.brackets = 'angle'; - parentMeta.dot = false; - } - } - } - } else if (type === 'JsdocTypeAny') { - node.type = 'JsdocTypeName'; - } - - /** @type {import('jsdoc-type-pratt-parser').NameResult} */ ( - node - ).value = ret.replace(/(?:\.|<>|\.<>|\[\])$/v, ''); - - // For bare pseudo-types like `<>` - if (!ret) { - /** @type {import('jsdoc-type-pratt-parser').NameResult} */ ( - node - ).value = typeNodeName; - } -}; - -/** - * @param {boolean} [upperCase] - * @returns {string} - */ -const getMessage = (upperCase) => { - return 'Use object shorthand or index signatures instead of ' + - '`' + (upperCase ? 'O' : 'o') + 'bject`, e.g., `{[key: string]: string}`'; -}; - -/** - * @type {{ - * message: string, - * replacement: false - * }} - */ -const info = { - message: getMessage(), - replacement: false, -}; - -/** - * @type {{ - * message: string, - * replacement: false - * }} - */ -const infoUC = { - message: getMessage(true), - replacement: false, -}; - -export default iterateJsdoc(({ - context, - jsdocNode, - report, - settings, - sourceCode, - utils, -}) => { - const jsdocTagsWithPossibleType = utils.filterTags((tag) => { - return Boolean(utils.tagMightHaveTypePosition(tag.tag)); - }); - - const - /** - * @type {{ - * preferredTypes: import('../iterateJsdoc.js').PreferredTypes, - * structuredTags: import('../iterateJsdoc.js').StructuredTags, - * mode: import('../jsdocUtils.js').ParserMode - * }} - */ - { - mode, - preferredTypes: preferredTypesOriginal, - structuredTags, - } = settings; - - const injectObjectPreferredTypes = !('Object' in preferredTypesOriginal || - 'object' in preferredTypesOriginal || - 'object.<>' in preferredTypesOriginal || - 'Object.<>' in preferredTypesOriginal || - 'object<>' in preferredTypesOriginal); - - /** @type {import('../iterateJsdoc.js').PreferredTypes} */ - const typeToInject = mode === 'typescript' ? - { - Object: 'object', - 'object.<>': info, - 'Object.<>': infoUC, - 'object<>': info, - 'Object<>': infoUC, - } : - { - Object: 'object', - 'object.<>': 'Object<>', - 'Object.<>': 'Object<>', - 'object<>': 'Object<>', - }; - - /** @type {import('../iterateJsdoc.js').PreferredTypes} */ - const preferredTypes = { - ...injectObjectPreferredTypes ? - typeToInject : - {}, - ...preferredTypesOriginal, - }; - - const - /** - * @type {{ - * noDefaults: boolean, - * unifyParentAndChildTypeChecks: boolean, - * exemptTagContexts: ({ - * tag: string, - * types: true|string[] - * })[] - * }} - */ { - exemptTagContexts = [], - noDefaults, - unifyParentAndChildTypeChecks, - } = context.options[0] || {}; - - /** - * Gets information about the preferred type: whether there is a matching - * preferred type, what the type is, and whether it is a match to a generic. - * @param {string} _type Not currently in use - * @param {string} typeNodeName - * @param {import('jsdoc-type-pratt-parser').NonRootResult|undefined} parentNode - * @param {string|undefined} property - * @returns {[hasMatchingPreferredType: boolean, typeName: string, isGenericMatch: boolean]} - */ - const getPreferredTypeInfo = (_type, typeNodeName, parentNode, property) => { - let hasMatchingPreferredType = false; - let isGenericMatch = false; - let typeName = typeNodeName; - - const isNameOfGeneric = parentNode !== undefined && parentNode.type === 'JsdocTypeGeneric' && property === 'left'; - - const brackets = /** @type {import('jsdoc-type-pratt-parser').GenericResult} */ ( - parentNode - )?.meta?.brackets; - const dot = /** @type {import('jsdoc-type-pratt-parser').GenericResult} */ ( - parentNode - )?.meta?.dot; - - if (brackets === 'angle') { - const checkPostFixes = dot ? [ - '.', '.<>', - ] : [ - '<>', - ]; - isGenericMatch = checkPostFixes.some((checkPostFix) => { - const preferredType = preferredTypes?.[typeNodeName + checkPostFix]; - - // Does `unifyParentAndChildTypeChecks` need to be checked here? - if ( - (unifyParentAndChildTypeChecks || isNameOfGeneric || - /* c8 ignore next 2 -- If checking `unifyParentAndChildTypeChecks` */ - (typeof preferredType === 'object' && - preferredType?.unifyParentAndChildTypeChecks) - ) && - preferredType !== undefined - ) { - typeName += checkPostFix; - - return true; - } - - return false; - }); - } +/** @type {CheckNativeTypes} */ +const checkNativeTypes = (preferredTypes, typeNodeName, preferred, parentNode, invalidTypes) => { + let changedPreferred = preferred; + for (const strictNativeType of strictNativeTypes) { if ( - !isGenericMatch && property && - /** @type {import('jsdoc-type-pratt-parser').NonRootResult} */ ( - parentNode - ).type === 'JsdocTypeGeneric' - ) { - const checkPostFixes = dot ? [ - '.', '.<>', - ] : [ - brackets === 'angle' ? '<>' : '[]', - ]; - - isGenericMatch = checkPostFixes.some((checkPostFix) => { - const preferredType = preferredTypes?.[checkPostFix]; - if ( - // Does `unifyParentAndChildTypeChecks` need to be checked here? - (unifyParentAndChildTypeChecks || isNameOfGeneric || - /* c8 ignore next 2 -- If checking `unifyParentAndChildTypeChecks` */ - (typeof preferredType === 'object' && - preferredType?.unifyParentAndChildTypeChecks)) && - preferredType !== undefined - ) { - typeName = checkPostFix; - - return true; - } - - return false; - }); - } - - const prefType = preferredTypes?.[typeNodeName]; - const directNameMatch = prefType !== undefined && - !Object.values(preferredTypes).includes(typeNodeName); - const specificUnify = typeof prefType === 'object' && - prefType?.unifyParentAndChildTypeChecks; - const unifiedSyntaxParentMatch = property && directNameMatch && (unifyParentAndChildTypeChecks || specificUnify); - isGenericMatch = isGenericMatch || Boolean(unifiedSyntaxParentMatch); - - hasMatchingPreferredType = isGenericMatch || - directNameMatch && !property; - - return [ - hasMatchingPreferredType, typeName, isGenericMatch, - ]; - }; - - /** - * Iterates strict types to see if any should be added to `invalidTypes` (and - * the the relevant strict type returned as the new preferred type). - * @param {string} typeNodeName - * @param {string|undefined} preferred - * @param {import('jsdoc-type-pratt-parser').NonRootResult|undefined} parentNode - * @param {(string|false|undefined)[][]} invalidTypes - * @returns {string|undefined} The `preferred` type string, optionally changed - */ - const checkNativeTypes = (typeNodeName, preferred, parentNode, invalidTypes) => { - let changedPreferred = preferred; - for (const strictNativeType of strictNativeTypes) { - if ( - strictNativeType === 'object' && + strictNativeType === 'object' && + ( + // This is not set to remap with exact type match (e.g., + // `object: 'Object'`), so can ignore (including if circular) + !preferredTypes?.[typeNodeName] || + // Although present on `preferredTypes` for remapping, this is a + // parent object without a parent match (and not + // `unifyParentAndChildTypeChecks`) and we don't want + // `object<>` given TypeScript issue https://github.com/microsoft/TypeScript/issues/20555 + /** + * @type {import('jsdoc-type-pratt-parser').GenericResult} + */ ( - // This is not set to remap with exact type match (e.g., - // `object: 'Object'`), so can ignore (including if circular) - !preferredTypes?.[typeNodeName] || - // Although present on `preferredTypes` for remapping, this is a - // parent object without a parent match (and not - // `unifyParentAndChildTypeChecks`) and we don't want - // `object<>` given TypeScript issue https://github.com/microsoft/TypeScript/issues/20555 - /** - * @type {import('jsdoc-type-pratt-parser').GenericResult} - */ + parentNode + )?.elements?.length && ( + /** + * @type {import('jsdoc-type-pratt-parser').GenericResult} + */ ( parentNode - )?.elements?.length && ( + )?.left?.type === 'JsdocTypeName' && /** * @type {import('jsdoc-type-pratt-parser').GenericResult} */ - ( - parentNode - )?.left?.type === 'JsdocTypeName' && - /** - * @type {import('jsdoc-type-pratt-parser').GenericResult} - */ - (parentNode)?.left?.value === 'Object' - ) + (parentNode)?.left?.value === 'Object' ) - ) { - continue; - } - - if (strictNativeType !== typeNodeName && - strictNativeType.toLowerCase() === typeNodeName.toLowerCase() && - - // Don't report if user has own map for a strict native type - (!preferredTypes || preferredTypes?.[strictNativeType] === undefined) - ) { - changedPreferred = strictNativeType; - invalidTypes.push([ - typeNodeName, changedPreferred, - ]); - break; - } + ) + ) { + continue; } - return changedPreferred; - }; - - /** - * Collect invalid type info. - * @param {string} type - * @param {string} value - * @param {string} tagName - * @param {string} nameInTag - * @param {number} idx - * @param {string|undefined} property - * @param {import('jsdoc-type-pratt-parser').NonRootResult} node - * @param {import('jsdoc-type-pratt-parser').NonRootResult|undefined} parentNode - * @param {(string|false|undefined)[][]} invalidTypes - * @returns {void} - */ - const getInvalidTypes = (type, value, tagName, nameInTag, idx, property, node, parentNode, invalidTypes) => { - let typeNodeName = type === 'JsdocTypeAny' ? '*' : value; + if (strictNativeType !== typeNodeName && + strictNativeType.toLowerCase() === typeNodeName.toLowerCase() && - const [ - hasMatchingPreferredType, - typeName, - isGenericMatch, - ] = getPreferredTypeInfo(type, typeNodeName, parentNode, property); - - let preferred; - let types; - if (hasMatchingPreferredType) { - const preferredSetting = preferredTypes[typeName]; - typeNodeName = typeName === '[]' ? typeName : typeNodeName; - - if (!preferredSetting) { - invalidTypes.push([ - typeNodeName, - ]); - } else if (typeof preferredSetting === 'string') { - preferred = preferredSetting; - invalidTypes.push([ - typeNodeName, preferred, - ]); - } else if (preferredSetting && typeof preferredSetting === 'object') { - const nextItem = preferredSetting.skipRootChecking && jsdocTagsWithPossibleType[idx + 1]; - - if (!nextItem || !nextItem.name.startsWith(`${nameInTag}.`)) { - preferred = preferredSetting.replacement; - invalidTypes.push([ - typeNodeName, - preferred, - preferredSetting.message, - ]); - } - } else { - utils.reportSettings( - 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.', - ); - - return; - } - } else if (Object.entries(structuredTags).some(([ - tag, - { - type: typs, - }, - ]) => { - types = typs; - - return tag === tagName && - Array.isArray(types) && - !types.includes(typeNodeName); - })) { + // Don't report if user has own map for a strict native type + (!preferredTypes || preferredTypes?.[strictNativeType] === undefined) + ) { + changedPreferred = strictNativeType; invalidTypes.push([ - typeNodeName, types, + typeNodeName, changedPreferred, ]); - } else if (!noDefaults && type === 'JsdocTypeName') { - preferred = checkNativeTypes(typeNodeName, preferred, parentNode, invalidTypes); - } - - // For fixer - if (preferred) { - adjustNames(type, preferred, isGenericMatch, typeNodeName, node, parentNode); + break; } - }; - - for (const [ - idx, - jsdocTag, - ] of jsdocTagsWithPossibleType.entries()) { - /** @type {(string|false|undefined)[][]} */ - const invalidTypes = []; - let typeAst; - - try { - typeAst = mode === 'permissive' ? tryParse(jsdocTag.type) : parse(jsdocTag.type, mode); - } catch { - continue; - } - - const { - name: nameInTag, - tag: tagName, - } = jsdocTag; - - traverse(typeAst, (node, parentNode, property) => { - const { - type, - value, - } = - /** - * @type {import('jsdoc-type-pratt-parser').NameResult} - */ (node); - if (![ - 'JsdocTypeAny', 'JsdocTypeName', - ].includes(type)) { - return; - } - - getInvalidTypes(type, value, tagName, nameInTag, idx, property, node, parentNode, invalidTypes); - }); - - if (invalidTypes.length) { - const fixedType = stringify(typeAst); - - /** - * @type {import('eslint').Rule.ReportFixer} - */ - const fix = (fixer) => { - return fixer.replaceText( - jsdocNode, - sourceCode.getText(jsdocNode).replace( - `{${jsdocTag.type}}`, - `{${fixedType}}`, - ), - ); - }; + } - for (const [ - badType, - preferredType = '', - msg, - ] of invalidTypes) { - const tagValue = jsdocTag.name ? ` "${jsdocTag.name}"` : ''; - if (exemptTagContexts.some(({ - tag, - types, - }) => { - return tag === tagName && - (types === true || types.includes(jsdocTag.type)); - })) { - continue; - } + return changedPreferred; +}; - report( - msg || - `Invalid JSDoc @${tagName}${tagValue} type "${badType}"` + - (preferredType ? '; ' : '.') + - (preferredType ? `prefer: ${JSON.stringify(preferredType)}.` : ''), - preferredType ? fix : null, - jsdocTag, - msg ? { - tagName, - tagValue, - } : undefined, - ); - } - } - } -}, { - iterateAllJsdocs: true, - meta: { - docs: { - description: 'Reports invalid types.', - url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-types.md#repos-sticky-header', - }, - fixable: 'code', - schema: [ - { - additionalProperties: false, - properties: { - exemptTagContexts: { - items: { - additionalProperties: false, - properties: { - tag: { - type: 'string', - }, - types: { - oneOf: [ - { - type: 'boolean', - }, - { - items: { - type: 'string', - }, - type: 'array', +export default buildRejectOrPreferRuleDefinition({ + checkNativeTypes, + schema: [ + { + additionalProperties: false, + properties: { + exemptTagContexts: { + items: { + additionalProperties: false, + properties: { + tag: { + type: 'string', + }, + types: { + oneOf: [ + { + type: 'boolean', + }, + { + items: { + type: 'string', }, - ], - }, + type: 'array', + }, + ], }, - type: 'object', }, - type: 'array', - }, - noDefaults: { - type: 'boolean', - }, - unifyParentAndChildTypeChecks: { - description: '@deprecated Use the `preferredTypes[preferredType]` setting of the same name instead', - type: 'boolean', + type: 'object', }, + type: 'array', + }, + noDefaults: { + type: 'boolean', + }, + unifyParentAndChildTypeChecks: { + description: '@deprecated Use the `preferredTypes[preferredType]` setting of the same name instead', + type: 'boolean', }, - type: 'object', }, - ], - type: 'suggestion', - }, + type: 'object', + }, + ], }); From ae4e95d5d8a8029fa8b4ba8c12e0e635a6426f5e Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 16 Sep 2025 12:16:40 +0800 Subject: [PATCH 102/189] feat: add `reject-any-type` and `reject-function-type` rules and `extraRuleDefinitions.preferTypes` option BREAKING CHANGE: The new rules are added to `recommended` configs --- .README/advanced.md | 53 ++++++ .README/rules/no-multi-asterisks.md | 2 +- .README/rules/reject-any-type.md | 21 +++ .README/rules/reject-function-type.md | 21 +++ docs/advanced.md | 56 ++++++ docs/rules/no-multi-asterisks.md | 2 +- docs/rules/reject-any-type.md | 51 ++++++ docs/rules/reject-function-type.md | 51 ++++++ src/buildRejectOrPreferRuleDefinition.js | 32 ++-- src/index-cjs.js | 49 +++-- src/index-esm.js | 37 +++- src/index.js | 83 +++++++-- src/rules.d.ts | 6 + test/index.js | 192 ++++++++++++++++++++ test/rules/assertions/rejectAnyType.js | 42 +++++ test/rules/assertions/rejectFunctionType.js | 42 +++++ test/rules/ruleNames.json | 2 + 17 files changed, 691 insertions(+), 51 deletions(-) create mode 100644 .README/rules/reject-any-type.md create mode 100644 .README/rules/reject-function-type.md create mode 100644 docs/rules/reject-any-type.md create mode 100644 docs/rules/reject-function-type.md create mode 100644 test/rules/assertions/rejectAnyType.js create mode 100644 test/rules/assertions/rejectFunctionType.js diff --git a/.README/advanced.md b/.README/advanced.md index 3eef463c8..211d14be8 100644 --- a/.README/advanced.md +++ b/.README/advanced.md @@ -164,3 +164,56 @@ export const a = (abc, def) => { }; /* eslint-enable jsdoc/forbid-Any */ ``` + +#### Preferring type structures + +When the structures in question are types, a disadvantage of the previous approach +is that one cannot perform replacements nor can one distinguish between parent and +child types for a generic. + +If targeting a type structure, you can use `extraRuleDefinitions.preferTypes`. + +While one can get this same behavior using the `preferredTypes` setting, the +advantage of creating a rule definition is that handling is distributed not to +a single rule (`jsdoc/check-types`), but to an individual rule for each preferred +type (which can then be selectively enabled and disabled). + +```js +import {jsdoc} from 'eslint-plugin-jsdoc'; + +export default [ + jsdoc({ + config: 'flat/recommended', + extraRuleDefinitions: { + preferTypes: { + // This key will be used in the rule name + promise: { + description: 'This rule disallows Promises without a generic type', + overrideSettings: { + // Uses the same keys are are available on the `preferredTypes` settings + + // This key will indicate the type node name to find + Promise: { + // This is the specific error message if reported + message: 'Add a generic type for this Promise.', + + // This can instead be a string replacement if an auto-replacement + // is desired + replacement: false, + + // If `true`, this will check in both parent and child positions + unifyParentAndChildTypeChecks: false, + }, + }, + url: 'https://example.com/Promise-rule.md', + }, + }, + }, + rules: { + // Don't forget to enable the above-defined rules + 'jsdoc/prefer-type-promise': [ + 'error', + ], + } + }) +``` diff --git a/.README/rules/no-multi-asterisks.md b/.README/rules/no-multi-asterisks.md index 1ba882026..08e1dd607 100644 --- a/.README/rules/no-multi-asterisks.md +++ b/.README/rules/no-multi-asterisks.md @@ -51,7 +51,7 @@ Prevent the likes of this: ||| |---|---| |Context|everywhere| -|Tags|(any)| +|Tags|(Any)| |Recommended|true| |Settings|| |Options|`allowWhitespace`, `preventAtEnd`, `preventAtMiddleLines`| diff --git a/.README/rules/reject-any-type.md b/.README/rules/reject-any-type.md new file mode 100644 index 000000000..1aaadf625 --- /dev/null +++ b/.README/rules/reject-any-type.md @@ -0,0 +1,21 @@ +# `reject-any-type` + +Reports use of `any` (or `*`) type within JSDoc tag types. + +||| +|---|---| +|Context|everywhere| +|Tags|`augments`, `class`, `constant`, `enum`, `implements`, `member`, `module`, `namespace`, `param`, `property`, `returns`, `throws`, `type`, `typedef`, `yields`| +|Aliases|`constructor`, `const`, `extends`, `var`, `arg`, `argument`, `prop`, `return`, `exception`, `yield`| +|Closure-only|`package`, `private`, `protected`, `public`, `static`| +|Recommended|true| +|Settings|`mode`| +|Options|| + +## Failing examples + + + +## Passing examples + + diff --git a/.README/rules/reject-function-type.md b/.README/rules/reject-function-type.md new file mode 100644 index 000000000..3e6533020 --- /dev/null +++ b/.README/rules/reject-function-type.md @@ -0,0 +1,21 @@ +# `reject-function-type` + +Reports use of `Function` type within JSDoc tag types. + +||| +|---|---| +|Context|everywhere| +|Tags|`augments`, `class`, `constant`, `enum`, `implements`, `member`, `module`, `namespace`, `param`, `property`, `returns`, `throws`, `type`, `typedef`, `yields`| +|Aliases|`constructor`, `const`, `extends`, `var`, `arg`, `argument`, `prop`, `return`, `exception`, `yield`| +|Closure-only|`package`, `private`, `protected`, `public`, `static`| +|Recommended|true| +|Settings|`mode`| +|Options|| + +## Failing examples + + + +## Passing examples + + diff --git a/docs/advanced.md b/docs/advanced.md index 688157bbf..f316c44ec 100644 --- a/docs/advanced.md +++ b/docs/advanced.md @@ -8,6 +8,7 @@ * [Uses/Tips for AST](#user-content-advanced-ast-and-selectors-uses-tips-for-ast) * [Creating your own rules](#user-content-advanced-creating-your-own-rules) * [Forbidding structures](#user-content-advanced-creating-your-own-rules-forbidding-structures) + * [Preferring type structures](#user-content-advanced-creating-your-own-rules-preferring-type-structures) @@ -184,3 +185,58 @@ export const a = (abc, def) => { }; /* eslint-enable jsdoc/forbid-Any */ ``` + + + +#### Preferring type structures + +When the structures in question are types, a disadvantage of the previous approach +is that one cannot perform replacements nor can one distinguish between parent and +child types for a generic. + +If targeting a type structure, you can use `extraRuleDefinitions.preferTypes`. + +While one can get this same behavior using the `preferredTypes` setting, the +advantage of creating a rule definition is that handling is distributed not to +a single rule (`jsdoc/check-types`), but to an individual rule for each preferred +type (which can then be selectively enabled and disabled). + +```js +import {jsdoc} from 'eslint-plugin-jsdoc'; + +export default [ + jsdoc({ + config: 'flat/recommended', + extraRuleDefinitions: { + preferTypes: { + // This key will be used in the rule name + promise: { + description: 'This rule disallows Promises without a generic type', + overrideSettings: { + // Uses the same keys are are available on the `preferredTypes` settings + + // This key will indicate the type node name to find + Promise: { + // This is the specific error message if reported + message: 'Add a generic type for this Promise.', + + // This can instead be a string replacement if an auto-replacement + // is desired + replacement: false, + + // If `true`, this will check in both parent and child positions + unifyParentAndChildTypeChecks: false, + }, + }, + url: 'https://example.com/Promise-rule.md', + }, + }, + }, + rules: { + // Don't forget to enable the above-defined rules + 'jsdoc/prefer-type-promise': [ + 'error', + ], + } + }) +``` diff --git a/docs/rules/no-multi-asterisks.md b/docs/rules/no-multi-asterisks.md index 88f2e71ba..6301896b8 100644 --- a/docs/rules/no-multi-asterisks.md +++ b/docs/rules/no-multi-asterisks.md @@ -65,7 +65,7 @@ Prevent the likes of this: ||| |---|---| |Context|everywhere| -|Tags|(any)| +|Tags|(Any)| |Recommended|true| |Settings|| |Options|`allowWhitespace`, `preventAtEnd`, `preventAtMiddleLines`| diff --git a/docs/rules/reject-any-type.md b/docs/rules/reject-any-type.md new file mode 100644 index 000000000..35805f8b8 --- /dev/null +++ b/docs/rules/reject-any-type.md @@ -0,0 +1,51 @@ + + +# reject-any-type + +Reports use of `any` (or `*`) type within JSDoc tag types. + +||| +|---|---| +|Context|everywhere| +|Tags|`augments`, `class`, `constant`, `enum`, `implements`, `member`, `module`, `namespace`, `param`, `property`, `returns`, `throws`, `type`, `typedef`, `yields`| +|Aliases|`constructor`, `const`, `extends`, `var`, `arg`, `argument`, `prop`, `return`, `exception`, `yield`| +|Closure-only|`package`, `private`, `protected`, `public`, `static`| +|Recommended|true| +|Settings|`mode`| +|Options|| + + + +## Failing examples + +The following patterns are considered problems: + +````ts +/** + * @param {any} abc + */ +function quux () {} +// Message: Prefer a more specific type to `any` + +/** + * @param {string|Promise} abc + */ +function quux () {} +// Message: Prefer a more specific type to `any` +```` + + + + + +## Passing examples + +The following patterns are not considered problems: + +````ts +/** + * @param {SomeType} abc + */ +function quux () {} +```` + diff --git a/docs/rules/reject-function-type.md b/docs/rules/reject-function-type.md new file mode 100644 index 000000000..f78016379 --- /dev/null +++ b/docs/rules/reject-function-type.md @@ -0,0 +1,51 @@ + + +# reject-function-type + +Reports use of `Function` type within JSDoc tag types. + +||| +|---|---| +|Context|everywhere| +|Tags|`augments`, `class`, `constant`, `enum`, `implements`, `member`, `module`, `namespace`, `param`, `property`, `returns`, `throws`, `type`, `typedef`, `yields`| +|Aliases|`constructor`, `const`, `extends`, `var`, `arg`, `argument`, `prop`, `return`, `exception`, `yield`| +|Closure-only|`package`, `private`, `protected`, `public`, `static`| +|Recommended|true| +|Settings|`mode`| +|Options|| + + + +## Failing examples + +The following patterns are considered problems: + +````ts +/** + * @param {Function} abc + */ +function quux () {} +// Message: Prefer a more specific type to `Function` + +/** + * @param {string|Array} abc + */ +function quux () {} +// Message: Prefer a more specific type to `Function` +```` + + + + + +## Passing examples + +The following patterns are not considered problems: + +````ts +/** + * @param {SomeType} abc + */ +function quux () {} +```` + diff --git a/src/buildRejectOrPreferRuleDefinition.js b/src/buildRejectOrPreferRuleDefinition.js index c29142168..0d37181ff 100644 --- a/src/buildRejectOrPreferRuleDefinition.js +++ b/src/buildRejectOrPreferRuleDefinition.js @@ -97,10 +97,11 @@ const infoUC = { /** * @param {{ - * checkNativeTypes: import('./rules/checkTypes.js').CheckNativeTypes|null - * overrideSettings?: null, + * checkNativeTypes?: import('./rules/checkTypes.js').CheckNativeTypes|null + * overrideSettings?: import('./iterateJsdoc.js').Settings['preferredTypes']|null, * description?: string, * schema?: import('eslint').Rule.RuleMetaData['schema'], + * typeName?: string, * url?: string, * }} cfg * @returns {import('@eslint/core').RuleDefinition< @@ -109,7 +110,8 @@ const infoUC = { */ export const buildRejectOrPreferRuleDefinition = ({ checkNativeTypes = null, - description = 'Reports invalid types.', + typeName, + description = typeName ?? 'Reports invalid types.', overrideSettings = null, schema = [], url = 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-types.md#repos-sticky-header', @@ -136,10 +138,14 @@ export const buildRejectOrPreferRuleDefinition = ({ * }} */ { - mode = settings.mode, + mode, preferredTypes: preferredTypesOriginal, - structuredTags = {}, - } = overrideSettings ?? settings; + structuredTags, + } = overrideSettings ? { + mode: settings.mode, + preferredTypes: overrideSettings, + structuredTags: {}, + } : settings; const injectObjectPreferredTypes = !('Object' in preferredTypesOriginal || 'object' in preferredTypesOriginal || @@ -199,7 +205,7 @@ export const buildRejectOrPreferRuleDefinition = ({ const getPreferredTypeInfo = (_type, typeNodeName, parentNode, property) => { let hasMatchingPreferredType = false; let isGenericMatch = false; - let typeName = typeNodeName; + let typName = typeNodeName; const isNameOfGeneric = parentNode !== undefined && parentNode.type === 'JsdocTypeGeneric' && property === 'left'; @@ -228,7 +234,7 @@ export const buildRejectOrPreferRuleDefinition = ({ ) && preferredType !== undefined ) { - typeName += checkPostFix; + typName += checkPostFix; return true; } @@ -259,7 +265,7 @@ export const buildRejectOrPreferRuleDefinition = ({ preferredType?.unifyParentAndChildTypeChecks)) && preferredType !== undefined ) { - typeName = checkPostFix; + typName = checkPostFix; return true; } @@ -280,7 +286,7 @@ export const buildRejectOrPreferRuleDefinition = ({ directNameMatch && !property; return [ - hasMatchingPreferredType, typeName, isGenericMatch, + hasMatchingPreferredType, typName, isGenericMatch, ]; }; @@ -302,15 +308,15 @@ export const buildRejectOrPreferRuleDefinition = ({ const [ hasMatchingPreferredType, - typeName, + typName, isGenericMatch, ] = getPreferredTypeInfo(type, typeNodeName, parentNode, property); let preferred; let types; if (hasMatchingPreferredType) { - const preferredSetting = preferredTypes[typeName]; - typeNodeName = typeName === '[]' ? typeName : typeNodeName; + const preferredSetting = preferredTypes[typName]; + typeNodeName = typName === '[]' ? typName : typeNodeName; if (!preferredSetting) { invalidTypes.push([ diff --git a/src/index-cjs.js b/src/index-cjs.js index b49a385d1..d08172bc8 100644 --- a/src/index-cjs.js +++ b/src/index-cjs.js @@ -1,9 +1,9 @@ import { buildForbidRuleDefinition, } from './buildForbidRuleDefinition.js'; -// import { -// buildRejectOrPreferRuleDefinition, -// } from './buildRejectOrPreferRuleDefinition.js'; +import { + buildRejectOrPreferRuleDefinition, +} from './buildRejectOrPreferRuleDefinition.js'; import { getJsdocProcessorPlugin, } from './getJsdocProcessorPlugin.js'; @@ -110,20 +110,33 @@ index.rules = { 'no-restricted-syntax': noRestrictedSyntax, 'no-types': noTypes, 'no-undefined-types': noUndefinedTypes, - // 'reject-any-type': buildRejectOrPreferRuleDefinition({ - // contexts: [ - // { - // unifyParentAndChildTypeChecks: true, - // }, - // ], - // }), - // 'reject-function-type': buildRejectOrPreferRuleDefinition({ - // contexts: [ - // { - // unifyParentAndChildTypeChecks: true, - // }, - // ], - // }), + 'reject-any-type': buildRejectOrPreferRuleDefinition({ + description: 'Reports use of `any` or `*` type', + overrideSettings: { + '*': { + message: 'Prefer a more specific type to `*`', + replacement: false, + unifyParentAndChildTypeChecks: true, + }, + any: { + message: 'Prefer a more specific type to `any`', + replacement: false, + unifyParentAndChildTypeChecks: true, + }, + }, + url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/reject-any-type.md#repos-sticky-header', + }), + 'reject-function-type': buildRejectOrPreferRuleDefinition({ + description: 'Reports use of `Function` type', + overrideSettings: { + Function: { + message: 'Prefer a more specific type to `Function`', + replacement: false, + unifyParentAndChildTypeChecks: true, + }, + }, + url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/reject-function-type.md#repos-sticky-header', + }), 'require-asterisk-prefix': requireAsteriskPrefix, 'require-description': requireDescription, 'require-description-complete-sentence': requireDescriptionCompleteSentence, @@ -235,6 +248,8 @@ const createRecommendedRuleset = (warnOrError, flatName) => { 'jsdoc/no-restricted-syntax': 'off', 'jsdoc/no-types': 'off', 'jsdoc/no-undefined-types': warnOrError, + 'jsdoc/reject-any-type': warnOrError, + 'jsdoc/reject-function-type': warnOrError, 'jsdoc/require-asterisk-prefix': 'off', 'jsdoc/require-description': 'off', 'jsdoc/require-description-complete-sentence': 'off', diff --git a/src/index-esm.js b/src/index-esm.js index 9ed80fb38..09e47db9a 100644 --- a/src/index-esm.js +++ b/src/index-esm.js @@ -8,6 +8,9 @@ import index from './index-cjs.js'; import { buildForbidRuleDefinition, } from './buildForbidRuleDefinition.js'; +import { + buildRejectOrPreferRuleDefinition, +} from './buildRejectOrPreferRuleDefinition.js'; // eslint-disable-next-line unicorn/prefer-export-from --- Reusing `index` export default index; @@ -22,7 +25,7 @@ export default index; * settings?: Partial, * rules?: {[key in keyof import('./rules.d.ts').Rules]?: import('eslint').Linter.RuleEntry}, * extraRuleDefinitions?: { - * forbid: { + * forbid?: { * [contextName: string]: { * description?: string, * url?: string, @@ -32,6 +35,19 @@ export default index; * comment: string * })[] * } + * }, + * preferTypes?: { + * [typeName: string]: { + * description: string, + * overrideSettings: { + * [typeNodeName: string]: { + * message: string, + * replacement?: false|string, + * unifyParentAndChildTypeChecks?: boolean, + * } + * }, + * url: string, + * } * } * } * } @@ -125,6 +141,25 @@ export const jsdoc = function (cfg) { }); } } + + if (cfg.extraRuleDefinitions.preferTypes) { + for (const [ + typeName, + { + description, + overrideSettings, + url, + }, + ] of Object.entries(cfg.extraRuleDefinitions.preferTypes)) { + outputConfig.plugins.jsdoc.rules[`prefer-type-${typeName}`] = + buildRejectOrPreferRuleDefinition({ + description, + overrideSettings, + typeName, + url, + }); + } + } } } diff --git a/src/index.js b/src/index.js index 5f3d0d456..358afc454 100644 --- a/src/index.js +++ b/src/index.js @@ -7,9 +7,9 @@ import { import { buildForbidRuleDefinition, } from './buildForbidRuleDefinition.js'; -// import { -// buildRejectOrPreferRuleDefinition, -// } from './buildRejectOrPreferRuleDefinition.js'; +import { + buildRejectOrPreferRuleDefinition, +} from './buildRejectOrPreferRuleDefinition.js'; import { getJsdocProcessorPlugin, } from './getJsdocProcessorPlugin.js'; @@ -116,20 +116,33 @@ index.rules = { 'no-restricted-syntax': noRestrictedSyntax, 'no-types': noTypes, 'no-undefined-types': noUndefinedTypes, - // 'reject-any-type': buildRejectOrPreferRuleDefinition({ - // contexts: [ - // { - // unifyParentAndChildTypeChecks: true, - // }, - // ], - // }), - // 'reject-function-type': buildRejectOrPreferRuleDefinition({ - // contexts: [ - // { - // unifyParentAndChildTypeChecks: true, - // }, - // ], - // }), + 'reject-any-type': buildRejectOrPreferRuleDefinition({ + description: 'Reports use of `any` or `*` type', + overrideSettings: { + '*': { + message: 'Prefer a more specific type to `*`', + replacement: false, + unifyParentAndChildTypeChecks: true, + }, + any: { + message: 'Prefer a more specific type to `any`', + replacement: false, + unifyParentAndChildTypeChecks: true, + }, + }, + url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/reject-any-type.md#repos-sticky-header', + }), + 'reject-function-type': buildRejectOrPreferRuleDefinition({ + description: 'Reports use of `Function` type', + overrideSettings: { + Function: { + message: 'Prefer a more specific type to `Function`', + replacement: false, + unifyParentAndChildTypeChecks: true, + }, + }, + url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/reject-function-type.md#repos-sticky-header', + }), 'require-asterisk-prefix': requireAsteriskPrefix, 'require-description': requireDescription, 'require-description-complete-sentence': requireDescriptionCompleteSentence, @@ -241,6 +254,8 @@ const createRecommendedRuleset = (warnOrError, flatName) => { 'jsdoc/no-restricted-syntax': 'off', 'jsdoc/no-types': 'off', 'jsdoc/no-undefined-types': warnOrError, + 'jsdoc/reject-any-type': warnOrError, + 'jsdoc/reject-function-type': warnOrError, 'jsdoc/require-asterisk-prefix': 'off', 'jsdoc/require-description': 'off', 'jsdoc/require-description-complete-sentence': 'off', @@ -626,7 +641,7 @@ export default index; * settings?: Partial, * rules?: {[key in keyof import('./rules.d.ts').Rules]?: import('eslint').Linter.RuleEntry}, * extraRuleDefinitions?: { - * forbid: { + * forbid?: { * [contextName: string]: { * description?: string, * url?: string, @@ -636,6 +651,19 @@ export default index; * comment: string * })[] * } + * }, + * preferTypes?: { + * [typeName: string]: { + * description: string, + * overrideSettings: { + * [typeNodeName: string]: { + * message: string, + * replacement?: false|string, + * unifyParentAndChildTypeChecks?: boolean, + * } + * }, + * url: string, + * } * } * } * } @@ -729,6 +757,25 @@ export const jsdoc = function (cfg) { }); } } + + if (cfg.extraRuleDefinitions.preferTypes) { + for (const [ + typeName, + { + description, + overrideSettings, + url, + }, + ] of Object.entries(cfg.extraRuleDefinitions.preferTypes)) { + outputConfig.plugins.jsdoc.rules[`prefer-type-${typeName}`] = + buildRejectOrPreferRuleDefinition({ + description, + overrideSettings, + typeName, + url, + }); + } + } } } diff --git a/src/rules.d.ts b/src/rules.d.ts index 04b9bf961..2b9b822fe 100644 --- a/src/rules.d.ts +++ b/src/rules.d.ts @@ -410,6 +410,12 @@ export interface Rules { } ]; + /** Reports use of `any` or `*` type */ + "jsdoc/reject-any-type": []; + + /** Reports use of `Function` type */ + "jsdoc/reject-function-type": []; + /** Requires that each JSDoc line starts with an `*`. */ "jsdoc/require-asterisk-prefix": | [] diff --git a/test/index.js b/test/index.js index d701b6ca0..4de54efa8 100644 --- a/test/index.js +++ b/test/index.js @@ -489,3 +489,195 @@ for (const [ ruleName: `forbid-${contextName}`, }); } + +for (const [ + typeName, + overrideSettings, + assertions, + description, + url, +] of + /** + * @type {[ + * string, + * { + * [key: string]: { + * message: string, + * replacement?: false|string, + * unifyParentAndChildTypeChecks?: boolean + * } + * }, + * import('./rules/index.js').TestCases, + * string, + * string + * ][] + * } + */ ([ + [ + 'promise', + { + Promise: { + message: 'Add a generic type for this Promise.', + replacement: false, + unifyParentAndChildTypeChecks: false, + }, + }, + { + invalid: [ + { + code: ` + /** + * @type {Promise} + */ + `, + errors: [ + { + line: 3, + message: 'Add a generic type for this Promise.', + }, + ], + }, + ], + valid: [ + { + code: ` + /** + * @type {Promise} + */ + `, + }, + { + code: ` + /** + * @type {Promise} + */ + `, + }, + ], + }, + 'Disallow Promises without a generic type', + 'https://example.com/Promise-rule.md', + ], + [ + 'object', + { + Object: { + message: 'Use the specific object type or add `object` to ' + + 'a typedef if truly arbitrary', + replacement: 'object', + unifyParentAndChildTypeChecks: false, + }, + }, + { + invalid: [ + { + code: ` + /** + * @type {Object} + */ + `, + errors: [ + { + line: 3, + message: 'Use the specific object type or add `object` to ' + + 'a typedef if truly arbitrary', + }, + ], + output: ` + /** + * @type {object} + */ + `, + }, + ], + valid: [ + { + code: ` + /** + * @type {object} + */ + `, + }, + { + code: ` + /** + * @type {Object} + */ + `, + }, + ], + }, + 'Replace `Object` with `object', + 'https://example.com/Object-rule.md', + ], + [ + 'object-parent', + { + 'object<>': { + message: 'Use the upper-case form for current TypeScript ' + + 'JSDoc compatibility and generic-like appearance for a parent', + replacement: 'Object<>', + }, + }, + { + invalid: [ + { + code: ` + /** + * @type {object} + */ + `, + errors: [ + { + line: 3, + message: 'Use the upper-case form for current TypeScript ' + + 'JSDoc compatibility and generic-like appearance for a parent', + }, + ], + output: ` + /** + * @type {Object} + */ + `, + }, + ], + valid: [ + { + code: ` + /** + * @type {Object} + */ + `, + }, + { + code: ` + /** + * @type {object} + */ + `, + }, + ], + }, + 'Replace `object<>` with `Object<>', + 'https://example.com/Object-parent-rule.md', + ], + ])) { + runRuleTests({ + assertions, + config: jsdoc({ + extraRuleDefinitions: { + preferTypes: { + [typeName]: { + description, + overrideSettings, + url, + }, + }, + }, + }).plugins?.jsdoc, + languageOptions: { + parser: typescriptEslintParser, + }, + ruleName: `prefer-type-${typeName}`, + }); +} diff --git a/test/rules/assertions/rejectAnyType.js b/test/rules/assertions/rejectAnyType.js new file mode 100644 index 000000000..6dc033a4c --- /dev/null +++ b/test/rules/assertions/rejectAnyType.js @@ -0,0 +1,42 @@ +export default { + invalid: [ + { + code: ` + /** + * @param {any} abc + */ + function quux () {} + `, + errors: [ + { + line: 3, + message: 'Prefer a more specific type to `any`', + }, + ], + }, + { + code: ` + /** + * @param {string|Promise} abc + */ + function quux () {} + `, + errors: [ + { + line: 3, + message: 'Prefer a more specific type to `any`', + }, + ], + }, + ], + valid: [ + { + code: ` + /** + * @param {SomeType} abc + */ + function quux () {} + `, + }, + ], +}; diff --git a/test/rules/assertions/rejectFunctionType.js b/test/rules/assertions/rejectFunctionType.js new file mode 100644 index 000000000..f8297ff8c --- /dev/null +++ b/test/rules/assertions/rejectFunctionType.js @@ -0,0 +1,42 @@ +export default { + invalid: [ + { + code: ` + /** + * @param {Function} abc + */ + function quux () {} + `, + errors: [ + { + line: 3, + message: 'Prefer a more specific type to `Function`', + }, + ], + }, + { + code: ` + /** + * @param {string|Array} abc + */ + function quux () {} + `, + errors: [ + { + line: 3, + message: 'Prefer a more specific type to `Function`', + }, + ], + }, + ], + valid: [ + { + code: ` + /** + * @param {SomeType} abc + */ + function quux () {} + `, + }, + ], +}; diff --git a/test/rules/ruleNames.json b/test/rules/ruleNames.json index 31c48d291..29b483221 100644 --- a/test/rules/ruleNames.json +++ b/test/rules/ruleNames.json @@ -29,6 +29,8 @@ "no-restricted-syntax", "no-types", "no-undefined-types", + "reject-any-type", + "reject-function-type", "require-asterisk-prefix", "require-description", "require-description-complete-sentence", From a3bb85e6faba22d5c3eb19e84ed70ea0005f369e Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 16 Sep 2025 18:56:43 +0800 Subject: [PATCH 103/189] feat(`require-param`): add `interfaceExemptsParamsCheck` option; fixes #1511 (#1521) --- .README/rules/require-param.md | 11 ++- docs/rules/require-param.md | 50 ++++++++++- src/rules.d.ts | 1 + src/rules/requireParam.js | 20 +++++ test/rules/assertions/requireParam.js | 121 ++++++++++++++++++++++++++ 5 files changed, 201 insertions(+), 2 deletions(-) diff --git a/.README/rules/require-param.md b/.README/rules/require-param.md index 978f055c2..db665383c 100644 --- a/.README/rules/require-param.md +++ b/.README/rules/require-param.md @@ -374,6 +374,15 @@ supplied as default values. Defaults to `false`. Set to `true` to ignore reporting when all params are missing. Defaults to `false`. +### `interfaceExemptsParamsCheck` + +Set if you wish TypeScript interfaces to exempt checks for the existence of +`@param`'s. + +Will check for a type defining the function itself (on a variable +declaration) or if there is a single destructured object with a type. +Defaults to `false`. + ## Context and settings | | | @@ -382,7 +391,7 @@ Set to `true` to ignore reporting when all params are missing. Defaults to | Tags | `param` | | Aliases | `arg`, `argument` | |Recommended | true| -| Options |`autoIncrementBase`, `checkConstructors`, `checkDestructured`, `checkDestructuredRoots`, `checkGetters`, `checkRestProperty`, `checkSetters`, `checkTypesPattern`, `contexts`, `enableFixer`, `enableRestElementFixer`, `enableRootFixer`, `exemptedBy`, `ignoreWhenAllParamsMissing`, `unnamedRootBase`, `useDefaultObjectProperties`| +| Options |`autoIncrementBase`, `checkConstructors`, `checkDestructured`, `checkDestructuredRoots`, `checkGetters`, `checkRestProperty`, `checkSetters`, `checkTypesPattern`, `contexts`, `enableFixer`, `enableRestElementFixer`, `enableRootFixer`, `exemptedBy`, `ignoreWhenAllParamsMissing`, `interfaceExemptsParamsCheck`, `unnamedRootBase`, `useDefaultObjectProperties`| | Settings | `ignoreReplacesDocs`, `overrideReplacesDocs`, `augmentsExtendsReplacesDocs`, `implementsReplacesDocs`| ## Failing examples diff --git a/docs/rules/require-param.md b/docs/rules/require-param.md index 281c7190c..0dc07fd70 100644 --- a/docs/rules/require-param.md +++ b/docs/rules/require-param.md @@ -24,6 +24,7 @@ * [`checkDestructuredRoots`](#user-content-require-param-options-checkdestructuredroots) * [`useDefaultObjectProperties`](#user-content-require-param-options-usedefaultobjectproperties) * [`ignoreWhenAllParamsMissing`](#user-content-require-param-options-ignorewhenallparamsmissing) + * [`interfaceExemptsParamsCheck`](#user-content-require-param-options-interfaceexemptsparamscheck) * [Context and settings](#user-content-require-param-context-and-settings) * [Failing examples](#user-content-require-param-failing-examples) * [Passing examples](#user-content-require-param-passing-examples) @@ -445,6 +446,17 @@ supplied as default values. Defaults to `false`. Set to `true` to ignore reporting when all params are missing. Defaults to `false`. + + +### interfaceExemptsParamsCheck + +Set if you wish TypeScript interfaces to exempt checks for the existence of +`@param`'s. + +Will check for a type defining the function itself (on a variable +declaration) or if there is a single destructured object with a type. +Defaults to `false`. + ## Context and settings @@ -455,7 +467,7 @@ Set to `true` to ignore reporting when all params are missing. Defaults to | Tags | `param` | | Aliases | `arg`, `argument` | |Recommended | true| -| Options |`autoIncrementBase`, `checkConstructors`, `checkDestructured`, `checkDestructuredRoots`, `checkGetters`, `checkRestProperty`, `checkSetters`, `checkTypesPattern`, `contexts`, `enableFixer`, `enableRestElementFixer`, `enableRootFixer`, `exemptedBy`, `ignoreWhenAllParamsMissing`, `unnamedRootBase`, `useDefaultObjectProperties`| +| Options |`autoIncrementBase`, `checkConstructors`, `checkDestructured`, `checkDestructuredRoots`, `checkGetters`, `checkRestProperty`, `checkSetters`, `checkTypesPattern`, `contexts`, `enableFixer`, `enableRestElementFixer`, `enableRootFixer`, `exemptedBy`, `ignoreWhenAllParamsMissing`, `interfaceExemptsParamsCheck`, `unnamedRootBase`, `useDefaultObjectProperties`| | Settings | `ignoreReplacesDocs`, `overrideReplacesDocs`, `augmentsExtendsReplacesDocs`, `implementsReplacesDocs`| @@ -1185,6 +1197,25 @@ function quux (a, b) {} export type Test = (foo: number) => string; // "jsdoc/require-param": ["error"|"warn", {"contexts":["TSFunctionType"]}] // Message: Missing JSDoc @param "foo" declaration. + +/** + * + */ +const quux = function quux (foo) { +}; +// "jsdoc/require-param": ["error"|"warn", {"interfaceExemptsParamsCheck":true}] +// Message: Missing JSDoc @param "foo" declaration. + +/** + * + */ +function quux ({ + abc, + def +}) { +} +// "jsdoc/require-param": ["error"|"warn", {"interfaceExemptsParamsCheck":true}] +// Message: Missing JSDoc @param "root0" declaration. ```` @@ -1853,5 +1884,22 @@ function myFunction(foo: string): void; */ function myFunction(): void; function myFunction(foo?: string) {} + +/** + * + */ +const quux: FunctionInterface = function quux (foo) { +}; +// "jsdoc/require-param": ["error"|"warn", {"interfaceExemptsParamsCheck":true}] + +/** + * + */ +function quux ({ + abc, + def +}: FunctionInterface) { +} +// "jsdoc/require-param": ["error"|"warn", {"interfaceExemptsParamsCheck":true}] ```` diff --git a/src/rules.d.ts b/src/rules.d.ts index 2b9b822fe..53f21ec79 100644 --- a/src/rules.d.ts +++ b/src/rules.d.ts @@ -591,6 +591,7 @@ export interface Rules { enableRootFixer?: boolean; exemptedBy?: string[]; ignoreWhenAllParamsMissing?: boolean; + interfaceExemptsParamsCheck?: boolean; unnamedRootBase?: string[]; useDefaultObjectProperties?: boolean; } diff --git a/src/rules/requireParam.js b/src/rules/requireParam.js index c3f0bcc68..ed0294dcb 100644 --- a/src/rules/requireParam.js +++ b/src/rules/requireParam.js @@ -35,6 +35,7 @@ const rootNamer = (desiredRoots, currentIndex) => { export default iterateJsdoc(({ context, jsdoc, + node, utils, }) => { /* eslint-enable complexity -- Temporary */ @@ -57,12 +58,28 @@ export default iterateJsdoc(({ enableRestElementFixer = true, enableRootFixer = true, ignoreWhenAllParamsMissing = false, + interfaceExemptsParamsCheck = false, unnamedRootBase = [ 'root', ], useDefaultObjectProperties = false, } = context.options[0] || {}; + if (interfaceExemptsParamsCheck) { + if (node && 'params' in node && node.params.length === 1 && + node.params?.[0] && typeof node.params[0] === 'object' && + node.params[0].type === 'ObjectPattern' && + 'typeAnnotation' in node.params[0] && node.params[0].typeAnnotation + ) { + return; + } + + if (node && node.parent.type === 'VariableDeclarator' && + 'typeAnnotation' in node.parent.id && node.parent.id.typeAnnotation) { + return; + } + } + const preferredTagName = /** @type {string} */ (utils.getPreferredTagName({ tagName: 'param', })); @@ -579,6 +596,9 @@ export default iterateJsdoc(({ ignoreWhenAllParamsMissing: { type: 'boolean', }, + interfaceExemptsParamsCheck: { + type: 'boolean', + }, unnamedRootBase: { items: { type: 'string', diff --git a/test/rules/assertions/requireParam.js b/test/rules/assertions/requireParam.js index 5d4d13d57..11296fb89 100644 --- a/test/rules/assertions/requireParam.js +++ b/test/rules/assertions/requireParam.js @@ -2587,6 +2587,87 @@ export default /** @type {import('../index.js').TestCases} */ ({ export type Test = (foo: number) => string; `, }, + { + code: ` + /** + * + */ + const quux = function quux (foo) { + }; + `, + errors: [ + { + line: 2, + message: 'Missing JSDoc @param "foo" declaration.', + }, + ], + languageOptions: { + parser: typescriptEslintParser, + sourceType: 'module', + }, + options: [ + { + interfaceExemptsParamsCheck: true, + }, + ], + output: ` + /** + * + * @param foo + */ + const quux = function quux (foo) { + }; + `, + }, + + { + code: ` + /** + * + */ + function quux ({ + abc, + def + }) { + } + `, + errors: [ + { + line: 2, + message: 'Missing JSDoc @param "root0" declaration.', + }, + { + line: 2, + message: 'Missing JSDoc @param "root0.abc" declaration.', + }, + { + line: 2, + message: 'Missing JSDoc @param "root0.def" declaration.', + }, + ], + languageOptions: { + parser: typescriptEslintParser, + sourceType: 'module', + }, + options: [ + { + interfaceExemptsParamsCheck: true, + }, + ], + output: ` + /** + * + * @param root0 + * @param root0.abc + * @param root0.def + */ + function quux ({ + abc, + def + }) { + } + `, + }, ], valid: [ { @@ -3695,5 +3776,45 @@ export default /** @type {import('../index.js').TestCases} */ ({ sourceType: 'module', }, }, + { + code: ` + /** + * + */ + const quux: FunctionInterface = function quux (foo) { + }; + `, + languageOptions: { + parser: typescriptEslintParser, + sourceType: 'module', + }, + options: [ + { + interfaceExemptsParamsCheck: true, + }, + ], + }, + + { + code: ` + /** + * + */ + function quux ({ + abc, + def + }: FunctionInterface) { + } + `, + languageOptions: { + parser: typescriptEslintParser, + sourceType: 'module', + }, + options: [ + { + interfaceExemptsParamsCheck: true, + }, + ], + }, ], }); From 3951bca6849b077361f160c6f8133198f4e7a9a7 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 16 Sep 2025 21:02:59 +0800 Subject: [PATCH 104/189] docs(README): add missing rules (#1522) --- .README/README.md | 2 ++ README.md | 2 ++ 2 files changed, 4 insertions(+) diff --git a/.README/README.md b/.README/README.md index 107c45add..892c29247 100644 --- a/.README/README.md +++ b/.README/README.md @@ -404,6 +404,8 @@ non-default-recommended fixer). |||[no-restricted-syntax](./docs/rules/no-restricted-syntax.md#readme)|Reports when certain comment structures are present| |On in TS|:wrench:|[no-types](./docs/rules/no-types.md#readme)|Prohibits types on `@param` or `@returns` (redundant with TypeScript)| |:heavy_check_mark: (off in TS and TS flavor)||[no-undefined-types](./docs/rules/no-undefined-types.md#readme)|Besides some expected built-in types, prohibits any types not specified as globals or within `@typedef` | +|:heavy_check_mark:||[reject-any-type](./docs/rules/reject-any-type.md#readme)|Reports use of `any` (or `*`) type within JSDoc tag types| +|:heavy_check_mark:||[reject-function-type](./docs/rules/reject-function-type.md#readme)|Reports use of `Function` type within JSDoc tag types| ||:wrench:|[require-asterisk-prefix](./docs/rules/require-asterisk-prefix.md#readme)|Requires that each JSDoc line starts with an `*`| |||[require-description](./docs/rules/require-description.md#readme)|Requires that all functions (and potentially other contexts) have a description.| ||:wrench:|[require-description-complete-sentence](./docs/rules/require-description-complete-sentence.md#readme)|Requires that block description, explicit `@description`, and `@param`/`@returns` tag descriptions are written in complete sentences| diff --git a/README.md b/README.md index f4fbd5cc8..830ecb305 100644 --- a/README.md +++ b/README.md @@ -441,6 +441,8 @@ non-default-recommended fixer). |||[no-restricted-syntax](./docs/rules/no-restricted-syntax.md#readme)|Reports when certain comment structures are present| |On in TS|:wrench:|[no-types](./docs/rules/no-types.md#readme)|Prohibits types on `@param` or `@returns` (redundant with TypeScript)| |:heavy_check_mark: (off in TS and TS flavor)||[no-undefined-types](./docs/rules/no-undefined-types.md#readme)|Besides some expected built-in types, prohibits any types not specified as globals or within `@typedef` | +|:heavy_check_mark:||[reject-any-type](./docs/rules/reject-any-type.md#readme)|Reports use of `any` (or `*`) type within JSDoc tag types| +|:heavy_check_mark:||[reject-function-type](./docs/rules/reject-function-type.md#readme)|Reports use of `Function` type within JSDoc tag types| ||:wrench:|[require-asterisk-prefix](./docs/rules/require-asterisk-prefix.md#readme)|Requires that each JSDoc line starts with an `*`| |||[require-description](./docs/rules/require-description.md#readme)|Requires that all functions (and potentially other contexts) have a description.| ||:wrench:|[require-description-complete-sentence](./docs/rules/require-description-complete-sentence.md#readme)|Requires that block description, explicit `@description`, and `@param`/`@returns` tag descriptions are written in complete sentences| From 8c270b3753c8704493082871a3a51e9ef916ecdc Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Wed, 17 Sep 2025 08:22:34 +0800 Subject: [PATCH 105/189] test(`reject-any-type`): cover asterisk (#1523) --- docs/rules/reject-any-type.md | 12 +++++++++++ test/rules/assertions/rejectAnyType.js | 28 ++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/docs/rules/reject-any-type.md b/docs/rules/reject-any-type.md index 35805f8b8..f0c29cc6b 100644 --- a/docs/rules/reject-any-type.md +++ b/docs/rules/reject-any-type.md @@ -27,11 +27,23 @@ The following patterns are considered problems: function quux () {} // Message: Prefer a more specific type to `any` +/** + * @param {*} abc + */ +function quux () {} +// Message: Prefer a more specific type to `*` + /** * @param {string|Promise} abc */ function quux () {} // Message: Prefer a more specific type to `any` + +/** + * @param {Array<*>|number} abc + */ +function quux () {} +// Message: Prefer a more specific type to `*` ```` diff --git a/test/rules/assertions/rejectAnyType.js b/test/rules/assertions/rejectAnyType.js index 6dc033a4c..29dc8de2b 100644 --- a/test/rules/assertions/rejectAnyType.js +++ b/test/rules/assertions/rejectAnyType.js @@ -14,6 +14,20 @@ export default { }, ], }, + { + code: ` + /** + * @param {*} abc + */ + function quux () {} + `, + errors: [ + { + line: 3, + message: 'Prefer a more specific type to `*`', + }, + ], + }, { code: ` /** @@ -28,6 +42,20 @@ export default { }, ], }, + { + code: ` + /** + * @param {Array<*>|number} abc + */ + function quux () {} + `, + errors: [ + { + line: 3, + message: 'Prefer a more specific type to `*`', + }, + ], + }, ], valid: [ { From 1cf93b5a04ce11e676dcaf9bfaf16f42984795ac Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Wed, 17 Sep 2025 18:10:12 +0800 Subject: [PATCH 106/189] fix(`type-formatting`): remove `propertyIndent` option; fixes #1524 (#1525) This option was particularly problematic in type contexts --- .README/rules/type-formatting.md | 2 +- docs/rules/type-formatting.md | 24 +--- src/rules/typeFormatting.js | 39 ++++--- test/rules/assertions/typeFormatting.js | 148 ++++++++++++------------ 4 files changed, 96 insertions(+), 117 deletions(-) diff --git a/.README/rules/type-formatting.md b/.README/rules/type-formatting.md index d38429bd6..916f7b2fc 100644 --- a/.README/rules/type-formatting.md +++ b/.README/rules/type-formatting.md @@ -89,7 +89,7 @@ Determines the spacing to add to unions (`|`). Defaults to a single space (`" "` |Tags|`param`, `property`, `returns`, `this`, `throws`, `type`, `typedef`, `yields`| |Recommended|false| |Settings|`mode`| -|Options|`arrayBrackets`, `enableFixer`, `genericDot`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `objectFieldSeparatorOptionalLinebreak`, `objectFieldSeparatorTrailingPunctuation`, `propertyQuotes`, `separatorForSingleObjectField`, `stringQuotes`, `typeBracketSpacing`, `unionSpacing`| +|Options|`arrayBrackets`, `enableFixer`, `genericDot`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `objectFieldSeparatorOptionalLinebreak`, `objectFieldSeparatorTrailingPunctuation`, `separatorForSingleObjectField`, `stringQuotes`, `typeBracketSpacing`, `unionSpacing`| ## Failing examples diff --git a/docs/rules/type-formatting.md b/docs/rules/type-formatting.md index 223f093f0..e49fb0380 100644 --- a/docs/rules/type-formatting.md +++ b/docs/rules/type-formatting.md @@ -119,7 +119,7 @@ Determines the spacing to add to unions (`|`). Defaults to a single space (`" "` |Tags|`param`, `property`, `returns`, `this`, `throws`, `type`, `typedef`, `yields`| |Recommended|false| |Settings|`mode`| -|Options|`arrayBrackets`, `enableFixer`, `genericDot`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `objectFieldSeparatorOptionalLinebreak`, `objectFieldSeparatorTrailingPunctuation`, `propertyQuotes`, `separatorForSingleObjectField`, `stringQuotes`, `typeBracketSpacing`, `unionSpacing`| +|Options|`arrayBrackets`, `enableFixer`, `genericDot`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `objectFieldSeparatorOptionalLinebreak`, `objectFieldSeparatorTrailingPunctuation`, `separatorForSingleObjectField`, `stringQuotes`, `typeBracketSpacing`, `unionSpacing`| @@ -204,12 +204,6 @@ The following patterns are considered problems: */ // Message: Inconsistent object field quotes null -/** - * @param {ab.cd.ef} cfg - */ -// "jsdoc/type-formatting": ["error"|"warn", {"propertyQuotes":"double"}] -// Message: Inconsistent double property quotes usage - /** * @param {{a: string}} cfg A long * description @@ -285,12 +279,6 @@ The following patterns are considered problems: // "jsdoc/type-formatting": ["error"|"warn", {"typeBracketSpacing":""}] // Message: Must have no initial spacing -/** - * @param {ab."cd".ef} cfg - */ -// "jsdoc/type-formatting": ["error"|"warn", {"propertyQuotes":null}] -// Message: Inconsistent null property quotes usage - /** * @param {{a: string, b: number}} cfg */ @@ -358,16 +346,6 @@ The following patterns are not considered problems: */ // "jsdoc/type-formatting": ["error"|"warn", {"objectFieldQuote":"double"}] -/** - * @param {ab.cd.ef} cfg - */ -// "jsdoc/type-formatting": ["error"|"warn", {"propertyQuotes":null}] - -/** - * @param {ab."cd ef".gh} cfg - */ -// "jsdoc/type-formatting": ["error"|"warn", {"propertyQuotes":null}] - /** * @param {ab | cd} cfg */ diff --git a/src/rules/typeFormatting.js b/src/rules/typeFormatting.js index 30fbd4b3e..29bef8939 100644 --- a/src/rules/typeFormatting.js +++ b/src/rules/typeFormatting.js @@ -24,7 +24,7 @@ export default iterateJsdoc(({ objectFieldSeparator = 'comma', objectFieldSeparatorOptionalLinebreak = true, objectFieldSeparatorTrailingPunctuation = false, - propertyQuotes = null, + // propertyQuotes = null, separatorForSingleObjectField = false, stringQuotes = 'single', typeBracketSpacing = '', @@ -277,19 +277,20 @@ export default iterateJsdoc(({ break; } - case 'JsdocTypeProperty': { - const typeNode = /** @type {import('jsdoc-type-pratt-parser').PropertyResult} */ (nde); + // Only suitable for namepaths (and would need changes); see https://github.com/gajus/eslint-plugin-jsdoc/issues/1524 + // case 'JsdocTypeProperty': { + // const typeNode = /** @type {import('jsdoc-type-pratt-parser').PropertyResult} */ (nde); - if ((propertyQuotes || - (typeof typeNode.value === 'string' && !(/\s/v).test(typeNode.value))) && - typeNode.meta.quote !== (propertyQuotes ?? undefined) - ) { - typeNode.meta.quote = propertyQuotes ?? undefined; - errorMessage = `Inconsistent ${propertyQuotes} property quotes usage`; - } + // if ((propertyQuotes || + // (typeof typeNode.value === 'string' && !(/\s/v).test(typeNode.value))) && + // typeNode.meta.quote !== (propertyQuotes ?? undefined) + // ) { + // typeNode.meta.quote = propertyQuotes ?? undefined; + // errorMessage = `Inconsistent ${propertyQuotes} property quotes usage`; + // } - break; - } + // break; + // } case 'JsdocTypeStringValue': { const typeNode = /** @type {import('jsdoc-type-pratt-parser').StringValueResult} */ (nde); @@ -405,13 +406,13 @@ export default iterateJsdoc(({ objectFieldSeparatorTrailingPunctuation: { type: 'boolean', }, - propertyQuotes: { - enum: [ - 'double', - 'single', - null, - ], - }, + // propertyQuotes: { + // enum: [ + // 'double', + // 'single', + // null, + // ], + // }, separatorForSingleObjectField: { type: 'boolean', }, diff --git a/test/rules/assertions/typeFormatting.js b/test/rules/assertions/typeFormatting.js index 66be9f5ca..f74d37d14 100644 --- a/test/rules/assertions/typeFormatting.js +++ b/test/rules/assertions/typeFormatting.js @@ -287,33 +287,33 @@ export default { */ `, }, - { - code: ` - /** - * @param {ab.cd.ef} cfg - */ - `, - errors: [ - { - line: 3, - message: 'Inconsistent double property quotes usage', - }, - { - line: 3, - message: 'Inconsistent double property quotes usage', - }, - ], - options: [ - { - propertyQuotes: 'double', - }, - ], - output: ` - /** - * @param {ab."cd"."ef"} cfg - */ - `, - }, + // { + // code: ` + // /** + // * @param {ab.cd.ef} cfg + // */ + // `, + // errors: [ + // { + // line: 3, + // message: 'Inconsistent double property quotes usage', + // }, + // { + // line: 3, + // message: 'Inconsistent double property quotes usage', + // }, + // ], + // options: [ + // { + // propertyQuotes: 'double', + // }, + // ], + // output: ` + // /** + // * @param {ab."cd"."ef"} cfg + // */ + // `, + // }, { code: ` /** @@ -627,29 +627,29 @@ export default { */ `, }, - { - code: ` - /** - * @param {ab."cd".ef} cfg - */ - `, - errors: [ - { - line: 3, - message: 'Inconsistent null property quotes usage', - }, - ], - options: [ - { - propertyQuotes: null, - }, - ], - output: ` - /** - * @param {ab.cd.ef} cfg - */ - `, - }, + // { + // code: ` + // /** + // * @param {ab."cd".ef} cfg + // */ + // `, + // errors: [ + // { + // line: 3, + // message: 'Inconsistent null property quotes usage', + // }, + // ], + // options: [ + // { + // propertyQuotes: null, + // }, + // ], + // output: ` + // /** + // * @param {ab.cd.ef} cfg + // */ + // `, + // }, { code: ` /** @@ -801,30 +801,30 @@ export default { }, ], }, - { - code: ` - /** - * @param {ab.cd.ef} cfg - */ - `, - options: [ - { - propertyQuotes: null, - }, - ], - }, - { - code: ` - /** - * @param {ab."cd ef".gh} cfg - */ - `, - options: [ - { - propertyQuotes: null, - }, - ], - }, + // { + // code: ` + // /** + // * @param {ab.cd.ef} cfg + // */ + // `, + // options: [ + // { + // propertyQuotes: null, + // }, + // ], + // }, + // { + // code: ` + // /** + // * @param {ab."cd ef".gh} cfg + // */ + // `, + // options: [ + // { + // propertyQuotes: null, + // }, + // ], + // }, { code: ` /** From 7209fe06550be9f0fd55944018b746e307bce271 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 16 Sep 2025 22:52:08 +0800 Subject: [PATCH 107/189] fix(`require-yields-check`): remove `exemptedBy` option BREAKING CHANGE: Removes `exemptedBy` from `require-yields-check`. Should not be needed. Also: - docs: create options dynamically from schemas --- .README/README.md | 12 +- .README/rules/check-alignment.md | 5 +- .README/rules/check-examples.md | 4 +- .README/rules/check-indentation.md | 24 +- .README/rules/check-line-alignment.md | 44 +- .README/rules/check-param-names.md | 57 +- .README/rules/check-property-names.md | 13 +- .README/rules/check-tag-names.md | 87 +- .README/rules/check-types.md | 53 +- .README/rules/check-values.md | 28 +- .README/rules/convert-to-jsdoc-comments.md | 63 +- .README/rules/empty-tags.md | 13 +- .README/rules/implements-on-classes.md | 14 +- .README/rules/informative-docs.md | 51 +- .README/rules/lines-before-block.md | 25 +- .README/rules/match-description.md | 141 +- .README/rules/match-name.md | 39 +- .README/rules/multiline-blocks.md | 86 +- .README/rules/no-bad-blocks.md | 18 +- .README/rules/no-blank-block-descriptions.md | 2 +- .README/rules/no-blank-blocks.md | 6 +- .README/rules/no-defaults.md | 23 +- .README/rules/no-missing-syntax.md | 20 +- .README/rules/no-multi-asterisks.md | 36 +- .README/rules/no-restricted-syntax.md | 16 +- .README/rules/no-types.md | 13 +- .README/rules/no-undefined-types.md | 17 +- .README/rules/require-asterisk-prefix.md | 29 +- .../require-description-complete-sentence.md | 35 +- .README/rules/require-description.md | 25 +- .README/rules/require-example.md | 44 +- .README/rules/require-file-overview.md | 55 +- ...require-hyphen-before-param-description.md | 22 +- .README/rules/require-jsdoc.md | 117 +- .README/rules/require-param-description.md | 26 +- .README/rules/require-param-name.md | 13 +- .README/rules/require-param-type.md | 25 +- .README/rules/require-param.md | 213 +- .README/rules/require-returns-check.md | 22 +- .README/rules/require-returns-description.md | 13 +- .README/rules/require-returns-type.md | 13 +- .README/rules/require-returns.md | 42 +- .README/rules/require-template.md | 21 +- .README/rules/require-throws.md | 18 +- .README/rules/require-yields-check.md | 19 +- .README/rules/require-yields.md | 46 +- .README/rules/sort-tags.md | 215 +- .README/rules/tag-lines.md | 43 +- .README/rules/text-escaping.md | 14 +- .README/rules/type-formatting.md | 73 +- .README/rules/valid-types.md | 10 +- .README/settings.md | 32 +- README.md | 12 +- docs/rules/check-access.md | 10 +- docs/rules/check-alignment.md | 5 +- docs/rules/check-examples.md | 4 +- docs/rules/check-indentation.md | 3 +- docs/rules/check-line-alignment.md | 74 +- docs/rules/check-param-names.md | 110 +- docs/rules/check-property-names.md | 9 +- docs/rules/check-tag-names.md | 10 +- docs/rules/check-types.md | 96 +- docs/rules/check-values.md | 8 +- docs/rules/convert-to-jsdoc-comments.md | 97 +- docs/rules/empty-tags.md | 6 +- docs/rules/implements-on-classes.md | 12 +- docs/rules/informative-docs.md | 4 + docs/rules/lines-before-block.md | 23 +- docs/rules/match-description.md | 126 +- docs/rules/match-name.md | 73 +- docs/rules/multiline-blocks.md | 186 +- docs/rules/no-bad-blocks.md | 5 +- docs/rules/no-blank-block-descriptions.md | 2 +- docs/rules/no-blank-blocks.md | 12 +- docs/rules/no-defaults.md | 36 +- docs/rules/no-missing-syntax.md | 15 +- docs/rules/no-multi-asterisks.md | 37 +- docs/rules/no-restricted-syntax.md | 13 +- docs/rules/no-types.md | 17 +- docs/rules/no-undefined-types.md | 44 +- docs/rules/require-asterisk-prefix.md | 36 +- .../require-description-complete-sentence.md | 32 +- docs/rules/require-description.md | 86 +- docs/rules/require-example.md | 71 +- docs/rules/require-file-overview.md | 20 +- ...require-hyphen-before-param-description.md | 17 +- docs/rules/require-jsdoc.md | 196 +- docs/rules/require-param-description.md | 49 +- docs/rules/require-param-name.md | 16 +- docs/rules/require-param-type.md | 47 +- docs/rules/require-param.md | 277 ++- docs/rules/require-returns-check.md | 60 +- docs/rules/require-returns-description.md | 15 +- docs/rules/require-returns-type.md | 15 +- docs/rules/require-returns.md | 140 +- docs/rules/require-template.md | 19 +- docs/rules/require-throws.md | 47 +- docs/rules/require-yields-check.md | 60 +- docs/rules/require-yields.md | 132 +- docs/rules/sort-tags.md | 78 +- docs/rules/tag-lines.md | 69 +- docs/rules/text-escaping.md | 7 +- docs/rules/type-formatting.md | 42 +- docs/rules/valid-types.md | 24 +- docs/settings.md | 32 +- src/bin/generateDocs.js | 125 +- src/bin/generateRule.js | 3 +- src/bin/generateRuleTypes.js | 14 +- src/rules.d.ts | 2105 ++++++++++++++++- src/rules/checkAccess.js | 2 +- src/rules/checkAlignment.js | 3 + src/rules/checkIndentation.js | 19 + src/rules/checkLineAlignment.js | 24 + src/rules/checkParamNames.js | 61 + src/rules/checkPropertyNames.js | 6 + src/rules/checkTagNames.js | 71 + src/rules/checkTypes.js | 17 +- src/rules/checkValues.js | 16 + src/rules/convertToJsdocComments.js | 48 + src/rules/emptyTags.js | 9 + src/rules/implementsOnClasses.js | 14 + src/rules/informativeDocs.js | 45 + src/rules/linesBeforeBlock.js | 14 + src/rules/matchDescription.js | 129 + src/rules/matchName.js | 30 + src/rules/multilineBlocks.js | 82 +- src/rules/noBadBlocks.js | 13 +- src/rules/noBlankBlocks.js | 2 + src/rules/noDefaults.js | 19 + src/rules/noMissingSyntax.js | 23 +- src/rules/noMultiAsterisks.js | 29 + src/rules/noRestrictedSyntax.js | 17 + src/rules/noTypes.js | 16 + src/rules/noUndefinedTypes.js | 12 +- src/rules/requireAsteriskPrefix.js | 28 + src/rules/requireDescription.js | 29 + .../requireDescriptionCompleteSentence.js | 27 + src/rules/requireExample.js | 25 + src/rules/requireFileOverview.js | 61 + .../requireHyphenBeforeParamDescription.js | 18 + src/rules/requireJsdoc.js | 79 + src/rules/requireParam.js | 212 ++ src/rules/requireParamDescription.js | 21 + src/rules/requireParamName.js | 15 + src/rules/requireParamType.js | 20 + src/rules/requireReturns.js | 53 + src/rules/requireReturnsCheck.js | 23 +- src/rules/requireReturnsDescription.js | 14 + src/rules/requireReturnsType.js | 14 + src/rules/requireTemplate.js | 16 + src/rules/requireThrows.js | 17 + src/rules/requireYields.js | 49 + src/rules/requireYieldsCheck.js | 32 +- src/rules/sortTags.js | 199 ++ src/rules/tagLines.js | 30 + src/rules/textEscaping.js | 6 +- src/rules/typeFormatting.js | 51 +- src/rules/validTypes.js | 7 + test/rules/assertions/checkAccess.js | 10 +- test/rules/assertions/checkAlignment.js | 4 +- test/rules/assertions/multilineBlocks.js | 32 +- tsconfig.json | 6 +- typings/gitdown.d.ts | 4 + 163 files changed, 5747 insertions(+), 3054 deletions(-) diff --git a/.README/README.md b/.README/README.md index 892c29247..c0519f1bc 100644 --- a/.README/README.md +++ b/.README/README.md @@ -380,10 +380,10 @@ non-default-recommended fixer). |||[check-examples](./docs/rules/check-examples.md#readme)|Linting of JavaScript within `@example`| |||[check-indentation](./docs/rules/check-indentation.md#readme)|Checks for invalid padding inside JSDoc blocks| ||:wrench:|[check-line-alignment](./docs/rules/check-line-alignment.md#readme)|Reports invalid alignment of JSDoc block lines.| -|:heavy_check_mark:|:wrench:|[check-param-names](./docs/rules/check-param-names.md#readme)|Checks for dupe `@param` names, that nested param names have roots, and that parameter names in function declarations match jsdoc param names.| +|:heavy_check_mark:|:wrench:|[check-param-names](./docs/rules/check-param-names.md#readme)|Checks for dupe `@param` names, that nested param names have roots, and that parameter names in function declarations match JSDoc param names.| |:heavy_check_mark:|:wrench:|[check-property-names](./docs/rules/check-property-names.md#readme)|Checks for dupe `@property` names, that nested property names have roots| |||[check-syntax](./docs/rules/check-syntax.md#readme)|Reports use against current mode (currently only prohibits Closure-specific syntax)| -|:heavy_check_mark:|:wrench:|[check-tag-names](./docs/rules/check-tag-names.md#readme)|Reports invalid jsdoc (block) tag names| +|:heavy_check_mark:|:wrench:|[check-tag-names](./docs/rules/check-tag-names.md#readme)|Reports invalid JSDoc (block) tag names| | || [check-template-names](./docs/rules/check-template-names.md#readme)|Checks that any `@template` names are actually used in the connected `@typedef` or type alias. |:heavy_check_mark:|:wrench:|[check-types](./docs/rules/check-types.md#readme)|Reports types deemed invalid (customizable and with defaults, for preventing and/or recommending replacements)| |:heavy_check_mark:||[check-values](./docs/rules/check-values.md#readme)|Checks for expected content within some miscellaneous tags (`@version`, `@since`, `@license`, `@author`)| @@ -394,8 +394,8 @@ non-default-recommended fixer). |||[lines-before-block](./docs/rules/lines-before-block.md#readme)|Enforces minimum number of newlines before JSDoc comment blocks| |||[match-description](./docs/rules/match-description.md#readme)|Defines customizable regular expression rules for your tag descriptions| ||:wrench:|[match-name](./docs/rules/match-name.md#readme)|Reports the name portion of a JSDoc tag if matching or not matching a given regular expression| -|:heavy_check_mark:|:wrench:|[multiline-blocks](./docs/rules/multiline-blocks.md#readme)|Controls how and whether jsdoc blocks can be expressed as single or multiple line blocks| -||:wrench:|[no-bad-blocks](./docs/rules/no-bad-blocks.md#readme)|This rule checks for multi-line-style comments which fail to meet the criteria of a jsdoc block| +|:heavy_check_mark:|:wrench:|[multiline-blocks](./docs/rules/multiline-blocks.md#readme)|Controls how and whether JSDoc blocks can be expressed as single or multiple line blocks| +||:wrench:|[no-bad-blocks](./docs/rules/no-bad-blocks.md#readme)|This rule checks for multi-line-style comments which fail to meet the criteria of a JSDoc block| ||:wrench:|[no-blank-block-descriptions](./docs/rules/no-blank-block-descriptions.md#readme)|If tags are present, this rule will prevent empty lines in the block description. If no tags are present, this rule will prevent extra empty lines in the block description.| ||:wrench:|[no-blank-blocks](./docs/rules/no-blank-blocks.md#readme)|Reports and optionally removes blocks with whitespace only| |:heavy_check_mark:|:wrench:|[no-defaults](./docs/rules/no-defaults.md#readme)|This rule reports defaults being used on the relevant portion of `@param` or `@default`| @@ -412,7 +412,7 @@ non-default-recommended fixer). ||:wrench:|[require-example](./docs/rules/require-example.md#readme)|Requires that all functions (and potentially other contexts) have examples.| |||[require-file-overview](./docs/rules/require-file-overview.md#readme)|By default, requires a single `@file` tag at the beginning of each linted file| ||:wrench:|[require-hyphen-before-param-description](./docs/rules/require-hyphen-before-param-description.md#readme)|Requires a hyphen before `@param` descriptions (and optionally before `@property` descriptions)| -|:heavy_check_mark:|:wrench:|[require-jsdoc](./docs/rules/require-jsdoc.md#readme)|Checks for presence of jsdoc comments, on functions and potentially other contexts (optionally limited to exports).| +|:heavy_check_mark:|:wrench:|[require-jsdoc](./docs/rules/require-jsdoc.md#readme)|Checks for presence of JSDoc comments, on functions and potentially other contexts (optionally limited to exports).| |:heavy_check_mark:||[require-next-type](./docs/rules/require-next-type.md#readme)|Requires a type on the (non-standard) `@next` tag.| |:heavy_check_mark:|:wrench:|[require-param](./docs/rules/require-param.md#readme)|Requires that all function parameters are documented with a `@param` tag.| |:heavy_check_mark:||[require-param-description](./docs/rules/require-param-description.md#readme)|Requires that each `@param` tag has a `description` value.| @@ -423,7 +423,7 @@ non-default-recommended fixer). |:heavy_check_mark:||[require-property-name](./docs/rules/require-property-name.md#readme)|Requires that all `@property` tags have names.| |:heavy_check_mark: (off in TS)||[require-property-type](./docs/rules/require-property-type.md#readme)|Requires that each `@property` tag has a type value (within curly brackets).| |:heavy_check_mark:||[require-returns](./docs/rules/require-returns.md#readme)|Requires that return statements are documented.| -|:heavy_check_mark:||[require-returns-check](./docs/rules/require-returns-check.md#readme)|Requires a return statement be present in a function body if a `@returns` tag is specified in the jsdoc comment block (and reports if multiple `@returns` tags are present).| +|:heavy_check_mark:||[require-returns-check](./docs/rules/require-returns-check.md#readme)|Requires a return statement be present in a function body if a `@returns` tag is specified in the JSDoc comment block (and reports if multiple `@returns` tags are present).| |:heavy_check_mark:||[require-returns-description](./docs/rules/require-returns-description.md#readme)|Requires that the `@returns` tag has a `description` value (not including `void`/`undefined` type returns).| |:heavy_check_mark: (off in TS)||[require-returns-type](./docs/rules/require-returns-type.md#readme)|Requires that `@returns` tag has a type value (in curly brackets).| | || [require-template](./docs/rules/require-template.md#readme) | Requires `@template` tags be present when type parameters are used.| diff --git a/.README/rules/check-alignment.md b/.README/rules/check-alignment.md index 2414b0e15..48755f3e7 100644 --- a/.README/rules/check-alignment.md +++ b/.README/rules/check-alignment.md @@ -10,10 +10,7 @@ Fixes alignment. ## Options -### `innerIndent` - -Set to 0 if you wish to avoid the normal requirement for an inner indentation of -one space. Defaults to 1 (one space of normal inner indentation). +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/check-examples.md b/.README/rules/check-examples.md index e2afb2ec8..95ba32917 100644 --- a/.README/rules/check-examples.md +++ b/.README/rules/check-examples.md @@ -151,8 +151,8 @@ by decreasing precedence: * `padded-blocks` (and `@stylistic/padded-blocks`) - It can generally look nicer to pad a little even if one's code follows more stringency as far as block padding. -* `jsdoc/require-file-overview` - Shouldn't check example for jsdoc blocks. -* `jsdoc/require-jsdoc` - Wouldn't expect jsdoc blocks within jsdoc blocks. +* `jsdoc/require-file-overview` - Shouldn't check example for JSDoc blocks. +* `jsdoc/require-jsdoc` - Wouldn't expect JSDoc blocks within JSDoc blocks. * `import/no-unresolved` - One wouldn't generally expect example paths to resolve relative to the current JavaScript file as one would with real code. * `import/unambiguous` - Snippets in examples are likely too short to always diff --git a/.README/rules/check-indentation.md b/.README/rules/check-indentation.md index f860f40fb..805cc5f04 100644 --- a/.README/rules/check-indentation.md +++ b/.README/rules/check-indentation.md @@ -20,29 +20,7 @@ the following description is not reported: ## Options -This rule has an object option. - -### `excludeTags` - -Array of tags (e.g., `['example', 'description']`) whose content will be -"hidden" from the `check-indentation` rule. Defaults to `['example']`. - -By default, the whole JSDoc block will be checked for invalid padding. -That would include `@example` blocks too, which can get in the way -of adding full, readable examples of code without ending up with multiple -linting issues. - -When disabled (by passing `excludeTags: []` option), the following code *will* -report a padding issue: - -```js -/** - * @example - * anArray.filter((a) => { - * return a.b; - * }); - */ -``` +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/check-line-alignment.md b/.README/rules/check-line-alignment.md index aa9ffe30a..5b8fd77de 100644 --- a/.README/rules/check-line-alignment.md +++ b/.README/rules/check-line-alignment.md @@ -8,50 +8,12 @@ for example. ## Fixer -(TODO) +Will either add alignment between the tag, type, name, and description across +lines of the JSDoc block or remove it. ## Options -This rule allows one optional string argument. If it is `"always"` then a -problem is raised when the lines are not aligned. If it is `"never"` then -a problem should be raised when there is more than one space between each -line's parts. If it is `"any"`, no alignment is made. Defaults to `"never"`. - -Note that in addition to alignment, the "never" and "always" options will both -ensure that at least one space is present after the asterisk delimiter. - -After the string, an options object is allowed with the following properties. - -### `tags` - -Use this to change the tags which are sought for alignment changes. Defaults to an array of -`['param', 'arg', 'argument', 'property', 'prop', 'returns', 'return', 'template']`. - -### `customSpacings` - -An object with any of the following keys set to an integer. Affects spacing: - -- `postDelimiter` - after the asterisk (e.g., `* @param`) -- `postTag` - after the tag (e.g., `* @param `) -- `postType` - after the type (e.g., `* @param {someType} `) -- `postName` - after the name (e.g., `* @param {someType} name `) -- `postHyphen` - after any hyphens in the description (e.g., `* @param {someType} name - A description`) - -If a spacing is not defined, it defaults to one. - -### `preserveMainDescriptionPostDelimiter` - -A boolean to determine whether to preserve the post-delimiter spacing of the -main description. If `false` or unset, will be set to a single space. - -### `wrapIndent` - -The indent that will be applied for tag text after the first line. -Default to the empty string (no indent). - -### `disableWrapIndent` - -Disables `wrapIndent`; existing wrap indentation is preserved without changes. +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/check-param-names.md b/.README/rules/check-param-names.md index 7cb8b8296..beaced471 100644 --- a/.README/rules/check-param-names.md +++ b/.README/rules/check-param-names.md @@ -7,7 +7,11 @@ the function declaration. ## Fixer -(Todo) +Auto-removes `@param` duplicates (based on identical names). + +Note that this option will remove duplicates of the same name even if +the definitions do not match in other ways (e.g., the second param will +be removed even if it has a different type or description). ## Destructuring @@ -28,7 +32,7 @@ To require that `extra` be documented--and that any extraneous properties get reported--e.g., if there had been a `@param options.bar` above--you can use the `checkRestProperty` option which insists that the rest property be documented (and that there be no other implicit properties). -Note, however, that jsdoc [does not appear](https://github.com/jsdoc/jsdoc/issues/1773) +Note, however, that JSDoc [does not appear](https://github.com/jsdoc/jsdoc/issues/1773) to currently support syntax or output to distinguish rest properties from other properties, so in looking at the docs alone without looking at the function signature, the disadvantage of enabling this option is that it @@ -36,54 +40,7 @@ may appear that there is an actual property named `extra`. ## Options -### `checkRestProperty` - -See the "Destructuring" section. Defaults to `false`. - -### `checkTypesPattern` - -See `require-param` under the option of the same name. - -### `enableFixer` - -Set to `true` to auto-remove `@param` duplicates (based on identical -names). - -Note that this option will remove duplicates of the same name even if -the definitions do not match in other ways (e.g., the second param will -be removed even if it has a different type or description). - -### `allowExtraTrailingParamDocs` - -If set to `true`, this option will allow extra `@param` definitions (e.g., -representing future expected or virtual params) to be present without needing -their presence within the function signature. Other inconsistencies between -`@param`'s and present function parameters will still be reported. - -### `checkDestructured` - -Whether to check destructured properties. Defaults to `true`. - -### `useDefaultObjectProperties` - -Set to `true` if you wish to avoid reporting of child property documentation -where instead of destructuring, a whole plain object is supplied as default -value but you wish its keys to be considered as signalling that the properties -are present and can therefore be documented. Defaults to `false`. - -### `disableExtraPropertyReporting` - -Whether to check for extra destructured properties. Defaults to `false`. Change -to `true` if you want to be able to document properties which are not actually -destructured. Keep as `false` if you expect properties to be documented in -their own types. Note that extra properties will always be reported if another -item at the same level is destructured as destructuring will prevent other -access and this option is only intended to permit documenting extra properties -that are available and actually used in the function. - -### `disableMissingParamChecks` - -Whether to avoid checks for missing `@param` definitions. Defaults to `false`. Change to `true` if you want to be able to omit properties. +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/check-property-names.md b/.README/rules/check-property-names.md index ab9d7e8fb..023a940f1 100644 --- a/.README/rules/check-property-names.md +++ b/.README/rules/check-property-names.md @@ -7,19 +7,16 @@ and that nested properties have defined roots. ## Fixer -(Todo) - -## Options - -### `enableFixer` - -Set to `true` to auto-remove `@property` duplicates (based on -identical names). +Auto-removes `@property` duplicates (based on identical names). Note that this option will remove duplicates of the same name even if the definitions do not match in other ways (e.g., the second property will be removed even if it has a different type or description). +## Options + +{"gitdown": "options"} + ## Context and settings ||| diff --git a/.README/rules/check-tag-names.md b/.README/rules/check-tag-names.md index 02b2a3f79..aa0002b3a 100644 --- a/.README/rules/check-tag-names.md +++ b/.README/rules/check-tag-names.md @@ -134,7 +134,7 @@ template And for [Closure](https://github.com/google/closure-compiler/wiki/Annotating-JavaScript-for-the-Closure-Compiler), when `settings.jsdoc.mode` is set to `closure`, one may use the following (in -addition to the jsdoc and TypeScript tags–though replacing `returns` with +addition to the JSDoc and TypeScript tags–though replacing `returns` with `return`): ``` @@ -194,92 +194,11 @@ tag to `false`: ## Fixer -(Todo) +Auto-removes types that are redundant with the [`typed` option](#typed). ## Options -### `definedTags` - -Use an array of `definedTags` strings to configure additional, allowed tags. -The format is as follows: - -```json -{ - "definedTags": ["note", "record"] -} -``` - -### `enableFixer` - -Set to `false` to disable auto-removal of types that are redundant with the [`typed` option](#typed). - -### `jsxTags` - -If this is set to `true`, all of the following tags used to control JSX output are allowed: - -``` -jsx -jsxFrag -jsxImportSource -jsxRuntime -``` - -For more information, see the [babel documentation](https://babeljs.io/docs/en/babel-plugin-transform-react-jsx). - -### `typed` - -If this is set to `true`, additionally checks for tag names that are redundant when using a type checker such as TypeScript. - -These tags are always unnecessary when using TypeScript or similar: - -``` -augments -callback -class -enum -implements -private -property -protected -public -readonly -this -type -typedef -``` - -These tags are unnecessary except when inside a TypeScript `declare` context: - -``` -abstract -access -class -constant -constructs -default -enum -export -exports -function -global -inherits -instance -interface -member -memberof -memberOf -method -mixes -mixin -module -name -namespace -override -property -requires -static -this -``` +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/check-types.md b/.README/rules/check-types.md index 3c3231290..d63852c90 100644 --- a/.README/rules/check-types.md +++ b/.README/rules/check-types.md @@ -24,55 +24,7 @@ RegExp ## Options -`check-types` allows one option: - -- An option object: - - with the key `noDefaults` to insist that only the supplied option type - map is to be used, and that the default preferences (such as "string" - over "String") will not be enforced. The option's default is `false`. - - with the key `exemptTagContexts` which will avoid reporting when a - bad type is found on a specified tag. Set to an array of objects with - a key `tag` set to the tag to exempt, and a `types` key which can - either be `true` to indicate that any types on that tag will be allowed, - or to an array of strings which will only allow specific bad types. - If an array of strings is given, these must match the type exactly, - e.g., if you only allow `"object"`, it will not allow - `"object"`. Note that this is different from the - behavior of `settings.jsdoc.preferredTypes`. This option is useful - for normally restricting generic types like `object` with - `preferredTypes`, but allowing `typedef` to indicate that its base - type is `object`. - - with the key `unifyParentAndChildTypeChecks` which will treat - `settings.jsdoc.preferredTypes` keys such as `SomeType` as matching - not only child types such as an unadorned `SomeType` but also - `SomeType` and `SomeType.` (and if the type is - instead `Array` (or `[]`), it will match `aChildType[]`). If this - option is `false` or - unset, the former format will only apply to types which are not parent - types/unions whereas the latter formats will only apply for parent - types/unions. The special types `[]`, `.<>` (or `.`), and `<>` - act only as parent types (and will not match a bare child type such as - `Array` even when unified, though, as mentioned, `Array` will match - say `string[]` or `Array.` when unified). The special type - `*` is only a child type. Note that there is no detection of parent - and child type together, e.g., you cannot specify preferences for - `string[]` specifically as distinct from say `number[]`, but you can - target both with `[]` or the child types `number` or `string`. If - `unifyParentAndChildTypeChecks` is set instead on `preferredTypes`, - then that value will be used instead. Note that the latter is the - preferred approach. - -If a value is present both as a key and as a value, neither the key nor the -value will be reported. Thus one can use this fact to allow both `object` -and `Object`, for example. Note that in "typescript" mode, this is the default -behavior. - -See also the documentation on `settings.jsdoc.preferredTypes` which impacts -the behavior of `check-types`. - -Note that if there is an error [parsing](https://github.com/jsdoc-type-pratt-parser/jsdoc-type-pratt-parser) -types for a tag, the function will silently ignore that tag, leaving it to -the `valid-types` rule to report parsing errors. +{"gitdown": "options"} ## Why not capital case everything? @@ -156,7 +108,8 @@ permitted. ## Fixer -(Todo) +Replaces native types with standard casing and replaces according to +`preferredTypes` settings. ## Context and settings diff --git a/.README/rules/check-values.md b/.README/rules/check-values.md index d18be7e87..93b8b3d6d 100644 --- a/.README/rules/check-values.md +++ b/.README/rules/check-values.md @@ -22,33 +22,7 @@ This rule checks the values for a handful of tags: ## Options -### `allowedAuthors` - -An array of allowable author values. If absent, only non-whitespace will -be checked for. - -### `allowedLicenses` - -An array of allowable license values or `true` to allow any license text. -If present as an array, will be used in place of SPDX identifiers. - -### `licensePattern` - -A string to be converted into a `RegExp` (with `v` flag) and whose first -parenthetical grouping, if present, will match the portion of the license -description to check (if no grouping is present, then the whole portion -matched will be used). Defaults to `/([^\n\r]*)/gv`, i.e., the SPDX expression -is expected before any line breaks. - -Note that the `/` delimiters are optional, but necessary to add flags. - -Defaults to using the `v` flag, so to add your own flags, encapsulate -your expression as a string, but like a literal, e.g., `/^mit$/vi`. - -### `numericOnlyVariation` - -Whether to enable validation that `@variation` must be a number. Defaults to -`false`. +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/convert-to-jsdoc-comments.md b/.README/rules/convert-to-jsdoc-comments.md index 8847e6a6a..2959e7856 100644 --- a/.README/rules/convert-to-jsdoc-comments.md +++ b/.README/rules/convert-to-jsdoc-comments.md @@ -5,68 +5,13 @@ Converts single line or non-JSDoc, multiline comments into JSDoc comments. Note that this rule is experimental. As usual with fixers, please confirm the results before committing. -## Options - -### `enableFixer` - -Set to `false` to disable fixing. - -### `lineOrBlockStyle` - -What style of comments to which to apply JSDoc conversion. - -- `block` - Applies to block-style comments (`/* ... */`) -- `line` - Applies to line-style comments (`// ...`) -- `both` - Applies to both block and line-style comments - -Defaults to `both`. - -### `enforceJsdocLineStyle` - -What policy to enforce on the conversion of non-JSDoc comments without -line breaks. (Non-JSDoc (mulitline) comments with line breaks will always -be converted to `multi` style JSDoc comments.) - -- `multi` - Convert to multi-line style -```js -/** - * Some text - */ -``` -- `single` - Convert to single-line style -```js -/** Some text */ -``` - -Defaults to `multi`. +## Fixer -### `allowedPrefixes` +Converts comments into JSDoc comments. -An array of prefixes to allow at the beginning of a comment. - -Defaults to `['@ts-', 'istanbul ', 'c8 ', 'v8 ', 'eslint', 'prettier-']`. - -Supplying your own value overrides the defaults. - -### `contexts` - -The contexts which will be checked for preceding content. - -Defaults to `ArrowFunctionExpression`, `FunctionDeclaration`, -`FunctionExpression`, `TSDeclareFunction`. - -### `contextsAfter` - -The contexts which will be checked for content on the same line after. - -Defaults to an empty array. - -### `contextsBeforeAndAfter` - -The contexts which will be checked for content before and on the same -line after. +## Options -Defaults to `VariableDeclarator`, `TSPropertySignature`, `PropertyDefinition`. +{"gitdown": "options"} ||| |---|---| diff --git a/.README/rules/empty-tags.md b/.README/rules/empty-tags.md index 4e44dc6f6..d8baa03aa 100644 --- a/.README/rules/empty-tags.md +++ b/.README/rules/empty-tags.md @@ -35,20 +35,11 @@ Similarly, `@internal` will still be checked for content by this rule even with ## Fixer -(Todo) +Strips content if present for the above-mentioned tags. ## Options -### `tags` - -If you want additional tags to be checked for their descriptions, you may -add them within this option. - -```js -{ - 'jsdoc/empty-tags': ['error', {tags: ['event']}] -} -``` +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/implements-on-classes.md b/.README/rules/implements-on-classes.md index 6fdaaebcc..5e0231d1f 100644 --- a/.README/rules/implements-on-classes.md +++ b/.README/rules/implements-on-classes.md @@ -13,19 +13,7 @@ function is adhering. ## Options -### `contexts` - -Set this to an array of strings representing the AST context (or an object with -`context` and `comment` properties) where you wish the rule to be applied. - -Overrides the default contexts (see below). Set to `"any"` if you want -the rule to apply to any jsdoc block throughout your files (as is necessary -for finding function blocks not attached to a function declaration or -expression, i.e., `@callback` or `@function` (or its aliases `@func` or -`@method`) (including those associated with an `@interface`). - -See the ["AST and Selectors"](../#advanced-ast-and-selectors) -section of our README for more on the expected format. +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/informative-docs.md b/.README/rules/informative-docs.md index 48afdda95..926a2e8d0 100644 --- a/.README/rules/informative-docs.md +++ b/.README/rules/informative-docs.md @@ -16,56 +16,7 @@ This rule requires all docs comments contain at least one word not already in th ## Options -### `aliases` - -The `aliases` option allows indicating words as synonyms (aliases) of each other. - -For example, with `{ aliases: { emoji: ["smiley", "winkey"] } }`, the following comment would be considered uninformative: - -```js -/** A smiley/winkey. */ -let emoji; -``` - -The default `aliases` option is: - -```json -{ - "a": ["an", "our"] -} -``` - -### `excludedTags` - -Tags that should not be checked for valid contents. - -For example, with `{ excludedTags: ["category"] }`, the following comment would not be considered uninformative: - -```js -/** @category Types */ -function computeTypes(node) { - // ... -} -``` - -No tags are excluded by default. - -### `uselessWords` - -Words that are ignored when searching for one that adds meaning. - -For example, with `{ uselessWords: ["our"] }`, the following comment would be considered uninformative: - -```js -/** Our text. */ -let text; -``` - -The default `uselessWords` option is: - -```json -["a", "an", "i", "in", "of", "s", "the"] -``` +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/lines-before-block.md b/.README/rules/lines-before-block.md index 22c2bc1e2..08cce6ed7 100644 --- a/.README/rules/lines-before-block.md +++ b/.README/rules/lines-before-block.md @@ -5,30 +5,7 @@ This rule enforces minimum number of newlines before JSDoc comment blocks ## Options -### `checkBlockStarts` - -Whether to additionally check the start of blocks, such as classes or functions. -Defaults to `false`. - -### `lines` - -The minimum number of lines to require. Defaults to 1. - -### `ignoreSameLine` - -This option excludes cases where the JSDoc block occurs on the same line as a -preceding code or comment. Defaults to `true`. - -### `ignoreSingleLines` - -This option excludes cases where the JSDoc block is only one line long. -Defaults to `true`. - -### `excludedTags` - -An array of tags whose presence in the JSDoc block will prevent the -application of the rule. Defaults to `['type']` (i.e., if `@type` is present, -lines before the block will not be added). +{"gitdown": "options"} ||| |---|---| diff --git a/.README/rules/match-description.md b/.README/rules/match-description.md index 4bbb44c9c..ef2df481a 100644 --- a/.README/rules/match-description.md +++ b/.README/rules/match-description.md @@ -10,7 +10,7 @@ by our supported Node versions): ``^\n?([A-Z`\\d_][\\s\\S]*[.?!`\\p{RGI_Emoji}]\\s*)?$`` -Applies by default to the jsdoc block description and to the following tags: +Applies by default to the JSDoc block description and to the following tags: - `@description`/`@desc` - `@summary` @@ -24,7 +24,7 @@ to add your own flags, encapsulate your expression as a string, but like a literal, e.g., `/[A-Z].*\\./vi`. Note that `/` delimiters are optional, but necessary to add flags (besides -`u`). +`v`). Also note that the default or optional regular expressions is *not* case-insensitive unless one opts in to add the `i` flag. @@ -34,142 +34,7 @@ that the trailing newlines of a description will not be matched. ## Options -### `matchDescription` - -You can supply your own expression to override the default, passing a -`matchDescription` string on the options object. - -```js -{ - 'jsdoc/match-description': ['error', {matchDescription: '[A-Z].*\\.'}] -} -``` - -### `message` - -You may provide a custom default message by using the following format: - -```js -{ - 'jsdoc/match-description': ['error', { - message: 'The default description should begin with a capital letter.' - }] -} -``` - -This can be overridden per tag or for the main block description by setting -`message` within `tags` or `mainDescription`, respectively. - -### `nonemptyTags` - -If not set to `false`, will enforce that the following tags have at least -some content: - -- `@copyright` -- `@example` -- `@see` -- `@todo` - -If you supply your own tag description for any of the above tags in `tags`, -your description will take precedence. - -### `tags` - -If you want different regular expressions to apply to tags, you may use -the `tags` option object: - -```js -{ - 'jsdoc/match-description': ['error', {tags: { - param: '\\- [A-Z].*\\.', - returns: '[A-Z].*\\.' - }}] -} -``` - -In place of a string, you can also add `true` to indicate that a particular -tag should be linted with the `matchDescription` value (or the default). - -```js -{ - 'jsdoc/match-description': ['error', {tags: { - param: true, - returns: true - }}] -} -``` - -Alternatively, you may supply an object with a `message` property to indicate -the error message for that tag. - -```js -{ - 'jsdoc/match-description': ['error', {tags: { - param: {message: 'Begin with a hyphen', match: '\\- [A-Z].*\\.'}, - returns: {message: 'Capitalize for returns (the default)', match: true} - }}] -} -``` - -The tags `@param`/`@arg`/`@argument` and `@property`/`@prop` will be properly -parsed to ensure that the matched "description" text includes only the text -after the name. - -All other tags will treat the text following the tag name, a space, and -an optional curly-bracketed type expression (and another space) as part of -its "description" (e.g., for `@returns {someType} some description`, the -description is `some description` while for `@some-tag xyz`, the description -is `xyz`). - -### `mainDescription` - -If you wish to override the main block description without changing the -default `match-description` (which can cascade to the `tags` with `true`), -you may use `mainDescription`: - -```js -{ - 'jsdoc/match-description': ['error', { - mainDescription: '[A-Z].*\\.', - tags: { - param: true, - returns: true - } - }] -} -``` - -There is no need to add `mainDescription: true`, as by default, the main -block description (and only the main block description) is linted, though you -may disable checking it by setting it to `false`. - -You may also provide an object with `message`: - -```js -{ - 'jsdoc/match-description': ['error', { - mainDescription: { - message: 'Capitalize first word of JSDoc block descriptions', - match: '[A-Z].*\\.' - }, - tags: { - param: true, - returns: true - } - }] -} -``` - -### `contexts` - -Set this to an array of strings representing the AST context (or an object with -`context` and `comment` properties) where you wish the rule to be applied. -(e.g., `ClassDeclaration` for ES6 -classes). Overrides the default contexts (see below). Set to `"any"` if you -want the rule to apply to any jsdoc block throughout your files. - -See the ["AST and Selectors"](../#advanced-ast-and-selectors) -section of our README for more on the expected format. +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/match-name.md b/.README/rules/match-name.md index 818ccd358..dfa0d5456 100644 --- a/.README/rules/match-name.md +++ b/.README/rules/match-name.md @@ -17,44 +17,7 @@ Will replace `disallowName` with `replacement` if these are provided. ## Options -A single options object with the following properties: - -### `match` - -`match` is a required option containing an array of objects which determine -the conditions whereby a name is reported as being problematic. - -These objects can have any combination of the following groups of optional -properties, all of which act to confine one another: - -- `tags` - This array should include tag names or `*` to indicate the - match will apply for all tags (except as confined by any context - properties). If `*` is not used, then these rules will only apply to - the specified tags. If `tags` is omitted, then `*` is assumed. - -- `allowName` - Indicates which names are allowed for the given tag (or `*`). - Accepts a string regular expression (optionally wrapped between two - `/` delimiters followed by optional flags) used to match the name. -- `disallowName` - As with `allowName` but indicates names that are not - allowed. -- `replacement` - If `disallowName` is supplied and this value is present, it - will replace the matched `disallowName` text. - -- `context` - AST to confine the allowing or disallowing to jsdoc blocks - associated with a particular context. See the - ["AST and Selectors"](../#advanced-ast-and-selectors) - section of our README for more on the expected format. -- `comment` - As with `context` but AST for the JSDoc block comment and types - -- `message` - An optional custom message to use when there is a match. - -Note that `comment`, even if targeting a specific tag, is used to match the -whole block. So if a `comment` finds its specific tag, it may still apply -fixes found by the likes of `disallowName` even when a different tag has the -disallowed name. An alternative is to ensure that `comment` finds the specific -tag of the desired tag and/or name and no `disallowName` (or `allowName`) is -supplied. In such a case, only one error will be reported, but no fixer will -be applied, however. +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/multiline-blocks.md b/.README/rules/multiline-blocks.md index 66e837827..4dc182e1b 100644 --- a/.README/rules/multiline-blocks.md +++ b/.README/rules/multiline-blocks.md @@ -2,100 +2,22 @@ {"gitdown": "contents", "rootId": "multiline-blocks"} -Controls how and whether jsdoc blocks can be expressed as single or multiple +Controls how and whether JSDoc blocks can be expressed as single or multiple line blocks. Note that if you set `noSingleLineBlocks` and `noMultilineBlocks` to `true` and configure them in a certain manner, you might effectively be prohibiting -all jsdoc blocks! +all JSDoc blocks! Also allows for preventing text at the very beginning or very end of blocks. ## Fixer -(TODO) +Optionally converts single line blocks to multiline ones and vice versa. ## Options -A single options object with the following properties. - -### `noZeroLineText` (defaults to `true`) - -For multiline blocks, any non-whitespace text immediately after the `/**` and -space will be reported. (Text after a newline is not reported.) - -`noMultilineBlocks` will have priority over this rule if it applies. - -### `noFinalLineText` (defaults to `true`) - -For multiline blocks, any non-whitespace text preceding the `*/` on the final -line will be reported. (Text preceding a newline is not reported.) - -`noMultilineBlocks` will have priority over this rule if it applies. - -### `noSingleLineBlocks` (defaults to `false`) - -If this is `true`, any single line blocks will be reported, except those which -are whitelisted in `singleLineTags`. - -### `requireSingleLineUnderCount` (defaults to `null`) - -If this number is set, it indicates a minimum line width for a single line of -JSDoc content spread over a multi-line comment block. If a single line is under -the minimum length, it will be reported so as to enforce single line JSDoc blocks -for such cases. Blocks are not reported which have multi-line descriptions, -multiple tags, a block description and tag, or tags with multi-line types or -descriptions. - -### `singleLineTags` (defaults to `['lends', 'type']`) - -An array of tags which can nevertheless be allowed as single line blocks when -`noSingleLineBlocks` is set. You may set this to a empty array to -cause all single line blocks to be reported. If `'*'` is present, then -the presence of a tag will allow single line blocks (but not if a tag is -missing). - -### `noMultilineBlocks` (defaults to `false`) - -Requires that jsdoc blocks are restricted to single lines only unless impacted -by the options `minimumLengthForMultiline`, `multilineTags`, or -`allowMultipleTags`. - -### `minimumLengthForMultiline` (defaults to not being in effect) - -If `noMultilineBlocks` is set with this numeric option, multiline blocks will -be permitted if containing at least the given amount of text. - -If not set, multiline blocks will not be permitted regardless of length unless -a relevant tag is present and `multilineTags` is set. - -### `multilineTags` (defaults to `['*']`) - -If `noMultilineBlocks` is set with this option, multiline blocks may be allowed -regardless of length as long as a tag or a tag of a certain type is present. - -If `*` is included in the array, the presence of a tags will allow for -multiline blocks (but not when without any tags unless the amount of text is -over an amount specified by `minimumLengthForMultiline`). - -If the array does not include `*` but lists certain tags, the presence of -such a tag will cause multiline blocks to be allowed. - -You may set this to an empty array to prevent any tag from permitting multiple -lines. - -### `allowMultipleTags` (defaults to `true`) - -If `noMultilineBlocks` is set to `true` with this option and multiple tags are -found in a block, an error will not be reported. - -Since multiple-tagged lines cannot be collapsed into a single line, this option -prevents them from being reported. Set to `false` if you really want to report -any blocks. - -This option will also be applied when there is a block description and a single -tag (since a description cannot precede a tag on a single line, and also -cannot be reliably added after the tag either). +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/no-bad-blocks.md b/.README/rules/no-bad-blocks.md index 42f917a13..2b9c11ffc 100644 --- a/.README/rules/no-bad-blocks.md +++ b/.README/rules/no-bad-blocks.md @@ -13,25 +13,11 @@ rule names). ## Fixer -(TODO) +Repairs badly-formed blocks missing two initial asterisks. ## Options -Takes an optional options object with the following. - -### `ignore` - -An array of directives that will not be reported if present at the beginning of -a multi-comment block and at-sign `/* @`. - -Defaults to `['ts-check', 'ts-expect-error', 'ts-ignore', 'ts-nocheck']` -(some directives [used by TypeScript](https://www.typescriptlang.org/docs/handbook/intro-to-js-ts.html#ts-check)). - -### `preventAllMultiAsteriskBlocks` - -A boolean (defaulting to `false`) which if `true` will prevent all -JSDoc-like blocks with more than two initial asterisks even those without -apparent tag content. +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/no-blank-block-descriptions.md b/.README/rules/no-blank-block-descriptions.md index 4cb658a82..0ed1d69a6 100644 --- a/.README/rules/no-blank-block-descriptions.md +++ b/.README/rules/no-blank-block-descriptions.md @@ -10,7 +10,7 @@ in the block description. ## Fixer -(TODO) +Strips empty lines in block descriptions. ## Context and settings diff --git a/.README/rules/no-blank-blocks.md b/.README/rules/no-blank-blocks.md index 98a31a0e2..1f8d693f6 100644 --- a/.README/rules/no-blank-blocks.md +++ b/.README/rules/no-blank-blocks.md @@ -6,13 +6,11 @@ Reports and optionally removes blocks with whitespace only. ## Fixer -(TODO) +Auto-removes blank blocks with whitespace only. #### Options -##### `enableFixer` - -Whether or not to auto-remove the blank block. Defaults to `false`. +{"gitdown": "options"} ||| |---|---| diff --git a/.README/rules/no-defaults.md b/.README/rules/no-defaults.md index a5670c0ca..e4ccda6dd 100644 --- a/.README/rules/no-defaults.md +++ b/.README/rules/no-defaults.md @@ -16,30 +16,11 @@ to an appropriate context, including, if you wish, "any". ## Fixer -(TODO) +Strips the default value. ## Options -### `noOptionalParamNames` - -Set this to `true` to report the presence of optional parameters. May be -used if the project is insisting on optionality being indicated by -the presence of ES6 default parameters (bearing in mind that such -"defaults" are only applied when the supplied value is missing or -`undefined` but not for `null` or other "falsey" values). - -### `contexts` - -Set this to an array of strings representing the AST context (or an object with -`context` and `comment` properties) where you wish the rule to be applied. -Overrides the default contexts (see below). Set to `"any"` if you want -the rule to apply to any jsdoc block throughout your files (as is necessary -for finding function blocks not attached to a function declaration or -expression, i.e., `@callback` or `@function` (or its aliases `@func` or -`@method`) (including those associated with an `@interface`). - -See the ["AST and Selectors"](../#advanced-ast-and-selectors) -section of our README for more on the expected format. +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/no-missing-syntax.md b/.README/rules/no-missing-syntax.md index e6787752e..206bb0115 100644 --- a/.README/rules/no-missing-syntax.md +++ b/.README/rules/no-missing-syntax.md @@ -38,25 +38,7 @@ not report if there were only a function declaration of the name "ignoreMe" ## Options -### `contexts` - -Set this to an array of strings representing the AST context (or an object with -`context` and `comment` properties) where you wish the rule to be applied. - -Use the `minimum` property (defaults to 1) to indicate how many are required -for the rule to be reported. - -Use the `message` property to indicate the specific error to be shown when an -error is reported for that context being found missing. You may use -`{{context}}` and `{{comment}}` with such messages. - -Set to `"any"` if you want the rule to apply to any jsdoc block throughout -your files (as is necessary for finding function blocks not attached to a -function declaration or expression, i.e., `@callback` or `@function` (or its -aliases `@func` or `@method`) (including those associated with an `@interface`). - -See the ["AST and Selectors"](../#advanced-ast-and-selectors) -section of our README for more on the expected format. +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/no-multi-asterisks.md b/.README/rules/no-multi-asterisks.md index 08e1dd607..69fbf8183 100644 --- a/.README/rules/no-multi-asterisks.md +++ b/.README/rules/no-multi-asterisks.md @@ -5,46 +5,16 @@ Prevents use of multiple asterisks at the beginning of lines. Note that if you wish to prevent multiple asterisks at the very beginning of -the jsdoc block, you should use `no-bad-blocks` (as that is not proper jsdoc +the JSDoc block, you should use `no-bad-blocks` (as that is not proper jsdoc and that rule is for catching blocks which only seem like jsdoc). ## Fixer -(TODO) +Removes multiple asterisks on middle or end lines. ## Options -### `allowWhitespace` (defaults to `false`) - -Set to `true` if you wish to allow asterisks after a space (as with Markdown): - -```js -/** - * *bold* text - */ -``` - -### `preventAtMiddleLines` (defaults to `true`) - -Prevent the likes of this: - -```js -/** - * - ** - */ -``` - -### `preventAtEnd` (defaults to `true`) - -Prevent the likes of this: - -```js -/** - * - * - **/ -``` +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/no-restricted-syntax.md b/.README/rules/no-restricted-syntax.md index 90ae2a0d6..6a4ad37f8 100644 --- a/.README/rules/no-restricted-syntax.md +++ b/.README/rules/no-restricted-syntax.md @@ -22,21 +22,7 @@ creating your own rules and forbidding structures. ## Options -### `contexts` - -Set this to an array of strings representing the AST context (or an object with -`context` and `comment` properties) where you wish the rule to be applied. - -Use the `message` property to indicate the specific error to be shown when an -error is reported for that context being found. - -Set to `"any"` if you want the rule to apply to any jsdoc block throughout -your files (as is necessary for finding function blocks not attached to a -function declaration or expression, i.e., `@callback` or `@function` (or its -aliases `@func` or `@method`) (including those associated with an `@interface`). - -See the ["AST and Selectors"](../#advanced-ast-and-selectors) -section of our README for more on the expected format. +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/no-types.md b/.README/rules/no-types.md index 49fb154a3..af32c945e 100644 --- a/.README/rules/no-types.md +++ b/.README/rules/no-types.md @@ -16,18 +16,7 @@ Strips any types that are found. ## Options -### `contexts` - -Set this to an array of strings representing the AST context (or an object with -`context` and `comment` properties) where you wish the rule to be applied. -Overrides the default contexts (see below). Set to `"any"` if you want -the rule to apply to any jsdoc block throughout your files (as is necessary -for finding function blocks not attached to a function declaration or -expression, i.e., `@callback` or `@function` (or its aliases `@func` or -`@method`) (including those associated with an `@interface`). - -See the ["AST and Selectors"](../#advanced-ast-and-selectors) -section of our README for more on the expected format. +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/no-undefined-types.md b/.README/rules/no-undefined-types.md index 56fa10315..9c0828b91 100644 --- a/.README/rules/no-undefined-types.md +++ b/.README/rules/no-undefined-types.md @@ -2,10 +2,10 @@ {"gitdown": "contents", "rootId": "no-undefined-types"} -Checks that types in jsdoc comments are defined. This can be used to check +Checks that types in JSDoc comments are defined. This can be used to check unimported types. -When enabling this rule, types in jsdoc comments will resolve as used +When enabling this rule, types in JSDoc comments will resolve as used variables, i.e. will not be marked as unused by `no-unused-vars`. In addition to considering globals found in code (or in ESLint-indicated @@ -47,18 +47,7 @@ array's items will be considered as defined for the purposes of that tag. ## Options -An option object may have the following keys: - -- `definedTypes` - This array can be populated to indicate other types which - are automatically considered as defined (in addition to globals, etc.). - Defaults to an empty array. -- `markVariablesAsUsed` - Whether to mark variables as used for the purposes - of the `no-unused-vars` rule when they are not found to be undefined. - Defaults to `true`. May be set to `false` to enforce a practice of not - importing types unless used in code. -- `disableReporting` - Whether to disable reporting of errors. Defaults to - `false`. This may be set to `true` in order to take advantage of only - marking defined variables as used. +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/require-asterisk-prefix.md b/.README/rules/require-asterisk-prefix.md index ad0ba6fe1..b8f11cb8a 100644 --- a/.README/rules/require-asterisk-prefix.md +++ b/.README/rules/require-asterisk-prefix.md @@ -6,36 +6,11 @@ Requires that each JSDoc line starts with an `*`. ## Fixer -(TODO) +Adds an asterisk for each missing line of the JSDoc block. ## Options -This rule allows an optional string argument. If it is `"always"` then a -problem is raised when there is no asterisk prefix on a given jsdoc line. If -it is `"never"` then a problem is raised when there is an asterisk present. -The default value is `"always"`. You may also set the default to `"any"` -and use the `tags` option to apply to specific tags only. - -After the string option, one may add an object with the following. - -### `tags` - -If you want different values to apply to specific tags, you may use -the `tags` option object. The keys are `always`, `never`, or `any` and -the values are arrays of tag names or the special value `*description` -which applies to the main jsdoc block description. - -```js -{ - 'jsdoc/require-asterisk-prefix': ['error', 'always', { - tags: { - always: ['*description'], - any: ['example', 'license'], - never: ['copyright'] - } - }] -} -``` +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/require-description-complete-sentence.md b/.README/rules/require-description-complete-sentence.md index 32b2599d1..9d4730c35 100644 --- a/.README/rules/require-description-complete-sentence.md +++ b/.README/rules/require-description-complete-sentence.md @@ -25,40 +25,7 @@ letter will be capitalized. ## Options -### `tags` - -If you want additional tags to be checked for their descriptions, you may -add them within this option. - -```js -{ - 'jsdoc/require-description-complete-sentence': ['error', { - tags: ['see', 'copyright'] - }] -} -``` - -The tags `@param`/`@arg`/`@argument` and `@property`/`@prop` will be properly -parsed to ensure that the checked "description" text includes only the text -after the name. - -All other tags will treat the text following the tag name, a space, and -an optional curly-bracketed type expression (and another space) as part of -its "description" (e.g., for `@returns {someType} some description`, the -description is `some description` while for `@some-tag xyz`, the description -is `xyz`). - -### `abbreviations` - -You can provide an `abbreviations` options array to avoid such strings of text -being treated as sentence endings when followed by dots. The `.` is not -necessary at the end of the array items. - -### `newlineBeforeCapsAssumesBadSentenceEnd` - -When `false` (the new default), we will not assume capital letters after -newlines are an incorrect way to end the sentence (they may be proper -nouns, for example). +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/require-description.md b/.README/rules/require-description.md index af9337d4c..537172a4a 100644 --- a/.README/rules/require-description.md +++ b/.README/rules/require-description.md @@ -8,39 +8,20 @@ have a description. * All functions must have an implicit description (e.g., text above tags) or have the option `descriptionStyle` set to `tag` (requiring `@description` (or `@desc` if that is set as your preferred tag name)). -* Every jsdoc block description (or `@description` tag if `descriptionStyle` +* Every JSDoc block description (or `@description` tag if `descriptionStyle` is `"tag"`) must have a non-empty description that explains the purpose of the method. ## Options -An options object may have any of the following properties: - -- `contexts` - Set to an array of strings representing the AST context - where you wish the rule to be applied (e.g., `ClassDeclaration` for ES6 - classes). Overrides the default contexts (see below). Set to `"any"` if - you want the rule to apply to any jsdoc block throughout your files. -- `exemptedBy` - Array of tags (e.g., `['type']`) whose presence on the - document block avoids the need for a `@description`. Defaults to an - array with `inheritdoc`. If you set this array, it will overwrite the - default, so be sure to add back `inheritdoc` if you wish its presence - to cause exemption of the rule. -- `descriptionStyle` - Whether to accept implicit descriptions (`"body"`) or - `@description` tags (`"tag"`) as satisfying the rule. Set to `"any"` to - accept either style. Defaults to `"body"`. -- `checkConstructors` - A value indicating whether `constructor`s should be - checked. Defaults to `true`. -- `checkGetters` - A value indicating whether getters should be checked. - Defaults to `true`. -- `checkSetters` - A value indicating whether setters should be checked. - Defaults to `true`. +{"gitdown": "options"} ## Context and settings | | | | -------- | ---------------------- | | Context | `ArrowFunctionExpression`, `FunctionDeclaration`, `FunctionExpression`; others when `contexts` option enabled | -| Tags | `description` or jsdoc block | +| Tags | `description` or JSDoc block | | Aliases | `desc` | | Recommended | false | | Options |`checkConstructors`, `checkGetters`, `checkSetters`, `contexts`, `descriptionStyle`, `exemptedBy`| diff --git a/.README/rules/require-example.md b/.README/rules/require-example.md index abf294f50..0cd01533f 100644 --- a/.README/rules/require-example.md +++ b/.README/rules/require-example.md @@ -15,49 +15,7 @@ report a missing example description after this is added. ## Options -This rule has an object option. - -### `exemptedBy` - -Array of tags (e.g., `['type']`) whose presence on the document -block avoids the need for an `@example`. Defaults to an array with -`inheritdoc`. If you set this array, it will overwrite the default, -so be sure to add back `inheritdoc` if you wish its presence to cause -exemption of the rule. - -### `exemptNoArguments` - -Boolean to indicate that no-argument functions should not be reported for -missing `@example` declarations. - -### `contexts` - -Set this to an array of strings representing the AST context (or an object with -`context` and `comment` properties) where you wish the rule to be applied. -(e.g., `ClassDeclaration` for ES6 -classes). Overrides the default contexts (see below). Set to `"any"` if you -want the rule to apply to any jsdoc block throughout your files. - -See the ["AST and Selectors"](../#advanced-ast-and-selectors) -section of our README for more on the expected format. - -### `checkConstructors` - -A value indicating whether `constructor`s should be checked. -Defaults to `true`. - -### `checkGetters` - -A value indicating whether getters should be checked. Defaults to `false`. - -### `checkSetters` - -A value indicating whether setters should be checked. Defaults to `false`. - -### `enableFixer` - -A boolean on whether to enable the fixer (which adds an empty `@example` block). -Defaults to `true`. +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/require-file-overview.md b/.README/rules/require-file-overview.md index 797392ce9..b1c8adc01 100644 --- a/.README/rules/require-file-overview.md +++ b/.README/rules/require-file-overview.md @@ -14,60 +14,7 @@ Checks that: ## Options -### `tags` - -The keys of this object are tag names, and the values are configuration -objects indicating what will be checked for these whole-file tags. - -Each configuration object has the following boolean keys (which default -to `false` when this option is supplied): `mustExist`, `preventDuplicates`, -`initialCommentsOnly`. These correspond to the three items above. - -When no `tags` is present, the default is: - -```json -{ - "file": { - "initialCommentsOnly": true, - "mustExist": true, - "preventDuplicates": true, - } -} -``` - -You can add additional tag names and/or override `file` if you supply this -option, e.g., in place of or in addition to `file`, giving other potential -file global tags like `@license`, `@copyright`, `@author`, `@module` or -`@exports`, optionally restricting them to a single use or preventing them -from being preceded by anything besides comments. - -For example: - -```js -{ - "license": { - "mustExist": true, - "preventDuplicates": true, - } -} -``` - -This would require one and only one `@license` in the file, though because -`initialCommentsOnly` is absent and defaults to `false`, the `@license` -can be anywhere. - -In the case of `@license`, you can use this rule along with the -`check-values` rule (with its `allowedLicenses` or `licensePattern` options), -to enforce a license whitelist be present on every JS file. - -Note that if you choose to use `preventDuplicates` with `license`, you still -have a way to allow multiple licenses for the whole page by using the SPDX -"AND" expression, e.g., `@license (MIT AND GPL-3.0)`. - -Note that the tag names are the main jsdoc tag name, so you should use `file` -in this configuration object regardless of whether you have configured -`fileoverview` instead of `file` on `tagNamePreference` (i.e., `fileoverview` -will be checked, but you must use `file` on the configuration object). +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/require-hyphen-before-param-description.md b/.README/rules/require-hyphen-before-param-description.md index 87403b0db..68906a874 100644 --- a/.README/rules/require-hyphen-before-param-description.md +++ b/.README/rules/require-hyphen-before-param-description.md @@ -10,27 +10,7 @@ Adds a hyphen for "always" and removes a hyphen for "never". ## Options -This rule takes one optional string argument and an optional options object. - -If the string is `"always"` then a problem is raised when there is no hyphen -before the description. If it is `"never"` then a problem is raised when there -is a hyphen before the description. The default value is `"always"`. - -Even if hyphens are set to "always" appear after the tag name, they will -actually be forbidden in the event that they are followed immediately by -the end of a line (this will otherwise cause Visual Studio Code to display -incorrectly). - -The options object may have the following properties to indicate behavior for -other tags besides the `@param` tag (or the `@arg` tag if so set): - -- `tags` - Object whose keys indicate different tags to check for the - presence or absence of hyphens; the key value should be "always" or "never", - indicating how hyphens are to be applied, e.g., `{property: 'never'}` - to ensure `@property` never uses hyphens. A key can also be set as `*`, e.g., - `'*': 'always'` to apply hyphen checking to any tag (besides the preferred - `@param` tag which follows the main string option setting and besides any - other `tags` entries). +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/require-jsdoc.md b/.README/rules/require-jsdoc.md index bd5bd2097..67da02cd9 100644 --- a/.README/rules/require-jsdoc.md +++ b/.README/rules/require-jsdoc.md @@ -2,7 +2,7 @@ {"gitdown": "contents", "rootId": "require-jsdoc"} -Checks for presence of jsdoc comments, on class declarations as well as +Checks for presence of JSDoc comments, on class declarations as well as functions. ## Fixer @@ -14,120 +14,7 @@ to insert. ## Options -Accepts one optional options object with the following optional keys. - -### `publicOnly` - -This option will insist that missing jsdoc blocks are only reported for -function bodies / class declarations that are exported from the module. -May be a boolean or object. If set to `true`, the defaults below will be -used. If unset, jsdoc block reporting will not be limited to exports. - -This object supports the following optional boolean keys (`false` unless -otherwise noted): - -- `ancestorsOnly` - Only check node ancestors to check if node is exported -- `esm` - ESM exports are checked for JSDoc comments (Defaults to `true`) -- `cjs` - CommonJS exports are checked for JSDoc comments (Defaults to `true`) -- `window` - Window global exports are checked for JSDoc comments - -### `require` - -An object with the following optional boolean keys which all default to -`false` except as noted, indicating the contexts where the rule will apply: - -- `ArrowFunctionExpression` -- `ClassDeclaration` -- `ClassExpression` -- `FunctionDeclaration` (defaults to `true`) -- `FunctionExpression` -- `MethodDefinition` - -### `contexts` - -Set this to an array of strings or objects representing the additional AST -contexts where you wish the rule to be applied (e.g., `Property` for -properties). If specified as an object, it should have a `context` property -and can have an `inlineCommentBlock` property which, if set to `true`, will -add an inline `/** */` instead of the regular, multi-line, indented jsdoc -block which will otherwise be added. Defaults to an empty array. Contexts -may also have their own `minLineCount` property. - -Note that you may need to disable `require` items (e.g., `MethodDefinition`) -if you are specifying a more precise form in `contexts` (e.g., `MethodDefinition:not([accessibility="private"] > FunctionExpression`). - -See the ["AST and Selectors"](../#advanced-ast-and-selectors) -section of our README for more on the expected format. - -### `exemptEmptyConstructors` - -Default: true - -When `true`, the rule will not report missing jsdoc blocks above constructors -with no parameters or return values (this is enabled by default as the class -name or description should be seen as sufficient to convey intent). - -### `exemptEmptyFunctions` - -Default: false. - -When `true`, the rule will not report missing jsdoc blocks above -functions/methods with no parameters or return values (intended where -function/method names are sufficient for themselves as documentation). - -### `checkConstructors` - -A value indicating whether `constructor`s should be checked. Defaults to -`true`. When `true`, `exemptEmptyConstructors` may still avoid reporting when -no parameters or return values are found. - -### `checkGetters` - -A value indicating whether getters should be checked. Besides setting as a -boolean, this option can be set to the string `"no-setter"` to indicate that -getters should be checked but only when there is no setter. This may be useful -if one only wishes documentation on one of the two accessors. Defaults to -`false`. - -### `checkSetters` - -A value indicating whether setters should be checked. Besides setting as a -boolean, this option can be set to the string `"no-getter"` to indicate that -setters should be checked but only when there is no getter. This may be useful -if one only wishes documentation on one of the two accessors. Defaults to -`false`. - -### `enableFixer` - -A boolean on whether to enable the fixer (which adds an empty jsdoc block). -Defaults to `true`. - -### `minLineCount` - -An integer to indicate a minimum number of lines expected for a node in order -for it to require documentation. Defaults to `undefined`. This option will -apply to any context; see `contexts` for line counts per context. - -### `fixerMessage` - -An optional message to add to the inserted JSDoc block. Defaults to the -empty string. - -### `skipInterveningOverloadedDeclarations` - -If `true`, will skip above uncommented overloaded functions to check -for a comment block (e.g., at the top of a set of overloaded functions). - -If `false`, will force each overloaded function to be checked for a -comment block. - -Defaults to `true`. - -### `exemptOverloadedImplementations` - -If set to `true` will avoid checking an overloaded function's implementation. - -Defaults to `false`. +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/require-param-description.md b/.README/rules/require-param-description.md index 3f73e2ae0..958c59026 100644 --- a/.README/rules/require-param-description.md +++ b/.README/rules/require-param-description.md @@ -11,31 +11,7 @@ Will exempt destructured roots and their children if ## Options -### `setDefaultDestructuredRootDescription` - -Whether to set a default destructured root description. For example, you may -wish to avoid manually having to set the description for a `@param` -corresponding to a destructured root object as it should always be the same -type of object. Uses `defaultDestructuredRootDescription` for the description -string. Defaults to `false`. - -### `defaultDestructuredRootDescription` - -The description string to set by default for destructured roots. Defaults to -"The root object". - -### `contexts` - -Set this to an array of strings representing the AST context (or an object with -`context` and `comment` properties) where you wish the rule to be applied. -Overrides the default contexts (see below). Set to `"any"` if you want -the rule to apply to any jsdoc block throughout your files (as is necessary -for finding function blocks not attached to a function declaration or -expression, i.e., `@callback` or `@function` (or its aliases `@func` or -`@method`) (including those associated with an `@interface`). - -See the ["AST and Selectors"](../#advanced-ast-and-selectors) -section of our README for more on the expected format. +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/require-param-name.md b/.README/rules/require-param-name.md index bd8c34615..23f91e7ac 100644 --- a/.README/rules/require-param-name.md +++ b/.README/rules/require-param-name.md @@ -10,18 +10,7 @@ Requires that all `@param` tags have names. ## Options -### `contexts` - -Set this to an array of strings representing the AST context (or an object with -`context` and `comment` properties) where you wish the rule to be applied. -Overrides the default contexts (see below). Set to `"any"` if you want -the rule to apply to any jsdoc block throughout your files (as is necessary -for finding function blocks not attached to a function declaration or -expression, i.e., `@callback` or `@function` (or its aliases `@func` or -`@method`) (including those associated with an `@interface`). - -See the ["AST and Selectors"](../#advanced-ast-and-selectors) -section of our README for more on the expected format. +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/require-param-type.md b/.README/rules/require-param-type.md index 82772966b..4a9f81e33 100644 --- a/.README/rules/require-param-type.md +++ b/.README/rules/require-param-type.md @@ -11,30 +11,7 @@ Will exempt destructured roots and their children if ## Options -### `setDefaultDestructuredRootType` - -Whether to set a default destructured root type. For example, you may wish -to avoid manually having to set the type for a `@param` -corresponding to a destructured root object as it is always going to be an -object. Uses `defaultDestructuredRootType` for the type string. Defaults to -`false`. - -### `defaultDestructuredRootType` - -The type string to set by default for destructured roots. Defaults to "object". - -### `contexts` - -Set this to an array of strings representing the AST context (or an object with -`context` and `comment` properties) where you wish the rule to be applied. -Overrides the default contexts (see below). Set to `"any"` if you want -the rule to apply to any jsdoc block throughout your files (as is necessary -for finding function blocks not attached to a function declaration or -expression, i.e., `@callback` or `@function` (or its aliases `@func` or -`@method`) (including those associated with an `@interface`). - -See the ["AST and Selectors"](../#advanced-ast-and-selectors) -section of our README for more on the expected format. +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/require-param.md b/.README/rules/require-param.md index db665383c..62d96285f 100644 --- a/.README/rules/require-param.md +++ b/.README/rules/require-param.md @@ -25,7 +25,7 @@ function quux ({foo: bar, baz: bax = 5}) { } ``` -...the fixed jsdoc will be: +...the fixed JSDoc will be: ```js /** @@ -51,7 +51,7 @@ function quux ([foo, bar]) { } ``` -..the fixed jsdoc will be: +..the fixed JSDoc will be: ```js /** @@ -75,7 +75,7 @@ function quux ({foo}, {bar}, {baz}) { } ``` -...the default jsdoc that would be added if the fixer is enabled would be: +...the default JSDoc that would be added if the fixer is enabled would be: ```js /** @@ -98,7 +98,7 @@ And one can have the count begin at another number (e.g., `1`) by changing ### Rest Element (`RestElement`) insertions The fixer will automatically report/insert -[jsdoc repeatable parameters](https://jsdoc.app/tags-param.html#multiple-types-and-repeatable-parameters) +[JSDoc repeatable parameters](https://jsdoc.app/tags-param.html#multiple-types-and-repeatable-parameters) if missing. ```js @@ -111,7 +111,7 @@ function baar ([a, ...extra]) { } ``` -..becomes: +...becomes: ```js /** @@ -172,7 +172,7 @@ function quux ({num, ...extra}) { } ``` -You may wish to manually note in your jsdoc for `extra` that this is a +You may wish to manually note in your JSDoc for `extra` that this is a rest property, however, as jsdoc [does not appear](https://github.com/jsdoc/jsdoc/issues/1773) to currently support syntax or output to distinguish rest properties from @@ -182,206 +182,7 @@ function signature, it may appear that there is an actual property named ## Options -An options object accepts the following optional properties: - -### `enableFixer` - -Whether to enable the fixer. Defaults to `true`. - -### `enableRootFixer` - -Whether to enable the auto-adding of incrementing roots (see the "Fixer" -section). Defaults to `true`. Has no effect if `enableFixer` is set to -`false`. - -### `enableRestElementFixer` - -Whether to enable the rest element fixer (see -"Rest Element (`RestElement`) insertions"). Defaults to `true`. - -### `checkRestProperty` - -If set to `true`, will report (and add fixer insertions) for missing rest -properties. Defaults to `false`. - -If set to `true`, note that you can still document the subproperties of the -rest property using other jsdoc features, e.g., `@typedef`: - -```js -/** - * @typedef ExtraOptions - * @property innerProp1 - * @property innerProp2 - */ - -/** - * @param cfg - * @param cfg.num - * @param {ExtraOptions} extra - */ -function quux ({num, ...extra}) { -} -``` - -Setting this option to `false` (the default) may be useful in cases where -you already have separate `@param` definitions for each of the properties -within the rest property. - -For example, with the option disabled, this will not give an error despite -`extra` not having any definition: - -```js -/** - * @param cfg - * @param cfg.num - */ -function quux ({num, ...extra}) { -} -``` - -Nor will this: - -```js -/** - * @param cfg - * @param cfg.num - * @param cfg.innerProp1 - * @param cfg.innerProp2 - */ -function quux ({num, ...extra}) { -} -``` - -### `autoIncrementBase` - -Numeric to indicate the number at which to begin auto-incrementing roots. -Defaults to `0`. - -### `unnamedRootBase` - -An array of root names to use in the fixer when roots are missing. Defaults -to `['root']`. Note that only when all items in the array besides the last -are exhausted will auto-incrementing occur. So, with -`unnamedRootBase: ['arg', 'config']`, the following: - -```js -function quux ({foo}, [bar], {baz}) { -} -``` - -...will get the following jsdoc block added: - -```js -/** -* @param arg -* @param arg.foo -* @param config0 -* @param config0."0" (`bar`) -* @param config1 -* @param config1.baz -*/ -``` - -### `exemptedBy` - -Array of tags (e.g., `['type']`) whose presence on the document block -avoids the need for a `@param`. Defaults to an array with -`inheritdoc`. If you set this array, it will overwrite the default, -so be sure to add back `inheritdoc` if you wish its presence to cause -exemption of the rule. - -### `checkTypesPattern` - -When one specifies a type, unless it is of a generic type, like `object` -or `array`, it may be considered unnecessary to have that object's -destructured components required, especially where generated docs will -link back to the specified type. For example: - -```js -/** - * @param {SVGRect} bbox - a SVGRect - */ -export const bboxToObj = function ({x, y, width, height}) { - return {x, y, width, height}; -}; -``` - -By default `checkTypesPattern` is set to -`/^(?:[oO]bject|[aA]rray|PlainObject|Generic(?:Object|Array))$/v`, -meaning that destructuring will be required only if the type of the `@param` -(the text between curly brackets) is a match for "Object" or "Array" (with or -without initial caps), "PlainObject", or "GenericObject", "GenericArray" (or -if no type is present). So in the above example, the lack of a match will -mean that no complaint will be given about the undocumented destructured -parameters. - -Note that the `/` delimiters are optional, but necessary to add flags. - -Defaults to using (only) the `v` flag, so to add your own flags, encapsulate -your expression as a string, but like a literal, e.g., `/^object$/vi`. - -You could set this regular expression to a more expansive list, or you -could restrict it such that even types matching those strings would not -need destructuring. - -### `contexts` - -Set this to an array of strings representing the AST context (or an object with -`context` and `comment` properties) where you wish the rule to be applied. -Overrides the default contexts (see below). May be useful for adding such as -`TSMethodSignature` in TypeScript or restricting the contexts -which are checked. - -See the ["AST and Selectors"](../#advanced-ast-and-selectors) -section of our README for more on the expected format. - -### `checkConstructors` - -A value indicating whether `constructor`s should be checked. Defaults to -`true`. - -### `checkGetters` - -A value indicating whether getters should be checked. Defaults to `false`. - -### `checkSetters` - -A value indicating whether setters should be checked. Defaults to `false`. - -### `checkDestructured` - -Whether to require destructured properties. Defaults to `true`. - -### `checkDestructuredRoots` - -Whether to check the existence of a corresponding `@param` for root objects -of destructured properties (e.g., that for `function ({a, b}) {}`, that there -is something like `@param myRootObj` defined that can correspond to -the `{a, b}` object parameter). - -If `checkDestructuredRoots` is `false`, `checkDestructured` will also be -implied to be `false` (i.e., the inside of the roots will not be checked -either, e.g., it will also not complain if `a` or `b` do not have their own -documentation). Defaults to `true`. - -### `useDefaultObjectProperties` - -Set to `true` if you wish to expect documentation of properties on objects -supplied as default values. Defaults to `false`. - -### `ignoreWhenAllParamsMissing` - -Set to `true` to ignore reporting when all params are missing. Defaults to -`false`. - -### `interfaceExemptsParamsCheck` - -Set if you wish TypeScript interfaces to exempt checks for the existence of -`@param`'s. - -Will check for a type defining the function itself (on a variable -declaration) or if there is a single destructured object with a type. -Defaults to `false`. +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/require-returns-check.md b/.README/rules/require-returns-check.md index af1ab4f17..fda45348f 100644 --- a/.README/rules/require-returns-check.md +++ b/.README/rules/require-returns-check.md @@ -15,27 +15,7 @@ Will also report if multiple `@returns` tags are present. ## Options -- `exemptGenerators`- Because a generator might be labeled as having a - `IterableIterator` `@returns` value (along with an iterator type - corresponding to the type of any `yield` statements), projects might wish to - leverage `@returns` in generators even without a` return` statement. This - option is therefore `true` by default in `typescript` mode (in "jsdoc" mode, - one might be more likely to take advantage of `@yields`). Set it to `false` - if you wish for a missing `return` to be flagged regardless. -- `exemptAsync` - By default, functions which return a `Promise` that are not - detected as resolving with a non-`undefined` value and `async` functions - (even ones that do not explicitly return a value, as these are returning a - `Promise` implicitly) will be exempted from reporting by this rule. - If you wish to insist that only `Promise`'s which resolve to - non-`undefined` values or `async` functions with explicit `return`'s will - be exempted from reporting (i.e., that `async` functions can be reported - if they lack an explicit (non-`undefined`) `return` when a `@returns` is - present), you can set `exemptAsync` to `false` on the options object. -- `reportMissingReturnForUndefinedTypes` - If `true` and no return or - resolve value is found, this setting will even insist that reporting occur - with `void` or `undefined` (including as an indicated `Promise` type). - Unlike `require-returns`, with this option in the rule, one can - *discourage* the labeling of `undefined` types. Defaults to `false`. +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/require-returns-description.md b/.README/rules/require-returns-description.md index 59b826933..a174e363f 100644 --- a/.README/rules/require-returns-description.md +++ b/.README/rules/require-returns-description.md @@ -8,18 +8,7 @@ or if it is `Promise` or `Promise`. ## Options -### `contexts` - -Set this to an array of strings representing the AST context (or an object with -`context` and `comment` properties) where you wish the rule to be applied. -Overrides the default contexts (see below). Set to `"any"` if you want -the rule to apply to any jsdoc block throughout your files (as is necessary -for finding function blocks not attached to a function declaration or -expression, i.e., `@callback` or `@function` (or its aliases `@func` or -`@method`) (including those associated with an `@interface`). - -See the ["AST and Selectors"](../#advanced-ast-and-selectors) -section of our README for more on the expected format. +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/require-returns-type.md b/.README/rules/require-returns-type.md index fa18b9ad7..701e1f022 100644 --- a/.README/rules/require-returns-type.md +++ b/.README/rules/require-returns-type.md @@ -6,18 +6,7 @@ Requires that `@returns` tag has a `type` value (in curly brackets). ## Options -### `contexts` - -Set this to an array of strings representing the AST context (or an object with -`context` and `comment` properties) where you wish the rule to be applied. -Overrides the default contexts (see below). Set to `"any"` if you want -the rule to apply to any jsdoc block throughout your files (as is necessary -for finding function blocks not attached to a function declaration or -expression, i.e., `@callback` or `@function` (or its aliases `@func` or -`@method`) (including those associated with an `@interface`). - -See the ["AST and Selectors"](../#advanced-ast-and-selectors) -section of our README for more on the expected format. +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/require-returns.md b/.README/rules/require-returns.md index af32243c6..26c131333 100644 --- a/.README/rules/require-returns.md +++ b/.README/rules/require-returns.md @@ -6,45 +6,13 @@ Requires that return statements are documented. Will also report if multiple `@returns` tags are present. +## Fixer + +Adds a blank `@returns`. + ## Options -- `checkConstructors` - A value indicating whether `constructor`s should - be checked for `@returns` tags. Defaults to `false`. -- `checkGetters` - Boolean to determine whether getter methods should - be checked for `@returns` tags. Defaults to `true`. -- `exemptedBy` - Array of tags (e.g., `['type']`) whose presence on the - document block avoids the need for a `@returns`. Defaults to an array - with `inheritdoc`. If you set this array, it will overwrite the default, - so be sure to add back `inheritdoc` if you wish its presence to cause - exemption of the rule. -- `forceRequireReturn` - Set to `true` to always insist on - `@returns` documentation regardless of implicit or explicit `return`'s - in the function. May be desired to flag that a project is aware of an - `undefined`/`void` return. Defaults to `false`. -- `forceReturnsWithAsync` - By default `async` functions that do not explicitly - return a value pass this rule as an `async` function will always return a - `Promise`, even if the `Promise` resolves to void. You can force all - `async` functions (including ones with an explicit `Promise` but no - detected non-`undefined` `resolve` value) to require `@return` - documentation by setting `forceReturnsWithAsync` to `true` on the options - object. This may be useful for flagging that there has been consideration - of return type. Defaults to `false`. -- `contexts` - Set this to an array of strings representing the AST context - (or an object with `context` and `comment` properties) where you wish - the rule to be applied. - Overrides the default contexts (see below). Set to `"any"` if you want - the rule to apply to any jsdoc block throughout your files (as is necessary - for finding function blocks not attached to a function declaration or - expression, i.e., `@callback` or `@function` (or its aliases `@func` or - `@method`) (including those associated with an `@interface`). This - rule will only apply on non-default contexts when there is such a tag - present and the `forceRequireReturn` option is set or if the - `forceReturnsWithAsync` option is set with a present `@async` tag - (since we are not checking against the actual `return` values in these - cases). -- `enableFixer` - Whether to enable the fixer to add a blank `@returns`. - Defaults to `false`. -- `publicOnly` - See docs for `require-jsdoc`. +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/require-template.md b/.README/rules/require-template.md index b1aafaf81..ba50c0610 100644 --- a/.README/rules/require-template.md +++ b/.README/rules/require-template.md @@ -25,26 +25,7 @@ letters are templates. ## Options -### `requireSeparateTemplates` - -Requires that each template have its own separate line, i.e., preventing -templates of this format: - -```js -/** - * @template T, U, V - */ -``` - -Defaults to `false`. - -### `exemptedBy` - -Array of tags (e.g., `['type']`) whose presence on the document -block avoids the need for a `@template`. Defaults to an array with -`inheritdoc`. If you set this array, it will overwrite the default, -so be sure to add back `inheritdoc` if you wish its presence to cause -exemption of the rule. +{"gitdown": "options"} ||| |---|---| diff --git a/.README/rules/require-throws.md b/.README/rules/require-throws.md index d1ec58d43..2a32ffb0b 100644 --- a/.README/rules/require-throws.md +++ b/.README/rules/require-throws.md @@ -13,23 +13,7 @@ on why TypeScript doesn't offer such a feature. ## Options -- `exemptedBy` - Array of tags (e.g., `['type']`) whose presence on the - document block avoids the need for a `@throws`. Defaults to an array - with `inheritdoc`. If you set this array, it will overwrite the default, - so be sure to add back `inheritdoc` if you wish its presence to cause - exemption of the rule. -- `contexts` - Set this to an array of strings representing the AST context - (or an object with `context` and `comment` properties) where you wish - the rule to be applied. - Overrides the default contexts (see below). Set to `"any"` if you want - the rule to apply to any jsdoc block throughout your files (as is necessary - for finding function blocks not attached to a function declaration or - expression, i.e., `@callback` or `@function` (or its aliases `@func` or - `@method`) (including those associated with an `@interface`). - -```js -'jsdoc/require-throws': 'error', -``` +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/require-yields-check.md b/.README/rules/require-yields-check.md index af2bb4fdc..eb6a825bd 100644 --- a/.README/rules/require-yields-check.md +++ b/.README/rules/require-yields-check.md @@ -19,22 +19,7 @@ Will also report if multiple `@yields` tags are present. ## Options -- `checkGeneratorsOnly` - Avoids checking the function body and merely insists - that all generators have `@yields`. This can be an optimization with the - ESLint `require-yield` rule, as that rule already ensures a `yield` is - present in generators, albeit assuming the generator is not empty). - Defaults to `false`. -- `next` - If `true`, this option will insist that any use of a (non-standard) - `@next` tag (in addition to any `@yields` tag) will be matched by a `yield` - which uses a return value in the body of the generator (e.g., - `const rv = yield;` or `const rv = yield value;`). This (non-standard) - tag is intended to be used to indicate a type and/or description of - the value expected to be supplied by the user when supplied to the iterator - by its `next` method, as with `it.next(value)` (with the iterator being - the `Generator` iterator that is returned by the call to the generator - function). This option will report an error if the generator function body - merely has plain `yield;` or `yield value;` statements without returning - the values. Defaults to `false`. +{"gitdown": "options"} ## Context and settings @@ -44,7 +29,7 @@ Will also report if multiple `@yields` tags are present. |Tags|`yields`| |Aliases|`yield`| |Recommended|true| -|Options|`checkGeneratorsOnly`, `contexts`, `exemptedBy`, `next`| +|Options|`checkGeneratorsOnly`, `contexts`, `next`| ## Failing examples diff --git a/.README/rules/require-yields.md b/.README/rules/require-yields.md index 69fd6ca78..c1060edab 100644 --- a/.README/rules/require-yields.md +++ b/.README/rules/require-yields.md @@ -11,51 +11,7 @@ option to expect a non-standard `@next` tag. ## Options -- `exemptedBy` - Array of tags (e.g., `['type']`) whose presence on the - document block avoids the need for a `@yields`. Defaults to an array - with `inheritdoc`. If you set this array, it will overwrite the default, - so be sure to add back `inheritdoc` if you wish its presence to cause - exemption of the rule. -- `forceRequireYields` - Set to `true` to always insist on - `@yields` documentation for generators even if there are only - expressionless `yield` statements in the function. May be desired to flag - that a project is aware of an `undefined`/`void` yield. Defaults to - `false`. -- `contexts` - Set this to an array of strings representing the AST context - (or an object with `context` and `comment` properties) where you wish - the rule to be applied. - Overrides the default contexts (see below). Set to `"any"` if you want - the rule to apply to any jsdoc block throughout your files (as is necessary - for finding function blocks not attached to a function declaration or - expression, i.e., `@callback` or `@function` (or its aliases `@func` or - `@method`) (including those associated with an `@interface`). This - rule will only apply on non-default contexts when there is such a tag - present and the `forceRequireYields` option is set or if the - `withGeneratorTag` option is set with a present `@generator` tag - (since we are not checking against the actual `yield` values in these - cases). -- `withGeneratorTag` - If a `@generator` tag is present on a block, require - `@yields`/`@yield`. Defaults to `true`. See `contexts` to `any` if you want - to catch `@generator` with `@callback` or such not attached to a function. -- `next` - If `true`, this option will insist that any use of a `yield` return - value (e.g., `const rv = yield;` or `const rv = yield value;`) has a - (non-standard) `@next` tag (in addition to any `@yields` tag) so as to be - able to document the type expected to be supplied into the iterator - (the `Generator` iterator that is returned by the call to the generator - function) to the iterator (e.g., `it.next(value)`). The tag will not be - expected if the generator function body merely has plain `yield;` or - `yield value;` statements without returning the values. Defaults to - `false`. -- `forceRequireNext` - Set to `true` to always insist on - `@next` documentation even if there are no `yield` statements in the - function or none return values. May be desired to flag that a project is - aware of the expected yield return being `undefined`. Defaults to `false`. -- `nextWithGeneratorTag` - If a `@generator` tag is present on a block, require - (non-standard ) `@next` (see `next` option). This will require using `void` - or `undefined` in cases where generators do not use the `next()`-supplied - incoming `yield`-returned value. Defaults to `false`. See `contexts` to - `any` if you want to catch `@generator` with `@callback` or such not - attached to a function. +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/sort-tags.md b/.README/rules/sort-tags.md index e192e259c..96569f25c 100644 --- a/.README/rules/sort-tags.md +++ b/.README/rules/sort-tags.md @@ -21,221 +21,12 @@ You may, however, safely set the "any" option in that rule along with ## Fixer -(TODO) +Sorts tags by a specified sequence according to tag name, optionally +adding line breaks between tag groups. ## Options -### `tagSequence` - -An array of tag group objects indicating the preferred sequence for sorting tags. - -Each item in the array should be an object with a `tags` property set to an array -of tag names. - -Tag names earlier in the list will be arranged first. The relative position of -tags of the same name will not be changed. - -Earlier groups will also be arranged before later groups, but with the added -feature that additional line breaks may be added between (or before or after) -such groups (depending on the setting of `linesBetween`). - -Tag names not in the list will be grouped together at the end. The pseudo-tag -`-other` can be used to place them anywhere else if desired. The tags will be -placed in their order of appearance, or alphabetized if `alphabetizeExtras` -is enabled, see more below about that option. - -Defaults to the array below (noting that it is just a single tag group with -no lines between groups by default). - -Please note that this order is still experimental, so if you want to retain -a fixed order that doesn't change into the future, supply your own -`tagSequence`. - -```js -[{tags: [ - // Brief descriptions - 'summary', - 'typeSummary', - - // Module/file-level - 'module', - 'exports', - 'file', - 'fileoverview', - 'overview', - 'import', - - // Identifying (name, type) - 'typedef', - 'interface', - 'record', - 'template', - 'name', - 'kind', - 'type', - 'alias', - 'external', - 'host', - 'callback', - 'func', - 'function', - 'method', - 'class', - 'constructor', - - // Relationships - 'modifies', - 'mixes', - 'mixin', - 'mixinClass', - 'mixinFunction', - 'namespace', - 'borrows', - 'constructs', - 'lends', - 'implements', - 'requires', - - // Long descriptions - 'desc', - 'description', - 'classdesc', - 'tutorial', - 'copyright', - 'license', - - // Simple annotations - 'const', - 'constant', - 'final', - 'global', - 'readonly', - 'abstract', - 'virtual', - 'var', - 'member', - 'memberof', - 'memberof!', - 'inner', - 'instance', - 'inheritdoc', - 'inheritDoc', - 'override', - 'hideconstructor', - - // Core function/object info - 'param', - 'arg', - 'argument', - 'prop', - 'property', - 'return', - 'returns', - - // Important behavior details - 'async', - 'generator', - 'default', - 'defaultvalue', - 'enum', - 'augments', - 'extends', - 'throws', - 'exception', - 'yield', - 'yields', - 'event', - 'fires', - 'emits', - 'listens', - 'this', - - // Access - 'static', - 'private', - 'protected', - 'public', - 'access', - 'package', - - '-other', - - // Supplementary descriptions - 'see', - 'example', - - // METADATA - - // Other Closure (undocumented) metadata - 'closurePrimitive', - 'customElement', - 'expose', - 'hidden', - 'idGenerator', - 'meaning', - 'ngInject', - 'owner', - 'wizaction', - - // Other Closure (documented) metadata - 'define', - 'dict', - 'export', - 'externs', - 'implicitCast', - 'noalias', - 'nocollapse', - 'nocompile', - 'noinline', - 'nosideeffects', - 'polymer', - 'polymerBehavior', - 'preserve', - 'struct', - 'suppress', - 'unrestricted', - - // @homer0/prettier-plugin-jsdoc metadata - 'category', - - // Non-Closure metadata - 'ignore', - 'author', - 'version', - 'variation', - 'since', - 'deprecated', - 'todo', -]}]; -``` - -### `alphabetizeExtras` - -Defaults to `false`. Alphabetizes any items not within `tagSequence` after any -items within `tagSequence` (or in place of the special `-other` pseudo-tag) -are sorted. - -If you want all your tags alphabetized, you can supply an empty array for -`tagSequence` along with setting this option to `true`. - -### `linesBetween` - -Indicates the number of lines to be added between tag groups. Defaults to 1. -Do not set to 0 or 2+ if you are using `tag-lines` and `"always"` and do not -set to 1+ if you are using `tag-lines` and `"never"`. - -### `reportTagGroupSpacing` - -Whether to enable reporting and fixing of line breaks between tag groups -as set by `linesBetween`. Defaults to `true`. Note that the very last tag -will not have spacing applied regardless. For adding line breaks there, you -may wish to use the `endLines` option of the `tag-lines` rule. - -### `reportIntraTagGroupSpacing` - -Whether to enable reporting and fixing of line breaks within tags of a given -tag group. Defaults to `true` which will remove any line breaks at the end of -such tags. Do not use with `true` if you are using `tag-lines` and `always`. +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/tag-lines.md b/.README/rules/tag-lines.md index f7d459b7e..7357d548a 100644 --- a/.README/rules/tag-lines.md +++ b/.README/rules/tag-lines.md @@ -13,50 +13,11 @@ may try to impose a conflicting number of lines. ## Fixer -(TODO) +Removes or adds lines between tags or trailing tags. ## Options -The first option is a single string set to "always", "never", or "any" -(defaults to "never"). - -"any" is only useful with `tags` (allowing non-enforcement of lines except -for particular tags) or with `startLines` or `endLines`. It is also -necessary if using the linebreak-setting options of the `sort-tags` rule -so that the two rules won't conflict in both attempting to set lines -between tags. - -The second option is an object with the following optional properties. - -### `count` (defaults to 1) - -Use with "always" to indicate the number of lines to require be present. - -### `applyToEndTag` (defaults to `true`) - -Set to `false` and use with "always" to indicate the normal lines to be -added after tags should not be added after the final tag. - -### `startLines` (defaults to `0`) - -If not set to `null`, will enforce end lines to the given count before the -first tag only, unless there is only whitespace content, in which case, -a line count will not be enforced. - -### `endLines` (defaults to `0`) - -If not set to `null`, will enforce end lines to the given count on the -final tag only. - -### `tags` (default to empty object) - -Overrides the default behavior depending on specific tags. - -An object whose keys are tag names and whose values are objects with the -following keys: - -1. `lines` - Set to `always`, `never`, or `any` to override. -2. `count` - Overrides main `count` (for "always") +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/text-escaping.md b/.README/rules/text-escaping.md index ecfd9ebe1..29b1408be 100644 --- a/.README/rules/text-escaping.md +++ b/.README/rules/text-escaping.md @@ -14,20 +14,12 @@ within it or your documentation. ## Fixer -(TODO) +Auto-escapes certain HTML or Markdown characters that are input within block and +tag descriptions. ## Options -### `escapeHTML` - -This option escapes all `<` and `&` characters (except those followed by -whitespace which are treated as literals by Visual Studio Code). Defaults to -`false`. - -### `escapeMarkdown` - -This option escapes the first backtick (`` ` ``) in a paired sequence. -Defaults to `false`. +{"gitdown": "options"} ## Context and settings diff --git a/.README/rules/type-formatting.md b/.README/rules/type-formatting.md index 916f7b2fc..56c6bc0d0 100644 --- a/.README/rules/type-formatting.md +++ b/.README/rules/type-formatting.md @@ -10,78 +10,7 @@ Currently offers the following options for formatting types. ## Options -### `arrayBrackets` - -Determines how array generics are represented. Set to `angle` for the style `Array` or `square` for the style `type[]`. Defaults to "square". - -### `enableFixer` - -Whether to enable the fixer. Defaults to `true`. - -### `genericDot` - -Boolean value of whether to use a dot before the angled brackets of a generic (e.g., `SomeType.`). Defaults to `false`. - -### `objectFieldQuote` - -Whether and how object field properties should be quoted (e.g., `{"a": string}`). -Set to `single`, `double`, or `null`. Defaults to `null` (no quotes unless -required due to special characters within the field). Digits will be kept as is, -regardless of setting (they can either represent a digit or a string digit). - -### `propertyQuotes` - -Whether and how namepath properties should be quoted (e.g., `ab."cd"."ef"`). -Set to `single`, `double`, or `null`. Defaults to `null` (no quotes unless -required due to whitespace within the property). - -### stringQuotes - -How string literals should be quoted (e.g., `"abc"`). Set to `single` -or `double`. Defaults to 'single'. - -### `objectFieldSeparator` - -For object properties, specify whether a "semicolon", "comma", "linebreak", -"semicolon-and-linebreak", or "comma-and-linebreak" should be used after -each object property-value pair. - -Defaults to `"comma"`. - -### `objectFieldSeparatorOptionalLinebreak` - -Whether `objectFieldSeparator` set to `"semicolon-and-linebreak"` or -`"comma-and-linebreak"` should be allowed to optionally drop the linebreak. - -Defaults to `true`. - -### `objectFieldIndent` - -A string indicating the whitespace to be added on each line preceding an -object property-value field. Defaults to the empty string. - -### `objectFieldSeparatorTrailingPunctuation` - -If `separatorForSingleObjectField` is not in effect (i.e., if it is `false` -or there are multiple property-value object fields present), this property -will determine whether to add punctuation corresponding to the -`objectFieldSeparator` (e.g., a semicolon) to the final object field. -Defaults to `false`. - -### `separatorForSingleObjectField` - -Whether to apply the `objectFieldSeparator` (e.g., a semicolon) when there -is only one property-value object field present. Defaults to `false`. - -### `typeBracketSpacing` - -A string of spaces that will be added immediately after the type's initial -curly bracket and immediately before its ending curly bracket. Defaults -to the empty string. - -### `unionSpacing` - -Determines the spacing to add to unions (`|`). Defaults to a single space (`" "`). +{"gitdown": "options"} ||| |---|---| diff --git a/.README/rules/valid-types.md b/.README/rules/valid-types.md index 437bcb179..1d15312a5 100644 --- a/.README/rules/valid-types.md +++ b/.README/rules/valid-types.md @@ -51,7 +51,7 @@ text after the tag name) checked: TypeScript) 1. Name(path)-pointing tags requiring namepath: `@alias`, `@augments`, `@extends` (JSDoc only), `@lends`, `@memberof`, `@memberof!`, `@mixes`, `@requires`, `@this` - (jsdoc only) + (JSDoc only) 1. Name(path)-pointing tags (which may have value without namepath or their namepath can be expressed elsewhere on the block): `@listens`, `@fires`, `@emits`. @@ -84,13 +84,7 @@ value). See the setting for more details. ## Options -- `allowEmptyNamepaths` (default: true) - Set to `false` to bulk disallow - empty name paths with namepath groups 2 and 4 (these might often be - expected to have an accompanying name path, though they have some - indicative value without one; these may also allow names to be defined - in another manner elsewhere in the block); you can use - `settings.jsdoc.structuredTags` with the `required` key set to "name" if you - wish to require name paths on a tag-by-tag basis. +{"gitdown": "options"} ## Context and settings diff --git a/.README/settings.md b/.README/settings.md index 8b596e3b4..2fcf19650 100644 --- a/.README/settings.md +++ b/.README/settings.md @@ -16,11 +16,11 @@ ### `maxLines` and `minLines` One can use `minLines` and `maxLines` to indicate how many line breaks -(if any) will be checked to find a jsdoc comment block before the given +(if any) will be checked to find a JSDoc comment block before the given code block. These settings default to `0` and `1` respectively. In conjunction with the `require-jsdoc` rule, these settings can -be enforced so as to report problems if a jsdoc block is not found within +be enforced so as to report problems if a JSDoc block is not found within the specified boundaries. The settings are also used in the fixer to determine how many line breaks to add when a block is missing. @@ -265,8 +265,23 @@ The format of the configuration is as follows: - `false` (for forbidding the type) - an optional key `skipRootChecking` (for `check-types`) to allow for this type in the context of a root (i.e., a parent object of some child type) - - an optional key `unifyParentAndChildTypeChecks` to override the - `jsdoc/check-types` option of the same name. + - an optional key `unifyParentAndChildTypeChecks` will treat + `settings.jsdoc.preferredTypes` keys such as `SomeType` as matching + not only child types such as an unadorned `SomeType` but also + `SomeType` and `SomeType.` (and if the type is + instead `Array` (or `[]`), it will match `aChildType[]`). If this + setting is `false` or unset, the former format will only apply to + types which are not parent types/unions whereas the latter formats + will only apply for parent types/unions. The special types + `[]`, `.<>` (or `.`), and `<>` act only as parent types (and will + not match a bare child type such as `Array` even when unified, though, + as mentioned, `Array` will match say `string[]` or `Array.` + when unified). The special type `*` is only a child type. Note that + there is no detection of parent and child type together, e.g., you + cannot specify preferences for `string[]` specifically as distinct + from say `number[]`, but you can target both with `[]` or the child + types `number` or `string`. Note: the (deprecated) `jsdoc/check-types` + option of the same name, if set to `true`, will override this behavior. Note that the preferred types indicated as targets in `settings.jsdoc.preferredTypes` map will be assumed to be defined by @@ -280,7 +295,12 @@ only (e.g., to match `Array` if the type is `Array` vs. `Array.`). Note that if a value is present both as a key and as a value, neither the key nor the value will be reported. Thus in `check-types`, this fact can be used to allow both `object` and `Object` if one has a `preferredTypes` -key `object: 'Object'` and `Object: 'object'`. +key `object: 'Object'` and `Object: 'object'`. (In the default "typescript" +mode, this object behavior is a default one.) + +Note that if there is an error [parsing](https://github.com/jsdoc-type-pratt-parser/jsdoc-type-pratt-parser) +types for a tag with `check-types`, the function will silently ignore +that tag, leaving it to the `valid-types` rule to report parsing errors. ### `structuredTags` @@ -309,7 +329,7 @@ values are objects with the following optional properties: - `true` - Allows valid types within brackets. This is the default. - `false` - Explicitly disallows any brackets or bracketed type. You might use this with `@throws` to suggest that only free form text - is being input or with `@augments` (for jsdoc mode) to disallow + is being input or with `@augments` (for "jsdoc" mode) to disallow Closure-style bracketed usage along with a required namepath. - (An array of strings) - A list of permissible types. - `required` - Array of one of the following (defaults to an empty array, diff --git a/README.md b/README.md index 830ecb305..db531b63a 100644 --- a/README.md +++ b/README.md @@ -417,10 +417,10 @@ non-default-recommended fixer). |||[check-examples](./docs/rules/check-examples.md#readme)|Linting of JavaScript within `@example`| |||[check-indentation](./docs/rules/check-indentation.md#readme)|Checks for invalid padding inside JSDoc blocks| ||:wrench:|[check-line-alignment](./docs/rules/check-line-alignment.md#readme)|Reports invalid alignment of JSDoc block lines.| -|:heavy_check_mark:|:wrench:|[check-param-names](./docs/rules/check-param-names.md#readme)|Checks for dupe `@param` names, that nested param names have roots, and that parameter names in function declarations match jsdoc param names.| +|:heavy_check_mark:|:wrench:|[check-param-names](./docs/rules/check-param-names.md#readme)|Checks for dupe `@param` names, that nested param names have roots, and that parameter names in function declarations match JSDoc param names.| |:heavy_check_mark:|:wrench:|[check-property-names](./docs/rules/check-property-names.md#readme)|Checks for dupe `@property` names, that nested property names have roots| |||[check-syntax](./docs/rules/check-syntax.md#readme)|Reports use against current mode (currently only prohibits Closure-specific syntax)| -|:heavy_check_mark:|:wrench:|[check-tag-names](./docs/rules/check-tag-names.md#readme)|Reports invalid jsdoc (block) tag names| +|:heavy_check_mark:|:wrench:|[check-tag-names](./docs/rules/check-tag-names.md#readme)|Reports invalid JSDoc (block) tag names| | || [check-template-names](./docs/rules/check-template-names.md#readme)|Checks that any `@template` names are actually used in the connected `@typedef` or type alias. |:heavy_check_mark:|:wrench:|[check-types](./docs/rules/check-types.md#readme)|Reports types deemed invalid (customizable and with defaults, for preventing and/or recommending replacements)| |:heavy_check_mark:||[check-values](./docs/rules/check-values.md#readme)|Checks for expected content within some miscellaneous tags (`@version`, `@since`, `@license`, `@author`)| @@ -431,8 +431,8 @@ non-default-recommended fixer). |||[lines-before-block](./docs/rules/lines-before-block.md#readme)|Enforces minimum number of newlines before JSDoc comment blocks| |||[match-description](./docs/rules/match-description.md#readme)|Defines customizable regular expression rules for your tag descriptions| ||:wrench:|[match-name](./docs/rules/match-name.md#readme)|Reports the name portion of a JSDoc tag if matching or not matching a given regular expression| -|:heavy_check_mark:|:wrench:|[multiline-blocks](./docs/rules/multiline-blocks.md#readme)|Controls how and whether jsdoc blocks can be expressed as single or multiple line blocks| -||:wrench:|[no-bad-blocks](./docs/rules/no-bad-blocks.md#readme)|This rule checks for multi-line-style comments which fail to meet the criteria of a jsdoc block| +|:heavy_check_mark:|:wrench:|[multiline-blocks](./docs/rules/multiline-blocks.md#readme)|Controls how and whether JSDoc blocks can be expressed as single or multiple line blocks| +||:wrench:|[no-bad-blocks](./docs/rules/no-bad-blocks.md#readme)|This rule checks for multi-line-style comments which fail to meet the criteria of a JSDoc block| ||:wrench:|[no-blank-block-descriptions](./docs/rules/no-blank-block-descriptions.md#readme)|If tags are present, this rule will prevent empty lines in the block description. If no tags are present, this rule will prevent extra empty lines in the block description.| ||:wrench:|[no-blank-blocks](./docs/rules/no-blank-blocks.md#readme)|Reports and optionally removes blocks with whitespace only| |:heavy_check_mark:|:wrench:|[no-defaults](./docs/rules/no-defaults.md#readme)|This rule reports defaults being used on the relevant portion of `@param` or `@default`| @@ -449,7 +449,7 @@ non-default-recommended fixer). ||:wrench:|[require-example](./docs/rules/require-example.md#readme)|Requires that all functions (and potentially other contexts) have examples.| |||[require-file-overview](./docs/rules/require-file-overview.md#readme)|By default, requires a single `@file` tag at the beginning of each linted file| ||:wrench:|[require-hyphen-before-param-description](./docs/rules/require-hyphen-before-param-description.md#readme)|Requires a hyphen before `@param` descriptions (and optionally before `@property` descriptions)| -|:heavy_check_mark:|:wrench:|[require-jsdoc](./docs/rules/require-jsdoc.md#readme)|Checks for presence of jsdoc comments, on functions and potentially other contexts (optionally limited to exports).| +|:heavy_check_mark:|:wrench:|[require-jsdoc](./docs/rules/require-jsdoc.md#readme)|Checks for presence of JSDoc comments, on functions and potentially other contexts (optionally limited to exports).| |:heavy_check_mark:||[require-next-type](./docs/rules/require-next-type.md#readme)|Requires a type on the (non-standard) `@next` tag.| |:heavy_check_mark:|:wrench:|[require-param](./docs/rules/require-param.md#readme)|Requires that all function parameters are documented with a `@param` tag.| |:heavy_check_mark:||[require-param-description](./docs/rules/require-param-description.md#readme)|Requires that each `@param` tag has a `description` value.| @@ -460,7 +460,7 @@ non-default-recommended fixer). |:heavy_check_mark:||[require-property-name](./docs/rules/require-property-name.md#readme)|Requires that all `@property` tags have names.| |:heavy_check_mark: (off in TS)||[require-property-type](./docs/rules/require-property-type.md#readme)|Requires that each `@property` tag has a type value (within curly brackets).| |:heavy_check_mark:||[require-returns](./docs/rules/require-returns.md#readme)|Requires that return statements are documented.| -|:heavy_check_mark:||[require-returns-check](./docs/rules/require-returns-check.md#readme)|Requires a return statement be present in a function body if a `@returns` tag is specified in the jsdoc comment block (and reports if multiple `@returns` tags are present).| +|:heavy_check_mark:||[require-returns-check](./docs/rules/require-returns-check.md#readme)|Requires a return statement be present in a function body if a `@returns` tag is specified in the JSDoc comment block (and reports if multiple `@returns` tags are present).| |:heavy_check_mark:||[require-returns-description](./docs/rules/require-returns-description.md#readme)|Requires that the `@returns` tag has a `description` value (not including `void`/`undefined` type returns).| |:heavy_check_mark: (off in TS)||[require-returns-type](./docs/rules/require-returns-type.md#readme)|Requires that `@returns` tag has a type value (in curly brackets).| | || [require-template](./docs/rules/require-template.md#readme) | Requires `@template` tags be present when type parameters are used.| diff --git a/docs/rules/check-access.md b/docs/rules/check-access.md index 128645064..b5c026d87 100644 --- a/docs/rules/check-access.md +++ b/docs/rules/check-access.md @@ -96,7 +96,7 @@ function quux (foo) { function quux (foo) { } -// Message: At most one access-control tag may be present on a jsdoc block. +// Message: At most one access-control tag may be present on a JSDoc block. /** * @access public @@ -106,7 +106,7 @@ function quux (foo) { } // Settings: {"jsdoc":{"ignorePrivate":true}} -// Message: At most one access-control tag may be present on a jsdoc block. +// Message: At most one access-control tag may be present on a JSDoc block. /** * @public @@ -115,7 +115,7 @@ function quux (foo) { function quux (foo) { } -// Message: At most one access-control tag may be present on a jsdoc block. +// Message: At most one access-control tag may be present on a JSDoc block. /** * @public @@ -125,7 +125,7 @@ function quux (foo) { } // Settings: {"jsdoc":{"ignorePrivate":true}} -// Message: At most one access-control tag may be present on a jsdoc block. +// Message: At most one access-control tag may be present on a JSDoc block. /** * @public @@ -134,7 +134,7 @@ function quux (foo) { function quux (foo) { } -// Message: At most one access-control tag may be present on a jsdoc block. +// Message: At most one access-control tag may be present on a JSDoc block. ```` diff --git a/docs/rules/check-alignment.md b/docs/rules/check-alignment.md index 3c2b6b86b..039435ae2 100644 --- a/docs/rules/check-alignment.md +++ b/docs/rules/check-alignment.md @@ -22,6 +22,8 @@ Fixes alignment. ## Options +A single options object has the following properties. + ### innerIndent @@ -29,6 +31,7 @@ Fixes alignment. Set to 0 if you wish to avoid the normal requirement for an inner indentation of one space. Defaults to 1 (one space of normal inner indentation). + ## Context and settings @@ -112,7 +115,7 @@ function quux (foo) { // Message: Expected JSDoc block to be aligned. /** - * A jsdoc not attached to any node. + * A JSDoc not attached to any node. */ // Message: Expected JSDoc block to be aligned. diff --git a/docs/rules/check-examples.md b/docs/rules/check-examples.md index db16a19be..a69da53ce 100644 --- a/docs/rules/check-examples.md +++ b/docs/rules/check-examples.md @@ -178,8 +178,8 @@ by decreasing precedence: * `padded-blocks` (and `@stylistic/padded-blocks`) - It can generally look nicer to pad a little even if one's code follows more stringency as far as block padding. -* `jsdoc/require-file-overview` - Shouldn't check example for jsdoc blocks. -* `jsdoc/require-jsdoc` - Wouldn't expect jsdoc blocks within jsdoc blocks. +* `jsdoc/require-file-overview` - Shouldn't check example for JSDoc blocks. +* `jsdoc/require-jsdoc` - Wouldn't expect JSDoc blocks within JSDoc blocks. * `import/no-unresolved` - One wouldn't generally expect example paths to resolve relative to the current JavaScript file as one would with real code. * `import/unambiguous` - Snippets in examples are likely too short to always diff --git a/docs/rules/check-indentation.md b/docs/rules/check-indentation.md index 77eb22083..a692d8a38 100644 --- a/docs/rules/check-indentation.md +++ b/docs/rules/check-indentation.md @@ -29,7 +29,7 @@ the following description is not reported: ## Options -This rule has an object option. +A single options object has the following properties. @@ -55,6 +55,7 @@ report a padding issue: */ ``` + ## Context and settings diff --git a/docs/rules/check-line-alignment.md b/docs/rules/check-line-alignment.md index 157fa2c44..8e7368d90 100644 --- a/docs/rules/check-line-alignment.md +++ b/docs/rules/check-line-alignment.md @@ -4,11 +4,11 @@ * [Fixer](#user-content-check-line-alignment-fixer) * [Options](#user-content-check-line-alignment-options) - * [`tags`](#user-content-check-line-alignment-options-tags) * [`customSpacings`](#user-content-check-line-alignment-options-customspacings) + * [`disableWrapIndent`](#user-content-check-line-alignment-options-disablewrapindent) * [`preserveMainDescriptionPostDelimiter`](#user-content-check-line-alignment-options-preservemaindescriptionpostdelimiter) + * [`tags`](#user-content-check-line-alignment-options-tags) * [`wrapIndent`](#user-content-check-line-alignment-options-wrapindent) - * [`disableWrapIndent`](#user-content-check-line-alignment-options-disablewrapindent) * [Context and settings](#user-content-check-line-alignment-context-and-settings) * [Failing examples](#user-content-check-line-alignment-failing-examples) * [Passing examples](#user-content-check-line-alignment-passing-examples) @@ -22,50 +22,77 @@ for example. ## Fixer -(TODO) +Will either add alignment between the tag, type, name, and description across +lines of the JSDoc block or remove it. ## Options -This rule allows one optional string argument. If it is `"always"` then a -problem is raised when the lines are not aligned. If it is `"never"` then -a problem should be raised when there is more than one space between each -line's parts. If it is `"any"`, no alignment is made. Defaults to `"never"`. +The first option is a string with the following possible values: "always", "never", "any". +If the string value is +`"always"` then a problem is raised when the lines are not aligned. +If it is `"never"` then a problem should be raised when there is more than +one space between each line's parts. If it is `"any"`, no alignment is made. +Defaults to `"never"`. Note that in addition to alignment, the "never" and "always" options will both ensure that at least one space is present after the asterisk delimiter. -After the string, an options object is allowed with the following properties. - - - -### tags - -Use this to change the tags which are sought for alignment changes. Defaults to an array of -`['param', 'arg', 'argument', 'property', 'prop', 'returns', 'return', 'template']`. +The next option is an object with the following properties. ### customSpacings -An object with any of the following keys set to an integer. Affects spacing: -- `postDelimiter` - after the asterisk (e.g., `* @param`) -- `postTag` - after the tag (e.g., `* @param `) -- `postType` - after the type (e.g., `* @param {someType} `) -- `postName` - after the name (e.g., `* @param {someType} name `) -- `postHyphen` - after any hyphens in the description (e.g., `* @param {someType} name - A description`) +A single options object has the following properties. +An object with any of the following spacing keys set to an integer. If a spacing is not defined, it defaults to one. + + +#### postDelimiter + +Affects spacing after the asterisk (e.g., `* @param`) + + +#### postHyphen + +Affects spacing after any hyphens in the description (e.g., `* @param {someType} name - A description`) + + +#### postName + +Affects spacing after the name (e.g., `* @param {someType} name `) + + +#### postTag + +Affects spacing after the tag (e.g., `* @param `) + + +#### postType + +Affects spacing after the type (e.g., `* @param {someType} `) + + +### disableWrapIndent + +Disables `wrapIndent`; existing wrap indentation is preserved without changes. ### preserveMainDescriptionPostDelimiter A boolean to determine whether to preserve the post-delimiter spacing of the main description. If `false` or unset, will be set to a single space. + + +### tags +Use this to change the tags which are sought for alignment changes. Defaults to an array of +`['param', 'arg', 'argument', 'property', 'prop', 'returns', 'return', 'template']`. ### wrapIndent @@ -73,11 +100,6 @@ main description. If `false` or unset, will be set to a single space. The indent that will be applied for tag text after the first line. Default to the empty string (no indent). - - -### disableWrapIndent - -Disables `wrapIndent`; existing wrap indentation is preserved without changes. diff --git a/docs/rules/check-param-names.md b/docs/rules/check-param-names.md index 73d6f94c8..5ab6f00d2 100644 --- a/docs/rules/check-param-names.md +++ b/docs/rules/check-param-names.md @@ -5,14 +5,14 @@ * [Fixer](#user-content-check-param-names-fixer) * [Destructuring](#user-content-check-param-names-destructuring) * [Options](#user-content-check-param-names-options) - * [`checkRestProperty`](#user-content-check-param-names-options-checkrestproperty) - * [`checkTypesPattern`](#user-content-check-param-names-options-checktypespattern) - * [`enableFixer`](#user-content-check-param-names-options-enablefixer) * [`allowExtraTrailingParamDocs`](#user-content-check-param-names-options-allowextratrailingparamdocs) * [`checkDestructured`](#user-content-check-param-names-options-checkdestructured) - * [`useDefaultObjectProperties`](#user-content-check-param-names-options-usedefaultobjectproperties) + * [`checkRestProperty`](#user-content-check-param-names-options-checkrestproperty) + * [`checkTypesPattern`](#user-content-check-param-names-options-checktypespattern) * [`disableExtraPropertyReporting`](#user-content-check-param-names-options-disableextrapropertyreporting) * [`disableMissingParamChecks`](#user-content-check-param-names-options-disablemissingparamchecks) + * [`enableFixer`](#user-content-check-param-names-options-enablefixer) + * [`useDefaultObjectProperties`](#user-content-check-param-names-options-usedefaultobjectproperties) * [Context and settings](#user-content-check-param-names-context-and-settings) * [Failing examples](#user-content-check-param-names-failing-examples) * [Passing examples](#user-content-check-param-names-passing-examples) @@ -25,7 +25,11 @@ the function declaration. ## Fixer -(Todo) +Auto-removes `@param` duplicates (based on identical names). + +Note that this option will remove duplicates of the same name even if +the definitions do not match in other ways (e.g., the second param will +be removed even if it has a different type or description). @@ -48,7 +52,7 @@ To require that `extra` be documented--and that any extraneous properties get reported--e.g., if there had been a `@param options.bar` above--you can use the `checkRestProperty` option which insists that the rest property be documented (and that there be no other implicit properties). -Note, however, that jsdoc [does not appear](https://github.com/jsdoc/jsdoc/issues/1773) +Note, however, that JSDoc [does not appear](https://github.com/jsdoc/jsdoc/issues/1773) to currently support syntax or output to distinguish rest properties from other properties, so in looking at the docs alone without looking at the function signature, the disadvantage of enabling this option is that it @@ -58,28 +62,7 @@ may appear that there is an actual property named `extra`. ## Options - - -### checkRestProperty - -See the "Destructuring" section. Defaults to `false`. - - - -### checkTypesPattern - -See `require-param` under the option of the same name. - - - -### enableFixer - -Set to `true` to auto-remove `@param` duplicates (based on identical -names). - -Note that this option will remove duplicates of the same name even if -the definitions do not match in other ways (e.g., the second param will -be removed even if it has a different type or description). +A single options object has the following properties. @@ -89,22 +72,57 @@ If set to `true`, this option will allow extra `@param` definitions (e.g., representing future expected or virtual params) to be present without needing their presence within the function signature. Other inconsistencies between `@param`'s and present function parameters will still be reported. - ### checkDestructured Whether to check destructured properties. Defaults to `true`. + + +### checkRestProperty - - -### useDefaultObjectProperties +If set to `true`, will require that rest properties are documented and +that any extraneous properties (which may have been within the rest property) +are documented. Defaults to `false`. + + +### checkTypesPattern -Set to `true` if you wish to avoid reporting of child property documentation -where instead of destructuring, a whole plain object is supplied as default -value but you wish its keys to be considered as signalling that the properties -are present and can therefore be documented. Defaults to `false`. +Defines a regular expression pattern to indicate which types should be +checked for destructured content (and that those not matched should not +be checked). + +When one specifies a type, unless it is of a generic type, like `object` +or `array`, it may be considered unnecessary to have that object's +destructured components required, especially where generated docs will +link back to the specified type. For example: + +```js +/** + * @param {SVGRect} bbox - a SVGRect + */ +export const bboxToObj = function ({x, y, width, height}) { + return {x, y, width, height}; +}; +``` + +By default `checkTypesPattern` is set to +`/^(?:[oO]bject|[aA]rray|PlainObject|Generic(?:Object|Array))$/v`, +meaning that destructuring will be required only if the type of the `@param` +(the text between curly brackets) is a match for "Object" or "Array" (with or +without initial caps), "PlainObject", or "GenericObject", "GenericArray" (or +if no type is present). So in the above example, the lack of a match will +mean that no complaint will be given about the undocumented destructured +parameters. + +Note that the `/` delimiters are optional, but necessary to add flags. +Defaults to using (only) the `v` flag, so to add your own flags, encapsulate +your expression as a string, but like a literal, e.g., `/^object$/vi`. + +You could set this regular expression to a more expansive list, or you +could restrict it such that even types matching those strings would not +need destructuring. ### disableExtraPropertyReporting @@ -116,12 +134,30 @@ their own types. Note that extra properties will always be reported if another item at the same level is destructured as destructuring will prevent other access and this option is only intended to permit documenting extra properties that are available and actually used in the function. - ### disableMissingParamChecks Whether to avoid checks for missing `@param` definitions. Defaults to `false`. Change to `true` if you want to be able to omit properties. + + +### enableFixer + +Set to `true` to auto-remove `@param` duplicates (based on identical +names). + +Note that this option will remove duplicates of the same name even if +the definitions do not match in other ways (e.g., the second param will +be removed even if it has a different type or description). + + +### useDefaultObjectProperties + +Set to `true` if you wish to avoid reporting of child property documentation +where instead of destructuring, a whole plain object is supplied as default +value but you wish its keys to be considered as signalling that the properties +are present and can therefore be documented. Defaults to `false`. + diff --git a/docs/rules/check-property-names.md b/docs/rules/check-property-names.md index 5d8c0e94b..993e33aa5 100644 --- a/docs/rules/check-property-names.md +++ b/docs/rules/check-property-names.md @@ -17,12 +17,18 @@ and that nested properties have defined roots. ## Fixer -(Todo) +Auto-removes `@property` duplicates (based on identical names). + +Note that this option will remove duplicates of the same name even if +the definitions do not match in other ways (e.g., the second property will +be removed even if it has a different type or description). ## Options +A single options object has the following properties. + ### enableFixer @@ -34,6 +40,7 @@ Note that this option will remove duplicates of the same name even if the definitions do not match in other ways (e.g., the second property will be removed even if it has a different type or description). + ## Context and settings diff --git a/docs/rules/check-tag-names.md b/docs/rules/check-tag-names.md index 7c0cfccdb..45197d9aa 100644 --- a/docs/rules/check-tag-names.md +++ b/docs/rules/check-tag-names.md @@ -145,7 +145,7 @@ template And for [Closure](https://github.com/google/closure-compiler/wiki/Annotating-JavaScript-for-the-Closure-Compiler), when `settings.jsdoc.mode` is set to `closure`, one may use the following (in -addition to the jsdoc and TypeScript tags–though replacing `returns` with +addition to the JSDoc and TypeScript tags–though replacing `returns` with `return`): ``` @@ -207,12 +207,14 @@ tag to `false`: ## Fixer -(Todo) +Auto-removes types that are redundant with the [`typed` option](#user-content-typed). ## Options +A single options object has the following properties. + ### definedTags @@ -225,13 +227,11 @@ The format is as follows: "definedTags": ["note", "record"] } ``` - ### enableFixer Set to `false` to disable auto-removal of types that are redundant with the [`typed` option](#user-content-typed). - ### jsxTags @@ -246,7 +246,6 @@ jsxRuntime ``` For more information, see the [babel documentation](https://babeljs.io/docs/en/babel-plugin-transform-react-jsx). - ### typed @@ -304,6 +303,7 @@ static this ``` + ## Context and settings diff --git a/docs/rules/check-types.md b/docs/rules/check-types.md index e8263a783..b03d5b513 100644 --- a/docs/rules/check-types.md +++ b/docs/rules/check-types.md @@ -3,6 +3,9 @@ # check-types * [Options](#user-content-check-types-options) + * [`exemptTagContexts`](#user-content-check-types-options-exempttagcontexts) + * [`noDefaults`](#user-content-check-types-options-nodefaults) + * [`unifyParentAndChildTypeChecks`](#user-content-check-types-options-unifyparentandchildtypechecks) * [Why not capital case everything?](#user-content-check-types-why-not-capital-case-everything) * [Comparisons](#user-content-check-types-comparisons) * [Fixer](#user-content-check-types-fixer) @@ -35,55 +38,47 @@ RegExp ## Options -`check-types` allows one option: - -- An option object: - - with the key `noDefaults` to insist that only the supplied option type - map is to be used, and that the default preferences (such as "string" - over "String") will not be enforced. The option's default is `false`. - - with the key `exemptTagContexts` which will avoid reporting when a - bad type is found on a specified tag. Set to an array of objects with - a key `tag` set to the tag to exempt, and a `types` key which can - either be `true` to indicate that any types on that tag will be allowed, - or to an array of strings which will only allow specific bad types. - If an array of strings is given, these must match the type exactly, - e.g., if you only allow `"object"`, it will not allow - `"object"`. Note that this is different from the - behavior of `settings.jsdoc.preferredTypes`. This option is useful - for normally restricting generic types like `object` with - `preferredTypes`, but allowing `typedef` to indicate that its base - type is `object`. - - with the key `unifyParentAndChildTypeChecks` which will treat - `settings.jsdoc.preferredTypes` keys such as `SomeType` as matching - not only child types such as an unadorned `SomeType` but also - `SomeType` and `SomeType.` (and if the type is - instead `Array` (or `[]`), it will match `aChildType[]`). If this - option is `false` or - unset, the former format will only apply to types which are not parent - types/unions whereas the latter formats will only apply for parent - types/unions. The special types `[]`, `.<>` (or `.`), and `<>` - act only as parent types (and will not match a bare child type such as - `Array` even when unified, though, as mentioned, `Array` will match - say `string[]` or `Array.` when unified). The special type - `*` is only a child type. Note that there is no detection of parent - and child type together, e.g., you cannot specify preferences for - `string[]` specifically as distinct from say `number[]`, but you can - target both with `[]` or the child types `number` or `string`. If - `unifyParentAndChildTypeChecks` is set instead on `preferredTypes`, - then that value will be used instead. Note that the latter is the - preferred approach. - -If a value is present both as a key and as a value, neither the key nor the -value will be reported. Thus one can use this fact to allow both `object` -and `Object`, for example. Note that in "typescript" mode, this is the default -behavior. - -See also the documentation on `settings.jsdoc.preferredTypes` which impacts -the behavior of `check-types`. - -Note that if there is an error [parsing](https://github.com/jsdoc-type-pratt-parser/jsdoc-type-pratt-parser) -types for a tag, the function will silently ignore that tag, leaving it to -the `valid-types` rule to report parsing errors. +A single options object has the following properties. + + + +### exemptTagContexts + +Avoids reporting when a bad type is found on a specified tag. +A single options object has the following properties. + + + +##### tag + +Set a key `tag` to the tag to exempt + + +##### types + +Set to `true` to indicate that any types on that tag will be allowed, +or to an array of strings which will only allow specific bad types. +If an array of strings is given, these must match the type exactly, +e.g., if you only allow `"object"`, it will not allow +`"object"`. Note that this is different from the +behavior of `settings.jsdoc.preferredTypes`. This option is useful +for normally restricting generic types like `object` with +`preferredTypes`, but allowing `typedef` to indicate that its base +type is `object`. + + +### noDefaults + +Insists that only the supplied option type +map is to be used, and that the default preferences (such as "string" +over "String") will not be enforced. The option's default is `false`. + + +### unifyParentAndChildTypeChecks + +@deprecated Use the `preferredTypes[preferredType]` setting of the same name instead. +If this option is `true`, will currently override `unifyParentAndChildTypeChecks` on the `preferredTypes` setting. + @@ -173,7 +168,8 @@ permitted. ## Fixer -(Todo) +Replaces native types with standard casing and replaces according to +`preferredTypes` settings. diff --git a/docs/rules/check-values.md b/docs/rules/check-values.md index 4d396bc55..c0f311159 100644 --- a/docs/rules/check-values.md +++ b/docs/rules/check-values.md @@ -34,20 +34,20 @@ This rule checks the values for a handful of tags: ## Options +A single options object has the following properties. + ### allowedAuthors An array of allowable author values. If absent, only non-whitespace will be checked for. - ### allowedLicenses An array of allowable license values or `true` to allow any license text. -If present as an array, will be used in place of SPDX identifiers. - +If present as an array, will be used in place of [SPDX identifiers](https://spdx.org/licenses/). ### licensePattern @@ -62,7 +62,6 @@ Note that the `/` delimiters are optional, but necessary to add flags. Defaults to using the `v` flag, so to add your own flags, encapsulate your expression as a string, but like a literal, e.g., `/^mit$/vi`. - ### numericOnlyVariation @@ -70,6 +69,7 @@ your expression as a string, but like a literal, e.g., `/^mit$/vi`. Whether to enable validation that `@variation` must be a number. Defaults to `false`. + ## Context and settings diff --git a/docs/rules/convert-to-jsdoc-comments.md b/docs/rules/convert-to-jsdoc-comments.md index 5b18876ca..62eff8750 100644 --- a/docs/rules/convert-to-jsdoc-comments.md +++ b/docs/rules/convert-to-jsdoc-comments.md @@ -7,48 +7,17 @@ Converts single line or non-JSDoc, multiline comments into JSDoc comments. Note that this rule is experimental. As usual with fixers, please confirm the results before committing. + + +## Fixer + +Converts comments into JSDoc comments. + ## Options - - -### enableFixer - -Set to `false` to disable fixing. - - - -### lineOrBlockStyle - -What style of comments to which to apply JSDoc conversion. - -- `block` - Applies to block-style comments (`/* ... */`) -- `line` - Applies to line-style comments (`// ...`) -- `both` - Applies to both block and line-style comments - -Defaults to `both`. - - - -### enforceJsdocLineStyle - -What policy to enforce on the conversion of non-JSDoc comments without -line breaks. (Non-JSDoc (mulitline) comments with line breaks will always -be converted to `multi` style JSDoc comments.) - -- `multi` - Convert to multi-line style -```js -/** - * Some text - */ -``` -- `single` - Convert to single-line style -```js -/** Some text */ -``` - -Defaults to `multi`. +A single options object has the following properties. @@ -59,12 +28,13 @@ An array of prefixes to allow at the beginning of a comment. Defaults to `['@ts-', 'istanbul ', 'c8 ', 'v8 ', 'eslint', 'prettier-']`. Supplying your own value overrides the defaults. - ### contexts -The contexts which will be checked for preceding content. +The contexts array which will be checked for preceding content. + +Can either be strings or an object with a `context` string and an optional, default `false` `inlineCommentBlock` boolean. Defaults to `ArrowFunctionExpression`, `FunctionDeclaration`, `FunctionExpression`, `TSDeclareFunction`. @@ -73,18 +43,59 @@ Defaults to `ArrowFunctionExpression`, `FunctionDeclaration`, ### contextsAfter -The contexts which will be checked for content on the same line after. +The contexts array which will be checked for content on the same line after. -Defaults to an empty array. +Can either be strings or an object with a `context` string and an optional, default `false` `inlineCommentBlock` boolean. +Defaults to an empty array. ### contextsBeforeAndAfter -The contexts which will be checked for content before and on the same +The contexts array which will be checked for content before and on the same line after. +Can either be strings or an object with a `context` string and an optional, default `false` `inlineCommentBlock` boolean. + Defaults to `VariableDeclarator`, `TSPropertySignature`, `PropertyDefinition`. + + +### enableFixer + +Set to `false` to disable fixing. + + +### enforceJsdocLineStyle + +What policy to enforce on the conversion of non-JSDoc comments without +line breaks. (Non-JSDoc (mulitline) comments with line breaks will always +be converted to `multi` style JSDoc comments.) + +- `multi` - Convert to multi-line style +```js +/** + * Some text + */ +``` +- `single` - Convert to single-line style +```js +/** Some text */ +``` + +Defaults to `multi`. + + + +### lineOrBlockStyle + +What style of comments to which to apply JSDoc conversion. + +- `block` - Applies to block-style comments (`/* ... */`) +- `line` - Applies to line-style comments (`// ...`) +- `both` - Applies to both block and line-style comments + +Defaults to `both`. + ||| |---|---| diff --git a/docs/rules/empty-tags.md b/docs/rules/empty-tags.md index 2b2c8832a..a10f8188e 100644 --- a/docs/rules/empty-tags.md +++ b/docs/rules/empty-tags.md @@ -39,12 +39,14 @@ Similarly, `@internal` will still be checked for content by this rule even with ## Fixer -(Todo) +Strips content if present for the above-mentioned tags. ## Options +A single options object has the following properties. + ### tags @@ -58,6 +60,8 @@ add them within this option. } ``` + + ## Context and settings diff --git a/docs/rules/implements-on-classes.md b/docs/rules/implements-on-classes.md index 45e984d85..9d88d5ed8 100644 --- a/docs/rules/implements-on-classes.md +++ b/docs/rules/implements-on-classes.md @@ -22,6 +22,8 @@ function is adhering. ## Options +A single options object has the following properties. + ### contexts @@ -29,14 +31,18 @@ function is adhering. Set this to an array of strings representing the AST context (or an object with `context` and `comment` properties) where you wish the rule to be applied. -Overrides the default contexts (see below). Set to `"any"` if you want -the rule to apply to any jsdoc block throughout your files (as is necessary +`context` defaults to `any` and `comment` defaults to no specific comment context. + +Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`, +`FunctionExpression`). Set to `"any"` if you want +the rule to apply to any JSDoc block throughout your files (as is necessary for finding function blocks not attached to a function declaration or expression, i.e., `@callback` or `@function` (or its aliases `@func` or `@method`) (including those associated with an `@interface`). See the ["AST and Selectors"](#user-content-eslint-plugin-jsdoc-advanced-ast-and-selectors) -section of our README for more on the expected format. +section of our Advanced docs for more on the expected format. + diff --git a/docs/rules/informative-docs.md b/docs/rules/informative-docs.md index e067b46cd..4d36969a6 100644 --- a/docs/rules/informative-docs.md +++ b/docs/rules/informative-docs.md @@ -27,6 +27,8 @@ This rule requires all docs comments contain at least one word not already in th ## Options +A single options object has the following properties. + ### aliases @@ -84,6 +86,8 @@ The default `uselessWords` option is: ["a", "an", "i", "in", "of", "s", "the"] ``` + + ## Context and settings diff --git a/docs/rules/lines-before-block.md b/docs/rules/lines-before-block.md index 99a4bf000..ff8debfeb 100644 --- a/docs/rules/lines-before-block.md +++ b/docs/rules/lines-before-block.md @@ -9,6 +9,8 @@ This rule enforces minimum number of newlines before JSDoc comment blocks ## Options +A single options object has the following properties. + ### checkBlockStarts @@ -16,11 +18,13 @@ This rule enforces minimum number of newlines before JSDoc comment blocks Whether to additionally check the start of blocks, such as classes or functions. Defaults to `false`. - - -### lines + + +### excludedTags -The minimum number of lines to require. Defaults to 1. +An array of tags whose presence in the JSDoc block will prevent the +application of the rule. Defaults to `['type']` (i.e., if `@type` is present, +lines before the block will not be added). @@ -36,13 +40,12 @@ preceding code or comment. Defaults to `true`. This option excludes cases where the JSDoc block is only one line long. Defaults to `true`. - - -### excludedTags + + +### lines + +The minimum number of lines to require. Defaults to 1. -An array of tags whose presence in the JSDoc block will prevent the -application of the rule. Defaults to `['type']` (i.e., if `@type` is present, -lines before the block will not be added). ||| |---|---| diff --git a/docs/rules/match-description.md b/docs/rules/match-description.md index 95d532a90..04d288059 100644 --- a/docs/rules/match-description.md +++ b/docs/rules/match-description.md @@ -3,12 +3,12 @@ # match-description * [Options](#user-content-match-description-options) + * [`contexts`](#user-content-match-description-options-contexts) + * [`mainDescription`](#user-content-match-description-options-maindescription) * [`matchDescription`](#user-content-match-description-options-matchdescription) * [`message`](#user-content-match-description-options-message) * [`nonemptyTags`](#user-content-match-description-options-nonemptytags) * [`tags`](#user-content-match-description-options-tags) - * [`mainDescription`](#user-content-match-description-options-maindescription) - * [`contexts`](#user-content-match-description-options-contexts) * [Context and settings](#user-content-match-description-context-and-settings) * [Failing examples](#user-content-match-description-failing-examples) * [Passing examples](#user-content-match-description-passing-examples) @@ -22,7 +22,7 @@ by our supported Node versions): ``^\n?([A-Z`\\d_][\\s\\S]*[.?!`\\p{RGI_Emoji}]\\s*)?$`` -Applies by default to the jsdoc block description and to the following tags: +Applies by default to the JSDoc block description and to the following tags: - `@description`/`@desc` - `@summary` @@ -36,7 +36,7 @@ to add your own flags, encapsulate your expression as a string, but like a literal, e.g., `/[A-Z].*\\./vi`. Note that `/` delimiters are optional, but necessary to add flags (besides -`u`). +`v`). Also note that the default or optional regular expressions is *not* case-insensitive unless one opts in to add the `i` flag. @@ -48,6 +48,65 @@ that the trailing newlines of a description will not be matched. ## Options +A single options object has the following properties. + + + +### contexts + +Set this to an array of strings representing the AST context (or an object with +optional `context` and `comment` properties) where you wish the rule to be applied (e.g., +`ClassDeclaration` for ES6 classes). + +`context` defaults to `any` and `comment` defaults to no specific comment context. + +Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`, +`FunctionExpression`). Set to `"any"` if you want the rule to apply to any +JSDoc block throughout your files. + +See the ["AST and Selectors"](#user-content-eslint-plugin-jsdoc-advanced-ast-and-selectors) +section of our Advanced docs for more on the expected format. + + + +### mainDescription + +If you wish to override the main block description without changing the +default `match-description` (which can cascade to the `tags` with `true`), +you may use `mainDescription`: + +```js +{ + 'jsdoc/match-description': ['error', { + mainDescription: '[A-Z].*\\.', + tags: { + param: true, + returns: true + } + }] +} +``` + +There is no need to add `mainDescription: true`, as by default, the main +block description (and only the main block description) is linted, though you +may disable checking it by setting it to `false`. + +You may also provide an object with `message`: + +```js +{ + 'jsdoc/match-description': ['error', { + mainDescription: { + message: 'Capitalize first word of JSDoc block descriptions', + match: '[A-Z].*\\.' + }, + tags: { + param: true, + returns: true + } + }] +} +``` ### matchDescription @@ -55,12 +114,15 @@ that the trailing newlines of a description will not be matched. You can supply your own expression to override the default, passing a `matchDescription` string on the options object. +Defaults to using (only) the `v` flag, so +to add your own flags, encapsulate your expression as a string, but like a +literal, e.g., `/[A-Z].*\./vi`. + ```js { 'jsdoc/match-description': ['error', {matchDescription: '[A-Z].*\\.'}] } ``` - ### message @@ -92,7 +154,6 @@ some content: If you supply your own tag description for any of the above tags in `tags`, your description will take precedence. - ### tags @@ -143,59 +204,6 @@ its "description" (e.g., for `@returns {someType} some description`, the description is `some description` while for `@some-tag xyz`, the description is `xyz`). - - -### mainDescription - -If you wish to override the main block description without changing the -default `match-description` (which can cascade to the `tags` with `true`), -you may use `mainDescription`: - -```js -{ - 'jsdoc/match-description': ['error', { - mainDescription: '[A-Z].*\\.', - tags: { - param: true, - returns: true - } - }] -} -``` - -There is no need to add `mainDescription: true`, as by default, the main -block description (and only the main block description) is linted, though you -may disable checking it by setting it to `false`. - -You may also provide an object with `message`: - -```js -{ - 'jsdoc/match-description': ['error', { - mainDescription: { - message: 'Capitalize first word of JSDoc block descriptions', - match: '[A-Z].*\\.' - }, - tags: { - param: true, - returns: true - } - }] -} -``` - - - -### contexts - -Set this to an array of strings representing the AST context (or an object with -`context` and `comment` properties) where you wish the rule to be applied. -(e.g., `ClassDeclaration` for ES6 -classes). Overrides the default contexts (see below). Set to `"any"` if you -want the rule to apply to any jsdoc block throughout your files. - -See the ["AST and Selectors"](#user-content-eslint-plugin-jsdoc-advanced-ast-and-selectors) -section of our README for more on the expected format. diff --git a/docs/rules/match-name.md b/docs/rules/match-name.md index bce9b3e04..96d653549 100644 --- a/docs/rules/match-name.md +++ b/docs/rules/match-name.md @@ -23,7 +23,7 @@ Will replace `disallowName` with `replacement` if these are provided. ## Options -A single options object with the following properties: +A single options object has the following properties. @@ -33,28 +33,7 @@ A single options object with the following properties: the conditions whereby a name is reported as being problematic. These objects can have any combination of the following groups of optional -properties, all of which act to confine one another: - -- `tags` - This array should include tag names or `*` to indicate the - match will apply for all tags (except as confined by any context - properties). If `*` is not used, then these rules will only apply to - the specified tags. If `tags` is omitted, then `*` is assumed. - -- `allowName` - Indicates which names are allowed for the given tag (or `*`). - Accepts a string regular expression (optionally wrapped between two - `/` delimiters followed by optional flags) used to match the name. -- `disallowName` - As with `allowName` but indicates names that are not - allowed. -- `replacement` - If `disallowName` is supplied and this value is present, it - will replace the matched `disallowName` text. - -- `context` - AST to confine the allowing or disallowing to jsdoc blocks - associated with a particular context. See the - ["AST and Selectors"](#user-content-eslint-plugin-jsdoc-advanced-ast-and-selectors) - section of our README for more on the expected format. -- `comment` - As with `context` but AST for the JSDoc block comment and types - -- `message` - An optional custom message to use when there is a match. +properties, all of which act to confine one another. Note that `comment`, even if targeting a specific tag, is used to match the whole block. So if a `comment` finds its specific tag, it may still apply @@ -64,6 +43,54 @@ tag of the desired tag and/or name and no `disallowName` (or `allowName`) is supplied. In such a case, only one error will be reported, but no fixer will be applied, however. +A single options object has the following properties. + + + +##### allowName + +Indicates which names are allowed for the given tag (or `*`). +Accepts a string regular expression (optionally wrapped between two +`/` delimiters followed by optional flags) used to match the name. + + +##### comment + +As with `context` but AST for the JSDoc block comment and types. + + +##### context + +AST to confine the allowing or disallowing to JSDoc blocks +associated with a particular context. See the +["AST and Selectors"](#user-content-eslint-plugin-jsdoc-advanced-ast-and-selectors) +section of our Advanced docs for more on the expected format. + + +##### disallowName + +As with `allowName` but indicates names that are not allowed. + + +##### message + +An optional custom message to use when there is a match. + + +##### replacement + +If `disallowName` is supplied and this value is present, it +will replace the matched `disallowName` text. + + +##### tags + +This array should include tag names or `*` to indicate the + match will apply for all tags (except as confined by any context + properties). If `*` is not used, then these rules will only apply to + the specified tags. If `tags` is omitted, then `*` is assumed. + + ## Context and settings diff --git a/docs/rules/multiline-blocks.md b/docs/rules/multiline-blocks.md index c3a7527a7..265c4aeab 100644 --- a/docs/rules/multiline-blocks.md +++ b/docs/rules/multiline-blocks.md @@ -4,12 +4,12 @@ -Controls how and whether jsdoc blocks can be expressed as single or multiple +Controls how and whether JSDoc blocks can be expressed as single or multiple line blocks. Note that if you set `noSingleLineBlocks` and `noMultilineBlocks` to `true` and configure them in a certain manner, you might effectively be prohibiting -all jsdoc blocks! +all JSDoc blocks! Also allows for preventing text at the very beginning or very end of blocks. @@ -17,42 +17,101 @@ Also allows for preventing text at the very beginning or very end of blocks. ## Fixer -(TODO) +Optionally converts single line blocks to multiline ones and vice versa. ## Options -A single options object with the following properties. +A single options object has the following properties. - - -### noZeroLineText (defaults to true) + + +### allowMultipleTags -For multiline blocks, any non-whitespace text immediately after the `/**` and -space will be reported. (Text after a newline is not reported.) +If `noMultilineBlocks` is set to `true` with this option and multiple tags are +found in a block, an error will not be reported. -`noMultilineBlocks` will have priority over this rule if it applies. +Since multiple-tagged lines cannot be collapsed into a single line, this option +prevents them from being reported. Set to `false` if you really want to report +any blocks. - - -### noFinalLineText (defaults to true) +This option will also be applied when there is a block description and a single +tag (since a description cannot precede a tag on a single line, and also +cannot be reliably added after the tag either). + +Defaults to `true`. + + +### minimumLengthForMultiline + +If `noMultilineBlocks` is set with this numeric option, multiline blocks will +be permitted if containing at least the given amount of text. + +If not set, multiline blocks will not be permitted regardless of length unless +a relevant tag is present and `multilineTags` is set. + +Defaults to not being in effect. + + +### multilineTags + +If `noMultilineBlocks` is set with this option, multiline blocks may be allowed +regardless of length as long as a tag or a tag of a certain type is present. + +If `*` is included in the array, the presence of a tags will allow for +multiline blocks (but not when without any tags unless the amount of text is +over an amount specified by `minimumLengthForMultiline`). + +If the array does not include `*` but lists certain tags, the presence of +such a tag will cause multiline blocks to be allowed. + +You may set this to an empty array to prevent any tag from permitting multiple +lines. + +Defaults to `['*']`. + + + +### noFinalLineText For multiline blocks, any non-whitespace text preceding the `*/` on the final line will be reported. (Text preceding a newline is not reported.) `noMultilineBlocks` will have priority over this rule if it applies. - - -### noSingleLineBlocks (defaults to false) +Defaults to `true`. + + +### noMultilineBlocks + +Requires that JSDoc blocks are restricted to single lines only unless impacted +by the options `minimumLengthForMultiline`, `multilineTags`, or +`allowMultipleTags`. + +Defaults to `false`. + + +### noSingleLineBlocks If this is `true`, any single line blocks will be reported, except those which are whitelisted in `singleLineTags`. - - -### requireSingleLineUnderCount (defaults to null) +Defaults to `false`. + + + +### noZeroLineText + +For multiline blocks, any non-whitespace text immediately after the `/**` and +space will be reported. (Text after a newline is not reported.) + +`noMultilineBlocks` will have priority over this rule if it applies. + +Defaults to `true`. + + +### requireSingleLineUnderCount If this number is set, it indicates a minimum line width for a single line of JSDoc content spread over a multi-line comment block. If a single line is under @@ -61,9 +120,11 @@ for such cases. Blocks are not reported which have multi-line descriptions, multiple tags, a block description and tag, or tags with multi-line types or descriptions. - - -### singleLineTags (defaults to ['lends', 'type']) +Defaults to `null`. + + + +### singleLineTags An array of tags which can nevertheless be allowed as single line blocks when `noSingleLineBlocks` is set. You may set this to a empty array to @@ -71,55 +132,8 @@ cause all single line blocks to be reported. If `'*'` is present, then the presence of a tag will allow single line blocks (but not if a tag is missing). - - -### noMultilineBlocks (defaults to false) - -Requires that jsdoc blocks are restricted to single lines only unless impacted -by the options `minimumLengthForMultiline`, `multilineTags`, or -`allowMultipleTags`. - - - -### minimumLengthForMultiline (defaults to not being in effect) - -If `noMultilineBlocks` is set with this numeric option, multiline blocks will -be permitted if containing at least the given amount of text. - -If not set, multiline blocks will not be permitted regardless of length unless -a relevant tag is present and `multilineTags` is set. - - - -### multilineTags (defaults to ['*']) - -If `noMultilineBlocks` is set with this option, multiline blocks may be allowed -regardless of length as long as a tag or a tag of a certain type is present. - -If `*` is included in the array, the presence of a tags will allow for -multiline blocks (but not when without any tags unless the amount of text is -over an amount specified by `minimumLengthForMultiline`). - -If the array does not include `*` but lists certain tags, the presence of -such a tag will cause multiline blocks to be allowed. - -You may set this to an empty array to prevent any tag from permitting multiple -lines. - - - -### allowMultipleTags (defaults to true) +Defaults to `['lends', 'type']`. -If `noMultilineBlocks` is set to `true` with this option and multiple tags are -found in a block, an error will not be reported. - -Since multiple-tagged lines cannot be collapsed into a single line, this option -prevents them from being reported. Set to `false` if you really want to report -any blocks. - -This option will also be applied when there is a block description and a single -tag (since a description cannot precede a tag on a single line, and also -cannot be reliably added after the tag either). @@ -181,44 +195,44 @@ The following patterns are considered problems: * Desc. */ // "jsdoc/multiline-blocks": ["error"|"warn", {"noMultilineBlocks":true}] -// Message: Multiline jsdoc blocks are prohibited by your configuration. +// Message: Multiline JSDoc blocks are prohibited by your configuration. /** desc * */ // "jsdoc/multiline-blocks": ["error"|"warn", {"noMultilineBlocks":true}] -// Message: Multiline jsdoc blocks are prohibited by your configuration. +// Message: Multiline JSDoc blocks are prohibited by your configuration. /** desc * */ // "jsdoc/multiline-blocks": ["error"|"warn", {"noMultilineBlocks":true,"noSingleLineBlocks":true}] -// Message: Multiline jsdoc blocks are prohibited by your configuration but fixing would result in a single line block which you have prohibited with `noSingleLineBlocks`. +// Message: Multiline JSDoc blocks are prohibited by your configuration but fixing would result in a single line block which you have prohibited with `noSingleLineBlocks`. /** * */ // "jsdoc/multiline-blocks": ["error"|"warn", {"noMultilineBlocks":true}] -// Message: Multiline jsdoc blocks are prohibited by your configuration. +// Message: Multiline JSDoc blocks are prohibited by your configuration. /** * This is not long enough to be permitted. */ // "jsdoc/multiline-blocks": ["error"|"warn", {"minimumLengthForMultiline":100,"noMultilineBlocks":true}] -// Message: Multiline jsdoc blocks are prohibited by your configuration. +// Message: Multiline JSDoc blocks are prohibited by your configuration. /** * This is not long enough to be permitted. */ // "jsdoc/multiline-blocks": ["error"|"warn", {"allowMultipleTags":true,"minimumLengthForMultiline":100,"noMultilineBlocks":true}] -// Message: Multiline jsdoc blocks are prohibited by your configuration. +// Message: Multiline JSDoc blocks are prohibited by your configuration. /** * This has the wrong tags so is not permitted. * @notTheRightTag */ // "jsdoc/multiline-blocks": ["error"|"warn", {"allowMultipleTags":false,"multilineTags":["onlyThisIsExempted"],"noMultilineBlocks":true}] -// Message: Multiline jsdoc blocks are prohibited by your configuration but the block has a description with a tag. +// Message: Multiline JSDoc blocks are prohibited by your configuration but the block has a description with a tag. /** * This has too many tags so cannot be fixed ot a single line. @@ -226,51 +240,51 @@ The following patterns are considered problems: * @anotherTag */ // "jsdoc/multiline-blocks": ["error"|"warn", {"allowMultipleTags":false,"multilineTags":[],"noMultilineBlocks":true}] -// Message: Multiline jsdoc blocks are prohibited by your configuration but the block has multiple tags. +// Message: Multiline JSDoc blocks are prohibited by your configuration but the block has multiple tags. /** * This has a tag and description so cannot be fixed ot a single line. * @oneTag */ // "jsdoc/multiline-blocks": ["error"|"warn", {"allowMultipleTags":false,"multilineTags":[],"noMultilineBlocks":true}] -// Message: Multiline jsdoc blocks are prohibited by your configuration but the block has a description with a tag. +// Message: Multiline JSDoc blocks are prohibited by your configuration but the block has a description with a tag. /** * This has no tags so is not permitted. */ // "jsdoc/multiline-blocks": ["error"|"warn", {"multilineTags":["*"],"noMultilineBlocks":true}] -// Message: Multiline jsdoc blocks are prohibited by your configuration. +// Message: Multiline JSDoc blocks are prohibited by your configuration. /** * This has the wrong tags so is not permitted. * @notTheRightTag */ // "jsdoc/multiline-blocks": ["error"|"warn", {"allowMultipleTags":false,"minimumLengthForMultiline":500,"multilineTags":["onlyThisIsExempted"],"noMultilineBlocks":true}] -// Message: Multiline jsdoc blocks are prohibited by your configuration but the block has a description with a tag. +// Message: Multiline JSDoc blocks are prohibited by your configuration but the block has a description with a tag. /** * @lends This can be safely fixed to a single line. */ // "jsdoc/multiline-blocks": ["error"|"warn", {"multilineTags":[],"noMultilineBlocks":true,"noSingleLineBlocks":true}] -// Message: Multiline jsdoc blocks are prohibited by your configuration. +// Message: Multiline JSDoc blocks are prohibited by your configuration. /** * @type {aType} This can be safely fixed to a single line. */ // "jsdoc/multiline-blocks": ["error"|"warn", {"multilineTags":[],"noMultilineBlocks":true,"noSingleLineBlocks":true}] -// Message: Multiline jsdoc blocks are prohibited by your configuration. +// Message: Multiline JSDoc blocks are prohibited by your configuration. /** * @aTag */ // "jsdoc/multiline-blocks": ["error"|"warn", {"multilineTags":[],"noMultilineBlocks":true}] -// Message: Multiline jsdoc blocks are prohibited by your configuration. +// Message: Multiline JSDoc blocks are prohibited by your configuration. /** * This is a problem when single and multiline are blocked. */ // "jsdoc/multiline-blocks": ["error"|"warn", {"noMultilineBlocks":true,"noSingleLineBlocks":true}] -// Message: Multiline jsdoc blocks are prohibited by your configuration but fixing would result in a single line block which you have prohibited with `noSingleLineBlocks`. +// Message: Multiline JSDoc blocks are prohibited by your configuration but fixing would result in a single line block which you have prohibited with `noSingleLineBlocks`. /** This comment is bad * It should not have text on line zero @@ -283,7 +297,7 @@ The following patterns are considered problems: * to a single * line. */ // "jsdoc/multiline-blocks": ["error"|"warn", {"multilineTags":[],"noMultilineBlocks":true}] -// Message: Multiline jsdoc blocks are prohibited by your configuration. +// Message: Multiline JSDoc blocks are prohibited by your configuration. /** * @someTag {aType} with Description */ diff --git a/docs/rules/no-bad-blocks.md b/docs/rules/no-bad-blocks.md index f362a8743..c46fa3df6 100644 --- a/docs/rules/no-bad-blocks.md +++ b/docs/rules/no-bad-blocks.md @@ -17,13 +17,13 @@ rule names). ## Fixer -(TODO) +Repairs badly-formed blocks missing two initial asterisks. ## Options -Takes an optional options object with the following. +A single options object has the following properties. @@ -43,6 +43,7 @@ A boolean (defaulting to `false`) which if `true` will prevent all JSDoc-like blocks with more than two initial asterisks even those without apparent tag content. + ## Context and settings diff --git a/docs/rules/no-blank-block-descriptions.md b/docs/rules/no-blank-block-descriptions.md index 4ed4b47cd..59cbbef6a 100644 --- a/docs/rules/no-blank-block-descriptions.md +++ b/docs/rules/no-blank-block-descriptions.md @@ -14,7 +14,7 @@ in the block description. ## Fixer -(TODO) +Strips empty lines in block descriptions. diff --git a/docs/rules/no-blank-blocks.md b/docs/rules/no-blank-blocks.md index c5bc6eb26..6bbd831ed 100644 --- a/docs/rules/no-blank-blocks.md +++ b/docs/rules/no-blank-blocks.md @@ -3,6 +3,7 @@ # no-blank-blocks * [Fixer](#user-content-no-blank-blocks-fixer) + * [`enableFixer`](#user-content-no-blank-blocks-fixer-enablefixer) * [Failing examples](#user-content-no-blank-blocks-failing-examples) * [Passing examples](#user-content-no-blank-blocks-passing-examples) @@ -13,18 +14,21 @@ Reports and optionally removes blocks with whitespace only. ## Fixer -(TODO) +Auto-removes blank blocks with whitespace only. #### Options - - -##### enableFixer +A single options object has the following properties. + + + +### enableFixer Whether or not to auto-remove the blank block. Defaults to `false`. + ||| |---|---| |Context|everywhere| diff --git a/docs/rules/no-defaults.md b/docs/rules/no-defaults.md index b3d2e5184..648763355 100644 --- a/docs/rules/no-defaults.md +++ b/docs/rules/no-defaults.md @@ -4,8 +4,8 @@ * [Fixer](#user-content-no-defaults-fixer) * [Options](#user-content-no-defaults-options) - * [`noOptionalParamNames`](#user-content-no-defaults-options-nooptionalparamnames) * [`contexts`](#user-content-no-defaults-options-contexts) + * [`noOptionalParamNames`](#user-content-no-defaults-options-nooptionalparamnames) * [Context and settings](#user-content-no-defaults-context-and-settings) * [Failing examples](#user-content-no-defaults-failing-examples) * [Passing examples](#user-content-no-defaults-passing-examples) @@ -27,36 +27,42 @@ to an appropriate context, including, if you wish, "any". ## Fixer -(TODO) +Strips the default value. ## Options - - -### noOptionalParamNames - -Set this to `true` to report the presence of optional parameters. May be -used if the project is insisting on optionality being indicated by -the presence of ES6 default parameters (bearing in mind that such -"defaults" are only applied when the supplied value is missing or -`undefined` but not for `null` or other "falsey" values). +A single options object has the following properties. ### contexts Set this to an array of strings representing the AST context (or an object with -`context` and `comment` properties) where you wish the rule to be applied. -Overrides the default contexts (see below). Set to `"any"` if you want -the rule to apply to any jsdoc block throughout your files (as is necessary +optional `context` and `comment` properties) where you wish the rule to be applied. + +`context` defaults to `any` and `comment` defaults to no specific comment context. + +Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`, +`FunctionExpression`). Set to `"any"` if you want +the rule to apply to any JSDoc block throughout your files (as is necessary for finding function blocks not attached to a function declaration or expression, i.e., `@callback` or `@function` (or its aliases `@func` or `@method`) (including those associated with an `@interface`). See the ["AST and Selectors"](#user-content-eslint-plugin-jsdoc-advanced-ast-and-selectors) -section of our README for more on the expected format. +section of our Advanced docs for more on the expected format. + + +### noOptionalParamNames + +Set this to `true` to report the presence of optional parameters. May be +used if the project is insisting on optionality being indicated by +the presence of ES6 default parameters (bearing in mind that such +"defaults" are only applied when the supplied value is missing or +`undefined` but not for `null` or other "falsey" values). + diff --git a/docs/rules/no-missing-syntax.md b/docs/rules/no-missing-syntax.md index 4a539a132..b599204fe 100644 --- a/docs/rules/no-missing-syntax.md +++ b/docs/rules/no-missing-syntax.md @@ -47,27 +47,34 @@ not report if there were only a function declaration of the name "ignoreMe" ## Options +A single options object has the following properties. + ### contexts Set this to an array of strings representing the AST context (or an object with -`context` and `comment` properties) where you wish the rule to be applied. +optional `context` and `comment` properties) where you wish the rule to be applied. + +`context` defaults to `any` and `comment` defaults to no specific comment context. Use the `minimum` property (defaults to 1) to indicate how many are required for the rule to be reported. Use the `message` property to indicate the specific error to be shown when an error is reported for that context being found missing. You may use -`{{context}}` and `{{comment}}` with such messages. +`{{context}}` and `{{comment}}` with such messages. Defaults to +`"Syntax is required: {{context}}"`, or with a comment, to +`"Syntax is required: {{context}} with {{comment}}"`. -Set to `"any"` if you want the rule to apply to any jsdoc block throughout +Set to `"any"` if you want the rule to apply to any JSDoc block throughout your files (as is necessary for finding function blocks not attached to a function declaration or expression, i.e., `@callback` or `@function` (or its aliases `@func` or `@method`) (including those associated with an `@interface`). See the ["AST and Selectors"](#user-content-eslint-plugin-jsdoc-advanced-ast-and-selectors) -section of our README for more on the expected format. +section of our Advanced docs for more on the expected format. + diff --git a/docs/rules/no-multi-asterisks.md b/docs/rules/no-multi-asterisks.md index 6301896b8..92efc9ea0 100644 --- a/docs/rules/no-multi-asterisks.md +++ b/docs/rules/no-multi-asterisks.md @@ -7,22 +7,24 @@ Prevents use of multiple asterisks at the beginning of lines. Note that if you wish to prevent multiple asterisks at the very beginning of -the jsdoc block, you should use `no-bad-blocks` (as that is not proper jsdoc +the JSDoc block, you should use `no-bad-blocks` (as that is not proper jsdoc and that rule is for catching blocks which only seem like jsdoc). ## Fixer -(TODO) +Removes multiple asterisks on middle or end lines. ## Options - - -### allowWhitespace (defaults to false) +A single options object has the following properties. + + + +### allowWhitespace Set to `true` if you wish to allow asterisks after a space (as with Markdown): @@ -32,32 +34,37 @@ Set to `true` if you wish to allow asterisks after a space (as with Markdown): */ ``` - - -### preventAtMiddleLines (defaults to true) +Defaults to `false`. + + +### preventAtEnd Prevent the likes of this: ```js /** * - ** - */ + * + **/ ``` - - -### preventAtEnd (defaults to true) +Defaults to `true`. + + +### preventAtMiddleLines Prevent the likes of this: ```js /** * - * - **/ + ** + */ ``` +Defaults to `true`. + + ## Context and settings diff --git a/docs/rules/no-restricted-syntax.md b/docs/rules/no-restricted-syntax.md index ea8a58ff3..6b06eb45c 100644 --- a/docs/rules/no-restricted-syntax.md +++ b/docs/rules/no-restricted-syntax.md @@ -31,6 +31,8 @@ creating your own rules and forbidding structures. ## Options +A single options object has the following properties. + ### contexts @@ -38,16 +40,21 @@ creating your own rules and forbidding structures. Set this to an array of strings representing the AST context (or an object with `context` and `comment` properties) where you wish the rule to be applied. +`context` defaults to `any` and `comment` defaults to no specific comment context. + Use the `message` property to indicate the specific error to be shown when an -error is reported for that context being found. +error is reported for that context being found. Defaults to +`"Syntax is restricted: {{context}}"`, or with a comment, to +`"Syntax is restricted: {{context}} with {{comment}}"`. -Set to `"any"` if you want the rule to apply to any jsdoc block throughout +Set to `"any"` if you want the rule to apply to any JSDoc block throughout your files (as is necessary for finding function blocks not attached to a function declaration or expression, i.e., `@callback` or `@function` (or its aliases `@func` or `@method`) (including those associated with an `@interface`). See the ["AST and Selectors"](#user-content-eslint-plugin-jsdoc-advanced-ast-and-selectors) -section of our README for more on the expected format. +section of our Advanced docs for more on the expected format. + diff --git a/docs/rules/no-types.md b/docs/rules/no-types.md index a5f8ed1e8..a74f3370b 100644 --- a/docs/rules/no-types.md +++ b/docs/rules/no-types.md @@ -28,20 +28,29 @@ Strips any types that are found. ## Options +A single options object has the following properties. + ### contexts Set this to an array of strings representing the AST context (or an object with -`context` and `comment` properties) where you wish the rule to be applied. -Overrides the default contexts (see below). Set to `"any"` if you want -the rule to apply to any jsdoc block throughout your files (as is necessary +optional `context` and `comment` properties) where you wish the rule to be applied. + +`context` defaults to `any` and `comment` defaults to no specific comment context. + +Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`, +`FunctionExpression`, `TSDeclareFunction`, `TSMethodSignature`, +`ClassDeclaration`). Set to `"any"` if you want +the rule to apply to any JSDoc block throughout your files (as is necessary for finding function blocks not attached to a function declaration or expression, i.e., `@callback` or `@function` (or its aliases `@func` or `@method`) (including those associated with an `@interface`). See the ["AST and Selectors"](#user-content-eslint-plugin-jsdoc-advanced-ast-and-selectors) -section of our README for more on the expected format. +section of our Advanced docs for more on the expected format. + + diff --git a/docs/rules/no-undefined-types.md b/docs/rules/no-undefined-types.md index 6f7c7840f..ed6854232 100644 --- a/docs/rules/no-undefined-types.md +++ b/docs/rules/no-undefined-types.md @@ -3,15 +3,18 @@ # no-undefined-types * [Options](#user-content-no-undefined-types-options) + * [`definedTypes`](#user-content-no-undefined-types-options-definedtypes) + * [`disableReporting`](#user-content-no-undefined-types-options-disablereporting) + * [`markVariablesAsUsed`](#user-content-no-undefined-types-options-markvariablesasused) * [Context and settings](#user-content-no-undefined-types-context-and-settings) * [Failing examples](#user-content-no-undefined-types-failing-examples) * [Passing examples](#user-content-no-undefined-types-passing-examples) -Checks that types in jsdoc comments are defined. This can be used to check +Checks that types in JSDoc comments are defined. This can be used to check unimported types. -When enabling this rule, types in jsdoc comments will resolve as used +When enabling this rule, types in JSDoc comments will resolve as used variables, i.e. will not be marked as unused by `no-unused-vars`. In addition to considering globals found in code (or in ESLint-indicated @@ -55,18 +58,31 @@ array's items will be considered as defined for the purposes of that tag. ## Options -An option object may have the following keys: - -- `definedTypes` - This array can be populated to indicate other types which - are automatically considered as defined (in addition to globals, etc.). - Defaults to an empty array. -- `markVariablesAsUsed` - Whether to mark variables as used for the purposes - of the `no-unused-vars` rule when they are not found to be undefined. - Defaults to `true`. May be set to `false` to enforce a practice of not - importing types unless used in code. -- `disableReporting` - Whether to disable reporting of errors. Defaults to - `false`. This may be set to `true` in order to take advantage of only - marking defined variables as used. +A single options object has the following properties. + + + +### definedTypes + +This array can be populated to indicate other types which +are automatically considered as defined (in addition to globals, etc.). +Defaults to an empty array. + + +### disableReporting + +Whether to disable reporting of errors. Defaults to +`false`. This may be set to `true` in order to take advantage of only +marking defined variables as used. + + +### markVariablesAsUsed + +Whether to mark variables as used for the purposes +of the `no-unused-vars` rule when they are not found to be undefined. +Defaults to `true`. May be set to `false` to enforce a practice of not +importing types unless used in code. + diff --git a/docs/rules/require-asterisk-prefix.md b/docs/rules/require-asterisk-prefix.md index efde08a32..fd1561555 100644 --- a/docs/rules/require-asterisk-prefix.md +++ b/docs/rules/require-asterisk-prefix.md @@ -10,28 +10,33 @@ Requires that each JSDoc line starts with an `*`. ## Fixer -(TODO) +Adds an asterisk for each missing line of the JSDoc block. ## Options -This rule allows an optional string argument. If it is `"always"` then a -problem is raised when there is no asterisk prefix on a given jsdoc line. If -it is `"never"` then a problem is raised when there is an asterisk present. +The first option is a string with the following possible values: "always", "never", "any". +If it is `"always"` then a problem is raised when there is no asterisk +prefix on a given JSDoc line. If it is `"never"` then a problem is raised +when there is an asterisk present. + The default value is `"always"`. You may also set the default to `"any"` and use the `tags` option to apply to specific tags only. -After the string option, one may add an object with the following. +The next option is an object with the following properties. ### tags + +A single options object has the following properties. + If you want different values to apply to specific tags, you may use the `tags` option object. The keys are `always`, `never`, or `any` and the values are arrays of tag names or the special value `*description` -which applies to the main jsdoc block description. +which applies to the main JSDoc block description. ```js { @@ -45,6 +50,25 @@ which applies to the main jsdoc block description. } ``` + + +#### always + +If it is `"always"` then a problem is raised when there is no asterisk +prefix on a given JSDoc line. + + +#### any + +No problem is raised regardless of asterisk presence or non-presence. + + +#### never + +If it is `"never"` then a problem is raised +when there is an asterisk present. + + ## Context and settings diff --git a/docs/rules/require-description-complete-sentence.md b/docs/rules/require-description-complete-sentence.md index 1476e0096..fe2750047 100644 --- a/docs/rules/require-description-complete-sentence.md +++ b/docs/rules/require-description-complete-sentence.md @@ -4,9 +4,9 @@ * [Fixer](#user-content-require-description-complete-sentence-fixer) * [Options](#user-content-require-description-complete-sentence-options) - * [`tags`](#user-content-require-description-complete-sentence-options-tags) * [`abbreviations`](#user-content-require-description-complete-sentence-options-abbreviations) * [`newlineBeforeCapsAssumesBadSentenceEnd`](#user-content-require-description-complete-sentence-options-newlinebeforecapsassumesbadsentenceend) + * [`tags`](#user-content-require-description-complete-sentence-options-tags) * [Context and settings](#user-content-require-description-complete-sentence-context-and-settings) * [Failing examples](#user-content-require-description-complete-sentence-failing-examples) * [Passing examples](#user-content-require-description-complete-sentence-passing-examples) @@ -39,6 +39,22 @@ letter will be capitalized. ## Options +A single options object has the following properties. + + + +### abbreviations + +You can provide an `abbreviations` options array to avoid such strings of text +being treated as sentence endings when followed by dots. The `.` is not +necessary at the end of the array items. + + +### newlineBeforeCapsAssumesBadSentenceEnd + +When `false` (the new default), we will not assume capital letters after +newlines are an incorrect way to end the sentence (they may be proper +nouns, for example). ### tags @@ -64,21 +80,7 @@ its "description" (e.g., for `@returns {someType} some description`, the description is `some description` while for `@some-tag xyz`, the description is `xyz`). - - -### abbreviations - -You can provide an `abbreviations` options array to avoid such strings of text -being treated as sentence endings when followed by dots. The `.` is not -necessary at the end of the array items. - - -### newlineBeforeCapsAssumesBadSentenceEnd - -When `false` (the new default), we will not assume capital letters after -newlines are an incorrect way to end the sentence (they may be proper -nouns, for example). diff --git a/docs/rules/require-description.md b/docs/rules/require-description.md index 0cc80713d..7d8f5262c 100644 --- a/docs/rules/require-description.md +++ b/docs/rules/require-description.md @@ -3,6 +3,12 @@ # require-description * [Options](#user-content-require-description-options) + * [`checkConstructors`](#user-content-require-description-options-checkconstructors) + * [`checkGetters`](#user-content-require-description-options-checkgetters) + * [`checkSetters`](#user-content-require-description-options-checksetters) + * [`contexts`](#user-content-require-description-options-contexts) + * [`descriptionStyle`](#user-content-require-description-options-descriptionstyle) + * [`exemptedBy`](#user-content-require-description-options-exemptedby) * [Context and settings](#user-content-require-description-context-and-settings) * [Failing examples](#user-content-require-description-failing-examples) * [Passing examples](#user-content-require-description-passing-examples) @@ -14,7 +20,7 @@ have a description. * All functions must have an implicit description (e.g., text above tags) or have the option `descriptionStyle` set to `tag` (requiring `@description` (or `@desc` if that is set as your preferred tag name)). -* Every jsdoc block description (or `@description` tag if `descriptionStyle` +* Every JSDoc block description (or `@description` tag if `descriptionStyle` is `"tag"`) must have a non-empty description that explains the purpose of the method. @@ -22,26 +28,62 @@ have a description. ## Options -An options object may have any of the following properties: - -- `contexts` - Set to an array of strings representing the AST context - where you wish the rule to be applied (e.g., `ClassDeclaration` for ES6 - classes). Overrides the default contexts (see below). Set to `"any"` if - you want the rule to apply to any jsdoc block throughout your files. -- `exemptedBy` - Array of tags (e.g., `['type']`) whose presence on the - document block avoids the need for a `@description`. Defaults to an - array with `inheritdoc`. If you set this array, it will overwrite the - default, so be sure to add back `inheritdoc` if you wish its presence - to cause exemption of the rule. -- `descriptionStyle` - Whether to accept implicit descriptions (`"body"`) or - `@description` tags (`"tag"`) as satisfying the rule. Set to `"any"` to - accept either style. Defaults to `"body"`. -- `checkConstructors` - A value indicating whether `constructor`s should be - checked. Defaults to `true`. -- `checkGetters` - A value indicating whether getters should be checked. - Defaults to `true`. -- `checkSetters` - A value indicating whether setters should be checked. - Defaults to `true`. +A single options object has the following properties. + + + +### checkConstructors + +A value indicating whether `constructor`s should be +checked. Defaults to `true`. + + +### checkGetters + +A value indicating whether getters should be checked. +Defaults to `true`. + + +### checkSetters + +A value indicating whether setters should be checked. +Defaults to `true`. + + +### contexts + +Set to an array of strings representing the AST context +where you wish the rule to be applied (e.g., `ClassDeclaration` for ES6 +classes). + +`context` defaults to `any` and `comment` defaults to no specific comment context. + +Overrides the default contexts (`ArrowFunctionExpression`, +`FunctionDeclaration`, `FunctionExpression`). Set to `"any"` if you want +the rule to apply to any JSDoc block throughout your files (as is necessary +for finding function blocks not attached to a function declaration or +expression, i.e., `@callback` or `@function` (or its aliases `@func` or +`@method`) (including those associated with an `@interface`). + +See the ["AST and Selectors"](#user-content-eslint-plugin-jsdoc-advanced-ast-and-selectors) +section of our Advanced docs for more on the expected format. + + +### descriptionStyle + +Whether to accept implicit descriptions (`"body"`) or +`@description` tags (`"tag"`) as satisfying the rule. Set to `"any"` to +accept either style. Defaults to `"body"`. + + +### exemptedBy + +Array of tags (e.g., `['type']`) whose presence on the +document block avoids the need for a `@description`. Defaults to an +array with `inheritdoc`. If you set this array, it will overwrite the +default, so be sure to add back `inheritdoc` if you wish its presence +to cause exemption of the rule. + @@ -50,7 +92,7 @@ An options object may have any of the following properties: | | | | -------- | ---------------------- | | Context | `ArrowFunctionExpression`, `FunctionDeclaration`, `FunctionExpression`; others when `contexts` option enabled | -| Tags | `description` or jsdoc block | +| Tags | `description` or JSDoc block | | Aliases | `desc` | | Recommended | false | | Options |`checkConstructors`, `checkGetters`, `checkSetters`, `contexts`, `descriptionStyle`, `exemptedBy`| diff --git a/docs/rules/require-example.md b/docs/rules/require-example.md index 1b88cc22d..26c26c6c9 100644 --- a/docs/rules/require-example.md +++ b/docs/rules/require-example.md @@ -4,13 +4,13 @@ * [Fixer](#user-content-require-example-fixer) * [Options](#user-content-require-example-options) - * [`exemptedBy`](#user-content-require-example-options-exemptedby) - * [`exemptNoArguments`](#user-content-require-example-options-exemptnoarguments) - * [`contexts`](#user-content-require-example-options-contexts) * [`checkConstructors`](#user-content-require-example-options-checkconstructors) * [`checkGetters`](#user-content-require-example-options-checkgetters) * [`checkSetters`](#user-content-require-example-options-checksetters) + * [`contexts`](#user-content-require-example-options-contexts) * [`enableFixer`](#user-content-require-example-options-enablefixer) + * [`exemptedBy`](#user-content-require-example-options-exemptedby) + * [`exemptNoArguments`](#user-content-require-example-options-exemptnoarguments) * [Context and settings](#user-content-require-example-context-and-settings) @@ -31,37 +31,7 @@ report a missing example description after this is added. ## Options -This rule has an object option. - - - -### exemptedBy - -Array of tags (e.g., `['type']`) whose presence on the document -block avoids the need for an `@example`. Defaults to an array with -`inheritdoc`. If you set this array, it will overwrite the default, -so be sure to add back `inheritdoc` if you wish its presence to cause -exemption of the rule. - - - -### exemptNoArguments - -Boolean to indicate that no-argument functions should not be reported for -missing `@example` declarations. - - - -### contexts - -Set this to an array of strings representing the AST context (or an object with -`context` and `comment` properties) where you wish the rule to be applied. -(e.g., `ClassDeclaration` for ES6 -classes). Overrides the default contexts (see below). Set to `"any"` if you -want the rule to apply to any jsdoc block throughout your files. - -See the ["AST and Selectors"](#user-content-eslint-plugin-jsdoc-advanced-ast-and-selectors) -section of our README for more on the expected format. +A single options object has the following properties. @@ -69,25 +39,54 @@ section of our README for more on the expected format. A value indicating whether `constructor`s should be checked. Defaults to `true`. - ### checkGetters A value indicating whether getters should be checked. Defaults to `false`. - ### checkSetters A value indicating whether setters should be checked. Defaults to `false`. + + +### contexts +Set this to an array of strings representing the AST context (or an object with +optional `context` and `comment` properties) where you wish the rule to be applied. +(e.g., `ClassDeclaration` for ES6 classes). + +`context` defaults to `any` and `comment` defaults to no specific comment context. + +Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`, +`FunctionExpression`). Set to `"any"` if you want the rule to apply to any +JSDoc block throughout your files. + +See the ["AST and Selectors"](#user-content-eslint-plugin-jsdoc-advanced-ast-and-selectors) +section of our Advanced docs for more on the expected format. ### enableFixer A boolean on whether to enable the fixer (which adds an empty `@example` block). Defaults to `true`. + + +### exemptedBy + +Array of tags (e.g., `['type']`) whose presence on the document +block avoids the need for an `@example`. Defaults to an array with +`inheritdoc`. If you set this array, it will overwrite the default, +so be sure to add back `inheritdoc` if you wish its presence to cause +exemption of the rule. + + +### exemptNoArguments + +Boolean to indicate that no-argument functions should not be reported for +missing `@example` declarations. + diff --git a/docs/rules/require-file-overview.md b/docs/rules/require-file-overview.md index ce4f028d2..0db0d39c4 100644 --- a/docs/rules/require-file-overview.md +++ b/docs/rules/require-file-overview.md @@ -23,6 +23,8 @@ Checks that: ## Options +A single options object has the following properties. + ### tags @@ -30,9 +32,16 @@ Checks that: The keys of this object are tag names, and the values are configuration objects indicating what will be checked for these whole-file tags. -Each configuration object has the following boolean keys (which default -to `false` when this option is supplied): `mustExist`, `preventDuplicates`, -`initialCommentsOnly`. These correspond to the three items above. +Each configuration object has 3 potential boolean keys (which default +to `false` when this option is supplied). + +1. `mustExist` - enforces that all files have a `@file`, `@fileoverview`, or `@overview` tag. +2. `preventDuplicates` - enforces that duplicate file overview tags within a given file will be reported +3. `initialCommentsOnly` - reports file overview tags which are not, as per + [the docs](https://jsdoc.app/tags-file.html), "at the beginning of + the file"–where beginning of the file is interpreted in this rule + as being when the overview tag is not preceded by anything other than + a comment. When no `tags` is present, the default is: @@ -75,11 +84,14 @@ Note that if you choose to use `preventDuplicates` with `license`, you still have a way to allow multiple licenses for the whole page by using the SPDX "AND" expression, e.g., `@license (MIT AND GPL-3.0)`. -Note that the tag names are the main jsdoc tag name, so you should use `file` +Note that the tag names are the main JSDoc tag name, so you should use `file` in this configuration object regardless of whether you have configured `fileoverview` instead of `file` on `tagNamePreference` (i.e., `fileoverview` will be checked, but you must use `file` on the configuration object). + + + ## Context and settings diff --git a/docs/rules/require-hyphen-before-param-description.md b/docs/rules/require-hyphen-before-param-description.md index 0fa4f882d..4a60c8078 100644 --- a/docs/rules/require-hyphen-before-param-description.md +++ b/docs/rules/require-hyphen-before-param-description.md @@ -4,6 +4,7 @@ * [Fixer](#user-content-require-hyphen-before-param-description-fixer) * [Options](#user-content-require-hyphen-before-param-description-options) + * [`tags`](#user-content-require-hyphen-before-param-description-options-tags) * [Context and settings](#user-content-require-hyphen-before-param-description-context-and-settings) * [Failing examples](#user-content-require-hyphen-before-param-description-failing-examples) * [Passing examples](#user-content-require-hyphen-before-param-description-passing-examples) @@ -21,8 +22,7 @@ Adds a hyphen for "always" and removes a hyphen for "never". ## Options -This rule takes one optional string argument and an optional options object. - +The first option is a string with the following possible values: "always", "never". If the string is `"always"` then a problem is raised when there is no hyphen before the description. If it is `"never"` then a problem is raised when there is a hyphen before the description. The default value is `"always"`. @@ -32,10 +32,15 @@ actually be forbidden in the event that they are followed immediately by the end of a line (this will otherwise cause Visual Studio Code to display incorrectly). -The options object may have the following properties to indicate behavior for -other tags besides the `@param` tag (or the `@arg` tag if so set): +The next option is an object with the following properties. + +The options object may have the following property to indicate behavior for +other tags besides the `@param` tag (or the `@arg` tag if so set). + + +### tags -- `tags` - Object whose keys indicate different tags to check for the +Object whose keys indicate different tags to check for the presence or absence of hyphens; the key value should be "always" or "never", indicating how hyphens are to be applied, e.g., `{property: 'never'}` to ensure `@property` never uses hyphens. A key can also be set as `*`, e.g., @@ -43,6 +48,8 @@ other tags besides the `@param` tag (or the `@arg` tag if so set): `@param` tag which follows the main string option setting and besides any other `tags` entries). + + ## Context and settings diff --git a/docs/rules/require-jsdoc.md b/docs/rules/require-jsdoc.md index 1d5ca1e45..4a6e904d4 100644 --- a/docs/rules/require-jsdoc.md +++ b/docs/rules/require-jsdoc.md @@ -4,25 +4,25 @@ * [Fixer](#user-content-require-jsdoc-fixer) * [Options](#user-content-require-jsdoc-options) - * [`publicOnly`](#user-content-require-jsdoc-options-publiconly) - * [`require`](#user-content-require-jsdoc-options-require) - * [`contexts`](#user-content-require-jsdoc-options-contexts) - * [`exemptEmptyConstructors`](#user-content-require-jsdoc-options-exemptemptyconstructors) - * [`exemptEmptyFunctions`](#user-content-require-jsdoc-options-exemptemptyfunctions) * [`checkConstructors`](#user-content-require-jsdoc-options-checkconstructors) * [`checkGetters`](#user-content-require-jsdoc-options-checkgetters) * [`checkSetters`](#user-content-require-jsdoc-options-checksetters) + * [`contexts`](#user-content-require-jsdoc-options-contexts) * [`enableFixer`](#user-content-require-jsdoc-options-enablefixer) - * [`minLineCount`](#user-content-require-jsdoc-options-minlinecount) + * [`exemptEmptyConstructors`](#user-content-require-jsdoc-options-exemptemptyconstructors) + * [`exemptEmptyFunctions`](#user-content-require-jsdoc-options-exemptemptyfunctions) + * [`exemptOverloadedImplementations`](#user-content-require-jsdoc-options-exemptoverloadedimplementations) * [`fixerMessage`](#user-content-require-jsdoc-options-fixermessage) + * [`minLineCount`](#user-content-require-jsdoc-options-minlinecount) + * [`publicOnly`](#user-content-require-jsdoc-options-publiconly) + * [`require`](#user-content-require-jsdoc-options-require) * [`skipInterveningOverloadedDeclarations`](#user-content-require-jsdoc-options-skipinterveningoverloadeddeclarations) - * [`exemptOverloadedImplementations`](#user-content-require-jsdoc-options-exemptoverloadedimplementations) * [Context and settings](#user-content-require-jsdoc-context-and-settings) * [Failing examples](#user-content-require-jsdoc-failing-examples) * [Passing examples](#user-content-require-jsdoc-passing-examples) -Checks for presence of jsdoc comments, on class declarations as well as +Checks for presence of JSDoc comments, on class declarations as well as functions. @@ -38,39 +38,36 @@ to insert. ## Options -Accepts one optional options object with the following optional keys. +A single options object has the following properties. - - -### publicOnly +Has the following optional keys. -This option will insist that missing jsdoc blocks are only reported for -function bodies / class declarations that are exported from the module. -May be a boolean or object. If set to `true`, the defaults below will be -used. If unset, jsdoc block reporting will not be limited to exports. - -This object supports the following optional boolean keys (`false` unless -otherwise noted): - -- `ancestorsOnly` - Only check node ancestors to check if node is exported -- `esm` - ESM exports are checked for JSDoc comments (Defaults to `true`) -- `cjs` - CommonJS exports are checked for JSDoc comments (Defaults to `true`) -- `window` - Window global exports are checked for JSDoc comments + + +### checkConstructors - - -### require +A value indicating whether `constructor`s should be checked. Defaults to +`true`. When `true`, `exemptEmptyConstructors` may still avoid reporting when +no parameters or return values are found. + + +### checkGetters -An object with the following optional boolean keys which all default to -`false` except as noted, indicating the contexts where the rule will apply: +A value indicating whether getters should be checked. Besides setting as a +boolean, this option can be set to the string `"no-setter"` to indicate that +getters should be checked but only when there is no setter. This may be useful +if one only wishes documentation on one of the two accessors. Defaults to +`false`. -- `ArrowFunctionExpression` -- `ClassDeclaration` -- `ClassExpression` -- `FunctionDeclaration` (defaults to `true`) -- `FunctionExpression` -- `MethodDefinition` + + +### checkSetters +A value indicating whether setters should be checked. Besides setting as a +boolean, this option can be set to the string `"no-getter"` to indicate that +setters should be checked but only when there is no getter. This may be useful +if one only wishes documentation on one of the two accessors. Defaults to +`false`. ### contexts @@ -81,84 +78,116 @@ properties). If specified as an object, it should have a `context` property and can have an `inlineCommentBlock` property which, if set to `true`, will add an inline `/** */` instead of the regular, multi-line, indented jsdoc block which will otherwise be added. Defaults to an empty array. Contexts -may also have their own `minLineCount` property. +may also have their own `minLineCount` property which is an integer +indicating a minimum number of lines expected for a node in order +for it to require documentation. Note that you may need to disable `require` items (e.g., `MethodDefinition`) if you are specifying a more precise form in `contexts` (e.g., `MethodDefinition:not([accessibility="private"] > FunctionExpression`). See the ["AST and Selectors"](#user-content-eslint-plugin-jsdoc-advanced-ast-and-selectors) -section of our README for more on the expected format. +section of our Advanced docs for more on the expected format. + + +### enableFixer +A boolean on whether to enable the fixer (which adds an empty JSDoc block). +Defaults to `true`. ### exemptEmptyConstructors -Default: true - -When `true`, the rule will not report missing jsdoc blocks above constructors +When `true`, the rule will not report missing JSDoc blocks above constructors with no parameters or return values (this is enabled by default as the class name or description should be seen as sufficient to convey intent). +Defaults to `true`. ### exemptEmptyFunctions -Default: false. - -When `true`, the rule will not report missing jsdoc blocks above +When `true`, the rule will not report missing JSDoc blocks above functions/methods with no parameters or return values (intended where function/method names are sufficient for themselves as documentation). - - -### checkConstructors - -A value indicating whether `constructor`s should be checked. Defaults to -`true`. When `true`, `exemptEmptyConstructors` may still avoid reporting when -no parameters or return values are found. - - - -### checkGetters - -A value indicating whether getters should be checked. Besides setting as a -boolean, this option can be set to the string `"no-setter"` to indicate that -getters should be checked but only when there is no setter. This may be useful -if one only wishes documentation on one of the two accessors. Defaults to -`false`. - - - -### checkSetters +Defaults to `false`. -A value indicating whether setters should be checked. Besides setting as a -boolean, this option can be set to the string `"no-getter"` to indicate that -setters should be checked but only when there is no getter. This may be useful -if one only wishes documentation on one of the two accessors. Defaults to -`false`. + + +### exemptOverloadedImplementations - - -### enableFixer +If set to `true` will avoid checking an overloaded function's implementation. -A boolean on whether to enable the fixer (which adds an empty jsdoc block). -Defaults to `true`. +Defaults to `false`. + + +### fixerMessage +An optional message to add to the inserted JSDoc block. Defaults to the +empty string. ### minLineCount An integer to indicate a minimum number of lines expected for a node in order for it to require documentation. Defaults to `undefined`. This option will -apply to any context; see `contexts` for line counts per context. +apply to any context; see `contexts` for line counts specific to a context. + + +### publicOnly - - -### fixerMessage +This option will insist that missing JSDoc blocks are only reported for +function bodies / class declarations that are exported from the module. +May be a boolean or object. If set to `true`, the defaults below will be +used. If unset, JSDoc block reporting will not be limited to exports. -An optional message to add to the inserted JSDoc block. Defaults to the -empty string. +This object supports the following optional boolean keys (`false` unless +otherwise noted): + +- `ancestorsOnly` - Optimization to only check node ancestors to check if node is exported +- `esm` - ESM exports are checked for JSDoc comments (Defaults to `true`) +- `cjs` - CommonJS exports are checked for JSDoc comments (Defaults to `true`) +- `window` - Window global exports are checked for JSDoc comments + + + +### require + + +A single options object has the following properties. +An object with the following optional boolean keys which all default to +`false` except for `FunctionDeclaration` which defaults to `true`. + + +#### ArrowFunctionExpression + +Whether to check arrow functions like `() => {}` + + +#### ClassDeclaration + +Whether to check declarations like `class A {}` + + +#### ClassExpression + +Whether to check class expressions like `const myClass = class {}` + + +#### FunctionDeclaration + +Whether to check function declarations like `function a {}` + + +#### FunctionExpression + +Whether to check function expressions like `const a = function {}` + + +#### MethodDefinition + +Whether to check method definitions like `class A { someMethodDefinition () {} }` ### skipInterveningOverloadedDeclarations @@ -171,13 +200,6 @@ comment block. Defaults to `true`. - - -### exemptOverloadedImplementations - -If set to `true` will avoid checking an overloaded function's implementation. - -Defaults to `false`. diff --git a/docs/rules/require-param-description.md b/docs/rules/require-param-description.md index 05aa99de5..eb48f26c1 100644 --- a/docs/rules/require-param-description.md +++ b/docs/rules/require-param-description.md @@ -3,9 +3,9 @@ # require-param-description * [Options](#user-content-require-param-description-options) - * [`setDefaultDestructuredRootDescription`](#user-content-require-param-description-options-setdefaultdestructuredrootdescription) - * [`defaultDestructuredRootDescription`](#user-content-require-param-description-options-defaultdestructuredrootdescription) * [`contexts`](#user-content-require-param-description-options-contexts) + * [`defaultDestructuredRootDescription`](#user-content-require-param-description-options-defaultdestructuredrootdescription) + * [`setDefaultDestructuredRootDescription`](#user-content-require-param-description-options-setdefaultdestructuredrootdescription) * [Context and settings](#user-content-require-param-description-context-and-settings) * [Failing examples](#user-content-require-param-description-failing-examples) * [Passing examples](#user-content-require-param-description-passing-examples) @@ -22,37 +22,42 @@ Will exempt destructured roots and their children if ## Options - - -### setDefaultDestructuredRootDescription - -Whether to set a default destructured root description. For example, you may -wish to avoid manually having to set the description for a `@param` -corresponding to a destructured root object as it should always be the same -type of object. Uses `defaultDestructuredRootDescription` for the description -string. Defaults to `false`. - - - -### defaultDestructuredRootDescription - -The description string to set by default for destructured roots. Defaults to -"The root object". +A single options object has the following properties. ### contexts Set this to an array of strings representing the AST context (or an object with -`context` and `comment` properties) where you wish the rule to be applied. -Overrides the default contexts (see below). Set to `"any"` if you want -the rule to apply to any jsdoc block throughout your files (as is necessary +optional `context` and `comment` properties) where you wish the rule to be applied. + +`context` defaults to `any` and `comment` defaults to no specific comment context. + +Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`, +`FunctionExpression`). Set to `"any"` if you want +the rule to apply to any JSDoc block throughout your files (as is necessary for finding function blocks not attached to a function declaration or expression, i.e., `@callback` or `@function` (or its aliases `@func` or `@method`) (including those associated with an `@interface`). See the ["AST and Selectors"](#user-content-eslint-plugin-jsdoc-advanced-ast-and-selectors) -section of our README for more on the expected format. +section of our Advanced docs for more on the expected format. + + +### defaultDestructuredRootDescription + +The description string to set by default for destructured roots. Defaults to +"The root object". + + +### setDefaultDestructuredRootDescription + +Whether to set a default destructured root description. For example, you may +wish to avoid manually having to set the description for a `@param` +corresponding to a destructured root object as it should always be the same +type of object. Uses `defaultDestructuredRootDescription` for the description +string. Defaults to `false`. + diff --git a/docs/rules/require-param-name.md b/docs/rules/require-param-name.md index 5a3636e00..b8ce96a9f 100644 --- a/docs/rules/require-param-name.md +++ b/docs/rules/require-param-name.md @@ -19,20 +19,28 @@ Requires that all `@param` tags have names. ## Options +A single options object has the following properties. + ### contexts Set this to an array of strings representing the AST context (or an object with -`context` and `comment` properties) where you wish the rule to be applied. -Overrides the default contexts (see below). Set to `"any"` if you want -the rule to apply to any jsdoc block throughout your files (as is necessary +optional `context` and `comment` properties) where you wish the rule to be applied. + +`context` defaults to `any` and `comment` defaults to no specific comment context. + +Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`, +`FunctionExpression`). Set to `"any"` if you want +the rule to apply to any JSDoc block throughout your files (as is necessary for finding function blocks not attached to a function declaration or expression, i.e., `@callback` or `@function` (or its aliases `@func` or `@method`) (including those associated with an `@interface`). See the ["AST and Selectors"](#user-content-eslint-plugin-jsdoc-advanced-ast-and-selectors) -section of our README for more on the expected format. +section of our Advanced docs for more on the expected format. + + diff --git a/docs/rules/require-param-type.md b/docs/rules/require-param-type.md index bea206083..ed7caf11c 100644 --- a/docs/rules/require-param-type.md +++ b/docs/rules/require-param-type.md @@ -3,9 +3,9 @@ # require-param-type * [Options](#user-content-require-param-type-options) - * [`setDefaultDestructuredRootType`](#user-content-require-param-type-options-setdefaultdestructuredroottype) - * [`defaultDestructuredRootType`](#user-content-require-param-type-options-defaultdestructuredroottype) * [`contexts`](#user-content-require-param-type-options-contexts) + * [`defaultDestructuredRootType`](#user-content-require-param-type-options-defaultdestructuredroottype) + * [`setDefaultDestructuredRootType`](#user-content-require-param-type-options-setdefaultdestructuredroottype) * [Context and settings](#user-content-require-param-type-context-and-settings) * [Failing examples](#user-content-require-param-type-failing-examples) * [Passing examples](#user-content-require-param-type-passing-examples) @@ -22,36 +22,41 @@ Will exempt destructured roots and their children if ## Options - - -### setDefaultDestructuredRootType - -Whether to set a default destructured root type. For example, you may wish -to avoid manually having to set the type for a `@param` -corresponding to a destructured root object as it is always going to be an -object. Uses `defaultDestructuredRootType` for the type string. Defaults to -`false`. - - - -### defaultDestructuredRootType - -The type string to set by default for destructured roots. Defaults to "object". +A single options object has the following properties. ### contexts Set this to an array of strings representing the AST context (or an object with -`context` and `comment` properties) where you wish the rule to be applied. -Overrides the default contexts (see below). Set to `"any"` if you want -the rule to apply to any jsdoc block throughout your files (as is necessary +optional `context` and `comment` properties) where you wish the rule to be applied. + +`context` defaults to `any` and `comment` defaults to no specific comment context. + +Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`, +`FunctionExpression`). Set to `"any"` if you want +the rule to apply to any JSDoc block throughout your files (as is necessary for finding function blocks not attached to a function declaration or expression, i.e., `@callback` or `@function` (or its aliases `@func` or `@method`) (including those associated with an `@interface`). See the ["AST and Selectors"](#user-content-eslint-plugin-jsdoc-advanced-ast-and-selectors) -section of our README for more on the expected format. +section of our Advanced docs for more on the expected format. + + +### defaultDestructuredRootType + +The type string to set by default for destructured roots. Defaults to "object". + + +### setDefaultDestructuredRootType + +Whether to set a default destructured root type. For example, you may wish +to avoid manually having to set the type for a `@param` +corresponding to a destructured root object as it is always going to be an +object. Uses `defaultDestructuredRootType` for the type string. Defaults to +`false`. + diff --git a/docs/rules/require-param.md b/docs/rules/require-param.md index 0dc07fd70..9c44c4854 100644 --- a/docs/rules/require-param.md +++ b/docs/rules/require-param.md @@ -8,23 +8,23 @@ * [Rest Element (`RestElement`) insertions](#user-content-require-param-fixer-rest-element-restelement-insertions) * [Object Rest Property insertions](#user-content-require-param-fixer-object-rest-property-insertions) * [Options](#user-content-require-param-options) - * [`enableFixer`](#user-content-require-param-options-enablefixer) - * [`enableRootFixer`](#user-content-require-param-options-enablerootfixer) - * [`enableRestElementFixer`](#user-content-require-param-options-enablerestelementfixer) - * [`checkRestProperty`](#user-content-require-param-options-checkrestproperty) * [`autoIncrementBase`](#user-content-require-param-options-autoincrementbase) - * [`unnamedRootBase`](#user-content-require-param-options-unnamedrootbase) - * [`exemptedBy`](#user-content-require-param-options-exemptedby) - * [`checkTypesPattern`](#user-content-require-param-options-checktypespattern) - * [`contexts`](#user-content-require-param-options-contexts) * [`checkConstructors`](#user-content-require-param-options-checkconstructors) - * [`checkGetters`](#user-content-require-param-options-checkgetters) - * [`checkSetters`](#user-content-require-param-options-checksetters) * [`checkDestructured`](#user-content-require-param-options-checkdestructured) * [`checkDestructuredRoots`](#user-content-require-param-options-checkdestructuredroots) - * [`useDefaultObjectProperties`](#user-content-require-param-options-usedefaultobjectproperties) + * [`checkGetters`](#user-content-require-param-options-checkgetters) + * [`checkRestProperty`](#user-content-require-param-options-checkrestproperty) + * [`checkSetters`](#user-content-require-param-options-checksetters) + * [`checkTypesPattern`](#user-content-require-param-options-checktypespattern) + * [`contexts`](#user-content-require-param-options-contexts) + * [`enableFixer`](#user-content-require-param-options-enablefixer) + * [`enableRestElementFixer`](#user-content-require-param-options-enablerestelementfixer) + * [`enableRootFixer`](#user-content-require-param-options-enablerootfixer) + * [`exemptedBy`](#user-content-require-param-options-exemptedby) * [`ignoreWhenAllParamsMissing`](#user-content-require-param-options-ignorewhenallparamsmissing) * [`interfaceExemptsParamsCheck`](#user-content-require-param-options-interfaceexemptsparamscheck) + * [`unnamedRootBase`](#user-content-require-param-options-unnamedrootbase) + * [`useDefaultObjectProperties`](#user-content-require-param-options-usedefaultobjectproperties) * [Context and settings](#user-content-require-param-context-and-settings) * [Failing examples](#user-content-require-param-failing-examples) * [Passing examples](#user-content-require-param-passing-examples) @@ -57,7 +57,7 @@ function quux ({foo: bar, baz: bax = 5}) { } ``` -...the fixed jsdoc will be: +...the fixed JSDoc will be: ```js /** @@ -83,7 +83,7 @@ function quux ([foo, bar]) { } ``` -..the fixed jsdoc will be: +..the fixed JSDoc will be: ```js /** @@ -109,7 +109,7 @@ function quux ({foo}, {bar}, {baz}) { } ``` -...the default jsdoc that would be added if the fixer is enabled would be: +...the default JSDoc that would be added if the fixer is enabled would be: ```js /** @@ -134,7 +134,7 @@ And one can have the count begin at another number (e.g., `1`) by changing ### Rest Element (RestElement) insertions The fixer will automatically report/insert -[jsdoc repeatable parameters](https://jsdoc.app/tags-param.html#multiple-types-and-repeatable-parameters) +[JSDoc repeatable parameters](https://jsdoc.app/tags-param.html#multiple-types-and-repeatable-parameters) if missing. ```js @@ -147,7 +147,7 @@ function baar ([a, ...extra]) { } ``` -..becomes: +...becomes: ```js /** @@ -210,7 +210,7 @@ function quux ({num, ...extra}) { } ``` -You may wish to manually note in your jsdoc for `extra` that this is a +You may wish to manually note in your JSDoc for `extra` that this is a rest property, however, as jsdoc [does not appear](https://github.com/jsdoc/jsdoc/issues/1773) to currently support syntax or output to distinguish rest properties from @@ -222,29 +222,46 @@ function signature, it may appear that there is an actual property named ## Options -An options object accepts the following optional properties: +A single options object has the following properties. - - -### enableFixer + + +### autoIncrementBase -Whether to enable the fixer. Defaults to `true`. +Numeric to indicate the number at which to begin auto-incrementing roots. +Defaults to `0`. - - -### enableRootFixer + + +### checkConstructors -Whether to enable the auto-adding of incrementing roots (see the "Fixer" -section). Defaults to `true`. Has no effect if `enableFixer` is set to -`false`. +A value indicating whether `constructor`s should be checked. Defaults to +`true`. - - -### enableRestElementFixer + + +### checkDestructured + +Whether to require destructured properties. Defaults to `true`. + + +### checkDestructuredRoots -Whether to enable the rest element fixer (see -"Rest Element (`RestElement`) insertions"). Defaults to `true`. +Whether to check the existence of a corresponding `@param` for root objects +of destructured properties (e.g., that for `function ({a, b}) {}`, that there +is something like `@param myRootObj` defined that can correspond to +the `{a, b}` object parameter). + +If `checkDestructuredRoots` is `false`, `checkDestructured` will also be +implied to be `false` (i.e., the inside of the roots will not be checked +either, e.g., it will also not complain if `a` or `b` do not have their own +documentation). Defaults to `true`. + + +### checkGetters + +A value indicating whether getters should be checked. Defaults to `false`. ### checkRestProperty @@ -300,50 +317,11 @@ function quux ({num, ...extra}) { } ``` - - -### autoIncrementBase - -Numeric to indicate the number at which to begin auto-incrementing roots. -Defaults to `0`. - - - -### unnamedRootBase - -An array of root names to use in the fixer when roots are missing. Defaults -to `['root']`. Note that only when all items in the array besides the last -are exhausted will auto-incrementing occur. So, with -`unnamedRootBase: ['arg', 'config']`, the following: - -```js -function quux ({foo}, [bar], {baz}) { -} -``` - -...will get the following jsdoc block added: - -```js -/** -* @param arg -* @param arg.foo -* @param config0 -* @param config0."0" (`bar`) -* @param config1 -* @param config1.baz -*/ -``` - - - -### exemptedBy - -Array of tags (e.g., `['type']`) whose presence on the document block -avoids the need for a `@param`. Defaults to an array with -`inheritdoc`. If you set this array, it will overwrite the default, -so be sure to add back `inheritdoc` if you wish its presence to cause -exemption of the rule. + + +### checkSetters +A value indicating whether setters should be checked. Defaults to `false`. ### checkTypesPattern @@ -379,73 +357,111 @@ your expression as a string, but like a literal, e.g., `/^object$/vi`. You could set this regular expression to a more expansive list, or you could restrict it such that even types matching those strings would not need destructuring. - ### contexts Set this to an array of strings representing the AST context (or an object with -`context` and `comment` properties) where you wish the rule to be applied. -Overrides the default contexts (see below). May be useful for adding such as +optional `context` and `comment` properties) where you wish the rule to be applied. + +`context` defaults to `any` and `comment` defaults to no specific comment context. + +Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`, +`FunctionExpression`). May be useful for adding such as `TSMethodSignature` in TypeScript or restricting the contexts which are checked. See the ["AST and Selectors"](#user-content-eslint-plugin-jsdoc-advanced-ast-and-selectors) -section of our README for more on the expected format. +section of our Advanced docs for more on the expected format. - - -### checkConstructors + + +### enableFixer -A value indicating whether `constructor`s should be checked. Defaults to -`true`. +Whether to enable the fixer. Defaults to `true`. + + +### enableRestElementFixer - - -### checkGetters +Whether to enable the rest element fixer. -A value indicating whether getters should be checked. Defaults to `false`. +The fixer will automatically report/insert +[JSDoc repeatable parameters](https://jsdoc.app/tags-param.html#multiple-types-and-repeatable-parameters) +if missing. - - -### checkSetters +```js +/** + * @param {GenericArray} cfg + * @param {number} cfg."0" + */ +function baar ([a, ...extra]) { + // +} +``` -A value indicating whether setters should be checked. Defaults to `false`. +...becomes: - - -### checkDestructured +```js +/** + * @param {GenericArray} cfg + * @param {number} cfg."0" + * @param {...any} cfg."1" + */ +function baar ([a, ...extra]) { + // +} +``` -Whether to require destructured properties. Defaults to `true`. +Note that the type `any` is included since we don't know of any specific +type to use. - - -### checkDestructuredRoots +Defaults to `true`. -Whether to check the existence of a corresponding `@param` for root objects -of destructured properties (e.g., that for `function ({a, b}) {}`, that there -is something like `@param myRootObj` defined that can correspond to -the `{a, b}` object parameter). + + +### enableRootFixer -If `checkDestructuredRoots` is `false`, `checkDestructured` will also be -implied to be `false` (i.e., the inside of the roots will not be checked -either, e.g., it will also not complain if `a` or `b` do not have their own -documentation). Defaults to `true`. +Whether to enable the auto-adding of incrementing roots. - - -### useDefaultObjectProperties +The default behavior of `true` is for "root" to be auto-inserted for missing +roots, followed by a 0-based auto-incrementing number. -Set to `true` if you wish to expect documentation of properties on objects -supplied as default values. Defaults to `false`. +So for: + +```js +function quux ({foo}, {bar}, {baz}) { +} +``` + +...the default JSDoc that would be added if the fixer is enabled would be: + +```js +/** +* @param root0 +* @param root0.foo +* @param root1 +* @param root1.bar +* @param root2 +* @param root2.baz +*/ +``` + +Has no effect if `enableFixer` is set to `false`. + + +### exemptedBy +Array of tags (e.g., `['type']`) whose presence on the document block +avoids the need for a `@param`. Defaults to an array with +`inheritdoc`. If you set this array, it will overwrite the default, +so be sure to add back `inheritdoc` if you wish its presence to cause +exemption of the rule. ### ignoreWhenAllParamsMissing Set to `true` to ignore reporting when all params are missing. Defaults to `false`. - ### interfaceExemptsParamsCheck @@ -456,6 +472,39 @@ Set if you wish TypeScript interfaces to exempt checks for the existence of Will check for a type defining the function itself (on a variable declaration) or if there is a single destructured object with a type. Defaults to `false`. + + +### unnamedRootBase + +An array of root names to use in the fixer when roots are missing. Defaults +to `['root']`. Note that only when all items in the array besides the last +are exhausted will auto-incrementing occur. So, with +`unnamedRootBase: ['arg', 'config']`, the following: + +```js +function quux ({foo}, [bar], {baz}) { +} +``` + +...will get the following JSDoc block added: + +```js +/** +* @param arg +* @param arg.foo +* @param config0 +* @param config0."0" (`bar`) +* @param config1 +* @param config1.baz +*/ +``` + + +### useDefaultObjectProperties + +Set to `true` if you wish to expect documentation of properties on objects +supplied as default values. Defaults to `false`. + diff --git a/docs/rules/require-returns-check.md b/docs/rules/require-returns-check.md index fab817d67..12db7f485 100644 --- a/docs/rules/require-returns-check.md +++ b/docs/rules/require-returns-check.md @@ -3,6 +3,9 @@ # require-returns-check * [Options](#user-content-require-returns-check-options) + * [`exemptAsync`](#user-content-require-returns-check-options-exemptasync) + * [`exemptGenerators`](#user-content-require-returns-check-options-exemptgenerators) + * [`reportMissingReturnForUndefinedTypes`](#user-content-require-returns-check-options-reportmissingreturnforundefinedtypes) * [Context and settings](#user-content-require-returns-check-context-and-settings) * [Failing examples](#user-content-require-returns-check-failing-examples) * [Passing examples](#user-content-require-returns-check-passing-examples) @@ -23,27 +26,42 @@ Will also report if multiple `@returns` tags are present. ## Options -- `exemptGenerators`- Because a generator might be labeled as having a - `IterableIterator` `@returns` value (along with an iterator type - corresponding to the type of any `yield` statements), projects might wish to - leverage `@returns` in generators even without a` return` statement. This - option is therefore `true` by default in `typescript` mode (in "jsdoc" mode, - one might be more likely to take advantage of `@yields`). Set it to `false` - if you wish for a missing `return` to be flagged regardless. -- `exemptAsync` - By default, functions which return a `Promise` that are not - detected as resolving with a non-`undefined` value and `async` functions - (even ones that do not explicitly return a value, as these are returning a - `Promise` implicitly) will be exempted from reporting by this rule. - If you wish to insist that only `Promise`'s which resolve to - non-`undefined` values or `async` functions with explicit `return`'s will - be exempted from reporting (i.e., that `async` functions can be reported - if they lack an explicit (non-`undefined`) `return` when a `@returns` is - present), you can set `exemptAsync` to `false` on the options object. -- `reportMissingReturnForUndefinedTypes` - If `true` and no return or - resolve value is found, this setting will even insist that reporting occur - with `void` or `undefined` (including as an indicated `Promise` type). - Unlike `require-returns`, with this option in the rule, one can - *discourage* the labeling of `undefined` types. Defaults to `false`. +A single options object has the following properties. + + + +### exemptAsync + +By default, functions which return a `Promise` that are not +detected as resolving with a non-`undefined` value and `async` functions +(even ones that do not explicitly return a value, as these are returning a +`Promise` implicitly) will be exempted from reporting by this rule. +If you wish to insist that only `Promise`'s which resolve to +non-`undefined` values or `async` functions with explicit `return`'s will +be exempted from reporting (i.e., that `async` functions can be reported +if they lack an explicit (non-`undefined`) `return` when a `@returns` is +present), you can set `exemptAsync` to `false` on the options object. + + +### exemptGenerators + +Because a generator might be labeled as having a +`IterableIterator` `@returns` value (along with an iterator type +corresponding to the type of any `yield` statements), projects might wish to +leverage `@returns` in generators even without a `return` statement. This +option is therefore `true` by default in `typescript` mode (in "jsdoc" mode, +one might be more likely to take advantage of `@yields`). Set it to `false` +if you wish for a missing `return` to be flagged regardless. + + +### reportMissingReturnForUndefinedTypes + +If `true` and no return or +resolve value is found, this setting will even insist that reporting occur +with `void` or `undefined` (including as an indicated `Promise` type). +Unlike `require-returns`, with this option in the rule, one can +*discourage* the labeling of `undefined` types. Defaults to `false`. + diff --git a/docs/rules/require-returns-description.md b/docs/rules/require-returns-description.md index b42c5247a..b947e1c61 100644 --- a/docs/rules/require-returns-description.md +++ b/docs/rules/require-returns-description.md @@ -17,20 +17,27 @@ or if it is `Promise` or `Promise`. ## Options +A single options object has the following properties. + ### contexts Set this to an array of strings representing the AST context (or an object with -`context` and `comment` properties) where you wish the rule to be applied. -Overrides the default contexts (see below). Set to `"any"` if you want -the rule to apply to any jsdoc block throughout your files (as is necessary +optional `context` and `comment` properties) where you wish the rule to be applied. + +`context` defaults to `any` and `comment` defaults to no specific comment context. + +Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`, +`FunctionExpression`). Set to `"any"` if you want +the rule to apply to any JSDoc block throughout your files (as is necessary for finding function blocks not attached to a function declaration or expression, i.e., `@callback` or `@function` (or its aliases `@func` or `@method`) (including those associated with an `@interface`). See the ["AST and Selectors"](#user-content-eslint-plugin-jsdoc-advanced-ast-and-selectors) -section of our README for more on the expected format. +section of our Advanced docs for more on the expected format. + diff --git a/docs/rules/require-returns-type.md b/docs/rules/require-returns-type.md index 8c081343a..fc7944f2b 100644 --- a/docs/rules/require-returns-type.md +++ b/docs/rules/require-returns-type.md @@ -15,20 +15,27 @@ Requires that `@returns` tag has a `type` value (in curly brackets). ## Options +A single options object has the following properties. + ### contexts Set this to an array of strings representing the AST context (or an object with -`context` and `comment` properties) where you wish the rule to be applied. -Overrides the default contexts (see below). Set to `"any"` if you want -the rule to apply to any jsdoc block throughout your files (as is necessary +optional `context` and `comment` properties) where you wish the rule to be applied. + +`context` defaults to `any` and `comment` defaults to no specific comment context. + +Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`, +`FunctionExpression`). Set to `"any"` if you want +the rule to apply to any JSDoc block throughout your files (as is necessary for finding function blocks not attached to a function declaration or expression, i.e., `@callback` or `@function` (or its aliases `@func` or `@method`) (including those associated with an `@interface`). See the ["AST and Selectors"](#user-content-eslint-plugin-jsdoc-advanced-ast-and-selectors) -section of our README for more on the expected format. +section of our Advanced docs for more on the expected format. + diff --git a/docs/rules/require-returns.md b/docs/rules/require-returns.md index 5d959529a..cf2ebb210 100644 --- a/docs/rules/require-returns.md +++ b/docs/rules/require-returns.md @@ -2,7 +2,16 @@ # require-returns +* [Fixer](#user-content-require-returns-fixer) * [Options](#user-content-require-returns-options) + * [`checkConstructors`](#user-content-require-returns-options-checkconstructors) + * [`checkGetters`](#user-content-require-returns-options-checkgetters) + * [`contexts`](#user-content-require-returns-options-contexts) + * [`enableFixer`](#user-content-require-returns-options-enablefixer) + * [`exemptedBy`](#user-content-require-returns-options-exemptedby) + * [`forceRequireReturn`](#user-content-require-returns-options-forcerequirereturn) + * [`forceReturnsWithAsync`](#user-content-require-returns-options-forcereturnswithasync) + * [`publicOnly`](#user-content-require-returns-options-publiconly) * [Context and settings](#user-content-require-returns-context-and-settings) * [Failing examples](#user-content-require-returns-failing-examples) * [Passing examples](#user-content-require-returns-passing-examples) @@ -12,47 +21,104 @@ Requires that return statements are documented. Will also report if multiple `@returns` tags are present. + + +## Fixer + +Adds a blank `@returns`. + ## Options -- `checkConstructors` - A value indicating whether `constructor`s should - be checked for `@returns` tags. Defaults to `false`. -- `checkGetters` - Boolean to determine whether getter methods should - be checked for `@returns` tags. Defaults to `true`. -- `exemptedBy` - Array of tags (e.g., `['type']`) whose presence on the - document block avoids the need for a `@returns`. Defaults to an array - with `inheritdoc`. If you set this array, it will overwrite the default, - so be sure to add back `inheritdoc` if you wish its presence to cause - exemption of the rule. -- `forceRequireReturn` - Set to `true` to always insist on - `@returns` documentation regardless of implicit or explicit `return`'s - in the function. May be desired to flag that a project is aware of an - `undefined`/`void` return. Defaults to `false`. -- `forceReturnsWithAsync` - By default `async` functions that do not explicitly - return a value pass this rule as an `async` function will always return a - `Promise`, even if the `Promise` resolves to void. You can force all - `async` functions (including ones with an explicit `Promise` but no - detected non-`undefined` `resolve` value) to require `@return` - documentation by setting `forceReturnsWithAsync` to `true` on the options - object. This may be useful for flagging that there has been consideration - of return type. Defaults to `false`. -- `contexts` - Set this to an array of strings representing the AST context - (or an object with `context` and `comment` properties) where you wish - the rule to be applied. - Overrides the default contexts (see below). Set to `"any"` if you want - the rule to apply to any jsdoc block throughout your files (as is necessary - for finding function blocks not attached to a function declaration or - expression, i.e., `@callback` or `@function` (or its aliases `@func` or - `@method`) (including those associated with an `@interface`). This - rule will only apply on non-default contexts when there is such a tag - present and the `forceRequireReturn` option is set or if the - `forceReturnsWithAsync` option is set with a present `@async` tag - (since we are not checking against the actual `return` values in these - cases). -- `enableFixer` - Whether to enable the fixer to add a blank `@returns`. - Defaults to `false`. -- `publicOnly` - See docs for `require-jsdoc`. +A single options object has the following properties. + + + +### checkConstructors + +A value indicating whether `constructor`s should +be checked for `@returns` tags. Defaults to `false`. + + +### checkGetters + +Boolean to determine whether getter methods should +be checked for `@returns` tags. Defaults to `true`. + + +### contexts + +Set this to an array of strings representing the AST context +(or objects with optional `context` and `comment` properties) where you wish +the rule to be applied. + +`context` defaults to `any` and `comment` defaults to no specific comment context. + +Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`, +`FunctionExpression`). Set to `"any"` if you want +the rule to apply to any JSDoc block throughout your files (as is necessary +for finding function blocks not attached to a function declaration or +expression, i.e., `@callback` or `@function` (or its aliases `@func` or +`@method`) (including those associated with an `@interface`). This +rule will only apply on non-default contexts when there is such a tag +present and the `forceRequireReturn` option is set or if the +`forceReturnsWithAsync` option is set with a present `@async` tag +(since we are not checking against the actual `return` values in these +cases). + + +### enableFixer + +Whether to enable the fixer to add a blank `@returns`. +Defaults to `false`. + + +### exemptedBy + +Array of tags (e.g., `['type']`) whose presence on the +document block avoids the need for a `@returns`. Defaults to an array +with `inheritdoc`. If you set this array, it will overwrite the default, +so be sure to add back `inheritdoc` if you wish its presence to cause +exemption of the rule. + + +### forceRequireReturn + +Set to `true` to always insist on +`@returns` documentation regardless of implicit or explicit `return`'s +in the function. May be desired to flag that a project is aware of an +`undefined`/`void` return. Defaults to `false`. + + +### forceReturnsWithAsync + +By default `async` functions that do not explicitly +return a value pass this rule as an `async` function will always return a +`Promise`, even if the `Promise` resolves to void. You can force all +`async` functions (including ones with an explicit `Promise` but no +detected non-`undefined` `resolve` value) to require `@return` +documentation by setting `forceReturnsWithAsync` to `true` on the options +object. This may be useful for flagging that there has been consideration +of return type. Defaults to `false`. + + +### publicOnly + +This option will insist that missing `@returns` are only reported for +function bodies / class declarations that are exported from the module. +May be a boolean or object. If set to `true`, the defaults below will be +used. If unset, `@returns` reporting will not be limited to exports. + +This object supports the following optional boolean keys (`false` unless +otherwise noted): + +- `ancestorsOnly` - Optimization to only check node ancestors to check if node is exported +- `esm` - ESM exports are checked for `@returns` JSDoc comments (Defaults to `true`) +- `cjs` - CommonJS exports are checked for `@returns` JSDoc comments (Defaults to `true`) +- `window` - Window global exports are checked for `@returns` JSDoc comments + + diff --git a/docs/rules/require-template.md b/docs/rules/require-template.md index 30826cab9..c464ca350 100644 --- a/docs/rules/require-template.md +++ b/docs/rules/require-template.md @@ -29,6 +29,17 @@ letters are templates. ## Options +A single options object has the following properties. + + + +### exemptedBy + +Array of tags (e.g., `['type']`) whose presence on the document +block avoids the need for a `@template`. Defaults to an array with +`inheritdoc`. If you set this array, it will overwrite the default, +so be sure to add back `inheritdoc` if you wish its presence to cause +exemption of the rule. ### requireSeparateTemplates @@ -44,15 +55,7 @@ templates of this format: Defaults to `false`. - - -### exemptedBy -Array of tags (e.g., `['type']`) whose presence on the document -block avoids the need for a `@template`. Defaults to an array with -`inheritdoc`. If you set this array, it will overwrite the default, -so be sure to add back `inheritdoc` if you wish its presence to cause -exemption of the rule. ||| |---|---| diff --git a/docs/rules/require-throws.md b/docs/rules/require-throws.md index 290866710..bd943868d 100644 --- a/docs/rules/require-throws.md +++ b/docs/rules/require-throws.md @@ -3,6 +3,8 @@ # require-throws * [Options](#user-content-require-throws-options) + * [`contexts`](#user-content-require-throws-options-contexts) + * [`exemptedBy`](#user-content-require-throws-options-exemptedby) * [Context and settings](#user-content-require-throws-context-and-settings) * [Failing examples](#user-content-require-throws-failing-examples) * [Passing examples](#user-content-require-throws-passing-examples) @@ -21,23 +23,34 @@ on why TypeScript doesn't offer such a feature. ## Options -- `exemptedBy` - Array of tags (e.g., `['type']`) whose presence on the - document block avoids the need for a `@throws`. Defaults to an array - with `inheritdoc`. If you set this array, it will overwrite the default, - so be sure to add back `inheritdoc` if you wish its presence to cause - exemption of the rule. -- `contexts` - Set this to an array of strings representing the AST context - (or an object with `context` and `comment` properties) where you wish - the rule to be applied. - Overrides the default contexts (see below). Set to `"any"` if you want - the rule to apply to any jsdoc block throughout your files (as is necessary - for finding function blocks not attached to a function declaration or - expression, i.e., `@callback` or `@function` (or its aliases `@func` or - `@method`) (including those associated with an `@interface`). - -```js -'jsdoc/require-throws': 'error', -``` +A single options object has the following properties. + + + +### contexts + +Set this to an array of strings representing the AST context +(or objects with optional `context` and `comment` properties) where you wish +the rule to be applied. + +`context` defaults to `any` and `comment` defaults to no specific comment context. + +Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`, +`FunctionExpression`). Set to `"any"` if you want +the rule to apply to any JSDoc block throughout your files (as is necessary +for finding function blocks not attached to a function declaration or +expression, i.e., `@callback` or `@function` (or its aliases `@func` or +`@method`) (including those associated with an `@interface`). + + +### exemptedBy + +Array of tags (e.g., `['type']`) whose presence on the +document block avoids the need for a `@throws`. Defaults to an array +with `inheritdoc`. If you set this array, it will overwrite the default, +so be sure to add back `inheritdoc` if you wish its presence to cause +exemption of the rule. + diff --git a/docs/rules/require-yields-check.md b/docs/rules/require-yields-check.md index 40ec26553..fb1d5686b 100644 --- a/docs/rules/require-yields-check.md +++ b/docs/rules/require-yields-check.md @@ -3,6 +3,9 @@ # require-yields-check * [Options](#user-content-require-yields-check-options) + * [`checkGeneratorsOnly`](#user-content-require-yields-check-options-checkgeneratorsonly) + * [`contexts`](#user-content-require-yields-check-options-contexts) + * [`next`](#user-content-require-yields-check-options-next) * [Context and settings](#user-content-require-yields-check-context-and-settings) * [Failing examples](#user-content-require-yields-check-failing-examples) * [Passing examples](#user-content-require-yields-check-passing-examples) @@ -27,22 +30,45 @@ Will also report if multiple `@yields` tags are present. ## Options -- `checkGeneratorsOnly` - Avoids checking the function body and merely insists - that all generators have `@yields`. This can be an optimization with the - ESLint `require-yield` rule, as that rule already ensures a `yield` is - present in generators, albeit assuming the generator is not empty). - Defaults to `false`. -- `next` - If `true`, this option will insist that any use of a (non-standard) - `@next` tag (in addition to any `@yields` tag) will be matched by a `yield` - which uses a return value in the body of the generator (e.g., - `const rv = yield;` or `const rv = yield value;`). This (non-standard) - tag is intended to be used to indicate a type and/or description of - the value expected to be supplied by the user when supplied to the iterator - by its `next` method, as with `it.next(value)` (with the iterator being - the `Generator` iterator that is returned by the call to the generator - function). This option will report an error if the generator function body - merely has plain `yield;` or `yield value;` statements without returning - the values. Defaults to `false`. +A single options object has the following properties. + + + +### checkGeneratorsOnly + +Avoids checking the function body and merely insists +that all generators have `@yields`. This can be an optimization with the +ESLint `require-yield` rule, as that rule already ensures a `yield` is +present in generators, albeit assuming the generator is not empty). +Defaults to `false`. + + +### contexts + +Set this to an array of strings representing the AST context +(or objects with optional `context` and `comment` properties) where you wish +the rule to be applied. + +`context` defaults to `any` and `comment` defaults to no specific comment context. + +Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`, +`FunctionExpression`). + + +### next + +If `true`, this option will insist that any use of a (non-standard) +`@next` tag (in addition to any `@yields` tag) will be matched by a `yield` +which uses a return value in the body of the generator (e.g., +`const rv = yield;` or `const rv = yield value;`). This (non-standard) +tag is intended to be used to indicate a type and/or description of +the value expected to be supplied by the user when supplied to the iterator +by its `next` method, as with `it.next(value)` (with the iterator being +the `Generator` iterator that is returned by the call to the generator +function). This option will report an error if the generator function body +merely has plain `yield;` or `yield value;` statements without returning +the values. Defaults to `false`. + @@ -54,7 +80,7 @@ Will also report if multiple `@yields` tags are present. |Tags|`yields`| |Aliases|`yield`| |Recommended|true| -|Options|`checkGeneratorsOnly`, `contexts`, `exemptedBy`, `next`| +|Options|`checkGeneratorsOnly`, `contexts`, `next`| diff --git a/docs/rules/require-yields.md b/docs/rules/require-yields.md index e98c2a307..fb78e9657 100644 --- a/docs/rules/require-yields.md +++ b/docs/rules/require-yields.md @@ -3,6 +3,13 @@ # require-yields * [Options](#user-content-require-yields-options) + * [`contexts`](#user-content-require-yields-options-contexts) + * [`exemptedBy`](#user-content-require-yields-options-exemptedby) + * [`forceRequireNext`](#user-content-require-yields-options-forcerequirenext) + * [`forceRequireYields`](#user-content-require-yields-options-forcerequireyields) + * [`next`](#user-content-require-yields-options-next) + * [`nextWithGeneratorTag`](#user-content-require-yields-options-nextwithgeneratortag) + * [`withGeneratorTag`](#user-content-require-yields-options-withgeneratortag) * [Context and settings](#user-content-require-yields-context-and-settings) * [Failing examples](#user-content-require-yields-failing-examples) * [Passing examples](#user-content-require-yields-passing-examples) @@ -19,51 +26,86 @@ option to expect a non-standard `@next` tag. ## Options -- `exemptedBy` - Array of tags (e.g., `['type']`) whose presence on the - document block avoids the need for a `@yields`. Defaults to an array - with `inheritdoc`. If you set this array, it will overwrite the default, - so be sure to add back `inheritdoc` if you wish its presence to cause - exemption of the rule. -- `forceRequireYields` - Set to `true` to always insist on - `@yields` documentation for generators even if there are only - expressionless `yield` statements in the function. May be desired to flag - that a project is aware of an `undefined`/`void` yield. Defaults to - `false`. -- `contexts` - Set this to an array of strings representing the AST context - (or an object with `context` and `comment` properties) where you wish - the rule to be applied. - Overrides the default contexts (see below). Set to `"any"` if you want - the rule to apply to any jsdoc block throughout your files (as is necessary - for finding function blocks not attached to a function declaration or - expression, i.e., `@callback` or `@function` (or its aliases `@func` or - `@method`) (including those associated with an `@interface`). This - rule will only apply on non-default contexts when there is such a tag - present and the `forceRequireYields` option is set or if the - `withGeneratorTag` option is set with a present `@generator` tag - (since we are not checking against the actual `yield` values in these - cases). -- `withGeneratorTag` - If a `@generator` tag is present on a block, require - `@yields`/`@yield`. Defaults to `true`. See `contexts` to `any` if you want - to catch `@generator` with `@callback` or such not attached to a function. -- `next` - If `true`, this option will insist that any use of a `yield` return - value (e.g., `const rv = yield;` or `const rv = yield value;`) has a - (non-standard) `@next` tag (in addition to any `@yields` tag) so as to be - able to document the type expected to be supplied into the iterator - (the `Generator` iterator that is returned by the call to the generator - function) to the iterator (e.g., `it.next(value)`). The tag will not be - expected if the generator function body merely has plain `yield;` or - `yield value;` statements without returning the values. Defaults to - `false`. -- `forceRequireNext` - Set to `true` to always insist on - `@next` documentation even if there are no `yield` statements in the - function or none return values. May be desired to flag that a project is - aware of the expected yield return being `undefined`. Defaults to `false`. -- `nextWithGeneratorTag` - If a `@generator` tag is present on a block, require - (non-standard ) `@next` (see `next` option). This will require using `void` - or `undefined` in cases where generators do not use the `next()`-supplied - incoming `yield`-returned value. Defaults to `false`. See `contexts` to - `any` if you want to catch `@generator` with `@callback` or such not - attached to a function. +A single options object has the following properties. + + + +### contexts + +Set this to an array of strings representing the AST context +(or objects with optional `context` and `comment` properties) where you wish +the rule to be applied. + +`context` defaults to `any` and `comment` defaults to no specific comment context. + +Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`, +`FunctionExpression`). Set to `"any"` if you want +the rule to apply to any JSDoc block throughout your files (as is necessary +for finding function blocks not attached to a function declaration or +expression, i.e., `@callback` or `@function` (or its aliases `@func` or +`@method`) (including those associated with an `@interface`). This +rule will only apply on non-default contexts when there is such a tag +present and the `forceRequireYields` option is set or if the +`withGeneratorTag` option is set with a present `@generator` tag +(since we are not checking against the actual `yield` values in these +cases). + + +### exemptedBy + +Array of tags (e.g., `['type']`) whose presence on the +document block avoids the need for a `@yields`. Defaults to an array +with `inheritdoc`. If you set this array, it will overwrite the default, +so be sure to add back `inheritdoc` if you wish its presence to cause +exemption of the rule. + + +### forceRequireNext + +Set to `true` to always insist on +`@next` documentation even if there are no `yield` statements in the +function or none return values. May be desired to flag that a project is +aware of the expected yield return being `undefined`. Defaults to `false`. + + +### forceRequireYields + +Set to `true` to always insist on +`@yields` documentation for generators even if there are only +expressionless `yield` statements in the function. May be desired to flag +that a project is aware of an `undefined`/`void` yield. Defaults to +`false`. + + +### next + +If `true`, this option will insist that any use of a `yield` return +value (e.g., `const rv = yield;` or `const rv = yield value;`) has a +(non-standard) `@next` tag (in addition to any `@yields` tag) so as to be +able to document the type expected to be supplied into the iterator +(the `Generator` iterator that is returned by the call to the generator +function) to the iterator (e.g., `it.next(value)`). The tag will not be +expected if the generator function body merely has plain `yield;` or +`yield value;` statements without returning the values. Defaults to +`false`. + + +### nextWithGeneratorTag + +If a `@generator` tag is present on a block, require +(non-standard ) `@next` (see `next` option). This will require using `void` +or `undefined` in cases where generators do not use the `next()`-supplied +incoming `yield`-returned value. Defaults to `false`. See `contexts` to +`any` if you want to catch `@generator` with `@callback` or such not +attached to a function. + + +### withGeneratorTag + +If a `@generator` tag is present on a block, require +`@yields`/`@yield`. Defaults to `true`. See `contexts` to `any` if you want +to catch `@generator` with `@callback` or such not attached to a function. + diff --git a/docs/rules/sort-tags.md b/docs/rules/sort-tags.md index d3d57486c..b052be917 100644 --- a/docs/rules/sort-tags.md +++ b/docs/rules/sort-tags.md @@ -4,11 +4,11 @@ * [Fixer](#user-content-sort-tags-fixer) * [Options](#user-content-sort-tags-options) - * [`tagSequence`](#user-content-sort-tags-options-tagsequence) * [`alphabetizeExtras`](#user-content-sort-tags-options-alphabetizeextras) * [`linesBetween`](#user-content-sort-tags-options-linesbetween) - * [`reportTagGroupSpacing`](#user-content-sort-tags-options-reporttaggroupspacing) * [`reportIntraTagGroupSpacing`](#user-content-sort-tags-options-reportintrataggroupspacing) + * [`reportTagGroupSpacing`](#user-content-sort-tags-options-reporttaggroupspacing) + * [`tagSequence`](#user-content-sort-tags-options-tagsequence) * [Context and settings](#user-content-sort-tags-context-and-settings) * [Failing examples](#user-content-sort-tags-failing-examples) * [Passing examples](#user-content-sort-tags-passing-examples) @@ -35,12 +35,47 @@ You may, however, safely set the "any" option in that rule along with ## Fixer -(TODO) +Sorts tags by a specified sequence according to tag name, optionally +adding line breaks between tag groups. ## Options +A single options object has the following properties. + + + +### alphabetizeExtras + +Defaults to `false`. Alphabetizes any items not within `tagSequence` after any +items within `tagSequence` (or in place of the special `-other` pseudo-tag) +are sorted. + +If you want all your tags alphabetized, you can supply an empty array for +`tagSequence` along with setting this option to `true`. + + +### linesBetween + +Indicates the number of lines to be added between tag groups. Defaults to 1. +Do not set to 0 or 2+ if you are using `tag-lines` and `"always"` and do not +set to 1+ if you are using `tag-lines` and `"never"`. + + +### reportIntraTagGroupSpacing + +Whether to enable reporting and fixing of line breaks within tags of a given +tag group. Defaults to `true` which will remove any line breaks at the end of +such tags. Do not use with `true` if you are using `tag-lines` and `always`. + + +### reportTagGroupSpacing + +Whether to enable reporting and fixing of line breaks between tag groups +as set by `linesBetween`. Defaults to `true`. Note that the very last tag +will not have spacing applied regardless. For adding line breaks there, you +may wish to use the `endLines` option of the `tag-lines` rule. ### tagSequence @@ -227,41 +262,14 @@ a fixed order that doesn't change into the future, supply your own ]}]; ``` - - -### alphabetizeExtras - -Defaults to `false`. Alphabetizes any items not within `tagSequence` after any -items within `tagSequence` (or in place of the special `-other` pseudo-tag) -are sorted. +A single options object has the following properties. -If you want all your tags alphabetized, you can supply an empty array for -`tagSequence` along with setting this option to `true`. + + +##### tags - - -### linesBetween +See description on `tagSequence`. -Indicates the number of lines to be added between tag groups. Defaults to 1. -Do not set to 0 or 2+ if you are using `tag-lines` and `"always"` and do not -set to 1+ if you are using `tag-lines` and `"never"`. - - - -### reportTagGroupSpacing - -Whether to enable reporting and fixing of line breaks between tag groups -as set by `linesBetween`. Defaults to `true`. Note that the very last tag -will not have spacing applied regardless. For adding line breaks there, you -may wish to use the `endLines` option of the `tag-lines` rule. - - - -### reportIntraTagGroupSpacing - -Whether to enable reporting and fixing of line breaks within tags of a given -tag group. Defaults to `true` which will remove any line breaks at the end of -such tags. Do not use with `true` if you are using `tag-lines` and `always`. diff --git a/docs/rules/tag-lines.md b/docs/rules/tag-lines.md index e201eeb7c..a62c29b40 100644 --- a/docs/rules/tag-lines.md +++ b/docs/rules/tag-lines.md @@ -4,11 +4,11 @@ * [Fixer](#user-content-tag-lines-fixer) * [Options](#user-content-tag-lines-options) - * [`count` (defaults to 1)](#user-content-tag-lines-options-count-defaults-to-1) - * [`applyToEndTag` (defaults to `true`)](#user-content-tag-lines-options-applytoendtag-defaults-to-true) - * [`startLines` (defaults to `0`)](#user-content-tag-lines-options-startlines-defaults-to-0) - * [`endLines` (defaults to `0`)](#user-content-tag-lines-options-endlines-defaults-to-0) - * [`tags` (default to empty object)](#user-content-tag-lines-options-tags-default-to-empty-object) + * [`applyToEndTag`](#user-content-tag-lines-options-applytoendtag) + * [`count`](#user-content-tag-lines-options-count) + * [`endLines`](#user-content-tag-lines-options-endlines) + * [`startLines`](#user-content-tag-lines-options-startlines) + * [`tags`](#user-content-tag-lines-options-tags) * [Context and settings](#user-content-tag-lines-context-and-settings) * [Failing examples](#user-content-tag-lines-failing-examples) * [Passing examples](#user-content-tag-lines-passing-examples) @@ -27,54 +27,56 @@ may try to impose a conflicting number of lines. ## Fixer -(TODO) +Removes or adds lines between tags or trailing tags. ## Options -The first option is a single string set to "always", "never", or "any" -(defaults to "never"). - -"any" is only useful with `tags` (allowing non-enforcement of lines except +The first option is a string with the following possible values: "always", "any", "never". +Defaults to "never". "any" is only useful with `tags` (allowing non-enforcement of lines except for particular tags) or with `startLines` or `endLines`. It is also necessary if using the linebreak-setting options of the `sort-tags` rule so that the two rules won't conflict in both attempting to set lines between tags. -The second option is an object with the following optional properties. - - - -### count (defaults to 1) - -Use with "always" to indicate the number of lines to require be present. +The next option is an object with the following properties. - - -### applyToEndTag (defaults to true) + + +### applyToEndTag Set to `false` and use with "always" to indicate the normal lines to be added after tags should not be added after the final tag. - - -### startLines (defaults to 0) +Defaults to `true`. + + +### count -If not set to `null`, will enforce end lines to the given count before the -first tag only, unless there is only whitespace content, in which case, -a line count will not be enforced. +Use with "always" to indicate the number of lines to require be present. - - -### endLines (defaults to 0) +Defaults to 1. + + +### endLines If not set to `null`, will enforce end lines to the given count on the final tag only. - - -### tags (default to empty object) +Defaults to `0`. + + +### startLines + +If not set to `null`, will enforce end lines to the given count before the +first tag only, unless there is only whitespace content, in which case, +a line count will not be enforced. + +Defaults to `0`. + + +### tags Overrides the default behavior depending on specific tags. @@ -84,6 +86,9 @@ following keys: 1. `lines` - Set to `always`, `never`, or `any` to override. 2. `count` - Overrides main `count` (for "always") +Defaults to empty object. + + ## Context and settings diff --git a/docs/rules/text-escaping.md b/docs/rules/text-escaping.md index f8cf01fc3..9dae10f1b 100644 --- a/docs/rules/text-escaping.md +++ b/docs/rules/text-escaping.md @@ -25,12 +25,15 @@ within it or your documentation. ## Fixer -(TODO) +Auto-escapes certain HTML or Markdown characters that are input within block and +tag descriptions. ## Options +A single options object has the following properties. + ### escapeHTML @@ -38,7 +41,6 @@ within it or your documentation. This option escapes all `<` and `&` characters (except those followed by whitespace which are treated as literals by Visual Studio Code). Defaults to `false`. - ### escapeMarkdown @@ -46,6 +48,7 @@ whitespace which are treated as literals by Visual Studio Code). Defaults to This option escapes the first backtick (`` ` ``) in a paired sequence. Defaults to `false`. + ## Context and settings diff --git a/docs/rules/type-formatting.md b/docs/rules/type-formatting.md index e49fb0380..348484b71 100644 --- a/docs/rules/type-formatting.md +++ b/docs/rules/type-formatting.md @@ -14,24 +14,29 @@ Currently offers the following options for formatting types. ## Options +A single options object has the following properties. + ### arrayBrackets Determines how array generics are represented. Set to `angle` for the style `Array` or `square` for the style `type[]`. Defaults to "square". - ### enableFixer Whether to enable the fixer. Defaults to `true`. - ### genericDot Boolean value of whether to use a dot before the angled brackets of a generic (e.g., `SomeType.`). Defaults to `false`. + + +### objectFieldIndent +A string indicating the whitespace to be added on each line preceding an +object property-value field. Defaults to the empty string. ### objectFieldQuote @@ -40,22 +45,6 @@ Whether and how object field properties should be quoted (e.g., `{"a": string}`) Set to `single`, `double`, or `null`. Defaults to `null` (no quotes unless required due to special characters within the field). Digits will be kept as is, regardless of setting (they can either represent a digit or a string digit). - - - -### propertyQuotes - -Whether and how namepath properties should be quoted (e.g., `ab."cd"."ef"`). -Set to `single`, `double`, or `null`. Defaults to `null` (no quotes unless -required due to whitespace within the property). - - - -### stringQuotes - -How string literals should be quoted (e.g., `"abc"`). Set to `single` -or `double`. Defaults to 'single'. - ### objectFieldSeparator @@ -65,7 +54,6 @@ For object properties, specify whether a "semicolon", "comma", "linebreak", each object property-value pair. Defaults to `"comma"`. - ### objectFieldSeparatorOptionalLinebreak @@ -74,14 +62,6 @@ Whether `objectFieldSeparator` set to `"semicolon-and-linebreak"` or `"comma-and-linebreak"` should be allowed to optionally drop the linebreak. Defaults to `true`. - - - -### objectFieldIndent - -A string indicating the whitespace to be added on each line preceding an -object property-value field. Defaults to the empty string. - ### objectFieldSeparatorTrailingPunctuation @@ -91,14 +71,18 @@ or there are multiple property-value object fields present), this property will determine whether to add punctuation corresponding to the `objectFieldSeparator` (e.g., a semicolon) to the final object field. Defaults to `false`. - ### separatorForSingleObjectField Whether to apply the `objectFieldSeparator` (e.g., a semicolon) when there is only one property-value object field present. Defaults to `false`. + + +### stringQuotes +How string literals should be quoted (e.g., `"abc"`). Set to `single` +or `double`. Defaults to 'single'. ### typeBracketSpacing @@ -106,13 +90,13 @@ is only one property-value object field present. Defaults to `false`. A string of spaces that will be added immediately after the type's initial curly bracket and immediately before its ending curly bracket. Defaults to the empty string. - ### unionSpacing Determines the spacing to add to unions (`|`). Defaults to a single space (`" "`). + ||| |---|---| |Context|everywhere| diff --git a/docs/rules/valid-types.md b/docs/rules/valid-types.md index f1aead8fd..4d03d2d75 100644 --- a/docs/rules/valid-types.md +++ b/docs/rules/valid-types.md @@ -3,6 +3,7 @@ # valid-types * [Options](#user-content-valid-types-options) + * [`allowEmptyNamepaths`](#user-content-valid-types-options-allowemptynamepaths) * [Context and settings](#user-content-valid-types-context-and-settings) * [Failing examples](#user-content-valid-types-failing-examples) * [Passing examples](#user-content-valid-types-passing-examples) @@ -57,7 +58,7 @@ text after the tag name) checked: TypeScript) 1. Name(path)-pointing tags requiring namepath: `@alias`, `@augments`, `@extends` (JSDoc only), `@lends`, `@memberof`, `@memberof!`, `@mixes`, `@requires`, `@this` - (jsdoc only) + (JSDoc only) 1. Name(path)-pointing tags (which may have value without namepath or their namepath can be expressed elsewhere on the block): `@listens`, `@fires`, `@emits`. @@ -92,13 +93,20 @@ value). See the setting for more details. ## Options -- `allowEmptyNamepaths` (default: true) - Set to `false` to bulk disallow - empty name paths with namepath groups 2 and 4 (these might often be - expected to have an accompanying name path, though they have some - indicative value without one; these may also allow names to be defined - in another manner elsewhere in the block); you can use - `settings.jsdoc.structuredTags` with the `required` key set to "name" if you - wish to require name paths on a tag-by-tag basis. +A single options object has the following properties. + + + +### allowEmptyNamepaths + +Set to `false` to bulk disallow +empty name paths with namepath groups 2 and 4 (these might often be +expected to have an accompanying name path, though they have some +indicative value without one; these may also allow names to be defined +in another manner elsewhere in the block); you can use +`settings.jsdoc.structuredTags` with the `required` key set to "name" if you +wish to require name paths on a tag-by-tag basis. Defaults to `true`. + diff --git a/docs/settings.md b/docs/settings.md index 798a7fac4..d22a8a06b 100644 --- a/docs/settings.md +++ b/docs/settings.md @@ -31,11 +31,11 @@ ### maxLines and minLines One can use `minLines` and `maxLines` to indicate how many line breaks -(if any) will be checked to find a jsdoc comment block before the given +(if any) will be checked to find a JSDoc comment block before the given code block. These settings default to `0` and `1` respectively. In conjunction with the `require-jsdoc` rule, these settings can -be enforced so as to report problems if a jsdoc block is not found within +be enforced so as to report problems if a JSDoc block is not found within the specified boundaries. The settings are also used in the fixer to determine how many line breaks to add when a block is missing. @@ -290,8 +290,23 @@ The format of the configuration is as follows: - `false` (for forbidding the type) - an optional key `skipRootChecking` (for `check-types`) to allow for this type in the context of a root (i.e., a parent object of some child type) - - an optional key `unifyParentAndChildTypeChecks` to override the - `jsdoc/check-types` option of the same name. + - an optional key `unifyParentAndChildTypeChecks` will treat + `settings.jsdoc.preferredTypes` keys such as `SomeType` as matching + not only child types such as an unadorned `SomeType` but also + `SomeType` and `SomeType.` (and if the type is + instead `Array` (or `[]`), it will match `aChildType[]`). If this + setting is `false` or unset, the former format will only apply to + types which are not parent types/unions whereas the latter formats + will only apply for parent types/unions. The special types + `[]`, `.<>` (or `.`), and `<>` act only as parent types (and will + not match a bare child type such as `Array` even when unified, though, + as mentioned, `Array` will match say `string[]` or `Array.` + when unified). The special type `*` is only a child type. Note that + there is no detection of parent and child type together, e.g., you + cannot specify preferences for `string[]` specifically as distinct + from say `number[]`, but you can target both with `[]` or the child + types `number` or `string`. Note: the (deprecated) `jsdoc/check-types` + option of the same name, if set to `true`, will override this behavior. Note that the preferred types indicated as targets in `settings.jsdoc.preferredTypes` map will be assumed to be defined by @@ -305,7 +320,12 @@ only (e.g., to match `Array` if the type is `Array` vs. `Array.`). Note that if a value is present both as a key and as a value, neither the key nor the value will be reported. Thus in `check-types`, this fact can be used to allow both `object` and `Object` if one has a `preferredTypes` -key `object: 'Object'` and `Object: 'object'`. +key `object: 'Object'` and `Object: 'object'`. (In the default "typescript" +mode, this object behavior is a default one.) + +Note that if there is an error [parsing](https://github.com/jsdoc-type-pratt-parser/jsdoc-type-pratt-parser) +types for a tag with `check-types`, the function will silently ignore +that tag, leaving it to the `valid-types` rule to report parsing errors. @@ -336,7 +356,7 @@ values are objects with the following optional properties: - `true` - Allows valid types within brackets. This is the default. - `false` - Explicitly disallows any brackets or bracketed type. You might use this with `@throws` to suggest that only free form text - is being input or with `@augments` (for jsdoc mode) to disallow + is being input or with `@augments` (for "jsdoc" mode) to disallow Closure-style bracketed usage along with a required namepath. - (An array of strings) - A list of permissible types. - `required` - Array of one of the following (defaults to an empty array, diff --git a/src/bin/generateDocs.js b/src/bin/generateDocs.js index e2b802409..485ade30e 100644 --- a/src/bin/generateDocs.js +++ b/src/bin/generateDocs.js @@ -1,3 +1,4 @@ +import plugin from '../index.js'; import decamelize from 'decamelize'; import fs from 'fs'; import Gitdown from 'gitdown'; @@ -11,6 +12,13 @@ import path from 'path'; const dirname = import.meta.dirname; +/** + * @param {string} str + */ +const escapeDescription = (str) => { + return str.replaceAll(/(?$&'); +}; + /** * @param {string} code * @returns {string} @@ -140,16 +148,25 @@ const generateDocs = async () => { assertions, } = await getAssertions(); + /** @type {import('json-schema').JSONSchema4[][]} */ + const schemas = []; + const docContents = await Promise.all([ ...assertionNames.map((assertionName) => { + const decamelized = decamelize(assertionName, { + separator: '-', + }); + schemas.push( + /** @type {import('json-schema').JSONSchema4[]} */ + (plugin.rules?.[decamelized].meta?.schema), + ); + return path.join( - dirname, '..', '..', '.README', 'rules', decamelize(assertionName, { - separator: '-', - }) + '.md', + dirname, '..', '..', '.README', 'rules', decamelized + '.md', ); }), ...otherPaths, - ].map(async (docPath) => { + ].map(async (docPath, idx) => { const gitdown = await Gitdown.readFile(docPath); gitdown.setConfig({ @@ -159,6 +176,106 @@ const generateDocs = async () => { }, }); + gitdown.registerHelper('options', { + compile () { + if (!schemas[idx]) { + return ''; + } + + /** + * @param {import('json-schema').JSONSchema4} schema + * @param {number} jIdx + * @param {import('json-schema').JSONSchema4[]} arr + * @param {number} [nesting] + */ + const convertFromSchema = (schema, jIdx, arr, nesting = 3) => { + let ret = ''; + switch (schema.type) { + case 'array': + ret += convertFromSchema( + /** @type {import('json-schema').JSONSchema4} */ (schema.items), + 0, + [], + nesting + 1, + ); + break; + case 'object': + if (!schema.properties) { + break; + } + + if (jIdx === 0) { + ret += (arr.length <= 1 ? 'A single' : 'An') + + ' options object has the following properties.\n\n'; + } else { + ret += '\n\nThe next option is an object with the following properties.\n\n'; + } + + if (schema.description) { + ret += `${escapeDescription(schema.description)}\n`; + } + + for (const [ + property, + innerSchema, + ] of Object.entries(schema.properties)) { + const { + description, + type, + } = innerSchema; + if (!description) { + throw new Error( + 'Missing description for property ' + property + ' for rule ' + assertionNames[idx] + ' with schema ' + JSON.stringify(innerSchema), + ); + } + + ret += '#'.repeat(nesting) + ` \`${property}\` + +${type === 'object' && innerSchema.properties ? '' : escapeDescription(description)} +`; + if (type === 'object' || type === 'array') { + ret += convertFromSchema(innerSchema, 0, [], nesting + 1); + } + } + + break; + case 'string': + if (jIdx !== 0) { + throw new Error('Unexpected string schema'); + } + + // If a simple string, should be documented by parent + if (schema.enum) { + ret += 'The first option is a string with the following possible values: '; + ret += schema.enum?.map((val) => { + return `"${val}"`; + }).join(', ') + '.\n'; + } + + if (schema.description) { + ret += escapeDescription(schema.description); + } + + break; + default: + // Describe on parent object + if (schema.anyOf) { + break; + } + + throw new Error('Unrecognized type ' + schema.type + ' for schema: ' + + JSON.stringify(schema)); + } + + return ret; + }; + + return schemas[idx].map((schema, jIdx, arr) => { + return convertFromSchema(schema, jIdx, arr); + }).join(''); + }, + }); + return gitdown.get(); })); diff --git a/src/bin/generateRule.js b/src/bin/generateRule.js index 89a63b868..1dd1d1ef6 100644 --- a/src/bin/generateRule.js +++ b/src/bin/generateRule.js @@ -41,7 +41,8 @@ const recommended = options.includes('--recommended'); const ruleNamesPath = './test/rules/ruleNames.json'; const ruleNames = JSON.parse(await fs.readFile( - ruleNamesPath, + // eslint-disable-next-line unicorn/prefer-json-parse-buffer -- TypeScript + ruleNamesPath, 'utf8', )); if (!ruleNames.includes(ruleName)) { ruleNames.push(ruleName); diff --git a/src/bin/generateRuleTypes.js b/src/bin/generateRuleTypes.js index f34eaae61..6480fb149 100644 --- a/src/bin/generateRuleTypes.js +++ b/src/bin/generateRuleTypes.js @@ -11,11 +11,16 @@ let str = 'export interface Rules {\n'; for (const [ ruleName, rule, -] of Object.entries(index.rules)) { - str += ` /** ${rule.meta.docs.description} */\n`; +] of Object.entries( + /** @type {Record>} */ ( + index.rules + ), + ) +) { + str += ` /** ${rule.meta?.docs?.description ?? ''} */\n`; str += ` "jsdoc/${ruleName}": `; const ts = await compile({ - items: rule.meta.schema ?? [], + items: rule?.meta?.schema || [], type: 'array', }, 'Test', { bannerComment: '', @@ -32,5 +37,4 @@ str = str.replace(/\n$/v, '') + '}\n'; await writeFile(import.meta.dirname + '/../rules.d.ts', str); -// eslint-disable-next-line no-console -- Todo -console.log('str', str); +// console.log('str', str); diff --git a/src/rules.d.ts b/src/rules.d.ts index 53f21ec79..0b361c9a5 100644 --- a/src/rules.d.ts +++ b/src/rules.d.ts @@ -7,6 +7,10 @@ export interface Rules { | [] | [ { + /** + * Set to 0 if you wish to avoid the normal requirement for an inner indentation of + * one space. Defaults to 1 (one space of normal inner indentation). + */ innerIndent?: number; } ]; @@ -43,6 +47,27 @@ export interface Rules { | [] | [ { + /** + * Array of tags (e.g., `['example', 'description']`) whose content will be + * "hidden" from the `check-indentation` rule. Defaults to `['example']`. + * + * By default, the whole JSDoc block will be checked for invalid padding. + * That would include `@example` blocks too, which can get in the way + * of adding full, readable examples of code without ending up with multiple + * linting issues. + * + * When disabled (by passing `excludeTags: []` option), the following code *will* + * report a padding issue: + * + * ```js + * /** + * * @example + * * anArray.filter((a) => { + * * return a.b; + * * }); + * * / + * ``` + */ excludeTags?: string[]; } ]; @@ -54,16 +79,51 @@ export interface Rules { | [ "always" | "never" | "any", { + /** + * An object with any of the following spacing keys set to an integer. + * If a spacing is not defined, it defaults to one. + * + */ customSpacings?: { + /** + * Affects spacing after the asterisk (e.g., `* @param`) + */ postDelimiter?: number; + /** + * Affects spacing after any hyphens in the description (e.g., `* @param {someType} name - A description`) + */ postHyphen?: number; + /** + * Affects spacing after the name (e.g., `* @param {someType} name `) + */ postName?: number; + /** + * Affects spacing after the tag (e.g., `* @param `) + */ postTag?: number; + /** + * Affects spacing after the type (e.g., `* @param {someType} `) + */ postType?: number; }; + /** + * Disables `wrapIndent`; existing wrap indentation is preserved without changes. + */ disableWrapIndent?: boolean; + /** + * A boolean to determine whether to preserve the post-delimiter spacing of the + * main description. If `false` or unset, will be set to a single space. + */ preserveMainDescriptionPostDelimiter?: boolean; + /** + * Use this to change the tags which are sought for alignment changes. Defaults to an array of + * `['param', 'arg', 'argument', 'property', 'prop', 'returns', 'return', 'template']`. + */ tags?: string[]; + /** + * The indent that will be applied for tag text after the first line. + * Default to the empty string (no indent). + */ wrapIndent?: string; } ]; @@ -73,13 +133,90 @@ export interface Rules { | [] | [ { + /** + * If set to `true`, this option will allow extra `@param` definitions (e.g., + * representing future expected or virtual params) to be present without needing + * their presence within the function signature. Other inconsistencies between + * `@param`'s and present function parameters will still be reported. + */ allowExtraTrailingParamDocs?: boolean; + /** + * Whether to check destructured properties. Defaults to `true`. + */ checkDestructured?: boolean; + /** + * If set to `true`, will require that rest properties are documented and + * that any extraneous properties (which may have been within the rest property) + * are documented. Defaults to `false`. + */ checkRestProperty?: boolean; + /** + * Defines a regular expression pattern to indicate which types should be + * checked for destructured content (and that those not matched should not + * be checked). + * + * When one specifies a type, unless it is of a generic type, like `object` + * or `array`, it may be considered unnecessary to have that object's + * destructured components required, especially where generated docs will + * link back to the specified type. For example: + * + * ```js + * /** + * * @param {SVGRect} bbox - a SVGRect + * * / + * export const bboxToObj = function ({x, y, width, height}) { + * return {x, y, width, height}; + * }; + * ``` + * + * By default `checkTypesPattern` is set to + * `/^(?:[oO]bject|[aA]rray|PlainObject|Generic(?:Object|Array))$/v`, + * meaning that destructuring will be required only if the type of the `@param` + * (the text between curly brackets) is a match for "Object" or "Array" (with or + * without initial caps), "PlainObject", or "GenericObject", "GenericArray" (or + * if no type is present). So in the above example, the lack of a match will + * mean that no complaint will be given about the undocumented destructured + * parameters. + * + * Note that the `/` delimiters are optional, but necessary to add flags. + * + * Defaults to using (only) the `v` flag, so to add your own flags, encapsulate + * your expression as a string, but like a literal, e.g., `/^object$/vi`. + * + * You could set this regular expression to a more expansive list, or you + * could restrict it such that even types matching those strings would not + * need destructuring. + */ checkTypesPattern?: string; + /** + * Whether to check for extra destructured properties. Defaults to `false`. Change + * to `true` if you want to be able to document properties which are not actually + * destructured. Keep as `false` if you expect properties to be documented in + * their own types. Note that extra properties will always be reported if another + * item at the same level is destructured as destructuring will prevent other + * access and this option is only intended to permit documenting extra properties + * that are available and actually used in the function. + */ disableExtraPropertyReporting?: boolean; + /** + * Whether to avoid checks for missing `@param` definitions. Defaults to `false`. Change to `true` if you want to be able to omit properties. + */ disableMissingParamChecks?: boolean; + /** + * Set to `true` to auto-remove `@param` duplicates (based on identical + * names). + * + * Note that this option will remove duplicates of the same name even if + * the definitions do not match in other ways (e.g., the second param will + * be removed even if it has a different type or description). + */ enableFixer?: boolean; + /** + * Set to `true` if you wish to avoid reporting of child property documentation + * where instead of destructuring, a whole plain object is supplied as default + * value but you wish its keys to be considered as signalling that the properties + * are present and can therefore be documented. Defaults to `false`. + */ useDefaultObjectProperties?: boolean; } ]; @@ -89,6 +226,14 @@ export interface Rules { | [] | [ { + /** + * Set to `true` to auto-remove `@property` duplicates (based on + * identical names). + * + * Note that this option will remove duplicates of the same name even if + * the definitions do not match in other ways (e.g., the second property will + * be removed even if it has a different type or description). + */ enableFixer?: boolean; } ]; @@ -101,9 +246,88 @@ export interface Rules { | [] | [ { + /** + * Use an array of `definedTags` strings to configure additional, allowed tags. + * The format is as follows: + * + * ```json + * { + * "definedTags": ["note", "record"] + * } + * ``` + */ definedTags?: string[]; + /** + * Set to `false` to disable auto-removal of types that are redundant with the [`typed` option](#typed). + */ enableFixer?: boolean; + /** + * If this is set to `true`, all of the following tags used to control JSX output are allowed: + * + * ``` + * jsx + * jsxFrag + * jsxImportSource + * jsxRuntime + * ``` + * + * For more information, see the [babel documentation](https://babeljs.io/docs/en/babel-plugin-transform-react-jsx). + */ jsxTags?: boolean; + /** + * If this is set to `true`, additionally checks for tag names that are redundant when using a type checker such as TypeScript. + * + * These tags are always unnecessary when using TypeScript or similar: + * + * ``` + * augments + * callback + * class + * enum + * implements + * private + * property + * protected + * public + * readonly + * this + * type + * typedef + * ``` + * + * These tags are unnecessary except when inside a TypeScript `declare` context: + * + * ``` + * abstract + * access + * class + * constant + * constructs + * default + * enum + * export + * exports + * function + * global + * inherits + * instance + * interface + * member + * memberof + * memberOf + * method + * mixes + * mixin + * module + * name + * namespace + * override + * property + * requires + * static + * this + * ``` + */ typed?: boolean; } ]; @@ -116,13 +340,36 @@ export interface Rules { | [] | [ { + /** + * Avoids reporting when a bad type is found on a specified tag. + */ exemptTagContexts?: { + /** + * Set a key `tag` to the tag to exempt + */ tag?: string; + /** + * Set to `true` to indicate that any types on that tag will be allowed, + * or to an array of strings which will only allow specific bad types. + * If an array of strings is given, these must match the type exactly, + * e.g., if you only allow `"object"`, it will not allow + * `"object"`. Note that this is different from the + * behavior of `settings.jsdoc.preferredTypes`. This option is useful + * for normally restricting generic types like `object` with + * `preferredTypes`, but allowing `typedef` to indicate that its base + * type is `object`. + */ types?: boolean | string[]; }[]; + /** + * Insists that only the supplied option type + * map is to be used, and that the default preferences (such as "string" + * over "String") will not be enforced. The option's default is `false`. + */ noDefaults?: boolean; /** - * @deprecated Use the `preferredTypes[preferredType]` setting of the same name instead + * @deprecated Use the `preferredTypes[preferredType]` setting of the same name instead. + * If this option is `true`, will currently override `unifyParentAndChildTypeChecks` on the `preferredTypes` setting. */ unifyParentAndChildTypeChecks?: boolean; } @@ -133,9 +380,33 @@ export interface Rules { | [] | [ { + /** + * An array of allowable author values. If absent, only non-whitespace will + * be checked for. + */ allowedAuthors?: string[]; + /** + * An array of allowable license values or `true` to allow any license text. + * If present as an array, will be used in place of [SPDX identifiers](https://spdx.org/licenses/). + */ allowedLicenses?: string[] | boolean; + /** + * A string to be converted into a `RegExp` (with `v` flag) and whose first + * parenthetical grouping, if present, will match the portion of the license + * description to check (if no grouping is present, then the whole portion + * matched will be used). Defaults to `/([^\n\r]*)/gv`, i.e., the SPDX expression + * is expected before any line breaks. + * + * Note that the `/` delimiters are optional, but necessary to add flags. + * + * Defaults to using the `v` flag, so to add your own flags, encapsulate + * your expression as a string, but like a literal, e.g., `/^mit$/vi`. + */ licensePattern?: string; + /** + * Whether to enable validation that `@variation` must be a number. Defaults to + * `false`. + */ numericOnlyVariation?: boolean; } ]; @@ -145,7 +416,23 @@ export interface Rules { | [] | [ { + /** + * An array of prefixes to allow at the beginning of a comment. + * + * Defaults to `['@ts-', 'istanbul ', 'c8 ', 'v8 ', 'eslint', 'prettier-']`. + * + * Supplying your own value overrides the defaults. + */ allowedPrefixes?: string[]; + /** + * The contexts array which will be checked for preceding content. + * + * Can either be strings or an object with a `context` string and an optional, default `false` `inlineCommentBlock` boolean. + * + * Defaults to `ArrowFunctionExpression`, `FunctionDeclaration`, + * `FunctionExpression`, `TSDeclareFunction`. + * + */ contexts?: ( | string | { @@ -153,6 +440,13 @@ export interface Rules { inlineCommentBlock?: boolean; } )[]; + /** + * The contexts array which will be checked for content on the same line after. + * + * Can either be strings or an object with a `context` string and an optional, default `false` `inlineCommentBlock` boolean. + * + * Defaults to an empty array. + */ contextsAfter?: ( | string | { @@ -160,6 +454,14 @@ export interface Rules { inlineCommentBlock?: boolean; } )[]; + /** + * The contexts array which will be checked for content before and on the same + * line after. + * + * Can either be strings or an object with a `context` string and an optional, default `false` `inlineCommentBlock` boolean. + * + * Defaults to `VariableDeclarator`, `TSPropertySignature`, `PropertyDefinition`. + */ contextsBeforeAndAfter?: ( | string | { @@ -167,8 +469,39 @@ export interface Rules { inlineCommentBlock?: boolean; } )[]; + /** + * Set to `false` to disable fixing. + */ enableFixer?: boolean; + /** + * What policy to enforce on the conversion of non-JSDoc comments without + * line breaks. (Non-JSDoc (mulitline) comments with line breaks will always + * be converted to `multi` style JSDoc comments.) + * + * - `multi` - Convert to multi-line style + * ```js + * /** + * * Some text + * * / + * ``` + * - `single` - Convert to single-line style + * ```js + * /** Some text * / + * ``` + * + * Defaults to `multi`. + * + */ enforceJsdocLineStyle?: "multi" | "single"; + /** + * What style of comments to which to apply JSDoc conversion. + * + * - `block` - Applies to block-style comments (`/* ... * /`) + * - `line` - Applies to line-style comments (`// ...`) + * - `both` - Applies to both block and line-style comments + * + * Defaults to `both`. + */ lineOrBlockStyle?: "block" | "line" | "both"; } ]; @@ -178,6 +511,17 @@ export interface Rules { | [] | [ { + /** + * If you want additional tags to be checked for their descriptions, you may + * add them within this option. + * + * ```js + * { + * 'jsdoc/empty-tags': ['error', {tags: ['event']}] + * } + * ``` + * + */ tags?: string[]; } ]; @@ -187,6 +531,22 @@ export interface Rules { | [] | [ { + /** + * Set this to an array of strings representing the AST context (or an object with + * `context` and `comment` properties) where you wish the rule to be applied. + * + * `context` defaults to `any` and `comment` defaults to no specific comment context. + * + * Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`, + * `FunctionExpression`). Set to `"any"` if you want + * the rule to apply to any JSDoc block throughout your files (as is necessary + * for finding function blocks not attached to a function declaration or + * expression, i.e., `@callback` or `@function` (or its aliases `@func` or + * `@method`) (including those associated with an `@interface`). + * + * See the ["AST and Selectors"](../#advanced-ast-and-selectors) + * section of our Advanced docs for more on the expected format. + */ contexts?: ( | string | { @@ -205,6 +565,25 @@ export interface Rules { | [] | [ { + /** + * The `aliases` option allows indicating words as synonyms (aliases) of each other. + * + * For example, with `{ aliases: { emoji: ["smiley", "winkey"] } }`, the following comment would be considered uninformative: + * + * ```js + * /** A smiley/winkey. * / + * let emoji; + * ``` + * + * The default `aliases` option is: + * + * ```json + * { + * "a": ["an", "our"] + * } + * ``` + * + */ aliases?: { /** * This interface was referenced by `undefined`'s JSON-Schema definition @@ -212,7 +591,39 @@ export interface Rules { */ [k: string]: string[]; }; + /** + * Tags that should not be checked for valid contents. + * + * For example, with `{ excludedTags: ["category"] }`, the following comment would not be considered uninformative: + * + * ```js + * /** @category Types * / + * function computeTypes(node) { + * // ... + * } + * ``` + * + * No tags are excluded by default. + * + */ excludedTags?: string[]; + /** + * Words that are ignored when searching for one that adds meaning. + * + * For example, with `{ uselessWords: ["our"] }`, the following comment would be considered uninformative: + * + * ```js + * /** Our text. * / + * let text; + * ``` + * + * The default `uselessWords` option is: + * + * ```json + * ["a", "an", "i", "in", "of", "s", "the"] + * ``` + * + */ uselessWords?: string[]; } ]; @@ -222,10 +633,34 @@ export interface Rules { | [] | [ { + /** + * Whether to additionally check the start of blocks, such as classes or functions. + * Defaults to `false`. + * + */ checkBlockStarts?: boolean; + /** + * An array of tags whose presence in the JSDoc block will prevent the + * application of the rule. Defaults to `['type']` (i.e., if `@type` is present, + * lines before the block will not be added). + * + */ excludedTags?: string[]; + /** + * This option excludes cases where the JSDoc block occurs on the same line as a + * preceding code or comment. Defaults to `true`. + * + */ ignoreSameLine?: boolean; + /** + * This option excludes cases where the JSDoc block is only one line long. + * Defaults to `true`. + * + */ ignoreSingleLines?: boolean; + /** + * The minimum number of lines to require. Defaults to 1. + */ lines?: number; } ]; @@ -235,6 +670,21 @@ export interface Rules { | [] | [ { + /** + * Set this to an array of strings representing the AST context (or an object with + * optional `context` and `comment` properties) where you wish the rule to be applied (e.g., + * `ClassDeclaration` for ES6 classes). + * + * `context` defaults to `any` and `comment` defaults to no specific comment context. + * + * Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`, + * `FunctionExpression`). Set to `"any"` if you want the rule to apply to any + * JSDoc block throughout your files. + * + * See the ["AST and Selectors"](../#advanced-ast-and-selectors) + * section of our Advanced docs for more on the expected format. + * + */ contexts?: ( | string | { @@ -242,6 +692,44 @@ export interface Rules { context?: string; } )[]; + /** + * If you wish to override the main block description without changing the + * default `match-description` (which can cascade to the `tags` with `true`), + * you may use `mainDescription`: + * + * ```js + * { + * 'jsdoc/match-description': ['error', { + * mainDescription: '[A-Z].*\\.', + * tags: { + * param: true, + * returns: true + * } + * }] + * } + * ``` + * + * There is no need to add `mainDescription: true`, as by default, the main + * block description (and only the main block description) is linted, though you + * may disable checking it by setting it to `false`. + * + * You may also provide an object with `message`: + * + * ```js + * { + * 'jsdoc/match-description': ['error', { + * mainDescription: { + * message: 'Capitalize first word of JSDoc block descriptions', + * match: '[A-Z].*\\.' + * }, + * tags: { + * param: true, + * returns: true + * } + * }] + * } + * ``` + */ mainDescription?: | string | boolean @@ -249,9 +737,97 @@ export interface Rules { match?: string | boolean; message?: string; }; + /** + * You can supply your own expression to override the default, passing a + * `matchDescription` string on the options object. + * + * Defaults to using (only) the `v` flag, so + * to add your own flags, encapsulate your expression as a string, but like a + * literal, e.g., `/[A-Z].*\./vi`. + * + * ```js + * { + * 'jsdoc/match-description': ['error', {matchDescription: '[A-Z].*\\.'}] + * } + * ``` + */ matchDescription?: string; + /** + * You may provide a custom default message by using the following format: + * + * ```js + * { + * 'jsdoc/match-description': ['error', { + * message: 'The default description should begin with a capital letter.' + * }] + * } + * ``` + * + * This can be overridden per tag or for the main block description by setting + * `message` within `tags` or `mainDescription`, respectively. + * + */ message?: string; + /** + * If not set to `false`, will enforce that the following tags have at least + * some content: + * + * - `@copyright` + * - `@example` + * - `@see` + * - `@todo` + * + * If you supply your own tag description for any of the above tags in `tags`, + * your description will take precedence. + */ nonemptyTags?: boolean; + /** + * If you want different regular expressions to apply to tags, you may use + * the `tags` option object: + * + * ```js + * { + * 'jsdoc/match-description': ['error', {tags: { + * param: '\\- [A-Z].*\\.', + * returns: '[A-Z].*\\.' + * }}] + * } + * ``` + * + * In place of a string, you can also add `true` to indicate that a particular + * tag should be linted with the `matchDescription` value (or the default). + * + * ```js + * { + * 'jsdoc/match-description': ['error', {tags: { + * param: true, + * returns: true + * }}] + * } + * ``` + * + * Alternatively, you may supply an object with a `message` property to indicate + * the error message for that tag. + * + * ```js + * { + * 'jsdoc/match-description': ['error', {tags: { + * param: {message: 'Begin with a hyphen', match: '\\- [A-Z].*\\.'}, + * returns: {message: 'Capitalize for returns (the default)', match: true} + * }}] + * } + * ``` + * + * The tags `@param`/`@arg`/`@argument` and `@property`/`@prop` will be properly + * parsed to ensure that the matched "description" text includes only the text + * after the name. + * + * All other tags will treat the text following the tag name, a space, and + * an optional curly-bracketed type expression (and another space) as part of + * its "description" (e.g., for `@returns {someType} some description`, the + * description is `some description` while for `@some-tag xyz`, the description + * is `xyz`). + */ tags?: { /** * This interface was referenced by `undefined`'s JSON-Schema definition @@ -273,41 +849,190 @@ export interface Rules { | [] | [ { + /** + * `match` is a required option containing an array of objects which determine + * the conditions whereby a name is reported as being problematic. + * + * These objects can have any combination of the following groups of optional + * properties, all of which act to confine one another. + * + * Note that `comment`, even if targeting a specific tag, is used to match the + * whole block. So if a `comment` finds its specific tag, it may still apply + * fixes found by the likes of `disallowName` even when a different tag has the + * disallowed name. An alternative is to ensure that `comment` finds the specific + * tag of the desired tag and/or name and no `disallowName` (or `allowName`) is + * supplied. In such a case, only one error will be reported, but no fixer will + * be applied, however. + * + */ match: { + /** + * Indicates which names are allowed for the given tag (or `*`). + * Accepts a string regular expression (optionally wrapped between two + * `/` delimiters followed by optional flags) used to match the name. + */ allowName?: string; + /** + * As with `context` but AST for the JSDoc block comment and types. + */ comment?: string; + /** + * AST to confine the allowing or disallowing to JSDoc blocks + * associated with a particular context. See the + * ["AST and Selectors"](../#advanced-ast-and-selectors) + * section of our Advanced docs for more on the expected format. + */ context?: string; + /** + * As with `allowName` but indicates names that are not allowed. + */ disallowName?: string; + /** + * An optional custom message to use when there is a match. + */ message?: string; + /** + * If `disallowName` is supplied and this value is present, it + * will replace the matched `disallowName` text. + */ replacement?: string; + /** + * This array should include tag names or `*` to indicate the + * match will apply for all tags (except as confined by any context + * properties). If `*` is not used, then these rules will only apply to + * the specified tags. If `tags` is omitted, then `*` is assumed. + */ tags?: string[]; }[]; } ]; - /** Controls how and whether jsdoc blocks can be expressed as single or multiple line blocks. */ + /** Controls how and whether JSDoc blocks can be expressed as single or multiple line blocks. */ "jsdoc/multiline-blocks": | [] | [ { + /** + * If `noMultilineBlocks` is set to `true` with this option and multiple tags are + * found in a block, an error will not be reported. + * + * Since multiple-tagged lines cannot be collapsed into a single line, this option + * prevents them from being reported. Set to `false` if you really want to report + * any blocks. + * + * This option will also be applied when there is a block description and a single + * tag (since a description cannot precede a tag on a single line, and also + * cannot be reliably added after the tag either). + * + * Defaults to `true`. + */ allowMultipleTags?: boolean; + /** + * If `noMultilineBlocks` is set with this numeric option, multiline blocks will + * be permitted if containing at least the given amount of text. + * + * If not set, multiline blocks will not be permitted regardless of length unless + * a relevant tag is present and `multilineTags` is set. + * + * Defaults to not being in effect. + */ minimumLengthForMultiline?: number; + /** + * If `noMultilineBlocks` is set with this option, multiline blocks may be allowed + * regardless of length as long as a tag or a tag of a certain type is present. + * + * If `*` is included in the array, the presence of a tags will allow for + * multiline blocks (but not when without any tags unless the amount of text is + * over an amount specified by `minimumLengthForMultiline`). + * + * If the array does not include `*` but lists certain tags, the presence of + * such a tag will cause multiline blocks to be allowed. + * + * You may set this to an empty array to prevent any tag from permitting multiple + * lines. + * + * Defaults to `['*']`. + * + */ multilineTags?: "*" | string[]; + /** + * For multiline blocks, any non-whitespace text preceding the `* /` on the final + * line will be reported. (Text preceding a newline is not reported.) + * + * `noMultilineBlocks` will have priority over this rule if it applies. + * + * Defaults to `true`. + */ noFinalLineText?: boolean; + /** + * Requires that JSDoc blocks are restricted to single lines only unless impacted + * by the options `minimumLengthForMultiline`, `multilineTags`, or + * `allowMultipleTags`. + * + * Defaults to `false`. + */ noMultilineBlocks?: boolean; + /** + * If this is `true`, any single line blocks will be reported, except those which + * are whitelisted in `singleLineTags`. + * + * Defaults to `false`. + * + */ noSingleLineBlocks?: boolean; + /** + * For multiline blocks, any non-whitespace text immediately after the `/**` and + * space will be reported. (Text after a newline is not reported.) + * + * `noMultilineBlocks` will have priority over this rule if it applies. + * + * Defaults to `true`. + */ noZeroLineText?: boolean; + /** + * If this number is set, it indicates a minimum line width for a single line of + * JSDoc content spread over a multi-line comment block. If a single line is under + * the minimum length, it will be reported so as to enforce single line JSDoc blocks + * for such cases. Blocks are not reported which have multi-line descriptions, + * multiple tags, a block description and tag, or tags with multi-line types or + * descriptions. + * + * Defaults to `null`. + * + */ requireSingleLineUnderCount?: number; + /** + * An array of tags which can nevertheless be allowed as single line blocks when + * `noSingleLineBlocks` is set. You may set this to a empty array to + * cause all single line blocks to be reported. If `'*'` is present, then + * the presence of a tag will allow single line blocks (but not if a tag is + * missing). + * + * Defaults to `['lends', 'type']`. + */ singleLineTags?: string[]; } ]; - /** This rule checks for multi-line-style comments which fail to meet the criteria of a jsdoc block. */ + /** This rule checks for multi-line-style comments which fail to meet the criteria of a JSDoc block. */ "jsdoc/no-bad-blocks": | [] | [ { + /** + * An array of directives that will not be reported if present at the beginning of + * a multi-comment block and at-sign `/* @`. + * + * Defaults to `['ts-check', 'ts-expect-error', 'ts-ignore', 'ts-nocheck']` + * (some directives [used by TypeScript](https://www.typescriptlang.org/docs/handbook/intro-to-js-ts.html#ts-check)). + * + */ ignore?: string[]; + /** + * A boolean (defaulting to `false`) which if `true` will prevent all + * JSDoc-like blocks with more than two initial asterisks even those without + * apparent tag content. + */ preventAllMultiAsteriskBlocks?: boolean; } ]; @@ -320,6 +1045,9 @@ export interface Rules { | [] | [ { + /** + * Whether or not to auto-remove the blank block. Defaults to `false`. + */ enableFixer?: boolean; } ]; @@ -329,6 +1057,22 @@ export interface Rules { | [] | [ { + /** + * Set this to an array of strings representing the AST context (or an object with + * optional `context` and `comment` properties) where you wish the rule to be applied. + * + * `context` defaults to `any` and `comment` defaults to no specific comment context. + * + * Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`, + * `FunctionExpression`). Set to `"any"` if you want + * the rule to apply to any JSDoc block throughout your files (as is necessary + * for finding function blocks not attached to a function declaration or + * expression, i.e., `@callback` or `@function` (or its aliases `@func` or + * `@method`) (including those associated with an `@interface`). + * + * See the ["AST and Selectors"](../#advanced-ast-and-selectors) + * section of our Advanced docs for more on the expected format. + */ contexts?: ( | string | { @@ -336,6 +1080,13 @@ export interface Rules { context?: string; } )[]; + /** + * Set this to `true` to report the presence of optional parameters. May be + * used if the project is insisting on optionality being indicated by + * the presence of ES6 default parameters (bearing in mind that such + * "defaults" are only applied when the supplied value is missing or + * `undefined` but not for `null` or other "falsey" values). + */ noOptionalParamNames?: boolean; } ]; @@ -345,6 +1096,29 @@ export interface Rules { | [] | [ { + /** + * Set this to an array of strings representing the AST context (or an object with + * optional `context` and `comment` properties) where you wish the rule to be applied. + * + * `context` defaults to `any` and `comment` defaults to no specific comment context. + * + * Use the `minimum` property (defaults to 1) to indicate how many are required + * for the rule to be reported. + * + * Use the `message` property to indicate the specific error to be shown when an + * error is reported for that context being found missing. You may use + * `{{context}}` and `{{comment}}` with such messages. Defaults to + * `"Syntax is required: {{context}}"`, or with a comment, to + * `"Syntax is required: {{context}} with {{comment}}"`. + * + * Set to `"any"` if you want the rule to apply to any JSDoc block throughout + * your files (as is necessary for finding function blocks not attached to a + * function declaration or expression, i.e., `@callback` or `@function` (or its + * aliases `@func` or `@method`) (including those associated with an `@interface`). + * + * See the ["AST and Selectors"](../#advanced-ast-and-selectors) + * section of our Advanced docs for more on the expected format. + */ contexts?: ( | string | { @@ -362,8 +1136,43 @@ export interface Rules { | [] | [ { + /** + * Set to `true` if you wish to allow asterisks after a space (as with Markdown): + * + * ```js + * /** + * * *bold* text + * * / + * ``` + * + * Defaults to `false`. + */ allowWhitespace?: boolean; + /** + * Prevent the likes of this: + * + * ```js + * /** + * * + * * + * ** / + * ``` + * + * Defaults to `true`. + */ preventAtEnd?: boolean; + /** + * Prevent the likes of this: + * + * ```js + * /** + * * + * ** + * * / + * ``` + * + * Defaults to `true`. + */ preventAtMiddleLines?: boolean; } ]; @@ -373,6 +1182,25 @@ export interface Rules { | [] | [ { + /** + * Set this to an array of strings representing the AST context (or an object with + * `context` and `comment` properties) where you wish the rule to be applied. + * + * `context` defaults to `any` and `comment` defaults to no specific comment context. + * + * Use the `message` property to indicate the specific error to be shown when an + * error is reported for that context being found. Defaults to + * `"Syntax is restricted: {{context}}"`, or with a comment, to + * `"Syntax is restricted: {{context}} with {{comment}}"`. + * + * Set to `"any"` if you want the rule to apply to any JSDoc block throughout + * your files (as is necessary for finding function blocks not attached to a + * function declaration or expression, i.e., `@callback` or `@function` (or its + * aliases `@func` or `@method`) (including those associated with an `@interface`). + * + * See the ["AST and Selectors"](../#advanced-ast-and-selectors) + * section of our Advanced docs for more on the expected format. + */ contexts: ( | string | { @@ -389,6 +1217,24 @@ export interface Rules { | [] | [ { + /** + * Set this to an array of strings representing the AST context (or an object with + * optional `context` and `comment` properties) where you wish the rule to be applied. + * + * `context` defaults to `any` and `comment` defaults to no specific comment context. + * + * Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`, + * `FunctionExpression`, `TSDeclareFunction`, `TSMethodSignature`, + * `ClassDeclaration`). Set to `"any"` if you want + * the rule to apply to any JSDoc block throughout your files (as is necessary + * for finding function blocks not attached to a function declaration or + * expression, i.e., `@callback` or `@function` (or its aliases `@func` or + * `@method`) (including those associated with an `@interface`). + * + * See the ["AST and Selectors"](../#advanced-ast-and-selectors) + * section of our Advanced docs for more on the expected format. + * + */ contexts?: ( | string | { @@ -399,13 +1245,29 @@ export interface Rules { } ]; - /** Checks that types in jsdoc comments are defined. */ + /** Checks that types in JSDoc comments are defined. */ "jsdoc/no-undefined-types": | [] | [ { + /** + * This array can be populated to indicate other types which + * are automatically considered as defined (in addition to globals, etc.). + * Defaults to an empty array. + */ definedTypes?: string[]; + /** + * Whether to disable reporting of errors. Defaults to + * `false`. This may be set to `true` in order to take advantage of only + * marking defined variables as used. + */ disableReporting?: boolean; + /** + * Whether to mark variables as used for the purposes + * of the `no-unused-vars` rule when they are not found to be undefined. + * Defaults to `true`. May be set to `false` to enforce a practice of not + * importing types unless used in code. + */ markVariablesAsUsed?: boolean; } ]; @@ -423,9 +1285,39 @@ export interface Rules { | [ "always" | "never" | "any", { + /** + * If you want different values to apply to specific tags, you may use + * the `tags` option object. The keys are `always`, `never`, or `any` and + * the values are arrays of tag names or the special value `*description` + * which applies to the main JSDoc block description. + * + * ```js + * { + * 'jsdoc/require-asterisk-prefix': ['error', 'always', { + * tags: { + * always: ['*description'], + * any: ['example', 'license'], + * never: ['copyright'] + * } + * }] + * } + * ``` + * + */ tags?: { + /** + * If it is `"always"` then a problem is raised when there is no asterisk + * prefix on a given JSDoc line. + */ always?: string[]; + /** + * No problem is raised regardless of asterisk presence or non-presence. + */ any?: string[]; + /** + * If it is `"never"` then a problem is raised + * when there is an asterisk present. + */ never?: string[]; }; } @@ -436,9 +1328,38 @@ export interface Rules { | [] | [ { + /** + * A value indicating whether `constructor`s should be + * checked. Defaults to `true`. + */ checkConstructors?: boolean; + /** + * A value indicating whether getters should be checked. + * Defaults to `true`. + */ checkGetters?: boolean; + /** + * A value indicating whether setters should be checked. + * Defaults to `true`. + */ checkSetters?: boolean; + /** + * Set to an array of strings representing the AST context + * where you wish the rule to be applied (e.g., `ClassDeclaration` for ES6 + * classes). + * + * `context` defaults to `any` and `comment` defaults to no specific comment context. + * + * Overrides the default contexts (`ArrowFunctionExpression`, + * `FunctionDeclaration`, `FunctionExpression`). Set to `"any"` if you want + * the rule to apply to any JSDoc block throughout your files (as is necessary + * for finding function blocks not attached to a function declaration or + * expression, i.e., `@callback` or `@function` (or its aliases `@func` or + * `@method`) (including those associated with an `@interface`). + * + * See the ["AST and Selectors"](../#advanced-ast-and-selectors) + * section of our Advanced docs for more on the expected format. + */ contexts?: ( | string | { @@ -446,7 +1367,19 @@ export interface Rules { context?: string; } )[]; + /** + * Whether to accept implicit descriptions (`"body"`) or + * `@description` tags (`"tag"`) as satisfying the rule. Set to `"any"` to + * accept either style. Defaults to `"body"`. + */ descriptionStyle?: "body" | "tag" | "any"; + /** + * Array of tags (e.g., `['type']`) whose presence on the + * document block avoids the need for a `@description`. Defaults to an + * array with `inheritdoc`. If you set this array, it will overwrite the + * default, so be sure to add back `inheritdoc` if you wish its presence + * to cause exemption of the rule. + */ exemptedBy?: string[]; } ]; @@ -456,8 +1389,41 @@ export interface Rules { | [] | [ { + /** + * You can provide an `abbreviations` options array to avoid such strings of text + * being treated as sentence endings when followed by dots. The `.` is not + * necessary at the end of the array items. + */ abbreviations?: string[]; + /** + * When `false` (the new default), we will not assume capital letters after + * newlines are an incorrect way to end the sentence (they may be proper + * nouns, for example). + */ newlineBeforeCapsAssumesBadSentenceEnd?: boolean; + /** + * If you want additional tags to be checked for their descriptions, you may + * add them within this option. + * + * ```js + * { + * 'jsdoc/require-description-complete-sentence': ['error', { + * tags: ['see', 'copyright'] + * }] + * } + * ``` + * + * The tags `@param`/`@arg`/`@argument` and `@property`/`@prop` will be properly + * parsed to ensure that the checked "description" text includes only the text + * after the name. + * + * All other tags will treat the text following the tag name, a space, and + * an optional curly-bracketed type expression (and another space) as part of + * its "description" (e.g., for `@returns {someType} some description`, the + * description is `some description` while for `@some-tag xyz`, the description + * is `xyz`). + * + */ tags?: string[]; } ]; @@ -467,9 +1433,33 @@ export interface Rules { | [] | [ { + /** + * A value indicating whether `constructor`s should be checked. + * Defaults to `true`. + */ checkConstructors?: boolean; + /** + * A value indicating whether getters should be checked. Defaults to `false`. + */ checkGetters?: boolean; + /** + * A value indicating whether setters should be checked. Defaults to `false`. + */ checkSetters?: boolean; + /** + * Set this to an array of strings representing the AST context (or an object with + * optional `context` and `comment` properties) where you wish the rule to be applied. + * (e.g., `ClassDeclaration` for ES6 classes). + * + * `context` defaults to `any` and `comment` defaults to no specific comment context. + * + * Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`, + * `FunctionExpression`). Set to `"any"` if you want the rule to apply to any + * JSDoc block throughout your files. + * + * See the ["AST and Selectors"](../#advanced-ast-and-selectors) + * section of our Advanced docs for more on the expected format. + */ contexts?: ( | string | { @@ -477,8 +1467,23 @@ export interface Rules { context?: string; } )[]; + /** + * A boolean on whether to enable the fixer (which adds an empty `@example` block). + * Defaults to `true`. + */ enableFixer?: boolean; + /** + * Array of tags (e.g., `['type']`) whose presence on the document + * block avoids the need for an `@example`. Defaults to an array with + * `inheritdoc`. If you set this array, it will overwrite the default, + * so be sure to add back `inheritdoc` if you wish its presence to cause + * exemption of the rule. + */ exemptedBy?: string[]; + /** + * Boolean to indicate that no-argument functions should not be reported for + * missing `@example` declarations. + */ exemptNoArguments?: boolean; } ]; @@ -488,6 +1493,69 @@ export interface Rules { | [] | [ { + /** + * The keys of this object are tag names, and the values are configuration + * objects indicating what will be checked for these whole-file tags. + * + * Each configuration object has 3 potential boolean keys (which default + * to `false` when this option is supplied). + * + * 1. `mustExist` - enforces that all files have a `@file`, `@fileoverview`, or `@overview` tag. + * 2. `preventDuplicates` - enforces that duplicate file overview tags within a given file will be reported + * 3. `initialCommentsOnly` - reports file overview tags which are not, as per + * [the docs](https://jsdoc.app/tags-file.html), "at the beginning of + * the file"–where beginning of the file is interpreted in this rule + * as being when the overview tag is not preceded by anything other than + * a comment. + * + * When no `tags` is present, the default is: + * + * ```json + * { + * "file": { + * "initialCommentsOnly": true, + * "mustExist": true, + * "preventDuplicates": true, + * } + * } + * ``` + * + * You can add additional tag names and/or override `file` if you supply this + * option, e.g., in place of or in addition to `file`, giving other potential + * file global tags like `@license`, `@copyright`, `@author`, `@module` or + * `@exports`, optionally restricting them to a single use or preventing them + * from being preceded by anything besides comments. + * + * For example: + * + * ```js + * { + * "license": { + * "mustExist": true, + * "preventDuplicates": true, + * } + * } + * ``` + * + * This would require one and only one `@license` in the file, though because + * `initialCommentsOnly` is absent and defaults to `false`, the `@license` + * can be anywhere. + * + * In the case of `@license`, you can use this rule along with the + * `check-values` rule (with its `allowedLicenses` or `licensePattern` options), + * to enforce a license whitelist be present on every JS file. + * + * Note that if you choose to use `preventDuplicates` with `license`, you still + * have a way to allow multiple licenses for the whole page by using the SPDX + * "AND" expression, e.g., `@license (MIT AND GPL-3.0)`. + * + * Note that the tag names are the main JSDoc tag name, so you should use `file` + * in this configuration object regardless of whether you have configured + * `fileoverview` instead of `file` on `tagNamePreference` (i.e., `fileoverview` + * will be checked, but you must use `file` on the configuration object). + * + * + */ tags?: { /** * This interface was referenced by `undefined`'s JSON-Schema definition @@ -509,6 +1577,16 @@ export interface Rules { | [ "always" | "never", { + /** + * Object whose keys indicate different tags to check for the + * presence or absence of hyphens; the key value should be "always" or "never", + * indicating how hyphens are to be applied, e.g., `{property: 'never'}` + * to ensure `@property` never uses hyphens. A key can also be set as `*`, e.g., + * `'*': 'always'` to apply hyphen checking to any tag (besides the preferred + * `@param` tag which follows the main string option setting and besides any + * other `tags` entries). + * + */ tags?: | { /** @@ -526,9 +1604,46 @@ export interface Rules { | [] | [ { + /** + * A value indicating whether `constructor`s should be checked. Defaults to + * `true`. When `true`, `exemptEmptyConstructors` may still avoid reporting when + * no parameters or return values are found. + */ checkConstructors?: boolean; + /** + * A value indicating whether getters should be checked. Besides setting as a + * boolean, this option can be set to the string `"no-setter"` to indicate that + * getters should be checked but only when there is no setter. This may be useful + * if one only wishes documentation on one of the two accessors. Defaults to + * `false`. + * + */ checkGetters?: boolean | "no-setter"; + /** + * A value indicating whether setters should be checked. Besides setting as a + * boolean, this option can be set to the string `"no-getter"` to indicate that + * setters should be checked but only when there is no getter. This may be useful + * if one only wishes documentation on one of the two accessors. Defaults to + * `false`. + */ checkSetters?: boolean | "no-getter"; + /** + * Set this to an array of strings or objects representing the additional AST + * contexts where you wish the rule to be applied (e.g., `Property` for + * properties). If specified as an object, it should have a `context` property + * and can have an `inlineCommentBlock` property which, if set to `true`, will + * add an inline `/** * /` instead of the regular, multi-line, indented jsdoc + * block which will otherwise be added. Defaults to an empty array. Contexts + * may also have their own `minLineCount` property which is an integer + * indicating a minimum number of lines expected for a node in order + * for it to require documentation. + * + * Note that you may need to disable `require` items (e.g., `MethodDefinition`) + * if you are specifying a more precise form in `contexts` (e.g., `MethodDefinition:not([accessibility="private"] > FunctionExpression`). + * + * See the ["AST and Selectors"](../#advanced-ast-and-selectors) + * section of our Advanced docs for more on the expected format. + */ contexts?: ( | string | { @@ -537,12 +1652,60 @@ export interface Rules { minLineCount?: number; } )[]; + /** + * A boolean on whether to enable the fixer (which adds an empty JSDoc block). + * Defaults to `true`. + */ enableFixer?: boolean; + /** + * When `true`, the rule will not report missing JSDoc blocks above constructors + * with no parameters or return values (this is enabled by default as the class + * name or description should be seen as sufficient to convey intent). + * + * Defaults to `true`. + */ exemptEmptyConstructors?: boolean; + /** + * When `true`, the rule will not report missing JSDoc blocks above + * functions/methods with no parameters or return values (intended where + * function/method names are sufficient for themselves as documentation). + * + * Defaults to `false`. + * + */ exemptEmptyFunctions?: boolean; + /** + * If set to `true` will avoid checking an overloaded function's implementation. + * + * Defaults to `false`. + */ exemptOverloadedImplementations?: boolean; + /** + * An optional message to add to the inserted JSDoc block. Defaults to the + * empty string. + */ fixerMessage?: string; + /** + * An integer to indicate a minimum number of lines expected for a node in order + * for it to require documentation. Defaults to `undefined`. This option will + * apply to any context; see `contexts` for line counts specific to a context. + */ minLineCount?: number; + /** + * This option will insist that missing JSDoc blocks are only reported for + * function bodies / class declarations that are exported from the module. + * May be a boolean or object. If set to `true`, the defaults below will be + * used. If unset, JSDoc block reporting will not be limited to exports. + * + * This object supports the following optional boolean keys (`false` unless + * otherwise noted): + * + * - `ancestorsOnly` - Optimization to only check node ancestors to check if node is exported + * - `esm` - ESM exports are checked for JSDoc comments (Defaults to `true`) + * - `cjs` - CommonJS exports are checked for JSDoc comments (Defaults to `true`) + * - `window` - Window global exports are checked for JSDoc comments + * + */ publicOnly?: | boolean | { @@ -551,14 +1714,45 @@ export interface Rules { esm?: boolean; window?: boolean; }; + /** + * An object with the following optional boolean keys which all default to + * `false` except for `FunctionDeclaration` which defaults to `true`. + */ require?: { + /** + * Whether to check arrow functions like `() => {}` + */ ArrowFunctionExpression?: boolean; + /** + * Whether to check declarations like `class A {}` + */ ClassDeclaration?: boolean; + /** + * Whether to check class expressions like `const myClass = class {}` + */ ClassExpression?: boolean; + /** + * Whether to check function declarations like `function a {}` + */ FunctionDeclaration?: boolean; + /** + * Whether to check function expressions like `const a = function {}` + */ FunctionExpression?: boolean; + /** + * Whether to check method definitions like `class A { someMethodDefinition () {} }` + */ MethodDefinition?: boolean; }; + /** + * If `true`, will skip above uncommented overloaded functions to check + * for a comment block (e.g., at the top of a set of overloaded functions). + * + * If `false`, will force each overloaded function to be checked for a + * comment block. + * + * Defaults to `true`. + */ skipInterveningOverloadedDeclarations?: boolean; } ]; @@ -571,14 +1765,146 @@ export interface Rules { | [] | [ { + /** + * Numeric to indicate the number at which to begin auto-incrementing roots. + * Defaults to `0`. + * + */ autoIncrementBase?: number; + /** + * A value indicating whether `constructor`s should be checked. Defaults to + * `true`. + * + */ checkConstructors?: boolean; + /** + * Whether to require destructured properties. Defaults to `true`. + */ checkDestructured?: boolean; + /** + * Whether to check the existence of a corresponding `@param` for root objects + * of destructured properties (e.g., that for `function ({a, b}) {}`, that there + * is something like `@param myRootObj` defined that can correspond to + * the `{a, b}` object parameter). + * + * If `checkDestructuredRoots` is `false`, `checkDestructured` will also be + * implied to be `false` (i.e., the inside of the roots will not be checked + * either, e.g., it will also not complain if `a` or `b` do not have their own + * documentation). Defaults to `true`. + * + */ checkDestructuredRoots?: boolean; + /** + * A value indicating whether getters should be checked. Defaults to `false`. + */ checkGetters?: boolean; + /** + * If set to `true`, will report (and add fixer insertions) for missing rest + * properties. Defaults to `false`. + * + * If set to `true`, note that you can still document the subproperties of the + * rest property using other jsdoc features, e.g., `@typedef`: + * + * ```js + * /** + * * @typedef ExtraOptions + * * @property innerProp1 + * * @property innerProp2 + * * / + * + * /** + * * @param cfg + * * @param cfg.num + * * @param {ExtraOptions} extra + * * / + * function quux ({num, ...extra}) { + * } + * ``` + * + * Setting this option to `false` (the default) may be useful in cases where + * you already have separate `@param` definitions for each of the properties + * within the rest property. + * + * For example, with the option disabled, this will not give an error despite + * `extra` not having any definition: + * + * ```js + * /** + * * @param cfg + * * @param cfg.num + * * / + * function quux ({num, ...extra}) { + * } + * ``` + * + * Nor will this: + * + * ```js + * /** + * * @param cfg + * * @param cfg.num + * * @param cfg.innerProp1 + * * @param cfg.innerProp2 + * * / + * function quux ({num, ...extra}) { + * } + * ``` + * + */ checkRestProperty?: boolean; + /** + * A value indicating whether setters should be checked. Defaults to `false`. + */ checkSetters?: boolean; + /** + * When one specifies a type, unless it is of a generic type, like `object` + * or `array`, it may be considered unnecessary to have that object's + * destructured components required, especially where generated docs will + * link back to the specified type. For example: + * + * ```js + * /** + * * @param {SVGRect} bbox - a SVGRect + * * / + * export const bboxToObj = function ({x, y, width, height}) { + * return {x, y, width, height}; + * }; + * ``` + * + * By default `checkTypesPattern` is set to + * `/^(?:[oO]bject|[aA]rray|PlainObject|Generic(?:Object|Array))$/v`, + * meaning that destructuring will be required only if the type of the `@param` + * (the text between curly brackets) is a match for "Object" or "Array" (with or + * without initial caps), "PlainObject", or "GenericObject", "GenericArray" (or + * if no type is present). So in the above example, the lack of a match will + * mean that no complaint will be given about the undocumented destructured + * parameters. + * + * Note that the `/` delimiters are optional, but necessary to add flags. + * + * Defaults to using (only) the `v` flag, so to add your own flags, encapsulate + * your expression as a string, but like a literal, e.g., `/^object$/vi`. + * + * You could set this regular expression to a more expansive list, or you + * could restrict it such that even types matching those strings would not + * need destructuring. + */ checkTypesPattern?: string; + /** + * Set this to an array of strings representing the AST context (or an object with + * optional `context` and `comment` properties) where you wish the rule to be applied. + * + * `context` defaults to `any` and `comment` defaults to no specific comment context. + * + * Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`, + * `FunctionExpression`). May be useful for adding such as + * `TSMethodSignature` in TypeScript or restricting the contexts + * which are checked. + * + * See the ["AST and Selectors"](../#advanced-ast-and-selectors) + * section of our Advanced docs for more on the expected format. + * + */ contexts?: ( | string | { @@ -586,13 +1912,127 @@ export interface Rules { context?: string; } )[]; + /** + * Whether to enable the fixer. Defaults to `true`. + */ enableFixer?: boolean; + /** + * Whether to enable the rest element fixer. + * + * The fixer will automatically report/insert + * [JSDoc repeatable parameters](https://jsdoc.app/tags-param.html#multiple-types-and-repeatable-parameters) + * if missing. + * + * ```js + * /** + * * @param {GenericArray} cfg + * * @param {number} cfg."0" + * * / + * function baar ([a, ...extra]) { + * // + * } + * ``` + * + * ...becomes: + * + * ```js + * /** + * * @param {GenericArray} cfg + * * @param {number} cfg."0" + * * @param {...any} cfg."1" + * * / + * function baar ([a, ...extra]) { + * // + * } + * ``` + * + * Note that the type `any` is included since we don't know of any specific + * type to use. + * + * Defaults to `true`. + * + */ enableRestElementFixer?: boolean; + /** + * Whether to enable the auto-adding of incrementing roots. + * + * The default behavior of `true` is for "root" to be auto-inserted for missing + * roots, followed by a 0-based auto-incrementing number. + * + * So for: + * + * ```js + * function quux ({foo}, {bar}, {baz}) { + * } + * ``` + * + * ...the default JSDoc that would be added if the fixer is enabled would be: + * + * ```js + * /** + * * @param root0 + * * @param root0.foo + * * @param root1 + * * @param root1.bar + * * @param root2 + * * @param root2.baz + * * / + * ``` + * + * Has no effect if `enableFixer` is set to `false`. + */ enableRootFixer?: boolean; + /** + * Array of tags (e.g., `['type']`) whose presence on the document block + * avoids the need for a `@param`. Defaults to an array with + * `inheritdoc`. If you set this array, it will overwrite the default, + * so be sure to add back `inheritdoc` if you wish its presence to cause + * exemption of the rule. + */ exemptedBy?: string[]; + /** + * Set to `true` to ignore reporting when all params are missing. Defaults to + * `false`. + */ ignoreWhenAllParamsMissing?: boolean; + /** + * Set if you wish TypeScript interfaces to exempt checks for the existence of + * `@param`'s. + * + * Will check for a type defining the function itself (on a variable + * declaration) or if there is a single destructured object with a type. + * Defaults to `false`. + */ interfaceExemptsParamsCheck?: boolean; + /** + * An array of root names to use in the fixer when roots are missing. Defaults + * to `['root']`. Note that only when all items in the array besides the last + * are exhausted will auto-incrementing occur. So, with + * `unnamedRootBase: ['arg', 'config']`, the following: + * + * ```js + * function quux ({foo}, [bar], {baz}) { + * } + * ``` + * + * ...will get the following JSDoc block added: + * + * ```js + * /** + * * @param arg + * * @param arg.foo + * * @param config0 + * * @param config0."0" (`bar`) + * * @param config1 + * * @param config1.baz + * * / + * ``` + */ unnamedRootBase?: string[]; + /** + * Set to `true` if you wish to expect documentation of properties on objects + * supplied as default values. Defaults to `false`. + */ useDefaultObjectProperties?: boolean; } ]; @@ -602,6 +2042,22 @@ export interface Rules { | [] | [ { + /** + * Set this to an array of strings representing the AST context (or an object with + * optional `context` and `comment` properties) where you wish the rule to be applied. + * + * `context` defaults to `any` and `comment` defaults to no specific comment context. + * + * Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`, + * `FunctionExpression`). Set to `"any"` if you want + * the rule to apply to any JSDoc block throughout your files (as is necessary + * for finding function blocks not attached to a function declaration or + * expression, i.e., `@callback` or `@function` (or its aliases `@func` or + * `@method`) (including those associated with an `@interface`). + * + * See the ["AST and Selectors"](../#advanced-ast-and-selectors) + * section of our Advanced docs for more on the expected format. + */ contexts?: ( | string | { @@ -609,7 +2065,18 @@ export interface Rules { context?: string; } )[]; + /** + * The description string to set by default for destructured roots. Defaults to + * "The root object". + */ defaultDestructuredRootDescription?: string; + /** + * Whether to set a default destructured root description. For example, you may + * wish to avoid manually having to set the description for a `@param` + * corresponding to a destructured root object as it should always be the same + * type of object. Uses `defaultDestructuredRootDescription` for the description + * string. Defaults to `false`. + */ setDefaultDestructuredRootDescription?: boolean; } ]; @@ -619,6 +2086,23 @@ export interface Rules { | [] | [ { + /** + * Set this to an array of strings representing the AST context (or an object with + * optional `context` and `comment` properties) where you wish the rule to be applied. + * + * `context` defaults to `any` and `comment` defaults to no specific comment context. + * + * Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`, + * `FunctionExpression`). Set to `"any"` if you want + * the rule to apply to any JSDoc block throughout your files (as is necessary + * for finding function blocks not attached to a function declaration or + * expression, i.e., `@callback` or `@function` (or its aliases `@func` or + * `@method`) (including those associated with an `@interface`). + * + * See the ["AST and Selectors"](../#advanced-ast-and-selectors) + * section of our Advanced docs for more on the expected format. + * + */ contexts?: ( | string | { @@ -634,6 +2118,22 @@ export interface Rules { | [] | [ { + /** + * Set this to an array of strings representing the AST context (or an object with + * optional `context` and `comment` properties) where you wish the rule to be applied. + * + * `context` defaults to `any` and `comment` defaults to no specific comment context. + * + * Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`, + * `FunctionExpression`). Set to `"any"` if you want + * the rule to apply to any JSDoc block throughout your files (as is necessary + * for finding function blocks not attached to a function declaration or + * expression, i.e., `@callback` or `@function` (or its aliases `@func` or + * `@method`) (including those associated with an `@interface`). + * + * See the ["AST and Selectors"](../#advanced-ast-and-selectors) + * section of our Advanced docs for more on the expected format. + */ contexts?: ( | string | { @@ -641,7 +2141,17 @@ export interface Rules { context?: string; } )[]; + /** + * The type string to set by default for destructured roots. Defaults to "object". + */ defaultDestructuredRootType?: string; + /** + * Whether to set a default destructured root type. For example, you may wish + * to avoid manually having to set the type for a `@param` + * corresponding to a destructured root object as it is always going to be an + * object. Uses `defaultDestructuredRootType` for the type string. Defaults to + * `false`. + */ setDefaultDestructuredRootType?: boolean; } ]; @@ -663,8 +2173,35 @@ export interface Rules { | [] | [ { + /** + * A value indicating whether `constructor`s should + * be checked for `@returns` tags. Defaults to `false`. + */ checkConstructors?: boolean; + /** + * Boolean to determine whether getter methods should + * be checked for `@returns` tags. Defaults to `true`. + */ checkGetters?: boolean; + /** + * Set this to an array of strings representing the AST context + * (or objects with optional `context` and `comment` properties) where you wish + * the rule to be applied. + * + * `context` defaults to `any` and `comment` defaults to no specific comment context. + * + * Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`, + * `FunctionExpression`). Set to `"any"` if you want + * the rule to apply to any JSDoc block throughout your files (as is necessary + * for finding function blocks not attached to a function declaration or + * expression, i.e., `@callback` or `@function` (or its aliases `@func` or + * `@method`) (including those associated with an `@interface`). This + * rule will only apply on non-default contexts when there is such a tag + * present and the `forceRequireReturn` option is set or if the + * `forceReturnsWithAsync` option is set with a present `@async` tag + * (since we are not checking against the actual `return` values in these + * cases). + */ contexts?: ( | string | { @@ -673,10 +2210,52 @@ export interface Rules { forceRequireReturn?: boolean; } )[]; + /** + * Whether to enable the fixer to add a blank `@returns`. + * Defaults to `false`. + */ enableFixer?: boolean; + /** + * Array of tags (e.g., `['type']`) whose presence on the + * document block avoids the need for a `@returns`. Defaults to an array + * with `inheritdoc`. If you set this array, it will overwrite the default, + * so be sure to add back `inheritdoc` if you wish its presence to cause + * exemption of the rule. + */ exemptedBy?: string[]; + /** + * Set to `true` to always insist on + * `@returns` documentation regardless of implicit or explicit `return`'s + * in the function. May be desired to flag that a project is aware of an + * `undefined`/`void` return. Defaults to `false`. + */ forceRequireReturn?: boolean; + /** + * By default `async` functions that do not explicitly + * return a value pass this rule as an `async` function will always return a + * `Promise`, even if the `Promise` resolves to void. You can force all + * `async` functions (including ones with an explicit `Promise` but no + * detected non-`undefined` `resolve` value) to require `@return` + * documentation by setting `forceReturnsWithAsync` to `true` on the options + * object. This may be useful for flagging that there has been consideration + * of return type. Defaults to `false`. + */ forceReturnsWithAsync?: boolean; + /** + * This option will insist that missing `@returns` are only reported for + * function bodies / class declarations that are exported from the module. + * May be a boolean or object. If set to `true`, the defaults below will be + * used. If unset, `@returns` reporting will not be limited to exports. + * + * This object supports the following optional boolean keys (`false` unless + * otherwise noted): + * + * - `ancestorsOnly` - Optimization to only check node ancestors to check if node is exported + * - `esm` - ESM exports are checked for `@returns` JSDoc comments (Defaults to `true`) + * - `cjs` - CommonJS exports are checked for `@returns` JSDoc comments (Defaults to `true`) + * - `window` - Window global exports are checked for `@returns` JSDoc comments + * + */ publicOnly?: | boolean | { @@ -688,13 +2267,40 @@ export interface Rules { } ]; - /** Requires a return statement in function body if a `@returns` tag is specified in jsdoc comment. */ + /** Requires a return statement in function body if a `@returns` tag is specified in JSDoc comment. */ "jsdoc/require-returns-check": | [] | [ { + /** + * By default, functions which return a `Promise` that are not + * detected as resolving with a non-`undefined` value and `async` functions + * (even ones that do not explicitly return a value, as these are returning a + * `Promise` implicitly) will be exempted from reporting by this rule. + * If you wish to insist that only `Promise`'s which resolve to + * non-`undefined` values or `async` functions with explicit `return`'s will + * be exempted from reporting (i.e., that `async` functions can be reported + * if they lack an explicit (non-`undefined`) `return` when a `@returns` is + * present), you can set `exemptAsync` to `false` on the options object. + */ exemptAsync?: boolean; + /** + * Because a generator might be labeled as having a + * `IterableIterator` `@returns` value (along with an iterator type + * corresponding to the type of any `yield` statements), projects might wish to + * leverage `@returns` in generators even without a `return` statement. This + * option is therefore `true` by default in `typescript` mode (in "jsdoc" mode, + * one might be more likely to take advantage of `@yields`). Set it to `false` + * if you wish for a missing `return` to be flagged regardless. + */ exemptGenerators?: boolean; + /** + * If `true` and no return or + * resolve value is found, this setting will even insist that reporting occur + * with `void` or `undefined` (including as an indicated `Promise` type). + * Unlike `require-returns`, with this option in the rule, one can + * *discourage* the labeling of `undefined` types. Defaults to `false`. + */ reportMissingReturnForUndefinedTypes?: boolean; } ]; @@ -704,6 +2310,22 @@ export interface Rules { | [] | [ { + /** + * Set this to an array of strings representing the AST context (or an object with + * optional `context` and `comment` properties) where you wish the rule to be applied. + * + * `context` defaults to `any` and `comment` defaults to no specific comment context. + * + * Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`, + * `FunctionExpression`). Set to `"any"` if you want + * the rule to apply to any JSDoc block throughout your files (as is necessary + * for finding function blocks not attached to a function declaration or + * expression, i.e., `@callback` or `@function` (or its aliases `@func` or + * `@method`) (including those associated with an `@interface`). + * + * See the ["AST and Selectors"](../#advanced-ast-and-selectors) + * section of our Advanced docs for more on the expected format. + */ contexts?: ( | string | { @@ -719,6 +2341,22 @@ export interface Rules { | [] | [ { + /** + * Set this to an array of strings representing the AST context (or an object with + * optional `context` and `comment` properties) where you wish the rule to be applied. + * + * `context` defaults to `any` and `comment` defaults to no specific comment context. + * + * Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`, + * `FunctionExpression`). Set to `"any"` if you want + * the rule to apply to any JSDoc block throughout your files (as is necessary + * for finding function blocks not attached to a function declaration or + * expression, i.e., `@callback` or `@function` (or its aliases `@func` or + * `@method`) (including those associated with an `@interface`). + * + * See the ["AST and Selectors"](../#advanced-ast-and-selectors) + * section of our Advanced docs for more on the expected format. + */ contexts?: ( | string | { @@ -734,7 +2372,27 @@ export interface Rules { | [] | [ { + /** + * Array of tags (e.g., `['type']`) whose presence on the document + * block avoids the need for a `@template`. Defaults to an array with + * `inheritdoc`. If you set this array, it will overwrite the default, + * so be sure to add back `inheritdoc` if you wish its presence to cause + * exemption of the rule. + */ exemptedBy?: string[]; + /** + * Requires that each template have its own separate line, i.e., preventing + * templates of this format: + * + * ```js + * /** + * * @template T, U, V + * * / + * ``` + * + * Defaults to `false`. + * + */ requireSeparateTemplates?: boolean; } ]; @@ -744,6 +2402,20 @@ export interface Rules { | [] | [ { + /** + * Set this to an array of strings representing the AST context + * (or objects with optional `context` and `comment` properties) where you wish + * the rule to be applied. + * + * `context` defaults to `any` and `comment` defaults to no specific comment context. + * + * Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`, + * `FunctionExpression`). Set to `"any"` if you want + * the rule to apply to any JSDoc block throughout your files (as is necessary + * for finding function blocks not attached to a function declaration or + * expression, i.e., `@callback` or `@function` (or its aliases `@func` or + * `@method`) (including those associated with an `@interface`). + */ contexts?: ( | string | { @@ -751,6 +2423,13 @@ export interface Rules { context?: string; } )[]; + /** + * Array of tags (e.g., `['type']`) whose presence on the + * document block avoids the need for a `@throws`. Defaults to an array + * with `inheritdoc`. If you set this array, it will overwrite the default, + * so be sure to add back `inheritdoc` if you wish its presence to cause + * exemption of the rule. + */ exemptedBy?: string[]; } ]; @@ -763,6 +2442,25 @@ export interface Rules { | [] | [ { + /** + * Set this to an array of strings representing the AST context + * (or objects with optional `context` and `comment` properties) where you wish + * the rule to be applied. + * + * `context` defaults to `any` and `comment` defaults to no specific comment context. + * + * Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`, + * `FunctionExpression`). Set to `"any"` if you want + * the rule to apply to any JSDoc block throughout your files (as is necessary + * for finding function blocks not attached to a function declaration or + * expression, i.e., `@callback` or `@function` (or its aliases `@func` or + * `@method`) (including those associated with an `@interface`). This + * rule will only apply on non-default contexts when there is such a tag + * present and the `forceRequireYields` option is set or if the + * `withGeneratorTag` option is set with a present `@generator` tag + * (since we are not checking against the actual `yield` values in these + * cases). + */ contexts?: ( | string | { @@ -770,21 +2468,82 @@ export interface Rules { context?: string; } )[]; + /** + * Array of tags (e.g., `['type']`) whose presence on the + * document block avoids the need for a `@yields`. Defaults to an array + * with `inheritdoc`. If you set this array, it will overwrite the default, + * so be sure to add back `inheritdoc` if you wish its presence to cause + * exemption of the rule. + */ exemptedBy?: string[]; + /** + * Set to `true` to always insist on + * `@next` documentation even if there are no `yield` statements in the + * function or none return values. May be desired to flag that a project is + * aware of the expected yield return being `undefined`. Defaults to `false`. + */ forceRequireNext?: boolean; + /** + * Set to `true` to always insist on + * `@yields` documentation for generators even if there are only + * expressionless `yield` statements in the function. May be desired to flag + * that a project is aware of an `undefined`/`void` yield. Defaults to + * `false`. + */ forceRequireYields?: boolean; + /** + * If `true`, this option will insist that any use of a `yield` return + * value (e.g., `const rv = yield;` or `const rv = yield value;`) has a + * (non-standard) `@next` tag (in addition to any `@yields` tag) so as to be + * able to document the type expected to be supplied into the iterator + * (the `Generator` iterator that is returned by the call to the generator + * function) to the iterator (e.g., `it.next(value)`). The tag will not be + * expected if the generator function body merely has plain `yield;` or + * `yield value;` statements without returning the values. Defaults to + * `false`. + */ next?: boolean; + /** + * If a `@generator` tag is present on a block, require + * (non-standard ) `@next` (see `next` option). This will require using `void` + * or `undefined` in cases where generators do not use the `next()`-supplied + * incoming `yield`-returned value. Defaults to `false`. See `contexts` to + * `any` if you want to catch `@generator` with `@callback` or such not + * attached to a function. + */ nextWithGeneratorTag?: boolean; + /** + * If a `@generator` tag is present on a block, require + * `@yields`/`@yield`. Defaults to `true`. See `contexts` to `any` if you want + * to catch `@generator` with `@callback` or such not attached to a function. + */ withGeneratorTag?: boolean; } ]; - /** Requires a yield statement in function body if a `@yields` tag is specified in jsdoc comment. */ + /** Requires a yield statement in function body if a `@yields` tag is specified in JSDoc comment. */ "jsdoc/require-yields-check": | [] | [ { + /** + * Avoids checking the function body and merely insists + * that all generators have `@yields`. This can be an optimization with the + * ESLint `require-yield` rule, as that rule already ensures a `yield` is + * present in generators, albeit assuming the generator is not empty). + * Defaults to `false`. + */ checkGeneratorsOnly?: boolean; + /** + * Set this to an array of strings representing the AST context + * (or objects with optional `context` and `comment` properties) where you wish + * the rule to be applied. + * + * `context` defaults to `any` and `comment` defaults to no specific comment context. + * + * Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`, + * `FunctionExpression`). + */ contexts?: ( | string | { @@ -792,7 +2551,19 @@ export interface Rules { context?: string; } )[]; - exemptedBy?: string[]; + /** + * If `true`, this option will insist that any use of a (non-standard) + * `@next` tag (in addition to any `@yields` tag) will be matched by a `yield` + * which uses a return value in the body of the generator (e.g., + * `const rv = yield;` or `const rv = yield value;`). This (non-standard) + * tag is intended to be used to indicate a type and/or description of + * the value expected to be supplied by the user when supplied to the iterator + * by its `next` method, as with `it.next(value)` (with the iterator being + * the `Generator` iterator that is returned by the call to the generator + * function). This option will report an error if the generator function body + * merely has plain `yield;` or `yield value;` statements without returning + * the values. Defaults to `false`. + */ next?: boolean; } ]; @@ -805,11 +2576,222 @@ export interface Rules { | [] | [ { + /** + * Defaults to `false`. Alphabetizes any items not within `tagSequence` after any + * items within `tagSequence` (or in place of the special `-other` pseudo-tag) + * are sorted. + * + * If you want all your tags alphabetized, you can supply an empty array for + * `tagSequence` along with setting this option to `true`. + */ alphabetizeExtras?: boolean; + /** + * Indicates the number of lines to be added between tag groups. Defaults to 1. + * Do not set to 0 or 2+ if you are using `tag-lines` and `"always"` and do not + * set to 1+ if you are using `tag-lines` and `"never"`. + */ linesBetween?: number; + /** + * Whether to enable reporting and fixing of line breaks within tags of a given + * tag group. Defaults to `true` which will remove any line breaks at the end of + * such tags. Do not use with `true` if you are using `tag-lines` and `always`. + */ reportIntraTagGroupSpacing?: boolean; + /** + * Whether to enable reporting and fixing of line breaks between tag groups + * as set by `linesBetween`. Defaults to `true`. Note that the very last tag + * will not have spacing applied regardless. For adding line breaks there, you + * may wish to use the `endLines` option of the `tag-lines` rule. + */ reportTagGroupSpacing?: boolean; + /** + * An array of tag group objects indicating the preferred sequence for sorting tags. + * + * Each item in the array should be an object with a `tags` property set to an array + * of tag names. + * + * Tag names earlier in the list will be arranged first. The relative position of + * tags of the same name will not be changed. + * + * Earlier groups will also be arranged before later groups, but with the added + * feature that additional line breaks may be added between (or before or after) + * such groups (depending on the setting of `linesBetween`). + * + * Tag names not in the list will be grouped together at the end. The pseudo-tag + * `-other` can be used to place them anywhere else if desired. The tags will be + * placed in their order of appearance, or alphabetized if `alphabetizeExtras` + * is enabled, see more below about that option. + * + * Defaults to the array below (noting that it is just a single tag group with + * no lines between groups by default). + * + * Please note that this order is still experimental, so if you want to retain + * a fixed order that doesn't change into the future, supply your own + * `tagSequence`. + * + * ```js + * [{tags: [ + * // Brief descriptions + * 'summary', + * 'typeSummary', + * + * // Module/file-level + * 'module', + * 'exports', + * 'file', + * 'fileoverview', + * 'overview', + * 'import', + * + * // Identifying (name, type) + * 'typedef', + * 'interface', + * 'record', + * 'template', + * 'name', + * 'kind', + * 'type', + * 'alias', + * 'external', + * 'host', + * 'callback', + * 'func', + * 'function', + * 'method', + * 'class', + * 'constructor', + * + * // Relationships + * 'modifies', + * 'mixes', + * 'mixin', + * 'mixinClass', + * 'mixinFunction', + * 'namespace', + * 'borrows', + * 'constructs', + * 'lends', + * 'implements', + * 'requires', + * + * // Long descriptions + * 'desc', + * 'description', + * 'classdesc', + * 'tutorial', + * 'copyright', + * 'license', + * + * // Simple annotations + * 'const', + * 'constant', + * 'final', + * 'global', + * 'readonly', + * 'abstract', + * 'virtual', + * 'var', + * 'member', + * 'memberof', + * 'memberof!', + * 'inner', + * 'instance', + * 'inheritdoc', + * 'inheritDoc', + * 'override', + * 'hideconstructor', + * + * // Core function/object info + * 'param', + * 'arg', + * 'argument', + * 'prop', + * 'property', + * 'return', + * 'returns', + * + * // Important behavior details + * 'async', + * 'generator', + * 'default', + * 'defaultvalue', + * 'enum', + * 'augments', + * 'extends', + * 'throws', + * 'exception', + * 'yield', + * 'yields', + * 'event', + * 'fires', + * 'emits', + * 'listens', + * 'this', + * + * // Access + * 'static', + * 'private', + * 'protected', + * 'public', + * 'access', + * 'package', + * + * '-other', + * + * // Supplementary descriptions + * 'see', + * 'example', + * + * // METADATA + * + * // Other Closure (undocumented) metadata + * 'closurePrimitive', + * 'customElement', + * 'expose', + * 'hidden', + * 'idGenerator', + * 'meaning', + * 'ngInject', + * 'owner', + * 'wizaction', + * + * // Other Closure (documented) metadata + * 'define', + * 'dict', + * 'export', + * 'externs', + * 'implicitCast', + * 'noalias', + * 'nocollapse', + * 'nocompile', + * 'noinline', + * 'nosideeffects', + * 'polymer', + * 'polymerBehavior', + * 'preserve', + * 'struct', + * 'suppress', + * 'unrestricted', + * + * // @homer0/prettier-plugin-jsdoc metadata + * 'category', + * + * // Non-Closure metadata + * 'ignore', + * 'author', + * 'version', + * 'variation', + * 'since', + * 'deprecated', + * 'todo', + * ]}]; + * ``` + * + */ tagSequence?: { + /** + * See description on `tagSequence`. + */ tags?: string[]; }[]; } @@ -822,10 +2804,45 @@ export interface Rules { | [ "always" | "any" | "never", { + /** + * Set to `false` and use with "always" to indicate the normal lines to be + * added after tags should not be added after the final tag. + * + * Defaults to `true`. + */ applyToEndTag?: boolean; + /** + * Use with "always" to indicate the number of lines to require be present. + * + * Defaults to 1. + */ count?: number; + /** + * If not set to `null`, will enforce end lines to the given count on the + * final tag only. + * + * Defaults to `0`. + */ endLines?: number | null; + /** + * If not set to `null`, will enforce end lines to the given count before the + * first tag only, unless there is only whitespace content, in which case, + * a line count will not be enforced. + * + * Defaults to `0`. + */ startLines?: number | null; + /** + * Overrides the default behavior depending on specific tags. + * + * An object whose keys are tag names and whose values are objects with the + * following keys: + * + * 1. `lines` - Set to `always`, `never`, or `any` to override. + * 2. `count` - Overrides main `count` (for "always") + * + * Defaults to empty object. + */ tags?: { /** * This interface was referenced by `undefined`'s JSON-Schema definition @@ -844,7 +2861,16 @@ export interface Rules { | [] | [ { + /** + * This option escapes all `<` and `&` characters (except those followed by + * whitespace which are treated as literals by Visual Studio Code). Defaults to + * `false`. + */ escapeHTML?: boolean; + /** + * This option escapes the first backtick (`` ` ``) in a paired sequence. + * Defaults to `false`. + */ escapeMarkdown?: boolean; } ]; @@ -854,18 +2880,72 @@ export interface Rules { | [] | [ { + /** + * Determines how array generics are represented. Set to `angle` for the style `Array` or `square` for the style `type[]`. Defaults to "square". + */ arrayBrackets?: "angle" | "square"; + /** + * Whether to enable the fixer. Defaults to `true`. + */ enableFixer?: boolean; + /** + * Boolean value of whether to use a dot before the angled brackets of a generic (e.g., `SomeType.`). Defaults to `false`. + */ genericDot?: boolean; + /** + * A string indicating the whitespace to be added on each line preceding an + * object property-value field. Defaults to the empty string. + */ objectFieldIndent?: string; + /** + * Whether and how object field properties should be quoted (e.g., `{"a": string}`). + * Set to `single`, `double`, or `null`. Defaults to `null` (no quotes unless + * required due to special characters within the field). Digits will be kept as is, + * regardless of setting (they can either represent a digit or a string digit). + */ objectFieldQuote?: "double" | "single" | null; + /** + * For object properties, specify whether a "semicolon", "comma", "linebreak", + * "semicolon-and-linebreak", or "comma-and-linebreak" should be used after + * each object property-value pair. + * + * Defaults to `"comma"`. + */ objectFieldSeparator?: "comma" | "comma-and-linebreak" | "linebreak" | "semicolon" | "semicolon-and-linebreak"; + /** + * Whether `objectFieldSeparator` set to `"semicolon-and-linebreak"` or + * `"comma-and-linebreak"` should be allowed to optionally drop the linebreak. + * + * Defaults to `true`. + */ objectFieldSeparatorOptionalLinebreak?: boolean; + /** + * If `separatorForSingleObjectField` is not in effect (i.e., if it is `false` + * or there are multiple property-value object fields present), this property + * will determine whether to add punctuation corresponding to the + * `objectFieldSeparator` (e.g., a semicolon) to the final object field. + * Defaults to `false`. + */ objectFieldSeparatorTrailingPunctuation?: boolean; - propertyQuotes?: "double" | "single" | null; + /** + * Whether to apply the `objectFieldSeparator` (e.g., a semicolon) when there + * is only one property-value object field present. Defaults to `false`. + */ separatorForSingleObjectField?: boolean; + /** + * How string literals should be quoted (e.g., `"abc"`). Set to `single` + * or `double`. Defaults to 'single'. + */ stringQuotes?: "double" | "single"; + /** + * A string of spaces that will be added immediately after the type's initial + * curly bracket and immediately before its ending curly bracket. Defaults + * to the empty string. + */ typeBracketSpacing?: string; + /** + * Determines the spacing to add to unions (`|`). Defaults to a single space (`" "`). + */ unionSpacing?: string; } ]; @@ -875,6 +2955,15 @@ export interface Rules { | [] | [ { + /** + * Set to `false` to bulk disallow + * empty name paths with namepath groups 2 and 4 (these might often be + * expected to have an accompanying name path, though they have some + * indicative value without one; these may also allow names to be defined + * in another manner elsewhere in the block); you can use + * `settings.jsdoc.structuredTags` with the `required` key set to "name" if you + * wish to require name paths on a tag-by-tag basis. Defaults to `true`. + */ allowEmptyNamepaths?: boolean; } ]; diff --git a/src/rules/checkAccess.js b/src/rules/checkAccess.js index 178b24771..a45f3be8c 100644 --- a/src/rules/checkAccess.js +++ b/src/rules/checkAccess.js @@ -29,7 +29,7 @@ export default iterateJsdoc(({ if (accessLength > 1 || individualTagLength > 1) { report( - 'At most one access-control tag may be present on a jsdoc block.', + 'At most one access-control tag may be present on a JSDoc block.', ); } }, { diff --git a/src/rules/checkAlignment.js b/src/rules/checkAlignment.js index 69e6d2d3e..e936ad675 100644 --- a/src/rules/checkAlignment.js +++ b/src/rules/checkAlignment.js @@ -69,9 +69,12 @@ export default iterateJsdoc(({ properties: { innerIndent: { default: 1, + description: `Set to 0 if you wish to avoid the normal requirement for an inner indentation of +one space. Defaults to 1 (one space of normal inner indentation).`, type: 'integer', }, }, + type: 'object', }, ], type: 'layout', diff --git a/src/rules/checkIndentation.js b/src/rules/checkIndentation.js index 383c84a83..d8bb80f68 100644 --- a/src/rules/checkIndentation.js +++ b/src/rules/checkIndentation.js @@ -60,6 +60,25 @@ export default iterateJsdoc(({ additionalProperties: false, properties: { excludeTags: { + description: `Array of tags (e.g., \`['example', 'description']\`) whose content will be +"hidden" from the \`check-indentation\` rule. Defaults to \`['example']\`. + +By default, the whole JSDoc block will be checked for invalid padding. +That would include \`@example\` blocks too, which can get in the way +of adding full, readable examples of code without ending up with multiple +linting issues. + +When disabled (by passing \`excludeTags: []\` option), the following code *will* +report a padding issue: + +\`\`\`js +/** + * @example + * anArray.filter((a) => { + * return a.b; + * }); + */ +\`\`\``, items: { pattern: '^\\S+$', type: 'string', diff --git a/src/rules/checkLineAlignment.js b/src/rules/checkLineAlignment.js index 416065492..8555073f2 100644 --- a/src/rules/checkLineAlignment.js +++ b/src/rules/checkLineAlignment.js @@ -319,6 +319,14 @@ export default iterateJsdoc(({ fixable: 'whitespace', schema: [ { + description: `If the string value is +\`"always"\` then a problem is raised when the lines are not aligned. +If it is \`"never"\` then a problem should be raised when there is more than +one space between each line's parts. If it is \`"any"\`, no alignment is made. +Defaults to \`"never"\`. + +Note that in addition to alignment, the "never" and "always" options will both +ensure that at least one space is present after the asterisk delimiter.`, enum: [ 'always', 'never', 'any', ], @@ -329,38 +337,54 @@ export default iterateJsdoc(({ properties: { customSpacings: { additionalProperties: false, + description: `An object with any of the following spacing keys set to an integer. +If a spacing is not defined, it defaults to one. +`, properties: { postDelimiter: { + description: 'Affects spacing after the asterisk (e.g., `* @param`)', type: 'integer', }, postHyphen: { + description: 'Affects spacing after any hyphens in the description (e.g., `* @param {someType} name - A description`)', type: 'integer', }, postName: { + description: 'Affects spacing after the name (e.g., `* @param {someType} name `)', type: 'integer', }, postTag: { + description: 'Affects spacing after the tag (e.g., `* @param `)', type: 'integer', }, postType: { + description: 'Affects spacing after the type (e.g., `* @param {someType} `)', type: 'integer', }, }, + type: 'object', }, disableWrapIndent: { + description: 'Disables `wrapIndent`; existing wrap indentation is preserved without changes.', type: 'boolean', }, preserveMainDescriptionPostDelimiter: { default: false, + description: `A boolean to determine whether to preserve the post-delimiter spacing of the +main description. If \`false\` or unset, will be set to a single space.`, type: 'boolean', }, tags: { + description: `Use this to change the tags which are sought for alignment changes. Defaults to an array of +\`['param', 'arg', 'argument', 'property', 'prop', 'returns', 'return', 'template']\`.`, items: { type: 'string', }, type: 'array', }, wrapIndent: { + description: `The indent that will be applied for tag text after the first line. +Default to the empty string (no indent).`, type: 'string', }, }, diff --git a/src/rules/checkParamNames.js b/src/rules/checkParamNames.js index 044233756..1542042ff 100644 --- a/src/rules/checkParamNames.js +++ b/src/rules/checkParamNames.js @@ -442,27 +442,88 @@ export default iterateJsdoc(({ additionalProperties: false, properties: { allowExtraTrailingParamDocs: { + description: `If set to \`true\`, this option will allow extra \`@param\` definitions (e.g., +representing future expected or virtual params) to be present without needing +their presence within the function signature. Other inconsistencies between +\`@param\`'s and present function parameters will still be reported.`, type: 'boolean', }, checkDestructured: { + description: 'Whether to check destructured properties. Defaults to `true`.', type: 'boolean', }, checkRestProperty: { + description: `If set to \`true\`, will require that rest properties are documented and +that any extraneous properties (which may have been within the rest property) +are documented. Defaults to \`false\`.`, type: 'boolean', }, checkTypesPattern: { + description: `Defines a regular expression pattern to indicate which types should be +checked for destructured content (and that those not matched should not +be checked). + +When one specifies a type, unless it is of a generic type, like \`object\` +or \`array\`, it may be considered unnecessary to have that object's +destructured components required, especially where generated docs will +link back to the specified type. For example: + +\`\`\`js +/** + * @param {SVGRect} bbox - a SVGRect + */ +export const bboxToObj = function ({x, y, width, height}) { + return {x, y, width, height}; +}; +\`\`\` + +By default \`checkTypesPattern\` is set to +\`/^(?:[oO]bject|[aA]rray|PlainObject|Generic(?:Object|Array))$/v\`, +meaning that destructuring will be required only if the type of the \`@param\` +(the text between curly brackets) is a match for "Object" or "Array" (with or +without initial caps), "PlainObject", or "GenericObject", "GenericArray" (or +if no type is present). So in the above example, the lack of a match will +mean that no complaint will be given about the undocumented destructured +parameters. + +Note that the \`/\` delimiters are optional, but necessary to add flags. + +Defaults to using (only) the \`v\` flag, so to add your own flags, encapsulate +your expression as a string, but like a literal, e.g., \`/^object$/vi\`. + +You could set this regular expression to a more expansive list, or you +could restrict it such that even types matching those strings would not +need destructuring.`, type: 'string', }, disableExtraPropertyReporting: { + description: `Whether to check for extra destructured properties. Defaults to \`false\`. Change +to \`true\` if you want to be able to document properties which are not actually +destructured. Keep as \`false\` if you expect properties to be documented in +their own types. Note that extra properties will always be reported if another +item at the same level is destructured as destructuring will prevent other +access and this option is only intended to permit documenting extra properties +that are available and actually used in the function.`, type: 'boolean', }, disableMissingParamChecks: { + description: 'Whether to avoid checks for missing `@param` definitions. Defaults to `false`. Change to `true` if you want to be able to omit properties.', type: 'boolean', }, enableFixer: { + description: `Set to \`true\` to auto-remove \`@param\` duplicates (based on identical +names). + +Note that this option will remove duplicates of the same name even if +the definitions do not match in other ways (e.g., the second param will +be removed even if it has a different type or description).`, type: 'boolean', }, useDefaultObjectProperties: { + description: `Set to \`true\` if you wish to avoid reporting of child property documentation +where instead of destructuring, a whole plain object is supplied as default +value but you wish its keys to be considered as signalling that the properties +are present and can therefore be documented. Defaults to \`false\`.`, type: 'boolean', }, }, diff --git a/src/rules/checkPropertyNames.js b/src/rules/checkPropertyNames.js index dc778ce57..5a9a1db17 100644 --- a/src/rules/checkPropertyNames.js +++ b/src/rules/checkPropertyNames.js @@ -141,6 +141,12 @@ export default iterateJsdoc(({ additionalProperties: false, properties: { enableFixer: { + description: `Set to \`true\` to auto-remove \`@property\` duplicates (based on +identical names). + +Note that this option will remove duplicates of the same name even if +the definitions do not match in other ways (e.g., the second property will +be removed even if it has a different type or description).`, type: 'boolean', }, }, diff --git a/src/rules/checkTagNames.js b/src/rules/checkTagNames.js index 042d316f3..46ad74a7d 100644 --- a/src/rules/checkTagNames.js +++ b/src/rules/checkTagNames.js @@ -291,18 +291,89 @@ export default iterateJsdoc(({ additionalProperties: false, properties: { definedTags: { + description: `Use an array of \`definedTags\` strings to configure additional, allowed tags. +The format is as follows: + +\`\`\`json +{ + "definedTags": ["note", "record"] +} +\`\`\``, items: { type: 'string', }, type: 'array', }, enableFixer: { + description: 'Set to `false` to disable auto-removal of types that are redundant with the [`typed` option](#typed).', type: 'boolean', }, jsxTags: { + description: `If this is set to \`true\`, all of the following tags used to control JSX output are allowed: + +\`\`\` +jsx +jsxFrag +jsxImportSource +jsxRuntime +\`\`\` + +For more information, see the [babel documentation](https://babeljs.io/docs/en/babel-plugin-transform-react-jsx).`, type: 'boolean', }, typed: { + description: `If this is set to \`true\`, additionally checks for tag names that are redundant when using a type checker such as TypeScript. + +These tags are always unnecessary when using TypeScript or similar: + +\`\`\` +augments +callback +class +enum +implements +private +property +protected +public +readonly +this +type +typedef +\`\`\` + +These tags are unnecessary except when inside a TypeScript \`declare\` context: + +\`\`\` +abstract +access +class +constant +constructs +default +enum +export +exports +function +global +inherits +instance +interface +member +memberof +memberOf +method +mixes +mixin +module +name +namespace +override +property +requires +static +this +\`\`\``, type: 'boolean', }, }, diff --git a/src/rules/checkTypes.js b/src/rules/checkTypes.js index 652069b24..009171e35 100644 --- a/src/rules/checkTypes.js +++ b/src/rules/checkTypes.js @@ -89,13 +89,24 @@ export default buildRejectOrPreferRuleDefinition({ additionalProperties: false, properties: { exemptTagContexts: { + description: 'Avoids reporting when a bad type is found on a specified tag.', items: { additionalProperties: false, properties: { tag: { + description: 'Set a key `tag` to the tag to exempt', type: 'string', }, types: { + description: `Set to \`true\` to indicate that any types on that tag will be allowed, +or to an array of strings which will only allow specific bad types. +If an array of strings is given, these must match the type exactly, +e.g., if you only allow \`"object"\`, it will not allow +\`"object"\`. Note that this is different from the +behavior of \`settings.jsdoc.preferredTypes\`. This option is useful +for normally restricting generic types like \`object\` with +\`preferredTypes\`, but allowing \`typedef\` to indicate that its base +type is \`object\`.`, oneOf: [ { type: 'boolean', @@ -114,10 +125,14 @@ export default buildRejectOrPreferRuleDefinition({ type: 'array', }, noDefaults: { + description: `Insists that only the supplied option type +map is to be used, and that the default preferences (such as "string" +over "String") will not be enforced. The option's default is \`false\`.`, type: 'boolean', }, unifyParentAndChildTypeChecks: { - description: '@deprecated Use the `preferredTypes[preferredType]` setting of the same name instead', + description: `@deprecated Use the \`preferredTypes[preferredType]\` setting of the same name instead. +If this option is \`true\`, will currently override \`unifyParentAndChildTypeChecks\` on the \`preferredTypes\` setting.`, type: 'boolean', }, }, diff --git a/src/rules/checkValues.js b/src/rules/checkValues.js index b131801df..680c27fb8 100644 --- a/src/rules/checkValues.js +++ b/src/rules/checkValues.js @@ -215,6 +215,8 @@ export default iterateJsdoc(({ additionalProperties: false, properties: { allowedAuthors: { + description: `An array of allowable author values. If absent, only non-whitespace will +be checked for.`, items: { type: 'string', }, @@ -232,11 +234,25 @@ export default iterateJsdoc(({ type: 'boolean', }, ], + description: `An array of allowable license values or \`true\` to allow any license text. +If present as an array, will be used in place of [SPDX identifiers](https://spdx.org/licenses/).`, }, licensePattern: { + description: `A string to be converted into a \`RegExp\` (with \`v\` flag) and whose first +parenthetical grouping, if present, will match the portion of the license +description to check (if no grouping is present, then the whole portion +matched will be used). Defaults to \`/([^\\n\\r]*)/gv\`, i.e., the SPDX expression +is expected before any line breaks. + +Note that the \`/\` delimiters are optional, but necessary to add flags. + +Defaults to using the \`v\` flag, so to add your own flags, encapsulate +your expression as a string, but like a literal, e.g., \`/^mit$/vi\`.`, type: 'string', }, numericOnlyVariation: { + description: `Whether to enable validation that \`@variation\` must be a number. Defaults to +\`false\`.`, type: 'boolean', }, }, diff --git a/src/rules/convertToJsdocComments.js b/src/rules/convertToJsdocComments.js index cf0c764b3..162793339 100644 --- a/src/rules/convertToJsdocComments.js +++ b/src/rules/convertToJsdocComments.js @@ -303,12 +303,24 @@ export default { additionalProperties: false, properties: { allowedPrefixes: { + description: `An array of prefixes to allow at the beginning of a comment. + +Defaults to \`['@ts-', 'istanbul ', 'c8 ', 'v8 ', 'eslint', 'prettier-']\`. + +Supplying your own value overrides the defaults.`, items: { type: 'string', }, type: 'array', }, contexts: { + description: `The contexts array which will be checked for preceding content. + +Can either be strings or an object with a \`context\` string and an optional, default \`false\` \`inlineCommentBlock\` boolean. + +Defaults to \`ArrowFunctionExpression\`, \`FunctionDeclaration\`, +\`FunctionExpression\`, \`TSDeclareFunction\`. +`, items: { anyOf: [ { @@ -331,6 +343,11 @@ export default { type: 'array', }, contextsAfter: { + description: `The contexts array which will be checked for content on the same line after. + +Can either be strings or an object with a \`context\` string and an optional, default \`false\` \`inlineCommentBlock\` boolean. + +Defaults to an empty array.`, items: { anyOf: [ { @@ -353,6 +370,12 @@ export default { type: 'array', }, contextsBeforeAndAfter: { + description: `The contexts array which will be checked for content before and on the same +line after. + +Can either be strings or an object with a \`context\` string and an optional, default \`false\` \`inlineCommentBlock\` boolean. + +Defaults to \`VariableDeclarator\`, \`TSPropertySignature\`, \`PropertyDefinition\`.`, items: { anyOf: [ { @@ -375,15 +398,40 @@ export default { type: 'array', }, enableFixer: { + description: 'Set to `false` to disable fixing.', type: 'boolean', }, enforceJsdocLineStyle: { + description: `What policy to enforce on the conversion of non-JSDoc comments without +line breaks. (Non-JSDoc (mulitline) comments with line breaks will always +be converted to \`multi\` style JSDoc comments.) + +- \`multi\` - Convert to multi-line style +\`\`\`js +/** + * Some text + */ +\`\`\` +- \`single\` - Convert to single-line style +\`\`\`js +/** Some text */ +\`\`\` + +Defaults to \`multi\`. +`, enum: [ 'multi', 'single', ], type: 'string', }, lineOrBlockStyle: { + description: `What style of comments to which to apply JSDoc conversion. + +- \`block\` - Applies to block-style comments (\`/* ... */\`) +- \`line\` - Applies to line-style comments (\`// ...\`) +- \`both\` - Applies to both block and line-style comments + +Defaults to \`both\`.`, enum: [ 'block', 'line', 'both', ], diff --git a/src/rules/emptyTags.js b/src/rules/emptyTags.js index b34fdc40d..c3246f158 100644 --- a/src/rules/emptyTags.js +++ b/src/rules/emptyTags.js @@ -84,6 +84,15 @@ export default iterateJsdoc(({ additionalProperties: false, properties: { tags: { + description: `If you want additional tags to be checked for their descriptions, you may +add them within this option. + +\`\`\`js +{ + 'jsdoc/empty-tags': ['error', {tags: ['event']}] +} +\`\`\` +`, items: { type: 'string', }, diff --git a/src/rules/implementsOnClasses.js b/src/rules/implementsOnClasses.js index 266c7cab7..7660000b0 100644 --- a/src/rules/implementsOnClasses.js +++ b/src/rules/implementsOnClasses.js @@ -34,6 +34,20 @@ export default iterateJsdoc(({ additionalProperties: false, properties: { contexts: { + description: `Set this to an array of strings representing the AST context (or an object with +\`context\` and \`comment\` properties) where you wish the rule to be applied. + +\`context\` defaults to \`any\` and \`comment\` defaults to no specific comment context. + +Overrides the default contexts (\`ArrowFunctionExpression\`, \`FunctionDeclaration\`, +\`FunctionExpression\`). Set to \`"any"\` if you want +the rule to apply to any JSDoc block throughout your files (as is necessary +for finding function blocks not attached to a function declaration or +expression, i.e., \`@callback\` or \`@function\` (or its aliases \`@func\` or +\`@method\`) (including those associated with an \`@interface\`). + +See the ["AST and Selectors"](../#advanced-ast-and-selectors) +section of our Advanced docs for more on the expected format.`, items: { anyOf: [ { diff --git a/src/rules/informativeDocs.js b/src/rules/informativeDocs.js index 6591bf020..3be782e91 100644 --- a/src/rules/informativeDocs.js +++ b/src/rules/informativeDocs.js @@ -156,6 +156,23 @@ export default iterateJsdoc(({ additionalProperties: false, properties: { aliases: { + description: `The \`aliases\` option allows indicating words as synonyms (aliases) of each other. + +For example, with \`{ aliases: { emoji: ["smiley", "winkey"] } }\`, the following comment would be considered uninformative: + +\`\`\`js +/** A smiley/winkey. */ +let emoji; +\`\`\` + +The default \`aliases\` option is: + +\`\`\`json +{ + "a": ["an", "our"] +} +\`\`\` +`, patternProperties: { '.*': { items: { @@ -166,12 +183,40 @@ export default iterateJsdoc(({ }, }, excludedTags: { + description: `Tags that should not be checked for valid contents. + +For example, with \`{ excludedTags: ["category"] }\`, the following comment would not be considered uninformative: + +\`\`\`js +/** @category Types */ +function computeTypes(node) { + // ... +} +\`\`\` + +No tags are excluded by default. +`, items: { type: 'string', }, type: 'array', }, uselessWords: { + description: `Words that are ignored when searching for one that adds meaning. + +For example, with \`{ uselessWords: ["our"] }\`, the following comment would be considered uninformative: + +\`\`\`js +/** Our text. */ +let text; +\`\`\` + +The default \`uselessWords\` option is: + +\`\`\`json +["a", "an", "i", "in", "of", "s", "the"] +\`\`\` +`, items: { type: 'string', }, diff --git a/src/rules/linesBeforeBlock.js b/src/rules/linesBeforeBlock.js index 496ad8d35..c1983fb59 100644 --- a/src/rules/linesBeforeBlock.js +++ b/src/rules/linesBeforeBlock.js @@ -108,21 +108,35 @@ export default iterateJsdoc(({ additionalProperties: false, properties: { checkBlockStarts: { + description: `Whether to additionally check the start of blocks, such as classes or functions. +Defaults to \`false\`. +`, type: 'boolean', }, excludedTags: { + description: `An array of tags whose presence in the JSDoc block will prevent the +application of the rule. Defaults to \`['type']\` (i.e., if \`@type\` is present, +lines before the block will not be added). +`, items: { type: 'string', }, type: 'array', }, ignoreSameLine: { + description: `This option excludes cases where the JSDoc block occurs on the same line as a +preceding code or comment. Defaults to \`true\`. +`, type: 'boolean', }, ignoreSingleLines: { + description: `This option excludes cases where the JSDoc block is only one line long. +Defaults to \`true\`. +`, type: 'boolean', }, lines: { + description: 'The minimum number of lines to require. Defaults to 1.', type: 'integer', }, }, diff --git a/src/rules/matchDescription.js b/src/rules/matchDescription.js index fbd0b4d2c..f06caa8ff 100644 --- a/src/rules/matchDescription.js +++ b/src/rules/matchDescription.js @@ -173,6 +173,19 @@ export default iterateJsdoc(({ additionalProperties: false, properties: { contexts: { + description: `Set this to an array of strings representing the AST context (or an object with +optional \`context\` and \`comment\` properties) where you wish the rule to be applied (e.g., +\`ClassDeclaration\` for ES6 classes). + +\`context\` defaults to \`any\` and \`comment\` defaults to no specific comment context. + +Overrides the default contexts (\`ArrowFunctionExpression\`, \`FunctionDeclaration\`, +\`FunctionExpression\`). Set to \`"any"\` if you want the rule to apply to any +JSDoc block throughout your files. + +See the ["AST and Selectors"](../#advanced-ast-and-selectors) +section of our Advanced docs for more on the expected format. +`, items: { anyOf: [ { @@ -195,6 +208,42 @@ export default iterateJsdoc(({ type: 'array', }, mainDescription: { + description: `If you wish to override the main block description without changing the +default \`match-description\` (which can cascade to the \`tags\` with \`true\`), +you may use \`mainDescription\`: + +\`\`\`js +{ + 'jsdoc/match-description': ['error', { + mainDescription: '[A-Z].*\\\\.', + tags: { + param: true, + returns: true + } + }] +} +\`\`\` + +There is no need to add \`mainDescription: true\`, as by default, the main +block description (and only the main block description) is linted, though you +may disable checking it by setting it to \`false\`. + +You may also provide an object with \`message\`: + +\`\`\`js +{ + 'jsdoc/match-description': ['error', { + mainDescription: { + message: 'Capitalize first word of JSDoc block descriptions', + match: '[A-Z].*\\\\.' + }, + tags: { + param: true, + returns: true + } + }] +} +\`\`\``, oneOf: [ { format: 'regex', @@ -226,16 +275,96 @@ export default iterateJsdoc(({ ], }, matchDescription: { + description: `You can supply your own expression to override the default, passing a +\`matchDescription\` string on the options object. + +Defaults to using (only) the \`v\` flag, so +to add your own flags, encapsulate your expression as a string, but like a +literal, e.g., \`/[A-Z].*\\./vi\`. + +\`\`\`js +{ + 'jsdoc/match-description': ['error', {matchDescription: '[A-Z].*\\\\.'}] +} +\`\`\``, format: 'regex', type: 'string', }, message: { + description: `You may provide a custom default message by using the following format: + +\`\`\`js +{ + 'jsdoc/match-description': ['error', { + message: 'The default description should begin with a capital letter.' + }] +} +\`\`\` + +This can be overridden per tag or for the main block description by setting +\`message\` within \`tags\` or \`mainDescription\`, respectively. +`, type: 'string', }, nonemptyTags: { + description: `If not set to \`false\`, will enforce that the following tags have at least +some content: + +- \`@copyright\` +- \`@example\` +- \`@see\` +- \`@todo\` + +If you supply your own tag description for any of the above tags in \`tags\`, +your description will take precedence.`, type: 'boolean', }, tags: { + description: `If you want different regular expressions to apply to tags, you may use +the \`tags\` option object: + +\`\`\`js +{ + 'jsdoc/match-description': ['error', {tags: { + param: '\\\\- [A-Z].*\\\\.', + returns: '[A-Z].*\\\\.' + }}] +} +\`\`\` + +In place of a string, you can also add \`true\` to indicate that a particular +tag should be linted with the \`matchDescription\` value (or the default). + +\`\`\`js +{ + 'jsdoc/match-description': ['error', {tags: { + param: true, + returns: true + }}] +} +\`\`\` + +Alternatively, you may supply an object with a \`message\` property to indicate +the error message for that tag. + +\`\`\`js +{ + 'jsdoc/match-description': ['error', {tags: { + param: {message: 'Begin with a hyphen', match: '\\\\- [A-Z].*\\\\.'}, + returns: {message: 'Capitalize for returns (the default)', match: true} + }}] +} +\`\`\` + +The tags \`@param\`/\`@arg\`/\`@argument\` and \`@property\`/\`@prop\` will be properly +parsed to ensure that the matched "description" text includes only the text +after the name. + +All other tags will treat the text following the tag name, a space, and +an optional curly-bracketed type expression (and another space) as part of +its "description" (e.g., for \`@returns {someType} some description\`, the +description is \`some description\` while for \`@some-tag xyz\`, the description +is \`xyz\`).`, patternProperties: { '.*': { oneOf: [ diff --git a/src/rules/matchName.js b/src/rules/matchName.js index 908a12d46..aef3fc9ee 100644 --- a/src/rules/matchName.js +++ b/src/rules/matchName.js @@ -106,28 +106,58 @@ export default iterateJsdoc(({ additionalProperties: false, properties: { match: { + description: `\`match\` is a required option containing an array of objects which determine +the conditions whereby a name is reported as being problematic. + +These objects can have any combination of the following groups of optional +properties, all of which act to confine one another. + +Note that \`comment\`, even if targeting a specific tag, is used to match the +whole block. So if a \`comment\` finds its specific tag, it may still apply +fixes found by the likes of \`disallowName\` even when a different tag has the +disallowed name. An alternative is to ensure that \`comment\` finds the specific +tag of the desired tag and/or name and no \`disallowName\` (or \`allowName\`) is +supplied. In such a case, only one error will be reported, but no fixer will +be applied, however. +`, items: { additionalProperties: false, properties: { allowName: { + description: `Indicates which names are allowed for the given tag (or \`*\`). +Accepts a string regular expression (optionally wrapped between two +\`/\` delimiters followed by optional flags) used to match the name.`, type: 'string', }, comment: { + description: 'As with `context` but AST for the JSDoc block comment and types.', type: 'string', }, context: { + description: `AST to confine the allowing or disallowing to JSDoc blocks +associated with a particular context. See the +["AST and Selectors"](../#advanced-ast-and-selectors) +section of our Advanced docs for more on the expected format.`, type: 'string', }, disallowName: { + description: 'As with `allowName` but indicates names that are not allowed.', type: 'string', }, message: { + description: 'An optional custom message to use when there is a match.', type: 'string', }, replacement: { + description: `If \`disallowName\` is supplied and this value is present, it +will replace the matched \`disallowName\` text.`, type: 'string', }, tags: { + description: `This array should include tag names or \`*\` to indicate the + match will apply for all tags (except as confined by any context + properties). If \`*\` is not used, then these rules will only apply to + the specified tags. If \`tags\` is omitted, then \`*\` is assumed.`, items: { type: 'string', }, diff --git a/src/rules/multilineBlocks.js b/src/rules/multilineBlocks.js index a35bc05bb..aca726673 100644 --- a/src/rules/multilineBlocks.js +++ b/src/rules/multilineBlocks.js @@ -331,7 +331,7 @@ export default iterateJsdoc(({ }).length) ) { utils.reportJSDoc( - 'Multiline jsdoc blocks are prohibited by ' + + 'Multiline JSDoc blocks are prohibited by ' + 'your configuration but fixing would result in a single ' + 'line block which you have prohibited with `noSingleLineBlocks`.', ); @@ -342,7 +342,7 @@ export default iterateJsdoc(({ if (jsdoc.tags.length > 1) { if (!allowMultipleTags) { utils.reportJSDoc( - 'Multiline jsdoc blocks are prohibited by ' + + 'Multiline JSDoc blocks are prohibited by ' + 'your configuration but the block has multiple tags.', ); @@ -351,7 +351,7 @@ export default iterateJsdoc(({ } else if (jsdoc.tags.length === 1 && jsdoc.description.trim()) { if (!allowMultipleTags) { utils.reportJSDoc( - 'Multiline jsdoc blocks are prohibited by ' + + 'Multiline JSDoc blocks are prohibited by ' + 'your configuration but the block has a description with a tag.', ); @@ -419,7 +419,7 @@ export default iterateJsdoc(({ }; utils.reportJSDoc( - 'Multiline jsdoc blocks are prohibited by ' + + 'Multiline JSDoc blocks are prohibited by ' + 'your configuration.', null, fixer, @@ -434,7 +434,7 @@ export default iterateJsdoc(({ iterateAllJsdocs: true, meta: { docs: { - description: 'Controls how and whether jsdoc blocks can be expressed as single or multiple line blocks.', + description: 'Controls how and whether JSDoc blocks can be expressed as single or multiple line blocks.', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/multiline-blocks.md#repos-sticky-header', }, fixable: 'code', @@ -443,9 +443,28 @@ export default iterateJsdoc(({ additionalProperties: false, properties: { allowMultipleTags: { + description: `If \`noMultilineBlocks\` is set to \`true\` with this option and multiple tags are +found in a block, an error will not be reported. + +Since multiple-tagged lines cannot be collapsed into a single line, this option +prevents them from being reported. Set to \`false\` if you really want to report +any blocks. + +This option will also be applied when there is a block description and a single +tag (since a description cannot precede a tag on a single line, and also +cannot be reliably added after the tag either). + +Defaults to \`true\`.`, type: 'boolean', }, minimumLengthForMultiline: { + description: `If \`noMultilineBlocks\` is set with this numeric option, multiline blocks will +be permitted if containing at least the given amount of text. + +If not set, multiline blocks will not be permitted regardless of length unless +a relevant tag is present and \`multilineTags\` is set. + +Defaults to not being in effect.`, type: 'integer', }, multilineTags: { @@ -462,23 +481,76 @@ export default iterateJsdoc(({ type: 'array', }, ], + description: `If \`noMultilineBlocks\` is set with this option, multiline blocks may be allowed +regardless of length as long as a tag or a tag of a certain type is present. + +If \`*\` is included in the array, the presence of a tags will allow for +multiline blocks (but not when without any tags unless the amount of text is +over an amount specified by \`minimumLengthForMultiline\`). + +If the array does not include \`*\` but lists certain tags, the presence of +such a tag will cause multiline blocks to be allowed. + +You may set this to an empty array to prevent any tag from permitting multiple +lines. + +Defaults to \`['*']\`. +`, }, noFinalLineText: { + description: `For multiline blocks, any non-whitespace text preceding the \`*/\` on the final +line will be reported. (Text preceding a newline is not reported.) + +\`noMultilineBlocks\` will have priority over this rule if it applies. + +Defaults to \`true\`.`, type: 'boolean', }, noMultilineBlocks: { + description: `Requires that JSDoc blocks are restricted to single lines only unless impacted +by the options \`minimumLengthForMultiline\`, \`multilineTags\`, or +\`allowMultipleTags\`. + +Defaults to \`false\`.`, type: 'boolean', }, noSingleLineBlocks: { + description: `If this is \`true\`, any single line blocks will be reported, except those which +are whitelisted in \`singleLineTags\`. + +Defaults to \`false\`. +`, type: 'boolean', }, noZeroLineText: { + description: `For multiline blocks, any non-whitespace text immediately after the \`/**\` and +space will be reported. (Text after a newline is not reported.) + +\`noMultilineBlocks\` will have priority over this rule if it applies. + +Defaults to \`true\`.`, type: 'boolean', }, requireSingleLineUnderCount: { + description: `If this number is set, it indicates a minimum line width for a single line of +JSDoc content spread over a multi-line comment block. If a single line is under +the minimum length, it will be reported so as to enforce single line JSDoc blocks +for such cases. Blocks are not reported which have multi-line descriptions, +multiple tags, a block description and tag, or tags with multi-line types or +descriptions. + +Defaults to \`null\`. +`, type: 'number', }, singleLineTags: { + description: `An array of tags which can nevertheless be allowed as single line blocks when +\`noSingleLineBlocks\` is set. You may set this to a empty array to +cause all single line blocks to be reported. If \`'*'\` is present, then +the presence of a tag will allow single line blocks (but not if a tag is +missing). + +Defaults to \`['lends', 'type']\`.`, items: { type: 'string', }, diff --git a/src/rules/noBadBlocks.js b/src/rules/noBadBlocks.js index f44825e87..c4033bf10 100644 --- a/src/rules/noBadBlocks.js +++ b/src/rules/noBadBlocks.js @@ -3,7 +3,7 @@ import { parse as commentParser, } from 'comment-parser'; -// Neither a single nor 3+ asterisks are valid jsdoc per +// Neither a single nor 3+ asterisks are valid JSDoc per // https://jsdoc.app/about-getting-started.html#adding-documentation-comments-to-your-code const commentRegexp = /^\/\*(?!\*)/v; const extraAsteriskCommentRegexp = /^\/\*{3,}/v; @@ -93,7 +93,7 @@ export default iterateJsdoc(({ checkFile: true, meta: { docs: { - description: 'This rule checks for multi-line-style comments which fail to meet the criteria of a jsdoc block.', + description: 'This rule checks for multi-line-style comments which fail to meet the criteria of a JSDoc block.', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-bad-blocks.md#repos-sticky-header', }, fixable: 'code', @@ -102,12 +102,21 @@ export default iterateJsdoc(({ additionalProperties: false, properties: { ignore: { + description: `An array of directives that will not be reported if present at the beginning of +a multi-comment block and at-sign \`/* @\`. + +Defaults to \`['ts-check', 'ts-expect-error', 'ts-ignore', 'ts-nocheck']\` +(some directives [used by TypeScript](https://www.typescriptlang.org/docs/handbook/intro-to-js-ts.html#ts-check)). +`, items: { type: 'string', }, type: 'array', }, preventAllMultiAsteriskBlocks: { + description: `A boolean (defaulting to \`false\`) which if \`true\` will prevent all +JSDoc-like blocks with more than two initial asterisks even those without +apparent tag content.`, type: 'boolean', }, }, diff --git a/src/rules/noBlankBlocks.js b/src/rules/noBlankBlocks.js index e4b53a979..6915f9fab 100644 --- a/src/rules/noBlankBlocks.js +++ b/src/rules/noBlankBlocks.js @@ -43,9 +43,11 @@ export default iterateJsdoc(({ additionalProperties: false, properties: { enableFixer: { + description: 'Whether or not to auto-remove the blank block. Defaults to `false`.', type: 'boolean', }, }, + type: 'object', }, ], type: 'suggestion', diff --git a/src/rules/noDefaults.js b/src/rules/noDefaults.js index 4861a9b6e..8e7f73fdf 100644 --- a/src/rules/noDefaults.js +++ b/src/rules/noDefaults.js @@ -52,6 +52,20 @@ export default iterateJsdoc(({ additionalProperties: false, properties: { contexts: { + description: `Set this to an array of strings representing the AST context (or an object with +optional \`context\` and \`comment\` properties) where you wish the rule to be applied. + +\`context\` defaults to \`any\` and \`comment\` defaults to no specific comment context. + +Overrides the default contexts (\`ArrowFunctionExpression\`, \`FunctionDeclaration\`, +\`FunctionExpression\`). Set to \`"any"\` if you want +the rule to apply to any JSDoc block throughout your files (as is necessary +for finding function blocks not attached to a function declaration or +expression, i.e., \`@callback\` or \`@function\` (or its aliases \`@func\` or +\`@method\`) (including those associated with an \`@interface\`). + +See the ["AST and Selectors"](../#advanced-ast-and-selectors) +section of our Advanced docs for more on the expected format.`, items: { anyOf: [ { @@ -74,6 +88,11 @@ export default iterateJsdoc(({ type: 'array', }, noOptionalParamNames: { + description: `Set this to \`true\` to report the presence of optional parameters. May be +used if the project is insisting on optionality being indicated by +the presence of ES6 default parameters (bearing in mind that such +"defaults" are only applied when the supplied value is missing or +\`undefined\` but not for \`null\` or other "falsey" values).`, type: 'boolean', }, }, diff --git a/src/rules/noMissingSyntax.js b/src/rules/noMissingSyntax.js index 417d68373..fa50b21d4 100644 --- a/src/rules/noMissingSyntax.js +++ b/src/rules/noMissingSyntax.js @@ -101,7 +101,7 @@ export default iterateJsdoc(({ // Report when MISSING contexts.some((cntxt) => { const contextStr = typeof cntxt === 'object' ? cntxt.context ?? 'any' : cntxt; - const comment = typeof cntxt === 'string' ? '' : cntxt?.comment; + const comment = typeof cntxt === 'string' ? '' : cntxt?.comment ?? ''; const contextKey = contextStr === 'any' ? 'undefined' : contextStr; @@ -159,6 +159,27 @@ export default iterateJsdoc(({ additionalProperties: false, properties: { contexts: { + description: `Set this to an array of strings representing the AST context (or an object with +optional \`context\` and \`comment\` properties) where you wish the rule to be applied. + +\`context\` defaults to \`any\` and \`comment\` defaults to no specific comment context. + +Use the \`minimum\` property (defaults to 1) to indicate how many are required +for the rule to be reported. + +Use the \`message\` property to indicate the specific error to be shown when an +error is reported for that context being found missing. You may use +\`{{context}}\` and \`{{comment}}\` with such messages. Defaults to +\`"Syntax is required: {{context}}"\`, or with a comment, to +\`"Syntax is required: {{context}} with {{comment}}"\`. + +Set to \`"any"\` if you want the rule to apply to any JSDoc block throughout +your files (as is necessary for finding function blocks not attached to a +function declaration or expression, i.e., \`@callback\` or \`@function\` (or its +aliases \`@func\` or \`@method\`) (including those associated with an \`@interface\`). + +See the ["AST and Selectors"](../#advanced-ast-and-selectors) +section of our Advanced docs for more on the expected format.`, items: { anyOf: [ { diff --git a/src/rules/noMultiAsterisks.js b/src/rules/noMultiAsterisks.js index 282f5da41..2343f0ce7 100644 --- a/src/rules/noMultiAsterisks.js +++ b/src/rules/noMultiAsterisks.js @@ -116,12 +116,41 @@ export default iterateJsdoc(({ additionalProperties: false, properties: { allowWhitespace: { + description: `Set to \`true\` if you wish to allow asterisks after a space (as with Markdown): + +\`\`\`js +/** + * *bold* text + */ +\`\`\` + +Defaults to \`false\`.`, type: 'boolean', }, preventAtEnd: { + description: `Prevent the likes of this: + +\`\`\`js +/** + * + * + **/ +\`\`\` + +Defaults to \`true\`.`, type: 'boolean', }, preventAtMiddleLines: { + description: `Prevent the likes of this: + +\`\`\`js +/** + * + ** + */ +\`\`\` + +Defaults to \`true\`.`, type: 'boolean', }, }, diff --git a/src/rules/noRestrictedSyntax.js b/src/rules/noRestrictedSyntax.js index e2abc7df1..a749268cb 100644 --- a/src/rules/noRestrictedSyntax.js +++ b/src/rules/noRestrictedSyntax.js @@ -54,6 +54,23 @@ export default iterateJsdoc(({ additionalProperties: false, properties: { contexts: { + description: `Set this to an array of strings representing the AST context (or an object with +\`context\` and \`comment\` properties) where you wish the rule to be applied. + +\`context\` defaults to \`any\` and \`comment\` defaults to no specific comment context. + +Use the \`message\` property to indicate the specific error to be shown when an +error is reported for that context being found. Defaults to +\`"Syntax is restricted: {{context}}"\`, or with a comment, to +\`"Syntax is restricted: {{context}} with {{comment}}"\`. + +Set to \`"any"\` if you want the rule to apply to any JSDoc block throughout +your files (as is necessary for finding function blocks not attached to a +function declaration or expression, i.e., \`@callback\` or \`@function\` (or its +aliases \`@func\` or \`@method\`) (including those associated with an \`@interface\`). + +See the ["AST and Selectors"](../#advanced-ast-and-selectors) +section of our Advanced docs for more on the expected format.`, items: { anyOf: [ { diff --git a/src/rules/noTypes.js b/src/rules/noTypes.js index 47aa59ae4..4ea4fcfaa 100644 --- a/src/rules/noTypes.js +++ b/src/rules/noTypes.js @@ -63,6 +63,22 @@ export default iterateJsdoc(({ additionalProperties: false, properties: { contexts: { + description: `Set this to an array of strings representing the AST context (or an object with +optional \`context\` and \`comment\` properties) where you wish the rule to be applied. + +\`context\` defaults to \`any\` and \`comment\` defaults to no specific comment context. + +Overrides the default contexts (\`ArrowFunctionExpression\`, \`FunctionDeclaration\`, +\`FunctionExpression\`, \`TSDeclareFunction\`, \`TSMethodSignature\`, +\`ClassDeclaration\`). Set to \`"any"\` if you want +the rule to apply to any JSDoc block throughout your files (as is necessary +for finding function blocks not attached to a function declaration or +expression, i.e., \`@callback\` or \`@function\` (or its aliases \`@func\` or +\`@method\`) (including those associated with an \`@interface\`). + +See the ["AST and Selectors"](../#advanced-ast-and-selectors) +section of our Advanced docs for more on the expected format. +`, items: { anyOf: [ { diff --git a/src/rules/noUndefinedTypes.js b/src/rules/noUndefinedTypes.js index 73b8f06be..720f910ae 100644 --- a/src/rules/noUndefinedTypes.js +++ b/src/rules/noUndefinedTypes.js @@ -517,7 +517,7 @@ export default iterateJsdoc(({ iterateAllJsdocs: true, meta: { docs: { - description: 'Checks that types in jsdoc comments are defined.', + description: 'Checks that types in JSDoc comments are defined.', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-undefined-types.md#repos-sticky-header', }, schema: [ @@ -525,15 +525,25 @@ export default iterateJsdoc(({ additionalProperties: false, properties: { definedTypes: { + description: `This array can be populated to indicate other types which +are automatically considered as defined (in addition to globals, etc.). +Defaults to an empty array.`, items: { type: 'string', }, type: 'array', }, disableReporting: { + description: `Whether to disable reporting of errors. Defaults to +\`false\`. This may be set to \`true\` in order to take advantage of only +marking defined variables as used.`, type: 'boolean', }, markVariablesAsUsed: { + description: `Whether to mark variables as used for the purposes +of the \`no-unused-vars\` rule when they are not found to be undefined. +Defaults to \`true\`. May be set to \`false\` to enforce a practice of not +importing types unless used in code.`, type: 'boolean', }, }, diff --git a/src/rules/requireAsteriskPrefix.js b/src/rules/requireAsteriskPrefix.js index 94c6a1ef0..b8dcbfba3 100644 --- a/src/rules/requireAsteriskPrefix.js +++ b/src/rules/requireAsteriskPrefix.js @@ -149,6 +149,12 @@ export default iterateJsdoc(({ fixable: 'code', schema: [ { + description: `If it is \`"always"\` then a problem is raised when there is no asterisk +prefix on a given JSDoc line. If it is \`"never"\` then a problem is raised +when there is an asterisk present. + +The default value is \`"always"\`. You may also set the default to \`"any"\` +and use the \`tags\` option to apply to specific tags only.`, enum: [ 'always', 'never', 'any', ], @@ -159,20 +165,42 @@ export default iterateJsdoc(({ properties: { tags: { additionalProperties: false, + description: `If you want different values to apply to specific tags, you may use +the \`tags\` option object. The keys are \`always\`, \`never\`, or \`any\` and +the values are arrays of tag names or the special value \`*description\` +which applies to the main JSDoc block description. + +\`\`\`js +{ + 'jsdoc/require-asterisk-prefix': ['error', 'always', { + tags: { + always: ['*description'], + any: ['example', 'license'], + never: ['copyright'] + } + }] +} +\`\`\` +`, properties: { always: { + description: `If it is \`"always"\` then a problem is raised when there is no asterisk +prefix on a given JSDoc line.`, items: { type: 'string', }, type: 'array', }, any: { + description: 'No problem is raised regardless of asterisk presence or non-presence.', items: { type: 'string', }, type: 'array', }, never: { + description: `If it is \`"never"\` then a problem is raised +when there is an asterisk present.`, items: { type: 'string', }, diff --git a/src/rules/requireDescription.js b/src/rules/requireDescription.js index fbcb48e6f..71f8c69de 100644 --- a/src/rules/requireDescription.js +++ b/src/rules/requireDescription.js @@ -108,17 +108,38 @@ export default iterateJsdoc(({ properties: { checkConstructors: { default: true, + description: `A value indicating whether \`constructor\`s should be +checked. Defaults to \`true\`.`, type: 'boolean', }, checkGetters: { default: true, + description: `A value indicating whether getters should be checked. +Defaults to \`true\`.`, type: 'boolean', }, checkSetters: { default: true, + description: `A value indicating whether setters should be checked. +Defaults to \`true\`.`, type: 'boolean', }, contexts: { + description: `Set to an array of strings representing the AST context +where you wish the rule to be applied (e.g., \`ClassDeclaration\` for ES6 +classes). + +\`context\` defaults to \`any\` and \`comment\` defaults to no specific comment context. + +Overrides the default contexts (\`ArrowFunctionExpression\`, +\`FunctionDeclaration\`, \`FunctionExpression\`). Set to \`"any"\` if you want +the rule to apply to any JSDoc block throughout your files (as is necessary +for finding function blocks not attached to a function declaration or +expression, i.e., \`@callback\` or \`@function\` (or its aliases \`@func\` or +\`@method\`) (including those associated with an \`@interface\`). + +See the ["AST and Selectors"](../#advanced-ast-and-selectors) +section of our Advanced docs for more on the expected format.`, items: { anyOf: [ { @@ -141,12 +162,20 @@ export default iterateJsdoc(({ type: 'array', }, descriptionStyle: { + description: `Whether to accept implicit descriptions (\`"body"\`) or +\`@description\` tags (\`"tag"\`) as satisfying the rule. Set to \`"any"\` to +accept either style. Defaults to \`"body"\`.`, enum: [ 'body', 'tag', 'any', ], type: 'string', }, exemptedBy: { + description: `Array of tags (e.g., \`['type']\`) whose presence on the +document block avoids the need for a \`@description\`. Defaults to an +array with \`inheritdoc\`. If you set this array, it will overwrite the +default, so be sure to add back \`inheritdoc\` if you wish its presence +to cause exemption of the rule.`, items: { type: 'string', }, diff --git a/src/rules/requireDescriptionCompleteSentence.js b/src/rules/requireDescriptionCompleteSentence.js index 0f5a1b158..37767bde2 100644 --- a/src/rules/requireDescriptionCompleteSentence.js +++ b/src/rules/requireDescriptionCompleteSentence.js @@ -312,15 +312,42 @@ export default iterateJsdoc(({ additionalProperties: false, properties: { abbreviations: { + description: `You can provide an \`abbreviations\` options array to avoid such strings of text +being treated as sentence endings when followed by dots. The \`.\` is not +necessary at the end of the array items.`, items: { type: 'string', }, type: 'array', }, newlineBeforeCapsAssumesBadSentenceEnd: { + description: `When \`false\` (the new default), we will not assume capital letters after +newlines are an incorrect way to end the sentence (they may be proper +nouns, for example).`, type: 'boolean', }, tags: { + description: `If you want additional tags to be checked for their descriptions, you may +add them within this option. + +\`\`\`js +{ + 'jsdoc/require-description-complete-sentence': ['error', { + tags: ['see', 'copyright'] + }] +} +\`\`\` + +The tags \`@param\`/\`@arg\`/\`@argument\` and \`@property\`/\`@prop\` will be properly +parsed to ensure that the checked "description" text includes only the text +after the name. + +All other tags will treat the text following the tag name, a space, and +an optional curly-bracketed type expression (and another space) as part of +its "description" (e.g., for \`@returns {someType} some description\`, the +description is \`some description\` while for \`@some-tag xyz\`, the description +is \`xyz\`). +`, items: { type: 'string', }, diff --git a/src/rules/requireExample.js b/src/rules/requireExample.js index e78d95968..5da2f90e8 100644 --- a/src/rules/requireExample.js +++ b/src/rules/requireExample.js @@ -63,17 +63,33 @@ export default iterateJsdoc(({ properties: { checkConstructors: { default: true, + description: `A value indicating whether \`constructor\`s should be checked. +Defaults to \`true\`.`, type: 'boolean', }, checkGetters: { default: false, + description: 'A value indicating whether getters should be checked. Defaults to `false`.', type: 'boolean', }, checkSetters: { default: false, + description: 'A value indicating whether setters should be checked. Defaults to `false`.', type: 'boolean', }, contexts: { + description: `Set this to an array of strings representing the AST context (or an object with +optional \`context\` and \`comment\` properties) where you wish the rule to be applied. +(e.g., \`ClassDeclaration\` for ES6 classes). + +\`context\` defaults to \`any\` and \`comment\` defaults to no specific comment context. + +Overrides the default contexts (\`ArrowFunctionExpression\`, \`FunctionDeclaration\`, +\`FunctionExpression\`). Set to \`"any"\` if you want the rule to apply to any +JSDoc block throughout your files. + +See the ["AST and Selectors"](../#advanced-ast-and-selectors) +section of our Advanced docs for more on the expected format.`, items: { anyOf: [ { @@ -97,9 +113,16 @@ export default iterateJsdoc(({ }, enableFixer: { default: true, + description: `A boolean on whether to enable the fixer (which adds an empty \`@example\` block). +Defaults to \`true\`.`, type: 'boolean', }, exemptedBy: { + description: `Array of tags (e.g., \`['type']\`) whose presence on the document +block avoids the need for an \`@example\`. Defaults to an array with +\`inheritdoc\`. If you set this array, it will overwrite the default, +so be sure to add back \`inheritdoc\` if you wish its presence to cause +exemption of the rule.`, items: { type: 'string', }, @@ -107,6 +130,8 @@ export default iterateJsdoc(({ }, exemptNoArguments: { default: false, + description: `Boolean to indicate that no-argument functions should not be reported for +missing \`@example\` declarations.`, type: 'boolean', }, }, diff --git a/src/rules/requireFileOverview.js b/src/rules/requireFileOverview.js index da987fd00..ad83ebc37 100644 --- a/src/rules/requireFileOverview.js +++ b/src/rules/requireFileOverview.js @@ -118,6 +118,67 @@ export default iterateJsdoc(({ additionalProperties: false, properties: { tags: { + description: `The keys of this object are tag names, and the values are configuration +objects indicating what will be checked for these whole-file tags. + +Each configuration object has 3 potential boolean keys (which default +to \`false\` when this option is supplied). + +1. \`mustExist\` - enforces that all files have a \`@file\`, \`@fileoverview\`, or \`@overview\` tag. +2. \`preventDuplicates\` - enforces that duplicate file overview tags within a given file will be reported +3. \`initialCommentsOnly\` - reports file overview tags which are not, as per + [the docs](https://jsdoc.app/tags-file.html), "at the beginning of + the file"–where beginning of the file is interpreted in this rule + as being when the overview tag is not preceded by anything other than + a comment. + +When no \`tags\` is present, the default is: + +\`\`\`json +{ + "file": { + "initialCommentsOnly": true, + "mustExist": true, + "preventDuplicates": true, + } +} +\`\`\` + +You can add additional tag names and/or override \`file\` if you supply this +option, e.g., in place of or in addition to \`file\`, giving other potential +file global tags like \`@license\`, \`@copyright\`, \`@author\`, \`@module\` or +\`@exports\`, optionally restricting them to a single use or preventing them +from being preceded by anything besides comments. + +For example: + +\`\`\`js +{ + "license": { + "mustExist": true, + "preventDuplicates": true, + } +} +\`\`\` + +This would require one and only one \`@license\` in the file, though because +\`initialCommentsOnly\` is absent and defaults to \`false\`, the \`@license\` +can be anywhere. + +In the case of \`@license\`, you can use this rule along with the +\`check-values\` rule (with its \`allowedLicenses\` or \`licensePattern\` options), +to enforce a license whitelist be present on every JS file. + +Note that if you choose to use \`preventDuplicates\` with \`license\`, you still +have a way to allow multiple licenses for the whole page by using the SPDX +"AND" expression, e.g., \`@license (MIT AND GPL-3.0)\`. + +Note that the tag names are the main JSDoc tag name, so you should use \`file\` +in this configuration object regardless of whether you have configured +\`fileoverview\` instead of \`file\` on \`tagNamePreference\` (i.e., \`fileoverview\` +will be checked, but you must use \`file\` on the configuration object). + +`, patternProperties: { '.*': { additionalProperties: false, diff --git a/src/rules/requireHyphenBeforeParamDescription.js b/src/rules/requireHyphenBeforeParamDescription.js index d48b4e32b..a6213c1cc 100644 --- a/src/rules/requireHyphenBeforeParamDescription.js +++ b/src/rules/requireHyphenBeforeParamDescription.js @@ -155,6 +155,14 @@ export default iterateJsdoc(({ fixable: 'code', schema: [ { + description: `If the string is \`"always"\` then a problem is raised when there is no hyphen +before the description. If it is \`"never"\` then a problem is raised when there +is a hyphen before the description. The default value is \`"always"\`. + +Even if hyphens are set to "always" appear after the tag name, they will +actually be forbidden in the event that they are followed immediately by +the end of a line (this will otherwise cause Visual Studio Code to display +incorrectly).`, enum: [ 'always', 'never', ], @@ -162,6 +170,8 @@ export default iterateJsdoc(({ }, { additionalProperties: false, + description: `The options object may have the following property to indicate behavior for +other tags besides the \`@param\` tag (or the \`@arg\` tag if so set).`, properties: { tags: { anyOf: [ @@ -183,6 +193,14 @@ export default iterateJsdoc(({ type: 'string', }, ], + description: `Object whose keys indicate different tags to check for the + presence or absence of hyphens; the key value should be "always" or "never", + indicating how hyphens are to be applied, e.g., \`{property: 'never'}\` + to ensure \`@property\` never uses hyphens. A key can also be set as \`*\`, e.g., + \`'*': 'always'\` to apply hyphen checking to any tag (besides the preferred + \`@param\` tag which follows the main string option setting and besides any + other \`tags\` entries). +`, }, }, type: 'object', diff --git a/src/rules/requireJsdoc.js b/src/rules/requireJsdoc.js index 527ce193d..d77577a5a 100644 --- a/src/rules/requireJsdoc.js +++ b/src/rules/requireJsdoc.js @@ -34,9 +34,13 @@ import { /** @type {import('json-schema').JSONSchema4} */ const OPTIONS_SCHEMA = { additionalProperties: false, + description: 'Has the following optional keys.\n', properties: { checkConstructors: { default: true, + description: `A value indicating whether \`constructor\`s should be checked. Defaults to +\`true\`. When \`true\`, \`exemptEmptyConstructors\` may still avoid reporting when +no parameters or return values are found.`, type: 'boolean', }, checkGetters: { @@ -52,6 +56,12 @@ const OPTIONS_SCHEMA = { }, ], default: true, + description: `A value indicating whether getters should be checked. Besides setting as a +boolean, this option can be set to the string \`"no-setter"\` to indicate that +getters should be checked but only when there is no setter. This may be useful +if one only wishes documentation on one of the two accessors. Defaults to +\`false\`. +`, }, checkSetters: { anyOf: [ @@ -66,8 +76,28 @@ const OPTIONS_SCHEMA = { }, ], default: true, + description: `A value indicating whether setters should be checked. Besides setting as a +boolean, this option can be set to the string \`"no-getter"\` to indicate that +setters should be checked but only when there is no getter. This may be useful +if one only wishes documentation on one of the two accessors. Defaults to +\`false\`.`, }, contexts: { + description: `Set this to an array of strings or objects representing the additional AST +contexts where you wish the rule to be applied (e.g., \`Property\` for +properties). If specified as an object, it should have a \`context\` property +and can have an \`inlineCommentBlock\` property which, if set to \`true\`, will +add an inline \`/** */\` instead of the regular, multi-line, indented jsdoc +block which will otherwise be added. Defaults to an empty array. Contexts +may also have their own \`minLineCount\` property which is an integer +indicating a minimum number of lines expected for a node in order +for it to require documentation. + +Note that you may need to disable \`require\` items (e.g., \`MethodDefinition\`) +if you are specifying a more precise form in \`contexts\` (e.g., \`MethodDefinition:not([accessibility="private"] > FunctionExpression\`). + +See the ["AST and Selectors"](../#advanced-ast-and-selectors) +section of our Advanced docs for more on the expected format.`, items: { anyOf: [ { @@ -94,28 +124,62 @@ const OPTIONS_SCHEMA = { }, enableFixer: { default: true, + description: `A boolean on whether to enable the fixer (which adds an empty JSDoc block). +Defaults to \`true\`.`, type: 'boolean', }, exemptEmptyConstructors: { default: false, + description: `When \`true\`, the rule will not report missing JSDoc blocks above constructors +with no parameters or return values (this is enabled by default as the class +name or description should be seen as sufficient to convey intent). + +Defaults to \`true\`.`, type: 'boolean', }, exemptEmptyFunctions: { default: false, + description: `When \`true\`, the rule will not report missing JSDoc blocks above +functions/methods with no parameters or return values (intended where +function/method names are sufficient for themselves as documentation). + +Defaults to \`false\`. +`, type: 'boolean', }, exemptOverloadedImplementations: { default: false, + description: `If set to \`true\` will avoid checking an overloaded function's implementation. + +Defaults to \`false\`.`, type: 'boolean', }, fixerMessage: { default: '', + description: `An optional message to add to the inserted JSDoc block. Defaults to the +empty string.`, type: 'string', }, minLineCount: { + description: `An integer to indicate a minimum number of lines expected for a node in order +for it to require documentation. Defaults to \`undefined\`. This option will +apply to any context; see \`contexts\` for line counts specific to a context.`, type: 'integer', }, publicOnly: { + description: `This option will insist that missing JSDoc blocks are only reported for +function bodies / class declarations that are exported from the module. +May be a boolean or object. If set to \`true\`, the defaults below will be +used. If unset, JSDoc block reporting will not be limited to exports. + +This object supports the following optional boolean keys (\`false\` unless +otherwise noted): + +- \`ancestorsOnly\` - Optimization to only check node ancestors to check if node is exported +- \`esm\` - ESM exports are checked for JSDoc comments (Defaults to \`true\`) +- \`cjs\` - CommonJS exports are checked for JSDoc comments (Defaults to \`true\`) +- \`window\` - Window global exports are checked for JSDoc comments +`, oneOf: [ { default: false, @@ -145,29 +209,37 @@ const OPTIONS_SCHEMA = { require: { additionalProperties: false, default: {}, + description: `An object with the following optional boolean keys which all default to +\`false\` except for \`FunctionDeclaration\` which defaults to \`true\`.`, properties: { ArrowFunctionExpression: { default: false, + description: 'Whether to check arrow functions like `() => {}`', type: 'boolean', }, ClassDeclaration: { default: false, + description: 'Whether to check declarations like `class A {}`', type: 'boolean', }, ClassExpression: { default: false, + description: 'Whether to check class expressions like `const myClass = class {}`', type: 'boolean', }, FunctionDeclaration: { default: true, + description: 'Whether to check function declarations like `function a {}`', type: 'boolean', }, FunctionExpression: { default: false, + description: 'Whether to check function expressions like `const a = function {}`', type: 'boolean', }, MethodDefinition: { default: false, + description: 'Whether to check method definitions like `class A { someMethodDefinition () {} }`', type: 'boolean', }, }, @@ -175,6 +247,13 @@ const OPTIONS_SCHEMA = { }, skipInterveningOverloadedDeclarations: { default: true, + description: `If \`true\`, will skip above uncommented overloaded functions to check +for a comment block (e.g., at the top of a set of overloaded functions). + +If \`false\`, will force each overloaded function to be checked for a +comment block. + +Defaults to \`true\`.`, type: 'boolean', }, }, diff --git a/src/rules/requireParam.js b/src/rules/requireParam.js index ed0294dcb..65b60b46b 100644 --- a/src/rules/requireParam.js +++ b/src/rules/requireParam.js @@ -527,36 +527,150 @@ export default iterateJsdoc(({ properties: { autoIncrementBase: { default: 0, + description: `Numeric to indicate the number at which to begin auto-incrementing roots. +Defaults to \`0\`. +`, type: 'integer', }, checkConstructors: { default: true, + description: `A value indicating whether \`constructor\`s should be checked. Defaults to +\`true\`. +`, type: 'boolean', }, checkDestructured: { default: true, + description: 'Whether to require destructured properties. Defaults to `true`.', type: 'boolean', }, checkDestructuredRoots: { default: true, + description: `Whether to check the existence of a corresponding \`@param\` for root objects +of destructured properties (e.g., that for \`function ({a, b}) {}\`, that there +is something like \`@param myRootObj\` defined that can correspond to +the \`{a, b}\` object parameter). + +If \`checkDestructuredRoots\` is \`false\`, \`checkDestructured\` will also be +implied to be \`false\` (i.e., the inside of the roots will not be checked +either, e.g., it will also not complain if \`a\` or \`b\` do not have their own +documentation). Defaults to \`true\`. +`, type: 'boolean', }, checkGetters: { default: false, + description: 'A value indicating whether getters should be checked. Defaults to `false`.', type: 'boolean', }, checkRestProperty: { default: false, + description: `If set to \`true\`, will report (and add fixer insertions) for missing rest +properties. Defaults to \`false\`. + +If set to \`true\`, note that you can still document the subproperties of the +rest property using other jsdoc features, e.g., \`@typedef\`: + +\`\`\`js +/** + * @typedef ExtraOptions + * @property innerProp1 + * @property innerProp2 + */ + +/** + * @param cfg + * @param cfg.num + * @param {ExtraOptions} extra + */ +function quux ({num, ...extra}) { +} +\`\`\` + +Setting this option to \`false\` (the default) may be useful in cases where +you already have separate \`@param\` definitions for each of the properties +within the rest property. + +For example, with the option disabled, this will not give an error despite +\`extra\` not having any definition: + +\`\`\`js +/** + * @param cfg + * @param cfg.num + */ +function quux ({num, ...extra}) { +} +\`\`\` + +Nor will this: + +\`\`\`js +/** + * @param cfg + * @param cfg.num + * @param cfg.innerProp1 + * @param cfg.innerProp2 + */ +function quux ({num, ...extra}) { +} +\`\`\` +`, type: 'boolean', }, checkSetters: { default: false, + description: 'A value indicating whether setters should be checked. Defaults to `false`.', type: 'boolean', }, checkTypesPattern: { + description: `When one specifies a type, unless it is of a generic type, like \`object\` +or \`array\`, it may be considered unnecessary to have that object's +destructured components required, especially where generated docs will +link back to the specified type. For example: + +\`\`\`js +/** + * @param {SVGRect} bbox - a SVGRect + */ +export const bboxToObj = function ({x, y, width, height}) { + return {x, y, width, height}; +}; +\`\`\` + +By default \`checkTypesPattern\` is set to +\`/^(?:[oO]bject|[aA]rray|PlainObject|Generic(?:Object|Array))$/v\`, +meaning that destructuring will be required only if the type of the \`@param\` +(the text between curly brackets) is a match for "Object" or "Array" (with or +without initial caps), "PlainObject", or "GenericObject", "GenericArray" (or +if no type is present). So in the above example, the lack of a match will +mean that no complaint will be given about the undocumented destructured +parameters. + +Note that the \`/\` delimiters are optional, but necessary to add flags. + +Defaults to using (only) the \`v\` flag, so to add your own flags, encapsulate +your expression as a string, but like a literal, e.g., \`/^object$/vi\`. + +You could set this regular expression to a more expansive list, or you +could restrict it such that even types matching those strings would not +need destructuring.`, type: 'string', }, contexts: { + description: `Set this to an array of strings representing the AST context (or an object with +optional \`context\` and \`comment\` properties) where you wish the rule to be applied. + +\`context\` defaults to \`any\` and \`comment\` defaults to no specific comment context. + +Overrides the default contexts (\`ArrowFunctionExpression\`, \`FunctionDeclaration\`, +\`FunctionExpression\`). May be useful for adding such as +\`TSMethodSignature\` in TypeScript or restricting the contexts +which are checked. + +See the ["AST and Selectors"](../#advanced-ast-and-selectors) +section of our Advanced docs for more on the expected format. +`, items: { anyOf: [ { @@ -579,33 +693,131 @@ export default iterateJsdoc(({ type: 'array', }, enableFixer: { + description: 'Whether to enable the fixer. Defaults to `true`.', type: 'boolean', }, enableRestElementFixer: { + description: `Whether to enable the rest element fixer. + +The fixer will automatically report/insert +[JSDoc repeatable parameters](https://jsdoc.app/tags-param.html#multiple-types-and-repeatable-parameters) +if missing. + +\`\`\`js +/** + * @param {GenericArray} cfg + * @param {number} cfg."0" + */ +function baar ([a, ...extra]) { + // +} +\`\`\` + +...becomes: + +\`\`\`js +/** + * @param {GenericArray} cfg + * @param {number} cfg."0" + * @param {...any} cfg."1" + */ +function baar ([a, ...extra]) { + // +} +\`\`\` + +Note that the type \`any\` is included since we don't know of any specific +type to use. + +Defaults to \`true\`. +`, type: 'boolean', }, enableRootFixer: { + description: `Whether to enable the auto-adding of incrementing roots. + +The default behavior of \`true\` is for "root" to be auto-inserted for missing +roots, followed by a 0-based auto-incrementing number. + +So for: + +\`\`\`js +function quux ({foo}, {bar}, {baz}) { +} +\`\`\` + +...the default JSDoc that would be added if the fixer is enabled would be: + +\`\`\`js +/** +* @param root0 +* @param root0.foo +* @param root1 +* @param root1.bar +* @param root2 +* @param root2.baz +*/ +\`\`\` + +Has no effect if \`enableFixer\` is set to \`false\`.`, type: 'boolean', }, exemptedBy: { + description: `Array of tags (e.g., \`['type']\`) whose presence on the document block +avoids the need for a \`@param\`. Defaults to an array with +\`inheritdoc\`. If you set this array, it will overwrite the default, +so be sure to add back \`inheritdoc\` if you wish its presence to cause +exemption of the rule.`, items: { type: 'string', }, type: 'array', }, ignoreWhenAllParamsMissing: { + description: `Set to \`true\` to ignore reporting when all params are missing. Defaults to +\`false\`.`, type: 'boolean', }, interfaceExemptsParamsCheck: { + description: `Set if you wish TypeScript interfaces to exempt checks for the existence of +\`@param\`'s. + +Will check for a type defining the function itself (on a variable +declaration) or if there is a single destructured object with a type. +Defaults to \`false\`.`, type: 'boolean', }, unnamedRootBase: { + description: `An array of root names to use in the fixer when roots are missing. Defaults +to \`['root']\`. Note that only when all items in the array besides the last +are exhausted will auto-incrementing occur. So, with +\`unnamedRootBase: ['arg', 'config']\`, the following: + +\`\`\`js +function quux ({foo}, [bar], {baz}) { +} +\`\`\` + +...will get the following JSDoc block added: + +\`\`\`js +/** +* @param arg +* @param arg.foo +* @param config0 +* @param config0."0" (\`bar\`) +* @param config1 +* @param config1.baz +*/ +\`\`\``, items: { type: 'string', }, type: 'array', }, useDefaultObjectProperties: { + description: `Set to \`true\` if you wish to expect documentation of properties on objects +supplied as default values. Defaults to \`false\`.`, type: 'boolean', }, }, diff --git a/src/rules/requireParamDescription.js b/src/rules/requireParamDescription.js index 1d32bdb26..9d603fd5f 100644 --- a/src/rules/requireParamDescription.js +++ b/src/rules/requireParamDescription.js @@ -53,6 +53,20 @@ export default iterateJsdoc(({ additionalProperties: false, properties: { contexts: { + description: `Set this to an array of strings representing the AST context (or an object with +optional \`context\` and \`comment\` properties) where you wish the rule to be applied. + +\`context\` defaults to \`any\` and \`comment\` defaults to no specific comment context. + +Overrides the default contexts (\`ArrowFunctionExpression\`, \`FunctionDeclaration\`, +\`FunctionExpression\`). Set to \`"any"\` if you want +the rule to apply to any JSDoc block throughout your files (as is necessary +for finding function blocks not attached to a function declaration or +expression, i.e., \`@callback\` or \`@function\` (or its aliases \`@func\` or +\`@method\`) (including those associated with an \`@interface\`). + +See the ["AST and Selectors"](../#advanced-ast-and-selectors) +section of our Advanced docs for more on the expected format.`, items: { anyOf: [ { @@ -75,9 +89,16 @@ export default iterateJsdoc(({ type: 'array', }, defaultDestructuredRootDescription: { + description: `The description string to set by default for destructured roots. Defaults to +"The root object".`, type: 'string', }, setDefaultDestructuredRootDescription: { + description: `Whether to set a default destructured root description. For example, you may +wish to avoid manually having to set the description for a \`@param\` +corresponding to a destructured root object as it should always be the same +type of object. Uses \`defaultDestructuredRootDescription\` for the description +string. Defaults to \`false\`.`, type: 'boolean', }, }, diff --git a/src/rules/requireParamName.js b/src/rules/requireParamName.js index d23dc3522..89f6e3b11 100644 --- a/src/rules/requireParamName.js +++ b/src/rules/requireParamName.js @@ -25,6 +25,21 @@ export default iterateJsdoc(({ additionalProperties: false, properties: { contexts: { + description: `Set this to an array of strings representing the AST context (or an object with +optional \`context\` and \`comment\` properties) where you wish the rule to be applied. + +\`context\` defaults to \`any\` and \`comment\` defaults to no specific comment context. + +Overrides the default contexts (\`ArrowFunctionExpression\`, \`FunctionDeclaration\`, +\`FunctionExpression\`). Set to \`"any"\` if you want +the rule to apply to any JSDoc block throughout your files (as is necessary +for finding function blocks not attached to a function declaration or +expression, i.e., \`@callback\` or \`@function\` (or its aliases \`@func\` or +\`@method\`) (including those associated with an \`@interface\`). + +See the ["AST and Selectors"](../#advanced-ast-and-selectors) +section of our Advanced docs for more on the expected format. +`, items: { anyOf: [ { diff --git a/src/rules/requireParamType.js b/src/rules/requireParamType.js index b405ce274..b06fc7a7e 100644 --- a/src/rules/requireParamType.js +++ b/src/rules/requireParamType.js @@ -53,6 +53,20 @@ export default iterateJsdoc(({ additionalProperties: false, properties: { contexts: { + description: `Set this to an array of strings representing the AST context (or an object with +optional \`context\` and \`comment\` properties) where you wish the rule to be applied. + +\`context\` defaults to \`any\` and \`comment\` defaults to no specific comment context. + +Overrides the default contexts (\`ArrowFunctionExpression\`, \`FunctionDeclaration\`, +\`FunctionExpression\`). Set to \`"any"\` if you want +the rule to apply to any JSDoc block throughout your files (as is necessary +for finding function blocks not attached to a function declaration or +expression, i.e., \`@callback\` or \`@function\` (or its aliases \`@func\` or +\`@method\`) (including those associated with an \`@interface\`). + +See the ["AST and Selectors"](../#advanced-ast-and-selectors) +section of our Advanced docs for more on the expected format.`, items: { anyOf: [ { @@ -75,9 +89,15 @@ export default iterateJsdoc(({ type: 'array', }, defaultDestructuredRootType: { + description: 'The type string to set by default for destructured roots. Defaults to "object".', type: 'string', }, setDefaultDestructuredRootType: { + description: `Whether to set a default destructured root type. For example, you may wish +to avoid manually having to set the type for a \`@param\` +corresponding to a destructured root object as it is always going to be an +object. Uses \`defaultDestructuredRootType\` for the type string. Defaults to +\`false\`.`, type: 'boolean', }, }, diff --git a/src/rules/requireReturns.js b/src/rules/requireReturns.js index dd55fdb9b..c48941bb0 100644 --- a/src/rules/requireReturns.js +++ b/src/rules/requireReturns.js @@ -154,13 +154,34 @@ export default iterateJsdoc(({ properties: { checkConstructors: { default: false, + description: `A value indicating whether \`constructor\`s should +be checked for \`@returns\` tags. Defaults to \`false\`.`, type: 'boolean', }, checkGetters: { default: true, + description: `Boolean to determine whether getter methods should +be checked for \`@returns\` tags. Defaults to \`true\`.`, type: 'boolean', }, contexts: { + description: `Set this to an array of strings representing the AST context +(or objects with optional \`context\` and \`comment\` properties) where you wish +the rule to be applied. + +\`context\` defaults to \`any\` and \`comment\` defaults to no specific comment context. + +Overrides the default contexts (\`ArrowFunctionExpression\`, \`FunctionDeclaration\`, +\`FunctionExpression\`). Set to \`"any"\` if you want +the rule to apply to any JSDoc block throughout your files (as is necessary +for finding function blocks not attached to a function declaration or +expression, i.e., \`@callback\` or \`@function\` (or its aliases \`@func\` or +\`@method\`) (including those associated with an \`@interface\`). This +rule will only apply on non-default contexts when there is such a tag +present and the \`forceRequireReturn\` option is set or if the +\`forceReturnsWithAsync\` option is set with a present \`@async\` tag +(since we are not checking against the actual \`return\` values in these +cases).`, items: { anyOf: [ { @@ -186,9 +207,16 @@ export default iterateJsdoc(({ type: 'array', }, enableFixer: { + description: `Whether to enable the fixer to add a blank \`@returns\`. +Defaults to \`false\`.`, type: 'boolean', }, exemptedBy: { + description: `Array of tags (e.g., \`['type']\`) whose presence on the +document block avoids the need for a \`@returns\`. Defaults to an array +with \`inheritdoc\`. If you set this array, it will overwrite the default, +so be sure to add back \`inheritdoc\` if you wish its presence to cause +exemption of the rule.`, items: { type: 'string', }, @@ -196,13 +224,38 @@ export default iterateJsdoc(({ }, forceRequireReturn: { default: false, + description: `Set to \`true\` to always insist on +\`@returns\` documentation regardless of implicit or explicit \`return\`'s +in the function. May be desired to flag that a project is aware of an +\`undefined\`/\`void\` return. Defaults to \`false\`.`, type: 'boolean', }, forceReturnsWithAsync: { default: false, + description: `By default \`async\` functions that do not explicitly +return a value pass this rule as an \`async\` function will always return a +\`Promise\`, even if the \`Promise\` resolves to void. You can force all +\`async\` functions (including ones with an explicit \`Promise\` but no +detected non-\`undefined\` \`resolve\` value) to require \`@return\` +documentation by setting \`forceReturnsWithAsync\` to \`true\` on the options +object. This may be useful for flagging that there has been consideration +of return type. Defaults to \`false\`.`, type: 'boolean', }, publicOnly: { + description: `This option will insist that missing \`@returns\` are only reported for +function bodies / class declarations that are exported from the module. +May be a boolean or object. If set to \`true\`, the defaults below will be +used. If unset, \`@returns\` reporting will not be limited to exports. + +This object supports the following optional boolean keys (\`false\` unless +otherwise noted): + +- \`ancestorsOnly\` - Optimization to only check node ancestors to check if node is exported +- \`esm\` - ESM exports are checked for \`@returns\` JSDoc comments (Defaults to \`true\`) +- \`cjs\` - CommonJS exports are checked for \`@returns\` JSDoc comments (Defaults to \`true\`) +- \`window\` - Window global exports are checked for \`@returns\` JSDoc comments +`, oneOf: [ { default: false, diff --git a/src/rules/requireReturnsCheck.js b/src/rules/requireReturnsCheck.js index 15f05c977..3fd462a95 100755 --- a/src/rules/requireReturnsCheck.js +++ b/src/rules/requireReturnsCheck.js @@ -117,7 +117,7 @@ export default iterateJsdoc(({ }, { meta: { docs: { - description: 'Requires a return statement in function body if a `@returns` tag is specified in jsdoc comment.', + description: 'Requires a return statement in function body if a `@returns` tag is specified in JSDoc comment.', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-returns-check.md#repos-sticky-header', }, schema: [ @@ -126,13 +126,34 @@ export default iterateJsdoc(({ properties: { exemptAsync: { default: true, + description: `By default, functions which return a \`Promise\` that are not +detected as resolving with a non-\`undefined\` value and \`async\` functions +(even ones that do not explicitly return a value, as these are returning a +\`Promise\` implicitly) will be exempted from reporting by this rule. +If you wish to insist that only \`Promise\`'s which resolve to +non-\`undefined\` values or \`async\` functions with explicit \`return\`'s will +be exempted from reporting (i.e., that \`async\` functions can be reported +if they lack an explicit (non-\`undefined\`) \`return\` when a \`@returns\` is +present), you can set \`exemptAsync\` to \`false\` on the options object.`, type: 'boolean', }, exemptGenerators: { + description: `Because a generator might be labeled as having a +\`IterableIterator\` \`@returns\` value (along with an iterator type +corresponding to the type of any \`yield\` statements), projects might wish to +leverage \`@returns\` in generators even without a \`return\` statement. This +option is therefore \`true\` by default in \`typescript\` mode (in "jsdoc" mode, +one might be more likely to take advantage of \`@yields\`). Set it to \`false\` +if you wish for a missing \`return\` to be flagged regardless.`, type: 'boolean', }, reportMissingReturnForUndefinedTypes: { default: false, + description: `If \`true\` and no return or +resolve value is found, this setting will even insist that reporting occur +with \`void\` or \`undefined\` (including as an indicated \`Promise\` type). +Unlike \`require-returns\`, with this option in the rule, one can +*discourage* the labeling of \`undefined\` types. Defaults to \`false\`.`, type: 'boolean', }, }, diff --git a/src/rules/requireReturnsDescription.js b/src/rules/requireReturnsDescription.js index a9189e20a..c81f59085 100644 --- a/src/rules/requireReturnsDescription.js +++ b/src/rules/requireReturnsDescription.js @@ -29,6 +29,20 @@ export default iterateJsdoc(({ additionalProperties: false, properties: { contexts: { + description: `Set this to an array of strings representing the AST context (or an object with +optional \`context\` and \`comment\` properties) where you wish the rule to be applied. + +\`context\` defaults to \`any\` and \`comment\` defaults to no specific comment context. + +Overrides the default contexts (\`ArrowFunctionExpression\`, \`FunctionDeclaration\`, +\`FunctionExpression\`). Set to \`"any"\` if you want +the rule to apply to any JSDoc block throughout your files (as is necessary +for finding function blocks not attached to a function declaration or +expression, i.e., \`@callback\` or \`@function\` (or its aliases \`@func\` or +\`@method\`) (including those associated with an \`@interface\`). + +See the ["AST and Selectors"](../#advanced-ast-and-selectors) +section of our Advanced docs for more on the expected format.`, items: { anyOf: [ { diff --git a/src/rules/requireReturnsType.js b/src/rules/requireReturnsType.js index 47e8cb960..76df5dfdb 100644 --- a/src/rules/requireReturnsType.js +++ b/src/rules/requireReturnsType.js @@ -21,6 +21,20 @@ export default iterateJsdoc(({ additionalProperties: false, properties: { contexts: { + description: `Set this to an array of strings representing the AST context (or an object with +optional \`context\` and \`comment\` properties) where you wish the rule to be applied. + +\`context\` defaults to \`any\` and \`comment\` defaults to no specific comment context. + +Overrides the default contexts (\`ArrowFunctionExpression\`, \`FunctionDeclaration\`, +\`FunctionExpression\`). Set to \`"any"\` if you want +the rule to apply to any JSDoc block throughout your files (as is necessary +for finding function blocks not attached to a function declaration or +expression, i.e., \`@callback\` or \`@function\` (or its aliases \`@func\` or +\`@method\`) (including those associated with an \`@interface\`). + +See the ["AST and Selectors"](../#advanced-ast-and-selectors) +section of our Advanced docs for more on the expected format.`, items: { anyOf: [ { diff --git a/src/rules/requireTemplate.js b/src/rules/requireTemplate.js index ccf98ac62..762c7858c 100644 --- a/src/rules/requireTemplate.js +++ b/src/rules/requireTemplate.js @@ -194,12 +194,28 @@ export default iterateJsdoc(({ additionalProperties: false, properties: { exemptedBy: { + description: `Array of tags (e.g., \`['type']\`) whose presence on the document +block avoids the need for a \`@template\`. Defaults to an array with +\`inheritdoc\`. If you set this array, it will overwrite the default, +so be sure to add back \`inheritdoc\` if you wish its presence to cause +exemption of the rule.`, items: { type: 'string', }, type: 'array', }, requireSeparateTemplates: { + description: `Requires that each template have its own separate line, i.e., preventing +templates of this format: + +\`\`\`js +/** + * @template T, U, V + */ +\`\`\` + +Defaults to \`false\`. +`, type: 'boolean', }, }, diff --git a/src/rules/requireThrows.js b/src/rules/requireThrows.js index ac694afd1..d7da7ee43 100644 --- a/src/rules/requireThrows.js +++ b/src/rules/requireThrows.js @@ -75,6 +75,18 @@ export default iterateJsdoc(({ additionalProperties: false, properties: { contexts: { + description: `Set this to an array of strings representing the AST context +(or objects with optional \`context\` and \`comment\` properties) where you wish +the rule to be applied. + +\`context\` defaults to \`any\` and \`comment\` defaults to no specific comment context. + +Overrides the default contexts (\`ArrowFunctionExpression\`, \`FunctionDeclaration\`, +\`FunctionExpression\`). Set to \`"any"\` if you want +the rule to apply to any JSDoc block throughout your files (as is necessary +for finding function blocks not attached to a function declaration or +expression, i.e., \`@callback\` or \`@function\` (or its aliases \`@func\` or +\`@method\`) (including those associated with an \`@interface\`).`, items: { anyOf: [ { @@ -97,6 +109,11 @@ export default iterateJsdoc(({ type: 'array', }, exemptedBy: { + description: `Array of tags (e.g., \`['type']\`) whose presence on the +document block avoids the need for a \`@throws\`. Defaults to an array +with \`inheritdoc\`. If you set this array, it will overwrite the default, +so be sure to add back \`inheritdoc\` if you wish its presence to cause +exemption of the rule.`, items: { type: 'string', }, diff --git a/src/rules/requireYields.js b/src/rules/requireYields.js index 0ce6dacb9..10f6bcfa5 100644 --- a/src/rules/requireYields.js +++ b/src/rules/requireYields.js @@ -160,6 +160,23 @@ export default iterateJsdoc(({ additionalProperties: false, properties: { contexts: { + description: `Set this to an array of strings representing the AST context +(or objects with optional \`context\` and \`comment\` properties) where you wish +the rule to be applied. + +\`context\` defaults to \`any\` and \`comment\` defaults to no specific comment context. + +Overrides the default contexts (\`ArrowFunctionExpression\`, \`FunctionDeclaration\`, +\`FunctionExpression\`). Set to \`"any"\` if you want +the rule to apply to any JSDoc block throughout your files (as is necessary +for finding function blocks not attached to a function declaration or +expression, i.e., \`@callback\` or \`@function\` (or its aliases \`@func\` or +\`@method\`) (including those associated with an \`@interface\`). This +rule will only apply on non-default contexts when there is such a tag +present and the \`forceRequireYields\` option is set or if the +\`withGeneratorTag\` option is set with a present \`@generator\` tag +(since we are not checking against the actual \`yield\` values in these +cases).`, items: { anyOf: [ { @@ -182,6 +199,11 @@ export default iterateJsdoc(({ type: 'array', }, exemptedBy: { + description: `Array of tags (e.g., \`['type']\`) whose presence on the +document block avoids the need for a \`@yields\`. Defaults to an array +with \`inheritdoc\`. If you set this array, it will overwrite the default, +so be sure to add back \`inheritdoc\` if you wish its presence to cause +exemption of the rule.`, items: { type: 'string', }, @@ -189,22 +211,49 @@ export default iterateJsdoc(({ }, forceRequireNext: { default: false, + description: `Set to \`true\` to always insist on +\`@next\` documentation even if there are no \`yield\` statements in the +function or none return values. May be desired to flag that a project is +aware of the expected yield return being \`undefined\`. Defaults to \`false\`.`, type: 'boolean', }, forceRequireYields: { default: false, + description: `Set to \`true\` to always insist on +\`@yields\` documentation for generators even if there are only +expressionless \`yield\` statements in the function. May be desired to flag +that a project is aware of an \`undefined\`/\`void\` yield. Defaults to +\`false\`.`, type: 'boolean', }, next: { default: false, + description: `If \`true\`, this option will insist that any use of a \`yield\` return +value (e.g., \`const rv = yield;\` or \`const rv = yield value;\`) has a +(non-standard) \`@next\` tag (in addition to any \`@yields\` tag) so as to be +able to document the type expected to be supplied into the iterator +(the \`Generator\` iterator that is returned by the call to the generator +function) to the iterator (e.g., \`it.next(value)\`). The tag will not be +expected if the generator function body merely has plain \`yield;\` or +\`yield value;\` statements without returning the values. Defaults to +\`false\`.`, type: 'boolean', }, nextWithGeneratorTag: { default: false, + description: `If a \`@generator\` tag is present on a block, require +(non-standard ) \`@next\` (see \`next\` option). This will require using \`void\` +or \`undefined\` in cases where generators do not use the \`next()\`-supplied +incoming \`yield\`-returned value. Defaults to \`false\`. See \`contexts\` to +\`any\` if you want to catch \`@generator\` with \`@callback\` or such not +attached to a function.`, type: 'boolean', }, withGeneratorTag: { default: true, + description: `If a \`@generator\` tag is present on a block, require +\`@yields\`/\`@yield\`. Defaults to \`true\`. See \`contexts\` to \`any\` if you want +to catch \`@generator\` with \`@callback\` or such not attached to a function.`, type: 'boolean', }, }, diff --git a/src/rules/requireYieldsCheck.js b/src/rules/requireYieldsCheck.js index 010ddebc6..3af3c932b 100644 --- a/src/rules/requireYieldsCheck.js +++ b/src/rules/requireYieldsCheck.js @@ -156,7 +156,7 @@ export default iterateJsdoc(({ }, { meta: { docs: { - description: 'Requires a yield statement in function body if a `@yields` tag is specified in jsdoc comment.', + description: 'Requires a yield statement in function body if a `@yields` tag is specified in JSDoc comment.', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-yields-check.md#repos-sticky-header', }, schema: [ @@ -165,9 +165,22 @@ export default iterateJsdoc(({ properties: { checkGeneratorsOnly: { default: false, + description: `Avoids checking the function body and merely insists +that all generators have \`@yields\`. This can be an optimization with the +ESLint \`require-yield\` rule, as that rule already ensures a \`yield\` is +present in generators, albeit assuming the generator is not empty). +Defaults to \`false\`.`, type: 'boolean', }, contexts: { + description: `Set this to an array of strings representing the AST context +(or objects with optional \`context\` and \`comment\` properties) where you wish +the rule to be applied. + +\`context\` defaults to \`any\` and \`comment\` defaults to no specific comment context. + +Overrides the default contexts (\`ArrowFunctionExpression\`, \`FunctionDeclaration\`, +\`FunctionExpression\`).`, items: { anyOf: [ { @@ -189,14 +202,19 @@ export default iterateJsdoc(({ }, type: 'array', }, - exemptedBy: { - items: { - type: 'string', - }, - type: 'array', - }, next: { default: false, + description: `If \`true\`, this option will insist that any use of a (non-standard) +\`@next\` tag (in addition to any \`@yields\` tag) will be matched by a \`yield\` +which uses a return value in the body of the generator (e.g., +\`const rv = yield;\` or \`const rv = yield value;\`). This (non-standard) +tag is intended to be used to indicate a type and/or description of +the value expected to be supplied by the user when supplied to the iterator +by its \`next\` method, as with \`it.next(value)\` (with the iterator being +the \`Generator\` iterator that is returned by the call to the generator +function). This option will report an error if the generator function body +merely has plain \`yield;\` or \`yield value;\` statements without returning +the values. Defaults to \`false\`.`, type: 'boolean', }, }, diff --git a/src/rules/sortTags.js b/src/rules/sortTags.js index 2dd019be7..2a7b36edb 100644 --- a/src/rules/sortTags.js +++ b/src/rules/sortTags.js @@ -521,22 +521,221 @@ export default iterateJsdoc(({ additionalProperties: false, properties: { alphabetizeExtras: { + description: `Defaults to \`false\`. Alphabetizes any items not within \`tagSequence\` after any +items within \`tagSequence\` (or in place of the special \`-other\` pseudo-tag) +are sorted. + +If you want all your tags alphabetized, you can supply an empty array for +\`tagSequence\` along with setting this option to \`true\`.`, type: 'boolean', }, linesBetween: { + description: `Indicates the number of lines to be added between tag groups. Defaults to 1. +Do not set to 0 or 2+ if you are using \`tag-lines\` and \`"always"\` and do not +set to 1+ if you are using \`tag-lines\` and \`"never"\`.`, type: 'integer', }, reportIntraTagGroupSpacing: { + description: `Whether to enable reporting and fixing of line breaks within tags of a given +tag group. Defaults to \`true\` which will remove any line breaks at the end of +such tags. Do not use with \`true\` if you are using \`tag-lines\` and \`always\`.`, type: 'boolean', }, reportTagGroupSpacing: { + description: `Whether to enable reporting and fixing of line breaks between tag groups +as set by \`linesBetween\`. Defaults to \`true\`. Note that the very last tag +will not have spacing applied regardless. For adding line breaks there, you +may wish to use the \`endLines\` option of the \`tag-lines\` rule.`, type: 'boolean', }, tagSequence: { + description: `An array of tag group objects indicating the preferred sequence for sorting tags. + +Each item in the array should be an object with a \`tags\` property set to an array +of tag names. + +Tag names earlier in the list will be arranged first. The relative position of +tags of the same name will not be changed. + +Earlier groups will also be arranged before later groups, but with the added +feature that additional line breaks may be added between (or before or after) +such groups (depending on the setting of \`linesBetween\`). + +Tag names not in the list will be grouped together at the end. The pseudo-tag +\`-other\` can be used to place them anywhere else if desired. The tags will be +placed in their order of appearance, or alphabetized if \`alphabetizeExtras\` +is enabled, see more below about that option. + +Defaults to the array below (noting that it is just a single tag group with +no lines between groups by default). + +Please note that this order is still experimental, so if you want to retain +a fixed order that doesn't change into the future, supply your own +\`tagSequence\`. + +\`\`\`js +[{tags: [ + // Brief descriptions + 'summary', + 'typeSummary', + + // Module/file-level + 'module', + 'exports', + 'file', + 'fileoverview', + 'overview', + 'import', + + // Identifying (name, type) + 'typedef', + 'interface', + 'record', + 'template', + 'name', + 'kind', + 'type', + 'alias', + 'external', + 'host', + 'callback', + 'func', + 'function', + 'method', + 'class', + 'constructor', + + // Relationships + 'modifies', + 'mixes', + 'mixin', + 'mixinClass', + 'mixinFunction', + 'namespace', + 'borrows', + 'constructs', + 'lends', + 'implements', + 'requires', + + // Long descriptions + 'desc', + 'description', + 'classdesc', + 'tutorial', + 'copyright', + 'license', + + // Simple annotations + 'const', + 'constant', + 'final', + 'global', + 'readonly', + 'abstract', + 'virtual', + 'var', + 'member', + 'memberof', + 'memberof!', + 'inner', + 'instance', + 'inheritdoc', + 'inheritDoc', + 'override', + 'hideconstructor', + + // Core function/object info + 'param', + 'arg', + 'argument', + 'prop', + 'property', + 'return', + 'returns', + + // Important behavior details + 'async', + 'generator', + 'default', + 'defaultvalue', + 'enum', + 'augments', + 'extends', + 'throws', + 'exception', + 'yield', + 'yields', + 'event', + 'fires', + 'emits', + 'listens', + 'this', + + // Access + 'static', + 'private', + 'protected', + 'public', + 'access', + 'package', + + '-other', + + // Supplementary descriptions + 'see', + 'example', + + // METADATA + + // Other Closure (undocumented) metadata + 'closurePrimitive', + 'customElement', + 'expose', + 'hidden', + 'idGenerator', + 'meaning', + 'ngInject', + 'owner', + 'wizaction', + + // Other Closure (documented) metadata + 'define', + 'dict', + 'export', + 'externs', + 'implicitCast', + 'noalias', + 'nocollapse', + 'nocompile', + 'noinline', + 'nosideeffects', + 'polymer', + 'polymerBehavior', + 'preserve', + 'struct', + 'suppress', + 'unrestricted', + + // @homer0/prettier-plugin-jsdoc metadata + 'category', + + // Non-Closure metadata + 'ignore', + 'author', + 'version', + 'variation', + 'since', + 'deprecated', + 'todo', +]}]; +\`\`\` +`, items: { additionalProperties: false, properties: { tags: { + description: 'See description on `tagSequence`.', items: { type: 'string', }, diff --git a/src/rules/tagLines.js b/src/rules/tagLines.js index f5a6189ac..fc8701584 100644 --- a/src/rules/tagLines.js +++ b/src/rules/tagLines.js @@ -296,6 +296,11 @@ export default iterateJsdoc(({ fixable: 'code', schema: [ { + description: `Defaults to "never". "any" is only useful with \`tags\` (allowing non-enforcement of lines except +for particular tags) or with \`startLines\` or \`endLines\`. It is also +necessary if using the linebreak-setting options of the \`sort-tags\` rule +so that the two rules won't conflict in both attempting to set lines +between tags.`, enum: [ 'always', 'any', 'never', ], @@ -305,9 +310,16 @@ export default iterateJsdoc(({ additionalProperties: false, properties: { applyToEndTag: { + description: `Set to \`false\` and use with "always" to indicate the normal lines to be +added after tags should not be added after the final tag. + +Defaults to \`true\`.`, type: 'boolean', }, count: { + description: `Use with "always" to indicate the number of lines to require be present. + +Defaults to 1.`, type: 'integer', }, endLines: { @@ -319,6 +331,10 @@ export default iterateJsdoc(({ type: 'null', }, ], + description: `If not set to \`null\`, will enforce end lines to the given count on the +final tag only. + +Defaults to \`0\`.`, }, startLines: { anyOf: [ @@ -329,8 +345,22 @@ export default iterateJsdoc(({ type: 'null', }, ], + description: `If not set to \`null\`, will enforce end lines to the given count before the +first tag only, unless there is only whitespace content, in which case, +a line count will not be enforced. + +Defaults to \`0\`.`, }, tags: { + description: `Overrides the default behavior depending on specific tags. + +An object whose keys are tag names and whose values are objects with the +following keys: + +1. \`lines\` - Set to \`always\`, \`never\`, or \`any\` to override. +2. \`count\` - Overrides main \`count\` (for "always") + +Defaults to empty object.`, patternProperties: { '.*': { additionalProperties: false, diff --git a/src/rules/textEscaping.js b/src/rules/textEscaping.js index 9a2c6cba2..00c81300f 100644 --- a/src/rules/textEscaping.js +++ b/src/rules/textEscaping.js @@ -138,11 +138,15 @@ export default iterateJsdoc(({ { additionalProperties: false, properties: { - // Option properties here (or remove the object) escapeHTML: { + description: `This option escapes all \`<\` and \`&\` characters (except those followed by +whitespace which are treated as literals by Visual Studio Code). Defaults to +\`false\`.`, type: 'boolean', }, escapeMarkdown: { + description: `This option escapes the first backtick (\`\` \` \`\`) in a paired sequence. +Defaults to \`false\`.`, type: 'boolean', }, }, diff --git a/src/rules/typeFormatting.js b/src/rules/typeFormatting.js index 29bef8939..38b5952e4 100644 --- a/src/rules/typeFormatting.js +++ b/src/rules/typeFormatting.js @@ -370,21 +370,31 @@ export default iterateJsdoc(({ additionalProperties: false, properties: { arrayBrackets: { + description: 'Determines how array generics are represented. Set to `angle` for the style `Array` or `square` for the style `type[]`. Defaults to "square".', enum: [ 'angle', 'square', ], + type: 'string', }, enableFixer: { + description: 'Whether to enable the fixer. Defaults to `true`.', type: 'boolean', }, genericDot: { + description: 'Boolean value of whether to use a dot before the angled brackets of a generic (e.g., `SomeType.`). Defaults to `false`.', type: 'boolean', }, objectFieldIndent: { + description: `A string indicating the whitespace to be added on each line preceding an +object property-value field. Defaults to the empty string.`, type: 'string', }, objectFieldQuote: { + description: `Whether and how object field properties should be quoted (e.g., \`{"a": string}\`). +Set to \`single\`, \`double\`, or \`null\`. Defaults to \`null\` (no quotes unless +required due to special characters within the field). Digits will be kept as is, +regardless of setting (they can either represent a digit or a string digit).`, enum: [ 'double', 'single', @@ -392,6 +402,11 @@ export default iterateJsdoc(({ ], }, objectFieldSeparator: { + description: `For object properties, specify whether a "semicolon", "comma", "linebreak", +"semicolon-and-linebreak", or "comma-and-linebreak" should be used after +each object property-value pair. + +Defaults to \`"comma"\`.`, enum: [ 'comma', 'comma-and-linebreak', @@ -399,33 +414,55 @@ export default iterateJsdoc(({ 'semicolon', 'semicolon-and-linebreak', ], + type: 'string', }, objectFieldSeparatorOptionalLinebreak: { + description: `Whether \`objectFieldSeparator\` set to \`"semicolon-and-linebreak"\` or +\`"comma-and-linebreak"\` should be allowed to optionally drop the linebreak. + +Defaults to \`true\`.`, type: 'boolean', }, objectFieldSeparatorTrailingPunctuation: { + description: `If \`separatorForSingleObjectField\` is not in effect (i.e., if it is \`false\` +or there are multiple property-value object fields present), this property +will determine whether to add punctuation corresponding to the +\`objectFieldSeparator\` (e.g., a semicolon) to the final object field. +Defaults to \`false\`.`, type: 'boolean', }, - // propertyQuotes: { - // enum: [ - // 'double', - // 'single', - // null, - // ], - // }, + // propertyQuotes: { + // description: `Whether and how namepath properties should be quoted (e.g., \`ab."cd"."ef"\`). + // Set to \`single\`, \`double\`, or \`null\`. Defaults to \`null\` (no quotes unless + // required due to whitespace within the property).`, + // enum: [ + // 'double', + // 'single', + // null, + // ], + // }, separatorForSingleObjectField: { + description: `Whether to apply the \`objectFieldSeparator\` (e.g., a semicolon) when there +is only one property-value object field present. Defaults to \`false\`.`, type: 'boolean', }, stringQuotes: { + description: `How string literals should be quoted (e.g., \`"abc"\`). Set to \`single\` +or \`double\`. Defaults to 'single'.`, enum: [ 'double', 'single', ], + type: 'string', }, typeBracketSpacing: { + description: `A string of spaces that will be added immediately after the type's initial +curly bracket and immediately before its ending curly bracket. Defaults +to the empty string.`, type: 'string', }, unionSpacing: { + description: 'Determines the spacing to add to unions (`|`). Defaults to a single space (`" "`).', type: 'string', }, }, diff --git a/src/rules/validTypes.js b/src/rules/validTypes.js index d9ae185e5..24dc3454e 100644 --- a/src/rules/validTypes.js +++ b/src/rules/validTypes.js @@ -401,6 +401,13 @@ export default iterateJsdoc(({ properties: { allowEmptyNamepaths: { default: false, + description: `Set to \`false\` to bulk disallow +empty name paths with namepath groups 2 and 4 (these might often be +expected to have an accompanying name path, though they have some +indicative value without one; these may also allow names to be defined +in another manner elsewhere in the block); you can use +\`settings.jsdoc.structuredTags\` with the \`required\` key set to "name" if you +wish to require name paths on a tag-by-tag basis. Defaults to \`true\`.`, type: 'boolean', }, }, diff --git a/test/rules/assertions/checkAccess.js b/test/rules/assertions/checkAccess.js index 25fa0167d..cd6429485 100644 --- a/test/rules/assertions/checkAccess.js +++ b/test/rules/assertions/checkAccess.js @@ -136,7 +136,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'At most one access-control tag may be present on a jsdoc block.', + message: 'At most one access-control tag may be present on a JSDoc block.', }, ], }, @@ -153,7 +153,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'At most one access-control tag may be present on a jsdoc block.', + message: 'At most one access-control tag may be present on a JSDoc block.', }, ], settings: { @@ -175,7 +175,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'At most one access-control tag may be present on a jsdoc block.', + message: 'At most one access-control tag may be present on a JSDoc block.', }, ], }, @@ -192,7 +192,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'At most one access-control tag may be present on a jsdoc block.', + message: 'At most one access-control tag may be present on a JSDoc block.', }, ], settings: { @@ -214,7 +214,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'At most one access-control tag may be present on a jsdoc block.', + message: 'At most one access-control tag may be present on a JSDoc block.', }, ], }, diff --git a/test/rules/assertions/checkAlignment.js b/test/rules/assertions/checkAlignment.js index 6301873fe..bd8b6fc66 100644 --- a/test/rules/assertions/checkAlignment.js +++ b/test/rules/assertions/checkAlignment.js @@ -195,7 +195,7 @@ function quux (foo) { { code: ` /** - * A jsdoc not attached to any node. + * A JSDoc not attached to any node. */ `, errors: [ @@ -206,7 +206,7 @@ function quux (foo) { ], output: ` /** - * A jsdoc not attached to any node. + * A JSDoc not attached to any node. */ `, }, diff --git a/test/rules/assertions/multilineBlocks.js b/test/rules/assertions/multilineBlocks.js index b133e7b3b..e1cc839b5 100644 --- a/test/rules/assertions/multilineBlocks.js +++ b/test/rules/assertions/multilineBlocks.js @@ -187,7 +187,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'Multiline jsdoc blocks are prohibited by ' + + message: 'Multiline JSDoc blocks are prohibited by ' + 'your configuration.', }, ], @@ -209,7 +209,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'Multiline jsdoc blocks are prohibited by ' + + message: 'Multiline JSDoc blocks are prohibited by ' + 'your configuration.', }, ], @@ -231,7 +231,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'Multiline jsdoc blocks are prohibited by ' + + message: 'Multiline JSDoc blocks are prohibited by ' + 'your configuration but fixing would result in a single ' + 'line block which you have prohibited with ' + '`noSingleLineBlocks`.', @@ -253,7 +253,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'Multiline jsdoc blocks are prohibited by ' + + message: 'Multiline JSDoc blocks are prohibited by ' + 'your configuration.', }, ], @@ -275,7 +275,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'Multiline jsdoc blocks are prohibited by ' + + message: 'Multiline JSDoc blocks are prohibited by ' + 'your configuration.', }, ], @@ -298,7 +298,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'Multiline jsdoc blocks are prohibited by ' + + message: 'Multiline JSDoc blocks are prohibited by ' + 'your configuration.', }, ], @@ -323,7 +323,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'Multiline jsdoc blocks are prohibited by your ' + + message: 'Multiline JSDoc blocks are prohibited by your ' + 'configuration but the block has a description with a tag.', }, ], @@ -348,7 +348,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'Multiline jsdoc blocks are prohibited by ' + + message: 'Multiline JSDoc blocks are prohibited by ' + 'your configuration but the block has multiple tags.', }, ], @@ -370,7 +370,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'Multiline jsdoc blocks are prohibited by your ' + + message: 'Multiline JSDoc blocks are prohibited by your ' + 'configuration but the block has a description with a tag.', }, ], @@ -391,7 +391,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'Multiline jsdoc blocks are prohibited by ' + + message: 'Multiline JSDoc blocks are prohibited by ' + 'your configuration.', }, ], @@ -417,7 +417,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'Multiline jsdoc blocks are prohibited by your ' + + message: 'Multiline JSDoc blocks are prohibited by your ' + 'configuration but the block has a description with a tag.', }, ], @@ -441,7 +441,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'Multiline jsdoc blocks are prohibited by ' + + message: 'Multiline JSDoc blocks are prohibited by ' + 'your configuration.', }, ], @@ -465,7 +465,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'Multiline jsdoc blocks are prohibited by ' + + message: 'Multiline JSDoc blocks are prohibited by ' + 'your configuration.', }, ], @@ -489,7 +489,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'Multiline jsdoc blocks are prohibited by ' + + message: 'Multiline JSDoc blocks are prohibited by ' + 'your configuration.', }, ], @@ -512,7 +512,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'Multiline jsdoc blocks are prohibited by ' + + message: 'Multiline JSDoc blocks are prohibited by ' + 'your configuration but fixing would result in a single ' + 'line block which you have prohibited with ' + '`noSingleLineBlocks`.', @@ -561,7 +561,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'Multiline jsdoc blocks are prohibited by ' + + message: 'Multiline JSDoc blocks are prohibited by ' + 'your configuration.', }, ], diff --git a/tsconfig.json b/tsconfig.json index 2a09f32cc..b71e063f4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -14,6 +14,7 @@ "outDir": "dist" }, "include": [ + "src/bin/*.js", "src/*.js", "src/rules/*.js", "src/rules.d.ts", @@ -22,5 +23,8 @@ "typings/gitdown.d.ts", "typings/babel__eslint-parser.d.ts" ], - "exclude": ["node_modules"] + "exclude": [ + "node_modules", + "src/bin/generateOptions.js" + ] } diff --git a/typings/gitdown.d.ts b/typings/gitdown.d.ts index 60192a21a..e724d5d88 100644 --- a/typings/gitdown.d.ts +++ b/typings/gitdown.d.ts @@ -7,6 +7,10 @@ declare module 'gitdown' { } }) => void get: () => string + registerHelper: (name: string, helper: { + compile: () => string + weight?: number + }) => void } export function readFile(path: string): Gitdown } From 2ff5f14f0a78e13f5c8dc1e041823c5d28ba4448 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Thu, 18 Sep 2025 12:25:17 +0800 Subject: [PATCH 108/189] fix: correct fixable false positives Also: - docs: fix some descriptions - docs: build README programmatically; fixes #1266 --- .README/README.md | 63 +-------- .README/rules/check-examples.md | 4 +- README.md | 125 +++++++++--------- docs/rules/check-examples.md | 4 +- src/bin/generateDocs.js | 53 ++++++++ src/buildForbidRuleDefinition.js | 1 - src/buildRejectOrPreferRuleDefinition.js | 14 +- src/rules.d.ts | 54 ++++---- src/rules/checkExamples.js | 2 +- src/rules/checkParamNames.js | 2 +- src/rules/emptyTags.js | 2 +- src/rules/implementsOnClasses.js | 2 +- src/rules/noBlankBlockDescriptions.js | 2 +- src/rules/noMissingSyntax.js | 1 - src/rules/noRestrictedSyntax.js | 1 - src/rules/noTypes.js | 2 +- src/rules/noUndefinedTypes.js | 2 +- src/rules/requireDescription.js | 2 +- src/rules/requireExample.js | 2 +- .../requireHyphenBeforeParamDescription.js | 2 +- src/rules/requireJsdoc.js | 2 +- src/rules/requireParam.js | 2 +- src/rules/requireParamName.js | 2 +- src/rules/requireParamType.js | 2 +- src/rules/requirePropertyName.js | 2 +- src/rules/requirePropertyType.js | 2 +- src/rules/requireReturns.js | 2 +- src/rules/requireReturnsCheck.js | 2 +- src/rules/requireReturnsDescription.js | 2 +- src/rules/requireReturnsType.js | 2 +- src/rules/requireTemplate.js | 2 +- src/rules/requireThrows.js | 2 +- src/rules/requireYields.js | 2 +- src/rules/requireYieldsCheck.js | 2 +- src/rules/sortTags.js | 2 +- src/rules/validTypes.js | 2 +- 36 files changed, 186 insertions(+), 186 deletions(-) diff --git a/.README/README.md b/.README/README.md index c0519f1bc..b7caeaf78 100644 --- a/.README/README.md +++ b/.README/README.md @@ -375,65 +375,4 @@ non-default-recommended fixer). |recommended|fixable|rule|description| |-|-|-|-| -|:heavy_check_mark:|| [check-access](./docs/rules/check-access.md#readme) | Enforces valid `@access` tags| -|:heavy_check_mark:|:wrench:| [check-alignment](./docs/rules/check-alignment.md#readme)|Enforces alignment of JSDoc block asterisks| -|||[check-examples](./docs/rules/check-examples.md#readme)|Linting of JavaScript within `@example`| -|||[check-indentation](./docs/rules/check-indentation.md#readme)|Checks for invalid padding inside JSDoc blocks| -||:wrench:|[check-line-alignment](./docs/rules/check-line-alignment.md#readme)|Reports invalid alignment of JSDoc block lines.| -|:heavy_check_mark:|:wrench:|[check-param-names](./docs/rules/check-param-names.md#readme)|Checks for dupe `@param` names, that nested param names have roots, and that parameter names in function declarations match JSDoc param names.| -|:heavy_check_mark:|:wrench:|[check-property-names](./docs/rules/check-property-names.md#readme)|Checks for dupe `@property` names, that nested property names have roots| -|||[check-syntax](./docs/rules/check-syntax.md#readme)|Reports use against current mode (currently only prohibits Closure-specific syntax)| -|:heavy_check_mark:|:wrench:|[check-tag-names](./docs/rules/check-tag-names.md#readme)|Reports invalid JSDoc (block) tag names| -| || [check-template-names](./docs/rules/check-template-names.md#readme)|Checks that any `@template` names are actually used in the connected `@typedef` or type alias. -|:heavy_check_mark:|:wrench:|[check-types](./docs/rules/check-types.md#readme)|Reports types deemed invalid (customizable and with defaults, for preventing and/or recommending replacements)| -|:heavy_check_mark:||[check-values](./docs/rules/check-values.md#readme)|Checks for expected content within some miscellaneous tags (`@version`, `@since`, `@license`, `@author`)| -| || [convert-to-jsdoc-comments](./docs/rules/convert-to-jsdoc-comments.md#readme) | Converts line and block comments preceding or following specified nodes into JSDoc comments| -|:heavy_check_mark:|:wrench:|[empty-tags](./docs/rules/empty-tags.md#readme)|Checks tags that are expected to be empty (e.g., `@abstract` or `@async`), reporting if they have content| -|:heavy_check_mark:||[implements-on-classes](./docs/rules/implements-on-classes.md#readme)|Prohibits use of `@implements` on non-constructor functions (to enforce the tag only being used on classes/constructors)| -|||[informative-docs](./docs/rules/informative-docs.md#readme)|Reports on JSDoc texts that serve only to restate their attached name.| -|||[lines-before-block](./docs/rules/lines-before-block.md#readme)|Enforces minimum number of newlines before JSDoc comment blocks| -|||[match-description](./docs/rules/match-description.md#readme)|Defines customizable regular expression rules for your tag descriptions| -||:wrench:|[match-name](./docs/rules/match-name.md#readme)|Reports the name portion of a JSDoc tag if matching or not matching a given regular expression| -|:heavy_check_mark:|:wrench:|[multiline-blocks](./docs/rules/multiline-blocks.md#readme)|Controls how and whether JSDoc blocks can be expressed as single or multiple line blocks| -||:wrench:|[no-bad-blocks](./docs/rules/no-bad-blocks.md#readme)|This rule checks for multi-line-style comments which fail to meet the criteria of a JSDoc block| -||:wrench:|[no-blank-block-descriptions](./docs/rules/no-blank-block-descriptions.md#readme)|If tags are present, this rule will prevent empty lines in the block description. If no tags are present, this rule will prevent extra empty lines in the block description.| -||:wrench:|[no-blank-blocks](./docs/rules/no-blank-blocks.md#readme)|Reports and optionally removes blocks with whitespace only| -|:heavy_check_mark:|:wrench:|[no-defaults](./docs/rules/no-defaults.md#readme)|This rule reports defaults being used on the relevant portion of `@param` or `@default`| -|||[no-missing-syntax](./docs/rules/no-missing-syntax.md#readme)|This rule lets you report if certain always expected comment structures are missing.| -|:heavy_check_mark:|:wrench:|[no-multi-asterisks](./docs/rules/no-multi-asterisks.md#readme)|Prevents use of multiple asterisks at the beginning of lines| -|||[no-restricted-syntax](./docs/rules/no-restricted-syntax.md#readme)|Reports when certain comment structures are present| -|On in TS|:wrench:|[no-types](./docs/rules/no-types.md#readme)|Prohibits types on `@param` or `@returns` (redundant with TypeScript)| -|:heavy_check_mark: (off in TS and TS flavor)||[no-undefined-types](./docs/rules/no-undefined-types.md#readme)|Besides some expected built-in types, prohibits any types not specified as globals or within `@typedef` | -|:heavy_check_mark:||[reject-any-type](./docs/rules/reject-any-type.md#readme)|Reports use of `any` (or `*`) type within JSDoc tag types| -|:heavy_check_mark:||[reject-function-type](./docs/rules/reject-function-type.md#readme)|Reports use of `Function` type within JSDoc tag types| -||:wrench:|[require-asterisk-prefix](./docs/rules/require-asterisk-prefix.md#readme)|Requires that each JSDoc line starts with an `*`| -|||[require-description](./docs/rules/require-description.md#readme)|Requires that all functions (and potentially other contexts) have a description.| -||:wrench:|[require-description-complete-sentence](./docs/rules/require-description-complete-sentence.md#readme)|Requires that block description, explicit `@description`, and `@param`/`@returns` tag descriptions are written in complete sentences| -||:wrench:|[require-example](./docs/rules/require-example.md#readme)|Requires that all functions (and potentially other contexts) have examples.| -|||[require-file-overview](./docs/rules/require-file-overview.md#readme)|By default, requires a single `@file` tag at the beginning of each linted file| -||:wrench:|[require-hyphen-before-param-description](./docs/rules/require-hyphen-before-param-description.md#readme)|Requires a hyphen before `@param` descriptions (and optionally before `@property` descriptions)| -|:heavy_check_mark:|:wrench:|[require-jsdoc](./docs/rules/require-jsdoc.md#readme)|Checks for presence of JSDoc comments, on functions and potentially other contexts (optionally limited to exports).| -|:heavy_check_mark:||[require-next-type](./docs/rules/require-next-type.md#readme)|Requires a type on the (non-standard) `@next` tag.| -|:heavy_check_mark:|:wrench:|[require-param](./docs/rules/require-param.md#readme)|Requires that all function parameters are documented with a `@param` tag.| -|:heavy_check_mark:||[require-param-description](./docs/rules/require-param-description.md#readme)|Requires that each `@param` tag has a `description` value.| -|:heavy_check_mark:||[require-param-name](./docs/rules/require-param-name.md#readme)|Requires that all `@param` tags have names.| -|:heavy_check_mark: (off in TS)||[require-param-type](./docs/rules/require-param-type.md#readme)|Requires that each `@param` tag has a type value (within curly brackets).| -|:heavy_check_mark:|:wrench:|[require-property](./docs/rules/require-property.md#readme)|Requires that all `@typedef` and `@namespace` tags have `@property` tags when their type is a plain `object`, `Object`, or `PlainObject`.| -|:heavy_check_mark:||[require-property-description](./docs/rules/require-property-description.md#readme)|Requires that each `@property` tag has a `description` value.| -|:heavy_check_mark:||[require-property-name](./docs/rules/require-property-name.md#readme)|Requires that all `@property` tags have names.| -|:heavy_check_mark: (off in TS)||[require-property-type](./docs/rules/require-property-type.md#readme)|Requires that each `@property` tag has a type value (within curly brackets).| -|:heavy_check_mark:||[require-returns](./docs/rules/require-returns.md#readme)|Requires that return statements are documented.| -|:heavy_check_mark:||[require-returns-check](./docs/rules/require-returns-check.md#readme)|Requires a return statement be present in a function body if a `@returns` tag is specified in the JSDoc comment block (and reports if multiple `@returns` tags are present).| -|:heavy_check_mark:||[require-returns-description](./docs/rules/require-returns-description.md#readme)|Requires that the `@returns` tag has a `description` value (not including `void`/`undefined` type returns).| -|:heavy_check_mark: (off in TS)||[require-returns-type](./docs/rules/require-returns-type.md#readme)|Requires that `@returns` tag has a type value (in curly brackets).| -| || [require-template](./docs/rules/require-template.md#readme) | Requires `@template` tags be present when type parameters are used.| -|||[require-throws](./docs/rules/require-throws.md#readme)|Requires that throw statements are documented| -|:heavy_check_mark:||[require-throws-type](./docs/rules/require-throws-type.md#readme)|Requires a type on the `@throws` tag.| -|:heavy_check_mark:||[require-yields](./docs/rules/require-yields.md#readme)|Requires that yields are documented| -|:heavy_check_mark:||[require-yields-check](./docs/rules/require-yields-check.md#readme)|Ensures that if a `@yields` is present that a `yield` (or `yield` with a value) is present in the function body (or that if a `@next` is present that there is a `yield` with a return value present)| -|:heavy_check_mark:||[require-yields-type](./docs/rules/require-yields-type.md#readme)|Requires a type on the `@yields` tag.| -|||[sort-tags](./docs/rules/sort-tags.md#readme)|Sorts tags by a specified sequence according to tag name, optionally adding line breaks between tag groups| -|:heavy_check_mark:|:wrench:|[tag-lines](./docs/rules/tag-lines.md#readme)|Enforces lines (or no lines) between tags| -||:wrench:|[text-escaping](./docs/rules/text-escaping.md#readme)|This rule can auto-escape certain characters that are input within block and tag descriptions| -||:wrench:|[type-formatting](./docs/rules/type-formatting.md#readme)|Formats JSDoc type values| -|:heavy_check_mark:||[valid-types](./docs/rules/valid-types.md#readme)|Requires all types/namepaths to be valid JSDoc, Closure compiler, or TypeScript types (configurable in settings)| +{"gitdown": "rulestable"} diff --git a/.README/rules/check-examples.md b/.README/rules/check-examples.md index 95ba32917..2aaf06538 100644 --- a/.README/rules/check-examples.md +++ b/.README/rules/check-examples.md @@ -5,8 +5,8 @@ > **NOTE**: This rule only works in ESLint 7. For ESLint 9, please see our > [processors](../processors.md) section. -Ensures that (JavaScript) examples within JSDoc adhere to ESLint rules. Also -has options to lint the default values of optional `@param`/`@arg`/`@argument` +Ensures that (JavaScript) samples within `@example` tags adhere to ESLint rules. +Also has options to lint the default values of optional `@param`/`@arg`/`@argument` and `@property`/`@prop` tags or the values of `@default`/`@defaultvalue` tags. ## Options diff --git a/README.md b/README.md index db531b63a..af51060a6 100644 --- a/README.md +++ b/README.md @@ -412,65 +412,66 @@ non-default-recommended fixer). |recommended|fixable|rule|description| |-|-|-|-| -|:heavy_check_mark:|| [check-access](./docs/rules/check-access.md#readme) | Enforces valid `@access` tags| -|:heavy_check_mark:|:wrench:| [check-alignment](./docs/rules/check-alignment.md#readme)|Enforces alignment of JSDoc block asterisks| -|||[check-examples](./docs/rules/check-examples.md#readme)|Linting of JavaScript within `@example`| -|||[check-indentation](./docs/rules/check-indentation.md#readme)|Checks for invalid padding inside JSDoc blocks| -||:wrench:|[check-line-alignment](./docs/rules/check-line-alignment.md#readme)|Reports invalid alignment of JSDoc block lines.| -|:heavy_check_mark:|:wrench:|[check-param-names](./docs/rules/check-param-names.md#readme)|Checks for dupe `@param` names, that nested param names have roots, and that parameter names in function declarations match JSDoc param names.| -|:heavy_check_mark:|:wrench:|[check-property-names](./docs/rules/check-property-names.md#readme)|Checks for dupe `@property` names, that nested property names have roots| -|||[check-syntax](./docs/rules/check-syntax.md#readme)|Reports use against current mode (currently only prohibits Closure-specific syntax)| -|:heavy_check_mark:|:wrench:|[check-tag-names](./docs/rules/check-tag-names.md#readme)|Reports invalid JSDoc (block) tag names| -| || [check-template-names](./docs/rules/check-template-names.md#readme)|Checks that any `@template` names are actually used in the connected `@typedef` or type alias. -|:heavy_check_mark:|:wrench:|[check-types](./docs/rules/check-types.md#readme)|Reports types deemed invalid (customizable and with defaults, for preventing and/or recommending replacements)| -|:heavy_check_mark:||[check-values](./docs/rules/check-values.md#readme)|Checks for expected content within some miscellaneous tags (`@version`, `@since`, `@license`, `@author`)| -| || [convert-to-jsdoc-comments](./docs/rules/convert-to-jsdoc-comments.md#readme) | Converts line and block comments preceding or following specified nodes into JSDoc comments| -|:heavy_check_mark:|:wrench:|[empty-tags](./docs/rules/empty-tags.md#readme)|Checks tags that are expected to be empty (e.g., `@abstract` or `@async`), reporting if they have content| -|:heavy_check_mark:||[implements-on-classes](./docs/rules/implements-on-classes.md#readme)|Prohibits use of `@implements` on non-constructor functions (to enforce the tag only being used on classes/constructors)| -|||[informative-docs](./docs/rules/informative-docs.md#readme)|Reports on JSDoc texts that serve only to restate their attached name.| -|||[lines-before-block](./docs/rules/lines-before-block.md#readme)|Enforces minimum number of newlines before JSDoc comment blocks| -|||[match-description](./docs/rules/match-description.md#readme)|Defines customizable regular expression rules for your tag descriptions| -||:wrench:|[match-name](./docs/rules/match-name.md#readme)|Reports the name portion of a JSDoc tag if matching or not matching a given regular expression| -|:heavy_check_mark:|:wrench:|[multiline-blocks](./docs/rules/multiline-blocks.md#readme)|Controls how and whether JSDoc blocks can be expressed as single or multiple line blocks| -||:wrench:|[no-bad-blocks](./docs/rules/no-bad-blocks.md#readme)|This rule checks for multi-line-style comments which fail to meet the criteria of a JSDoc block| -||:wrench:|[no-blank-block-descriptions](./docs/rules/no-blank-block-descriptions.md#readme)|If tags are present, this rule will prevent empty lines in the block description. If no tags are present, this rule will prevent extra empty lines in the block description.| -||:wrench:|[no-blank-blocks](./docs/rules/no-blank-blocks.md#readme)|Reports and optionally removes blocks with whitespace only| -|:heavy_check_mark:|:wrench:|[no-defaults](./docs/rules/no-defaults.md#readme)|This rule reports defaults being used on the relevant portion of `@param` or `@default`| -|||[no-missing-syntax](./docs/rules/no-missing-syntax.md#readme)|This rule lets you report if certain always expected comment structures are missing.| -|:heavy_check_mark:|:wrench:|[no-multi-asterisks](./docs/rules/no-multi-asterisks.md#readme)|Prevents use of multiple asterisks at the beginning of lines| -|||[no-restricted-syntax](./docs/rules/no-restricted-syntax.md#readme)|Reports when certain comment structures are present| -|On in TS|:wrench:|[no-types](./docs/rules/no-types.md#readme)|Prohibits types on `@param` or `@returns` (redundant with TypeScript)| -|:heavy_check_mark: (off in TS and TS flavor)||[no-undefined-types](./docs/rules/no-undefined-types.md#readme)|Besides some expected built-in types, prohibits any types not specified as globals or within `@typedef` | -|:heavy_check_mark:||[reject-any-type](./docs/rules/reject-any-type.md#readme)|Reports use of `any` (or `*`) type within JSDoc tag types| -|:heavy_check_mark:||[reject-function-type](./docs/rules/reject-function-type.md#readme)|Reports use of `Function` type within JSDoc tag types| -||:wrench:|[require-asterisk-prefix](./docs/rules/require-asterisk-prefix.md#readme)|Requires that each JSDoc line starts with an `*`| -|||[require-description](./docs/rules/require-description.md#readme)|Requires that all functions (and potentially other contexts) have a description.| -||:wrench:|[require-description-complete-sentence](./docs/rules/require-description-complete-sentence.md#readme)|Requires that block description, explicit `@description`, and `@param`/`@returns` tag descriptions are written in complete sentences| -||:wrench:|[require-example](./docs/rules/require-example.md#readme)|Requires that all functions (and potentially other contexts) have examples.| -|||[require-file-overview](./docs/rules/require-file-overview.md#readme)|By default, requires a single `@file` tag at the beginning of each linted file| -||:wrench:|[require-hyphen-before-param-description](./docs/rules/require-hyphen-before-param-description.md#readme)|Requires a hyphen before `@param` descriptions (and optionally before `@property` descriptions)| -|:heavy_check_mark:|:wrench:|[require-jsdoc](./docs/rules/require-jsdoc.md#readme)|Checks for presence of JSDoc comments, on functions and potentially other contexts (optionally limited to exports).| -|:heavy_check_mark:||[require-next-type](./docs/rules/require-next-type.md#readme)|Requires a type on the (non-standard) `@next` tag.| -|:heavy_check_mark:|:wrench:|[require-param](./docs/rules/require-param.md#readme)|Requires that all function parameters are documented with a `@param` tag.| -|:heavy_check_mark:||[require-param-description](./docs/rules/require-param-description.md#readme)|Requires that each `@param` tag has a `description` value.| -|:heavy_check_mark:||[require-param-name](./docs/rules/require-param-name.md#readme)|Requires that all `@param` tags have names.| -|:heavy_check_mark: (off in TS)||[require-param-type](./docs/rules/require-param-type.md#readme)|Requires that each `@param` tag has a type value (within curly brackets).| -|:heavy_check_mark:|:wrench:|[require-property](./docs/rules/require-property.md#readme)|Requires that all `@typedef` and `@namespace` tags have `@property` tags when their type is a plain `object`, `Object`, or `PlainObject`.| -|:heavy_check_mark:||[require-property-description](./docs/rules/require-property-description.md#readme)|Requires that each `@property` tag has a `description` value.| -|:heavy_check_mark:||[require-property-name](./docs/rules/require-property-name.md#readme)|Requires that all `@property` tags have names.| -|:heavy_check_mark: (off in TS)||[require-property-type](./docs/rules/require-property-type.md#readme)|Requires that each `@property` tag has a type value (within curly brackets).| -|:heavy_check_mark:||[require-returns](./docs/rules/require-returns.md#readme)|Requires that return statements are documented.| -|:heavy_check_mark:||[require-returns-check](./docs/rules/require-returns-check.md#readme)|Requires a return statement be present in a function body if a `@returns` tag is specified in the JSDoc comment block (and reports if multiple `@returns` tags are present).| -|:heavy_check_mark:||[require-returns-description](./docs/rules/require-returns-description.md#readme)|Requires that the `@returns` tag has a `description` value (not including `void`/`undefined` type returns).| -|:heavy_check_mark: (off in TS)||[require-returns-type](./docs/rules/require-returns-type.md#readme)|Requires that `@returns` tag has a type value (in curly brackets).| -| || [require-template](./docs/rules/require-template.md#readme) | Requires `@template` tags be present when type parameters are used.| -|||[require-throws](./docs/rules/require-throws.md#readme)|Requires that throw statements are documented| -|:heavy_check_mark:||[require-throws-type](./docs/rules/require-throws-type.md#readme)|Requires a type on the `@throws` tag.| -|:heavy_check_mark:||[require-yields](./docs/rules/require-yields.md#readme)|Requires that yields are documented| -|:heavy_check_mark:||[require-yields-check](./docs/rules/require-yields-check.md#readme)|Ensures that if a `@yields` is present that a `yield` (or `yield` with a value) is present in the function body (or that if a `@next` is present that there is a `yield` with a return value present)| -|:heavy_check_mark:||[require-yields-type](./docs/rules/require-yields-type.md#readme)|Requires a type on the `@yields` tag.| -|||[sort-tags](./docs/rules/sort-tags.md#readme)|Sorts tags by a specified sequence according to tag name, optionally adding line breaks between tag groups| -|:heavy_check_mark:|:wrench:|[tag-lines](./docs/rules/tag-lines.md#readme)|Enforces lines (or no lines) between tags| -||:wrench:|[text-escaping](./docs/rules/text-escaping.md#readme)|This rule can auto-escape certain characters that are input within block and tag descriptions| -||:wrench:|[type-formatting](./docs/rules/type-formatting.md#readme)|Formats JSDoc type values| -|:heavy_check_mark:||[valid-types](./docs/rules/valid-types.md#readme)|Requires all types/namepaths to be valid JSDoc, Closure compiler, or TypeScript types (configurable in settings)| +|:heavy_check_mark:|| [check-access](./docs/rules/check-access.md#readme) | Checks that `@access` tags have a valid value. | +|:heavy_check_mark:|:wrench:| [check-alignment](./docs/rules/check-alignment.md#readme) | Reports invalid alignment of JSDoc block asterisks. | +||| [check-examples](./docs/rules/check-examples.md#readme) | Ensures that (JavaScript) samples within `@example` tags adhere to ESLint rules. | +||| [check-indentation](./docs/rules/check-indentation.md#readme) | Reports invalid padding inside JSDoc blocks. | +||:wrench:| [check-line-alignment](./docs/rules/check-line-alignment.md#readme) | Reports invalid alignment of JSDoc block lines. | +|:heavy_check_mark:|:wrench:| [check-param-names](./docs/rules/check-param-names.md#readme) | Checks for dupe `@param` names, that nested param names have roots, and that parameter names in function declarations match JSDoc param names. | +|:heavy_check_mark:|:wrench:| [check-property-names](./docs/rules/check-property-names.md#readme) | Ensures that property names in JSDoc are not duplicated on the same block and that nested properties have defined roots. | +||| [check-syntax](./docs/rules/check-syntax.md#readme) | Reports against syntax not valid for the mode (e.g., Google Closure Compiler in non-Closure mode). | +|:heavy_check_mark:|:wrench:| [check-tag-names](./docs/rules/check-tag-names.md#readme) | Reports invalid block tag names. | +||| [check-template-names](./docs/rules/check-template-names.md#readme) | Checks that any `@template` names are actually used in the connected `@typedef` or type alias. | +|:heavy_check_mark:|:wrench:| [check-types](./docs/rules/check-types.md#readme) | Reports types deemed invalid (customizable and with defaults, for preventing and/or recommending replacements). | +|:heavy_check_mark:|| [check-values](./docs/rules/check-values.md#readme) | This rule checks the values for a handful of tags: `@version`, `@since`, `@license` and `@author`. | +||:wrench:| [convert-to-jsdoc-comments](./docs/rules/convert-to-jsdoc-comments.md#readme) | Converts non-JSDoc comments preceding or following nodes into JSDoc ones | +|:heavy_check_mark:|:wrench:| [empty-tags](./docs/rules/empty-tags.md#readme) | Checks tags that are expected to be empty (e.g., `@abstract` or `@async`), reporting if they have content | +|:heavy_check_mark:|| [implements-on-classes](./docs/rules/implements-on-classes.md#readme) | Prohibits use of `@implements` on non-constructor functions (to enforce the tag only being used on classes/constructors). | +||| [imports-as-dependencies](./docs/rules/imports-as-dependencies.md#readme) | Reports if JSDoc `import()` statements point to a package which is not listed in `dependencies` or `devDependencies` | +||| [informative-docs](./docs/rules/informative-docs.md#readme) | This rule reports doc comments that only restate their attached name. | +||:wrench:| [lines-before-block](./docs/rules/lines-before-block.md#readme) | Enforces minimum number of newlines before JSDoc comment blocks | +||| [match-description](./docs/rules/match-description.md#readme) | Enforces a regular expression pattern on descriptions. | +||:wrench:| [match-name](./docs/rules/match-name.md#readme) | Reports the name portion of a JSDoc tag if matching or not matching a given regular expression. | +|:heavy_check_mark:|:wrench:| [multiline-blocks](./docs/rules/multiline-blocks.md#readme) | Controls how and whether JSDoc blocks can be expressed as single or multiple line blocks. | +||:wrench:| [no-bad-blocks](./docs/rules/no-bad-blocks.md#readme) | This rule checks for multi-line-style comments which fail to meet the criteria of a JSDoc block. | +||:wrench:| [no-blank-block-descriptions](./docs/rules/no-blank-block-descriptions.md#readme) | If tags are present, this rule will prevent empty lines in the block description. If no tags are present, this rule will prevent extra empty lines in the block description. | +||:wrench:| [no-blank-blocks](./docs/rules/no-blank-blocks.md#readme) | Removes empty blocks with nothing but possibly line breaks | +|:heavy_check_mark:|:wrench:| [no-defaults](./docs/rules/no-defaults.md#readme) | This rule reports defaults being used on the relevant portion of `@param` or `@default`. | +||| [no-missing-syntax](./docs/rules/no-missing-syntax.md#readme) | Reports when certain comment structures are always expected. | +|:heavy_check_mark:|:wrench:| [no-multi-asterisks](./docs/rules/no-multi-asterisks.md#readme) | Prevents use of multiple asterisks at the beginning of lines. | +||| [no-restricted-syntax](./docs/rules/no-restricted-syntax.md#readme) | Reports when certain comment structures are present. | +|On in TS; Off in TS flavor|:wrench:| [no-types](./docs/rules/no-types.md#readme) | This rule reports types being used on `@param` or `@returns` (redundant with TypeScript). | +|:heavy_check_mark: (Off in TS; Off in TS flavor)|| [no-undefined-types](./docs/rules/no-undefined-types.md#readme) | Besides some expected built-in types, prohibits any types not specified as globals or within `@typedef`. | +|:heavy_check_mark:|| [reject-any-type](./docs/rules/reject-any-type.md#readme) | Reports use of `any` or `*` type | +|:heavy_check_mark:|| [reject-function-type](./docs/rules/reject-function-type.md#readme) | Reports use of `Function` type | +||:wrench:| [require-asterisk-prefix](./docs/rules/require-asterisk-prefix.md#readme) | Requires that each JSDoc line starts with an `*`. | +||| [require-description](./docs/rules/require-description.md#readme) | Requires that all functions (and potentially other contexts) have a description. | +||:wrench:| [require-description-complete-sentence](./docs/rules/require-description-complete-sentence.md#readme) | Requires that block description, explicit `@description`, and `@param`/`@returns` tag descriptions are written in complete sentences. | +||:wrench:| [require-example](./docs/rules/require-example.md#readme) | Requires that all functions (and potentially other contexts) have examples. | +||| [require-file-overview](./docs/rules/require-file-overview.md#readme) | Checks that all files have one `@file`, `@fileoverview`, or `@overview` tag at the beginning of the file. | +||:wrench:| [require-hyphen-before-param-description](./docs/rules/require-hyphen-before-param-description.md#readme) | Requires a hyphen before the `@param` description (and optionally before `@property` descriptions). | +|:heavy_check_mark:|:wrench:| [require-jsdoc](./docs/rules/require-jsdoc.md#readme) | Checks for presence of JSDoc comments, on functions and potentially other contexts (optionally limited to exports). | +|:heavy_check_mark:|| [require-next-type](./docs/rules/require-next-type.md#readme) | Requires a type for `@next` tags | +|:heavy_check_mark:|:wrench:| [require-param](./docs/rules/require-param.md#readme) | Requires that all function parameters are documented with a `@param` tag. | +|:heavy_check_mark:|:wrench:| [require-param-description](./docs/rules/require-param-description.md#readme) | Requires that each `@param` tag has a `description` value. | +|:heavy_check_mark:|| [require-param-name](./docs/rules/require-param-name.md#readme) | Requires that all `@param` tags have names. | +|:heavy_check_mark: (Off in TS; On in TS flavor)|:wrench:| [require-param-type](./docs/rules/require-param-type.md#readme) | Requires that each `@param` tag has a type value (in curly brackets). | +|:heavy_check_mark:|:wrench:| [require-property](./docs/rules/require-property.md#readme) | Requires that all `@typedef` and `@namespace` tags have `@property` when their type is a plain `object`, `Object`, or `PlainObject`. | +|:heavy_check_mark:|| [require-property-description](./docs/rules/require-property-description.md#readme) | Requires that each `@property` tag has a `description` value. | +|:heavy_check_mark:|| [require-property-name](./docs/rules/require-property-name.md#readme) | Requires that all `@property` tags have names. | +|:heavy_check_mark: (Off in TS; On in TS flavor)|| [require-property-type](./docs/rules/require-property-type.md#readme) | Requires that each `@property` tag has a type value (in curly brackets). | +|:heavy_check_mark:|:wrench:| [require-returns](./docs/rules/require-returns.md#readme) | Requires that returns are documented with `@returns`. | +|:heavy_check_mark:|| [require-returns-check](./docs/rules/require-returns-check.md#readme) | Requires a return statement in function body if a `@returns` tag is specified in JSDoc comment(and reports if multiple `@returns` tags are present). | +|:heavy_check_mark:|| [require-returns-description](./docs/rules/require-returns-description.md#readme) | Requires that the `@returns` tag has a `description` value (not including `void`/`undefined` type returns). | +|:heavy_check_mark: (Off in TS; On in TS flavor)|| [require-returns-type](./docs/rules/require-returns-type.md#readme) | Requires that `@returns` tag has type value (in curly brackets). | +||| [require-template](./docs/rules/require-template.md#readme) | Requires `@template` tags be present when type parameters are used. | +||| [require-throws](./docs/rules/require-throws.md#readme) | Requires that throw statements are documented with `@throws` tags. | +|:heavy_check_mark:|| [require-throws-type](./docs/rules/require-throws-type.md#readme) | Requires a type for `@throws` tags | +|:heavy_check_mark:|| [require-yields](./docs/rules/require-yields.md#readme) | Requires yields are documented with `@yields` tags. | +|:heavy_check_mark:|| [require-yields-check](./docs/rules/require-yields-check.md#readme) | Ensures that if a `@yields` is present that a `yield` (or `yield` with a value) is present in the function body (or that if a `@next` is present that there is a yield with a return value present). | +|:heavy_check_mark:|| [require-yields-type](./docs/rules/require-yields-type.md#readme) | Requires a type for `@yields` tags | +||:wrench:| [sort-tags](./docs/rules/sort-tags.md#readme) | Sorts tags by a specified sequence according to tag name, optionally adding line breaks between tag groups. | +|:heavy_check_mark:|:wrench:| [tag-lines](./docs/rules/tag-lines.md#readme) | Enforces lines (or no lines) between tags. | +||:wrench:| [text-escaping](./docs/rules/text-escaping.md#readme) | Auto-escape certain characters that are input within block and tag descriptions. | +||:wrench:| [type-formatting](./docs/rules/type-formatting.md#readme) | Formats JSDoc type values. | +|:heavy_check_mark:|| [valid-types](./docs/rules/valid-types.md#readme) | Requires all types/namepaths to be valid JSDoc, Closure compiler, or TypeScript types (configurable in settings). | diff --git a/docs/rules/check-examples.md b/docs/rules/check-examples.md index a69da53ce..6dc0cd1f8 100644 --- a/docs/rules/check-examples.md +++ b/docs/rules/check-examples.md @@ -18,8 +18,8 @@ > **NOTE**: This rule only works in ESLint 7. For ESLint 9, please see our > [processors](../processors.md) section. -Ensures that (JavaScript) examples within JSDoc adhere to ESLint rules. Also -has options to lint the default values of optional `@param`/`@arg`/`@argument` +Ensures that (JavaScript) samples within `@example` tags adhere to ESLint rules. +Also has options to lint the default values of optional `@param`/`@arg`/`@argument` and `@property`/`@prop` tags or the values of `@default`/`@defaultvalue` tags. diff --git a/src/bin/generateDocs.js b/src/bin/generateDocs.js index 485ade30e..cee5fd63d 100644 --- a/src/bin/generateDocs.js +++ b/src/bin/generateDocs.js @@ -151,6 +151,14 @@ const generateDocs = async () => { /** @type {import('json-schema').JSONSchema4[][]} */ const schemas = []; + /** + * @type {{ + * decamelized: string, + * row: string + * }[]} + */ + const tableRows = []; + const docContents = await Promise.all([ ...assertionNames.map((assertionName) => { const decamelized = decamelize(assertionName, { @@ -160,6 +168,35 @@ const generateDocs = async () => { /** @type {import('json-schema').JSONSchema4[]} */ (plugin.rules?.[decamelized].meta?.schema), ); + const ruleDescription = plugin.rules?.[decamelized]?.meta?.docs?.description; + if (!ruleDescription) { + throw new Error(`Rule ${assertionName} missing description`); + } + + const fixable = plugin.rules?.[decamelized]?.meta?.fixable ?? null; + + const recommended = plugin.configs['flat/recommended'].rules?.['jsdoc/' + decamelized] !== 'off'; + const tsRecommended = plugin.configs['flat/recommended-typescript'].rules?.['jsdoc/' + decamelized] !== 'off'; + const tsRecommendedFlavor = plugin.configs['flat/recommended-typescript-flavor'].rules?.['jsdoc/' + decamelized] !== 'off'; + + tableRows.push({ + decamelized, + row: `|${ + recommended ? + (tsRecommended && tsRecommendedFlavor ? + ':heavy_check_mark:' : + ':heavy_check_mark: (' + (tsRecommended ? 'On in TS' : 'Off in TS') + + '; ' + + (tsRecommendedFlavor ? 'On in TS flavor' : 'Off in TS flavor') + + ')' + ) : + (tsRecommended || tsRecommendedFlavor ? + (tsRecommended ? 'On in TS' : 'Off in TS') + + '; ' + + (tsRecommendedFlavor ? 'On in TS flavor' : 'Off in TS flavor') : + '') + }|${fixable ? ':wrench:' : ''}| [${decamelized}](./docs/rules/${decamelized}.md#readme) | ${ruleDescription} |`, + }); return path.join( dirname, '..', '..', '.README', 'rules', decamelized + '.md', @@ -176,6 +213,22 @@ const generateDocs = async () => { }, }); + gitdown.registerHelper('rulestable', { + compile () { + return tableRows.toSorted(({ + decamelized, + }, { + decamelized: dc, + }) => { + return decamelized < dc ? -1 : (decamelized > dc ? 1 : 0); + }).map(({ + row, + }) => { + return row; + }).join('\n'); + }, + }); + gitdown.registerHelper('options', { compile () { if (!schemas[idx]) { diff --git a/src/buildForbidRuleDefinition.js b/src/buildForbidRuleDefinition.js index 652042e94..73e2cf96f 100644 --- a/src/buildForbidRuleDefinition.js +++ b/src/buildForbidRuleDefinition.js @@ -59,7 +59,6 @@ export const buildForbidRuleDefinition = ({ description: description ?? contextName ?? 'Reports when certain comment structures are present.', url: url ?? 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/advanced.md#user-content-advanced-creating-your-own-rules', }, - fixable: 'code', schema: [], type: 'suggestion', }, diff --git a/src/buildRejectOrPreferRuleDefinition.js b/src/buildRejectOrPreferRuleDefinition.js index 0d37181ff..32c57759a 100644 --- a/src/buildRejectOrPreferRuleDefinition.js +++ b/src/buildRejectOrPreferRuleDefinition.js @@ -111,7 +111,7 @@ const infoUC = { export const buildRejectOrPreferRuleDefinition = ({ checkNativeTypes = null, typeName, - description = typeName ?? 'Reports invalid types.', + description = typeName ?? 'Reports types deemed invalid (customizable and with defaults, for preventing and/or recommending replacements).', overrideSettings = null, schema = [], url = 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-types.md#repos-sticky-header', @@ -463,7 +463,17 @@ export const buildRejectOrPreferRuleDefinition = ({ description, url, }, - fixable: 'code', + ...(!overrideSettings || (Object.values(overrideSettings).some((os) => { + return os && typeof os === 'object' ? + /* c8 ignore next -- Ok */ + os.replacement : + typeof os === 'string'; + })) ? + { + fixable: 'code', + } : + {} + ), schema, type: 'suggestion', }, diff --git a/src/rules.d.ts b/src/rules.d.ts index 0b361c9a5..4f99d7df9 100644 --- a/src/rules.d.ts +++ b/src/rules.d.ts @@ -15,7 +15,7 @@ export interface Rules { } ]; - /** Ensures that (JavaScript) examples within JSDoc adhere to ESLint rules. */ + /** Ensures that (JavaScript) samples within `@example` tags adhere to ESLint rules. */ "jsdoc/check-examples": | [] | [ @@ -128,7 +128,7 @@ export interface Rules { } ]; - /** Ensures that parameter names in JSDoc match those in the function declaration. */ + /** Checks for dupe `@param` names, that nested param names have roots, and that parameter names in function declarations match JSDoc param names. */ "jsdoc/check-param-names": | [] | [ @@ -335,7 +335,7 @@ export interface Rules { /** Checks that any `@template` names are actually used in the connected `@typedef` or type alias. */ "jsdoc/check-template-names": []; - /** Reports invalid types. */ + /** Reports types deemed invalid (customizable and with defaults, for preventing and/or recommending replacements). */ "jsdoc/check-types": | [] | [ @@ -506,7 +506,7 @@ export interface Rules { } ]; - /** Expects specific tags to be empty of any content. */ + /** Checks tags that are expected to be empty (e.g., `@abstract` or `@async`), reporting if they have content */ "jsdoc/empty-tags": | [] | [ @@ -526,7 +526,7 @@ export interface Rules { } ]; - /** Reports an issue with any non-constructor function using `@implements`. */ + /** Prohibits use of `@implements` on non-constructor functions (to enforce the tag only being used on classes/constructors). */ "jsdoc/implements-on-classes": | [] | [ @@ -1037,7 +1037,7 @@ export interface Rules { } ]; - /** Detects and removes extra lines of a blank block description */ + /** If tags are present, this rule will prevent empty lines in the block description. If no tags are present, this rule will prevent extra empty lines in the block description. */ "jsdoc/no-blank-block-descriptions": []; /** Removes empty blocks with nothing but possibly line breaks */ @@ -1212,7 +1212,7 @@ export interface Rules { } ]; - /** This rule reports types being used on `@param` or `@returns`. */ + /** This rule reports types being used on `@param` or `@returns` (redundant with TypeScript). */ "jsdoc/no-types": | [] | [ @@ -1245,7 +1245,7 @@ export interface Rules { } ]; - /** Checks that types in JSDoc comments are defined. */ + /** Besides some expected built-in types, prohibits any types not specified as globals or within `@typedef`. */ "jsdoc/no-undefined-types": | [] | [ @@ -1323,7 +1323,7 @@ export interface Rules { } ]; - /** Requires that all functions have a description. */ + /** Requires that all functions (and potentially other contexts) have a description. */ "jsdoc/require-description": | [] | [ @@ -1428,7 +1428,7 @@ export interface Rules { } ]; - /** Requires that all functions have examples. */ + /** Requires that all functions (and potentially other contexts) have examples. */ "jsdoc/require-example": | [] | [ @@ -1570,7 +1570,7 @@ export interface Rules { } ]; - /** Requires a hyphen before the `@param` description. */ + /** Requires a hyphen before the `@param` description (and optionally before `@property` descriptions). */ "jsdoc/require-hyphen-before-param-description": | [] | ["always" | "never"] @@ -1599,7 +1599,7 @@ export interface Rules { } ]; - /** Require JSDoc comments */ + /** Checks for presence of JSDoc comments, on functions and potentially other contexts (optionally limited to exports). */ "jsdoc/require-jsdoc": | [] | [ @@ -1760,7 +1760,7 @@ export interface Rules { /** Requires a type for `@next` tags */ "jsdoc/require-next-type": []; - /** Requires that all function parameters are documented. */ + /** Requires that all function parameters are documented with a `@param` tag. */ "jsdoc/require-param": | [] | [ @@ -2081,7 +2081,7 @@ export interface Rules { } ]; - /** Requires that all function parameters have names. */ + /** Requires that all `@param` tags have names. */ "jsdoc/require-param-name": | [] | [ @@ -2113,7 +2113,7 @@ export interface Rules { } ]; - /** Requires that each `@param` tag has a `type` value. */ + /** Requires that each `@param` tag has a type value (in curly brackets). */ "jsdoc/require-param-type": | [] | [ @@ -2162,13 +2162,13 @@ export interface Rules { /** Requires that each `@property` tag has a `description` value. */ "jsdoc/require-property-description": []; - /** Requires that all function `@property` tags have names. */ + /** Requires that all `@property` tags have names. */ "jsdoc/require-property-name": []; - /** Requires that each `@property` tag has a `type` value. */ + /** Requires that each `@property` tag has a type value (in curly brackets). */ "jsdoc/require-property-type": []; - /** Requires that returns are documented. */ + /** Requires that returns are documented with `@returns`. */ "jsdoc/require-returns": | [] | [ @@ -2267,7 +2267,7 @@ export interface Rules { } ]; - /** Requires a return statement in function body if a `@returns` tag is specified in JSDoc comment. */ + /** Requires a return statement in function body if a `@returns` tag is specified in JSDoc comment(and reports if multiple `@returns` tags are present). */ "jsdoc/require-returns-check": | [] | [ @@ -2305,7 +2305,7 @@ export interface Rules { } ]; - /** Requires that the `@returns` tag has a `description` value. */ + /** Requires that the `@returns` tag has a `description` value (not including `void`/`undefined` type returns). */ "jsdoc/require-returns-description": | [] | [ @@ -2336,7 +2336,7 @@ export interface Rules { } ]; - /** Requires that `@returns` tag has `type` value. */ + /** Requires that `@returns` tag has type value (in curly brackets). */ "jsdoc/require-returns-type": | [] | [ @@ -2367,7 +2367,7 @@ export interface Rules { } ]; - /** Requires template tags for each generic type parameter */ + /** Requires `@template` tags be present when type parameters are used. */ "jsdoc/require-template": | [] | [ @@ -2397,7 +2397,7 @@ export interface Rules { } ]; - /** Requires that throw statements are documented. */ + /** Requires that throw statements are documented with `@throws` tags. */ "jsdoc/require-throws": | [] | [ @@ -2437,7 +2437,7 @@ export interface Rules { /** Requires a type for `@throws` tags */ "jsdoc/require-throws-type": []; - /** Requires yields are documented. */ + /** Requires yields are documented with `@yields` tags. */ "jsdoc/require-yields": | [] | [ @@ -2521,7 +2521,7 @@ export interface Rules { } ]; - /** Requires a yield statement in function body if a `@yields` tag is specified in JSDoc comment. */ + /** Ensures that if a `@yields` is present that a `yield` (or `yield` with a value) is present in the function body (or that if a `@next` is present that there is a yield with a return value present). */ "jsdoc/require-yields-check": | [] | [ @@ -2571,7 +2571,7 @@ export interface Rules { /** Requires a type for `@yields` tags */ "jsdoc/require-yields-type": []; - /** Sorts tags by a specified sequence according to tag name. */ + /** Sorts tags by a specified sequence according to tag name, optionally adding line breaks between tag groups. */ "jsdoc/sort-tags": | [] | [ @@ -2950,7 +2950,7 @@ export interface Rules { } ]; - /** Requires all types to be valid JSDoc or Closure compiler types without syntax errors. */ + /** Requires all types/namepaths to be valid JSDoc, Closure compiler, or TypeScript types (configurable in settings). */ "jsdoc/valid-types": | [] | [ diff --git a/src/rules/checkExamples.js b/src/rules/checkExamples.js index 1d0c73352..9d4b597bf 100644 --- a/src/rules/checkExamples.js +++ b/src/rules/checkExamples.js @@ -536,7 +536,7 @@ export default iterateJsdoc(({ iterateAllJsdocs: true, meta: { docs: { - description: 'Ensures that (JavaScript) examples within JSDoc adhere to ESLint rules.', + description: 'Ensures that (JavaScript) samples within `@example` tags adhere to ESLint rules.', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-examples.md#repos-sticky-header', }, schema: [ diff --git a/src/rules/checkParamNames.js b/src/rules/checkParamNames.js index 1542042ff..ae9852f5d 100644 --- a/src/rules/checkParamNames.js +++ b/src/rules/checkParamNames.js @@ -433,7 +433,7 @@ export default iterateJsdoc(({ contextDefaults: allowedNodes, meta: { docs: { - description: 'Ensures that parameter names in JSDoc match those in the function declaration.', + description: 'Checks for dupe `@param` names, that nested param names have roots, and that parameter names in function declarations match JSDoc param names.', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-param-names.md#repos-sticky-header', }, fixable: 'code', diff --git a/src/rules/emptyTags.js b/src/rules/emptyTags.js index c3246f158..afa31f487 100644 --- a/src/rules/emptyTags.js +++ b/src/rules/emptyTags.js @@ -75,7 +75,7 @@ export default iterateJsdoc(({ iterateAllJsdocs: true, meta: { docs: { - description: 'Expects specific tags to be empty of any content.', + description: 'Checks tags that are expected to be empty (e.g., `@abstract` or `@async`), reporting if they have content', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/empty-tags.md#repos-sticky-header', }, fixable: 'code', diff --git a/src/rules/implementsOnClasses.js b/src/rules/implementsOnClasses.js index 7660000b0..09f779693 100644 --- a/src/rules/implementsOnClasses.js +++ b/src/rules/implementsOnClasses.js @@ -26,7 +26,7 @@ export default iterateJsdoc(({ contextDefaults: true, meta: { docs: { - description: 'Reports an issue with any non-constructor function using `@implements`.', + description: 'Prohibits use of `@implements` on non-constructor functions (to enforce the tag only being used on classes/constructors).', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/implements-on-classes.md#repos-sticky-header', }, schema: [ diff --git a/src/rules/noBlankBlockDescriptions.js b/src/rules/noBlankBlockDescriptions.js index a2d3a76da..886163237 100644 --- a/src/rules/noBlankBlockDescriptions.js +++ b/src/rules/noBlankBlockDescriptions.js @@ -59,7 +59,7 @@ export default iterateJsdoc(({ iterateAllJsdocs: true, meta: { docs: { - description: 'Detects and removes extra lines of a blank block description', + description: 'If tags are present, this rule will prevent empty lines in the block description. If no tags are present, this rule will prevent extra empty lines in the block description.', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-blank-block-descriptions.md#repos-sticky-header', }, fixable: 'whitespace', diff --git a/src/rules/noMissingSyntax.js b/src/rules/noMissingSyntax.js index fa50b21d4..9165072d6 100644 --- a/src/rules/noMissingSyntax.js +++ b/src/rules/noMissingSyntax.js @@ -153,7 +153,6 @@ export default iterateJsdoc(({ description: 'Reports when certain comment structures are always expected.', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-missing-syntax.md#repos-sticky-header', }, - fixable: 'code', schema: [ { additionalProperties: false, diff --git a/src/rules/noRestrictedSyntax.js b/src/rules/noRestrictedSyntax.js index a749268cb..a0b3bd848 100644 --- a/src/rules/noRestrictedSyntax.js +++ b/src/rules/noRestrictedSyntax.js @@ -48,7 +48,6 @@ export default iterateJsdoc(({ description: 'Reports when certain comment structures are present.', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-restricted-syntax.md#repos-sticky-header', }, - fixable: 'code', schema: [ { additionalProperties: false, diff --git a/src/rules/noTypes.js b/src/rules/noTypes.js index 4ea4fcfaa..bf7b8705d 100644 --- a/src/rules/noTypes.js +++ b/src/rules/noTypes.js @@ -54,7 +54,7 @@ export default iterateJsdoc(({ ], meta: { docs: { - description: 'This rule reports types being used on `@param` or `@returns`.', + description: 'This rule reports types being used on `@param` or `@returns` (redundant with TypeScript).', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-types.md#repos-sticky-header', }, fixable: 'code', diff --git a/src/rules/noUndefinedTypes.js b/src/rules/noUndefinedTypes.js index 720f910ae..2bf4403c5 100644 --- a/src/rules/noUndefinedTypes.js +++ b/src/rules/noUndefinedTypes.js @@ -517,7 +517,7 @@ export default iterateJsdoc(({ iterateAllJsdocs: true, meta: { docs: { - description: 'Checks that types in JSDoc comments are defined.', + description: 'Besides some expected built-in types, prohibits any types not specified as globals or within `@typedef`.', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-undefined-types.md#repos-sticky-header', }, schema: [ diff --git a/src/rules/requireDescription.js b/src/rules/requireDescription.js index 71f8c69de..e66eb970e 100644 --- a/src/rules/requireDescription.js +++ b/src/rules/requireDescription.js @@ -99,7 +99,7 @@ export default iterateJsdoc(({ contextDefaults: true, meta: { docs: { - description: 'Requires that all functions have a description.', + description: 'Requires that all functions (and potentially other contexts) have a description.', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-description.md#repos-sticky-header', }, schema: [ diff --git a/src/rules/requireExample.js b/src/rules/requireExample.js index 5da2f90e8..3d8669bbf 100644 --- a/src/rules/requireExample.js +++ b/src/rules/requireExample.js @@ -53,7 +53,7 @@ export default iterateJsdoc(({ contextDefaults: true, meta: { docs: { - description: 'Requires that all functions have examples.', + description: 'Requires that all functions (and potentially other contexts) have examples.', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-example.md#repos-sticky-header', }, fixable: 'code', diff --git a/src/rules/requireHyphenBeforeParamDescription.js b/src/rules/requireHyphenBeforeParamDescription.js index a6213c1cc..336e4a12c 100644 --- a/src/rules/requireHyphenBeforeParamDescription.js +++ b/src/rules/requireHyphenBeforeParamDescription.js @@ -149,7 +149,7 @@ export default iterateJsdoc(({ iterateAllJsdocs: true, meta: { docs: { - description: 'Requires a hyphen before the `@param` description.', + description: 'Requires a hyphen before the `@param` description (and optionally before `@property` descriptions).', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-hyphen-before-param-description.md#repos-sticky-header', }, fixable: 'code', diff --git a/src/rules/requireJsdoc.js b/src/rules/requireJsdoc.js index d77577a5a..ff6547f8a 100644 --- a/src/rules/requireJsdoc.js +++ b/src/rules/requireJsdoc.js @@ -869,7 +869,7 @@ export default { meta: { docs: { category: 'Stylistic Issues', - description: 'Require JSDoc comments', + description: 'Checks for presence of JSDoc comments, on functions and potentially other contexts (optionally limited to exports).', recommended: true, url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-jsdoc.md#repos-sticky-header', }, diff --git a/src/rules/requireParam.js b/src/rules/requireParam.js index 65b60b46b..027fadb2c 100644 --- a/src/rules/requireParam.js +++ b/src/rules/requireParam.js @@ -517,7 +517,7 @@ export default iterateJsdoc(({ contextDefaults: true, meta: { docs: { - description: 'Requires that all function parameters are documented.', + description: 'Requires that all function parameters are documented with a `@param` tag.', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-param.md#repos-sticky-header', }, fixable: 'code', diff --git a/src/rules/requireParamName.js b/src/rules/requireParamName.js index 89f6e3b11..dc4f6a373 100644 --- a/src/rules/requireParamName.js +++ b/src/rules/requireParamName.js @@ -17,7 +17,7 @@ export default iterateJsdoc(({ contextDefaults: true, meta: { docs: { - description: 'Requires that all function parameters have names.', + description: 'Requires that all `@param` tags have names.', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-param-name.md#repos-sticky-header', }, schema: [ diff --git a/src/rules/requireParamType.js b/src/rules/requireParamType.js index b06fc7a7e..e94da5d9a 100644 --- a/src/rules/requireParamType.js +++ b/src/rules/requireParamType.js @@ -44,7 +44,7 @@ export default iterateJsdoc(({ contextDefaults: true, meta: { docs: { - description: 'Requires that each `@param` tag has a `type` value.', + description: 'Requires that each `@param` tag has a type value (in curly brackets).', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-param-type.md#repos-sticky-header', }, fixable: 'code', diff --git a/src/rules/requirePropertyName.js b/src/rules/requirePropertyName.js index d1956dd8e..e1e987c75 100644 --- a/src/rules/requirePropertyName.js +++ b/src/rules/requirePropertyName.js @@ -17,7 +17,7 @@ export default iterateJsdoc(({ iterateAllJsdocs: true, meta: { docs: { - description: 'Requires that all function `@property` tags have names.', + description: 'Requires that all `@property` tags have names.', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-property-name.md#repos-sticky-header', }, type: 'suggestion', diff --git a/src/rules/requirePropertyType.js b/src/rules/requirePropertyType.js index 5c9f09ef4..6166a34d4 100644 --- a/src/rules/requirePropertyType.js +++ b/src/rules/requirePropertyType.js @@ -17,7 +17,7 @@ export default iterateJsdoc(({ iterateAllJsdocs: true, meta: { docs: { - description: 'Requires that each `@property` tag has a `type` value.', + description: 'Requires that each `@property` tag has a type value (in curly brackets).', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-property-type.md#repos-sticky-header', }, type: 'suggestion', diff --git a/src/rules/requireReturns.js b/src/rules/requireReturns.js index c48941bb0..e5e01ef10 100644 --- a/src/rules/requireReturns.js +++ b/src/rules/requireReturns.js @@ -144,7 +144,7 @@ export default iterateJsdoc(({ contextDefaults: true, meta: { docs: { - description: 'Requires that returns are documented.', + description: 'Requires that returns are documented with `@returns`.', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-returns.md#repos-sticky-header', }, fixable: 'code', diff --git a/src/rules/requireReturnsCheck.js b/src/rules/requireReturnsCheck.js index 3fd462a95..201292fed 100755 --- a/src/rules/requireReturnsCheck.js +++ b/src/rules/requireReturnsCheck.js @@ -117,7 +117,7 @@ export default iterateJsdoc(({ }, { meta: { docs: { - description: 'Requires a return statement in function body if a `@returns` tag is specified in JSDoc comment.', + description: 'Requires a return statement in function body if a `@returns` tag is specified in JSDoc comment(and reports if multiple `@returns` tags are present).', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-returns-check.md#repos-sticky-header', }, schema: [ diff --git a/src/rules/requireReturnsDescription.js b/src/rules/requireReturnsDescription.js index c81f59085..770e0df1a 100644 --- a/src/rules/requireReturnsDescription.js +++ b/src/rules/requireReturnsDescription.js @@ -21,7 +21,7 @@ export default iterateJsdoc(({ contextDefaults: true, meta: { docs: { - description: 'Requires that the `@returns` tag has a `description` value.', + description: 'Requires that the `@returns` tag has a `description` value (not including `void`/`undefined` type returns).', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-returns-description.md#repos-sticky-header', }, schema: [ diff --git a/src/rules/requireReturnsType.js b/src/rules/requireReturnsType.js index 76df5dfdb..ee04c7139 100644 --- a/src/rules/requireReturnsType.js +++ b/src/rules/requireReturnsType.js @@ -13,7 +13,7 @@ export default iterateJsdoc(({ contextDefaults: true, meta: { docs: { - description: 'Requires that `@returns` tag has `type` value.', + description: 'Requires that `@returns` tag has type value (in curly brackets).', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-returns-type.md#repos-sticky-header', }, schema: [ diff --git a/src/rules/requireTemplate.js b/src/rules/requireTemplate.js index 762c7858c..c6cc06941 100644 --- a/src/rules/requireTemplate.js +++ b/src/rules/requireTemplate.js @@ -186,7 +186,7 @@ export default iterateJsdoc(({ iterateAllJsdocs: true, meta: { docs: { - description: 'Requires template tags for each generic type parameter', + description: 'Requires `@template` tags be present when type parameters are used.', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-template.md#repos-sticky-header', }, schema: [ diff --git a/src/rules/requireThrows.js b/src/rules/requireThrows.js index d7da7ee43..cd9dec808 100644 --- a/src/rules/requireThrows.js +++ b/src/rules/requireThrows.js @@ -67,7 +67,7 @@ export default iterateJsdoc(({ contextDefaults: true, meta: { docs: { - description: 'Requires that throw statements are documented.', + description: 'Requires that throw statements are documented with `@throws` tags.', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-throws.md#repos-sticky-header', }, schema: [ diff --git a/src/rules/requireYields.js b/src/rules/requireYields.js index 10f6bcfa5..dca588f1c 100644 --- a/src/rules/requireYields.js +++ b/src/rules/requireYields.js @@ -152,7 +152,7 @@ export default iterateJsdoc(({ contextDefaults: true, meta: { docs: { - description: 'Requires yields are documented.', + description: 'Requires yields are documented with `@yields` tags.', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-yields.md#repos-sticky-header', }, schema: [ diff --git a/src/rules/requireYieldsCheck.js b/src/rules/requireYieldsCheck.js index 3af3c932b..83e127d7a 100644 --- a/src/rules/requireYieldsCheck.js +++ b/src/rules/requireYieldsCheck.js @@ -156,7 +156,7 @@ export default iterateJsdoc(({ }, { meta: { docs: { - description: 'Requires a yield statement in function body if a `@yields` tag is specified in JSDoc comment.', + description: 'Ensures that if a `@yields` is present that a `yield` (or `yield` with a value) is present in the function body (or that if a `@next` is present that there is a yield with a return value present).', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-yields-check.md#repos-sticky-header', }, schema: [ diff --git a/src/rules/sortTags.js b/src/rules/sortTags.js index 2a7b36edb..1e021545a 100644 --- a/src/rules/sortTags.js +++ b/src/rules/sortTags.js @@ -512,7 +512,7 @@ export default iterateJsdoc(({ iterateAllJsdocs: true, meta: { docs: { - description: 'Sorts tags by a specified sequence according to tag name.', + description: 'Sorts tags by a specified sequence according to tag name, optionally adding line breaks between tag groups.', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/sort-tags.md#repos-sticky-header', }, fixable: 'code', diff --git a/src/rules/validTypes.js b/src/rules/validTypes.js index 24dc3454e..bf91c2b14 100644 --- a/src/rules/validTypes.js +++ b/src/rules/validTypes.js @@ -392,7 +392,7 @@ export default iterateJsdoc(({ iterateAllJsdocs: true, meta: { docs: { - description: 'Requires all types to be valid JSDoc or Closure compiler types without syntax errors.', + description: 'Requires all types/namepaths to be valid JSDoc, Closure compiler, or TypeScript types (configurable in settings).', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/valid-types.md#repos-sticky-header', }, schema: [ From 214a5f26c67ab29deddc12e0a44e2361aaecd22c Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Thu, 18 Sep 2025 16:50:44 +0800 Subject: [PATCH 109/189] feat(`require-next-description`, `require-throws-decription`, `require-yields-description`): add rules; fixes #1526 --- .README/README.md | 2 +- .README/rules/require-next-description.md | 19 +++++++++ .README/rules/require-throws-description.md | 19 +++++++++ .README/rules/require-yields-description.md | 19 +++++++++ README.md | 3 ++ docs/rules/require-next-description.md | 41 +++++++++++++++++++ docs/rules/require-throws-description.md | 41 +++++++++++++++++++ docs/rules/require-yields-description.md | 41 +++++++++++++++++++ src/bin/generateDocs.js | 2 +- src/index-cjs.js | 36 ++++++++++++++++ src/index.js | 36 ++++++++++++++++ src/rules.d.ts | 9 ++++ .../assertions/requireNextDescription.js | 26 ++++++++++++ .../assertions/requireThrowsDescription.js | 26 ++++++++++++ .../assertions/requireYieldsDescription.js | 26 ++++++++++++ test/rules/ruleNames.json | 3 ++ 16 files changed, 347 insertions(+), 2 deletions(-) create mode 100644 .README/rules/require-next-description.md create mode 100644 .README/rules/require-throws-description.md create mode 100644 .README/rules/require-yields-description.md create mode 100644 docs/rules/require-next-description.md create mode 100644 docs/rules/require-throws-description.md create mode 100644 docs/rules/require-yields-description.md create mode 100644 test/rules/assertions/requireNextDescription.js create mode 100644 test/rules/assertions/requireThrowsDescription.js create mode 100644 test/rules/assertions/requireYieldsDescription.js diff --git a/.README/README.md b/.README/README.md index b7caeaf78..496e758b7 100644 --- a/.README/README.md +++ b/.README/README.md @@ -375,4 +375,4 @@ non-default-recommended fixer). |recommended|fixable|rule|description| |-|-|-|-| -{"gitdown": "rulestable"} +{"gitdown": "rules-table"} diff --git a/.README/rules/require-next-description.md b/.README/rules/require-next-description.md new file mode 100644 index 000000000..81d24eb58 --- /dev/null +++ b/.README/rules/require-next-description.md @@ -0,0 +1,19 @@ +# `require-next-description` + +Requires a description for (non-standard) `@next` tags. + +||| +|---|---| +|Context|everywhere| +|Tags|`next`| +|Recommended|false| +|Settings|| +|Options|| + +## Failing examples + + + +## Passing examples + + diff --git a/.README/rules/require-throws-description.md b/.README/rules/require-throws-description.md new file mode 100644 index 000000000..13301b3c7 --- /dev/null +++ b/.README/rules/require-throws-description.md @@ -0,0 +1,19 @@ +# `require-throws-description` + +Requires a description for `@throws` tags. + +||| +|---|---| +|Context|everywhere| +|Tags|`throws`| +|Recommended|false| +|Settings|| +|Options|| + +## Failing examples + + + +## Passing examples + + diff --git a/.README/rules/require-yields-description.md b/.README/rules/require-yields-description.md new file mode 100644 index 000000000..c4a995e9e --- /dev/null +++ b/.README/rules/require-yields-description.md @@ -0,0 +1,19 @@ +# `require-yields-description` + +Requires a description for `@yields` tags. + +||| +|---|---| +|Context|everywhere| +|Tags|`yields`| +|Recommended|false| +|Settings|| +|Options|| + +## Failing examples + + + +## Passing examples + + diff --git a/README.md b/README.md index af51060a6..bd1d24472 100644 --- a/README.md +++ b/README.md @@ -451,6 +451,7 @@ non-default-recommended fixer). ||| [require-file-overview](./docs/rules/require-file-overview.md#readme) | Checks that all files have one `@file`, `@fileoverview`, or `@overview` tag at the beginning of the file. | ||:wrench:| [require-hyphen-before-param-description](./docs/rules/require-hyphen-before-param-description.md#readme) | Requires a hyphen before the `@param` description (and optionally before `@property` descriptions). | |:heavy_check_mark:|:wrench:| [require-jsdoc](./docs/rules/require-jsdoc.md#readme) | Checks for presence of JSDoc comments, on functions and potentially other contexts (optionally limited to exports). | +||| [require-next-description](./docs/rules/require-next-description.md#readme) | Requires a description for `@next` tags | |:heavy_check_mark:|| [require-next-type](./docs/rules/require-next-type.md#readme) | Requires a type for `@next` tags | |:heavy_check_mark:|:wrench:| [require-param](./docs/rules/require-param.md#readme) | Requires that all function parameters are documented with a `@param` tag. | |:heavy_check_mark:|:wrench:| [require-param-description](./docs/rules/require-param-description.md#readme) | Requires that each `@param` tag has a `description` value. | @@ -466,9 +467,11 @@ non-default-recommended fixer). |:heavy_check_mark: (Off in TS; On in TS flavor)|| [require-returns-type](./docs/rules/require-returns-type.md#readme) | Requires that `@returns` tag has type value (in curly brackets). | ||| [require-template](./docs/rules/require-template.md#readme) | Requires `@template` tags be present when type parameters are used. | ||| [require-throws](./docs/rules/require-throws.md#readme) | Requires that throw statements are documented with `@throws` tags. | +||| [require-throws-description](./docs/rules/require-throws-description.md#readme) | Requires a description for `@throws` tags | |:heavy_check_mark:|| [require-throws-type](./docs/rules/require-throws-type.md#readme) | Requires a type for `@throws` tags | |:heavy_check_mark:|| [require-yields](./docs/rules/require-yields.md#readme) | Requires yields are documented with `@yields` tags. | |:heavy_check_mark:|| [require-yields-check](./docs/rules/require-yields-check.md#readme) | Ensures that if a `@yields` is present that a `yield` (or `yield` with a value) is present in the function body (or that if a `@next` is present that there is a yield with a return value present). | +||| [require-yields-description](./docs/rules/require-yields-description.md#readme) | Requires a description for `@yields` tags | |:heavy_check_mark:|| [require-yields-type](./docs/rules/require-yields-type.md#readme) | Requires a type for `@yields` tags | ||:wrench:| [sort-tags](./docs/rules/sort-tags.md#readme) | Sorts tags by a specified sequence according to tag name, optionally adding line breaks between tag groups. | |:heavy_check_mark:|:wrench:| [tag-lines](./docs/rules/tag-lines.md#readme) | Enforces lines (or no lines) between tags. | diff --git a/docs/rules/require-next-description.md b/docs/rules/require-next-description.md new file mode 100644 index 000000000..84af4855c --- /dev/null +++ b/docs/rules/require-next-description.md @@ -0,0 +1,41 @@ + + +# require-next-description + +Requires a description for (non-standard) `@next` tags. + +||| +|---|---| +|Context|everywhere| +|Tags|`next`| +|Recommended|false| +|Settings|| +|Options|| + + + +## Failing examples + +The following patterns are considered problems: + +````ts +/** + * @next {SomeType} + */ +// Message: @next should have a description +```` + + + + + +## Passing examples + +The following patterns are not considered problems: + +````ts +/** + * @next {SomeType} Has a description + */ +```` + diff --git a/docs/rules/require-throws-description.md b/docs/rules/require-throws-description.md new file mode 100644 index 000000000..4786f74b9 --- /dev/null +++ b/docs/rules/require-throws-description.md @@ -0,0 +1,41 @@ + + +# require-throws-description + +Requires a description for `@throws` tags. + +||| +|---|---| +|Context|everywhere| +|Tags|`throws`| +|Recommended|false| +|Settings|| +|Options|| + + + +## Failing examples + +The following patterns are considered problems: + +````ts +/** + * @throws {SomeType} + */ +// Message: @throws should have a description +```` + + + + + +## Passing examples + +The following patterns are not considered problems: + +````ts +/** + * @throws {SomeType} Has a description + */ +```` + diff --git a/docs/rules/require-yields-description.md b/docs/rules/require-yields-description.md new file mode 100644 index 000000000..7383542ba --- /dev/null +++ b/docs/rules/require-yields-description.md @@ -0,0 +1,41 @@ + + +# require-yields-description + +Requires a description for `@yields` tags. + +||| +|---|---| +|Context|everywhere| +|Tags|`yields`| +|Recommended|false| +|Settings|| +|Options|| + + + +## Failing examples + +The following patterns are considered problems: + +````ts +/** + * @yields {SomeType} + */ +// Message: @yields should have a description +```` + + + + + +## Passing examples + +The following patterns are not considered problems: + +````ts +/** + * @yields {SomeType} Has a description + */ +```` + diff --git a/src/bin/generateDocs.js b/src/bin/generateDocs.js index cee5fd63d..dd47b4595 100644 --- a/src/bin/generateDocs.js +++ b/src/bin/generateDocs.js @@ -213,7 +213,7 @@ const generateDocs = async () => { }, }); - gitdown.registerHelper('rulestable', { + gitdown.registerHelper('rules-table', { compile () { return tableRows.toSorted(({ decamelized, diff --git a/src/index-cjs.js b/src/index-cjs.js index d08172bc8..324b31620 100644 --- a/src/index-cjs.js +++ b/src/index-cjs.js @@ -144,6 +144,17 @@ index.rules = { 'require-file-overview': requireFileOverview, 'require-hyphen-before-param-description': requireHyphenBeforeParamDescription, 'require-jsdoc': requireJsdoc, + 'require-next-description': buildForbidRuleDefinition({ + contexts: [ + { + comment: 'JsdocBlock:has(JsdocTag[tag=next]:not([name!=""]))', + context: 'any', + message: '@next should have a description', + }, + ], + description: 'Requires a description for `@next` tags', + url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-next-description.md#repos-sticky-header', + }), 'require-next-type': buildForbidRuleDefinition({ contexts: [ { @@ -169,6 +180,17 @@ index.rules = { 'require-returns-type': requireReturnsType, 'require-template': requireTemplate, 'require-throws': requireThrows, + 'require-throws-description': buildForbidRuleDefinition({ + contexts: [ + { + comment: 'JsdocBlock:has(JsdocTag[tag=throws]:not([description!=""]))', + context: 'any', + message: '@throws should have a description', + }, + ], + description: 'Requires a description for `@throws` tags', + url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-throws-description.md#repos-sticky-header', + }), 'require-throws-type': buildForbidRuleDefinition({ contexts: [ { @@ -182,6 +204,17 @@ index.rules = { }), 'require-yields': requireYields, 'require-yields-check': requireYieldsCheck, + 'require-yields-description': buildForbidRuleDefinition({ + contexts: [ + { + comment: 'JsdocBlock:has(JsdocTag[tag=yields]:not([name!=""]))', + context: 'any', + message: '@yields should have a description', + }, + ], + description: 'Requires a description for `@yields` tags', + url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-yields-description.md#repos-sticky-header', + }), 'require-yields-type': buildForbidRuleDefinition({ contexts: [ { @@ -257,6 +290,7 @@ const createRecommendedRuleset = (warnOrError, flatName) => { 'jsdoc/require-file-overview': 'off', 'jsdoc/require-hyphen-before-param-description': 'off', 'jsdoc/require-jsdoc': warnOrError, + 'jsdoc/require-next-description': 'off', 'jsdoc/require-next-type': warnOrError, 'jsdoc/require-param': warnOrError, 'jsdoc/require-param-description': warnOrError, @@ -272,9 +306,11 @@ const createRecommendedRuleset = (warnOrError, flatName) => { 'jsdoc/require-returns-type': warnOrError, 'jsdoc/require-template': 'off', 'jsdoc/require-throws': 'off', + 'jsdoc/require-throws-description': 'off', 'jsdoc/require-throws-type': warnOrError, 'jsdoc/require-yields': warnOrError, 'jsdoc/require-yields-check': warnOrError, + 'jsdoc/require-yields-description': 'off', 'jsdoc/require-yields-type': warnOrError, 'jsdoc/sort-tags': 'off', 'jsdoc/tag-lines': warnOrError, diff --git a/src/index.js b/src/index.js index 358afc454..f8756bcba 100644 --- a/src/index.js +++ b/src/index.js @@ -150,6 +150,17 @@ index.rules = { 'require-file-overview': requireFileOverview, 'require-hyphen-before-param-description': requireHyphenBeforeParamDescription, 'require-jsdoc': requireJsdoc, + 'require-next-description': buildForbidRuleDefinition({ + contexts: [ + { + comment: 'JsdocBlock:has(JsdocTag[tag=next]:not([name!=""]))', + context: 'any', + message: '@next should have a description', + }, + ], + description: 'Requires a description for `@next` tags', + url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-next-description.md#repos-sticky-header', + }), 'require-next-type': buildForbidRuleDefinition({ contexts: [ { @@ -175,6 +186,17 @@ index.rules = { 'require-returns-type': requireReturnsType, 'require-template': requireTemplate, 'require-throws': requireThrows, + 'require-throws-description': buildForbidRuleDefinition({ + contexts: [ + { + comment: 'JsdocBlock:has(JsdocTag[tag=throws]:not([description!=""]))', + context: 'any', + message: '@throws should have a description', + }, + ], + description: 'Requires a description for `@throws` tags', + url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-throws-description.md#repos-sticky-header', + }), 'require-throws-type': buildForbidRuleDefinition({ contexts: [ { @@ -188,6 +210,17 @@ index.rules = { }), 'require-yields': requireYields, 'require-yields-check': requireYieldsCheck, + 'require-yields-description': buildForbidRuleDefinition({ + contexts: [ + { + comment: 'JsdocBlock:has(JsdocTag[tag=yields]:not([name!=""]))', + context: 'any', + message: '@yields should have a description', + }, + ], + description: 'Requires a description for `@yields` tags', + url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-yields-description.md#repos-sticky-header', + }), 'require-yields-type': buildForbidRuleDefinition({ contexts: [ { @@ -263,6 +296,7 @@ const createRecommendedRuleset = (warnOrError, flatName) => { 'jsdoc/require-file-overview': 'off', 'jsdoc/require-hyphen-before-param-description': 'off', 'jsdoc/require-jsdoc': warnOrError, + 'jsdoc/require-next-description': 'off', 'jsdoc/require-next-type': warnOrError, 'jsdoc/require-param': warnOrError, 'jsdoc/require-param-description': warnOrError, @@ -278,9 +312,11 @@ const createRecommendedRuleset = (warnOrError, flatName) => { 'jsdoc/require-returns-type': warnOrError, 'jsdoc/require-template': 'off', 'jsdoc/require-throws': 'off', + 'jsdoc/require-throws-description': 'off', 'jsdoc/require-throws-type': warnOrError, 'jsdoc/require-yields': warnOrError, 'jsdoc/require-yields-check': warnOrError, + 'jsdoc/require-yields-description': 'off', 'jsdoc/require-yields-type': warnOrError, 'jsdoc/sort-tags': 'off', 'jsdoc/tag-lines': warnOrError, diff --git a/src/rules.d.ts b/src/rules.d.ts index 4f99d7df9..ac8530ed5 100644 --- a/src/rules.d.ts +++ b/src/rules.d.ts @@ -1757,6 +1757,9 @@ export interface Rules { } ]; + /** Requires a description for `@next` tags */ + "jsdoc/require-next-description": []; + /** Requires a type for `@next` tags */ "jsdoc/require-next-type": []; @@ -2434,6 +2437,9 @@ export interface Rules { } ]; + /** Requires a description for `@throws` tags */ + "jsdoc/require-throws-description": []; + /** Requires a type for `@throws` tags */ "jsdoc/require-throws-type": []; @@ -2568,6 +2574,9 @@ export interface Rules { } ]; + /** Requires a description for `@yields` tags */ + "jsdoc/require-yields-description": []; + /** Requires a type for `@yields` tags */ "jsdoc/require-yields-type": []; diff --git a/test/rules/assertions/requireNextDescription.js b/test/rules/assertions/requireNextDescription.js new file mode 100644 index 000000000..c4dbe4e3c --- /dev/null +++ b/test/rules/assertions/requireNextDescription.js @@ -0,0 +1,26 @@ +export default { + invalid: [ + { + code: ` + /** + * @next {SomeType} + */ + `, + errors: [ + { + line: 2, + message: '@next should have a description', + }, + ], + }, + ], + valid: [ + { + code: ` + /** + * @next {SomeType} Has a description + */ + `, + }, + ], +}; diff --git a/test/rules/assertions/requireThrowsDescription.js b/test/rules/assertions/requireThrowsDescription.js new file mode 100644 index 000000000..66adc3de4 --- /dev/null +++ b/test/rules/assertions/requireThrowsDescription.js @@ -0,0 +1,26 @@ +export default { + invalid: [ + { + code: ` + /** + * @throws {SomeType} + */ + `, + errors: [ + { + line: 2, + message: '@throws should have a description', + }, + ], + }, + ], + valid: [ + { + code: ` + /** + * @throws {SomeType} Has a description + */ + `, + }, + ], +}; diff --git a/test/rules/assertions/requireYieldsDescription.js b/test/rules/assertions/requireYieldsDescription.js new file mode 100644 index 000000000..6a8560316 --- /dev/null +++ b/test/rules/assertions/requireYieldsDescription.js @@ -0,0 +1,26 @@ +export default { + invalid: [ + { + code: ` + /** + * @yields {SomeType} + */ + `, + errors: [ + { + line: 2, + message: '@yields should have a description', + }, + ], + }, + ], + valid: [ + { + code: ` + /** + * @yields {SomeType} Has a description + */ + `, + }, + ], +}; diff --git a/test/rules/ruleNames.json b/test/rules/ruleNames.json index 29b483221..b195a0a24 100644 --- a/test/rules/ruleNames.json +++ b/test/rules/ruleNames.json @@ -38,6 +38,7 @@ "require-file-overview", "require-hyphen-before-param-description", "require-jsdoc", + "require-next-description", "require-next-type", "require-param", "require-param-description", @@ -53,9 +54,11 @@ "require-returns-type", "require-template", "require-throws", + "require-throws-description", "require-throws-type", "require-yields", "require-yields-check", + "require-yields-description", "require-yields-type", "sort-tags", "tag-lines", From 9a2763bb2927ee89b9399939ce8aa9925a825ab2 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Thu, 18 Sep 2025 17:51:42 +0800 Subject: [PATCH 110/189] fix(typescript): deprecate `check-examples` --- README.md | 2 +- src/rules.d.ts | 2 +- src/rules/checkExamples.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index bd1d24472..54bc8bf2f 100644 --- a/README.md +++ b/README.md @@ -414,7 +414,7 @@ non-default-recommended fixer). |-|-|-|-| |:heavy_check_mark:|| [check-access](./docs/rules/check-access.md#readme) | Checks that `@access` tags have a valid value. | |:heavy_check_mark:|:wrench:| [check-alignment](./docs/rules/check-alignment.md#readme) | Reports invalid alignment of JSDoc block asterisks. | -||| [check-examples](./docs/rules/check-examples.md#readme) | Ensures that (JavaScript) samples within `@example` tags adhere to ESLint rules. | +||| [check-examples](./docs/rules/check-examples.md#readme) | @deprecated - Use `getJsdocProcessorPlugin` processor; ensures that (JavaScript) samples within `@example` tags adhere to ESLint rules. | ||| [check-indentation](./docs/rules/check-indentation.md#readme) | Reports invalid padding inside JSDoc blocks. | ||:wrench:| [check-line-alignment](./docs/rules/check-line-alignment.md#readme) | Reports invalid alignment of JSDoc block lines. | |:heavy_check_mark:|:wrench:| [check-param-names](./docs/rules/check-param-names.md#readme) | Checks for dupe `@param` names, that nested param names have roots, and that parameter names in function declarations match JSDoc param names. | diff --git a/src/rules.d.ts b/src/rules.d.ts index ac8530ed5..2427ae37f 100644 --- a/src/rules.d.ts +++ b/src/rules.d.ts @@ -15,7 +15,7 @@ export interface Rules { } ]; - /** Ensures that (JavaScript) samples within `@example` tags adhere to ESLint rules. */ + /** @deprecated - Use `getJsdocProcessorPlugin` processor; ensures that (JavaScript) samples within `@example` tags adhere to ESLint rules. */ "jsdoc/check-examples": | [] | [ diff --git a/src/rules/checkExamples.js b/src/rules/checkExamples.js index 9d4b597bf..040514d4a 100644 --- a/src/rules/checkExamples.js +++ b/src/rules/checkExamples.js @@ -536,7 +536,7 @@ export default iterateJsdoc(({ iterateAllJsdocs: true, meta: { docs: { - description: 'Ensures that (JavaScript) samples within `@example` tags adhere to ESLint rules.', + description: '@deprecated - Use `getJsdocProcessorPlugin` processor; ensures that (JavaScript) samples within `@example` tags adhere to ESLint rules.', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-examples.md#repos-sticky-header', }, schema: [ From af006ab1477f1b0c9a531889307076beb3721a90 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Thu, 18 Sep 2025 20:16:11 +0800 Subject: [PATCH 111/189] docs: update list of non-table rules on README --- .README/README.md | 28 +++++++++++++++++++++------- README.md | 28 +++++++++++++++++++++------- 2 files changed, 42 insertions(+), 14 deletions(-) diff --git a/.README/README.md b/.README/README.md index 496e758b7..854a47075 100644 --- a/.README/README.md +++ b/.README/README.md @@ -214,7 +214,7 @@ Finally, enable all of the rules that you would like to use. "rules": { "jsdoc/check-access": 1, // Recommended "jsdoc/check-alignment": 1, // Recommended - "jsdoc/check-examples": 1, + // "jsdoc/check-examples": 1, // Deprecated and not for ESLint >= 8 "jsdoc/check-indentation": 1, "jsdoc/check-line-alignment": 1, "jsdoc/check-param-names": 1, // Recommended @@ -224,19 +224,25 @@ Finally, enable all of the rules that you would like to use. "jsdoc/check-template-names": 1, "jsdoc/check-types": 1, // Recommended "jsdoc/check-values": 1, // Recommended + "jsdoc/convert-to-jsdoc-comments": 1, "jsdoc/empty-tags": 1, // Recommended "jsdoc/implements-on-classes": 1, // Recommended + "jsdoc/imports-as-dependencies": 1, "jsdoc/informative-docs": 1, + "jsdoc/lines-before-block": 1, "jsdoc/match-description": 1, + "jsdoc/match-name": 1, "jsdoc/multiline-blocks": 1, // Recommended "jsdoc/no-bad-blocks": 1, "jsdoc/no-blank-block-descriptions": 1, - "jsdoc/no-defaults": 1, + "jsdoc/no-defaults": 1, // Recommended "jsdoc/no-missing-syntax": 1, "jsdoc/no-multi-asterisks": 1, // Recommended "jsdoc/no-restricted-syntax": 1, - "jsdoc/no-types": 1, - "jsdoc/no-undefined-types": 1, // Recommended + "jsdoc/no-types": 1, // Recommended for TS configs + "jsdoc/no-undefined-types": 1, // Recommended for non-TS configs + "jsdoc/rejct-any-type": 1, // Recommended + "jsdoc/reject-function-type": 1, // Recommended "jsdoc/require-asterisk-prefix": 1, "jsdoc/require-description": 1, "jsdoc/require-description-complete-sentence": 1, @@ -244,24 +250,32 @@ Finally, enable all of the rules that you would like to use. "jsdoc/require-file-overview": 1, "jsdoc/require-hyphen-before-param-description": 1, "jsdoc/require-jsdoc": 1, // Recommended + "jsdoc/require-next-description": 1, + "jsdoc/require-next-type": 1, // Recommended "jsdoc/require-param-description": 1, // Recommended "jsdoc/require-param-name": 1, // Recommended - "jsdoc/require-param-type": 1, // Recommended + "jsdoc/require-param-type": 1, // Recommended in non-TS configs "jsdoc/require-param": 1, // Recommended "jsdoc/require-property-description": 1, // Recommended "jsdoc/require-property-name": 1, // Recommended - "jsdoc/require-property-type": 1, // Recommended + "jsdoc/require-property-type": 1, // Recommended in non-TS configs "jsdoc/require-property": 1, // Recommended "jsdoc/require-returns-check": 1, // Recommended "jsdoc/require-returns-description": 1, // Recommended - "jsdoc/require-returns-type": 1, // Recommended + "jsdoc/require-returns-type": 1, // Recommended in non-TS configs "jsdoc/require-returns": 1, // Recommended "jsdoc/require-template": 1, "jsdoc/require-throws": 1, + "jsdoc/require-throws-description": 1, + "jsdoc/require-throws-type": 1, // Recommended "jsdoc/require-yields-check": 1, // Recommended + "jsdoc/require-yields-description": 1, + "jsdoc/require-yields-type": 1, // Recommended "jsdoc/require-yields": 1, // Recommended "jsdoc/sort-tags": 1, "jsdoc/tag-lines": 1, // Recommended + "jsdoc/text-escaping": 1, + "jsdoc/type-formatting": 1, "jsdoc/valid-types": 1 // Recommended } } diff --git a/README.md b/README.md index 54bc8bf2f..474df5aae 100644 --- a/README.md +++ b/README.md @@ -241,7 +241,7 @@ Finally, enable all of the rules that you would like to use. "rules": { "jsdoc/check-access": 1, // Recommended "jsdoc/check-alignment": 1, // Recommended - "jsdoc/check-examples": 1, + // "jsdoc/check-examples": 1, // Deprecated and not for ESLint >= 8 "jsdoc/check-indentation": 1, "jsdoc/check-line-alignment": 1, "jsdoc/check-param-names": 1, // Recommended @@ -251,19 +251,25 @@ Finally, enable all of the rules that you would like to use. "jsdoc/check-template-names": 1, "jsdoc/check-types": 1, // Recommended "jsdoc/check-values": 1, // Recommended + "jsdoc/convert-to-jsdoc-comments": 1, "jsdoc/empty-tags": 1, // Recommended "jsdoc/implements-on-classes": 1, // Recommended + "jsdoc/imports-as-dependencies": 1, "jsdoc/informative-docs": 1, + "jsdoc/lines-before-block": 1, "jsdoc/match-description": 1, + "jsdoc/match-name": 1, "jsdoc/multiline-blocks": 1, // Recommended "jsdoc/no-bad-blocks": 1, "jsdoc/no-blank-block-descriptions": 1, - "jsdoc/no-defaults": 1, + "jsdoc/no-defaults": 1, // Recommended "jsdoc/no-missing-syntax": 1, "jsdoc/no-multi-asterisks": 1, // Recommended "jsdoc/no-restricted-syntax": 1, - "jsdoc/no-types": 1, - "jsdoc/no-undefined-types": 1, // Recommended + "jsdoc/no-types": 1, // Recommended for TS configs + "jsdoc/no-undefined-types": 1, // Recommended for non-TS configs + "jsdoc/rejct-any-type": 1, // Recommended + "jsdoc/reject-function-type": 1, // Recommended "jsdoc/require-asterisk-prefix": 1, "jsdoc/require-description": 1, "jsdoc/require-description-complete-sentence": 1, @@ -271,24 +277,32 @@ Finally, enable all of the rules that you would like to use. "jsdoc/require-file-overview": 1, "jsdoc/require-hyphen-before-param-description": 1, "jsdoc/require-jsdoc": 1, // Recommended + "jsdoc/require-next-description": 1, + "jsdoc/require-next-type": 1, // Recommended "jsdoc/require-param-description": 1, // Recommended "jsdoc/require-param-name": 1, // Recommended - "jsdoc/require-param-type": 1, // Recommended + "jsdoc/require-param-type": 1, // Recommended in non-TS configs "jsdoc/require-param": 1, // Recommended "jsdoc/require-property-description": 1, // Recommended "jsdoc/require-property-name": 1, // Recommended - "jsdoc/require-property-type": 1, // Recommended + "jsdoc/require-property-type": 1, // Recommended in non-TS configs "jsdoc/require-property": 1, // Recommended "jsdoc/require-returns-check": 1, // Recommended "jsdoc/require-returns-description": 1, // Recommended - "jsdoc/require-returns-type": 1, // Recommended + "jsdoc/require-returns-type": 1, // Recommended in non-TS configs "jsdoc/require-returns": 1, // Recommended "jsdoc/require-template": 1, "jsdoc/require-throws": 1, + "jsdoc/require-throws-description": 1, + "jsdoc/require-throws-type": 1, // Recommended "jsdoc/require-yields-check": 1, // Recommended + "jsdoc/require-yields-description": 1, + "jsdoc/require-yields-type": 1, // Recommended "jsdoc/require-yields": 1, // Recommended "jsdoc/sort-tags": 1, "jsdoc/tag-lines": 1, // Recommended + "jsdoc/text-escaping": 1, + "jsdoc/type-formatting": 1, "jsdoc/valid-types": 1 // Recommended } } From 2544b12238e248ab581e3c4964068e7d48cdf9b3 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Thu, 18 Sep 2025 20:30:44 +0800 Subject: [PATCH 112/189] fix(`require-yields-description`, `require-next-description`): handle multiline descriptions; fixes #1528 --- docs/rules/require-yields-description.md | 6 ++++++ package.json | 2 +- src/index-cjs.js | 4 ++-- src/index.js | 4 ++-- .../assertions/requireYieldsDescription.js | 20 +++++++++++++++++-- 5 files changed, 29 insertions(+), 7 deletions(-) diff --git a/docs/rules/require-yields-description.md b/docs/rules/require-yields-description.md index 7383542ba..754901077 100644 --- a/docs/rules/require-yields-description.md +++ b/docs/rules/require-yields-description.md @@ -37,5 +37,11 @@ The following patterns are not considered problems: /** * @yields {SomeType} Has a description */ + +/** + * @yields + * The results. + */ +export function *test1(): IterableIterator { yield "hello"; } ```` diff --git a/package.json b/package.json index 6e6623d58..16fd8c0e4 100644 --- a/package.json +++ b/package.json @@ -160,7 +160,7 @@ "build": "node ./src/bin/buildEntryFileForTS.js && rimraf ./dist && NODE_ENV=production babel ./src --out-file-extension .cjs --out-dir ./dist --copy-files --source-maps --ignore ./src/bin/*.js --no-copy-ignored && replace 'require\\(\"\\.(.*?)\\.[^.]*?\"\\)' 'require(\".$1.cjs\")' 'dist' -r --include=\"*.cjs\" && pnpm tsc-build && pnpm tsc-cjs", "attw": "attw --pack .", "check-docs": "node ./src/bin/generateDocs.js --check", - "create-docs": "pnpm run create-options && node ./src/bin/generateDocs.js", + "create-docs": "pnpm run create-options && node ./src/bin/generateDocs.js && pnpm ruleTypes", "create-rule": "node ./src/bin/generateRule.js", "create-options": "node ./src/bin/generateOptions.js", "install-offline": "pnpm install --prefer-offline --no-audit", diff --git a/src/index-cjs.js b/src/index-cjs.js index 324b31620..922a4cc87 100644 --- a/src/index-cjs.js +++ b/src/index-cjs.js @@ -147,7 +147,7 @@ index.rules = { 'require-next-description': buildForbidRuleDefinition({ contexts: [ { - comment: 'JsdocBlock:has(JsdocTag[tag=next]:not([name!=""]))', + comment: 'JsdocBlock:has(JsdocTag[tag=next]:not([name!=""]):not([description!=""]))', context: 'any', message: '@next should have a description', }, @@ -207,7 +207,7 @@ index.rules = { 'require-yields-description': buildForbidRuleDefinition({ contexts: [ { - comment: 'JsdocBlock:has(JsdocTag[tag=yields]:not([name!=""]))', + comment: 'JsdocBlock:has(JsdocTag[tag=yields]:not([name!=""]):not([description!=""]))', context: 'any', message: '@yields should have a description', }, diff --git a/src/index.js b/src/index.js index f8756bcba..b819ea770 100644 --- a/src/index.js +++ b/src/index.js @@ -153,7 +153,7 @@ index.rules = { 'require-next-description': buildForbidRuleDefinition({ contexts: [ { - comment: 'JsdocBlock:has(JsdocTag[tag=next]:not([name!=""]))', + comment: 'JsdocBlock:has(JsdocTag[tag=next]:not([name!=""]):not([description!=""]))', context: 'any', message: '@next should have a description', }, @@ -213,7 +213,7 @@ index.rules = { 'require-yields-description': buildForbidRuleDefinition({ contexts: [ { - comment: 'JsdocBlock:has(JsdocTag[tag=yields]:not([name!=""]))', + comment: 'JsdocBlock:has(JsdocTag[tag=yields]:not([name!=""]):not([description!=""]))', context: 'any', message: '@yields should have a description', }, diff --git a/test/rules/assertions/requireYieldsDescription.js b/test/rules/assertions/requireYieldsDescription.js index 6a8560316..dc4787a2a 100644 --- a/test/rules/assertions/requireYieldsDescription.js +++ b/test/rules/assertions/requireYieldsDescription.js @@ -1,4 +1,8 @@ -export default { +import { + parser as typescriptEslintParser, +} from 'typescript-eslint'; + +export default /** @type {import('../index.js').TestCases} */ ({ invalid: [ { code: ` @@ -22,5 +26,17 @@ export default { */ `, }, + { + code: ` + /** + * @yields + * The results. + */ + export function *test1(): IterableIterator { yield "hello"; } + `, + languageOptions: { + parser: typescriptEslintParser, + }, + }, ], -}; +}); From c8612b257c350173cd9db3e22aaf71317a7013da Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Fri, 19 Sep 2025 10:23:25 +0800 Subject: [PATCH 113/189] fix: allow typedefs with no initial whitespace; fixes #1217 Also: - test: add test for invalid typedef --- docs/rules/no-undefined-types.md | 9 +++++++ src/rules/noUndefinedTypes.js | 2 +- test/rules/assertions/noUndefinedTypes.js | 30 +++++++++++++++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/docs/rules/no-undefined-types.md b/docs/rules/no-undefined-types.md index ed6854232..5c9c6734c 100644 --- a/docs/rules/no-undefined-types.md +++ b/docs/rules/no-undefined-types.md @@ -1020,5 +1020,14 @@ const otherFile = require('./other-file'); * @param {otherFile.MyType} a */ function f(a) {} + +/**@typedef {import('restify').Request} Request */ +/**@typedef {import('./types').helperError} helperError */ + +/** + * @param {Request} b + * @param {helperError} c + */ +function a (b, c) {} ```` diff --git a/src/rules/noUndefinedTypes.js b/src/rules/noUndefinedTypes.js index 2bf4403c5..3ef70fb14 100644 --- a/src/rules/noUndefinedTypes.js +++ b/src/rules/noUndefinedTypes.js @@ -115,7 +115,7 @@ export default iterateJsdoc(({ const allComments = sourceCode.getAllComments(); const comments = allComments .filter((comment) => { - return (/^\*\s/v).test(comment.value); + return (/^\*(?!\*)/v).test(comment.value); }) .map((commentNode) => { return parseComment(commentNode, ''); diff --git a/test/rules/assertions/noUndefinedTypes.js b/test/rules/assertions/noUndefinedTypes.js index c86bcf92e..e8f381004 100644 --- a/test/rules/assertions/noUndefinedTypes.js +++ b/test/rules/assertions/noUndefinedTypes.js @@ -633,6 +633,24 @@ export default /** @type {import('../index.js').TestCases} */ ({ }, ], }, + { + code: ` + /*** @typedef {object} SomeType */ + /** + * @param {SomeType} foo - Bar. + */ + function quux(foo) { + + } + `, + errors: [ + { + line: 4, + message: 'The type \'SomeType\' is undefined.', + }, + ], + ignoreReadme: true, + }, ], valid: [ { @@ -1740,5 +1758,17 @@ export default /** @type {import('../index.js').TestCases} */ ({ function f(a) {} `, }, + { + code: ` + /**@typedef {import('restify').Request} Request */ + /**@typedef {import('./types').helperError} helperError */ + + /** + * @param {Request} b + * @param {helperError} c + */ + function a (b, c) {} + `, + }, ], }); From d9ca0ac9cb48d31698381bb6fa3d43cc6e4b70a4 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Fri, 19 Sep 2025 11:07:11 +0800 Subject: [PATCH 114/189] chore: allow empty rule description for rule creation and rebuild index file --- src/bin/generateDocs.js | 2 +- src/bin/generateRule.js | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/bin/generateDocs.js b/src/bin/generateDocs.js index dd47b4595..d68eebcc7 100644 --- a/src/bin/generateDocs.js +++ b/src/bin/generateDocs.js @@ -169,7 +169,7 @@ const generateDocs = async () => { (plugin.rules?.[decamelized].meta?.schema), ); const ruleDescription = plugin.rules?.[decamelized]?.meta?.docs?.description; - if (!ruleDescription) { + if (ruleDescription === undefined) { throw new Error(`Rule ${assertionName} missing description`); } diff --git a/src/bin/generateRule.js b/src/bin/generateRule.js index 1dd1d1ef6..abd00bd11 100644 --- a/src/bin/generateRule.js +++ b/src/bin/generateRule.js @@ -267,6 +267,8 @@ export default iterateJsdoc(({ path: './src/index-cjs.js', }); + await import('./buildEntryFileForTS.js'); + await import('./generateDocs.js'); /* From 47299db7c09eb2e448f1062d7e7c7527accb4c3d Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Fri, 19 Sep 2025 11:34:59 +0800 Subject: [PATCH 115/189] feat(`required-tags`): add new rule; fixes #1235 --- .README/rules/required-tags.md | 23 +++++ README.md | 1 + docs/rules/required-tags.md | 85 +++++++++++++++++ src/bin/generateRule.js | 4 + src/buildForbidRuleDefinition.js | 49 +++++++--- src/index-cjs.js | 3 + src/index.js | 3 + src/rules.d.ts | 20 ++++ src/rules/noRestrictedSyntax.js | 129 ++++++++++---------------- src/rules/requiredTags.js | 85 +++++++++++++++++ test/rules/assertions/requiredTags.js | 122 ++++++++++++++++++++++++ test/rules/ruleNames.json | 1 + 12 files changed, 430 insertions(+), 95 deletions(-) create mode 100644 .README/rules/required-tags.md create mode 100644 docs/rules/required-tags.md create mode 100644 src/rules/requiredTags.js create mode 100644 test/rules/assertions/requiredTags.js diff --git a/.README/rules/required-tags.md b/.README/rules/required-tags.md new file mode 100644 index 000000000..b5408ef52 --- /dev/null +++ b/.README/rules/required-tags.md @@ -0,0 +1,23 @@ +# `required-tags` + +Requires tags be present, optionally for specific contexts. + +## Options + +{"gitdown": "options"} + +||| +|---|---| +|Context|everywhere| +|Tags|(Any)| +|Recommended|false| +|Settings|| +|Options|`tags`| + +## Failing examples + + + +## Passing examples + + diff --git a/README.md b/README.md index 474df5aae..61f71d8e2 100644 --- a/README.md +++ b/README.md @@ -487,6 +487,7 @@ non-default-recommended fixer). |:heavy_check_mark:|| [require-yields-check](./docs/rules/require-yields-check.md#readme) | Ensures that if a `@yields` is present that a `yield` (or `yield` with a value) is present in the function body (or that if a `@next` is present that there is a yield with a return value present). | ||| [require-yields-description](./docs/rules/require-yields-description.md#readme) | Requires a description for `@yields` tags | |:heavy_check_mark:|| [require-yields-type](./docs/rules/require-yields-type.md#readme) | Requires a type for `@yields` tags | +||| [required-tags](./docs/rules/required-tags.md#readme) | Requires tags be present, optionally for specific contexts | ||:wrench:| [sort-tags](./docs/rules/sort-tags.md#readme) | Sorts tags by a specified sequence according to tag name, optionally adding line breaks between tag groups. | |:heavy_check_mark:|:wrench:| [tag-lines](./docs/rules/tag-lines.md#readme) | Enforces lines (or no lines) between tags. | ||:wrench:| [text-escaping](./docs/rules/text-escaping.md#readme) | Auto-escape certain characters that are input within block and tag descriptions. | diff --git a/docs/rules/required-tags.md b/docs/rules/required-tags.md new file mode 100644 index 000000000..8c6f5371b --- /dev/null +++ b/docs/rules/required-tags.md @@ -0,0 +1,85 @@ + + +# required-tags + +Requires tags be present, optionally for specific contexts. + + + +## Options + +A single options object has the following properties. + + + +### tags + +May be an array of either strings or objects with +a string `tag` property and `context` string property. + + +||| +|---|---| +|Context|everywhere| +|Tags|(Any)| +|Recommended|false| +|Settings|| +|Options|`tags`| + + + +## Failing examples + +The following patterns are considered problems: + +````ts +/** + * + */ +function quux () {} +// "jsdoc/required-tags": ["error"|"warn", {"tags":["see"]}] +// Message: Missing required tag "see" + +/** + * + */ +function quux () {} +// "jsdoc/required-tags": ["error"|"warn", {"tags":[{"context":"FunctionDeclaration","tag":"see"}]}] +// Message: Missing required tag "see" + +/** + * @type {SomeType} + */ +function quux () {} +// "jsdoc/required-tags": ["error"|"warn", {"tags":[{"context":"FunctionDeclaration","tag":"see"}]}] +// Message: Missing required tag "see" + +/** + * @type {SomeType} + */ +function quux () {} +// Message: Rule `required-tags` is missing a `tags` option. +```` + + + + + +## Passing examples + +The following patterns are not considered problems: + +````ts +/** + * @see + */ +function quux () {} +// "jsdoc/required-tags": ["error"|"warn", {"tags":["see"]}] + +/** + * + */ +class Quux {} +// "jsdoc/required-tags": ["error"|"warn", {"tags":[{"context":"FunctionDeclaration","tag":"see"}]}] +```` + diff --git a/src/bin/generateRule.js b/src/bin/generateRule.js index abd00bd11..0435d6317 100644 --- a/src/bin/generateRule.js +++ b/src/bin/generateRule.js @@ -117,6 +117,10 @@ export default iterateJsdoc(({ const ruleReadmeTemplate = `# \`${ruleName}\` +## Options + +{"gitdown": "options"} + ||| |---|---| |Context|everywhere| diff --git a/src/buildForbidRuleDefinition.js b/src/buildForbidRuleDefinition.js index 73e2cf96f..aa6252501 100644 --- a/src/buildForbidRuleDefinition.js +++ b/src/buildForbidRuleDefinition.js @@ -1,14 +1,24 @@ import iterateJsdoc from './iterateJsdoc.js'; +/** + * @typedef {(string|{ + * comment: string, + * context: string, + * message?: string + * })[]} Contexts + */ + /** * @param {{ - * contexts: (string|{ - * comment: string, - * context: string, - * message: string - * })[], + * contexts?: Contexts, * description?: string, - * contextName?: string + * getContexts?: ( + * ctxt: import('eslint').Rule.RuleContext, + * report: import('./iterateJsdoc.js').Report + * ) => Contexts|false, + * contextName?: string, + * modifyContext?: (context: import('eslint').Rule.RuleContext) => import('eslint').Rule.RuleContext, + * schema?: import('eslint').Rule.RuleMetaData['schema'] * url?: string, * }} cfg * @returns {import('@eslint/core').RuleDefinition< @@ -17,22 +27,35 @@ import iterateJsdoc from './iterateJsdoc.js'; */ export const buildForbidRuleDefinition = ({ contextName, - contexts, + contexts: cntxts, description, + getContexts, + modifyContext, + schema, url, }) => { return iterateJsdoc(({ - // context, + context, info: { comment, }, report, utils, }) => { + /** @type {Contexts|boolean|undefined} */ + let contexts = cntxts; + + if (getContexts) { + contexts = getContexts(context, report); + if (!contexts) { + return; + } + } + const { contextStr, foundContext, - } = utils.findContext(contexts, comment); + } = utils.findContext(/** @type {Contexts} */ (contexts), comment); // We are not on the *particular* matching context/comment, so don't assume // we need reporting @@ -59,10 +82,10 @@ export const buildForbidRuleDefinition = ({ description: description ?? contextName ?? 'Reports when certain comment structures are present.', url: url ?? 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/advanced.md#user-content-advanced-creating-your-own-rules', }, - schema: [], + schema: schema ?? [], type: 'suggestion', }, - modifyContext: (context) => { + modifyContext: modifyContext ?? (getContexts ? undefined : (context) => { // Reproduce context object with our own `contexts` const propertyDescriptors = Object.getOwnPropertyDescriptors(context); return Object.create( @@ -73,13 +96,13 @@ export const buildForbidRuleDefinition = ({ ...propertyDescriptors.options, value: [ { - contexts, + contexts: cntxts, }, ], }, }, ); - }, + }), nonGlobalSettings: true, }); }; diff --git a/src/index-cjs.js b/src/index-cjs.js index 922a4cc87..cc1f36076 100644 --- a/src/index-cjs.js +++ b/src/index-cjs.js @@ -40,6 +40,7 @@ import noUndefinedTypes from './rules/noUndefinedTypes.js'; import requireAsteriskPrefix from './rules/requireAsteriskPrefix.js'; import requireDescription from './rules/requireDescription.js'; import requireDescriptionCompleteSentence from './rules/requireDescriptionCompleteSentence.js'; +import requiredTags from './rules/requiredTags.js'; import requireExample from './rules/requireExample.js'; import requireFileOverview from './rules/requireFileOverview.js'; import requireHyphenBeforeParamDescription from './rules/requireHyphenBeforeParamDescription.js'; @@ -226,6 +227,7 @@ index.rules = { description: 'Requires a type for `@yields` tags', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-yields-type.md#repos-sticky-header', }), + 'required-tags': requiredTags, 'sort-tags': sortTags, 'tag-lines': tagLines, 'text-escaping': textEscaping, @@ -312,6 +314,7 @@ const createRecommendedRuleset = (warnOrError, flatName) => { 'jsdoc/require-yields-check': warnOrError, 'jsdoc/require-yields-description': 'off', 'jsdoc/require-yields-type': warnOrError, + 'jsdoc/required-tags': 'off', 'jsdoc/sort-tags': 'off', 'jsdoc/tag-lines': warnOrError, 'jsdoc/text-escaping': 'off', diff --git a/src/index.js b/src/index.js index b819ea770..a6b8f03a2 100644 --- a/src/index.js +++ b/src/index.js @@ -46,6 +46,7 @@ import noUndefinedTypes from './rules/noUndefinedTypes.js'; import requireAsteriskPrefix from './rules/requireAsteriskPrefix.js'; import requireDescription from './rules/requireDescription.js'; import requireDescriptionCompleteSentence from './rules/requireDescriptionCompleteSentence.js'; +import requiredTags from './rules/requiredTags.js'; import requireExample from './rules/requireExample.js'; import requireFileOverview from './rules/requireFileOverview.js'; import requireHyphenBeforeParamDescription from './rules/requireHyphenBeforeParamDescription.js'; @@ -232,6 +233,7 @@ index.rules = { description: 'Requires a type for `@yields` tags', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-yields-type.md#repos-sticky-header', }), + 'required-tags': requiredTags, 'sort-tags': sortTags, 'tag-lines': tagLines, 'text-escaping': textEscaping, @@ -318,6 +320,7 @@ const createRecommendedRuleset = (warnOrError, flatName) => { 'jsdoc/require-yields-check': warnOrError, 'jsdoc/require-yields-description': 'off', 'jsdoc/require-yields-type': warnOrError, + 'jsdoc/required-tags': 'off', 'jsdoc/sort-tags': 'off', 'jsdoc/tag-lines': warnOrError, 'jsdoc/text-escaping': 'off', diff --git a/src/rules.d.ts b/src/rules.d.ts index 2427ae37f..9cb41a4b1 100644 --- a/src/rules.d.ts +++ b/src/rules.d.ts @@ -2580,6 +2580,26 @@ export interface Rules { /** Requires a type for `@yields` tags */ "jsdoc/require-yields-type": []; + /** Requires tags be present, optionally for specific contexts */ + "jsdoc/required-tags": + | [] + | [ + { + /** + * May be an array of either strings or objects with + * a string `tag` property and `context` string property. + */ + tags?: ( + | string + | { + context?: string; + tag?: string; + [k: string]: unknown; + } + )[]; + } + ]; + /** Sorts tags by a specified sequence according to tag name, optionally adding line breaks between tag groups. */ "jsdoc/sort-tags": | [] diff --git a/src/rules/noRestrictedSyntax.js b/src/rules/noRestrictedSyntax.js index a0b3bd848..b2a55c6f8 100644 --- a/src/rules/noRestrictedSyntax.js +++ b/src/rules/noRestrictedSyntax.js @@ -1,59 +1,26 @@ -import iterateJsdoc from '../iterateJsdoc.js'; +import { + buildForbidRuleDefinition, +} from '../buildForbidRuleDefinition.js'; -export default iterateJsdoc(({ - context, - info: { - comment, - }, - report, - utils, -}) => { - if (!context.options.length) { - report('Rule `no-restricted-syntax` is missing a `contexts` option.'); - - return; - } - - const { - contexts, - } = context.options[0]; +export default buildForbidRuleDefinition({ + getContexts (context, report) { + if (!context.options.length) { + report('Rule `no-restricted-syntax` is missing a `contexts` option.'); + return false; + } - const { - contextStr, - foundContext, - } = utils.findContext(contexts, comment); + const { + contexts, + } = context.options[0]; - // We are not on the *particular* matching context/comment, so don't assume - // we need reporting - if (!foundContext) { - return; - } - - const message = /** @type {import('../iterateJsdoc.js').ContextObject} */ ( - foundContext - )?.message ?? - 'Syntax is restricted: {{context}}' + - (comment ? ' with {{comment}}' : ''); - - report(message, null, null, comment ? { - comment, - context: contextStr, - } : { - context: contextStr, - }); -}, { - contextSelected: true, - meta: { - docs: { - description: 'Reports when certain comment structures are present.', - url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-restricted-syntax.md#repos-sticky-header', - }, - schema: [ - { - additionalProperties: false, - properties: { - contexts: { - description: `Set this to an array of strings representing the AST context (or an object with + return contexts; + }, + schema: [ + { + additionalProperties: false, + properties: { + contexts: { + description: `Set this to an array of strings representing the AST context (or an object with \`context\` and \`comment\` properties) where you wish the rule to be applied. \`context\` defaults to \`any\` and \`comment\` defaults to no specific comment context. @@ -70,38 +37,36 @@ aliases \`@func\` or \`@method\`) (including those associated with an \`@interfa See the ["AST and Selectors"](../#advanced-ast-and-selectors) section of our Advanced docs for more on the expected format.`, - items: { - anyOf: [ - { - type: 'string', - }, - { - additionalProperties: false, - properties: { - comment: { - type: 'string', - }, - context: { - type: 'string', - }, - message: { - type: 'string', - }, + items: { + anyOf: [ + { + type: 'string', + }, + { + additionalProperties: false, + properties: { + comment: { + type: 'string', + }, + context: { + type: 'string', + }, + message: { + type: 'string', }, - type: 'object', }, - ], - }, - type: 'array', + type: 'object', + }, + ], }, + type: 'array', }, - required: [ - 'contexts', - ], - type: 'object', }, - ], - type: 'suggestion', - }, - nonGlobalSettings: true, + required: [ + 'contexts', + ], + type: 'object', + }, + ], + url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-restricted-syntax.md#repos-sticky-header', }); diff --git a/src/rules/requiredTags.js b/src/rules/requiredTags.js new file mode 100644 index 000000000..4833c0a08 --- /dev/null +++ b/src/rules/requiredTags.js @@ -0,0 +1,85 @@ +import { + buildForbidRuleDefinition, +} from '../buildForbidRuleDefinition.js'; + +export default buildForbidRuleDefinition({ + description: 'Requires tags be present, optionally for specific contexts', + getContexts (context, report) { + // Transformed options to this option in `modifyContext`: + if (!context.options[0].contexts) { + report('Rule `required-tags` is missing a `tags` option.'); + return false; + } + + const { + contexts, + } = context.options[0]; + + return contexts; + }, + modifyContext (context) { + const tags = /** @type {(string|{tag: string, context: string})[]} */ ( + context.options?.[0]?.tags + ); + + const cntxts = tags?.map((tag) => { + const tagName = typeof tag === 'string' ? tag : tag.tag; + return { + comment: `JsdocBlock:not(*:has(JsdocTag[tag=${ + tagName + }]))`, + context: typeof tag === 'string' ? 'any' : tag.context, + message: `Missing required tag "${tagName}"`, + }; + }); + + // Reproduce context object with our own `contexts` + const propertyDescriptors = Object.getOwnPropertyDescriptors(context); + return Object.create( + Object.getPrototypeOf(context), + { + ...propertyDescriptors, + options: { + ...propertyDescriptors.options, + value: [ + { + contexts: cntxts, + }, + ], + }, + }, + ); + }, + schema: [ + { + additionalProperties: false, + properties: { + tags: { + description: `May be an array of either strings or objects with +a string \`tag\` property and \`context\` string property.`, + items: { + anyOf: [ + { + type: 'string', + }, + { + properties: { + context: { + type: 'string', + }, + tag: { + type: 'string', + }, + }, + type: 'object', + }, + ], + }, + type: 'array', + }, + }, + type: 'object', + }, + ], + url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/required-tags.md#repos-sticky-header', +}); diff --git a/test/rules/assertions/requiredTags.js b/test/rules/assertions/requiredTags.js new file mode 100644 index 000000000..2b9706151 --- /dev/null +++ b/test/rules/assertions/requiredTags.js @@ -0,0 +1,122 @@ +export default { + invalid: [ + { + code: ` + /** + * + */ + function quux () {} + `, + errors: [ + { + line: 2, + message: 'Missing required tag "see"', + }, + ], + options: [ + { + tags: [ + 'see', + ], + }, + ], + }, + { + code: ` + /** + * + */ + function quux () {} + `, + errors: [ + { + line: 2, + message: 'Missing required tag "see"', + }, + ], + options: [ + { + tags: [ + { + context: 'FunctionDeclaration', + tag: 'see', + }, + ], + }, + ], + }, + { + code: ` + /** + * @type {SomeType} + */ + function quux () {} + `, + errors: [ + { + line: 2, + message: 'Missing required tag "see"', + }, + ], + options: [ + { + tags: [ + { + context: 'FunctionDeclaration', + tag: 'see', + }, + ], + }, + ], + }, + { + code: ` + /** + * @type {SomeType} + */ + function quux () {} + `, + errors: [ + { + line: 2, + message: 'Rule `required-tags` is missing a `tags` option.', + }, + ], + }, + ], + valid: [ + { + code: ` + /** + * @see + */ + function quux () {} + `, + options: [ + { + tags: [ + 'see', + ], + }, + ], + }, + { + code: ` + /** + * + */ + class Quux {} + `, + options: [ + { + tags: [ + { + context: 'FunctionDeclaration', + tag: 'see', + }, + ], + }, + ], + }, + ], +}; diff --git a/test/rules/ruleNames.json b/test/rules/ruleNames.json index b195a0a24..43df7c040 100644 --- a/test/rules/ruleNames.json +++ b/test/rules/ruleNames.json @@ -60,6 +60,7 @@ "require-yields-check", "require-yields-description", "require-yields-type", + "required-tags", "sort-tags", "tag-lines", "text-escaping", From 70c1b2e5535b9ba03873075e21d604be79fd2ec2 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sat, 20 Sep 2025 19:11:37 +0800 Subject: [PATCH 116/189] fix(`require-tags`): change rule name to be consistent with other rules (#1535) BREAKING CHANGE: Changes `required-tags` to `require-tags`. --- .../{required-tags.md => require-tags.md} | 6 +- README.md | 2 +- docs/rules/require-tags.md | 85 +++++++++++++++++++ src/index-cjs.js | 6 +- src/index.js | 6 +- src/rules.d.ts | 40 ++++----- src/rules/{requiredTags.js => requireTags.js} | 4 +- .../{requiredTags.js => requireTags.js} | 2 +- test/rules/ruleNames.json | 2 +- 9 files changed, 119 insertions(+), 34 deletions(-) rename .README/rules/{required-tags.md => require-tags.md} (70%) create mode 100644 docs/rules/require-tags.md rename src/rules/{requiredTags.js => requireTags.js} (94%) rename test/rules/assertions/{requiredTags.js => requireTags.js} (96%) diff --git a/.README/rules/required-tags.md b/.README/rules/require-tags.md similarity index 70% rename from .README/rules/required-tags.md rename to .README/rules/require-tags.md index b5408ef52..a59348dee 100644 --- a/.README/rules/required-tags.md +++ b/.README/rules/require-tags.md @@ -1,4 +1,4 @@ -# `required-tags` +# `require-tags` Requires tags be present, optionally for specific contexts. @@ -16,8 +16,8 @@ Requires tags be present, optionally for specific contexts. ## Failing examples - + ## Passing examples - + diff --git a/README.md b/README.md index 61f71d8e2..168bd751f 100644 --- a/README.md +++ b/README.md @@ -479,6 +479,7 @@ non-default-recommended fixer). |:heavy_check_mark:|| [require-returns-check](./docs/rules/require-returns-check.md#readme) | Requires a return statement in function body if a `@returns` tag is specified in JSDoc comment(and reports if multiple `@returns` tags are present). | |:heavy_check_mark:|| [require-returns-description](./docs/rules/require-returns-description.md#readme) | Requires that the `@returns` tag has a `description` value (not including `void`/`undefined` type returns). | |:heavy_check_mark: (Off in TS; On in TS flavor)|| [require-returns-type](./docs/rules/require-returns-type.md#readme) | Requires that `@returns` tag has type value (in curly brackets). | +||| [require-tags](./docs/rules/require-tags.md#readme) | Requires tags be present, optionally for specific contexts | ||| [require-template](./docs/rules/require-template.md#readme) | Requires `@template` tags be present when type parameters are used. | ||| [require-throws](./docs/rules/require-throws.md#readme) | Requires that throw statements are documented with `@throws` tags. | ||| [require-throws-description](./docs/rules/require-throws-description.md#readme) | Requires a description for `@throws` tags | @@ -487,7 +488,6 @@ non-default-recommended fixer). |:heavy_check_mark:|| [require-yields-check](./docs/rules/require-yields-check.md#readme) | Ensures that if a `@yields` is present that a `yield` (or `yield` with a value) is present in the function body (or that if a `@next` is present that there is a yield with a return value present). | ||| [require-yields-description](./docs/rules/require-yields-description.md#readme) | Requires a description for `@yields` tags | |:heavy_check_mark:|| [require-yields-type](./docs/rules/require-yields-type.md#readme) | Requires a type for `@yields` tags | -||| [required-tags](./docs/rules/required-tags.md#readme) | Requires tags be present, optionally for specific contexts | ||:wrench:| [sort-tags](./docs/rules/sort-tags.md#readme) | Sorts tags by a specified sequence according to tag name, optionally adding line breaks between tag groups. | |:heavy_check_mark:|:wrench:| [tag-lines](./docs/rules/tag-lines.md#readme) | Enforces lines (or no lines) between tags. | ||:wrench:| [text-escaping](./docs/rules/text-escaping.md#readme) | Auto-escape certain characters that are input within block and tag descriptions. | diff --git a/docs/rules/require-tags.md b/docs/rules/require-tags.md new file mode 100644 index 000000000..73cfa1c75 --- /dev/null +++ b/docs/rules/require-tags.md @@ -0,0 +1,85 @@ + + +# require-tags + +Requires tags be present, optionally for specific contexts. + + + +## Options + +A single options object has the following properties. + + + +### tags + +May be an array of either strings or objects with +a string `tag` property and `context` string property. + + +||| +|---|---| +|Context|everywhere| +|Tags|(Any)| +|Recommended|false| +|Settings|| +|Options|`tags`| + + + +## Failing examples + +The following patterns are considered problems: + +````ts +/** + * + */ +function quux () {} +// "jsdoc/require-tags": ["error"|"warn", {"tags":["see"]}] +// Message: Missing required tag "see" + +/** + * + */ +function quux () {} +// "jsdoc/require-tags": ["error"|"warn", {"tags":[{"context":"FunctionDeclaration","tag":"see"}]}] +// Message: Missing required tag "see" + +/** + * @type {SomeType} + */ +function quux () {} +// "jsdoc/require-tags": ["error"|"warn", {"tags":[{"context":"FunctionDeclaration","tag":"see"}]}] +// Message: Missing required tag "see" + +/** + * @type {SomeType} + */ +function quux () {} +// Message: Rule `require-tags` is missing a `tags` option. +```` + + + + + +## Passing examples + +The following patterns are not considered problems: + +````ts +/** + * @see + */ +function quux () {} +// "jsdoc/require-tags": ["error"|"warn", {"tags":["see"]}] + +/** + * + */ +class Quux {} +// "jsdoc/require-tags": ["error"|"warn", {"tags":[{"context":"FunctionDeclaration","tag":"see"}]}] +```` + diff --git a/src/index-cjs.js b/src/index-cjs.js index cc1f36076..c21a65940 100644 --- a/src/index-cjs.js +++ b/src/index-cjs.js @@ -40,7 +40,6 @@ import noUndefinedTypes from './rules/noUndefinedTypes.js'; import requireAsteriskPrefix from './rules/requireAsteriskPrefix.js'; import requireDescription from './rules/requireDescription.js'; import requireDescriptionCompleteSentence from './rules/requireDescriptionCompleteSentence.js'; -import requiredTags from './rules/requiredTags.js'; import requireExample from './rules/requireExample.js'; import requireFileOverview from './rules/requireFileOverview.js'; import requireHyphenBeforeParamDescription from './rules/requireHyphenBeforeParamDescription.js'; @@ -57,6 +56,7 @@ import requireReturns from './rules/requireReturns.js'; import requireReturnsCheck from './rules/requireReturnsCheck.js'; import requireReturnsDescription from './rules/requireReturnsDescription.js'; import requireReturnsType from './rules/requireReturnsType.js'; +import requireTags from './rules/requireTags.js'; import requireTemplate from './rules/requireTemplate.js'; import requireThrows from './rules/requireThrows.js'; import requireYields from './rules/requireYields.js'; @@ -179,6 +179,7 @@ index.rules = { 'require-returns-check': requireReturnsCheck, 'require-returns-description': requireReturnsDescription, 'require-returns-type': requireReturnsType, + 'require-tags': requireTags, 'require-template': requireTemplate, 'require-throws': requireThrows, 'require-throws-description': buildForbidRuleDefinition({ @@ -227,7 +228,6 @@ index.rules = { description: 'Requires a type for `@yields` tags', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-yields-type.md#repos-sticky-header', }), - 'required-tags': requiredTags, 'sort-tags': sortTags, 'tag-lines': tagLines, 'text-escaping': textEscaping, @@ -306,6 +306,7 @@ const createRecommendedRuleset = (warnOrError, flatName) => { 'jsdoc/require-returns-check': warnOrError, 'jsdoc/require-returns-description': warnOrError, 'jsdoc/require-returns-type': warnOrError, + 'jsdoc/require-tags': 'off', 'jsdoc/require-template': 'off', 'jsdoc/require-throws': 'off', 'jsdoc/require-throws-description': 'off', @@ -314,7 +315,6 @@ const createRecommendedRuleset = (warnOrError, flatName) => { 'jsdoc/require-yields-check': warnOrError, 'jsdoc/require-yields-description': 'off', 'jsdoc/require-yields-type': warnOrError, - 'jsdoc/required-tags': 'off', 'jsdoc/sort-tags': 'off', 'jsdoc/tag-lines': warnOrError, 'jsdoc/text-escaping': 'off', diff --git a/src/index.js b/src/index.js index a6b8f03a2..04630a5a2 100644 --- a/src/index.js +++ b/src/index.js @@ -46,7 +46,6 @@ import noUndefinedTypes from './rules/noUndefinedTypes.js'; import requireAsteriskPrefix from './rules/requireAsteriskPrefix.js'; import requireDescription from './rules/requireDescription.js'; import requireDescriptionCompleteSentence from './rules/requireDescriptionCompleteSentence.js'; -import requiredTags from './rules/requiredTags.js'; import requireExample from './rules/requireExample.js'; import requireFileOverview from './rules/requireFileOverview.js'; import requireHyphenBeforeParamDescription from './rules/requireHyphenBeforeParamDescription.js'; @@ -63,6 +62,7 @@ import requireReturns from './rules/requireReturns.js'; import requireReturnsCheck from './rules/requireReturnsCheck.js'; import requireReturnsDescription from './rules/requireReturnsDescription.js'; import requireReturnsType from './rules/requireReturnsType.js'; +import requireTags from './rules/requireTags.js'; import requireTemplate from './rules/requireTemplate.js'; import requireThrows from './rules/requireThrows.js'; import requireYields from './rules/requireYields.js'; @@ -185,6 +185,7 @@ index.rules = { 'require-returns-check': requireReturnsCheck, 'require-returns-description': requireReturnsDescription, 'require-returns-type': requireReturnsType, + 'require-tags': requireTags, 'require-template': requireTemplate, 'require-throws': requireThrows, 'require-throws-description': buildForbidRuleDefinition({ @@ -233,7 +234,6 @@ index.rules = { description: 'Requires a type for `@yields` tags', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-yields-type.md#repos-sticky-header', }), - 'required-tags': requiredTags, 'sort-tags': sortTags, 'tag-lines': tagLines, 'text-escaping': textEscaping, @@ -312,6 +312,7 @@ const createRecommendedRuleset = (warnOrError, flatName) => { 'jsdoc/require-returns-check': warnOrError, 'jsdoc/require-returns-description': warnOrError, 'jsdoc/require-returns-type': warnOrError, + 'jsdoc/require-tags': 'off', 'jsdoc/require-template': 'off', 'jsdoc/require-throws': 'off', 'jsdoc/require-throws-description': 'off', @@ -320,7 +321,6 @@ const createRecommendedRuleset = (warnOrError, flatName) => { 'jsdoc/require-yields-check': warnOrError, 'jsdoc/require-yields-description': 'off', 'jsdoc/require-yields-type': warnOrError, - 'jsdoc/required-tags': 'off', 'jsdoc/sort-tags': 'off', 'jsdoc/tag-lines': warnOrError, 'jsdoc/text-escaping': 'off', diff --git a/src/rules.d.ts b/src/rules.d.ts index 9cb41a4b1..b24abccf9 100644 --- a/src/rules.d.ts +++ b/src/rules.d.ts @@ -2370,6 +2370,26 @@ export interface Rules { } ]; + /** Requires tags be present, optionally for specific contexts */ + "jsdoc/require-tags": + | [] + | [ + { + /** + * May be an array of either strings or objects with + * a string `tag` property and `context` string property. + */ + tags?: ( + | string + | { + context?: string; + tag?: string; + [k: string]: unknown; + } + )[]; + } + ]; + /** Requires `@template` tags be present when type parameters are used. */ "jsdoc/require-template": | [] @@ -2580,26 +2600,6 @@ export interface Rules { /** Requires a type for `@yields` tags */ "jsdoc/require-yields-type": []; - /** Requires tags be present, optionally for specific contexts */ - "jsdoc/required-tags": - | [] - | [ - { - /** - * May be an array of either strings or objects with - * a string `tag` property and `context` string property. - */ - tags?: ( - | string - | { - context?: string; - tag?: string; - [k: string]: unknown; - } - )[]; - } - ]; - /** Sorts tags by a specified sequence according to tag name, optionally adding line breaks between tag groups. */ "jsdoc/sort-tags": | [] diff --git a/src/rules/requiredTags.js b/src/rules/requireTags.js similarity index 94% rename from src/rules/requiredTags.js rename to src/rules/requireTags.js index 4833c0a08..da6a0a16a 100644 --- a/src/rules/requiredTags.js +++ b/src/rules/requireTags.js @@ -7,7 +7,7 @@ export default buildForbidRuleDefinition({ getContexts (context, report) { // Transformed options to this option in `modifyContext`: if (!context.options[0].contexts) { - report('Rule `required-tags` is missing a `tags` option.'); + report('Rule `require-tags` is missing a `tags` option.'); return false; } @@ -81,5 +81,5 @@ a string \`tag\` property and \`context\` string property.`, type: 'object', }, ], - url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/required-tags.md#repos-sticky-header', + url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-tags.md#repos-sticky-header', }); diff --git a/test/rules/assertions/requiredTags.js b/test/rules/assertions/requireTags.js similarity index 96% rename from test/rules/assertions/requiredTags.js rename to test/rules/assertions/requireTags.js index 2b9706151..41850019b 100644 --- a/test/rules/assertions/requiredTags.js +++ b/test/rules/assertions/requireTags.js @@ -79,7 +79,7 @@ export default { errors: [ { line: 2, - message: 'Rule `required-tags` is missing a `tags` option.', + message: 'Rule `require-tags` is missing a `tags` option.', }, ], }, diff --git a/test/rules/ruleNames.json b/test/rules/ruleNames.json index 43df7c040..070af6366 100644 --- a/test/rules/ruleNames.json +++ b/test/rules/ruleNames.json @@ -60,7 +60,7 @@ "require-yields-check", "require-yields-description", "require-yields-type", - "required-tags", + "require-tags", "sort-tags", "tag-lines", "text-escaping", From 751428cd1b6740e34b68c301b7ab585cf2defb86 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sun, 21 Sep 2025 21:02:14 +0800 Subject: [PATCH 117/189] feat(`tag-lines`): `maxBlockLines` option; fixes #1346 (#1532) --- .README/rules/tag-lines.md | 2 +- README.md | 2 +- docs/rules/tag-lines.md | 100 ++++++++++++++- src/rules.d.ts | 10 +- src/rules/tagLines.js | 91 ++++++++++++- test/rules/assertions/tagLines.js | 206 +++++++++++++++++++++++++++++- 6 files changed, 401 insertions(+), 10 deletions(-) diff --git a/.README/rules/tag-lines.md b/.README/rules/tag-lines.md index 7357d548a..4339370e3 100644 --- a/.README/rules/tag-lines.md +++ b/.README/rules/tag-lines.md @@ -27,7 +27,7 @@ Removes or adds lines between tags or trailing tags. |Tags|Any| |Recommended|true| |Settings|N/A| -|Options|string ("always", "any", "never") followed by object with `applyToEndTag`, `count`, `endLines`, `startLines`, `tags`| +|Options|string ("always", "any", "never") followed by object with `applyToEndTag`, `count`, `endLines`, `maxBlockLines`, `startLines`, `tags`| ## Failing examples diff --git a/README.md b/README.md index 168bd751f..465bea267 100644 --- a/README.md +++ b/README.md @@ -489,7 +489,7 @@ non-default-recommended fixer). ||| [require-yields-description](./docs/rules/require-yields-description.md#readme) | Requires a description for `@yields` tags | |:heavy_check_mark:|| [require-yields-type](./docs/rules/require-yields-type.md#readme) | Requires a type for `@yields` tags | ||:wrench:| [sort-tags](./docs/rules/sort-tags.md#readme) | Sorts tags by a specified sequence according to tag name, optionally adding line breaks between tag groups. | -|:heavy_check_mark:|:wrench:| [tag-lines](./docs/rules/tag-lines.md#readme) | Enforces lines (or no lines) between tags. | +|:heavy_check_mark:|:wrench:| [tag-lines](./docs/rules/tag-lines.md#readme) | Enforces lines (or no lines) before, after, or between tags. | ||:wrench:| [text-escaping](./docs/rules/text-escaping.md#readme) | Auto-escape certain characters that are input within block and tag descriptions. | ||:wrench:| [type-formatting](./docs/rules/type-formatting.md#readme) | Formats JSDoc type values. | |:heavy_check_mark:|| [valid-types](./docs/rules/valid-types.md#readme) | Requires all types/namepaths to be valid JSDoc, Closure compiler, or TypeScript types (configurable in settings). | diff --git a/docs/rules/tag-lines.md b/docs/rules/tag-lines.md index a62c29b40..d80005e9a 100644 --- a/docs/rules/tag-lines.md +++ b/docs/rules/tag-lines.md @@ -7,6 +7,7 @@ * [`applyToEndTag`](#user-content-tag-lines-options-applytoendtag) * [`count`](#user-content-tag-lines-options-count) * [`endLines`](#user-content-tag-lines-options-endlines) + * [`maxBlockLines`](#user-content-tag-lines-options-maxblocklines) * [`startLines`](#user-content-tag-lines-options-startlines) * [`tags`](#user-content-tag-lines-options-tags) * [Context and settings](#user-content-tag-lines-context-and-settings) @@ -35,7 +36,7 @@ Removes or adds lines between tags or trailing tags. The first option is a string with the following possible values: "always", "any", "never". Defaults to "never". "any" is only useful with `tags` (allowing non-enforcement of lines except -for particular tags) or with `startLines` or `endLines`. It is also +for particular tags) or with `startLines`, `endLines`, or `maxBlockLines`. It is also necessary if using the linebreak-setting options of the `sort-tags` rule so that the two rules won't conflict in both attempting to set lines between tags. @@ -65,6 +66,15 @@ If not set to `null`, will enforce end lines to the given count on the final tag only. Defaults to `0`. + + +### maxBlockLines + +If not set to `null`, will enforce a maximum number of lines to the given count anywhere in the block description. + +Note that if non-`null`, `maxBlockLines` must be greater than or equal to `startLines`. + +Defaults to `null`. ### startLines @@ -99,7 +109,7 @@ Defaults to empty object. |Tags|Any| |Recommended|true| |Settings|N/A| -|Options|string ("always", "any", "never") followed by object with `applyToEndTag`, `count`, `endLines`, `startLines`, `tags`| +|Options|string ("always", "any", "never") followed by object with `applyToEndTag`, `count`, `endLines`, `maxBlockLines`, `startLines`, `tags`| @@ -288,13 +298,23 @@ The following patterns are considered problems: // "jsdoc/tag-lines": ["error"|"warn", "any",{"startLines":1}] // Message: Expected only 1 line after block description +/** + * Some description + * + * + * + * @param {string} a + */ +// "jsdoc/tag-lines": ["error"|"warn", "any",{"startLines":2}] +// Message: Expected only 2 lines after block description + /** * Some description * * @param {string} a */ // "jsdoc/tag-lines": ["error"|"warn", "any",{"startLines":0}] -// Message: Expected only 0 line after block description +// Message: Expected only 0 lines after block description /** * Some description @@ -310,6 +330,68 @@ The following patterns are considered problems: */ // "jsdoc/tag-lines": ["error"|"warn", "any",{"startLines":1}] // Message: Expected 1 lines after block description + +/** + * + * Some description + * + * Abc + * + * + * + * Def + * + * @param {string} a + */ +// "jsdoc/tag-lines": ["error"|"warn", "any",{"maxBlockLines":2}] +// Message: Expected a maximum of 2 lines within block description + +/** + * + * Some description + * + * Abc + * + * + * + * Def + * + * @param {string} a + */ +// "jsdoc/tag-lines": ["error"|"warn", "any",{"maxBlockLines":1}] +// Message: Expected a maximum of 1 line within block description + +/** + * + * Some description + * + * Abc + * + * + * + * Def + * + * @param {string} a + */ +// "jsdoc/tag-lines": ["error"|"warn", "any",{"maxBlockLines":0}] +// Message: Expected a maximum of 0 lines within block description + +/** + * + * Some description + * + * Abc + * + * + * Def + * + * + * + * + * @param {string} a + */ +// "jsdoc/tag-lines": ["error"|"warn", "any",{"maxBlockLines":2,"startLines":5}] +// Message: If set to a number, `maxBlockLines` must be greater than or equal to `startLines`. ```` @@ -544,5 +626,17 @@ class _Foo { } } // "jsdoc/tag-lines": ["error"|"warn", "any",{"startLines":1}] + +/** + * + * Some description + * + * Abc + * + * + * Def + * @param {string} a + */ +// "jsdoc/tag-lines": ["error"|"warn", "any",{"maxBlockLines":2}] ```` diff --git a/src/rules.d.ts b/src/rules.d.ts index b24abccf9..74737f8ef 100644 --- a/src/rules.d.ts +++ b/src/rules.d.ts @@ -2826,7 +2826,7 @@ export interface Rules { } ]; - /** Enforces lines (or no lines) between tags. */ + /** Enforces lines (or no lines) before, after, or between tags. */ "jsdoc/tag-lines": | [] | ["always" | "any" | "never"] @@ -2853,6 +2853,14 @@ export interface Rules { * Defaults to `0`. */ endLines?: number | null; + /** + * If not set to `null`, will enforce a maximum number of lines to the given count anywhere in the block description. + * + * Note that if non-`null`, `maxBlockLines` must be greater than or equal to `startLines`. + * + * Defaults to `null`. + */ + maxBlockLines?: number | null; /** * If not set to `null`, will enforce end lines to the given count before the * first tag only, unless there is only whitespace content, in which case, diff --git a/src/rules/tagLines.js b/src/rules/tagLines.js index fc8701584..5614cba30 100644 --- a/src/rules/tagLines.js +++ b/src/rules/tagLines.js @@ -1,5 +1,66 @@ import iterateJsdoc from '../iterateJsdoc.js'; +/** + * @param {{ + * maxBlockLines: null|number, + * startLines: null|number, + * utils: import('../iterateJsdoc.js').Utils + * }} cfg + */ +const checkMaxBlockLines = ({ + maxBlockLines, + startLines, + utils, +}) => { + if (typeof maxBlockLines !== 'number') { + return false; + } + + if (typeof startLines === 'number' && maxBlockLines < startLines) { + utils.reportJSDoc( + 'If set to a number, `maxBlockLines` must be greater than or equal to `startLines`.', + ); + return true; + } + + const { + description, + } = utils.getDescription(); + const excessBlockLinesRegex = new RegExp('\n{' + (maxBlockLines + 2) + ',}', 'v'); + const excessBlockLinesMatch = description.match(excessBlockLinesRegex); + const excessBlockLines = excessBlockLinesMatch?.[0]?.length ?? 0; + if (excessBlockLinesMatch) { + const excessIndexLine = description.slice(0, excessBlockLinesMatch.index).match(/\n/gv)?.length ?? 0; + utils.reportJSDoc( + `Expected a maximum of ${maxBlockLines} line${maxBlockLines === 1 ? '' : 's'} within block description`, + { + line: excessIndexLine, + }, + () => { + utils.setBlockDescription((info, seedTokens, descLines) => { + return [ + ...descLines.slice(0, excessIndexLine), + ...descLines.slice(excessIndexLine + excessBlockLines - 1 - maxBlockLines), + ].map((desc) => { + return { + number: 0, + source: '', + tokens: seedTokens({ + ...info, + description: desc, + postDelimiter: desc.trim() ? ' ' : '', + }), + }; + }); + }); + }, + ); + return true; + } + + return false; +}; + export default iterateJsdoc(({ context, jsdoc, @@ -11,6 +72,7 @@ export default iterateJsdoc(({ applyToEndTag = true, count = 1, endLines = 0, + maxBlockLines = null, startLines = 0, tags = {}, } = {}, @@ -218,6 +280,14 @@ export default iterateJsdoc(({ return false; }); + if (checkMaxBlockLines({ + maxBlockLines, + startLines, + utils, + })) { + return; + } + if (typeof startLines === 'number') { if (!jsdoc.tags.length) { return; @@ -235,7 +305,7 @@ export default iterateJsdoc(({ const trailingDiff = (trailingLines ?? 0) - startLines; if (trailingDiff > 0) { utils.reportJSDoc( - `Expected only ${startLines} line after block description`, + `Expected only ${startLines} line${startLines === 1 ? '' : 's'} after block description`, { line: lastDescriptionLine - trailingDiff, }, @@ -290,14 +360,14 @@ export default iterateJsdoc(({ iterateAllJsdocs: true, meta: { docs: { - description: 'Enforces lines (or no lines) between tags.', + description: 'Enforces lines (or no lines) before, after, or between tags.', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/tag-lines.md#repos-sticky-header', }, fixable: 'code', schema: [ { description: `Defaults to "never". "any" is only useful with \`tags\` (allowing non-enforcement of lines except -for particular tags) or with \`startLines\` or \`endLines\`. It is also +for particular tags) or with \`startLines\`, \`endLines\`, or \`maxBlockLines\`. It is also necessary if using the linebreak-setting options of the \`sort-tags\` rule so that the two rules won't conflict in both attempting to set lines between tags.`, @@ -335,6 +405,21 @@ Defaults to 1.`, final tag only. Defaults to \`0\`.`, + }, + maxBlockLines: { + anyOf: [ + { + type: 'integer', + }, + { + type: 'null', + }, + ], + description: `If not set to \`null\`, will enforce a maximum number of lines to the given count anywhere in the block description. + +Note that if non-\`null\`, \`maxBlockLines\` must be greater than or equal to \`startLines\`. + +Defaults to \`null\`.`, }, startLines: { anyOf: [ diff --git a/test/rules/assertions/tagLines.js b/test/rules/assertions/tagLines.js index c639ab0eb..8a514d4ff 100644 --- a/test/rules/assertions/tagLines.js +++ b/test/rules/assertions/tagLines.js @@ -586,6 +586,37 @@ export default /** @type {import('../index.js').TestCases} */ ({ */ `, }, + { + code: ` + /** + * Some description + * + * + * + * @param {string} a + */ + `, + errors: [ + { + line: 5, + message: 'Expected only 2 lines after block description', + }, + ], + options: [ + 'any', + { + startLines: 2, + }, + ], + output: ` + /** + * Some description + * + * + * @param {string} a + */ + `, + }, { code: ` /** @@ -597,7 +628,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 3, - message: 'Expected only 0 line after block description', + message: 'Expected only 0 lines after block description', }, ], options: [ @@ -669,6 +700,159 @@ export default /** @type {import('../index.js').TestCases} */ ({ */ `, }, + { + code: ` + /** + * + * Some description + * + * Abc + * + * + * + * Def + * + * @param {string} a + */ + `, + errors: [ + { + line: 6, + message: 'Expected a maximum of 2 lines within block description', + }, + ], + options: [ + 'any', + { + maxBlockLines: 2, + }, + ], + output: ` + /** + * + * Some description + * + * Abc + * + * + * Def + * + * @param {string} a + */ + `, + }, + { + code: ` + /** + * + * Some description + * + * Abc + * + * + * + * Def + * + * @param {string} a + */ + `, + errors: [ + { + line: 6, + message: 'Expected a maximum of 1 line within block description', + }, + ], + options: [ + 'any', + { + maxBlockLines: 1, + }, + ], + output: ` + /** + * + * Some description + * + * Abc + * + * Def + * + * @param {string} a + */ + `, + }, + { + code: ` + /** + * + * Some description + * + * Abc + * + * + * + * Def + * + * @param {string} a + */ + `, + errors: [ + { + line: 2, + message: 'Expected a maximum of 0 lines within block description', + }, + ], + options: [ + 'any', + { + maxBlockLines: 0, + }, + ], + output: ` + /** + * Some description + * + * Abc + * + * + * + * Def + * + * @param {string} a + */ + `, + }, + { + code: ` + /** + * + * Some description + * + * Abc + * + * + * Def + * + * + * + * + * @param {string} a + */ + `, + errors: [ + { + line: 2, + message: 'If set to a number, `maxBlockLines` must be greater than or equal to `startLines`.', + }, + ], + options: [ + 'any', + { + maxBlockLines: 2, + startLines: 5, + }, + ], + }, ], valid: [ { @@ -1131,5 +1315,25 @@ export default /** @type {import('../index.js').TestCases} */ ({ }, ], }, + { + code: ` + /** + * + * Some description + * + * Abc + * + * + * Def + * @param {string} a + */ + `, + options: [ + 'any', + { + maxBlockLines: 2, + }, + ], + }, ], }); From 0c4c654e4f958305fa54f3153c82b0548784894b Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Mon, 22 Sep 2025 16:25:22 +0800 Subject: [PATCH 118/189] fix(`reject-any-type`, `reject-function-type`): prevent object replacement as with `check-types`; fixes #1538 (#1539) --- src/buildRejectOrPreferRuleDefinition.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/buildRejectOrPreferRuleDefinition.js b/src/buildRejectOrPreferRuleDefinition.js index 32c57759a..fd7f91372 100644 --- a/src/buildRejectOrPreferRuleDefinition.js +++ b/src/buildRejectOrPreferRuleDefinition.js @@ -147,7 +147,8 @@ export const buildRejectOrPreferRuleDefinition = ({ structuredTags: {}, } : settings; - const injectObjectPreferredTypes = !('Object' in preferredTypesOriginal || + const injectObjectPreferredTypes = !overrideSettings && + !('Object' in preferredTypesOriginal || 'object' in preferredTypesOriginal || 'object.<>' in preferredTypesOriginal || 'Object.<>' in preferredTypesOriginal || From 376d58349800379c62b6cf7d4dd040fee5099470 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 23 Sep 2025 16:12:20 +0800 Subject: [PATCH 119/189] feat(`prefer-import-tags`): add new rule; fixes #1314 (#1536) --- .README/rules/prefer-import-tag.md | 30 + README.md | 1 + docs/rules/prefer-import-tag.md | 305 +++++++++ src/index-cjs.js | 3 + src/index.js | 3 + src/iterateJsdoc.js | 44 +- src/rules.d.ts | 20 + src/rules/preferImportTag.js | 452 +++++++++++++ test/rules/assertions/preferImportTag.js | 776 +++++++++++++++++++++++ test/rules/ruleNames.json | 1 + 10 files changed, 1622 insertions(+), 13 deletions(-) create mode 100644 .README/rules/prefer-import-tag.md create mode 100644 docs/rules/prefer-import-tag.md create mode 100644 src/rules/preferImportTag.js create mode 100644 test/rules/assertions/preferImportTag.js diff --git a/.README/rules/prefer-import-tag.md b/.README/rules/prefer-import-tag.md new file mode 100644 index 000000000..d4abfde9a --- /dev/null +++ b/.README/rules/prefer-import-tag.md @@ -0,0 +1,30 @@ +# `prefer-import-tag` + +Prefer `@import` tags to inline `import()` statements. + +## Fixer + +Creates `@import` tags if an already existing matching `@typedef` or +`@import` is not found. + +## Options + +{"gitdown": "options"} + +||| +|---|---| +|Context|everywhere| +|Tags|`augments`, `class`, `constant`, `enum`, `implements`, `member`, `module`, `namespace`, `param`, `property`, `returns`, `throws`, `type`, `typedef`, `yields`| +|Aliases|`constructor`, `const`, `extends`, `var`, `arg`, `argument`, `prop`, `return`, `exception`, `yield`| +|Closure-only|`package`, `private`, `protected`, `public`, `static`| +|Recommended|false| +|Settings|`mode`| +|Options|`enableFixer`, `exemptTypedefs`, `outputType`| + +## Failing examples + + + +## Passing examples + + diff --git a/README.md b/README.md index 465bea267..ed1c30220 100644 --- a/README.md +++ b/README.md @@ -456,6 +456,7 @@ non-default-recommended fixer). ||| [no-restricted-syntax](./docs/rules/no-restricted-syntax.md#readme) | Reports when certain comment structures are present. | |On in TS; Off in TS flavor|:wrench:| [no-types](./docs/rules/no-types.md#readme) | This rule reports types being used on `@param` or `@returns` (redundant with TypeScript). | |:heavy_check_mark: (Off in TS; Off in TS flavor)|| [no-undefined-types](./docs/rules/no-undefined-types.md#readme) | Besides some expected built-in types, prohibits any types not specified as globals or within `@typedef`. | +||:wrench:| [prefer-import-tag](./docs/rules/prefer-import-tag.md#readme) | Prefer `@import` tags to inline `import()` statements. | |:heavy_check_mark:|| [reject-any-type](./docs/rules/reject-any-type.md#readme) | Reports use of `any` or `*` type | |:heavy_check_mark:|| [reject-function-type](./docs/rules/reject-function-type.md#readme) | Reports use of `Function` type | ||:wrench:| [require-asterisk-prefix](./docs/rules/require-asterisk-prefix.md#readme) | Requires that each JSDoc line starts with an `*`. | diff --git a/docs/rules/prefer-import-tag.md b/docs/rules/prefer-import-tag.md new file mode 100644 index 000000000..0caf44589 --- /dev/null +++ b/docs/rules/prefer-import-tag.md @@ -0,0 +1,305 @@ + + +# prefer-import-tag + +Prefer `@import` tags to inline `import()` statements. + + + +## Fixer + +Creates `@import` tags if an already existing matching `@typedef` or +`@import` is not found. + + + +## Options + +A single options object has the following properties. + + + +### enableFixer + +Whether or not to enable the fixer to add `@import` tags. + + +### exemptTypedefs + +Whether to allow `import()` statements within `@typedef` + + +### outputType + +What kind of `@import` to generate when no matching `@typedef` or `@import` is found + + +||| +|---|---| +|Context|everywhere| +|Tags|`augments`, `class`, `constant`, `enum`, `implements`, `member`, `module`, `namespace`, `param`, `property`, `returns`, `throws`, `type`, `typedef`, `yields`| +|Aliases|`constructor`, `const`, `extends`, `var`, `arg`, `argument`, `prop`, `return`, `exception`, `yield`| +|Closure-only|`package`, `private`, `protected`, `public`, `static`| +|Recommended|false| +|Settings|`mode`| +|Options|`enableFixer`, `exemptTypedefs`, `outputType`| + + + +## Failing examples + +The following patterns are considered problems: + +````ts +/** + * @type {import('eslint').Rule.Node} + */ +// Message: Inline `import()` found; prefer `@import` + +/** + * @type {import('eslint').Rule.Node} + */ +// Settings: {"jsdoc":{"mode":"permissive"}} +// Message: Inline `import()` found; prefer `@import` + +/** + * @type {import('eslint').Rule.Node} + */ +// "jsdoc/prefer-import-tag": ["error"|"warn", {"enableFixer":false}] +// Message: Inline `import()` found; prefer `@import` + +/** + * @type {import('eslint').Rule.Node} + */ +// "jsdoc/prefer-import-tag": ["error"|"warn", {"outputType":"named-import"}] +// Message: Inline `import()` found; prefer `@import` + +/** + * @type {import('eslint').Rule.Node} + */ +// "jsdoc/prefer-import-tag": ["error"|"warn", {"outputType":"namespaced-import"}] +// Message: Inline `import()` found; prefer `@import` + +/** + * @type {import('eslint').Rule['Node']} + */ +// "jsdoc/prefer-import-tag": ["error"|"warn", {"outputType":"named-import"}] +// Message: Inline `import()` found; prefer `@import` + +/** + * @type {import('eslint').Rule['Node']} + */ +// "jsdoc/prefer-import-tag": ["error"|"warn", {"outputType":"namespaced-import"}] +// Message: Inline `import()` found; prefer `@import` + +/** @typedef {import('eslint2').Rule.Node} RuleNode */ +/** + * @type {import('eslint').Rule.Node} + */ +// "jsdoc/prefer-import-tag": ["error"|"warn", {"exemptTypedefs":false}] +// Message: Inline `import()` found; prefer `@import` + +/** + * @type {import('eslint')} + */ +// Message: Inline `import()` found; prefer `@import` + +/** + * @type {import('eslint')} + */ +// "jsdoc/prefer-import-tag": ["error"|"warn", {"enableFixer":false}] +// Message: Inline `import()` found; prefer `@import` + +/** + * @type {import('eslint').default} + */ +// Message: Inline `import()` found; prefer `@import` + +/** + * @type {import('eslint').default} + */ +// "jsdoc/prefer-import-tag": ["error"|"warn", {"enableFixer":false}] +// Message: Inline `import()` found; prefer `@import` + +/** @import * as eslint2 from 'eslint'; */ +/** + * @type {import('eslint')} + */ +// Message: Inline `import()` found; prefer `@import` + +/** @import eslint2 from 'eslint'; */ +/** + * @type {import('eslint').default} + */ +// Message: Inline `import()` found; prefer `@import` + +/** @import eslint2 from 'eslint'; */ +/** + * @type {import('eslint').default} + */ +// "jsdoc/prefer-import-tag": ["error"|"warn", {"enableFixer":false}] +// Message: Inline `import()` found; prefer `@import` + +/** @import {Rule} from 'eslint' */ +/** + * @type {import('eslint').Rule.Node} + */ +// Message: Inline `import()` found; prefer `@import` + +/** @import {Rule} from 'eslint' */ +/** + * @type {import('eslint').Rule.Node} + */ +// "jsdoc/prefer-import-tag": ["error"|"warn", {"enableFixer":false}] +// Message: Inline `import()` found; prefer `@import` + +/** @import * as eslint2 from 'eslint' */ +/** + * @type {import('eslint').Rule.Node} + */ +// Message: Inline `import()` found; prefer `@import` + +/** @import * as eslint2 from 'eslint' */ +/** + * @type {import('eslint').Rule.Node} + */ +// "jsdoc/prefer-import-tag": ["error"|"warn", {"enableFixer":false}] +// Message: Inline `import()` found; prefer `@import` + +/** @import LinterDef2, * as LinterDef3 from "eslint" */ +/** + * @type {import('eslint').Rule.Node} + */ +// Message: Inline `import()` found; prefer `@import` + +/** + * @import LinterDef2, * as LinterDef3 from "eslint" + */ +/** + * @type {import('eslint').Rule.Node} + */ +// Message: Inline `import()` found; prefer `@import` + +/** + * @import LinterDef2, + * * as LinterDef3 from "eslint" + */ +/** + * @type {import('eslint').Rule.Node} + */ +// Message: Inline `import()` found; prefer `@import` + +/** + * @import { + * ESLint + * } from "eslint" + */ +/** + * @type {import('eslint').ESLint.Node} + */ +// Message: Inline `import()` found; prefer `@import` + +/** @typedef {import('eslint').Rule} Rule */ +/** + * @type {import('eslint').Rule.Node} + */ +// "jsdoc/prefer-import-tag": ["error"|"warn", {"exemptTypedefs":true}] +// Message: Inline `import()` found; using `@typedef` + +/** @typedef {import('eslint').Rule} Rule */ +/** + * @type {import('eslint').Rule.Node.Abc.Def} + */ +// "jsdoc/prefer-import-tag": ["error"|"warn", {"exemptTypedefs":true}] +// Message: Inline `import()` found; using `@typedef` + +/** @typedef {import('eslint').Rule} Rule */ +/** + * @type {import('eslint').Rule.Node.Abc['Def']} + */ +// "jsdoc/prefer-import-tag": ["error"|"warn", {"exemptTypedefs":true}] +// Message: Inline `import()` found; using `@typedef` + +/** @typedef {import('eslint').Rule.Node} RuleNode */ +/** + * @type {import('eslint').Rule.Node} + */ +// "jsdoc/prefer-import-tag": ["error"|"warn", {"exemptTypedefs":true}] +// Message: Inline `import()` found; using `@typedef` + +/** + * @type {number|import('eslint').Rule.Node} + */ +// Message: Inline `import()` found; prefer `@import` + +/** @typedef {import('eslint').Rule.Node} Rule */ +/** + * @type {import('eslint').Rule} + */ +// "jsdoc/prefer-import-tag": ["error"|"warn", {"exemptTypedefs":true}] +// Message: Inline `import()` found; prefer `@import` + +/** @typedef {import('eslint').Rule.Node} Rule */ +/** + * @type {import('eslint').Rule.Abc} + */ +// "jsdoc/prefer-import-tag": ["error"|"warn", {"exemptTypedefs":true}] +// Message: Inline `import()` found; prefer `@import` + +/** @typedef {import('eslint').Rule} Rule */ +/** + * @type {import('eslint').Rule.Node.Abc.Rule} + */ +// "jsdoc/prefer-import-tag": ["error"|"warn", {"exemptTypedefs":true}] +// Message: Inline `import()` found; using `@typedef` + +/** @typedef {import('eslint').Rule} Rule */ +/** + * @type {import('eslint').Rule.Node.Abc.Rule} + */ +// "jsdoc/prefer-import-tag": ["error"|"warn", {"enableFixer":false,"exemptTypedefs":true}] +// Message: Inline `import()` found; using `@typedef` + +/** @typedef {import('eslint').Rule.Rule} Rule */ +/** + * @type {import('eslint').Abc.Rule} + */ +// "jsdoc/prefer-import-tag": ["error"|"warn", {"exemptTypedefs":true}] +// Message: Inline `import()` found; prefer `@import` +```` + + + + + +## Passing examples + +The following patterns are not considered problems: + +````ts +/** @typedef {import('eslint').Rule.Node} RuleNode */ +/** + * @type {RuleNode} + */ +// "jsdoc/prefer-import-tag": ["error"|"warn", {"exemptTypedefs":true}] + +/** @import {Rule} from 'eslint' */ +/** + * @type {Rule.Node} + */ + +/** @import * as eslint from 'eslint' */ +/** + * @type {eslint.Rule.Node} + */ + +/** + * @type {Rule['Node']} + */ + +/** + * Silently ignores error + * @type {Rule['Node'} + */ +```` + diff --git a/src/index-cjs.js b/src/index-cjs.js index c21a65940..5355e9e9f 100644 --- a/src/index-cjs.js +++ b/src/index-cjs.js @@ -37,6 +37,7 @@ import noMultiAsterisks from './rules/noMultiAsterisks.js'; import noRestrictedSyntax from './rules/noRestrictedSyntax.js'; import noTypes from './rules/noTypes.js'; import noUndefinedTypes from './rules/noUndefinedTypes.js'; +import preferImportTag from './rules/preferImportTag.js'; import requireAsteriskPrefix from './rules/requireAsteriskPrefix.js'; import requireDescription from './rules/requireDescription.js'; import requireDescriptionCompleteSentence from './rules/requireDescriptionCompleteSentence.js'; @@ -111,6 +112,7 @@ index.rules = { 'no-restricted-syntax': noRestrictedSyntax, 'no-types': noTypes, 'no-undefined-types': noUndefinedTypes, + 'prefer-import-tag': preferImportTag, 'reject-any-type': buildRejectOrPreferRuleDefinition({ description: 'Reports use of `any` or `*` type', overrideSettings: { @@ -283,6 +285,7 @@ const createRecommendedRuleset = (warnOrError, flatName) => { 'jsdoc/no-restricted-syntax': 'off', 'jsdoc/no-types': 'off', 'jsdoc/no-undefined-types': warnOrError, + 'jsdoc/prefer-import-tag': 'off', 'jsdoc/reject-any-type': warnOrError, 'jsdoc/reject-function-type': warnOrError, 'jsdoc/require-asterisk-prefix': 'off', diff --git a/src/index.js b/src/index.js index 04630a5a2..777dd84b9 100644 --- a/src/index.js +++ b/src/index.js @@ -43,6 +43,7 @@ import noMultiAsterisks from './rules/noMultiAsterisks.js'; import noRestrictedSyntax from './rules/noRestrictedSyntax.js'; import noTypes from './rules/noTypes.js'; import noUndefinedTypes from './rules/noUndefinedTypes.js'; +import preferImportTag from './rules/preferImportTag.js'; import requireAsteriskPrefix from './rules/requireAsteriskPrefix.js'; import requireDescription from './rules/requireDescription.js'; import requireDescriptionCompleteSentence from './rules/requireDescriptionCompleteSentence.js'; @@ -117,6 +118,7 @@ index.rules = { 'no-restricted-syntax': noRestrictedSyntax, 'no-types': noTypes, 'no-undefined-types': noUndefinedTypes, + 'prefer-import-tag': preferImportTag, 'reject-any-type': buildRejectOrPreferRuleDefinition({ description: 'Reports use of `any` or `*` type', overrideSettings: { @@ -289,6 +291,7 @@ const createRecommendedRuleset = (warnOrError, flatName) => { 'jsdoc/no-restricted-syntax': 'off', 'jsdoc/no-types': 'off', 'jsdoc/no-undefined-types': warnOrError, + 'jsdoc/prefer-import-tag': 'off', 'jsdoc/reject-any-type': warnOrError, 'jsdoc/reject-function-type': warnOrError, 'jsdoc/require-asterisk-prefix': 'off', diff --git a/src/iterateJsdoc.js b/src/iterateJsdoc.js index b55b9cf18..91d5b0f5d 100644 --- a/src/iterateJsdoc.js +++ b/src/iterateJsdoc.js @@ -116,7 +116,7 @@ import esquery from 'esquery'; * @callback ReportJSDoc * @param {string} msg * @param {null|import('comment-parser').Spec|{line: Integer, column?: Integer}} [tag] - * @param {(() => void)|null} [handler] + * @param {((fixer: import('eslint').Rule.RuleFixer) => import('eslint').Rule.Fix|void)|null} [handler] * @param {boolean} [specRewire] * @param {undefined|{ * [key: string]: string @@ -771,7 +771,8 @@ const getUtils = ( report(msg, handler ? /** @type {import('eslint').Rule.ReportFixer} */ ( fixer, ) => { - handler(); + const extraFix = handler(fixer); + const replacement = utils.stringify(jsdoc, specRewire); if (!replacement) { @@ -780,21 +781,38 @@ const getUtils = ( 0, jsdocNode.range[0], ).search(/\n[ \t]*$/v); if (lastLineBreakPos > -1) { - return fixer.removeRange([ - lastLineBreakPos, jsdocNode.range[1], - ]); + return [ + fixer.removeRange([ + lastLineBreakPos, jsdocNode.range[1], + ]), + /* c8 ignore next 2 -- Guard */ + ...(extraFix ? [ + extraFix, + ] : []), + ]; } - return fixer.removeRange( - (/\s/v).test(text.charAt(jsdocNode.range[1])) ? - [ - jsdocNode.range[0], jsdocNode.range[1] + 1, - ] : - jsdocNode.range, - ); + return [ + fixer.removeRange( + (/\s/v).test(text.charAt(jsdocNode.range[1])) ? + [ + jsdocNode.range[0], jsdocNode.range[1] + 1, + ] : + jsdocNode.range, + ), + /* c8 ignore next 2 -- Guard */ + ...(extraFix ? [ + extraFix, + ] : []), + ]; } - return fixer.replaceText(jsdocNode, replacement); + return [ + fixer.replaceText(jsdocNode, replacement), + ...(extraFix ? [ + extraFix, + ] : []), + ]; } : null, tag, data); }; diff --git a/src/rules.d.ts b/src/rules.d.ts index 74737f8ef..eb187a673 100644 --- a/src/rules.d.ts +++ b/src/rules.d.ts @@ -1272,6 +1272,26 @@ export interface Rules { } ]; + /** Prefer `@import` tags to inline `import()` statements. */ + "jsdoc/prefer-import-tag": + | [] + | [ + { + /** + * Whether or not to enable the fixer to add `@import` tags. + */ + enableFixer?: boolean; + /** + * Whether to allow `import()` statements within `@typedef` + */ + exemptTypedefs?: boolean; + /** + * What kind of `@import` to generate when no matching `@typedef` or `@import` is found + */ + outputType?: "named-import" | "namespaced-import"; + } + ]; + /** Reports use of `any` or `*` type */ "jsdoc/reject-any-type": []; diff --git a/src/rules/preferImportTag.js b/src/rules/preferImportTag.js new file mode 100644 index 000000000..2f21b1a63 --- /dev/null +++ b/src/rules/preferImportTag.js @@ -0,0 +1,452 @@ +import iterateJsdoc, { + parseComment, +} from '../iterateJsdoc.js'; +import { + commentParserToESTree, + estreeToString, + // getJSDocComment, + parse as parseType, + stringify, + traverse, + tryParse as tryParseType, +} from '@es-joy/jsdoccomment'; +import { + parseImportsExports, +} from 'parse-imports-exports'; + +export default iterateJsdoc(({ + context, + jsdoc, + settings, + sourceCode, + utils, +}) => { + const { + mode, + } = settings; + + const { + enableFixer = true, + exemptTypedefs = true, + outputType = 'namespaced-import', + } = context.options[0] || {}; + + const allComments = sourceCode.getAllComments(); + const comments = allComments + .filter((comment) => { + return (/^\*(?!\*)/v).test(comment.value); + }) + .map((commentNode) => { + return commentParserToESTree( + parseComment(commentNode, ''), mode === 'permissive' ? 'typescript' : mode, + ); + }); + + const typedefs = comments + .flatMap((doc) => { + return doc.tags.filter(({ + tag, + }) => { + return utils.isNamepathDefiningTag(tag); + }); + }); + + const imports = comments + .flatMap((doc) => { + return doc.tags.filter(({ + tag, + }) => { + return tag === 'import'; + }); + }).map((tag) => { + // Causes problems with stringification otherwise + tag.delimiter = ''; + return tag; + }); + + /** + * @param {import('@es-joy/jsdoccomment').JsdocTagWithInline} tag + */ + const iterateInlineImports = (tag) => { + const potentialType = tag.type; + let parsedType; + try { + parsedType = mode === 'permissive' ? + tryParseType(/** @type {string} */ (potentialType)) : + parseType(/** @type {string} */ (potentialType), mode); + } catch { + return; + } + + traverse(parsedType, (nde, parentNode) => { + // @ts-expect-error Adding our own property for use below + nde.parentNode = parentNode; + }); + + traverse(parsedType, (nde) => { + const { + element, + type, + } = /** @type {import('jsdoc-type-pratt-parser').ImportResult} */ (nde); + if (type !== 'JsdocTypeImport') { + return; + } + + let currentNode = nde; + + /** @type {string[]} */ + const pathSegments = []; + + /** @type {import('jsdoc-type-pratt-parser').NamePathResult[]} */ + const nodes = []; + + /** @type {string[]} */ + const extraPathSegments = []; + + /** @type {(import('jsdoc-type-pratt-parser').QuoteStyle|undefined)[]} */ + const quotes = []; + + const propertyOrBrackets = /** @type {import('jsdoc-type-pratt-parser').NamePathResult['pathType'][]} */ ([]); + + // @ts-expect-error Referencing our own property added above + while (currentNode && currentNode.parentNode) { + // @ts-expect-error Referencing our own property added above + currentNode = currentNode.parentNode; + /* c8 ignore next 3 -- Guard */ + if (currentNode.type !== 'JsdocTypeNamePath') { + break; + } + + pathSegments.unshift(currentNode.right.value); + nodes.unshift(currentNode); + propertyOrBrackets.unshift(currentNode.pathType); + quotes.unshift(currentNode.right.meta.quote); + } + + /** + * @param {string} matchingName + * @param {string[]} extrPathSegments + */ + const getFixer = (matchingName, extrPathSegments) => { + return () => { + /** @type {import('jsdoc-type-pratt-parser').NamePathResult|undefined} */ + let node = nodes.at(0); + if (!node) { + // Not really a NamePathResult, but will be converted later anyways + node = /** @type {import('jsdoc-type-pratt-parser').NamePathResult} */ ( + /** @type {unknown} */ + (nde) + ); + } + + const keys = /** @type {(keyof import('jsdoc-type-pratt-parser').NamePathResult)[]} */ ( + Object.keys(node) + ); + + for (const key of keys) { + delete node[key]; + } + + if (extrPathSegments.length) { + let newNode = /** @type {import('jsdoc-type-pratt-parser').NamePathResult} */ ( + /** @type {unknown} */ + (node) + ); + while (extrPathSegments.length && newNode) { + newNode.type = 'JsdocTypeNamePath'; + newNode.right = { + meta: { + quote: quotes.shift(), + }, + type: 'JsdocTypeProperty', + value: /** @type {string} */ (extrPathSegments.shift()), + }; + + newNode.pathType = /** @type {import('jsdoc-type-pratt-parser').NamePathResult['pathType']} */ ( + propertyOrBrackets.shift() + ); + // @ts-expect-error Temporary + newNode.left = {}; + newNode = /** @type {import('jsdoc-type-pratt-parser').NamePathResult} */ ( + newNode.left + ); + } + + const nameNode = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ ( + /** @type {unknown} */ + (newNode) + ); + nameNode.type = 'JsdocTypeName'; + nameNode.value = matchingName; + } else { + const newNode = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ ( + /** @type {unknown} */ + (node) + ); + newNode.type = 'JsdocTypeName'; + newNode.value = matchingName; + } + + for (const src of tag.source) { + if (src.tokens.type) { + src.tokens.type = `{${stringify(parsedType)}}`; + break; + } + } + }; + }; + + /** @type {string[]} */ + let unusedPathSegments = []; + + const findMatchingTypedef = () => { + // Don't want typedefs to find themselves + if (!exemptTypedefs) { + return undefined; + } + + const pthSegments = [ + ...pathSegments, + ]; + return typedefs.find((typedef) => { + let typedefNode = typedef.parsedType; + let namepathMatch; + while (typedefNode && typedefNode.type === 'JsdocTypeNamePath') { + const pathSegment = pthSegments.shift(); + if (!pathSegment) { + namepathMatch = false; + break; + } + + if (typedefNode.right.value !== pathSegment) { + if (namepathMatch === true) { + // It stopped matching, so stop + break; + } + + extraPathSegments.push(pathSegment); + namepathMatch = false; + continue; + } + + namepathMatch = true; + + unusedPathSegments = pthSegments; + + typedefNode = typedefNode.left; + } + + return namepathMatch && + // `import('eslint')` matches + typedefNode && + typedefNode.type === 'JsdocTypeImport' && + typedefNode.element.value === element.value; + }); + }; + + // Check @typedef's first as should be longest match, allowing + // for shorter abbreviations + const matchingTypedef = findMatchingTypedef(); + if (matchingTypedef) { + utils.reportJSDoc( + 'Inline `import()` found; using `@typedef`', + tag, + enableFixer ? getFixer(matchingTypedef.name, [ + ...extraPathSegments, + ...unusedPathSegments.slice(-1), + ...unusedPathSegments.slice(0, -1), + ]) : null, + ); + return; + } + + const findMatchingImport = () => { + for (const imprt of imports) { + const parsedImport = parseImportsExports( + estreeToString(imprt).replace(/^\s*@/v, '').trim(), + ); + + const namedImportsModuleSpecifier = Object.keys(parsedImport.namedImports || {})[0]; + + const namedImports = Object.values(parsedImport.namedImports || {})[0]?.[0]; + const namedImportNames = (namedImports && namedImports.names && Object.keys(namedImports.names)) ?? []; + + const namespaceImports = Object.values(parsedImport.namespaceImports || {})[0]?.[0]; + + const namespaceImportsDefault = namespaceImports && namespaceImports.default; + const namespaceImportsNamespace = namespaceImports && namespaceImports.namespace; + const namespaceImportsModuleSpecifier = Object.keys(parsedImport.namespaceImports || {})[0]; + + const lastPathSegment = pathSegments.at(-1); + + if ( + (namespaceImportsDefault && + namespaceImportsModuleSpecifier === element.value) || + (element.value === namedImportsModuleSpecifier && ( + (lastPathSegment && namedImportNames.includes(lastPathSegment)) || + lastPathSegment === 'default' + )) || + (namespaceImportsNamespace && + namespaceImportsModuleSpecifier === element.value) + ) { + return { + namedImportNames, + namedImports, + namedImportsModuleSpecifier, + namespaceImports, + namespaceImportsDefault, + namespaceImportsModuleSpecifier, + namespaceImportsNamespace, + }; + } + } + + return undefined; + }; + + const matchingImport = findMatchingImport(); + if (matchingImport) { + const { + namedImportNames, + namedImports, + namedImportsModuleSpecifier, + namespaceImportsNamespace, + } = matchingImport; + if (!namedImportNames.length && namedImportsModuleSpecifier && namedImports.default) { + utils.reportJSDoc( + 'Inline `import()` found; prefer `@import`', + tag, + enableFixer ? getFixer(namedImports.default, []) : null, + ); + return; + } + + const lastPthSegment = pathSegments.at(-1); + if (lastPthSegment && namedImportNames.includes(lastPthSegment)) { + utils.reportJSDoc( + 'Inline `import()` found; prefer `@import`', + tag, + enableFixer ? getFixer(lastPthSegment, pathSegments.slice(0, -1)) : null, + ); + return; + } + + if (namespaceImportsNamespace) { + utils.reportJSDoc( + 'Inline `import()` found; prefer `@import`', + tag, + enableFixer ? getFixer(namespaceImportsNamespace, [ + ...pathSegments, + ]) : null, + ); + return; + } + } + + if (!pathSegments.length) { + utils.reportJSDoc( + 'Inline `import()` found; prefer `@import`', + tag, + enableFixer ? (fixer) => { + getFixer(element.value, [])(); + + const programNode = sourceCode.getNodeByRangeIndex(0); + return fixer.insertTextBefore( + /** @type {import('estree').Program} */ (programNode), + `/** @import * as ${element.value} from '${element.value}'; */`, + ); + } : null, + ); + return; + } + + const lstPathSegment = pathSegments.at(-1); + if (lstPathSegment && lstPathSegment === 'default') { + utils.reportJSDoc( + 'Inline `import()` found; prefer `@import`', + tag, + enableFixer ? (fixer) => { + getFixer(element.value, [])(); + + const programNode = sourceCode.getNodeByRangeIndex(0); + return fixer.insertTextBefore( + /** @type {import('estree').Program} */ (programNode), + `/** @import ${element.value} from '${element.value}'; */`, + ); + } : null, + ); + return; + } + + utils.reportJSDoc( + 'Inline `import()` found; prefer `@import`', + tag, + enableFixer ? (fixer) => { + if (outputType === 'namespaced-import') { + getFixer(element.value, [ + ...pathSegments, + ])(); + } else { + getFixer( + /** @type {string} */ (pathSegments.at(-1)), + pathSegments.slice(0, -1), + )(); + } + + const programNode = sourceCode.getNodeByRangeIndex(0); + return fixer.insertTextBefore( + /** @type {import('estree').Program} */ (programNode), + outputType === 'namespaced-import' ? + `/** @import * as ${element.value} from '${element.value}'; */` : + `/** @import { ${pathSegments.at(-1)} } from '${element.value}'; */`, + ); + } : null, + ); + }); + }; + + for (const tag of jsdoc.tags) { + const mightHaveTypePosition = utils.tagMightHaveTypePosition(tag.tag); + const hasTypePosition = mightHaveTypePosition === true && Boolean(tag.type); + if (hasTypePosition && (!exemptTypedefs || !utils.isNamepathDefiningTag(tag.tag))) { + iterateInlineImports(tag); + } + } +}, { + iterateAllJsdocs: true, + meta: { + docs: { + description: 'Prefer `@import` tags to inline `import()` statements.', + url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/prefer-import-tag.md#repos-sticky-header', + }, + fixable: 'code', + schema: [ + { + additionalProperties: false, + properties: { + enableFixer: { + description: 'Whether or not to enable the fixer to add `@import` tags.', + type: 'boolean', + }, + exemptTypedefs: { + description: 'Whether to allow `import()` statements within `@typedef`', + type: 'boolean', + }, + + // We might add `typedef` and `typedef-local-only`, but also raises + // question of how deep the generated typedef should be + outputType: { + description: 'What kind of `@import` to generate when no matching `@typedef` or `@import` is found', + enum: [ + 'named-import', + 'namespaced-import', + ], + type: 'string', + }, + }, + type: 'object', + }, + ], + type: 'suggestion', + }, +}); diff --git a/test/rules/assertions/preferImportTag.js b/test/rules/assertions/preferImportTag.js new file mode 100644 index 000000000..8268daea1 --- /dev/null +++ b/test/rules/assertions/preferImportTag.js @@ -0,0 +1,776 @@ +export default { + invalid: [ + { + code: ` + /** + * @type {import('eslint').Rule.Node} + */ + `, + errors: [ + { + line: 3, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + output: `/** @import * as eslint from 'eslint'; */ + /** + * @type {eslint.Rule.Node} + */ + `, + }, + { + code: ` + /** + * @type {import('eslint').Rule.Node} + */ + `, + errors: [ + { + line: 3, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + output: `/** @import * as eslint from 'eslint'; */ + /** + * @type {eslint.Rule.Node} + */ + `, + settings: { + jsdoc: { + mode: 'permissive', + }, + }, + }, + { + code: ` + /** + * @type {import('eslint').Rule.Node} + */ + `, + errors: [ + { + line: 3, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + options: [ + { + enableFixer: false, + }, + ], + }, + { + code: ` + /** + * @type {import('eslint').Rule.Node} + */ + `, + errors: [ + { + line: 3, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + options: [ + { + outputType: 'named-import', + }, + ], + output: `/** @import { Rule } from 'eslint'; */ + /** + * @type {Rule.Node} + */ + `, + }, + { + code: ` + /** + * @type {import('eslint').Rule.Node} + */ + `, + errors: [ + { + line: 3, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + options: [ + { + outputType: 'namespaced-import', + }, + ], + output: `/** @import * as eslint from 'eslint'; */ + /** + * @type {eslint.Rule.Node} + */ + `, + }, + { + code: ` + /** + * @type {import('eslint').Rule['Node']} + */ + `, + errors: [ + { + line: 3, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + options: [ + { + outputType: 'named-import', + }, + ], + output: `/** @import { Rule } from 'eslint'; */ + /** + * @type {Rule['Node']} + */ + `, + }, + { + code: ` + /** + * @type {import('eslint').Rule['Node']} + */ + `, + errors: [ + { + line: 3, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + options: [ + { + outputType: 'namespaced-import', + }, + ], + output: `/** @import * as eslint from 'eslint'; */ + /** + * @type {eslint.Rule['Node']} + */ + `, + }, + { + code: ` + /** @typedef {import('eslint2').Rule.Node} RuleNode */ + /** + * @type {import('eslint').Rule.Node} + */ + `, + errors: [ + { + line: 2, + message: 'Inline `import()` found; prefer `@import`', + }, + { + line: 4, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + options: [ + { + exemptTypedefs: false, + }, + ], + output: `/** @import * as eslint2 from 'eslint2'; */ + /** @typedef {eslint2.Rule.Node} RuleNode */ + /** + * @type {import('eslint').Rule.Node} + */ + `, + }, + { + code: ` + /** + * @type {import('eslint')} + */ + `, + errors: [ + { + line: 3, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + output: `/** @import * as eslint from 'eslint'; */ + /** + * @type {eslint} + */ + `, + }, + { + code: ` + /** + * @type {import('eslint')} + */ + `, + errors: [ + { + line: 3, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + options: [ + { + enableFixer: false, + }, + ], + }, + { + code: ` + /** + * @type {import('eslint').default} + */ + `, + errors: [ + { + line: 3, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + output: `/** @import eslint from 'eslint'; */ + /** + * @type {eslint} + */ + `, + }, + + { + code: ` + /** + * @type {import('eslint').default} + */ + `, + errors: [ + { + line: 3, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + options: [ + { + enableFixer: false, + }, + ], + }, + { + code: ` + /** @import * as eslint2 from 'eslint'; */ + /** + * @type {import('eslint')} + */ + `, + errors: [ + { + line: 4, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + output: ` + /** @import * as eslint2 from 'eslint'; */ + /** + * @type {eslint2} + */ + `, + }, + { + code: ` + /** @import eslint2 from 'eslint'; */ + /** + * @type {import('eslint').default} + */ + `, + errors: [ + { + line: 4, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + output: ` + /** @import eslint2 from 'eslint'; */ + /** + * @type {eslint2} + */ + `, + }, + { + code: ` + /** @import eslint2 from 'eslint'; */ + /** + * @type {import('eslint').default} + */ + `, + errors: [ + { + line: 4, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + options: [ + { + enableFixer: false, + }, + ], + }, + { + code: ` + /** @import {Rule} from 'eslint' */ + /** + * @type {import('eslint').Rule.Node} + */ + `, + errors: [ + { + line: 4, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + output: ` + /** @import {Rule} from 'eslint' */ + /** + * @type {Rule.Node} + */ + `, + }, + { + code: ` + /** @import {Rule} from 'eslint' */ + /** + * @type {import('eslint').Rule.Node} + */ + `, + errors: [ + { + line: 4, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + options: [ + { + enableFixer: false, + }, + ], + }, + { + code: ` + /** @import * as eslint2 from 'eslint' */ + /** + * @type {import('eslint').Rule.Node} + */ + `, + errors: [ + { + line: 4, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + output: ` + /** @import * as eslint2 from 'eslint' */ + /** + * @type {eslint2.Rule.Node} + */ + `, + }, + { + code: ` + /** @import * as eslint2 from 'eslint' */ + /** + * @type {import('eslint').Rule.Node} + */ + `, + errors: [ + { + line: 4, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + options: [ + { + enableFixer: false, + }, + ], + }, + { + code: ` + /** @import LinterDef2, * as LinterDef3 from "eslint" */ + /** + * @type {import('eslint').Rule.Node} + */ + `, + errors: [ + { + line: 4, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + output: ` + /** @import LinterDef2, * as LinterDef3 from "eslint" */ + /** + * @type {LinterDef3.Rule.Node} + */ + `, + }, + { + code: ` + /** + * @import LinterDef2, * as LinterDef3 from "eslint" + */ + /** + * @type {import('eslint').Rule.Node} + */ + `, + errors: [ + { + line: 6, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + output: ` + /** + * @import LinterDef2, * as LinterDef3 from "eslint" + */ + /** + * @type {LinterDef3.Rule.Node} + */ + `, + }, + { + code: ` + /** + * @import LinterDef2, + * * as LinterDef3 from "eslint" + */ + /** + * @type {import('eslint').Rule.Node} + */ + `, + errors: [ + { + line: 7, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + output: ` + /** + * @import LinterDef2, + * * as LinterDef3 from "eslint" + */ + /** + * @type {LinterDef3.Rule.Node} + */ + `, + }, + { + code: ` + /** + * @import { + * ESLint + * } from "eslint" + */ + /** + * @type {import('eslint').ESLint.Node} + */ + `, + errors: [ + { + line: 8, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + output: ` + /** + * @import { + * ESLint + * } from "eslint" + */ + /** + * @type {ESLint.Node} + */ + `, + }, + { + code: ` + /** @typedef {import('eslint').Rule} Rule */ + /** + * @type {import('eslint').Rule.Node} + */ + `, + errors: [ + { + line: 4, + message: 'Inline `import()` found; using `@typedef`', + }, + ], + options: [ + { + exemptTypedefs: true, + }, + ], + output: ` + /** @typedef {import('eslint').Rule} Rule */ + /** + * @type {Rule.Node} + */ + `, + }, + { + code: ` + /** @typedef {import('eslint').Rule} Rule */ + /** + * @type {import('eslint').Rule.Node.Abc.Def} + */ + `, + errors: [ + { + line: 4, + message: 'Inline `import()` found; using `@typedef`', + }, + ], + options: [ + { + exemptTypedefs: true, + }, + ], + output: ` + /** @typedef {import('eslint').Rule} Rule */ + /** + * @type {Rule.Node.Abc.Def} + */ + `, + }, + { + code: ` + /** @typedef {import('eslint').Rule} Rule */ + /** + * @type {import('eslint').Rule.Node.Abc['Def']} + */ + `, + errors: [ + { + line: 4, + message: 'Inline `import()` found; using `@typedef`', + }, + ], + options: [ + { + exemptTypedefs: true, + }, + ], + output: ` + /** @typedef {import('eslint').Rule} Rule */ + /** + * @type {Rule.Node.Abc['Def']} + */ + `, + }, + { + code: ` + /** @typedef {import('eslint').Rule.Node} RuleNode */ + /** + * @type {import('eslint').Rule.Node} + */ + `, + errors: [ + { + line: 4, + message: 'Inline `import()` found; using `@typedef`', + }, + ], + options: [ + { + exemptTypedefs: true, + }, + ], + output: ` + /** @typedef {import('eslint').Rule.Node} RuleNode */ + /** + * @type {RuleNode} + */ + `, + }, + { + code: ` + /** + * @type {number|import('eslint').Rule.Node} + */ + `, + errors: [ + { + line: 3, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + output: `/** @import * as eslint from 'eslint'; */ + /** + * @type {number | eslint.Rule.Node} + */ + `, + }, + { + code: ` + /** @typedef {import('eslint').Rule.Node} Rule */ + /** + * @type {import('eslint').Rule} + */ + `, + errors: [ + { + line: 4, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + options: [ + { + exemptTypedefs: true, + }, + ], + output: `/** @import * as eslint from 'eslint'; */ + /** @typedef {import('eslint').Rule.Node} Rule */ + /** + * @type {eslint.Rule} + */ + `, + }, + { + code: ` + /** @typedef {import('eslint').Rule.Node} Rule */ + /** + * @type {import('eslint').Rule.Abc} + */ + `, + errors: [ + { + line: 4, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + options: [ + { + exemptTypedefs: true, + }, + ], + output: `/** @import * as eslint from 'eslint'; */ + /** @typedef {import('eslint').Rule.Node} Rule */ + /** + * @type {eslint.Rule.Abc} + */ + `, + }, + { + code: ` + /** @typedef {import('eslint').Rule} Rule */ + /** + * @type {import('eslint').Rule.Node.Abc.Rule} + */ + `, + errors: [ + { + line: 4, + message: 'Inline `import()` found; using `@typedef`', + }, + ], + options: [ + { + exemptTypedefs: true, + }, + ], + output: ` + /** @typedef {import('eslint').Rule} Rule */ + /** + * @type {Rule.Node.Abc.Rule} + */ + `, + }, + { + code: ` + /** @typedef {import('eslint').Rule} Rule */ + /** + * @type {import('eslint').Rule.Node.Abc.Rule} + */ + `, + errors: [ + { + line: 4, + message: 'Inline `import()` found; using `@typedef`', + }, + ], + options: [ + { + enableFixer: false, + exemptTypedefs: true, + }, + ], + }, + { + code: ` + /** @typedef {import('eslint').Rule.Rule} Rule */ + /** + * @type {import('eslint').Abc.Rule} + */ + `, + errors: [ + { + line: 4, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + options: [ + { + exemptTypedefs: true, + }, + ], + output: `/** @import * as eslint from 'eslint'; */ + /** @typedef {import('eslint').Rule.Rule} Rule */ + /** + * @type {eslint.Abc.Rule} + */ + `, + }, + ], + valid: [ + { + code: ` + /** @typedef {import('eslint').Rule.Node} RuleNode */ + /** + * @type {RuleNode} + */ + `, + options: [ + { + exemptTypedefs: true, + }, + ], + }, + { + code: ` + /** @import {Rule} from 'eslint' */ + /** + * @type {Rule.Node} + */ + `, + }, + { + code: ` + /** @import * as eslint from 'eslint' */ + /** + * @type {eslint.Rule.Node} + */ + `, + }, + { + code: ` + /** + * @type {Rule['Node']} + */ + `, + }, + { + code: ` + /** + * Silently ignores error + * @type {Rule['Node'} + */ + `, + }, + ], +}; diff --git a/test/rules/ruleNames.json b/test/rules/ruleNames.json index 070af6366..b62caf463 100644 --- a/test/rules/ruleNames.json +++ b/test/rules/ruleNames.json @@ -29,6 +29,7 @@ "no-restricted-syntax", "no-types", "no-undefined-types", + "prefer-import-tag", "reject-any-type", "reject-function-type", "require-asterisk-prefix", From 001c4a9e96f7de7d8855f3ace195396f4162e744 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Wed, 24 Sep 2025 15:40:21 +0800 Subject: [PATCH 120/189] feat(`no-undefined-types`): `checkUsedTypedefs` option; fixes #1165 (#1544) --- .README/rules/no-undefined-types.md | 2 +- docs/rules/no-undefined-types.md | 22 +++++- src/iterateJsdoc.js | 43 ++++++----- src/rules.d.ts | 6 +- src/rules/noUndefinedTypes.js | 88 +++++++++++++++++++++-- test/rules/assertions/noUndefinedTypes.js | 31 ++++++++ 6 files changed, 163 insertions(+), 29 deletions(-) diff --git a/.README/rules/no-undefined-types.md b/.README/rules/no-undefined-types.md index 9c0828b91..9fe06e459 100644 --- a/.README/rules/no-undefined-types.md +++ b/.README/rules/no-undefined-types.md @@ -58,7 +58,7 @@ array's items will be considered as defined for the purposes of that tag. |Aliases|`constructor`, `const`, `extends`, `var`, `arg`, `argument`, `prop`, `return`, `exception`, `yield`| |Closure-only|`package`, `private`, `protected`, `public`, `static`| |Recommended|true| -|Options|`definedTypes`, `disableReporting`, `markVariablesAsUsed`| +|Options|`checkUsedTypedefs`, `definedTypes`, `disableReporting`, `markVariablesAsUsed`| |Settings|`preferredTypes`, `mode`, `structuredTags`| diff --git a/docs/rules/no-undefined-types.md b/docs/rules/no-undefined-types.md index 5c9c6734c..bf45b23ae 100644 --- a/docs/rules/no-undefined-types.md +++ b/docs/rules/no-undefined-types.md @@ -3,6 +3,7 @@ # no-undefined-types * [Options](#user-content-no-undefined-types-options) + * [`checkUsedTypedefs`](#user-content-no-undefined-types-options-checkusedtypedefs) * [`definedTypes`](#user-content-no-undefined-types-options-definedtypes) * [`disableReporting`](#user-content-no-undefined-types-options-disablereporting) * [`markVariablesAsUsed`](#user-content-no-undefined-types-options-markvariablesasused) @@ -60,6 +61,11 @@ array's items will be considered as defined for the purposes of that tag. A single options object has the following properties. + + +### checkUsedTypedefs + +Whether to check typedefs for use within the file ### definedTypes @@ -73,7 +79,7 @@ Defaults to an empty array. Whether to disable reporting of errors. Defaults to `false`. This may be set to `true` in order to take advantage of only -marking defined variables as used. +marking defined variables as used or checking used typedefs. ### markVariablesAsUsed @@ -95,7 +101,7 @@ importing types unless used in code. |Aliases|`constructor`, `const`, `extends`, `var`, `arg`, `argument`, `prop`, `return`, `exception`, `yield`| |Closure-only|`package`, `private`, `protected`, `public`, `static`| |Recommended|true| -|Options|`definedTypes`, `disableReporting`, `markVariablesAsUsed`| +|Options|`checkUsedTypedefs`, `definedTypes`, `disableReporting`, `markVariablesAsUsed`| |Settings|`preferredTypes`, `mode`, `structuredTags`| @@ -368,6 +374,13 @@ class Filler { methodThree() {} } // Message: The type 'Filler.methodTwo' is undefined. + +/** @typedef {string} SomeType */ +/** @typedef {number} AnotherType */ + +/** @type {AnotherType} */ +// "jsdoc/no-undefined-types": ["error"|"warn", {"checkUsedTypedefs":true}] +// Message: This typedef was not used within the file ```` @@ -1029,5 +1042,10 @@ function f(a) {} * @param {helperError} c */ function a (b, c) {} + +/** @typedef {string} SomeType */ + +/** @type {SomeType} */ +// "jsdoc/no-undefined-types": ["error"|"warn", {"checkUsedTypedefs":true}] ```` diff --git a/src/iterateJsdoc.js b/src/iterateJsdoc.js index 91d5b0f5d..b4c116ad7 100644 --- a/src/iterateJsdoc.js +++ b/src/iterateJsdoc.js @@ -92,6 +92,10 @@ import esquery from 'esquery'; * parseClosureTemplateTag: ParseClosureTemplateTag, * getPreferredTagNameObject: GetPreferredTagNameObject, * pathDoesNotBeginWith: import('./jsdocUtils.js').PathDoesNotBeginWith + * isNamepathDefiningTag: IsNamepathX, + * isNamepathReferencingTag: IsNamepathX, + * isNamepathOrUrlReferencingTag: IsNamepathX, + * tagMightHaveNamepath: IsNamepathX, * }} BasicUtils */ @@ -566,7 +570,8 @@ const { * hasNonComment: number, * hasNonCommentBeforeTag: { * [key: string]: boolean|number - * } + * }, + * foundTypedefValues: string[] * }} StateObject */ @@ -599,6 +604,24 @@ const getBasicUtils = (context, { /** @type {BasicUtils} */ const utils = {}; + for (const method of [ + 'isNamepathDefiningTag', + 'isNamepathReferencingTag', + 'isNamepathOrUrlReferencingTag', + 'tagMightHaveNamepath', + ]) { + /** @type {IsNamepathX} */ + utils[ + /** @type {"isNamepathDefiningTag"|"isNamepathReferencingTag"|"isNamepathOrUrlReferencingTag"|"tagMightHaveNamepath"} */ ( + method + )] = (tagName) => { + return jsdocUtils[ + /** @type {"isNamepathDefiningTag"|"isNamepathReferencingTag"|"isNamepathOrUrlReferencingTag"|"tagMightHaveNamepath"} */ + (method) + ](tagName); + }; + } + /** @type {ReportSettings} */ utils.reportSettings = (message) => { context.report({ @@ -1543,24 +1566,6 @@ const getUtils = ( }; } - for (const method of [ - 'isNamepathDefiningTag', - 'isNamepathReferencingTag', - 'isNamepathOrUrlReferencingTag', - 'tagMightHaveNamepath', - ]) { - /** @type {IsNamepathX} */ - utils[ - /** @type {"isNamepathDefiningTag"|"isNamepathReferencingTag"|"isNamepathOrUrlReferencingTag"|"tagMightHaveNamepath"} */ ( - method - )] = (tagName) => { - return jsdocUtils[ - /** @type {"isNamepathDefiningTag"|"isNamepathReferencingTag"|"isNamepathOrUrlReferencingTag"|"tagMightHaveNamepath"} */ - (method) - ](tagName); - }; - } - /** @type {GetTagStructureForMode} */ utils.getTagStructureForMode = (mde) => { return jsdocUtils.getTagStructureForMode(mde, settings.structuredTags); diff --git a/src/rules.d.ts b/src/rules.d.ts index eb187a673..728c09221 100644 --- a/src/rules.d.ts +++ b/src/rules.d.ts @@ -1250,6 +1250,10 @@ export interface Rules { | [] | [ { + /** + * Whether to check typedefs for use within the file + */ + checkUsedTypedefs?: boolean; /** * This array can be populated to indicate other types which * are automatically considered as defined (in addition to globals, etc.). @@ -1259,7 +1263,7 @@ export interface Rules { /** * Whether to disable reporting of errors. Defaults to * `false`. This may be set to `true` in order to take advantage of only - * marking defined variables as used. + * marking defined variables as used or checking used typedefs. */ disableReporting?: boolean; /** diff --git a/src/rules/noUndefinedTypes.js b/src/rules/noUndefinedTypes.js index 3ef70fb14..8ba892379 100644 --- a/src/rules/noUndefinedTypes.js +++ b/src/rules/noUndefinedTypes.js @@ -59,8 +59,12 @@ export default iterateJsdoc(({ report, settings, sourceCode, + state, utils, }) => { + /** @type {string[]} */ + const foundTypedefValues = []; + const { scopeManager, } = sourceCode; @@ -73,11 +77,13 @@ export default iterateJsdoc(({ const /** * @type {{ + * checkUsedTypedefs: boolean * definedTypes: string[], * disableReporting: boolean, - * markVariablesAsUsed: boolean + * markVariablesAsUsed: boolean, * }} */ { + checkUsedTypedefs = false, definedTypes = [], disableReporting = false, markVariablesAsUsed = true, @@ -128,14 +134,16 @@ export default iterateJsdoc(({ return commentNode.value.replace(/^\s*globals/v, '').trim().split(/,\s*/v); }).concat(Object.keys(context.languageOptions.globals ?? [])); - const typedefDeclarations = comments + const typedefs = comments .flatMap((doc) => { return doc.tags.filter(({ tag, }) => { return utils.isNamepathDefiningTag(tag); }); - }) + }); + + const typedefDeclarations = typedefs .map((tag) => { return tag.name; }); @@ -204,9 +212,9 @@ export default iterateJsdoc(({ return []; } - const jsdoc = parseComment(commentNode, ''); + const jsdc = parseComment(commentNode, ''); - return jsdoc.tags.filter((tag) => { + return jsdc.tags.filter((tag) => { return tag.tag === 'template'; }); }; @@ -510,10 +518,74 @@ export default iterateJsdoc(({ context.markVariableAsUsed(val); } } + + if (checkUsedTypedefs && typedefDeclarations.includes(val)) { + foundTypedefValues.push(val); + } } }); } + + state.foundTypedefValues = foundTypedefValues; }, { + // We use this method rather than checking at end of handler above because + // in that case, it is invoked too many times and would thus report errors + // too many times. + exit ({ + context, + state, + utils, + }) { + const { + checkUsedTypedefs = false, + } = context.options[0] || {}; + + if (!checkUsedTypedefs) { + return; + } + + const allComments = context.sourceCode.getAllComments(); + const comments = allComments + .filter((comment) => { + return (/^\*(?!\*)/v).test(comment.value); + }) + .map((commentNode) => { + return { + doc: parseComment(commentNode, ''), + loc: commentNode.loc, + }; + }); + const typedefs = comments + .flatMap(({ + doc, + loc, + }) => { + const tags = doc.tags.filter(({ + tag, + }) => { + return utils.isNamepathDefiningTag(tag); + }); + if (!tags.length) { + return []; + } + + return { + loc, + tags, + }; + }); + + for (const typedef of typedefs) { + if ( + !state.foundTypedefValues.includes(typedef.tags[0].name) + ) { + context.report({ + loc: /** @type {import('@eslint/core').SourceLocation} */ (typedef.loc), + message: 'This typedef was not used within the file', + }); + } + } + }, iterateAllJsdocs: true, meta: { docs: { @@ -524,6 +596,10 @@ export default iterateJsdoc(({ { additionalProperties: false, properties: { + checkUsedTypedefs: { + description: 'Whether to check typedefs for use within the file', + type: 'boolean', + }, definedTypes: { description: `This array can be populated to indicate other types which are automatically considered as defined (in addition to globals, etc.). @@ -536,7 +612,7 @@ Defaults to an empty array.`, disableReporting: { description: `Whether to disable reporting of errors. Defaults to \`false\`. This may be set to \`true\` in order to take advantage of only -marking defined variables as used.`, +marking defined variables as used or checking used typedefs.`, type: 'boolean', }, markVariablesAsUsed: { diff --git a/test/rules/assertions/noUndefinedTypes.js b/test/rules/assertions/noUndefinedTypes.js index e8f381004..2c9517cea 100644 --- a/test/rules/assertions/noUndefinedTypes.js +++ b/test/rules/assertions/noUndefinedTypes.js @@ -651,6 +651,25 @@ export default /** @type {import('../index.js').TestCases} */ ({ ], ignoreReadme: true, }, + { + code: ` + /** @typedef {string} SomeType */ + /** @typedef {number} AnotherType */ + + /** @type {AnotherType} */ + `, + errors: [ + { + line: 2, + message: 'This typedef was not used within the file', + }, + ], + options: [ + { + checkUsedTypedefs: true, + }, + ], + }, ], valid: [ { @@ -1770,5 +1789,17 @@ export default /** @type {import('../index.js').TestCases} */ ({ function a (b, c) {} `, }, + { + code: ` + /** @typedef {string} SomeType */ + + /** @type {SomeType} */ + `, + options: [ + { + checkUsedTypedefs: true, + }, + ], + }, ], }); From 74186a3bbf5e318fdba7f8f9cd87d5bc1c08a1ca Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Thu, 25 Sep 2025 13:17:27 +0800 Subject: [PATCH 121/189] fix(`getJsdocProcessPlugin`): auto-escape `*\/` and entities (#1537) * fix(`getJsdocProcessPlugin`): auto-escape `*\/`; fixes #710 * fix(`getJsdocProcessorPlugin`): escape entities * docs: share links to AST demos * chore: update jsdoccomment and devDeps. * chore: change `run-if-changed` target * chore: linting * chore: avoid missing option --- .README/advanced.md | 4 + docs/advanced.md | 4 + eslint.config.js | 14 +- package.json | 28 +- pnpm-lock.yaml | 1027 +++++++++++++------------------- src/getJsdocProcessorPlugin.js | 35 +- test/getJsdocProcessPlugin.js | 46 ++ test/iterateJsdoc.js | 2 + test/jsdocUtils.js | 2 + 9 files changed, 527 insertions(+), 635 deletions(-) diff --git a/.README/advanced.md b/.README/advanced.md index 211d14be8..fa584309d 100644 --- a/.README/advanced.md +++ b/.README/advanced.md @@ -67,6 +67,10 @@ providing some of your JavaScript to the wonderful [AST Explorer](https://astexplorer.net/) tool and see what AST is built out of your code. You can set the tool to the specific parser which you are using. +For comment AST, see the [@es-joy/jsdoccomment demo](https://es-joy.github.io/jsdoccomment/demo/) +or if you are only interested in type AST, see the +[jsdoc-type-pratt-parser demo](https://jsdoc-type-pratt-parser.github.io/jsdoc-type-pratt-parser/). + #### Uses/Tips for AST And if you wish to introspect on the AST of code within your projects, you can diff --git a/docs/advanced.md b/docs/advanced.md index f316c44ec..1dfa2036b 100644 --- a/docs/advanced.md +++ b/docs/advanced.md @@ -82,6 +82,10 @@ providing some of your JavaScript to the wonderful [AST Explorer](https://astexplorer.net/) tool and see what AST is built out of your code. You can set the tool to the specific parser which you are using. +For comment AST, see the [@es-joy/jsdoccomment demo](https://es-joy.github.io/jsdoccomment/demo/) +or if you are only interested in type AST, see the +[jsdoc-type-pratt-parser demo](https://jsdoc-type-pratt-parser.github.io/jsdoc-type-pratt-parser/). + #### Uses/Tips for AST diff --git a/eslint.config.js b/eslint.config.js index 693e32343..89de65fb9 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -4,9 +4,9 @@ import { import { recommended as canonical, } from 'eslint-config-canonical/canonical'; -import { - recommended as canonicalJsdoc, -} from 'eslint-config-canonical/jsdoc'; +// import { +// recommended as canonicalJsdoc, +// } from 'eslint-config-canonical/jsdoc'; import globals from 'globals'; const common = { @@ -18,7 +18,10 @@ const common = { export default [ ...canonical, - ...canonicalJsdoc, + // ...canonicalJsdoc, + jsdoc({ + config: 'flat/recommended', + }), ...jsdoc({ config: 'examples-and-default-expressions', }), @@ -43,6 +46,9 @@ export default [ 'filenames/match-regex': 0, 'import/extensions': 0, 'import/no-useless-path-segments': 0, + 'jsdoc/require-param-description': 0, + 'jsdoc/require-returns': 0, + 'jsdoc/require-returns-description': 0, 'linebreak-style': 0, 'no-inline-comments': 0, 'prefer-named-capture-group': 0, diff --git a/package.json b/package.json index 16fd8c0e4..1d697160a 100644 --- a/package.json +++ b/package.json @@ -5,13 +5,14 @@ "url": "http://gajus.com" }, "dependencies": { - "@es-joy/jsdoccomment": "~0.58.0", + "@es-joy/jsdoccomment": "~0.60.0", "are-docs-informative": "^0.0.2", "comment-parser": "1.4.1", "debug": "^4.4.3", "escape-string-regexp": "^4.0.0", "espree": "^10.4.0", "esquery": "^1.6.0", + "html-entities": "^2.6.0", "object-deep-merge": "^1.0.5", "parse-imports-exports": "^0.2.4", "semver": "^7.7.2", @@ -28,7 +29,7 @@ "@babel/preset-env": "^7.28.3", "@es-joy/escodegen": "^3.5.1", "@es-joy/jsdoc-eslint-parser": "^0.23.0", - "@eslint/core": "^0.15.2", + "@eslint/core": "^0.16.0", "@hkdobrev/run-if-changed": "^0.6.3", "@semantic-release/commit-analyzer": "^13.0.1", "@semantic-release/github": "^11.0.6", @@ -40,10 +41,10 @@ "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@types/mocha": "^10.0.10", - "@types/node": "^24.4.0", + "@types/node": "^24.5.2", "@types/semver": "^7.7.1", "@types/spdx-expression-parse": "^3.0.5", - "@typescript-eslint/types": "^8.43.0", + "@typescript-eslint/types": "^8.44.1", "babel-plugin-add-module-exports": "^1.0.4", "babel-plugin-istanbul": "^7.0.1", "babel-plugin-transform-import-meta": "^2.3.3", @@ -51,8 +52,8 @@ "camelcase": "^8.0.0", "chai": "^6.0.1", "decamelize": "^6.0.1", - "eslint": "9.35.0", - "eslint-config-canonical": "~45.0.0", + "eslint": "9.36.0", + "eslint-config-canonical": "^45.0.0", "gitdown": "^4.1.1", "glob": "^11.0.3", "globals": "^16.4.0", @@ -60,14 +61,14 @@ "jsdoc-type-pratt-parser": "^5.4.0", "json-schema": "^0.4.0", "json-schema-to-typescript": "^15.0.4", - "lint-staged": "^16.1.6", + "lint-staged": "^16.2.0", "mocha": "^11.7.2", "open-editor": "^5.1.0", "replace": "^1.2.2", "rimraf": "^6.0.1", - "semantic-release": "^24.2.8", + "semantic-release": "^24.2.9", "typescript": "5.9.2", - "typescript-eslint": "^8.43.0" + "typescript-eslint": "^8.44.1" }, "engines": { "node": ">=20.11.0" @@ -150,7 +151,12 @@ "url": "https://github.com/gajus/eslint-plugin-jsdoc/issues" }, "run-if-changed": { - "package-lock.json": "pnpm run install-offline" + "pnpm-lock.yaml": "pnpm run install-offline" + }, + "pnpm": { + "overrides": { + "@types/eslint": "0.0.0-interferes-with-eslint-now" + } }, "scripts": { "ruleTypes": "node ./src/bin/generateRuleTypes.js", @@ -163,7 +169,7 @@ "create-docs": "pnpm run create-options && node ./src/bin/generateDocs.js && pnpm ruleTypes", "create-rule": "node ./src/bin/generateRule.js", "create-options": "node ./src/bin/generateOptions.js", - "install-offline": "pnpm install --prefer-offline --no-audit", + "install-offline": "pnpm install --prefer-offline", "lint": "eslint", "lint-fix": "eslint --fix", "prepare": "husky", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7dde368c2..e9c385c4b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,13 +4,16 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +overrides: + '@types/eslint': 0.0.0-interferes-with-eslint-now + importers: .: dependencies: '@es-joy/jsdoccomment': - specifier: ~0.58.0 - version: 0.58.0 + specifier: ~0.60.0 + version: 0.60.0 are-docs-informative: specifier: ^0.0.2 version: 0.0.2 @@ -29,6 +32,9 @@ importers: esquery: specifier: ^1.6.0 version: 1.6.0 + html-entities: + specifier: ^2.6.0 + version: 2.6.0 object-deep-merge: specifier: ^1.0.5 version: 1.0.5 @@ -53,7 +59,7 @@ importers: version: 7.28.4 '@babel/eslint-parser': specifier: ^7.28.4 - version: 7.28.4(@babel/core@7.28.4)(eslint@9.35.0(jiti@2.5.1)) + version: 7.28.4(@babel/core@7.28.4)(eslint@9.36.0(jiti@2.5.1)) '@babel/plugin-syntax-class-properties': specifier: ^7.12.13 version: 7.12.13(@babel/core@7.28.4) @@ -70,20 +76,20 @@ importers: specifier: ^0.23.0 version: 0.23.0(jiti@2.5.1) '@eslint/core': - specifier: ^0.15.2 - version: 0.15.2 + specifier: ^0.16.0 + version: 0.16.0 '@hkdobrev/run-if-changed': specifier: ^0.6.3 version: 0.6.3(typescript@5.9.2) '@semantic-release/commit-analyzer': specifier: ^13.0.1 - version: 13.0.1(semantic-release@24.2.8(typescript@5.9.2)) + version: 13.0.1(semantic-release@24.2.9(typescript@5.9.2)) '@semantic-release/github': specifier: ^11.0.6 - version: 11.0.6(semantic-release@24.2.8(typescript@5.9.2)) + version: 11.0.6(semantic-release@24.2.9(typescript@5.9.2)) '@semantic-release/npm': specifier: ^12.0.2 - version: 12.0.2(semantic-release@24.2.8(typescript@5.9.2)) + version: 12.0.2(semantic-release@24.2.9(typescript@5.9.2)) '@types/chai': specifier: ^5.2.2 version: 5.2.2 @@ -106,8 +112,8 @@ importers: specifier: ^10.0.10 version: 10.0.10 '@types/node': - specifier: ^24.4.0 - version: 24.4.0 + specifier: ^24.5.2 + version: 24.5.2 '@types/semver': specifier: ^7.7.1 version: 7.7.1 @@ -115,8 +121,8 @@ importers: specifier: ^3.0.5 version: 3.0.5 '@typescript-eslint/types': - specifier: ^8.43.0 - version: 8.43.0 + specifier: ^8.44.1 + version: 8.44.1 babel-plugin-add-module-exports: specifier: ^1.0.4 version: 1.0.4 @@ -139,11 +145,11 @@ importers: specifier: ^6.0.1 version: 6.0.1 eslint: - specifier: 9.35.0 - version: 9.35.0(jiti@2.5.1) + specifier: 9.36.0 + version: 9.36.0(jiti@2.5.1) eslint-config-canonical: - specifier: ~45.0.0 - version: 45.0.0(@types/eslint@9.6.1)(@types/node@24.4.0)(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + specifier: ^45.0.0 + version: 45.0.0(@types/node@24.5.2)(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) gitdown: specifier: ^4.1.1 version: 4.1.1(re2@1.20.9) @@ -166,8 +172,8 @@ importers: specifier: ^15.0.4 version: 15.0.4 lint-staged: - specifier: ^16.1.6 - version: 16.1.6 + specifier: ^16.2.0 + version: 16.2.0 mocha: specifier: ^11.7.2 version: 11.7.2 @@ -181,14 +187,14 @@ importers: specifier: ^6.0.1 version: 6.0.1 semantic-release: - specifier: ^24.2.8 - version: 24.2.8(typescript@5.9.2) + specifier: ^24.2.9 + version: 24.2.9(typescript@5.9.2) typescript: specifier: 5.9.2 version: 5.9.2 typescript-eslint: - specifier: ^8.43.0 - version: 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + specifier: ^8.44.1 + version: 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) packages: @@ -754,17 +760,17 @@ packages: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} - '@emnapi/core@1.4.5': - resolution: {integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==} + '@emnapi/core@1.5.0': + resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==} - '@emnapi/runtime@1.4.5': - resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==} + '@emnapi/runtime@1.5.0': + resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} - '@emnapi/wasi-threads@1.0.4': - resolution: {integrity: sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==} + '@emnapi/wasi-threads@1.1.0': + resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} - '@envelop/core@5.3.0': - resolution: {integrity: sha512-xvUkOWXI8JsG2OOnqiI2tOkEc52wbmIqWORr7yGc8B8E53Oh1MMGGGck4mbR80s25LnHVzfNIiIlNkuDgZRuuA==} + '@envelop/core@5.3.2': + resolution: {integrity: sha512-06Mu7fmyKzk09P2i2kHpGfItqLLgCq7uO5/nX4fc/iHMplWPNuAx4iYR+WXUQoFHDnP6EUbceQNQ5iyeMz9f3g==} engines: {node: '>=18.0.0'} '@envelop/instrumentation@1.0.0': @@ -796,8 +802,8 @@ packages: resolution: {integrity: sha512-c6EW+aA1w2rjqOMjbL93nZlwxp6c1Ln06vTYs5FjRRhmJXK8V/OrSXdT+pUr4aRYgjCgu8/OkiZr0tzeVrRSbw==} engines: {node: '>=20.11.0'} - '@es-joy/jsdoccomment@0.58.0': - resolution: {integrity: sha512-smMc5pDht/UVsCD3hhw/a/e/p8m0RdRYiluXToVfd+d4yaQQh7nn9bACjkk6nXJvat7EWPAxuFkMEFfrxeGa3Q==} + '@es-joy/jsdoccomment@0.60.0': + resolution: {integrity: sha512-nZIXk63VbpIooJVXRWEhLIbVScE8rtbcPWr+zQ0ZQsnflvomq31DvB5hR0T1IoikvrNaF4pNoDOi5se5tmIZIg==} engines: {node: '>=20.11.0'} '@eslint-community/eslint-utils@4.8.0': @@ -822,12 +828,16 @@ packages: resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/core@0.16.0': + resolution: {integrity: sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/eslintrc@3.3.1': resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.35.0': - resolution: {integrity: sha512-30iXE9whjlILfWobBkNerJo+TXYsgVM5ERQwMcMKCHckHflCmf7wXDAHlARoWnh0s1U72WqlbeyE7iAcCzuCPw==} + '@eslint/js@9.36.0': + resolution: {integrity: sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': @@ -838,8 +848,8 @@ packages: resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@fastify/busboy@3.1.1': - resolution: {integrity: sha512-5DGmA8FTdB2XbDeEwc/5ZXBl6UbBAyBOOLlPuBnZ/N1SwdH9Ii+cOX3tBROlDgcTXxjOYnLMVoKk9+FXAw0CJw==} + '@fastify/busboy@3.2.0': + resolution: {integrity: sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==} '@graphql-eslint/eslint-plugin@4.4.0': resolution: {integrity: sha512-dhW6fpk3Souuaphhc38uMAGCcgKMgtCJWFygIKODw/Kns43wiQqRPVay0aNFY1JBx3aevn4KPT/BCOdm6HNncA==} @@ -913,8 +923,8 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/graphql-file-loader@8.0.22': - resolution: {integrity: sha512-KFUbjXgWr5+w/AioOuIuULy4LwcyDuQqTRFQGe+US1d9Z4+ZopcJLwsJTqp5B+icDkCqld4paN0y0qi9MrIvbg==} + '@graphql-tools/graphql-file-loader@8.1.2': + resolution: {integrity: sha512-VB6ttpwkqCu0KsA1/Wmev4qsu05Qfw49kgVSKkPjuyDQfVaqtr9ewEQRkX5CqnqHGEeLl6sOlNGEMM5fCVMWGQ==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -925,8 +935,8 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/import@7.0.21': - resolution: {integrity: sha512-bcAqNWm/gLVEOy55o/WdaROERpDyUEmIfZ9E6NDjVk1ZGWfZe47+RgriTV80j6J5S5J1g+6loFkVWGAMqdN06g==} + '@graphql-tools/import@7.1.2': + resolution: {integrity: sha512-+tlNQbLEqAA4LdWoLwM1tckx95lo8WIKd8vhj99b9rLwN/KfLwHWzdS3jnUFK7+99vmHmN1oE5v5zmqJz0MTKw==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -1048,8 +1058,8 @@ packages: '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} - '@next/eslint-plugin-next@15.5.2': - resolution: {integrity: sha512-lkLrRVxcftuOsJNhWatf1P2hNVfh98k/omQHrCEPPriUypR6RcS13IvLdIrEvkm9AH2Nu2YpR5vLqBuy6twH3Q==} + '@next/eslint-plugin-next@15.5.4': + resolution: {integrity: sha512-SR1vhXNNg16T4zffhJ4TS7Xn7eq4NfKfcOsRwea7RIAHrjRpI9ALYbamqIJqkAhowLlERffiwk0FMvTLNdnVtw==} '@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3': resolution: {integrity: sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==} @@ -1197,14 +1207,14 @@ packages: peerDependencies: eslint: '>=9.0.0' - '@theguild/federation-composition@0.19.1': - resolution: {integrity: sha512-E4kllHSRYh+FsY0VR+fwl0rmWhDV8xUgWawLZTXmy15nCWQwj0BDsoEpdEXjPh7xes+75cRaeJcSbZ4jkBuSdg==} + '@theguild/federation-composition@0.20.1': + resolution: {integrity: sha512-lwYYKCeHmstOtbMtzxC0BQKWsUPYbEVRVdJ3EqR4jSpcF4gvNf3MOJv6yuvq6QsKqgYZURKRBszmg7VEDoi5Aw==} engines: {node: '>=18'} peerDependencies: graphql: ^16.0.0 - '@tybys/wasm-util@0.10.0': - resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==} + '@tybys/wasm-util@0.10.1': + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} '@types/chai@5.2.2': resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} @@ -1215,9 +1225,6 @@ packages: '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} - '@types/eslint@9.6.1': - resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} - '@types/espree@10.1.0': resolution: {integrity: sha512-uPQZdoUWWMuO6WS8/dwX1stZH/vOBa/wAniGnYEFI0IuU9RmLx6PLmo+VGfNOlbRc5I7hBsQc8H0zcdVI37kxg==} @@ -1242,8 +1249,8 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@24.4.0': - resolution: {integrity: sha512-gUuVEAK4/u6F9wRLznPUU4WGUacSEBDPoC2TrBkw3GAnOLHBL45QdfHOXp1kJ4ypBGLxTOB+t7NJLpKoC3gznQ==} + '@types/node@24.5.2': + resolution: {integrity: sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -1257,26 +1264,11 @@ packages: '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} - '@typescript-eslint/eslint-plugin@8.41.0': - resolution: {integrity: sha512-8fz6oa6wEKZrhXWro/S3n2eRJqlRcIa6SlDh59FXJ5Wp5XRZ8B9ixpJDcjadHq47hMx0u+HW6SNa6LjJQ6NLtw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.41.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/eslint-plugin@8.43.0': - resolution: {integrity: sha512-8tg+gt7ENL7KewsKMKDHXR1vm8tt9eMxjJBYINf6swonlWgkYn5NwyIgXpbbDxTNU5DgpDFfj95prcTq2clIQQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.43.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/parser@8.41.0': - resolution: {integrity: sha512-gTtSdWX9xiMPA/7MV9STjJOOYtWwIJIYxkQxnSV1U3xcE+mnJSH3f6zI0RYP+ew66WSlZ5ed+h0VCxsvdC1jJg==} + '@typescript-eslint/eslint-plugin@8.44.1': + resolution: {integrity: sha512-molgphGqOBT7t4YKCSkbasmu1tb1MgrZ2szGzHbclF7PNmOkSTQVHy+2jXOSnxvR3+Xe1yySHFZoqMpz3TfQsw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: + '@typescript-eslint/parser': ^8.44.1 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' @@ -1287,48 +1279,32 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.43.0': - resolution: {integrity: sha512-B7RIQiTsCBBmY+yW4+ILd6mF5h1FUwJsVvpqkrgpszYifetQ2Ke+Z4u6aZh0CblkUGIdR59iYVyXqqZGkZ3aBw==} + '@typescript-eslint/parser@8.44.1': + resolution: {integrity: sha512-EHrrEsyhOhxYt8MTg4zTF+DJMuNBzWwgvvOYNj/zm1vnaD/IC5zCXFehZv94Piqa2cRFfXrTFxIvO95L7Qc/cw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.41.0': - resolution: {integrity: sha512-b8V9SdGBQzQdjJ/IO3eDifGpDBJfvrNTp2QD9P2BeqWTGrRibgfgIlBSw6z3b6R7dPzg752tOs4u/7yCLxksSQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.42.0': resolution: {integrity: sha512-vfVpLHAhbPjilrabtOSNcUDmBboQNrJUiNAGoImkZKnMjs2TIcWG33s4Ds0wY3/50aZmTMqJa6PiwkwezaAklg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.43.0': - resolution: {integrity: sha512-htB/+D/BIGoNTQYffZw4uM4NzzuolCoaA/BusuSIcC8YjmBYQioew5VUZAYdAETPjeed0hqCaW7EHg+Robq8uw==} + '@typescript-eslint/project-service@8.44.1': + resolution: {integrity: sha512-ycSa60eGg8GWAkVsKV4E6Nz33h+HjTXbsDT4FILyL8Obk5/mx4tbvCNsLf9zret3ipSumAOG89UcCs/KRaKYrA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.41.0': - resolution: {integrity: sha512-n6m05bXn/Cd6DZDGyrpXrELCPVaTnLdPToyhBoFkLIMznRUQUEQdSp96s/pcWSQdqOhrgR1mzJ+yItK7T+WPMQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.42.0': resolution: {integrity: sha512-51+x9o78NBAVgQzOPd17DkNTnIzJ8T/O2dmMBLoK9qbY0Gm52XJcdJcCl18ExBMiHo6jPMErUQWUv5RLE51zJw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.43.0': - resolution: {integrity: sha512-daSWlQ87ZhsjrbMLvpuuMAt3y4ba57AuvadcR7f3nl8eS3BjRc8L9VLxFLk92RL5xdXOg6IQ+qKjjqNEimGuAg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/tsconfig-utils@8.41.0': - resolution: {integrity: sha512-TDhxYFPUYRFxFhuU5hTIJk+auzM/wKvWgoNYOPcOf6i4ReYlOoYN8q1dV5kOTjNQNJgzWN3TUUQMtlLOcUgdUw==} + '@typescript-eslint/scope-manager@8.44.1': + resolution: {integrity: sha512-NdhWHgmynpSvyhchGLXh+w12OMT308Gm25JoRIyTZqEbApiBiQHD/8xgb6LqCWCFcxFtWwaVdFsLPQI3jvhywg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' '@typescript-eslint/tsconfig-utils@8.42.0': resolution: {integrity: sha512-kHeFUOdwAJfUmYKjR3CLgZSglGHjbNTi1H8sTYRYV2xX6eNz4RyJ2LIgsDLKf8Yi0/GL1WZAC/DgZBeBft8QAQ==} @@ -1336,94 +1312,52 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/tsconfig-utils@8.43.0': - resolution: {integrity: sha512-ALC2prjZcj2YqqL5X/bwWQmHA2em6/94GcbB/KKu5SX3EBDOsqztmmX1kMkvAJHzxk7TazKzJfFiEIagNV3qEA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/type-utils@8.41.0': - resolution: {integrity: sha512-63qt1h91vg3KsjVVonFJWjgSK7pZHSQFKH6uwqxAH9bBrsyRhO6ONoKyXxyVBzG1lJnFAJcKAcxLS54N1ee1OQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/type-utils@8.42.0': - resolution: {integrity: sha512-9KChw92sbPTYVFw3JLRH1ockhyR3zqqn9lQXol3/YbI6jVxzWoGcT3AsAW0mu1MY0gYtsXnUGV/AKpkAj5tVlQ==} + '@typescript-eslint/tsconfig-utils@8.44.1': + resolution: {integrity: sha512-B5OyACouEjuIvof3o86lRMvyDsFwZm+4fBOqFHccIctYgBjqR3qT39FBYGN87khcgf0ExpdCBeGKpKRhSFTjKQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.43.0': - resolution: {integrity: sha512-qaH1uLBpBuBBuRf8c1mLJ6swOfzCXryhKND04Igr4pckzSEW9JX5Aw9AgW00kwfjWJF0kk0ps9ExKTfvXfw4Qg==} + '@typescript-eslint/type-utils@8.44.1': + resolution: {integrity: sha512-KdEerZqHWXsRNKjF9NYswNISnFzXfXNDfPxoTh7tqohU/PRIbwTmsjGK6V9/RTYWau7NZvfo52lgVk+sJh0K3g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.41.0': - resolution: {integrity: sha512-9EwxsWdVqh42afLbHP90n2VdHaWU/oWgbH2P0CfcNfdKL7CuKpwMQGjwev56vWu9cSKU7FWSu6r9zck6CVfnag==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.42.0': resolution: {integrity: sha512-LdtAWMiFmbRLNP7JNeY0SqEtJvGMYSzfiWBSmx+VSZ1CH+1zyl8Mmw1TT39OrtsRvIYShjJWzTDMPWZJCpwBlw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.43.0': - resolution: {integrity: sha512-vQ2FZaxJpydjSZJKiSW/LJsabFFvV7KgLC5DiLhkBcykhQj8iK9BOaDmQt74nnKdLvceM5xmhaTF+pLekrxEkw==} + '@typescript-eslint/types@8.44.1': + resolution: {integrity: sha512-Lk7uj7y9uQUOEguiDIDLYLJOrYHQa7oBiURYVFqIpGxclAFQ78f6VUOM8lI2XEuNOKNB7XuvM2+2cMXAoq4ALQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.41.0': - resolution: {integrity: sha512-D43UwUYJmGhuwHfY7MtNKRZMmfd8+p/eNSfFe6tH5mbVDto+VQCayeAt35rOx3Cs6wxD16DQtIKw/YXxt5E0UQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/typescript-estree@8.42.0': resolution: {integrity: sha512-ku/uYtT4QXY8sl9EDJETD27o3Ewdi72hcXg1ah/kkUgBvAYHLwj2ofswFFNXS+FL5G+AGkxBtvGt8pFBHKlHsQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/typescript-estree@8.43.0': - resolution: {integrity: sha512-7Vv6zlAhPb+cvEpP06WXXy/ZByph9iL6BQRBDj4kmBsW98AqEeQHlj/13X+sZOrKSo9/rNKH4Ul4f6EICREFdw==} + '@typescript-eslint/typescript-estree@8.44.1': + resolution: {integrity: sha512-qnQJ+mVa7szevdEyvfItbO5Vo+GfZ4/GZWWDRRLjrxYPkhM+6zYB2vRYwCsoJLzqFCdZT4mEqyJoyzkunsZ96A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.41.0': - resolution: {integrity: sha512-udbCVstxZ5jiPIXrdH+BZWnPatjlYwJuJkDA4Tbo3WyYLh8NvB+h/bKeSZHDOFKfphsZYJQqaFtLeXEqurQn1A==} + '@typescript-eslint/utils@8.44.1': + resolution: {integrity: sha512-DpX5Fp6edTlocMCwA+mHY8Mra+pPjRZ0TfHkXI8QFelIKcbADQz1LUPNtzOFUriBB2UYqw4Pi9+xV4w9ZczHFg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.42.0': - resolution: {integrity: sha512-JnIzu7H3RH5BrKC4NoZqRfmjqCIS1u3hGZltDYJgkVdqAezl4L9d1ZLw+36huCujtSBSAirGINF/S4UxOcR+/g==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/utils@8.43.0': - resolution: {integrity: sha512-S1/tEmkUeeswxd0GGcnwuVQPFWo8NzZTOMxCvw8BX7OMxnNae+i8Tm7REQen/SwUIPoPqfKn7EaZ+YLpiB3k9g==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/visitor-keys@8.41.0': - resolution: {integrity: sha512-+GeGMebMCy0elMNg67LRNoVnUFPIm37iu5CmHESVx56/9Jsfdpsvbv605DQ81Pi/x11IdKUsS5nzgTYbCQU9fg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.42.0': resolution: {integrity: sha512-3WbiuzoEowaEn8RSnhJBrxSwX8ULYE9CXaPepS2C2W3NSA5NNIvBaslpBSBElPq0UGr0xVJlXFWOAKIkyylydQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.43.0': - resolution: {integrity: sha512-T+S1KqRD4sg/bHfLwrpF/K3gQLBM1n7Rp7OjjikjTEssI2YJzQpi5WXoynOaQ93ERIuq3O8RBTOUYDKszUCEHw==} + '@typescript-eslint/visitor-keys@8.44.1': + resolution: {integrity: sha512-576+u0QD+Jp3tZzvfRfxon0EA2lzcDt3lhUbsC6Lgzy9x2VR4E+JUiNyGHi5T8vk0TV+fpJ5GLG1JsJuWCaKhw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@unrs/resolver-binding-android-arm-eabi@1.11.1': @@ -1521,8 +1455,8 @@ packages: cpu: [x64] os: [win32] - '@vitest/eslint-plugin@1.3.4': - resolution: {integrity: sha512-EOg8d0jn3BAiKnR55WkFxmxfWA3nmzrbIIuOXyTe6A72duryNgyU+bdBEauA97Aab3ho9kLmAwgPX63Ckj4QEg==} + '@vitest/eslint-plugin@1.3.12': + resolution: {integrity: sha512-cSEyUYGj8j8SLqKrzN7BlfsJ3wG67eRT25819PXuyoSBogLXiyagdKx4MHWHV1zv+EEuyMXsEKkBEKzXpxyBrg==} peerDependencies: eslint: '>= 8.57.0' typescript: '>= 5.0.0' @@ -1537,12 +1471,12 @@ packages: resolution: {integrity: sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw==} engines: {node: '>=18.0.0'} - '@whatwg-node/fetch@0.10.10': - resolution: {integrity: sha512-watz4i/Vv4HpoJ+GranJ7HH75Pf+OkPQ63NoVmru6Srgc8VezTArB00i/oQlnn0KWh14gM42F22Qcc9SU9mo/w==} + '@whatwg-node/fetch@0.10.11': + resolution: {integrity: sha512-eR8SYtf9Nem1Tnl0IWrY33qJ5wCtIWlt3Fs3c6V4aAaTFLtkEQErXu3SSZg/XCHrj9hXSJ8/8t+CdMk5Qec/ZA==} engines: {node: '>=18.0.0'} - '@whatwg-node/node-fetch@0.7.25': - resolution: {integrity: sha512-szCTESNJV+Xd56zU6ShOi/JWROxE9IwCic8o5D9z5QECZloas6Ez5tUuKqXTAdu6fHFx1t6C+5gwj8smzOLjtg==} + '@whatwg-node/node-fetch@0.8.0': + resolution: {integrity: sha512-+z00GpWxKV/q8eMETwbdi80TcOoVEVZ4xSRkxYOZpn3kbV3nej5iViNzXVke/j3v4y1YpO5zMS/CVDIASvJnZQ==} engines: {node: '>=18.0.0'} '@whatwg-node/promise-helpers@1.3.2': @@ -1855,10 +1789,6 @@ packages: resolution: {integrity: sha512-1tm8DTaJhPBG3bIkVeZt1iZM9GfSX2lzOeDVZH9R9ffRHpmHvxZ/QhgQH/aDTkswQVt+YHdXAdS/In/30OjCbg==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - chalk@5.6.0: - resolution: {integrity: sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - change-case@5.4.4: resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} @@ -1914,6 +1844,10 @@ packages: resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} engines: {node: '>=18'} + cli-truncate@5.1.0: + resolution: {integrity: sha512-7JDGG+4Zp0CsknDCedl0DYdaeOhc46QNpXi3NLQblkZpXXgA6LncLDUUyvrjSvZeF3VRQa+KiMGomazQrC1V8g==} + engines: {node: '>=20'} + cliui@6.0.0: resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} @@ -1952,8 +1886,8 @@ packages: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} - commander@14.0.0: - resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==} + commander@14.0.1: + resolution: {integrity: sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==} engines: {node: '>=20'} commander@6.2.1: @@ -2352,9 +2286,6 @@ packages: unrs-resolver: optional: true - eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - eslint-import-resolver-typescript@3.10.1: resolution: {integrity: sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==} engines: {node: ^14.18.0 || >=16.0.0} @@ -2511,8 +2442,8 @@ packages: resolution: {integrity: sha512-69NpBr68U6pmXL+y+KHl/64PwRarceC3/sCNUVxRbe0gPI32SIw8AtdpkqNiJYCa2yMd4lRrkrnU09Yio7KVzA==} engines: {node: '>=0.10.0'} - eslint-plugin-n@17.21.3: - resolution: {integrity: sha512-MtxYjDZhMQgsWRm/4xYLL0i2EhusWT7itDxlJ80l1NND2AL2Vi5Mvneqv/ikG9+zpran0VsVRXTEHrpLmUZRNw==} + eslint-plugin-n@17.23.1: + resolution: {integrity: sha512-68PealUpYoHOBh332JLLD9Sj7OQUDkFpmcfqt8R9sySfFSeuGJjMTJQvCRRB96zO3A/PELRLkPrzsHmzEFQQ5A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=8.23.0' @@ -2527,7 +2458,7 @@ packages: resolution: {integrity: sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - '@types/eslint': '>=8.0.0' + '@types/eslint': 0.0.0-interferes-with-eslint-now eslint: '>=8.0.0' eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0' prettier: '>=3.0.0' @@ -2605,8 +2536,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.35.0: - resolution: {integrity: sha512-QePbBFMJFjgmlE+cXAlbHZbHpdFVS2E/6vzCy7aKlebddvl1vadiC4JFV5u/wqTkNUwEV8WrQi257jf5f06hrg==} + eslint@9.36.0: + resolution: {integrity: sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -3065,6 +2996,9 @@ packages: resolution: {integrity: sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==} engines: {node: ^18.17.0 || >=20.5.0} + html-entities@2.6.0: + resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==} + html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -3506,8 +3440,8 @@ packages: engines: {node: '>=6'} hasBin: true - jsonc-eslint-parser@2.4.0: - resolution: {integrity: sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==} + jsonc-eslint-parser@2.4.1: + resolution: {integrity: sha512-uuPNLJkKN8NXAlZlQ6kmUF9qO+T6Kyd7oV4+/7yy8Jz6+MZNyhPq8EdLpdfnPVzUC8qSf1b4j1azKaGnFsjmsw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} jsonfile@6.2.0: @@ -3539,10 +3473,6 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - lilconfig@3.1.3: - resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} - engines: {node: '>=14'} - line-column-path@3.0.0: resolution: {integrity: sha512-Atocnm7Wr9nuvAn97yEPQa3pcQI5eLQGBz+m6iTb+CVw+IOzYB9MrYK7jI7BfC9ISnT4Fu0eiwhAScV//rp4Hw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3550,8 +3480,8 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - lint-staged@16.1.6: - resolution: {integrity: sha512-U4kuulU3CKIytlkLlaHcGgKscNfJPNTiDF2avIUGFCv7K95/DCYQ7Ra62ydeRWmgQGg9zJYw2dzdbztwJlqrow==} + lint-staged@16.2.0: + resolution: {integrity: sha512-spdYSOCQ2MdZ9CM1/bu/kDmaYGsrpNOeu1InFFV8uhv14x6YIubGxbCpSmGILFoxkiheNQPDXSg5Sbb5ZuVnug==} engines: {node: '>=20.17'} hasBin: true @@ -3559,8 +3489,8 @@ packages: resolution: {integrity: sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==} engines: {node: '>=18.0.0'} - listr2@9.0.3: - resolution: {integrity: sha512-0aeh5HHHgmq1KRdMMDHfhMWQmIT/m7nRDTlxlFqni2Sp0had9baqsjJRvDGdlvgd6NmPE0nPloOipiQJGFtTHQ==} + listr2@9.0.4: + resolution: {integrity: sha512-1wd/kpAdKRLwv7/3OKC8zZ5U8e/fajCfWMxacUvB79S5nLrYGPtUI/8chMQhn3LQjsRVErTb9i1ECAwW0ZIHnQ==} engines: {node: '>=20.0.0'} load-json-file@4.0.0: @@ -3699,8 +3629,8 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - meros@1.3.1: - resolution: {integrity: sha512-eV7dRObfTrckdmAz4/n7pT1njIsIJXRIZkgCiX43xEsPNy4gjXQzOYYxmGcolAMtF7HyfqRuDBh3Lgs4hmhVEw==} + meros@1.3.2: + resolution: {integrity: sha512-Q3mobPbvEx7XbwhnC1J1r60+5H6EZyNccdzSz0eGexJRwouUtTZxPVRGdqKtxlpD84ScK4+tIGldkqDtCKdI0A==} engines: {node: '>=13'} peerDependencies: '@types/node': '>=13' @@ -3736,10 +3666,6 @@ packages: resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} engines: {node: '>=18'} - min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - minimatch@10.0.3: resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} engines: {node: 20 || >=22} @@ -3815,8 +3741,8 @@ packages: nan@2.23.0: resolution: {integrity: sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ==} - nano-spawn@1.0.2: - resolution: {integrity: sha512-21t+ozMQDAL/UGgQVBbZ/xXvNO10++ZPuTmKRO8k9V3AClVRht49ahtDjfY8l1q6nSHOrE5ASfthzH3ol6R/hg==} + nano-spawn@1.0.3: + resolution: {integrity: sha512-jtpsQDetTnvS2Ts1fiRdci5rx0VYws5jGyC+4IYOTnIQ/wwdf6JdomlHBwqC3bJYOvaKu0C2GSZ1A60anrYpaA==} engines: {node: '>=20.17'} napi-postinstall@0.3.3: @@ -4470,17 +4396,18 @@ packages: resolution: {integrity: sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==} engines: {node: ^14.0.0 || >=16.0.0} - semantic-release@24.2.8: - resolution: {integrity: sha512-uvoLiKEB/AvvA3SCPE78cd90nVJXn220kkEA6sNGzDpas4s7pe4OgYWvhfR0lvWBdBH/T0RFCI6U+GvcT2CypQ==} + semantic-release@24.2.9: + resolution: {integrity: sha512-phCkJ6pjDi9ANdhuF5ElS10GGdAKY6R1Pvt9lT3SFhOwM4T7QZE7MLpBDbNruUx/Q3gFD92/UOFringGipRqZA==} engines: {node: '>=20.8.1'} hasBin: true semver-compare@1.0.0: resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} - semver-diff@4.0.0: - resolution: {integrity: sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==} + semver-diff@5.0.0: + resolution: {integrity: sha512-0HbGtOm+S7T6NGQ/pxJSJipJvc4DK3FcRVMRkhsIwJDJ4Jcz5DQC1cPPzB5GhzyHjwttW878HaWQq46CkL3cqg==} engines: {node: '>=12'} + deprecated: Deprecated as the semver package now supports this built-in. semver-regex@4.0.5: resolution: {integrity: sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==} @@ -4661,6 +4588,10 @@ packages: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} + string-width@8.1.0: + resolution: {integrity: sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==} + engines: {node: '>=20'} + string.prototype.includes@2.0.1: resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} engines: {node: '>= 0.4'} @@ -4710,8 +4641,8 @@ packages: resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} engines: {node: '>=18'} - strip-indent@4.0.0: - resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} + strip-indent@4.1.0: + resolution: {integrity: sha512-OA95x+JPmL7kc7zCu+e+TeYxEiaIyndRx0OrBcK2QPPH09oAndr2ALvymxWA+Lx1PYYvFUm4O63pRkdJAaW96w==} engines: {node: '>=12'} strip-json-comments@2.0.1: @@ -4761,8 +4692,8 @@ packages: resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} engines: {node: ^14.18.0 || >=16.0.0} - tapable@2.2.2: - resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==} + tapable@2.2.3: + resolution: {integrity: sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==} engines: {node: '>=6'} tar@6.2.1: @@ -4897,8 +4828,8 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} - typescript-eslint@8.43.0: - resolution: {integrity: sha512-FyRGJKUGvcFekRRcBKFBlAhnp4Ng8rhe8tuvvkR9OiU0gfd4vyvTRQHEckO6VDlH57jbeUQem2IpqPq9kLJH+w==} + typescript-eslint@8.44.1: + resolution: {integrity: sha512-0ws8uWGrUVTjEeN2OM4K1pLKHK/4NiNP/vz6ns+LjT/6sqpaYzIVFajZb1fj/IDwpsrrHb3Jy0Qm5u9CPcKaeg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -4923,8 +4854,8 @@ packages: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} - undici-types@7.11.0: - resolution: {integrity: sha512-kt1ZriHTi7MU+Z/r9DOdAI3ONdaR3M3csEaRc6ewa4f4dTvX4cQCbJ4NkEn0ohE4hHtq85+PhPSTY+pO/1PwgA==} + undici-types@7.12.0: + resolution: {integrity: sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==} unicode-canonical-property-names-ecmascript@2.0.1: resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} @@ -5261,11 +5192,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/eslint-parser@7.28.4(@babel/core@7.28.4)(eslint@9.35.0(jiti@2.5.1))': + '@babel/eslint-parser@7.28.4(@babel/core@7.28.4)(eslint@9.36.0(jiti@2.5.1))': dependencies: '@babel/core': 7.28.4 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.5.1) eslint-visitor-keys: 2.1.0 semver: 6.3.1 @@ -5937,23 +5868,23 @@ snapshots: '@colors/colors@1.5.0': optional: true - '@emnapi/core@1.4.5': + '@emnapi/core@1.5.0': dependencies: - '@emnapi/wasi-threads': 1.0.4 + '@emnapi/wasi-threads': 1.1.0 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.4.5': + '@emnapi/runtime@1.5.0': dependencies: tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.0.4': + '@emnapi/wasi-threads@1.1.0': dependencies: tslib: 2.8.1 optional: true - '@envelop/core@5.3.0': + '@envelop/core@5.3.2': dependencies: '@envelop/instrumentation': 1.0.0 '@envelop/types': 5.2.1 @@ -5984,10 +5915,10 @@ snapshots: '@es-joy/jsdoc-eslint-parser@0.23.0(jiti@2.5.1)': dependencies: '@babel/core': 7.28.4 - '@babel/eslint-parser': 7.28.4(@babel/core@7.28.4)(eslint@9.35.0(jiti@2.5.1)) + '@babel/eslint-parser': 7.28.4(@babel/core@7.28.4)(eslint@9.36.0(jiti@2.5.1)) '@es-joy/jsdoccomment': 0.56.0 - '@typescript-eslint/parser': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.35.0(jiti@2.5.1) + '@typescript-eslint/parser': 8.42.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.36.0(jiti@2.5.1) esquery: 1.6.0 typescript: 5.9.2 transitivePeerDependencies: @@ -5997,7 +5928,7 @@ snapshots: '@es-joy/jsdoccomment@0.50.2': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.43.0 + '@typescript-eslint/types': 8.44.1 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 4.1.0 @@ -6005,22 +5936,22 @@ snapshots: '@es-joy/jsdoccomment@0.56.0': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.43.0 + '@typescript-eslint/types': 8.44.1 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 5.1.1 - '@es-joy/jsdoccomment@0.58.0': + '@es-joy/jsdoccomment@0.60.0': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.43.0 + '@typescript-eslint/types': 8.44.1 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 5.4.0 - '@eslint-community/eslint-utils@4.8.0(eslint@9.35.0(jiti@2.5.1))': + '@eslint-community/eslint-utils@4.8.0(eslint@9.36.0(jiti@2.5.1))': dependencies: - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.5.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -6039,6 +5970,10 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 + '@eslint/core@0.16.0': + dependencies: + '@types/json-schema': 7.0.15 + '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 @@ -6053,7 +5988,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.35.0': {} + '@eslint/js@9.36.0': {} '@eslint/object-schema@2.1.6': {} @@ -6062,18 +5997,18 @@ snapshots: '@eslint/core': 0.15.2 levn: 0.4.1 - '@fastify/busboy@3.1.1': {} + '@fastify/busboy@3.2.0': {} - '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.4.0)(eslint@9.35.0(jiti@2.5.1))(graphql@16.11.0)(typescript@5.9.2)': + '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.5.2)(eslint@9.36.0(jiti@2.5.1))(graphql@16.11.0)(typescript@5.9.2)': dependencies: '@graphql-tools/code-file-loader': 8.1.22(graphql@16.11.0) '@graphql-tools/graphql-tag-pluck': 8.3.21(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) debug: 4.4.3(supports-color@8.1.1) - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.5.1) fast-glob: 3.3.3 graphql: 16.11.0 - graphql-config: 5.1.5(@types/node@24.4.0)(graphql@16.11.0)(typescript@5.9.2) + graphql-config: 5.1.5(@types/node@24.5.2)(graphql@16.11.0)(typescript@5.9.2) graphql-depth-limit: 1.1.0(graphql@16.11.0) lodash.lowercase: 4.3.0 transitivePeerDependencies: @@ -6123,13 +6058,13 @@ snapshots: '@graphql-tools/executor-common@0.0.4(graphql@16.11.0)': dependencies: - '@envelop/core': 5.3.0 + '@envelop/core': 5.3.2 '@graphql-tools/utils': 10.9.1(graphql@16.11.0) graphql: 16.11.0 '@graphql-tools/executor-common@0.0.6(graphql@16.11.0)': dependencies: - '@envelop/core': 5.3.0 + '@envelop/core': 5.3.2 '@graphql-tools/utils': 10.9.1(graphql@16.11.0) graphql: 16.11.0 @@ -6150,17 +6085,17 @@ snapshots: - uWebSockets.js - utf-8-validate - '@graphql-tools/executor-http@1.3.3(@types/node@24.4.0)(graphql@16.11.0)': + '@graphql-tools/executor-http@1.3.3(@types/node@24.5.2)(graphql@16.11.0)': dependencies: '@graphql-hive/signal': 1.0.0 '@graphql-tools/executor-common': 0.0.4(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) '@repeaterjs/repeater': 3.0.6 '@whatwg-node/disposablestack': 0.0.6 - '@whatwg-node/fetch': 0.10.10 + '@whatwg-node/fetch': 0.10.11 '@whatwg-node/promise-helpers': 1.3.2 graphql: 16.11.0 - meros: 1.3.1(@types/node@24.4.0) + meros: 1.3.2(@types/node@24.5.2) tslib: 2.8.1 transitivePeerDependencies: - '@types/node' @@ -6187,9 +6122,9 @@ snapshots: graphql: 16.11.0 tslib: 2.8.1 - '@graphql-tools/graphql-file-loader@8.0.22(graphql@16.11.0)': + '@graphql-tools/graphql-file-loader@8.1.2(graphql@16.11.0)': dependencies: - '@graphql-tools/import': 7.0.21(graphql@16.11.0) + '@graphql-tools/import': 7.1.2(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) globby: 11.1.0 graphql: 16.11.0 @@ -6201,20 +6136,20 @@ snapshots: '@graphql-tools/graphql-tag-pluck@8.3.21(graphql@16.11.0)': dependencies: '@babel/core': 7.28.4 - '@babel/parser': 7.28.3 + '@babel/parser': 7.28.4 '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.4) - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 '@graphql-tools/utils': 10.9.1(graphql@16.11.0) graphql: 16.11.0 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@graphql-tools/import@7.0.21(graphql@16.11.0)': + '@graphql-tools/import@7.1.2(graphql@16.11.0)': dependencies: '@graphql-tools/utils': 10.9.1(graphql@16.11.0) - '@theguild/federation-composition': 0.19.1(graphql@16.11.0) + '@theguild/federation-composition': 0.20.1(graphql@16.11.0) graphql: 16.11.0 resolve-from: 5.0.0 tslib: 2.8.1 @@ -6250,15 +6185,15 @@ snapshots: graphql: 16.11.0 tslib: 2.8.1 - '@graphql-tools/url-loader@8.0.33(@types/node@24.4.0)(graphql@16.11.0)': + '@graphql-tools/url-loader@8.0.33(@types/node@24.5.2)(graphql@16.11.0)': dependencies: '@graphql-tools/executor-graphql-ws': 2.0.7(graphql@16.11.0) - '@graphql-tools/executor-http': 1.3.3(@types/node@24.4.0)(graphql@16.11.0) + '@graphql-tools/executor-http': 1.3.3(@types/node@24.5.2)(graphql@16.11.0) '@graphql-tools/executor-legacy-ws': 1.1.19(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) '@graphql-tools/wrap': 10.1.4(graphql@16.11.0) '@types/ws': 8.18.1 - '@whatwg-node/fetch': 0.10.10 + '@whatwg-node/fetch': 0.10.11 '@whatwg-node/promise-helpers': 1.3.2 graphql: 16.11.0 isomorphic-ws: 5.0.0(ws@8.18.3) @@ -6370,12 +6305,12 @@ snapshots: '@napi-rs/wasm-runtime@0.2.12': dependencies: - '@emnapi/core': 1.4.5 - '@emnapi/runtime': 1.4.5 - '@tybys/wasm-util': 0.10.0 + '@emnapi/core': 1.5.0 + '@emnapi/runtime': 1.5.0 + '@tybys/wasm-util': 0.10.1 optional: true - '@next/eslint-plugin-next@15.5.2': + '@next/eslint-plugin-next@15.5.4': dependencies: fast-glob: 3.3.1 @@ -6496,7 +6431,7 @@ snapshots: '@sec-ant/readable-stream@0.4.1': {} - '@semantic-release/commit-analyzer@13.0.1(semantic-release@24.2.8(typescript@5.9.2))': + '@semantic-release/commit-analyzer@13.0.1(semantic-release@24.2.9(typescript@5.9.2))': dependencies: conventional-changelog-angular: 8.0.0 conventional-changelog-writer: 8.2.0 @@ -6506,13 +6441,13 @@ snapshots: import-from-esm: 2.0.0 lodash-es: 4.17.21 micromatch: 4.0.8 - semantic-release: 24.2.8(typescript@5.9.2) + semantic-release: 24.2.9(typescript@5.9.2) transitivePeerDependencies: - supports-color '@semantic-release/error@4.0.0': {} - '@semantic-release/github@11.0.6(semantic-release@24.2.8(typescript@5.9.2))': + '@semantic-release/github@11.0.6(semantic-release@24.2.9(typescript@5.9.2))': dependencies: '@octokit/core': 7.0.3 '@octokit/plugin-paginate-rest': 13.1.1(@octokit/core@7.0.3) @@ -6528,13 +6463,13 @@ snapshots: lodash-es: 4.17.21 mime: 4.0.7 p-filter: 4.1.0 - semantic-release: 24.2.8(typescript@5.9.2) + semantic-release: 24.2.9(typescript@5.9.2) tinyglobby: 0.2.14 url-join: 5.0.0 transitivePeerDependencies: - supports-color - '@semantic-release/npm@12.0.2(semantic-release@24.2.8(typescript@5.9.2))': + '@semantic-release/npm@12.0.2(semantic-release@24.2.9(typescript@5.9.2))': dependencies: '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 @@ -6547,11 +6482,11 @@ snapshots: rc: 1.2.8 read-pkg: 9.0.1 registry-auth-token: 5.1.0 - semantic-release: 24.2.8(typescript@5.9.2) + semantic-release: 24.2.9(typescript@5.9.2) semver: 7.7.2 tempy: 3.1.0 - '@semantic-release/release-notes-generator@14.0.3(semantic-release@24.2.8(typescript@5.9.2))': + '@semantic-release/release-notes-generator@14.0.3(semantic-release@24.2.9(typescript@5.9.2))': dependencies: conventional-changelog-angular: 8.0.0 conventional-changelog-writer: 8.2.0 @@ -6563,7 +6498,7 @@ snapshots: into-stream: 7.0.0 lodash-es: 4.17.21 read-package-up: 11.0.0 - semantic-release: 24.2.8(typescript@5.9.2) + semantic-release: 24.2.9(typescript@5.9.2) transitivePeerDependencies: - supports-color @@ -6571,10 +6506,10 @@ snapshots: '@sindresorhus/merge-streams@4.0.0': {} - '@stylistic/eslint-plugin@4.4.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': + '@stylistic/eslint-plugin@4.4.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@typescript-eslint/utils': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.35.0(jiti@2.5.1) + '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.36.0(jiti@2.5.1) eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 @@ -6583,7 +6518,7 @@ snapshots: - supports-color - typescript - '@theguild/federation-composition@0.19.1(graphql@16.11.0)': + '@theguild/federation-composition@0.20.1(graphql@16.11.0)': dependencies: constant-case: 3.0.4 debug: 4.4.1 @@ -6593,7 +6528,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tybys/wasm-util@0.10.0': + '@tybys/wasm-util@0.10.1': dependencies: tslib: 2.8.1 optional: true @@ -6608,12 +6543,6 @@ snapshots: '@types/deep-eql@4.0.2': {} - '@types/eslint@9.6.1': - dependencies: - '@types/estree': 1.0.8 - '@types/json-schema': 7.0.15 - optional: true - '@types/espree@10.1.0': dependencies: acorn: 8.15.0 @@ -6635,9 +6564,9 @@ snapshots: '@types/ms@2.1.0': {} - '@types/node@24.4.0': + '@types/node@24.5.2': dependencies: - undici-types: 7.11.0 + undici-types: 7.12.0 '@types/normalize-package-data@2.4.4': {} @@ -6647,17 +6576,17 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 24.4.0 + '@types/node': 24.5.2 - '@typescript-eslint/eslint-plugin@8.41.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/eslint-plugin@8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/scope-manager': 8.41.0 - '@typescript-eslint/type-utils': 8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/utils': 8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.41.0 - eslint: 9.35.0(jiti@2.5.1) + '@typescript-eslint/parser': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.44.1 + '@typescript-eslint/type-utils': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.44.1 + eslint: 9.36.0(jiti@2.5.1) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -6666,64 +6595,26 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': - dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/scope-manager': 8.43.0 - '@typescript-eslint/type-utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.43.0 - eslint: 9.35.0(jiti@2.5.1) - graphemer: 1.4.0 - ignore: 7.0.5 - natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': - dependencies: - '@typescript-eslint/scope-manager': 8.41.0 - '@typescript-eslint/types': 8.41.0 - '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.41.0 - debug: 4.4.3(supports-color@8.1.1) - eslint: 9.35.0(jiti@2.5.1) - typescript: 5.9.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/parser@8.42.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@typescript-eslint/scope-manager': 8.42.0 '@typescript-eslint/types': 8.42.0 '@typescript-eslint/typescript-estree': 8.42.0(typescript@5.9.2) '@typescript-eslint/visitor-keys': 8.42.0 debug: 4.4.3(supports-color@8.1.1) - eslint: 9.35.0(jiti@2.5.1) - typescript: 5.9.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': - dependencies: - '@typescript-eslint/scope-manager': 8.43.0 - '@typescript-eslint/types': 8.43.0 - '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.43.0 - debug: 4.4.3(supports-color@8.1.1) - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.41.0(typescript@5.9.2)': + '@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.41.0(typescript@5.9.2) - '@typescript-eslint/types': 8.43.0 + '@typescript-eslint/scope-manager': 8.44.1 + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.44.1 debug: 4.4.3(supports-color@8.1.1) + eslint: 9.36.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -6731,105 +6622,54 @@ snapshots: '@typescript-eslint/project-service@8.42.0(typescript@5.9.2)': dependencies: '@typescript-eslint/tsconfig-utils': 8.42.0(typescript@5.9.2) - '@typescript-eslint/types': 8.43.0 + '@typescript-eslint/types': 8.44.1 debug: 4.4.3(supports-color@8.1.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.43.0(typescript@5.9.2)': + '@typescript-eslint/project-service@8.44.1(typescript@5.9.2)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.43.0(typescript@5.9.2) - '@typescript-eslint/types': 8.43.0 + '@typescript-eslint/tsconfig-utils': 8.44.1(typescript@5.9.2) + '@typescript-eslint/types': 8.44.1 debug: 4.4.3(supports-color@8.1.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.41.0': - dependencies: - '@typescript-eslint/types': 8.41.0 - '@typescript-eslint/visitor-keys': 8.41.0 - '@typescript-eslint/scope-manager@8.42.0': dependencies: '@typescript-eslint/types': 8.42.0 '@typescript-eslint/visitor-keys': 8.42.0 - '@typescript-eslint/scope-manager@8.43.0': + '@typescript-eslint/scope-manager@8.44.1': dependencies: - '@typescript-eslint/types': 8.43.0 - '@typescript-eslint/visitor-keys': 8.43.0 - - '@typescript-eslint/tsconfig-utils@8.41.0(typescript@5.9.2)': - dependencies: - typescript: 5.9.2 + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/visitor-keys': 8.44.1 '@typescript-eslint/tsconfig-utils@8.42.0(typescript@5.9.2)': dependencies: typescript: 5.9.2 - '@typescript-eslint/tsconfig-utils@8.43.0(typescript@5.9.2)': + '@typescript-eslint/tsconfig-utils@8.44.1(typescript@5.9.2)': dependencies: typescript: 5.9.2 - '@typescript-eslint/type-utils@8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/type-utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@typescript-eslint/types': 8.41.0 - '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.2) + '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) debug: 4.4.3(supports-color@8.1.1) - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.5.1) ts-api-utils: 2.1.0(typescript@5.9.2) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': - dependencies: - '@typescript-eslint/types': 8.42.0 - '@typescript-eslint/typescript-estree': 8.42.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - debug: 4.4.3(supports-color@8.1.1) - eslint: 9.35.0(jiti@2.5.1) - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/type-utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': - dependencies: - '@typescript-eslint/types': 8.43.0 - '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - debug: 4.4.3(supports-color@8.1.1) - eslint: 9.35.0(jiti@2.5.1) - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@8.41.0': {} - '@typescript-eslint/types@8.42.0': {} - '@typescript-eslint/types@8.43.0': {} - - '@typescript-eslint/typescript-estree@8.41.0(typescript@5.9.2)': - dependencies: - '@typescript-eslint/project-service': 8.41.0(typescript@5.9.2) - '@typescript-eslint/tsconfig-utils': 8.41.0(typescript@5.9.2) - '@typescript-eslint/types': 8.41.0 - '@typescript-eslint/visitor-keys': 8.41.0 - debug: 4.4.3(supports-color@8.1.1) - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 - transitivePeerDependencies: - - supports-color + '@typescript-eslint/types@8.44.1': {} '@typescript-eslint/typescript-estree@8.42.0(typescript@5.9.2)': dependencies: @@ -6847,12 +6687,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.43.0(typescript@5.9.2)': + '@typescript-eslint/typescript-estree@8.44.1(typescript@5.9.2)': dependencies: - '@typescript-eslint/project-service': 8.43.0(typescript@5.9.2) - '@typescript-eslint/tsconfig-utils': 8.43.0(typescript@5.9.2) - '@typescript-eslint/types': 8.43.0 - '@typescript-eslint/visitor-keys': 8.43.0 + '@typescript-eslint/project-service': 8.44.1(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.44.1(typescript@5.9.2) + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/visitor-keys': 8.44.1 debug: 4.4.3(supports-color@8.1.1) fast-glob: 3.3.3 is-glob: 4.0.3 @@ -6863,52 +6703,25 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': - dependencies: - '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) - '@typescript-eslint/scope-manager': 8.41.0 - '@typescript-eslint/types': 8.41.0 - '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.9.2) - eslint: 9.35.0(jiti@2.5.1) - typescript: 5.9.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': - dependencies: - '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) - '@typescript-eslint/scope-manager': 8.42.0 - '@typescript-eslint/types': 8.42.0 - '@typescript-eslint/typescript-estree': 8.42.0(typescript@5.9.2) - eslint: 9.35.0(jiti@2.5.1) - typescript: 5.9.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) - '@typescript-eslint/scope-manager': 8.43.0 - '@typescript-eslint/types': 8.43.0 - '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2) - eslint: 9.35.0(jiti@2.5.1) + '@eslint-community/eslint-utils': 4.8.0(eslint@9.36.0(jiti@2.5.1)) + '@typescript-eslint/scope-manager': 8.44.1 + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.2) + eslint: 9.36.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.41.0': - dependencies: - '@typescript-eslint/types': 8.41.0 - eslint-visitor-keys: 4.2.1 - '@typescript-eslint/visitor-keys@8.42.0': dependencies: '@typescript-eslint/types': 8.42.0 eslint-visitor-keys: 4.2.1 - '@typescript-eslint/visitor-keys@8.43.0': + '@typescript-eslint/visitor-keys@8.44.1': dependencies: - '@typescript-eslint/types': 8.43.0 + '@typescript-eslint/types': 8.44.1 eslint-visitor-keys: 4.2.1 '@unrs/resolver-binding-android-arm-eabi@1.11.1': @@ -6970,10 +6783,11 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - '@vitest/eslint-plugin@1.3.4(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': + '@vitest/eslint-plugin@1.3.12(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@typescript-eslint/utils': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.35.0(jiti@2.5.1) + '@typescript-eslint/scope-manager': 8.44.1 + '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.36.0(jiti@2.5.1) optionalDependencies: typescript: 5.9.2 transitivePeerDependencies: @@ -6984,14 +6798,14 @@ snapshots: '@whatwg-node/promise-helpers': 1.3.2 tslib: 2.8.1 - '@whatwg-node/fetch@0.10.10': + '@whatwg-node/fetch@0.10.11': dependencies: - '@whatwg-node/node-fetch': 0.7.25 + '@whatwg-node/node-fetch': 0.8.0 urlpattern-polyfill: 10.1.0 - '@whatwg-node/node-fetch@0.7.25': + '@whatwg-node/node-fetch@0.8.0': dependencies: - '@fastify/busboy': 3.1.1 + '@fastify/busboy': 3.2.0 '@whatwg-node/disposablestack': 0.0.6 '@whatwg-node/promise-helpers': 1.3.2 tslib: 2.8.1 @@ -7327,8 +7141,6 @@ snapshots: chalk@5.5.0: {} - chalk@5.6.0: {} - change-case@5.4.4: {} char-regex@1.0.2: {} @@ -7392,6 +7204,11 @@ snapshots: slice-ansi: 5.0.0 string-width: 7.2.0 + cli-truncate@5.1.0: + dependencies: + slice-ansi: 7.1.0 + string-width: 8.1.0 + cliui@6.0.0: dependencies: string-width: 4.2.3 @@ -7434,7 +7251,7 @@ snapshots: commander@10.0.1: {} - commander@14.0.0: {} + commander@14.0.1: {} commander@6.2.1: {} @@ -7694,7 +7511,7 @@ snapshots: enhanced-resolve@5.18.3: dependencies: graceful-fs: 4.2.11 - tapable: 2.2.2 + tapable: 2.2.3 entities@1.1.2: {} @@ -7841,55 +7658,55 @@ snapshots: lodash.get: 4.4.2 lodash.zip: 4.2.0 - eslint-compat-utils@0.5.1(eslint@9.35.0(jiti@2.5.1)): + eslint-compat-utils@0.5.1(eslint@9.36.0(jiti@2.5.1)): dependencies: - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.5.1) semver: 7.7.2 - eslint-compat-utils@0.6.5(eslint@9.35.0(jiti@2.5.1)): + eslint-compat-utils@0.6.5(eslint@9.36.0(jiti@2.5.1)): dependencies: - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.5.1) semver: 7.7.2 - eslint-config-canonical@45.0.0(@types/eslint@9.6.1)(@types/node@24.4.0)(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): - dependencies: - '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.4.0)(eslint@9.35.0(jiti@2.5.1))(graphql@16.11.0)(typescript@5.9.2) - '@next/eslint-plugin-next': 15.5.2 - '@stylistic/eslint-plugin': 4.4.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/eslint-plugin': 8.41.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/parser': 8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - '@vitest/eslint-plugin': 1.3.4(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.35.0(jiti@2.5.1) - eslint-config-prettier: 10.1.8(eslint@9.35.0(jiti@2.5.1)) - eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)) - eslint-plugin-ava: 15.1.0(eslint@9.35.0(jiti@2.5.1)) - eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - eslint-plugin-eslint-comments: 3.2.0(eslint@9.35.0(jiti@2.5.1)) - eslint-plugin-fp: 2.3.0(eslint@9.35.0(jiti@2.5.1)) - eslint-plugin-functional: 9.0.2(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)) - eslint-plugin-jest: 28.14.0(@typescript-eslint/eslint-plugin@8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - eslint-plugin-jsdoc: 50.8.0(eslint@9.35.0(jiti@2.5.1)) - eslint-plugin-jsonc: 2.20.1(eslint@9.35.0(jiti@2.5.1)) - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.35.0(jiti@2.5.1)) - eslint-plugin-lodash: 8.0.0(eslint@9.35.0(jiti@2.5.1)) - eslint-plugin-mocha: 10.5.0(eslint@9.35.0(jiti@2.5.1)) + eslint-config-canonical@45.0.0(@types/node@24.5.2)(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2): + dependencies: + '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.5.2)(eslint@9.36.0(jiti@2.5.1))(graphql@16.11.0)(typescript@5.9.2) + '@next/eslint-plugin-next': 15.5.4 + '@stylistic/eslint-plugin': 4.4.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/eslint-plugin': 8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/parser': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@vitest/eslint-plugin': 1.3.12(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.36.0(jiti@2.5.1) + eslint-config-prettier: 10.1.8(eslint@9.36.0(jiti@2.5.1)) + eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1)) + eslint-plugin-ava: 15.1.0(eslint@9.36.0(jiti@2.5.1)) + eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + eslint-plugin-eslint-comments: 3.2.0(eslint@9.36.0(jiti@2.5.1)) + eslint-plugin-fp: 2.3.0(eslint@9.36.0(jiti@2.5.1)) + eslint-plugin-functional: 9.0.2(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)) + eslint-plugin-jest: 28.14.0(@typescript-eslint/eslint-plugin@8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + eslint-plugin-jsdoc: 50.8.0(eslint@9.36.0(jiti@2.5.1)) + eslint-plugin-jsonc: 2.20.1(eslint@9.36.0(jiti@2.5.1)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.36.0(jiti@2.5.1)) + eslint-plugin-lodash: 8.0.0(eslint@9.36.0(jiti@2.5.1)) + eslint-plugin-mocha: 10.5.0(eslint@9.36.0(jiti@2.5.1)) eslint-plugin-modules-newline: 0.0.6 - eslint-plugin-n: 17.21.3(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - eslint-plugin-perfectionist: 4.15.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - eslint-plugin-prettier: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(prettier@3.6.2) - eslint-plugin-promise: 7.2.1(eslint@9.35.0(jiti@2.5.1)) - eslint-plugin-react: 7.37.5(eslint@9.35.0(jiti@2.5.1)) - eslint-plugin-react-hooks: 5.2.0(eslint@9.35.0(jiti@2.5.1)) - eslint-plugin-regexp: 2.10.0(eslint@9.35.0(jiti@2.5.1)) - eslint-plugin-unicorn: 60.0.0(eslint@9.35.0(jiti@2.5.1)) - eslint-plugin-yml: 1.18.0(eslint@9.35.0(jiti@2.5.1)) - eslint-plugin-zod: 1.4.0(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-n: 17.23.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + eslint-plugin-perfectionist: 4.15.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + eslint-plugin-prettier: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1))(prettier@3.6.2) + eslint-plugin-promise: 7.2.1(eslint@9.36.0(jiti@2.5.1)) + eslint-plugin-react: 7.37.5(eslint@9.36.0(jiti@2.5.1)) + eslint-plugin-react-hooks: 5.2.0(eslint@9.36.0(jiti@2.5.1)) + eslint-plugin-regexp: 2.10.0(eslint@9.36.0(jiti@2.5.1)) + eslint-plugin-unicorn: 60.0.0(eslint@9.36.0(jiti@2.5.1)) + eslint-plugin-yml: 1.18.0(eslint@9.36.0(jiti@2.5.1)) + eslint-plugin-zod: 1.4.0(eslint@9.36.0(jiti@2.5.1)) globals: 16.4.0 graphql: 16.11.0 prettier: 3.6.2 ramda: 0.30.1 - typescript-eslint: 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + typescript-eslint: 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) yaml-eslint-parser: 1.3.0 transitivePeerDependencies: - '@apollo/subgraph' @@ -7912,9 +7729,9 @@ snapshots: - utf-8-validate - vitest - eslint-config-prettier@10.1.8(eslint@9.35.0(jiti@2.5.1)): + eslint-config-prettier@10.1.8(eslint@9.36.0(jiti@2.5.1)): dependencies: - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.5.1) eslint-import-context@0.1.9(unrs-resolver@1.11.1): dependencies: @@ -7923,35 +7740,26 @@ snapshots: optionalDependencies: unrs-resolver: 1.11.1 - eslint-import-resolver-node@0.3.9: - dependencies: - debug: 3.2.7 - is-core-module: 2.16.1 - resolve: 1.22.10 - transitivePeerDependencies: - - supports-color - optional: true - - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3(supports-color@8.1.1) - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.5.1) get-tsconfig: 4.10.1 is-bun-module: 2.0.0 stable-hash: 0.0.5 tinyglobby: 0.2.14 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)) transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)): + eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1)): dependencies: debug: 4.4.3(supports-color@8.1.1) - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.5.1) eslint-import-context: 0.1.9(unrs-resolver@1.11.1) get-tsconfig: 4.10.1 is-bun-module: 2.0.0 @@ -7959,33 +7767,32 @@ snapshots: tinyglobby: 0.2.14 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)) transitivePeerDependencies: - supports-color - eslint-json-compat-utils@0.2.1(eslint@9.35.0(jiti@2.5.1))(jsonc-eslint-parser@2.4.0): + eslint-json-compat-utils@0.2.1(eslint@9.36.0(jiti@2.5.1))(jsonc-eslint-parser@2.4.1): dependencies: - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.5.1) esquery: 1.6.0 - jsonc-eslint-parser: 2.4.0 + jsonc-eslint-parser: 2.4.1 - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.35.0(jiti@2.5.1) - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)) + '@typescript-eslint/parser': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.36.0(jiti@2.5.1) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1)) transitivePeerDependencies: - supports-color - eslint-plugin-ava@15.1.0(eslint@9.35.0(jiti@2.5.1)): + eslint-plugin-ava@15.1.0(eslint@9.36.0(jiti@2.5.1)): dependencies: enhance-visitors: 1.0.0 - eslint: 9.35.0(jiti@2.5.1) - eslint-utils: 3.0.0(eslint@9.35.0(jiti@2.5.1)) + eslint: 9.36.0(jiti@2.5.1) + eslint-utils: 3.0.0(eslint@9.36.0(jiti@2.5.1)) espree: 9.6.1 espurify: 2.1.1 import-modules: 2.1.0 @@ -7993,14 +7800,14 @@ snapshots: pkg-dir: 5.0.0 resolve-from: 5.0.0 - eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): + eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/utils': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) array-includes: 3.1.9 debug: 4.4.3(supports-color@8.1.1) doctrine: 3.0.0 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)) - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1)) is-get-set-prop: 1.0.0 is-js-type: 2.0.0 is-obj-prop: 1.0.0 @@ -8020,34 +7827,34 @@ snapshots: - supports-color - typescript - eslint-plugin-es-x@7.8.0(eslint@9.35.0(jiti@2.5.1)): + eslint-plugin-es-x@7.8.0(eslint@9.36.0(jiti@2.5.1)): dependencies: - '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.8.0(eslint@9.36.0(jiti@2.5.1)) '@eslint-community/regexpp': 4.12.1 - eslint: 9.35.0(jiti@2.5.1) - eslint-compat-utils: 0.5.1(eslint@9.35.0(jiti@2.5.1)) + eslint: 9.36.0(jiti@2.5.1) + eslint-compat-utils: 0.5.1(eslint@9.36.0(jiti@2.5.1)) - eslint-plugin-eslint-comments@3.2.0(eslint@9.35.0(jiti@2.5.1)): + eslint-plugin-eslint-comments@3.2.0(eslint@9.36.0(jiti@2.5.1)): dependencies: escape-string-regexp: 1.0.5 - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.5.1) ignore: 5.3.2 - eslint-plugin-fp@2.3.0(eslint@9.35.0(jiti@2.5.1)): + eslint-plugin-fp@2.3.0(eslint@9.36.0(jiti@2.5.1)): dependencies: create-eslint-index: 1.0.0 - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.5.1) eslint-ast-utils: 1.1.0 lodash: 4.17.21 req-all: 0.1.0 - eslint-plugin-functional@9.0.2(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): + eslint-plugin-functional@9.0.2(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/utils': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) deepmerge-ts: 7.1.5 escape-string-regexp: 5.0.0 - eslint: 9.35.0(jiti@2.5.1) - is-immutable-type: 5.0.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.36.0(jiti@2.5.1) + is-immutable-type: 5.0.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) ts-api-utils: 2.1.0(typescript@5.9.2) ts-declaration-location: 1.0.7(typescript@5.9.2) optionalDependencies: @@ -8055,12 +7862,12 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)): + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)): dependencies: - '@typescript-eslint/types': 8.43.0 + '@typescript-eslint/types': 8.44.1 comment-parser: 1.4.1 debug: 4.4.3(supports-color@8.1.1) - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.5.1) eslint-import-context: 0.1.9(unrs-resolver@1.11.1) is-glob: 4.0.3 minimatch: 10.0.3 @@ -8068,29 +7875,28 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - eslint-import-resolver-node: 0.3.9 + '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) transitivePeerDependencies: - supports-color - eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): + eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/utils': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.35.0(jiti@2.5.1) + '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.36.0(jiti@2.5.1) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.41.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/eslint-plugin': 8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-jsdoc@50.8.0(eslint@9.35.0(jiti@2.5.1)): + eslint-plugin-jsdoc@50.8.0(eslint@9.36.0(jiti@2.5.1)): dependencies: '@es-joy/jsdoccomment': 0.50.2 are-docs-informative: 0.0.2 comment-parser: 1.4.1 debug: 4.4.3(supports-color@8.1.1) escape-string-regexp: 4.0.0 - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.5.1) espree: 10.4.0 esquery: 1.6.0 parse-imports-exports: 0.2.4 @@ -8099,21 +7905,21 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-jsonc@2.20.1(eslint@9.35.0(jiti@2.5.1)): + eslint-plugin-jsonc@2.20.1(eslint@9.36.0(jiti@2.5.1)): dependencies: - '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) - eslint: 9.35.0(jiti@2.5.1) - eslint-compat-utils: 0.6.5(eslint@9.35.0(jiti@2.5.1)) - eslint-json-compat-utils: 0.2.1(eslint@9.35.0(jiti@2.5.1))(jsonc-eslint-parser@2.4.0) + '@eslint-community/eslint-utils': 4.8.0(eslint@9.36.0(jiti@2.5.1)) + eslint: 9.36.0(jiti@2.5.1) + eslint-compat-utils: 0.6.5(eslint@9.36.0(jiti@2.5.1)) + eslint-json-compat-utils: 0.2.1(eslint@9.36.0(jiti@2.5.1))(jsonc-eslint-parser@2.4.1) espree: 10.4.0 graphemer: 1.4.0 - jsonc-eslint-parser: 2.4.0 + jsonc-eslint-parser: 2.4.1 natural-compare: 1.4.0 synckit: 0.11.11 transitivePeerDependencies: - '@eslint/json' - eslint-plugin-jsx-a11y@6.10.2(eslint@9.35.0(jiti@2.5.1)): + eslint-plugin-jsx-a11y@6.10.2(eslint@9.36.0(jiti@2.5.1)): dependencies: aria-query: 5.3.2 array-includes: 3.1.9 @@ -8123,7 +7929,7 @@ snapshots: axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.5.1) hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 @@ -8132,15 +7938,15 @@ snapshots: safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 - eslint-plugin-lodash@8.0.0(eslint@9.35.0(jiti@2.5.1)): + eslint-plugin-lodash@8.0.0(eslint@9.36.0(jiti@2.5.1)): dependencies: - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.5.1) lodash: 4.17.21 - eslint-plugin-mocha@10.5.0(eslint@9.35.0(jiti@2.5.1)): + eslint-plugin-mocha@10.5.0(eslint@9.36.0(jiti@2.5.1)): dependencies: - eslint: 9.35.0(jiti@2.5.1) - eslint-utils: 3.0.0(eslint@9.35.0(jiti@2.5.1)) + eslint: 9.36.0(jiti@2.5.1) + eslint-utils: 3.0.0(eslint@9.36.0(jiti@2.5.1)) globals: 13.24.0 rambda: 7.5.0 @@ -8148,12 +7954,12 @@ snapshots: dependencies: requireindex: 1.1.0 - eslint-plugin-n@17.21.3(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): + eslint-plugin-n@17.23.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.8.0(eslint@9.36.0(jiti@2.5.1)) enhanced-resolve: 5.18.3 - eslint: 9.35.0(jiti@2.5.1) - eslint-plugin-es-x: 7.8.0(eslint@9.35.0(jiti@2.5.1)) + eslint: 9.36.0(jiti@2.5.1) + eslint-plugin-es-x: 7.8.0(eslint@9.36.0(jiti@2.5.1)) get-tsconfig: 4.10.1 globals: 15.15.0 globrex: 0.1.2 @@ -8163,36 +7969,35 @@ snapshots: transitivePeerDependencies: - typescript - eslint-plugin-perfectionist@4.15.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): + eslint-plugin-perfectionist@4.15.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/types': 8.43.0 - '@typescript-eslint/utils': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.35.0(jiti@2.5.1) + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.36.0(jiti@2.5.1) natural-orderby: 5.0.0 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-prettier@5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(prettier@3.6.2): + eslint-plugin-prettier@5.5.4(eslint-config-prettier@10.1.8(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1))(prettier@3.6.2): dependencies: - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.5.1) prettier: 3.6.2 prettier-linter-helpers: 1.0.0 synckit: 0.11.11 optionalDependencies: - '@types/eslint': 9.6.1 - eslint-config-prettier: 10.1.8(eslint@9.35.0(jiti@2.5.1)) + eslint-config-prettier: 10.1.8(eslint@9.36.0(jiti@2.5.1)) - eslint-plugin-promise@7.2.1(eslint@9.35.0(jiti@2.5.1)): + eslint-plugin-promise@7.2.1(eslint@9.36.0(jiti@2.5.1)): dependencies: - '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) - eslint: 9.35.0(jiti@2.5.1) + '@eslint-community/eslint-utils': 4.8.0(eslint@9.36.0(jiti@2.5.1)) + eslint: 9.36.0(jiti@2.5.1) - eslint-plugin-react-hooks@5.2.0(eslint@9.35.0(jiti@2.5.1)): + eslint-plugin-react-hooks@5.2.0(eslint@9.36.0(jiti@2.5.1)): dependencies: - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.5.1) - eslint-plugin-react@7.37.5(eslint@9.35.0(jiti@2.5.1)): + eslint-plugin-react@7.37.5(eslint@9.36.0(jiti@2.5.1)): dependencies: array-includes: 3.1.9 array.prototype.findlast: 1.2.5 @@ -8200,7 +8005,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.1 - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.5.1) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -8214,27 +8019,27 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-regexp@2.10.0(eslint@9.35.0(jiti@2.5.1)): + eslint-plugin-regexp@2.10.0(eslint@9.36.0(jiti@2.5.1)): dependencies: - '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.8.0(eslint@9.36.0(jiti@2.5.1)) '@eslint-community/regexpp': 4.12.1 comment-parser: 1.4.1 - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.5.1) jsdoc-type-pratt-parser: 4.8.0 refa: 0.12.1 regexp-ast-analysis: 0.7.1 scslre: 0.3.0 - eslint-plugin-unicorn@60.0.0(eslint@9.35.0(jiti@2.5.1)): + eslint-plugin-unicorn@60.0.0(eslint@9.36.0(jiti@2.5.1)): dependencies: '@babel/helper-validator-identifier': 7.27.1 - '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.8.0(eslint@9.36.0(jiti@2.5.1)) '@eslint/plugin-kit': 0.3.5 change-case: 5.4.4 ci-info: 4.3.0 clean-regexp: 1.0.0 core-js-compat: 3.45.0 - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.5.1) esquery: 1.6.0 find-up-simple: 1.0.1 globals: 16.4.0 @@ -8245,22 +8050,22 @@ snapshots: regexp-tree: 0.1.27 regjsparser: 0.12.0 semver: 7.7.2 - strip-indent: 4.0.0 + strip-indent: 4.1.0 - eslint-plugin-yml@1.18.0(eslint@9.35.0(jiti@2.5.1)): + eslint-plugin-yml@1.18.0(eslint@9.36.0(jiti@2.5.1)): dependencies: debug: 4.4.3(supports-color@8.1.1) escape-string-regexp: 4.0.0 - eslint: 9.35.0(jiti@2.5.1) - eslint-compat-utils: 0.6.5(eslint@9.35.0(jiti@2.5.1)) + eslint: 9.36.0(jiti@2.5.1) + eslint-compat-utils: 0.6.5(eslint@9.36.0(jiti@2.5.1)) natural-compare: 1.4.0 yaml-eslint-parser: 1.3.0 transitivePeerDependencies: - supports-color - eslint-plugin-zod@1.4.0(eslint@9.35.0(jiti@2.5.1)): + eslint-plugin-zod@1.4.0(eslint@9.36.0(jiti@2.5.1)): dependencies: - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.5.1) eslint-scope@5.1.1: dependencies: @@ -8272,9 +8077,9 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-utils@3.0.0(eslint@9.35.0(jiti@2.5.1)): + eslint-utils@3.0.0(eslint@9.36.0(jiti@2.5.1)): dependencies: - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.5.1) eslint-visitor-keys: 2.1.0 eslint-visitor-keys@2.1.0: {} @@ -8283,15 +8088,15 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.35.0(jiti@2.5.1): + eslint@9.36.0(jiti@2.5.1): dependencies: - '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.8.0(eslint@9.36.0(jiti@2.5.1)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.21.0 '@eslint/config-helpers': 0.3.1 '@eslint/core': 0.15.2 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.35.0 + '@eslint/js': 9.36.0 '@eslint/plugin-kit': 0.3.5 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 @@ -8710,13 +8515,13 @@ snapshots: graphemer@1.4.0: {} - graphql-config@5.1.5(@types/node@24.4.0)(graphql@16.11.0)(typescript@5.9.2): + graphql-config@5.1.5(@types/node@24.5.2)(graphql@16.11.0)(typescript@5.9.2): dependencies: - '@graphql-tools/graphql-file-loader': 8.0.22(graphql@16.11.0) + '@graphql-tools/graphql-file-loader': 8.1.2(graphql@16.11.0) '@graphql-tools/json-file-loader': 8.0.20(graphql@16.11.0) '@graphql-tools/load': 8.1.2(graphql@16.11.0) '@graphql-tools/merge': 9.1.1(graphql@16.11.0) - '@graphql-tools/url-loader': 8.0.33(@types/node@24.4.0)(graphql@16.11.0) + '@graphql-tools/url-loader': 8.0.33(@types/node@24.5.2)(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) cosmiconfig: 8.3.6(typescript@5.9.2) graphql: 16.11.0 @@ -8801,6 +8606,8 @@ snapshots: dependencies: lru-cache: 10.4.3 + html-entities@2.6.0: {} + html-escaper@2.0.2: {} htmlparser2@3.10.1: @@ -8990,10 +8797,10 @@ snapshots: dependencies: is-extglob: 2.1.1 - is-immutable-type@5.0.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): + is-immutable-type@5.0.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/type-utils': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.35.0(jiti@2.5.1) + '@typescript-eslint/type-utils': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.36.0(jiti@2.5.1) ts-api-utils: 2.1.0(typescript@5.9.2) ts-declaration-location: 1.0.7(typescript@5.9.2) typescript: 5.9.2 @@ -9236,7 +9043,7 @@ snapshots: json5@2.2.3: {} - jsonc-eslint-parser@2.4.0: + jsonc-eslint-parser@2.4.1: dependencies: acorn: 8.15.0 eslint-visitor-keys: 3.4.3 @@ -9283,28 +9090,21 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - lilconfig@3.1.3: {} - line-column-path@3.0.0: dependencies: type-fest: 2.19.0 lines-and-columns@1.2.4: {} - lint-staged@16.1.6: + lint-staged@16.2.0: dependencies: - chalk: 5.6.0 - commander: 14.0.0 - debug: 4.4.3(supports-color@8.1.1) - lilconfig: 3.1.3 - listr2: 9.0.3 + commander: 14.0.1 + listr2: 9.0.4 micromatch: 4.0.8 - nano-spawn: 1.0.2 + nano-spawn: 1.0.3 pidtree: 0.6.0 string-argv: 0.3.2 yaml: 2.8.1 - transitivePeerDependencies: - - supports-color listr2@8.3.3: dependencies: @@ -9315,9 +9115,9 @@ snapshots: rfdc: 1.4.1 wrap-ansi: 9.0.0 - listr2@9.0.3: + listr2@9.0.4: dependencies: - cli-truncate: 4.0.0 + cli-truncate: 5.1.0 colorette: 2.0.20 eventemitter3: 5.0.1 log-update: 6.1.0 @@ -9469,9 +9269,9 @@ snapshots: merge2@1.4.1: {} - meros@1.3.1(@types/node@24.4.0): + meros@1.3.2(@types/node@24.5.2): optionalDependencies: - '@types/node': 24.4.0 + '@types/node': 24.5.2 micro-spelling-correcter@1.1.1: {} @@ -9492,8 +9292,6 @@ snapshots: mimic-function@5.0.1: {} - min-indent@1.0.1: {} - minimatch@10.0.3: dependencies: '@isaacs/brace-expansion': 5.0.0 @@ -9596,7 +9394,7 @@ snapshots: nan@2.23.0: optional: true - nano-spawn@1.0.2: {} + nano-spawn@1.0.3: {} napi-postinstall@0.3.3: {} @@ -10207,13 +10005,13 @@ snapshots: refa: 0.12.1 regexp-ast-analysis: 0.7.1 - semantic-release@24.2.8(typescript@5.9.2): + semantic-release@24.2.9(typescript@5.9.2): dependencies: - '@semantic-release/commit-analyzer': 13.0.1(semantic-release@24.2.8(typescript@5.9.2)) + '@semantic-release/commit-analyzer': 13.0.1(semantic-release@24.2.9(typescript@5.9.2)) '@semantic-release/error': 4.0.0 - '@semantic-release/github': 11.0.6(semantic-release@24.2.8(typescript@5.9.2)) - '@semantic-release/npm': 12.0.2(semantic-release@24.2.8(typescript@5.9.2)) - '@semantic-release/release-notes-generator': 14.0.3(semantic-release@24.2.8(typescript@5.9.2)) + '@semantic-release/github': 11.0.6(semantic-release@24.2.9(typescript@5.9.2)) + '@semantic-release/npm': 12.0.2(semantic-release@24.2.9(typescript@5.9.2)) + '@semantic-release/release-notes-generator': 14.0.3(semantic-release@24.2.9(typescript@5.9.2)) aggregate-error: 5.0.0 cosmiconfig: 9.0.0(typescript@5.9.2) debug: 4.4.3(supports-color@8.1.1) @@ -10235,7 +10033,7 @@ snapshots: read-package-up: 11.0.0 resolve-from: 5.0.0 semver: 7.7.2 - semver-diff: 4.0.0 + semver-diff: 5.0.0 signale: 1.4.0 yargs: 17.7.2 transitivePeerDependencies: @@ -10244,7 +10042,7 @@ snapshots: semver-compare@1.0.0: {} - semver-diff@4.0.0: + semver-diff@5.0.0: dependencies: semver: 7.7.2 @@ -10451,6 +10249,11 @@ snapshots: get-east-asian-width: 1.3.0 strip-ansi: 7.1.0 + string-width@8.1.0: + dependencies: + get-east-asian-width: 1.3.0 + strip-ansi: 7.1.0 + string.prototype.includes@2.0.1: dependencies: call-bind: 1.0.8 @@ -10523,9 +10326,7 @@ snapshots: strip-final-newline@4.0.0: {} - strip-indent@4.0.0: - dependencies: - min-indent: 1.0.1 + strip-indent@4.1.0: {} strip-json-comments@2.0.1: {} @@ -10573,7 +10374,7 @@ snapshots: dependencies: '@pkgr/core': 0.2.9 - tapable@2.2.2: {} + tapable@2.2.3: {} tar@6.2.1: dependencies: @@ -10721,13 +10522,13 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): + typescript-eslint@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/parser': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.35.0(jiti@2.5.1) + '@typescript-eslint/eslint-plugin': 8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/parser': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.2) + '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.36.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -10746,7 +10547,7 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 - undici-types@7.11.0: {} + undici-types@7.12.0: {} unicode-canonical-property-names-ecmascript@2.0.1: {} diff --git a/src/getJsdocProcessorPlugin.js b/src/getJsdocProcessorPlugin.js index 3ae6f959d..f78986d75 100644 --- a/src/getJsdocProcessorPlugin.js +++ b/src/getJsdocProcessorPlugin.js @@ -9,13 +9,15 @@ import { parseComment, } from '@es-joy/jsdoccomment'; import * as espree from 'espree'; +import { + decode, +} from 'html-entities'; import { readFileSync, } from 'node:fs'; import { join, } from 'node:path'; - /** * @import { * Integer, @@ -81,7 +83,6 @@ const getLinesCols = (text) => { /** * @typedef {number} Integer */ - /** * @typedef {object} JsdocProcessorOptions * @property {boolean} [captionRequired] Require captions for example tags @@ -108,6 +109,13 @@ const getLinesCols = (text) => { * @returns {ESLint.Plugin} */ export const getJsdocProcessorPlugin = (options = {}) => { + /** + * @typedef {{ + * text: string, + * filename: string|null|undefined + * }} TextAndFileName + */ + const { allowedLanguagesToProcess = [ 'js', 'ts', 'javascript', 'typescript', @@ -167,10 +175,7 @@ export const getJsdocProcessorPlugin = (options = {}) => { */ const getTextsAndFileNames = (jsdoc, jsFileName, commentLineCols) => { /** - * @type {{ - * text: string, - * filename: string|null|undefined - * }[]} + * @type {TextAndFileName[]} */ const textsAndFileNames = []; @@ -252,7 +257,22 @@ export const getJsdocProcessorPlugin = (options = {}) => { textsAndFileNames.push({ filename: file, - text: src, + // See https://github.com/gajus/eslint-plugin-jsdoc/issues/710 + text: src.replaceAll(/(?<=\*)\\(?=\\*\/)/gv, '').replaceAll(/&([^\s;]+);/gv, (_, code) => { + // Dec + if ((/^#\d+$/v).test(code)) { + return String.fromCodePoint(Number.parseInt(code.slice(1), 10)); + } + + // Hex + if ((/^#x\d+$/v).test(code)) { + return String.fromCodePoint(Number.parseInt(code.slice(2), 16)); + } + + return decode(_, { + level: 'html5', + }); + }), }); otherInfo.push({ codeStartCol, @@ -649,6 +669,7 @@ export const getJsdocProcessorPlugin = (options = {}) => { ); }).filter( /** + * @param {TextAndFileName} file * @returns {file is Linter.ProcessorFile} */ (file) => { diff --git a/test/getJsdocProcessPlugin.js b/test/getJsdocProcessPlugin.js index 86c04f41a..5ae432c02 100644 --- a/test/getJsdocProcessPlugin.js +++ b/test/getJsdocProcessPlugin.js @@ -224,6 +224,52 @@ describe('`getJsdocProcessorPlugin`', () => { }); }); + it('returns text and files (with escaped */)', () => { + const filename = 'something.js'; + const text = ` + /** + * @example + * doSth('a'); /* Ok *\\/ + */ + function doSth () {} + `; + + check({ + filename, + result: [ + text, + { + filename: 'something.md/*.js', + text: '\ndoSth(\'a\'); /* Ok */', + }, + ], + text, + }); + }); + + it('returns text and files (with escaped Ӓ and 噸)', () => { + const filename = 'something.js'; + const text = ` + /** + * @example + * doSth('Ӓ and 噸 and & and ©'); + */ + function doSth () {} + `; + + check({ + filename, + result: [ + text, + { + filename: 'something.md/*.js', + text: '\ndoSth(\'Ó’ and 噸 and & and ©\');', + }, + ], + text, + }); + }); + it('returns text and files (no asterisk example)', () => { const options = { exampleCodeRegex: '```js([\\s\\S]*)```', diff --git a/test/iterateJsdoc.js b/test/iterateJsdoc.js index f26900855..a7f7e53a3 100644 --- a/test/iterateJsdoc.js +++ b/test/iterateJsdoc.js @@ -7,9 +7,11 @@ import { expect, } from 'chai'; +/* eslint-disable jsdoc/reject-any-type -- Deliberate error */ /** * @typedef {any} BadArgument */ +/* eslint-enable jsdoc/reject-any-type -- Deliberate error */ describe('iterateJsdoc', () => { describe('constructor', () => { diff --git a/test/jsdocUtils.js b/test/jsdocUtils.js index 4db337d1c..5edea5371 100644 --- a/test/jsdocUtils.js +++ b/test/jsdocUtils.js @@ -3,9 +3,11 @@ import { expect, } from 'chai'; +/* eslint-disable jsdoc/reject-any-type -- Deliberate error */ /** * @typedef {any} BadArgument */ +/* eslint-enable jsdoc/reject-any-type -- Deliberate error */ describe('jsdocUtils', () => { describe('getPreferredTagName()', () => { From 68fad5b97eb02650bc876c49584bb2eed3a39f17 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Mon, 22 Sep 2025 09:30:47 +0800 Subject: [PATCH 122/189] feat: add `flat/recommended-mixed` config; fixes #1101 --- src/index-cjs.js | 26 ++++++++++++++++++++++++-- src/index.js | 26 ++++++++++++++++++++++++-- 2 files changed, 48 insertions(+), 4 deletions(-) diff --git a/src/index-cjs.js b/src/index-cjs.js index 5355e9e9f..0c21b8b85 100644 --- a/src/index-cjs.js +++ b/src/index-cjs.js @@ -74,8 +74,15 @@ import validTypes from './rules/validTypes.js'; * @typedef {"" | "-typescript" | "-typescript-flavor"} ConfigVariants * @typedef {"" | "-error"} ErrorLevelVariants * @type {import('eslint').ESLint.Plugin & { - * configs: Record<`flat/${ConfigGroups}${ConfigVariants}${ErrorLevelVariants}`, - * import('eslint').Linter.Config> & Record<"examples"|"default-expressions"|"examples-and-default-expressions", import('eslint').Linter.Config[]> + * configs: Record< + * `flat/${ConfigGroups}${ConfigVariants}${ErrorLevelVariants}`, + * import('eslint').Linter.Config + * > & + * Record< + * "examples"|"default-expressions"|"examples-and-default-expressions", + * import('eslint').Linter.Config[] + * > & + * Record<"flat/recommended-mixed", import('eslint').Linter.Config[]> * }} */ const index = {}; @@ -666,4 +673,19 @@ index.configs['examples-and-default-expressions'] = /** @type {import('eslint'). }), ]); +index.configs['flat/recommended-mixed'] = [ + { + ...index.configs['flat/recommended-typescript-flavor'], + files: [ + '**/*.{js,jsx,cjs,mjs}', + ], + }, + { + ...index.configs['flat/recommended-typescript'], + files: [ + '**/*.{ts,tsx,cts,mts}', + ], + }, +]; + export default index; diff --git a/src/index.js b/src/index.js index 777dd84b9..b2548819a 100644 --- a/src/index.js +++ b/src/index.js @@ -80,8 +80,15 @@ import validTypes from './rules/validTypes.js'; * @typedef {"" | "-typescript" | "-typescript-flavor"} ConfigVariants * @typedef {"" | "-error"} ErrorLevelVariants * @type {import('eslint').ESLint.Plugin & { - * configs: Record<`flat/${ConfigGroups}${ConfigVariants}${ErrorLevelVariants}`, - * import('eslint').Linter.Config> & Record<"examples"|"default-expressions"|"examples-and-default-expressions", import('eslint').Linter.Config[]> + * configs: Record< + * `flat/${ConfigGroups}${ConfigVariants}${ErrorLevelVariants}`, + * import('eslint').Linter.Config + * > & + * Record< + * "examples"|"default-expressions"|"examples-and-default-expressions", + * import('eslint').Linter.Config[] + * > & + * Record<"flat/recommended-mixed", import('eslint').Linter.Config[]> * }} */ const index = {}; @@ -672,6 +679,21 @@ index.configs['examples-and-default-expressions'] = /** @type {import('eslint'). }), ]); +index.configs['flat/recommended-mixed'] = [ + { + ...index.configs['flat/recommended-typescript-flavor'], + files: [ + '**/*.{js,jsx,cjs,mjs}', + ], + }, + { + ...index.configs['flat/recommended-typescript'], + files: [ + '**/*.{ts,tsx,cts,mts}', + ], + }, +]; + export default index; /* eslint-disable jsdoc/valid-types -- Bug */ From 065f11ae07de8eb1b00bdea84f59a97cff85708d Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Fri, 26 Sep 2025 09:31:42 +0800 Subject: [PATCH 123/189] fix: ensure permissive settings are converted for jsdoc-type-pratt-parser Also: - chore: update jsdoccomment and devDeps. --- docs/rules/prefer-import-tag.md | 26 ++++++ package.json | 6 +- pnpm-lock.yaml | 32 +++---- src/index-cjs.js | 2 - src/index.js | 2 - src/iterateJsdoc.js | 10 ++- src/rules/preferImportTag.js | 19 ++++- test/rules/assertions/noRestrictedSyntax.js | 55 ++++++++++++ test/rules/assertions/preferImportTag.js | 93 +++++++++++++++++++++ 9 files changed, 217 insertions(+), 28 deletions(-) diff --git a/docs/rules/prefer-import-tag.md b/docs/rules/prefer-import-tag.md index 0caf44589..40fb8800b 100644 --- a/docs/rules/prefer-import-tag.md +++ b/docs/rules/prefer-import-tag.md @@ -266,6 +266,32 @@ The following patterns are considered problems: */ // "jsdoc/prefer-import-tag": ["error"|"warn", {"exemptTypedefs":true}] // Message: Inline `import()` found; prefer `@import` + +/** + * @type {import('eslint').anchors[keyof DataMap.anchors]} + */ +// Message: Inline `import()` found; prefer `@import` + +/** @typedef {import('eslint').Rule[keyof import('eslint').Rule]} Rule */ +/** + * @type {import('eslint').Abc.Rule} + */ +// "jsdoc/prefer-import-tag": ["error"|"warn", {"exemptTypedefs":true}] +// Message: Inline `import()` found; prefer `@import` + +/** @typedef {import('eslint').Rule[keyof import('eslint').Rule]} Rule */ +/** + * @type {import('eslint').Rule[keyof import('eslint').Rule]} + */ +// "jsdoc/prefer-import-tag": ["error"|"warn", {"exemptTypedefs":true}] +// Message: Inline `import()` found; using `@typedef` + +/** @typedef {import('eslint').Rule} Rule */ +/** + * @type {import('eslint').Rule[keyof import('eslint').Rule]} + */ +// "jsdoc/prefer-import-tag": ["error"|"warn", {"exemptTypedefs":true}] +// Message: Inline `import()` found; using `@typedef` ```` diff --git a/package.json b/package.json index 1d697160a..1abf0b5de 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "url": "http://gajus.com" }, "dependencies": { - "@es-joy/jsdoccomment": "~0.60.0", + "@es-joy/jsdoccomment": "~0.61.0", "are-docs-informative": "^0.0.2", "comment-parser": "1.4.1", "debug": "^4.4.3", @@ -58,10 +58,10 @@ "glob": "^11.0.3", "globals": "^16.4.0", "husky": "^9.1.7", - "jsdoc-type-pratt-parser": "^5.4.0", + "jsdoc-type-pratt-parser": "^5.8.0", "json-schema": "^0.4.0", "json-schema-to-typescript": "^15.0.4", - "lint-staged": "^16.2.0", + "lint-staged": "^16.2.1", "mocha": "^11.7.2", "open-editor": "^5.1.0", "replace": "^1.2.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e9c385c4b..85b591f8f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,8 +12,8 @@ importers: .: dependencies: '@es-joy/jsdoccomment': - specifier: ~0.60.0 - version: 0.60.0 + specifier: ~0.61.0 + version: 0.61.0 are-docs-informative: specifier: ^0.0.2 version: 0.0.2 @@ -163,8 +163,8 @@ importers: specifier: ^9.1.7 version: 9.1.7 jsdoc-type-pratt-parser: - specifier: ^5.4.0 - version: 5.4.0 + specifier: ^5.8.0 + version: 5.8.0 json-schema: specifier: ^0.4.0 version: 0.4.0 @@ -172,8 +172,8 @@ importers: specifier: ^15.0.4 version: 15.0.4 lint-staged: - specifier: ^16.2.0 - version: 16.2.0 + specifier: ^16.2.1 + version: 16.2.1 mocha: specifier: ^11.7.2 version: 11.7.2 @@ -802,8 +802,8 @@ packages: resolution: {integrity: sha512-c6EW+aA1w2rjqOMjbL93nZlwxp6c1Ln06vTYs5FjRRhmJXK8V/OrSXdT+pUr4aRYgjCgu8/OkiZr0tzeVrRSbw==} engines: {node: '>=20.11.0'} - '@es-joy/jsdoccomment@0.60.0': - resolution: {integrity: sha512-nZIXk63VbpIooJVXRWEhLIbVScE8rtbcPWr+zQ0ZQsnflvomq31DvB5hR0T1IoikvrNaF4pNoDOi5se5tmIZIg==} + '@es-joy/jsdoccomment@0.61.0': + resolution: {integrity: sha512-8DBk2LXau86fQBj7f9zx3MKqoAYgomxeoLgvHFa+OMhGYz6L9n/jbqa52wLHnbU6JzcSXu2OGuuTFOOMD4NpRg==} engines: {node: '>=20.11.0'} '@eslint-community/eslint-utils@4.8.0': @@ -3392,8 +3392,8 @@ packages: resolution: {integrity: sha512-DYYlVP1fe4QBMh2xTIs20/YeTz2GYVbWAEZweHSZD+qQ/Cx2d5RShuhhsdk64eTjNq0FeVnteP/qVOgaywSRbg==} engines: {node: '>=12.0.0'} - jsdoc-type-pratt-parser@5.4.0: - resolution: {integrity: sha512-F9GQ+F1ZU6qvSrZV8fNFpjDNf614YzR2eF6S0+XbDjAcUI28FSoXnYZFjQmb1kFx3rrJb5PnxUH3/Yti6fcM+g==} + jsdoc-type-pratt-parser@5.8.0: + resolution: {integrity: sha512-YLmlPdkn1G34K/8NgSFL3D1D/HqQ9WgQOW816Q+6uMLvAO5QohdmG4qkuiseqnRXVAAN9RYtbCKyMSfwcU8wRw==} engines: {node: '>=12.0.0'} jsdom@6.5.1: @@ -3480,8 +3480,8 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - lint-staged@16.2.0: - resolution: {integrity: sha512-spdYSOCQ2MdZ9CM1/bu/kDmaYGsrpNOeu1InFFV8uhv14x6YIubGxbCpSmGILFoxkiheNQPDXSg5Sbb5ZuVnug==} + lint-staged@16.2.1: + resolution: {integrity: sha512-KMeYmH9wKvHsXdUp+z6w7HN3fHKHXwT1pSTQTYxB9kI6ekK1rlL3kLZEoXZCppRPXFK9PFW/wfQctV7XUqMrPQ==} engines: {node: '>=20.17'} hasBin: true @@ -5941,13 +5941,13 @@ snapshots: esquery: 1.6.0 jsdoc-type-pratt-parser: 5.1.1 - '@es-joy/jsdoccomment@0.60.0': + '@es-joy/jsdoccomment@0.61.0': dependencies: '@types/estree': 1.0.8 '@typescript-eslint/types': 8.44.1 comment-parser: 1.4.1 esquery: 1.6.0 - jsdoc-type-pratt-parser: 5.4.0 + jsdoc-type-pratt-parser: 5.8.0 '@eslint-community/eslint-utils@4.8.0(eslint@9.36.0(jiti@2.5.1))': dependencies: @@ -8990,7 +8990,7 @@ snapshots: jsdoc-type-pratt-parser@5.1.1: {} - jsdoc-type-pratt-parser@5.4.0: {} + jsdoc-type-pratt-parser@5.8.0: {} jsdom@6.5.1: dependencies: @@ -9096,7 +9096,7 @@ snapshots: lines-and-columns@1.2.4: {} - lint-staged@16.2.0: + lint-staged@16.2.1: dependencies: commander: 14.0.1 listr2: 9.0.4 diff --git a/src/index-cjs.js b/src/index-cjs.js index 0c21b8b85..d4c0df31a 100644 --- a/src/index-cjs.js +++ b/src/index-cjs.js @@ -68,7 +68,6 @@ import textEscaping from './rules/textEscaping.js'; import typeFormatting from './rules/typeFormatting.js'; import validTypes from './rules/validTypes.js'; -/* eslint-disable jsdoc/valid-types -- Bug */ /** * @typedef {"recommended" | "stylistic" | "contents" | "logical" | "requirements"} ConfigGroups * @typedef {"" | "-typescript" | "-typescript-flavor"} ConfigVariants @@ -86,7 +85,6 @@ import validTypes from './rules/validTypes.js'; * }} */ const index = {}; -/* eslint-enable jsdoc/valid-types -- Bug */ index.configs = {}; index.rules = { 'check-access': checkAccess, diff --git a/src/index.js b/src/index.js index b2548819a..d4dd39b8b 100644 --- a/src/index.js +++ b/src/index.js @@ -74,7 +74,6 @@ import textEscaping from './rules/textEscaping.js'; import typeFormatting from './rules/typeFormatting.js'; import validTypes from './rules/validTypes.js'; -/* eslint-disable jsdoc/valid-types -- Bug */ /** * @typedef {"recommended" | "stylistic" | "contents" | "logical" | "requirements"} ConfigGroups * @typedef {"" | "-typescript" | "-typescript-flavor"} ConfigVariants @@ -92,7 +91,6 @@ import validTypes from './rules/validTypes.js'; * }} */ const index = {}; -/* eslint-enable jsdoc/valid-types -- Bug */ index.configs = {}; index.rules = { 'check-access': checkAccess, diff --git a/src/iterateJsdoc.js b/src/iterateJsdoc.js index b4c116ad7..00e8dc748 100644 --- a/src/iterateJsdoc.js +++ b/src/iterateJsdoc.js @@ -2284,7 +2284,10 @@ const iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveCommentContext } if (contexts) { - handler = commentHandler(settings); + handler = commentHandler({ + ...settings, + mode: settings.mode === 'permissive' ? 'typescript' : settings.mode, + }); } const state = {}; @@ -2537,7 +2540,10 @@ export default function iterateJsdoc (iterator, ruleConfig) { contextObject = jsdocUtils.getContextObject( contexts, checkJsdoc, - commentHandler(settings), + commentHandler({ + ...settings, + mode: settings.mode === 'permissive' ? 'typescript' : settings.mode, + }), ); } else { for (const prop of [ diff --git a/src/rules/preferImportTag.js b/src/rules/preferImportTag.js index 2f21b1a63..9e4e4ccdb 100644 --- a/src/rules/preferImportTag.js +++ b/src/rules/preferImportTag.js @@ -117,10 +117,18 @@ export default iterateJsdoc(({ break; } - pathSegments.unshift(currentNode.right.value); + pathSegments.unshift( + currentNode.right.type === 'JsdocTypeIndexedAccessIndex' ? + stringify(currentNode.right.right) : + currentNode.right.value, + ); nodes.unshift(currentNode); propertyOrBrackets.unshift(currentNode.pathType); - quotes.unshift(currentNode.right.meta.quote); + quotes.unshift( + currentNode.right.type === 'JsdocTypeIndexedAccessIndex' ? + undefined : + currentNode.right.meta.quote, + ); } /** @@ -218,7 +226,12 @@ export default iterateJsdoc(({ break; } - if (typedefNode.right.value !== pathSegment) { + if ( + (typedefNode.right.type === 'JsdocTypeIndexedAccessIndex' && + stringify(typedefNode.right.right) !== pathSegment) || + (typedefNode.right.type !== 'JsdocTypeIndexedAccessIndex' && + typedefNode.right.value !== pathSegment) + ) { if (namepathMatch === true) { // It stopped matching, so stop break; diff --git a/test/rules/assertions/noRestrictedSyntax.js b/test/rules/assertions/noRestrictedSyntax.js index a8a0e6573..8ec41ce73 100644 --- a/test/rules/assertions/noRestrictedSyntax.js +++ b/test/rules/assertions/noRestrictedSyntax.js @@ -35,6 +35,35 @@ export default /** @type {import('../index.js').TestCases} */ ({ */ function quux () { + } + `, + errors: [ + { + line: 2, + message: 'Syntax is restricted: FunctionDeclaration', + }, + ], + ignoreReadme: true, + options: [ + { + contexts: [ + 'FunctionDeclaration', + ], + }, + ], + settings: { + jsdoc: { + mode: 'permissive', + }, + }, + }, + { + code: ` + /** + * + */ + function quux () { + } `, errors: [ @@ -780,6 +809,32 @@ export default /** @type {import('../index.js').TestCases} */ ({ }, ], }, + { + code: ` + /** + * @param ab + * @param cd + */ + function a () {} + `, + ignoreReadme: true, + options: [ + { + contexts: [ + { + comment: 'JsdocBlock:has(JsdocTag[name=/opt_/])', + context: 'any', + message: 'Only allowing names not matching `/^opt_/i`.', + }, + ], + }, + ], + settings: { + jsdoc: { + mode: 'permissive', + }, + }, + }, { code: ` /** diff --git a/test/rules/assertions/preferImportTag.js b/test/rules/assertions/preferImportTag.js index 8268daea1..56acb5ccc 100644 --- a/test/rules/assertions/preferImportTag.js +++ b/test/rules/assertions/preferImportTag.js @@ -726,6 +726,99 @@ export default { */ `, }, + { + code: ` + /** + * @type {import('eslint').anchors[keyof DataMap.anchors]} + */ + `, + errors: [ + { + line: 3, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + output: `/** @import * as eslint from 'eslint'; */ + /** + * @type {eslint.anchors[keyof DataMap.anchors]} + */ + `, + }, + { + code: ` + /** @typedef {import('eslint').Rule[keyof import('eslint').Rule]} Rule */ + /** + * @type {import('eslint').Abc.Rule} + */ + `, + errors: [ + { + line: 4, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + options: [ + { + exemptTypedefs: true, + }, + ], + output: `/** @import * as eslint from 'eslint'; */ + /** @typedef {import('eslint').Rule[keyof import('eslint').Rule]} Rule */ + /** + * @type {eslint.Abc.Rule} + */ + `, + }, + { + code: ` + /** @typedef {import('eslint').Rule[keyof import('eslint').Rule]} Rule */ + /** + * @type {import('eslint').Rule[keyof import('eslint').Rule]} + */ + `, + errors: [ + { + line: 4, + message: 'Inline `import()` found; using `@typedef`', + }, + ], + options: [ + { + exemptTypedefs: true, + }, + ], + output: ` + /** @typedef {import('eslint').Rule[keyof import('eslint').Rule]} Rule */ + /** + * @type {Rule} + */ + `, + }, + { + code: ` + /** @typedef {import('eslint').Rule} Rule */ + /** + * @type {import('eslint').Rule[keyof import('eslint').Rule]} + */ + `, + errors: [ + { + line: 4, + message: 'Inline `import()` found; using `@typedef`', + }, + ], + options: [ + { + exemptTypedefs: true, + }, + ], + output: ` + /** @typedef {import('eslint').Rule} Rule */ + /** + * @type {Rule[keyof import('eslint').Rule]} + */ + `, + }, ], valid: [ { From ab9fe6a5c5da5a7d2dc4dffe9e37432e51866311 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Fri, 26 Sep 2025 18:17:40 +0800 Subject: [PATCH 124/189] docs: document mixed config (#1546) --- .README/README.md | 1 + README.md | 1 + 2 files changed, 2 insertions(+) diff --git a/.README/README.md b/.README/README.md index 854a47075..88cf21904 100644 --- a/.README/README.md +++ b/.README/README.md @@ -133,6 +133,7 @@ The general starting rulesets you can extend from in flat config are: - `jsdoc.configs['flat/recommended-typescript-error']`: The same, reporting with failing errors instead of mere warnings - `jsdoc.configs['flat/recommended-typescript-flavor']`: A similar recommended starting list, adjusted for projects using JavaScript syntax (source files that are still `.js`) but using TypeScript flavor within JSDoc (i.e., the default "typescript" `mode` in `eslint-plugin-jsdoc`) - `jsdoc.configs['flat/recommended-typescript-flavor-error']`: The same, reporting with failing errors instead of mere warnings +- `jsdoc.configs['flat/recommended-mixed']`: A combination of `flat/recommended-typescript-flavor` and `flat/recommended-typescript` with automatic assignment of subconfig based on file extension (`**/*.{js,jsx,cjs,mjs}` and `**/*.{ts,tsx,cts,mts}`, respectively) #### Granular Flat Configs diff --git a/README.md b/README.md index ed1c30220..0c9274754 100644 --- a/README.md +++ b/README.md @@ -154,6 +154,7 @@ The general starting rulesets you can extend from in flat config are: - `jsdoc.configs['flat/recommended-typescript-error']`: The same, reporting with failing errors instead of mere warnings - `jsdoc.configs['flat/recommended-typescript-flavor']`: A similar recommended starting list, adjusted for projects using JavaScript syntax (source files that are still `.js`) but using TypeScript flavor within JSDoc (i.e., the default "typescript" `mode` in `eslint-plugin-jsdoc`) - `jsdoc.configs['flat/recommended-typescript-flavor-error']`: The same, reporting with failing errors instead of mere warnings +- `jsdoc.configs['flat/recommended-mixed']`: A combination of `flat/recommended-typescript-flavor` and `flat/recommended-typescript` with automatic assignment of subconfig based on file extension (`**/*.{js,jsx,cjs,mjs}` and `**/*.{ts,tsx,cts,mts}`, respectively) From 91e261d673e4c1453dd014a9e79e2c1f8342fe3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maro=C5=A1=20Varchola?= Date: Sat, 27 Sep 2025 09:14:41 +0200 Subject: [PATCH 125/189] fix(requireParam): update return type to include foundIndex and tagLineCount (#1531) * fix(requireParam): update return type to include foundIndex and tagLineCount, fixes #1530 * test(requireParam): add test case for missing JSDoc @param declaration, #1530 * fix(require-param): add missing JSDoc @param declaration for new function example * test: add test case which previously failed * chore: update devDeps. --------- Co-authored-by: Brett Zamir --- docs/rules/require-param.md | 29 ++++++++++ package.json | 4 +- pnpm-lock.yaml | 22 ++++---- src/rules/requireParam.js | 28 ++++++++-- test/rules/assertions/requireParam.js | 76 +++++++++++++++++++++++++++ 5 files changed, 142 insertions(+), 17 deletions(-) diff --git a/docs/rules/require-param.md b/docs/rules/require-param.md index 9c44c4854..f33bfcd2e 100644 --- a/docs/rules/require-param.md +++ b/docs/rules/require-param.md @@ -1265,6 +1265,35 @@ function quux ({ } // "jsdoc/require-param": ["error"|"warn", {"interfaceExemptsParamsCheck":true}] // Message: Missing JSDoc @param "root0" declaration. + +/** + * @param foo + * @param baz + * @returns {number} + */ +function quux (foo, bar, baz) { + return foo + bar + baz; +} +// Message: Missing JSDoc @param "bar" declaration. + +/** + * @example + * ```ts + * app.use(checkResourceOwnership({ entryPoint: 'seller_product' })); + * ``` + * + * @example + * ```ts + * app.use(checkResourceOwnership({ entryPoint: 'service_zone' })); + * ``` + * + * @param options - configuration + * @param options.entryPoint + * @param options.filterField + * @param options.paramIdField + */ +export const checkResourceOwnership = ({ entryPoint, filterField, paramIdField, resourceId = () => '' }) => {}; +// Message: Missing JSDoc @param "options.resourceId" declaration. ```` diff --git a/package.json b/package.json index 1abf0b5de..44675600e 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "url": "http://gajus.com" }, "dependencies": { - "@es-joy/jsdoccomment": "~0.61.0", + "@es-joy/jsdoccomment": "~0.62.0", "are-docs-informative": "^0.0.2", "comment-parser": "1.4.1", "debug": "^4.4.3", @@ -58,7 +58,7 @@ "glob": "^11.0.3", "globals": "^16.4.0", "husky": "^9.1.7", - "jsdoc-type-pratt-parser": "^5.8.0", + "jsdoc-type-pratt-parser": "^5.9.0", "json-schema": "^0.4.0", "json-schema-to-typescript": "^15.0.4", "lint-staged": "^16.2.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 85b591f8f..6633a4aef 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,8 +12,8 @@ importers: .: dependencies: '@es-joy/jsdoccomment': - specifier: ~0.61.0 - version: 0.61.0 + specifier: ~0.62.0 + version: 0.62.0 are-docs-informative: specifier: ^0.0.2 version: 0.0.2 @@ -163,8 +163,8 @@ importers: specifier: ^9.1.7 version: 9.1.7 jsdoc-type-pratt-parser: - specifier: ^5.8.0 - version: 5.8.0 + specifier: ^5.9.0 + version: 5.9.0 json-schema: specifier: ^0.4.0 version: 0.4.0 @@ -802,8 +802,8 @@ packages: resolution: {integrity: sha512-c6EW+aA1w2rjqOMjbL93nZlwxp6c1Ln06vTYs5FjRRhmJXK8V/OrSXdT+pUr4aRYgjCgu8/OkiZr0tzeVrRSbw==} engines: {node: '>=20.11.0'} - '@es-joy/jsdoccomment@0.61.0': - resolution: {integrity: sha512-8DBk2LXau86fQBj7f9zx3MKqoAYgomxeoLgvHFa+OMhGYz6L9n/jbqa52wLHnbU6JzcSXu2OGuuTFOOMD4NpRg==} + '@es-joy/jsdoccomment@0.62.0': + resolution: {integrity: sha512-yWi6sm7INEwnfS7IJvE0dU+RTrwzLPFcY7e7eGpu/l5Q9lWfQ2ROwZ0qVnc242jw2TUPsfHX3XMIISkGBv57RQ==} engines: {node: '>=20.11.0'} '@eslint-community/eslint-utils@4.8.0': @@ -3392,8 +3392,8 @@ packages: resolution: {integrity: sha512-DYYlVP1fe4QBMh2xTIs20/YeTz2GYVbWAEZweHSZD+qQ/Cx2d5RShuhhsdk64eTjNq0FeVnteP/qVOgaywSRbg==} engines: {node: '>=12.0.0'} - jsdoc-type-pratt-parser@5.8.0: - resolution: {integrity: sha512-YLmlPdkn1G34K/8NgSFL3D1D/HqQ9WgQOW816Q+6uMLvAO5QohdmG4qkuiseqnRXVAAN9RYtbCKyMSfwcU8wRw==} + jsdoc-type-pratt-parser@5.9.0: + resolution: {integrity: sha512-G1+QGbmN5EZ53DN3yKF6jax0FXeVEX4mgIx1K4YrsWhtXRaySR9cTZqB43ISxKAEna2LBG/I7NSl9wV//l1XPA==} engines: {node: '>=12.0.0'} jsdom@6.5.1: @@ -5941,13 +5941,13 @@ snapshots: esquery: 1.6.0 jsdoc-type-pratt-parser: 5.1.1 - '@es-joy/jsdoccomment@0.61.0': + '@es-joy/jsdoccomment@0.62.0': dependencies: '@types/estree': 1.0.8 '@typescript-eslint/types': 8.44.1 comment-parser: 1.4.1 esquery: 1.6.0 - jsdoc-type-pratt-parser: 5.8.0 + jsdoc-type-pratt-parser: 5.9.0 '@eslint-community/eslint-utils@4.8.0(eslint@9.36.0(jiti@2.5.1))': dependencies: @@ -8990,7 +8990,7 @@ snapshots: jsdoc-type-pratt-parser@5.1.1: {} - jsdoc-type-pratt-parser@5.8.0: {} + jsdoc-type-pratt-parser@5.9.0: {} jsdom@6.5.1: dependencies: diff --git a/src/rules/requireParam.js b/src/rules/requireParam.js index 027fadb2c..e32a10c9e 100644 --- a/src/rules/requireParam.js +++ b/src/rules/requireParam.js @@ -175,7 +175,10 @@ export default iterateJsdoc(({ * newAdd?: boolean * })[]} jsdocTags * @param {import('../iterateJsdoc.js').Integer} indexAtFunctionParams - * @returns {import('../iterateJsdoc.js').Integer} + * @returns {{ + * foundIndex: import('../iterateJsdoc.js').Integer, + * tagLineCount: import('../iterateJsdoc.js').Integer, + * }} */ const findExpectedIndex = (jsdocTags, indexAtFunctionParams) => { const remainingRoots = functionParameterNames.slice(indexAtFunctionParams || 0); @@ -225,7 +228,10 @@ export default iterateJsdoc(({ } } - return tagLineCount; + return { + foundIndex, + tagLineCount, + }; }; let [ @@ -486,8 +492,22 @@ export default iterateJsdoc(({ if (remove) { createTokens(functionParameterIdx, offset + functionParameterIdx, 1); } else { - const expectedIdx = findExpectedIndex(jsdoc.tags, functionParameterIdx); - createTokens(expectedIdx, offset + expectedIdx, 0); + const { + foundIndex, + tagLineCount: expectedIdx, + } = + findExpectedIndex(jsdoc.tags, functionParameterIdx); + + const firstParamLine = jsdoc.source.findIndex(({ + tokens, + }) => { + return tokens.tag === `@${preferredTagName}`; + }); + const baseOffset = foundIndex > -1 || firstParamLine === -1 ? + offset : + firstParamLine; + + createTokens(expectedIdx, baseOffset + expectedIdx, 0); } }; diff --git a/test/rules/assertions/requireParam.js b/test/rules/assertions/requireParam.js index 11296fb89..95b8fdd37 100644 --- a/test/rules/assertions/requireParam.js +++ b/test/rules/assertions/requireParam.js @@ -2668,6 +2668,82 @@ export default /** @type {import('../index.js').TestCases} */ ({ } `, }, + { + code: ` + /** + * @param foo + * @param baz + * @returns {number} + */ + function quux (foo, bar, baz) { + return foo + bar + baz; + } + `, + errors: [ + { + line: 2, + message: 'Missing JSDoc @param "bar" declaration.', + }, + ], + output: ` + /** + * @param foo + * @param bar + * @param baz + * @returns {number} + */ + function quux (foo, bar, baz) { + return foo + bar + baz; + } + `, + }, + { + code: ` + /** + * @example + * \`\`\`ts + * app.use(checkResourceOwnership({ entryPoint: 'seller_product' })); + * \`\`\` + * + * @example + * \`\`\`ts + * app.use(checkResourceOwnership({ entryPoint: 'service_zone' })); + * \`\`\` + * + * @param options - configuration + * @param options.entryPoint + * @param options.filterField + * @param options.paramIdField + */ + export const checkResourceOwnership = ({ entryPoint, filterField, paramIdField, resourceId = () => '' }) => {}; + `, + errors: [ + { + line: 2, + message: 'Missing JSDoc @param "options.resourceId" declaration.', + }, + ], + output: ` + /** + * @example + * \`\`\`ts + * app.use(checkResourceOwnership({ entryPoint: 'seller_product' })); + * \`\`\` + * + * @example + * \`\`\`ts + * app.use(checkResourceOwnership({ entryPoint: 'service_zone' })); + * \`\`\` + * + * @param options - configuration + * @param options.entryPoint + * @param options.filterField + * @param options.paramIdField + * @param options.resourceId + */ + export const checkResourceOwnership = ({ entryPoint, filterField, paramIdField, resourceId = () => '' }) => {}; + `, + }, ], valid: [ { From 90af18a6247ca544b9fccb6508d9cbaef414918e Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Wed, 24 Sep 2025 17:21:03 +0800 Subject: [PATCH 126/189] feat(`require-template-description`): add rule; fixes #1540 --- .README/rules/require-template-description.md | 21 ++++++++ README.md | 1 + docs/rules/require-template-description.md | 49 +++++++++++++++++++ src/index-cjs.js | 12 +++++ src/index.js | 12 +++++ src/rules.d.ts | 3 ++ .../assertions/requireTemplateDescription.js | 33 +++++++++++++ test/rules/ruleNames.json | 3 +- 8 files changed, 133 insertions(+), 1 deletion(-) create mode 100644 .README/rules/require-template-description.md create mode 100644 docs/rules/require-template-description.md create mode 100644 test/rules/assertions/requireTemplateDescription.js diff --git a/.README/rules/require-template-description.md b/.README/rules/require-template-description.md new file mode 100644 index 000000000..27e8b7dc2 --- /dev/null +++ b/.README/rules/require-template-description.md @@ -0,0 +1,21 @@ +# `require-template-description` + +## Options + +{"gitdown": "options"} + +||| +|---|---| +|Context|everywhere| +|Tags|`template`| +|Recommended|false| +|Settings|| +|Options|| + +## Failing examples + + + +## Passing examples + + diff --git a/README.md b/README.md index 0c9274754..998566615 100644 --- a/README.md +++ b/README.md @@ -483,6 +483,7 @@ non-default-recommended fixer). |:heavy_check_mark: (Off in TS; On in TS flavor)|| [require-returns-type](./docs/rules/require-returns-type.md#readme) | Requires that `@returns` tag has type value (in curly brackets). | ||| [require-tags](./docs/rules/require-tags.md#readme) | Requires tags be present, optionally for specific contexts | ||| [require-template](./docs/rules/require-template.md#readme) | Requires `@template` tags be present when type parameters are used. | +||| [require-template-description](./docs/rules/require-template-description.md#readme) | Requires a description for `@template` tags | ||| [require-throws](./docs/rules/require-throws.md#readme) | Requires that throw statements are documented with `@throws` tags. | ||| [require-throws-description](./docs/rules/require-throws-description.md#readme) | Requires a description for `@throws` tags | |:heavy_check_mark:|| [require-throws-type](./docs/rules/require-throws-type.md#readme) | Requires a type for `@throws` tags | diff --git a/docs/rules/require-template-description.md b/docs/rules/require-template-description.md new file mode 100644 index 000000000..52cd151cf --- /dev/null +++ b/docs/rules/require-template-description.md @@ -0,0 +1,49 @@ + + +# require-template-description + + + +## Options + + + +||| +|---|---| +|Context|everywhere| +|Tags|`template`| +|Recommended|false| +|Settings|| +|Options|| + + + +## Failing examples + +The following patterns are considered problems: + +````ts +/** + * @template {SomeType} + */ +// Message: @template should have a description +```` + + + + + +## Passing examples + +The following patterns are not considered problems: + +````ts +/** + * @template {SomeType} Has a description + */ + +/** + * @template Has a description + */ +```` + diff --git a/src/index-cjs.js b/src/index-cjs.js index d4c0df31a..15e89d83f 100644 --- a/src/index-cjs.js +++ b/src/index-cjs.js @@ -188,6 +188,17 @@ index.rules = { 'require-returns-type': requireReturnsType, 'require-tags': requireTags, 'require-template': requireTemplate, + 'require-template-description': buildForbidRuleDefinition({ + contexts: [ + { + comment: 'JsdocBlock:has(JsdocTag[tag=template]:not([description!=""]))', + context: 'any', + message: '@template should have a description', + }, + ], + description: 'Requires a description for `@template` tags', + url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-template-description.md#repos-sticky-header', + }), 'require-throws': requireThrows, 'require-throws-description': buildForbidRuleDefinition({ contexts: [ @@ -316,6 +327,7 @@ const createRecommendedRuleset = (warnOrError, flatName) => { 'jsdoc/require-returns-type': warnOrError, 'jsdoc/require-tags': 'off', 'jsdoc/require-template': 'off', + 'jsdoc/require-template-description': 'off', 'jsdoc/require-throws': 'off', 'jsdoc/require-throws-description': 'off', 'jsdoc/require-throws-type': warnOrError, diff --git a/src/index.js b/src/index.js index d4dd39b8b..7389958af 100644 --- a/src/index.js +++ b/src/index.js @@ -194,6 +194,17 @@ index.rules = { 'require-returns-type': requireReturnsType, 'require-tags': requireTags, 'require-template': requireTemplate, + 'require-template-description': buildForbidRuleDefinition({ + contexts: [ + { + comment: 'JsdocBlock:has(JsdocTag[tag=template]:not([description!=""]))', + context: 'any', + message: '@template should have a description', + }, + ], + description: 'Requires a description for `@template` tags', + url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-template-description.md#repos-sticky-header', + }), 'require-throws': requireThrows, 'require-throws-description': buildForbidRuleDefinition({ contexts: [ @@ -322,6 +333,7 @@ const createRecommendedRuleset = (warnOrError, flatName) => { 'jsdoc/require-returns-type': warnOrError, 'jsdoc/require-tags': 'off', 'jsdoc/require-template': 'off', + 'jsdoc/require-template-description': 'off', 'jsdoc/require-throws': 'off', 'jsdoc/require-throws-description': 'off', 'jsdoc/require-throws-type': warnOrError, diff --git a/src/rules.d.ts b/src/rules.d.ts index 728c09221..00fe7c726 100644 --- a/src/rules.d.ts +++ b/src/rules.d.ts @@ -2444,6 +2444,9 @@ export interface Rules { } ]; + /** Requires a description for `@template` tags */ + "jsdoc/require-template-description": []; + /** Requires that throw statements are documented with `@throws` tags. */ "jsdoc/require-throws": | [] diff --git a/test/rules/assertions/requireTemplateDescription.js b/test/rules/assertions/requireTemplateDescription.js new file mode 100644 index 000000000..b676328a0 --- /dev/null +++ b/test/rules/assertions/requireTemplateDescription.js @@ -0,0 +1,33 @@ +export default /** @type {import('../index.js').TestCases} */ ({ + invalid: [ + { + code: ` + /** + * @template {SomeType} + */ + `, + errors: [ + { + line: 2, + message: '@template should have a description', + }, + ], + }, + ], + valid: [ + { + code: ` + /** + * @template {SomeType} Has a description + */ + `, + }, + { + code: ` + /** + * @template Has a description + */ + `, + }, + ], +}); diff --git a/test/rules/ruleNames.json b/test/rules/ruleNames.json index b62caf463..4fba26853 100644 --- a/test/rules/ruleNames.json +++ b/test/rules/ruleNames.json @@ -53,7 +53,9 @@ "require-returns-check", "require-returns-description", "require-returns-type", + "require-tags", "require-template", + "require-template-description", "require-throws", "require-throws-description", "require-throws-type", @@ -61,7 +63,6 @@ "require-yields-check", "require-yields-description", "require-yields-type", - "require-tags", "sort-tags", "tag-lines", "text-escaping", From 8bbec0ae0725570563d89030a94e5275582df41c Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sat, 27 Sep 2025 18:08:07 +0800 Subject: [PATCH 127/189] chore: bump jsdoc-type-pratt-parser --- package.json | 2 +- pnpm-lock.yaml | 1033 ++++++++++++++++++++++-------------------------- 2 files changed, 466 insertions(+), 569 deletions(-) diff --git a/package.json b/package.json index 44675600e..7b1cfe047 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "glob": "^11.0.3", "globals": "^16.4.0", "husky": "^9.1.7", - "jsdoc-type-pratt-parser": "^5.9.0", + "jsdoc-type-pratt-parser": "^5.9.1", "json-schema": "^0.4.0", "json-schema-to-typescript": "^15.0.4", "lint-staged": "^16.2.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6633a4aef..227109cd8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -59,7 +59,7 @@ importers: version: 7.28.4 '@babel/eslint-parser': specifier: ^7.28.4 - version: 7.28.4(@babel/core@7.28.4)(eslint@9.36.0(jiti@2.5.1)) + version: 7.28.4(@babel/core@7.28.4)(eslint@9.36.0(jiti@2.6.0)) '@babel/plugin-syntax-class-properties': specifier: ^7.12.13 version: 7.12.13(@babel/core@7.28.4) @@ -74,7 +74,7 @@ importers: version: 3.5.1 '@es-joy/jsdoc-eslint-parser': specifier: ^0.23.0 - version: 0.23.0(jiti@2.5.1) + version: 0.23.0(jiti@2.6.0) '@eslint/core': specifier: ^0.16.0 version: 0.16.0 @@ -146,10 +146,10 @@ importers: version: 6.0.1 eslint: specifier: 9.36.0 - version: 9.36.0(jiti@2.5.1) + version: 9.36.0(jiti@2.6.0) eslint-config-canonical: specifier: ^45.0.0 - version: 45.0.0(@types/node@24.5.2)(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + version: 45.0.0(@types/node@24.5.2)(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) gitdown: specifier: ^4.1.1 version: 4.1.1(re2@1.20.9) @@ -163,8 +163,8 @@ importers: specifier: ^9.1.7 version: 9.1.7 jsdoc-type-pratt-parser: - specifier: ^5.9.0 - version: 5.9.0 + specifier: ^5.9.1 + version: 5.9.1 json-schema: specifier: ^0.4.0 version: 0.4.0 @@ -194,7 +194,7 @@ importers: version: 5.9.2 typescript-eslint: specifier: ^8.44.1 - version: 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + version: 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) packages: @@ -225,8 +225,8 @@ packages: resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.28.0': - resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==} + '@babel/compat-data@7.28.4': + resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==} engines: {node: '>=6.9.0'} '@babel/core@7.28.4': @@ -331,11 +331,6 @@ packages: resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} engines: {node: '>=6.9.0'} - '@babel/parser@7.28.3': - resolution: {integrity: sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/parser@7.28.4': resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} engines: {node: '>=6.0.0'} @@ -430,8 +425,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoping@7.28.0': - resolution: {integrity: sha512-gKKnwjpdx5sER/wl0WN0efUBFzF/56YZO0RJrSYP4CljXnP31ByY7fol89AzomdlLNzI36AvOTmYHsnZTCkq8Q==} + '@babel/plugin-transform-block-scoping@7.28.4': + resolution: {integrity: sha512-1yxmvN0MJHOhPVmAsmoW5liWwoILobu/d/ShymZmj867bAdxGbehIrew1DuLpw2Ukv+qDSSPQdYW1dLNE7t11A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -448,8 +443,8 @@ packages: peerDependencies: '@babel/core': ^7.12.0 - '@babel/plugin-transform-classes@7.28.3': - resolution: {integrity: sha512-DoEWC5SuxuARF2KdKmGUq3ghfPMO6ZzR12Dnp5gubwbeWJo4dbNWXJPVlwvh4Zlq6Z7YVvL8VFxeSOJgjsx4Sg==} + '@babel/plugin-transform-classes@7.28.4': + resolution: {integrity: sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -598,8 +593,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-rest-spread@7.28.0': - resolution: {integrity: sha512-9VNGikXxzu5eCiQjdE4IZn8sb9q7Xsk5EXLDBKUYg1e/Tve8/05+KJEtcxGxAgCY5t/BpKQM+JEL/yT4tvgiUA==} + '@babel/plugin-transform-object-rest-spread@7.28.4': + resolution: {integrity: sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -646,8 +641,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-regenerator@7.28.3': - resolution: {integrity: sha512-K3/M/a4+ESb5LEldjQb+XSrpY0nF+ZBFlTCbSnKaYAMfD8v33O6PMs4uYnOk19HlcsI8WMu3McdFPTiQHF/1/A==} + '@babel/plugin-transform-regenerator@7.28.4': + resolution: {integrity: sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -733,18 +728,10 @@ packages: resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.28.3': - resolution: {integrity: sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==} - engines: {node: '>=6.9.0'} - '@babel/traverse@7.28.4': resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.28.2': - resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} - engines: {node: '>=6.9.0'} - '@babel/types@7.28.4': resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} engines: {node: '>=6.9.0'} @@ -806,8 +793,8 @@ packages: resolution: {integrity: sha512-yWi6sm7INEwnfS7IJvE0dU+RTrwzLPFcY7e7eGpu/l5Q9lWfQ2ROwZ0qVnc242jw2TUPsfHX3XMIISkGBv57RQ==} engines: {node: '>=20.11.0'} - '@eslint-community/eslint-utils@4.8.0': - resolution: {integrity: sha512-MJQFqrZgcW0UNYLGOuQpey/oTN59vyWwplvCGZztn1cKz9agZPPYpJB7h2OMmuu7VLqkvEjN8feFZJmxNF9D+Q==} + '@eslint-community/eslint-utils@4.9.0': + resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 @@ -997,18 +984,14 @@ packages: resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} - '@humanfs/node@0.16.6': - resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + '@humanfs/node@0.16.7': + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} engines: {node: '>=18.18.0'} '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/retry@0.3.1': - resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} - engines: {node: '>=18.18'} - '@humanwhocodes/retry@0.4.3': resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} @@ -1046,8 +1029,8 @@ packages: '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - '@jridgewell/trace-mapping@0.3.30': - resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==} + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} '@jsdevtools/ono@7.1.3': resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} @@ -1095,8 +1078,8 @@ packages: resolution: {integrity: sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==} engines: {node: '>= 20'} - '@octokit/core@7.0.3': - resolution: {integrity: sha512-oNXsh2ywth5aowwIa7RKtawnkdH6LgU1ztfP9AIUCQCvzysB+WeU8o2kyyosDPwBZutPpjZDKPQGIzzrfTWweQ==} + '@octokit/core@7.0.4': + resolution: {integrity: sha512-jOT8V1Ba5BdC79sKrRWDdMT5l1R+XNHTPR6CPWzUP2EcfAcvIHZWF0eAbmRcpOOP5gVIwnqNg0C4nvh6Abc3OA==} engines: {node: '>= 20'} '@octokit/endpoint@11.0.0': @@ -1110,6 +1093,9 @@ packages: '@octokit/openapi-types@25.1.0': resolution: {integrity: sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA==} + '@octokit/openapi-types@26.0.0': + resolution: {integrity: sha512-7AtcfKtpo77j7Ts73b4OWhOZHTKo/gGY8bB3bNBQz4H+GRSWqx2yvj8TXRsbdTE0eRmYmXOEY66jM7mJ7LzfsA==} + '@octokit/plugin-paginate-rest@13.1.1': resolution: {integrity: sha512-q9iQGlZlxAVNRN2jDNskJW/Cafy7/XE52wjZ5TTvyhyOD904Cvx//DNyoO3J/MXJ0ve3rPoNWKEg5iZrisQSuw==} engines: {node: '>= 20'} @@ -1139,6 +1125,9 @@ packages: '@octokit/types@14.1.0': resolution: {integrity: sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==} + '@octokit/types@15.0.0': + resolution: {integrity: sha512-8o6yDfmoGJUIeR9OfYU0/TUJTnMPG2r68+1yEdUeG2Fdqpj8Qetg0ziKIgcBm0RW/j29H41WP37CYCEhp6GoHQ==} + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -1187,8 +1176,8 @@ packages: peerDependencies: semantic-release: '>=20.1.0' - '@semantic-release/release-notes-generator@14.0.3': - resolution: {integrity: sha512-XxAZRPWGwO5JwJtS83bRdoIhCiYIx8Vhr+u231pQAsdFIAbm19rSVJLdnBN+Avvk7CKvNQE/nJ4y7uqKH6WTiw==} + '@semantic-release/release-notes-generator@14.1.0': + resolution: {integrity: sha512-CcyDRk7xq+ON/20YNR+1I/jP7BYKICr1uKd1HHpROSnnTdGqOTburi4jcRiTYz0cpfhxSloQO3cGhnoot7IEkA==} engines: {node: '>=20.8.1'} peerDependencies: semantic-release: '>=20.1.0' @@ -1272,13 +1261,6 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.42.0': - resolution: {integrity: sha512-r1XG74QgShUgXph1BYseJ+KZd17bKQib/yF3SR+demvytiRXrwd12Blnz5eYGm8tXaeRdd4x88MlfwldHoudGg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.44.1': resolution: {integrity: sha512-EHrrEsyhOhxYt8MTg4zTF+DJMuNBzWwgvvOYNj/zm1vnaD/IC5zCXFehZv94Piqa2cRFfXrTFxIvO95L7Qc/cw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1286,32 +1268,16 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.42.0': - resolution: {integrity: sha512-vfVpLHAhbPjilrabtOSNcUDmBboQNrJUiNAGoImkZKnMjs2TIcWG33s4Ds0wY3/50aZmTMqJa6PiwkwezaAklg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.44.1': resolution: {integrity: sha512-ycSa60eGg8GWAkVsKV4E6Nz33h+HjTXbsDT4FILyL8Obk5/mx4tbvCNsLf9zret3ipSumAOG89UcCs/KRaKYrA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.42.0': - resolution: {integrity: sha512-51+x9o78NBAVgQzOPd17DkNTnIzJ8T/O2dmMBLoK9qbY0Gm52XJcdJcCl18ExBMiHo6jPMErUQWUv5RLE51zJw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.44.1': resolution: {integrity: sha512-NdhWHgmynpSvyhchGLXh+w12OMT308Gm25JoRIyTZqEbApiBiQHD/8xgb6LqCWCFcxFtWwaVdFsLPQI3jvhywg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.42.0': - resolution: {integrity: sha512-kHeFUOdwAJfUmYKjR3CLgZSglGHjbNTi1H8sTYRYV2xX6eNz4RyJ2LIgsDLKf8Yi0/GL1WZAC/DgZBeBft8QAQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/tsconfig-utils@8.44.1': resolution: {integrity: sha512-B5OyACouEjuIvof3o86lRMvyDsFwZm+4fBOqFHccIctYgBjqR3qT39FBYGN87khcgf0ExpdCBeGKpKRhSFTjKQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1325,20 +1291,10 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.42.0': - resolution: {integrity: sha512-LdtAWMiFmbRLNP7JNeY0SqEtJvGMYSzfiWBSmx+VSZ1CH+1zyl8Mmw1TT39OrtsRvIYShjJWzTDMPWZJCpwBlw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.44.1': resolution: {integrity: sha512-Lk7uj7y9uQUOEguiDIDLYLJOrYHQa7oBiURYVFqIpGxclAFQ78f6VUOM8lI2XEuNOKNB7XuvM2+2cMXAoq4ALQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.42.0': - resolution: {integrity: sha512-ku/uYtT4QXY8sl9EDJETD27o3Ewdi72hcXg1ah/kkUgBvAYHLwj2ofswFFNXS+FL5G+AGkxBtvGt8pFBHKlHsQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/typescript-estree@8.44.1': resolution: {integrity: sha512-qnQJ+mVa7szevdEyvfItbO5Vo+GfZ4/GZWWDRRLjrxYPkhM+6zYB2vRYwCsoJLzqFCdZT4mEqyJoyzkunsZ96A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1352,10 +1308,6 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.42.0': - resolution: {integrity: sha512-3WbiuzoEowaEn8RSnhJBrxSwX8ULYE9CXaPepS2C2W3NSA5NNIvBaslpBSBElPq0UGr0xVJlXFWOAKIkyylydQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.44.1': resolution: {integrity: sha512-576+u0QD+Jp3tZzvfRfxon0EA2lzcDt3lhUbsC6Lgzy9x2VR4E+JUiNyGHi5T8vk0TV+fpJ5GLG1JsJuWCaKhw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1455,8 +1407,8 @@ packages: cpu: [x64] os: [win32] - '@vitest/eslint-plugin@1.3.12': - resolution: {integrity: sha512-cSEyUYGj8j8SLqKrzN7BlfsJ3wG67eRT25819PXuyoSBogLXiyagdKx4MHWHV1zv+EEuyMXsEKkBEKzXpxyBrg==} + '@vitest/eslint-plugin@1.3.13': + resolution: {integrity: sha512-QfzXd1+lCY3dIqPHOZlagA2bJYoWC5yAU3adv8Gks0rHAL6FpyXKYBiyMCuU6mRrbKUMphGqwDQobinOvYgJig==} peerDependencies: eslint: '>= 8.57.0' typescript: '>= 5.0.0' @@ -1520,16 +1472,16 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - ansi-escapes@7.0.0: - resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} + ansi-escapes@7.1.1: + resolution: {integrity: sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==} engines: {node: '>=18'} ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} engines: {node: '>=12'} ansi-styles@3.2.1: @@ -1540,8 +1492,8 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} any-promise@1.3.0: @@ -1676,6 +1628,10 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + baseline-browser-mapping@2.8.7: + resolution: {integrity: sha512-bxxN2M3a4d1CRoQC//IqsR5XrLh0IJ8TCv2x6Y9N0nckNz/rTjZB3//GGscZziZOxmjP55rzxg/ze7usFI9FqQ==} + hasBin: true + bcrypt-pbkdf@1.0.2: resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} @@ -1712,8 +1668,8 @@ packages: browser-stdout@1.3.1: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} - browserslist@4.25.2: - resolution: {integrity: sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA==} + browserslist@4.26.2: + resolution: {integrity: sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -1767,8 +1723,8 @@ packages: resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} engines: {node: '>=16'} - caniuse-lite@1.0.30001735: - resolution: {integrity: sha512-EV/laoX7Wq2J9TQlyIXRxTJqIw4sxfXS4OYgudGxBYRuTv0q7AM6yMEpU/Vo1I94thg9U6EZ2NfZx9GJq83u7w==} + caniuse-lite@1.0.30001745: + resolution: {integrity: sha512-ywt6i8FzvdgrrrGbr1jZVObnVv6adj+0if2/omv9cmR2oiZs30zL4DIyaptKcbOrBdOIc74QTMoJvSE2QHh5UQ==} caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} @@ -1785,8 +1741,8 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chalk@5.5.0: - resolution: {integrity: sha512-1tm8DTaJhPBG3bIkVeZt1iZM9GfSX2lzOeDVZH9R9ffRHpmHvxZ/QhgQH/aDTkswQVt+YHdXAdS/In/30OjCbg==} + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} change-case@5.4.4: @@ -1823,8 +1779,8 @@ packages: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} - clean-stack@5.2.0: - resolution: {integrity: sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ==} + clean-stack@5.3.0: + resolution: {integrity: sha512-9ngPTOhYGQqNVSfeJkYXHmF7AGWp4/nN5D/QqNQs3Dvxd1Kk/WpjHfNujKHYUQ/5CoGyOyFNoWSPk5afzP0QVg==} engines: {node: '>=14.16'} cli-cursor@5.0.0: @@ -1938,8 +1894,8 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - core-js-compat@3.45.0: - resolution: {integrity: sha512-gRoVMBawZg0OnxaVv3zpqLLxaHmsubEGyTnqdpI/CEBvX4JadI1dMSHxagThprYRtSVbuQxvi6iUatdPxohHpA==} + core-js-compat@3.45.1: + resolution: {integrity: sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA==} core-util-is@1.0.2: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} @@ -2142,11 +2098,11 @@ packages: ecc-jsbn@0.1.2: resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} - electron-to-chromium@1.5.201: - resolution: {integrity: sha512-ZG65vsrLClodGqywuigc+7m0gr4ISoTQttfVh7nfpLv0M7SIwF4WbFNEOywcqTiujs12AUeeXbFyQieDICAIxg==} + electron-to-chromium@1.5.224: + resolution: {integrity: sha512-kWAoUu/bwzvnhpdZSIc6KUyvkI1rbRXMT0Eq8pKReyOyaPZcctMli+EgvcN1PAvwVc7Tdo4Fxi2PsLNDU05mdg==} - emoji-regex@10.4.0: - resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + emoji-regex@10.5.0: + resolution: {integrity: sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2174,12 +2130,12 @@ packages: entities@2.2.0: resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} - env-ci@11.1.1: - resolution: {integrity: sha512-mT3ks8F0kwpo7SYNds6nWj0PaRh+qJxIeBVBXAKTN9hphAzZv7s0QAZQbqnB1fAv/r4pJUGE15BV9UrS31FP2w==} + env-ci@11.2.0: + resolution: {integrity: sha512-D5kWfzkmaOQDioPmiviWAVtKmpPT4/iJmMVQxWxMPJTFyTkdc5JQUfc5iXEeWxcOdsYTKSAiA/Age4NUOqKsRA==} engines: {node: ^18.17 || >=20.6.1} - env-editor@1.1.0: - resolution: {integrity: sha512-7AXskzN6T7Q9TFcKAGJprUbpQa4i1VsAetO9rdBqbGMGlragTziBgWt4pVYJMBWHQlLoX0buy6WFikzPH4Qjpw==} + env-editor@1.3.0: + resolution: {integrity: sha512-EqiD/j01PooUbeWk+etUo2TWoocjoxMfGNYpS9e47glIJ5r8WepycIki+LCbonFbPdwlqY5ETeSTAJVMih4z4w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} env-paths@2.2.1: @@ -2193,8 +2149,8 @@ packages: err-code@2.0.3: resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} - error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-ex@1.3.4: + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} es-abstract@1.24.0: resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} @@ -2722,8 +2678,8 @@ packages: from2@2.3.0: resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==} - fs-extra@11.3.1: - resolution: {integrity: sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==} + fs-extra@11.3.2: + resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==} engines: {node: '>=14.14'} fs-minipass@2.1.0: @@ -2771,8 +2727,8 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-east-asian-width@1.3.0: - resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} + get-east-asian-width@1.4.0: + resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} engines: {node: '>=18'} get-intrinsic@1.3.0: @@ -3053,8 +3009,8 @@ packages: resolution: {integrity: sha512-YVt14UZCgsX1vZQ3gKjkWVdBdHQ6eu3MPU1TBgL1H5orXe2+jWD006WCPPtOuwlQm10NuzOW5WawiF1Q9veW8g==} engines: {node: '>=18.20'} - import-meta-resolve@4.1.0: - resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} + import-meta-resolve@4.2.0: + resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} import-modules@2.1.0: resolution: {integrity: sha512-8HEWcnkbGpovH9yInoisxaSoIg9Brbul+Ju3Kqe2UsYDUBJD/iQjSgEj0zPcTDPKfPp2fs5xlv1i+JSye/m1/A==} @@ -3072,8 +3028,8 @@ packages: resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} engines: {node: '>=12'} - index-to-position@1.1.0: - resolution: {integrity: sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==} + index-to-position@1.2.0: + resolution: {integrity: sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==} engines: {node: '>=18'} inflight@1.0.6: @@ -3173,8 +3129,8 @@ packages: resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} engines: {node: '>=12'} - is-fullwidth-code-point@5.0.0: - resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} + is-fullwidth-code-point@5.1.0: + resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} engines: {node: '>=18'} is-generator-function@1.1.0: @@ -3339,8 +3295,8 @@ packages: resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} - istanbul-reports@3.1.7: - resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + istanbul-reports@3.2.0: + resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} engines: {node: '>=8'} iterator.prototype@1.1.5: @@ -3358,8 +3314,8 @@ packages: resolution: {integrity: sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==} engines: {node: '>= 0.6.0'} - jiti@2.5.1: - resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==} + jiti@2.6.0: + resolution: {integrity: sha512-VXe6RjJkBPj0ohtqaO8vSWP3ZhAKo66fKrFNCll4BTcwljPLz03pCbaNKfzGP5MbrCYcbJ7v0nOYYwUzTEIdXQ==} hasBin: true js-tokens@4.0.0: @@ -3392,8 +3348,8 @@ packages: resolution: {integrity: sha512-DYYlVP1fe4QBMh2xTIs20/YeTz2GYVbWAEZweHSZD+qQ/Cx2d5RShuhhsdk64eTjNq0FeVnteP/qVOgaywSRbg==} engines: {node: '>=12.0.0'} - jsdoc-type-pratt-parser@5.9.0: - resolution: {integrity: sha512-G1+QGbmN5EZ53DN3yKF6jax0FXeVEX4mgIx1K4YrsWhtXRaySR9cTZqB43ISxKAEna2LBG/I7NSl9wV//l1XPA==} + jsdoc-type-pratt-parser@5.9.1: + resolution: {integrity: sha512-j0HZC9VHVp5bohVV3ZBwUC56cZZ86oj8SmesgBH1H+VEEChNlw5tgEm2b8ecsp3WnKtTWCXGYWSWwyqkRT3PxQ==} engines: {node: '>=12.0.0'} jsdom@6.5.1: @@ -3571,8 +3527,8 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@11.1.0: - resolution: {integrity: sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==} + lru-cache@11.2.2: + resolution: {integrity: sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==} engines: {node: 20 || >=22} lru-cache@5.1.1: @@ -3653,8 +3609,8 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} - mime@4.0.7: - resolution: {integrity: sha512-2OfDPL+e03E0LrXaGYOtTFIYhiuzep94NSsuhrNULq+stylcJedcHdzHtz0atMUuGwJfFYs0YL5xeC/Ca2x0eQ==} + mime@4.1.0: + resolution: {integrity: sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==} engines: {node: '>=16'} hasBin: true @@ -3788,8 +3744,8 @@ packages: engines: {node: ^16.14.0 || >=18.0.0} hasBin: true - node-releases@2.0.19: - resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + node-releases@2.0.21: + resolution: {integrity: sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==} nopt@7.2.1: resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==} @@ -3808,8 +3764,8 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - normalize-url@8.0.2: - resolution: {integrity: sha512-Ee/R3SyN4BuynXcnTaekmaVdbDAEiNrHqjQIA37mHU8G9pf7aaAD4ZX3XjBLo6rsdcxA/gtkcNYZLt30ACgynw==} + normalize-url@8.1.0: + resolution: {integrity: sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w==} engines: {node: '>=14.16'} npm-run-path@5.3.0: @@ -4158,8 +4114,8 @@ packages: engines: {node: '>=14'} hasBin: true - pretty-ms@9.2.0: - resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} + pretty-ms@9.3.0: + resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==} engines: {node: '>=18'} proc-log@4.2.0: @@ -4254,8 +4210,8 @@ packages: resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} - regenerate-unicode-properties@10.2.0: - resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} + regenerate-unicode-properties@10.2.2: + resolution: {integrity: sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==} engines: {node: '>=4'} regenerate@1.4.2: @@ -4273,8 +4229,8 @@ packages: resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} engines: {node: '>= 0.4'} - regexpu-core@6.2.0: - resolution: {integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==} + regexpu-core@6.4.0: + resolution: {integrity: sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==} engines: {node: '>=4'} registry-auth-token@5.1.0: @@ -4288,6 +4244,10 @@ packages: resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} hasBin: true + regjsparser@0.13.0: + resolution: {integrity: sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==} + hasBin: true + remove-trailing-separator@1.1.0: resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} @@ -4360,8 +4320,8 @@ packages: resolution: {integrity: sha512-3niqt5bXFY1InKU8HKWqqYTYjtrBaxBMnXELXCXUYgtNYGUtZM5rB46HIC430AyacL95iEniGf7RgqsesykLmQ==} engines: {node: '>=18.0'} - run-applescript@7.0.0: - resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} + run-applescript@7.1.0: + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} engines: {node: '>=18'} run-parallel@1.2.0: @@ -4495,8 +4455,8 @@ packages: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} - slice-ansi@7.1.0: - resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} + slice-ansi@7.1.2: + resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} engines: {node: '>=18'} smart-buffer@4.2.0: @@ -4625,8 +4585,8 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + strip-ansi@7.1.2: + resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} engines: {node: '>=12'} strip-bom@3.0.0: @@ -4737,12 +4697,12 @@ packages: tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - tinyglobby@0.2.14: - resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} - tlds@1.259.0: - resolution: {integrity: sha512-AldGGlDP0PNgwppe2quAvuBl18UcjuNtOnDuUkqhd6ipPqrYYBt3aTxK1QTsBVknk97lS2JcafWMghjGWFtunw==} + tlds@1.260.0: + resolution: {integrity: sha512-78+28EWBhCEE7qlyaHA9OR3IPvbCLiDh3Ckla593TksfFc9vfTsgvH7eS+dr3o9qr31gwGbogcI16yN91PoRjQ==} hasBin: true to-regex-range@5.0.1: @@ -4869,12 +4829,12 @@ packages: resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} engines: {node: '>=4'} - unicode-match-property-value-ecmascript@2.2.0: - resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} + unicode-match-property-value-ecmascript@2.2.1: + resolution: {integrity: sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==} engines: {node: '>=4'} - unicode-property-aliases-ecmascript@2.1.0: - resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + unicode-property-aliases-ecmascript@2.2.0: + resolution: {integrity: sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==} engines: {node: '>=4'} unicorn-magic@0.1.0: @@ -5012,8 +4972,8 @@ packages: wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - workerpool@9.3.3: - resolution: {integrity: sha512-slxCaKbYjEdFT/o2rH9xS1hf4uRDch1w7Uo+apxhZ+sf/1d9e0ZVkn42kPNGP2dgjIx6YFvSevj0zHvbWe2jdw==} + workerpool@9.3.4: + resolution: {integrity: sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg==} wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} @@ -5027,8 +4987,8 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} - wrap-ansi@9.0.0: - resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} engines: {node: '>=18'} wrappy@1.0.2: @@ -5115,8 +5075,8 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - yoctocolors@2.1.1: - resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} + yoctocolors@2.1.2: + resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} engines: {node: '>=18'} snapshots: @@ -5145,7 +5105,7 @@ snapshots: '@loaderkit/resolve': 1.0.4 cjs-module-lexer: 1.4.3 fflate: 0.8.2 - lru-cache: 11.1.0 + lru-cache: 11.2.2 semver: 7.7.2 typescript: 5.6.1-rc validate-npm-package-name: 5.0.1 @@ -5153,7 +5113,7 @@ snapshots: '@babel/cli@7.28.3(@babel/core@7.28.4)': dependencies: '@babel/core': 7.28.4 - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 commander: 6.2.1 convert-source-map: 2.0.0 fs-readdir-recursive: 1.1.0 @@ -5170,7 +5130,7 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.28.0': {} + '@babel/compat-data@7.28.4': {} '@babel/core@7.28.4': dependencies: @@ -5192,31 +5152,31 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/eslint-parser@7.28.4(@babel/core@7.28.4)(eslint@9.36.0(jiti@2.5.1))': + '@babel/eslint-parser@7.28.4(@babel/core@7.28.4)(eslint@9.36.0(jiti@2.6.0))': dependencies: '@babel/core': 7.28.4 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.6.0) eslint-visitor-keys: 2.1.0 semver: 6.3.1 '@babel/generator@7.28.3': dependencies: - '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 '@babel/helper-compilation-targets@7.27.2': dependencies: - '@babel/compat-data': 7.28.0 + '@babel/compat-data': 7.28.4 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.25.2 + browserslist: 4.26.2 lru-cache: 5.1.1 semver: 6.3.1 @@ -5228,7 +5188,7 @@ snapshots: '@babel/helper-optimise-call-expression': 7.27.1 '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -5237,7 +5197,7 @@ snapshots: dependencies: '@babel/core': 7.28.4 '@babel/helper-annotate-as-pure': 7.27.3 - regexpu-core: 6.2.0 + regexpu-core: 6.4.0 semver: 6.3.1 '@babel/helper-define-polyfill-provider@0.6.5(@babel/core@7.28.4)': @@ -5255,15 +5215,15 @@ snapshots: '@babel/helper-member-expression-to-functions@7.27.1': dependencies: - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.27.1': dependencies: - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 transitivePeerDependencies: - supports-color @@ -5272,13 +5232,13 @@ snapshots: '@babel/core': 7.28.4 '@babel/helper-module-imports': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color '@babel/helper-optimise-call-expression@7.27.1': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 '@babel/helper-plugin-utils@7.27.1': {} @@ -5287,7 +5247,7 @@ snapshots: '@babel/core': 7.28.4 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-wrap-function': 7.28.3 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color @@ -5296,14 +5256,14 @@ snapshots: '@babel/core': 7.28.4 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 transitivePeerDependencies: - supports-color @@ -5316,8 +5276,8 @@ snapshots: '@babel/helper-wrap-function@7.28.3': dependencies: '@babel/template': 7.27.2 - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 transitivePeerDependencies: - supports-color @@ -5326,10 +5286,6 @@ snapshots: '@babel/template': 7.27.2 '@babel/types': 7.28.4 - '@babel/parser@7.28.3': - dependencies: - '@babel/types': 7.28.2 - '@babel/parser@7.28.4': dependencies: '@babel/types': 7.28.4 @@ -5338,7 +5294,7 @@ snapshots: dependencies: '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color @@ -5365,7 +5321,7 @@ snapshots: dependencies: '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color @@ -5409,7 +5365,7 @@ snapshots: '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.4) - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color @@ -5427,7 +5383,7 @@ snapshots: '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-block-scoping@7.28.0(@babel/core@7.28.4)': + '@babel/plugin-transform-block-scoping@7.28.4(@babel/core@7.28.4)': dependencies: '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 @@ -5448,7 +5404,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.28.3(@babel/core@7.28.4)': + '@babel/plugin-transform-classes@7.28.4(@babel/core@7.28.4)': dependencies: '@babel/core': 7.28.4 '@babel/helper-annotate-as-pure': 7.27.3 @@ -5456,7 +5412,7 @@ snapshots: '@babel/helper-globals': 7.28.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color @@ -5470,7 +5426,7 @@ snapshots: dependencies: '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color @@ -5533,7 +5489,7 @@ snapshots: '@babel/core': 7.28.4 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color @@ -5579,7 +5535,7 @@ snapshots: '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color @@ -5612,14 +5568,14 @@ snapshots: '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-object-rest-spread@7.28.0(@babel/core@7.28.4)': + '@babel/plugin-transform-object-rest-spread@7.28.4(@babel/core@7.28.4)': dependencies: '@babel/core': 7.28.4 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.4) '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.4) - '@babel/traverse': 7.28.3 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color @@ -5671,7 +5627,7 @@ snapshots: '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-regenerator@7.28.3(@babel/core@7.28.4)': + '@babel/plugin-transform-regenerator@7.28.4(@babel/core@7.28.4)': dependencies: '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 @@ -5740,7 +5696,7 @@ snapshots: '@babel/preset-env@7.28.3(@babel/core@7.28.4)': dependencies: - '@babel/compat-data': 7.28.0 + '@babel/compat-data': 7.28.4 '@babel/core': 7.28.4 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 @@ -5758,10 +5714,10 @@ snapshots: '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.28.4) '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.28.4) '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-block-scoping': 7.28.0(@babel/core@7.28.4) + '@babel/plugin-transform-block-scoping': 7.28.4(@babel/core@7.28.4) '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.4) '@babel/plugin-transform-class-static-block': 7.28.3(@babel/core@7.28.4) - '@babel/plugin-transform-classes': 7.28.3(@babel/core@7.28.4) + '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.28.4) '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.28.4) '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.4) '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.28.4) @@ -5785,7 +5741,7 @@ snapshots: '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.28.4) '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.28.4) '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-object-rest-spread': 7.28.0(@babel/core@7.28.4) + '@babel/plugin-transform-object-rest-spread': 7.28.4(@babel/core@7.28.4) '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.28.4) '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.28.4) '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.4) @@ -5793,7 +5749,7 @@ snapshots: '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.28.4) '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.28.4) '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-regenerator': 7.28.3(@babel/core@7.28.4) + '@babel/plugin-transform-regenerator': 7.28.4(@babel/core@7.28.4) '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.28.4) '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.28.4) '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.4) @@ -5809,7 +5765,7 @@ snapshots: babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.4) babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.4) babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.4) - core-js-compat: 3.45.0 + core-js-compat: 3.45.1 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -5818,26 +5774,14 @@ snapshots: dependencies: '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 esutils: 2.0.3 '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 - - '@babel/traverse@7.28.3': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.3 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.3 - '@babel/template': 7.27.2 - '@babel/types': 7.28.2 - debug: 4.4.3(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 '@babel/traverse@7.28.4': dependencies: @@ -5851,11 +5795,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/types@7.28.2': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - '@babel/types@7.28.4': dependencies: '@babel/helper-string-parser': 7.27.1 @@ -5912,13 +5851,13 @@ snapshots: '@es-joy/estraverse@6.0.0': {} - '@es-joy/jsdoc-eslint-parser@0.23.0(jiti@2.5.1)': + '@es-joy/jsdoc-eslint-parser@0.23.0(jiti@2.6.0)': dependencies: '@babel/core': 7.28.4 - '@babel/eslint-parser': 7.28.4(@babel/core@7.28.4)(eslint@9.36.0(jiti@2.5.1)) + '@babel/eslint-parser': 7.28.4(@babel/core@7.28.4)(eslint@9.36.0(jiti@2.6.0)) '@es-joy/jsdoccomment': 0.56.0 - '@typescript-eslint/parser': 8.42.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.36.0(jiti@2.5.1) + '@typescript-eslint/parser': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + eslint: 9.36.0(jiti@2.6.0) esquery: 1.6.0 typescript: 5.9.2 transitivePeerDependencies: @@ -5947,11 +5886,11 @@ snapshots: '@typescript-eslint/types': 8.44.1 comment-parser: 1.4.1 esquery: 1.6.0 - jsdoc-type-pratt-parser: 5.9.0 + jsdoc-type-pratt-parser: 5.9.1 - '@eslint-community/eslint-utils@4.8.0(eslint@9.36.0(jiti@2.5.1))': + '@eslint-community/eslint-utils@4.9.0(eslint@9.36.0(jiti@2.6.0))': dependencies: - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.6.0) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -5999,13 +5938,13 @@ snapshots: '@fastify/busboy@3.2.0': {} - '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.5.2)(eslint@9.36.0(jiti@2.5.1))(graphql@16.11.0)(typescript@5.9.2)': + '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.5.2)(eslint@9.36.0(jiti@2.6.0))(graphql@16.11.0)(typescript@5.9.2)': dependencies: '@graphql-tools/code-file-loader': 8.1.22(graphql@16.11.0) '@graphql-tools/graphql-tag-pluck': 8.3.21(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) debug: 4.4.3(supports-color@8.1.1) - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.6.0) fast-glob: 3.3.3 graphql: 16.11.0 graphql-config: 5.1.5(@types/node@24.5.2)(graphql@16.11.0)(typescript@5.9.2) @@ -6242,15 +6181,13 @@ snapshots: '@humanfs/core@0.19.1': {} - '@humanfs/node@0.16.6': + '@humanfs/node@0.16.7': dependencies: '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.3.1 + '@humanwhocodes/retry': 0.4.3 '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/retry@0.3.1': {} - '@humanwhocodes/retry@0.4.3': {} '@isaacs/balanced-match@4.0.1': {} @@ -6263,7 +6200,7 @@ snapshots: dependencies: string-width: 5.1.2 string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 strip-ansi-cjs: strip-ansi@6.0.1 wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 @@ -6281,18 +6218,18 @@ snapshots: '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/remapping@2.3.5': dependencies: '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/sourcemap-codec@1.5.5': {} - '@jridgewell/trace-mapping@0.3.30': + '@jridgewell/trace-mapping@0.3.31': dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 @@ -6353,13 +6290,13 @@ snapshots: '@octokit/auth-token@6.0.0': {} - '@octokit/core@7.0.3': + '@octokit/core@7.0.4': dependencies: '@octokit/auth-token': 6.0.0 '@octokit/graphql': 9.0.1 '@octokit/request': 10.0.3 '@octokit/request-error': 7.0.0 - '@octokit/types': 14.1.0 + '@octokit/types': 15.0.0 before-after-hook: 4.0.0 universal-user-agent: 7.0.3 @@ -6376,21 +6313,23 @@ snapshots: '@octokit/openapi-types@25.1.0': {} - '@octokit/plugin-paginate-rest@13.1.1(@octokit/core@7.0.3)': + '@octokit/openapi-types@26.0.0': {} + + '@octokit/plugin-paginate-rest@13.1.1(@octokit/core@7.0.4)': dependencies: - '@octokit/core': 7.0.3 + '@octokit/core': 7.0.4 '@octokit/types': 14.1.0 - '@octokit/plugin-retry@8.0.1(@octokit/core@7.0.3)': + '@octokit/plugin-retry@8.0.1(@octokit/core@7.0.4)': dependencies: - '@octokit/core': 7.0.3 + '@octokit/core': 7.0.4 '@octokit/request-error': 7.0.0 '@octokit/types': 14.1.0 bottleneck: 2.19.5 - '@octokit/plugin-throttling@11.0.1(@octokit/core@7.0.3)': + '@octokit/plugin-throttling@11.0.1(@octokit/core@7.0.4)': dependencies: - '@octokit/core': 7.0.3 + '@octokit/core': 7.0.4 '@octokit/types': 14.1.0 bottleneck: 2.19.5 @@ -6410,6 +6349,10 @@ snapshots: dependencies: '@octokit/openapi-types': 25.1.0 + '@octokit/types@15.0.0': + dependencies: + '@octokit/openapi-types': 26.0.0 + '@pkgjs/parseargs@0.11.0': optional: true @@ -6449,10 +6392,10 @@ snapshots: '@semantic-release/github@11.0.6(semantic-release@24.2.9(typescript@5.9.2))': dependencies: - '@octokit/core': 7.0.3 - '@octokit/plugin-paginate-rest': 13.1.1(@octokit/core@7.0.3) - '@octokit/plugin-retry': 8.0.1(@octokit/core@7.0.3) - '@octokit/plugin-throttling': 11.0.1(@octokit/core@7.0.3) + '@octokit/core': 7.0.4 + '@octokit/plugin-paginate-rest': 13.1.1(@octokit/core@7.0.4) + '@octokit/plugin-retry': 8.0.1(@octokit/core@7.0.4) + '@octokit/plugin-throttling': 11.0.1(@octokit/core@7.0.4) '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 debug: 4.4.3(supports-color@8.1.1) @@ -6461,10 +6404,10 @@ snapshots: https-proxy-agent: 7.0.6 issue-parser: 7.0.1 lodash-es: 4.17.21 - mime: 4.0.7 + mime: 4.1.0 p-filter: 4.1.0 semantic-release: 24.2.9(typescript@5.9.2) - tinyglobby: 0.2.14 + tinyglobby: 0.2.15 url-join: 5.0.0 transitivePeerDependencies: - supports-color @@ -6474,10 +6417,10 @@ snapshots: '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 execa: 9.6.0 - fs-extra: 11.3.1 + fs-extra: 11.3.2 lodash-es: 4.17.21 nerf-dart: 1.0.0 - normalize-url: 8.0.2 + normalize-url: 8.1.0 npm: 10.9.3 rc: 1.2.8 read-pkg: 9.0.1 @@ -6486,7 +6429,7 @@ snapshots: semver: 7.7.2 tempy: 3.1.0 - '@semantic-release/release-notes-generator@14.0.3(semantic-release@24.2.9(typescript@5.9.2))': + '@semantic-release/release-notes-generator@14.1.0(semantic-release@24.2.9(typescript@5.9.2))': dependencies: conventional-changelog-angular: 8.0.0 conventional-changelog-writer: 8.2.0 @@ -6506,10 +6449,10 @@ snapshots: '@sindresorhus/merge-streams@4.0.0': {} - '@stylistic/eslint-plugin@4.4.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': + '@stylistic/eslint-plugin@4.4.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)': dependencies: - '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.36.0(jiti@2.5.1) + '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + eslint: 9.36.0(jiti@2.6.0) eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 @@ -6578,15 +6521,15 @@ snapshots: dependencies: '@types/node': 24.5.2 - '@typescript-eslint/eslint-plugin@8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/eslint-plugin@8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/parser': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) '@typescript-eslint/scope-manager': 8.44.1 - '@typescript-eslint/type-utils': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/type-utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) '@typescript-eslint/visitor-keys': 8.44.1 - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.6.0) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -6595,35 +6538,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.42.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': - dependencies: - '@typescript-eslint/scope-manager': 8.42.0 - '@typescript-eslint/types': 8.42.0 - '@typescript-eslint/typescript-estree': 8.42.0(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.42.0 - debug: 4.4.3(supports-color@8.1.1) - eslint: 9.36.0(jiti@2.5.1) - typescript: 5.9.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)': dependencies: '@typescript-eslint/scope-manager': 8.44.1 '@typescript-eslint/types': 8.44.1 '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.2) '@typescript-eslint/visitor-keys': 8.44.1 debug: 4.4.3(supports-color@8.1.1) - eslint: 9.36.0(jiti@2.5.1) - typescript: 5.9.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.42.0(typescript@5.9.2)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.42.0(typescript@5.9.2) - '@typescript-eslint/types': 8.44.1 - debug: 4.4.3(supports-color@8.1.1) + eslint: 9.36.0(jiti@2.6.0) typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -6637,56 +6559,29 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.42.0': - dependencies: - '@typescript-eslint/types': 8.42.0 - '@typescript-eslint/visitor-keys': 8.42.0 - '@typescript-eslint/scope-manager@8.44.1': dependencies: '@typescript-eslint/types': 8.44.1 '@typescript-eslint/visitor-keys': 8.44.1 - '@typescript-eslint/tsconfig-utils@8.42.0(typescript@5.9.2)': - dependencies: - typescript: 5.9.2 - '@typescript-eslint/tsconfig-utils@8.44.1(typescript@5.9.2)': dependencies: typescript: 5.9.2 - '@typescript-eslint/type-utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/type-utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)': dependencies: '@typescript-eslint/types': 8.44.1 '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.2) - '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) debug: 4.4.3(supports-color@8.1.1) - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.6.0) ts-api-utils: 2.1.0(typescript@5.9.2) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.42.0': {} - '@typescript-eslint/types@8.44.1': {} - '@typescript-eslint/typescript-estree@8.42.0(typescript@5.9.2)': - dependencies: - '@typescript-eslint/project-service': 8.42.0(typescript@5.9.2) - '@typescript-eslint/tsconfig-utils': 8.42.0(typescript@5.9.2) - '@typescript-eslint/types': 8.42.0 - '@typescript-eslint/visitor-keys': 8.42.0 - debug: 4.4.3(supports-color@8.1.1) - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/typescript-estree@8.44.1(typescript@5.9.2)': dependencies: '@typescript-eslint/project-service': 8.44.1(typescript@5.9.2) @@ -6703,22 +6598,17 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)': dependencies: - '@eslint-community/eslint-utils': 4.8.0(eslint@9.36.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.0)) '@typescript-eslint/scope-manager': 8.44.1 '@typescript-eslint/types': 8.44.1 '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.2) - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.6.0) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.42.0': - dependencies: - '@typescript-eslint/types': 8.42.0 - eslint-visitor-keys: 4.2.1 - '@typescript-eslint/visitor-keys@8.44.1': dependencies: '@typescript-eslint/types': 8.44.1 @@ -6783,11 +6673,11 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - '@vitest/eslint-plugin@1.3.12(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': + '@vitest/eslint-plugin@1.3.13(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)': dependencies: '@typescript-eslint/scope-manager': 8.44.1 - '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.36.0(jiti@2.5.1) + '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + eslint: 9.36.0(jiti@2.6.0) optionalDependencies: typescript: 5.9.2 transitivePeerDependencies: @@ -6839,7 +6729,7 @@ snapshots: aggregate-error@5.0.0: dependencies: - clean-stack: 5.2.0 + clean-stack: 5.3.0 indent-string: 5.0.0 ajv@6.12.6: @@ -6849,13 +6739,13 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ansi-escapes@7.0.0: + ansi-escapes@7.1.1: dependencies: environment: 1.1.0 ansi-regex@5.0.1: {} - ansi-regex@6.1.0: {} + ansi-regex@6.2.2: {} ansi-styles@3.2.1: dependencies: @@ -6865,7 +6755,7 @@ snapshots: dependencies: color-convert: 2.0.1 - ansi-styles@6.2.1: {} + ansi-styles@6.2.3: {} any-promise@1.3.0: {} @@ -6992,7 +6882,7 @@ snapshots: babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.28.4): dependencies: - '@babel/compat-data': 7.28.0 + '@babel/compat-data': 7.28.4 '@babel/core': 7.28.4 '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4) semver: 6.3.1 @@ -7003,7 +6893,7 @@ snapshots: dependencies: '@babel/core': 7.28.4 '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4) - core-js-compat: 3.45.0 + core-js-compat: 3.45.1 transitivePeerDependencies: - supports-color @@ -7022,6 +6912,8 @@ snapshots: balanced-match@1.0.2: {} + baseline-browser-mapping@2.8.7: {} + bcrypt-pbkdf@1.0.2: dependencies: tweetnacl: 0.14.5 @@ -7054,18 +6946,19 @@ snapshots: browser-stdout@1.3.1: {} - browserslist@4.25.2: + browserslist@4.26.2: dependencies: - caniuse-lite: 1.0.30001735 - electron-to-chromium: 1.5.201 - node-releases: 2.0.19 - update-browserslist-db: 1.1.3(browserslist@4.25.2) + baseline-browser-mapping: 2.8.7 + caniuse-lite: 1.0.30001745 + electron-to-chromium: 1.5.224 + node-releases: 2.0.21 + update-browserslist-db: 1.1.3(browserslist@4.26.2) builtin-modules@5.0.0: {} bundle-name@4.1.0: dependencies: - run-applescript: 7.0.0 + run-applescript: 7.1.0 c8@10.1.3: dependencies: @@ -7075,7 +6968,7 @@ snapshots: foreground-child: 3.3.1 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 - istanbul-reports: 3.1.7 + istanbul-reports: 3.2.0 test-exclude: 7.0.1 v8-to-istanbul: 9.3.0 yargs: 17.7.2 @@ -7122,7 +7015,7 @@ snapshots: camelcase@8.0.0: {} - caniuse-lite@1.0.30001735: {} + caniuse-lite@1.0.30001745: {} caseless@0.12.0: {} @@ -7139,7 +7032,7 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - chalk@5.5.0: {} + chalk@5.6.2: {} change-case@5.4.4: {} @@ -7176,7 +7069,7 @@ snapshots: clean-stack@2.2.0: optional: true - clean-stack@5.2.0: + clean-stack@5.3.0: dependencies: escape-string-regexp: 5.0.0 @@ -7206,7 +7099,7 @@ snapshots: cli-truncate@5.1.0: dependencies: - slice-ansi: 7.1.0 + slice-ansi: 7.1.2 string-width: 8.1.0 cliui@6.0.0: @@ -7301,9 +7194,9 @@ snapshots: convert-source-map@2.0.0: {} - core-js-compat@3.45.0: + core-js-compat@3.45.1: dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 core-util-is@1.0.2: {} @@ -7489,9 +7382,9 @@ snapshots: jsbn: 0.1.1 safer-buffer: 2.1.2 - electron-to-chromium@1.5.201: {} + electron-to-chromium@1.5.224: {} - emoji-regex@10.4.0: {} + emoji-regex@10.5.0: {} emoji-regex@8.0.0: {} @@ -7517,12 +7410,12 @@ snapshots: entities@2.2.0: {} - env-ci@11.1.1: + env-ci@11.2.0: dependencies: execa: 8.0.1 java-properties: 1.0.2 - env-editor@1.1.0: {} + env-editor@1.3.0: {} env-paths@2.2.1: {} @@ -7531,7 +7424,7 @@ snapshots: err-code@2.0.3: optional: true - error-ex@1.3.2: + error-ex@1.3.4: dependencies: is-arrayish: 0.2.1 @@ -7658,55 +7551,55 @@ snapshots: lodash.get: 4.4.2 lodash.zip: 4.2.0 - eslint-compat-utils@0.5.1(eslint@9.36.0(jiti@2.5.1)): + eslint-compat-utils@0.5.1(eslint@9.36.0(jiti@2.6.0)): dependencies: - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.6.0) semver: 7.7.2 - eslint-compat-utils@0.6.5(eslint@9.36.0(jiti@2.5.1)): + eslint-compat-utils@0.6.5(eslint@9.36.0(jiti@2.6.0)): dependencies: - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.6.0) semver: 7.7.2 - eslint-config-canonical@45.0.0(@types/node@24.5.2)(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2): + eslint-config-canonical@45.0.0(@types/node@24.5.2)(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2): dependencies: - '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.5.2)(eslint@9.36.0(jiti@2.5.1))(graphql@16.11.0)(typescript@5.9.2) + '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.5.2)(eslint@9.36.0(jiti@2.6.0))(graphql@16.11.0)(typescript@5.9.2) '@next/eslint-plugin-next': 15.5.4 - '@stylistic/eslint-plugin': 4.4.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/eslint-plugin': 8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/parser': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - '@vitest/eslint-plugin': 1.3.12(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.36.0(jiti@2.5.1) - eslint-config-prettier: 10.1.8(eslint@9.36.0(jiti@2.5.1)) - eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1)) - eslint-plugin-ava: 15.1.0(eslint@9.36.0(jiti@2.5.1)) - eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - eslint-plugin-eslint-comments: 3.2.0(eslint@9.36.0(jiti@2.5.1)) - eslint-plugin-fp: 2.3.0(eslint@9.36.0(jiti@2.5.1)) - eslint-plugin-functional: 9.0.2(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)) - eslint-plugin-jest: 28.14.0(@typescript-eslint/eslint-plugin@8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - eslint-plugin-jsdoc: 50.8.0(eslint@9.36.0(jiti@2.5.1)) - eslint-plugin-jsonc: 2.20.1(eslint@9.36.0(jiti@2.5.1)) - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.36.0(jiti@2.5.1)) - eslint-plugin-lodash: 8.0.0(eslint@9.36.0(jiti@2.5.1)) - eslint-plugin-mocha: 10.5.0(eslint@9.36.0(jiti@2.5.1)) + '@stylistic/eslint-plugin': 4.4.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/eslint-plugin': 8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/parser': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@vitest/eslint-plugin': 1.3.13(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + eslint: 9.36.0(jiti@2.6.0) + eslint-config-prettier: 10.1.8(eslint@9.36.0(jiti@2.6.0)) + eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)) + eslint-plugin-ava: 15.1.0(eslint@9.36.0(jiti@2.6.0)) + eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + eslint-plugin-eslint-comments: 3.2.0(eslint@9.36.0(jiti@2.6.0)) + eslint-plugin-fp: 2.3.0(eslint@9.36.0(jiti@2.6.0)) + eslint-plugin-functional: 9.0.2(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)) + eslint-plugin-jest: 28.14.0(@typescript-eslint/eslint-plugin@8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + eslint-plugin-jsdoc: 50.8.0(eslint@9.36.0(jiti@2.6.0)) + eslint-plugin-jsonc: 2.20.1(eslint@9.36.0(jiti@2.6.0)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.36.0(jiti@2.6.0)) + eslint-plugin-lodash: 8.0.0(eslint@9.36.0(jiti@2.6.0)) + eslint-plugin-mocha: 10.5.0(eslint@9.36.0(jiti@2.6.0)) eslint-plugin-modules-newline: 0.0.6 - eslint-plugin-n: 17.23.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - eslint-plugin-perfectionist: 4.15.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - eslint-plugin-prettier: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1))(prettier@3.6.2) - eslint-plugin-promise: 7.2.1(eslint@9.36.0(jiti@2.5.1)) - eslint-plugin-react: 7.37.5(eslint@9.36.0(jiti@2.5.1)) - eslint-plugin-react-hooks: 5.2.0(eslint@9.36.0(jiti@2.5.1)) - eslint-plugin-regexp: 2.10.0(eslint@9.36.0(jiti@2.5.1)) - eslint-plugin-unicorn: 60.0.0(eslint@9.36.0(jiti@2.5.1)) - eslint-plugin-yml: 1.18.0(eslint@9.36.0(jiti@2.5.1)) - eslint-plugin-zod: 1.4.0(eslint@9.36.0(jiti@2.5.1)) + eslint-plugin-n: 17.23.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + eslint-plugin-perfectionist: 4.15.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + eslint-plugin-prettier: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0))(prettier@3.6.2) + eslint-plugin-promise: 7.2.1(eslint@9.36.0(jiti@2.6.0)) + eslint-plugin-react: 7.37.5(eslint@9.36.0(jiti@2.6.0)) + eslint-plugin-react-hooks: 5.2.0(eslint@9.36.0(jiti@2.6.0)) + eslint-plugin-regexp: 2.10.0(eslint@9.36.0(jiti@2.6.0)) + eslint-plugin-unicorn: 60.0.0(eslint@9.36.0(jiti@2.6.0)) + eslint-plugin-yml: 1.18.0(eslint@9.36.0(jiti@2.6.0)) + eslint-plugin-zod: 1.4.0(eslint@9.36.0(jiti@2.6.0)) globals: 16.4.0 graphql: 16.11.0 prettier: 3.6.2 ramda: 0.30.1 - typescript-eslint: 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + typescript-eslint: 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) yaml-eslint-parser: 1.3.0 transitivePeerDependencies: - '@apollo/subgraph' @@ -7729,9 +7622,9 @@ snapshots: - utf-8-validate - vitest - eslint-config-prettier@10.1.8(eslint@9.36.0(jiti@2.5.1)): + eslint-config-prettier@10.1.8(eslint@9.36.0(jiti@2.6.0)): dependencies: - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.6.0) eslint-import-context@0.1.9(unrs-resolver@1.11.1): dependencies: @@ -7740,59 +7633,59 @@ snapshots: optionalDependencies: unrs-resolver: 1.11.1 - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3(supports-color@8.1.1) - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.6.0) get-tsconfig: 4.10.1 is-bun-module: 2.0.0 stable-hash: 0.0.5 - tinyglobby: 0.2.14 + tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)) transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1)): + eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)): dependencies: debug: 4.4.3(supports-color@8.1.1) - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.6.0) eslint-import-context: 0.1.9(unrs-resolver@1.11.1) get-tsconfig: 4.10.1 is-bun-module: 2.0.0 stable-hash-x: 0.2.0 - tinyglobby: 0.2.14 + tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)) transitivePeerDependencies: - supports-color - eslint-json-compat-utils@0.2.1(eslint@9.36.0(jiti@2.5.1))(jsonc-eslint-parser@2.4.1): + eslint-json-compat-utils@0.2.1(eslint@9.36.0(jiti@2.6.0))(jsonc-eslint-parser@2.4.1): dependencies: - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.6.0) esquery: 1.6.0 jsonc-eslint-parser: 2.4.1 - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.36.0(jiti@2.5.1) - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1)) + '@typescript-eslint/parser': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + eslint: 9.36.0(jiti@2.6.0) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)) transitivePeerDependencies: - supports-color - eslint-plugin-ava@15.1.0(eslint@9.36.0(jiti@2.5.1)): + eslint-plugin-ava@15.1.0(eslint@9.36.0(jiti@2.6.0)): dependencies: enhance-visitors: 1.0.0 - eslint: 9.36.0(jiti@2.5.1) - eslint-utils: 3.0.0(eslint@9.36.0(jiti@2.5.1)) + eslint: 9.36.0(jiti@2.6.0) + eslint-utils: 3.0.0(eslint@9.36.0(jiti@2.6.0)) espree: 9.6.1 espurify: 2.1.1 import-modules: 2.1.0 @@ -7800,14 +7693,14 @@ snapshots: pkg-dir: 5.0.0 resolve-from: 5.0.0 - eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2): + eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2): dependencies: - '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) array-includes: 3.1.9 debug: 4.4.3(supports-color@8.1.1) doctrine: 3.0.0 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1)) - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)) is-get-set-prop: 1.0.0 is-js-type: 2.0.0 is-obj-prop: 1.0.0 @@ -7827,34 +7720,34 @@ snapshots: - supports-color - typescript - eslint-plugin-es-x@7.8.0(eslint@9.36.0(jiti@2.5.1)): + eslint-plugin-es-x@7.8.0(eslint@9.36.0(jiti@2.6.0)): dependencies: - '@eslint-community/eslint-utils': 4.8.0(eslint@9.36.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.0)) '@eslint-community/regexpp': 4.12.1 - eslint: 9.36.0(jiti@2.5.1) - eslint-compat-utils: 0.5.1(eslint@9.36.0(jiti@2.5.1)) + eslint: 9.36.0(jiti@2.6.0) + eslint-compat-utils: 0.5.1(eslint@9.36.0(jiti@2.6.0)) - eslint-plugin-eslint-comments@3.2.0(eslint@9.36.0(jiti@2.5.1)): + eslint-plugin-eslint-comments@3.2.0(eslint@9.36.0(jiti@2.6.0)): dependencies: escape-string-regexp: 1.0.5 - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.6.0) ignore: 5.3.2 - eslint-plugin-fp@2.3.0(eslint@9.36.0(jiti@2.5.1)): + eslint-plugin-fp@2.3.0(eslint@9.36.0(jiti@2.6.0)): dependencies: create-eslint-index: 1.0.0 - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.6.0) eslint-ast-utils: 1.1.0 lodash: 4.17.21 req-all: 0.1.0 - eslint-plugin-functional@9.0.2(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2): + eslint-plugin-functional@9.0.2(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2): dependencies: - '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) deepmerge-ts: 7.1.5 escape-string-regexp: 5.0.0 - eslint: 9.36.0(jiti@2.5.1) - is-immutable-type: 5.0.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.36.0(jiti@2.6.0) + is-immutable-type: 5.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) ts-api-utils: 2.1.0(typescript@5.9.2) ts-declaration-location: 1.0.7(typescript@5.9.2) optionalDependencies: @@ -7862,12 +7755,12 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)): + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)): dependencies: '@typescript-eslint/types': 8.44.1 comment-parser: 1.4.1 debug: 4.4.3(supports-color@8.1.1) - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.6.0) eslint-import-context: 0.1.9(unrs-resolver@1.11.1) is-glob: 4.0.3 minimatch: 10.0.3 @@ -7875,28 +7768,28 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) transitivePeerDependencies: - supports-color - eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2): + eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2): dependencies: - '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.36.0(jiti@2.5.1) + '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + eslint: 9.36.0(jiti@2.6.0) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/eslint-plugin': 8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-jsdoc@50.8.0(eslint@9.36.0(jiti@2.5.1)): + eslint-plugin-jsdoc@50.8.0(eslint@9.36.0(jiti@2.6.0)): dependencies: '@es-joy/jsdoccomment': 0.50.2 are-docs-informative: 0.0.2 comment-parser: 1.4.1 debug: 4.4.3(supports-color@8.1.1) escape-string-regexp: 4.0.0 - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.6.0) espree: 10.4.0 esquery: 1.6.0 parse-imports-exports: 0.2.4 @@ -7905,12 +7798,12 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-jsonc@2.20.1(eslint@9.36.0(jiti@2.5.1)): + eslint-plugin-jsonc@2.20.1(eslint@9.36.0(jiti@2.6.0)): dependencies: - '@eslint-community/eslint-utils': 4.8.0(eslint@9.36.0(jiti@2.5.1)) - eslint: 9.36.0(jiti@2.5.1) - eslint-compat-utils: 0.6.5(eslint@9.36.0(jiti@2.5.1)) - eslint-json-compat-utils: 0.2.1(eslint@9.36.0(jiti@2.5.1))(jsonc-eslint-parser@2.4.1) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.0)) + eslint: 9.36.0(jiti@2.6.0) + eslint-compat-utils: 0.6.5(eslint@9.36.0(jiti@2.6.0)) + eslint-json-compat-utils: 0.2.1(eslint@9.36.0(jiti@2.6.0))(jsonc-eslint-parser@2.4.1) espree: 10.4.0 graphemer: 1.4.0 jsonc-eslint-parser: 2.4.1 @@ -7919,7 +7812,7 @@ snapshots: transitivePeerDependencies: - '@eslint/json' - eslint-plugin-jsx-a11y@6.10.2(eslint@9.36.0(jiti@2.5.1)): + eslint-plugin-jsx-a11y@6.10.2(eslint@9.36.0(jiti@2.6.0)): dependencies: aria-query: 5.3.2 array-includes: 3.1.9 @@ -7929,7 +7822,7 @@ snapshots: axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.6.0) hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 @@ -7938,15 +7831,15 @@ snapshots: safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 - eslint-plugin-lodash@8.0.0(eslint@9.36.0(jiti@2.5.1)): + eslint-plugin-lodash@8.0.0(eslint@9.36.0(jiti@2.6.0)): dependencies: - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.6.0) lodash: 4.17.21 - eslint-plugin-mocha@10.5.0(eslint@9.36.0(jiti@2.5.1)): + eslint-plugin-mocha@10.5.0(eslint@9.36.0(jiti@2.6.0)): dependencies: - eslint: 9.36.0(jiti@2.5.1) - eslint-utils: 3.0.0(eslint@9.36.0(jiti@2.5.1)) + eslint: 9.36.0(jiti@2.6.0) + eslint-utils: 3.0.0(eslint@9.36.0(jiti@2.6.0)) globals: 13.24.0 rambda: 7.5.0 @@ -7954,12 +7847,12 @@ snapshots: dependencies: requireindex: 1.1.0 - eslint-plugin-n@17.23.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2): + eslint-plugin-n@17.23.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2): dependencies: - '@eslint-community/eslint-utils': 4.8.0(eslint@9.36.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.0)) enhanced-resolve: 5.18.3 - eslint: 9.36.0(jiti@2.5.1) - eslint-plugin-es-x: 7.8.0(eslint@9.36.0(jiti@2.5.1)) + eslint: 9.36.0(jiti@2.6.0) + eslint-plugin-es-x: 7.8.0(eslint@9.36.0(jiti@2.6.0)) get-tsconfig: 4.10.1 globals: 15.15.0 globrex: 0.1.2 @@ -7969,35 +7862,35 @@ snapshots: transitivePeerDependencies: - typescript - eslint-plugin-perfectionist@4.15.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2): + eslint-plugin-perfectionist@4.15.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2): dependencies: '@typescript-eslint/types': 8.44.1 - '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.36.0(jiti@2.5.1) + '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + eslint: 9.36.0(jiti@2.6.0) natural-orderby: 5.0.0 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-prettier@5.5.4(eslint-config-prettier@10.1.8(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1))(prettier@3.6.2): + eslint-plugin-prettier@5.5.4(eslint-config-prettier@10.1.8(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0))(prettier@3.6.2): dependencies: - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.6.0) prettier: 3.6.2 prettier-linter-helpers: 1.0.0 synckit: 0.11.11 optionalDependencies: - eslint-config-prettier: 10.1.8(eslint@9.36.0(jiti@2.5.1)) + eslint-config-prettier: 10.1.8(eslint@9.36.0(jiti@2.6.0)) - eslint-plugin-promise@7.2.1(eslint@9.36.0(jiti@2.5.1)): + eslint-plugin-promise@7.2.1(eslint@9.36.0(jiti@2.6.0)): dependencies: - '@eslint-community/eslint-utils': 4.8.0(eslint@9.36.0(jiti@2.5.1)) - eslint: 9.36.0(jiti@2.5.1) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.0)) + eslint: 9.36.0(jiti@2.6.0) - eslint-plugin-react-hooks@5.2.0(eslint@9.36.0(jiti@2.5.1)): + eslint-plugin-react-hooks@5.2.0(eslint@9.36.0(jiti@2.6.0)): dependencies: - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.6.0) - eslint-plugin-react@7.37.5(eslint@9.36.0(jiti@2.5.1)): + eslint-plugin-react@7.37.5(eslint@9.36.0(jiti@2.6.0)): dependencies: array-includes: 3.1.9 array.prototype.findlast: 1.2.5 @@ -8005,7 +7898,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.1 - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.6.0) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -8019,27 +7912,27 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-regexp@2.10.0(eslint@9.36.0(jiti@2.5.1)): + eslint-plugin-regexp@2.10.0(eslint@9.36.0(jiti@2.6.0)): dependencies: - '@eslint-community/eslint-utils': 4.8.0(eslint@9.36.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.0)) '@eslint-community/regexpp': 4.12.1 comment-parser: 1.4.1 - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.6.0) jsdoc-type-pratt-parser: 4.8.0 refa: 0.12.1 regexp-ast-analysis: 0.7.1 scslre: 0.3.0 - eslint-plugin-unicorn@60.0.0(eslint@9.36.0(jiti@2.5.1)): + eslint-plugin-unicorn@60.0.0(eslint@9.36.0(jiti@2.6.0)): dependencies: '@babel/helper-validator-identifier': 7.27.1 - '@eslint-community/eslint-utils': 4.8.0(eslint@9.36.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.0)) '@eslint/plugin-kit': 0.3.5 change-case: 5.4.4 ci-info: 4.3.0 clean-regexp: 1.0.0 - core-js-compat: 3.45.0 - eslint: 9.36.0(jiti@2.5.1) + core-js-compat: 3.45.1 + eslint: 9.36.0(jiti@2.6.0) esquery: 1.6.0 find-up-simple: 1.0.1 globals: 16.4.0 @@ -8052,20 +7945,20 @@ snapshots: semver: 7.7.2 strip-indent: 4.1.0 - eslint-plugin-yml@1.18.0(eslint@9.36.0(jiti@2.5.1)): + eslint-plugin-yml@1.18.0(eslint@9.36.0(jiti@2.6.0)): dependencies: debug: 4.4.3(supports-color@8.1.1) escape-string-regexp: 4.0.0 - eslint: 9.36.0(jiti@2.5.1) - eslint-compat-utils: 0.6.5(eslint@9.36.0(jiti@2.5.1)) + eslint: 9.36.0(jiti@2.6.0) + eslint-compat-utils: 0.6.5(eslint@9.36.0(jiti@2.6.0)) natural-compare: 1.4.0 yaml-eslint-parser: 1.3.0 transitivePeerDependencies: - supports-color - eslint-plugin-zod@1.4.0(eslint@9.36.0(jiti@2.5.1)): + eslint-plugin-zod@1.4.0(eslint@9.36.0(jiti@2.6.0)): dependencies: - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.6.0) eslint-scope@5.1.1: dependencies: @@ -8077,9 +7970,9 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-utils@3.0.0(eslint@9.36.0(jiti@2.5.1)): + eslint-utils@3.0.0(eslint@9.36.0(jiti@2.6.0)): dependencies: - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.6.0) eslint-visitor-keys: 2.1.0 eslint-visitor-keys@2.1.0: {} @@ -8088,9 +7981,9 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.36.0(jiti@2.5.1): + eslint@9.36.0(jiti@2.6.0): dependencies: - '@eslint-community/eslint-utils': 4.8.0(eslint@9.36.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.0)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.21.0 '@eslint/config-helpers': 0.3.1 @@ -8098,7 +7991,7 @@ snapshots: '@eslint/eslintrc': 3.3.1 '@eslint/js': 9.36.0 '@eslint/plugin-kit': 0.3.5 - '@humanfs/node': 0.16.6 + '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 '@types/estree': 1.0.8 @@ -8126,7 +8019,7 @@ snapshots: natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: - jiti: 2.5.1 + jiti: 2.6.0 transitivePeerDependencies: - supports-color @@ -8184,10 +8077,10 @@ snapshots: is-plain-obj: 4.1.0 is-stream: 4.0.1 npm-run-path: 6.0.0 - pretty-ms: 9.2.0 + pretty-ms: 9.3.0 signal-exit: 4.1.0 strip-final-newline: 4.0.0 - yoctocolors: 2.1.1 + yoctocolors: 2.1.2 exponential-backoff@3.1.2: optional: true @@ -8313,7 +8206,7 @@ snapshots: inherits: 2.0.4 readable-stream: 2.3.8 - fs-extra@11.3.1: + fs-extra@11.3.2: dependencies: graceful-fs: 4.2.11 jsonfile: 6.2.0 @@ -8357,7 +8250,7 @@ snapshots: get-caller-file@2.0.5: {} - get-east-asian-width@1.3.0: {} + get-east-asian-width@1.4.0: {} get-intrinsic@1.3.0: dependencies: @@ -8404,7 +8297,7 @@ snapshots: get-urls@12.1.0(re2@1.20.9): dependencies: - normalize-url: 8.0.2 + normalize-url: 8.1.0 super-regex: 0.2.0 url-regex-safe: 4.0.0(re2@1.20.9) transitivePeerDependencies: @@ -8525,7 +8418,7 @@ snapshots: '@graphql-tools/utils': 10.9.1(graphql@16.11.0) cosmiconfig: 8.3.6(typescript@5.9.2) graphql: 16.11.0 - jiti: 2.5.1 + jiti: 2.6.0 minimatch: 9.0.5 string-env-interpolation: 1.0.1 tslib: 2.8.1 @@ -8665,11 +8558,11 @@ snapshots: import-from-esm@2.0.0: dependencies: debug: 4.4.3(supports-color@8.1.1) - import-meta-resolve: 4.1.0 + import-meta-resolve: 4.2.0 transitivePeerDependencies: - supports-color - import-meta-resolve@4.1.0: {} + import-meta-resolve@4.2.0: {} import-modules@2.1.0: {} @@ -8680,7 +8573,7 @@ snapshots: indent-string@5.0.0: {} - index-to-position@1.1.0: {} + index-to-position@1.2.0: {} inflight@1.0.6: dependencies: @@ -8777,9 +8670,9 @@ snapshots: is-fullwidth-code-point@4.0.0: {} - is-fullwidth-code-point@5.0.0: + is-fullwidth-code-point@5.1.0: dependencies: - get-east-asian-width: 1.3.0 + get-east-asian-width: 1.4.0 is-generator-function@1.1.0: dependencies: @@ -8797,10 +8690,10 @@ snapshots: dependencies: is-extglob: 2.1.1 - is-immutable-type@5.0.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2): + is-immutable-type@5.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2): dependencies: - '@typescript-eslint/type-utils': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.36.0(jiti@2.5.1) + '@typescript-eslint/type-utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + eslint: 9.36.0(jiti@2.6.0) ts-api-utils: 2.1.0(typescript@5.9.2) ts-declaration-location: 1.0.7(typescript@5.9.2) typescript: 5.9.2 @@ -8928,7 +8821,7 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: '@babel/core': 7.28.4 - '@babel/parser': 7.28.3 + '@babel/parser': 7.28.4 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.7.2 @@ -8941,7 +8834,7 @@ snapshots: make-dir: 4.0.0 supports-color: 7.2.0 - istanbul-reports@3.1.7: + istanbul-reports@3.2.0: dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 @@ -8967,7 +8860,7 @@ snapshots: java-properties@1.0.2: {} - jiti@2.5.1: {} + jiti@2.6.0: {} js-tokens@4.0.0: {} @@ -8990,7 +8883,7 @@ snapshots: jsdoc-type-pratt-parser@5.1.1: {} - jsdoc-type-pratt-parser@5.9.0: {} + jsdoc-type-pratt-parser@5.9.1: {} jsdom@6.5.1: dependencies: @@ -9031,7 +8924,7 @@ snapshots: lodash: 4.17.21 minimist: 1.2.8 prettier: 3.6.2 - tinyglobby: 0.2.14 + tinyglobby: 0.2.15 json-schema-traverse@0.4.1: {} @@ -9113,7 +9006,7 @@ snapshots: eventemitter3: 5.0.1 log-update: 6.1.0 rfdc: 1.4.1 - wrap-ansi: 9.0.0 + wrap-ansi: 9.0.2 listr2@9.0.4: dependencies: @@ -9122,7 +9015,7 @@ snapshots: eventemitter3: 5.0.1 log-update: 6.1.0 rfdc: 1.4.1 - wrap-ansi: 9.0.0 + wrap-ansi: 9.0.2 load-json-file@4.0.0: dependencies: @@ -9177,11 +9070,11 @@ snapshots: log-update@6.1.0: dependencies: - ansi-escapes: 7.0.0 + ansi-escapes: 7.1.1 cli-cursor: 5.0.0 - slice-ansi: 7.1.0 - strip-ansi: 7.1.0 - wrap-ansi: 9.0.0 + slice-ansi: 7.1.2 + strip-ansi: 7.1.2 + wrap-ansi: 9.0.2 loose-envify@1.4.0: dependencies: @@ -9195,7 +9088,7 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@11.1.0: {} + lru-cache@11.2.2: {} lru-cache@5.1.1: dependencies: @@ -9235,9 +9128,9 @@ snapshots: marked-terminal@7.3.0(marked@15.0.12): dependencies: - ansi-escapes: 7.0.0 - ansi-regex: 6.1.0 - chalk: 5.5.0 + ansi-escapes: 7.1.1 + ansi-regex: 6.2.2 + chalk: 5.6.2 cli-highlight: 2.1.11 cli-table3: 0.6.5 marked: 15.0.12 @@ -9246,9 +9139,9 @@ snapshots: marked-terminal@7.3.0(marked@9.1.6): dependencies: - ansi-escapes: 7.0.0 - ansi-regex: 6.1.0 - chalk: 5.5.0 + ansi-escapes: 7.1.1 + ansi-regex: 6.2.2 + chalk: 5.6.2 cli-highlight: 2.1.11 cli-table3: 0.6.5 marked: 9.1.6 @@ -9286,7 +9179,7 @@ snapshots: dependencies: mime-db: 1.52.0 - mime@4.0.7: {} + mime@4.1.0: {} mimic-fn@4.0.0: {} @@ -9376,7 +9269,7 @@ snapshots: serialize-javascript: 6.0.2 strip-json-comments: 3.1.1 supports-color: 8.1.1 - workerpool: 9.3.3 + workerpool: 9.3.4 yargs: 17.7.2 yargs-parser: 21.1.1 yargs-unparser: 2.0.0 @@ -9445,7 +9338,7 @@ snapshots: - supports-color optional: true - node-releases@2.0.19: {} + node-releases@2.0.21: {} nopt@7.2.1: dependencies: @@ -9465,7 +9358,7 @@ snapshots: normalize-path@3.0.0: optional: true - normalize-url@8.0.2: {} + normalize-url@8.1.0: {} npm-run-path@5.3.0: dependencies: @@ -9538,7 +9431,7 @@ snapshots: open-editor@5.1.0: dependencies: - env-editor: 1.1.0 + env-editor: 1.3.0 execa: 9.6.0 line-column-path: 3.0.0 open: 10.2.0 @@ -9631,20 +9524,20 @@ snapshots: parse-json@4.0.0: dependencies: - error-ex: 1.3.2 + error-ex: 1.3.4 json-parse-better-errors: 1.0.2 parse-json@5.2.0: dependencies: '@babel/code-frame': 7.27.1 - error-ex: 1.3.2 + error-ex: 1.3.4 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 parse-json@8.3.0: dependencies: '@babel/code-frame': 7.27.1 - index-to-position: 1.1.0 + index-to-position: 1.2.0 type-fest: 4.41.0 parse-ms@4.0.0: {} @@ -9680,7 +9573,7 @@ snapshots: path-scurry@2.0.0: dependencies: - lru-cache: 11.1.0 + lru-cache: 11.2.2 minipass: 7.1.2 path-type@4.0.0: {} @@ -9722,7 +9615,7 @@ snapshots: prettier@3.6.2: {} - pretty-ms@9.2.0: + pretty-ms@9.3.0: dependencies: parse-ms: 4.0.0 @@ -9845,7 +9738,7 @@ snapshots: get-proto: 1.0.1 which-builtin-type: 1.2.1 - regenerate-unicode-properties@10.2.0: + regenerate-unicode-properties@10.2.2: dependencies: regenerate: 1.4.2 @@ -9867,14 +9760,14 @@ snapshots: gopd: 1.2.0 set-function-name: 2.0.2 - regexpu-core@6.2.0: + regexpu-core@6.4.0: dependencies: regenerate: 1.4.2 - regenerate-unicode-properties: 10.2.0 + regenerate-unicode-properties: 10.2.2 regjsgen: 0.8.0 - regjsparser: 0.12.0 + regjsparser: 0.13.0 unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.2.0 + unicode-match-property-value-ecmascript: 2.2.1 registry-auth-token@5.1.0: dependencies: @@ -9886,6 +9779,10 @@ snapshots: dependencies: jsesc: 3.0.2 + regjsparser@0.13.0: + dependencies: + jsesc: 3.1.0 + remove-trailing-separator@1.1.0: {} replace@1.2.2: @@ -9966,7 +9863,7 @@ snapshots: safe-stable-stringify: 2.5.0 semver-compare: 1.0.0 - run-applescript@7.0.0: {} + run-applescript@7.1.0: {} run-parallel@1.2.0: dependencies: @@ -10011,11 +9908,11 @@ snapshots: '@semantic-release/error': 4.0.0 '@semantic-release/github': 11.0.6(semantic-release@24.2.9(typescript@5.9.2)) '@semantic-release/npm': 12.0.2(semantic-release@24.2.9(typescript@5.9.2)) - '@semantic-release/release-notes-generator': 14.0.3(semantic-release@24.2.9(typescript@5.9.2)) + '@semantic-release/release-notes-generator': 14.1.0(semantic-release@24.2.9(typescript@5.9.2)) aggregate-error: 5.0.0 cosmiconfig: 9.0.0(typescript@5.9.2) debug: 4.4.3(supports-color@8.1.1) - env-ci: 11.1.1 + env-ci: 11.2.0 execa: 9.6.0 figures: 6.1.0 find-versions: 6.0.0 @@ -10136,13 +10033,13 @@ snapshots: slice-ansi@5.0.0: dependencies: - ansi-styles: 6.2.1 + ansi-styles: 6.2.3 is-fullwidth-code-point: 4.0.0 - slice-ansi@7.1.0: + slice-ansi@7.1.2: dependencies: - ansi-styles: 6.2.1 - is-fullwidth-code-point: 5.0.0 + ansi-styles: 6.2.3 + is-fullwidth-code-point: 5.1.0 smart-buffer@4.2.0: optional: true @@ -10241,18 +10138,18 @@ snapshots: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 string-width@7.2.0: dependencies: - emoji-regex: 10.4.0 - get-east-asian-width: 1.3.0 - strip-ansi: 7.1.0 + emoji-regex: 10.5.0 + get-east-asian-width: 1.4.0 + strip-ansi: 7.1.2 string-width@8.1.0: dependencies: - get-east-asian-width: 1.3.0 - strip-ansi: 7.1.0 + get-east-asian-width: 1.4.0 + strip-ansi: 7.1.2 string.prototype.includes@2.0.1: dependencies: @@ -10316,9 +10213,9 @@ snapshots: dependencies: ansi-regex: 5.0.1 - strip-ansi@7.1.0: + strip-ansi@7.1.2: dependencies: - ansi-regex: 6.1.0 + ansi-regex: 6.2.2 strip-bom@3.0.0: {} @@ -10428,12 +10325,12 @@ snapshots: tiny-invariant@1.3.3: {} - tinyglobby@0.2.14: + tinyglobby@0.2.15: dependencies: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 - tlds@1.259.0: {} + tlds@1.260.0: {} to-regex-range@5.0.1: dependencies: @@ -10522,13 +10419,13 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2): + typescript-eslint@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/parser': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/eslint-plugin': 8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/parser': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.2) - '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.36.0(jiti@2.5.1) + '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + eslint: 9.36.0(jiti@2.6.0) typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -10556,11 +10453,11 @@ snapshots: unicode-match-property-ecmascript@2.0.0: dependencies: unicode-canonical-property-names-ecmascript: 2.0.1 - unicode-property-aliases-ecmascript: 2.1.0 + unicode-property-aliases-ecmascript: 2.2.0 - unicode-match-property-value-ecmascript@2.2.0: {} + unicode-match-property-value-ecmascript@2.2.1: {} - unicode-property-aliases-ecmascript@2.1.0: {} + unicode-property-aliases-ecmascript@2.2.0: {} unicorn-magic@0.1.0: {} @@ -10612,9 +10509,9 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 - update-browserslist-db@1.1.3(browserslist@4.25.2): + update-browserslist-db@1.1.3(browserslist@4.26.2): dependencies: - browserslist: 4.25.2 + browserslist: 4.26.2 escalade: 3.2.0 picocolors: 1.1.1 @@ -10631,7 +10528,7 @@ snapshots: url-regex-safe@4.0.0(re2@1.20.9): dependencies: ip-regex: 4.3.0 - tlds: 1.259.0 + tlds: 1.260.0 optionalDependencies: re2: 1.20.9 @@ -10645,7 +10542,7 @@ snapshots: v8-to-istanbul@9.3.0: dependencies: - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 @@ -10726,7 +10623,7 @@ snapshots: wordwrap@1.0.0: {} - workerpool@9.3.3: {} + workerpool@9.3.4: {} wrap-ansi@6.2.0: dependencies: @@ -10742,15 +10639,15 @@ snapshots: wrap-ansi@8.1.0: dependencies: - ansi-styles: 6.2.1 + ansi-styles: 6.2.3 string-width: 5.1.2 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 - wrap-ansi@9.0.0: + wrap-ansi@9.0.2: dependencies: - ansi-styles: 6.2.1 + ansi-styles: 6.2.3 string-width: 7.2.0 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 wrappy@1.0.2: {} @@ -10834,4 +10731,4 @@ snapshots: yocto-queue@0.1.0: {} - yoctocolors@2.1.1: {} + yoctocolors@2.1.2: {} From f0515be79b21d848cf9f19dc458fc6d0e991a87d Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sun, 28 Sep 2025 04:06:35 +0800 Subject: [PATCH 128/189] feat(`check-tag-names`): add `inlineTags` option with default inline tag checking --- .README/rules/check-tag-names.md | 12 ++++++- docs/rules/check-tag-names.md | 34 ++++++++++++++++++- src/iterateJsdoc.js | 13 ++++++++ src/jsdocUtils.js | 39 ++++++++++++---------- src/rules.d.ts | 6 ++++ src/rules/checkTagNames.js | 19 +++++++++++ test/rules/assertions/checkTagNames.js | 46 ++++++++++++++++++++++++++ 7 files changed, 150 insertions(+), 19 deletions(-) diff --git a/.README/rules/check-tag-names.md b/.README/rules/check-tag-names.md index aa0002b3a..74e5be84a 100644 --- a/.README/rules/check-tag-names.md +++ b/.README/rules/check-tag-names.md @@ -192,6 +192,16 @@ tag to `false`: } ``` +Also checks for unknown inline tags, with the following being permitted by default +(see the `inlineTags` option): + +``` +link +linkcode +linkplain +tutorial +``` + ## Fixer Auto-removes types that are redundant with the [`typed` option](#typed). @@ -207,7 +217,7 @@ Auto-removes types that are redundant with the [`typed` option](#typed). |Context|everywhere| |Tags|N/A| |Recommended|true| -|Options|`definedTags`, `enableFixer`, `jsxTags`, `typed`| +|Options|`definedTags`, `enableFixer`, `inlineTags`, `jsxTags`, `typed`| |Settings|`tagNamePreference`, `mode`| ## Failing examples diff --git a/docs/rules/check-tag-names.md b/docs/rules/check-tag-names.md index 45197d9aa..0b577a4b8 100644 --- a/docs/rules/check-tag-names.md +++ b/docs/rules/check-tag-names.md @@ -6,6 +6,7 @@ * [Options](#user-content-check-tag-names-options) * [`definedTags`](#user-content-check-tag-names-options-definedtags) * [`enableFixer`](#user-content-check-tag-names-options-enablefixer) + * [`inlineTags`](#user-content-check-tag-names-options-inlinetags) * [`jsxTags`](#user-content-check-tag-names-options-jsxtags) * [`typed`](#user-content-check-tag-names-options-typed) * [Context and settings](#user-content-check-tag-names-context-and-settings) @@ -203,6 +204,16 @@ tag to `false`: } ``` +Also checks for unknown inline tags, with the following being permitted by default +(see the `inlineTags` option): + +``` +link +linkcode +linkplain +tutorial +``` + ## Fixer @@ -232,6 +243,13 @@ The format is as follows: ### enableFixer Set to `false` to disable auto-removal of types that are redundant with the [`typed` option](#user-content-typed). + + +### inlineTags + +List of tags to allow inline. + +Defaults to array of `'link', 'linkcode', 'linkplain', 'tutorial'` ### jsxTags @@ -313,7 +331,7 @@ this |Context|everywhere| |Tags|N/A| |Recommended|true| -|Options|`definedTags`, `enableFixer`, `jsxTags`, `typed`| +|Options|`definedTags`, `enableFixer`, `inlineTags`, `jsxTags`, `typed`| |Settings|`tagNamePreference`, `mode`| @@ -765,6 +783,13 @@ function quux () { } // Settings: {"jsdoc":{"tagNamePreference":{"todo":{"message":"Please don't use todo"}}}} // Message: Please don't use todo + +/** + * An {@inline sth} tag in the description and {@another} with a {@link}. + * @param {SomeType} name And an {@inlineTag} inside a tag description. + * @param {AnotherType} anotherName And yet {@another} + */ +// Message: Invalid JSDoc inline tag name "inline" ```` @@ -1121,5 +1146,12 @@ interface WebTwain { * A comment related to the module */ // "jsdoc/check-tag-names": ["error"|"warn", {"typed":true}] + +/** + * An {@inline sth} tag in the description and {@another} with a {@link}. + * @param {SomeType} name And an {@inlineTag} inside a tag description. + * @param {AnotherType} anotherName And yet {@another} + */ +// "jsdoc/check-tag-names": ["error"|"warn", {"inlineTags":["inline","another","inlineTag","link"]}] ```` diff --git a/src/iterateJsdoc.js b/src/iterateJsdoc.js index 00e8dc748..11b1235f7 100644 --- a/src/iterateJsdoc.js +++ b/src/iterateJsdoc.js @@ -436,6 +436,14 @@ import esquery from 'esquery'; * import('@es-joy/jsdoccomment').JsdocInlineTagNoType)[]} */ +/** + * @callback getInlineTags + * @returns {(import('comment-parser').Spec| + * import('@es-joy/jsdoccomment').JsdocInlineTagNoType & { + * line?: number | undefined; column?: number | undefined; + * })[]} + */ + /** * @callback GetTagsByType * @param {import('comment-parser').Spec[]} tags @@ -533,6 +541,7 @@ import esquery from 'esquery'; * getPresentTags: GetPresentTags, * filterTags: FilterTags, * filterAllTags: FilterAllTags, + * getInlineTags: getInlineTags, * getTagsByType: GetTagsByType, * hasOptionTag: HasOptionTag, * getClassNode: GetClassNode, @@ -1641,6 +1650,10 @@ const getUtils = ( }); }; + utils.getInlineTags = () => { + return jsdocUtils.getInlineTags(jsdoc); + }; + /** @type {GetTagsByType} */ utils.getTagsByType = (tags) => { return jsdocUtils.getTagsByType(context, mode, tags); diff --git a/src/jsdocUtils.js b/src/jsdocUtils.js index 49d21a517..a9dc75bcc 100644 --- a/src/jsdocUtils.js +++ b/src/jsdocUtils.js @@ -836,14 +836,15 @@ const forEachPreferredTag = ( }; /** - * Get all tags, inline tags and inline tags in tags + * Get all inline tags and inline tags in tags * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc * @returns {(import('comment-parser').Spec| - * import('@es-joy/jsdoccomment').JsdocInlineTagNoType)[]} + * import('@es-joy/jsdoccomment').JsdocInlineTagNoType & { + * line?: number | undefined; column?: number | undefined; + * })[]} */ -const getAllTags = (jsdoc) => { +const getInlineTags = (jsdoc) => { return [ - ...jsdoc.tags, ...jsdoc.inlineTags.map((inlineTag) => { // Tags don't have source or line numbers, so add before returning let line = -1; @@ -863,18 +864,6 @@ const getAllTags = (jsdoc) => { return inlineTag; }), ...jsdoc.tags.flatMap((tag) => { - let tagBegins = -1; - for (const { - tokens: { - tag: tg, - }, - } of jsdoc.source) { - tagBegins++; - if (tg) { - break; - } - } - for (const inlineTag of tag.inlineTags) { /** @type {import('./iterateJsdoc.js').Integer} */ let line = 0; @@ -890,7 +879,7 @@ const getAllTags = (jsdoc) => { } } - inlineTag.line = tagBegins + line - 1; + inlineTag.line = line; } return ( @@ -906,6 +895,21 @@ const getAllTags = (jsdoc) => { ]; }; +/** + * Get all tags, inline tags and inline tags in tags + * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc + * @returns {(import('comment-parser').Spec| + * import('@es-joy/jsdoccomment').JsdocInlineTagNoType & { + * line?: number | undefined; column?: number | undefined; + * })[]} + */ +const getAllTags = (jsdoc) => { + return [ + ...jsdoc.tags, + ...getInlineTags(jsdoc), + ]; +}; + /** * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc * @param {string[]} targetTagNames @@ -1853,6 +1857,7 @@ export { getContextObject, getFunctionParameterNames, getIndent, + getInlineTags, getJsdocTagsDeep, getPreferredTagName, getPreferredTagNameSimple, diff --git a/src/rules.d.ts b/src/rules.d.ts index 00fe7c726..c98c83687 100644 --- a/src/rules.d.ts +++ b/src/rules.d.ts @@ -261,6 +261,12 @@ export interface Rules { * Set to `false` to disable auto-removal of types that are redundant with the [`typed` option](#typed). */ enableFixer?: boolean; + /** + * List of tags to allow inline. + * + * Defaults to array of `'link', 'linkcode', 'linkplain', 'tutorial'` + */ + inlineTags?: string[]; /** * If this is set to `true`, all of the following tags used to control JSX output are allowed: * diff --git a/src/rules/checkTagNames.js b/src/rules/checkTagNames.js index 46ad74a7d..461028ca0 100644 --- a/src/rules/checkTagNames.js +++ b/src/rules/checkTagNames.js @@ -75,11 +75,15 @@ export default iterateJsdoc(({ * @type {{ * definedTags: string[], * enableFixer: boolean, + * inlineTags: string[], * jsxTags: boolean, * typed: boolean }} */ { definedTags = [], enableFixer = true, + inlineTags = [ + 'link', 'linkcode', 'linkplain', 'tutorial', + ], jsxTags, typed, } = context.options[0] || {}; @@ -278,6 +282,12 @@ export default iterateJsdoc(({ report(`Invalid JSDoc tag name "${tagName}".`, null, jsdocTag); } } + + for (const inlineTag of utils.getInlineTags()) { + if (!inlineTags.includes(inlineTag.tag)) { + report(`Invalid JSDoc inline tag name "${inlineTag.tag}"`, null, inlineTag); + } + } }, { iterateAllJsdocs: true, meta: { @@ -308,6 +318,15 @@ The format is as follows: description: 'Set to `false` to disable auto-removal of types that are redundant with the [`typed` option](#typed).', type: 'boolean', }, + inlineTags: { + description: `List of tags to allow inline. + +Defaults to array of \`'link', 'linkcode', 'linkplain', 'tutorial'\``, + items: { + type: 'string', + }, + type: 'array', + }, jsxTags: { description: `If this is set to \`true\`, all of the following tags used to control JSX output are allowed: diff --git a/test/rules/assertions/checkTagNames.js b/test/rules/assertions/checkTagNames.js index f35e7bd3d..bc6837839 100644 --- a/test/rules/assertions/checkTagNames.js +++ b/test/rules/assertions/checkTagNames.js @@ -1029,6 +1029,33 @@ export default /** @type {import('../index.js').TestCases} */ ({ }, }, }, + { + code: ` + /** + * An {@inline sth} tag in the description and {@another} with a {@link}. + * @param {SomeType} name And an {@inlineTag} inside a tag description. + * @param {AnotherType} anotherName And yet {@another} + */ + `, + errors: [ + { + line: 3, + message: 'Invalid JSDoc inline tag name "inline"', + }, + { + line: 3, + message: 'Invalid JSDoc inline tag name "another"', + }, + { + line: 4, + message: 'Invalid JSDoc inline tag name "inlineTag"', + }, + { + line: 5, + message: 'Invalid JSDoc inline tag name "another"', + }, + ], + }, ], valid: [ { @@ -1453,5 +1480,24 @@ export default /** @type {import('../index.js').TestCases} */ ({ }, ], }, + { + code: ` + /** + * An {@inline sth} tag in the description and {@another} with a {@link}. + * @param {SomeType} name And an {@inlineTag} inside a tag description. + * @param {AnotherType} anotherName And yet {@another} + */ + `, + options: [ + { + inlineTags: [ + 'inline', + 'another', + 'inlineTag', + 'link', + ], + }, + ], + }, ], }); From c3cc1455bb8392480da9397fb48b178010033306 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sun, 28 Sep 2025 04:27:00 +0800 Subject: [PATCH 129/189] docs: add reference in README --- .README/README.md | 1 + README.md | 1 + 2 files changed, 2 insertions(+) diff --git a/.README/README.md b/.README/README.md index 88cf21904..478f0df39 100644 --- a/.README/README.md +++ b/.README/README.md @@ -266,6 +266,7 @@ Finally, enable all of the rules that you would like to use. "jsdoc/require-returns-type": 1, // Recommended in non-TS configs "jsdoc/require-returns": 1, // Recommended "jsdoc/require-template": 1, + "jsdoc/require-template-description": 1, "jsdoc/require-throws": 1, "jsdoc/require-throws-description": 1, "jsdoc/require-throws-type": 1, // Recommended diff --git a/README.md b/README.md index 998566615..96652fff4 100644 --- a/README.md +++ b/README.md @@ -293,6 +293,7 @@ Finally, enable all of the rules that you would like to use. "jsdoc/require-returns-type": 1, // Recommended in non-TS configs "jsdoc/require-returns": 1, // Recommended "jsdoc/require-template": 1, + "jsdoc/require-template-description": 1, "jsdoc/require-throws": 1, "jsdoc/require-throws-description": 1, "jsdoc/require-throws-type": 1, // Recommended From f72ac1a57470527f1c4e0c7617f07f072bfbd6ab Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sun, 28 Sep 2025 11:51:09 +0800 Subject: [PATCH 130/189] fix(`no-undefined-types`): avoid param and property tags from being treated as type-defining Also: - chore: update devDeps. --- docs/rules/no-undefined-types.md | 19 ++++++ package.json | 8 +-- pnpm-lock.yaml | 71 +++++++++-------------- src/index-esm.js | 2 - src/index.js | 2 - src/rules/noUndefinedTypes.js | 8 ++- test/index.js | 2 - test/rules/assertions/noUndefinedTypes.js | 25 ++++++++ 8 files changed, 82 insertions(+), 55 deletions(-) diff --git a/docs/rules/no-undefined-types.md b/docs/rules/no-undefined-types.md index bf45b23ae..94bb373b8 100644 --- a/docs/rules/no-undefined-types.md +++ b/docs/rules/no-undefined-types.md @@ -1047,5 +1047,24 @@ function a (b, c) {} /** @type {SomeType} */ // "jsdoc/no-undefined-types": ["error"|"warn", {"checkUsedTypedefs":true}] + +/** @typedef {string} MyOwnType */ + +/** + * @template T + * @param {(element: MyOwnType) => T} cb + * @returns {void} + */ +const getValue = () => {}; + +/** @typedef {string} MyOwnType */ +/** @typedef {new () => void} CustomElementConstructor */ + +/** + * @param {`${MyOwnType}-${string}`} tagName + * @param {CustomElementConstructor} component + */ +const defineCustomElement = (tagName, component) => { +}; ```` diff --git a/package.json b/package.json index 7b1cfe047..0731671cb 100644 --- a/package.json +++ b/package.json @@ -27,8 +27,8 @@ "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-transform-flow-strip-types": "^7.27.1", "@babel/preset-env": "^7.28.3", - "@es-joy/escodegen": "^3.5.1", - "@es-joy/jsdoc-eslint-parser": "^0.23.0", + "@es-joy/escodegen": "^4.0.3", + "@es-joy/jsdoc-eslint-parser": "^0.24.0", "@eslint/core": "^0.16.0", "@hkdobrev/run-if-changed": "^0.6.3", "@semantic-release/commit-analyzer": "^13.0.1", @@ -50,7 +50,7 @@ "babel-plugin-transform-import-meta": "^2.3.3", "c8": "^10.1.3", "camelcase": "^8.0.0", - "chai": "^6.0.1", + "chai": "^6.2.0", "decamelize": "^6.0.1", "eslint": "9.36.0", "eslint-config-canonical": "^45.0.0", @@ -58,7 +58,7 @@ "glob": "^11.0.3", "globals": "^16.4.0", "husky": "^9.1.7", - "jsdoc-type-pratt-parser": "^5.9.1", + "jsdoc-type-pratt-parser": "^5.9.2", "json-schema": "^0.4.0", "json-schema-to-typescript": "^15.0.4", "lint-staged": "^16.2.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 227109cd8..d16476fcc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -70,11 +70,11 @@ importers: specifier: ^7.28.3 version: 7.28.3(@babel/core@7.28.4) '@es-joy/escodegen': - specifier: ^3.5.1 - version: 3.5.1 + specifier: ^4.0.3 + version: 4.0.3 '@es-joy/jsdoc-eslint-parser': - specifier: ^0.23.0 - version: 0.23.0(jiti@2.6.0) + specifier: ^0.24.0 + version: 0.24.0(jiti@2.6.0) '@eslint/core': specifier: ^0.16.0 version: 0.16.0 @@ -139,8 +139,8 @@ importers: specifier: ^8.0.0 version: 8.0.0 chai: - specifier: ^6.0.1 - version: 6.0.1 + specifier: ^6.2.0 + version: 6.2.0 decamelize: specifier: ^6.0.1 version: 6.0.1 @@ -163,8 +163,8 @@ importers: specifier: ^9.1.7 version: 9.1.7 jsdoc-type-pratt-parser: - specifier: ^5.9.1 - version: 5.9.1 + specifier: ^5.9.2 + version: 5.9.2 json-schema: specifier: ^0.4.0 version: 0.4.0 @@ -768,27 +768,23 @@ packages: resolution: {integrity: sha512-CsFmA3u3c2QoLDTfEpGr4t25fjMU31nyvse7IzWTvb0ZycuPjMjb0fjlheh+PbhBYb9YLugnT2uY6Mwcg1o+Zg==} engines: {node: '>=18.0.0'} - '@es-joy/escodegen@3.5.1': - resolution: {integrity: sha512-+ZFIB5hRBEwmbVc6LLb9zIgR5aNkluUHsqg2VfDLYf3aeDmF8uA7q614zKhwc7n0nh9Qh9XnYfzYgJNoyWSveg==} + '@es-joy/escodegen@4.0.3': + resolution: {integrity: sha512-cX8TsWfGHIyVpLK74fY05RSZ/s6NsIPo18C8oD5hR49TXajotOR/fk59eI08sWdnUsrXkNeb97ShUJvu3osAZg==} engines: {node: '>=6.0'} hasBin: true - '@es-joy/estraverse@6.0.0': - resolution: {integrity: sha512-lk61BuRPDm3KCm2x8Y629+szoRuChn83kG8ll+CniQM07u5dRVzQRkBFnn/hCdL+Urdsj4/6qeOJWr+QRRkKgw==} + '@es-joy/estraverse@7.1.1': + resolution: {integrity: sha512-h2d737iS0LFAqypZOmXizu54qAbHofI/RpD30Zom03O6BCXKHuFevWKPcGarZbGq82h7qSBb5G6kLdhTMO+caw==} engines: {node: '>=4.0'} - '@es-joy/jsdoc-eslint-parser@0.23.0': - resolution: {integrity: sha512-ttZajF3WNK6hgGkgssGFo4JBx4TO57G6VXge6yYVu4/Gbf2K1qlP6+TU0hVJsmmw9dFuchVhqDSPjpmnVBIxdA==} + '@es-joy/jsdoc-eslint-parser@0.24.0': + resolution: {integrity: sha512-c17hDO3+KTmwxd401yI4UjSdZ4CpvBDbYgtRSSQ3F8+VEY1KfBpQNhUV5YmtK+e8rFVbmmMV4ay3YVIsWwpU1g==} engines: {node: '>=18.0.0'} '@es-joy/jsdoccomment@0.50.2': resolution: {integrity: sha512-YAdE/IJSpwbOTiaURNCKECdAwqrJuFiZhylmesBcIRawtYKnBR2wxPhoIewMg+Yu+QuYvHfJNReWpoxGBKOChA==} engines: {node: '>=18'} - '@es-joy/jsdoccomment@0.56.0': - resolution: {integrity: sha512-c6EW+aA1w2rjqOMjbL93nZlwxp6c1Ln06vTYs5FjRRhmJXK8V/OrSXdT+pUr4aRYgjCgu8/OkiZr0tzeVrRSbw==} - engines: {node: '>=20.11.0'} - '@es-joy/jsdoccomment@0.62.0': resolution: {integrity: sha512-yWi6sm7INEwnfS7IJvE0dU+RTrwzLPFcY7e7eGpu/l5Q9lWfQ2ROwZ0qVnc242jw2TUPsfHX3XMIISkGBv57RQ==} engines: {node: '>=20.11.0'} @@ -1729,8 +1725,8 @@ packages: caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} - chai@6.0.1: - resolution: {integrity: sha512-/JOoU2//6p5vCXh00FpNgtlw0LjvhGttaWc+y7wpW9yjBm3ys0dI8tSKZxIOgNruz5J0RleccatSIC3uxEZP0g==} + chai@6.2.0: + resolution: {integrity: sha512-aUTnJc/JipRzJrNADXVvpVqi6CO0dn3nx4EVPxijri+fj3LUUDyZQOgVeW54Ob3Y1Xh9Iz8f+CgaCl8v0mn9bA==} engines: {node: '>=18'} chalk@2.4.2: @@ -3344,12 +3340,8 @@ packages: resolution: {integrity: sha512-iZ8Bdb84lWRuGHamRXFyML07r21pcwBrLkHEuHgEY5UbCouBwv7ECknDRKzsQIXMiqpPymqtIf8TC/shYKB5rw==} engines: {node: '>=12.0.0'} - jsdoc-type-pratt-parser@5.1.1: - resolution: {integrity: sha512-DYYlVP1fe4QBMh2xTIs20/YeTz2GYVbWAEZweHSZD+qQ/Cx2d5RShuhhsdk64eTjNq0FeVnteP/qVOgaywSRbg==} - engines: {node: '>=12.0.0'} - - jsdoc-type-pratt-parser@5.9.1: - resolution: {integrity: sha512-j0HZC9VHVp5bohVV3ZBwUC56cZZ86oj8SmesgBH1H+VEEChNlw5tgEm2b8ecsp3WnKtTWCXGYWSWwyqkRT3PxQ==} + jsdoc-type-pratt-parser@5.9.2: + resolution: {integrity: sha512-TYzkACp/wPvDJLRY7qpHXtrhgwoAaojIOnLaaVNi+AbPU2u1kkjfKd9hXXTq0qSAGsyYXvwUXt99h9I5iCmjjw==} engines: {node: '>=12.0.0'} jsdom@6.5.1: @@ -5840,22 +5832,23 @@ snapshots: '@whatwg-node/promise-helpers': 1.3.2 tslib: 2.8.1 - '@es-joy/escodegen@3.5.1': + '@es-joy/escodegen@4.0.3': dependencies: - '@es-joy/estraverse': 6.0.0 + '@es-joy/estraverse': 7.1.1 + '@es-joy/jsdoccomment': 0.62.0 esprima: 4.0.1 esutils: 2.0.3 optionator: 0.9.4 optionalDependencies: source-map: 0.7.6 - '@es-joy/estraverse@6.0.0': {} + '@es-joy/estraverse@7.1.1': {} - '@es-joy/jsdoc-eslint-parser@0.23.0(jiti@2.6.0)': + '@es-joy/jsdoc-eslint-parser@0.24.0(jiti@2.6.0)': dependencies: '@babel/core': 7.28.4 '@babel/eslint-parser': 7.28.4(@babel/core@7.28.4)(eslint@9.36.0(jiti@2.6.0)) - '@es-joy/jsdoccomment': 0.56.0 + '@es-joy/jsdoccomment': 0.62.0 '@typescript-eslint/parser': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) eslint: 9.36.0(jiti@2.6.0) esquery: 1.6.0 @@ -5872,21 +5865,13 @@ snapshots: esquery: 1.6.0 jsdoc-type-pratt-parser: 4.1.0 - '@es-joy/jsdoccomment@0.56.0': - dependencies: - '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.44.1 - comment-parser: 1.4.1 - esquery: 1.6.0 - jsdoc-type-pratt-parser: 5.1.1 - '@es-joy/jsdoccomment@0.62.0': dependencies: '@types/estree': 1.0.8 '@typescript-eslint/types': 8.44.1 comment-parser: 1.4.1 esquery: 1.6.0 - jsdoc-type-pratt-parser: 5.9.1 + jsdoc-type-pratt-parser: 5.9.2 '@eslint-community/eslint-utils@4.9.0(eslint@9.36.0(jiti@2.6.0))': dependencies: @@ -7019,7 +7004,7 @@ snapshots: caseless@0.12.0: {} - chai@6.0.1: {} + chai@6.2.0: {} chalk@2.4.2: dependencies: @@ -8881,9 +8866,7 @@ snapshots: jsdoc-type-pratt-parser@4.8.0: {} - jsdoc-type-pratt-parser@5.1.1: {} - - jsdoc-type-pratt-parser@5.9.1: {} + jsdoc-type-pratt-parser@5.9.2: {} jsdom@6.5.1: dependencies: diff --git a/src/index-esm.js b/src/index-esm.js index 09e47db9a..148cdd74c 100644 --- a/src/index-esm.js +++ b/src/index-esm.js @@ -16,7 +16,6 @@ import { export default index; // END REPLACE -/* eslint-disable jsdoc/valid-types -- Bug */ /** * @type {(( * cfg?: import('eslint').Linter.Config & { @@ -54,7 +53,6 @@ export default index; * ) => import('eslint').Linter.Config)} */ export const jsdoc = function (cfg) { - /* eslint-enable jsdoc/valid-types -- Bug */ /** @type {import('eslint').Linter.Config} */ let outputConfig = { plugins: { diff --git a/src/index.js b/src/index.js index 7389958af..b2670340c 100644 --- a/src/index.js +++ b/src/index.js @@ -706,7 +706,6 @@ index.configs['flat/recommended-mixed'] = [ export default index; -/* eslint-disable jsdoc/valid-types -- Bug */ /** * @type {(( * cfg?: import('eslint').Linter.Config & { @@ -744,7 +743,6 @@ export default index; * ) => import('eslint').Linter.Config)} */ export const jsdoc = function (cfg) { - /* eslint-enable jsdoc/valid-types -- Bug */ /** @type {import('eslint').Linter.Config} */ let outputConfig = { plugins: { diff --git a/src/rules/noUndefinedTypes.js b/src/rules/noUndefinedTypes.js index 8ba892379..acd08b6fd 100644 --- a/src/rules/noUndefinedTypes.js +++ b/src/rules/noUndefinedTypes.js @@ -139,7 +139,13 @@ export default iterateJsdoc(({ return doc.tags.filter(({ tag, }) => { - return utils.isNamepathDefiningTag(tag); + return utils.isNamepathDefiningTag(tag) && ![ + 'arg', + 'argument', + 'param', + 'prop', + 'property', + ].includes(tag); }); }); diff --git a/test/index.js b/test/index.js index 4de54efa8..3d36ac89a 100644 --- a/test/index.js +++ b/test/index.js @@ -82,9 +82,7 @@ describe('jsdoc()', () => { }); it('Builds simple plugins config with rules', () => { - /* eslint-disable jsdoc/valid-types -- Bug */ const rules = /** @type {{[key in keyof import('../src/rules.d.ts').Rules]?: import('eslint').Linter.RuleEntry}} */ ({ - /* eslint-enable jsdoc/valid-types -- Bug */ 'jsdoc/check-alignment': [ 'error', { diff --git a/test/rules/assertions/noUndefinedTypes.js b/test/rules/assertions/noUndefinedTypes.js index 2c9517cea..20abd7e8c 100644 --- a/test/rules/assertions/noUndefinedTypes.js +++ b/test/rules/assertions/noUndefinedTypes.js @@ -1801,5 +1801,30 @@ export default /** @type {import('../index.js').TestCases} */ ({ }, ], }, + { + code: ` + /** @typedef {string} MyOwnType */ + + /** + * @template T + * @param {(element: MyOwnType) => T} cb + * @returns {void} + */ + const getValue = () => {}; + `, + }, + { + code: ` + /** @typedef {string} MyOwnType */ + /** @typedef {new () => void} CustomElementConstructor */ + + /** + * @param {\`\${MyOwnType}-\${string}\`} tagName + * @param {CustomElementConstructor} component + */ + const defineCustomElement = (tagName, component) => { + }; + `, + }, ], }); From 7a6b7db123672d7c65004e5b8c8f9d3cab16bd64 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Wed, 1 Oct 2025 03:00:57 +0900 Subject: [PATCH 131/189] feat(`escape-inline-tags`): add new rule (#1547) Also: - chore: update jsdoccomment and devDeps. - docs: improve linebreaks Now parses identifiers sans hyphens and avoiding treating NaN and Infinity as numbers --- .README/README.md | 1 + .README/rules/escape-inline-tags.md | 34 ++ README.md | 2 + docs/rules/check-line-alignment.md | 8 + docs/rules/check-param-names.md | 7 + docs/rules/check-tag-names.md | 4 + docs/rules/check-types.md | 4 + docs/rules/check-values.md | 3 + docs/rules/convert-to-jsdoc-comments.md | 4 + docs/rules/empty-tags.md | 1 - docs/rules/escape-inline-tags.md | 204 +++++++++ docs/rules/informative-docs.md | 1 - docs/rules/match-description.md | 3 + docs/rules/match-name.md | 6 + docs/rules/multiline-blocks.md | 5 + docs/rules/no-defaults.md | 1 + docs/rules/no-multi-asterisks.md | 2 + docs/rules/no-types.md | 1 - docs/rules/no-undefined-types.md | 3 + docs/rules/prefer-import-tag.md | 2 + docs/rules/require-asterisk-prefix.md | 2 + .../require-description-complete-sentence.md | 3 +- docs/rules/require-description.md | 5 + docs/rules/require-example.md | 6 + docs/rules/require-file-overview.md | 2 - ...require-hyphen-before-param-description.md | 2 +- docs/rules/require-jsdoc.md | 16 + docs/rules/require-param-description.md | 2 + docs/rules/require-param-name.md | 1 - docs/rules/require-param-type.md | 2 + docs/rules/require-param.md | 10 + docs/rules/require-returns-check.md | 2 + docs/rules/require-returns.md | 8 +- docs/rules/require-template.md | 2 +- docs/rules/require-throws.md | 1 + docs/rules/require-yields-check.md | 2 + docs/rules/require-yields.md | 6 + docs/rules/sort-tags.md | 4 + docs/rules/tag-lines.md | 5 + docs/rules/text-escaping.md | 1 + docs/rules/type-formatting.md | 11 + package.json | 14 +- pnpm-lock.yaml | 314 ++++++++++--- src/bin/generateDocs.js | 13 +- src/index-cjs.js | 4 + src/index.js | 4 + src/rules.d.ts | 62 ++- src/rules/checkLineAlignment.js | 3 +- src/rules/convertToJsdocComments.js | 6 +- src/rules/emptyTags.js | 3 +- src/rules/escapeInlineTags.js | 189 ++++++++ src/rules/informativeDocs.js | 9 +- src/rules/linesBeforeBlock.js | 12 +- src/rules/matchDescription.js | 6 +- src/rules/matchName.js | 3 +- src/rules/multilineBlocks.js | 9 +- src/rules/noBadBlocks.js | 3 +- src/rules/noTypes.js | 3 +- src/rules/requireAsteriskPrefix.js | 3 +- .../requireDescriptionCompleteSentence.js | 3 +- src/rules/requireFileOverview.js | 4 +- .../requireHyphenBeforeParamDescription.js | 3 +- src/rules/requireJsdoc.js | 9 +- src/rules/requireParam.js | 18 +- src/rules/requireParamName.js | 3 +- src/rules/requireReturns.js | 3 +- src/rules/requireTemplate.js | 3 +- src/rules/sortTags.js | 3 +- test/rules/assertions/checkAlignment.js | 6 +- test/rules/assertions/escapeInlineTags.js | 415 ++++++++++++++++++ test/rules/ruleNames.json | 1 + 71 files changed, 1310 insertions(+), 210 deletions(-) create mode 100644 .README/rules/escape-inline-tags.md create mode 100644 docs/rules/escape-inline-tags.md create mode 100644 src/rules/escapeInlineTags.js create mode 100644 test/rules/assertions/escapeInlineTags.js diff --git a/.README/README.md b/.README/README.md index 478f0df39..5322cae4b 100644 --- a/.README/README.md +++ b/.README/README.md @@ -227,6 +227,7 @@ Finally, enable all of the rules that you would like to use. "jsdoc/check-values": 1, // Recommended "jsdoc/convert-to-jsdoc-comments": 1, "jsdoc/empty-tags": 1, // Recommended + "jsdoc/escape-inline-tags": 1, // Recommended for TS configs "jsdoc/implements-on-classes": 1, // Recommended "jsdoc/imports-as-dependencies": 1, "jsdoc/informative-docs": 1, diff --git a/.README/rules/escape-inline-tags.md b/.README/rules/escape-inline-tags.md new file mode 100644 index 000000000..b0b04423e --- /dev/null +++ b/.README/rules/escape-inline-tags.md @@ -0,0 +1,34 @@ +# `escape-inline-tags` + +Reports use of JSDoc tags in non-tag positions (in the default "typescript" mode). + +Note that while the JSDoc standard refers to inline tags as those being surrounded +by curly brackets, such as those in the form `{@link https://example.com}`, for the +purposes of this rule, we are referring to inline tags as a simple reference to +tags such as `@param` outside of the normal location of a tag and which may need to +be wrapped in `{}` to be proper inline JSDoc or need to be escaped with `\` or +wrapped with ` to be normal text. E.g. + +```js +/** Supports shorthands such as `@yearly` to simplify setup. */ +``` + +## Options + +{"gitdown": "options"} + +||| +|---|---| +|Context|everywhere| +|Tags|``| +|Recommended|true (unless `mode` is changed away from "typescript")| +|Settings|`mode`| +|Options|`allowedInlineTags`, `enableFixer`, `fixType`| + +## Failing examples + + + +## Passing examples + + diff --git a/README.md b/README.md index 96652fff4..5d0c06dd4 100644 --- a/README.md +++ b/README.md @@ -254,6 +254,7 @@ Finally, enable all of the rules that you would like to use. "jsdoc/check-values": 1, // Recommended "jsdoc/convert-to-jsdoc-comments": 1, "jsdoc/empty-tags": 1, // Recommended + "jsdoc/escape-inline-tags": 1, // Recommended for TS configs "jsdoc/implements-on-classes": 1, // Recommended "jsdoc/imports-as-dependencies": 1, "jsdoc/informative-docs": 1, @@ -442,6 +443,7 @@ non-default-recommended fixer). |:heavy_check_mark:|| [check-values](./docs/rules/check-values.md#readme) | This rule checks the values for a handful of tags: `@version`, `@since`, `@license` and `@author`. | ||:wrench:| [convert-to-jsdoc-comments](./docs/rules/convert-to-jsdoc-comments.md#readme) | Converts non-JSDoc comments preceding or following nodes into JSDoc ones | |:heavy_check_mark:|:wrench:| [empty-tags](./docs/rules/empty-tags.md#readme) | Checks tags that are expected to be empty (e.g., `@abstract` or `@async`), reporting if they have content | +|:heavy_check_mark:|:wrench:| [escape-inline-tags](./docs/rules/escape-inline-tags.md#readme) | Reports use of JSDoc tags in non-tag positions (in the default "typescript" mode). | |:heavy_check_mark:|| [implements-on-classes](./docs/rules/implements-on-classes.md#readme) | Prohibits use of `@implements` on non-constructor functions (to enforce the tag only being used on classes/constructors). | ||| [imports-as-dependencies](./docs/rules/imports-as-dependencies.md#readme) | Reports if JSDoc `import()` statements point to a package which is not listed in `dependencies` or `devDependencies` | ||| [informative-docs](./docs/rules/informative-docs.md#readme) | This rule reports doc comments that only restate their attached name. | diff --git a/docs/rules/check-line-alignment.md b/docs/rules/check-line-alignment.md index 8e7368d90..08f2b11c9 100644 --- a/docs/rules/check-line-alignment.md +++ b/docs/rules/check-line-alignment.md @@ -56,43 +56,51 @@ If a spacing is not defined, it defaults to one. #### postDelimiter Affects spacing after the asterisk (e.g., `* @param`) + #### postHyphen Affects spacing after any hyphens in the description (e.g., `* @param {someType} name - A description`) + #### postName Affects spacing after the name (e.g., `* @param {someType} name `) + #### postTag Affects spacing after the tag (e.g., `* @param `) + #### postType Affects spacing after the type (e.g., `* @param {someType} `) + ### disableWrapIndent Disables `wrapIndent`; existing wrap indentation is preserved without changes. + ### preserveMainDescriptionPostDelimiter A boolean to determine whether to preserve the post-delimiter spacing of the main description. If `false` or unset, will be set to a single space. + ### tags Use this to change the tags which are sought for alignment changes. Defaults to an array of `['param', 'arg', 'argument', 'property', 'prop', 'returns', 'return', 'template']`. + ### wrapIndent diff --git a/docs/rules/check-param-names.md b/docs/rules/check-param-names.md index 5ab6f00d2..a985e0ec1 100644 --- a/docs/rules/check-param-names.md +++ b/docs/rules/check-param-names.md @@ -72,11 +72,13 @@ If set to `true`, this option will allow extra `@param` definitions (e.g., representing future expected or virtual params) to be present without needing their presence within the function signature. Other inconsistencies between `@param`'s and present function parameters will still be reported. + ### checkDestructured Whether to check destructured properties. Defaults to `true`. + ### checkRestProperty @@ -84,6 +86,7 @@ Whether to check destructured properties. Defaults to `true`. If set to `true`, will require that rest properties are documented and that any extraneous properties (which may have been within the rest property) are documented. Defaults to `false`. + ### checkTypesPattern @@ -123,6 +126,7 @@ your expression as a string, but like a literal, e.g., `/^object$/vi`. You could set this regular expression to a more expansive list, or you could restrict it such that even types matching those strings would not need destructuring. + ### disableExtraPropertyReporting @@ -134,11 +138,13 @@ their own types. Note that extra properties will always be reported if another item at the same level is destructured as destructuring will prevent other access and this option is only intended to permit documenting extra properties that are available and actually used in the function. + ### disableMissingParamChecks Whether to avoid checks for missing `@param` definitions. Defaults to `false`. Change to `true` if you want to be able to omit properties. + ### enableFixer @@ -149,6 +155,7 @@ names). Note that this option will remove duplicates of the same name even if the definitions do not match in other ways (e.g., the second param will be removed even if it has a different type or description). + ### useDefaultObjectProperties diff --git a/docs/rules/check-tag-names.md b/docs/rules/check-tag-names.md index 0b577a4b8..dc76ac6da 100644 --- a/docs/rules/check-tag-names.md +++ b/docs/rules/check-tag-names.md @@ -238,11 +238,13 @@ The format is as follows: "definedTags": ["note", "record"] } ``` + ### enableFixer Set to `false` to disable auto-removal of types that are redundant with the [`typed` option](#user-content-typed). + ### inlineTags @@ -250,6 +252,7 @@ Set to `false` to disable auto-removal of types that are redundant with the [`ty List of tags to allow inline. Defaults to array of `'link', 'linkcode', 'linkplain', 'tutorial'` + ### jsxTags @@ -264,6 +267,7 @@ jsxRuntime ``` For more information, see the [babel documentation](https://babeljs.io/docs/en/babel-plugin-transform-react-jsx). + ### typed diff --git a/docs/rules/check-types.md b/docs/rules/check-types.md index b03d5b513..df2522cc5 100644 --- a/docs/rules/check-types.md +++ b/docs/rules/check-types.md @@ -45,6 +45,7 @@ A single options object has the following properties. ### exemptTagContexts Avoids reporting when a bad type is found on a specified tag. + A single options object has the following properties. @@ -52,6 +53,7 @@ A single options object has the following properties. ##### tag Set a key `tag` to the tag to exempt + ##### types @@ -65,6 +67,7 @@ behavior of `settings.jsdoc.preferredTypes`. This option is useful for normally restricting generic types like `object` with `preferredTypes`, but allowing `typedef` to indicate that its base type is `object`. + ### noDefaults @@ -72,6 +75,7 @@ type is `object`. Insists that only the supplied option type map is to be used, and that the default preferences (such as "string" over "String") will not be enforced. The option's default is `false`. + ### unifyParentAndChildTypeChecks diff --git a/docs/rules/check-values.md b/docs/rules/check-values.md index c0f311159..e2a3a56ec 100644 --- a/docs/rules/check-values.md +++ b/docs/rules/check-values.md @@ -42,12 +42,14 @@ A single options object has the following properties. An array of allowable author values. If absent, only non-whitespace will be checked for. + ### allowedLicenses An array of allowable license values or `true` to allow any license text. If present as an array, will be used in place of [SPDX identifiers](https://spdx.org/licenses/). + ### licensePattern @@ -62,6 +64,7 @@ Note that the `/` delimiters are optional, but necessary to add flags. Defaults to using the `v` flag, so to add your own flags, encapsulate your expression as a string, but like a literal, e.g., `/^mit$/vi`. + ### numericOnlyVariation diff --git a/docs/rules/convert-to-jsdoc-comments.md b/docs/rules/convert-to-jsdoc-comments.md index 62eff8750..2aff96a76 100644 --- a/docs/rules/convert-to-jsdoc-comments.md +++ b/docs/rules/convert-to-jsdoc-comments.md @@ -28,6 +28,7 @@ An array of prefixes to allow at the beginning of a comment. Defaults to `['@ts-', 'istanbul ', 'c8 ', 'v8 ', 'eslint', 'prettier-']`. Supplying your own value overrides the defaults. + ### contexts @@ -48,6 +49,7 @@ The contexts array which will be checked for content on the same line after. Can either be strings or an object with a `context` string and an optional, default `false` `inlineCommentBlock` boolean. Defaults to an empty array. + ### contextsBeforeAndAfter @@ -58,11 +60,13 @@ line after. Can either be strings or an object with a `context` string and an optional, default `false` `inlineCommentBlock` boolean. Defaults to `VariableDeclarator`, `TSPropertySignature`, `PropertyDefinition`. + ### enableFixer Set to `false` to disable fixing. + ### enforceJsdocLineStyle diff --git a/docs/rules/empty-tags.md b/docs/rules/empty-tags.md index a10f8188e..05a3f6b36 100644 --- a/docs/rules/empty-tags.md +++ b/docs/rules/empty-tags.md @@ -61,7 +61,6 @@ add them within this option. ``` - ## Context and settings diff --git a/docs/rules/escape-inline-tags.md b/docs/rules/escape-inline-tags.md new file mode 100644 index 000000000..3eca794ad --- /dev/null +++ b/docs/rules/escape-inline-tags.md @@ -0,0 +1,204 @@ + + +# escape-inline-tags + +Reports use of JSDoc tags in non-tag positions (in the default "typescript" mode). + +Note that while the JSDoc standard refers to inline tags as those being surrounded +by curly brackets, such as those in the form `{@link https://example.com}`, for the +purposes of this rule, we are referring to inline tags as a simple reference to +tags such as `@param` outside of the normal location of a tag and which may need to +be wrapped in `{}` to be proper inline JSDoc or need to be escaped with `\` or +wrapped with ` to be normal text. E.g. + +```js +/** Supports shorthands such as `@yearly` to simplify setup. */ +``` + + + +## Options + +A single options object has the following properties. + + + +### allowedInlineTags + +A listing of tags you wish to allow unescaped. Defaults to an empty array. + + + +### enableFixer + +Whether to enable the fixer. Defaults to `false`. + + + +### fixType + +How to escape the inline tag. + +May be "backticks" to enclose tags in backticks (treating as code segments), or +"backslash" to escape tags with a backslash, i.e., `\@` + +Defaults to "backslash". + + +||| +|---|---| +|Context|everywhere| +|Tags|``| +|Recommended|true (unless `mode` is changed away from "typescript")| +|Settings|`mode`| +|Options|`allowedInlineTags`, `enableFixer`, `fixType`| + + + +## Failing examples + +The following patterns are considered problems: + +````ts +/** + * + * Whether to include a @yearly, @monthly etc text labels in the generated expression. + */ +// "jsdoc/escape-inline-tags": ["error"|"warn", {"enableFixer":true}] +// Message: Unexpected inline JSDoc tag. Did you mean to use {@yearly}, \@yearly, or `@yearly`? + +/** + * Some text + * Whether to include a @yearly, @monthly etc text labels in the generated expression. + */ +// "jsdoc/escape-inline-tags": ["error"|"warn", {"enableFixer":true}] +// Message: Unexpected inline JSDoc tag. Did you mean to use {@yearly}, \@yearly, or `@yearly`? + +/** + * Whether to include a @yearly, @yearly etc text labels in the generated expression. + */ +// "jsdoc/escape-inline-tags": ["error"|"warn", {"enableFixer":true}] +// Message: Unexpected inline JSDoc tag. Did you mean to use {@yearly}, \@yearly, or `@yearly`? + +/** + * Whether to include a @yearly, + * or @yearly etc text labels in the generated expression. + */ +// "jsdoc/escape-inline-tags": ["error"|"warn", {"enableFixer":true}] +// Message: Unexpected inline JSDoc tag. Did you mean to use {@yearly}, \@yearly, or `@yearly`? + +/** + * Whether to include a @yearly, @monthly etc text labels in the generated expression. + */ +// "jsdoc/escape-inline-tags": ["error"|"warn", {"allowedInlineTags":["monthly"],"enableFixer":true,"fixType":"backticks"}] +// Message: Unexpected inline JSDoc tag. Did you mean to use {@yearly}, \@yearly, or `@yearly`? + +/** + * Some description @sth + */ +// "jsdoc/escape-inline-tags": ["error"|"warn", {"enableFixer":true}] +// Message: Unexpected inline JSDoc tag. Did you mean to use {@sth}, \@sth, or `@sth`? + +/** + * Some description @sth + */ +// "jsdoc/escape-inline-tags": ["error"|"warn", {"enableFixer":false}] +// Message: Unexpected inline JSDoc tag. Did you mean to use {@sth}, \@sth, or `@sth`? + +/** + * @param includeNonStandard Whether to include a @yearly, @monthly etc text labels in the generated expression. + */ +// "jsdoc/escape-inline-tags": ["error"|"warn", {"enableFixer":true}] +// Message: Unexpected inline JSDoc tag. Did you mean to use {@yearly}, \@yearly, or `@yearly`? + +/** + * @param includeNonStandard Whether to include a @yearly, @monthly etc text labels in the generated expression. + */ +// "jsdoc/escape-inline-tags": ["error"|"warn", {"allowedInlineTags":["monthly"],"enableFixer":true,"fixType":"backticks"}] +// Message: Unexpected inline JSDoc tag. Did you mean to use {@yearly}, \@yearly, or `@yearly`? + +/** + * @param aName @sth + */ +// "jsdoc/escape-inline-tags": ["error"|"warn", {"enableFixer":true}] +// Message: Unexpected inline JSDoc tag. Did you mean to use {@sth}, \@sth, or `@sth`? + +/** + * @param aName @sth + * and @another + * @param anotherName @yetAnother + */ +// "jsdoc/escape-inline-tags": ["error"|"warn", {"enableFixer":true}] +// Message: Unexpected inline JSDoc tag. Did you mean to use {@sth}, \@sth, or `@sth`? + +/** + * @param aName @sth + */ +// "jsdoc/escape-inline-tags": ["error"|"warn", {"enableFixer":false}] +// Message: Unexpected inline JSDoc tag. Did you mean to use {@sth}, \@sth, or `@sth`? +```` + + + + + +## Passing examples + +The following patterns are not considered problems: + +````ts +/** + * A description with an escaped \@tag. + */ + +/** + * A description with a markdown `@tag`. + */ + +/** + * A description with a non@tag. + */ + +/** + * @param {SomeType} aName A description with an escaped \@tag. + */ + +/** + * @param {SomeType} aName A description with a markdown `@tag`. + */ + +/** + * @param {SomeType} aName A description with a non@tag. + */ + +/** + * {@link https://example.com} + */ + +/** + * A description with a {@link https://example.com} + */ + +/** + * @someTag {@link https://example.com} + */ + +/** + * @param {SomeType} aName {@link https://example.com} + */ + +/** + * @param {SomeType} aName A description with a {@link https://example.com}. + */ + +/** + * @example + * Here are some unescaped tags: @yearly, @monthly + */ + +/** + * Whether to include a @yearly, @monthly etc text labels in the generated expression. + */ +// Settings: {"jsdoc":{"mode":"jsdoc"}} +```` + diff --git a/docs/rules/informative-docs.md b/docs/rules/informative-docs.md index 4d36969a6..499d97a41 100644 --- a/docs/rules/informative-docs.md +++ b/docs/rules/informative-docs.md @@ -87,7 +87,6 @@ The default `uselessWords` option is: ``` - ## Context and settings diff --git a/docs/rules/match-description.md b/docs/rules/match-description.md index 04d288059..ea4746579 100644 --- a/docs/rules/match-description.md +++ b/docs/rules/match-description.md @@ -107,6 +107,7 @@ You may also provide an object with `message`: }] } ``` + ### matchDescription @@ -123,6 +124,7 @@ literal, e.g., `/[A-Z].*\./vi`. 'jsdoc/match-description': ['error', {matchDescription: '[A-Z].*\\.'}] } ``` + ### message @@ -154,6 +156,7 @@ some content: If you supply your own tag description for any of the above tags in `tags`, your description will take precedence. + ### tags diff --git a/docs/rules/match-name.md b/docs/rules/match-name.md index 96d653549..a647c14c1 100644 --- a/docs/rules/match-name.md +++ b/docs/rules/match-name.md @@ -52,11 +52,13 @@ A single options object has the following properties. Indicates which names are allowed for the given tag (or `*`). Accepts a string regular expression (optionally wrapped between two `/` delimiters followed by optional flags) used to match the name. + ##### comment As with `context` but AST for the JSDoc block comment and types. + ##### context @@ -65,22 +67,26 @@ AST to confine the allowing or disallowing to JSDoc blocks associated with a particular context. See the ["AST and Selectors"](#user-content-eslint-plugin-jsdoc-advanced-ast-and-selectors) section of our Advanced docs for more on the expected format. + ##### disallowName As with `allowName` but indicates names that are not allowed. + ##### message An optional custom message to use when there is a match. + ##### replacement If `disallowName` is supplied and this value is present, it will replace the matched `disallowName` text. + ##### tags diff --git a/docs/rules/multiline-blocks.md b/docs/rules/multiline-blocks.md index 265c4aeab..d9c14d51f 100644 --- a/docs/rules/multiline-blocks.md +++ b/docs/rules/multiline-blocks.md @@ -41,6 +41,7 @@ tag (since a description cannot precede a tag on a single line, and also cannot be reliably added after the tag either). Defaults to `true`. + ### minimumLengthForMultiline @@ -52,6 +53,7 @@ If not set, multiline blocks will not be permitted regardless of length unless a relevant tag is present and `multilineTags` is set. Defaults to not being in effect. + ### multilineTags @@ -81,6 +83,7 @@ line will be reported. (Text preceding a newline is not reported.) `noMultilineBlocks` will have priority over this rule if it applies. Defaults to `true`. + ### noMultilineBlocks @@ -90,6 +93,7 @@ by the options `minimumLengthForMultiline`, `multilineTags`, or `allowMultipleTags`. Defaults to `false`. + ### noSingleLineBlocks @@ -109,6 +113,7 @@ space will be reported. (Text after a newline is not reported.) `noMultilineBlocks` will have priority over this rule if it applies. Defaults to `true`. + ### requireSingleLineUnderCount diff --git a/docs/rules/no-defaults.md b/docs/rules/no-defaults.md index 648763355..5e0aee257 100644 --- a/docs/rules/no-defaults.md +++ b/docs/rules/no-defaults.md @@ -53,6 +53,7 @@ expression, i.e., `@callback` or `@function` (or its aliases `@func` or See the ["AST and Selectors"](#user-content-eslint-plugin-jsdoc-advanced-ast-and-selectors) section of our Advanced docs for more on the expected format. + ### noOptionalParamNames diff --git a/docs/rules/no-multi-asterisks.md b/docs/rules/no-multi-asterisks.md index 92efc9ea0..1e73c1a58 100644 --- a/docs/rules/no-multi-asterisks.md +++ b/docs/rules/no-multi-asterisks.md @@ -35,6 +35,7 @@ Set to `true` if you wish to allow asterisks after a space (as with Markdown): ``` Defaults to `false`. + ### preventAtEnd @@ -49,6 +50,7 @@ Prevent the likes of this: ``` Defaults to `true`. + ### preventAtMiddleLines diff --git a/docs/rules/no-types.md b/docs/rules/no-types.md index a74f3370b..d49772db5 100644 --- a/docs/rules/no-types.md +++ b/docs/rules/no-types.md @@ -51,7 +51,6 @@ See the ["AST and Selectors"](#user-content-eslint-plugin-jsdoc-advanced-ast-and section of our Advanced docs for more on the expected format. - ## Context and settings diff --git a/docs/rules/no-undefined-types.md b/docs/rules/no-undefined-types.md index 94bb373b8..ac9804a02 100644 --- a/docs/rules/no-undefined-types.md +++ b/docs/rules/no-undefined-types.md @@ -66,6 +66,7 @@ A single options object has the following properties. ### checkUsedTypedefs Whether to check typedefs for use within the file + ### definedTypes @@ -73,6 +74,7 @@ Whether to check typedefs for use within the file This array can be populated to indicate other types which are automatically considered as defined (in addition to globals, etc.). Defaults to an empty array. + ### disableReporting @@ -80,6 +82,7 @@ Defaults to an empty array. Whether to disable reporting of errors. Defaults to `false`. This may be set to `true` in order to take advantage of only marking defined variables as used or checking used typedefs. + ### markVariablesAsUsed diff --git a/docs/rules/prefer-import-tag.md b/docs/rules/prefer-import-tag.md index 40fb8800b..375aaaaf0 100644 --- a/docs/rules/prefer-import-tag.md +++ b/docs/rules/prefer-import-tag.md @@ -22,11 +22,13 @@ A single options object has the following properties. ### enableFixer Whether or not to enable the fixer to add `@import` tags. + ### exemptTypedefs Whether to allow `import()` statements within `@typedef` + ### outputType diff --git a/docs/rules/require-asterisk-prefix.md b/docs/rules/require-asterisk-prefix.md index fd1561555..f8502ac10 100644 --- a/docs/rules/require-asterisk-prefix.md +++ b/docs/rules/require-asterisk-prefix.md @@ -56,11 +56,13 @@ which applies to the main JSDoc block description. If it is `"always"` then a problem is raised when there is no asterisk prefix on a given JSDoc line. + #### any No problem is raised regardless of asterisk presence or non-presence. + #### never diff --git a/docs/rules/require-description-complete-sentence.md b/docs/rules/require-description-complete-sentence.md index fe2750047..70ee25678 100644 --- a/docs/rules/require-description-complete-sentence.md +++ b/docs/rules/require-description-complete-sentence.md @@ -48,6 +48,7 @@ A single options object has the following properties. You can provide an `abbreviations` options array to avoid such strings of text being treated as sentence endings when followed by dots. The `.` is not necessary at the end of the array items. + ### newlineBeforeCapsAssumesBadSentenceEnd @@ -55,6 +56,7 @@ necessary at the end of the array items. When `false` (the new default), we will not assume capital letters after newlines are an incorrect way to end the sentence (they may be proper nouns, for example). + ### tags @@ -81,7 +83,6 @@ description is `some description` while for `@some-tag xyz`, the description is `xyz`). - ## Context and settings diff --git a/docs/rules/require-description.md b/docs/rules/require-description.md index 7d8f5262c..3377e95f2 100644 --- a/docs/rules/require-description.md +++ b/docs/rules/require-description.md @@ -36,18 +36,21 @@ A single options object has the following properties. A value indicating whether `constructor`s should be checked. Defaults to `true`. + ### checkGetters A value indicating whether getters should be checked. Defaults to `true`. + ### checkSetters A value indicating whether setters should be checked. Defaults to `true`. + ### contexts @@ -67,6 +70,7 @@ expression, i.e., `@callback` or `@function` (or its aliases `@func` or See the ["AST and Selectors"](#user-content-eslint-plugin-jsdoc-advanced-ast-and-selectors) section of our Advanced docs for more on the expected format. + ### descriptionStyle @@ -74,6 +78,7 @@ section of our Advanced docs for more on the expected format. Whether to accept implicit descriptions (`"body"`) or `@description` tags (`"tag"`) as satisfying the rule. Set to `"any"` to accept either style. Defaults to `"body"`. + ### exemptedBy diff --git a/docs/rules/require-example.md b/docs/rules/require-example.md index 26c26c6c9..dd10b5d3d 100644 --- a/docs/rules/require-example.md +++ b/docs/rules/require-example.md @@ -39,16 +39,19 @@ A single options object has the following properties. A value indicating whether `constructor`s should be checked. Defaults to `true`. + ### checkGetters A value indicating whether getters should be checked. Defaults to `false`. + ### checkSetters A value indicating whether setters should be checked. Defaults to `false`. + ### contexts @@ -65,12 +68,14 @@ JSDoc block throughout your files. See the ["AST and Selectors"](#user-content-eslint-plugin-jsdoc-advanced-ast-and-selectors) section of our Advanced docs for more on the expected format. + ### enableFixer A boolean on whether to enable the fixer (which adds an empty `@example` block). Defaults to `true`. + ### exemptedBy @@ -80,6 +85,7 @@ block avoids the need for an `@example`. Defaults to an array with `inheritdoc`. If you set this array, it will overwrite the default, so be sure to add back `inheritdoc` if you wish its presence to cause exemption of the rule. + ### exemptNoArguments diff --git a/docs/rules/require-file-overview.md b/docs/rules/require-file-overview.md index 0db0d39c4..3d65141f3 100644 --- a/docs/rules/require-file-overview.md +++ b/docs/rules/require-file-overview.md @@ -90,8 +90,6 @@ in this configuration object regardless of whether you have configured will be checked, but you must use `file` on the configuration object). - - ## Context and settings diff --git a/docs/rules/require-hyphen-before-param-description.md b/docs/rules/require-hyphen-before-param-description.md index 4a60c8078..198746132 100644 --- a/docs/rules/require-hyphen-before-param-description.md +++ b/docs/rules/require-hyphen-before-param-description.md @@ -36,6 +36,7 @@ The next option is an object with the following properties. The options object may have the following property to indicate behavior for other tags besides the `@param` tag (or the `@arg` tag if so set). + ### tags @@ -49,7 +50,6 @@ Object whose keys indicate different tags to check for the other `tags` entries). - ## Context and settings diff --git a/docs/rules/require-jsdoc.md b/docs/rules/require-jsdoc.md index 4a6e904d4..d0c10559d 100644 --- a/docs/rules/require-jsdoc.md +++ b/docs/rules/require-jsdoc.md @@ -42,6 +42,7 @@ A single options object has the following properties. Has the following optional keys. + ### checkConstructors @@ -49,6 +50,7 @@ Has the following optional keys. A value indicating whether `constructor`s should be checked. Defaults to `true`. When `true`, `exemptEmptyConstructors` may still avoid reporting when no parameters or return values are found. + ### checkGetters @@ -68,6 +70,7 @@ boolean, this option can be set to the string `"no-getter"` to indicate that setters should be checked but only when there is no getter. This may be useful if one only wishes documentation on one of the two accessors. Defaults to `false`. + ### contexts @@ -87,12 +90,14 @@ if you are specifying a more precise form in `contexts` (e.g., `MethodDefinition See the ["AST and Selectors"](#user-content-eslint-plugin-jsdoc-advanced-ast-and-selectors) section of our Advanced docs for more on the expected format. + ### enableFixer A boolean on whether to enable the fixer (which adds an empty JSDoc block). Defaults to `true`. + ### exemptEmptyConstructors @@ -102,6 +107,7 @@ with no parameters or return values (this is enabled by default as the class name or description should be seen as sufficient to convey intent). Defaults to `true`. + ### exemptEmptyFunctions @@ -119,12 +125,14 @@ Defaults to `false`. If set to `true` will avoid checking an overloaded function's implementation. Defaults to `false`. + ### fixerMessage An optional message to add to the inserted JSDoc block. Defaults to the empty string. + ### minLineCount @@ -132,6 +140,7 @@ empty string. An integer to indicate a minimum number of lines expected for a node in order for it to require documentation. Defaults to `undefined`. This option will apply to any context; see `contexts` for line counts specific to a context. + ### publicOnly @@ -158,36 +167,43 @@ A single options object has the following properties. An object with the following optional boolean keys which all default to `false` except for `FunctionDeclaration` which defaults to `true`. + #### ArrowFunctionExpression Whether to check arrow functions like `() => {}` + #### ClassDeclaration Whether to check declarations like `class A {}` + #### ClassExpression Whether to check class expressions like `const myClass = class {}` + #### FunctionDeclaration Whether to check function declarations like `function a {}` + #### FunctionExpression Whether to check function expressions like `const a = function {}` + #### MethodDefinition Whether to check method definitions like `class A { someMethodDefinition () {} }` + ### skipInterveningOverloadedDeclarations diff --git a/docs/rules/require-param-description.md b/docs/rules/require-param-description.md index eb48f26c1..b207353cb 100644 --- a/docs/rules/require-param-description.md +++ b/docs/rules/require-param-description.md @@ -42,12 +42,14 @@ expression, i.e., `@callback` or `@function` (or its aliases `@func` or See the ["AST and Selectors"](#user-content-eslint-plugin-jsdoc-advanced-ast-and-selectors) section of our Advanced docs for more on the expected format. + ### defaultDestructuredRootDescription The description string to set by default for destructured roots. Defaults to "The root object". + ### setDefaultDestructuredRootDescription diff --git a/docs/rules/require-param-name.md b/docs/rules/require-param-name.md index b8ce96a9f..b27978c49 100644 --- a/docs/rules/require-param-name.md +++ b/docs/rules/require-param-name.md @@ -41,7 +41,6 @@ See the ["AST and Selectors"](#user-content-eslint-plugin-jsdoc-advanced-ast-and section of our Advanced docs for more on the expected format. - ## Context and settings diff --git a/docs/rules/require-param-type.md b/docs/rules/require-param-type.md index ed7caf11c..8f0b7c502 100644 --- a/docs/rules/require-param-type.md +++ b/docs/rules/require-param-type.md @@ -42,11 +42,13 @@ expression, i.e., `@callback` or `@function` (or its aliases `@func` or See the ["AST and Selectors"](#user-content-eslint-plugin-jsdoc-advanced-ast-and-selectors) section of our Advanced docs for more on the expected format. + ### defaultDestructuredRootType The type string to set by default for destructured roots. Defaults to "object". + ### setDefaultDestructuredRootType diff --git a/docs/rules/require-param.md b/docs/rules/require-param.md index f33bfcd2e..4918198ec 100644 --- a/docs/rules/require-param.md +++ b/docs/rules/require-param.md @@ -243,6 +243,7 @@ A value indicating whether `constructor`s should be checked. Defaults to ### checkDestructured Whether to require destructured properties. Defaults to `true`. + ### checkDestructuredRoots @@ -262,6 +263,7 @@ documentation). Defaults to `true`. ### checkGetters A value indicating whether getters should be checked. Defaults to `false`. + ### checkRestProperty @@ -322,6 +324,7 @@ function quux ({num, ...extra}) { ### checkSetters A value indicating whether setters should be checked. Defaults to `false`. + ### checkTypesPattern @@ -357,6 +360,7 @@ your expression as a string, but like a literal, e.g., `/^object$/vi`. You could set this regular expression to a more expansive list, or you could restrict it such that even types matching those strings would not need destructuring. + ### contexts @@ -379,6 +383,7 @@ section of our Advanced docs for more on the expected format. ### enableFixer Whether to enable the fixer. Defaults to `true`. + ### enableRestElementFixer @@ -447,6 +452,7 @@ function quux ({foo}, {bar}, {baz}) { ``` Has no effect if `enableFixer` is set to `false`. + ### exemptedBy @@ -456,12 +462,14 @@ avoids the need for a `@param`. Defaults to an array with `inheritdoc`. If you set this array, it will overwrite the default, so be sure to add back `inheritdoc` if you wish its presence to cause exemption of the rule. + ### ignoreWhenAllParamsMissing Set to `true` to ignore reporting when all params are missing. Defaults to `false`. + ### interfaceExemptsParamsCheck @@ -472,6 +480,7 @@ Set if you wish TypeScript interfaces to exempt checks for the existence of Will check for a type defining the function itself (on a variable declaration) or if there is a single destructured object with a type. Defaults to `false`. + ### unnamedRootBase @@ -498,6 +507,7 @@ function quux ({foo}, [bar], {baz}) { * @param config1.baz */ ``` + ### useDefaultObjectProperties diff --git a/docs/rules/require-returns-check.md b/docs/rules/require-returns-check.md index 12db7f485..505b23da7 100644 --- a/docs/rules/require-returns-check.md +++ b/docs/rules/require-returns-check.md @@ -41,6 +41,7 @@ non-`undefined` values or `async` functions with explicit `return`'s will be exempted from reporting (i.e., that `async` functions can be reported if they lack an explicit (non-`undefined`) `return` when a `@returns` is present), you can set `exemptAsync` to `false` on the options object. + ### exemptGenerators @@ -52,6 +53,7 @@ leverage `@returns` in generators even without a `return` statement. This option is therefore `true` by default in `typescript` mode (in "jsdoc" mode, one might be more likely to take advantage of `@yields`). Set it to `false` if you wish for a missing `return` to be flagged regardless. + ### reportMissingReturnForUndefinedTypes diff --git a/docs/rules/require-returns.md b/docs/rules/require-returns.md index cf2ebb210..99887c06d 100644 --- a/docs/rules/require-returns.md +++ b/docs/rules/require-returns.md @@ -39,12 +39,14 @@ A single options object has the following properties. A value indicating whether `constructor`s should be checked for `@returns` tags. Defaults to `false`. + ### checkGetters Boolean to determine whether getter methods should be checked for `@returns` tags. Defaults to `true`. + ### contexts @@ -66,12 +68,14 @@ present and the `forceRequireReturn` option is set or if the `forceReturnsWithAsync` option is set with a present `@async` tag (since we are not checking against the actual `return` values in these cases). + ### enableFixer Whether to enable the fixer to add a blank `@returns`. Defaults to `false`. + ### exemptedBy @@ -81,6 +85,7 @@ document block avoids the need for a `@returns`. Defaults to an array with `inheritdoc`. If you set this array, it will overwrite the default, so be sure to add back `inheritdoc` if you wish its presence to cause exemption of the rule. + ### forceRequireReturn @@ -89,6 +94,7 @@ Set to `true` to always insist on `@returns` documentation regardless of implicit or explicit `return`'s in the function. May be desired to flag that a project is aware of an `undefined`/`void` return. Defaults to `false`. + ### forceReturnsWithAsync @@ -101,6 +107,7 @@ detected non-`undefined` `resolve` value) to require `@return` documentation by setting `forceReturnsWithAsync` to `true` on the options object. This may be useful for flagging that there has been consideration of return type. Defaults to `false`. + ### publicOnly @@ -119,7 +126,6 @@ otherwise noted): - `window` - Window global exports are checked for `@returns` JSDoc comments - ## Context and settings diff --git a/docs/rules/require-template.md b/docs/rules/require-template.md index c464ca350..f5c16d92e 100644 --- a/docs/rules/require-template.md +++ b/docs/rules/require-template.md @@ -40,6 +40,7 @@ block avoids the need for a `@template`. Defaults to an array with `inheritdoc`. If you set this array, it will overwrite the default, so be sure to add back `inheritdoc` if you wish its presence to cause exemption of the rule. + ### requireSeparateTemplates @@ -56,7 +57,6 @@ templates of this format: Defaults to `false`. - ||| |---|---| |Context|everywhere| diff --git a/docs/rules/require-throws.md b/docs/rules/require-throws.md index bd943868d..9237d503a 100644 --- a/docs/rules/require-throws.md +++ b/docs/rules/require-throws.md @@ -41,6 +41,7 @@ the rule to apply to any JSDoc block throughout your files (as is necessary for finding function blocks not attached to a function declaration or expression, i.e., `@callback` or `@function` (or its aliases `@func` or `@method`) (including those associated with an `@interface`). + ### exemptedBy diff --git a/docs/rules/require-yields-check.md b/docs/rules/require-yields-check.md index fb1d5686b..8e5713eee 100644 --- a/docs/rules/require-yields-check.md +++ b/docs/rules/require-yields-check.md @@ -41,6 +41,7 @@ that all generators have `@yields`. This can be an optimization with the ESLint `require-yield` rule, as that rule already ensures a `yield` is present in generators, albeit assuming the generator is not empty). Defaults to `false`. + ### contexts @@ -53,6 +54,7 @@ the rule to be applied. Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`, `FunctionExpression`). + ### next diff --git a/docs/rules/require-yields.md b/docs/rules/require-yields.md index fb78e9657..3afc6bced 100644 --- a/docs/rules/require-yields.md +++ b/docs/rules/require-yields.md @@ -49,6 +49,7 @@ present and the `forceRequireYields` option is set or if the `withGeneratorTag` option is set with a present `@generator` tag (since we are not checking against the actual `yield` values in these cases). + ### exemptedBy @@ -58,6 +59,7 @@ document block avoids the need for a `@yields`. Defaults to an array with `inheritdoc`. If you set this array, it will overwrite the default, so be sure to add back `inheritdoc` if you wish its presence to cause exemption of the rule. + ### forceRequireNext @@ -66,6 +68,7 @@ Set to `true` to always insist on `@next` documentation even if there are no `yield` statements in the function or none return values. May be desired to flag that a project is aware of the expected yield return being `undefined`. Defaults to `false`. + ### forceRequireYields @@ -75,6 +78,7 @@ Set to `true` to always insist on expressionless `yield` statements in the function. May be desired to flag that a project is aware of an `undefined`/`void` yield. Defaults to `false`. + ### next @@ -88,6 +92,7 @@ function) to the iterator (e.g., `it.next(value)`). The tag will not be expected if the generator function body merely has plain `yield;` or `yield value;` statements without returning the values. Defaults to `false`. + ### nextWithGeneratorTag @@ -98,6 +103,7 @@ or `undefined` in cases where generators do not use the `next()`-supplied incoming `yield`-returned value. Defaults to `false`. See `contexts` to `any` if you want to catch `@generator` with `@callback` or such not attached to a function. + ### withGeneratorTag diff --git a/docs/rules/sort-tags.md b/docs/rules/sort-tags.md index b052be917..41ecdbdbf 100644 --- a/docs/rules/sort-tags.md +++ b/docs/rules/sort-tags.md @@ -54,6 +54,7 @@ are sorted. If you want all your tags alphabetized, you can supply an empty array for `tagSequence` along with setting this option to `true`. + ### linesBetween @@ -61,6 +62,7 @@ If you want all your tags alphabetized, you can supply an empty array for Indicates the number of lines to be added between tag groups. Defaults to 1. Do not set to 0 or 2+ if you are using `tag-lines` and `"always"` and do not set to 1+ if you are using `tag-lines` and `"never"`. + ### reportIntraTagGroupSpacing @@ -68,6 +70,7 @@ set to 1+ if you are using `tag-lines` and `"never"`. Whether to enable reporting and fixing of line breaks within tags of a given tag group. Defaults to `true` which will remove any line breaks at the end of such tags. Do not use with `true` if you are using `tag-lines` and `always`. + ### reportTagGroupSpacing @@ -76,6 +79,7 @@ Whether to enable reporting and fixing of line breaks between tag groups as set by `linesBetween`. Defaults to `true`. Note that the very last tag will not have spacing applied regardless. For adding line breaks there, you may wish to use the `endLines` option of the `tag-lines` rule. + ### tagSequence diff --git a/docs/rules/tag-lines.md b/docs/rules/tag-lines.md index d80005e9a..a51f98077 100644 --- a/docs/rules/tag-lines.md +++ b/docs/rules/tag-lines.md @@ -51,6 +51,7 @@ Set to `false` and use with "always" to indicate the normal lines to be added after tags should not be added after the final tag. Defaults to `true`. + ### count @@ -58,6 +59,7 @@ Defaults to `true`. Use with "always" to indicate the number of lines to require be present. Defaults to 1. + ### endLines @@ -66,6 +68,7 @@ If not set to `null`, will enforce end lines to the given count on the final tag only. Defaults to `0`. + ### maxBlockLines @@ -75,6 +78,7 @@ If not set to `null`, will enforce a maximum number of lines to the given count Note that if non-`null`, `maxBlockLines` must be greater than or equal to `startLines`. Defaults to `null`. + ### startLines @@ -84,6 +88,7 @@ first tag only, unless there is only whitespace content, in which case, a line count will not be enforced. Defaults to `0`. + ### tags diff --git a/docs/rules/text-escaping.md b/docs/rules/text-escaping.md index 9dae10f1b..9fad7a381 100644 --- a/docs/rules/text-escaping.md +++ b/docs/rules/text-escaping.md @@ -41,6 +41,7 @@ A single options object has the following properties. This option escapes all `<` and `&` characters (except those followed by whitespace which are treated as literals by Visual Studio Code). Defaults to `false`. + ### escapeMarkdown diff --git a/docs/rules/type-formatting.md b/docs/rules/type-formatting.md index 348484b71..14acfb40c 100644 --- a/docs/rules/type-formatting.md +++ b/docs/rules/type-formatting.md @@ -21,22 +21,26 @@ A single options object has the following properties. ### arrayBrackets Determines how array generics are represented. Set to `angle` for the style `Array` or `square` for the style `type[]`. Defaults to "square". + ### enableFixer Whether to enable the fixer. Defaults to `true`. + ### genericDot Boolean value of whether to use a dot before the angled brackets of a generic (e.g., `SomeType.`). Defaults to `false`. + ### objectFieldIndent A string indicating the whitespace to be added on each line preceding an object property-value field. Defaults to the empty string. + ### objectFieldQuote @@ -45,6 +49,7 @@ Whether and how object field properties should be quoted (e.g., `{"a": string}`) Set to `single`, `double`, or `null`. Defaults to `null` (no quotes unless required due to special characters within the field). Digits will be kept as is, regardless of setting (they can either represent a digit or a string digit). + ### objectFieldSeparator @@ -54,6 +59,7 @@ For object properties, specify whether a "semicolon", "comma", "linebreak", each object property-value pair. Defaults to `"comma"`. + ### objectFieldSeparatorOptionalLinebreak @@ -62,6 +68,7 @@ Whether `objectFieldSeparator` set to `"semicolon-and-linebreak"` or `"comma-and-linebreak"` should be allowed to optionally drop the linebreak. Defaults to `true`. + ### objectFieldSeparatorTrailingPunctuation @@ -71,18 +78,21 @@ or there are multiple property-value object fields present), this property will determine whether to add punctuation corresponding to the `objectFieldSeparator` (e.g., a semicolon) to the final object field. Defaults to `false`. + ### separatorForSingleObjectField Whether to apply the `objectFieldSeparator` (e.g., a semicolon) when there is only one property-value object field present. Defaults to `false`. + ### stringQuotes How string literals should be quoted (e.g., `"abc"`). Set to `single` or `double`. Defaults to 'single'. + ### typeBracketSpacing @@ -90,6 +100,7 @@ or `double`. Defaults to 'single'. A string of spaces that will be added immediately after the type's initial curly bracket and immediately before its ending curly bracket. Defaults to the empty string. + ### unionSpacing diff --git a/package.json b/package.json index 0731671cb..e398ab33e 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "url": "http://gajus.com" }, "dependencies": { - "@es-joy/jsdoccomment": "~0.62.0", + "@es-joy/jsdoccomment": "~0.64.0", "are-docs-informative": "^0.0.2", "comment-parser": "1.4.1", "debug": "^4.4.3", @@ -41,10 +41,10 @@ "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@types/mocha": "^10.0.10", - "@types/node": "^24.5.2", + "@types/node": "^24.6.0", "@types/semver": "^7.7.1", "@types/spdx-expression-parse": "^3.0.5", - "@typescript-eslint/types": "^8.44.1", + "@typescript-eslint/types": "^8.45.0", "babel-plugin-add-module-exports": "^1.0.4", "babel-plugin-istanbul": "^7.0.1", "babel-plugin-transform-import-meta": "^2.3.3", @@ -58,17 +58,17 @@ "glob": "^11.0.3", "globals": "^16.4.0", "husky": "^9.1.7", - "jsdoc-type-pratt-parser": "^5.9.2", + "jsdoc-type-pratt-parser": "^6.0.1", "json-schema": "^0.4.0", "json-schema-to-typescript": "^15.0.4", - "lint-staged": "^16.2.1", - "mocha": "^11.7.2", + "lint-staged": "^16.2.3", + "mocha": "^11.7.3", "open-editor": "^5.1.0", "replace": "^1.2.2", "rimraf": "^6.0.1", "semantic-release": "^24.2.9", "typescript": "5.9.2", - "typescript-eslint": "^8.44.1" + "typescript-eslint": "^8.45.0" }, "engines": { "node": ">=20.11.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d16476fcc..3c6f6d223 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,8 +12,8 @@ importers: .: dependencies: '@es-joy/jsdoccomment': - specifier: ~0.62.0 - version: 0.62.0 + specifier: ~0.64.0 + version: 0.64.0 are-docs-informative: specifier: ^0.0.2 version: 0.0.2 @@ -112,8 +112,8 @@ importers: specifier: ^10.0.10 version: 10.0.10 '@types/node': - specifier: ^24.5.2 - version: 24.5.2 + specifier: ^24.6.0 + version: 24.6.0 '@types/semver': specifier: ^7.7.1 version: 7.7.1 @@ -121,8 +121,8 @@ importers: specifier: ^3.0.5 version: 3.0.5 '@typescript-eslint/types': - specifier: ^8.44.1 - version: 8.44.1 + specifier: ^8.45.0 + version: 8.45.0 babel-plugin-add-module-exports: specifier: ^1.0.4 version: 1.0.4 @@ -149,7 +149,7 @@ importers: version: 9.36.0(jiti@2.6.0) eslint-config-canonical: specifier: ^45.0.0 - version: 45.0.0(@types/node@24.5.2)(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + version: 45.0.0(@types/node@24.6.0)(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) gitdown: specifier: ^4.1.1 version: 4.1.1(re2@1.20.9) @@ -163,8 +163,8 @@ importers: specifier: ^9.1.7 version: 9.1.7 jsdoc-type-pratt-parser: - specifier: ^5.9.2 - version: 5.9.2 + specifier: ^6.0.1 + version: 6.0.1 json-schema: specifier: ^0.4.0 version: 0.4.0 @@ -172,11 +172,11 @@ importers: specifier: ^15.0.4 version: 15.0.4 lint-staged: - specifier: ^16.2.1 - version: 16.2.1 + specifier: ^16.2.3 + version: 16.2.3 mocha: - specifier: ^11.7.2 - version: 11.7.2 + specifier: ^11.7.3 + version: 11.7.3 open-editor: specifier: ^5.1.0 version: 5.1.0 @@ -193,8 +193,8 @@ importers: specifier: 5.9.2 version: 5.9.2 typescript-eslint: - specifier: ^8.44.1 - version: 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + specifier: ^8.45.0 + version: 8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) packages: @@ -789,6 +789,10 @@ packages: resolution: {integrity: sha512-yWi6sm7INEwnfS7IJvE0dU+RTrwzLPFcY7e7eGpu/l5Q9lWfQ2ROwZ0qVnc242jw2TUPsfHX3XMIISkGBv57RQ==} engines: {node: '>=20.11.0'} + '@es-joy/jsdoccomment@0.64.0': + resolution: {integrity: sha512-sLUv/udfqNO795T0dHAgV6kC79VJvUfX3kDw/F24+dVvGL25QQfxWLTrNjIZ3BcD8R/c8Hg3inC0GrXXTSw4/A==} + engines: {node: '>=20.11.0'} + '@eslint-community/eslint-utils@4.9.0': resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1234,8 +1238,8 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@24.5.2': - resolution: {integrity: sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==} + '@types/node@24.6.0': + resolution: {integrity: sha512-F1CBxgqwOMc4GKJ7eY22hWhBVQuMYTtqI8L0FcszYcpYX0fzfDGpez22Xau8Mgm7O9fI+zA/TYIdq3tGWfweBA==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -1257,6 +1261,14 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/eslint-plugin@8.45.0': + resolution: {integrity: sha512-HC3y9CVuevvWCl/oyZuI47dOeDF9ztdMEfMH8/DW/Mhwa9cCLnK1oD7JoTVGW/u7kFzNZUKUoyJEqkaJh5y3Wg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.45.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/parser@8.44.1': resolution: {integrity: sha512-EHrrEsyhOhxYt8MTg4zTF+DJMuNBzWwgvvOYNj/zm1vnaD/IC5zCXFehZv94Piqa2cRFfXrTFxIvO95L7Qc/cw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1264,22 +1276,45 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/parser@8.45.0': + resolution: {integrity: sha512-TGf22kon8KW+DeKaUmOibKWktRY8b2NSAZNdtWh798COm1NWx8+xJ6iFBtk3IvLdv6+LGLJLRlyhrhEDZWargQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/project-service@8.44.1': resolution: {integrity: sha512-ycSa60eGg8GWAkVsKV4E6Nz33h+HjTXbsDT4FILyL8Obk5/mx4tbvCNsLf9zret3ipSumAOG89UcCs/KRaKYrA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/project-service@8.45.0': + resolution: {integrity: sha512-3pcVHwMG/iA8afdGLMuTibGR7pDsn9RjDev6CCB+naRsSYs2pns5QbinF4Xqw6YC/Sj3lMrm/Im0eMfaa61WUg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/scope-manager@8.44.1': resolution: {integrity: sha512-NdhWHgmynpSvyhchGLXh+w12OMT308Gm25JoRIyTZqEbApiBiQHD/8xgb6LqCWCFcxFtWwaVdFsLPQI3jvhywg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/scope-manager@8.45.0': + resolution: {integrity: sha512-clmm8XSNj/1dGvJeO6VGH7EUSeA0FMs+5au/u3lrA3KfG8iJ4u8ym9/j2tTEoacAffdW1TVUzXO30W1JTJS7dA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/tsconfig-utils@8.44.1': resolution: {integrity: sha512-B5OyACouEjuIvof3o86lRMvyDsFwZm+4fBOqFHccIctYgBjqR3qT39FBYGN87khcgf0ExpdCBeGKpKRhSFTjKQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/tsconfig-utils@8.45.0': + resolution: {integrity: sha512-aFdr+c37sc+jqNMGhH+ajxPXwjv9UtFZk79k8pLoJ6p4y0snmYpPA52GuWHgt2ZF4gRRW6odsEj41uZLojDt5w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/type-utils@8.44.1': resolution: {integrity: sha512-KdEerZqHWXsRNKjF9NYswNISnFzXfXNDfPxoTh7tqohU/PRIbwTmsjGK6V9/RTYWau7NZvfo52lgVk+sJh0K3g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1287,16 +1322,33 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/type-utils@8.45.0': + resolution: {integrity: sha512-bpjepLlHceKgyMEPglAeULX1vixJDgaKocp0RVJ5u4wLJIMNuKtUXIczpJCPcn2waII0yuvks/5m5/h3ZQKs0A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/types@8.44.1': resolution: {integrity: sha512-Lk7uj7y9uQUOEguiDIDLYLJOrYHQa7oBiURYVFqIpGxclAFQ78f6VUOM8lI2XEuNOKNB7XuvM2+2cMXAoq4ALQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.45.0': + resolution: {integrity: sha512-WugXLuOIq67BMgQInIxxnsSyRLFxdkJEJu8r4ngLR56q/4Q5LrbfkFRH27vMTjxEK8Pyz7QfzuZe/G15qQnVRA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@8.44.1': resolution: {integrity: sha512-qnQJ+mVa7szevdEyvfItbO5Vo+GfZ4/GZWWDRRLjrxYPkhM+6zYB2vRYwCsoJLzqFCdZT4mEqyJoyzkunsZ96A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/typescript-estree@8.45.0': + resolution: {integrity: sha512-GfE1NfVbLam6XQ0LcERKwdTTPlLvHvXXhOeUGC1OXi4eQBoyy1iVsW+uzJ/J9jtCz6/7GCQ9MtrQ0fml/jWCnA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/utils@8.44.1': resolution: {integrity: sha512-DpX5Fp6edTlocMCwA+mHY8Mra+pPjRZ0TfHkXI8QFelIKcbADQz1LUPNtzOFUriBB2UYqw4Pi9+xV4w9ZczHFg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1304,10 +1356,21 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/utils@8.45.0': + resolution: {integrity: sha512-bxi1ht+tLYg4+XV2knz/F7RVhU0k6VrSMc9sb8DQ6fyCTrGQLHfo7lDtN0QJjZjKkLA2ThrKuCdHEvLReqtIGg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/visitor-keys@8.44.1': resolution: {integrity: sha512-576+u0QD+Jp3tZzvfRfxon0EA2lzcDt3lhUbsC6Lgzy9x2VR4E+JUiNyGHi5T8vk0TV+fpJ5GLG1JsJuWCaKhw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.45.0': + resolution: {integrity: sha512-qsaFBA3e09MIDAGFUrTk+dzqtfv1XPVz8t8d1f0ybTzrCY7BKiMC5cjrl1O/P7UmHsNyW90EYSkU/ZWpmXelag==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@unrs/resolver-binding-android-arm-eabi@1.11.1': resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} cpu: [arm] @@ -3344,6 +3407,10 @@ packages: resolution: {integrity: sha512-TYzkACp/wPvDJLRY7qpHXtrhgwoAaojIOnLaaVNi+AbPU2u1kkjfKd9hXXTq0qSAGsyYXvwUXt99h9I5iCmjjw==} engines: {node: '>=12.0.0'} + jsdoc-type-pratt-parser@6.0.1: + resolution: {integrity: sha512-N2OCUHYmrEPSH3SDKvbri9gAsOvhyJ01142dRb2gnpOGjBqGkUI5r6EcFSVXtLPUoUFTuh/TYMHTIEGpobqT5w==} + engines: {node: '>=20.0.0'} + jsdom@6.5.1: resolution: {integrity: sha512-KeCN3yqR+MmjAZDnVZgIaL2tP9BxSFlsYZw9Z+zy64+jJzHc1m8ruccb83Qe8AG0xKUjpo2kxEGFCMtiF4MmAg==} @@ -3428,8 +3495,8 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - lint-staged@16.2.1: - resolution: {integrity: sha512-KMeYmH9wKvHsXdUp+z6w7HN3fHKHXwT1pSTQTYxB9kI6ekK1rlL3kLZEoXZCppRPXFK9PFW/wfQctV7XUqMrPQ==} + lint-staged@16.2.3: + resolution: {integrity: sha512-1OnJEESB9zZqsp61XHH2fvpS1es3hRCxMplF/AJUDa8Ho8VrscYDIuxGrj3m8KPXbcWZ8fT9XTMUhEQmOVKpKw==} engines: {node: '>=20.17'} hasBin: true @@ -3672,8 +3739,8 @@ packages: engines: {node: '>=10'} hasBin: true - mocha@11.7.2: - resolution: {integrity: sha512-lkqVJPmqqG/w5jmmFtiRvtA2jkDyNVUcefFJKb2uyX4dekk8Okgqop3cgbFiaIvj8uCRJVTP5x9dfxGyXm2jvQ==} + mocha@11.7.3: + resolution: {integrity: sha512-iorDKDzBKgVk/npVkW2S+b57ekA9+xKWijVvNpgPMl1odxeB4HavgiydLN54Lhyn/jpcM+Z/BohCzIvHmfaPCw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true @@ -4780,8 +4847,8 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} - typescript-eslint@8.44.1: - resolution: {integrity: sha512-0ws8uWGrUVTjEeN2OM4K1pLKHK/4NiNP/vz6ns+LjT/6sqpaYzIVFajZb1fj/IDwpsrrHb3Jy0Qm5u9CPcKaeg==} + typescript-eslint@8.45.0: + resolution: {integrity: sha512-qzDmZw/Z5beNLUrXfd0HIW6MzIaAV5WNDxmMs9/3ojGOpYavofgNAAD/nC6tGV2PczIi0iw8vot2eAe/sBn7zg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -4806,8 +4873,8 @@ packages: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} - undici-types@7.12.0: - resolution: {integrity: sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==} + undici-types@7.13.0: + resolution: {integrity: sha512-Ov2Rr9Sx+fRgagJ5AX0qvItZG/JKKoBRAVITs1zk7IqZGTJUwgUr7qoYBpWwakpWilTZFM98rG/AFRocu10iIQ==} unicode-canonical-property-names-ecmascript@2.0.1: resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} @@ -5860,7 +5927,7 @@ snapshots: '@es-joy/jsdoccomment@0.50.2': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/types': 8.45.0 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 4.1.0 @@ -5868,11 +5935,19 @@ snapshots: '@es-joy/jsdoccomment@0.62.0': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/types': 8.45.0 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 5.9.2 + '@es-joy/jsdoccomment@0.64.0': + dependencies: + '@types/estree': 1.0.8 + '@typescript-eslint/types': 8.45.0 + comment-parser: 1.4.1 + esquery: 1.6.0 + jsdoc-type-pratt-parser: 6.0.1 + '@eslint-community/eslint-utils@4.9.0(eslint@9.36.0(jiti@2.6.0))': dependencies: eslint: 9.36.0(jiti@2.6.0) @@ -5923,7 +5998,7 @@ snapshots: '@fastify/busboy@3.2.0': {} - '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.5.2)(eslint@9.36.0(jiti@2.6.0))(graphql@16.11.0)(typescript@5.9.2)': + '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.6.0)(eslint@9.36.0(jiti@2.6.0))(graphql@16.11.0)(typescript@5.9.2)': dependencies: '@graphql-tools/code-file-loader': 8.1.22(graphql@16.11.0) '@graphql-tools/graphql-tag-pluck': 8.3.21(graphql@16.11.0) @@ -5932,7 +6007,7 @@ snapshots: eslint: 9.36.0(jiti@2.6.0) fast-glob: 3.3.3 graphql: 16.11.0 - graphql-config: 5.1.5(@types/node@24.5.2)(graphql@16.11.0)(typescript@5.9.2) + graphql-config: 5.1.5(@types/node@24.6.0)(graphql@16.11.0)(typescript@5.9.2) graphql-depth-limit: 1.1.0(graphql@16.11.0) lodash.lowercase: 4.3.0 transitivePeerDependencies: @@ -6009,7 +6084,7 @@ snapshots: - uWebSockets.js - utf-8-validate - '@graphql-tools/executor-http@1.3.3(@types/node@24.5.2)(graphql@16.11.0)': + '@graphql-tools/executor-http@1.3.3(@types/node@24.6.0)(graphql@16.11.0)': dependencies: '@graphql-hive/signal': 1.0.0 '@graphql-tools/executor-common': 0.0.4(graphql@16.11.0) @@ -6019,7 +6094,7 @@ snapshots: '@whatwg-node/fetch': 0.10.11 '@whatwg-node/promise-helpers': 1.3.2 graphql: 16.11.0 - meros: 1.3.2(@types/node@24.5.2) + meros: 1.3.2(@types/node@24.6.0) tslib: 2.8.1 transitivePeerDependencies: - '@types/node' @@ -6109,10 +6184,10 @@ snapshots: graphql: 16.11.0 tslib: 2.8.1 - '@graphql-tools/url-loader@8.0.33(@types/node@24.5.2)(graphql@16.11.0)': + '@graphql-tools/url-loader@8.0.33(@types/node@24.6.0)(graphql@16.11.0)': dependencies: '@graphql-tools/executor-graphql-ws': 2.0.7(graphql@16.11.0) - '@graphql-tools/executor-http': 1.3.3(@types/node@24.5.2)(graphql@16.11.0) + '@graphql-tools/executor-http': 1.3.3(@types/node@24.6.0)(graphql@16.11.0) '@graphql-tools/executor-legacy-ws': 1.1.19(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) '@graphql-tools/wrap': 10.1.4(graphql@16.11.0) @@ -6492,9 +6567,9 @@ snapshots: '@types/ms@2.1.0': {} - '@types/node@24.5.2': + '@types/node@24.6.0': dependencies: - undici-types: 7.12.0 + undici-types: 7.13.0 '@types/normalize-package-data@2.4.4': {} @@ -6504,7 +6579,7 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 24.5.2 + '@types/node': 24.6.0 '@typescript-eslint/eslint-plugin@8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)': dependencies: @@ -6523,6 +6598,23 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.45.0 + '@typescript-eslint/type-utils': 8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/utils': 8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.45.0 + eslint: 9.36.0(jiti@2.6.0) + graphemer: 1.4.0 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)': dependencies: '@typescript-eslint/scope-manager': 8.44.1 @@ -6535,10 +6627,31 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)': + dependencies: + '@typescript-eslint/scope-manager': 8.45.0 + '@typescript-eslint/types': 8.45.0 + '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.45.0 + debug: 4.4.3(supports-color@8.1.1) + eslint: 9.36.0(jiti@2.6.0) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/project-service@8.44.1(typescript@5.9.2)': dependencies: '@typescript-eslint/tsconfig-utils': 8.44.1(typescript@5.9.2) - '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/types': 8.45.0 + debug: 4.4.3(supports-color@8.1.1) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.45.0(typescript@5.9.2)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.45.0(typescript@5.9.2) + '@typescript-eslint/types': 8.45.0 debug: 4.4.3(supports-color@8.1.1) typescript: 5.9.2 transitivePeerDependencies: @@ -6549,10 +6662,19 @@ snapshots: '@typescript-eslint/types': 8.44.1 '@typescript-eslint/visitor-keys': 8.44.1 + '@typescript-eslint/scope-manager@8.45.0': + dependencies: + '@typescript-eslint/types': 8.45.0 + '@typescript-eslint/visitor-keys': 8.45.0 + '@typescript-eslint/tsconfig-utils@8.44.1(typescript@5.9.2)': dependencies: typescript: 5.9.2 + '@typescript-eslint/tsconfig-utils@8.45.0(typescript@5.9.2)': + dependencies: + typescript: 5.9.2 + '@typescript-eslint/type-utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)': dependencies: '@typescript-eslint/types': 8.44.1 @@ -6565,8 +6687,22 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/type-utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)': + dependencies: + '@typescript-eslint/types': 8.45.0 + '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + debug: 4.4.3(supports-color@8.1.1) + eslint: 9.36.0(jiti@2.6.0) + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/types@8.44.1': {} + '@typescript-eslint/types@8.45.0': {} + '@typescript-eslint/typescript-estree@8.44.1(typescript@5.9.2)': dependencies: '@typescript-eslint/project-service': 8.44.1(typescript@5.9.2) @@ -6583,6 +6719,22 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/typescript-estree@8.45.0(typescript@5.9.2)': + dependencies: + '@typescript-eslint/project-service': 8.45.0(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.45.0(typescript@5.9.2) + '@typescript-eslint/types': 8.45.0 + '@typescript-eslint/visitor-keys': 8.45.0 + debug: 4.4.3(supports-color@8.1.1) + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.2 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)': dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.0)) @@ -6594,11 +6746,27 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)': + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.0)) + '@typescript-eslint/scope-manager': 8.45.0 + '@typescript-eslint/types': 8.45.0 + '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.2) + eslint: 9.36.0(jiti@2.6.0) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/visitor-keys@8.44.1': dependencies: '@typescript-eslint/types': 8.44.1 eslint-visitor-keys: 4.2.1 + '@typescript-eslint/visitor-keys@8.45.0': + dependencies: + '@typescript-eslint/types': 8.45.0 + eslint-visitor-keys: 4.2.1 + '@unrs/resolver-binding-android-arm-eabi@1.11.1': optional: true @@ -7546,9 +7714,9 @@ snapshots: eslint: 9.36.0(jiti@2.6.0) semver: 7.7.2 - eslint-config-canonical@45.0.0(@types/node@24.5.2)(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2): + eslint-config-canonical@45.0.0(@types/node@24.6.0)(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2): dependencies: - '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.5.2)(eslint@9.36.0(jiti@2.6.0))(graphql@16.11.0)(typescript@5.9.2) + '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.6.0)(eslint@9.36.0(jiti@2.6.0))(graphql@16.11.0)(typescript@5.9.2) '@next/eslint-plugin-next': 15.5.4 '@stylistic/eslint-plugin': 4.4.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) '@typescript-eslint/eslint-plugin': 8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) @@ -7556,14 +7724,14 @@ snapshots: '@vitest/eslint-plugin': 1.3.13(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) eslint: 9.36.0(jiti@2.6.0) eslint-config-prettier: 10.1.8(eslint@9.36.0(jiti@2.6.0)) - eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)) + eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)) eslint-plugin-ava: 15.1.0(eslint@9.36.0(jiti@2.6.0)) - eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) eslint-plugin-eslint-comments: 3.2.0(eslint@9.36.0(jiti@2.6.0)) eslint-plugin-fp: 2.3.0(eslint@9.36.0(jiti@2.6.0)) eslint-plugin-functional: 9.0.2(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)) - eslint-plugin-jest: 28.14.0(@typescript-eslint/eslint-plugin@8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)) + eslint-plugin-jest: 28.14.0(@typescript-eslint/eslint-plugin@8.44.1(@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) eslint-plugin-jsdoc: 50.8.0(eslint@9.36.0(jiti@2.6.0)) eslint-plugin-jsonc: 2.20.1(eslint@9.36.0(jiti@2.6.0)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.36.0(jiti@2.6.0)) @@ -7584,7 +7752,7 @@ snapshots: graphql: 16.11.0 prettier: 3.6.2 ramda: 0.30.1 - typescript-eslint: 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + typescript-eslint: 8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) yaml-eslint-parser: 1.3.0 transitivePeerDependencies: - '@apollo/subgraph' @@ -7618,7 +7786,7 @@ snapshots: optionalDependencies: unrs-resolver: 1.11.1 - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3(supports-color@8.1.1) @@ -7629,12 +7797,12 @@ snapshots: tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)) transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)): + eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)): dependencies: debug: 4.4.3(supports-color@8.1.1) eslint: 9.36.0(jiti@2.6.0) @@ -7645,8 +7813,8 @@ snapshots: tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)) transitivePeerDependencies: - supports-color @@ -7656,13 +7824,13 @@ snapshots: esquery: 1.6.0 jsonc-eslint-parser: 2.4.1 - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) eslint: 9.36.0(jiti@2.6.0) - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)) transitivePeerDependencies: - supports-color @@ -7678,14 +7846,14 @@ snapshots: pkg-dir: 5.0.0 resolve-from: 5.0.0 - eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2): + eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2): dependencies: '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) array-includes: 3.1.9 debug: 4.4.3(supports-color@8.1.1) doctrine: 3.0.0 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)) - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)) is-get-set-prop: 1.0.0 is-js-type: 2.0.0 is-obj-prop: 1.0.0 @@ -7740,9 +7908,9 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)): + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)): dependencies: - '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/types': 8.45.0 comment-parser: 1.4.1 debug: 4.4.3(supports-color@8.1.1) eslint: 9.36.0(jiti@2.6.0) @@ -7753,11 +7921,11 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/utils': 8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) transitivePeerDependencies: - supports-color - eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2): + eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.44.1(@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2): dependencies: '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) eslint: 9.36.0(jiti@2.6.0) @@ -7849,7 +8017,7 @@ snapshots: eslint-plugin-perfectionist@4.15.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2): dependencies: - '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/types': 8.45.0 '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) eslint: 9.36.0(jiti@2.6.0) natural-orderby: 5.0.0 @@ -8393,13 +8561,13 @@ snapshots: graphemer@1.4.0: {} - graphql-config@5.1.5(@types/node@24.5.2)(graphql@16.11.0)(typescript@5.9.2): + graphql-config@5.1.5(@types/node@24.6.0)(graphql@16.11.0)(typescript@5.9.2): dependencies: '@graphql-tools/graphql-file-loader': 8.1.2(graphql@16.11.0) '@graphql-tools/json-file-loader': 8.0.20(graphql@16.11.0) '@graphql-tools/load': 8.1.2(graphql@16.11.0) '@graphql-tools/merge': 9.1.1(graphql@16.11.0) - '@graphql-tools/url-loader': 8.0.33(@types/node@24.5.2)(graphql@16.11.0) + '@graphql-tools/url-loader': 8.0.33(@types/node@24.6.0)(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) cosmiconfig: 8.3.6(typescript@5.9.2) graphql: 16.11.0 @@ -8868,6 +9036,8 @@ snapshots: jsdoc-type-pratt-parser@5.9.2: {} + jsdoc-type-pratt-parser@6.0.1: {} + jsdom@6.5.1: dependencies: acorn: 2.7.0 @@ -8972,7 +9142,7 @@ snapshots: lines-and-columns@1.2.4: {} - lint-staged@16.2.1: + lint-staged@16.2.3: dependencies: commander: 14.0.1 listr2: 9.0.4 @@ -9145,9 +9315,9 @@ snapshots: merge2@1.4.1: {} - meros@1.3.2(@types/node@24.5.2): + meros@1.3.2(@types/node@24.6.0): optionalDependencies: - '@types/node': 24.5.2 + '@types/node': 24.6.0 micro-spelling-correcter@1.1.1: {} @@ -9234,7 +9404,7 @@ snapshots: mkdirp@1.0.4: optional: true - mocha@11.7.2: + mocha@11.7.3: dependencies: browser-stdout: 1.3.1 chokidar: 4.0.3 @@ -10402,12 +10572,12 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2): + typescript-eslint@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@typescript-eslint/parser': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.2) - '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/parser': 8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) eslint: 9.36.0(jiti@2.6.0) typescript: 5.9.2 transitivePeerDependencies: @@ -10427,7 +10597,7 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 - undici-types@7.12.0: {} + undici-types@7.13.0: {} unicode-canonical-property-names-ecmascript@2.0.1: {} diff --git a/src/bin/generateDocs.js b/src/bin/generateDocs.js index d68eebcc7..6ffc9ffcb 100644 --- a/src/bin/generateDocs.js +++ b/src/bin/generateDocs.js @@ -258,14 +258,14 @@ const generateDocs = async () => { } if (jIdx === 0) { - ret += (arr.length <= 1 ? 'A single' : 'An') + - ' options object has the following properties.\n\n'; + ret += (nesting > 3 ? '\n' : '') + (arr.length <= 1 ? 'A single' : 'An') + + ' options object has the following properties.\n'; } else { - ret += '\n\nThe next option is an object with the following properties.\n\n'; + ret += '\n\nThe next option is an object with the following properties.\n'; } if (schema.description) { - ret += `${escapeDescription(schema.description)}\n`; + ret += `\n${escapeDescription(schema.description)}\n`; } for (const [ @@ -282,10 +282,9 @@ const generateDocs = async () => { ); } - ret += '#'.repeat(nesting) + ` \`${property}\` + ret += '\n' + '#'.repeat(nesting) + ` \`${property}\` -${type === 'object' && innerSchema.properties ? '' : escapeDescription(description)} -`; +${type === 'object' && innerSchema.properties ? '' : escapeDescription(description) + '\n'}`; if (type === 'object' || type === 'array') { ret += convertFromSchema(innerSchema, 0, [], nesting + 1); } diff --git a/src/index-cjs.js b/src/index-cjs.js index 15e89d83f..752fb60ec 100644 --- a/src/index-cjs.js +++ b/src/index-cjs.js @@ -21,6 +21,7 @@ import checkTypes from './rules/checkTypes.js'; import checkValues from './rules/checkValues.js'; import convertToJsdocComments from './rules/convertToJsdocComments.js'; import emptyTags from './rules/emptyTags.js'; +import escapeInlineTags from './rules/escapeInlineTags.js'; import implementsOnClasses from './rules/implementsOnClasses.js'; import importsAsDependencies from './rules/importsAsDependencies.js'; import informativeDocs from './rules/informativeDocs.js'; @@ -101,6 +102,7 @@ index.rules = { 'check-values': checkValues, 'convert-to-jsdoc-comments': convertToJsdocComments, 'empty-tags': emptyTags, + 'escape-inline-tags': escapeInlineTags, 'implements-on-classes': implementsOnClasses, 'imports-as-dependencies': importsAsDependencies, 'informative-docs': informativeDocs, @@ -285,6 +287,7 @@ const createRecommendedRuleset = (warnOrError, flatName) => { 'jsdoc/check-values': warnOrError, 'jsdoc/convert-to-jsdoc-comments': 'off', 'jsdoc/empty-tags': warnOrError, + 'jsdoc/escape-inline-tags': warnOrError, 'jsdoc/implements-on-classes': warnOrError, 'jsdoc/imports-as-dependencies': 'off', 'jsdoc/informative-docs': 'off', @@ -451,6 +454,7 @@ const logicalRules = [ 'jsdoc/check-types', 'jsdoc/check-values', 'jsdoc/empty-tags', + 'jsdoc/escape-inline-tags', 'jsdoc/implements-on-classes', 'jsdoc/require-returns-check', 'jsdoc/require-yields-check', diff --git a/src/index.js b/src/index.js index b2670340c..7b6659868 100644 --- a/src/index.js +++ b/src/index.js @@ -27,6 +27,7 @@ import checkTypes from './rules/checkTypes.js'; import checkValues from './rules/checkValues.js'; import convertToJsdocComments from './rules/convertToJsdocComments.js'; import emptyTags from './rules/emptyTags.js'; +import escapeInlineTags from './rules/escapeInlineTags.js'; import implementsOnClasses from './rules/implementsOnClasses.js'; import importsAsDependencies from './rules/importsAsDependencies.js'; import informativeDocs from './rules/informativeDocs.js'; @@ -107,6 +108,7 @@ index.rules = { 'check-values': checkValues, 'convert-to-jsdoc-comments': convertToJsdocComments, 'empty-tags': emptyTags, + 'escape-inline-tags': escapeInlineTags, 'implements-on-classes': implementsOnClasses, 'imports-as-dependencies': importsAsDependencies, 'informative-docs': informativeDocs, @@ -291,6 +293,7 @@ const createRecommendedRuleset = (warnOrError, flatName) => { 'jsdoc/check-values': warnOrError, 'jsdoc/convert-to-jsdoc-comments': 'off', 'jsdoc/empty-tags': warnOrError, + 'jsdoc/escape-inline-tags': warnOrError, 'jsdoc/implements-on-classes': warnOrError, 'jsdoc/imports-as-dependencies': 'off', 'jsdoc/informative-docs': 'off', @@ -457,6 +460,7 @@ const logicalRules = [ 'jsdoc/check-types', 'jsdoc/check-values', 'jsdoc/empty-tags', + 'jsdoc/escape-inline-tags', 'jsdoc/implements-on-classes', 'jsdoc/require-returns-check', 'jsdoc/require-yields-check', diff --git a/src/rules.d.ts b/src/rules.d.ts index c98c83687..e6780aaee 100644 --- a/src/rules.d.ts +++ b/src/rules.d.ts @@ -82,7 +82,6 @@ export interface Rules { /** * An object with any of the following spacing keys set to an integer. * If a spacing is not defined, it defaults to one. - * */ customSpacings?: { /** @@ -437,7 +436,6 @@ export interface Rules { * * Defaults to `ArrowFunctionExpression`, `FunctionDeclaration`, * `FunctionExpression`, `TSDeclareFunction`. - * */ contexts?: ( | string @@ -496,7 +494,6 @@ export interface Rules { * ``` * * Defaults to `multi`. - * */ enforceJsdocLineStyle?: "multi" | "single"; /** @@ -526,12 +523,36 @@ export interface Rules { * 'jsdoc/empty-tags': ['error', {tags: ['event']}] * } * ``` - * */ tags?: string[]; } ]; + /** Reports use of JSDoc tags in non-tag positions (in the default "typescript" mode). */ + "jsdoc/escape-inline-tags": + | [] + | [ + { + /** + * A listing of tags you wish to allow unescaped. Defaults to an empty array. + */ + allowedInlineTags?: string[]; + /** + * Whether to enable the fixer. Defaults to `false`. + */ + enableFixer?: boolean; + /** + * How to escape the inline tag. + * + * May be "backticks" to enclose tags in backticks (treating as code segments), or + * "backslash" to escape tags with a backslash, i.e., `\@` + * + * Defaults to "backslash". + */ + fixType?: "backticks" | "backslash"; + } + ]; + /** Prohibits use of `@implements` on non-constructor functions (to enforce the tag only being used on classes/constructors). */ "jsdoc/implements-on-classes": | [] @@ -588,7 +609,6 @@ export interface Rules { * "a": ["an", "our"] * } * ``` - * */ aliases?: { /** @@ -610,7 +630,6 @@ export interface Rules { * ``` * * No tags are excluded by default. - * */ excludedTags?: string[]; /** @@ -628,7 +647,6 @@ export interface Rules { * ```json * ["a", "an", "i", "in", "of", "s", "the"] * ``` - * */ uselessWords?: string[]; } @@ -642,26 +660,22 @@ export interface Rules { /** * Whether to additionally check the start of blocks, such as classes or functions. * Defaults to `false`. - * */ checkBlockStarts?: boolean; /** * An array of tags whose presence in the JSDoc block will prevent the * application of the rule. Defaults to `['type']` (i.e., if `@type` is present, * lines before the block will not be added). - * */ excludedTags?: string[]; /** * This option excludes cases where the JSDoc block occurs on the same line as a * preceding code or comment. Defaults to `true`. - * */ ignoreSameLine?: boolean; /** * This option excludes cases where the JSDoc block is only one line long. * Defaults to `true`. - * */ ignoreSingleLines?: boolean; /** @@ -689,7 +703,6 @@ export interface Rules { * * See the ["AST and Selectors"](../#advanced-ast-and-selectors) * section of our Advanced docs for more on the expected format. - * */ contexts?: ( | string @@ -771,7 +784,6 @@ export interface Rules { * * This can be overridden per tag or for the main block description by setting * `message` within `tags` or `mainDescription`, respectively. - * */ message?: string; /** @@ -869,7 +881,6 @@ export interface Rules { * tag of the desired tag and/or name and no `disallowName` (or `allowName`) is * supplied. In such a case, only one error will be reported, but no fixer will * be applied, however. - * */ match: { /** @@ -958,7 +969,6 @@ export interface Rules { * lines. * * Defaults to `['*']`. - * */ multilineTags?: "*" | string[]; /** @@ -983,7 +993,6 @@ export interface Rules { * are whitelisted in `singleLineTags`. * * Defaults to `false`. - * */ noSingleLineBlocks?: boolean; /** @@ -1004,7 +1013,6 @@ export interface Rules { * descriptions. * * Defaults to `null`. - * */ requireSingleLineUnderCount?: number; /** @@ -1031,7 +1039,6 @@ export interface Rules { * * Defaults to `['ts-check', 'ts-expect-error', 'ts-ignore', 'ts-nocheck']` * (some directives [used by TypeScript](https://www.typescriptlang.org/docs/handbook/intro-to-js-ts.html#ts-check)). - * */ ignore?: string[]; /** @@ -1239,7 +1246,6 @@ export interface Rules { * * See the ["AST and Selectors"](../#advanced-ast-and-selectors) * section of our Advanced docs for more on the expected format. - * */ contexts?: ( | string @@ -1332,7 +1338,6 @@ export interface Rules { * }] * } * ``` - * */ tags?: { /** @@ -1452,7 +1457,6 @@ export interface Rules { * its "description" (e.g., for `@returns {someType} some description`, the * description is `some description` while for `@some-tag xyz`, the description * is `xyz`). - * */ tags?: string[]; } @@ -1583,8 +1587,6 @@ export interface Rules { * in this configuration object regardless of whether you have configured * `fileoverview` instead of `file` on `tagNamePreference` (i.e., `fileoverview` * will be checked, but you must use `file` on the configuration object). - * - * */ tags?: { /** @@ -1615,7 +1617,6 @@ export interface Rules { * `'*': 'always'` to apply hyphen checking to any tag (besides the preferred * `@param` tag which follows the main string option setting and besides any * other `tags` entries). - * */ tags?: | { @@ -1646,7 +1647,6 @@ export interface Rules { * getters should be checked but only when there is no setter. This may be useful * if one only wishes documentation on one of the two accessors. Defaults to * `false`. - * */ checkGetters?: boolean | "no-setter"; /** @@ -1701,7 +1701,6 @@ export interface Rules { * function/method names are sufficient for themselves as documentation). * * Defaults to `false`. - * */ exemptEmptyFunctions?: boolean; /** @@ -1734,7 +1733,6 @@ export interface Rules { * - `esm` - ESM exports are checked for JSDoc comments (Defaults to `true`) * - `cjs` - CommonJS exports are checked for JSDoc comments (Defaults to `true`) * - `window` - Window global exports are checked for JSDoc comments - * */ publicOnly?: | boolean @@ -1801,13 +1799,11 @@ export interface Rules { /** * Numeric to indicate the number at which to begin auto-incrementing roots. * Defaults to `0`. - * */ autoIncrementBase?: number; /** * A value indicating whether `constructor`s should be checked. Defaults to * `true`. - * */ checkConstructors?: boolean; /** @@ -1824,7 +1820,6 @@ export interface Rules { * implied to be `false` (i.e., the inside of the roots will not be checked * either, e.g., it will also not complain if `a` or `b` do not have their own * documentation). Defaults to `true`. - * */ checkDestructuredRoots?: boolean; /** @@ -1882,7 +1877,6 @@ export interface Rules { * function quux ({num, ...extra}) { * } * ``` - * */ checkRestProperty?: boolean; /** @@ -1936,7 +1930,6 @@ export interface Rules { * * See the ["AST and Selectors"](../#advanced-ast-and-selectors) * section of our Advanced docs for more on the expected format. - * */ contexts?: ( | string @@ -1983,7 +1976,6 @@ export interface Rules { * type to use. * * Defaults to `true`. - * */ enableRestElementFixer?: boolean; /** @@ -2134,7 +2126,6 @@ export interface Rules { * * See the ["AST and Selectors"](../#advanced-ast-and-selectors) * section of our Advanced docs for more on the expected format. - * */ contexts?: ( | string @@ -2287,7 +2278,6 @@ export interface Rules { * - `esm` - ESM exports are checked for `@returns` JSDoc comments (Defaults to `true`) * - `cjs` - CommonJS exports are checked for `@returns` JSDoc comments (Defaults to `true`) * - `window` - Window global exports are checked for `@returns` JSDoc comments - * */ publicOnly?: | boolean @@ -2444,7 +2434,6 @@ export interface Rules { * ``` * * Defaults to `false`. - * */ requireSeparateTemplates?: boolean; } @@ -2848,7 +2837,6 @@ export interface Rules { * 'todo', * ]}]; * ``` - * */ tagSequence?: { /** diff --git a/src/rules/checkLineAlignment.js b/src/rules/checkLineAlignment.js index 8555073f2..5f2d9da03 100644 --- a/src/rules/checkLineAlignment.js +++ b/src/rules/checkLineAlignment.js @@ -338,8 +338,7 @@ ensure that at least one space is present after the asterisk delimiter.`, customSpacings: { additionalProperties: false, description: `An object with any of the following spacing keys set to an integer. -If a spacing is not defined, it defaults to one. -`, +If a spacing is not defined, it defaults to one.`, properties: { postDelimiter: { description: 'Affects spacing after the asterisk (e.g., `* @param`)', diff --git a/src/rules/convertToJsdocComments.js b/src/rules/convertToJsdocComments.js index 162793339..523e7cace 100644 --- a/src/rules/convertToJsdocComments.js +++ b/src/rules/convertToJsdocComments.js @@ -319,8 +319,7 @@ Supplying your own value overrides the defaults.`, Can either be strings or an object with a \`context\` string and an optional, default \`false\` \`inlineCommentBlock\` boolean. Defaults to \`ArrowFunctionExpression\`, \`FunctionDeclaration\`, -\`FunctionExpression\`, \`TSDeclareFunction\`. -`, +\`FunctionExpression\`, \`TSDeclareFunction\`.`, items: { anyOf: [ { @@ -417,8 +416,7 @@ be converted to \`multi\` style JSDoc comments.) /** Some text */ \`\`\` -Defaults to \`multi\`. -`, +Defaults to \`multi\`.`, enum: [ 'multi', 'single', ], diff --git a/src/rules/emptyTags.js b/src/rules/emptyTags.js index afa31f487..2ebb05dbc 100644 --- a/src/rules/emptyTags.js +++ b/src/rules/emptyTags.js @@ -91,8 +91,7 @@ add them within this option. { 'jsdoc/empty-tags': ['error', {tags: ['event']}] } -\`\`\` -`, +\`\`\``, items: { type: 'string', }, diff --git a/src/rules/escapeInlineTags.js b/src/rules/escapeInlineTags.js new file mode 100644 index 000000000..baa6d0e66 --- /dev/null +++ b/src/rules/escapeInlineTags.js @@ -0,0 +1,189 @@ +import iterateJsdoc from '../iterateJsdoc.js'; + +export default iterateJsdoc(({ + context, + jsdoc, + settings, + utils, +}) => { + const { + mode, + } = settings; + + if (mode !== 'typescript') { + return; + } + + const { + allowedInlineTags = [], + enableFixer = false, + fixType = 'backslash', + } = context.options[0] || {}; + + const { + description, + } = utils.getDescription(); + + /** @type {string[]} */ + const tagNames = []; + + /** @type {number[]} */ + const indexes = []; + + const unescapedInlineTagRegex = /(?:^|\s)@(\w+)/gv; + for (const [ + idx, + descLine, + ] of ( + description.startsWith('\n') ? description.slice(1) : description + ).split('\n').entries() + ) { + descLine.replaceAll(unescapedInlineTagRegex, (_, tagName) => { + if (allowedInlineTags.includes(tagName)) { + return _; + } + + tagNames.push(tagName); + indexes.push(idx); + + return _; + }); + } + + for (const [ + idx, + tagName, + ] of tagNames.entries()) { + utils.reportJSDoc( + `Unexpected inline JSDoc tag. Did you mean to use {@${tagName}}, \\@${tagName}, or \`@${tagName}\`?`, + { + line: indexes[idx] + 1, + }, + enableFixer ? + () => { + utils.setBlockDescription((info, seedTokens, descLines) => { + return descLines.map((desc) => { + const newDesc = desc.replaceAll( + new RegExp(`(^|\\s)@${ + // No need to escape, as contains only safe characters + tagName + }`, 'gv'), + fixType === 'backticks' ? '$1`@' + tagName + '`' : '$1\\@' + tagName, + ); + + return { + number: 0, + source: '', + tokens: seedTokens({ + ...info, + description: newDesc, + postDelimiter: newDesc.trim() ? ' ' : '', + }), + }; + }); + }); + } : + null, + ); + } + + /** + * @param {string} tagName + * @returns {[ + * RegExp, + * (description: string) => string + * ]} + */ + const escapeInlineTags = (tagName) => { + const regex = new RegExp(`(^|\\s)@${ + // No need to escape, as contains only safe characters + tagName + }`, 'gv'); + + return [ + regex, + /** + * @param {string} desc + */ + (desc) => { + return desc.replaceAll( + regex, + fixType === 'backticks' ? '$1`@' + tagName + '`' : '$1\\@' + tagName, + ); + }, + ]; + }; + + for (const tag of jsdoc.tags) { + if (tag.tag === 'example') { + continue; + } + + /** @type {string} */ + let tagName = ''; + while (/** @type {string[]} */ ( + utils.getTagDescription(tag, true) + // eslint-disable-next-line no-loop-func -- Safe + ).some((desc) => { + tagName = unescapedInlineTagRegex.exec(desc)?.[1] ?? ''; + if (allowedInlineTags.includes(tagName)) { + return false; + } + + return tagName; + })) { + const line = utils.setTagDescription(tag, ...escapeInlineTags(tagName)) + + tag.source[0].number; + utils.reportJSDoc( + `Unexpected inline JSDoc tag. Did you mean to use {@${tagName}}, \\@${tagName}, or \`@${tagName}\`?`, + { + line, + }, + enableFixer ? () => {} : null, + true, + ); + } + } +}, { + iterateAllJsdocs: true, + meta: { + docs: { + description: 'Reports use of JSDoc tags in non-tag positions (in the default "typescript" mode).', + url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/escape-inline-tags.md#repos-sticky-header', + }, + fixable: 'code', + schema: [ + { + additionalProperties: false, + properties: { + allowedInlineTags: { + description: 'A listing of tags you wish to allow unescaped. Defaults to an empty array.', + items: { + type: 'string', + }, + type: 'array', + }, + enableFixer: { + description: 'Whether to enable the fixer. Defaults to `false`.', + type: 'boolean', + }, + fixType: { + description: `How to escape the inline tag. + +May be "backticks" to enclose tags in backticks (treating as code segments), or +"backslash" to escape tags with a backslash, i.e., \`\\@\` + +Defaults to "backslash".`, + enum: [ + 'backticks', + 'backslash', + ], + type: 'string', + }, + }, + type: 'object', + }, + ], + type: 'suggestion', + }, +}); diff --git a/src/rules/informativeDocs.js b/src/rules/informativeDocs.js index 3be782e91..c625ea153 100644 --- a/src/rules/informativeDocs.js +++ b/src/rules/informativeDocs.js @@ -171,8 +171,7 @@ The default \`aliases\` option is: { "a": ["an", "our"] } -\`\`\` -`, +\`\`\``, patternProperties: { '.*': { items: { @@ -194,8 +193,7 @@ function computeTypes(node) { } \`\`\` -No tags are excluded by default. -`, +No tags are excluded by default.`, items: { type: 'string', }, @@ -215,8 +213,7 @@ The default \`uselessWords\` option is: \`\`\`json ["a", "an", "i", "in", "of", "s", "the"] -\`\`\` -`, +\`\`\``, items: { type: 'string', }, diff --git a/src/rules/linesBeforeBlock.js b/src/rules/linesBeforeBlock.js index c1983fb59..984cff98a 100644 --- a/src/rules/linesBeforeBlock.js +++ b/src/rules/linesBeforeBlock.js @@ -109,15 +109,13 @@ export default iterateJsdoc(({ properties: { checkBlockStarts: { description: `Whether to additionally check the start of blocks, such as classes or functions. -Defaults to \`false\`. -`, +Defaults to \`false\`.`, type: 'boolean', }, excludedTags: { description: `An array of tags whose presence in the JSDoc block will prevent the application of the rule. Defaults to \`['type']\` (i.e., if \`@type\` is present, -lines before the block will not be added). -`, +lines before the block will not be added).`, items: { type: 'string', }, @@ -125,14 +123,12 @@ lines before the block will not be added). }, ignoreSameLine: { description: `This option excludes cases where the JSDoc block occurs on the same line as a -preceding code or comment. Defaults to \`true\`. -`, +preceding code or comment. Defaults to \`true\`.`, type: 'boolean', }, ignoreSingleLines: { description: `This option excludes cases where the JSDoc block is only one line long. -Defaults to \`true\`. -`, +Defaults to \`true\`.`, type: 'boolean', }, lines: { diff --git a/src/rules/matchDescription.js b/src/rules/matchDescription.js index f06caa8ff..88b472d24 100644 --- a/src/rules/matchDescription.js +++ b/src/rules/matchDescription.js @@ -184,8 +184,7 @@ Overrides the default contexts (\`ArrowFunctionExpression\`, \`FunctionDeclarati JSDoc block throughout your files. See the ["AST and Selectors"](../#advanced-ast-and-selectors) -section of our Advanced docs for more on the expected format. -`, +section of our Advanced docs for more on the expected format.`, items: { anyOf: [ { @@ -302,8 +301,7 @@ literal, e.g., \`/[A-Z].*\\./vi\`. \`\`\` This can be overridden per tag or for the main block description by setting -\`message\` within \`tags\` or \`mainDescription\`, respectively. -`, +\`message\` within \`tags\` or \`mainDescription\`, respectively.`, type: 'string', }, nonemptyTags: { diff --git a/src/rules/matchName.js b/src/rules/matchName.js index aef3fc9ee..eb179ac76 100644 --- a/src/rules/matchName.js +++ b/src/rules/matchName.js @@ -118,8 +118,7 @@ fixes found by the likes of \`disallowName\` even when a different tag has the disallowed name. An alternative is to ensure that \`comment\` finds the specific tag of the desired tag and/or name and no \`disallowName\` (or \`allowName\`) is supplied. In such a case, only one error will be reported, but no fixer will -be applied, however. -`, +be applied, however.`, items: { additionalProperties: false, properties: { diff --git a/src/rules/multilineBlocks.js b/src/rules/multilineBlocks.js index aca726673..6f1356dbf 100644 --- a/src/rules/multilineBlocks.js +++ b/src/rules/multilineBlocks.js @@ -494,8 +494,7 @@ such a tag will cause multiline blocks to be allowed. You may set this to an empty array to prevent any tag from permitting multiple lines. -Defaults to \`['*']\`. -`, +Defaults to \`['*']\`.`, }, noFinalLineText: { description: `For multiline blocks, any non-whitespace text preceding the \`*/\` on the final @@ -518,8 +517,7 @@ Defaults to \`false\`.`, description: `If this is \`true\`, any single line blocks will be reported, except those which are whitelisted in \`singleLineTags\`. -Defaults to \`false\`. -`, +Defaults to \`false\`.`, type: 'boolean', }, noZeroLineText: { @@ -539,8 +537,7 @@ for such cases. Blocks are not reported which have multi-line descriptions, multiple tags, a block description and tag, or tags with multi-line types or descriptions. -Defaults to \`null\`. -`, +Defaults to \`null\`.`, type: 'number', }, singleLineTags: { diff --git a/src/rules/noBadBlocks.js b/src/rules/noBadBlocks.js index c4033bf10..c26998d6f 100644 --- a/src/rules/noBadBlocks.js +++ b/src/rules/noBadBlocks.js @@ -106,8 +106,7 @@ export default iterateJsdoc(({ a multi-comment block and at-sign \`/* @\`. Defaults to \`['ts-check', 'ts-expect-error', 'ts-ignore', 'ts-nocheck']\` -(some directives [used by TypeScript](https://www.typescriptlang.org/docs/handbook/intro-to-js-ts.html#ts-check)). -`, +(some directives [used by TypeScript](https://www.typescriptlang.org/docs/handbook/intro-to-js-ts.html#ts-check)).`, items: { type: 'string', }, diff --git a/src/rules/noTypes.js b/src/rules/noTypes.js index bf7b8705d..2bf3a74cc 100644 --- a/src/rules/noTypes.js +++ b/src/rules/noTypes.js @@ -77,8 +77,7 @@ expression, i.e., \`@callback\` or \`@function\` (or its aliases \`@func\` or \`@method\`) (including those associated with an \`@interface\`). See the ["AST and Selectors"](../#advanced-ast-and-selectors) -section of our Advanced docs for more on the expected format. -`, +section of our Advanced docs for more on the expected format.`, items: { anyOf: [ { diff --git a/src/rules/requireAsteriskPrefix.js b/src/rules/requireAsteriskPrefix.js index b8dcbfba3..51cd2bbf6 100644 --- a/src/rules/requireAsteriskPrefix.js +++ b/src/rules/requireAsteriskPrefix.js @@ -180,8 +180,7 @@ which applies to the main JSDoc block description. } }] } -\`\`\` -`, +\`\`\``, properties: { always: { description: `If it is \`"always"\` then a problem is raised when there is no asterisk diff --git a/src/rules/requireDescriptionCompleteSentence.js b/src/rules/requireDescriptionCompleteSentence.js index 37767bde2..faf8bdf11 100644 --- a/src/rules/requireDescriptionCompleteSentence.js +++ b/src/rules/requireDescriptionCompleteSentence.js @@ -346,8 +346,7 @@ All other tags will treat the text following the tag name, a space, and an optional curly-bracketed type expression (and another space) as part of its "description" (e.g., for \`@returns {someType} some description\`, the description is \`some description\` while for \`@some-tag xyz\`, the description -is \`xyz\`). -`, +is \`xyz\`).`, items: { type: 'string', }, diff --git a/src/rules/requireFileOverview.js b/src/rules/requireFileOverview.js index ad83ebc37..84c3c3e36 100644 --- a/src/rules/requireFileOverview.js +++ b/src/rules/requireFileOverview.js @@ -176,9 +176,7 @@ have a way to allow multiple licenses for the whole page by using the SPDX Note that the tag names are the main JSDoc tag name, so you should use \`file\` in this configuration object regardless of whether you have configured \`fileoverview\` instead of \`file\` on \`tagNamePreference\` (i.e., \`fileoverview\` -will be checked, but you must use \`file\` on the configuration object). - -`, +will be checked, but you must use \`file\` on the configuration object).`, patternProperties: { '.*': { additionalProperties: false, diff --git a/src/rules/requireHyphenBeforeParamDescription.js b/src/rules/requireHyphenBeforeParamDescription.js index 336e4a12c..6e48ca4c9 100644 --- a/src/rules/requireHyphenBeforeParamDescription.js +++ b/src/rules/requireHyphenBeforeParamDescription.js @@ -199,8 +199,7 @@ other tags besides the \`@param\` tag (or the \`@arg\` tag if so set).`, to ensure \`@property\` never uses hyphens. A key can also be set as \`*\`, e.g., \`'*': 'always'\` to apply hyphen checking to any tag (besides the preferred \`@param\` tag which follows the main string option setting and besides any - other \`tags\` entries). -`, + other \`tags\` entries).`, }, }, type: 'object', diff --git a/src/rules/requireJsdoc.js b/src/rules/requireJsdoc.js index ff6547f8a..6b7895562 100644 --- a/src/rules/requireJsdoc.js +++ b/src/rules/requireJsdoc.js @@ -60,8 +60,7 @@ no parameters or return values are found.`, boolean, this option can be set to the string \`"no-setter"\` to indicate that getters should be checked but only when there is no setter. This may be useful if one only wishes documentation on one of the two accessors. Defaults to -\`false\`. -`, +\`false\`.`, }, checkSetters: { anyOf: [ @@ -143,8 +142,7 @@ Defaults to \`true\`.`, functions/methods with no parameters or return values (intended where function/method names are sufficient for themselves as documentation). -Defaults to \`false\`. -`, +Defaults to \`false\`.`, type: 'boolean', }, exemptOverloadedImplementations: { @@ -178,8 +176,7 @@ otherwise noted): - \`ancestorsOnly\` - Optimization to only check node ancestors to check if node is exported - \`esm\` - ESM exports are checked for JSDoc comments (Defaults to \`true\`) - \`cjs\` - CommonJS exports are checked for JSDoc comments (Defaults to \`true\`) -- \`window\` - Window global exports are checked for JSDoc comments -`, +- \`window\` - Window global exports are checked for JSDoc comments`, oneOf: [ { default: false, diff --git a/src/rules/requireParam.js b/src/rules/requireParam.js index e32a10c9e..8c02470d1 100644 --- a/src/rules/requireParam.js +++ b/src/rules/requireParam.js @@ -548,15 +548,13 @@ export default iterateJsdoc(({ autoIncrementBase: { default: 0, description: `Numeric to indicate the number at which to begin auto-incrementing roots. -Defaults to \`0\`. -`, +Defaults to \`0\`.`, type: 'integer', }, checkConstructors: { default: true, description: `A value indicating whether \`constructor\`s should be checked. Defaults to -\`true\`. -`, +\`true\`.`, type: 'boolean', }, checkDestructured: { @@ -574,8 +572,7 @@ the \`{a, b}\` object parameter). If \`checkDestructuredRoots\` is \`false\`, \`checkDestructured\` will also be implied to be \`false\` (i.e., the inside of the roots will not be checked either, e.g., it will also not complain if \`a\` or \`b\` do not have their own -documentation). Defaults to \`true\`. -`, +documentation). Defaults to \`true\`.`, type: 'boolean', }, checkGetters: { @@ -634,8 +631,7 @@ Nor will this: */ function quux ({num, ...extra}) { } -\`\`\` -`, +\`\`\``, type: 'boolean', }, checkSetters: { @@ -689,8 +685,7 @@ Overrides the default contexts (\`ArrowFunctionExpression\`, \`FunctionDeclarati which are checked. See the ["AST and Selectors"](../#advanced-ast-and-selectors) -section of our Advanced docs for more on the expected format. -`, +section of our Advanced docs for more on the expected format.`, items: { anyOf: [ { @@ -749,8 +744,7 @@ function baar ([a, ...extra]) { Note that the type \`any\` is included since we don't know of any specific type to use. -Defaults to \`true\`. -`, +Defaults to \`true\`.`, type: 'boolean', }, enableRootFixer: { diff --git a/src/rules/requireParamName.js b/src/rules/requireParamName.js index dc4f6a373..f3da30a23 100644 --- a/src/rules/requireParamName.js +++ b/src/rules/requireParamName.js @@ -38,8 +38,7 @@ expression, i.e., \`@callback\` or \`@function\` (or its aliases \`@func\` or \`@method\`) (including those associated with an \`@interface\`). See the ["AST and Selectors"](../#advanced-ast-and-selectors) -section of our Advanced docs for more on the expected format. -`, +section of our Advanced docs for more on the expected format.`, items: { anyOf: [ { diff --git a/src/rules/requireReturns.js b/src/rules/requireReturns.js index e5e01ef10..53d9e670c 100644 --- a/src/rules/requireReturns.js +++ b/src/rules/requireReturns.js @@ -254,8 +254,7 @@ otherwise noted): - \`ancestorsOnly\` - Optimization to only check node ancestors to check if node is exported - \`esm\` - ESM exports are checked for \`@returns\` JSDoc comments (Defaults to \`true\`) - \`cjs\` - CommonJS exports are checked for \`@returns\` JSDoc comments (Defaults to \`true\`) -- \`window\` - Window global exports are checked for \`@returns\` JSDoc comments -`, +- \`window\` - Window global exports are checked for \`@returns\` JSDoc comments`, oneOf: [ { default: false, diff --git a/src/rules/requireTemplate.js b/src/rules/requireTemplate.js index c6cc06941..8f4d42f42 100644 --- a/src/rules/requireTemplate.js +++ b/src/rules/requireTemplate.js @@ -214,8 +214,7 @@ templates of this format: */ \`\`\` -Defaults to \`false\`. -`, +Defaults to \`false\`.`, type: 'boolean', }, }, diff --git a/src/rules/sortTags.js b/src/rules/sortTags.js index 1e021545a..e2401f286 100644 --- a/src/rules/sortTags.js +++ b/src/rules/sortTags.js @@ -729,8 +729,7 @@ a fixed order that doesn't change into the future, supply your own 'deprecated', 'todo', ]}]; -\`\`\` -`, +\`\`\``, items: { additionalProperties: false, properties: { diff --git a/test/rules/assertions/checkAlignment.js b/test/rules/assertions/checkAlignment.js index bd8b6fc66..f94991a05 100644 --- a/test/rules/assertions/checkAlignment.js +++ b/test/rules/assertions/checkAlignment.js @@ -242,8 +242,7 @@ export const myVar = {/** * This is JSDoc */ myProperty: 'hello' -} -`, +}`, errors: [ { line: 3, @@ -255,8 +254,7 @@ export const myVar = {/** * This is JSDoc */ myProperty: 'hello' -} -`, +}`, }, { code: ` diff --git a/test/rules/assertions/escapeInlineTags.js b/test/rules/assertions/escapeInlineTags.js new file mode 100644 index 000000000..c75d0a022 --- /dev/null +++ b/test/rules/assertions/escapeInlineTags.js @@ -0,0 +1,415 @@ +export default { + invalid: [ + { + code: ` + /** + * + * Whether to include a @yearly, @monthly etc text labels in the generated expression. + */ + `, + errors: [ + { + line: 4, + message: 'Unexpected inline JSDoc tag. Did you mean to use {@yearly}, \\@yearly, or `@yearly`?', + }, + { + line: 4, + message: 'Unexpected inline JSDoc tag. Did you mean to use {@monthly}, \\@monthly, or `@monthly`?', + }, + ], + options: [ + { + enableFixer: true, + }, + ], + output: ` + /** + * + * Whether to include a \\@yearly, @monthly etc text labels in the generated expression. + */ + `, + }, + { + code: ` + /** + * Some text + * Whether to include a @yearly, @monthly etc text labels in the generated expression. + */ + `, + errors: [ + { + line: 4, + message: 'Unexpected inline JSDoc tag. Did you mean to use {@yearly}, \\@yearly, or `@yearly`?', + }, + { + line: 4, + message: 'Unexpected inline JSDoc tag. Did you mean to use {@monthly}, \\@monthly, or `@monthly`?', + }, + ], + options: [ + { + enableFixer: true, + }, + ], + output: ` + /** + * Some text + * Whether to include a \\@yearly, @monthly etc text labels in the generated expression. + */ + `, + }, + { + code: ` + /** + * Whether to include a @yearly, @yearly etc text labels in the generated expression. + */ + `, + errors: [ + { + line: 3, + message: 'Unexpected inline JSDoc tag. Did you mean to use {@yearly}, \\@yearly, or `@yearly`?', + }, + { + line: 3, + message: 'Unexpected inline JSDoc tag. Did you mean to use {@yearly}, \\@yearly, or `@yearly`?', + }, + ], + options: [ + { + enableFixer: true, + }, + ], + output: ` + /** + * Whether to include a \\@yearly, \\@yearly etc text labels in the generated expression. + */ + `, + }, + { + code: ` + /** + * Whether to include a @yearly, + * or @yearly etc text labels in the generated expression. + */ + `, + errors: [ + { + line: 3, + message: 'Unexpected inline JSDoc tag. Did you mean to use {@yearly}, \\@yearly, or `@yearly`?', + }, + { + line: 4, + message: 'Unexpected inline JSDoc tag. Did you mean to use {@yearly}, \\@yearly, or `@yearly`?', + }, + ], + options: [ + { + enableFixer: true, + }, + ], + output: ` + /** + * Whether to include a \\@yearly, + * or \\@yearly etc text labels in the generated expression. + */ + `, + }, + { + code: ` + /** + * Whether to include a @yearly, @monthly etc text labels in the generated expression. + */ + `, + errors: [ + { + line: 3, + message: 'Unexpected inline JSDoc tag. Did you mean to use {@yearly}, \\@yearly, or `@yearly`?', + }, + ], + options: [ + { + allowedInlineTags: [ + 'monthly', + ], + enableFixer: true, + fixType: 'backticks', + }, + ], + output: ` + /** + * Whether to include a \`@yearly\`, @monthly etc text labels in the generated expression. + */ + `, + }, + { + code: ` + /** + * Some description @sth + */ + `, + errors: [ + { + line: 3, + message: 'Unexpected inline JSDoc tag. Did you mean to use {@sth}, \\@sth, or `@sth`?', + }, + ], + options: [ + { + enableFixer: true, + }, + ], + output: ` + /** + * Some description \\@sth + */ + `, + }, + { + code: ` + /** + * Some description @sth + */ + `, + errors: [ + { + line: 3, + message: 'Unexpected inline JSDoc tag. Did you mean to use {@sth}, \\@sth, or `@sth`?', + }, + ], + options: [ + { + enableFixer: false, + }, + ], + }, + { + code: ` + /** + * @param includeNonStandard Whether to include a @yearly, @monthly etc text labels in the generated expression. + */ + `, + errors: [ + { + line: 3, + message: 'Unexpected inline JSDoc tag. Did you mean to use {@yearly}, \\@yearly, or `@yearly`?', + }, + { + line: 3, + message: 'Unexpected inline JSDoc tag. Did you mean to use {@monthly}, \\@monthly, or `@monthly`?', + }, + ], + options: [ + { + enableFixer: true, + }, + ], + output: ` + /** + * @param includeNonStandard Whether to include a \\@yearly, @monthly etc text labels in the generated expression. + */ + `, + }, + { + code: ` + /** + * @param includeNonStandard Whether to include a @yearly, @monthly etc text labels in the generated expression. + */ + `, + errors: [ + { + line: 3, + message: 'Unexpected inline JSDoc tag. Did you mean to use {@yearly}, \\@yearly, or `@yearly`?', + }, + ], + options: [ + { + allowedInlineTags: [ + 'monthly', + ], + enableFixer: true, + fixType: 'backticks', + }, + ], + output: ` + /** + * @param includeNonStandard Whether to include a \`@yearly\`, @monthly etc text labels in the generated expression. + */ + `, + }, + { + code: ` + /** + * @param aName @sth + */ + `, + errors: [ + { + line: 3, + message: 'Unexpected inline JSDoc tag. Did you mean to use {@sth}, \\@sth, or `@sth`?', + }, + ], + options: [ + { + enableFixer: true, + }, + ], + output: ` + /** + * @param aName \\@sth + */ + `, + }, + { + code: ` + /** + * @param aName @sth + * and @another + * @param anotherName @yetAnother + */ + `, + errors: [ + { + line: 3, + message: 'Unexpected inline JSDoc tag. Did you mean to use {@sth}, \\@sth, or `@sth`?', + }, + { + line: 4, + message: 'Unexpected inline JSDoc tag. Did you mean to use {@another}, \\@another, or `@another`?', + }, + { + line: 5, + message: 'Unexpected inline JSDoc tag. Did you mean to use {@yetAnother}, \\@yetAnother, or `@yetAnother`?', + }, + ], + options: [ + { + enableFixer: true, + }, + ], + output: ` + /** + * @param aName \\@sth + * and @another + * @param anotherName @yetAnother + */ + `, + }, + { + code: ` + /** + * @param aName @sth + */ + `, + errors: [ + { + line: 3, + message: 'Unexpected inline JSDoc tag. Did you mean to use {@sth}, \\@sth, or `@sth`?', + }, + ], + options: [ + { + enableFixer: false, + }, + ], + }, + ], + valid: [ + { + code: ` + /** + * A description with an escaped \\@tag. + */ + `, + }, + { + code: ` + /** + * A description with a markdown \`@tag\`. + */ + `, + }, + { + code: ` + /** + * A description with a non@tag. + */ + `, + }, + { + code: ` + /** + * @param {SomeType} aName A description with an escaped \\@tag. + */ + `, + }, + { + code: ` + /** + * @param {SomeType} aName A description with a markdown \`@tag\`. + */ + `, + }, + { + code: ` + /** + * @param {SomeType} aName A description with a non@tag. + */ + `, + }, + { + code: ` + /** + * {@link https://example.com} + */ + `, + }, + { + code: ` + /** + * A description with a {@link https://example.com} + */ + `, + }, + { + code: ` + /** + * @someTag {@link https://example.com} + */ + `, + }, + { + code: ` + /** + * @param {SomeType} aName {@link https://example.com} + */ + `, + }, + { + code: ` + /** + * @param {SomeType} aName A description with a {@link https://example.com}. + */ + `, + }, + { + code: ` + /** + * @example + * Here are some unescaped tags: @yearly, @monthly + */ + `, + }, + { + code: ` + /** + * Whether to include a @yearly, @monthly etc text labels in the generated expression. + */ + `, + settings: { + jsdoc: { + mode: 'jsdoc', + }, + }, + }, + ], +}; diff --git a/test/rules/ruleNames.json b/test/rules/ruleNames.json index 4fba26853..173f34ecf 100644 --- a/test/rules/ruleNames.json +++ b/test/rules/ruleNames.json @@ -13,6 +13,7 @@ "check-values", "convert-to-jsdoc-comments", "empty-tags", + "escape-inline-tags", "implements-on-classes", "imports-as-dependencies", "informative-docs", From 13fe02781a2ff73ac9cc69235652c89c6283d4dd Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sun, 28 Sep 2025 14:51:25 +0800 Subject: [PATCH 132/189] feat(`require-returns-check`): add `noNativeTypes` option to assert async functions do not have native types as return types; fixes #1345 --- .README/rules/require-returns-check.md | 4 +++- docs/rules/require-returns-check.md | 23 ++++++++++++++++++-- src/jsdocUtils.js | 18 ++++++++++++++- src/rules.d.ts | 5 +++++ src/rules/checkTypes.js | 18 +++------------ src/rules/requireReturnsCheck.js | 17 ++++++++++++++- test/rules/assertions/requireReturnsCheck.js | 22 ++++++++++++++++++- 7 files changed, 86 insertions(+), 21 deletions(-) diff --git a/.README/rules/require-returns-check.md b/.README/rules/require-returns-check.md index fda45348f..a86d5f099 100644 --- a/.README/rules/require-returns-check.md +++ b/.README/rules/require-returns-check.md @@ -11,6 +11,8 @@ Will also report `@returns {void}` and `@returns {undefined}` if `exemptAsync` is set to `false` and a non-`undefined` value is returned or a resolved value is found. Also reports if `@returns {never}` is discovered with a return value. +Will report if native types are specified for `@returns` on an async function. + Will also report if multiple `@returns` tags are present. ## Options @@ -24,7 +26,7 @@ Will also report if multiple `@returns` tags are present. |Context|`ArrowFunctionExpression`, `FunctionDeclaration`, `FunctionExpression`| |Tags|`returns`| |Aliases|`return`| -|Options|`exemptAsync`, `exemptGenerators`, `reportMissingReturnForUndefinedTypes`| +|Options|`exemptAsync`, `exemptGenerators`, `noNativeTypes`, `reportMissingReturnForUndefinedTypes`| |Recommended|true| ## Failing examples diff --git a/docs/rules/require-returns-check.md b/docs/rules/require-returns-check.md index 505b23da7..948885d14 100644 --- a/docs/rules/require-returns-check.md +++ b/docs/rules/require-returns-check.md @@ -5,6 +5,7 @@ * [Options](#user-content-require-returns-check-options) * [`exemptAsync`](#user-content-require-returns-check-options-exemptasync) * [`exemptGenerators`](#user-content-require-returns-check-options-exemptgenerators) + * [`noNativeTypes`](#user-content-require-returns-check-options-nonativetypes) * [`reportMissingReturnForUndefinedTypes`](#user-content-require-returns-check-options-reportmissingreturnforundefinedtypes) * [Context and settings](#user-content-require-returns-check-context-and-settings) * [Failing examples](#user-content-require-returns-check-failing-examples) @@ -20,6 +21,8 @@ Will also report `@returns {void}` and `@returns {undefined}` if `exemptAsync` is set to `false` and a non-`undefined` value is returned or a resolved value is found. Also reports if `@returns {never}` is discovered with a return value. +Will report if native types are specified for `@returns` on an async function. + Will also report if multiple `@returns` tags are present. @@ -54,6 +57,13 @@ option is therefore `true` by default in `typescript` mode (in "jsdoc" mode, one might be more likely to take advantage of `@yields`). Set it to `false` if you wish for a missing `return` to be flagged regardless. + + +### noNativeTypes + +Whether to check that async functions do not +indicate they return non-native types. Defaults to `true`. + ### reportMissingReturnForUndefinedTypes @@ -74,7 +84,7 @@ Unlike `require-returns`, with this option in the rule, one can |Context|`ArrowFunctionExpression`, `FunctionDeclaration`, `FunctionExpression`| |Tags|`returns`| |Aliases|`return`| -|Options|`exemptAsync`, `exemptGenerators`, `reportMissingReturnForUndefinedTypes`| +|Options|`exemptAsync`, `exemptGenerators`, `noNativeTypes`, `reportMissingReturnForUndefinedTypes`| |Recommended|true| @@ -206,7 +216,7 @@ function quux() { /** * Description. - * @returns {string} + * @returns {SomeType} */ async function foo() { return new Promise(resolve => resolve()); @@ -401,6 +411,15 @@ function foo() { } } // Message: JSDoc @returns declaration present but return expression not available in function. + +/** + * @returns {number} + */ +async function quux (foo) { + +} +// "jsdoc/require-returns-check": ["error"|"warn", {"exemptAsync":false}] +// Message: Function is async or otherwise returns a Promise but the return type is a native type. ```` diff --git a/src/jsdocUtils.js b/src/jsdocUtils.js index a9dc75bcc..b1b4f170f 100644 --- a/src/jsdocUtils.js +++ b/src/jsdocUtils.js @@ -962,7 +962,7 @@ const mayBeUndefinedTypeTag = (tag, mode) => { // We do not traverse deeply as it could be, e.g., `Promise` parsedTypes && parsedTypes.type === 'JsdocTypeUnion' && - parsedTypes.elements.find((elem) => { + parsedTypes.elements.some((elem) => { return elem.type === 'JsdocTypeUndefined' || elem.type === 'JsdocTypeName' && elem.value === 'void'; })) { @@ -1845,6 +1845,21 @@ const getRegexFromString = (regexString, requiredFlags) => { return new RegExp(regex, flags); }; +const strictNativeTypes = [ + 'undefined', + 'null', + 'boolean', + 'number', + 'bigint', + 'string', + 'symbol', + 'object', + 'Array', + 'Function', + 'Date', + 'RegExp', +]; + export { comparePaths, dropPathSegmentQuotes, @@ -1885,6 +1900,7 @@ export { parseClosureTemplateTag, pathDoesNotBeginWith, setTagStructure, + strictNativeTypes, tagMightHaveEitherTypeOrNamePosition, tagMightHaveNamepath, tagMightHaveNamePosition, diff --git a/src/rules.d.ts b/src/rules.d.ts index e6780aaee..b8f1de56f 100644 --- a/src/rules.d.ts +++ b/src/rules.d.ts @@ -2317,6 +2317,11 @@ export interface Rules { * if you wish for a missing `return` to be flagged regardless. */ exemptGenerators?: boolean; + /** + * Whether to check that async functions do not + * indicate they return non-native types. Defaults to `true`. + */ + noNativeTypes?: boolean; /** * If `true` and no return or * resolve value is found, this setting will even insist that reporting occur diff --git a/src/rules/checkTypes.js b/src/rules/checkTypes.js index 009171e35..ad174b48a 100644 --- a/src/rules/checkTypes.js +++ b/src/rules/checkTypes.js @@ -1,21 +1,9 @@ import { buildRejectOrPreferRuleDefinition, } from '../buildRejectOrPreferRuleDefinition.js'; - -const strictNativeTypes = [ - 'undefined', - 'null', - 'boolean', - 'number', - 'bigint', - 'string', - 'symbol', - 'object', - 'Array', - 'Function', - 'Date', - 'RegExp', -]; +import { + strictNativeTypes, +} from '../jsdocUtils.js'; /** * @callback CheckNativeTypes diff --git a/src/rules/requireReturnsCheck.js b/src/rules/requireReturnsCheck.js index 201292fed..18fc52b07 100755 --- a/src/rules/requireReturnsCheck.js +++ b/src/rules/requireReturnsCheck.js @@ -1,4 +1,7 @@ import iterateJsdoc from '../iterateJsdoc.js'; +import { + strictNativeTypes, +} from '../jsdocUtils.js'; /** * @param {import('../iterateJsdoc.js').Utils} utils @@ -43,6 +46,7 @@ export default iterateJsdoc(({ const { exemptAsync = true, exemptGenerators = settings.mode === 'typescript', + noNativeTypes = true, reportMissingReturnForUndefinedTypes = false, } = context.options[0] || {}; @@ -50,7 +54,8 @@ export default iterateJsdoc(({ return; } - if (exemptAsync && utils.isAsync()) { + const isAsync = utils.isAsync(); + if (exemptAsync && isAsync) { return; } @@ -92,6 +97,11 @@ export default iterateJsdoc(({ return; } + if (noNativeTypes && isAsync && strictNativeTypes.includes(type)) { + report('Function is async or otherwise returns a Promise but the return type is a native type.'); + return; + } + // In case a return value is declared in JSDoc, we also expect one in the code. if ( !returnNever && @@ -147,6 +157,11 @@ one might be more likely to take advantage of \`@yields\`). Set it to \`false\` if you wish for a missing \`return\` to be flagged regardless.`, type: 'boolean', }, + noNativeTypes: { + description: `Whether to check that async functions do not +indicate they return non-native types. Defaults to \`true\`.`, + type: 'boolean', + }, reportMissingReturnForUndefinedTypes: { default: false, description: `If \`true\` and no return or diff --git a/test/rules/assertions/requireReturnsCheck.js b/test/rules/assertions/requireReturnsCheck.js index 660272191..7fc1cd102 100755 --- a/test/rules/assertions/requireReturnsCheck.js +++ b/test/rules/assertions/requireReturnsCheck.js @@ -277,7 +277,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ code: ` /** * Description. - * @returns {string} + * @returns {SomeType} */ async function foo() { return new Promise(resolve => resolve()); @@ -664,7 +664,27 @@ export default /** @type {import('../index.js').TestCases} */ ({ }, ], }, + { + code: ` + /** + * @returns {number} + */ + async function quux (foo) { + } + `, + errors: [ + { + line: 2, + message: 'Function is async or otherwise returns a Promise but the return type is a native type.', + }, + ], + options: [ + { + exemptAsync: false, + }, + ], + }, ], valid: [ { From 9e92718a16a1d319c4a0e5eb9c241eadf1af89e6 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Wed, 1 Oct 2025 04:01:28 -0700 Subject: [PATCH 133/189] fix(`prefer-import-tag`): handle inserting before early comment nodes; fixes #1549 --- docs/rules/prefer-import-tag.md | 8 + package.json | 8 +- pnpm-lock.yaml | 827 +++++++++-------------- src/rules/preferImportTag.js | 11 +- test/rules/assertions/preferImportTag.js | 32 + 5 files changed, 387 insertions(+), 499 deletions(-) diff --git a/docs/rules/prefer-import-tag.md b/docs/rules/prefer-import-tag.md index 375aaaaf0..6640f4434 100644 --- a/docs/rules/prefer-import-tag.md +++ b/docs/rules/prefer-import-tag.md @@ -294,6 +294,14 @@ The following patterns are considered problems: */ // "jsdoc/prefer-import-tag": ["error"|"warn", {"exemptTypedefs":true}] // Message: Inline `import()` found; using `@typedef` + +/** @type {import('foo')} */ +let foo; +// Message: Inline `import()` found; prefer `@import` + +/** @type {import('foo')} */ +let foo; +// Message: Inline `import()` found; prefer `@import` ```` diff --git a/package.json b/package.json index e398ab33e..d12d0bae1 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "url": "http://gajus.com" }, "dependencies": { - "@es-joy/jsdoccomment": "~0.64.0", + "@es-joy/jsdoccomment": "~0.65.2", "are-docs-informative": "^0.0.2", "comment-parser": "1.4.1", "debug": "^4.4.3", @@ -41,7 +41,7 @@ "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@types/mocha": "^10.0.10", - "@types/node": "^24.6.0", + "@types/node": "^24.6.1", "@types/semver": "^7.7.1", "@types/spdx-expression-parse": "^3.0.5", "@typescript-eslint/types": "^8.45.0", @@ -58,7 +58,7 @@ "glob": "^11.0.3", "globals": "^16.4.0", "husky": "^9.1.7", - "jsdoc-type-pratt-parser": "^6.0.1", + "jsdoc-type-pratt-parser": "^6.1.2", "json-schema": "^0.4.0", "json-schema-to-typescript": "^15.0.4", "lint-staged": "^16.2.3", @@ -67,7 +67,7 @@ "replace": "^1.2.2", "rimraf": "^6.0.1", "semantic-release": "^24.2.9", - "typescript": "5.9.2", + "typescript": "5.9.3", "typescript-eslint": "^8.45.0" }, "engines": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3c6f6d223..6a2e1d80f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,8 +12,8 @@ importers: .: dependencies: '@es-joy/jsdoccomment': - specifier: ~0.64.0 - version: 0.64.0 + specifier: ~0.65.2 + version: 0.65.2 are-docs-informative: specifier: ^0.0.2 version: 0.0.2 @@ -59,7 +59,7 @@ importers: version: 7.28.4 '@babel/eslint-parser': specifier: ^7.28.4 - version: 7.28.4(@babel/core@7.28.4)(eslint@9.36.0(jiti@2.6.0)) + version: 7.28.4(@babel/core@7.28.4)(eslint@9.36.0(jiti@2.6.1)) '@babel/plugin-syntax-class-properties': specifier: ^7.12.13 version: 7.12.13(@babel/core@7.28.4) @@ -74,22 +74,22 @@ importers: version: 4.0.3 '@es-joy/jsdoc-eslint-parser': specifier: ^0.24.0 - version: 0.24.0(jiti@2.6.0) + version: 0.24.0(jiti@2.6.1) '@eslint/core': specifier: ^0.16.0 version: 0.16.0 '@hkdobrev/run-if-changed': specifier: ^0.6.3 - version: 0.6.3(typescript@5.9.2) + version: 0.6.3(typescript@5.9.3) '@semantic-release/commit-analyzer': specifier: ^13.0.1 - version: 13.0.1(semantic-release@24.2.9(typescript@5.9.2)) + version: 13.0.1(semantic-release@24.2.9(typescript@5.9.3)) '@semantic-release/github': specifier: ^11.0.6 - version: 11.0.6(semantic-release@24.2.9(typescript@5.9.2)) + version: 11.0.6(semantic-release@24.2.9(typescript@5.9.3)) '@semantic-release/npm': specifier: ^12.0.2 - version: 12.0.2(semantic-release@24.2.9(typescript@5.9.2)) + version: 12.0.2(semantic-release@24.2.9(typescript@5.9.3)) '@types/chai': specifier: ^5.2.2 version: 5.2.2 @@ -112,8 +112,8 @@ importers: specifier: ^10.0.10 version: 10.0.10 '@types/node': - specifier: ^24.6.0 - version: 24.6.0 + specifier: ^24.6.1 + version: 24.6.1 '@types/semver': specifier: ^7.7.1 version: 7.7.1 @@ -146,10 +146,10 @@ importers: version: 6.0.1 eslint: specifier: 9.36.0 - version: 9.36.0(jiti@2.6.0) + version: 9.36.0(jiti@2.6.1) eslint-config-canonical: specifier: ^45.0.0 - version: 45.0.0(@types/node@24.6.0)(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + version: 45.0.0(@types/node@24.6.1)(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) gitdown: specifier: ^4.1.1 version: 4.1.1(re2@1.20.9) @@ -163,8 +163,8 @@ importers: specifier: ^9.1.7 version: 9.1.7 jsdoc-type-pratt-parser: - specifier: ^6.0.1 - version: 6.0.1 + specifier: ^6.1.2 + version: 6.1.2 json-schema: specifier: ^0.4.0 version: 0.4.0 @@ -188,13 +188,13 @@ importers: version: 6.0.1 semantic-release: specifier: ^24.2.9 - version: 24.2.9(typescript@5.9.2) + version: 24.2.9(typescript@5.9.3) typescript: - specifier: 5.9.2 - version: 5.9.2 + specifier: 5.9.3 + version: 5.9.3 typescript-eslint: specifier: ^8.45.0 - version: 8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + version: 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) packages: @@ -789,8 +789,8 @@ packages: resolution: {integrity: sha512-yWi6sm7INEwnfS7IJvE0dU+RTrwzLPFcY7e7eGpu/l5Q9lWfQ2ROwZ0qVnc242jw2TUPsfHX3XMIISkGBv57RQ==} engines: {node: '>=20.11.0'} - '@es-joy/jsdoccomment@0.64.0': - resolution: {integrity: sha512-sLUv/udfqNO795T0dHAgV6kC79VJvUfX3kDw/F24+dVvGL25QQfxWLTrNjIZ3BcD8R/c8Hg3inC0GrXXTSw4/A==} + '@es-joy/jsdoccomment@0.65.2': + resolution: {integrity: sha512-/rrj5oayCc7xdoQZ24Tz/+V41IDm+9ILYpTFJOZgav9vfncMNApKR0t/4d1oRXYTcyLZEcGHGOg4xBsD0Doing==} engines: {node: '>=20.11.0'} '@eslint-community/eslint-utils@4.9.0': @@ -1078,53 +1078,47 @@ packages: resolution: {integrity: sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==} engines: {node: '>= 20'} - '@octokit/core@7.0.4': - resolution: {integrity: sha512-jOT8V1Ba5BdC79sKrRWDdMT5l1R+XNHTPR6CPWzUP2EcfAcvIHZWF0eAbmRcpOOP5gVIwnqNg0C4nvh6Abc3OA==} + '@octokit/core@7.0.5': + resolution: {integrity: sha512-t54CUOsFMappY1Jbzb7fetWeO0n6K0k/4+/ZpkS+3Joz8I4VcvY9OiEBFRYISqaI2fq5sCiPtAjRDOzVYG8m+Q==} engines: {node: '>= 20'} - '@octokit/endpoint@11.0.0': - resolution: {integrity: sha512-hoYicJZaqISMAI3JfaDr1qMNi48OctWuOih1m80bkYow/ayPw6Jj52tqWJ6GEoFTk1gBqfanSoI1iY99Z5+ekQ==} + '@octokit/endpoint@11.0.1': + resolution: {integrity: sha512-7P1dRAZxuWAOPI7kXfio88trNi/MegQ0IJD3vfgC3b+LZo1Qe6gRJc2v0mz2USWWJOKrB2h5spXCzGbw+fAdqA==} engines: {node: '>= 20'} - '@octokit/graphql@9.0.1': - resolution: {integrity: sha512-j1nQNU1ZxNFx2ZtKmL4sMrs4egy5h65OMDmSbVyuCzjOcwsHq6EaYjOTGXPQxgfiN8dJ4CriYHk6zF050WEULg==} + '@octokit/graphql@9.0.2': + resolution: {integrity: sha512-iz6KzZ7u95Fzy9Nt2L8cG88lGRMr/qy1Q36ih/XVzMIlPDMYwaNLE/ENhqmIzgPrlNWiYJkwmveEetvxAgFBJw==} engines: {node: '>= 20'} - '@octokit/openapi-types@25.1.0': - resolution: {integrity: sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA==} - '@octokit/openapi-types@26.0.0': resolution: {integrity: sha512-7AtcfKtpo77j7Ts73b4OWhOZHTKo/gGY8bB3bNBQz4H+GRSWqx2yvj8TXRsbdTE0eRmYmXOEY66jM7mJ7LzfsA==} - '@octokit/plugin-paginate-rest@13.1.1': - resolution: {integrity: sha512-q9iQGlZlxAVNRN2jDNskJW/Cafy7/XE52wjZ5TTvyhyOD904Cvx//DNyoO3J/MXJ0ve3rPoNWKEg5iZrisQSuw==} + '@octokit/plugin-paginate-rest@13.2.0': + resolution: {integrity: sha512-YuAlyjR8o5QoRSOvMHxSJzPtogkNMgeMv2mpccrvdUGeC3MKyfi/hS+KiFwyH/iRKIKyx+eIMsDjbt3p9r2GYA==} engines: {node: '>= 20'} peerDependencies: '@octokit/core': '>=6' - '@octokit/plugin-retry@8.0.1': - resolution: {integrity: sha512-KUoYR77BjF5O3zcwDQHRRZsUvJwepobeqiSSdCJ8lWt27FZExzb0GgVxrhhfuyF6z2B2zpO0hN5pteni1sqWiw==} + '@octokit/plugin-retry@8.0.2': + resolution: {integrity: sha512-mVPCe77iaD8g1lIX46n9bHPUirFLzc3BfIzsZOpB7bcQh1ecS63YsAgcsyMGqvGa2ARQWKEFTrhMJX2MLJVHVw==} engines: {node: '>= 20'} peerDependencies: '@octokit/core': '>=7' - '@octokit/plugin-throttling@11.0.1': - resolution: {integrity: sha512-S+EVhy52D/272L7up58dr3FNSMXWuNZolkL4zMJBNIfIxyZuUcczsQAU4b5w6dewJXnKYVgSHSV5wxitMSW1kw==} + '@octokit/plugin-throttling@11.0.2': + resolution: {integrity: sha512-ntNIig4zZhQVOZF4fG9Wt8QCoz9ehb+xnlUwp74Ic2ANChCk8oKmRwV9zDDCtrvU1aERIOvtng8wsalEX7Jk5Q==} engines: {node: '>= 20'} peerDependencies: '@octokit/core': ^7.0.0 - '@octokit/request-error@7.0.0': - resolution: {integrity: sha512-KRA7VTGdVyJlh0cP5Tf94hTiYVVqmt2f3I6mnimmaVz4UG3gQV/k4mDJlJv3X67iX6rmN7gSHCF8ssqeMnmhZg==} + '@octokit/request-error@7.0.1': + resolution: {integrity: sha512-CZpFwV4+1uBrxu7Cw8E5NCXDWFNf18MSY23TdxCBgjw1tXXHvTrZVsXlW8hgFTOLw8RQR1BBrMvYRtuyaijHMA==} engines: {node: '>= 20'} - '@octokit/request@10.0.3': - resolution: {integrity: sha512-V6jhKokg35vk098iBqp2FBKunk3kMTXlmq+PtbV9Gl3TfskWlebSofU9uunVKhUN7xl+0+i5vt0TGTG8/p/7HA==} + '@octokit/request@10.0.5': + resolution: {integrity: sha512-TXnouHIYLtgDhKo+N6mXATnDBkV05VwbR0TtMWpgTHIoQdRQfCSzmy/LGqR1AbRMbijq/EckC/E3/ZNcU92NaQ==} engines: {node: '>= 20'} - '@octokit/types@14.1.0': - resolution: {integrity: sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==} - '@octokit/types@15.0.0': resolution: {integrity: sha512-8o6yDfmoGJUIeR9OfYU0/TUJTnMPG2r68+1yEdUeG2Fdqpj8Qetg0ziKIgcBm0RW/j29H41WP37CYCEhp6GoHQ==} @@ -1238,8 +1232,8 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@24.6.0': - resolution: {integrity: sha512-F1CBxgqwOMc4GKJ7eY22hWhBVQuMYTtqI8L0FcszYcpYX0fzfDGpez22Xau8Mgm7O9fI+zA/TYIdq3tGWfweBA==} + '@types/node@24.6.1': + resolution: {integrity: sha512-ljvjjs3DNXummeIaooB4cLBKg2U6SPI6Hjra/9rRIy7CpM0HpLtG9HptkMKAb4HYWy5S7HUvJEuWgr/y0U8SHw==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -1253,14 +1247,6 @@ packages: '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} - '@typescript-eslint/eslint-plugin@8.44.1': - resolution: {integrity: sha512-molgphGqOBT7t4YKCSkbasmu1tb1MgrZ2szGzHbclF7PNmOkSTQVHy+2jXOSnxvR3+Xe1yySHFZoqMpz3TfQsw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.44.1 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/eslint-plugin@8.45.0': resolution: {integrity: sha512-HC3y9CVuevvWCl/oyZuI47dOeDF9ztdMEfMH8/DW/Mhwa9cCLnK1oD7JoTVGW/u7kFzNZUKUoyJEqkaJh5y3Wg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1269,13 +1255,6 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.44.1': - resolution: {integrity: sha512-EHrrEsyhOhxYt8MTg4zTF+DJMuNBzWwgvvOYNj/zm1vnaD/IC5zCXFehZv94Piqa2cRFfXrTFxIvO95L7Qc/cw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.45.0': resolution: {integrity: sha512-TGf22kon8KW+DeKaUmOibKWktRY8b2NSAZNdtWh798COm1NWx8+xJ6iFBtk3IvLdv6+LGLJLRlyhrhEDZWargQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1283,45 +1262,22 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.44.1': - resolution: {integrity: sha512-ycSa60eGg8GWAkVsKV4E6Nz33h+HjTXbsDT4FILyL8Obk5/mx4tbvCNsLf9zret3ipSumAOG89UcCs/KRaKYrA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.45.0': resolution: {integrity: sha512-3pcVHwMG/iA8afdGLMuTibGR7pDsn9RjDev6CCB+naRsSYs2pns5QbinF4Xqw6YC/Sj3lMrm/Im0eMfaa61WUg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.44.1': - resolution: {integrity: sha512-NdhWHgmynpSvyhchGLXh+w12OMT308Gm25JoRIyTZqEbApiBiQHD/8xgb6LqCWCFcxFtWwaVdFsLPQI3jvhywg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.45.0': resolution: {integrity: sha512-clmm8XSNj/1dGvJeO6VGH7EUSeA0FMs+5au/u3lrA3KfG8iJ4u8ym9/j2tTEoacAffdW1TVUzXO30W1JTJS7dA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.44.1': - resolution: {integrity: sha512-B5OyACouEjuIvof3o86lRMvyDsFwZm+4fBOqFHccIctYgBjqR3qT39FBYGN87khcgf0ExpdCBeGKpKRhSFTjKQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/tsconfig-utils@8.45.0': resolution: {integrity: sha512-aFdr+c37sc+jqNMGhH+ajxPXwjv9UtFZk79k8pLoJ6p4y0snmYpPA52GuWHgt2ZF4gRRW6odsEj41uZLojDt5w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.44.1': - resolution: {integrity: sha512-KdEerZqHWXsRNKjF9NYswNISnFzXfXNDfPxoTh7tqohU/PRIbwTmsjGK6V9/RTYWau7NZvfo52lgVk+sJh0K3g==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.45.0': resolution: {integrity: sha512-bpjepLlHceKgyMEPglAeULX1vixJDgaKocp0RVJ5u4wLJIMNuKtUXIczpJCPcn2waII0yuvks/5m5/h3ZQKs0A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1329,33 +1285,16 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.44.1': - resolution: {integrity: sha512-Lk7uj7y9uQUOEguiDIDLYLJOrYHQa7oBiURYVFqIpGxclAFQ78f6VUOM8lI2XEuNOKNB7XuvM2+2cMXAoq4ALQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.45.0': resolution: {integrity: sha512-WugXLuOIq67BMgQInIxxnsSyRLFxdkJEJu8r4ngLR56q/4Q5LrbfkFRH27vMTjxEK8Pyz7QfzuZe/G15qQnVRA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.44.1': - resolution: {integrity: sha512-qnQJ+mVa7szevdEyvfItbO5Vo+GfZ4/GZWWDRRLjrxYPkhM+6zYB2vRYwCsoJLzqFCdZT4mEqyJoyzkunsZ96A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/typescript-estree@8.45.0': resolution: {integrity: sha512-GfE1NfVbLam6XQ0LcERKwdTTPlLvHvXXhOeUGC1OXi4eQBoyy1iVsW+uzJ/J9jtCz6/7GCQ9MtrQ0fml/jWCnA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.44.1': - resolution: {integrity: sha512-DpX5Fp6edTlocMCwA+mHY8Mra+pPjRZ0TfHkXI8QFelIKcbADQz1LUPNtzOFUriBB2UYqw4Pi9+xV4w9ZczHFg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.45.0': resolution: {integrity: sha512-bxi1ht+tLYg4+XV2knz/F7RVhU0k6VrSMc9sb8DQ6fyCTrGQLHfo7lDtN0QJjZjKkLA2ThrKuCdHEvLReqtIGg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1363,10 +1302,6 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.44.1': - resolution: {integrity: sha512-576+u0QD+Jp3tZzvfRfxon0EA2lzcDt3lhUbsC6Lgzy9x2VR4E+JUiNyGHi5T8vk0TV+fpJ5GLG1JsJuWCaKhw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.45.0': resolution: {integrity: sha512-qsaFBA3e09MIDAGFUrTk+dzqtfv1XPVz8t8d1f0ybTzrCY7BKiMC5cjrl1O/P7UmHsNyW90EYSkU/ZWpmXelag==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1687,8 +1622,8 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - baseline-browser-mapping@2.8.7: - resolution: {integrity: sha512-bxxN2M3a4d1CRoQC//IqsR5XrLh0IJ8TCv2x6Y9N0nckNz/rTjZB3//GGscZziZOxmjP55rzxg/ze7usFI9FqQ==} + baseline-browser-mapping@2.8.9: + resolution: {integrity: sha512-hY/u2lxLrbecMEWSB0IpGzGyDyeoMFQhCvZd2jGFSE5I17Fh01sYUBPCJtkWERw7zrac9+cIghxm/ytJa2X8iA==} hasBin: true bcrypt-pbkdf@1.0.2: @@ -1782,8 +1717,8 @@ packages: resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} engines: {node: '>=16'} - caniuse-lite@1.0.30001745: - resolution: {integrity: sha512-ywt6i8FzvdgrrrGbr1jZVObnVv6adj+0if2/omv9cmR2oiZs30zL4DIyaptKcbOrBdOIc74QTMoJvSE2QHh5UQ==} + caniuse-lite@1.0.30001746: + resolution: {integrity: sha512-eA7Ys/DGw+pnkWWSE/id29f2IcPHVoE8wxtvE5JdvD2V28VTDPy1yEeo11Guz0sJ4ZeGRcm3uaTcAqK1LXaphA==} caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} @@ -2157,8 +2092,8 @@ packages: ecc-jsbn@0.1.2: resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} - electron-to-chromium@1.5.224: - resolution: {integrity: sha512-kWAoUu/bwzvnhpdZSIc6KUyvkI1rbRXMT0Eq8pKReyOyaPZcctMli+EgvcN1PAvwVc7Tdo4Fxi2PsLNDU05mdg==} + electron-to-chromium@1.5.228: + resolution: {integrity: sha512-nxkiyuqAn4MJ1QbobwqJILiDtu/jk14hEAWaMiJmNPh1Z+jqoFlBFZjdXwLWGeVSeu9hGLg6+2G9yJaW8rBIFA==} emoji-regex@10.5.0: resolution: {integrity: sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==} @@ -2778,6 +2713,10 @@ packages: functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + generator-function@2.0.1: + resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} + engines: {node: '>= 0.4'} + gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -3192,8 +3131,8 @@ packages: resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} engines: {node: '>=18'} - is-generator-function@1.1.0: - resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} + is-generator-function@1.1.2: + resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} engines: {node: '>= 0.4'} is-get-set-prop@1.0.0: @@ -3373,8 +3312,8 @@ packages: resolution: {integrity: sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==} engines: {node: '>= 0.6.0'} - jiti@2.6.0: - resolution: {integrity: sha512-VXe6RjJkBPj0ohtqaO8vSWP3ZhAKo66fKrFNCll4BTcwljPLz03pCbaNKfzGP5MbrCYcbJ7v0nOYYwUzTEIdXQ==} + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true js-tokens@4.0.0: @@ -3407,8 +3346,8 @@ packages: resolution: {integrity: sha512-TYzkACp/wPvDJLRY7qpHXtrhgwoAaojIOnLaaVNi+AbPU2u1kkjfKd9hXXTq0qSAGsyYXvwUXt99h9I5iCmjjw==} engines: {node: '>=12.0.0'} - jsdoc-type-pratt-parser@6.0.1: - resolution: {integrity: sha512-N2OCUHYmrEPSH3SDKvbri9gAsOvhyJ01142dRb2gnpOGjBqGkUI5r6EcFSVXtLPUoUFTuh/TYMHTIEGpobqT5w==} + jsdoc-type-pratt-parser@6.1.2: + resolution: {integrity: sha512-ruy+JcplsWkqnYq1m/qokaErhEURwf/vhdTzlPNpei7RJabVWxPxGWoCPSCP0sbsz03d590hTkjLdXjyMxH0iA==} engines: {node: '>=20.0.0'} jsdom@6.5.1: @@ -3835,8 +3774,8 @@ packages: resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} engines: {node: '>=18'} - npm@10.9.3: - resolution: {integrity: sha512-6Eh1u5Q+kIVXeA8e7l2c/HpnFFcwrkt37xDMujD5be1gloWa9p6j3Fsv3mByXXmqJHy+2cElRMML8opNT7xIJQ==} + npm@10.9.4: + resolution: {integrity: sha512-OnUG836FwboQIbqtefDNlyR0gTHzIfwRfE3DuiNewBvnMnWEpB0VEXwBlFVgqpNzIgYo/MHh3d2Hel/pszapAA==} engines: {node: ^18.17.0 || >=20.5.0} hasBin: true bundledDependencies: @@ -4859,8 +4798,8 @@ packages: engines: {node: '>=14.17'} hasBin: true - typescript@5.9.2: - resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} hasBin: true @@ -5211,11 +5150,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/eslint-parser@7.28.4(@babel/core@7.28.4)(eslint@9.36.0(jiti@2.6.0))': + '@babel/eslint-parser@7.28.4(@babel/core@7.28.4)(eslint@9.36.0(jiti@2.6.1))': dependencies: '@babel/core': 7.28.4 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 9.36.0(jiti@2.6.0) + eslint: 9.36.0(jiti@2.6.1) eslint-visitor-keys: 2.1.0 semver: 6.3.1 @@ -5911,15 +5850,15 @@ snapshots: '@es-joy/estraverse@7.1.1': {} - '@es-joy/jsdoc-eslint-parser@0.24.0(jiti@2.6.0)': + '@es-joy/jsdoc-eslint-parser@0.24.0(jiti@2.6.1)': dependencies: '@babel/core': 7.28.4 - '@babel/eslint-parser': 7.28.4(@babel/core@7.28.4)(eslint@9.36.0(jiti@2.6.0)) + '@babel/eslint-parser': 7.28.4(@babel/core@7.28.4)(eslint@9.36.0(jiti@2.6.1)) '@es-joy/jsdoccomment': 0.62.0 - '@typescript-eslint/parser': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - eslint: 9.36.0(jiti@2.6.0) + '@typescript-eslint/parser': 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.36.0(jiti@2.6.1) esquery: 1.6.0 - typescript: 5.9.2 + typescript: 5.9.3 transitivePeerDependencies: - jiti - supports-color @@ -5940,17 +5879,17 @@ snapshots: esquery: 1.6.0 jsdoc-type-pratt-parser: 5.9.2 - '@es-joy/jsdoccomment@0.64.0': + '@es-joy/jsdoccomment@0.65.2': dependencies: '@types/estree': 1.0.8 '@typescript-eslint/types': 8.45.0 comment-parser: 1.4.1 esquery: 1.6.0 - jsdoc-type-pratt-parser: 6.0.1 + jsdoc-type-pratt-parser: 6.1.2 - '@eslint-community/eslint-utils@4.9.0(eslint@9.36.0(jiti@2.6.0))': + '@eslint-community/eslint-utils@4.9.0(eslint@9.36.0(jiti@2.6.1))': dependencies: - eslint: 9.36.0(jiti@2.6.0) + eslint: 9.36.0(jiti@2.6.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -5998,16 +5937,16 @@ snapshots: '@fastify/busboy@3.2.0': {} - '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.6.0)(eslint@9.36.0(jiti@2.6.0))(graphql@16.11.0)(typescript@5.9.2)': + '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.6.1)(eslint@9.36.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3)': dependencies: '@graphql-tools/code-file-loader': 8.1.22(graphql@16.11.0) '@graphql-tools/graphql-tag-pluck': 8.3.21(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) debug: 4.4.3(supports-color@8.1.1) - eslint: 9.36.0(jiti@2.6.0) + eslint: 9.36.0(jiti@2.6.1) fast-glob: 3.3.3 graphql: 16.11.0 - graphql-config: 5.1.5(@types/node@24.6.0)(graphql@16.11.0)(typescript@5.9.2) + graphql-config: 5.1.5(@types/node@24.6.1)(graphql@16.11.0)(typescript@5.9.3) graphql-depth-limit: 1.1.0(graphql@16.11.0) lodash.lowercase: 4.3.0 transitivePeerDependencies: @@ -6084,7 +6023,7 @@ snapshots: - uWebSockets.js - utf-8-validate - '@graphql-tools/executor-http@1.3.3(@types/node@24.6.0)(graphql@16.11.0)': + '@graphql-tools/executor-http@1.3.3(@types/node@24.6.1)(graphql@16.11.0)': dependencies: '@graphql-hive/signal': 1.0.0 '@graphql-tools/executor-common': 0.0.4(graphql@16.11.0) @@ -6094,7 +6033,7 @@ snapshots: '@whatwg-node/fetch': 0.10.11 '@whatwg-node/promise-helpers': 1.3.2 graphql: 16.11.0 - meros: 1.3.2(@types/node@24.6.0) + meros: 1.3.2(@types/node@24.6.1) tslib: 2.8.1 transitivePeerDependencies: - '@types/node' @@ -6184,10 +6123,10 @@ snapshots: graphql: 16.11.0 tslib: 2.8.1 - '@graphql-tools/url-loader@8.0.33(@types/node@24.6.0)(graphql@16.11.0)': + '@graphql-tools/url-loader@8.0.33(@types/node@24.6.1)(graphql@16.11.0)': dependencies: '@graphql-tools/executor-graphql-ws': 2.0.7(graphql@16.11.0) - '@graphql-tools/executor-http': 1.3.3(@types/node@24.6.0)(graphql@16.11.0) + '@graphql-tools/executor-http': 1.3.3(@types/node@24.6.1)(graphql@16.11.0) '@graphql-tools/executor-legacy-ws': 1.1.19(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) '@graphql-tools/wrap': 10.1.4(graphql@16.11.0) @@ -6229,9 +6168,9 @@ snapshots: dependencies: graphql: 16.11.0 - '@hkdobrev/run-if-changed@0.6.3(typescript@5.9.2)': + '@hkdobrev/run-if-changed@0.6.3(typescript@5.9.3)': dependencies: - cosmiconfig: 9.0.0(typescript@5.9.2) + cosmiconfig: 9.0.0(typescript@5.9.3) execa: 9.6.0 listr2: 8.3.3 micromatch: 4.0.8 @@ -6350,65 +6289,59 @@ snapshots: '@octokit/auth-token@6.0.0': {} - '@octokit/core@7.0.4': + '@octokit/core@7.0.5': dependencies: '@octokit/auth-token': 6.0.0 - '@octokit/graphql': 9.0.1 - '@octokit/request': 10.0.3 - '@octokit/request-error': 7.0.0 + '@octokit/graphql': 9.0.2 + '@octokit/request': 10.0.5 + '@octokit/request-error': 7.0.1 '@octokit/types': 15.0.0 before-after-hook: 4.0.0 universal-user-agent: 7.0.3 - '@octokit/endpoint@11.0.0': + '@octokit/endpoint@11.0.1': dependencies: - '@octokit/types': 14.1.0 + '@octokit/types': 15.0.0 universal-user-agent: 7.0.3 - '@octokit/graphql@9.0.1': + '@octokit/graphql@9.0.2': dependencies: - '@octokit/request': 10.0.3 - '@octokit/types': 14.1.0 + '@octokit/request': 10.0.5 + '@octokit/types': 15.0.0 universal-user-agent: 7.0.3 - '@octokit/openapi-types@25.1.0': {} - '@octokit/openapi-types@26.0.0': {} - '@octokit/plugin-paginate-rest@13.1.1(@octokit/core@7.0.4)': + '@octokit/plugin-paginate-rest@13.2.0(@octokit/core@7.0.5)': dependencies: - '@octokit/core': 7.0.4 - '@octokit/types': 14.1.0 + '@octokit/core': 7.0.5 + '@octokit/types': 15.0.0 - '@octokit/plugin-retry@8.0.1(@octokit/core@7.0.4)': + '@octokit/plugin-retry@8.0.2(@octokit/core@7.0.5)': dependencies: - '@octokit/core': 7.0.4 - '@octokit/request-error': 7.0.0 - '@octokit/types': 14.1.0 + '@octokit/core': 7.0.5 + '@octokit/request-error': 7.0.1 + '@octokit/types': 15.0.0 bottleneck: 2.19.5 - '@octokit/plugin-throttling@11.0.1(@octokit/core@7.0.4)': + '@octokit/plugin-throttling@11.0.2(@octokit/core@7.0.5)': dependencies: - '@octokit/core': 7.0.4 - '@octokit/types': 14.1.0 + '@octokit/core': 7.0.5 + '@octokit/types': 15.0.0 bottleneck: 2.19.5 - '@octokit/request-error@7.0.0': + '@octokit/request-error@7.0.1': dependencies: - '@octokit/types': 14.1.0 + '@octokit/types': 15.0.0 - '@octokit/request@10.0.3': + '@octokit/request@10.0.5': dependencies: - '@octokit/endpoint': 11.0.0 - '@octokit/request-error': 7.0.0 - '@octokit/types': 14.1.0 + '@octokit/endpoint': 11.0.1 + '@octokit/request-error': 7.0.1 + '@octokit/types': 15.0.0 fast-content-type-parse: 3.0.0 universal-user-agent: 7.0.3 - '@octokit/types@14.1.0': - dependencies: - '@octokit/openapi-types': 25.1.0 - '@octokit/types@15.0.0': dependencies: '@octokit/openapi-types': 26.0.0 @@ -6434,7 +6367,7 @@ snapshots: '@sec-ant/readable-stream@0.4.1': {} - '@semantic-release/commit-analyzer@13.0.1(semantic-release@24.2.9(typescript@5.9.2))': + '@semantic-release/commit-analyzer@13.0.1(semantic-release@24.2.9(typescript@5.9.3))': dependencies: conventional-changelog-angular: 8.0.0 conventional-changelog-writer: 8.2.0 @@ -6444,18 +6377,18 @@ snapshots: import-from-esm: 2.0.0 lodash-es: 4.17.21 micromatch: 4.0.8 - semantic-release: 24.2.9(typescript@5.9.2) + semantic-release: 24.2.9(typescript@5.9.3) transitivePeerDependencies: - supports-color '@semantic-release/error@4.0.0': {} - '@semantic-release/github@11.0.6(semantic-release@24.2.9(typescript@5.9.2))': + '@semantic-release/github@11.0.6(semantic-release@24.2.9(typescript@5.9.3))': dependencies: - '@octokit/core': 7.0.4 - '@octokit/plugin-paginate-rest': 13.1.1(@octokit/core@7.0.4) - '@octokit/plugin-retry': 8.0.1(@octokit/core@7.0.4) - '@octokit/plugin-throttling': 11.0.1(@octokit/core@7.0.4) + '@octokit/core': 7.0.5 + '@octokit/plugin-paginate-rest': 13.2.0(@octokit/core@7.0.5) + '@octokit/plugin-retry': 8.0.2(@octokit/core@7.0.5) + '@octokit/plugin-throttling': 11.0.2(@octokit/core@7.0.5) '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 debug: 4.4.3(supports-color@8.1.1) @@ -6466,13 +6399,13 @@ snapshots: lodash-es: 4.17.21 mime: 4.1.0 p-filter: 4.1.0 - semantic-release: 24.2.9(typescript@5.9.2) + semantic-release: 24.2.9(typescript@5.9.3) tinyglobby: 0.2.15 url-join: 5.0.0 transitivePeerDependencies: - supports-color - '@semantic-release/npm@12.0.2(semantic-release@24.2.9(typescript@5.9.2))': + '@semantic-release/npm@12.0.2(semantic-release@24.2.9(typescript@5.9.3))': dependencies: '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 @@ -6481,15 +6414,15 @@ snapshots: lodash-es: 4.17.21 nerf-dart: 1.0.0 normalize-url: 8.1.0 - npm: 10.9.3 + npm: 10.9.4 rc: 1.2.8 read-pkg: 9.0.1 registry-auth-token: 5.1.0 - semantic-release: 24.2.9(typescript@5.9.2) + semantic-release: 24.2.9(typescript@5.9.3) semver: 7.7.2 tempy: 3.1.0 - '@semantic-release/release-notes-generator@14.1.0(semantic-release@24.2.9(typescript@5.9.2))': + '@semantic-release/release-notes-generator@14.1.0(semantic-release@24.2.9(typescript@5.9.3))': dependencies: conventional-changelog-angular: 8.0.0 conventional-changelog-writer: 8.2.0 @@ -6501,7 +6434,7 @@ snapshots: into-stream: 7.0.0 lodash-es: 4.17.21 read-package-up: 11.0.0 - semantic-release: 24.2.9(typescript@5.9.2) + semantic-release: 24.2.9(typescript@5.9.3) transitivePeerDependencies: - supports-color @@ -6509,10 +6442,10 @@ snapshots: '@sindresorhus/merge-streams@4.0.0': {} - '@stylistic/eslint-plugin@4.4.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)': + '@stylistic/eslint-plugin@4.4.1(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - eslint: 9.36.0(jiti@2.6.0) + '@typescript-eslint/utils': 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.36.0(jiti@2.6.1) eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 @@ -6567,7 +6500,7 @@ snapshots: '@types/ms@2.1.0': {} - '@types/node@24.6.0': + '@types/node@24.6.1': dependencies: undici-types: 7.13.0 @@ -6579,150 +6512,73 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 24.6.0 + '@types/node': 24.6.1 - '@typescript-eslint/eslint-plugin@8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)': + '@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@typescript-eslint/scope-manager': 8.44.1 - '@typescript-eslint/type-utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.44.1 - eslint: 9.36.0(jiti@2.6.0) - graphemer: 1.4.0 - ignore: 7.0.5 - natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)': - dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/parser': 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.45.0 - '@typescript-eslint/type-utils': 8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@typescript-eslint/utils': 8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/type-utils': 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.45.0 - eslint: 9.36.0(jiti@2.6.0) + eslint: 9.36.0(jiti@2.6.1) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)': - dependencies: - '@typescript-eslint/scope-manager': 8.44.1 - '@typescript-eslint/types': 8.44.1 - '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.44.1 - debug: 4.4.3(supports-color@8.1.1) - eslint: 9.36.0(jiti@2.6.0) - typescript: 5.9.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)': + '@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.45.0 '@typescript-eslint/types': 8.45.0 - '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.45.0 debug: 4.4.3(supports-color@8.1.1) - eslint: 9.36.0(jiti@2.6.0) - typescript: 5.9.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.44.1(typescript@5.9.2)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.44.1(typescript@5.9.2) - '@typescript-eslint/types': 8.45.0 - debug: 4.4.3(supports-color@8.1.1) - typescript: 5.9.2 + eslint: 9.36.0(jiti@2.6.1) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.45.0(typescript@5.9.2)': + '@typescript-eslint/project-service@8.45.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.45.0(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.45.0(typescript@5.9.3) '@typescript-eslint/types': 8.45.0 debug: 4.4.3(supports-color@8.1.1) - typescript: 5.9.2 + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.44.1': - dependencies: - '@typescript-eslint/types': 8.44.1 - '@typescript-eslint/visitor-keys': 8.44.1 - '@typescript-eslint/scope-manager@8.45.0': dependencies: '@typescript-eslint/types': 8.45.0 '@typescript-eslint/visitor-keys': 8.45.0 - '@typescript-eslint/tsconfig-utils@8.44.1(typescript@5.9.2)': - dependencies: - typescript: 5.9.2 - - '@typescript-eslint/tsconfig-utils@8.45.0(typescript@5.9.2)': + '@typescript-eslint/tsconfig-utils@8.45.0(typescript@5.9.3)': dependencies: - typescript: 5.9.2 + typescript: 5.9.3 - '@typescript-eslint/type-utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)': - dependencies: - '@typescript-eslint/types': 8.44.1 - '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.2) - '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - debug: 4.4.3(supports-color@8.1.1) - eslint: 9.36.0(jiti@2.6.0) - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/type-utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)': + '@typescript-eslint/type-utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.45.0 - '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3(supports-color@8.1.1) - eslint: 9.36.0(jiti@2.6.0) - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 + eslint: 9.36.0(jiti@2.6.1) + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.44.1': {} - '@typescript-eslint/types@8.45.0': {} - '@typescript-eslint/typescript-estree@8.44.1(typescript@5.9.2)': + '@typescript-eslint/typescript-estree@8.45.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.44.1(typescript@5.9.2) - '@typescript-eslint/tsconfig-utils': 8.44.1(typescript@5.9.2) - '@typescript-eslint/types': 8.44.1 - '@typescript-eslint/visitor-keys': 8.44.1 - debug: 4.4.3(supports-color@8.1.1) - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/typescript-estree@8.45.0(typescript@5.9.2)': - dependencies: - '@typescript-eslint/project-service': 8.45.0(typescript@5.9.2) - '@typescript-eslint/tsconfig-utils': 8.45.0(typescript@5.9.2) + '@typescript-eslint/project-service': 8.45.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.45.0(typescript@5.9.3) '@typescript-eslint/types': 8.45.0 '@typescript-eslint/visitor-keys': 8.45.0 debug: 4.4.3(supports-color@8.1.1) @@ -6730,38 +6586,22 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)': - dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.0)) - '@typescript-eslint/scope-manager': 8.44.1 - '@typescript-eslint/types': 8.44.1 - '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.2) - eslint: 9.36.0(jiti@2.6.0) - typescript: 5.9.2 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)': + '@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.0)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.45.0 '@typescript-eslint/types': 8.45.0 - '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.2) - eslint: 9.36.0(jiti@2.6.0) - typescript: 5.9.2 + '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.3) + eslint: 9.36.0(jiti@2.6.1) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.44.1': - dependencies: - '@typescript-eslint/types': 8.44.1 - eslint-visitor-keys: 4.2.1 - '@typescript-eslint/visitor-keys@8.45.0': dependencies: '@typescript-eslint/types': 8.45.0 @@ -6826,13 +6666,13 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - '@vitest/eslint-plugin@1.3.13(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2)': + '@vitest/eslint-plugin@1.3.13(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.44.1 - '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - eslint: 9.36.0(jiti@2.6.0) + '@typescript-eslint/scope-manager': 8.45.0 + '@typescript-eslint/utils': 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.36.0(jiti@2.6.1) optionalDependencies: - typescript: 5.9.2 + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -7065,7 +6905,7 @@ snapshots: balanced-match@1.0.2: {} - baseline-browser-mapping@2.8.7: {} + baseline-browser-mapping@2.8.9: {} bcrypt-pbkdf@1.0.2: dependencies: @@ -7101,9 +6941,9 @@ snapshots: browserslist@4.26.2: dependencies: - baseline-browser-mapping: 2.8.7 - caniuse-lite: 1.0.30001745 - electron-to-chromium: 1.5.224 + baseline-browser-mapping: 2.8.9 + caniuse-lite: 1.0.30001746 + electron-to-chromium: 1.5.228 node-releases: 2.0.21 update-browserslist-db: 1.1.3(browserslist@4.26.2) @@ -7168,7 +7008,7 @@ snapshots: camelcase@8.0.0: {} - caniuse-lite@1.0.30001745: {} + caniuse-lite@1.0.30001746: {} caseless@0.12.0: {} @@ -7355,23 +7195,23 @@ snapshots: core-util-is@1.0.3: {} - cosmiconfig@8.3.6(typescript@5.9.2): + cosmiconfig@8.3.6(typescript@5.9.3): dependencies: import-fresh: 3.3.1 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: - typescript: 5.9.2 + typescript: 5.9.3 - cosmiconfig@9.0.0(typescript@5.9.2): + cosmiconfig@9.0.0(typescript@5.9.3): dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.9.2 + typescript: 5.9.3 create-eslint-index@1.0.0: dependencies: @@ -7535,7 +7375,7 @@ snapshots: jsbn: 0.1.1 safer-buffer: 2.1.2 - electron-to-chromium@1.5.224: {} + electron-to-chromium@1.5.228: {} emoji-regex@10.5.0: {} @@ -7704,55 +7544,55 @@ snapshots: lodash.get: 4.4.2 lodash.zip: 4.2.0 - eslint-compat-utils@0.5.1(eslint@9.36.0(jiti@2.6.0)): + eslint-compat-utils@0.5.1(eslint@9.36.0(jiti@2.6.1)): dependencies: - eslint: 9.36.0(jiti@2.6.0) + eslint: 9.36.0(jiti@2.6.1) semver: 7.7.2 - eslint-compat-utils@0.6.5(eslint@9.36.0(jiti@2.6.0)): + eslint-compat-utils@0.6.5(eslint@9.36.0(jiti@2.6.1)): dependencies: - eslint: 9.36.0(jiti@2.6.0) + eslint: 9.36.0(jiti@2.6.1) semver: 7.7.2 - eslint-config-canonical@45.0.0(@types/node@24.6.0)(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2): + eslint-config-canonical@45.0.0(@types/node@24.6.1)(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.6.0)(eslint@9.36.0(jiti@2.6.0))(graphql@16.11.0)(typescript@5.9.2) + '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.6.1)(eslint@9.36.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3) '@next/eslint-plugin-next': 15.5.4 - '@stylistic/eslint-plugin': 4.4.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@typescript-eslint/eslint-plugin': 8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@typescript-eslint/parser': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@vitest/eslint-plugin': 1.3.13(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - eslint: 9.36.0(jiti@2.6.0) - eslint-config-prettier: 10.1.8(eslint@9.36.0(jiti@2.6.0)) - eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)) - eslint-plugin-ava: 15.1.0(eslint@9.36.0(jiti@2.6.0)) - eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - eslint-plugin-eslint-comments: 3.2.0(eslint@9.36.0(jiti@2.6.0)) - eslint-plugin-fp: 2.3.0(eslint@9.36.0(jiti@2.6.0)) - eslint-plugin-functional: 9.0.2(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)) - eslint-plugin-jest: 28.14.0(@typescript-eslint/eslint-plugin@8.44.1(@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - eslint-plugin-jsdoc: 50.8.0(eslint@9.36.0(jiti@2.6.0)) - eslint-plugin-jsonc: 2.20.1(eslint@9.36.0(jiti@2.6.0)) - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.36.0(jiti@2.6.0)) - eslint-plugin-lodash: 8.0.0(eslint@9.36.0(jiti@2.6.0)) - eslint-plugin-mocha: 10.5.0(eslint@9.36.0(jiti@2.6.0)) + '@stylistic/eslint-plugin': 4.4.1(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + '@vitest/eslint-plugin': 1.3.13(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.36.0(jiti@2.6.1) + eslint-config-prettier: 10.1.8(eslint@9.36.0(jiti@2.6.1)) + eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint@9.36.0(jiti@2.6.1)) + eslint-plugin-ava: 15.1.0(eslint@9.36.0(jiti@2.6.1)) + eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + eslint-plugin-eslint-comments: 3.2.0(eslint@9.36.0(jiti@2.6.1)) + eslint-plugin-fp: 2.3.0(eslint@9.36.0(jiti@2.6.1)) + eslint-plugin-functional: 9.0.2(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)) + eslint-plugin-jest: 28.14.0(@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + eslint-plugin-jsdoc: 50.8.0(eslint@9.36.0(jiti@2.6.1)) + eslint-plugin-jsonc: 2.20.1(eslint@9.36.0(jiti@2.6.1)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.36.0(jiti@2.6.1)) + eslint-plugin-lodash: 8.0.0(eslint@9.36.0(jiti@2.6.1)) + eslint-plugin-mocha: 10.5.0(eslint@9.36.0(jiti@2.6.1)) eslint-plugin-modules-newline: 0.0.6 - eslint-plugin-n: 17.23.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - eslint-plugin-perfectionist: 4.15.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - eslint-plugin-prettier: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0))(prettier@3.6.2) - eslint-plugin-promise: 7.2.1(eslint@9.36.0(jiti@2.6.0)) - eslint-plugin-react: 7.37.5(eslint@9.36.0(jiti@2.6.0)) - eslint-plugin-react-hooks: 5.2.0(eslint@9.36.0(jiti@2.6.0)) - eslint-plugin-regexp: 2.10.0(eslint@9.36.0(jiti@2.6.0)) - eslint-plugin-unicorn: 60.0.0(eslint@9.36.0(jiti@2.6.0)) - eslint-plugin-yml: 1.18.0(eslint@9.36.0(jiti@2.6.0)) - eslint-plugin-zod: 1.4.0(eslint@9.36.0(jiti@2.6.0)) + eslint-plugin-n: 17.23.1(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + eslint-plugin-perfectionist: 4.15.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + eslint-plugin-prettier: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.36.0(jiti@2.6.1)))(eslint@9.36.0(jiti@2.6.1))(prettier@3.6.2) + eslint-plugin-promise: 7.2.1(eslint@9.36.0(jiti@2.6.1)) + eslint-plugin-react: 7.37.5(eslint@9.36.0(jiti@2.6.1)) + eslint-plugin-react-hooks: 5.2.0(eslint@9.36.0(jiti@2.6.1)) + eslint-plugin-regexp: 2.10.0(eslint@9.36.0(jiti@2.6.1)) + eslint-plugin-unicorn: 60.0.0(eslint@9.36.0(jiti@2.6.1)) + eslint-plugin-yml: 1.18.0(eslint@9.36.0(jiti@2.6.1)) + eslint-plugin-zod: 1.4.0(eslint@9.36.0(jiti@2.6.1)) globals: 16.4.0 graphql: 16.11.0 prettier: 3.6.2 ramda: 0.30.1 - typescript-eslint: 8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + typescript-eslint: 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) yaml-eslint-parser: 1.3.0 transitivePeerDependencies: - '@apollo/subgraph' @@ -7775,9 +7615,9 @@ snapshots: - utf-8-validate - vitest - eslint-config-prettier@10.1.8(eslint@9.36.0(jiti@2.6.0)): + eslint-config-prettier@10.1.8(eslint@9.36.0(jiti@2.6.1)): dependencies: - eslint: 9.36.0(jiti@2.6.0) + eslint: 9.36.0(jiti@2.6.1) eslint-import-context@0.1.9(unrs-resolver@1.11.1): dependencies: @@ -7786,26 +7626,26 @@ snapshots: optionalDependencies: unrs-resolver: 1.11.1 - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint@9.36.0(jiti@2.6.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3(supports-color@8.1.1) - eslint: 9.36.0(jiti@2.6.0) + eslint: 9.36.0(jiti@2.6.1) get-tsconfig: 4.10.1 is-bun-module: 2.0.0 stable-hash: 0.0.5 tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)) transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)): + eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint@9.36.0(jiti@2.6.1)): dependencies: debug: 4.4.3(supports-color@8.1.1) - eslint: 9.36.0(jiti@2.6.0) + eslint: 9.36.0(jiti@2.6.1) eslint-import-context: 0.1.9(unrs-resolver@1.11.1) get-tsconfig: 4.10.1 is-bun-module: 2.0.0 @@ -7813,32 +7653,32 @@ snapshots: tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)) transitivePeerDependencies: - supports-color - eslint-json-compat-utils@0.2.1(eslint@9.36.0(jiti@2.6.0))(jsonc-eslint-parser@2.4.1): + eslint-json-compat-utils@0.2.1(eslint@9.36.0(jiti@2.6.1))(jsonc-eslint-parser@2.4.1): dependencies: - eslint: 9.36.0(jiti@2.6.0) + eslint: 9.36.0(jiti@2.6.1) esquery: 1.6.0 jsonc-eslint-parser: 2.4.1 - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint@9.36.0(jiti@2.6.1)))(eslint@9.36.0(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - eslint: 9.36.0(jiti@2.6.0) - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)) + '@typescript-eslint/parser': 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.36.0(jiti@2.6.1) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint@9.36.0(jiti@2.6.1)) transitivePeerDependencies: - supports-color - eslint-plugin-ava@15.1.0(eslint@9.36.0(jiti@2.6.0)): + eslint-plugin-ava@15.1.0(eslint@9.36.0(jiti@2.6.1)): dependencies: enhance-visitors: 1.0.0 - eslint: 9.36.0(jiti@2.6.0) - eslint-utils: 3.0.0(eslint@9.36.0(jiti@2.6.0)) + eslint: 9.36.0(jiti@2.6.1) + eslint-utils: 3.0.0(eslint@9.36.0(jiti@2.6.1)) espree: 9.6.1 espurify: 2.1.1 import-modules: 2.1.0 @@ -7846,14 +7686,14 @@ snapshots: pkg-dir: 5.0.0 resolve-from: 5.0.0 - eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2): + eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/utils': 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) array-includes: 3.1.9 debug: 4.4.3(supports-color@8.1.1) doctrine: 3.0.0 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)) - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint@9.36.0(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint@9.36.0(jiti@2.6.1)))(eslint@9.36.0(jiti@2.6.1)) is-get-set-prop: 1.0.0 is-js-type: 2.0.0 is-obj-prop: 1.0.0 @@ -7873,47 +7713,47 @@ snapshots: - supports-color - typescript - eslint-plugin-es-x@7.8.0(eslint@9.36.0(jiti@2.6.0)): + eslint-plugin-es-x@7.8.0(eslint@9.36.0(jiti@2.6.1)): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.0)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.1 - eslint: 9.36.0(jiti@2.6.0) - eslint-compat-utils: 0.5.1(eslint@9.36.0(jiti@2.6.0)) + eslint: 9.36.0(jiti@2.6.1) + eslint-compat-utils: 0.5.1(eslint@9.36.0(jiti@2.6.1)) - eslint-plugin-eslint-comments@3.2.0(eslint@9.36.0(jiti@2.6.0)): + eslint-plugin-eslint-comments@3.2.0(eslint@9.36.0(jiti@2.6.1)): dependencies: escape-string-regexp: 1.0.5 - eslint: 9.36.0(jiti@2.6.0) + eslint: 9.36.0(jiti@2.6.1) ignore: 5.3.2 - eslint-plugin-fp@2.3.0(eslint@9.36.0(jiti@2.6.0)): + eslint-plugin-fp@2.3.0(eslint@9.36.0(jiti@2.6.1)): dependencies: create-eslint-index: 1.0.0 - eslint: 9.36.0(jiti@2.6.0) + eslint: 9.36.0(jiti@2.6.1) eslint-ast-utils: 1.1.0 lodash: 4.17.21 req-all: 0.1.0 - eslint-plugin-functional@9.0.2(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2): + eslint-plugin-functional@9.0.2(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/utils': 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) deepmerge-ts: 7.1.5 escape-string-regexp: 5.0.0 - eslint: 9.36.0(jiti@2.6.0) - is-immutable-type: 5.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - ts-api-utils: 2.1.0(typescript@5.9.2) - ts-declaration-location: 1.0.7(typescript@5.9.2) + eslint: 9.36.0(jiti@2.6.1) + is-immutable-type: 5.0.1(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + ts-api-utils: 2.1.0(typescript@5.9.3) + ts-declaration-location: 1.0.7(typescript@5.9.3) optionalDependencies: - typescript: 5.9.2 + typescript: 5.9.3 transitivePeerDependencies: - supports-color - eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0)): + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)): dependencies: '@typescript-eslint/types': 8.45.0 comment-parser: 1.4.1 debug: 4.4.3(supports-color@8.1.1) - eslint: 9.36.0(jiti@2.6.0) + eslint: 9.36.0(jiti@2.6.1) eslint-import-context: 0.1.9(unrs-resolver@1.11.1) is-glob: 4.0.3 minimatch: 10.0.3 @@ -7921,28 +7761,28 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/utils': 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) transitivePeerDependencies: - supports-color - eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.44.1(@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2): + eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - eslint: 9.36.0(jiti@2.6.0) + '@typescript-eslint/utils': 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.36.0(jiti@2.6.1) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-jsdoc@50.8.0(eslint@9.36.0(jiti@2.6.0)): + eslint-plugin-jsdoc@50.8.0(eslint@9.36.0(jiti@2.6.1)): dependencies: '@es-joy/jsdoccomment': 0.50.2 are-docs-informative: 0.0.2 comment-parser: 1.4.1 debug: 4.4.3(supports-color@8.1.1) escape-string-regexp: 4.0.0 - eslint: 9.36.0(jiti@2.6.0) + eslint: 9.36.0(jiti@2.6.1) espree: 10.4.0 esquery: 1.6.0 parse-imports-exports: 0.2.4 @@ -7951,12 +7791,12 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-jsonc@2.20.1(eslint@9.36.0(jiti@2.6.0)): + eslint-plugin-jsonc@2.20.1(eslint@9.36.0(jiti@2.6.1)): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.0)) - eslint: 9.36.0(jiti@2.6.0) - eslint-compat-utils: 0.6.5(eslint@9.36.0(jiti@2.6.0)) - eslint-json-compat-utils: 0.2.1(eslint@9.36.0(jiti@2.6.0))(jsonc-eslint-parser@2.4.1) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.1)) + eslint: 9.36.0(jiti@2.6.1) + eslint-compat-utils: 0.6.5(eslint@9.36.0(jiti@2.6.1)) + eslint-json-compat-utils: 0.2.1(eslint@9.36.0(jiti@2.6.1))(jsonc-eslint-parser@2.4.1) espree: 10.4.0 graphemer: 1.4.0 jsonc-eslint-parser: 2.4.1 @@ -7965,7 +7805,7 @@ snapshots: transitivePeerDependencies: - '@eslint/json' - eslint-plugin-jsx-a11y@6.10.2(eslint@9.36.0(jiti@2.6.0)): + eslint-plugin-jsx-a11y@6.10.2(eslint@9.36.0(jiti@2.6.1)): dependencies: aria-query: 5.3.2 array-includes: 3.1.9 @@ -7975,7 +7815,7 @@ snapshots: axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 9.36.0(jiti@2.6.0) + eslint: 9.36.0(jiti@2.6.1) hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 @@ -7984,15 +7824,15 @@ snapshots: safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 - eslint-plugin-lodash@8.0.0(eslint@9.36.0(jiti@2.6.0)): + eslint-plugin-lodash@8.0.0(eslint@9.36.0(jiti@2.6.1)): dependencies: - eslint: 9.36.0(jiti@2.6.0) + eslint: 9.36.0(jiti@2.6.1) lodash: 4.17.21 - eslint-plugin-mocha@10.5.0(eslint@9.36.0(jiti@2.6.0)): + eslint-plugin-mocha@10.5.0(eslint@9.36.0(jiti@2.6.1)): dependencies: - eslint: 9.36.0(jiti@2.6.0) - eslint-utils: 3.0.0(eslint@9.36.0(jiti@2.6.0)) + eslint: 9.36.0(jiti@2.6.1) + eslint-utils: 3.0.0(eslint@9.36.0(jiti@2.6.1)) globals: 13.24.0 rambda: 7.5.0 @@ -8000,50 +7840,50 @@ snapshots: dependencies: requireindex: 1.1.0 - eslint-plugin-n@17.23.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2): + eslint-plugin-n@17.23.1(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.0)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.1)) enhanced-resolve: 5.18.3 - eslint: 9.36.0(jiti@2.6.0) - eslint-plugin-es-x: 7.8.0(eslint@9.36.0(jiti@2.6.0)) + eslint: 9.36.0(jiti@2.6.1) + eslint-plugin-es-x: 7.8.0(eslint@9.36.0(jiti@2.6.1)) get-tsconfig: 4.10.1 globals: 15.15.0 globrex: 0.1.2 ignore: 5.3.2 semver: 7.7.2 - ts-declaration-location: 1.0.7(typescript@5.9.2) + ts-declaration-location: 1.0.7(typescript@5.9.3) transitivePeerDependencies: - typescript - eslint-plugin-perfectionist@4.15.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2): + eslint-plugin-perfectionist@4.15.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3): dependencies: '@typescript-eslint/types': 8.45.0 - '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - eslint: 9.36.0(jiti@2.6.0) + '@typescript-eslint/utils': 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.36.0(jiti@2.6.1) natural-orderby: 5.0.0 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-prettier@5.5.4(eslint-config-prettier@10.1.8(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0))(prettier@3.6.2): + eslint-plugin-prettier@5.5.4(eslint-config-prettier@10.1.8(eslint@9.36.0(jiti@2.6.1)))(eslint@9.36.0(jiti@2.6.1))(prettier@3.6.2): dependencies: - eslint: 9.36.0(jiti@2.6.0) + eslint: 9.36.0(jiti@2.6.1) prettier: 3.6.2 prettier-linter-helpers: 1.0.0 synckit: 0.11.11 optionalDependencies: - eslint-config-prettier: 10.1.8(eslint@9.36.0(jiti@2.6.0)) + eslint-config-prettier: 10.1.8(eslint@9.36.0(jiti@2.6.1)) - eslint-plugin-promise@7.2.1(eslint@9.36.0(jiti@2.6.0)): + eslint-plugin-promise@7.2.1(eslint@9.36.0(jiti@2.6.1)): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.0)) - eslint: 9.36.0(jiti@2.6.0) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.1)) + eslint: 9.36.0(jiti@2.6.1) - eslint-plugin-react-hooks@5.2.0(eslint@9.36.0(jiti@2.6.0)): + eslint-plugin-react-hooks@5.2.0(eslint@9.36.0(jiti@2.6.1)): dependencies: - eslint: 9.36.0(jiti@2.6.0) + eslint: 9.36.0(jiti@2.6.1) - eslint-plugin-react@7.37.5(eslint@9.36.0(jiti@2.6.0)): + eslint-plugin-react@7.37.5(eslint@9.36.0(jiti@2.6.1)): dependencies: array-includes: 3.1.9 array.prototype.findlast: 1.2.5 @@ -8051,7 +7891,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.1 - eslint: 9.36.0(jiti@2.6.0) + eslint: 9.36.0(jiti@2.6.1) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -8065,27 +7905,27 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-regexp@2.10.0(eslint@9.36.0(jiti@2.6.0)): + eslint-plugin-regexp@2.10.0(eslint@9.36.0(jiti@2.6.1)): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.0)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.1 comment-parser: 1.4.1 - eslint: 9.36.0(jiti@2.6.0) + eslint: 9.36.0(jiti@2.6.1) jsdoc-type-pratt-parser: 4.8.0 refa: 0.12.1 regexp-ast-analysis: 0.7.1 scslre: 0.3.0 - eslint-plugin-unicorn@60.0.0(eslint@9.36.0(jiti@2.6.0)): + eslint-plugin-unicorn@60.0.0(eslint@9.36.0(jiti@2.6.1)): dependencies: '@babel/helper-validator-identifier': 7.27.1 - '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.0)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.1)) '@eslint/plugin-kit': 0.3.5 change-case: 5.4.4 ci-info: 4.3.0 clean-regexp: 1.0.0 core-js-compat: 3.45.1 - eslint: 9.36.0(jiti@2.6.0) + eslint: 9.36.0(jiti@2.6.1) esquery: 1.6.0 find-up-simple: 1.0.1 globals: 16.4.0 @@ -8098,20 +7938,20 @@ snapshots: semver: 7.7.2 strip-indent: 4.1.0 - eslint-plugin-yml@1.18.0(eslint@9.36.0(jiti@2.6.0)): + eslint-plugin-yml@1.18.0(eslint@9.36.0(jiti@2.6.1)): dependencies: debug: 4.4.3(supports-color@8.1.1) escape-string-regexp: 4.0.0 - eslint: 9.36.0(jiti@2.6.0) - eslint-compat-utils: 0.6.5(eslint@9.36.0(jiti@2.6.0)) + eslint: 9.36.0(jiti@2.6.1) + eslint-compat-utils: 0.6.5(eslint@9.36.0(jiti@2.6.1)) natural-compare: 1.4.0 yaml-eslint-parser: 1.3.0 transitivePeerDependencies: - supports-color - eslint-plugin-zod@1.4.0(eslint@9.36.0(jiti@2.6.0)): + eslint-plugin-zod@1.4.0(eslint@9.36.0(jiti@2.6.1)): dependencies: - eslint: 9.36.0(jiti@2.6.0) + eslint: 9.36.0(jiti@2.6.1) eslint-scope@5.1.1: dependencies: @@ -8123,9 +7963,9 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-utils@3.0.0(eslint@9.36.0(jiti@2.6.0)): + eslint-utils@3.0.0(eslint@9.36.0(jiti@2.6.1)): dependencies: - eslint: 9.36.0(jiti@2.6.0) + eslint: 9.36.0(jiti@2.6.1) eslint-visitor-keys: 2.1.0 eslint-visitor-keys@2.1.0: {} @@ -8134,9 +7974,9 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.36.0(jiti@2.6.0): + eslint@9.36.0(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.0)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.21.0 '@eslint/config-helpers': 0.3.1 @@ -8172,7 +8012,7 @@ snapshots: natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: - jiti: 2.6.0 + jiti: 2.6.1 transitivePeerDependencies: - supports-color @@ -8399,6 +8239,8 @@ snapshots: functions-have-names@1.2.3: {} + generator-function@2.0.1: {} + gensync@1.0.0-beta.2: {} get-caller-file@2.0.5: {} @@ -8561,17 +8403,17 @@ snapshots: graphemer@1.4.0: {} - graphql-config@5.1.5(@types/node@24.6.0)(graphql@16.11.0)(typescript@5.9.2): + graphql-config@5.1.5(@types/node@24.6.1)(graphql@16.11.0)(typescript@5.9.3): dependencies: '@graphql-tools/graphql-file-loader': 8.1.2(graphql@16.11.0) '@graphql-tools/json-file-loader': 8.0.20(graphql@16.11.0) '@graphql-tools/load': 8.1.2(graphql@16.11.0) '@graphql-tools/merge': 9.1.1(graphql@16.11.0) - '@graphql-tools/url-loader': 8.0.33(@types/node@24.6.0)(graphql@16.11.0) + '@graphql-tools/url-loader': 8.0.33(@types/node@24.6.1)(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) - cosmiconfig: 8.3.6(typescript@5.9.2) + cosmiconfig: 8.3.6(typescript@5.9.3) graphql: 16.11.0 - jiti: 2.6.0 + jiti: 2.6.1 minimatch: 9.0.5 string-env-interpolation: 1.0.1 tslib: 2.8.1 @@ -8827,9 +8669,10 @@ snapshots: dependencies: get-east-asian-width: 1.4.0 - is-generator-function@1.1.0: + is-generator-function@1.1.2: dependencies: call-bound: 1.0.4 + generator-function: 2.0.1 get-proto: 1.0.1 has-tostringtag: 1.0.2 safe-regex-test: 1.1.0 @@ -8843,13 +8686,13 @@ snapshots: dependencies: is-extglob: 2.1.1 - is-immutable-type@5.0.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2): + is-immutable-type@5.0.1(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/type-utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - eslint: 9.36.0(jiti@2.6.0) - ts-api-utils: 2.1.0(typescript@5.9.2) - ts-declaration-location: 1.0.7(typescript@5.9.2) - typescript: 5.9.2 + '@typescript-eslint/type-utils': 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.36.0(jiti@2.6.1) + ts-api-utils: 2.1.0(typescript@5.9.3) + ts-declaration-location: 1.0.7(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -9013,7 +8856,7 @@ snapshots: java-properties@1.0.2: {} - jiti@2.6.0: {} + jiti@2.6.1: {} js-tokens@4.0.0: {} @@ -9036,7 +8879,7 @@ snapshots: jsdoc-type-pratt-parser@5.9.2: {} - jsdoc-type-pratt-parser@6.0.1: {} + jsdoc-type-pratt-parser@6.1.2: {} jsdom@6.5.1: dependencies: @@ -9315,9 +9158,9 @@ snapshots: merge2@1.4.1: {} - meros@1.3.2(@types/node@24.6.0): + meros@1.3.2(@types/node@24.6.1): optionalDependencies: - '@types/node': 24.6.0 + '@types/node': 24.6.1 micro-spelling-correcter@1.1.1: {} @@ -9522,7 +9365,7 @@ snapshots: path-key: 4.0.0 unicorn-magic: 0.3.0 - npm@10.9.3: {} + npm@10.9.4: {} nwmatcher@1.4.4: {} @@ -10055,15 +9898,15 @@ snapshots: refa: 0.12.1 regexp-ast-analysis: 0.7.1 - semantic-release@24.2.9(typescript@5.9.2): + semantic-release@24.2.9(typescript@5.9.3): dependencies: - '@semantic-release/commit-analyzer': 13.0.1(semantic-release@24.2.9(typescript@5.9.2)) + '@semantic-release/commit-analyzer': 13.0.1(semantic-release@24.2.9(typescript@5.9.3)) '@semantic-release/error': 4.0.0 - '@semantic-release/github': 11.0.6(semantic-release@24.2.9(typescript@5.9.2)) - '@semantic-release/npm': 12.0.2(semantic-release@24.2.9(typescript@5.9.2)) - '@semantic-release/release-notes-generator': 14.1.0(semantic-release@24.2.9(typescript@5.9.2)) + '@semantic-release/github': 11.0.6(semantic-release@24.2.9(typescript@5.9.3)) + '@semantic-release/npm': 12.0.2(semantic-release@24.2.9(typescript@5.9.3)) + '@semantic-release/release-notes-generator': 14.1.0(semantic-release@24.2.9(typescript@5.9.3)) aggregate-error: 5.0.0 - cosmiconfig: 9.0.0(typescript@5.9.2) + cosmiconfig: 9.0.0(typescript@5.9.3) debug: 4.4.3(supports-color@8.1.1) env-ci: 11.2.0 execa: 9.6.0 @@ -10498,14 +10341,14 @@ snapshots: traverse@0.6.8: {} - ts-api-utils@2.1.0(typescript@5.9.2): + ts-api-utils@2.1.0(typescript@5.9.3): dependencies: - typescript: 5.9.2 + typescript: 5.9.3 - ts-declaration-location@1.0.7(typescript@5.9.2): + ts-declaration-location@1.0.7(typescript@5.9.3): dependencies: picomatch: 4.0.3 - typescript: 5.9.2 + typescript: 5.9.3 tsconfig-paths@4.2.0: dependencies: @@ -10572,20 +10415,20 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2): + typescript-eslint@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@typescript-eslint/parser': 8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.45.0(eslint@9.36.0(jiti@2.6.0))(typescript@5.9.2) - eslint: 9.36.0(jiti@2.6.0) - typescript: 5.9.2 + '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.36.0(jiti@2.6.1) + typescript: 5.9.3 transitivePeerDependencies: - supports-color typescript@5.6.1-rc: {} - typescript@5.9.2: {} + typescript@5.9.3: {} uglify-js@3.19.3: optional: true @@ -10736,7 +10579,7 @@ snapshots: is-async-function: 2.1.1 is-date-object: 1.1.0 is-finalizationregistry: 1.1.1 - is-generator-function: 1.1.0 + is-generator-function: 1.1.2 is-regex: 1.2.1 is-weakref: 1.1.1 isarray: 2.0.5 diff --git a/src/rules/preferImportTag.js b/src/rules/preferImportTag.js index 9e4e4ccdb..f2c92f51a 100644 --- a/src/rules/preferImportTag.js +++ b/src/rules/preferImportTag.js @@ -16,6 +16,7 @@ import { export default iterateJsdoc(({ context, + indent, jsdoc, settings, sourceCode, @@ -363,10 +364,14 @@ export default iterateJsdoc(({ enableFixer ? (fixer) => { getFixer(element.value, [])(); - const programNode = sourceCode.getNodeByRangeIndex(0); + const programNode = sourceCode.ast; + const commentNodes = sourceCode.getCommentsBefore(programNode); return fixer.insertTextBefore( - /** @type {import('estree').Program} */ (programNode), - `/** @import * as ${element.value} from '${element.value}'; */`, + // @ts-expect-error Ok + commentNodes[0] ?? programNode, + `/** @import * as ${element.value} from '${element.value}'; */${ + commentNodes[0] ? '\n' + indent : '' + }`, ); } : null, ); diff --git a/test/rules/assertions/preferImportTag.js b/test/rules/assertions/preferImportTag.js index 56acb5ccc..288c3b9fe 100644 --- a/test/rules/assertions/preferImportTag.js +++ b/test/rules/assertions/preferImportTag.js @@ -819,6 +819,38 @@ export default { */ `, }, + { + code: ` + /** @type {import('foo')} */ + let foo; + `, + errors: [ + { + line: 2, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + output: ` + /** @import * as foo from 'foo'; */ + /** @type {foo} */ + let foo; + `, + }, + { + code: `/** @type {import('foo')} */ +let foo; + `, + errors: [ + { + line: 1, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + output: `/** @import * as foo from 'foo'; */ +/** @type {foo} */ +let foo; + `, + }, ], valid: [ { From 622b17eb42d8b4e4f7898ead40ceac19b2e52a0a Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Wed, 1 Oct 2025 05:30:59 -0700 Subject: [PATCH 134/189] fix(`prefer-import-tag`): handle other cases of comments before structures early in the document; fixes #1549 --- docs/rules/prefer-import-tag.md | 13 ++++++ src/rules/preferImportTag.js | 25 ++++++++--- test/rules/assertions/preferImportTag.js | 57 +++++++++++++++++++++++- 3 files changed, 87 insertions(+), 8 deletions(-) diff --git a/docs/rules/prefer-import-tag.md b/docs/rules/prefer-import-tag.md index 6640f4434..161609596 100644 --- a/docs/rules/prefer-import-tag.md +++ b/docs/rules/prefer-import-tag.md @@ -302,6 +302,19 @@ let foo; /** @type {import('foo')} */ let foo; // Message: Inline `import()` found; prefer `@import` + +/** @type {import('foo').bar} */ +let foo; +// Message: Inline `import()` found; prefer `@import` + +/** @type {import('foo').bar} */ +let foo; +// "jsdoc/prefer-import-tag": ["error"|"warn", {"outputType":"named-import"}] +// Message: Inline `import()` found; prefer `@import` + +/** @type {import('foo').default} */ +let foo; +// Message: Inline `import()` found; prefer `@import` ```` diff --git a/src/rules/preferImportTag.js b/src/rules/preferImportTag.js index f2c92f51a..132d43c51 100644 --- a/src/rules/preferImportTag.js +++ b/src/rules/preferImportTag.js @@ -386,10 +386,15 @@ export default iterateJsdoc(({ enableFixer ? (fixer) => { getFixer(element.value, [])(); - const programNode = sourceCode.getNodeByRangeIndex(0); + const programNode = sourceCode.ast; + const commentNodes = sourceCode.getCommentsBefore(programNode); + return fixer.insertTextBefore( - /** @type {import('estree').Program} */ (programNode), - `/** @import ${element.value} from '${element.value}'; */`, + // @ts-expect-error Ok + commentNodes[0] ?? programNode, + `/** @import ${element.value} from '${element.value}'; */${ + commentNodes[0] ? '\n' + indent : '' + }`, ); } : null, ); @@ -411,12 +416,18 @@ export default iterateJsdoc(({ )(); } - const programNode = sourceCode.getNodeByRangeIndex(0); + const programNode = sourceCode.ast; + const commentNodes = sourceCode.getCommentsBefore(programNode); return fixer.insertTextBefore( - /** @type {import('estree').Program} */ (programNode), + // @ts-expect-error Ok + commentNodes[0] ?? programNode, outputType === 'namespaced-import' ? - `/** @import * as ${element.value} from '${element.value}'; */` : - `/** @import { ${pathSegments.at(-1)} } from '${element.value}'; */`, + `/** @import * as ${element.value} from '${element.value}'; */${ + commentNodes[0] ? '\n' + indent : '' + }` : + `/** @import { ${pathSegments.at(-1)} } from '${element.value}'; */${ + commentNodes[0] ? '\n' + indent : '' + }`, ); } : null, ); diff --git a/test/rules/assertions/preferImportTag.js b/test/rules/assertions/preferImportTag.js index 288c3b9fe..575cbfc1d 100644 --- a/test/rules/assertions/preferImportTag.js +++ b/test/rules/assertions/preferImportTag.js @@ -234,7 +234,6 @@ export default { */ `, }, - { code: ` /** @@ -851,6 +850,62 @@ let foo; let foo; `, }, + { + code: ` + /** @type {import('foo').bar} */ + let foo; + `, + errors: [ + { + line: 2, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + output: ` + /** @import * as foo from 'foo'; */ + /** @type {foo.bar} */ + let foo; + `, + }, + { + code: ` + /** @type {import('foo').bar} */ + let foo; + `, + errors: [ + { + line: 2, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + options: [ + { + outputType: 'named-import', + }, + ], + output: ` + /** @import { bar } from 'foo'; */ + /** @type {bar} */ + let foo; + `, + }, + { + code: ` + /** @type {import('foo').default} */ + let foo; + `, + errors: [ + { + line: 2, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + output: ` + /** @import foo from 'foo'; */ + /** @type {foo} */ + let foo; + `, + }, ], valid: [ { From e67e474bc5e1ad7ed6e0f70a40b3ea6bea10d17b Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Fri, 3 Oct 2025 14:14:47 -0700 Subject: [PATCH 135/189] feat: add `name-defining` role for likes of `typedef` as distinct from likes of `param` (#1551) * feat: updates jsdoccomment and devDeps. * feat: add `name-defining` role for likes of `typedef` as distinct from likes of `param` Also: - chore: updates jsdoccomment with reserved word checks on types and liberalized handling on namepaths --- .README/rules/no-undefined-types.md | 2 +- .README/settings.md | 1 + docs/rules/no-undefined-types.md | 2 +- docs/rules/valid-types.md | 46 +++ docs/settings.md | 1 + package.json | 12 +- pnpm-lock.yaml | 496 +++++++++++++++------------ src/getDefaultTagStructureForMode.js | 15 +- src/iterateJsdoc.js | 18 +- src/jsdocUtils.js | 21 +- src/rules/checkLineAlignment.js | 2 +- src/rules/noUndefinedTypes.js | 4 +- src/rules/preferImportTag.js | 4 +- src/rules/validTypes.js | 29 +- test/rules/assertions/validTypes.js | 69 ++++ 15 files changed, 454 insertions(+), 268 deletions(-) diff --git a/.README/rules/no-undefined-types.md b/.README/rules/no-undefined-types.md index 9fe06e459..ba26533af 100644 --- a/.README/rules/no-undefined-types.md +++ b/.README/rules/no-undefined-types.md @@ -40,7 +40,7 @@ types for a tag, the function will silently ignore that tag, leaving it to the `valid-types` rule to report parsing errors. If you define your own tags, you can use `settings.jsdoc.structuredTags` -to indicate that a tag's `name` is "namepath-defining" (and should prevent +to indicate that a tag's `name` is "name-defining" or "namepath-defining" (and should prevent reporting on use of that namepath elsewhere) and/or that a tag's `type` is `false` (and should not be checked for types). If the `type` is an array, that array's items will be considered as defined for the purposes of that tag. diff --git a/.README/settings.md b/.README/settings.md index 2fcf19650..50bfdc1c3 100644 --- a/.README/settings.md +++ b/.README/settings.md @@ -315,6 +315,7 @@ values are objects with the following optional properties: name position (non-whitespace immediately after the tag and whitespace), e.g., in `@throws This is an error`, "This" would normally be the name, but "text" allows non-name text here also. This is the default. + - `"name-defining"` - Indicates the tag adds a name to definitions. May not be an arbitrary namepath, unlike `"namepath-defining"` - `"namepath-defining"` - As with `namepath-referencing`, but also indicates the tag adds a namepath to definitions, e.g., to prevent `no-undefined-types` from reporting references to that namepath. diff --git a/docs/rules/no-undefined-types.md b/docs/rules/no-undefined-types.md index ac9804a02..f395b3b57 100644 --- a/docs/rules/no-undefined-types.md +++ b/docs/rules/no-undefined-types.md @@ -50,7 +50,7 @@ types for a tag, the function will silently ignore that tag, leaving it to the `valid-types` rule to report parsing errors. If you define your own tags, you can use `settings.jsdoc.structuredTags` -to indicate that a tag's `name` is "namepath-defining" (and should prevent +to indicate that a tag's `name` is "name-defining" or "namepath-defining" (and should prevent reporting on use of that namepath elsewhere) and/or that a tag's `type` is `false` (and should not be checked for types). If the `type` is an array, that array's items will be considered as defined for the purposes of that tag. diff --git a/docs/rules/valid-types.md b/docs/rules/valid-types.md index 4d03d2d75..8dda9c915 100644 --- a/docs/rules/valid-types.md +++ b/docs/rules/valid-types.md @@ -503,6 +503,15 @@ function quux (items) { * @param {SomeType} aName An inline {@link} tag without content. */ // Message: Inline tag "link" missing content + +/** + * With reserved word in type + * @param {Array} foo + */ +function quux() { + +} +// Message: Syntax error in type: Array ```` @@ -919,5 +928,42 @@ export function onGlobalEvent (selector, type, callback, options) { */ function a () {} // Settings: {"jsdoc":{"structuredTags":{"next":{"required":["type"]}}}} + +/** + * With reserved word in name + * @typedef {SomeType} import + */ + +/** + * With reserved word in namepath + * @param {SomeType} import + */ + +/** + * @param readonly + */ + +/** + * @param {boolean} readonly + */ + +/** + * @param {object} params + * @param {boolean} params.readonly + */ + +/** + * An object interface + * @typedef {Object} FooBar + * @property {boolean} readonly + * @property {boolean} private + * @property {boolean} public + * @property {boolean} constant + */ + +/** + * @param {object} props + * @param {string} props.is + */ ```` diff --git a/docs/settings.md b/docs/settings.md index d22a8a06b..83eff2277 100644 --- a/docs/settings.md +++ b/docs/settings.md @@ -342,6 +342,7 @@ values are objects with the following optional properties: name position (non-whitespace immediately after the tag and whitespace), e.g., in `@throws This is an error`, "This" would normally be the name, but "text" allows non-name text here also. This is the default. + - `"name-defining"` - Indicates the tag adds a name to definitions. May not be an arbitrary namepath, unlike `"namepath-defining"` - `"namepath-defining"` - As with `namepath-referencing`, but also indicates the tag adds a namepath to definitions, e.g., to prevent `no-undefined-types` from reporting references to that namepath. diff --git a/package.json b/package.json index d12d0bae1..482bc4092 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "url": "http://gajus.com" }, "dependencies": { - "@es-joy/jsdoccomment": "~0.65.2", + "@es-joy/jsdoccomment": "~0.67.2", "are-docs-informative": "^0.0.2", "comment-parser": "1.4.1", "debug": "^4.4.3", @@ -41,7 +41,7 @@ "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@types/mocha": "^10.0.10", - "@types/node": "^24.6.1", + "@types/node": "^24.6.2", "@types/semver": "^7.7.1", "@types/spdx-expression-parse": "^3.0.5", "@typescript-eslint/types": "^8.45.0", @@ -52,17 +52,17 @@ "camelcase": "^8.0.0", "chai": "^6.2.0", "decamelize": "^6.0.1", - "eslint": "9.36.0", - "eslint-config-canonical": "^45.0.0", + "eslint": "9.37.0", + "eslint-config-canonical": "^45.0.1", "gitdown": "^4.1.1", "glob": "^11.0.3", "globals": "^16.4.0", "husky": "^9.1.7", - "jsdoc-type-pratt-parser": "^6.1.2", + "jsdoc-type-pratt-parser": "^6.3.2", "json-schema": "^0.4.0", "json-schema-to-typescript": "^15.0.4", "lint-staged": "^16.2.3", - "mocha": "^11.7.3", + "mocha": "^11.7.4", "open-editor": "^5.1.0", "replace": "^1.2.2", "rimraf": "^6.0.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6a2e1d80f..bfa523945 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,8 +12,8 @@ importers: .: dependencies: '@es-joy/jsdoccomment': - specifier: ~0.65.2 - version: 0.65.2 + specifier: ~0.67.2 + version: 0.67.2 are-docs-informative: specifier: ^0.0.2 version: 0.0.2 @@ -59,7 +59,7 @@ importers: version: 7.28.4 '@babel/eslint-parser': specifier: ^7.28.4 - version: 7.28.4(@babel/core@7.28.4)(eslint@9.36.0(jiti@2.6.1)) + version: 7.28.4(@babel/core@7.28.4)(eslint@9.37.0(jiti@2.6.1)) '@babel/plugin-syntax-class-properties': specifier: ^7.12.13 version: 7.12.13(@babel/core@7.28.4) @@ -112,8 +112,8 @@ importers: specifier: ^10.0.10 version: 10.0.10 '@types/node': - specifier: ^24.6.1 - version: 24.6.1 + specifier: ^24.6.2 + version: 24.6.2 '@types/semver': specifier: ^7.7.1 version: 7.7.1 @@ -145,11 +145,11 @@ importers: specifier: ^6.0.1 version: 6.0.1 eslint: - specifier: 9.36.0 - version: 9.36.0(jiti@2.6.1) + specifier: 9.37.0 + version: 9.37.0(jiti@2.6.1) eslint-config-canonical: - specifier: ^45.0.0 - version: 45.0.0(@types/node@24.6.1)(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + specifier: ^45.0.1 + version: 45.0.1(@types/node@24.6.2)(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) gitdown: specifier: ^4.1.1 version: 4.1.1(re2@1.20.9) @@ -163,8 +163,8 @@ importers: specifier: ^9.1.7 version: 9.1.7 jsdoc-type-pratt-parser: - specifier: ^6.1.2 - version: 6.1.2 + specifier: ^6.3.2 + version: 6.3.2 json-schema: specifier: ^0.4.0 version: 0.4.0 @@ -175,8 +175,8 @@ importers: specifier: ^16.2.3 version: 16.2.3 mocha: - specifier: ^11.7.3 - version: 11.7.3 + specifier: ^11.7.4 + version: 11.7.4 open-editor: specifier: ^5.1.0 version: 5.1.0 @@ -194,7 +194,7 @@ importers: version: 5.9.3 typescript-eslint: specifier: ^8.45.0 - version: 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) packages: @@ -366,6 +366,13 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/plugin-proposal-private-methods@7.18.6': + resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} @@ -789,8 +796,8 @@ packages: resolution: {integrity: sha512-yWi6sm7INEwnfS7IJvE0dU+RTrwzLPFcY7e7eGpu/l5Q9lWfQ2ROwZ0qVnc242jw2TUPsfHX3XMIISkGBv57RQ==} engines: {node: '>=20.11.0'} - '@es-joy/jsdoccomment@0.65.2': - resolution: {integrity: sha512-/rrj5oayCc7xdoQZ24Tz/+V41IDm+9ILYpTFJOZgav9vfncMNApKR0t/4d1oRXYTcyLZEcGHGOg4xBsD0Doing==} + '@es-joy/jsdoccomment@0.67.2': + resolution: {integrity: sha512-roH+w/W97L5+gXv9c9n2RrAS/KwIn/10fi7SG+gB9ZOs3pDhhpnnq8lObKCEUTWABL4JTpDXeThU3Q64VqT9UQ==} engines: {node: '>=20.11.0'} '@eslint-community/eslint-utils@4.9.0': @@ -807,8 +814,8 @@ packages: resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-helpers@0.3.1': - resolution: {integrity: sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==} + '@eslint/config-helpers@0.4.0': + resolution: {integrity: sha512-WUFvV4WoIwW8Bv0KeKCIIEgdSiFOsulyN0xrMu+7z43q/hkOLXjvb5u7UC9jDxvRzcrbEmuZBX5yJZz1741jog==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/core@0.15.2': @@ -823,8 +830,8 @@ packages: resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.36.0': - resolution: {integrity: sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw==} + '@eslint/js@9.37.0': + resolution: {integrity: sha512-jaS+NJ+hximswBG6pjNX0uEJZkrT0zwpVi3BA3vX22aFGjJjmgSTSmPpZCRKmoBL5VY/M6p0xsSJx7rk7sy5gg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': @@ -835,6 +842,10 @@ packages: resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/plugin-kit@0.4.0': + resolution: {integrity: sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@fastify/busboy@3.2.0': resolution: {integrity: sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==} @@ -1232,8 +1243,8 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@24.6.1': - resolution: {integrity: sha512-ljvjjs3DNXummeIaooB4cLBKg2U6SPI6Hjra/9rRIy7CpM0HpLtG9HptkMKAb4HYWy5S7HUvJEuWgr/y0U8SHw==} + '@types/node@24.6.2': + resolution: {integrity: sha512-d2L25Y4j+W3ZlNAeMKcy7yDsK425ibcAOO2t7aPTz6gNMH0z2GThtwENCDc0d/Pw9wgyRqE5Px1wkV7naz8ang==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -2215,8 +2226,8 @@ packages: peerDependencies: eslint: '>=6.0.0' - eslint-config-canonical@45.0.0: - resolution: {integrity: sha512-Ar0FukYoH/42WdiZOBVNdfCAJ4owQ8iAf6pXWDULHCUx2Lw+KNmfj/d3dup40LIiEnc//6anHEwwY4+KyzZPVA==} + eslint-config-canonical@45.0.1: + resolution: {integrity: sha512-NLVSc+oyDJfQewT/WnMr+wlmhZYrgBejLe/iE3qMTe1EeCUIvS/IJWQyWprQwWfUKrZwUXFu/OERg2AbbB5Vqg==} engines: {node: '>=16.0.0'} peerDependencies: eslint: ^9 @@ -2424,9 +2435,9 @@ packages: peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - eslint-plugin-react-hooks@5.2.0: - resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} - engines: {node: '>=10'} + eslint-plugin-react-hooks@6.1.0: + resolution: {integrity: sha512-72mucw/WLzEqGvL2vwE6fWR6geO6UbmDjz3eAb3pezxTpFzgbfyUeFKzmZKr9LhwUWMXfTVh1g0rKEJoyKNdoA==} + engines: {node: '>=18'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 @@ -2486,8 +2497,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.36.0: - resolution: {integrity: sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ==} + eslint@9.37.0: + resolution: {integrity: sha512-XyLmROnACWqSxiGYArdef1fItQd47weqB7iwtfr9JHwRrqIXZdcFMvvEcL9xHCmL0SNsOvF0c42lWyM1U5dgig==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -2935,6 +2946,12 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true + hermes-estree@0.25.1: + resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} + + hermes-parser@0.25.1: + resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} + highlight.js@10.7.3: resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} @@ -3182,6 +3199,10 @@ packages: resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} engines: {node: '>=8'} + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + is-plain-obj@2.1.0: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} @@ -3346,8 +3367,8 @@ packages: resolution: {integrity: sha512-TYzkACp/wPvDJLRY7qpHXtrhgwoAaojIOnLaaVNi+AbPU2u1kkjfKd9hXXTq0qSAGsyYXvwUXt99h9I5iCmjjw==} engines: {node: '>=12.0.0'} - jsdoc-type-pratt-parser@6.1.2: - resolution: {integrity: sha512-ruy+JcplsWkqnYq1m/qokaErhEURwf/vhdTzlPNpei7RJabVWxPxGWoCPSCP0sbsz03d590hTkjLdXjyMxH0iA==} + jsdoc-type-pratt-parser@6.3.2: + resolution: {integrity: sha512-u5bv2XxJjwoSL4jyQ+QIrFmo7tFollOnE+BDQbxWJv/m7/kSiZ/P2+E2Y2TmYmST8EeavzFzrGoG4VstTLP5bA==} engines: {node: '>=20.0.0'} jsdom@6.5.1: @@ -3678,8 +3699,8 @@ packages: engines: {node: '>=10'} hasBin: true - mocha@11.7.3: - resolution: {integrity: sha512-iorDKDzBKgVk/npVkW2S+b57ekA9+xKWijVvNpgPMl1odxeB4HavgiydLN54Lhyn/jpcM+Z/BohCzIvHmfaPCw==} + mocha@11.7.4: + resolution: {integrity: sha512-1jYAaY8x0kAZ0XszLWu14pzsf4KV740Gld4HXkhNTXwcHx4AUEDkPzgEHg9CM5dVcW+zv036tjpsEbLraPJj4w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true @@ -5077,6 +5098,15 @@ packages: resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} engines: {node: '>=18'} + zod-validation-error@3.5.3: + resolution: {integrity: sha512-OT5Y8lbUadqVZCsnyFaTQ4/O2mys4tj7PqhdbBCp7McPwvIEKfPtdA6QfPeFQK2/Rz5LgwmAXRJTugBNBi0btw==} + engines: {node: '>=18.0.0'} + peerDependencies: + zod: ^3.25.0 || ^4.0.0 + + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + snapshots: '@andrewbranch/untar.js@1.0.3': {} @@ -5150,11 +5180,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/eslint-parser@7.28.4(@babel/core@7.28.4)(eslint@9.36.0(jiti@2.6.1))': + '@babel/eslint-parser@7.28.4(@babel/core@7.28.4)(eslint@9.37.0(jiti@2.6.1))': dependencies: '@babel/core': 7.28.4 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 9.36.0(jiti@2.6.1) + eslint: 9.37.0(jiti@2.6.1) eslint-visitor-keys: 2.1.0 semver: 6.3.1 @@ -5323,6 +5353,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.4)': dependencies: '@babel/core': 7.28.4 @@ -5853,10 +5891,10 @@ snapshots: '@es-joy/jsdoc-eslint-parser@0.24.0(jiti@2.6.1)': dependencies: '@babel/core': 7.28.4 - '@babel/eslint-parser': 7.28.4(@babel/core@7.28.4)(eslint@9.36.0(jiti@2.6.1)) + '@babel/eslint-parser': 7.28.4(@babel/core@7.28.4)(eslint@9.37.0(jiti@2.6.1)) '@es-joy/jsdoccomment': 0.62.0 - '@typescript-eslint/parser': 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.36.0(jiti@2.6.1) + '@typescript-eslint/parser': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.37.0(jiti@2.6.1) esquery: 1.6.0 typescript: 5.9.3 transitivePeerDependencies: @@ -5879,17 +5917,17 @@ snapshots: esquery: 1.6.0 jsdoc-type-pratt-parser: 5.9.2 - '@es-joy/jsdoccomment@0.65.2': + '@es-joy/jsdoccomment@0.67.2': dependencies: '@types/estree': 1.0.8 '@typescript-eslint/types': 8.45.0 comment-parser: 1.4.1 esquery: 1.6.0 - jsdoc-type-pratt-parser: 6.1.2 + jsdoc-type-pratt-parser: 6.3.2 - '@eslint-community/eslint-utils@4.9.0(eslint@9.36.0(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.0(eslint@9.37.0(jiti@2.6.1))': dependencies: - eslint: 9.36.0(jiti@2.6.1) + eslint: 9.37.0(jiti@2.6.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -5902,7 +5940,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.3.1': {} + '@eslint/config-helpers@0.4.0': + dependencies: + '@eslint/core': 0.16.0 '@eslint/core@0.15.2': dependencies: @@ -5926,7 +5966,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.36.0': {} + '@eslint/js@9.37.0': {} '@eslint/object-schema@2.1.6': {} @@ -5935,18 +5975,23 @@ snapshots: '@eslint/core': 0.15.2 levn: 0.4.1 + '@eslint/plugin-kit@0.4.0': + dependencies: + '@eslint/core': 0.16.0 + levn: 0.4.1 + '@fastify/busboy@3.2.0': {} - '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.6.1)(eslint@9.36.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3)': + '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.6.2)(eslint@9.37.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3)': dependencies: '@graphql-tools/code-file-loader': 8.1.22(graphql@16.11.0) '@graphql-tools/graphql-tag-pluck': 8.3.21(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) debug: 4.4.3(supports-color@8.1.1) - eslint: 9.36.0(jiti@2.6.1) + eslint: 9.37.0(jiti@2.6.1) fast-glob: 3.3.3 graphql: 16.11.0 - graphql-config: 5.1.5(@types/node@24.6.1)(graphql@16.11.0)(typescript@5.9.3) + graphql-config: 5.1.5(@types/node@24.6.2)(graphql@16.11.0)(typescript@5.9.3) graphql-depth-limit: 1.1.0(graphql@16.11.0) lodash.lowercase: 4.3.0 transitivePeerDependencies: @@ -6023,7 +6068,7 @@ snapshots: - uWebSockets.js - utf-8-validate - '@graphql-tools/executor-http@1.3.3(@types/node@24.6.1)(graphql@16.11.0)': + '@graphql-tools/executor-http@1.3.3(@types/node@24.6.2)(graphql@16.11.0)': dependencies: '@graphql-hive/signal': 1.0.0 '@graphql-tools/executor-common': 0.0.4(graphql@16.11.0) @@ -6033,7 +6078,7 @@ snapshots: '@whatwg-node/fetch': 0.10.11 '@whatwg-node/promise-helpers': 1.3.2 graphql: 16.11.0 - meros: 1.3.2(@types/node@24.6.1) + meros: 1.3.2(@types/node@24.6.2) tslib: 2.8.1 transitivePeerDependencies: - '@types/node' @@ -6123,10 +6168,10 @@ snapshots: graphql: 16.11.0 tslib: 2.8.1 - '@graphql-tools/url-loader@8.0.33(@types/node@24.6.1)(graphql@16.11.0)': + '@graphql-tools/url-loader@8.0.33(@types/node@24.6.2)(graphql@16.11.0)': dependencies: '@graphql-tools/executor-graphql-ws': 2.0.7(graphql@16.11.0) - '@graphql-tools/executor-http': 1.3.3(@types/node@24.6.1)(graphql@16.11.0) + '@graphql-tools/executor-http': 1.3.3(@types/node@24.6.2)(graphql@16.11.0) '@graphql-tools/executor-legacy-ws': 1.1.19(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) '@graphql-tools/wrap': 10.1.4(graphql@16.11.0) @@ -6442,10 +6487,10 @@ snapshots: '@sindresorhus/merge-streams@4.0.0': {} - '@stylistic/eslint-plugin@4.4.1(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3)': + '@stylistic/eslint-plugin@4.4.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/utils': 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.36.0(jiti@2.6.1) + '@typescript-eslint/utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.37.0(jiti@2.6.1) eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 @@ -6500,7 +6545,7 @@ snapshots: '@types/ms@2.1.0': {} - '@types/node@24.6.1': + '@types/node@24.6.2': dependencies: undici-types: 7.13.0 @@ -6512,17 +6557,17 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 24.6.1 + '@types/node': 24.6.2 - '@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.45.0 - '@typescript-eslint/type-utils': 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.45.0 - eslint: 9.36.0(jiti@2.6.1) + eslint: 9.37.0(jiti@2.6.1) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -6531,14 +6576,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.45.0 '@typescript-eslint/types': 8.45.0 '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.45.0 debug: 4.4.3(supports-color@8.1.1) - eslint: 9.36.0(jiti@2.6.1) + eslint: 9.37.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -6561,13 +6606,13 @@ snapshots: dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.45.0 '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3(supports-color@8.1.1) - eslint: 9.36.0(jiti@2.6.1) + eslint: 9.37.0(jiti@2.6.1) ts-api-utils: 2.1.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: @@ -6591,13 +6636,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.45.0 '@typescript-eslint/types': 8.45.0 '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.3) - eslint: 9.36.0(jiti@2.6.1) + eslint: 9.37.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -6666,11 +6711,11 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - '@vitest/eslint-plugin@1.3.13(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3)': + '@vitest/eslint-plugin@1.3.13(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.45.0 - '@typescript-eslint/utils': 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.36.0(jiti@2.6.1) + '@typescript-eslint/utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.37.0(jiti@2.6.1) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: @@ -7544,55 +7589,55 @@ snapshots: lodash.get: 4.4.2 lodash.zip: 4.2.0 - eslint-compat-utils@0.5.1(eslint@9.36.0(jiti@2.6.1)): + eslint-compat-utils@0.5.1(eslint@9.37.0(jiti@2.6.1)): dependencies: - eslint: 9.36.0(jiti@2.6.1) + eslint: 9.37.0(jiti@2.6.1) semver: 7.7.2 - eslint-compat-utils@0.6.5(eslint@9.36.0(jiti@2.6.1)): + eslint-compat-utils@0.6.5(eslint@9.37.0(jiti@2.6.1)): dependencies: - eslint: 9.36.0(jiti@2.6.1) + eslint: 9.37.0(jiti@2.6.1) semver: 7.7.2 - eslint-config-canonical@45.0.0(@types/node@24.6.1)(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3): + eslint-config-canonical@45.0.1(@types/node@24.6.2)(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.6.1)(eslint@9.36.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3) + '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.6.2)(eslint@9.37.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3) '@next/eslint-plugin-next': 15.5.4 - '@stylistic/eslint-plugin': 4.4.1(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) - '@vitest/eslint-plugin': 1.3.13(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.36.0(jiti@2.6.1) - eslint-config-prettier: 10.1.8(eslint@9.36.0(jiti@2.6.1)) - eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint@9.36.0(jiti@2.6.1)) - eslint-plugin-ava: 15.1.0(eslint@9.36.0(jiti@2.6.1)) - eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-eslint-comments: 3.2.0(eslint@9.36.0(jiti@2.6.1)) - eslint-plugin-fp: 2.3.0(eslint@9.36.0(jiti@2.6.1)) - eslint-plugin-functional: 9.0.2(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)) - eslint-plugin-jest: 28.14.0(@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-jsdoc: 50.8.0(eslint@9.36.0(jiti@2.6.1)) - eslint-plugin-jsonc: 2.20.1(eslint@9.36.0(jiti@2.6.1)) - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.36.0(jiti@2.6.1)) - eslint-plugin-lodash: 8.0.0(eslint@9.36.0(jiti@2.6.1)) - eslint-plugin-mocha: 10.5.0(eslint@9.36.0(jiti@2.6.1)) + '@stylistic/eslint-plugin': 4.4.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@vitest/eslint-plugin': 1.3.13(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.37.0(jiti@2.6.1) + eslint-config-prettier: 10.1.8(eslint@9.37.0(jiti@2.6.1)) + eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)) + eslint-plugin-ava: 15.1.0(eslint@9.37.0(jiti@2.6.1)) + eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + eslint-plugin-eslint-comments: 3.2.0(eslint@9.37.0(jiti@2.6.1)) + eslint-plugin-fp: 2.3.0(eslint@9.37.0(jiti@2.6.1)) + eslint-plugin-functional: 9.0.2(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)) + eslint-plugin-jest: 28.14.0(@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + eslint-plugin-jsdoc: 50.8.0(eslint@9.37.0(jiti@2.6.1)) + eslint-plugin-jsonc: 2.20.1(eslint@9.37.0(jiti@2.6.1)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.37.0(jiti@2.6.1)) + eslint-plugin-lodash: 8.0.0(eslint@9.37.0(jiti@2.6.1)) + eslint-plugin-mocha: 10.5.0(eslint@9.37.0(jiti@2.6.1)) eslint-plugin-modules-newline: 0.0.6 - eslint-plugin-n: 17.23.1(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-perfectionist: 4.15.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-prettier: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.36.0(jiti@2.6.1)))(eslint@9.36.0(jiti@2.6.1))(prettier@3.6.2) - eslint-plugin-promise: 7.2.1(eslint@9.36.0(jiti@2.6.1)) - eslint-plugin-react: 7.37.5(eslint@9.36.0(jiti@2.6.1)) - eslint-plugin-react-hooks: 5.2.0(eslint@9.36.0(jiti@2.6.1)) - eslint-plugin-regexp: 2.10.0(eslint@9.36.0(jiti@2.6.1)) - eslint-plugin-unicorn: 60.0.0(eslint@9.36.0(jiti@2.6.1)) - eslint-plugin-yml: 1.18.0(eslint@9.36.0(jiti@2.6.1)) - eslint-plugin-zod: 1.4.0(eslint@9.36.0(jiti@2.6.1)) + eslint-plugin-n: 17.23.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + eslint-plugin-perfectionist: 4.15.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + eslint-plugin-prettier: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1))(prettier@3.6.2) + eslint-plugin-promise: 7.2.1(eslint@9.37.0(jiti@2.6.1)) + eslint-plugin-react: 7.37.5(eslint@9.37.0(jiti@2.6.1)) + eslint-plugin-react-hooks: 6.1.0(eslint@9.37.0(jiti@2.6.1)) + eslint-plugin-regexp: 2.10.0(eslint@9.37.0(jiti@2.6.1)) + eslint-plugin-unicorn: 60.0.0(eslint@9.37.0(jiti@2.6.1)) + eslint-plugin-yml: 1.18.0(eslint@9.37.0(jiti@2.6.1)) + eslint-plugin-zod: 1.4.0(eslint@9.37.0(jiti@2.6.1)) globals: 16.4.0 graphql: 16.11.0 prettier: 3.6.2 ramda: 0.30.1 - typescript-eslint: 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + typescript-eslint: 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) yaml-eslint-parser: 1.3.0 transitivePeerDependencies: - '@apollo/subgraph' @@ -7615,9 +7660,9 @@ snapshots: - utf-8-validate - vitest - eslint-config-prettier@10.1.8(eslint@9.36.0(jiti@2.6.1)): + eslint-config-prettier@10.1.8(eslint@9.37.0(jiti@2.6.1)): dependencies: - eslint: 9.36.0(jiti@2.6.1) + eslint: 9.37.0(jiti@2.6.1) eslint-import-context@0.1.9(unrs-resolver@1.11.1): dependencies: @@ -7626,26 +7671,26 @@ snapshots: optionalDependencies: unrs-resolver: 1.11.1 - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint@9.36.0(jiti@2.6.1)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3(supports-color@8.1.1) - eslint: 9.36.0(jiti@2.6.1) + eslint: 9.37.0(jiti@2.6.1) get-tsconfig: 4.10.1 is-bun-module: 2.0.0 stable-hash: 0.0.5 tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)) transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint@9.36.0(jiti@2.6.1)): + eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)): dependencies: debug: 4.4.3(supports-color@8.1.1) - eslint: 9.36.0(jiti@2.6.1) + eslint: 9.37.0(jiti@2.6.1) eslint-import-context: 0.1.9(unrs-resolver@1.11.1) get-tsconfig: 4.10.1 is-bun-module: 2.0.0 @@ -7653,32 +7698,32 @@ snapshots: tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)) transitivePeerDependencies: - supports-color - eslint-json-compat-utils@0.2.1(eslint@9.36.0(jiti@2.6.1))(jsonc-eslint-parser@2.4.1): + eslint-json-compat-utils@0.2.1(eslint@9.37.0(jiti@2.6.1))(jsonc-eslint-parser@2.4.1): dependencies: - eslint: 9.36.0(jiti@2.6.1) + eslint: 9.37.0(jiti@2.6.1) esquery: 1.6.0 jsonc-eslint-parser: 2.4.1 - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint@9.36.0(jiti@2.6.1)))(eslint@9.36.0(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.36.0(jiti@2.6.1) - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint@9.36.0(jiti@2.6.1)) + '@typescript-eslint/parser': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.37.0(jiti@2.6.1) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)) transitivePeerDependencies: - supports-color - eslint-plugin-ava@15.1.0(eslint@9.36.0(jiti@2.6.1)): + eslint-plugin-ava@15.1.0(eslint@9.37.0(jiti@2.6.1)): dependencies: enhance-visitors: 1.0.0 - eslint: 9.36.0(jiti@2.6.1) - eslint-utils: 3.0.0(eslint@9.36.0(jiti@2.6.1)) + eslint: 9.37.0(jiti@2.6.1) + eslint-utils: 3.0.0(eslint@9.37.0(jiti@2.6.1)) espree: 9.6.1 espurify: 2.1.1 import-modules: 2.1.0 @@ -7686,14 +7731,14 @@ snapshots: pkg-dir: 5.0.0 resolve-from: 5.0.0 - eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) array-includes: 3.1.9 debug: 4.4.3(supports-color@8.1.1) doctrine: 3.0.0 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint@9.36.0(jiti@2.6.1)) - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)))(eslint@9.36.0(jiti@2.6.1)))(eslint@9.36.0(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)) is-get-set-prop: 1.0.0 is-js-type: 2.0.0 is-obj-prop: 1.0.0 @@ -7713,34 +7758,34 @@ snapshots: - supports-color - typescript - eslint-plugin-es-x@7.8.0(eslint@9.36.0(jiti@2.6.1)): + eslint-plugin-es-x@7.8.0(eslint@9.37.0(jiti@2.6.1)): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.1 - eslint: 9.36.0(jiti@2.6.1) - eslint-compat-utils: 0.5.1(eslint@9.36.0(jiti@2.6.1)) + eslint: 9.37.0(jiti@2.6.1) + eslint-compat-utils: 0.5.1(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-eslint-comments@3.2.0(eslint@9.36.0(jiti@2.6.1)): + eslint-plugin-eslint-comments@3.2.0(eslint@9.37.0(jiti@2.6.1)): dependencies: escape-string-regexp: 1.0.5 - eslint: 9.36.0(jiti@2.6.1) + eslint: 9.37.0(jiti@2.6.1) ignore: 5.3.2 - eslint-plugin-fp@2.3.0(eslint@9.36.0(jiti@2.6.1)): + eslint-plugin-fp@2.3.0(eslint@9.37.0(jiti@2.6.1)): dependencies: create-eslint-index: 1.0.0 - eslint: 9.36.0(jiti@2.6.1) + eslint: 9.37.0(jiti@2.6.1) eslint-ast-utils: 1.1.0 lodash: 4.17.21 req-all: 0.1.0 - eslint-plugin-functional@9.0.2(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-functional@9.0.2(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) deepmerge-ts: 7.1.5 escape-string-regexp: 5.0.0 - eslint: 9.36.0(jiti@2.6.1) - is-immutable-type: 5.0.1(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.37.0(jiti@2.6.1) + is-immutable-type: 5.0.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) ts-api-utils: 2.1.0(typescript@5.9.3) ts-declaration-location: 1.0.7(typescript@5.9.3) optionalDependencies: @@ -7748,12 +7793,12 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1)): + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)): dependencies: '@typescript-eslint/types': 8.45.0 comment-parser: 1.4.1 debug: 4.4.3(supports-color@8.1.1) - eslint: 9.36.0(jiti@2.6.1) + eslint: 9.37.0(jiti@2.6.1) eslint-import-context: 0.1.9(unrs-resolver@1.11.1) is-glob: 4.0.3 minimatch: 10.0.3 @@ -7761,28 +7806,28 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) transitivePeerDependencies: - supports-color - eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.36.0(jiti@2.6.1) + '@typescript-eslint/utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.37.0(jiti@2.6.1) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-jsdoc@50.8.0(eslint@9.36.0(jiti@2.6.1)): + eslint-plugin-jsdoc@50.8.0(eslint@9.37.0(jiti@2.6.1)): dependencies: '@es-joy/jsdoccomment': 0.50.2 are-docs-informative: 0.0.2 comment-parser: 1.4.1 debug: 4.4.3(supports-color@8.1.1) escape-string-regexp: 4.0.0 - eslint: 9.36.0(jiti@2.6.1) + eslint: 9.37.0(jiti@2.6.1) espree: 10.4.0 esquery: 1.6.0 parse-imports-exports: 0.2.4 @@ -7791,12 +7836,12 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-jsonc@2.20.1(eslint@9.36.0(jiti@2.6.1)): + eslint-plugin-jsonc@2.20.1(eslint@9.37.0(jiti@2.6.1)): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.1)) - eslint: 9.36.0(jiti@2.6.1) - eslint-compat-utils: 0.6.5(eslint@9.36.0(jiti@2.6.1)) - eslint-json-compat-utils: 0.2.1(eslint@9.36.0(jiti@2.6.1))(jsonc-eslint-parser@2.4.1) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) + eslint: 9.37.0(jiti@2.6.1) + eslint-compat-utils: 0.6.5(eslint@9.37.0(jiti@2.6.1)) + eslint-json-compat-utils: 0.2.1(eslint@9.37.0(jiti@2.6.1))(jsonc-eslint-parser@2.4.1) espree: 10.4.0 graphemer: 1.4.0 jsonc-eslint-parser: 2.4.1 @@ -7805,7 +7850,7 @@ snapshots: transitivePeerDependencies: - '@eslint/json' - eslint-plugin-jsx-a11y@6.10.2(eslint@9.36.0(jiti@2.6.1)): + eslint-plugin-jsx-a11y@6.10.2(eslint@9.37.0(jiti@2.6.1)): dependencies: aria-query: 5.3.2 array-includes: 3.1.9 @@ -7815,7 +7860,7 @@ snapshots: axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 9.36.0(jiti@2.6.1) + eslint: 9.37.0(jiti@2.6.1) hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 @@ -7824,15 +7869,15 @@ snapshots: safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 - eslint-plugin-lodash@8.0.0(eslint@9.36.0(jiti@2.6.1)): + eslint-plugin-lodash@8.0.0(eslint@9.37.0(jiti@2.6.1)): dependencies: - eslint: 9.36.0(jiti@2.6.1) + eslint: 9.37.0(jiti@2.6.1) lodash: 4.17.21 - eslint-plugin-mocha@10.5.0(eslint@9.36.0(jiti@2.6.1)): + eslint-plugin-mocha@10.5.0(eslint@9.37.0(jiti@2.6.1)): dependencies: - eslint: 9.36.0(jiti@2.6.1) - eslint-utils: 3.0.0(eslint@9.36.0(jiti@2.6.1)) + eslint: 9.37.0(jiti@2.6.1) + eslint-utils: 3.0.0(eslint@9.37.0(jiti@2.6.1)) globals: 13.24.0 rambda: 7.5.0 @@ -7840,12 +7885,12 @@ snapshots: dependencies: requireindex: 1.1.0 - eslint-plugin-n@17.23.1(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-n@17.23.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) enhanced-resolve: 5.18.3 - eslint: 9.36.0(jiti@2.6.1) - eslint-plugin-es-x: 7.8.0(eslint@9.36.0(jiti@2.6.1)) + eslint: 9.37.0(jiti@2.6.1) + eslint-plugin-es-x: 7.8.0(eslint@9.37.0(jiti@2.6.1)) get-tsconfig: 4.10.1 globals: 15.15.0 globrex: 0.1.2 @@ -7855,35 +7900,43 @@ snapshots: transitivePeerDependencies: - typescript - eslint-plugin-perfectionist@4.15.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-perfectionist@4.15.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): dependencies: '@typescript-eslint/types': 8.45.0 - '@typescript-eslint/utils': 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.36.0(jiti@2.6.1) + '@typescript-eslint/utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.37.0(jiti@2.6.1) natural-orderby: 5.0.0 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-prettier@5.5.4(eslint-config-prettier@10.1.8(eslint@9.36.0(jiti@2.6.1)))(eslint@9.36.0(jiti@2.6.1))(prettier@3.6.2): + eslint-plugin-prettier@5.5.4(eslint-config-prettier@10.1.8(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1))(prettier@3.6.2): dependencies: - eslint: 9.36.0(jiti@2.6.1) + eslint: 9.37.0(jiti@2.6.1) prettier: 3.6.2 prettier-linter-helpers: 1.0.0 synckit: 0.11.11 optionalDependencies: - eslint-config-prettier: 10.1.8(eslint@9.36.0(jiti@2.6.1)) + eslint-config-prettier: 10.1.8(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-promise@7.2.1(eslint@9.36.0(jiti@2.6.1)): + eslint-plugin-promise@7.2.1(eslint@9.37.0(jiti@2.6.1)): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.1)) - eslint: 9.36.0(jiti@2.6.1) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) + eslint: 9.37.0(jiti@2.6.1) - eslint-plugin-react-hooks@5.2.0(eslint@9.36.0(jiti@2.6.1)): + eslint-plugin-react-hooks@6.1.0(eslint@9.37.0(jiti@2.6.1)): dependencies: - eslint: 9.36.0(jiti@2.6.1) + '@babel/core': 7.28.4 + '@babel/parser': 7.28.4 + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.28.4) + eslint: 9.37.0(jiti@2.6.1) + hermes-parser: 0.25.1 + zod: 3.25.76 + zod-validation-error: 3.5.3(zod@3.25.76) + transitivePeerDependencies: + - supports-color - eslint-plugin-react@7.37.5(eslint@9.36.0(jiti@2.6.1)): + eslint-plugin-react@7.37.5(eslint@9.37.0(jiti@2.6.1)): dependencies: array-includes: 3.1.9 array.prototype.findlast: 1.2.5 @@ -7891,7 +7944,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.1 - eslint: 9.36.0(jiti@2.6.1) + eslint: 9.37.0(jiti@2.6.1) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -7905,27 +7958,27 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-regexp@2.10.0(eslint@9.36.0(jiti@2.6.1)): + eslint-plugin-regexp@2.10.0(eslint@9.37.0(jiti@2.6.1)): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.1 comment-parser: 1.4.1 - eslint: 9.36.0(jiti@2.6.1) + eslint: 9.37.0(jiti@2.6.1) jsdoc-type-pratt-parser: 4.8.0 refa: 0.12.1 regexp-ast-analysis: 0.7.1 scslre: 0.3.0 - eslint-plugin-unicorn@60.0.0(eslint@9.36.0(jiti@2.6.1)): + eslint-plugin-unicorn@60.0.0(eslint@9.37.0(jiti@2.6.1)): dependencies: '@babel/helper-validator-identifier': 7.27.1 - '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) '@eslint/plugin-kit': 0.3.5 change-case: 5.4.4 ci-info: 4.3.0 clean-regexp: 1.0.0 core-js-compat: 3.45.1 - eslint: 9.36.0(jiti@2.6.1) + eslint: 9.37.0(jiti@2.6.1) esquery: 1.6.0 find-up-simple: 1.0.1 globals: 16.4.0 @@ -7938,20 +7991,20 @@ snapshots: semver: 7.7.2 strip-indent: 4.1.0 - eslint-plugin-yml@1.18.0(eslint@9.36.0(jiti@2.6.1)): + eslint-plugin-yml@1.18.0(eslint@9.37.0(jiti@2.6.1)): dependencies: debug: 4.4.3(supports-color@8.1.1) escape-string-regexp: 4.0.0 - eslint: 9.36.0(jiti@2.6.1) - eslint-compat-utils: 0.6.5(eslint@9.36.0(jiti@2.6.1)) + eslint: 9.37.0(jiti@2.6.1) + eslint-compat-utils: 0.6.5(eslint@9.37.0(jiti@2.6.1)) natural-compare: 1.4.0 yaml-eslint-parser: 1.3.0 transitivePeerDependencies: - supports-color - eslint-plugin-zod@1.4.0(eslint@9.36.0(jiti@2.6.1)): + eslint-plugin-zod@1.4.0(eslint@9.37.0(jiti@2.6.1)): dependencies: - eslint: 9.36.0(jiti@2.6.1) + eslint: 9.37.0(jiti@2.6.1) eslint-scope@5.1.1: dependencies: @@ -7963,9 +8016,9 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-utils@3.0.0(eslint@9.36.0(jiti@2.6.1)): + eslint-utils@3.0.0(eslint@9.37.0(jiti@2.6.1)): dependencies: - eslint: 9.36.0(jiti@2.6.1) + eslint: 9.37.0(jiti@2.6.1) eslint-visitor-keys: 2.1.0 eslint-visitor-keys@2.1.0: {} @@ -7974,16 +8027,16 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.36.0(jiti@2.6.1): + eslint@9.37.0(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.21.0 - '@eslint/config-helpers': 0.3.1 - '@eslint/core': 0.15.2 + '@eslint/config-helpers': 0.4.0 + '@eslint/core': 0.16.0 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.36.0 - '@eslint/plugin-kit': 0.3.5 + '@eslint/js': 9.37.0 + '@eslint/plugin-kit': 0.4.0 '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 @@ -8403,13 +8456,13 @@ snapshots: graphemer@1.4.0: {} - graphql-config@5.1.5(@types/node@24.6.1)(graphql@16.11.0)(typescript@5.9.3): + graphql-config@5.1.5(@types/node@24.6.2)(graphql@16.11.0)(typescript@5.9.3): dependencies: '@graphql-tools/graphql-file-loader': 8.1.2(graphql@16.11.0) '@graphql-tools/json-file-loader': 8.0.20(graphql@16.11.0) '@graphql-tools/load': 8.1.2(graphql@16.11.0) '@graphql-tools/merge': 9.1.1(graphql@16.11.0) - '@graphql-tools/url-loader': 8.0.33(@types/node@24.6.1)(graphql@16.11.0) + '@graphql-tools/url-loader': 8.0.33(@types/node@24.6.2)(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) cosmiconfig: 8.3.6(typescript@5.9.3) graphql: 16.11.0 @@ -8482,6 +8535,12 @@ snapshots: he@1.2.0: {} + hermes-estree@0.25.1: {} + + hermes-parser@0.25.1: + dependencies: + hermes-estree: 0.25.1 + highlight.js@10.7.3: {} hook-std@4.0.0: {} @@ -8686,10 +8745,10 @@ snapshots: dependencies: is-extglob: 2.1.1 - is-immutable-type@5.0.1(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3): + is-immutable-type@5.0.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/type-utils': 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.36.0(jiti@2.6.1) + '@typescript-eslint/type-utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.37.0(jiti@2.6.1) ts-api-utils: 2.1.0(typescript@5.9.3) ts-declaration-location: 1.0.7(typescript@5.9.3) typescript: 5.9.3 @@ -8725,6 +8784,8 @@ snapshots: is-obj@2.0.0: {} + is-path-inside@3.0.3: {} + is-plain-obj@2.1.0: {} is-plain-obj@4.1.0: {} @@ -8879,7 +8940,7 @@ snapshots: jsdoc-type-pratt-parser@5.9.2: {} - jsdoc-type-pratt-parser@6.1.2: {} + jsdoc-type-pratt-parser@6.3.2: {} jsdom@6.5.1: dependencies: @@ -9158,9 +9219,9 @@ snapshots: merge2@1.4.1: {} - meros@1.3.2(@types/node@24.6.1): + meros@1.3.2(@types/node@24.6.2): optionalDependencies: - '@types/node': 24.6.1 + '@types/node': 24.6.2 micro-spelling-correcter@1.1.1: {} @@ -9247,7 +9308,7 @@ snapshots: mkdirp@1.0.4: optional: true - mocha@11.7.3: + mocha@11.7.4: dependencies: browser-stdout: 1.3.1 chokidar: 4.0.3 @@ -9257,6 +9318,7 @@ snapshots: find-up: 5.0.0 glob: 10.4.5 he: 1.2.0 + is-path-inside: 3.0.3 js-yaml: 4.1.0 log-symbols: 4.1.0 minimatch: 9.0.5 @@ -10415,13 +10477,13 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3): + typescript-eslint@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.45.0(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.36.0(jiti@2.6.1) + '@typescript-eslint/utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.37.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -10728,3 +10790,9 @@ snapshots: yocto-queue@0.1.0: {} yoctocolors@2.1.2: {} + + zod-validation-error@3.5.3(zod@3.25.76): + dependencies: + zod: 3.25.76 + + zod@3.25.76: {} diff --git a/src/getDefaultTagStructureForMode.js b/src/getDefaultTagStructureForMode.js index fb6080729..75c1ffab4 100644 --- a/src/getDefaultTagStructureForMode.js +++ b/src/getDefaultTagStructureForMode.js @@ -18,7 +18,7 @@ const getDefaultTagStructureForMode = (mode) => { const isJsdocTypescriptOrPermissive = isJsdocOrTypescript || isPermissive; // Properties: - // `namepathRole` - 'namepath-referencing'|'namepath-defining'|'namepath-or-url-referencing'|'text'|false + // `namepathRole` - 'namepath-referencing'|'name-defining'|'namepath-defining'|'namepath-or-url-referencing'|'text'|false // `typeAllowed` - boolean // `nameRequired` - boolean // `typeRequired` - boolean @@ -35,11 +35,7 @@ const getDefaultTagStructureForMode = (mode) => { // Among `namepath-defining` and `namepath-referencing`, these do not seem // to allow curly brackets in their doc signature or examples (`modifies` - // references namepaths within its type brackets and `param` is - // name-defining but not namepath-defining, so not part of these groups) - - // Todo: Should support special processing for "name" as distinct from - // "namepath" (e.g., param can't define a namepath) + // references namepaths within its type brackets) // Todo: Should support a `tutorialID` type (for `@tutorial` block and // inline) @@ -249,6 +245,9 @@ const getDefaultTagStructureForMode = (mode) => { [ 'enum', new Map(/** @type {[string, string|boolean][]} */ ([ + [ + 'namepathRole', 'name-defining', + ], // Has example showing curly brackets but not in doc signature [ 'typeAllowed', true, @@ -614,7 +613,7 @@ const getDefaultTagStructureForMode = (mode) => { 'module', new Map(/** @type {[string, string|boolean][]} */ ([ // Optional "name" and no curly brackets // this block impacts `no-undefined-types` and `valid-types` (search for - // "isNamepathDefiningTag|tagMightHaveNamepath|tagMightHaveEitherTypeOrNamePosition") + // "isNameOrNamepathDefiningTag|tagMightHaveNameOrNamepath|tagMightHaveEitherTypeOrNamePosition") [ 'namepathRole', isJsdoc ? 'namepath-defining' : 'text', ], @@ -907,7 +906,7 @@ const getDefaultTagStructureForMode = (mode) => { // Seems to require a "namepath" in the signature (with no // counter-examples) [ - 'namepathRole', 'namepath-defining', + 'namepathRole', 'name-defining', ], // TypeScript may allow it to be dropped if followed by @property or @member; diff --git a/src/iterateJsdoc.js b/src/iterateJsdoc.js index 11b1235f7..7064f9d9a 100644 --- a/src/iterateJsdoc.js +++ b/src/iterateJsdoc.js @@ -92,10 +92,10 @@ import esquery from 'esquery'; * parseClosureTemplateTag: ParseClosureTemplateTag, * getPreferredTagNameObject: GetPreferredTagNameObject, * pathDoesNotBeginWith: import('./jsdocUtils.js').PathDoesNotBeginWith - * isNamepathDefiningTag: IsNamepathX, + * isNameOrNamepathDefiningTag: IsNamepathX, * isNamepathReferencingTag: IsNamepathX, * isNamepathOrUrlReferencingTag: IsNamepathX, - * tagMightHaveNamepath: IsNamepathX, + * tagMightHaveNameOrNamepath: IsNamepathX, * }} BasicUtils */ @@ -526,10 +526,10 @@ import esquery from 'esquery'; * tagMustHaveNamePosition: TagMustHave, * tagMustHaveTypePosition: TagMustHave, * tagMissingRequiredTypeOrNamepath: TagMissingRequiredTypeOrNamepath, - * isNamepathDefiningTag: IsNamepathX, + * isNameOrNamepathDefiningTag: IsNamepathX, * isNamepathReferencingTag: IsNamepathX, * isNamepathOrUrlReferencingTag: IsNamepathX, - * tagMightHaveNamepath: IsNamepathX, + * tagMightHaveNameOrNamepath: IsNamepathX, * getTagStructureForMode: GetTagStructureForMode, * mayBeUndefinedTypeTag: MayBeUndefinedTypeTag, * hasValueOrExecutorHasNonEmptyResolveValue: HasValueOrExecutorHasNonEmptyResolveValue, @@ -614,18 +614,18 @@ const getBasicUtils = (context, { const utils = {}; for (const method of [ - 'isNamepathDefiningTag', + 'isNameOrNamepathDefiningTag', 'isNamepathReferencingTag', 'isNamepathOrUrlReferencingTag', - 'tagMightHaveNamepath', + 'tagMightHaveNameOrNamepath', ]) { /** @type {IsNamepathX} */ utils[ - /** @type {"isNamepathDefiningTag"|"isNamepathReferencingTag"|"isNamepathOrUrlReferencingTag"|"tagMightHaveNamepath"} */ ( + /** @type {"isNameOrNamepathDefiningTag"|"isNamepathReferencingTag"|"isNamepathOrUrlReferencingTag"|"tagMightHaveNameOrNamepath"} */ ( method )] = (tagName) => { return jsdocUtils[ - /** @type {"isNamepathDefiningTag"|"isNamepathReferencingTag"|"isNamepathOrUrlReferencingTag"|"tagMightHaveNamepath"} */ + /** @type {"isNameOrNamepathDefiningTag"|"isNamepathReferencingTag"|"isNamepathOrUrlReferencingTag"|"tagMightHaveNameOrNamepath"} */ (method) ](tagName); }; @@ -1769,7 +1769,7 @@ const getUtils = ( /** * @typedef {{ * [key: string]: { - * name?: "text"|"namepath-defining"|"namepath-referencing"|false, + * name?: "text"|"name-defining"|"namepath-defining"|"namepath-referencing"|false, * type?: boolean|string[], * required?: ("name"|"type"|"typeOrNameRequired")[] * } diff --git a/src/jsdocUtils.js b/src/jsdocUtils.js index b1b4f170f..4a6554fa3 100644 --- a/src/jsdocUtils.js +++ b/src/jsdocUtils.js @@ -1055,10 +1055,14 @@ const getTagStructureForMode = (mode, structuredTags) => { * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap * @returns {boolean} */ -const isNamepathDefiningTag = (tag, tagMap = tagStructure) => { +const isNameOrNamepathDefiningTag = (tag, tagMap = tagStructure) => { const tagStruct = ensureMap(tagMap, tag); - return tagStruct.get('namepathRole') === 'namepath-defining'; + return /** @type {(string|boolean|undefined)[]} */ ([ + 'name-defining', + 'namepath-defining', + ]).includes(/** @type {string|boolean|undefined} */ ( + tagStruct.get('namepathRole'))); }; /** @@ -1110,7 +1114,8 @@ const tagMightHaveTypePosition = (tag, tagMap = tagStructure) => { }; const namepathTypes = new Set([ - 'namepath-defining', 'namepath-referencing', + 'name-defining', 'namepath-defining', + 'namepath-referencing', ]); /** @@ -1131,7 +1136,7 @@ const tagMightHaveNamePosition = (tag, tagMap = tagStructure) => { * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap * @returns {boolean} */ -const tagMightHaveNamepath = (tag, tagMap = tagStructure) => { +const tagMightHaveNameOrNamepath = (tag, tagMap = tagStructure) => { const tagStruct = ensureMap(tagMap, tag); const nampathRole = tagStruct.get('namepathRole'); @@ -1157,7 +1162,7 @@ const tagMustHaveNamePosition = (tag, tagMap = tagStructure) => { * @returns {boolean} */ const tagMightHaveEitherTypeOrNamePosition = (tag, tagMap) => { - return Boolean(tagMightHaveTypePosition(tag, tagMap)) || tagMightHaveNamepath(tag, tagMap); + return Boolean(tagMightHaveTypePosition(tag, tagMap)) || tagMightHaveNameOrNamepath(tag, tagMap); }; /** @@ -1182,7 +1187,7 @@ const tagMissingRequiredTypeOrNamepath = (tag, tagMap = tagStructure) => { const hasTypePosition = mightHaveTypePosition && Boolean(tag.type); const hasNameOrNamepathPosition = ( tagMustHaveNamePosition(tag.tag, tagMap) || - tagMightHaveNamepath(tag.tag, tagMap) + tagMightHaveNameOrNamepath(tag.tag, tagMap) ) && Boolean(tag.name); const mustHaveEither = tagMustHaveEitherTypeOrNamePosition(tag.tag, tagMap); const hasEither = tagMightHaveEitherTypeOrNamePosition(tag.tag, tagMap) && @@ -1890,7 +1895,7 @@ export { hasYieldValue, isConstructor, isGetter, - isNamepathDefiningTag, + isNameOrNamepathDefiningTag, isNamepathOrUrlReferencingTag, isNamepathReferencingTag, isSetter, @@ -1902,7 +1907,7 @@ export { setTagStructure, strictNativeTypes, tagMightHaveEitherTypeOrNamePosition, - tagMightHaveNamepath, + tagMightHaveNameOrNamepath, tagMightHaveNamePosition, tagMightHaveTypePosition, tagMissingRequiredTypeOrNamepath, diff --git a/src/rules/checkLineAlignment.js b/src/rules/checkLineAlignment.js index 5f2d9da03..10929b8a9 100644 --- a/src/rules/checkLineAlignment.js +++ b/src/rules/checkLineAlignment.js @@ -49,7 +49,7 @@ const checkNotAlignedPerTag = (utils, tag, customSpacings) => { let spacerProps; /** @type {ContentProp[]} */ let contentProps; - const mightHaveNamepath = utils.tagMightHaveNamepath(tag.tag); + const mightHaveNamepath = utils.tagMightHaveNameOrNamepath(tag.tag); if (mightHaveNamepath) { spacerProps = [ 'postDelimiter', 'postTag', 'postType', 'postName', diff --git a/src/rules/noUndefinedTypes.js b/src/rules/noUndefinedTypes.js index acd08b6fd..fbb070e35 100644 --- a/src/rules/noUndefinedTypes.js +++ b/src/rules/noUndefinedTypes.js @@ -139,7 +139,7 @@ export default iterateJsdoc(({ return doc.tags.filter(({ tag, }) => { - return utils.isNamepathDefiningTag(tag) && ![ + return utils.isNameOrNamepathDefiningTag(tag) && ![ 'arg', 'argument', 'param', @@ -569,7 +569,7 @@ export default iterateJsdoc(({ const tags = doc.tags.filter(({ tag, }) => { - return utils.isNamepathDefiningTag(tag); + return utils.isNameOrNamepathDefiningTag(tag); }); if (!tags.length) { return []; diff --git a/src/rules/preferImportTag.js b/src/rules/preferImportTag.js index 132d43c51..216e1f204 100644 --- a/src/rules/preferImportTag.js +++ b/src/rules/preferImportTag.js @@ -48,7 +48,7 @@ export default iterateJsdoc(({ return doc.tags.filter(({ tag, }) => { - return utils.isNamepathDefiningTag(tag); + return utils.isNameOrNamepathDefiningTag(tag); }); }); @@ -437,7 +437,7 @@ export default iterateJsdoc(({ for (const tag of jsdoc.tags) { const mightHaveTypePosition = utils.tagMightHaveTypePosition(tag.tag); const hasTypePosition = mightHaveTypePosition === true && Boolean(tag.type); - if (hasTypePosition && (!exemptTypedefs || !utils.isNamepathDefiningTag(tag.tag))) { + if (hasTypePosition && (!exemptTypedefs || !utils.isNameOrNamepathDefiningTag(tag.tag))) { iterateInlineImports(tag); } } diff --git a/src/rules/validTypes.js b/src/rules/validTypes.js index bf91c2b14..7a9e32703 100644 --- a/src/rules/validTypes.js +++ b/src/rules/validTypes.js @@ -1,6 +1,8 @@ import iterateJsdoc from '../iterateJsdoc.js'; import { parse, + // parseName, + parseNamePath, traverse, tryParse, } from '@es-joy/jsdoccomment'; @@ -10,14 +12,6 @@ const inlineTags = new Set([ 'tutorial', ]); -const jsdocTypePrattKeywords = new Set([ - 'extends', - 'import', - 'is', - 'readonly', - 'typeof', -]); - const asExpression = /as\s+/v; const suppressTypes = new Set([ @@ -88,11 +82,14 @@ const suppressTypes = new Set([ /** * @param {string} path + * @param {import('jsdoc-type-pratt-parser').ParseMode|"permissive"} mode * @returns {boolean} */ -const tryParsePathIgnoreError = (path) => { +const tryParsePathIgnoreError = (path, mode) => { try { - tryParse(path); + parseNamePath(path, mode === 'permissive' ? 'jsdoc' : mode, { + includeSpecial: true, + }); return true; } catch { @@ -125,8 +122,7 @@ export default iterateJsdoc(({ */ const validNamepathParsing = function (namepath, tagName) { if ( - tryParsePathIgnoreError(namepath) || - jsdocTypePrattKeywords.has(namepath) + tryParsePathIgnoreError(namepath, mode) ) { return true; } @@ -141,7 +137,7 @@ export default iterateJsdoc(({ if ([ '#', '.', '~', ].includes(endChar)) { - handled = tryParsePathIgnoreError(namepath.slice(0, -1)); + handled = tryParsePathIgnoreError(namepath.slice(0, -1), mode); } break; @@ -149,7 +145,7 @@ export default iterateJsdoc(({ case 'module': case 'requires': { if (!namepath.startsWith('module:')) { - handled = tryParsePathIgnoreError(`module:${namepath}`); + handled = tryParsePathIgnoreError(`module:${namepath}`, mode); } break; @@ -160,7 +156,7 @@ export default iterateJsdoc(({ if ([ '#', '.', '~', ].includes(startChar)) { - handled = tryParsePathIgnoreError(namepath.slice(1)); + handled = tryParsePathIgnoreError(namepath.slice(1), mode); } } } @@ -356,7 +352,7 @@ export default iterateJsdoc(({ // VALID NAME/NAMEPATH const hasNameOrNamepathPosition = ( tagMustHaveNamePosition !== false || - utils.tagMightHaveNamepath(tag.tag) + utils.tagMightHaveNameOrNamepath(tag.tag) ) && Boolean(tag.name); if (hasNameOrNamepathPosition) { @@ -366,6 +362,7 @@ export default iterateJsdoc(({ // `utils.parseClosureTemplateTag`, so first try a raw // value; we really need a proper parser instead, however. tag.name.trim().replace(/^\[?(?.*?)=.*$/v, '$'), + mode, )) { for (const namepath of utils.parseClosureTemplateTag(tag)) { validNamepathParsing(namepath); diff --git a/test/rules/assertions/validTypes.js b/test/rules/assertions/validTypes.js index ab0ac0c7b..76db1b39b 100644 --- a/test/rules/assertions/validTypes.js +++ b/test/rules/assertions/validTypes.js @@ -1129,6 +1129,23 @@ export default /** @type {import('../index.js').TestCases} */ ({ }, ], }, + { + code: ` + /** + * With reserved word in type + * @param {Array} foo + */ + function quux() { + + } + `, + errors: [ + { + line: 4, + message: 'Syntax error in type: Array', + }, + ], + }, ], valid: [ { @@ -1908,5 +1925,57 @@ export default /** @type {import('../index.js').TestCases} */ ({ }, }, }, + { + code: ` + /** + * With reserved word in name + * @typedef {SomeType} import + */ + `, + }, + { + code: ` + /** + * With reserved word in namepath + * @param {SomeType} import + */ + `, + }, + { + code: ` + /** + * @param readonly + */ + + /** + * @param {boolean} readonly + */ + + /** + * @param {object} params + * @param {boolean} params.readonly + */ + `, + }, + { + code: ` + /** + * An object interface + * @typedef {Object} FooBar + * @property {boolean} readonly + * @property {boolean} private + * @property {boolean} public + * @property {boolean} constant + */ + `, + }, + { + code: ` + /** + * @param {object} props + * @param {string} props.is + */ + `, + }, ], }); From 6efd9e97a8b91525e0c6919cd7e50e7476b854bc Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sat, 4 Oct 2025 23:02:57 -0700 Subject: [PATCH 136/189] fix(`valid-types`): parse distinctly for names vs. namepaths (#1552) Also: - chore: update jsdocccomment and jsdoc-type-pratt-parser - chore: avoid `eval` in build script --- docs/rules/valid-types.md | 13 +++++++++++- package.json | 6 +++--- pnpm-lock.yaml | 32 ++++++++++++++-------------- src/bin/generateOptions.js | 12 ++++++----- src/iterateJsdoc.js | 9 ++++++-- src/jsdocUtils.js | 33 +++++++++++++++++++++++++++++ src/rules/validTypes.js | 31 +++++++++++++++++++++++---- test/rules/assertions/validTypes.js | 33 ++++++++++++++++++++++++++++- 8 files changed, 137 insertions(+), 32 deletions(-) diff --git a/docs/rules/valid-types.md b/docs/rules/valid-types.md index 8dda9c915..e9f481411 100644 --- a/docs/rules/valid-types.md +++ b/docs/rules/valid-types.md @@ -233,7 +233,18 @@ function quux() { /** * @typedef {string} UserStr%ng */ -// Message: Syntax error in namepath: UserStr%ng +// Message: Syntax error in name: UserStr%ng + +/** + * @typedef {string} module:abc/def + */ +// Message: Syntax error in name: module:abc/def + +/** + * @typedef {string} module:abc/def + */ +// Settings: {"jsdoc":{"mode":"permissive"}} +// Message: Syntax error in name: module:abc/def /** * @this diff --git a/package.json b/package.json index 482bc4092..98df67e85 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "url": "http://gajus.com" }, "dependencies": { - "@es-joy/jsdoccomment": "~0.67.2", + "@es-joy/jsdoccomment": "~0.68.1", "are-docs-informative": "^0.0.2", "comment-parser": "1.4.1", "debug": "^4.4.3", @@ -27,7 +27,7 @@ "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-transform-flow-strip-types": "^7.27.1", "@babel/preset-env": "^7.28.3", - "@es-joy/escodegen": "^4.0.3", + "@es-joy/escodegen": "^4.2.0", "@es-joy/jsdoc-eslint-parser": "^0.24.0", "@eslint/core": "^0.16.0", "@hkdobrev/run-if-changed": "^0.6.3", @@ -58,7 +58,7 @@ "glob": "^11.0.3", "globals": "^16.4.0", "husky": "^9.1.7", - "jsdoc-type-pratt-parser": "^6.3.2", + "jsdoc-type-pratt-parser": "^6.3.3", "json-schema": "^0.4.0", "json-schema-to-typescript": "^15.0.4", "lint-staged": "^16.2.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bfa523945..bf64e6460 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,8 +12,8 @@ importers: .: dependencies: '@es-joy/jsdoccomment': - specifier: ~0.67.2 - version: 0.67.2 + specifier: ~0.68.1 + version: 0.68.1 are-docs-informative: specifier: ^0.0.2 version: 0.0.2 @@ -70,8 +70,8 @@ importers: specifier: ^7.28.3 version: 7.28.3(@babel/core@7.28.4) '@es-joy/escodegen': - specifier: ^4.0.3 - version: 4.0.3 + specifier: ^4.2.0 + version: 4.2.0 '@es-joy/jsdoc-eslint-parser': specifier: ^0.24.0 version: 0.24.0(jiti@2.6.1) @@ -163,8 +163,8 @@ importers: specifier: ^9.1.7 version: 9.1.7 jsdoc-type-pratt-parser: - specifier: ^6.3.2 - version: 6.3.2 + specifier: ^6.3.3 + version: 6.3.3 json-schema: specifier: ^0.4.0 version: 0.4.0 @@ -775,8 +775,8 @@ packages: resolution: {integrity: sha512-CsFmA3u3c2QoLDTfEpGr4t25fjMU31nyvse7IzWTvb0ZycuPjMjb0fjlheh+PbhBYb9YLugnT2uY6Mwcg1o+Zg==} engines: {node: '>=18.0.0'} - '@es-joy/escodegen@4.0.3': - resolution: {integrity: sha512-cX8TsWfGHIyVpLK74fY05RSZ/s6NsIPo18C8oD5hR49TXajotOR/fk59eI08sWdnUsrXkNeb97ShUJvu3osAZg==} + '@es-joy/escodegen@4.2.0': + resolution: {integrity: sha512-jWqqS3StW6vGwJeT8yu6alS4nipOBi3kD/pR63+9hG2NfGafCJ4viDME15mVf+fyupyptcUJDXfv63gFF5Gzfg==} engines: {node: '>=6.0'} hasBin: true @@ -796,8 +796,8 @@ packages: resolution: {integrity: sha512-yWi6sm7INEwnfS7IJvE0dU+RTrwzLPFcY7e7eGpu/l5Q9lWfQ2ROwZ0qVnc242jw2TUPsfHX3XMIISkGBv57RQ==} engines: {node: '>=20.11.0'} - '@es-joy/jsdoccomment@0.67.2': - resolution: {integrity: sha512-roH+w/W97L5+gXv9c9n2RrAS/KwIn/10fi7SG+gB9ZOs3pDhhpnnq8lObKCEUTWABL4JTpDXeThU3Q64VqT9UQ==} + '@es-joy/jsdoccomment@0.68.1': + resolution: {integrity: sha512-wJJXnfG2Pq7ZC8IeOupkkAVtEH6OYy1uVxRTeshXDQfSNsZneS7FUQlNf710osZ5Yz/b5ev9xChvybTT7CM63g==} engines: {node: '>=20.11.0'} '@eslint-community/eslint-utils@4.9.0': @@ -3367,8 +3367,8 @@ packages: resolution: {integrity: sha512-TYzkACp/wPvDJLRY7qpHXtrhgwoAaojIOnLaaVNi+AbPU2u1kkjfKd9hXXTq0qSAGsyYXvwUXt99h9I5iCmjjw==} engines: {node: '>=12.0.0'} - jsdoc-type-pratt-parser@6.3.2: - resolution: {integrity: sha512-u5bv2XxJjwoSL4jyQ+QIrFmo7tFollOnE+BDQbxWJv/m7/kSiZ/P2+E2Y2TmYmST8EeavzFzrGoG4VstTLP5bA==} + jsdoc-type-pratt-parser@6.3.3: + resolution: {integrity: sha512-N1HQK15ZXdwgmXsALjUWW9Cwyg1BQS5hfP8KzDkbR4mjb+Ep8Uxcfwz+OU1tsNCRg99rk62d8GMNdG8Qz4k+Gg==} engines: {node: '>=20.0.0'} jsdom@6.5.1: @@ -5876,7 +5876,7 @@ snapshots: '@whatwg-node/promise-helpers': 1.3.2 tslib: 2.8.1 - '@es-joy/escodegen@4.0.3': + '@es-joy/escodegen@4.2.0': dependencies: '@es-joy/estraverse': 7.1.1 '@es-joy/jsdoccomment': 0.62.0 @@ -5917,13 +5917,13 @@ snapshots: esquery: 1.6.0 jsdoc-type-pratt-parser: 5.9.2 - '@es-joy/jsdoccomment@0.67.2': + '@es-joy/jsdoccomment@0.68.1': dependencies: '@types/estree': 1.0.8 '@typescript-eslint/types': 8.45.0 comment-parser: 1.4.1 esquery: 1.6.0 - jsdoc-type-pratt-parser: 6.3.2 + jsdoc-type-pratt-parser: 6.3.3 '@eslint-community/eslint-utils@4.9.0(eslint@9.37.0(jiti@2.6.1))': dependencies: @@ -8940,7 +8940,7 @@ snapshots: jsdoc-type-pratt-parser@5.9.2: {} - jsdoc-type-pratt-parser@6.3.2: {} + jsdoc-type-pratt-parser@6.3.3: {} jsdom@6.5.1: dependencies: diff --git a/src/bin/generateOptions.js b/src/bin/generateOptions.js index e8eac19bd..8db5c2c49 100644 --- a/src/bin/generateOptions.js +++ b/src/bin/generateOptions.js @@ -36,11 +36,13 @@ for (const file of dirContents) { ' Property[key.name="meta"] Property[key.name="schema"]', ); if (results[0]?.value) { - const schema = generate(results[0]?.value); - - // eslint-disable-next-line no-eval -- Need some parser - const json = eval('JSON.stringify(' + schema + ', null, 2)'); - const parsed = JSON.parse(json); + const schema = generate(results[0]?.value, { + format: { + json: true, + quotes: 'double', + }, + }); + const parsed = JSON.parse(schema); let initial = ''; if (Array.isArray(parsed)) { diff --git a/src/iterateJsdoc.js b/src/iterateJsdoc.js index 7064f9d9a..ff5eec69f 100644 --- a/src/iterateJsdoc.js +++ b/src/iterateJsdoc.js @@ -96,6 +96,7 @@ import esquery from 'esquery'; * isNamepathReferencingTag: IsNamepathX, * isNamepathOrUrlReferencingTag: IsNamepathX, * tagMightHaveNameOrNamepath: IsNamepathX, + * tagMightHaveName: IsNamepathX * }} BasicUtils */ @@ -530,6 +531,8 @@ import esquery from 'esquery'; * isNamepathReferencingTag: IsNamepathX, * isNamepathOrUrlReferencingTag: IsNamepathX, * tagMightHaveNameOrNamepath: IsNamepathX, + * tagMightHaveName: IsNamepathX, + * tagMightHaveNamepath: IsNamepathX, * getTagStructureForMode: GetTagStructureForMode, * mayBeUndefinedTypeTag: MayBeUndefinedTypeTag, * hasValueOrExecutorHasNonEmptyResolveValue: HasValueOrExecutorHasNonEmptyResolveValue, @@ -618,14 +621,16 @@ const getBasicUtils = (context, { 'isNamepathReferencingTag', 'isNamepathOrUrlReferencingTag', 'tagMightHaveNameOrNamepath', + 'tagMightHaveName', + 'tagMightHaveNamepath', ]) { /** @type {IsNamepathX} */ utils[ - /** @type {"isNameOrNamepathDefiningTag"|"isNamepathReferencingTag"|"isNamepathOrUrlReferencingTag"|"tagMightHaveNameOrNamepath"} */ ( + /** @type {"isNameOrNamepathDefiningTag"|"isNamepathReferencingTag"|"isNamepathOrUrlReferencingTag"|"tagMightHaveNameOrNamepath"|"tagMightHaveName"} */ ( method )] = (tagName) => { return jsdocUtils[ - /** @type {"isNameOrNamepathDefiningTag"|"isNamepathReferencingTag"|"isNamepathOrUrlReferencingTag"|"tagMightHaveNameOrNamepath"} */ + /** @type {"isNameOrNamepathDefiningTag"|"isNamepathReferencingTag"|"isNamepathOrUrlReferencingTag"|"tagMightHaveNameOrNamepath"|"tagMightHaveName"} */ (method) ](tagName); }; diff --git a/src/jsdocUtils.js b/src/jsdocUtils.js index 4a6554fa3..ba26ede3e 100644 --- a/src/jsdocUtils.js +++ b/src/jsdocUtils.js @@ -1145,6 +1145,37 @@ const tagMightHaveNameOrNamepath = (tag, tagMap = tagStructure) => { namepathTypes.has(/** @type {string} */ (nampathRole)); }; +/** + * @param {string} tag + * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap + * @returns {boolean} + */ +const tagMightHaveNamepath = (tag, tagMap = tagStructure) => { + const tagStruct = ensureMap(tagMap, tag); + + const nampathRole = tagStruct.get('namepathRole'); + + return nampathRole !== false && + [ + 'namepath-defining', + 'namepath-referencing', + ].includes(/** @type {string} */ (nampathRole)); +}; + +/** + * @param {string} tag + * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap + * @returns {boolean} + */ +const tagMightHaveName = (tag, tagMap = tagStructure) => { + const tagStruct = ensureMap(tagMap, tag); + + const nampathRole = tagStruct.get('namepathRole'); + + return nampathRole !== false && + nampathRole === 'name-defining'; +}; + /** * @param {string} tag * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap @@ -1907,7 +1938,9 @@ export { setTagStructure, strictNativeTypes, tagMightHaveEitherTypeOrNamePosition, + tagMightHaveName, tagMightHaveNameOrNamepath, + tagMightHaveNamepath, tagMightHaveNamePosition, tagMightHaveTypePosition, tagMissingRequiredTypeOrNamepath, diff --git a/src/rules/validTypes.js b/src/rules/validTypes.js index 7a9e32703..5e44ec420 100644 --- a/src/rules/validTypes.js +++ b/src/rules/validTypes.js @@ -1,7 +1,7 @@ import iterateJsdoc from '../iterateJsdoc.js'; import { parse, - // parseName, + parseName, parseNamePath, traverse, tryParse, @@ -99,6 +99,23 @@ const tryParsePathIgnoreError = (path, mode) => { return false; }; +/** + * @param {string} name + * @param {import('jsdoc-type-pratt-parser').ParseMode|"permissive"} mode + * @returns {boolean} + */ +const tryParseNameIgnoreError = (name, mode) => { + try { + parseName(name, mode === 'permissive' ? 'jsdoc' : mode); + + return true; + } catch { + // Keep the original error for including the whole type + } + + return false; +}; + // eslint-disable-next-line complexity export default iterateJsdoc(({ context, @@ -350,12 +367,12 @@ export default iterateJsdoc(({ } // VALID NAME/NAMEPATH - const hasNameOrNamepathPosition = ( + const hasNamepathPosition = ( tagMustHaveNamePosition !== false || - utils.tagMightHaveNameOrNamepath(tag.tag) + utils.tagMightHaveNamepath(tag.tag) ) && Boolean(tag.name); - if (hasNameOrNamepathPosition) { + if (hasNamepathPosition) { if (mode !== 'jsdoc' && tag.tag === 'template') { if (!tryParsePathIgnoreError( // May be an issue with the commas of @@ -373,6 +390,12 @@ export default iterateJsdoc(({ } } + const hasNamePosition = utils.tagMightHaveName(tag.tag) && + Boolean(tag.name); + if (hasNamePosition && !tryParseNameIgnoreError(tag.name, mode)) { + report(`Syntax error in name: ${tag.name}`, null, tag); + } + for (const inlineTag of tag.inlineTags) { if (inlineTags.has(inlineTag.tag) && !inlineTag.text && !inlineTag.namepathOrURL) { report(`Inline tag "${inlineTag.tag}" missing content`, null, tag); diff --git a/test/rules/assertions/validTypes.js b/test/rules/assertions/validTypes.js index 76db1b39b..349260fef 100644 --- a/test/rules/assertions/validTypes.js +++ b/test/rules/assertions/validTypes.js @@ -233,10 +233,41 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 3, - message: 'Syntax error in namepath: UserStr%ng', + message: 'Syntax error in name: UserStr%ng', }, ], }, + { + code: ` + /** + * @typedef {string} module:abc/def + */ + `, + errors: [ + { + line: 3, + message: 'Syntax error in name: module:abc/def', + }, + ], + }, + { + code: ` + /** + * @typedef {string} module:abc/def + */ + `, + errors: [ + { + line: 3, + message: 'Syntax error in name: module:abc/def', + }, + ], + settings: { + jsdoc: { + mode: 'permissive', + }, + }, + }, { code: ` /** From a5a0a3cb70bd6c1174482884318a02ce4e522813 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sun, 5 Oct 2025 17:01:07 -0700 Subject: [PATCH 137/189] fix(`no-undefined-types`): do not treat type parameters or their references as undefined; #1215 (#1553) --- docs/rules/no-undefined-types.md | 23 +++++++++++++++++ package.json | 4 +-- pnpm-lock.yaml | 22 ++++++++-------- src/rules/noUndefinedTypes.js | 19 ++++++++++++++ test/rules/assertions/noUndefinedTypes.js | 31 +++++++++++++++++++++++ 5 files changed, 86 insertions(+), 13 deletions(-) diff --git a/docs/rules/no-undefined-types.md b/docs/rules/no-undefined-types.md index f395b3b57..b90322be3 100644 --- a/docs/rules/no-undefined-types.md +++ b/docs/rules/no-undefined-types.md @@ -384,6 +384,29 @@ class Filler { /** @type {AnotherType} */ // "jsdoc/no-undefined-types": ["error"|"warn", {"checkUsedTypedefs":true}] // Message: This typedef was not used within the file + +/** @typedef {'cwd'} */ +let MyOwnType1 + +/** + * @param {`${MyOwnType1}-${string}`} tagName + * @param {CustomElementConstructor} component + */ +let defineCustomElement = (tagName, component) => { + customElements.define(tagName, component) +} + +/** @typedef {string} */ +let MyOwnType2 + +/** + * @param {(element: MyOwnType2) => T} callback + * @returns {void} + */ +let getValue = (callback) => { + callback(`hello`) +} +// Message: The type 'CustomElementConstructor' is undefined. ```` diff --git a/package.json b/package.json index 98df67e85..38556eee4 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "url": "http://gajus.com" }, "dependencies": { - "@es-joy/jsdoccomment": "~0.68.1", + "@es-joy/jsdoccomment": "~0.69.0", "are-docs-informative": "^0.0.2", "comment-parser": "1.4.1", "debug": "^4.4.3", @@ -58,7 +58,7 @@ "glob": "^11.0.3", "globals": "^16.4.0", "husky": "^9.1.7", - "jsdoc-type-pratt-parser": "^6.3.3", + "jsdoc-type-pratt-parser": "^6.4.0", "json-schema": "^0.4.0", "json-schema-to-typescript": "^15.0.4", "lint-staged": "^16.2.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bf64e6460..e33687f68 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,8 +12,8 @@ importers: .: dependencies: '@es-joy/jsdoccomment': - specifier: ~0.68.1 - version: 0.68.1 + specifier: ~0.69.0 + version: 0.69.0 are-docs-informative: specifier: ^0.0.2 version: 0.0.2 @@ -163,8 +163,8 @@ importers: specifier: ^9.1.7 version: 9.1.7 jsdoc-type-pratt-parser: - specifier: ^6.3.3 - version: 6.3.3 + specifier: ^6.4.0 + version: 6.4.0 json-schema: specifier: ^0.4.0 version: 0.4.0 @@ -796,8 +796,8 @@ packages: resolution: {integrity: sha512-yWi6sm7INEwnfS7IJvE0dU+RTrwzLPFcY7e7eGpu/l5Q9lWfQ2ROwZ0qVnc242jw2TUPsfHX3XMIISkGBv57RQ==} engines: {node: '>=20.11.0'} - '@es-joy/jsdoccomment@0.68.1': - resolution: {integrity: sha512-wJJXnfG2Pq7ZC8IeOupkkAVtEH6OYy1uVxRTeshXDQfSNsZneS7FUQlNf710osZ5Yz/b5ev9xChvybTT7CM63g==} + '@es-joy/jsdoccomment@0.69.0': + resolution: {integrity: sha512-7UgbKSStPxf2RF2fqKqJq3u1QN4kFzhE/lofHtEuptRjQPdYZOLGsqGcKzQGYWoPG5p8PyxUOoc3/Ca+UcFkdA==} engines: {node: '>=20.11.0'} '@eslint-community/eslint-utils@4.9.0': @@ -3367,8 +3367,8 @@ packages: resolution: {integrity: sha512-TYzkACp/wPvDJLRY7qpHXtrhgwoAaojIOnLaaVNi+AbPU2u1kkjfKd9hXXTq0qSAGsyYXvwUXt99h9I5iCmjjw==} engines: {node: '>=12.0.0'} - jsdoc-type-pratt-parser@6.3.3: - resolution: {integrity: sha512-N1HQK15ZXdwgmXsALjUWW9Cwyg1BQS5hfP8KzDkbR4mjb+Ep8Uxcfwz+OU1tsNCRg99rk62d8GMNdG8Qz4k+Gg==} + jsdoc-type-pratt-parser@6.4.0: + resolution: {integrity: sha512-tVwTg612vD9h2w5hoRFRNOni7xITDYZigHwBDieLUf4IYPQtk6IFXe/NqJc/hGYteFAeIM+Ld6ZvmLuizKAZ7A==} engines: {node: '>=20.0.0'} jsdom@6.5.1: @@ -5917,13 +5917,13 @@ snapshots: esquery: 1.6.0 jsdoc-type-pratt-parser: 5.9.2 - '@es-joy/jsdoccomment@0.68.1': + '@es-joy/jsdoccomment@0.69.0': dependencies: '@types/estree': 1.0.8 '@typescript-eslint/types': 8.45.0 comment-parser: 1.4.1 esquery: 1.6.0 - jsdoc-type-pratt-parser: 6.3.3 + jsdoc-type-pratt-parser: 6.4.0 '@eslint-community/eslint-utils@4.9.0(eslint@9.37.0(jiti@2.6.1))': dependencies: @@ -8940,7 +8940,7 @@ snapshots: jsdoc-type-pratt-parser@5.9.2: {} - jsdoc-type-pratt-parser@6.3.3: {} + jsdoc-type-pratt-parser@6.4.0: {} jsdom@6.5.1: dependencies: diff --git a/src/rules/noUndefinedTypes.js b/src/rules/noUndefinedTypes.js index fbb070e35..3bb9eb9a1 100644 --- a/src/rules/noUndefinedTypes.js +++ b/src/rules/noUndefinedTypes.js @@ -512,6 +512,25 @@ export default iterateJsdoc(({ if (!allDefinedTypes.has(val) && (!Array.isArray(structuredTypes) || !structuredTypes.includes(val)) ) { + const parent = + /** + * @type {import('jsdoc-type-pratt-parser').RootResult & { + * _parent?: import('jsdoc-type-pratt-parser').NonRootResult + * }} + */ (nde)._parent; + if (parent?.type === 'JsdocTypeTypeParameter') { + return; + } + + if (parent?.type === 'JsdocTypeFunction' && + /** @type {import('jsdoc-type-pratt-parser').FunctionResult} */ + (parent)?.typeParameters?.some((typeParam) => { + return value === typeParam.name.value; + }) + ) { + return; + } + if (!disableReporting) { report(`The type '${val}' is undefined.`, null, tag); } diff --git a/test/rules/assertions/noUndefinedTypes.js b/test/rules/assertions/noUndefinedTypes.js index 20abd7e8c..451a96d9a 100644 --- a/test/rules/assertions/noUndefinedTypes.js +++ b/test/rules/assertions/noUndefinedTypes.js @@ -670,6 +670,37 @@ export default /** @type {import('../index.js').TestCases} */ ({ }, ], }, + { + code: ` + /** @typedef {'cwd'} */ + let MyOwnType1 + + /** + * @param {\`\${MyOwnType1}-\${string}\`} tagName + * @param {CustomElementConstructor} component + */ + let defineCustomElement = (tagName, component) => { + customElements.define(tagName, component) + } + + /** @typedef {string} */ + let MyOwnType2 + + /** + * @param {(element: MyOwnType2) => T} callback + * @returns {void} + */ + let getValue = (callback) => { + callback(\`hello\`) + } + `, + errors: [ + { + line: 7, + message: 'The type \'CustomElementConstructor\' is undefined.', + }, + ], + }, ], valid: [ { From 87464a6b31d0fd0563402d3923d2a5a8ea059ec2 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Mon, 6 Oct 2025 00:54:00 -0700 Subject: [PATCH 138/189] fix(`valid-types`): ensure safe for class context (this keyword) --- docs/rules/valid-types.md | 7 + package.json | 10 +- pnpm-lock.yaml | 292 +++++++++++++++++++++------- src/rules/validTypes.js | 8 +- test/rules/assertions/validTypes.js | 10 + 5 files changed, 250 insertions(+), 77 deletions(-) diff --git a/docs/rules/valid-types.md b/docs/rules/valid-types.md index e9f481411..a96288923 100644 --- a/docs/rules/valid-types.md +++ b/docs/rules/valid-types.md @@ -976,5 +976,12 @@ function a () {} * @param {object} props * @param {string} props.is */ + +class Test { + /** + * @returns {this} + */ + method() { return this; } +} ```` diff --git a/package.json b/package.json index 38556eee4..195bee61c 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "url": "http://gajus.com" }, "dependencies": { - "@es-joy/jsdoccomment": "~0.69.0", + "@es-joy/jsdoccomment": "~0.71.0", "are-docs-informative": "^0.0.2", "comment-parser": "1.4.1", "debug": "^4.4.3", @@ -41,10 +41,10 @@ "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@types/mocha": "^10.0.10", - "@types/node": "^24.6.2", + "@types/node": "^24.7.0", "@types/semver": "^7.7.1", "@types/spdx-expression-parse": "^3.0.5", - "@typescript-eslint/types": "^8.45.0", + "@typescript-eslint/types": "^8.46.0", "babel-plugin-add-module-exports": "^1.0.4", "babel-plugin-istanbul": "^7.0.1", "babel-plugin-transform-import-meta": "^2.3.3", @@ -58,7 +58,7 @@ "glob": "^11.0.3", "globals": "^16.4.0", "husky": "^9.1.7", - "jsdoc-type-pratt-parser": "^6.4.0", + "jsdoc-type-pratt-parser": "^6.6.0", "json-schema": "^0.4.0", "json-schema-to-typescript": "^15.0.4", "lint-staged": "^16.2.3", @@ -68,7 +68,7 @@ "rimraf": "^6.0.1", "semantic-release": "^24.2.9", "typescript": "5.9.3", - "typescript-eslint": "^8.45.0" + "typescript-eslint": "^8.46.0" }, "engines": { "node": ">=20.11.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e33687f68..1d4448dc9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,8 +12,8 @@ importers: .: dependencies: '@es-joy/jsdoccomment': - specifier: ~0.69.0 - version: 0.69.0 + specifier: ~0.71.0 + version: 0.71.0 are-docs-informative: specifier: ^0.0.2 version: 0.0.2 @@ -112,8 +112,8 @@ importers: specifier: ^10.0.10 version: 10.0.10 '@types/node': - specifier: ^24.6.2 - version: 24.6.2 + specifier: ^24.7.0 + version: 24.7.0 '@types/semver': specifier: ^7.7.1 version: 7.7.1 @@ -121,8 +121,8 @@ importers: specifier: ^3.0.5 version: 3.0.5 '@typescript-eslint/types': - specifier: ^8.45.0 - version: 8.45.0 + specifier: ^8.46.0 + version: 8.46.0 babel-plugin-add-module-exports: specifier: ^1.0.4 version: 1.0.4 @@ -149,7 +149,7 @@ importers: version: 9.37.0(jiti@2.6.1) eslint-config-canonical: specifier: ^45.0.1 - version: 45.0.1(@types/node@24.6.2)(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + version: 45.0.1(@types/node@24.7.0)(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) gitdown: specifier: ^4.1.1 version: 4.1.1(re2@1.20.9) @@ -163,8 +163,8 @@ importers: specifier: ^9.1.7 version: 9.1.7 jsdoc-type-pratt-parser: - specifier: ^6.4.0 - version: 6.4.0 + specifier: ^6.6.0 + version: 6.6.0 json-schema: specifier: ^0.4.0 version: 0.4.0 @@ -193,8 +193,8 @@ importers: specifier: 5.9.3 version: 5.9.3 typescript-eslint: - specifier: ^8.45.0 - version: 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + specifier: ^8.46.0 + version: 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) packages: @@ -796,8 +796,8 @@ packages: resolution: {integrity: sha512-yWi6sm7INEwnfS7IJvE0dU+RTrwzLPFcY7e7eGpu/l5Q9lWfQ2ROwZ0qVnc242jw2TUPsfHX3XMIISkGBv57RQ==} engines: {node: '>=20.11.0'} - '@es-joy/jsdoccomment@0.69.0': - resolution: {integrity: sha512-7UgbKSStPxf2RF2fqKqJq3u1QN4kFzhE/lofHtEuptRjQPdYZOLGsqGcKzQGYWoPG5p8PyxUOoc3/Ca+UcFkdA==} + '@es-joy/jsdoccomment@0.71.0': + resolution: {integrity: sha512-2p9+dXWNQnp5Kq/V0XVWZiVAabzlX6rUW8vXXvtX8Yc1CkKgD93IPDEnv1sYZFkkS6HMvg6H0RMZfob/Co0YXA==} engines: {node: '>=20.11.0'} '@eslint-community/eslint-utils@4.9.0': @@ -1243,8 +1243,8 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@24.6.2': - resolution: {integrity: sha512-d2L25Y4j+W3ZlNAeMKcy7yDsK425ibcAOO2t7aPTz6gNMH0z2GThtwENCDc0d/Pw9wgyRqE5Px1wkV7naz8ang==} + '@types/node@24.7.0': + resolution: {integrity: sha512-IbKooQVqUBrlzWTi79E8Fw78l8k1RNtlDDNWsFZs7XonuQSJ8oNYfEeclhprUldXISRMLzBpILuKgPlIxm+/Yw==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -1266,6 +1266,14 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/eslint-plugin@8.46.0': + resolution: {integrity: sha512-hA8gxBq4ukonVXPy0OKhiaUh/68D0E88GSmtC1iAEnGaieuDi38LhS7jdCHRLi6ErJBNDGCzvh5EnzdPwUc0DA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.46.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/parser@8.45.0': resolution: {integrity: sha512-TGf22kon8KW+DeKaUmOibKWktRY8b2NSAZNdtWh798COm1NWx8+xJ6iFBtk3IvLdv6+LGLJLRlyhrhEDZWargQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1273,22 +1281,45 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/parser@8.46.0': + resolution: {integrity: sha512-n1H6IcDhmmUEG7TNVSspGmiHHutt7iVKtZwRppD7e04wha5MrkV1h3pti9xQLcCMt6YWsncpoT0HMjkH1FNwWQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/project-service@8.45.0': resolution: {integrity: sha512-3pcVHwMG/iA8afdGLMuTibGR7pDsn9RjDev6CCB+naRsSYs2pns5QbinF4Xqw6YC/Sj3lMrm/Im0eMfaa61WUg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/project-service@8.46.0': + resolution: {integrity: sha512-OEhec0mH+U5Je2NZOeK1AbVCdm0ChyapAyTeXVIYTPXDJ3F07+cu87PPXcGoYqZ7M9YJVvFnfpGg1UmCIqM+QQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/scope-manager@8.45.0': resolution: {integrity: sha512-clmm8XSNj/1dGvJeO6VGH7EUSeA0FMs+5au/u3lrA3KfG8iJ4u8ym9/j2tTEoacAffdW1TVUzXO30W1JTJS7dA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/scope-manager@8.46.0': + resolution: {integrity: sha512-lWETPa9XGcBes4jqAMYD9fW0j4n6hrPtTJwWDmtqgFO/4HF4jmdH/Q6wggTw5qIT5TXjKzbt7GsZUBnWoO3dqw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/tsconfig-utils@8.45.0': resolution: {integrity: sha512-aFdr+c37sc+jqNMGhH+ajxPXwjv9UtFZk79k8pLoJ6p4y0snmYpPA52GuWHgt2ZF4gRRW6odsEj41uZLojDt5w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/tsconfig-utils@8.46.0': + resolution: {integrity: sha512-WrYXKGAHY836/N7zoK/kzi6p8tXFhasHh8ocFL9VZSAkvH956gfeRfcnhs3xzRy8qQ/dq3q44v1jvQieMFg2cw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/type-utils@8.45.0': resolution: {integrity: sha512-bpjepLlHceKgyMEPglAeULX1vixJDgaKocp0RVJ5u4wLJIMNuKtUXIczpJCPcn2waII0yuvks/5m5/h3ZQKs0A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1296,16 +1327,33 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/type-utils@8.46.0': + resolution: {integrity: sha512-hy+lvYV1lZpVs2jRaEYvgCblZxUoJiPyCemwbQZ+NGulWkQRy0HRPYAoef/CNSzaLt+MLvMptZsHXHlkEilaeg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/types@8.45.0': resolution: {integrity: sha512-WugXLuOIq67BMgQInIxxnsSyRLFxdkJEJu8r4ngLR56q/4Q5LrbfkFRH27vMTjxEK8Pyz7QfzuZe/G15qQnVRA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.46.0': + resolution: {integrity: sha512-bHGGJyVjSE4dJJIO5yyEWt/cHyNwga/zXGJbJJ8TiO01aVREK6gCTu3L+5wrkb1FbDkQ+TKjMNe9R/QQQP9+rA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@8.45.0': resolution: {integrity: sha512-GfE1NfVbLam6XQ0LcERKwdTTPlLvHvXXhOeUGC1OXi4eQBoyy1iVsW+uzJ/J9jtCz6/7GCQ9MtrQ0fml/jWCnA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/typescript-estree@8.46.0': + resolution: {integrity: sha512-ekDCUfVpAKWJbRfm8T1YRrCot1KFxZn21oV76v5Fj4tr7ELyk84OS+ouvYdcDAwZL89WpEkEj2DKQ+qg//+ucg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/utils@8.45.0': resolution: {integrity: sha512-bxi1ht+tLYg4+XV2knz/F7RVhU0k6VrSMc9sb8DQ6fyCTrGQLHfo7lDtN0QJjZjKkLA2ThrKuCdHEvLReqtIGg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1313,10 +1361,21 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/utils@8.46.0': + resolution: {integrity: sha512-nD6yGWPj1xiOm4Gk0k6hLSZz2XkNXhuYmyIrOWcHoPuAhjT9i5bAG+xbWPgFeNR8HPHHtpNKdYUXJl/D3x7f5g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/visitor-keys@8.45.0': resolution: {integrity: sha512-qsaFBA3e09MIDAGFUrTk+dzqtfv1XPVz8t8d1f0ybTzrCY7BKiMC5cjrl1O/P7UmHsNyW90EYSkU/ZWpmXelag==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.46.0': + resolution: {integrity: sha512-FrvMpAK+hTbFy7vH5j1+tMYHMSKLE6RzluFJlkFNKD0p9YsUT75JlBSmr5so3QRzvMwU5/bIEdeNrxm8du8l3Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@unrs/resolver-binding-android-arm-eabi@1.11.1': resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} cpu: [arm] @@ -3367,8 +3426,8 @@ packages: resolution: {integrity: sha512-TYzkACp/wPvDJLRY7qpHXtrhgwoAaojIOnLaaVNi+AbPU2u1kkjfKd9hXXTq0qSAGsyYXvwUXt99h9I5iCmjjw==} engines: {node: '>=12.0.0'} - jsdoc-type-pratt-parser@6.4.0: - resolution: {integrity: sha512-tVwTg612vD9h2w5hoRFRNOni7xITDYZigHwBDieLUf4IYPQtk6IFXe/NqJc/hGYteFAeIM+Ld6ZvmLuizKAZ7A==} + jsdoc-type-pratt-parser@6.6.0: + resolution: {integrity: sha512-3hSD14nXx66Rspx1RMnz1Pj4JacrMBAsC0CrF9lZYO/Qsp5/oIr6KqujVUNhQu94B6mMip2ukki8MpEWZwyhKA==} engines: {node: '>=20.0.0'} jsdom@6.5.1: @@ -4807,8 +4866,8 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} - typescript-eslint@8.45.0: - resolution: {integrity: sha512-qzDmZw/Z5beNLUrXfd0HIW6MzIaAV5WNDxmMs9/3ojGOpYavofgNAAD/nC6tGV2PczIi0iw8vot2eAe/sBn7zg==} + typescript-eslint@8.46.0: + resolution: {integrity: sha512-6+ZrB6y2bT2DX3K+Qd9vn7OFOJR+xSLDj+Aw/N3zBwUt27uTw2sw2TE2+UcY1RiyBZkaGbTkVg9SSdPNUG6aUw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -4833,8 +4892,8 @@ packages: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} - undici-types@7.13.0: - resolution: {integrity: sha512-Ov2Rr9Sx+fRgagJ5AX0qvItZG/JKKoBRAVITs1zk7IqZGTJUwgUr7qoYBpWwakpWilTZFM98rG/AFRocu10iIQ==} + undici-types@7.14.0: + resolution: {integrity: sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==} unicode-canonical-property-names-ecmascript@2.0.1: resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} @@ -5904,7 +5963,7 @@ snapshots: '@es-joy/jsdoccomment@0.50.2': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.45.0 + '@typescript-eslint/types': 8.46.0 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 4.1.0 @@ -5912,18 +5971,18 @@ snapshots: '@es-joy/jsdoccomment@0.62.0': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.45.0 + '@typescript-eslint/types': 8.46.0 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 5.9.2 - '@es-joy/jsdoccomment@0.69.0': + '@es-joy/jsdoccomment@0.71.0': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.45.0 + '@typescript-eslint/types': 8.46.0 comment-parser: 1.4.1 esquery: 1.6.0 - jsdoc-type-pratt-parser: 6.4.0 + jsdoc-type-pratt-parser: 6.6.0 '@eslint-community/eslint-utils@4.9.0(eslint@9.37.0(jiti@2.6.1))': dependencies: @@ -5982,7 +6041,7 @@ snapshots: '@fastify/busboy@3.2.0': {} - '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.6.2)(eslint@9.37.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3)': + '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.7.0)(eslint@9.37.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3)': dependencies: '@graphql-tools/code-file-loader': 8.1.22(graphql@16.11.0) '@graphql-tools/graphql-tag-pluck': 8.3.21(graphql@16.11.0) @@ -5991,7 +6050,7 @@ snapshots: eslint: 9.37.0(jiti@2.6.1) fast-glob: 3.3.3 graphql: 16.11.0 - graphql-config: 5.1.5(@types/node@24.6.2)(graphql@16.11.0)(typescript@5.9.3) + graphql-config: 5.1.5(@types/node@24.7.0)(graphql@16.11.0)(typescript@5.9.3) graphql-depth-limit: 1.1.0(graphql@16.11.0) lodash.lowercase: 4.3.0 transitivePeerDependencies: @@ -6068,7 +6127,7 @@ snapshots: - uWebSockets.js - utf-8-validate - '@graphql-tools/executor-http@1.3.3(@types/node@24.6.2)(graphql@16.11.0)': + '@graphql-tools/executor-http@1.3.3(@types/node@24.7.0)(graphql@16.11.0)': dependencies: '@graphql-hive/signal': 1.0.0 '@graphql-tools/executor-common': 0.0.4(graphql@16.11.0) @@ -6078,7 +6137,7 @@ snapshots: '@whatwg-node/fetch': 0.10.11 '@whatwg-node/promise-helpers': 1.3.2 graphql: 16.11.0 - meros: 1.3.2(@types/node@24.6.2) + meros: 1.3.2(@types/node@24.7.0) tslib: 2.8.1 transitivePeerDependencies: - '@types/node' @@ -6168,10 +6227,10 @@ snapshots: graphql: 16.11.0 tslib: 2.8.1 - '@graphql-tools/url-loader@8.0.33(@types/node@24.6.2)(graphql@16.11.0)': + '@graphql-tools/url-loader@8.0.33(@types/node@24.7.0)(graphql@16.11.0)': dependencies: '@graphql-tools/executor-graphql-ws': 2.0.7(graphql@16.11.0) - '@graphql-tools/executor-http': 1.3.3(@types/node@24.6.2)(graphql@16.11.0) + '@graphql-tools/executor-http': 1.3.3(@types/node@24.7.0)(graphql@16.11.0) '@graphql-tools/executor-legacy-ws': 1.1.19(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) '@graphql-tools/wrap': 10.1.4(graphql@16.11.0) @@ -6545,9 +6604,9 @@ snapshots: '@types/ms@2.1.0': {} - '@types/node@24.6.2': + '@types/node@24.7.0': dependencies: - undici-types: 7.13.0 + undici-types: 7.14.0 '@types/normalize-package-data@2.4.4': {} @@ -6557,7 +6616,7 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 24.6.2 + '@types/node': 24.7.0 '@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: @@ -6576,6 +6635,23 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/eslint-plugin@8.46.0(@typescript-eslint/parser@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.46.0 + '@typescript-eslint/type-utils': 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.46.0 + eslint: 9.37.0(jiti@2.6.1) + graphemer: 1.4.0 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.45.0 @@ -6588,10 +6664,31 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/parser@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.46.0 + '@typescript-eslint/types': 8.46.0 + '@typescript-eslint/typescript-estree': 8.46.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.46.0 + debug: 4.4.3(supports-color@8.1.1) + eslint: 9.37.0(jiti@2.6.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/project-service@8.45.0(typescript@5.9.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.45.0(typescript@5.9.3) - '@typescript-eslint/types': 8.45.0 + '@typescript-eslint/types': 8.46.0 + debug: 4.4.3(supports-color@8.1.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.46.0(typescript@5.9.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.46.0(typescript@5.9.3) + '@typescript-eslint/types': 8.46.0 debug: 4.4.3(supports-color@8.1.1) typescript: 5.9.3 transitivePeerDependencies: @@ -6602,10 +6699,19 @@ snapshots: '@typescript-eslint/types': 8.45.0 '@typescript-eslint/visitor-keys': 8.45.0 + '@typescript-eslint/scope-manager@8.46.0': + dependencies: + '@typescript-eslint/types': 8.46.0 + '@typescript-eslint/visitor-keys': 8.46.0 + '@typescript-eslint/tsconfig-utils@8.45.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 + '@typescript-eslint/tsconfig-utils@8.46.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + '@typescript-eslint/type-utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.45.0 @@ -6618,8 +6724,22 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/type-utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 8.46.0 + '@typescript-eslint/typescript-estree': 8.46.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + debug: 4.4.3(supports-color@8.1.1) + eslint: 9.37.0(jiti@2.6.1) + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/types@8.45.0': {} + '@typescript-eslint/types@8.46.0': {} + '@typescript-eslint/typescript-estree@8.45.0(typescript@5.9.3)': dependencies: '@typescript-eslint/project-service': 8.45.0(typescript@5.9.3) @@ -6636,6 +6756,22 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/typescript-estree@8.46.0(typescript@5.9.3)': + dependencies: + '@typescript-eslint/project-service': 8.46.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.46.0(typescript@5.9.3) + '@typescript-eslint/types': 8.46.0 + '@typescript-eslint/visitor-keys': 8.46.0 + debug: 4.4.3(supports-color@8.1.1) + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.2 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) @@ -6647,11 +6783,27 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.46.0 + '@typescript-eslint/types': 8.46.0 + '@typescript-eslint/typescript-estree': 8.46.0(typescript@5.9.3) + eslint: 9.37.0(jiti@2.6.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/visitor-keys@8.45.0': dependencies: '@typescript-eslint/types': 8.45.0 eslint-visitor-keys: 4.2.1 + '@typescript-eslint/visitor-keys@8.46.0': + dependencies: + '@typescript-eslint/types': 8.46.0 + eslint-visitor-keys: 4.2.1 + '@unrs/resolver-binding-android-arm-eabi@1.11.1': optional: true @@ -7599,9 +7751,9 @@ snapshots: eslint: 9.37.0(jiti@2.6.1) semver: 7.7.2 - eslint-config-canonical@45.0.1(@types/node@24.6.2)(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): + eslint-config-canonical@45.0.1(@types/node@24.7.0)(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.6.2)(eslint@9.37.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3) + '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.7.0)(eslint@9.37.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3) '@next/eslint-plugin-next': 15.5.4 '@stylistic/eslint-plugin': 4.4.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) @@ -7609,14 +7761,14 @@ snapshots: '@vitest/eslint-plugin': 1.3.13(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) eslint: 9.37.0(jiti@2.6.1) eslint-config-prettier: 10.1.8(eslint@9.37.0(jiti@2.6.1)) - eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)) + eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)) eslint-plugin-ava: 15.1.0(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) eslint-plugin-eslint-comments: 3.2.0(eslint@9.37.0(jiti@2.6.1)) eslint-plugin-fp: 2.3.0(eslint@9.37.0(jiti@2.6.1)) eslint-plugin-functional: 9.0.2(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-jest: 28.14.0(@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)) + eslint-plugin-jest: 28.14.0(@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) eslint-plugin-jsdoc: 50.8.0(eslint@9.37.0(jiti@2.6.1)) eslint-plugin-jsonc: 2.20.1(eslint@9.37.0(jiti@2.6.1)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.37.0(jiti@2.6.1)) @@ -7637,7 +7789,7 @@ snapshots: graphql: 16.11.0 prettier: 3.6.2 ramda: 0.30.1 - typescript-eslint: 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + typescript-eslint: 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) yaml-eslint-parser: 1.3.0 transitivePeerDependencies: - '@apollo/subgraph' @@ -7671,7 +7823,7 @@ snapshots: optionalDependencies: unrs-resolver: 1.11.1 - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3(supports-color@8.1.1) @@ -7682,12 +7834,12 @@ snapshots: tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)) transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)): + eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)): dependencies: debug: 4.4.3(supports-color@8.1.1) eslint: 9.37.0(jiti@2.6.1) @@ -7698,8 +7850,8 @@ snapshots: tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)) transitivePeerDependencies: - supports-color @@ -7709,13 +7861,13 @@ snapshots: esquery: 1.6.0 jsonc-eslint-parser: 2.4.1 - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) eslint: 9.37.0(jiti@2.6.1) - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)) transitivePeerDependencies: - supports-color @@ -7731,14 +7883,14 @@ snapshots: pkg-dir: 5.0.0 resolve-from: 5.0.0 - eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): dependencies: '@typescript-eslint/utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) array-includes: 3.1.9 debug: 4.4.3(supports-color@8.1.1) doctrine: 3.0.0 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)) - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)) is-get-set-prop: 1.0.0 is-js-type: 2.0.0 is-obj-prop: 1.0.0 @@ -7793,9 +7945,9 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)): + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)): dependencies: - '@typescript-eslint/types': 8.45.0 + '@typescript-eslint/types': 8.46.0 comment-parser: 1.4.1 debug: 4.4.3(supports-color@8.1.1) eslint: 9.37.0(jiti@2.6.1) @@ -7806,11 +7958,11 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) transitivePeerDependencies: - supports-color - eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): dependencies: '@typescript-eslint/utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) eslint: 9.37.0(jiti@2.6.1) @@ -7902,7 +8054,7 @@ snapshots: eslint-plugin-perfectionist@4.15.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/types': 8.45.0 + '@typescript-eslint/types': 8.46.0 '@typescript-eslint/utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) eslint: 9.37.0(jiti@2.6.1) natural-orderby: 5.0.0 @@ -8456,13 +8608,13 @@ snapshots: graphemer@1.4.0: {} - graphql-config@5.1.5(@types/node@24.6.2)(graphql@16.11.0)(typescript@5.9.3): + graphql-config@5.1.5(@types/node@24.7.0)(graphql@16.11.0)(typescript@5.9.3): dependencies: '@graphql-tools/graphql-file-loader': 8.1.2(graphql@16.11.0) '@graphql-tools/json-file-loader': 8.0.20(graphql@16.11.0) '@graphql-tools/load': 8.1.2(graphql@16.11.0) '@graphql-tools/merge': 9.1.1(graphql@16.11.0) - '@graphql-tools/url-loader': 8.0.33(@types/node@24.6.2)(graphql@16.11.0) + '@graphql-tools/url-loader': 8.0.33(@types/node@24.7.0)(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) cosmiconfig: 8.3.6(typescript@5.9.3) graphql: 16.11.0 @@ -8940,7 +9092,7 @@ snapshots: jsdoc-type-pratt-parser@5.9.2: {} - jsdoc-type-pratt-parser@6.4.0: {} + jsdoc-type-pratt-parser@6.6.0: {} jsdom@6.5.1: dependencies: @@ -9219,9 +9371,9 @@ snapshots: merge2@1.4.1: {} - meros@1.3.2(@types/node@24.6.2): + meros@1.3.2(@types/node@24.7.0): optionalDependencies: - '@types/node': 24.6.2 + '@types/node': 24.7.0 micro-spelling-correcter@1.1.1: {} @@ -10477,12 +10629,12 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): + typescript-eslint@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.46.0(@typescript-eslint/parser@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.46.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) eslint: 9.37.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: @@ -10502,7 +10654,7 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 - undici-types@7.13.0: {} + undici-types@7.14.0: {} unicode-canonical-property-names-ecmascript@2.0.1: {} diff --git a/src/rules/validTypes.js b/src/rules/validTypes.js index 5e44ec420..b517a532c 100644 --- a/src/rules/validTypes.js +++ b/src/rules/validTypes.js @@ -196,9 +196,13 @@ export default iterateJsdoc(({ let parsedTypes; try { if (mode === 'permissive') { - parsedTypes = tryParse(type); + parsedTypes = tryParse(type, undefined, { + classContext: true, + }); } else { - parsedTypes = parse(type, mode); + parsedTypes = parse(type, mode, { + classContext: true, + }); } } catch { report(`Syntax error in type: ${type}`, null, tag); diff --git a/test/rules/assertions/validTypes.js b/test/rules/assertions/validTypes.js index 349260fef..35ccc4ef2 100644 --- a/test/rules/assertions/validTypes.js +++ b/test/rules/assertions/validTypes.js @@ -2008,5 +2008,15 @@ export default /** @type {import('../index.js').TestCases} */ ({ */ `, }, + { + code: ` + class Test { + /** + * @returns {this} + */ + method() { return this; } + } + `, + }, ], }); From 680cf1d1c740291ff540d2bf22329f7098b3d863 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Mon, 6 Oct 2025 11:09:09 -0700 Subject: [PATCH 139/189] fix(`valid-types`): re-allow namepaths in name-definers like typedef in non-typescript mode; fixes #1557 --- docs/rules/valid-types.md | 7 ++++++- src/rules/validTypes.js | 12 +++++++++--- test/rules/assertions/validTypes.js | 14 +++++++++++++- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/docs/rules/valid-types.md b/docs/rules/valid-types.md index a96288923..9929c1a28 100644 --- a/docs/rules/valid-types.md +++ b/docs/rules/valid-types.md @@ -243,7 +243,7 @@ function quux() { /** * @typedef {string} module:abc/def */ -// Settings: {"jsdoc":{"mode":"permissive"}} +// Settings: {"jsdoc":{"mode":"typescript"}} // Message: Syntax error in name: module:abc/def /** @@ -983,5 +983,10 @@ class Test { */ method() { return this; } } + +/** + * @typedef {Object} module:src/core/Player~mediaFormat + */ +// Settings: {"jsdoc":{"mode":"jsdoc"}} ```` diff --git a/src/rules/validTypes.js b/src/rules/validTypes.js index b517a532c..ff2e08375 100644 --- a/src/rules/validTypes.js +++ b/src/rules/validTypes.js @@ -101,12 +101,12 @@ const tryParsePathIgnoreError = (path, mode) => { /** * @param {string} name - * @param {import('jsdoc-type-pratt-parser').ParseMode|"permissive"} mode + * @param {import('jsdoc-type-pratt-parser').ParseMode} mode * @returns {boolean} */ const tryParseNameIgnoreError = (name, mode) => { try { - parseName(name, mode === 'permissive' ? 'jsdoc' : mode); + parseName(name, mode); return true; } catch { @@ -396,8 +396,14 @@ export default iterateJsdoc(({ const hasNamePosition = utils.tagMightHaveName(tag.tag) && Boolean(tag.name); - if (hasNamePosition && !tryParseNameIgnoreError(tag.name, mode)) { + if ( + hasNamePosition && + mode === 'typescript' && + !tryParseNameIgnoreError(tag.name, mode) + ) { report(`Syntax error in name: ${tag.name}`, null, tag); + } else if (hasNamePosition && mode !== 'typescript') { + validNamepathParsing(tag.name, tag.tag); } for (const inlineTag of tag.inlineTags) { diff --git a/test/rules/assertions/validTypes.js b/test/rules/assertions/validTypes.js index 35ccc4ef2..9ed7c7115 100644 --- a/test/rules/assertions/validTypes.js +++ b/test/rules/assertions/validTypes.js @@ -264,7 +264,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ ], settings: { jsdoc: { - mode: 'permissive', + mode: 'typescript', }, }, }, @@ -2018,5 +2018,17 @@ export default /** @type {import('../index.js').TestCases} */ ({ } `, }, + { + code: ` + /** + * @typedef {Object} module:src/core/Player~mediaFormat + */ + `, + settings: { + jsdoc: { + mode: 'jsdoc', + }, + }, + }, ], }); From 6afdc2ae4a5498a8a90f39fd7afb518be69dae25 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 7 Oct 2025 00:19:01 -0700 Subject: [PATCH 140/189] chore: update jsdoccomment and devDep. --- package.json | 4 ++-- pnpm-lock.yaml | 22 +++++++++++----------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index 195bee61c..3ded8d958 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "url": "http://gajus.com" }, "dependencies": { - "@es-joy/jsdoccomment": "~0.71.0", + "@es-joy/jsdoccomment": "~0.73.0", "are-docs-informative": "^0.0.2", "comment-parser": "1.4.1", "debug": "^4.4.3", @@ -58,7 +58,7 @@ "glob": "^11.0.3", "globals": "^16.4.0", "husky": "^9.1.7", - "jsdoc-type-pratt-parser": "^6.6.0", + "jsdoc-type-pratt-parser": "^6.8.0", "json-schema": "^0.4.0", "json-schema-to-typescript": "^15.0.4", "lint-staged": "^16.2.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1d4448dc9..a05156b16 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,8 +12,8 @@ importers: .: dependencies: '@es-joy/jsdoccomment': - specifier: ~0.71.0 - version: 0.71.0 + specifier: ~0.73.0 + version: 0.73.0 are-docs-informative: specifier: ^0.0.2 version: 0.0.2 @@ -163,8 +163,8 @@ importers: specifier: ^9.1.7 version: 9.1.7 jsdoc-type-pratt-parser: - specifier: ^6.6.0 - version: 6.6.0 + specifier: ^6.8.0 + version: 6.8.0 json-schema: specifier: ^0.4.0 version: 0.4.0 @@ -796,8 +796,8 @@ packages: resolution: {integrity: sha512-yWi6sm7INEwnfS7IJvE0dU+RTrwzLPFcY7e7eGpu/l5Q9lWfQ2ROwZ0qVnc242jw2TUPsfHX3XMIISkGBv57RQ==} engines: {node: '>=20.11.0'} - '@es-joy/jsdoccomment@0.71.0': - resolution: {integrity: sha512-2p9+dXWNQnp5Kq/V0XVWZiVAabzlX6rUW8vXXvtX8Yc1CkKgD93IPDEnv1sYZFkkS6HMvg6H0RMZfob/Co0YXA==} + '@es-joy/jsdoccomment@0.73.0': + resolution: {integrity: sha512-7qLo/QVcqrCTAp/uWmTYryd/qf6fWZEJBRp9HtyOo+XBT41D6fQZ74ehEFZH1IzHD90iPTUYlE7u2V+yGhVpnw==} engines: {node: '>=20.11.0'} '@eslint-community/eslint-utils@4.9.0': @@ -3426,8 +3426,8 @@ packages: resolution: {integrity: sha512-TYzkACp/wPvDJLRY7qpHXtrhgwoAaojIOnLaaVNi+AbPU2u1kkjfKd9hXXTq0qSAGsyYXvwUXt99h9I5iCmjjw==} engines: {node: '>=12.0.0'} - jsdoc-type-pratt-parser@6.6.0: - resolution: {integrity: sha512-3hSD14nXx66Rspx1RMnz1Pj4JacrMBAsC0CrF9lZYO/Qsp5/oIr6KqujVUNhQu94B6mMip2ukki8MpEWZwyhKA==} + jsdoc-type-pratt-parser@6.8.0: + resolution: {integrity: sha512-ai5xhGwgsWWGs4DfUV2DO1R8INNWVC9M7G3XlZZXxNL/NieEkTUdgNm6dMZKydRBIMw/o9Bi2qDroTshyERljQ==} engines: {node: '>=20.0.0'} jsdom@6.5.1: @@ -5976,13 +5976,13 @@ snapshots: esquery: 1.6.0 jsdoc-type-pratt-parser: 5.9.2 - '@es-joy/jsdoccomment@0.71.0': + '@es-joy/jsdoccomment@0.73.0': dependencies: '@types/estree': 1.0.8 '@typescript-eslint/types': 8.46.0 comment-parser: 1.4.1 esquery: 1.6.0 - jsdoc-type-pratt-parser: 6.6.0 + jsdoc-type-pratt-parser: 6.8.0 '@eslint-community/eslint-utils@4.9.0(eslint@9.37.0(jiti@2.6.1))': dependencies: @@ -9092,7 +9092,7 @@ snapshots: jsdoc-type-pratt-parser@5.9.2: {} - jsdoc-type-pratt-parser@6.6.0: {} + jsdoc-type-pratt-parser@6.8.0: {} jsdom@6.5.1: dependencies: From 2735b6dbb7c46f52807ef7b9a9d2a41d57f93bea Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 7 Oct 2025 01:16:05 -0700 Subject: [PATCH 141/189] feat(`type-formatting`): add `genericAndTupleElementSpacing` option for tuples and generics --- src/rules/typeFormatting.js | 30 +++++++++++++--- test/rules/assertions/typeFormatting.js | 46 +++++++++++++++++++++++++ 2 files changed, 71 insertions(+), 5 deletions(-) diff --git a/src/rules/typeFormatting.js b/src/rules/typeFormatting.js index 38b5952e4..e93c7d025 100644 --- a/src/rules/typeFormatting.js +++ b/src/rules/typeFormatting.js @@ -17,6 +17,7 @@ export default iterateJsdoc(({ }) => { const { arrayBrackets = 'square', + elementSpacing = ' ', enableFixer = true, genericDot = false, objectFieldIndent = '', @@ -226,6 +227,9 @@ export default iterateJsdoc(({ } else if (typeNode.meta.dot !== genericDot) { typeNode.meta.dot = genericDot; errorMessage = `Dot usage should be ${genericDot}`; + } else if ((typeNode.meta.elementSpacing ?? ' ') !== elementSpacing) { + typeNode.meta.elementSpacing = elementSpacing; + errorMessage = `Element spacing should be "${elementSpacing}"`; } break; @@ -277,6 +281,16 @@ export default iterateJsdoc(({ break; } + case 'JsdocTypeStringValue': { + const typeNode = /** @type {import('jsdoc-type-pratt-parser').StringValueResult} */ (nde); + if (typeNode.meta.quote !== stringQuotes) { + typeNode.meta.quote = stringQuotes; + errorMessage = `Inconsistent ${stringQuotes} string quotes usage`; + } + + break; + } + // Only suitable for namepaths (and would need changes); see https://github.com/gajus/eslint-plugin-jsdoc/issues/1524 // case 'JsdocTypeProperty': { // const typeNode = /** @type {import('jsdoc-type-pratt-parser').PropertyResult} */ (nde); @@ -292,11 +306,13 @@ export default iterateJsdoc(({ // break; // } - case 'JsdocTypeStringValue': { - const typeNode = /** @type {import('jsdoc-type-pratt-parser').StringValueResult} */ (nde); - if (typeNode.meta.quote !== stringQuotes) { - typeNode.meta.quote = stringQuotes; - errorMessage = `Inconsistent ${stringQuotes} string quotes usage`; + case 'JsdocTypeTuple': { + const typeNode = /** @type {import('jsdoc-type-pratt-parser').TupleResult} */ (nde); + if ((typeNode.meta?.elementSpacing ?? ' ') !== elementSpacing) { + typeNode.meta = { + elementSpacing, + }; + errorMessage = `Element spacing should be "${elementSpacing}"`; } break; @@ -377,6 +393,10 @@ export default iterateJsdoc(({ ], type: 'string', }, + elementSpacing: { + description: 'The space character (if any) to use between elements in generics and tuples', + type: 'string', + }, enableFixer: { description: 'Whether to enable the fixer. Defaults to `true`.', type: 'boolean', diff --git a/test/rules/assertions/typeFormatting.js b/test/rules/assertions/typeFormatting.js index f74d37d14..4a68075b6 100644 --- a/test/rules/assertions/typeFormatting.js +++ b/test/rules/assertions/typeFormatting.js @@ -706,6 +706,52 @@ export default { */ `, }, + { + code: ` + /** + * @param {SomeType} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Element spacing should be ""', + }, + ], + options: [ + { + elementSpacing: '', + }, + ], + output: ` + /** + * @param {SomeType} cfg + */ + `, + }, + { + code: ` + /** + * @param {[string, number]} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Element spacing should be ""', + }, + ], + options: [ + { + elementSpacing: '', + }, + ], + output: ` + /** + * @param {[string,number]} cfg + */ + `, + }, ], valid: [ { From b8eeca86e3a8acf9a275298b03470a4292e7feb2 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 7 Oct 2025 02:22:09 -0700 Subject: [PATCH 142/189] feat(`type-formatting`): add `parameterDefaultValueSpacing` for type parameter spacing --- .README/rules/type-formatting.md | 2 +- docs/rules/type-formatting.md | 47 +++++++++++++++++- src/rules.d.ts | 8 ++++ src/rules/typeFormatting.js | 17 +++++++ test/rules/assertions/typeFormatting.js | 63 +++++++++++++++++++++++++ 5 files changed, 135 insertions(+), 2 deletions(-) diff --git a/.README/rules/type-formatting.md b/.README/rules/type-formatting.md index 56c6bc0d0..c717ec086 100644 --- a/.README/rules/type-formatting.md +++ b/.README/rules/type-formatting.md @@ -18,7 +18,7 @@ Currently offers the following options for formatting types. |Tags|`param`, `property`, `returns`, `this`, `throws`, `type`, `typedef`, `yields`| |Recommended|false| |Settings|`mode`| -|Options|`arrayBrackets`, `enableFixer`, `genericDot`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `objectFieldSeparatorOptionalLinebreak`, `objectFieldSeparatorTrailingPunctuation`, `separatorForSingleObjectField`, `stringQuotes`, `typeBracketSpacing`, `unionSpacing`| +|Options|`arrayBrackets`, `defaultValueSpacing`, `elementSpacing`, `enableFixer`, `genericDot`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `objectFieldSeparatorOptionalLinebreak`, `objectFieldSeparatorTrailingPunctuation`, `separatorForSingleObjectField`, `stringQuotes`, `typeBracketSpacing`, `unionSpacing`| ## Failing examples diff --git a/docs/rules/type-formatting.md b/docs/rules/type-formatting.md index 14acfb40c..0a6b7f883 100644 --- a/docs/rules/type-formatting.md +++ b/docs/rules/type-formatting.md @@ -22,6 +22,18 @@ A single options object has the following properties. Determines how array generics are represented. Set to `angle` for the style `Array` or `square` for the style `type[]`. Defaults to "square". + + +### defaultValueSpacing + +The space character (if any) to use between the equal signs of a default value + + + +### elementSpacing + +The space character (if any) to use between elements in generics and tuples + ### enableFixer @@ -114,7 +126,7 @@ Determines the spacing to add to unions (`|`). Defaults to a single space (`" "` |Tags|`param`, `property`, `returns`, `this`, `throws`, `type`, `typedef`, `yields`| |Recommended|false| |Settings|`mode`| -|Options|`arrayBrackets`, `enableFixer`, `genericDot`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `objectFieldSeparatorOptionalLinebreak`, `objectFieldSeparatorTrailingPunctuation`, `separatorForSingleObjectField`, `stringQuotes`, `typeBracketSpacing`, `unionSpacing`| +|Options|`arrayBrackets`, `defaultValueSpacing`, `elementSpacing`, `enableFixer`, `genericDot`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `objectFieldSeparatorOptionalLinebreak`, `objectFieldSeparatorTrailingPunctuation`, `separatorForSingleObjectField`, `stringQuotes`, `typeBracketSpacing`, `unionSpacing`| @@ -288,6 +300,24 @@ The following patterns are considered problems: */ // "jsdoc/type-formatting": ["error"|"warn", {"objectFieldIndent":" ","objectFieldSeparator":"semicolon-and-linebreak","objectFieldSeparatorOptionalLinebreak":true}] // Message: Inconsistent semicolon-and-linebreak separator usage + +/** + * @param {SomeType} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"elementSpacing":""}] +// Message: Element spacing should be "" + +/** + * @param {[string, number]} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"elementSpacing":""}] +// Message: Element spacing should be "" + +/** + * @param {(x: T) => U} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"defaultValueSpacing":""}] +// Message: Default value spacing should be "" ```` @@ -367,5 +397,20 @@ The following patterns are not considered problems: * }} cfg */ // "jsdoc/type-formatting": ["error"|"warn", {"objectFieldIndent":" ","objectFieldSeparator":"semicolon-and-linebreak","objectFieldSeparatorOptionalLinebreak":true}] + +/** + * @param {SomeType} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"elementSpacing":""}] + +/** + * @param {[string,number]} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"elementSpacing":""}] + +/** + * @param {(x: T) => U} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"defaultValueSpacing":""}] ```` diff --git a/src/rules.d.ts b/src/rules.d.ts index b8f1de56f..e40dfde8e 100644 --- a/src/rules.d.ts +++ b/src/rules.d.ts @@ -2947,6 +2947,14 @@ export interface Rules { * Determines how array generics are represented. Set to `angle` for the style `Array` or `square` for the style `type[]`. Defaults to "square". */ arrayBrackets?: "angle" | "square"; + /** + * The space character (if any) to use between the equal signs of a default value + */ + defaultValueSpacing?: string; + /** + * The space character (if any) to use between elements in generics and tuples + */ + elementSpacing?: string; /** * Whether to enable the fixer. Defaults to `true`. */ diff --git a/src/rules/typeFormatting.js b/src/rules/typeFormatting.js index e93c7d025..5e139e908 100644 --- a/src/rules/typeFormatting.js +++ b/src/rules/typeFormatting.js @@ -17,6 +17,7 @@ export default iterateJsdoc(({ }) => { const { arrayBrackets = 'square', + defaultValueSpacing = ' ', elementSpacing = ' ', enableFixer = true, genericDot = false, @@ -318,6 +319,18 @@ export default iterateJsdoc(({ break; } + case 'JsdocTypeTypeParameter': { + const typeNode = /** @type {import('jsdoc-type-pratt-parser').TypeParameterResult} */ (nde); + if (typeNode.defaultValue && (typeNode.meta?.defaultValueSpacing ?? ' ') !== defaultValueSpacing) { + typeNode.meta = { + defaultValueSpacing, + }; + errorMessage = `Default value spacing should be "${defaultValueSpacing}"`; + } + + break; + } + case 'JsdocTypeUnion': { const typeNode = /** @type {import('jsdoc-type-pratt-parser').UnionResult} */ (nde); /* c8 ignore next -- Guard */ @@ -393,6 +406,10 @@ export default iterateJsdoc(({ ], type: 'string', }, + defaultValueSpacing: { + description: 'The space character (if any) to use between the equal signs of a default value', + type: 'string', + }, elementSpacing: { description: 'The space character (if any) to use between elements in generics and tuples', type: 'string', diff --git a/test/rules/assertions/typeFormatting.js b/test/rules/assertions/typeFormatting.js index 4a68075b6..32163fee1 100644 --- a/test/rules/assertions/typeFormatting.js +++ b/test/rules/assertions/typeFormatting.js @@ -752,6 +752,33 @@ export default { */ `, }, + { + code: ` + /** + * @param {(x: T) => U} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Default value spacing should be ""', + }, + { + line: 3, + message: 'Default value spacing should be ""', + }, + ], + options: [ + { + defaultValueSpacing: '', + }, + ], + output: ` + /** + * @param {(x: T) => U} cfg + */ + `, + }, ], valid: [ { @@ -933,5 +960,41 @@ export default { }, ], }, + { + code: ` + /** + * @param {SomeType} cfg + */ + `, + options: [ + { + elementSpacing: '', + }, + ], + }, + { + code: ` + /** + * @param {[string,number]} cfg + */ + `, + options: [ + { + elementSpacing: '', + }, + ], + }, + { + code: ` + /** + * @param {(x: T) => U} cfg + */ + `, + options: [ + { + defaultValueSpacing: '', + }, + ], + }, ], }; From ecf3a4afbf34aa87a76d74c76a3d4eab73d4588c Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 7 Oct 2025 03:35:48 -0700 Subject: [PATCH 143/189] feat(`type-formatting`): `keyValuePostColonSpacing`, `keyValuePostKeySpacing`, `keyValuePostOptionalSpacing`, `keyValuePostVariadicSpacing` for key-value pairs (and object fields) Also: - chore: update jsdoccomment, semver, devDep. --- .README/rules/type-formatting.md | 2 +- docs/rules/type-formatting.md | 128 ++++++++++++-- package.json | 6 +- pnpm-lock.yaml | 74 ++++---- src/rules.d.ts | 30 +++- src/rules/typeFormatting.js | 106 +++++++++-- test/rules/assertions/typeFormatting.js | 222 +++++++++++++++++++++++- 7 files changed, 476 insertions(+), 92 deletions(-) diff --git a/.README/rules/type-formatting.md b/.README/rules/type-formatting.md index c717ec086..1458b8ef4 100644 --- a/.README/rules/type-formatting.md +++ b/.README/rules/type-formatting.md @@ -18,7 +18,7 @@ Currently offers the following options for formatting types. |Tags|`param`, `property`, `returns`, `this`, `throws`, `type`, `typedef`, `yields`| |Recommended|false| |Settings|`mode`| -|Options|`arrayBrackets`, `defaultValueSpacing`, `elementSpacing`, `enableFixer`, `genericDot`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `objectFieldSeparatorOptionalLinebreak`, `objectFieldSeparatorTrailingPunctuation`, `separatorForSingleObjectField`, `stringQuotes`, `typeBracketSpacing`, `unionSpacing`| +|Options|`arrayBrackets`, `enableFixer`, `genericAndTupleElementSpacing`, `genericDot`, `keyValuePostColonSpacing`, `keyValuePostKeySpacing`, `keyValuePostOptionalSpacing`, `keyValuePostVariadicSpacing`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `objectFieldSeparatorOptionalLinebreak`, `objectFieldSeparatorTrailingPunctuation`, `parameterDefaultValueSpacing`, `separatorForSingleObjectField`, `stringQuotes`, `typeBracketSpacing`, `unionSpacing`| ## Failing examples diff --git a/docs/rules/type-formatting.md b/docs/rules/type-formatting.md index 0a6b7f883..2829e2531 100644 --- a/docs/rules/type-formatting.md +++ b/docs/rules/type-formatting.md @@ -22,30 +22,48 @@ A single options object has the following properties. Determines how array generics are represented. Set to `angle` for the style `Array` or `square` for the style `type[]`. Defaults to "square". - - -### defaultValueSpacing - -The space character (if any) to use between the equal signs of a default value - - - -### elementSpacing - -The space character (if any) to use between elements in generics and tuples - ### enableFixer Whether to enable the fixer. Defaults to `true`. + + +### genericAndTupleElementSpacing + +The space character (if any) to use between elements in generics and tuples + ### genericDot Boolean value of whether to use a dot before the angled brackets of a generic (e.g., `SomeType.`). Defaults to `false`. + + +### keyValuePostColonSpacing + +The amount of spacing (if any) after the colon of a key-value or object-field pair + + + +### keyValuePostKeySpacing + +The amount of spacing (if any) immediately after keys in a key-value or object-field pair + + + +### keyValuePostOptionalSpacing + +The amount of spacing (if any) after the optional operator (`?`) in a key-value or object-field pair + + + +### keyValuePostVariadicSpacing + +The amount of spacing (if any) after a variadic operator (`...`) in a key-value pair + ### objectFieldIndent @@ -91,6 +109,12 @@ will determine whether to add punctuation corresponding to the `objectFieldSeparator` (e.g., a semicolon) to the final object field. Defaults to `false`. + + +### parameterDefaultValueSpacing + +The space character (if any) to use between the equal signs of a default value + ### separatorForSingleObjectField @@ -126,7 +150,7 @@ Determines the spacing to add to unions (`|`). Defaults to a single space (`" "` |Tags|`param`, `property`, `returns`, `this`, `throws`, `type`, `typedef`, `yields`| |Recommended|false| |Settings|`mode`| -|Options|`arrayBrackets`, `defaultValueSpacing`, `elementSpacing`, `enableFixer`, `genericDot`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `objectFieldSeparatorOptionalLinebreak`, `objectFieldSeparatorTrailingPunctuation`, `separatorForSingleObjectField`, `stringQuotes`, `typeBracketSpacing`, `unionSpacing`| +|Options|`arrayBrackets`, `enableFixer`, `genericAndTupleElementSpacing`, `genericDot`, `keyValuePostColonSpacing`, `keyValuePostKeySpacing`, `keyValuePostOptionalSpacing`, `keyValuePostVariadicSpacing`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `objectFieldSeparatorOptionalLinebreak`, `objectFieldSeparatorTrailingPunctuation`, `parameterDefaultValueSpacing`, `separatorForSingleObjectField`, `stringQuotes`, `typeBracketSpacing`, `unionSpacing`| @@ -304,20 +328,56 @@ The following patterns are considered problems: /** * @param {SomeType} cfg */ -// "jsdoc/type-formatting": ["error"|"warn", {"elementSpacing":""}] +// "jsdoc/type-formatting": ["error"|"warn", {"genericAndTupleElementSpacing":""}] // Message: Element spacing should be "" /** * @param {[string, number]} cfg */ -// "jsdoc/type-formatting": ["error"|"warn", {"elementSpacing":""}] +// "jsdoc/type-formatting": ["error"|"warn", {"genericAndTupleElementSpacing":""}] // Message: Element spacing should be "" /** * @param {(x: T) => U} cfg */ -// "jsdoc/type-formatting": ["error"|"warn", {"defaultValueSpacing":""}] +// "jsdoc/type-formatting": ["error"|"warn", {"parameterDefaultValueSpacing":""}] // Message: Default value spacing should be "" + +/** + * @param {{a: 3}} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"keyValuePostColonSpacing":""}] +// Message: Post colon spacing should be "" + +/** + * @param {{a: 3}} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"keyValuePostKeySpacing":" "}] +// Message: Post key spacing should be " " + +/** + * @param {{a?: 3}} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"keyValuePostOptionalSpacing":" "}] +// Message: Post optional (`?`) spacing should be " " + +/** + * @param {[a: 3]} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"keyValuePostColonSpacing":""}] +// Message: Post colon spacing should be "" + +/** + * @param {[a: 3]} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"keyValuePostKeySpacing":" "}] +// Message: Post key spacing should be " " + +/** + * @param {[a?: 3]} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"keyValuePostOptionalSpacing":" "}] +// Message: Post optional (`?`) spacing should be " " ```` @@ -401,16 +461,46 @@ The following patterns are not considered problems: /** * @param {SomeType} cfg */ -// "jsdoc/type-formatting": ["error"|"warn", {"elementSpacing":""}] +// "jsdoc/type-formatting": ["error"|"warn", {"genericAndTupleElementSpacing":""}] /** * @param {[string,number]} cfg */ -// "jsdoc/type-formatting": ["error"|"warn", {"elementSpacing":""}] +// "jsdoc/type-formatting": ["error"|"warn", {"genericAndTupleElementSpacing":""}] /** * @param {(x: T) => U} cfg */ -// "jsdoc/type-formatting": ["error"|"warn", {"defaultValueSpacing":""}] +// "jsdoc/type-formatting": ["error"|"warn", {"parameterDefaultValueSpacing":""}] + +/** + * @param {{a:3}} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"keyValuePostColonSpacing":""}] + +/** + * @param {{a : 3}} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"keyValuePostKeySpacing":" "}] + +/** + * @param {{a? : 3}} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"keyValuePostOptionalSpacing":" "}] + +/** + * @param {[a:3]} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"keyValuePostColonSpacing":""}] + +/** + * @param {[a : 3]} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"keyValuePostKeySpacing":" "}] + +/** + * @param {[a? : 3]} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"keyValuePostOptionalSpacing":" "}] ```` diff --git a/package.json b/package.json index 3ded8d958..3bf4ede2c 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "url": "http://gajus.com" }, "dependencies": { - "@es-joy/jsdoccomment": "~0.73.0", + "@es-joy/jsdoccomment": "~0.75.0", "are-docs-informative": "^0.0.2", "comment-parser": "1.4.1", "debug": "^4.4.3", @@ -15,7 +15,7 @@ "html-entities": "^2.6.0", "object-deep-merge": "^1.0.5", "parse-imports-exports": "^0.2.4", - "semver": "^7.7.2", + "semver": "^7.7.3", "spdx-expression-parse": "^4.0.0" }, "description": "JSDoc linting rules for ESLint.", @@ -58,7 +58,7 @@ "glob": "^11.0.3", "globals": "^16.4.0", "husky": "^9.1.7", - "jsdoc-type-pratt-parser": "^6.8.0", + "jsdoc-type-pratt-parser": "^6.9.1", "json-schema": "^0.4.0", "json-schema-to-typescript": "^15.0.4", "lint-staged": "^16.2.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a05156b16..b8f7d3c01 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,8 +12,8 @@ importers: .: dependencies: '@es-joy/jsdoccomment': - specifier: ~0.73.0 - version: 0.73.0 + specifier: ~0.75.0 + version: 0.75.0 are-docs-informative: specifier: ^0.0.2 version: 0.0.2 @@ -42,8 +42,8 @@ importers: specifier: ^0.2.4 version: 0.2.4 semver: - specifier: ^7.7.2 - version: 7.7.2 + specifier: ^7.7.3 + version: 7.7.3 spdx-expression-parse: specifier: ^4.0.0 version: 4.0.0 @@ -163,8 +163,8 @@ importers: specifier: ^9.1.7 version: 9.1.7 jsdoc-type-pratt-parser: - specifier: ^6.8.0 - version: 6.8.0 + specifier: ^6.9.1 + version: 6.9.1 json-schema: specifier: ^0.4.0 version: 0.4.0 @@ -796,8 +796,8 @@ packages: resolution: {integrity: sha512-yWi6sm7INEwnfS7IJvE0dU+RTrwzLPFcY7e7eGpu/l5Q9lWfQ2ROwZ0qVnc242jw2TUPsfHX3XMIISkGBv57RQ==} engines: {node: '>=20.11.0'} - '@es-joy/jsdoccomment@0.73.0': - resolution: {integrity: sha512-7qLo/QVcqrCTAp/uWmTYryd/qf6fWZEJBRp9HtyOo+XBT41D6fQZ74ehEFZH1IzHD90iPTUYlE7u2V+yGhVpnw==} + '@es-joy/jsdoccomment@0.75.0': + resolution: {integrity: sha512-Bj+oF8reFb4b+6LUmG6ETpDsBU/28y/bAAzioyIR4VK/V6UodYBNGbtxRyGxk0aJJQqpZZ6jz82vVZWCX6Mwmg==} engines: {node: '>=20.11.0'} '@eslint-community/eslint-utils@4.9.0': @@ -3426,8 +3426,8 @@ packages: resolution: {integrity: sha512-TYzkACp/wPvDJLRY7qpHXtrhgwoAaojIOnLaaVNi+AbPU2u1kkjfKd9hXXTq0qSAGsyYXvwUXt99h9I5iCmjjw==} engines: {node: '>=12.0.0'} - jsdoc-type-pratt-parser@6.8.0: - resolution: {integrity: sha512-ai5xhGwgsWWGs4DfUV2DO1R8INNWVC9M7G3XlZZXxNL/NieEkTUdgNm6dMZKydRBIMw/o9Bi2qDroTshyERljQ==} + jsdoc-type-pratt-parser@6.9.1: + resolution: {integrity: sha512-HbYNAorY51GnpKvgDf4YINSY+V1segv0qEeijvTSI6OWMCmqah0W6mVwBFeWskJ81uTJJVnDQlwhpJMREvGsXg==} engines: {node: '>=20.0.0'} jsdom@6.5.1: @@ -4459,8 +4459,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.7.2: - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + semver@7.7.3: + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} engines: {node: '>=10'} hasBin: true @@ -5184,7 +5184,7 @@ snapshots: commander: 10.0.1 marked: 9.1.6 marked-terminal: 7.3.0(marked@9.1.6) - semver: 7.7.2 + semver: 7.7.3 '@arethetypeswrong/core@0.18.2': dependencies: @@ -5193,7 +5193,7 @@ snapshots: cjs-module-lexer: 1.4.3 fflate: 0.8.2 lru-cache: 11.2.2 - semver: 7.7.2 + semver: 7.7.3 typescript: 5.6.1-rc validate-npm-package-name: 5.0.1 @@ -5976,13 +5976,13 @@ snapshots: esquery: 1.6.0 jsdoc-type-pratt-parser: 5.9.2 - '@es-joy/jsdoccomment@0.73.0': + '@es-joy/jsdoccomment@0.75.0': dependencies: '@types/estree': 1.0.8 '@typescript-eslint/types': 8.46.0 comment-parser: 1.4.1 esquery: 1.6.0 - jsdoc-type-pratt-parser: 6.8.0 + jsdoc-type-pratt-parser: 6.9.1 '@eslint-community/eslint-utils@4.9.0(eslint@9.37.0(jiti@2.6.1))': dependencies: @@ -6388,7 +6388,7 @@ snapshots: '@npmcli/fs@3.1.1': dependencies: - semver: 7.7.2 + semver: 7.7.3 optional: true '@octokit/auth-token@6.0.0': {} @@ -6523,7 +6523,7 @@ snapshots: read-pkg: 9.0.1 registry-auth-token: 5.1.0 semantic-release: 24.2.9(typescript@5.9.3) - semver: 7.7.2 + semver: 7.7.3 tempy: 3.1.0 '@semantic-release/release-notes-generator@14.1.0(semantic-release@24.2.9(typescript@5.9.3))': @@ -6750,7 +6750,7 @@ snapshots: fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.2 + semver: 7.7.3 ts-api-utils: 2.1.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: @@ -6766,7 +6766,7 @@ snapshots: fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.2 + semver: 7.7.3 ts-api-utils: 2.1.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: @@ -7372,7 +7372,7 @@ snapshots: conventional-commits-filter: 5.0.0 handlebars: 4.7.8 meow: 13.2.0 - semver: 7.7.2 + semver: 7.7.3 conventional-commits-filter@5.0.0: {} @@ -7744,12 +7744,12 @@ snapshots: eslint-compat-utils@0.5.1(eslint@9.37.0(jiti@2.6.1)): dependencies: eslint: 9.37.0(jiti@2.6.1) - semver: 7.7.2 + semver: 7.7.3 eslint-compat-utils@0.6.5(eslint@9.37.0(jiti@2.6.1)): dependencies: eslint: 9.37.0(jiti@2.6.1) - semver: 7.7.2 + semver: 7.7.3 eslint-config-canonical@45.0.1(@types/node@24.7.0)(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): dependencies: @@ -7954,7 +7954,7 @@ snapshots: eslint-import-context: 0.1.9(unrs-resolver@1.11.1) is-glob: 4.0.3 minimatch: 10.0.3 - semver: 7.7.2 + semver: 7.7.3 stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: @@ -7983,7 +7983,7 @@ snapshots: espree: 10.4.0 esquery: 1.6.0 parse-imports-exports: 0.2.4 - semver: 7.7.2 + semver: 7.7.3 spdx-expression-parse: 4.0.0 transitivePeerDependencies: - supports-color @@ -8047,7 +8047,7 @@ snapshots: globals: 15.15.0 globrex: 0.1.2 ignore: 5.3.2 - semver: 7.7.2 + semver: 7.7.3 ts-declaration-location: 1.0.7(typescript@5.9.3) transitivePeerDependencies: - typescript @@ -8140,7 +8140,7 @@ snapshots: pluralize: 8.0.0 regexp-tree: 0.1.27 regjsparser: 0.12.0 - semver: 7.7.2 + semver: 7.7.3 strip-indent: 4.1.0 eslint-plugin-yml@1.18.0(eslint@9.37.0(jiti@2.6.1)): @@ -8845,7 +8845,7 @@ snapshots: is-bun-module@2.0.0: dependencies: - semver: 7.7.2 + semver: 7.7.3 is-callable@1.2.7: {} @@ -9033,7 +9033,7 @@ snapshots: '@babel/parser': 7.28.4 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 - semver: 7.7.2 + semver: 7.7.3 transitivePeerDependencies: - supports-color @@ -9092,7 +9092,7 @@ snapshots: jsdoc-type-pratt-parser@5.9.2: {} - jsdoc-type-pratt-parser@6.8.0: {} + jsdoc-type-pratt-parser@6.9.1: {} jsdom@6.5.1: dependencies: @@ -9150,7 +9150,7 @@ snapshots: acorn: 8.15.0 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - semver: 7.7.2 + semver: 7.7.3 jsonfile@6.2.0: dependencies: @@ -9310,7 +9310,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.7.2 + semver: 7.7.3 make-fetch-happen@13.0.1: dependencies: @@ -9541,7 +9541,7 @@ snapshots: make-fetch-happen: 13.0.1 nopt: 7.2.1 proc-log: 4.2.0 - semver: 7.7.2 + semver: 7.7.3 tar: 6.2.1 which: 4.0.0 transitivePeerDependencies: @@ -9558,7 +9558,7 @@ snapshots: normalize-package-data@6.0.2: dependencies: hosted-git-info: 7.0.2 - semver: 7.7.2 + semver: 7.7.3 validate-npm-package-license: 3.0.4 normalize-path@2.1.1: @@ -10139,7 +10139,7 @@ snapshots: p-reduce: 3.0.0 read-package-up: 11.0.0 resolve-from: 5.0.0 - semver: 7.7.2 + semver: 7.7.3 semver-diff: 5.0.0 signale: 1.4.0 yargs: 17.7.2 @@ -10151,7 +10151,7 @@ snapshots: semver-diff@5.0.0: dependencies: - semver: 7.7.2 + semver: 7.7.3 semver-regex@4.0.5: {} @@ -10159,7 +10159,7 @@ snapshots: semver@6.3.1: {} - semver@7.7.2: {} + semver@7.7.3: {} serialize-javascript@6.0.2: dependencies: diff --git a/src/rules.d.ts b/src/rules.d.ts index e40dfde8e..b39a98c6b 100644 --- a/src/rules.d.ts +++ b/src/rules.d.ts @@ -2948,21 +2948,33 @@ export interface Rules { */ arrayBrackets?: "angle" | "square"; /** - * The space character (if any) to use between the equal signs of a default value + * Whether to enable the fixer. Defaults to `true`. */ - defaultValueSpacing?: string; + enableFixer?: boolean; /** * The space character (if any) to use between elements in generics and tuples */ - elementSpacing?: string; - /** - * Whether to enable the fixer. Defaults to `true`. - */ - enableFixer?: boolean; + genericAndTupleElementSpacing?: string; /** * Boolean value of whether to use a dot before the angled brackets of a generic (e.g., `SomeType.`). Defaults to `false`. */ genericDot?: boolean; + /** + * The amount of spacing (if any) after the colon of a key-value or object-field pair + */ + keyValuePostColonSpacing?: string; + /** + * The amount of spacing (if any) immediately after keys in a key-value or object-field pair + */ + keyValuePostKeySpacing?: string; + /** + * The amount of spacing (if any) after the optional operator (`?`) in a key-value or object-field pair + */ + keyValuePostOptionalSpacing?: string; + /** + * The amount of spacing (if any) after a variadic operator (`...`) in a key-value pair + */ + keyValuePostVariadicSpacing?: string; /** * A string indicating the whitespace to be added on each line preceding an * object property-value field. Defaults to the empty string. @@ -2998,6 +3010,10 @@ export interface Rules { * Defaults to `false`. */ objectFieldSeparatorTrailingPunctuation?: boolean; + /** + * The space character (if any) to use between the equal signs of a default value + */ + parameterDefaultValueSpacing?: string; /** * Whether to apply the `objectFieldSeparator` (e.g., a semicolon) when there * is only one property-value object field present. Defaults to `false`. diff --git a/src/rules/typeFormatting.js b/src/rules/typeFormatting.js index 5e139e908..31982f26d 100644 --- a/src/rules/typeFormatting.js +++ b/src/rules/typeFormatting.js @@ -17,15 +17,19 @@ export default iterateJsdoc(({ }) => { const { arrayBrackets = 'square', - defaultValueSpacing = ' ', - elementSpacing = ' ', enableFixer = true, + genericAndTupleElementSpacing = ' ', genericDot = false, + keyValuePostColonSpacing = ' ', + keyValuePostKeySpacing = '', + keyValuePostOptionalSpacing = '', + keyValuePostVariadicSpacing = '', objectFieldIndent = '', objectFieldQuote = null, objectFieldSeparator = 'comma', objectFieldSeparatorOptionalLinebreak = true, objectFieldSeparatorTrailingPunctuation = false, + parameterDefaultValueSpacing = ' ', // propertyQuotes = null, separatorForSingleObjectField = false, stringQuotes = 'single', @@ -228,9 +232,48 @@ export default iterateJsdoc(({ } else if (typeNode.meta.dot !== genericDot) { typeNode.meta.dot = genericDot; errorMessage = `Dot usage should be ${genericDot}`; - } else if ((typeNode.meta.elementSpacing ?? ' ') !== elementSpacing) { - typeNode.meta.elementSpacing = elementSpacing; - errorMessage = `Element spacing should be "${elementSpacing}"`; + } else if ((typeNode.meta.elementSpacing ?? ' ') !== genericAndTupleElementSpacing) { + typeNode.meta.elementSpacing = genericAndTupleElementSpacing; + errorMessage = `Element spacing should be "${genericAndTupleElementSpacing}"`; + } + + break; + } + + case 'JsdocTypeKeyValue': { + const typeNode = /** @type {import('jsdoc-type-pratt-parser').KeyValueResult} */ (nde); + if ((typeNode.meta?.postKeySpacing ?? '') !== keyValuePostKeySpacing) { + typeNode.meta = { + postColonSpacing: typeNode.meta?.postColonSpacing ?? ' ', + postKeySpacing: keyValuePostKeySpacing, + postOptionalSpacing: typeNode.meta?.postOptionalSpacing ?? '', + postVariadicSpacing: typeNode.meta?.postVariadicSpacing ?? '', + }; + errorMessage = `Post key spacing should be "${keyValuePostKeySpacing}"`; + } else if ((typeNode.meta?.postColonSpacing ?? ' ') !== keyValuePostColonSpacing) { + typeNode.meta = { + postColonSpacing: keyValuePostColonSpacing, + postKeySpacing: typeNode.meta?.postKeySpacing ?? '', + postOptionalSpacing: typeNode.meta?.postOptionalSpacing ?? '', + postVariadicSpacing: typeNode.meta?.postVariadicSpacing ?? '', + }; + errorMessage = `Post colon spacing should be "${keyValuePostColonSpacing}"`; + } else if ((typeNode.meta?.postOptionalSpacing ?? '') !== keyValuePostOptionalSpacing) { + typeNode.meta = { + postColonSpacing: typeNode.meta?.postColonSpacing ?? ' ', + postKeySpacing: typeNode.meta?.postKeySpacing ?? '', + postOptionalSpacing: keyValuePostOptionalSpacing, + postVariadicSpacing: typeNode.meta?.postVariadicSpacing ?? '', + }; + errorMessage = `Post optional (\`?\`) spacing should be "${keyValuePostOptionalSpacing}"`; + } else if ((typeNode.meta?.postVariadicSpacing ?? '') !== keyValuePostVariadicSpacing) { + typeNode.meta = { + postColonSpacing: typeNode.meta?.postColonSpacing ?? ' ', + postKeySpacing: typeNode.meta?.postKeySpacing ?? '', + postOptionalSpacing: typeNode.meta?.postOptionalSpacing ?? '', + postVariadicSpacing: keyValuePostVariadicSpacing, + }; + errorMessage = `Post variadic (\`...\`) spacing should be "${keyValuePostVariadicSpacing}"`; } break; @@ -277,6 +320,15 @@ export default iterateJsdoc(({ ) { typeNode.meta.quote = objectFieldQuote ?? undefined; errorMessage = `Inconsistent object field quotes ${objectFieldQuote}`; + } else if ((typeNode.meta?.postKeySpacing ?? '') !== keyValuePostKeySpacing) { + typeNode.meta.postKeySpacing = keyValuePostKeySpacing; + errorMessage = `Post key spacing should be "${keyValuePostKeySpacing}"`; + } else if ((typeNode.meta?.postColonSpacing ?? ' ') !== keyValuePostColonSpacing) { + typeNode.meta.postColonSpacing = keyValuePostColonSpacing; + errorMessage = `Post colon spacing should be "${keyValuePostColonSpacing}"`; + } else if ((typeNode.meta?.postOptionalSpacing ?? '') !== keyValuePostOptionalSpacing) { + typeNode.meta.postOptionalSpacing = keyValuePostOptionalSpacing; + errorMessage = `Post optional (\`?\`) spacing should be "${keyValuePostOptionalSpacing}"`; } break; @@ -309,11 +361,11 @@ export default iterateJsdoc(({ case 'JsdocTypeTuple': { const typeNode = /** @type {import('jsdoc-type-pratt-parser').TupleResult} */ (nde); - if ((typeNode.meta?.elementSpacing ?? ' ') !== elementSpacing) { + if ((typeNode.meta?.elementSpacing ?? ' ') !== genericAndTupleElementSpacing) { typeNode.meta = { - elementSpacing, + elementSpacing: genericAndTupleElementSpacing, }; - errorMessage = `Element spacing should be "${elementSpacing}"`; + errorMessage = `Element spacing should be "${genericAndTupleElementSpacing}"`; } break; @@ -321,11 +373,11 @@ export default iterateJsdoc(({ case 'JsdocTypeTypeParameter': { const typeNode = /** @type {import('jsdoc-type-pratt-parser').TypeParameterResult} */ (nde); - if (typeNode.defaultValue && (typeNode.meta?.defaultValueSpacing ?? ' ') !== defaultValueSpacing) { + if (typeNode.defaultValue && (typeNode.meta?.defaultValueSpacing ?? ' ') !== parameterDefaultValueSpacing) { typeNode.meta = { - defaultValueSpacing, + defaultValueSpacing: parameterDefaultValueSpacing, }; - errorMessage = `Default value spacing should be "${defaultValueSpacing}"`; + errorMessage = `Default value spacing should be "${parameterDefaultValueSpacing}"`; } break; @@ -406,22 +458,34 @@ export default iterateJsdoc(({ ], type: 'string', }, - defaultValueSpacing: { - description: 'The space character (if any) to use between the equal signs of a default value', - type: 'string', - }, - elementSpacing: { - description: 'The space character (if any) to use between elements in generics and tuples', - type: 'string', - }, enableFixer: { description: 'Whether to enable the fixer. Defaults to `true`.', type: 'boolean', }, + genericAndTupleElementSpacing: { + description: 'The space character (if any) to use between elements in generics and tuples', + type: 'string', + }, genericDot: { description: 'Boolean value of whether to use a dot before the angled brackets of a generic (e.g., `SomeType.`). Defaults to `false`.', type: 'boolean', }, + keyValuePostColonSpacing: { + description: 'The amount of spacing (if any) after the colon of a key-value or object-field pair', + type: 'string', + }, + keyValuePostKeySpacing: { + description: 'The amount of spacing (if any) immediately after keys in a key-value or object-field pair', + type: 'string', + }, + keyValuePostOptionalSpacing: { + description: 'The amount of spacing (if any) after the optional operator (`?`) in a key-value or object-field pair', + type: 'string', + }, + keyValuePostVariadicSpacing: { + description: 'The amount of spacing (if any) after a variadic operator (`...`) in a key-value pair', + type: 'string', + }, objectFieldIndent: { description: `A string indicating the whitespace to be added on each line preceding an object property-value field. Defaults to the empty string.`, @@ -468,6 +532,10 @@ will determine whether to add punctuation corresponding to the Defaults to \`false\`.`, type: 'boolean', }, + parameterDefaultValueSpacing: { + description: 'The space character (if any) to use between the equal signs of a default value', + type: 'string', + }, // propertyQuotes: { // description: `Whether and how namepath properties should be quoted (e.g., \`ab."cd"."ef"\`). // Set to \`single\`, \`double\`, or \`null\`. Defaults to \`null\` (no quotes unless diff --git a/test/rules/assertions/typeFormatting.js b/test/rules/assertions/typeFormatting.js index 32163fee1..d95680d43 100644 --- a/test/rules/assertions/typeFormatting.js +++ b/test/rules/assertions/typeFormatting.js @@ -720,7 +720,7 @@ export default { ], options: [ { - elementSpacing: '', + genericAndTupleElementSpacing: '', }, ], output: ` @@ -743,7 +743,7 @@ export default { ], options: [ { - elementSpacing: '', + genericAndTupleElementSpacing: '', }, ], output: ` @@ -770,7 +770,7 @@ export default { ], options: [ { - defaultValueSpacing: '', + parameterDefaultValueSpacing: '', }, ], output: ` @@ -779,6 +779,144 @@ export default { */ `, }, + { + code: ` + /** + * @param {{a: 3}} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Post colon spacing should be ""', + }, + ], + options: [ + { + keyValuePostColonSpacing: '', + }, + ], + output: ` + /** + * @param {{a:3}} cfg + */ + `, + }, + { + code: ` + /** + * @param {{a: 3}} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Post key spacing should be " "', + }, + ], + options: [ + { + keyValuePostKeySpacing: ' ', + }, + ], + output: ` + /** + * @param {{a : 3}} cfg + */ + `, + }, + { + code: ` + /** + * @param {{a?: 3}} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Post optional (`?`) spacing should be " "', + }, + ], + options: [ + { + keyValuePostOptionalSpacing: ' ', + }, + ], + output: ` + /** + * @param {{a? : 3}} cfg + */ + `, + }, + { + code: ` + /** + * @param {[a: 3]} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Post colon spacing should be ""', + }, + ], + options: [ + { + keyValuePostColonSpacing: '', + }, + ], + output: ` + /** + * @param {[a:3]} cfg + */ + `, + }, + { + code: ` + /** + * @param {[a: 3]} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Post key spacing should be " "', + }, + ], + options: [ + { + keyValuePostKeySpacing: ' ', + }, + ], + output: ` + /** + * @param {[a : 3]} cfg + */ + `, + }, + { + code: ` + /** + * @param {[a?: 3]} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Post optional (`?`) spacing should be " "', + }, + ], + options: [ + { + keyValuePostOptionalSpacing: ' ', + }, + ], + output: ` + /** + * @param {[a? : 3]} cfg + */ + `, + }, ], valid: [ { @@ -968,7 +1106,7 @@ export default { `, options: [ { - elementSpacing: '', + genericAndTupleElementSpacing: '', }, ], }, @@ -980,7 +1118,7 @@ export default { `, options: [ { - elementSpacing: '', + genericAndTupleElementSpacing: '', }, ], }, @@ -992,7 +1130,79 @@ export default { `, options: [ { - defaultValueSpacing: '', + parameterDefaultValueSpacing: '', + }, + ], + }, + { + code: ` + /** + * @param {{a:3}} cfg + */ + `, + options: [ + { + keyValuePostColonSpacing: '', + }, + ], + }, + { + code: ` + /** + * @param {{a : 3}} cfg + */ + `, + options: [ + { + keyValuePostKeySpacing: ' ', + }, + ], + }, + { + code: ` + /** + * @param {{a? : 3}} cfg + */ + `, + options: [ + { + keyValuePostOptionalSpacing: ' ', + }, + ], + }, + { + code: ` + /** + * @param {[a:3]} cfg + */ + `, + options: [ + { + keyValuePostColonSpacing: '', + }, + ], + }, + { + code: ` + /** + * @param {[a : 3]} cfg + */ + `, + options: [ + { + keyValuePostKeySpacing: ' ', + }, + ], + }, + { + code: ` + /** + * @param {[a? : 3]} cfg + */ + `, + options: [ + { + keyValuePostOptionalSpacing: ' ', }, ], }, From a361dc93e35bd29abd26192252604707a71b6fd8 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 7 Oct 2025 13:22:09 -0700 Subject: [PATCH 144/189] feat(`type-formatting`): add spacing for functions/classes and method quotes --- .README/rules/type-formatting.md | 2 +- docs/rules/type-formatting.md | 200 +++++++++++- src/rules.d.ts | 52 +++- src/rules/typeFormatting.js | 251 ++++++++++++++- test/rules/assertions/typeFormatting.js | 397 ++++++++++++++++++++++++ 5 files changed, 881 insertions(+), 21 deletions(-) diff --git a/.README/rules/type-formatting.md b/.README/rules/type-formatting.md index 1458b8ef4..ba4e5a24a 100644 --- a/.README/rules/type-formatting.md +++ b/.README/rules/type-formatting.md @@ -18,7 +18,7 @@ Currently offers the following options for formatting types. |Tags|`param`, `property`, `returns`, `this`, `throws`, `type`, `typedef`, `yields`| |Recommended|false| |Settings|`mode`| -|Options|`arrayBrackets`, `enableFixer`, `genericAndTupleElementSpacing`, `genericDot`, `keyValuePostColonSpacing`, `keyValuePostKeySpacing`, `keyValuePostOptionalSpacing`, `keyValuePostVariadicSpacing`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `objectFieldSeparatorOptionalLinebreak`, `objectFieldSeparatorTrailingPunctuation`, `parameterDefaultValueSpacing`, `separatorForSingleObjectField`, `stringQuotes`, `typeBracketSpacing`, `unionSpacing`| +|Options|`arrayBrackets`, `arrowFunctionPostReturnMarkerSpacing`, `arrowFunctionPreReturnMarkerSpacing`, `enableFixer`, `functionOrClassParameterSpacing`, `functionOrClassPostGenericSpacing`, `functionOrClassPostReturnMarkerSpacing`, `functionOrClassPreReturnMarkerSpacing`, `functionOrClassTypeParameterSpacing`, `genericAndTupleElementSpacing`, `genericDot`, `keyValuePostColonSpacing`, `keyValuePostKeySpacing`, `keyValuePostOptionalSpacing`, `keyValuePostVariadicSpacing`, `methodQuotes`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `objectFieldSeparatorOptionalLinebreak`, `objectFieldSeparatorTrailingPunctuation`, `parameterDefaultValueSpacing`, `postMethodNameSpacing`, `postNewSpacing`, `separatorForSingleObjectField`, `stringQuotes`, `typeBracketSpacing`, `unionSpacing`| ## Failing examples diff --git a/docs/rules/type-formatting.md b/docs/rules/type-formatting.md index 2829e2531..63ce47bfe 100644 --- a/docs/rules/type-formatting.md +++ b/docs/rules/type-formatting.md @@ -22,17 +22,59 @@ A single options object has the following properties. Determines how array generics are represented. Set to `angle` for the style `Array` or `square` for the style `type[]`. Defaults to "square". + + +### arrowFunctionPostReturnMarkerSpacing + +The space character (if any) to use after return markers (`=>`). Defaults to " ". + + + +### arrowFunctionPreReturnMarkerSpacing + +The space character (if any) to use before return markers (`=>`). Defaults to " ". + ### enableFixer Whether to enable the fixer. Defaults to `true`. + + +### functionOrClassParameterSpacing + +The space character (if any) to use between function or class parameters. Defaults to " ". + + + +### functionOrClassPostGenericSpacing + +The space character (if any) to use after a generic expression in a function or class. Defaults to "". + + + +### functionOrClassPostReturnMarkerSpacing + +The space character (if any) to use after return markers (`:`). Defaults to "". + + + +### functionOrClassPreReturnMarkerSpacing + +The space character (if any) to use before return markers (`:`). Defaults to "". + + + +### functionOrClassTypeParameterSpacing + +The space character (if any) to use between type parameters in a function or class. Defaults to " ". + ### genericAndTupleElementSpacing -The space character (if any) to use between elements in generics and tuples +The space character (if any) to use between elements in generics and tuples. Defaults to " ". @@ -44,25 +86,31 @@ Boolean value of whether to use a dot before the angled brackets of a generic (e ### keyValuePostColonSpacing -The amount of spacing (if any) after the colon of a key-value or object-field pair +The amount of spacing (if any) after the colon of a key-value or object-field pair. Defaults to " ". ### keyValuePostKeySpacing -The amount of spacing (if any) immediately after keys in a key-value or object-field pair +The amount of spacing (if any) immediately after keys in a key-value or object-field pair. Defaults to "". ### keyValuePostOptionalSpacing -The amount of spacing (if any) after the optional operator (`?`) in a key-value or object-field pair +The amount of spacing (if any) after the optional operator (`?`) in a key-value or object-field pair. Defaults to "". ### keyValuePostVariadicSpacing -The amount of spacing (if any) after a variadic operator (`...`) in a key-value pair +The amount of spacing (if any) after a variadic operator (`...`) in a key-value pair. Defaults to "". + + + +### methodQuotes + +The style of quotation mark for surrounding method names when quoted. Defaults to `double` @@ -113,7 +161,19 @@ Defaults to `false`. ### parameterDefaultValueSpacing -The space character (if any) to use between the equal signs of a default value +The space character (if any) to use between the equal signs of a default value. Defaults to " ". + + + +### postMethodNameSpacing + +The space character (if any) to add after a method name. Defaults to "". + + + +### postNewSpacing + +The space character (if any) to add after "new" in a constructor. Defaults to " ". @@ -150,7 +210,7 @@ Determines the spacing to add to unions (`|`). Defaults to a single space (`" "` |Tags|`param`, `property`, `returns`, `this`, `throws`, `type`, `typedef`, `yields`| |Recommended|false| |Settings|`mode`| -|Options|`arrayBrackets`, `enableFixer`, `genericAndTupleElementSpacing`, `genericDot`, `keyValuePostColonSpacing`, `keyValuePostKeySpacing`, `keyValuePostOptionalSpacing`, `keyValuePostVariadicSpacing`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `objectFieldSeparatorOptionalLinebreak`, `objectFieldSeparatorTrailingPunctuation`, `parameterDefaultValueSpacing`, `separatorForSingleObjectField`, `stringQuotes`, `typeBracketSpacing`, `unionSpacing`| +|Options|`arrayBrackets`, `arrowFunctionPostReturnMarkerSpacing`, `arrowFunctionPreReturnMarkerSpacing`, `enableFixer`, `functionOrClassParameterSpacing`, `functionOrClassPostGenericSpacing`, `functionOrClassPostReturnMarkerSpacing`, `functionOrClassPreReturnMarkerSpacing`, `functionOrClassTypeParameterSpacing`, `genericAndTupleElementSpacing`, `genericDot`, `keyValuePostColonSpacing`, `keyValuePostKeySpacing`, `keyValuePostOptionalSpacing`, `keyValuePostVariadicSpacing`, `methodQuotes`, `objectFieldIndent`, `objectFieldQuote`, `objectFieldSeparator`, `objectFieldSeparatorOptionalLinebreak`, `objectFieldSeparatorTrailingPunctuation`, `parameterDefaultValueSpacing`, `postMethodNameSpacing`, `postNewSpacing`, `separatorForSingleObjectField`, `stringQuotes`, `typeBracketSpacing`, `unionSpacing`| @@ -378,6 +438,72 @@ The following patterns are considered problems: */ // "jsdoc/type-formatting": ["error"|"warn", {"keyValuePostOptionalSpacing":" "}] // Message: Post optional (`?`) spacing should be " " + +/** + * @param {() => void} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"arrowFunctionPostReturnMarkerSpacing":""}] +// Message: Post-return-marker spacing should be "" + +/** + * @param {() => void} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"arrowFunctionPreReturnMarkerSpacing":""}] +// Message: Pre-return-marker spacing should be "" + +/** + * @param {{hello(): void}} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"postMethodNameSpacing":" "}] +// Message: Post-method-name spacing should be " " + +/** + * @param {{new (): void}} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"postNewSpacing":""}] +// Message: Post-`new` spacing should be "" + +/** + * @param {function(): void} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"functionOrClassPreReturnMarkerSpacing":" "}] +// Message: Pre-return-marker spacing should be " " + +/** + * @param {{new (): void}} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"functionOrClassPostReturnMarkerSpacing":""}] +// Message: Post-return-marker spacing should be "" + +/** + * @param {{method(a: string, b: number): void}} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"functionOrClassParameterSpacing":""}] +// Message: Parameter spacing should be "" + +/** + * @param {{method(a: T, b: number): void}} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"functionOrClassPostGenericSpacing":" "}] +// Message: Post-generic spacing should be " " + +/** + * @param {{method(a: T, b: U): void}} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"functionOrClassTypeParameterSpacing":""}] +// Message: Type parameter spacing should be "" + +/** + * @param {{'some-method'(a: string, b: number): void}} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"methodQuotes":"double"}] +// Message: Method quoting style should be "double" + +/** + * @param {[a: string, ...b: number]} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"keyValuePostVariadicSpacing":" "}] +// Message: Post variadic (`...`) spacing should be " " ```` @@ -463,6 +589,11 @@ The following patterns are not considered problems: */ // "jsdoc/type-formatting": ["error"|"warn", {"genericAndTupleElementSpacing":""}] +/** + * @param {SomeType} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"genericAndTupleElementSpacing":" "}] + /** * @param {[string,number]} cfg */ @@ -502,5 +633,60 @@ The following patterns are not considered problems: * @param {[a? : 3]} cfg */ // "jsdoc/type-formatting": ["error"|"warn", {"keyValuePostOptionalSpacing":" "}] + +/** + * @param {() =>void} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"arrowFunctionPostReturnMarkerSpacing":""}] + +/** + * @param {()=> void} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"arrowFunctionPreReturnMarkerSpacing":""}] + +/** + * @param {{hello (): void}} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"postMethodNameSpacing":" "}] + +/** + * @param {{new(): void}} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"postNewSpacing":""}] + +/** + * @param {{new (): void}} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"postNewSpacing":" "}] + +/** + * @param {function() : void} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"functionOrClassPreReturnMarkerSpacing":" "}] + +/** + * @param {{new ():void}} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"functionOrClassPostReturnMarkerSpacing":""}] + +/** + * @param {{method(a: string,b: number): void}} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"functionOrClassParameterSpacing":""}] + +/** + * @param {{method (a: T, b: number): void}} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"functionOrClassPostGenericSpacing":" "}] + +/** + * @param {{method(a: T, b: U): void}} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"functionOrClassTypeParameterSpacing":""}] + +/** + * @param {{"some-method"(a: string, b: number): void}} cfg + */ +// "jsdoc/type-formatting": ["error"|"warn", {"methodQuotes":"double"}] ```` diff --git a/src/rules.d.ts b/src/rules.d.ts index b39a98c6b..d7cf7616b 100644 --- a/src/rules.d.ts +++ b/src/rules.d.ts @@ -2947,12 +2947,40 @@ export interface Rules { * Determines how array generics are represented. Set to `angle` for the style `Array` or `square` for the style `type[]`. Defaults to "square". */ arrayBrackets?: "angle" | "square"; + /** + * The space character (if any) to use after return markers (`=>`). Defaults to " ". + */ + arrowFunctionPostReturnMarkerSpacing?: string; + /** + * The space character (if any) to use before return markers (`=>`). Defaults to " ". + */ + arrowFunctionPreReturnMarkerSpacing?: string; /** * Whether to enable the fixer. Defaults to `true`. */ enableFixer?: boolean; /** - * The space character (if any) to use between elements in generics and tuples + * The space character (if any) to use between function or class parameters. Defaults to " ". + */ + functionOrClassParameterSpacing?: string; + /** + * The space character (if any) to use after a generic expression in a function or class. Defaults to "". + */ + functionOrClassPostGenericSpacing?: string; + /** + * The space character (if any) to use after return markers (`:`). Defaults to "". + */ + functionOrClassPostReturnMarkerSpacing?: string; + /** + * The space character (if any) to use before return markers (`:`). Defaults to "". + */ + functionOrClassPreReturnMarkerSpacing?: string; + /** + * The space character (if any) to use between type parameters in a function or class. Defaults to " ". + */ + functionOrClassTypeParameterSpacing?: string; + /** + * The space character (if any) to use between elements in generics and tuples. Defaults to " ". */ genericAndTupleElementSpacing?: string; /** @@ -2960,21 +2988,25 @@ export interface Rules { */ genericDot?: boolean; /** - * The amount of spacing (if any) after the colon of a key-value or object-field pair + * The amount of spacing (if any) after the colon of a key-value or object-field pair. Defaults to " ". */ keyValuePostColonSpacing?: string; /** - * The amount of spacing (if any) immediately after keys in a key-value or object-field pair + * The amount of spacing (if any) immediately after keys in a key-value or object-field pair. Defaults to "". */ keyValuePostKeySpacing?: string; /** - * The amount of spacing (if any) after the optional operator (`?`) in a key-value or object-field pair + * The amount of spacing (if any) after the optional operator (`?`) in a key-value or object-field pair. Defaults to "". */ keyValuePostOptionalSpacing?: string; /** - * The amount of spacing (if any) after a variadic operator (`...`) in a key-value pair + * The amount of spacing (if any) after a variadic operator (`...`) in a key-value pair. Defaults to "". */ keyValuePostVariadicSpacing?: string; + /** + * The style of quotation mark for surrounding method names when quoted. Defaults to `double` + */ + methodQuotes?: "double" | "single"; /** * A string indicating the whitespace to be added on each line preceding an * object property-value field. Defaults to the empty string. @@ -3011,9 +3043,17 @@ export interface Rules { */ objectFieldSeparatorTrailingPunctuation?: boolean; /** - * The space character (if any) to use between the equal signs of a default value + * The space character (if any) to use between the equal signs of a default value. Defaults to " ". */ parameterDefaultValueSpacing?: string; + /** + * The space character (if any) to add after a method name. Defaults to "". + */ + postMethodNameSpacing?: string; + /** + * The space character (if any) to add after "new" in a constructor. Defaults to " ". + */ + postNewSpacing?: string; /** * Whether to apply the `objectFieldSeparator` (e.g., a semicolon) when there * is only one property-value object field present. Defaults to `false`. diff --git a/src/rules/typeFormatting.js b/src/rules/typeFormatting.js index 31982f26d..e9fd95ab3 100644 --- a/src/rules/typeFormatting.js +++ b/src/rules/typeFormatting.js @@ -8,6 +8,7 @@ import { const digitRegex = (/^(\d+(\.\d*)?|\.\d+)([eE][\-+]?\d+)?$/v); +// eslint-disable-next-line complexity -- Todo export default iterateJsdoc(({ context, indent, @@ -17,19 +18,29 @@ export default iterateJsdoc(({ }) => { const { arrayBrackets = 'square', + arrowFunctionPostReturnMarkerSpacing = ' ', + arrowFunctionPreReturnMarkerSpacing = ' ', enableFixer = true, + functionOrClassParameterSpacing = ' ', + functionOrClassPostGenericSpacing = '', + functionOrClassPostReturnMarkerSpacing = ' ', + functionOrClassPreReturnMarkerSpacing = '', + functionOrClassTypeParameterSpacing = ' ', genericAndTupleElementSpacing = ' ', genericDot = false, keyValuePostColonSpacing = ' ', keyValuePostKeySpacing = '', keyValuePostOptionalSpacing = '', keyValuePostVariadicSpacing = '', + methodQuotes = 'double', objectFieldIndent = '', objectFieldQuote = null, objectFieldSeparator = 'comma', objectFieldSeparatorOptionalLinebreak = true, objectFieldSeparatorTrailingPunctuation = false, parameterDefaultValueSpacing = ' ', + postMethodNameSpacing = '', + postNewSpacing = ' ', // propertyQuotes = null, separatorForSingleObjectField = false, stringQuotes = 'single', @@ -221,7 +232,177 @@ export default iterateJsdoc(({ traverse(parsedType, (nde) => { let errorMessage = ''; + /** + * @param {Partial & { + * postNewSpacing?: string, + * postMethodNameSpacing?: string + * }} meta + * @returns {Required & { + * postNewSpacing?: string, + * postMethodNameSpacing?: string + * }} + */ + const conditionalAdds = (meta) => { + const typNode = + /** + * @type {import('jsdoc-type-pratt-parser').FunctionResult| + * import('jsdoc-type-pratt-parser').CallSignatureResult| + * import('jsdoc-type-pratt-parser').ComputedMethodResult| + * import('jsdoc-type-pratt-parser').ConstructorSignatureResult| + * import('jsdoc-type-pratt-parser').MethodSignatureResult + * } + */ (nde); + + /** + * @type {Required & { + * postNewSpacing?: string, + * postMethodNameSpacing?: string + * }} + */ + const newMeta = { + parameterSpacing: meta.parameterSpacing ?? typNode.meta?.parameterSpacing ?? ' ', + postGenericSpacing: meta.postGenericSpacing ?? typNode.meta?.postGenericSpacing ?? '', + postReturnMarkerSpacing: meta.postReturnMarkerSpacing ?? typNode.meta?.postReturnMarkerSpacing ?? ' ', + preReturnMarkerSpacing: meta.preReturnMarkerSpacing ?? typNode.meta?.preReturnMarkerSpacing ?? '', + typeParameterSpacing: meta.typeParameterSpacing ?? typNode.meta?.typeParameterSpacing ?? ' ', + }; + + if (typNode.type === 'JsdocTypeConstructorSignature') { + newMeta.postNewSpacing = meta.postNewSpacing; + } + + if (typNode.type === 'JsdocTypeMethodSignature') { + newMeta.postMethodNameSpacing = meta.postMethodNameSpacing ?? typNode.meta?.postMethodNameSpacing ?? ''; + } + + return newMeta; + }; + switch (nde.type) { + case 'JsdocTypeConstructorSignature': { + const typeNode = /** @type {import('jsdoc-type-pratt-parser').ConstructorSignatureResult} */ (nde); + /* c8 ignore next -- Guard */ + if ((typeNode.meta?.postNewSpacing ?? ' ') !== postNewSpacing) { + typeNode.meta = + /** + * @type {Required & { + * postNewSpacing: string, + * }} + */ (conditionalAdds({ + postNewSpacing, + })); + errorMessage = `Post-\`new\` spacing should be "${postNewSpacing}"`; + break; + } + } + + case 'JsdocTypeFunction': { + const typeNode = + /** + * @type {import('jsdoc-type-pratt-parser').FunctionResult} + */ nde; + if ('arrow' in typeNode && typeNode.arrow) { + /* c8 ignore next -- Guard */ + if ((typeNode.meta?.postReturnMarkerSpacing ?? ' ') !== arrowFunctionPostReturnMarkerSpacing) { + typeNode.meta = + /** + * @type {Required & { + * postNewSpacing: string, + * }} + */ (conditionalAdds({ + postReturnMarkerSpacing: arrowFunctionPostReturnMarkerSpacing, + /* c8 ignore next -- Guard */ + preReturnMarkerSpacing: typeNode.meta?.preReturnMarkerSpacing ?? ' ', + })); + errorMessage = `Post-return-marker spacing should be "${arrowFunctionPostReturnMarkerSpacing}"`; + break; + /* c8 ignore next -- Guard */ + } else if ((typeNode.meta?.preReturnMarkerSpacing ?? ' ') !== arrowFunctionPreReturnMarkerSpacing) { + typeNode.meta = + /** + * @type {Required & { + * postNewSpacing: string, + * }} + */ (conditionalAdds({ + /* c8 ignore next -- Guard */ + postReturnMarkerSpacing: typeNode.meta?.postReturnMarkerSpacing ?? ' ', + preReturnMarkerSpacing: arrowFunctionPreReturnMarkerSpacing, + })); + errorMessage = `Pre-return-marker spacing should be "${arrowFunctionPreReturnMarkerSpacing}"`; + break; + } + + break; + } + } + + case 'JsdocTypeCallSignature': + case 'JsdocTypeComputedMethod': + case 'JsdocTypeMethodSignature': { + const typeNode = + /** + * @type {import('jsdoc-type-pratt-parser').FunctionResult| + * import('jsdoc-type-pratt-parser').CallSignatureResult| + * import('jsdoc-type-pratt-parser').ComputedMethodResult| + * import('jsdoc-type-pratt-parser').ConstructorSignatureResult| + * import('jsdoc-type-pratt-parser').MethodSignatureResult + * } + */ (nde); + if (typeNode.type === 'JsdocTypeMethodSignature' && + (typeNode.meta?.postMethodNameSpacing ?? '') !== postMethodNameSpacing + ) { + typeNode.meta = { + quote: typeNode.meta.quote, + ...conditionalAdds({ + postMethodNameSpacing, + }), + }; + errorMessage = `Post-method-name spacing should be "${postMethodNameSpacing}"`; + break; + } else if (typeNode.type === 'JsdocTypeMethodSignature' && + typeNode.meta.quote !== undefined && + typeNode.meta.quote !== methodQuotes + ) { + typeNode.meta = { + ...conditionalAdds({ + postMethodNameSpacing: typeNode.meta.postMethodNameSpacing ?? '', + }), + quote: methodQuotes, + }; + errorMessage = `Method quoting style should be "${methodQuotes}"`; + break; + } + + if ((typeNode.meta?.parameterSpacing ?? ' ') !== functionOrClassParameterSpacing) { + typeNode.meta = conditionalAdds({ + parameterSpacing: functionOrClassParameterSpacing, + }); + errorMessage = `Parameter spacing should be "${functionOrClassParameterSpacing}"`; + } else if ((typeNode.meta?.postGenericSpacing ?? '') !== functionOrClassPostGenericSpacing) { + typeNode.meta = conditionalAdds({ + postGenericSpacing: functionOrClassPostGenericSpacing, + }); + errorMessage = `Post-generic spacing should be "${functionOrClassPostGenericSpacing}"`; + } else if ((typeNode.meta?.postReturnMarkerSpacing ?? ' ') !== functionOrClassPostReturnMarkerSpacing) { + typeNode.meta = conditionalAdds({ + postReturnMarkerSpacing: functionOrClassPostReturnMarkerSpacing, + }); + errorMessage = `Post-return-marker spacing should be "${functionOrClassPostReturnMarkerSpacing}"`; + } else if ((typeNode.meta?.preReturnMarkerSpacing ?? '') !== functionOrClassPreReturnMarkerSpacing) { + typeNode.meta = conditionalAdds({ + preReturnMarkerSpacing: functionOrClassPreReturnMarkerSpacing, + }); + errorMessage = `Pre-return-marker spacing should be "${functionOrClassPreReturnMarkerSpacing}"`; + } else if ((typeNode.meta?.typeParameterSpacing ?? ' ') !== functionOrClassTypeParameterSpacing) { + typeNode.meta = conditionalAdds({ + typeParameterSpacing: functionOrClassTypeParameterSpacing, + }); + errorMessage = `Type parameter spacing should be "${functionOrClassTypeParameterSpacing}"`; + } + + break; + } + case 'JsdocTypeGeneric': { const typeNode = /** @type {import('jsdoc-type-pratt-parser').GenericResult} */ (nde); if ('value' in typeNode.left && typeNode.left.value === 'Array') { @@ -242,32 +423,42 @@ export default iterateJsdoc(({ case 'JsdocTypeKeyValue': { const typeNode = /** @type {import('jsdoc-type-pratt-parser').KeyValueResult} */ (nde); + /* c8 ignore next -- Guard */ if ((typeNode.meta?.postKeySpacing ?? '') !== keyValuePostKeySpacing) { typeNode.meta = { + /* c8 ignore next -- Guard */ postColonSpacing: typeNode.meta?.postColonSpacing ?? ' ', postKeySpacing: keyValuePostKeySpacing, + /* c8 ignore next 2 -- Guard */ postOptionalSpacing: typeNode.meta?.postOptionalSpacing ?? '', postVariadicSpacing: typeNode.meta?.postVariadicSpacing ?? '', }; errorMessage = `Post key spacing should be "${keyValuePostKeySpacing}"`; + /* c8 ignore next -- Guard */ } else if ((typeNode.meta?.postColonSpacing ?? ' ') !== keyValuePostColonSpacing) { typeNode.meta = { postColonSpacing: keyValuePostColonSpacing, + /* c8 ignore next 3 -- Guard */ postKeySpacing: typeNode.meta?.postKeySpacing ?? '', postOptionalSpacing: typeNode.meta?.postOptionalSpacing ?? '', postVariadicSpacing: typeNode.meta?.postVariadicSpacing ?? '', }; errorMessage = `Post colon spacing should be "${keyValuePostColonSpacing}"`; + /* c8 ignore next -- Guard */ } else if ((typeNode.meta?.postOptionalSpacing ?? '') !== keyValuePostOptionalSpacing) { typeNode.meta = { + /* c8 ignore next 2 -- Guard */ postColonSpacing: typeNode.meta?.postColonSpacing ?? ' ', postKeySpacing: typeNode.meta?.postKeySpacing ?? '', postOptionalSpacing: keyValuePostOptionalSpacing, + /* c8 ignore next -- Guard */ postVariadicSpacing: typeNode.meta?.postVariadicSpacing ?? '', }; errorMessage = `Post optional (\`?\`) spacing should be "${keyValuePostOptionalSpacing}"`; - } else if ((typeNode.meta?.postVariadicSpacing ?? '') !== keyValuePostVariadicSpacing) { + /* c8 ignore next -- Guard */ + } else if (typeNode.variadic && (typeNode.meta?.postVariadicSpacing ?? '') !== keyValuePostVariadicSpacing) { typeNode.meta = { + /* c8 ignore next 3 -- Guard */ postColonSpacing: typeNode.meta?.postColonSpacing ?? ' ', postKeySpacing: typeNode.meta?.postKeySpacing ?? '', postOptionalSpacing: typeNode.meta?.postOptionalSpacing ?? '', @@ -361,6 +552,7 @@ export default iterateJsdoc(({ case 'JsdocTypeTuple': { const typeNode = /** @type {import('jsdoc-type-pratt-parser').TupleResult} */ (nde); + /* c8 ignore next -- Guard */ if ((typeNode.meta?.elementSpacing ?? ' ') !== genericAndTupleElementSpacing) { typeNode.meta = { elementSpacing: genericAndTupleElementSpacing, @@ -373,6 +565,7 @@ export default iterateJsdoc(({ case 'JsdocTypeTypeParameter': { const typeNode = /** @type {import('jsdoc-type-pratt-parser').TypeParameterResult} */ (nde); + /* c8 ignore next -- Guard */ if (typeNode.defaultValue && (typeNode.meta?.defaultValueSpacing ?? ' ') !== parameterDefaultValueSpacing) { typeNode.meta = { defaultValueSpacing: parameterDefaultValueSpacing, @@ -458,12 +651,40 @@ export default iterateJsdoc(({ ], type: 'string', }, + arrowFunctionPostReturnMarkerSpacing: { + description: 'The space character (if any) to use after return markers (`=>`). Defaults to " ".', + type: 'string', + }, + arrowFunctionPreReturnMarkerSpacing: { + description: 'The space character (if any) to use before return markers (`=>`). Defaults to " ".', + type: 'string', + }, enableFixer: { description: 'Whether to enable the fixer. Defaults to `true`.', type: 'boolean', }, + functionOrClassParameterSpacing: { + description: 'The space character (if any) to use between function or class parameters. Defaults to " ".', + type: 'string', + }, + functionOrClassPostGenericSpacing: { + description: 'The space character (if any) to use after a generic expression in a function or class. Defaults to "".', + type: 'string', + }, + functionOrClassPostReturnMarkerSpacing: { + description: 'The space character (if any) to use after return markers (`:`). Defaults to "".', + type: 'string', + }, + functionOrClassPreReturnMarkerSpacing: { + description: 'The space character (if any) to use before return markers (`:`). Defaults to "".', + type: 'string', + }, + functionOrClassTypeParameterSpacing: { + description: 'The space character (if any) to use between type parameters in a function or class. Defaults to " ".', + type: 'string', + }, genericAndTupleElementSpacing: { - description: 'The space character (if any) to use between elements in generics and tuples', + description: 'The space character (if any) to use between elements in generics and tuples. Defaults to " ".', type: 'string', }, genericDot: { @@ -471,19 +692,27 @@ export default iterateJsdoc(({ type: 'boolean', }, keyValuePostColonSpacing: { - description: 'The amount of spacing (if any) after the colon of a key-value or object-field pair', + description: 'The amount of spacing (if any) after the colon of a key-value or object-field pair. Defaults to " ".', type: 'string', }, keyValuePostKeySpacing: { - description: 'The amount of spacing (if any) immediately after keys in a key-value or object-field pair', + description: 'The amount of spacing (if any) immediately after keys in a key-value or object-field pair. Defaults to "".', type: 'string', }, keyValuePostOptionalSpacing: { - description: 'The amount of spacing (if any) after the optional operator (`?`) in a key-value or object-field pair', + description: 'The amount of spacing (if any) after the optional operator (`?`) in a key-value or object-field pair. Defaults to "".', type: 'string', }, keyValuePostVariadicSpacing: { - description: 'The amount of spacing (if any) after a variadic operator (`...`) in a key-value pair', + description: 'The amount of spacing (if any) after a variadic operator (`...`) in a key-value pair. Defaults to "".', + type: 'string', + }, + methodQuotes: { + description: 'The style of quotation mark for surrounding method names when quoted. Defaults to `double`', + enum: [ + 'double', + 'single', + ], type: 'string', }, objectFieldIndent: { @@ -533,7 +762,15 @@ Defaults to \`false\`.`, type: 'boolean', }, parameterDefaultValueSpacing: { - description: 'The space character (if any) to use between the equal signs of a default value', + description: 'The space character (if any) to use between the equal signs of a default value. Defaults to " ".', + type: 'string', + }, + postMethodNameSpacing: { + description: 'The space character (if any) to add after a method name. Defaults to "".', + type: 'string', + }, + postNewSpacing: { + description: 'The space character (if any) to add after "new" in a constructor. Defaults to " ".', type: 'string', }, // propertyQuotes: { diff --git a/test/rules/assertions/typeFormatting.js b/test/rules/assertions/typeFormatting.js index d95680d43..adb7562fa 100644 --- a/test/rules/assertions/typeFormatting.js +++ b/test/rules/assertions/typeFormatting.js @@ -917,6 +917,259 @@ export default { */ `, }, + { + code: ` + /** + * @param {() => void} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Post-return-marker spacing should be ""', + }, + ], + options: [ + { + arrowFunctionPostReturnMarkerSpacing: '', + }, + ], + output: ` + /** + * @param {() =>void} cfg + */ + `, + }, + { + code: ` + /** + * @param {() => void} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Pre-return-marker spacing should be ""', + }, + ], + options: [ + { + arrowFunctionPreReturnMarkerSpacing: '', + }, + ], + output: ` + /** + * @param {()=> void} cfg + */ + `, + }, + { + code: ` + /** + * @param {{hello(): void}} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Post-method-name spacing should be " "', + }, + ], + options: [ + { + postMethodNameSpacing: ' ', + }, + ], + output: ` + /** + * @param {{hello (): void}} cfg + */ + `, + }, + { + code: ` + /** + * @param {{new (): void}} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Post-`new` spacing should be ""', + }, + ], + options: [ + { + postNewSpacing: '', + }, + ], + output: ` + /** + * @param {{new(): void}} cfg + */ + `, + }, + { + code: ` + /** + * @param {function(): void} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Pre-return-marker spacing should be " "', + }, + ], + options: [ + { + functionOrClassPreReturnMarkerSpacing: ' ', + }, + ], + output: ` + /** + * @param {function() : void} cfg + */ + `, + }, + { + code: ` + /** + * @param {{new (): void}} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Post-return-marker spacing should be ""', + }, + ], + options: [ + { + functionOrClassPostReturnMarkerSpacing: '', + }, + ], + output: ` + /** + * @param {{new ():void}} cfg + */ + `, + }, + { + code: ` + /** + * @param {{method(a: string, b: number): void}} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Parameter spacing should be ""', + }, + ], + options: [ + { + functionOrClassParameterSpacing: '', + }, + ], + output: ` + /** + * @param {{method(a: string,b: number): void}} cfg + */ + `, + }, + { + code: ` + /** + * @param {{method(a: T, b: number): void}} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Post-generic spacing should be " "', + }, + ], + options: [ + { + functionOrClassPostGenericSpacing: ' ', + }, + ], + output: ` + /** + * @param {{method (a: T, b: number): void}} cfg + */ + `, + }, + { + code: ` + /** + * @param {{method(a: T, b: U): void}} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Type parameter spacing should be ""', + }, + ], + options: [ + { + functionOrClassTypeParameterSpacing: '', + }, + ], + output: ` + /** + * @param {{method(a: T, b: U): void}} cfg + */ + `, + }, + { + code: ` + /** + * @param {{'some-method'(a: string, b: number): void}} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Method quoting style should be "double"', + }, + ], + options: [ + { + methodQuotes: 'double', + }, + ], + output: ` + /** + * @param {{"some-method"(a: string, b: number): void}} cfg + */ + `, + }, + { + code: ` + /** + * @param {[a: string, ...b: number]} cfg + */ + `, + errors: [ + { + line: 3, + message: 'Post variadic (`...`) spacing should be " "', + }, + ], + options: [ + { + keyValuePostVariadicSpacing: ' ', + }, + ], + output: ` + /** + * @param {[a: string, ... b: number]} cfg + */ + `, + }, ], valid: [ { @@ -1110,6 +1363,18 @@ export default { }, ], }, + { + code: ` + /** + * @param {SomeType} cfg + */ + `, + options: [ + { + genericAndTupleElementSpacing: ' ', + }, + ], + }, { code: ` /** @@ -1206,5 +1471,137 @@ export default { }, ], }, + { + code: ` + /** + * @param {() =>void} cfg + */ + `, + options: [ + { + arrowFunctionPostReturnMarkerSpacing: '', + }, + ], + }, + { + code: ` + /** + * @param {()=> void} cfg + */ + `, + options: [ + { + arrowFunctionPreReturnMarkerSpacing: '', + }, + ], + }, + { + code: ` + /** + * @param {{hello (): void}} cfg + */ + `, + options: [ + { + postMethodNameSpacing: ' ', + }, + ], + }, + { + code: ` + /** + * @param {{new(): void}} cfg + */ + `, + options: [ + { + postNewSpacing: '', + }, + ], + }, + { + code: ` + /** + * @param {{new (): void}} cfg + */ + `, + options: [ + { + postNewSpacing: ' ', + }, + ], + }, + { + code: ` + /** + * @param {function() : void} cfg + */ + `, + options: [ + { + functionOrClassPreReturnMarkerSpacing: ' ', + }, + ], + }, + { + code: ` + /** + * @param {{new ():void}} cfg + */ + `, + options: [ + { + functionOrClassPostReturnMarkerSpacing: '', + }, + ], + }, + { + code: ` + /** + * @param {{method(a: string,b: number): void}} cfg + */ + `, + options: [ + { + functionOrClassParameterSpacing: '', + }, + ], + }, + { + code: ` + /** + * @param {{method (a: T, b: number): void}} cfg + */ + `, + options: [ + { + functionOrClassPostGenericSpacing: ' ', + }, + ], + }, + { + code: ` + /** + * @param {{method(a: T, b: U): void}} cfg + */ + `, + options: [ + { + functionOrClassTypeParameterSpacing: '', + }, + ], + }, + { + code: ` + /** + * @param {{"some-method"(a: string, b: number): void}} cfg + */ + `, + options: [ + { + methodQuotes: 'double', + }, + ], + }, ], }; From 0837647b0ac27cd8535305526c5824d858870fc5 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 7 Oct 2025 18:09:47 -0700 Subject: [PATCH 145/189] feat(`type-formatting`): change `stringQuotes` default to `double`; fixes #1556 BREAKING CHANGE: Set `stringQuotes` option to `single` to restore old behavior --- docs/rules/type-formatting.md | 2 +- src/rules.d.ts | 2 +- src/rules/typeFormatting.js | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/rules/type-formatting.md b/docs/rules/type-formatting.md index 63ce47bfe..fe0a6a3fa 100644 --- a/docs/rules/type-formatting.md +++ b/docs/rules/type-formatting.md @@ -187,7 +187,7 @@ is only one property-value object field present. Defaults to `false`. ### stringQuotes How string literals should be quoted (e.g., `"abc"`). Set to `single` -or `double`. Defaults to 'single'. +or `double`. Defaults to 'double'. diff --git a/src/rules.d.ts b/src/rules.d.ts index d7cf7616b..c008a7242 100644 --- a/src/rules.d.ts +++ b/src/rules.d.ts @@ -3061,7 +3061,7 @@ export interface Rules { separatorForSingleObjectField?: boolean; /** * How string literals should be quoted (e.g., `"abc"`). Set to `single` - * or `double`. Defaults to 'single'. + * or `double`. Defaults to 'double'. */ stringQuotes?: "double" | "single"; /** diff --git a/src/rules/typeFormatting.js b/src/rules/typeFormatting.js index e9fd95ab3..cfd15e198 100644 --- a/src/rules/typeFormatting.js +++ b/src/rules/typeFormatting.js @@ -43,7 +43,7 @@ export default iterateJsdoc(({ postNewSpacing = ' ', // propertyQuotes = null, separatorForSingleObjectField = false, - stringQuotes = 'single', + stringQuotes = 'double', typeBracketSpacing = '', unionSpacing = ' ', } = context.options[0] || {}; @@ -790,7 +790,7 @@ is only one property-value object field present. Defaults to \`false\`.`, }, stringQuotes: { description: `How string literals should be quoted (e.g., \`"abc"\`). Set to \`single\` -or \`double\`. Defaults to 'single'.`, +or \`double\`. Defaults to 'double'.`, enum: [ 'double', 'single', From 38770c42d0638de4367640be9c9680172ff90f46 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Wed, 8 Oct 2025 09:41:27 -0700 Subject: [PATCH 146/189] fix(`require-yields-*`, `require-throws-*`): ensure alias of throws (exception) and of yields (yield) are checked; fixes #1559 (#1560) --- docs/rules/require-yields-type.md | 5 +++++ src/index-cjs.js | 8 ++++---- src/index.js | 8 ++++---- test/rules/assertions/requireYieldsType.js | 13 +++++++++++++ 4 files changed, 26 insertions(+), 8 deletions(-) diff --git a/docs/rules/require-yields-type.md b/docs/rules/require-yields-type.md index 56b1a866a..2a879eae4 100644 --- a/docs/rules/require-yields-type.md +++ b/docs/rules/require-yields-type.md @@ -23,6 +23,11 @@ The following patterns are considered problems: * @yields */ // Message: @yields should have a type + +/** + * @yield + */ +// Message: @yields should have a type ```` diff --git a/src/index-cjs.js b/src/index-cjs.js index 752fb60ec..3fdfb667e 100644 --- a/src/index-cjs.js +++ b/src/index-cjs.js @@ -205,7 +205,7 @@ index.rules = { 'require-throws-description': buildForbidRuleDefinition({ contexts: [ { - comment: 'JsdocBlock:has(JsdocTag[tag=throws]:not([description!=""]))', + comment: 'JsdocBlock:has(JsdocTag[tag=/^(?:throws|exception)$/]:not([description!=""]))', context: 'any', message: '@throws should have a description', }, @@ -216,7 +216,7 @@ index.rules = { 'require-throws-type': buildForbidRuleDefinition({ contexts: [ { - comment: 'JsdocBlock:has(JsdocTag[tag=throws]:not([parsedType.type]))', + comment: 'JsdocBlock:has(JsdocTag[tag=/^(?:throws|exception)$/]:not([parsedType.type]))', context: 'any', message: '@throws should have a type', }, @@ -229,7 +229,7 @@ index.rules = { 'require-yields-description': buildForbidRuleDefinition({ contexts: [ { - comment: 'JsdocBlock:has(JsdocTag[tag=yields]:not([name!=""]):not([description!=""]))', + comment: 'JsdocBlock:has(JsdocTag[tag=/^yields?$/]:not([name!=""]):not([description!=""]))', context: 'any', message: '@yields should have a description', }, @@ -240,7 +240,7 @@ index.rules = { 'require-yields-type': buildForbidRuleDefinition({ contexts: [ { - comment: 'JsdocBlock:has(JsdocTag[tag=yields]:not([parsedType.type]))', + comment: 'JsdocBlock:has(JsdocTag[tag=/^yields?$/]:not([parsedType.type]))', context: 'any', message: '@yields should have a type', }, diff --git a/src/index.js b/src/index.js index 7b6659868..96abaa8e1 100644 --- a/src/index.js +++ b/src/index.js @@ -211,7 +211,7 @@ index.rules = { 'require-throws-description': buildForbidRuleDefinition({ contexts: [ { - comment: 'JsdocBlock:has(JsdocTag[tag=throws]:not([description!=""]))', + comment: 'JsdocBlock:has(JsdocTag[tag=/^(?:throws|exception)$/]:not([description!=""]))', context: 'any', message: '@throws should have a description', }, @@ -222,7 +222,7 @@ index.rules = { 'require-throws-type': buildForbidRuleDefinition({ contexts: [ { - comment: 'JsdocBlock:has(JsdocTag[tag=throws]:not([parsedType.type]))', + comment: 'JsdocBlock:has(JsdocTag[tag=/^(?:throws|exception)$/]:not([parsedType.type]))', context: 'any', message: '@throws should have a type', }, @@ -235,7 +235,7 @@ index.rules = { 'require-yields-description': buildForbidRuleDefinition({ contexts: [ { - comment: 'JsdocBlock:has(JsdocTag[tag=yields]:not([name!=""]):not([description!=""]))', + comment: 'JsdocBlock:has(JsdocTag[tag=/^yields?$/]:not([name!=""]):not([description!=""]))', context: 'any', message: '@yields should have a description', }, @@ -246,7 +246,7 @@ index.rules = { 'require-yields-type': buildForbidRuleDefinition({ contexts: [ { - comment: 'JsdocBlock:has(JsdocTag[tag=yields]:not([parsedType.type]))', + comment: 'JsdocBlock:has(JsdocTag[tag=/^yields?$/]:not([parsedType.type]))', context: 'any', message: '@yields should have a type', }, diff --git a/test/rules/assertions/requireYieldsType.js b/test/rules/assertions/requireYieldsType.js index 60f80df76..cc1cb9d6a 100644 --- a/test/rules/assertions/requireYieldsType.js +++ b/test/rules/assertions/requireYieldsType.js @@ -13,6 +13,19 @@ export default { }, ], }, + { + code: ` + /** + * @yield + */ + `, + errors: [ + { + line: 2, + message: '@yields should have a type', + }, + ], + }, ], valid: [ { From 92bf39eb25a8008277f4d7a51673deefd774cb4c Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 7 Oct 2025 21:45:55 -0700 Subject: [PATCH 147/189] feat(`ts-method-signature-style`): add new rule --- .README/README.md | 1 + .README/rules/ts-method-signature-style.md | 26 ++ README.md | 2 + docs/rules/ts-method-signature-style.md | 163 ++++++++++ package.json | 4 +- pnpm-lock.yaml | 22 +- src/index-cjs.js | 3 + src/index.js | 3 + src/jsdocUtils.js | 181 +++++++++++ src/rules.d.ts | 14 + src/rules/tsMethodSignatureStyle.js | 300 +++++++++++++++++ src/rules/typeFormatting.js | 154 +-------- .../assertions/tsMethodSignatureStyle.js | 307 ++++++++++++++++++ test/rules/ruleNames.json | 1 + 14 files changed, 1018 insertions(+), 163 deletions(-) create mode 100644 .README/rules/ts-method-signature-style.md create mode 100644 docs/rules/ts-method-signature-style.md create mode 100644 src/rules/tsMethodSignatureStyle.js create mode 100644 test/rules/assertions/tsMethodSignatureStyle.js diff --git a/.README/README.md b/.README/README.md index 5322cae4b..2fdf33a30 100644 --- a/.README/README.md +++ b/.README/README.md @@ -278,6 +278,7 @@ Finally, enable all of the rules that you would like to use. "jsdoc/sort-tags": 1, "jsdoc/tag-lines": 1, // Recommended "jsdoc/text-escaping": 1, + "jsdoc/ts-method-signature-style": 1, "jsdoc/type-formatting": 1, "jsdoc/valid-types": 1 // Recommended } diff --git a/.README/rules/ts-method-signature-style.md b/.README/rules/ts-method-signature-style.md new file mode 100644 index 000000000..3b80fb4c4 --- /dev/null +++ b/.README/rules/ts-method-signature-style.md @@ -0,0 +1,26 @@ +# `ts-method-signature-style` + +Inspired by `typescript-eslint`'s [method-signature-style](https://typescript-eslint.io/rules/method-signature-style/) rule. + +See that rule for the rationale behind preferring the function +property. + +## Options + +{"gitdown": "options"} + +||| +|---|---| +|Context|everywhere| +|Tags|``| +|Recommended|false| +|Settings|| +|Options|string ("method", "property") followed by object with `enableFixer`| + +## Failing examples + + + +## Passing examples + + diff --git a/README.md b/README.md index 5d0c06dd4..5987bb618 100644 --- a/README.md +++ b/README.md @@ -305,6 +305,7 @@ Finally, enable all of the rules that you would like to use. "jsdoc/sort-tags": 1, "jsdoc/tag-lines": 1, // Recommended "jsdoc/text-escaping": 1, + "jsdoc/ts-method-signature-style": 1, "jsdoc/type-formatting": 1, "jsdoc/valid-types": 1 // Recommended } @@ -497,5 +498,6 @@ non-default-recommended fixer). ||:wrench:| [sort-tags](./docs/rules/sort-tags.md#readme) | Sorts tags by a specified sequence according to tag name, optionally adding line breaks between tag groups. | |:heavy_check_mark:|:wrench:| [tag-lines](./docs/rules/tag-lines.md#readme) | Enforces lines (or no lines) before, after, or between tags. | ||:wrench:| [text-escaping](./docs/rules/text-escaping.md#readme) | Auto-escape certain characters that are input within block and tag descriptions. | +||:wrench:| [ts-method-signature-style](./docs/rules/ts-method-signature-style.md#readme) | Prefers either function properties or method signatures | ||:wrench:| [type-formatting](./docs/rules/type-formatting.md#readme) | Formats JSDoc type values. | |:heavy_check_mark:|| [valid-types](./docs/rules/valid-types.md#readme) | Requires all types/namepaths to be valid JSDoc, Closure compiler, or TypeScript types (configurable in settings). | diff --git a/docs/rules/ts-method-signature-style.md b/docs/rules/ts-method-signature-style.md new file mode 100644 index 000000000..a01836ca2 --- /dev/null +++ b/docs/rules/ts-method-signature-style.md @@ -0,0 +1,163 @@ + + +# ts-method-signature-style + +Inspired by `typescript-eslint`'s [method-signature-style](https://typescript-eslint.io/rules/method-signature-style/) rule. + +See that rule for the rationale behind preferring the function +property. + + + +## Options + +The first option is a string with the following possible values: "method", "property". + + +The next option is an object with the following properties. + + + +### enableFixer + +Whether to enable the fixer. Defaults to `true`. + + +||| +|---|---| +|Context|everywhere| +|Tags|``| +|Recommended|false| +|Settings|| +|Options|string ("method", "property") followed by object with `enableFixer`| + + + +## Failing examples + +The following patterns are considered problems: + +````ts +/** + * @param {{ + * func(arg: string): number + * }} someName + */ +// "jsdoc/ts-method-signature-style": ["error"|"warn", "property"] +// Message: Found method signature; prefer function property. + +/** + * @param {{ + * func(arg: string): number + * }} someName + */ +// "jsdoc/ts-method-signature-style": ["error"|"warn", "property",{"enableFixer":false}] +// Message: Found method signature; prefer function property. + +/** + * @param {{ + * func(arg: number): void + * func(arg: string): void + * func(arg: boolean): void + * }} someName + */ +// Message: Found method signature; prefer function property. + +/** + * @param {{ + * func: (arg: string) => number + * }} someName + */ +// "jsdoc/ts-method-signature-style": ["error"|"warn", "method"] +// Message: Found function property; prefer method signature. + +/** + * @param {{ + * func: (arg: string) => number + * }} someName + */ +// "jsdoc/ts-method-signature-style": ["error"|"warn", "method",{"enableFixer":false}] +// Message: Found function property; prefer method signature. + +/** + * @type {{ + * func: ((arg: number) => void) & + * ((arg: string) => void) & + * ((arg: boolean) => void) + * }} + */ +// "jsdoc/ts-method-signature-style": ["error"|"warn", "method"] +// Message: Found function property; prefer method signature. + +/** + * @param {{ + * func: ((arg: number) => void) & + * ((arg: string) => void) & + * ((arg: boolean) => void) + * }} someName + */ +// "jsdoc/ts-method-signature-style": ["error"|"warn", "method",{"enableFixer":false}] +// Message: Found function property; prefer method signature. + +/** + * @param {{ + * "func"(arg: string): number + * }} someName + */ +// "jsdoc/ts-method-signature-style": ["error"|"warn", "property"] +// Message: Found method signature; prefer function property. + +/** + * @param {{ + * 'func': (arg: string) => number + * }} someName + */ +// "jsdoc/ts-method-signature-style": ["error"|"warn", "method"] +// Message: Found function property; prefer method signature. + +/** @type {{ + * func: ((arg: number) => void) & + * ((arg: string) => void) & + * ((arg: boolean) => void) + * }} + */ +// "jsdoc/ts-method-signature-style": ["error"|"warn", "method"] +// Message: Found function property; prefer method signature. +```` + + + + + +## Passing examples + +The following patterns are not considered problems: + +````ts +/** + * @param {{ + * func: (arg: string) => number + * }} + */ +// "jsdoc/ts-method-signature-style": ["error"|"warn", "property"] + +/** + * @param {{ + * func: ((arg: number) => void) & + * ((arg: string) => void) & + * ((arg: boolean) => void) + * }} + */ + +/** + * @param {abc<} + */ + +/** + * @param {{ + * func: ((arg: number) => void) & (SomeType) + * }} + */ +// "jsdoc/ts-method-signature-style": ["error"|"warn", "method"] +```` + diff --git a/package.json b/package.json index 3bf4ede2c..c7f326a58 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "url": "http://gajus.com" }, "dependencies": { - "@es-joy/jsdoccomment": "~0.75.0", + "@es-joy/jsdoccomment": "~0.76.0", "are-docs-informative": "^0.0.2", "comment-parser": "1.4.1", "debug": "^4.4.3", @@ -58,7 +58,7 @@ "glob": "^11.0.3", "globals": "^16.4.0", "husky": "^9.1.7", - "jsdoc-type-pratt-parser": "^6.9.1", + "jsdoc-type-pratt-parser": "^6.10.0", "json-schema": "^0.4.0", "json-schema-to-typescript": "^15.0.4", "lint-staged": "^16.2.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b8f7d3c01..82f4a4f0f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,8 +12,8 @@ importers: .: dependencies: '@es-joy/jsdoccomment': - specifier: ~0.75.0 - version: 0.75.0 + specifier: ~0.76.0 + version: 0.76.0 are-docs-informative: specifier: ^0.0.2 version: 0.0.2 @@ -163,8 +163,8 @@ importers: specifier: ^9.1.7 version: 9.1.7 jsdoc-type-pratt-parser: - specifier: ^6.9.1 - version: 6.9.1 + specifier: ^6.10.0 + version: 6.10.0 json-schema: specifier: ^0.4.0 version: 0.4.0 @@ -796,8 +796,8 @@ packages: resolution: {integrity: sha512-yWi6sm7INEwnfS7IJvE0dU+RTrwzLPFcY7e7eGpu/l5Q9lWfQ2ROwZ0qVnc242jw2TUPsfHX3XMIISkGBv57RQ==} engines: {node: '>=20.11.0'} - '@es-joy/jsdoccomment@0.75.0': - resolution: {integrity: sha512-Bj+oF8reFb4b+6LUmG6ETpDsBU/28y/bAAzioyIR4VK/V6UodYBNGbtxRyGxk0aJJQqpZZ6jz82vVZWCX6Mwmg==} + '@es-joy/jsdoccomment@0.76.0': + resolution: {integrity: sha512-g+RihtzFgGTx2WYCuTHbdOXJeAlGnROws0TeALx9ow/ZmOROOZkVg5wp/B44n0WJgI4SQFP1eWM2iRPlU2Y14w==} engines: {node: '>=20.11.0'} '@eslint-community/eslint-utils@4.9.0': @@ -3426,8 +3426,8 @@ packages: resolution: {integrity: sha512-TYzkACp/wPvDJLRY7qpHXtrhgwoAaojIOnLaaVNi+AbPU2u1kkjfKd9hXXTq0qSAGsyYXvwUXt99h9I5iCmjjw==} engines: {node: '>=12.0.0'} - jsdoc-type-pratt-parser@6.9.1: - resolution: {integrity: sha512-HbYNAorY51GnpKvgDf4YINSY+V1segv0qEeijvTSI6OWMCmqah0W6mVwBFeWskJ81uTJJVnDQlwhpJMREvGsXg==} + jsdoc-type-pratt-parser@6.10.0: + resolution: {integrity: sha512-+LexoTRyYui5iOhJGn13N9ZazL23nAHGkXsa1p/C8yeq79WRfLBag6ZZ0FQG2aRoc9yfo59JT9EYCQonOkHKkQ==} engines: {node: '>=20.0.0'} jsdom@6.5.1: @@ -5976,13 +5976,13 @@ snapshots: esquery: 1.6.0 jsdoc-type-pratt-parser: 5.9.2 - '@es-joy/jsdoccomment@0.75.0': + '@es-joy/jsdoccomment@0.76.0': dependencies: '@types/estree': 1.0.8 '@typescript-eslint/types': 8.46.0 comment-parser: 1.4.1 esquery: 1.6.0 - jsdoc-type-pratt-parser: 6.9.1 + jsdoc-type-pratt-parser: 6.10.0 '@eslint-community/eslint-utils@4.9.0(eslint@9.37.0(jiti@2.6.1))': dependencies: @@ -9092,7 +9092,7 @@ snapshots: jsdoc-type-pratt-parser@5.9.2: {} - jsdoc-type-pratt-parser@6.9.1: {} + jsdoc-type-pratt-parser@6.10.0: {} jsdom@6.5.1: dependencies: diff --git a/src/index-cjs.js b/src/index-cjs.js index 3fdfb667e..5ce187c9c 100644 --- a/src/index-cjs.js +++ b/src/index-cjs.js @@ -66,6 +66,7 @@ import requireYieldsCheck from './rules/requireYieldsCheck.js'; import sortTags from './rules/sortTags.js'; import tagLines from './rules/tagLines.js'; import textEscaping from './rules/textEscaping.js'; +import tsMethodSignatureStyle from './rules/tsMethodSignatureStyle.js'; import typeFormatting from './rules/typeFormatting.js'; import validTypes from './rules/validTypes.js'; @@ -251,6 +252,7 @@ index.rules = { 'sort-tags': sortTags, 'tag-lines': tagLines, 'text-escaping': textEscaping, + 'ts-method-signature-style': tsMethodSignatureStyle, 'type-formatting': typeFormatting, 'valid-types': validTypes, }; @@ -341,6 +343,7 @@ const createRecommendedRuleset = (warnOrError, flatName) => { 'jsdoc/sort-tags': 'off', 'jsdoc/tag-lines': warnOrError, 'jsdoc/text-escaping': 'off', + 'jsdoc/ts-method-signature-style': 'off', 'jsdoc/type-formatting': 'off', 'jsdoc/valid-types': warnOrError, }, diff --git a/src/index.js b/src/index.js index 96abaa8e1..b56c95adc 100644 --- a/src/index.js +++ b/src/index.js @@ -72,6 +72,7 @@ import requireYieldsCheck from './rules/requireYieldsCheck.js'; import sortTags from './rules/sortTags.js'; import tagLines from './rules/tagLines.js'; import textEscaping from './rules/textEscaping.js'; +import tsMethodSignatureStyle from './rules/tsMethodSignatureStyle.js'; import typeFormatting from './rules/typeFormatting.js'; import validTypes from './rules/validTypes.js'; @@ -257,6 +258,7 @@ index.rules = { 'sort-tags': sortTags, 'tag-lines': tagLines, 'text-escaping': textEscaping, + 'ts-method-signature-style': tsMethodSignatureStyle, 'type-formatting': typeFormatting, 'valid-types': validTypes, }; @@ -347,6 +349,7 @@ const createRecommendedRuleset = (warnOrError, flatName) => { 'jsdoc/sort-tags': 'off', 'jsdoc/tag-lines': warnOrError, 'jsdoc/text-escaping': 'off', + 'jsdoc/ts-method-signature-style': 'off', 'jsdoc/type-formatting': 'off', 'jsdoc/valid-types': warnOrError, }, diff --git a/src/jsdocUtils.js b/src/jsdocUtils.js index ba26ede3e..e7a21545d 100644 --- a/src/jsdocUtils.js +++ b/src/jsdocUtils.js @@ -6,6 +6,7 @@ import { } from './tagNames.js'; import WarnSettings from './WarnSettings.js'; import { + stringify, tryParse, } from '@es-joy/jsdoccomment'; @@ -1896,6 +1897,185 @@ const strictNativeTypes = [ 'RegExp', ]; +/** + * @param {import('@es-joy/jsdoccomment').JsdocBlockWithInline} jsdoc + * @param {import('@es-joy/jsdoccomment').JsdocTagWithInline} tag + * @param {import('jsdoc-type-pratt-parser').RootResult} parsedType + * @param {string} indent + * @param {string} typeBracketSpacing + */ +const rewireByParsedType = (jsdoc, tag, parsedType, indent, typeBracketSpacing = '') => { + const typeLines = stringify(parsedType).split('\n'); + const firstTypeLine = typeLines.shift(); + const lastTypeLine = typeLines.pop(); + + const beginNameOrDescIdx = tag.source.findIndex(({ + tokens, + }) => { + return tokens.name || tokens.description; + }); + + const nameAndDesc = beginNameOrDescIdx === -1 ? + null : + tag.source.slice(beginNameOrDescIdx); + + const initialNumber = tag.source[0].number; + + const src = [ + // Get inevitably present tag from first `tag.source` + { + number: initialNumber, + source: '', + tokens: { + ...tag.source[0].tokens, + ...(typeLines.length || lastTypeLine ? { + end: '', + name: '', + postName: '', + postType: '', + } : (nameAndDesc ? { + name: nameAndDesc[0].tokens.name, + postType: ' ', + } : {})), + type: '{' + typeBracketSpacing + firstTypeLine + (!typeLines.length && lastTypeLine === undefined ? typeBracketSpacing + '}' : ''), + }, + }, + // Get any intervening type lines + ...(typeLines.length ? typeLines.map((typeLine, idx) => { + return { + number: initialNumber + idx + 1, + source: '', + tokens: { + // Grab any delimiter info from first item + ...tag.source[0].tokens, + delimiter: tag.source[0].tokens.delimiter === '/**' ? '*' : tag.source[0].tokens.delimiter, + end: '', + name: '', + postName: '', + postTag: '', + postType: '', + start: indent + ' ', + tag: '', + type: typeLine, + }, + }; + }) : []), + ]; + + // Merge any final type line and name and description + if ( + // Name and description may be already included if present with the tag + nameAndDesc && beginNameOrDescIdx > 0 + ) { + if (typeLines.length || lastTypeLine !== undefined) { + src.push({ + number: src.length + 1, + source: '', + tokens: { + ...nameAndDesc[0].tokens, + type: lastTypeLine + typeBracketSpacing + '}', + }, + }); + } + + if ( + // Get any remaining description lines + nameAndDesc.length > 1 + ) { + src.push( + ...nameAndDesc.slice(1).map(({ + source, + tokens, + }, idx) => { + return { + number: src.length + idx + 2, + source, + tokens, + }; + }), + ); + } + } else if (nameAndDesc) { + if ((typeLines.length || lastTypeLine !== undefined) && lastTypeLine) { + src.push({ + number: src.length + 1, + source: '', + tokens: { + ...nameAndDesc[0].tokens, + delimiter: nameAndDesc[0].tokens.delimiter === '/**' ? '*' : nameAndDesc[0].tokens.delimiter, + postTag: '', + start: indent + ' ', + tag: '', + type: lastTypeLine + typeBracketSpacing + '}', + }, + }); + } + + if ( + // Get any remaining description lines + nameAndDesc.length > 1 + ) { + src.push( + ...nameAndDesc.slice(1).map(({ + source, + tokens, + }, idx) => { + return { + number: src.length + idx + 2, + source, + tokens, + }; + }), + ); + } + } else if (lastTypeLine) { + src.push({ + number: src.length + 1, + source: '', + tokens: { + ...tag.source[0].tokens, + delimiter: tag.source[0].tokens.delimiter === '/**' ? '*' : tag.source[0].tokens.delimiter, + postTag: '', + start: indent + ' ', + tag: '', + type: lastTypeLine + typeBracketSpacing + '}', + }, + }); + } + + tag.source = src; + + // Properly rewire `jsdoc.source` + const firstTagIdx = jsdoc.source.findIndex(({ + tokens: { + tag: tg, + }, + }) => { + return tg; + }); + + const initialEndSource = jsdoc.source.find(({ + tokens: { + end, + }, + }) => { + return end; + }); + + jsdoc.source = [ + ...jsdoc.source.slice(0, firstTagIdx), + ...jsdoc.tags.flatMap(({ + source, + }) => { + return source; + }), + ]; + + if (initialEndSource && !jsdoc.source.at(-1)?.tokens?.end) { + jsdoc.source.push(initialEndSource); + } +}; + export { comparePaths, dropPathSegmentQuotes, @@ -1935,6 +2115,7 @@ export { overrideTagStructure, parseClosureTemplateTag, pathDoesNotBeginWith, + rewireByParsedType, setTagStructure, strictNativeTypes, tagMightHaveEitherTypeOrNamePosition, diff --git a/src/rules.d.ts b/src/rules.d.ts index c008a7242..cc61ff63c 100644 --- a/src/rules.d.ts +++ b/src/rules.d.ts @@ -2938,6 +2938,20 @@ export interface Rules { } ]; + /** Prefers either function properties or method signatures */ + "jsdoc/ts-method-signature-style": + | [] + | ["method" | "property"] + | [ + "method" | "property", + { + /** + * Whether to enable the fixer. Defaults to `true`. + */ + enableFixer?: boolean; + } + ]; + /** Formats JSDoc type values. */ "jsdoc/type-formatting": | [] diff --git a/src/rules/tsMethodSignatureStyle.js b/src/rules/tsMethodSignatureStyle.js new file mode 100644 index 000000000..63823da62 --- /dev/null +++ b/src/rules/tsMethodSignatureStyle.js @@ -0,0 +1,300 @@ +import iterateJsdoc from '../iterateJsdoc.js'; +import { + rewireByParsedType, +} from '../jsdocUtils.js'; +import { + parse as parseType, + traverse, +} from '@es-joy/jsdoccomment'; + +export default iterateJsdoc(({ + context, + indent, + jsdoc, + utils, +}) => { + const functionType = context.options[0] ?? 'property'; + const { + enableFixer = true, + } = context.options[1] ?? {}; + + /** + * @param {import('@es-joy/jsdoccomment').JsdocTagWithInline} tag + */ + const checkType = (tag) => { + const potentialType = tag.type; + let parsedType; + try { + parsedType = parseType( + /** @type {string} */ (potentialType), 'typescript', + ); + } catch { + return; + } + + traverse(parsedType, (nde, parentNode) => { + // @ts-expect-error Adding our own property for use below + nde.parentNode = parentNode; + }); + + traverse(parsedType, (nde, parentNode, property, idx) => { + switch (nde.type) { + case 'JsdocTypeFunction': { + if (functionType !== 'method') { + break; + } + + if (parentNode?.type === 'JsdocTypeObjectField' && + typeof parentNode.key === 'string' + ) { + utils.reportJSDoc( + 'Found function property; prefer method signature.', + tag, + enableFixer ? () => { + const objectField = parentNode; + const obj = + /** + * @type {import('jsdoc-type-pratt-parser').ObjectFieldResult & { + * parentNode: import('jsdoc-type-pratt-parser').ObjectResult + * }} + */ + (objectField).parentNode; + + const index = obj.elements.indexOf(parentNode); + + obj.elements[index] = { + /* c8 ignore next 5 -- Guard */ + meta: nde.meta ? + { + quote: objectField.meta.quote, + ...nde.meta, + } : + { + quote: objectField.meta.quote, + }, + name: /** @type {string} */ (objectField.key), + parameters: nde.parameters, + returnType: /** @type {import('jsdoc-type-pratt-parser').RootResult} */ ( + nde.returnType + ), + type: 'JsdocTypeMethodSignature', + typeParameters: nde.typeParameters, + }; + + rewireByParsedType(jsdoc, tag, parsedType, indent); + } : null, + ); + break; + } + + if (parentNode?.type === 'JsdocTypeParenthesis' && + // @ts-expect-error Our own added API + parentNode.parentNode?.type === 'JsdocTypeIntersection' && + // @ts-expect-error Our own added API + parentNode.parentNode.parentNode.type === 'JsdocTypeObjectField' && + // @ts-expect-error Our own added API + typeof parentNode.parentNode.parentNode.key === 'string' + ) { + // @ts-expect-error Our own added API + const intersection = parentNode.parentNode; + const objectField = intersection.parentNode; + const object = objectField.parentNode; + // const objFieldIndex = object.elements.indexOf(objectField); + + /** + * @param {import('jsdoc-type-pratt-parser').FunctionResult} func + */ + const convertToMethod = (func) => { + return /** @type {import('jsdoc-type-pratt-parser').MethodSignatureResult} */ ({ + /* c8 ignore next 5 -- Guard */ + meta: func.meta ? + { + quote: objectField.meta.quote, + ...func.meta, + } : + { + quote: objectField.meta.quote, + }, + name: /** @type {string} */ (objectField.key), + parameters: func.parameters, + returnType: /** @type {import('jsdoc-type-pratt-parser').RootResult} */ ( + func.returnType + ), + type: 'JsdocTypeMethodSignature', + typeParameters: func.typeParameters, + }); + }; + + /** @type {import('jsdoc-type-pratt-parser').MethodSignatureResult[]} */ + const methods = []; + /** @type {number[]} */ + const methodIndexes = []; + for (const [ + index, + element, + ] of intersection.elements.entries()) { + if ( + element.type !== 'JsdocTypeParenthesis' || + element.element.type !== 'JsdocTypeFunction' + ) { + return; + } + + methods.push(convertToMethod(element.element)); + methodIndexes.push(index); + } + + utils.reportJSDoc( + 'Found function property; prefer method signature.', + tag, + enableFixer ? () => { + for (const methodIndex of methodIndexes.toReversed()) { + object.elements.splice(methodIndex, 1); + } + + object.elements.splice(methodIndexes[0], 0, ...methods); + + rewireByParsedType(jsdoc, tag, parsedType, indent); + } : null, + ); + } + + break; + } + + case 'JsdocTypeMethodSignature': { + if (functionType !== 'property') { + break; + } + + /** + * @param {import('jsdoc-type-pratt-parser').MethodSignatureResult} node + */ + const convertToFunction = (node) => { + return { + arrow: true, + constructor: false, + meta: /** @type {Required} */ ( + node.meta + ), + parameters: node.parameters, + parenthesis: true, + returnType: node.returnType, + type: 'JsdocTypeFunction', + typeParameters: node.typeParameters, + }; + }; + + utils.reportJSDoc( + 'Found method signature; prefer function property.', + tag, + enableFixer ? () => { + /* c8 ignore next 3 -- TS guard */ + if (!parentNode || !property || typeof idx !== 'number') { + throw new Error('Unexpected lack of parent or property'); + } + + const object = /** @type {import('jsdoc-type-pratt-parser').ObjectResult} */ ( + parentNode + ); + + const funcs = []; + const removals = []; + + for (const [ + index, + element, + ] of object.elements.entries()) { + if (element.type === 'JsdocTypeMethodSignature' && + element.name === nde.name + ) { + funcs.push(convertToFunction(element)); + if (index !== idx) { + removals.push(index); + } + } + } + + if (funcs.length === 1) { + object.elements[idx] = /** @type {import('jsdoc-type-pratt-parser').ObjectFieldResult} */ ({ + key: nde.name, + meta: nde.meta, + optional: false, + readonly: false, + right: funcs[0], + type: 'JsdocTypeObjectField', + }); + } else { + for (const removal of removals.toReversed()) { + object.elements.splice(removal, 1); + } + + object.elements[idx] = { + key: nde.name, + meta: nde.meta, + optional: false, + readonly: false, + right: { + elements: funcs.map((func) => { + return /** @type {import('jsdoc-type-pratt-parser').ParenthesisResult} */ ({ + element: func, + type: 'JsdocTypeParenthesis', + }); + }), + type: 'JsdocTypeIntersection', + }, + type: 'JsdocTypeObjectField', + }; + } + + rewireByParsedType(jsdoc, tag, parsedType, indent); + } : null, + ); + } + + break; + } + }); + }; + + const tags = utils.filterTags(({ + tag, + }) => { + return Boolean(tag !== 'import' && utils.tagMightHaveTypePosition(tag)); + }); + + for (const tag of tags) { + if (tag.type) { + checkType(tag); + } + } +}, { + iterateAllJsdocs: true, + meta: { + docs: { + description: 'Prefers either function properties or method signatures', + url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/ts-method-signature-style.md#repos-sticky-header', + }, + fixable: 'code', + schema: [ + { + enum: [ + 'method', + 'property', + ], + type: 'string', + }, + { + additionalProperties: false, + properties: { + enableFixer: { + description: 'Whether to enable the fixer. Defaults to `true`.', + type: 'boolean', + }, + }, + type: 'object', + }, + ], + type: 'suggestion', + }, +}); diff --git a/src/rules/typeFormatting.js b/src/rules/typeFormatting.js index cfd15e198..98c72e58b 100644 --- a/src/rules/typeFormatting.js +++ b/src/rules/typeFormatting.js @@ -1,4 +1,7 @@ import iterateJsdoc from '../iterateJsdoc.js'; +import { + rewireByParsedType, +} from '../jsdocUtils.js'; import { parse as parseType, stringify, @@ -67,156 +70,7 @@ export default iterateJsdoc(({ } const fix = () => { - const typeLines = stringify(parsedType).split('\n'); - const firstTypeLine = typeLines.shift(); - const lastTypeLine = typeLines.pop(); - - const beginNameOrDescIdx = tag.source.findIndex(({ - tokens, - }) => { - return tokens.name || tokens.description; - }); - - const nameAndDesc = beginNameOrDescIdx === -1 ? - null : - tag.source.slice(beginNameOrDescIdx); - - const initialNumber = tag.source[0].number; - const src = [ - // Get inevitably present tag from first `tag.source` - { - number: initialNumber, - source: '', - tokens: { - ...tag.source[0].tokens, - ...(typeLines.length || lastTypeLine ? { - end: '', - name: '', - postName: '', - postType: '', - } : {}), - type: '{' + typeBracketSpacing + firstTypeLine + (!typeLines.length && lastTypeLine === undefined ? typeBracketSpacing + '}' : ''), - }, - }, - // Get any intervening type lines - ...(typeLines.length ? typeLines.map((typeLine, idx) => { - return { - number: initialNumber + idx + 1, - source: '', - tokens: { - // Grab any delimiter info from first item - ...tag.source[0].tokens, - delimiter: tag.source[0].tokens.delimiter === '/**' ? '*' : tag.source[0].tokens.delimiter, - end: '', - name: '', - postName: '', - postTag: '', - postType: '', - start: indent + ' ', - tag: '', - type: typeLine, - }, - }; - }) : []), - ]; - - // Merge any final type line and name and description - if ( - // Name and description may be already included if present with the tag - nameAndDesc && beginNameOrDescIdx > 0 - ) { - src.push({ - number: src.length + 1, - source: '', - tokens: { - ...nameAndDesc[0].tokens, - type: lastTypeLine + typeBracketSpacing + '}', - }, - }); - - if ( - // Get any remaining description lines - nameAndDesc.length > 1 - ) { - src.push( - ...nameAndDesc.slice(1).map(({ - source, - tokens, - }, idx) => { - return { - number: src.length + idx + 2, - source, - tokens, - }; - }), - ); - } - } else if (nameAndDesc) { - if (lastTypeLine) { - src.push({ - number: src.length + 1, - source: '', - tokens: { - ...nameAndDesc[0].tokens, - delimiter: nameAndDesc[0].tokens.delimiter === '/**' ? '*' : nameAndDesc[0].tokens.delimiter, - postTag: '', - start: indent + ' ', - tag: '', - type: lastTypeLine + typeBracketSpacing + '}', - }, - }); - } - - if ( - // Get any remaining description lines - nameAndDesc.length > 1 - ) { - src.push( - ...nameAndDesc.slice(1).map(({ - source, - tokens, - }, idx) => { - return { - number: src.length + idx + 2, - source, - tokens, - }; - }), - ); - } - } - - tag.source = src; - - // Properly rewire `jsdoc.source` - const firstTagIdx = jsdoc.source.findIndex(({ - tokens: { - tag: tg, - }, - }) => { - return tg; - }); - - const initialEndSource = jsdoc.source.find(({ - tokens: { - end, - }, - }) => { - return end; - }); - - jsdoc.source = [ - ...jsdoc.source.slice(0, firstTagIdx), - ...jsdoc.tags.flatMap(({ - source, - }) => { - return source; - }), - ]; - - if (initialEndSource && !jsdoc.source.at(-1)?.tokens?.end) { - jsdoc.source.push(initialEndSource); - } + rewireByParsedType(jsdoc, tag, parsedType, indent, typeBracketSpacing); }; /** @type {string[]} */ diff --git a/test/rules/assertions/tsMethodSignatureStyle.js b/test/rules/assertions/tsMethodSignatureStyle.js new file mode 100644 index 000000000..de2a06462 --- /dev/null +++ b/test/rules/assertions/tsMethodSignatureStyle.js @@ -0,0 +1,307 @@ +export default { + invalid: [ + { + code: ` + /** + * @param {{ + * func(arg: string): number + * }} someName + */ + `, + errors: [ + { + line: 3, + message: 'Found method signature; prefer function property.', + }, + ], + options: [ + 'property', + ], + output: ` + /** + * @param {{func: (arg: string) => number}} someName + */ + `, + }, + { + code: ` + /** + * @param {{ + * func(arg: string): number + * }} someName + */ + `, + errors: [ + { + line: 3, + message: 'Found method signature; prefer function property.', + }, + ], + options: [ + 'property', + { + enableFixer: false, + }, + ], + }, + { + code: ` + /** + * @param {{ + * func(arg: number): void + * func(arg: string): void + * func(arg: boolean): void + * }} someName + */ + `, + errors: [ + { + line: 3, + message: 'Found method signature; prefer function property.', + }, + ], + output: ` + /** + * @param {{func: ((arg: number) => void) & ((arg: string) => void) & ((arg: boolean) => void)}} someName + */ + `, + }, + { + code: ` + /** + * @param {{ + * func: (arg: string) => number + * }} someName + */ + `, + errors: [ + { + line: 3, + message: 'Found function property; prefer method signature.', + }, + ], + options: [ + 'method', + ], + output: ` + /** + * @param {{func(arg: string): number}} someName + */ + `, + }, + { + code: ` + /** + * @param {{ + * func: (arg: string) => number + * }} someName + */ + `, + errors: [ + { + line: 3, + message: 'Found function property; prefer method signature.', + }, + ], + options: [ + 'method', + { + enableFixer: false, + }, + ], + }, + { + code: ` + /** + * @type {{ + * func: ((arg: number) => void) & + * ((arg: string) => void) & + * ((arg: boolean) => void) + * }} + */ + `, + errors: [ + { + line: 3, + message: 'Found function property; prefer method signature.', + }, + { + line: 3, + message: 'Found function property; prefer method signature.', + }, + { + line: 3, + message: 'Found function property; prefer method signature.', + }, + ], + options: [ + 'method', + ], + output: ` + /** + * @type {{ + * func(arg: number): void + * func(arg: string): void + * func(arg: boolean): void + * }} + */ + `, + }, + { + code: ` + /** + * @param {{ + * func: ((arg: number) => void) & + * ((arg: string) => void) & + * ((arg: boolean) => void) + * }} someName + */ + `, + errors: [ + { + line: 3, + message: 'Found function property; prefer method signature.', + }, + { + line: 3, + message: 'Found function property; prefer method signature.', + }, + { + line: 3, + message: 'Found function property; prefer method signature.', + }, + ], + options: [ + 'method', + { + enableFixer: false, + }, + ], + }, + { + code: ` + /** + * @param {{ + * "func"(arg: string): number + * }} someName + */ + `, + errors: [ + { + line: 3, + message: 'Found method signature; prefer function property.', + }, + ], + options: [ + 'property', + ], + output: ` + /** + * @param {{"func": (arg: string) => number}} someName + */ + `, + }, + { + code: ` + /** + * @param {{ + * 'func': (arg: string) => number + * }} someName + */ + `, + errors: [ + { + line: 3, + message: 'Found function property; prefer method signature.', + }, + ], + options: [ + 'method', + ], + output: ` + /** + * @param {{'func'(arg: string): number}} someName + */ + `, + }, + { + code: ` + /** @type {{ + * func: ((arg: number) => void) & + * ((arg: string) => void) & + * ((arg: boolean) => void) + * }} + */ + `, + errors: [ + { + line: 2, + message: 'Found function property; prefer method signature.', + }, + { + line: 2, + message: 'Found function property; prefer method signature.', + }, + { + line: 2, + message: 'Found function property; prefer method signature.', + }, + ], + options: [ + 'method', + ], + output: ` + /** @type {{ + * func(arg: number): void + * func(arg: string): void + * func(arg: boolean): void + * }} + */ + `, + }, + ], + valid: [ + { + code: ` + /** + * @param {{ + * func: (arg: string) => number + * }} + */ + `, + options: [ + 'property', + ], + }, + { + code: ` + /** + * @param {{ + * func: ((arg: number) => void) & + * ((arg: string) => void) & + * ((arg: boolean) => void) + * }} + */ + `, + }, + { + code: ` + /** + * @param {abc<} + */ + `, + }, + { + code: ` + /** + * @param {{ + * func: ((arg: number) => void) & (SomeType) + * }} + */ + `, + options: [ + 'method', + ], + }, + ], +}; diff --git a/test/rules/ruleNames.json b/test/rules/ruleNames.json index 173f34ecf..1204f7fc7 100644 --- a/test/rules/ruleNames.json +++ b/test/rules/ruleNames.json @@ -67,6 +67,7 @@ "sort-tags", "tag-lines", "text-escaping", + "ts-method-signature-style", "type-formatting", "valid-types" ] From cbda8aab4c649f4982b571a080abd6903a894049 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Wed, 8 Oct 2025 20:25:22 -0700 Subject: [PATCH 148/189] feat(`ts-prefer-function-type`): add new rule --- .README/rules/ts-prefer-function-type.md | 26 ++++ README.md | 1 + docs/rules/ts-prefer-function-type.md | 92 +++++++++++++ src/index-cjs.js | 3 + src/index.js | 3 + src/rules.d.ts | 12 ++ src/rules/tsPreferFunctionType.js | 127 ++++++++++++++++++ test/rules/assertions/tsPreferFunctionType.js | 100 ++++++++++++++ test/rules/ruleNames.json | 1 + 9 files changed, 365 insertions(+) create mode 100644 .README/rules/ts-prefer-function-type.md create mode 100644 docs/rules/ts-prefer-function-type.md create mode 100644 src/rules/tsPreferFunctionType.js create mode 100644 test/rules/assertions/tsPreferFunctionType.js diff --git a/.README/rules/ts-prefer-function-type.md b/.README/rules/ts-prefer-function-type.md new file mode 100644 index 000000000..5c870040e --- /dev/null +++ b/.README/rules/ts-prefer-function-type.md @@ -0,0 +1,26 @@ +# `ts-prefer-function-type` + +Inspired by `typescript-eslint`'s [prefer-function-type](https://typescript-eslint.io/rules/prefer-function-type/) rule. + +Chooses the more succinct function property over a call signature if there are +no other properties on the signature. + +## Options + +{"gitdown": "options"} + +||| +|---|---| +|Context|everywhere| +|Tags|``| +|Recommended|false| +|Settings|| +|Options|`enableFixer`| + +## Failing examples + + + +## Passing examples + + diff --git a/README.md b/README.md index 5987bb618..223f59e51 100644 --- a/README.md +++ b/README.md @@ -499,5 +499,6 @@ non-default-recommended fixer). |:heavy_check_mark:|:wrench:| [tag-lines](./docs/rules/tag-lines.md#readme) | Enforces lines (or no lines) before, after, or between tags. | ||:wrench:| [text-escaping](./docs/rules/text-escaping.md#readme) | Auto-escape certain characters that are input within block and tag descriptions. | ||:wrench:| [ts-method-signature-style](./docs/rules/ts-method-signature-style.md#readme) | Prefers either function properties or method signatures | +||:wrench:| [ts-prefer-function-type](./docs/rules/ts-prefer-function-type.md#readme) | | ||:wrench:| [type-formatting](./docs/rules/type-formatting.md#readme) | Formats JSDoc type values. | |:heavy_check_mark:|| [valid-types](./docs/rules/valid-types.md#readme) | Requires all types/namepaths to be valid JSDoc, Closure compiler, or TypeScript types (configurable in settings). | diff --git a/docs/rules/ts-prefer-function-type.md b/docs/rules/ts-prefer-function-type.md new file mode 100644 index 000000000..86370cf66 --- /dev/null +++ b/docs/rules/ts-prefer-function-type.md @@ -0,0 +1,92 @@ + + +# ts-prefer-function-type + +Inspired by `typescript-eslint`'s [prefer-function-type](https://typescript-eslint.io/rules/prefer-function-type/) rule. + +Chooses the more succinct function property over a call signature if there are +no other properties on the signature. + + + +## Options + +A single options object has the following properties. + + + +### enableFixer + +Whether to enable the fixer or not + + +||| +|---|---| +|Context|everywhere| +|Tags|``| +|Recommended|false| +|Settings|| +|Options|`enableFixer`| + + + +## Failing examples + +The following patterns are considered problems: + +````ts +/** + * @param {{ + * (arg: string): void; + * }} someName + */ +// Message: Call signature found; function type preferred. + +/** + * @param {{ + * (arg: string): void; + * }} someName + */ +// "jsdoc/ts-prefer-function-type": ["error"|"warn", {"enableFixer":false}] +// Message: Call signature found; function type preferred. + +/** + * @param {(string | { + * (arg: string): void; + * })} someName + */ +// Message: Call signature found; function type preferred. +```` + + + + + +## Passing examples + +The following patterns are not considered problems: + +````ts +/** + * @param {() => number} someName + */ + +/** + * @param {{ + * (arg: string): void; + * abc: number; + * }} someName + */ + +/** + * @param {{ + * (data: string): number; + * (id: number): string; + * }} someName + */ + +/** + * @param {BadType<} someName + */ +```` + diff --git a/src/index-cjs.js b/src/index-cjs.js index 5ce187c9c..95570d3b2 100644 --- a/src/index-cjs.js +++ b/src/index-cjs.js @@ -67,6 +67,7 @@ import sortTags from './rules/sortTags.js'; import tagLines from './rules/tagLines.js'; import textEscaping from './rules/textEscaping.js'; import tsMethodSignatureStyle from './rules/tsMethodSignatureStyle.js'; +import tsPreferFunctionType from './rules/tsPreferFunctionType.js'; import typeFormatting from './rules/typeFormatting.js'; import validTypes from './rules/validTypes.js'; @@ -253,6 +254,7 @@ index.rules = { 'tag-lines': tagLines, 'text-escaping': textEscaping, 'ts-method-signature-style': tsMethodSignatureStyle, + 'ts-prefer-function-type': tsPreferFunctionType, 'type-formatting': typeFormatting, 'valid-types': validTypes, }; @@ -344,6 +346,7 @@ const createRecommendedRuleset = (warnOrError, flatName) => { 'jsdoc/tag-lines': warnOrError, 'jsdoc/text-escaping': 'off', 'jsdoc/ts-method-signature-style': 'off', + 'jsdoc/ts-prefer-function-type': 'off', 'jsdoc/type-formatting': 'off', 'jsdoc/valid-types': warnOrError, }, diff --git a/src/index.js b/src/index.js index b56c95adc..fe3919c99 100644 --- a/src/index.js +++ b/src/index.js @@ -73,6 +73,7 @@ import sortTags from './rules/sortTags.js'; import tagLines from './rules/tagLines.js'; import textEscaping from './rules/textEscaping.js'; import tsMethodSignatureStyle from './rules/tsMethodSignatureStyle.js'; +import tsPreferFunctionType from './rules/tsPreferFunctionType.js'; import typeFormatting from './rules/typeFormatting.js'; import validTypes from './rules/validTypes.js'; @@ -259,6 +260,7 @@ index.rules = { 'tag-lines': tagLines, 'text-escaping': textEscaping, 'ts-method-signature-style': tsMethodSignatureStyle, + 'ts-prefer-function-type': tsPreferFunctionType, 'type-formatting': typeFormatting, 'valid-types': validTypes, }; @@ -350,6 +352,7 @@ const createRecommendedRuleset = (warnOrError, flatName) => { 'jsdoc/tag-lines': warnOrError, 'jsdoc/text-escaping': 'off', 'jsdoc/ts-method-signature-style': 'off', + 'jsdoc/ts-prefer-function-type': 'off', 'jsdoc/type-formatting': 'off', 'jsdoc/valid-types': warnOrError, }, diff --git a/src/rules.d.ts b/src/rules.d.ts index cc61ff63c..2a8f3be82 100644 --- a/src/rules.d.ts +++ b/src/rules.d.ts @@ -2952,6 +2952,18 @@ export interface Rules { } ]; + /** */ + "jsdoc/ts-prefer-function-type": + | [] + | [ + { + /** + * Whether to enable the fixer or not + */ + enableFixer?: boolean; + } + ]; + /** Formats JSDoc type values. */ "jsdoc/type-formatting": | [] diff --git a/src/rules/tsPreferFunctionType.js b/src/rules/tsPreferFunctionType.js new file mode 100644 index 000000000..c27a4f4e6 --- /dev/null +++ b/src/rules/tsPreferFunctionType.js @@ -0,0 +1,127 @@ +import iterateJsdoc from '../iterateJsdoc.js'; +import { + rewireByParsedType, +} from '../jsdocUtils.js'; +import { + parse as parseType, + traverse, +} from '@es-joy/jsdoccomment'; + +export default iterateJsdoc(({ + context, + indent, + jsdoc, + utils, +}) => { + const { + enableFixer = true, + } = context.options[0] || {}; + + /** + * @param {import('@es-joy/jsdoccomment').JsdocTagWithInline} tag + */ + const checkType = (tag) => { + const potentialType = tag.type; + + /** @type {import('jsdoc-type-pratt-parser').RootResult} */ + let parsedType; + try { + parsedType = parseType( + /** @type {string} */ (potentialType), 'typescript', + ); + } catch { + return; + } + + traverse(parsedType, (nde, parentNode) => { + // @ts-expect-error Adding our own property for use below + nde.parentNode = parentNode; + }); + + traverse(parsedType, (nde, parentNode, property, index) => { + switch (nde.type) { + case 'JsdocTypeCallSignature': { + const object = /** @type {import('jsdoc-type-pratt-parser').ObjectResult} */ ( + parentNode + ); + if (typeof index === 'number' && object.elements.length === 1) { + utils.reportJSDoc( + 'Call signature found; function type preferred.', + tag, + enableFixer ? () => { + const func = /** @type {import('jsdoc-type-pratt-parser').FunctionResult} */ ({ + arrow: true, + constructor: false, + meta: /** @type {Required} */ ( + nde.meta + ), + parameters: nde.parameters, + parenthesis: true, + returnType: nde.returnType, + type: 'JsdocTypeFunction', + typeParameters: nde.typeParameters, + }); + + if (property && 'parentNode' in object && object.parentNode) { + if (typeof object.parentNode === 'object' && + 'elements' in object.parentNode && + Array.isArray(object.parentNode.elements) + ) { + const idx = object.parentNode.elements.indexOf(object); + object.parentNode.elements[idx] = func; + /* c8 ignore next 6 -- Guard */ + } else { + throw new Error( + // @ts-expect-error Ok + `Rule currently unable to handle type ${object.parentNode.type}`, + ); + } + } else { + parsedType = func; + } + + rewireByParsedType(jsdoc, tag, parsedType, indent); + } : null, + ); + } + + break; + } + } + }); + }; + + const tags = utils.filterTags(({ + tag, + }) => { + return Boolean(tag !== 'import' && utils.tagMightHaveTypePosition(tag)); + }); + + for (const tag of tags) { + if (tag.type) { + checkType(tag); + } + } +}, { + iterateAllJsdocs: true, + meta: { + docs: { + description: '', + url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/ts-prefer-function-type.md#repos-sticky-header', + }, + fixable: 'code', + schema: [ + { + additionalProperties: false, + properties: { + enableFixer: { + description: 'Whether to enable the fixer or not', + type: 'boolean', + }, + }, + type: 'object', + }, + ], + type: 'suggestion', + }, +}); diff --git a/test/rules/assertions/tsPreferFunctionType.js b/test/rules/assertions/tsPreferFunctionType.js new file mode 100644 index 000000000..dab884731 --- /dev/null +++ b/test/rules/assertions/tsPreferFunctionType.js @@ -0,0 +1,100 @@ +export default { + invalid: [ + { + code: ` + /** + * @param {{ + * (arg: string): void; + * }} someName + */ + `, + errors: [ + { + line: 3, + message: 'Call signature found; function type preferred.', + }, + ], + output: ` + /** + * @param {(arg: string) => void} someName + */ + `, + }, + { + code: ` + /** + * @param {{ + * (arg: string): void; + * }} someName + */ + `, + errors: [ + { + line: 3, + message: 'Call signature found; function type preferred.', + }, + ], + options: [ + { + enableFixer: false, + }, + ], + }, + { + code: ` + /** + * @param {(string | { + * (arg: string): void; + * })} someName + */ + `, + errors: [ + { + line: 3, + message: 'Call signature found; function type preferred.', + }, + ], + output: ` + /** + * @param {(string | (arg: string) => void)} someName + */ + `, + }, + ], + valid: [ + { + code: ` + /** + * @param {() => number} someName + */ + `, + }, + { + code: ` + /** + * @param {{ + * (arg: string): void; + * abc: number; + * }} someName + */ + `, + }, + { + code: ` + /** + * @param {{ + * (data: string): number; + * (id: number): string; + * }} someName + */ + `, + }, + { + code: ` + /** + * @param {BadType<} someName + */ + `, + }, + ], +}; diff --git a/test/rules/ruleNames.json b/test/rules/ruleNames.json index 1204f7fc7..68c1b7756 100644 --- a/test/rules/ruleNames.json +++ b/test/rules/ruleNames.json @@ -68,6 +68,7 @@ "tag-lines", "text-escaping", "ts-method-signature-style", + "ts-prefer-function-type", "type-formatting", "valid-types" ] From 7b0740df4b4470d4fa3fd186c2413c0fec500dea Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Thu, 9 Oct 2025 15:47:38 +0800 Subject: [PATCH 149/189] Update src/rules/tsPreferFunctionType.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/rules/tsPreferFunctionType.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rules/tsPreferFunctionType.js b/src/rules/tsPreferFunctionType.js index c27a4f4e6..6b9c9e499 100644 --- a/src/rules/tsPreferFunctionType.js +++ b/src/rules/tsPreferFunctionType.js @@ -106,7 +106,7 @@ export default iterateJsdoc(({ iterateAllJsdocs: true, meta: { docs: { - description: '', + description: 'Prefers function types over call signatures when there are no other properties.', url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/ts-prefer-function-type.md#repos-sticky-header', }, fixable: 'code', From ad97ccd4553ef09d7048c5526f6a406920bb8eef Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Thu, 9 Oct 2025 01:41:56 -0700 Subject: [PATCH 150/189] docs: update --- .README/README.md | 1 + README.md | 3 ++- src/rules.d.ts | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.README/README.md b/.README/README.md index 2fdf33a30..42e028dfc 100644 --- a/.README/README.md +++ b/.README/README.md @@ -278,6 +278,7 @@ Finally, enable all of the rules that you would like to use. "jsdoc/sort-tags": 1, "jsdoc/tag-lines": 1, // Recommended "jsdoc/text-escaping": 1, + "jsdoc/ts-prefer-function-type": 1, "jsdoc/ts-method-signature-style": 1, "jsdoc/type-formatting": 1, "jsdoc/valid-types": 1 // Recommended diff --git a/README.md b/README.md index 223f59e51..369b12b19 100644 --- a/README.md +++ b/README.md @@ -305,6 +305,7 @@ Finally, enable all of the rules that you would like to use. "jsdoc/sort-tags": 1, "jsdoc/tag-lines": 1, // Recommended "jsdoc/text-escaping": 1, + "jsdoc/ts-prefer-function-type": 1, "jsdoc/ts-method-signature-style": 1, "jsdoc/type-formatting": 1, "jsdoc/valid-types": 1 // Recommended @@ -499,6 +500,6 @@ non-default-recommended fixer). |:heavy_check_mark:|:wrench:| [tag-lines](./docs/rules/tag-lines.md#readme) | Enforces lines (or no lines) before, after, or between tags. | ||:wrench:| [text-escaping](./docs/rules/text-escaping.md#readme) | Auto-escape certain characters that are input within block and tag descriptions. | ||:wrench:| [ts-method-signature-style](./docs/rules/ts-method-signature-style.md#readme) | Prefers either function properties or method signatures | -||:wrench:| [ts-prefer-function-type](./docs/rules/ts-prefer-function-type.md#readme) | | +||:wrench:| [ts-prefer-function-type](./docs/rules/ts-prefer-function-type.md#readme) | Prefers function types over call signatures when there are no other properties. | ||:wrench:| [type-formatting](./docs/rules/type-formatting.md#readme) | Formats JSDoc type values. | |:heavy_check_mark:|| [valid-types](./docs/rules/valid-types.md#readme) | Requires all types/namepaths to be valid JSDoc, Closure compiler, or TypeScript types (configurable in settings). | diff --git a/src/rules.d.ts b/src/rules.d.ts index 2a8f3be82..f054b56d0 100644 --- a/src/rules.d.ts +++ b/src/rules.d.ts @@ -2952,7 +2952,7 @@ export interface Rules { } ]; - /** */ + /** Prefers function types over call signatures when there are no other properties. */ "jsdoc/ts-prefer-function-type": | [] | [ From a19af9720c19d875ba16b3371bb0d591984dbb92 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Thu, 9 Oct 2025 01:40:02 -0700 Subject: [PATCH 151/189] feat(`ts-no-empty-object-type`): new rule to prevent empty objects --- .README/README.md | 1 + .README/rules/ts-no-empty-object-type.md | 24 +++++++ README.md | 2 + docs/rules/ts-no-empty-object-type.md | 66 ++++++++++++++++++++ src/index-cjs.js | 3 + src/index.js | 3 + src/rules.d.ts | 3 + src/rules/tsNoEmptyObjectType.js | 61 ++++++++++++++++++ test/rules/assertions/tsNoEmptyObjectType.js | 65 +++++++++++++++++++ test/rules/ruleNames.json | 1 + 10 files changed, 229 insertions(+) create mode 100644 .README/rules/ts-no-empty-object-type.md create mode 100644 docs/rules/ts-no-empty-object-type.md create mode 100644 src/rules/tsNoEmptyObjectType.js create mode 100644 test/rules/assertions/tsNoEmptyObjectType.js diff --git a/.README/README.md b/.README/README.md index 42e028dfc..13f2a650a 100644 --- a/.README/README.md +++ b/.README/README.md @@ -280,6 +280,7 @@ Finally, enable all of the rules that you would like to use. "jsdoc/text-escaping": 1, "jsdoc/ts-prefer-function-type": 1, "jsdoc/ts-method-signature-style": 1, + "jsdoc/ts-prefer-function-type": 1, "jsdoc/type-formatting": 1, "jsdoc/valid-types": 1 // Recommended } diff --git a/.README/rules/ts-no-empty-object-type.md b/.README/rules/ts-no-empty-object-type.md new file mode 100644 index 000000000..5af386d56 --- /dev/null +++ b/.README/rules/ts-no-empty-object-type.md @@ -0,0 +1,24 @@ +# `ts-no-empty-object-type` + +Warns against use of the empty object type which, in TypeScript, +means "any value that is defined". + +## Options + +{"gitdown": "options"} + +||| +|---|---| +|Context|everywhere| +|Tags|``| +|Recommended|true| +|Settings|| +|Options|| + +## Failing examples + + + +## Passing examples + + diff --git a/README.md b/README.md index 369b12b19..e4dcf5c59 100644 --- a/README.md +++ b/README.md @@ -307,6 +307,7 @@ Finally, enable all of the rules that you would like to use. "jsdoc/text-escaping": 1, "jsdoc/ts-prefer-function-type": 1, "jsdoc/ts-method-signature-style": 1, + "jsdoc/ts-prefer-function-type": 1, "jsdoc/type-formatting": 1, "jsdoc/valid-types": 1 // Recommended } @@ -500,6 +501,7 @@ non-default-recommended fixer). |:heavy_check_mark:|:wrench:| [tag-lines](./docs/rules/tag-lines.md#readme) | Enforces lines (or no lines) before, after, or between tags. | ||:wrench:| [text-escaping](./docs/rules/text-escaping.md#readme) | Auto-escape certain characters that are input within block and tag descriptions. | ||:wrench:| [ts-method-signature-style](./docs/rules/ts-method-signature-style.md#readme) | Prefers either function properties or method signatures | +|:heavy_check_mark:|| [ts-no-empty-object-type](./docs/rules/ts-no-empty-object-type.md#readme) | Warns against use of the empty object type | ||:wrench:| [ts-prefer-function-type](./docs/rules/ts-prefer-function-type.md#readme) | Prefers function types over call signatures when there are no other properties. | ||:wrench:| [type-formatting](./docs/rules/type-formatting.md#readme) | Formats JSDoc type values. | |:heavy_check_mark:|| [valid-types](./docs/rules/valid-types.md#readme) | Requires all types/namepaths to be valid JSDoc, Closure compiler, or TypeScript types (configurable in settings). | diff --git a/docs/rules/ts-no-empty-object-type.md b/docs/rules/ts-no-empty-object-type.md new file mode 100644 index 000000000..9eb6b244c --- /dev/null +++ b/docs/rules/ts-no-empty-object-type.md @@ -0,0 +1,66 @@ + + +# ts-no-empty-object-type + +Warns against use of the empty object type which, in TypeScript, +means "any value that is defined". + + + +## Options + + + +||| +|---|---| +|Context|everywhere| +|Tags|``| +|Recommended|true| +|Settings|| +|Options|| + + + +## Failing examples + +The following patterns are considered problems: + +````ts +/** + * @param {{}} someName + */ +// Message: No empty object type. + +/** + * @param {(string|{})} someName + */ +// Message: No empty object type. +```` + + + + + +## Passing examples + +The following patterns are not considered problems: + +````ts +/** + * @param {{a: string}} someName + */ + +/** + * @param {({a: string} & {b: number})} someName + */ + +/** + * @param {BadType<} someName + */ + +/** + * @param {{}} someName + */ +// Settings: {"jsdoc":{"mode":"jsdoc"}} +```` + diff --git a/src/index-cjs.js b/src/index-cjs.js index 95570d3b2..fd9284477 100644 --- a/src/index-cjs.js +++ b/src/index-cjs.js @@ -67,6 +67,7 @@ import sortTags from './rules/sortTags.js'; import tagLines from './rules/tagLines.js'; import textEscaping from './rules/textEscaping.js'; import tsMethodSignatureStyle from './rules/tsMethodSignatureStyle.js'; +import tsNoEmptyObjectType from './rules/tsNoEmptyObjectType.js'; import tsPreferFunctionType from './rules/tsPreferFunctionType.js'; import typeFormatting from './rules/typeFormatting.js'; import validTypes from './rules/validTypes.js'; @@ -254,6 +255,7 @@ index.rules = { 'tag-lines': tagLines, 'text-escaping': textEscaping, 'ts-method-signature-style': tsMethodSignatureStyle, + 'ts-no-empty-object-type': tsNoEmptyObjectType, 'ts-prefer-function-type': tsPreferFunctionType, 'type-formatting': typeFormatting, 'valid-types': validTypes, @@ -346,6 +348,7 @@ const createRecommendedRuleset = (warnOrError, flatName) => { 'jsdoc/tag-lines': warnOrError, 'jsdoc/text-escaping': 'off', 'jsdoc/ts-method-signature-style': 'off', + 'jsdoc/ts-no-empty-object-type': warnOrError, 'jsdoc/ts-prefer-function-type': 'off', 'jsdoc/type-formatting': 'off', 'jsdoc/valid-types': warnOrError, diff --git a/src/index.js b/src/index.js index fe3919c99..2fd824c5a 100644 --- a/src/index.js +++ b/src/index.js @@ -73,6 +73,7 @@ import sortTags from './rules/sortTags.js'; import tagLines from './rules/tagLines.js'; import textEscaping from './rules/textEscaping.js'; import tsMethodSignatureStyle from './rules/tsMethodSignatureStyle.js'; +import tsNoEmptyObjectType from './rules/tsNoEmptyObjectType.js'; import tsPreferFunctionType from './rules/tsPreferFunctionType.js'; import typeFormatting from './rules/typeFormatting.js'; import validTypes from './rules/validTypes.js'; @@ -260,6 +261,7 @@ index.rules = { 'tag-lines': tagLines, 'text-escaping': textEscaping, 'ts-method-signature-style': tsMethodSignatureStyle, + 'ts-no-empty-object-type': tsNoEmptyObjectType, 'ts-prefer-function-type': tsPreferFunctionType, 'type-formatting': typeFormatting, 'valid-types': validTypes, @@ -352,6 +354,7 @@ const createRecommendedRuleset = (warnOrError, flatName) => { 'jsdoc/tag-lines': warnOrError, 'jsdoc/text-escaping': 'off', 'jsdoc/ts-method-signature-style': 'off', + 'jsdoc/ts-no-empty-object-type': warnOrError, 'jsdoc/ts-prefer-function-type': 'off', 'jsdoc/type-formatting': 'off', 'jsdoc/valid-types': warnOrError, diff --git a/src/rules.d.ts b/src/rules.d.ts index f054b56d0..889e57ece 100644 --- a/src/rules.d.ts +++ b/src/rules.d.ts @@ -2952,6 +2952,9 @@ export interface Rules { } ]; + /** Warns against use of the empty object type */ + "jsdoc/ts-no-empty-object-type": []; + /** Prefers function types over call signatures when there are no other properties. */ "jsdoc/ts-prefer-function-type": | [] diff --git a/src/rules/tsNoEmptyObjectType.js b/src/rules/tsNoEmptyObjectType.js new file mode 100644 index 000000000..800d9ee5d --- /dev/null +++ b/src/rules/tsNoEmptyObjectType.js @@ -0,0 +1,61 @@ +import iterateJsdoc from '../iterateJsdoc.js'; +import { + parse as parseType, + traverse, +} from '@es-joy/jsdoccomment'; + +export default iterateJsdoc(({ + settings, + utils, +}) => { + if (settings.mode !== 'typescript') { + return; + } + + /** + * @param {import('@es-joy/jsdoccomment').JsdocTagWithInline} tag + */ + const checkType = (tag) => { + const potentialType = tag.type; + let parsedType; + try { + parsedType = parseType( + /** @type {string} */ (potentialType), 'typescript', + ); + } catch { + return; + } + + traverse(parsedType, (nde) => { + switch (nde.type) { + case 'JsdocTypeObject': { + if (!nde.elements.length) { + utils.reportJSDoc('No empty object type.', tag); + } + } + } + }); + }; + + const tags = utils.filterTags(({ + tag, + }) => { + return Boolean(tag !== 'import' && utils.tagMightHaveTypePosition(tag)); + }); + + for (const tag of tags) { + if (tag.type) { + checkType(tag); + } + } +}, { + iterateAllJsdocs: true, + meta: { + docs: { + description: 'Warns against use of the empty object type', + url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/ts-no-empty-object-type.md#repos-sticky-header', + }, + schema: [], + type: 'suggestion', + }, +}); diff --git a/test/rules/assertions/tsNoEmptyObjectType.js b/test/rules/assertions/tsNoEmptyObjectType.js new file mode 100644 index 000000000..87276d826 --- /dev/null +++ b/test/rules/assertions/tsNoEmptyObjectType.js @@ -0,0 +1,65 @@ +export default { + invalid: [ + { + code: ` + /** + * @param {{}} someName + */ + `, + errors: [ + { + line: 3, + message: 'No empty object type.', + }, + ], + }, + { + code: ` + /** + * @param {(string|{})} someName + */ + `, + errors: [ + { + line: 3, + message: 'No empty object type.', + }, + ], + }, + ], + valid: [ + { + code: ` + /** + * @param {{a: string}} someName + */ + `, + }, + { + code: ` + /** + * @param {({a: string} & {b: number})} someName + */ + `, + }, + { + code: ` + /** + * @param {BadType<} someName + */ + `, + }, + { + code: ` + /** + * @param {{}} someName + */ + `, + settings: { + jsdoc: { + mode: 'jsdoc', + }, + }, + }, + ], +}; diff --git a/test/rules/ruleNames.json b/test/rules/ruleNames.json index 68c1b7756..d0a71c7cd 100644 --- a/test/rules/ruleNames.json +++ b/test/rules/ruleNames.json @@ -68,6 +68,7 @@ "tag-lines", "text-escaping", "ts-method-signature-style", + "ts-no-empty-object-type", "ts-prefer-function-type", "type-formatting", "valid-types" From 64082aa810e3069a142b11c16815dc5b59acda7f Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Thu, 9 Oct 2025 09:29:54 -0700 Subject: [PATCH 152/189] feat(`ts-no-unnecessary-template-expression`): create new rule to catch extra markup within template types --- .README/README.md | 1 + .../ts-no-unnecessary-template-expression.md | 24 ++ README.md | 2 + .../ts-no-unnecessary-template-expression.md | 120 +++++++++ src/index-cjs.js | 3 + src/index.js | 3 + src/rules.d.ts | 12 + .../tsNoUnnecessaryTemplateExpression.js | 130 ++++++++++ .../tsNoUnnecessaryTemplateExpression.js | 237 ++++++++++++++++++ test/rules/ruleNames.json | 1 + 10 files changed, 533 insertions(+) create mode 100644 .README/rules/ts-no-unnecessary-template-expression.md create mode 100644 docs/rules/ts-no-unnecessary-template-expression.md create mode 100644 src/rules/tsNoUnnecessaryTemplateExpression.js create mode 100644 test/rules/assertions/tsNoUnnecessaryTemplateExpression.js diff --git a/.README/README.md b/.README/README.md index 13f2a650a..87b62422d 100644 --- a/.README/README.md +++ b/.README/README.md @@ -281,6 +281,7 @@ Finally, enable all of the rules that you would like to use. "jsdoc/ts-prefer-function-type": 1, "jsdoc/ts-method-signature-style": 1, "jsdoc/ts-prefer-function-type": 1, + "jsdoc/ts-no-unnecessary-template-expression": 1, "jsdoc/type-formatting": 1, "jsdoc/valid-types": 1 // Recommended } diff --git a/.README/rules/ts-no-unnecessary-template-expression.md b/.README/rules/ts-no-unnecessary-template-expression.md new file mode 100644 index 000000000..fb82aa452 --- /dev/null +++ b/.README/rules/ts-no-unnecessary-template-expression.md @@ -0,0 +1,24 @@ +# `ts-no-unnecessary-template-expression` + +Catches unnecessary template expressions such as string expressions within +a template literal. + +## Options + +{"gitdown": "options"} + +||| +|---|---| +|Context|everywhere| +|Tags|``| +|Recommended|false| +|Settings|| +|Options|`enableFixer`| + +## Failing examples + + + +## Passing examples + + diff --git a/README.md b/README.md index e4dcf5c59..2b6a2be99 100644 --- a/README.md +++ b/README.md @@ -308,6 +308,7 @@ Finally, enable all of the rules that you would like to use. "jsdoc/ts-prefer-function-type": 1, "jsdoc/ts-method-signature-style": 1, "jsdoc/ts-prefer-function-type": 1, + "jsdoc/ts-no-unnecessary-template-expression": 1, "jsdoc/type-formatting": 1, "jsdoc/valid-types": 1 // Recommended } @@ -502,6 +503,7 @@ non-default-recommended fixer). ||:wrench:| [text-escaping](./docs/rules/text-escaping.md#readme) | Auto-escape certain characters that are input within block and tag descriptions. | ||:wrench:| [ts-method-signature-style](./docs/rules/ts-method-signature-style.md#readme) | Prefers either function properties or method signatures | |:heavy_check_mark:|| [ts-no-empty-object-type](./docs/rules/ts-no-empty-object-type.md#readme) | Warns against use of the empty object type | +||:wrench:| [ts-no-unnecessary-template-expression](./docs/rules/ts-no-unnecessary-template-expression.md#readme) | Catches unnecessary template expressions such as string expressions within a template literal. | ||:wrench:| [ts-prefer-function-type](./docs/rules/ts-prefer-function-type.md#readme) | Prefers function types over call signatures when there are no other properties. | ||:wrench:| [type-formatting](./docs/rules/type-formatting.md#readme) | Formats JSDoc type values. | |:heavy_check_mark:|| [valid-types](./docs/rules/valid-types.md#readme) | Requires all types/namepaths to be valid JSDoc, Closure compiler, or TypeScript types (configurable in settings). | diff --git a/docs/rules/ts-no-unnecessary-template-expression.md b/docs/rules/ts-no-unnecessary-template-expression.md new file mode 100644 index 000000000..5b7bee0bc --- /dev/null +++ b/docs/rules/ts-no-unnecessary-template-expression.md @@ -0,0 +1,120 @@ + + +# ts-no-unnecessary-template-expression + +Catches unnecessary template expressions such as string expressions within +a template literal. + + + +## Options + +A single options object has the following properties. + + + +### enableFixer + +Whether to enable the fixer. Defaults to `true`. + + +||| +|---|---| +|Context|everywhere| +|Tags|``| +|Recommended|false| +|Settings|| +|Options|`enableFixer`| + + + +## Failing examples + +The following patterns are considered problems: + +````ts +/** + * @type {`A${'B'}`} + */ +// Message: Found an unnecessary string literal within a template. + +/** + * @type {`A${'B'}`} + */ +// "jsdoc/ts-no-unnecessary-template-expression": ["error"|"warn", {"enableFixer":false}] +// Message: Found an unnecessary string literal within a template. + +/** + * @type {(`A${'B'}`)} + */ +// Message: Found an unnecessary string literal within a template. + +/** + * @type {`A${'B'}`|SomeType} + */ +// Message: Found an unnecessary string literal within a template. + +/** + * @type {`${B}`} + */ +// Message: Found a lone template expression within a template. + +/** + * @type {`${B}`} + */ +// "jsdoc/ts-no-unnecessary-template-expression": ["error"|"warn", {"enableFixer":false}] +// Message: Found a lone template expression within a template. + +/** + * @type {`A${'B'}${'C'}`} + */ +// Message: Found an unnecessary string literal within a template. + +/** + * @type {`A${'B'}C`} + */ +// Message: Found an unnecessary string literal within a template. + +/** + * @type {`${'B'}`} + */ +// Message: Found an unnecessary string literal within a template. + +/** + * @type {(`${B}`)} + */ +// Message: Found a lone template expression within a template. + +/** + * @type {`${B}` | number} + */ +// Message: Found a lone template expression within a template. +```` + + + + + +## Passing examples + +The following patterns are not considered problems: + +````ts +/** + * @type {`AB`} + */ + +/** + * @type {`A${C}B`} + */ + +/** + * @param {BadType<} someName + */ + +/** + * @param {`A${'B'}`} someName + */ +// Settings: {"jsdoc":{"mode":"jsdoc"}} +```` + diff --git a/src/index-cjs.js b/src/index-cjs.js index fd9284477..290da8447 100644 --- a/src/index-cjs.js +++ b/src/index-cjs.js @@ -68,6 +68,7 @@ import tagLines from './rules/tagLines.js'; import textEscaping from './rules/textEscaping.js'; import tsMethodSignatureStyle from './rules/tsMethodSignatureStyle.js'; import tsNoEmptyObjectType from './rules/tsNoEmptyObjectType.js'; +import tsNoUnnecessaryTemplateExpression from './rules/tsNoUnnecessaryTemplateExpression.js'; import tsPreferFunctionType from './rules/tsPreferFunctionType.js'; import typeFormatting from './rules/typeFormatting.js'; import validTypes from './rules/validTypes.js'; @@ -256,6 +257,7 @@ index.rules = { 'text-escaping': textEscaping, 'ts-method-signature-style': tsMethodSignatureStyle, 'ts-no-empty-object-type': tsNoEmptyObjectType, + 'ts-no-unnecessary-template-expression': tsNoUnnecessaryTemplateExpression, 'ts-prefer-function-type': tsPreferFunctionType, 'type-formatting': typeFormatting, 'valid-types': validTypes, @@ -349,6 +351,7 @@ const createRecommendedRuleset = (warnOrError, flatName) => { 'jsdoc/text-escaping': 'off', 'jsdoc/ts-method-signature-style': 'off', 'jsdoc/ts-no-empty-object-type': warnOrError, + 'jsdoc/ts-no-unnecessary-template-expression': 'off', 'jsdoc/ts-prefer-function-type': 'off', 'jsdoc/type-formatting': 'off', 'jsdoc/valid-types': warnOrError, diff --git a/src/index.js b/src/index.js index 2fd824c5a..95f624f5e 100644 --- a/src/index.js +++ b/src/index.js @@ -74,6 +74,7 @@ import tagLines from './rules/tagLines.js'; import textEscaping from './rules/textEscaping.js'; import tsMethodSignatureStyle from './rules/tsMethodSignatureStyle.js'; import tsNoEmptyObjectType from './rules/tsNoEmptyObjectType.js'; +import tsNoUnnecessaryTemplateExpression from './rules/tsNoUnnecessaryTemplateExpression.js'; import tsPreferFunctionType from './rules/tsPreferFunctionType.js'; import typeFormatting from './rules/typeFormatting.js'; import validTypes from './rules/validTypes.js'; @@ -262,6 +263,7 @@ index.rules = { 'text-escaping': textEscaping, 'ts-method-signature-style': tsMethodSignatureStyle, 'ts-no-empty-object-type': tsNoEmptyObjectType, + 'ts-no-unnecessary-template-expression': tsNoUnnecessaryTemplateExpression, 'ts-prefer-function-type': tsPreferFunctionType, 'type-formatting': typeFormatting, 'valid-types': validTypes, @@ -355,6 +357,7 @@ const createRecommendedRuleset = (warnOrError, flatName) => { 'jsdoc/text-escaping': 'off', 'jsdoc/ts-method-signature-style': 'off', 'jsdoc/ts-no-empty-object-type': warnOrError, + 'jsdoc/ts-no-unnecessary-template-expression': 'off', 'jsdoc/ts-prefer-function-type': 'off', 'jsdoc/type-formatting': 'off', 'jsdoc/valid-types': warnOrError, diff --git a/src/rules.d.ts b/src/rules.d.ts index 889e57ece..48c3876bd 100644 --- a/src/rules.d.ts +++ b/src/rules.d.ts @@ -2955,6 +2955,18 @@ export interface Rules { /** Warns against use of the empty object type */ "jsdoc/ts-no-empty-object-type": []; + /** Catches unnecessary template expressions such as string expressions within a template literal. */ + "jsdoc/ts-no-unnecessary-template-expression": + | [] + | [ + { + /** + * Whether to enable the fixer. Defaults to `true`. + */ + enableFixer?: boolean; + } + ]; + /** Prefers function types over call signatures when there are no other properties. */ "jsdoc/ts-prefer-function-type": | [] diff --git a/src/rules/tsNoUnnecessaryTemplateExpression.js b/src/rules/tsNoUnnecessaryTemplateExpression.js new file mode 100644 index 000000000..3865059d5 --- /dev/null +++ b/src/rules/tsNoUnnecessaryTemplateExpression.js @@ -0,0 +1,130 @@ +import iterateJsdoc from '../iterateJsdoc.js'; +import { + rewireByParsedType, +} from '../jsdocUtils.js'; +import { + parse as parseType, + traverse, +} from '@es-joy/jsdoccomment'; + +export default iterateJsdoc(({ + context, + indent, + jsdoc, + settings, + utils, +}) => { + if (settings.mode !== 'typescript') { + return; + } + + const { + enableFixer = true, + } = context.options[0] ?? {}; + + /** + * @param {import('@es-joy/jsdoccomment').JsdocTagWithInline} tag + */ + const checkType = (tag) => { + const potentialType = tag.type; + /** @type {import('jsdoc-type-pratt-parser').RootResult} */ + let parsedType; + try { + parsedType = parseType( + /** @type {string} */ (potentialType), 'typescript', + ); + } catch { + return; + } + + traverse(parsedType, (nde, parentNode, property, index) => { + switch (nde.type) { + case 'JsdocTypeTemplateLiteral': { + const stringInterpolationIndex = nde.interpolations.findIndex((interpolation) => { + return interpolation.type === 'JsdocTypeStringValue'; + }); + if (stringInterpolationIndex > -1) { + utils.reportJSDoc( + 'Found an unnecessary string literal within a template.', + tag, + enableFixer ? () => { + nde.literals.splice( + stringInterpolationIndex, + 2, + nde.literals[stringInterpolationIndex] + + /** @type {import('jsdoc-type-pratt-parser').StringValueResult} */ + (nde.interpolations[stringInterpolationIndex]).value + + nde.literals[stringInterpolationIndex + 1], + ); + + nde.interpolations.splice( + stringInterpolationIndex, 1, + ); + + rewireByParsedType(jsdoc, tag, parsedType, indent); + } : null, + ); + } else if (nde.literals.length === 2 && nde.literals[0] === '' && + nde.literals[1] === '' + ) { + utils.reportJSDoc( + 'Found a lone template expression within a template.', + tag, + enableFixer ? () => { + const interpolation = nde.interpolations[0]; + + if (parentNode && property) { + if (typeof index === 'number') { + // @ts-expect-error Safe + parentNode[property][index] = interpolation; + } else { + // @ts-expect-error Safe + parentNode[property] = interpolation; + } + } else { + parsedType = interpolation; + } + + rewireByParsedType(jsdoc, tag, parsedType, indent); + } : null, + ); + } + } + } + }); + }; + + const tags = utils.filterTags(({ + tag, + }) => { + return Boolean(tag !== 'import' && utils.tagMightHaveTypePosition(tag)); + }); + + for (const tag of tags) { + if (tag.type) { + checkType(tag); + } + } +}, { + iterateAllJsdocs: true, + meta: { + docs: { + description: 'Catches unnecessary template expressions such as string expressions within a template literal.', + url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/ts-no-unnecessary-template-expression.md#repos-sticky-header', + }, + fixable: 'code', + schema: [ + { + additionalProperties: false, + properties: { + enableFixer: { + description: 'Whether to enable the fixer. Defaults to `true`.', + type: 'boolean', + }, + }, + type: 'object', + }, + ], + type: 'suggestion', + }, +}); diff --git a/test/rules/assertions/tsNoUnnecessaryTemplateExpression.js b/test/rules/assertions/tsNoUnnecessaryTemplateExpression.js new file mode 100644 index 000000000..c5c6328ed --- /dev/null +++ b/test/rules/assertions/tsNoUnnecessaryTemplateExpression.js @@ -0,0 +1,237 @@ +export default { + invalid: [ + { + code: ` + /** + * @type {\`A\${'B'}\`} + */ + `, + errors: [ + { + line: 3, + message: 'Found an unnecessary string literal within a template.', + }, + ], + output: ` + /** + * @type {\`AB\`} + */ + `, + }, + { + code: ` + /** + * @type {\`A\${'B'}\`} + */ + `, + errors: [ + { + line: 3, + message: 'Found an unnecessary string literal within a template.', + }, + ], + options: [ + { + enableFixer: false, + }, + ], + }, + { + code: ` + /** + * @type {(\`A\${'B'}\`)} + */ + `, + errors: [ + { + line: 3, + message: 'Found an unnecessary string literal within a template.', + }, + ], + output: ` + /** + * @type {(\`AB\`)} + */ + `, + }, + { + code: ` + /** + * @type {\`A\${'B'}\`|SomeType} + */ + `, + errors: [ + { + line: 3, + message: 'Found an unnecessary string literal within a template.', + }, + ], + output: ` + /** + * @type {\`AB\` | SomeType} + */ + `, + }, + { + code: ` + /** + * @type {\`\${B}\`} + */ + `, + errors: [ + { + line: 3, + message: 'Found a lone template expression within a template.', + }, + ], + output: ` + /** + * @type {B} + */ + `, + }, + { + code: ` + /** + * @type {\`\${B}\`} + */ + `, + errors: [ + { + line: 3, + message: 'Found a lone template expression within a template.', + }, + ], + options: [ + { + enableFixer: false, + }, + ], + }, + { + code: ` + /** + * @type {\`A\${'B'}\${'C'}\`} + */ + `, + errors: [ + { + line: 3, + message: 'Found an unnecessary string literal within a template.', + }, + ], + output: ` + /** + * @type {\`AB\${'C'}\`} + */ + `, + }, + { + code: ` + /** + * @type {\`A\${'B'}C\`} + */ + `, + errors: [ + { + line: 3, + message: 'Found an unnecessary string literal within a template.', + }, + ], + output: ` + /** + * @type {\`ABC\`} + */ + `, + }, + { + code: ` + /** + * @type {\`\${'B'}\`} + */ + `, + errors: [ + { + line: 3, + message: 'Found an unnecessary string literal within a template.', + }, + ], + output: ` + /** + * @type {\`B\`} + */ + `, + }, + { + code: ` + /** + * @type {(\`\${B}\`)} + */ + `, + errors: [ + { + line: 3, + message: 'Found a lone template expression within a template.', + }, + ], + output: ` + /** + * @type {(B)} + */ + `, + }, + { + code: ` + /** + * @type {\`\${B}\` | number} + */ + `, + errors: [ + { + line: 3, + message: 'Found a lone template expression within a template.', + }, + ], + output: ` + /** + * @type {B | number} + */ + `, + }, + ], + valid: [ + { + code: ` + /** + * @type {\`AB\`} + */ + `, + }, + { + code: ` + /** + * @type {\`A\${C}B\`} + */ + `, + }, + { + code: ` + /** + * @param {BadType<} someName + */ + `, + }, + { + code: ` + /** + * @param {\`A\${'B'}\`} someName + */ + `, + settings: { + jsdoc: { + mode: 'jsdoc', + }, + }, + }, + ], +}; diff --git a/test/rules/ruleNames.json b/test/rules/ruleNames.json index d0a71c7cd..4d738b848 100644 --- a/test/rules/ruleNames.json +++ b/test/rules/ruleNames.json @@ -69,6 +69,7 @@ "text-escaping", "ts-method-signature-style", "ts-no-empty-object-type", + "ts-no-unnecessary-template-expression", "ts-prefer-function-type", "type-formatting", "valid-types" From 75c81271e203efa25864f8faf880996d22a04cbd Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sun, 12 Oct 2025 07:09:59 -0700 Subject: [PATCH 153/189] fix(`valid-types`): reallow `const` `type` --- docs/rules/valid-types.md | 4 ++++ src/rules/validTypes.js | 2 +- test/rules/assertions/validTypes.js | 7 +++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/docs/rules/valid-types.md b/docs/rules/valid-types.md index 9929c1a28..9dc1b6d59 100644 --- a/docs/rules/valid-types.md +++ b/docs/rules/valid-types.md @@ -988,5 +988,9 @@ class Test { * @typedef {Object} module:src/core/Player~mediaFormat */ // Settings: {"jsdoc":{"mode":"jsdoc"}} + +let SettingName = /** @type {const} */ ({ + THEME: `theme`, +}) ```` diff --git a/src/rules/validTypes.js b/src/rules/validTypes.js index ff2e08375..3f635470f 100644 --- a/src/rules/validTypes.js +++ b/src/rules/validTypes.js @@ -366,7 +366,7 @@ export default iterateJsdoc(({ // VALID TYPE const hasTypePosition = mightHaveTypePosition === true && Boolean(tag.type); - if (hasTypePosition) { + if (hasTypePosition && (tag.type !== 'const' || tag.tag !== 'type')) { validTypeParsing(tag.type); } diff --git a/test/rules/assertions/validTypes.js b/test/rules/assertions/validTypes.js index 9ed7c7115..b806fd8ce 100644 --- a/test/rules/assertions/validTypes.js +++ b/test/rules/assertions/validTypes.js @@ -2030,5 +2030,12 @@ export default /** @type {import('../index.js').TestCases} */ ({ }, }, }, + { + code: ` + let SettingName = /** @type {const} */ ({ + THEME: \`theme\`, + }) + `, + }, ], }); From 335450af8545bf936f44d52685bc802c41d85a93 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sun, 12 Oct 2025 07:51:50 -0700 Subject: [PATCH 154/189] fix(`no-undefined-types`): allow global prefixes; fixes #1566 --- docs/rules/no-undefined-types.md | 5 +++++ src/rules/noUndefinedTypes.js | 9 ++++++++- test/rules/assertions/noUndefinedTypes.js | 13 +++++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/docs/rules/no-undefined-types.md b/docs/rules/no-undefined-types.md index b90322be3..0b9eaa7ac 100644 --- a/docs/rules/no-undefined-types.md +++ b/docs/rules/no-undefined-types.md @@ -1092,5 +1092,10 @@ const getValue = () => {}; */ const defineCustomElement = (tagName, component) => { }; + +class Storage { + /** @type {globalThis.localStorage} */ + #storage +} ```` diff --git a/src/rules/noUndefinedTypes.js b/src/rules/noUndefinedTypes.js index 3bb9eb9a1..af80beff6 100644 --- a/src/rules/noUndefinedTypes.js +++ b/src/rules/noUndefinedTypes.js @@ -20,6 +20,10 @@ const extraTypes = [ 'Array', 'Object', 'RegExp', 'Date', 'Function', 'Intl', ]; +const globalTypes = [ + 'globalThis', 'global', 'window', 'self', +]; + const typescriptGlobals = [ // https://www.typescriptlang.org/docs/handbook/utility-types.html 'Awaited', @@ -470,6 +474,7 @@ export default iterateJsdoc(({ parsedType, tag, } of tagsWithTypes) { + // eslint-disable-next-line complexity -- Refactor traverse(parsedType, (nde, parentNode) => { /** * @type {import('jsdoc-type-pratt-parser').NameResult & { @@ -501,8 +506,10 @@ export default iterateJsdoc(({ !importTags.includes(val) && !extraTypes.includes(val) && !typedefDeclarations.includes(val) && + !globalTypes.includes(val) && currNode && 'right' in currNode && - currNode.right?.type === 'JsdocTypeProperty') { + currNode.right?.type === 'JsdocTypeProperty' + ) { val = val + '.' + currNode.right.value; } } while (currNode?.type === 'JsdocTypeNamePath'); diff --git a/test/rules/assertions/noUndefinedTypes.js b/test/rules/assertions/noUndefinedTypes.js index 451a96d9a..c4ec1636e 100644 --- a/test/rules/assertions/noUndefinedTypes.js +++ b/test/rules/assertions/noUndefinedTypes.js @@ -1857,5 +1857,18 @@ export default /** @type {import('../index.js').TestCases} */ ({ }; `, }, + { + code: ` + class Storage { + /** @type {globalThis.localStorage} */ + #storage + } + `, + languageOptions: { + globals: { + localStorage: 'readonly', + }, + }, + }, ], }); From 0b3cbeebae43c3a7e18050614a0235e0345047f6 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Mon, 13 Oct 2025 17:36:22 -0700 Subject: [PATCH 155/189] docs(`reject-function-type`): add more examples; closes #1568 Co-credit @TheJaredWilcurt --- docs/rules/reject-function-type.md | 32 ++++++++++++++++--- test/rules/assertions/rejectFunctionType.js | 35 ++++++++++++++++++--- 2 files changed, 59 insertions(+), 8 deletions(-) diff --git a/docs/rules/reject-function-type.md b/docs/rules/reject-function-type.md index f78016379..e086b8bc2 100644 --- a/docs/rules/reject-function-type.md +++ b/docs/rules/reject-function-type.md @@ -22,15 +22,17 @@ The following patterns are considered problems: ````ts /** - * @param {Function} abc + * @param {Function} fooBar */ -function quux () {} +function quux (fooBar) { + console.log(fooBar(3)); +} // Message: Prefer a more specific type to `Function` /** * @param {string|Array} abc */ -function quux () {} +function buzz (abc) {} // Message: Prefer a more specific type to `Function` ```` @@ -46,6 +48,28 @@ The following patterns are not considered problems: /** * @param {SomeType} abc */ -function quux () {} +function quux (abc) {} + +// To avoid referencing a generic Function, define a callback +// with its inputs/outputs and a name. +/** + * @callback FOOBAR + * @param {number} baz + * @return {number} + */ + + +// Then reference the callback name as the type. +/** + * @param {FOOBAR} fooBar + */ +function quux (fooBar) { + console.log(fooBar(3)); +} + +/** + * @param {string|Array} abc + */ +function buzz (abc) {} ```` diff --git a/test/rules/assertions/rejectFunctionType.js b/test/rules/assertions/rejectFunctionType.js index f8297ff8c..e11d41aab 100644 --- a/test/rules/assertions/rejectFunctionType.js +++ b/test/rules/assertions/rejectFunctionType.js @@ -3,9 +3,11 @@ export default { { code: ` /** - * @param {Function} abc + * @param {Function} fooBar */ - function quux () {} + function quux (fooBar) { + console.log(fooBar(3)); + } `, errors: [ { @@ -19,7 +21,7 @@ export default { /** * @param {string|Array} abc */ - function quux () {} + function buzz (abc) {} `, errors: [ { @@ -35,7 +37,32 @@ export default { /** * @param {SomeType} abc */ - function quux () {} + function quux (abc) {} + `, + }, + { + code: ` + // To avoid referencing a generic Function, define a callback + // with its inputs/outputs and a name. + /** + * @callback FOOBAR + * @param {number} baz + * @return {number} + */ + + + // Then reference the callback name as the type. + /** + * @param {FOOBAR} fooBar + */ + function quux (fooBar) { + console.log(fooBar(3)); + } + + /** + * @param {string|Array} abc + */ + function buzz (abc) {} `, }, ], From 4349209a7d814d6832155189e3e0888de2391efb Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 14 Oct 2025 12:47:28 -0700 Subject: [PATCH 156/189] fix(`prefer-import-tag`): ensure import is a valid identifier; fixes #1572 --- docs/rules/prefer-import-tag.md | 9 +++++ package.json | 1 + pnpm-lock.yaml | 24 ++++++++++++++ src/rules/preferImportTag.js | 15 ++++++--- test/rules/assertions/preferImportTag.js | 42 ++++++++++++++++++++++++ 5 files changed, 86 insertions(+), 5 deletions(-) diff --git a/docs/rules/prefer-import-tag.md b/docs/rules/prefer-import-tag.md index 161609596..695e10614 100644 --- a/docs/rules/prefer-import-tag.md +++ b/docs/rules/prefer-import-tag.md @@ -315,6 +315,15 @@ let foo; /** @type {import('foo').default} */ let foo; // Message: Inline `import()` found; prefer `@import` + +/** @type { import('@typescript-eslint/utils').TSESLint.FlatConfig.Config['rules'] } */ +// Message: Inline `import()` found; prefer `@import` + +/** @type { import('node:zlib').createGzip } */ +// Message: Inline `import()` found; prefer `@import` + +/** @type { import('./lib/someFile.js').someImport } */ +// Message: Inline `import()` found; prefer `@import` ```` diff --git a/package.json b/package.json index c7f326a58..201c4f83a 100644 --- a/package.json +++ b/package.json @@ -67,6 +67,7 @@ "replace": "^1.2.2", "rimraf": "^6.0.1", "semantic-release": "^24.2.9", + "to-valid-identifier": "^0.1.1", "typescript": "5.9.3", "typescript-eslint": "^8.46.0" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 82f4a4f0f..92275e07b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -189,6 +189,9 @@ importers: semantic-release: specifier: ^24.2.9 version: 24.2.9(typescript@5.9.3) + to-valid-identifier: + specifier: ^0.1.1 + version: 0.1.1 typescript: specifier: 5.9.3 version: 5.9.3 @@ -1187,6 +1190,10 @@ packages: peerDependencies: semantic-release: '>=20.1.0' + '@sindresorhus/base62@0.1.0': + resolution: {integrity: sha512-BNjiImatCV+CUdvzSbFWzZIZqOddg6qn0Ag6/8Ty5G09oOtvxidZ5tkPQW2XHpzGVkB3eHfdYGwrWNy2nUFOwQ==} + engines: {node: '>=18'} + '@sindresorhus/is@4.6.0': resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} @@ -4354,6 +4361,10 @@ packages: resolution: {integrity: sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg==} engines: {node: '>=0.10.5'} + reserved-identifiers@1.0.0: + resolution: {integrity: sha512-h0bP2Katmvf3hv4Z3WtDl4+6xt/OglQ2Xa6TnhZ/Rm9/7IH1crXQqMwD4J2ngKBonVv+fB55zfGgNDAmsevLVQ==} + engines: {node: '>=18'} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -4787,6 +4798,10 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + to-valid-identifier@0.1.1: + resolution: {integrity: sha512-/m+BsP+oLrdYptSVuWdRanXBD0N1qiyx2GtAunpPz+TRPENw7IpEndqyPTwxe67wLiu16ZinauXESdOL1eDYBQ==} + engines: {node: '>=18'} + tough-cookie@2.5.0: resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} engines: {node: '>=0.8'} @@ -6542,6 +6557,8 @@ snapshots: transitivePeerDependencies: - supports-color + '@sindresorhus/base62@0.1.0': {} + '@sindresorhus/is@4.6.0': {} '@sindresorhus/merge-streams@4.0.0': {} @@ -10032,6 +10049,8 @@ snapshots: requireindex@1.1.0: {} + reserved-identifiers@1.0.0: {} + resolve-from@4.0.0: {} resolve-from@5.0.0: {} @@ -10546,6 +10565,11 @@ snapshots: dependencies: is-number: 7.0.0 + to-valid-identifier@0.1.1: + dependencies: + '@sindresorhus/base62': 0.1.0 + reserved-identifiers: 1.0.0 + tough-cookie@2.5.0: dependencies: psl: 1.15.0 diff --git a/src/rules/preferImportTag.js b/src/rules/preferImportTag.js index 216e1f204..f5f3bf12f 100644 --- a/src/rules/preferImportTag.js +++ b/src/rules/preferImportTag.js @@ -13,6 +13,7 @@ import { import { parseImportsExports, } from 'parse-imports-exports'; +import toValidIdentifier from 'to-valid-identifier'; export default iterateJsdoc(({ context, @@ -133,10 +134,11 @@ export default iterateJsdoc(({ } /** - * @param {string} matchingName + * @param {string} name * @param {string[]} extrPathSegments */ - const getFixer = (matchingName, extrPathSegments) => { + const getFixer = (name, extrPathSegments) => { + const matchingName = toValidIdentifier(name); return () => { /** @type {import('jsdoc-type-pratt-parser').NamePathResult|undefined} */ let node = nodes.at(0); @@ -369,7 +371,7 @@ export default iterateJsdoc(({ return fixer.insertTextBefore( // @ts-expect-error Ok commentNodes[0] ?? programNode, - `/** @import * as ${element.value} from '${element.value}'; */${ + `/** @import * as ${toValidIdentifier(element.value)} from '${element.value}'; */${ commentNodes[0] ? '\n' + indent : '' }`, ); @@ -422,10 +424,13 @@ export default iterateJsdoc(({ // @ts-expect-error Ok commentNodes[0] ?? programNode, outputType === 'namespaced-import' ? - `/** @import * as ${element.value} from '${element.value}'; */${ + `/** @import * as ${toValidIdentifier(element.value)} from '${element.value}'; */${ commentNodes[0] ? '\n' + indent : '' }` : - `/** @import { ${pathSegments.at(-1)} } from '${element.value}'; */${ + `/** @import { ${toValidIdentifier( + /* c8 ignore next -- TS */ + pathSegments.at(-1) ?? '', + )} } from '${element.value}'; */${ commentNodes[0] ? '\n' + indent : '' }`, ); diff --git a/test/rules/assertions/preferImportTag.js b/test/rules/assertions/preferImportTag.js index 575cbfc1d..30a5d67f6 100644 --- a/test/rules/assertions/preferImportTag.js +++ b/test/rules/assertions/preferImportTag.js @@ -906,6 +906,48 @@ let foo; let foo; `, }, + { + code: ` + /** @type { import('@typescript-eslint/utils').TSESLint.FlatConfig.Config['rules'] } */ + `, + errors: [ + { + line: 2, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + output: `/** @import * as $12$typescript$j$eslint$l$utils from '@typescript-eslint/utils'; */ + /** @type {$12$typescript$j$eslint$l$utils.TSESLint.FlatConfig.Config['rules']} */ + `, + }, + { + code: ` + /** @type { import('node:zlib').createGzip } */ + `, + errors: [ + { + line: 2, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + output: `/** @import * as node$w$zlib from 'node:zlib'; */ + /** @type {node$w$zlib.createGzip} */ + `, + }, + { + code: ` + /** @type { import('./lib/someFile.js').someImport } */ + `, + errors: [ + { + line: 2, + message: 'Inline `import()` found; prefer `@import`', + }, + ], + output: `/** @import * as $k$$l$lib$l$someFile$k$js from './lib/someFile.js'; */ + /** @type {$k$$l$lib$l$someFile$k$js.someImport} */ + `, + }, ], valid: [ { From 89d37d00f2875be075997346efc9e2fed32c6523 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 14 Oct 2025 20:55:45 -0700 Subject: [PATCH 157/189] fix: `to-valid-identifier` should be a dependency; fixes #1574 --- package.json | 4 ++-- pnpm-lock.yaml | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 201c4f83a..293897236 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,8 @@ "object-deep-merge": "^1.0.5", "parse-imports-exports": "^0.2.4", "semver": "^7.7.3", - "spdx-expression-parse": "^4.0.0" + "spdx-expression-parse": "^4.0.0", + "to-valid-identifier": "^0.1.1" }, "description": "JSDoc linting rules for ESLint.", "devDependencies": { @@ -67,7 +68,6 @@ "replace": "^1.2.2", "rimraf": "^6.0.1", "semantic-release": "^24.2.9", - "to-valid-identifier": "^0.1.1", "typescript": "5.9.3", "typescript-eslint": "^8.46.0" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 92275e07b..12beb8dc7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -47,6 +47,9 @@ importers: spdx-expression-parse: specifier: ^4.0.0 version: 4.0.0 + to-valid-identifier: + specifier: ^0.1.1 + version: 0.1.1 devDependencies: '@arethetypeswrong/cli': specifier: ^0.18.2 @@ -189,9 +192,6 @@ importers: semantic-release: specifier: ^24.2.9 version: 24.2.9(typescript@5.9.3) - to-valid-identifier: - specifier: ^0.1.1 - version: 0.1.1 typescript: specifier: 5.9.3 version: 5.9.3 From 93bb1f44998850200f168b6052365d76a17723a1 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Thu, 16 Oct 2025 14:43:30 -0700 Subject: [PATCH 158/189] chore: update to-valid-identifier, devDeps.; lint --- package.json | 18 +- pnpm-lock.yaml | 382 +++++++++++++++++-------------- src/WarnSettings.js | 4 +- src/iterateJsdoc.js | 4 +- src/rules/requireFileOverview.js | 2 +- 5 files changed, 221 insertions(+), 189 deletions(-) diff --git a/package.json b/package.json index 293897236..073758556 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "parse-imports-exports": "^0.2.4", "semver": "^7.7.3", "spdx-expression-parse": "^4.0.0", - "to-valid-identifier": "^0.1.1" + "to-valid-identifier": "^1.0.0" }, "description": "JSDoc linting rules for ESLint.", "devDependencies": { @@ -33,8 +33,8 @@ "@eslint/core": "^0.16.0", "@hkdobrev/run-if-changed": "^0.6.3", "@semantic-release/commit-analyzer": "^13.0.1", - "@semantic-release/github": "^11.0.6", - "@semantic-release/npm": "^12.0.2", + "@semantic-release/github": "^12.0.0", + "@semantic-release/npm": "^13.0.0", "@types/chai": "^5.2.2", "@types/debug": "^4.1.12", "@types/espree": "^10.1.0", @@ -42,10 +42,10 @@ "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@types/mocha": "^10.0.10", - "@types/node": "^24.7.0", + "@types/node": "^24.8.0", "@types/semver": "^7.7.1", "@types/spdx-expression-parse": "^3.0.5", - "@typescript-eslint/types": "^8.46.0", + "@typescript-eslint/types": "^8.46.1", "babel-plugin-add-module-exports": "^1.0.4", "babel-plugin-istanbul": "^7.0.1", "babel-plugin-transform-import-meta": "^2.3.3", @@ -59,17 +59,17 @@ "glob": "^11.0.3", "globals": "^16.4.0", "husky": "^9.1.7", - "jsdoc-type-pratt-parser": "^6.10.0", + "jsdoc-type-pratt-parser": "^6.11.0", "json-schema": "^0.4.0", "json-schema-to-typescript": "^15.0.4", - "lint-staged": "^16.2.3", + "lint-staged": "^16.2.4", "mocha": "^11.7.4", "open-editor": "^5.1.0", "replace": "^1.2.2", "rimraf": "^6.0.1", - "semantic-release": "^24.2.9", + "semantic-release": "^25.0.0", "typescript": "5.9.3", - "typescript-eslint": "^8.46.0" + "typescript-eslint": "^8.46.1" }, "engines": { "node": ">=20.11.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 12beb8dc7..eb7b47c4d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -48,8 +48,8 @@ importers: specifier: ^4.0.0 version: 4.0.0 to-valid-identifier: - specifier: ^0.1.1 - version: 0.1.1 + specifier: ^1.0.0 + version: 1.0.0 devDependencies: '@arethetypeswrong/cli': specifier: ^0.18.2 @@ -86,13 +86,13 @@ importers: version: 0.6.3(typescript@5.9.3) '@semantic-release/commit-analyzer': specifier: ^13.0.1 - version: 13.0.1(semantic-release@24.2.9(typescript@5.9.3)) + version: 13.0.1(semantic-release@25.0.0(typescript@5.9.3)) '@semantic-release/github': - specifier: ^11.0.6 - version: 11.0.6(semantic-release@24.2.9(typescript@5.9.3)) + specifier: ^12.0.0 + version: 12.0.0(semantic-release@25.0.0(typescript@5.9.3)) '@semantic-release/npm': - specifier: ^12.0.2 - version: 12.0.2(semantic-release@24.2.9(typescript@5.9.3)) + specifier: ^13.0.0 + version: 13.0.0(semantic-release@25.0.0(typescript@5.9.3)) '@types/chai': specifier: ^5.2.2 version: 5.2.2 @@ -115,8 +115,8 @@ importers: specifier: ^10.0.10 version: 10.0.10 '@types/node': - specifier: ^24.7.0 - version: 24.7.0 + specifier: ^24.8.0 + version: 24.8.0 '@types/semver': specifier: ^7.7.1 version: 7.7.1 @@ -124,8 +124,8 @@ importers: specifier: ^3.0.5 version: 3.0.5 '@typescript-eslint/types': - specifier: ^8.46.0 - version: 8.46.0 + specifier: ^8.46.1 + version: 8.46.1 babel-plugin-add-module-exports: specifier: ^1.0.4 version: 1.0.4 @@ -152,7 +152,7 @@ importers: version: 9.37.0(jiti@2.6.1) eslint-config-canonical: specifier: ^45.0.1 - version: 45.0.1(@types/node@24.7.0)(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + version: 45.0.1(@types/node@24.8.0)(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) gitdown: specifier: ^4.1.1 version: 4.1.1(re2@1.20.9) @@ -166,8 +166,8 @@ importers: specifier: ^9.1.7 version: 9.1.7 jsdoc-type-pratt-parser: - specifier: ^6.10.0 - version: 6.10.0 + specifier: ^6.11.0 + version: 6.11.0 json-schema: specifier: ^0.4.0 version: 0.4.0 @@ -175,8 +175,8 @@ importers: specifier: ^15.0.4 version: 15.0.4 lint-staged: - specifier: ^16.2.3 - version: 16.2.3 + specifier: ^16.2.4 + version: 16.2.4 mocha: specifier: ^11.7.4 version: 11.7.4 @@ -190,14 +190,14 @@ importers: specifier: ^6.0.1 version: 6.0.1 semantic-release: - specifier: ^24.2.9 - version: 24.2.9(typescript@5.9.3) + specifier: ^25.0.0 + version: 25.0.0(typescript@5.9.3) typescript: specifier: 5.9.3 version: 5.9.3 typescript-eslint: - specifier: ^8.46.0 - version: 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + specifier: ^8.46.1 + version: 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) packages: @@ -1172,15 +1172,15 @@ packages: resolution: {integrity: sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==} engines: {node: '>=18'} - '@semantic-release/github@11.0.6': - resolution: {integrity: sha512-ctDzdSMrT3H+pwKBPdyCPty6Y47X8dSrjd3aPZ5KKIKKWTwZBE9De8GtsH3TyAlw3Uyo2stegMx6rJMXKpJwJA==} - engines: {node: '>=20.8.1'} + '@semantic-release/github@12.0.0': + resolution: {integrity: sha512-louWFjzZ+1dogfJTY8IuJuBcBUOTliYhBUYNcomnTfj0i959wtRQbr1POgdCoTHK7ut4N/0LNlYTH8SvSJM3hg==} + engines: {node: ^22.14.0 || >= 24.10.0} peerDependencies: semantic-release: '>=24.1.0' - '@semantic-release/npm@12.0.2': - resolution: {integrity: sha512-+M9/Lb35IgnlUO6OSJ40Ie+hUsZLuph2fqXC/qrKn0fMvUU/jiCjpoL6zEm69vzcmaZJ8yNKtMBEKHWN49WBbQ==} - engines: {node: '>=20.8.1'} + '@semantic-release/npm@13.0.0': + resolution: {integrity: sha512-7RIx9nUdUekYbIZ0dG7k7G/iSvUCZb03LmmBPFqAQEhPVC+BnHfhFxj5ewSNP6zMUsYaEQSckcOhKD8AuS/EzQ==} + engines: {node: ^22.14.0 || >= 24.10.0} peerDependencies: semantic-release: '>=20.1.0' @@ -1190,8 +1190,8 @@ packages: peerDependencies: semantic-release: '>=20.1.0' - '@sindresorhus/base62@0.1.0': - resolution: {integrity: sha512-BNjiImatCV+CUdvzSbFWzZIZqOddg6qn0Ag6/8Ty5G09oOtvxidZ5tkPQW2XHpzGVkB3eHfdYGwrWNy2nUFOwQ==} + '@sindresorhus/base62@1.0.0': + resolution: {integrity: sha512-TeheYy0ILzBEI/CO55CP6zJCSdSWeRtGnHy8U8dWSUH4I68iqTsy7HkMktR4xakThc9jotkPQUXT4ITdbV7cHA==} engines: {node: '>=18'} '@sindresorhus/is@4.6.0': @@ -1250,8 +1250,8 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@24.7.0': - resolution: {integrity: sha512-IbKooQVqUBrlzWTi79E8Fw78l8k1RNtlDDNWsFZs7XonuQSJ8oNYfEeclhprUldXISRMLzBpILuKgPlIxm+/Yw==} + '@types/node@24.8.0': + resolution: {integrity: sha512-5x08bUtU8hfboMTrJ7mEO4CpepS9yBwAqcL52y86SWNmbPX8LVbNs3EP4cNrIZgdjk2NAlP2ahNihozpoZIxSg==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -1273,11 +1273,11 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/eslint-plugin@8.46.0': - resolution: {integrity: sha512-hA8gxBq4ukonVXPy0OKhiaUh/68D0E88GSmtC1iAEnGaieuDi38LhS7jdCHRLi6ErJBNDGCzvh5EnzdPwUc0DA==} + '@typescript-eslint/eslint-plugin@8.46.1': + resolution: {integrity: sha512-rUsLh8PXmBjdiPY+Emjz9NX2yHvhS11v0SR6xNJkm5GM1MO9ea/1GoDKlHHZGrOJclL/cZ2i/vRUYVtjRhrHVQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.46.0 + '@typescript-eslint/parser': ^8.46.1 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' @@ -1288,8 +1288,8 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.46.0': - resolution: {integrity: sha512-n1H6IcDhmmUEG7TNVSspGmiHHutt7iVKtZwRppD7e04wha5MrkV1h3pti9xQLcCMt6YWsncpoT0HMjkH1FNwWQ==} + '@typescript-eslint/parser@8.46.1': + resolution: {integrity: sha512-6JSSaBZmsKvEkbRUkf7Zj7dru/8ZCrJxAqArcLaVMee5907JdtEbKGsZ7zNiIm/UAkpGUkaSMZEXShnN2D1HZA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -1301,8 +1301,8 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.46.0': - resolution: {integrity: sha512-OEhec0mH+U5Je2NZOeK1AbVCdm0ChyapAyTeXVIYTPXDJ3F07+cu87PPXcGoYqZ7M9YJVvFnfpGg1UmCIqM+QQ==} + '@typescript-eslint/project-service@8.46.1': + resolution: {integrity: sha512-FOIaFVMHzRskXr5J4Jp8lFVV0gz5ngv3RHmn+E4HYxSJ3DgDzU7fVI1/M7Ijh1zf6S7HIoaIOtln1H5y8V+9Zg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' @@ -1311,8 +1311,8 @@ packages: resolution: {integrity: sha512-clmm8XSNj/1dGvJeO6VGH7EUSeA0FMs+5au/u3lrA3KfG8iJ4u8ym9/j2tTEoacAffdW1TVUzXO30W1JTJS7dA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.46.0': - resolution: {integrity: sha512-lWETPa9XGcBes4jqAMYD9fW0j4n6hrPtTJwWDmtqgFO/4HF4jmdH/Q6wggTw5qIT5TXjKzbt7GsZUBnWoO3dqw==} + '@typescript-eslint/scope-manager@8.46.1': + resolution: {integrity: sha512-weL9Gg3/5F0pVQKiF8eOXFZp8emqWzZsOJuWRUNtHT+UNV2xSJegmpCNQHy37aEQIbToTq7RHKhWvOsmbM680A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/tsconfig-utils@8.45.0': @@ -1321,8 +1321,8 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/tsconfig-utils@8.46.0': - resolution: {integrity: sha512-WrYXKGAHY836/N7zoK/kzi6p8tXFhasHh8ocFL9VZSAkvH956gfeRfcnhs3xzRy8qQ/dq3q44v1jvQieMFg2cw==} + '@typescript-eslint/tsconfig-utils@8.46.1': + resolution: {integrity: sha512-X88+J/CwFvlJB+mK09VFqx5FE4H5cXD+H/Bdza2aEWkSb8hnWIQorNcscRl4IEo1Cz9VI/+/r/jnGWkbWPx54g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' @@ -1334,8 +1334,8 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.46.0': - resolution: {integrity: sha512-hy+lvYV1lZpVs2jRaEYvgCblZxUoJiPyCemwbQZ+NGulWkQRy0HRPYAoef/CNSzaLt+MLvMptZsHXHlkEilaeg==} + '@typescript-eslint/type-utils@8.46.1': + resolution: {integrity: sha512-+BlmiHIiqufBxkVnOtFwjah/vrkF4MtKKvpXrKSPLCkCtAp8H01/VV43sfqA98Od7nJpDcFnkwgyfQbOG0AMvw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -1345,8 +1345,8 @@ packages: resolution: {integrity: sha512-WugXLuOIq67BMgQInIxxnsSyRLFxdkJEJu8r4ngLR56q/4Q5LrbfkFRH27vMTjxEK8Pyz7QfzuZe/G15qQnVRA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.46.0': - resolution: {integrity: sha512-bHGGJyVjSE4dJJIO5yyEWt/cHyNwga/zXGJbJJ8TiO01aVREK6gCTu3L+5wrkb1FbDkQ+TKjMNe9R/QQQP9+rA==} + '@typescript-eslint/types@8.46.1': + resolution: {integrity: sha512-C+soprGBHwWBdkDpbaRC4paGBrkIXxVlNohadL5o0kfhsXqOC6GYH2S/Obmig+I0HTDl8wMaRySwrfrXVP8/pQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@8.45.0': @@ -1355,8 +1355,8 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/typescript-estree@8.46.0': - resolution: {integrity: sha512-ekDCUfVpAKWJbRfm8T1YRrCot1KFxZn21oV76v5Fj4tr7ELyk84OS+ouvYdcDAwZL89WpEkEj2DKQ+qg//+ucg==} + '@typescript-eslint/typescript-estree@8.46.1': + resolution: {integrity: sha512-uIifjT4s8cQKFQ8ZBXXyoUODtRoAd7F7+G8MKmtzj17+1UbdzFl52AzRyZRyKqPHhgzvXunnSckVu36flGy8cg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' @@ -1368,8 +1368,8 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.46.0': - resolution: {integrity: sha512-nD6yGWPj1xiOm4Gk0k6hLSZz2XkNXhuYmyIrOWcHoPuAhjT9i5bAG+xbWPgFeNR8HPHHtpNKdYUXJl/D3x7f5g==} + '@typescript-eslint/utils@8.46.1': + resolution: {integrity: sha512-vkYUy6LdZS7q1v/Gxb2Zs7zziuXN0wxqsetJdeZdRe/f5dwJFglmuvZBfTUivCtjH725C1jWCDfpadadD95EDQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -1379,8 +1379,8 @@ packages: resolution: {integrity: sha512-qsaFBA3e09MIDAGFUrTk+dzqtfv1XPVz8t8d1f0ybTzrCY7BKiMC5cjrl1O/P7UmHsNyW90EYSkU/ZWpmXelag==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.46.0': - resolution: {integrity: sha512-FrvMpAK+hTbFy7vH5j1+tMYHMSKLE6RzluFJlkFNKD0p9YsUT75JlBSmr5so3QRzvMwU5/bIEdeNrxm8du8l3Q==} + '@typescript-eslint/visitor-keys@8.46.1': + resolution: {integrity: sha512-ptkmIf2iDkNUjdeu2bQqhFPV1m6qTnFFjg7PPDjxKWaMaP0Z6I9l30Jr3g5QqbZGdw8YdYvLp+XnqnWWZOg/NA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@unrs/resolver-binding-android-arm-eabi@1.11.1': @@ -1885,6 +1885,10 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} + cliui@9.0.1: + resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} + engines: {node: '>=20'} + clone-regexp@3.0.0: resolution: {integrity: sha512-ujdnoq2Kxb8s3ItNBtnYeXdm07FcU0u8ARAT1lQ2YdMwQC+cdiXX8KoqMVuglztILivceTtp4ivqGSmEmhBUJw==} engines: {node: '>=12'} @@ -3029,9 +3033,9 @@ packages: resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} engines: {node: ^16.14.0 || >=18.0.0} - hosted-git-info@8.1.0: - resolution: {integrity: sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==} - engines: {node: ^18.17.0 || >=20.5.0} + hosted-git-info@9.0.2: + resolution: {integrity: sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==} + engines: {node: ^20.17.0 || >=22.9.0} html-entities@2.6.0: resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==} @@ -3437,6 +3441,10 @@ packages: resolution: {integrity: sha512-+LexoTRyYui5iOhJGn13N9ZazL23nAHGkXsa1p/C8yeq79WRfLBag6ZZ0FQG2aRoc9yfo59JT9EYCQonOkHKkQ==} engines: {node: '>=20.0.0'} + jsdoc-type-pratt-parser@6.11.0: + resolution: {integrity: sha512-c3jH8e79MgFCpyG+3JHAV0PiuOxrTId+Vq86smLNfJZNuG/MCfzJ02I5FhBjamjl3LEHY+ForykjAbk+m8Vd9g==} + engines: {node: '>=20.0.0'} + jsdom@6.5.1: resolution: {integrity: sha512-KeCN3yqR+MmjAZDnVZgIaL2tP9BxSFlsYZw9Z+zy64+jJzHc1m8ruccb83Qe8AG0xKUjpo2kxEGFCMtiF4MmAg==} @@ -3521,8 +3529,8 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - lint-staged@16.2.3: - resolution: {integrity: sha512-1OnJEESB9zZqsp61XHH2fvpS1es3hRCxMplF/AJUDa8Ho8VrscYDIuxGrj3m8KPXbcWZ8fT9XTMUhEQmOVKpKw==} + lint-staged@16.2.4: + resolution: {integrity: sha512-Pkyr/wd90oAyXk98i/2KwfkIhoYQUMtss769FIT9hFM5ogYZwrk+GRE46yKXSg2ZGhcJ1p38Gf5gmI5Ohjg2yg==} engines: {node: '>=20.17'} hasBin: true @@ -3782,8 +3790,8 @@ packages: nan@2.23.0: resolution: {integrity: sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ==} - nano-spawn@1.0.3: - resolution: {integrity: sha512-jtpsQDetTnvS2Ts1fiRdci5rx0VYws5jGyC+4IYOTnIQ/wwdf6JdomlHBwqC3bJYOvaKu0C2GSZ1A60anrYpaA==} + nano-spawn@2.0.0: + resolution: {integrity: sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw==} engines: {node: '>=20.17'} napi-postinstall@0.3.3: @@ -3861,9 +3869,9 @@ packages: resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} engines: {node: '>=18'} - npm@10.9.4: - resolution: {integrity: sha512-OnUG836FwboQIbqtefDNlyR0gTHzIfwRfE3DuiNewBvnMnWEpB0VEXwBlFVgqpNzIgYo/MHh3d2Hel/pszapAA==} - engines: {node: ^18.17.0 || >=20.5.0} + npm@11.6.2: + resolution: {integrity: sha512-7iKzNfy8lWYs3zq4oFPa8EXZz5xt9gQNKJZau3B1ErLBb6bF7sBJ00x09485DOvRT2l5Gerbl3VlZNT57MxJVA==} + engines: {node: ^20.17.0 || >=22.9.0} hasBin: true bundledDependencies: - '@isaacs/string-locale-compare' @@ -3895,7 +3903,6 @@ packages: - libnpmdiff - libnpmexec - libnpmfund - - libnpmhook - libnpmorg - libnpmpack - libnpmpublish @@ -3909,7 +3916,6 @@ packages: - ms - node-gyp - nopt - - normalize-package-data - npm-audit-report - npm-install-checks - npm-package-arg @@ -3933,7 +3939,6 @@ packages: - treeverse - validate-npm-package-name - which - - write-file-atomic nwmatcher@1.4.4: resolution: {integrity: sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==} @@ -4445,9 +4450,9 @@ packages: resolution: {integrity: sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==} engines: {node: ^14.0.0 || >=16.0.0} - semantic-release@24.2.9: - resolution: {integrity: sha512-phCkJ6pjDi9ANdhuF5ElS10GGdAKY6R1Pvt9lT3SFhOwM4T7QZE7MLpBDbNruUx/Q3gFD92/UOFringGipRqZA==} - engines: {node: '>=20.8.1'} + semantic-release@25.0.0: + resolution: {integrity: sha512-JL2hY7b1hBli5FS98nAXH0OwfRsgdywuUVhKktyJOHu9tUO0wJGWNpQL69SDhJ5Uwp63rtIvGvy7ZDy4C3RsXg==} + engines: {node: ^22.14.0 || >= 24.10.0} hasBin: true semver-compare@1.0.0: @@ -4798,9 +4803,9 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - to-valid-identifier@0.1.1: - resolution: {integrity: sha512-/m+BsP+oLrdYptSVuWdRanXBD0N1qiyx2GtAunpPz+TRPENw7IpEndqyPTwxe67wLiu16ZinauXESdOL1eDYBQ==} - engines: {node: '>=18'} + to-valid-identifier@1.0.0: + resolution: {integrity: sha512-41wJyvKep3yT2tyPqX/4blcfybknGB4D+oETKLs7Q76UiPqRpUJK3hr1nxelyYO0PHKVzJwlu0aCeEAsGI6rpw==} + engines: {node: '>=20'} tough-cookie@2.5.0: resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} @@ -4881,8 +4886,8 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} - typescript-eslint@8.46.0: - resolution: {integrity: sha512-6+ZrB6y2bT2DX3K+Qd9vn7OFOJR+xSLDj+Aw/N3zBwUt27uTw2sw2TE2+UcY1RiyBZkaGbTkVg9SSdPNUG6aUw==} + typescript-eslint@8.46.1: + resolution: {integrity: sha512-VHgijW803JafdSsDO8I761r3SHrgk4T00IdyQ+/UsthtgPRsBWQLqoSxOolxTpxRKi1kGXK0bSz4CoAc9ObqJA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -5148,6 +5153,10 @@ packages: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} + yargs-parser@22.0.0: + resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + yargs-unparser@2.0.0: resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} engines: {node: '>=10'} @@ -5164,6 +5173,10 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} + yargs@18.0.0: + resolution: {integrity: sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -5978,7 +5991,7 @@ snapshots: '@es-joy/jsdoccomment@0.50.2': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.46.0 + '@typescript-eslint/types': 8.46.1 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 4.1.0 @@ -5986,7 +5999,7 @@ snapshots: '@es-joy/jsdoccomment@0.62.0': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.46.0 + '@typescript-eslint/types': 8.46.1 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 5.9.2 @@ -5994,7 +6007,7 @@ snapshots: '@es-joy/jsdoccomment@0.76.0': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.46.0 + '@typescript-eslint/types': 8.46.1 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 6.10.0 @@ -6056,7 +6069,7 @@ snapshots: '@fastify/busboy@3.2.0': {} - '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.7.0)(eslint@9.37.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3)': + '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.8.0)(eslint@9.37.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3)': dependencies: '@graphql-tools/code-file-loader': 8.1.22(graphql@16.11.0) '@graphql-tools/graphql-tag-pluck': 8.3.21(graphql@16.11.0) @@ -6065,7 +6078,7 @@ snapshots: eslint: 9.37.0(jiti@2.6.1) fast-glob: 3.3.3 graphql: 16.11.0 - graphql-config: 5.1.5(@types/node@24.7.0)(graphql@16.11.0)(typescript@5.9.3) + graphql-config: 5.1.5(@types/node@24.8.0)(graphql@16.11.0)(typescript@5.9.3) graphql-depth-limit: 1.1.0(graphql@16.11.0) lodash.lowercase: 4.3.0 transitivePeerDependencies: @@ -6142,7 +6155,7 @@ snapshots: - uWebSockets.js - utf-8-validate - '@graphql-tools/executor-http@1.3.3(@types/node@24.7.0)(graphql@16.11.0)': + '@graphql-tools/executor-http@1.3.3(@types/node@24.8.0)(graphql@16.11.0)': dependencies: '@graphql-hive/signal': 1.0.0 '@graphql-tools/executor-common': 0.0.4(graphql@16.11.0) @@ -6152,7 +6165,7 @@ snapshots: '@whatwg-node/fetch': 0.10.11 '@whatwg-node/promise-helpers': 1.3.2 graphql: 16.11.0 - meros: 1.3.2(@types/node@24.7.0) + meros: 1.3.2(@types/node@24.8.0) tslib: 2.8.1 transitivePeerDependencies: - '@types/node' @@ -6242,10 +6255,10 @@ snapshots: graphql: 16.11.0 tslib: 2.8.1 - '@graphql-tools/url-loader@8.0.33(@types/node@24.7.0)(graphql@16.11.0)': + '@graphql-tools/url-loader@8.0.33(@types/node@24.8.0)(graphql@16.11.0)': dependencies: '@graphql-tools/executor-graphql-ws': 2.0.7(graphql@16.11.0) - '@graphql-tools/executor-http': 1.3.3(@types/node@24.7.0)(graphql@16.11.0) + '@graphql-tools/executor-http': 1.3.3(@types/node@24.8.0)(graphql@16.11.0) '@graphql-tools/executor-legacy-ws': 1.1.19(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) '@graphql-tools/wrap': 10.1.4(graphql@16.11.0) @@ -6486,7 +6499,7 @@ snapshots: '@sec-ant/readable-stream@0.4.1': {} - '@semantic-release/commit-analyzer@13.0.1(semantic-release@24.2.9(typescript@5.9.3))': + '@semantic-release/commit-analyzer@13.0.1(semantic-release@25.0.0(typescript@5.9.3))': dependencies: conventional-changelog-angular: 8.0.0 conventional-changelog-writer: 8.2.0 @@ -6496,13 +6509,13 @@ snapshots: import-from-esm: 2.0.0 lodash-es: 4.17.21 micromatch: 4.0.8 - semantic-release: 24.2.9(typescript@5.9.3) + semantic-release: 25.0.0(typescript@5.9.3) transitivePeerDependencies: - supports-color '@semantic-release/error@4.0.0': {} - '@semantic-release/github@11.0.6(semantic-release@24.2.9(typescript@5.9.3))': + '@semantic-release/github@12.0.0(semantic-release@25.0.0(typescript@5.9.3))': dependencies: '@octokit/core': 7.0.5 '@octokit/plugin-paginate-rest': 13.2.0(@octokit/core@7.0.5) @@ -6518,13 +6531,13 @@ snapshots: lodash-es: 4.17.21 mime: 4.1.0 p-filter: 4.1.0 - semantic-release: 24.2.9(typescript@5.9.3) + semantic-release: 25.0.0(typescript@5.9.3) tinyglobby: 0.2.15 url-join: 5.0.0 transitivePeerDependencies: - supports-color - '@semantic-release/npm@12.0.2(semantic-release@24.2.9(typescript@5.9.3))': + '@semantic-release/npm@13.0.0(semantic-release@25.0.0(typescript@5.9.3))': dependencies: '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 @@ -6533,15 +6546,15 @@ snapshots: lodash-es: 4.17.21 nerf-dart: 1.0.0 normalize-url: 8.1.0 - npm: 10.9.4 + npm: 11.6.2 rc: 1.2.8 read-pkg: 9.0.1 registry-auth-token: 5.1.0 - semantic-release: 24.2.9(typescript@5.9.3) + semantic-release: 25.0.0(typescript@5.9.3) semver: 7.7.3 tempy: 3.1.0 - '@semantic-release/release-notes-generator@14.1.0(semantic-release@24.2.9(typescript@5.9.3))': + '@semantic-release/release-notes-generator@14.1.0(semantic-release@25.0.0(typescript@5.9.3))': dependencies: conventional-changelog-angular: 8.0.0 conventional-changelog-writer: 8.2.0 @@ -6553,11 +6566,11 @@ snapshots: into-stream: 7.0.0 lodash-es: 4.17.21 read-package-up: 11.0.0 - semantic-release: 24.2.9(typescript@5.9.3) + semantic-release: 25.0.0(typescript@5.9.3) transitivePeerDependencies: - supports-color - '@sindresorhus/base62@0.1.0': {} + '@sindresorhus/base62@1.0.0': {} '@sindresorhus/is@4.6.0': {} @@ -6621,7 +6634,7 @@ snapshots: '@types/ms@2.1.0': {} - '@types/node@24.7.0': + '@types/node@24.8.0': dependencies: undici-types: 7.14.0 @@ -6633,7 +6646,7 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 24.7.0 + '@types/node': 24.8.0 '@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: @@ -6652,14 +6665,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.46.0(@typescript-eslint/parser@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.46.0 - '@typescript-eslint/type-utils': 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.46.0 + '@typescript-eslint/parser': 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.46.1 + '@typescript-eslint/type-utils': 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.46.1 eslint: 9.37.0(jiti@2.6.1) graphemer: 1.4.0 ignore: 7.0.5 @@ -6681,12 +6694,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.46.0 - '@typescript-eslint/types': 8.46.0 - '@typescript-eslint/typescript-estree': 8.46.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.46.0 + '@typescript-eslint/scope-manager': 8.46.1 + '@typescript-eslint/types': 8.46.1 + '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.46.1 debug: 4.4.3(supports-color@8.1.1) eslint: 9.37.0(jiti@2.6.1) typescript: 5.9.3 @@ -6696,16 +6709,16 @@ snapshots: '@typescript-eslint/project-service@8.45.0(typescript@5.9.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.45.0(typescript@5.9.3) - '@typescript-eslint/types': 8.46.0 + '@typescript-eslint/types': 8.46.1 debug: 4.4.3(supports-color@8.1.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.46.0(typescript@5.9.3)': + '@typescript-eslint/project-service@8.46.1(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.46.0(typescript@5.9.3) - '@typescript-eslint/types': 8.46.0 + '@typescript-eslint/tsconfig-utils': 8.46.1(typescript@5.9.3) + '@typescript-eslint/types': 8.46.1 debug: 4.4.3(supports-color@8.1.1) typescript: 5.9.3 transitivePeerDependencies: @@ -6716,16 +6729,16 @@ snapshots: '@typescript-eslint/types': 8.45.0 '@typescript-eslint/visitor-keys': 8.45.0 - '@typescript-eslint/scope-manager@8.46.0': + '@typescript-eslint/scope-manager@8.46.1': dependencies: - '@typescript-eslint/types': 8.46.0 - '@typescript-eslint/visitor-keys': 8.46.0 + '@typescript-eslint/types': 8.46.1 + '@typescript-eslint/visitor-keys': 8.46.1 '@typescript-eslint/tsconfig-utils@8.45.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/tsconfig-utils@8.46.0(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.46.1(typescript@5.9.3)': dependencies: typescript: 5.9.3 @@ -6741,11 +6754,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.46.0 - '@typescript-eslint/typescript-estree': 8.46.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.46.1 + '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3(supports-color@8.1.1) eslint: 9.37.0(jiti@2.6.1) ts-api-utils: 2.1.0(typescript@5.9.3) @@ -6755,7 +6768,7 @@ snapshots: '@typescript-eslint/types@8.45.0': {} - '@typescript-eslint/types@8.46.0': {} + '@typescript-eslint/types@8.46.1': {} '@typescript-eslint/typescript-estree@8.45.0(typescript@5.9.3)': dependencies: @@ -6773,12 +6786,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.46.0(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.46.1(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.46.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.46.0(typescript@5.9.3) - '@typescript-eslint/types': 8.46.0 - '@typescript-eslint/visitor-keys': 8.46.0 + '@typescript-eslint/project-service': 8.46.1(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.46.1(typescript@5.9.3) + '@typescript-eslint/types': 8.46.1 + '@typescript-eslint/visitor-keys': 8.46.1 debug: 4.4.3(supports-color@8.1.1) fast-glob: 3.3.3 is-glob: 4.0.3 @@ -6800,12 +6813,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.46.0 - '@typescript-eslint/types': 8.46.0 - '@typescript-eslint/typescript-estree': 8.46.0(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.46.1 + '@typescript-eslint/types': 8.46.1 + '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.3) eslint: 9.37.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: @@ -6816,9 +6829,9 @@ snapshots: '@typescript-eslint/types': 8.45.0 eslint-visitor-keys: 4.2.1 - '@typescript-eslint/visitor-keys@8.46.0': + '@typescript-eslint/visitor-keys@8.46.1': dependencies: - '@typescript-eslint/types': 8.46.0 + '@typescript-eslint/types': 8.46.1 eslint-visitor-keys: 4.2.1 '@unrs/resolver-binding-android-arm-eabi@1.11.1': @@ -7327,6 +7340,12 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + cliui@9.0.1: + dependencies: + string-width: 7.2.0 + strip-ansi: 7.1.2 + wrap-ansi: 9.0.2 + clone-regexp@3.0.0: dependencies: is-regexp: 3.1.0 @@ -7768,9 +7787,9 @@ snapshots: eslint: 9.37.0(jiti@2.6.1) semver: 7.7.3 - eslint-config-canonical@45.0.1(@types/node@24.7.0)(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): + eslint-config-canonical@45.0.1(@types/node@24.8.0)(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.7.0)(eslint@9.37.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3) + '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.8.0)(eslint@9.37.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3) '@next/eslint-plugin-next': 15.5.4 '@stylistic/eslint-plugin': 4.4.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) @@ -7778,14 +7797,14 @@ snapshots: '@vitest/eslint-plugin': 1.3.13(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) eslint: 9.37.0(jiti@2.6.1) eslint-config-prettier: 10.1.8(eslint@9.37.0(jiti@2.6.1)) - eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)) + eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)) eslint-plugin-ava: 15.1.0(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) eslint-plugin-eslint-comments: 3.2.0(eslint@9.37.0(jiti@2.6.1)) eslint-plugin-fp: 2.3.0(eslint@9.37.0(jiti@2.6.1)) eslint-plugin-functional: 9.0.2(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-jest: 28.14.0(@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)) + eslint-plugin-jest: 28.14.0(@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) eslint-plugin-jsdoc: 50.8.0(eslint@9.37.0(jiti@2.6.1)) eslint-plugin-jsonc: 2.20.1(eslint@9.37.0(jiti@2.6.1)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.37.0(jiti@2.6.1)) @@ -7806,7 +7825,7 @@ snapshots: graphql: 16.11.0 prettier: 3.6.2 ramda: 0.30.1 - typescript-eslint: 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + typescript-eslint: 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) yaml-eslint-parser: 1.3.0 transitivePeerDependencies: - '@apollo/subgraph' @@ -7840,7 +7859,7 @@ snapshots: optionalDependencies: unrs-resolver: 1.11.1 - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3(supports-color@8.1.1) @@ -7851,12 +7870,12 @@ snapshots: tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)) transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)): + eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)): dependencies: debug: 4.4.3(supports-color@8.1.1) eslint: 9.37.0(jiti@2.6.1) @@ -7867,8 +7886,8 @@ snapshots: tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)) transitivePeerDependencies: - supports-color @@ -7878,13 +7897,13 @@ snapshots: esquery: 1.6.0 jsonc-eslint-parser: 2.4.1 - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) eslint: 9.37.0(jiti@2.6.1) - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)) transitivePeerDependencies: - supports-color @@ -7900,14 +7919,14 @@ snapshots: pkg-dir: 5.0.0 resolve-from: 5.0.0 - eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): dependencies: '@typescript-eslint/utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) array-includes: 3.1.9 debug: 4.4.3(supports-color@8.1.1) doctrine: 3.0.0 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)) - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)) is-get-set-prop: 1.0.0 is-js-type: 2.0.0 is-obj-prop: 1.0.0 @@ -7962,9 +7981,9 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)): + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)): dependencies: - '@typescript-eslint/types': 8.46.0 + '@typescript-eslint/types': 8.46.1 comment-parser: 1.4.1 debug: 4.4.3(supports-color@8.1.1) eslint: 9.37.0(jiti@2.6.1) @@ -7975,11 +7994,11 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) transitivePeerDependencies: - supports-color - eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): dependencies: '@typescript-eslint/utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) eslint: 9.37.0(jiti@2.6.1) @@ -8071,7 +8090,7 @@ snapshots: eslint-plugin-perfectionist@4.15.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/types': 8.46.0 + '@typescript-eslint/types': 8.46.1 '@typescript-eslint/utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) eslint: 9.37.0(jiti@2.6.1) natural-orderby: 5.0.0 @@ -8625,13 +8644,13 @@ snapshots: graphemer@1.4.0: {} - graphql-config@5.1.5(@types/node@24.7.0)(graphql@16.11.0)(typescript@5.9.3): + graphql-config@5.1.5(@types/node@24.8.0)(graphql@16.11.0)(typescript@5.9.3): dependencies: '@graphql-tools/graphql-file-loader': 8.1.2(graphql@16.11.0) '@graphql-tools/json-file-loader': 8.0.20(graphql@16.11.0) '@graphql-tools/load': 8.1.2(graphql@16.11.0) '@graphql-tools/merge': 9.1.1(graphql@16.11.0) - '@graphql-tools/url-loader': 8.0.33(@types/node@24.7.0)(graphql@16.11.0) + '@graphql-tools/url-loader': 8.0.33(@types/node@24.8.0)(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) cosmiconfig: 8.3.6(typescript@5.9.3) graphql: 16.11.0 @@ -8718,9 +8737,9 @@ snapshots: dependencies: lru-cache: 10.4.3 - hosted-git-info@8.1.0: + hosted-git-info@9.0.2: dependencies: - lru-cache: 10.4.3 + lru-cache: 11.2.2 html-entities@2.6.0: {} @@ -9111,6 +9130,8 @@ snapshots: jsdoc-type-pratt-parser@6.10.0: {} + jsdoc-type-pratt-parser@6.11.0: {} + jsdom@6.5.1: dependencies: acorn: 2.7.0 @@ -9215,12 +9236,12 @@ snapshots: lines-and-columns@1.2.4: {} - lint-staged@16.2.3: + lint-staged@16.2.4: dependencies: commander: 14.0.1 listr2: 9.0.4 micromatch: 4.0.8 - nano-spawn: 1.0.3 + nano-spawn: 2.0.0 pidtree: 0.6.0 string-argv: 0.3.2 yaml: 2.8.1 @@ -9388,9 +9409,9 @@ snapshots: merge2@1.4.1: {} - meros@1.3.2(@types/node@24.7.0): + meros@1.3.2(@types/node@24.8.0): optionalDependencies: - '@types/node': 24.7.0 + '@types/node': 24.8.0 micro-spelling-correcter@1.1.1: {} @@ -9514,7 +9535,7 @@ snapshots: nan@2.23.0: optional: true - nano-spawn@1.0.3: {} + nano-spawn@2.0.0: {} napi-postinstall@0.3.3: {} @@ -9596,7 +9617,7 @@ snapshots: path-key: 4.0.0 unicorn-magic: 0.3.0 - npm@10.9.4: {} + npm@11.6.2: {} nwmatcher@1.4.4: {} @@ -10131,13 +10152,13 @@ snapshots: refa: 0.12.1 regexp-ast-analysis: 0.7.1 - semantic-release@24.2.9(typescript@5.9.3): + semantic-release@25.0.0(typescript@5.9.3): dependencies: - '@semantic-release/commit-analyzer': 13.0.1(semantic-release@24.2.9(typescript@5.9.3)) + '@semantic-release/commit-analyzer': 13.0.1(semantic-release@25.0.0(typescript@5.9.3)) '@semantic-release/error': 4.0.0 - '@semantic-release/github': 11.0.6(semantic-release@24.2.9(typescript@5.9.3)) - '@semantic-release/npm': 12.0.2(semantic-release@24.2.9(typescript@5.9.3)) - '@semantic-release/release-notes-generator': 14.1.0(semantic-release@24.2.9(typescript@5.9.3)) + '@semantic-release/github': 12.0.0(semantic-release@25.0.0(typescript@5.9.3)) + '@semantic-release/npm': 13.0.0(semantic-release@25.0.0(typescript@5.9.3)) + '@semantic-release/release-notes-generator': 14.1.0(semantic-release@25.0.0(typescript@5.9.3)) aggregate-error: 5.0.0 cosmiconfig: 9.0.0(typescript@5.9.3) debug: 4.4.3(supports-color@8.1.1) @@ -10148,7 +10169,7 @@ snapshots: get-stream: 6.0.1 git-log-parser: 1.2.1 hook-std: 4.0.0 - hosted-git-info: 8.1.0 + hosted-git-info: 9.0.2 import-from-esm: 2.0.0 lodash-es: 4.17.21 marked: 15.0.12 @@ -10161,7 +10182,7 @@ snapshots: semver: 7.7.3 semver-diff: 5.0.0 signale: 1.4.0 - yargs: 17.7.2 + yargs: 18.0.0 transitivePeerDependencies: - supports-color - typescript @@ -10565,9 +10586,9 @@ snapshots: dependencies: is-number: 7.0.0 - to-valid-identifier@0.1.1: + to-valid-identifier@1.0.0: dependencies: - '@sindresorhus/base62': 0.1.0 + '@sindresorhus/base62': 1.0.0 reserved-identifiers: 1.0.0 tough-cookie@2.5.0: @@ -10653,12 +10674,12 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): + typescript-eslint@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.46.0(@typescript-eslint/parser@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.46.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) eslint: 9.37.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: @@ -10922,6 +10943,8 @@ snapshots: yargs-parser@21.1.1: {} + yargs-parser@22.0.0: {} + yargs-unparser@2.0.0: dependencies: camelcase: 6.3.0 @@ -10963,6 +10986,15 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 + yargs@18.0.0: + dependencies: + cliui: 9.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + string-width: 7.2.0 + y18n: 5.0.8 + yargs-parser: 22.0.0 + yocto-queue@0.1.0: {} yoctocolors@2.1.2: {} diff --git a/src/WarnSettings.js b/src/WarnSettings.js index 376189111..aee7c92bf 100644 --- a/src/WarnSettings.js +++ b/src/WarnSettings.js @@ -5,7 +5,7 @@ const WarnSettings = function () { return { /** * Warn only once for each context and setting - * @param {{}} context + * @param {import('eslint').Rule.RuleContext} context * @param {string} setting * @returns {boolean} */ @@ -16,7 +16,7 @@ const WarnSettings = function () { }, /** - * @param {{}} context + * @param {import('eslint').Rule.RuleContext} context * @param {string} setting * @returns {void} */ diff --git a/src/iterateJsdoc.js b/src/iterateJsdoc.js index ff5eec69f..9f9965c13 100644 --- a/src/iterateJsdoc.js +++ b/src/iterateJsdoc.js @@ -212,7 +212,7 @@ import esquery from 'esquery'; * @callback AddTag * @param {string} targetTagName * @param {Integer} [number] - * @param {import('comment-parser').Tokens|{}} [tokens] + * @param {Partial} [tokens] * @returns {void} */ @@ -567,7 +567,7 @@ const { /** * A plain object for tracking state as needed by rules across iterations. * @typedef {{ - * globalTags: {}, + * globalTags: boolean, * hasDuplicates: { * [key: string]: boolean * }, diff --git a/src/rules/requireFileOverview.js b/src/rules/requireFileOverview.js index 84c3c3e36..1e004f114 100644 --- a/src/rules/requireFileOverview.js +++ b/src/rules/requireFileOverview.js @@ -15,7 +15,7 @@ const defaultTags = { const setDefaults = (state) => { // First iteration if (!state.globalTags) { - state.globalTags = {}; + state.globalTags = true; state.hasDuplicates = {}; state.hasTag = {}; state.hasNonCommentBeforeTag = {}; From 7a45e99db31dd6fe9eaf539d421b1b2b1e617661 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Mon, 20 Oct 2025 03:04:32 -0700 Subject: [PATCH 159/189] fix: update object-deep-merge, devDeps.; closes #1576 --- package.json | 10 +- pnpm-lock.yaml | 537 +++++++++++++++++++---------------- src/jsdocUtils.js | 5 +- src/rules/checkParamNames.js | 2 +- src/rules/typeFormatting.js | 2 +- src/rules/validTypes.js | 2 +- tsconfig.json | 2 +- 7 files changed, 301 insertions(+), 259 deletions(-) diff --git a/package.json b/package.json index 073758556..4251a850d 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "espree": "^10.4.0", "esquery": "^1.6.0", "html-entities": "^2.6.0", - "object-deep-merge": "^1.0.5", + "object-deep-merge": "^2.0.0", "parse-imports-exports": "^0.2.4", "semver": "^7.7.3", "spdx-expression-parse": "^4.0.0", @@ -34,7 +34,7 @@ "@hkdobrev/run-if-changed": "^0.6.3", "@semantic-release/commit-analyzer": "^13.0.1", "@semantic-release/github": "^12.0.0", - "@semantic-release/npm": "^13.0.0", + "@semantic-release/npm": "^13.1.1", "@types/chai": "^5.2.2", "@types/debug": "^4.1.12", "@types/espree": "^10.1.0", @@ -42,7 +42,7 @@ "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@types/mocha": "^10.0.10", - "@types/node": "^24.8.0", + "@types/node": "^24.8.1", "@types/semver": "^7.7.1", "@types/spdx-expression-parse": "^3.0.5", "@typescript-eslint/types": "^8.46.1", @@ -53,7 +53,7 @@ "camelcase": "^8.0.0", "chai": "^6.2.0", "decamelize": "^6.0.1", - "eslint": "9.37.0", + "eslint": "9.38.0", "eslint-config-canonical": "^45.0.1", "gitdown": "^4.1.1", "glob": "^11.0.3", @@ -67,7 +67,7 @@ "open-editor": "^5.1.0", "replace": "^1.2.2", "rimraf": "^6.0.1", - "semantic-release": "^25.0.0", + "semantic-release": "^25.0.1", "typescript": "5.9.3", "typescript-eslint": "^8.46.1" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index eb7b47c4d..76ae05d1a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -36,8 +36,8 @@ importers: specifier: ^2.6.0 version: 2.6.0 object-deep-merge: - specifier: ^1.0.5 - version: 1.0.5 + specifier: ^2.0.0 + version: 2.0.0 parse-imports-exports: specifier: ^0.2.4 version: 0.2.4 @@ -62,7 +62,7 @@ importers: version: 7.28.4 '@babel/eslint-parser': specifier: ^7.28.4 - version: 7.28.4(@babel/core@7.28.4)(eslint@9.37.0(jiti@2.6.1)) + version: 7.28.4(@babel/core@7.28.4)(eslint@9.38.0(jiti@2.6.1)) '@babel/plugin-syntax-class-properties': specifier: ^7.12.13 version: 7.12.13(@babel/core@7.28.4) @@ -86,13 +86,13 @@ importers: version: 0.6.3(typescript@5.9.3) '@semantic-release/commit-analyzer': specifier: ^13.0.1 - version: 13.0.1(semantic-release@25.0.0(typescript@5.9.3)) + version: 13.0.1(semantic-release@25.0.1(typescript@5.9.3)) '@semantic-release/github': specifier: ^12.0.0 - version: 12.0.0(semantic-release@25.0.0(typescript@5.9.3)) + version: 12.0.0(semantic-release@25.0.1(typescript@5.9.3)) '@semantic-release/npm': - specifier: ^13.0.0 - version: 13.0.0(semantic-release@25.0.0(typescript@5.9.3)) + specifier: ^13.1.1 + version: 13.1.1(semantic-release@25.0.1(typescript@5.9.3)) '@types/chai': specifier: ^5.2.2 version: 5.2.2 @@ -115,8 +115,8 @@ importers: specifier: ^10.0.10 version: 10.0.10 '@types/node': - specifier: ^24.8.0 - version: 24.8.0 + specifier: ^24.8.1 + version: 24.8.1 '@types/semver': specifier: ^7.7.1 version: 7.7.1 @@ -148,11 +148,11 @@ importers: specifier: ^6.0.1 version: 6.0.1 eslint: - specifier: 9.37.0 - version: 9.37.0(jiti@2.6.1) + specifier: 9.38.0 + version: 9.38.0(jiti@2.6.1) eslint-config-canonical: specifier: ^45.0.1 - version: 45.0.1(@types/node@24.8.0)(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + version: 45.0.1(@types/node@24.8.1)(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) gitdown: specifier: ^4.1.1 version: 4.1.1(re2@1.20.9) @@ -190,17 +190,29 @@ importers: specifier: ^6.0.1 version: 6.0.1 semantic-release: - specifier: ^25.0.0 - version: 25.0.0(typescript@5.9.3) + specifier: ^25.0.1 + version: 25.0.1(typescript@5.9.3) typescript: specifier: 5.9.3 version: 5.9.3 typescript-eslint: specifier: ^8.46.1 - version: 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) packages: + '@actions/core@1.11.1': + resolution: {integrity: sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A==} + + '@actions/exec@1.1.1': + resolution: {integrity: sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w==} + + '@actions/http-client@2.2.3': + resolution: {integrity: sha512-mx8hyJi/hjFvbPokCg4uRd4ZX78t+YyRPtnKWwIl+RzNaVuFpQHfmlGVfsKEJN8LwTCvL+DfVgAM04XaHkm6bA==} + + '@actions/io@1.1.3': + resolution: {integrity: sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==} + '@andrewbranch/untar.js@1.0.3': resolution: {integrity: sha512-Jh15/qVmrLGhkKJBdXlK1+9tY4lZruYjsgkDFj08ZmDiWVBLJcqkok7Z0/R0In+i1rScBpJlSvrTS2Lm41Pbnw==} @@ -813,12 +825,12 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.21.0': - resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} + '@eslint/config-array@0.21.1': + resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-helpers@0.4.0': - resolution: {integrity: sha512-WUFvV4WoIwW8Bv0KeKCIIEgdSiFOsulyN0xrMu+7z43q/hkOLXjvb5u7UC9jDxvRzcrbEmuZBX5yJZz1741jog==} + '@eslint/config-helpers@0.4.1': + resolution: {integrity: sha512-csZAzkNhsgwb0I/UAV6/RGFTbiakPCf0ZrGmrIxQpYvGZ00PhTkSnyKNolphgIvmnJeGw6rcGVEXfTzUnFuEvw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/core@0.15.2': @@ -833,12 +845,12 @@ packages: resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.37.0': - resolution: {integrity: sha512-jaS+NJ+hximswBG6pjNX0uEJZkrT0zwpVi3BA3vX22aFGjJjmgSTSmPpZCRKmoBL5VY/M6p0xsSJx7rk7sy5gg==} + '@eslint/js@9.38.0': + resolution: {integrity: sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/object-schema@2.1.6': - resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + '@eslint/object-schema@2.1.7': + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/plugin-kit@0.3.5': @@ -849,6 +861,10 @@ packages: resolution: {integrity: sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@fastify/busboy@2.1.1': + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} + engines: {node: '>=14'} + '@fastify/busboy@3.2.0': resolution: {integrity: sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==} @@ -1178,8 +1194,8 @@ packages: peerDependencies: semantic-release: '>=24.1.0' - '@semantic-release/npm@13.0.0': - resolution: {integrity: sha512-7RIx9nUdUekYbIZ0dG7k7G/iSvUCZb03LmmBPFqAQEhPVC+BnHfhFxj5ewSNP6zMUsYaEQSckcOhKD8AuS/EzQ==} + '@semantic-release/npm@13.1.1': + resolution: {integrity: sha512-c4tlp3STYaTYORmMcLjiTaI8SLoxJ0Uf7IXkem8EyihuOM624wnaGuH4OuY2HHcsHDerNAQNzZ8VO6d4PMHSzA==} engines: {node: ^22.14.0 || >= 24.10.0} peerDependencies: semantic-release: '>=20.1.0' @@ -1250,8 +1266,8 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@24.8.0': - resolution: {integrity: sha512-5x08bUtU8hfboMTrJ7mEO4CpepS9yBwAqcL52y86SWNmbPX8LVbNs3EP4cNrIZgdjk2NAlP2ahNihozpoZIxSg==} + '@types/node@24.8.1': + resolution: {integrity: sha512-alv65KGRadQVfVcG69MuB4IzdYVpRwMG/mq8KWOaoOdyY617P5ivaDiMCGOFDWD2sAn5Q0mR3mRtUOgm99hL9Q==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -2567,8 +2583,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.37.0: - resolution: {integrity: sha512-XyLmROnACWqSxiGYArdef1fItQd47weqB7iwtfr9JHwRrqIXZdcFMvvEcL9xHCmL0SNsOvF0c42lWyM1U5dgig==} + eslint@9.38.0: + resolution: {integrity: sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -3954,8 +3970,8 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - object-deep-merge@1.0.5: - resolution: {integrity: sha512-3DioFgOzetbxbeUq8pB2NunXo8V0n4EvqsWM/cJoI6IA9zghd7cl/2pBOuWRf4dlvA+fcg5ugFMZaN2/RuoaGg==} + object-deep-merge@2.0.0: + resolution: {integrity: sha512-3DC3UMpeffLTHiuXSy/UG4NOIYTLlY9u3V82+djSCLYClWobZiS4ivYzpIUWrRY/nfsJ8cWsKyG3QfyLePmhvg==} object-inspect@1.13.4: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} @@ -4450,8 +4466,8 @@ packages: resolution: {integrity: sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==} engines: {node: ^14.0.0 || >=16.0.0} - semantic-release@25.0.0: - resolution: {integrity: sha512-JL2hY7b1hBli5FS98nAXH0OwfRsgdywuUVhKktyJOHu9tUO0wJGWNpQL69SDhJ5Uwp63rtIvGvy7ZDy4C3RsXg==} + semantic-release@25.0.1: + resolution: {integrity: sha512-0OCYLm0AfVilNGukM+w0C4aptITfuW1Mhvmz8LQliLeYbPOTFRCIJzoltWWx/F5zVFe6np9eNatBUHdAvMFeZg==} engines: {node: ^22.14.0 || >= 24.10.0} hasBin: true @@ -4839,6 +4855,10 @@ packages: tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + tunnel@0.0.6: + resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} + engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} + tweetnacl@0.14.5: resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} @@ -4862,10 +4882,6 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} - type-fest@4.2.0: - resolution: {integrity: sha512-5zknd7Dss75pMSED270A1RQS3KloqRJA9XbXLe0eCxyw7xXFb3rd+9B0UQ/0E+LQT6lnrLviEolYORlRWamn4w==} - engines: {node: '>=16'} - type-fest@4.41.0: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} @@ -4915,6 +4931,10 @@ packages: undici-types@7.14.0: resolution: {integrity: sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==} + undici@5.29.0: + resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} + engines: {node: '>=14.0'} + unicode-canonical-property-names-ecmascript@2.0.1: resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} engines: {node: '>=4'} @@ -5196,6 +5216,22 @@ packages: snapshots: + '@actions/core@1.11.1': + dependencies: + '@actions/exec': 1.1.1 + '@actions/http-client': 2.2.3 + + '@actions/exec@1.1.1': + dependencies: + '@actions/io': 1.1.3 + + '@actions/http-client@2.2.3': + dependencies: + tunnel: 0.0.6 + undici: 5.29.0 + + '@actions/io@1.1.3': {} + '@andrewbranch/untar.js@1.0.3': {} '@apidevtools/json-schema-ref-parser@11.9.3': @@ -5267,11 +5303,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/eslint-parser@7.28.4(@babel/core@7.28.4)(eslint@9.37.0(jiti@2.6.1))': + '@babel/eslint-parser@7.28.4(@babel/core@7.28.4)(eslint@9.38.0(jiti@2.6.1))': dependencies: '@babel/core': 7.28.4 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) eslint-visitor-keys: 2.1.0 semver: 6.3.1 @@ -5978,10 +6014,10 @@ snapshots: '@es-joy/jsdoc-eslint-parser@0.24.0(jiti@2.6.1)': dependencies: '@babel/core': 7.28.4 - '@babel/eslint-parser': 7.28.4(@babel/core@7.28.4)(eslint@9.37.0(jiti@2.6.1)) + '@babel/eslint-parser': 7.28.4(@babel/core@7.28.4)(eslint@9.38.0(jiti@2.6.1)) '@es-joy/jsdoccomment': 0.62.0 - '@typescript-eslint/parser': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.37.0(jiti@2.6.1) + '@typescript-eslint/parser': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.38.0(jiti@2.6.1) esquery: 1.6.0 typescript: 5.9.3 transitivePeerDependencies: @@ -6012,22 +6048,22 @@ snapshots: esquery: 1.6.0 jsdoc-type-pratt-parser: 6.10.0 - '@eslint-community/eslint-utils@4.9.0(eslint@9.37.0(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.0(eslint@9.38.0(jiti@2.6.1))': dependencies: - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} - '@eslint/config-array@0.21.0': + '@eslint/config-array@0.21.1': dependencies: - '@eslint/object-schema': 2.1.6 + '@eslint/object-schema': 2.1.7 debug: 4.4.3(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.4.0': + '@eslint/config-helpers@0.4.1': dependencies: '@eslint/core': 0.16.0 @@ -6053,9 +6089,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.37.0': {} + '@eslint/js@9.38.0': {} - '@eslint/object-schema@2.1.6': {} + '@eslint/object-schema@2.1.7': {} '@eslint/plugin-kit@0.3.5': dependencies: @@ -6067,18 +6103,20 @@ snapshots: '@eslint/core': 0.16.0 levn: 0.4.1 + '@fastify/busboy@2.1.1': {} + '@fastify/busboy@3.2.0': {} - '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.8.0)(eslint@9.37.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3)': + '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.8.1)(eslint@9.38.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3)': dependencies: '@graphql-tools/code-file-loader': 8.1.22(graphql@16.11.0) '@graphql-tools/graphql-tag-pluck': 8.3.21(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) debug: 4.4.3(supports-color@8.1.1) - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) fast-glob: 3.3.3 graphql: 16.11.0 - graphql-config: 5.1.5(@types/node@24.8.0)(graphql@16.11.0)(typescript@5.9.3) + graphql-config: 5.1.5(@types/node@24.8.1)(graphql@16.11.0)(typescript@5.9.3) graphql-depth-limit: 1.1.0(graphql@16.11.0) lodash.lowercase: 4.3.0 transitivePeerDependencies: @@ -6155,7 +6193,7 @@ snapshots: - uWebSockets.js - utf-8-validate - '@graphql-tools/executor-http@1.3.3(@types/node@24.8.0)(graphql@16.11.0)': + '@graphql-tools/executor-http@1.3.3(@types/node@24.8.1)(graphql@16.11.0)': dependencies: '@graphql-hive/signal': 1.0.0 '@graphql-tools/executor-common': 0.0.4(graphql@16.11.0) @@ -6165,7 +6203,7 @@ snapshots: '@whatwg-node/fetch': 0.10.11 '@whatwg-node/promise-helpers': 1.3.2 graphql: 16.11.0 - meros: 1.3.2(@types/node@24.8.0) + meros: 1.3.2(@types/node@24.8.1) tslib: 2.8.1 transitivePeerDependencies: - '@types/node' @@ -6255,10 +6293,10 @@ snapshots: graphql: 16.11.0 tslib: 2.8.1 - '@graphql-tools/url-loader@8.0.33(@types/node@24.8.0)(graphql@16.11.0)': + '@graphql-tools/url-loader@8.0.33(@types/node@24.8.1)(graphql@16.11.0)': dependencies: '@graphql-tools/executor-graphql-ws': 2.0.7(graphql@16.11.0) - '@graphql-tools/executor-http': 1.3.3(@types/node@24.8.0)(graphql@16.11.0) + '@graphql-tools/executor-http': 1.3.3(@types/node@24.8.1)(graphql@16.11.0) '@graphql-tools/executor-legacy-ws': 1.1.19(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) '@graphql-tools/wrap': 10.1.4(graphql@16.11.0) @@ -6499,7 +6537,7 @@ snapshots: '@sec-ant/readable-stream@0.4.1': {} - '@semantic-release/commit-analyzer@13.0.1(semantic-release@25.0.0(typescript@5.9.3))': + '@semantic-release/commit-analyzer@13.0.1(semantic-release@25.0.1(typescript@5.9.3))': dependencies: conventional-changelog-angular: 8.0.0 conventional-changelog-writer: 8.2.0 @@ -6509,13 +6547,13 @@ snapshots: import-from-esm: 2.0.0 lodash-es: 4.17.21 micromatch: 4.0.8 - semantic-release: 25.0.0(typescript@5.9.3) + semantic-release: 25.0.1(typescript@5.9.3) transitivePeerDependencies: - supports-color '@semantic-release/error@4.0.0': {} - '@semantic-release/github@12.0.0(semantic-release@25.0.0(typescript@5.9.3))': + '@semantic-release/github@12.0.0(semantic-release@25.0.1(typescript@5.9.3))': dependencies: '@octokit/core': 7.0.5 '@octokit/plugin-paginate-rest': 13.2.0(@octokit/core@7.0.5) @@ -6531,16 +6569,18 @@ snapshots: lodash-es: 4.17.21 mime: 4.1.0 p-filter: 4.1.0 - semantic-release: 25.0.0(typescript@5.9.3) + semantic-release: 25.0.1(typescript@5.9.3) tinyglobby: 0.2.15 url-join: 5.0.0 transitivePeerDependencies: - supports-color - '@semantic-release/npm@13.0.0(semantic-release@25.0.0(typescript@5.9.3))': + '@semantic-release/npm@13.1.1(semantic-release@25.0.1(typescript@5.9.3))': dependencies: + '@actions/core': 1.11.1 '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 + env-ci: 11.2.0 execa: 9.6.0 fs-extra: 11.3.2 lodash-es: 4.17.21 @@ -6550,11 +6590,11 @@ snapshots: rc: 1.2.8 read-pkg: 9.0.1 registry-auth-token: 5.1.0 - semantic-release: 25.0.0(typescript@5.9.3) + semantic-release: 25.0.1(typescript@5.9.3) semver: 7.7.3 tempy: 3.1.0 - '@semantic-release/release-notes-generator@14.1.0(semantic-release@25.0.0(typescript@5.9.3))': + '@semantic-release/release-notes-generator@14.1.0(semantic-release@25.0.1(typescript@5.9.3))': dependencies: conventional-changelog-angular: 8.0.0 conventional-changelog-writer: 8.2.0 @@ -6566,7 +6606,7 @@ snapshots: into-stream: 7.0.0 lodash-es: 4.17.21 read-package-up: 11.0.0 - semantic-release: 25.0.0(typescript@5.9.3) + semantic-release: 25.0.1(typescript@5.9.3) transitivePeerDependencies: - supports-color @@ -6576,10 +6616,10 @@ snapshots: '@sindresorhus/merge-streams@4.0.0': {} - '@stylistic/eslint-plugin@4.4.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': + '@stylistic/eslint-plugin@4.4.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.37.0(jiti@2.6.1) + '@typescript-eslint/utils': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.38.0(jiti@2.6.1) eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 @@ -6634,7 +6674,7 @@ snapshots: '@types/ms@2.1.0': {} - '@types/node@24.8.0': + '@types/node@24.8.1': dependencies: undici-types: 7.14.0 @@ -6646,17 +6686,17 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 24.8.0 + '@types/node': 24.8.1 - '@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.45.0 - '@typescript-eslint/type-utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.45.0 - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -6665,15 +6705,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.46.1 - '@typescript-eslint/type-utils': 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.46.1 - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -6682,26 +6722,26 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.45.0 '@typescript-eslint/types': 8.45.0 '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.45.0 debug: 4.4.3(supports-color@8.1.1) - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.46.1 '@typescript-eslint/types': 8.46.1 '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.46.1 debug: 4.4.3(supports-color@8.1.1) - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -6742,25 +6782,25 @@ snapshots: dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.45.0 '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3(supports-color@8.1.1) - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) ts-api-utils: 2.1.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.46.1 '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3(supports-color@8.1.1) - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) ts-api-utils: 2.1.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: @@ -6802,24 +6842,24 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.45.0 '@typescript-eslint/types': 8.45.0 '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.3) - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.46.1 '@typescript-eslint/types': 8.46.1 '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.3) - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -6893,11 +6933,11 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - '@vitest/eslint-plugin@1.3.13(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': + '@vitest/eslint-plugin@1.3.13(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.45.0 - '@typescript-eslint/utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.37.0(jiti@2.6.1) + '@typescript-eslint/utils': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.38.0(jiti@2.6.1) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: @@ -7777,55 +7817,55 @@ snapshots: lodash.get: 4.4.2 lodash.zip: 4.2.0 - eslint-compat-utils@0.5.1(eslint@9.37.0(jiti@2.6.1)): + eslint-compat-utils@0.5.1(eslint@9.38.0(jiti@2.6.1)): dependencies: - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) semver: 7.7.3 - eslint-compat-utils@0.6.5(eslint@9.37.0(jiti@2.6.1)): + eslint-compat-utils@0.6.5(eslint@9.38.0(jiti@2.6.1)): dependencies: - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) semver: 7.7.3 - eslint-config-canonical@45.0.1(@types/node@24.8.0)(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): + eslint-config-canonical@45.0.1(@types/node@24.8.1)(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.8.0)(eslint@9.37.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3) + '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.8.1)(eslint@9.38.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3) '@next/eslint-plugin-next': 15.5.4 - '@stylistic/eslint-plugin': 4.4.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - '@vitest/eslint-plugin': 1.3.13(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.37.0(jiti@2.6.1) - eslint-config-prettier: 10.1.8(eslint@9.37.0(jiti@2.6.1)) - eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-ava: 15.1.0(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-eslint-comments: 3.2.0(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-fp: 2.3.0(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-functional: 9.0.2(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-jest: 28.14.0(@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-jsdoc: 50.8.0(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-jsonc: 2.20.1(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-lodash: 8.0.0(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-mocha: 10.5.0(eslint@9.37.0(jiti@2.6.1)) + '@stylistic/eslint-plugin': 4.4.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@vitest/eslint-plugin': 1.3.13(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.38.0(jiti@2.6.1) + eslint-config-prettier: 10.1.8(eslint@9.38.0(jiti@2.6.1)) + eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)) + eslint-plugin-ava: 15.1.0(eslint@9.38.0(jiti@2.6.1)) + eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + eslint-plugin-eslint-comments: 3.2.0(eslint@9.38.0(jiti@2.6.1)) + eslint-plugin-fp: 2.3.0(eslint@9.38.0(jiti@2.6.1)) + eslint-plugin-functional: 9.0.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)) + eslint-plugin-jest: 28.14.0(@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + eslint-plugin-jsdoc: 50.8.0(eslint@9.38.0(jiti@2.6.1)) + eslint-plugin-jsonc: 2.20.1(eslint@9.38.0(jiti@2.6.1)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.38.0(jiti@2.6.1)) + eslint-plugin-lodash: 8.0.0(eslint@9.38.0(jiti@2.6.1)) + eslint-plugin-mocha: 10.5.0(eslint@9.38.0(jiti@2.6.1)) eslint-plugin-modules-newline: 0.0.6 - eslint-plugin-n: 17.23.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-perfectionist: 4.15.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-prettier: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1))(prettier@3.6.2) - eslint-plugin-promise: 7.2.1(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-react: 7.37.5(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-react-hooks: 6.1.0(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-regexp: 2.10.0(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-unicorn: 60.0.0(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-yml: 1.18.0(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-zod: 1.4.0(eslint@9.37.0(jiti@2.6.1)) + eslint-plugin-n: 17.23.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + eslint-plugin-perfectionist: 4.15.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + eslint-plugin-prettier: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1))(prettier@3.6.2) + eslint-plugin-promise: 7.2.1(eslint@9.38.0(jiti@2.6.1)) + eslint-plugin-react: 7.37.5(eslint@9.38.0(jiti@2.6.1)) + eslint-plugin-react-hooks: 6.1.0(eslint@9.38.0(jiti@2.6.1)) + eslint-plugin-regexp: 2.10.0(eslint@9.38.0(jiti@2.6.1)) + eslint-plugin-unicorn: 60.0.0(eslint@9.38.0(jiti@2.6.1)) + eslint-plugin-yml: 1.18.0(eslint@9.38.0(jiti@2.6.1)) + eslint-plugin-zod: 1.4.0(eslint@9.38.0(jiti@2.6.1)) globals: 16.4.0 graphql: 16.11.0 prettier: 3.6.2 ramda: 0.30.1 - typescript-eslint: 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + typescript-eslint: 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) yaml-eslint-parser: 1.3.0 transitivePeerDependencies: - '@apollo/subgraph' @@ -7848,9 +7888,9 @@ snapshots: - utf-8-validate - vitest - eslint-config-prettier@10.1.8(eslint@9.37.0(jiti@2.6.1)): + eslint-config-prettier@10.1.8(eslint@9.38.0(jiti@2.6.1)): dependencies: - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) eslint-import-context@0.1.9(unrs-resolver@1.11.1): dependencies: @@ -7859,26 +7899,26 @@ snapshots: optionalDependencies: unrs-resolver: 1.11.1 - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3(supports-color@8.1.1) - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) get-tsconfig: 4.10.1 is-bun-module: 2.0.0 stable-hash: 0.0.5 tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)) transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)): + eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)): dependencies: debug: 4.4.3(supports-color@8.1.1) - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) eslint-import-context: 0.1.9(unrs-resolver@1.11.1) get-tsconfig: 4.10.1 is-bun-module: 2.0.0 @@ -7886,32 +7926,32 @@ snapshots: tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)) transitivePeerDependencies: - supports-color - eslint-json-compat-utils@0.2.1(eslint@9.37.0(jiti@2.6.1))(jsonc-eslint-parser@2.4.1): + eslint-json-compat-utils@0.2.1(eslint@9.38.0(jiti@2.6.1))(jsonc-eslint-parser@2.4.1): dependencies: - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) esquery: 1.6.0 jsonc-eslint-parser: 2.4.1 - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.37.0(jiti@2.6.1) - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)) + '@typescript-eslint/parser': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.38.0(jiti@2.6.1) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)) transitivePeerDependencies: - supports-color - eslint-plugin-ava@15.1.0(eslint@9.37.0(jiti@2.6.1)): + eslint-plugin-ava@15.1.0(eslint@9.38.0(jiti@2.6.1)): dependencies: enhance-visitors: 1.0.0 - eslint: 9.37.0(jiti@2.6.1) - eslint-utils: 3.0.0(eslint@9.37.0(jiti@2.6.1)) + eslint: 9.38.0(jiti@2.6.1) + eslint-utils: 3.0.0(eslint@9.38.0(jiti@2.6.1)) espree: 9.6.1 espurify: 2.1.1 import-modules: 2.1.0 @@ -7919,14 +7959,14 @@ snapshots: pkg-dir: 5.0.0 resolve-from: 5.0.0 - eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) array-includes: 3.1.9 debug: 4.4.3(supports-color@8.1.1) doctrine: 3.0.0 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)) - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)) is-get-set-prop: 1.0.0 is-js-type: 2.0.0 is-obj-prop: 1.0.0 @@ -7946,34 +7986,34 @@ snapshots: - supports-color - typescript - eslint-plugin-es-x@7.8.0(eslint@9.37.0(jiti@2.6.1)): + eslint-plugin-es-x@7.8.0(eslint@9.38.0(jiti@2.6.1)): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.1 - eslint: 9.37.0(jiti@2.6.1) - eslint-compat-utils: 0.5.1(eslint@9.37.0(jiti@2.6.1)) + eslint: 9.38.0(jiti@2.6.1) + eslint-compat-utils: 0.5.1(eslint@9.38.0(jiti@2.6.1)) - eslint-plugin-eslint-comments@3.2.0(eslint@9.37.0(jiti@2.6.1)): + eslint-plugin-eslint-comments@3.2.0(eslint@9.38.0(jiti@2.6.1)): dependencies: escape-string-regexp: 1.0.5 - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) ignore: 5.3.2 - eslint-plugin-fp@2.3.0(eslint@9.37.0(jiti@2.6.1)): + eslint-plugin-fp@2.3.0(eslint@9.38.0(jiti@2.6.1)): dependencies: create-eslint-index: 1.0.0 - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) eslint-ast-utils: 1.1.0 lodash: 4.17.21 req-all: 0.1.0 - eslint-plugin-functional@9.0.2(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-functional@9.0.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) deepmerge-ts: 7.1.5 escape-string-regexp: 5.0.0 - eslint: 9.37.0(jiti@2.6.1) - is-immutable-type: 5.0.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.38.0(jiti@2.6.1) + is-immutable-type: 5.0.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) ts-api-utils: 2.1.0(typescript@5.9.3) ts-declaration-location: 1.0.7(typescript@5.9.3) optionalDependencies: @@ -7981,12 +8021,12 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1)): + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)): dependencies: '@typescript-eslint/types': 8.46.1 comment-parser: 1.4.1 debug: 4.4.3(supports-color@8.1.1) - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) eslint-import-context: 0.1.9(unrs-resolver@1.11.1) is-glob: 4.0.3 minimatch: 10.0.3 @@ -7994,28 +8034,28 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) transitivePeerDependencies: - supports-color - eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.37.0(jiti@2.6.1) + '@typescript-eslint/utils': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.38.0(jiti@2.6.1) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-jsdoc@50.8.0(eslint@9.37.0(jiti@2.6.1)): + eslint-plugin-jsdoc@50.8.0(eslint@9.38.0(jiti@2.6.1)): dependencies: '@es-joy/jsdoccomment': 0.50.2 are-docs-informative: 0.0.2 comment-parser: 1.4.1 debug: 4.4.3(supports-color@8.1.1) escape-string-regexp: 4.0.0 - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) espree: 10.4.0 esquery: 1.6.0 parse-imports-exports: 0.2.4 @@ -8024,12 +8064,12 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-jsonc@2.20.1(eslint@9.37.0(jiti@2.6.1)): + eslint-plugin-jsonc@2.20.1(eslint@9.38.0(jiti@2.6.1)): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) - eslint: 9.37.0(jiti@2.6.1) - eslint-compat-utils: 0.6.5(eslint@9.37.0(jiti@2.6.1)) - eslint-json-compat-utils: 0.2.1(eslint@9.37.0(jiti@2.6.1))(jsonc-eslint-parser@2.4.1) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) + eslint: 9.38.0(jiti@2.6.1) + eslint-compat-utils: 0.6.5(eslint@9.38.0(jiti@2.6.1)) + eslint-json-compat-utils: 0.2.1(eslint@9.38.0(jiti@2.6.1))(jsonc-eslint-parser@2.4.1) espree: 10.4.0 graphemer: 1.4.0 jsonc-eslint-parser: 2.4.1 @@ -8038,7 +8078,7 @@ snapshots: transitivePeerDependencies: - '@eslint/json' - eslint-plugin-jsx-a11y@6.10.2(eslint@9.37.0(jiti@2.6.1)): + eslint-plugin-jsx-a11y@6.10.2(eslint@9.38.0(jiti@2.6.1)): dependencies: aria-query: 5.3.2 array-includes: 3.1.9 @@ -8048,7 +8088,7 @@ snapshots: axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 @@ -8057,15 +8097,15 @@ snapshots: safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 - eslint-plugin-lodash@8.0.0(eslint@9.37.0(jiti@2.6.1)): + eslint-plugin-lodash@8.0.0(eslint@9.38.0(jiti@2.6.1)): dependencies: - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) lodash: 4.17.21 - eslint-plugin-mocha@10.5.0(eslint@9.37.0(jiti@2.6.1)): + eslint-plugin-mocha@10.5.0(eslint@9.38.0(jiti@2.6.1)): dependencies: - eslint: 9.37.0(jiti@2.6.1) - eslint-utils: 3.0.0(eslint@9.37.0(jiti@2.6.1)) + eslint: 9.38.0(jiti@2.6.1) + eslint-utils: 3.0.0(eslint@9.38.0(jiti@2.6.1)) globals: 13.24.0 rambda: 7.5.0 @@ -8073,12 +8113,12 @@ snapshots: dependencies: requireindex: 1.1.0 - eslint-plugin-n@17.23.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-n@17.23.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) enhanced-resolve: 5.18.3 - eslint: 9.37.0(jiti@2.6.1) - eslint-plugin-es-x: 7.8.0(eslint@9.37.0(jiti@2.6.1)) + eslint: 9.38.0(jiti@2.6.1) + eslint-plugin-es-x: 7.8.0(eslint@9.38.0(jiti@2.6.1)) get-tsconfig: 4.10.1 globals: 15.15.0 globrex: 0.1.2 @@ -8088,43 +8128,43 @@ snapshots: transitivePeerDependencies: - typescript - eslint-plugin-perfectionist@4.15.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-perfectionist@4.15.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): dependencies: '@typescript-eslint/types': 8.46.1 - '@typescript-eslint/utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.37.0(jiti@2.6.1) + '@typescript-eslint/utils': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.38.0(jiti@2.6.1) natural-orderby: 5.0.0 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-prettier@5.5.4(eslint-config-prettier@10.1.8(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1))(prettier@3.6.2): + eslint-plugin-prettier@5.5.4(eslint-config-prettier@10.1.8(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1))(prettier@3.6.2): dependencies: - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) prettier: 3.6.2 prettier-linter-helpers: 1.0.0 synckit: 0.11.11 optionalDependencies: - eslint-config-prettier: 10.1.8(eslint@9.37.0(jiti@2.6.1)) + eslint-config-prettier: 10.1.8(eslint@9.38.0(jiti@2.6.1)) - eslint-plugin-promise@7.2.1(eslint@9.37.0(jiti@2.6.1)): + eslint-plugin-promise@7.2.1(eslint@9.38.0(jiti@2.6.1)): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) - eslint: 9.37.0(jiti@2.6.1) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) + eslint: 9.38.0(jiti@2.6.1) - eslint-plugin-react-hooks@6.1.0(eslint@9.37.0(jiti@2.6.1)): + eslint-plugin-react-hooks@6.1.0(eslint@9.38.0(jiti@2.6.1)): dependencies: '@babel/core': 7.28.4 '@babel/parser': 7.28.4 '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.28.4) - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) hermes-parser: 0.25.1 zod: 3.25.76 zod-validation-error: 3.5.3(zod@3.25.76) transitivePeerDependencies: - supports-color - eslint-plugin-react@7.37.5(eslint@9.37.0(jiti@2.6.1)): + eslint-plugin-react@7.37.5(eslint@9.38.0(jiti@2.6.1)): dependencies: array-includes: 3.1.9 array.prototype.findlast: 1.2.5 @@ -8132,7 +8172,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.1 - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -8146,27 +8186,27 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-regexp@2.10.0(eslint@9.37.0(jiti@2.6.1)): + eslint-plugin-regexp@2.10.0(eslint@9.38.0(jiti@2.6.1)): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.1 comment-parser: 1.4.1 - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) jsdoc-type-pratt-parser: 4.8.0 refa: 0.12.1 regexp-ast-analysis: 0.7.1 scslre: 0.3.0 - eslint-plugin-unicorn@60.0.0(eslint@9.37.0(jiti@2.6.1)): + eslint-plugin-unicorn@60.0.0(eslint@9.38.0(jiti@2.6.1)): dependencies: '@babel/helper-validator-identifier': 7.27.1 - '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) '@eslint/plugin-kit': 0.3.5 change-case: 5.4.4 ci-info: 4.3.0 clean-regexp: 1.0.0 core-js-compat: 3.45.1 - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) esquery: 1.6.0 find-up-simple: 1.0.1 globals: 16.4.0 @@ -8179,20 +8219,20 @@ snapshots: semver: 7.7.3 strip-indent: 4.1.0 - eslint-plugin-yml@1.18.0(eslint@9.37.0(jiti@2.6.1)): + eslint-plugin-yml@1.18.0(eslint@9.38.0(jiti@2.6.1)): dependencies: debug: 4.4.3(supports-color@8.1.1) escape-string-regexp: 4.0.0 - eslint: 9.37.0(jiti@2.6.1) - eslint-compat-utils: 0.6.5(eslint@9.37.0(jiti@2.6.1)) + eslint: 9.38.0(jiti@2.6.1) + eslint-compat-utils: 0.6.5(eslint@9.38.0(jiti@2.6.1)) natural-compare: 1.4.0 yaml-eslint-parser: 1.3.0 transitivePeerDependencies: - supports-color - eslint-plugin-zod@1.4.0(eslint@9.37.0(jiti@2.6.1)): + eslint-plugin-zod@1.4.0(eslint@9.38.0(jiti@2.6.1)): dependencies: - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) eslint-scope@5.1.1: dependencies: @@ -8204,9 +8244,9 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-utils@3.0.0(eslint@9.37.0(jiti@2.6.1)): + eslint-utils@3.0.0(eslint@9.38.0(jiti@2.6.1)): dependencies: - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) eslint-visitor-keys: 2.1.0 eslint-visitor-keys@2.1.0: {} @@ -8215,21 +8255,20 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.37.0(jiti@2.6.1): + eslint@9.38.0(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.21.0 - '@eslint/config-helpers': 0.4.0 + '@eslint/config-array': 0.21.1 + '@eslint/config-helpers': 0.4.1 '@eslint/core': 0.16.0 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.37.0 + '@eslint/js': 9.38.0 '@eslint/plugin-kit': 0.4.0 '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 '@types/estree': 1.0.8 - '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 @@ -8644,13 +8683,13 @@ snapshots: graphemer@1.4.0: {} - graphql-config@5.1.5(@types/node@24.8.0)(graphql@16.11.0)(typescript@5.9.3): + graphql-config@5.1.5(@types/node@24.8.1)(graphql@16.11.0)(typescript@5.9.3): dependencies: '@graphql-tools/graphql-file-loader': 8.1.2(graphql@16.11.0) '@graphql-tools/json-file-loader': 8.0.20(graphql@16.11.0) '@graphql-tools/load': 8.1.2(graphql@16.11.0) '@graphql-tools/merge': 9.1.1(graphql@16.11.0) - '@graphql-tools/url-loader': 8.0.33(@types/node@24.8.0)(graphql@16.11.0) + '@graphql-tools/url-loader': 8.0.33(@types/node@24.8.1)(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) cosmiconfig: 8.3.6(typescript@5.9.3) graphql: 16.11.0 @@ -8933,10 +8972,10 @@ snapshots: dependencies: is-extglob: 2.1.1 - is-immutable-type@5.0.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): + is-immutable-type@5.0.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/type-utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.37.0(jiti@2.6.1) + '@typescript-eslint/type-utils': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.38.0(jiti@2.6.1) ts-api-utils: 2.1.0(typescript@5.9.3) ts-declaration-location: 1.0.7(typescript@5.9.3) typescript: 5.9.3 @@ -9409,9 +9448,9 @@ snapshots: merge2@1.4.1: {} - meros@1.3.2(@types/node@24.8.0): + meros@1.3.2(@types/node@24.8.1): optionalDependencies: - '@types/node': 24.8.0 + '@types/node': 24.8.1 micro-spelling-correcter@1.1.1: {} @@ -9627,9 +9666,7 @@ snapshots: object-assign@4.1.1: {} - object-deep-merge@1.0.5: - dependencies: - type-fest: 4.2.0 + object-deep-merge@2.0.0: {} object-inspect@1.13.4: {} @@ -10152,13 +10189,13 @@ snapshots: refa: 0.12.1 regexp-ast-analysis: 0.7.1 - semantic-release@25.0.0(typescript@5.9.3): + semantic-release@25.0.1(typescript@5.9.3): dependencies: - '@semantic-release/commit-analyzer': 13.0.1(semantic-release@25.0.0(typescript@5.9.3)) + '@semantic-release/commit-analyzer': 13.0.1(semantic-release@25.0.1(typescript@5.9.3)) '@semantic-release/error': 4.0.0 - '@semantic-release/github': 12.0.0(semantic-release@25.0.0(typescript@5.9.3)) - '@semantic-release/npm': 13.0.0(semantic-release@25.0.0(typescript@5.9.3)) - '@semantic-release/release-notes-generator': 14.1.0(semantic-release@25.0.0(typescript@5.9.3)) + '@semantic-release/github': 12.0.0(semantic-release@25.0.1(typescript@5.9.3)) + '@semantic-release/npm': 13.1.1(semantic-release@25.0.1(typescript@5.9.3)) + '@semantic-release/release-notes-generator': 14.1.0(semantic-release@25.0.1(typescript@5.9.3)) aggregate-error: 5.0.0 cosmiconfig: 9.0.0(typescript@5.9.3) debug: 4.4.3(supports-color@8.1.1) @@ -10621,6 +10658,8 @@ snapshots: dependencies: safe-buffer: 5.2.1 + tunnel@0.0.6: {} + tweetnacl@0.14.5: {} type-check@0.3.2: @@ -10637,8 +10676,6 @@ snapshots: type-fest@2.19.0: {} - type-fest@4.2.0: {} - type-fest@4.41.0: {} typed-array-buffer@1.0.3: @@ -10674,13 +10711,13 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): + typescript-eslint@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.37.0(jiti@2.6.1) + '@typescript-eslint/utils': 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.38.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -10701,6 +10738,10 @@ snapshots: undici-types@7.14.0: {} + undici@5.29.0: + dependencies: + '@fastify/busboy': 2.1.1 + unicode-canonical-property-names-ecmascript@2.0.1: {} unicode-emoji-modifier-base@1.0.0: {} diff --git a/src/jsdocUtils.js b/src/jsdocUtils.js index e7a21545d..c91ca1ea6 100644 --- a/src/jsdocUtils.js +++ b/src/jsdocUtils.js @@ -521,7 +521,7 @@ const modeWarnSettings = WarnSettings(); /** * @param {ParserMode|undefined} mode - * @param {Reporter} context + * @param {import('eslint').Rule.RuleContext} context * @returns {import('./tagNames.js').AliasedTags} */ const getTagNamesForMode = (mode, context) => { @@ -612,7 +612,7 @@ const getTagDescription = (tg, returnArray) => { * @param {string} name * @param {ParserMode|undefined} mode * @param {TagNamePreference} tagPreference - * @param {Reporter} context + * @param {import('eslint').Rule.RuleContext} context * @returns {string|false|{ * message: string; * replacement?: string|undefined; @@ -622,6 +622,7 @@ const getPreferredTagNameSimple = ( name, mode, tagPreference = {}, + // @ts-expect-error Just a no-op // eslint-disable-next-line unicorn/no-object-as-default-parameter -- Ok context = { report () { diff --git a/src/rules/checkParamNames.js b/src/rules/checkParamNames.js index ae9852f5d..657d9dc17 100644 --- a/src/rules/checkParamNames.js +++ b/src/rules/checkParamNames.js @@ -40,9 +40,9 @@ const validateParameterNames = ( let dotted = 0; let thisOffset = 0; - // eslint-disable-next-line complexity return paramTags.some(([ , tag, + // eslint-disable-next-line complexity ], index) => { /** @type {import('../iterateJsdoc.js').Integer} */ let tagsIndex; diff --git a/src/rules/typeFormatting.js b/src/rules/typeFormatting.js index 98c72e58b..c855bb0db 100644 --- a/src/rules/typeFormatting.js +++ b/src/rules/typeFormatting.js @@ -11,13 +11,13 @@ import { const digitRegex = (/^(\d+(\.\d*)?|\.\d+)([eE][\-+]?\d+)?$/v); -// eslint-disable-next-line complexity -- Todo export default iterateJsdoc(({ context, indent, jsdoc, settings, utils, +// eslint-disable-next-line complexity -- Todo }) => { const { arrayBrackets = 'square', diff --git a/src/rules/validTypes.js b/src/rules/validTypes.js index 3f635470f..e7d5c1168 100644 --- a/src/rules/validTypes.js +++ b/src/rules/validTypes.js @@ -116,13 +116,13 @@ const tryParseNameIgnoreError = (name, mode) => { return false; }; -// eslint-disable-next-line complexity export default iterateJsdoc(({ context, jsdoc, report, settings, utils, +// eslint-disable-next-line complexity }) => { const { allowEmptyNamepaths = false, diff --git a/tsconfig.json b/tsconfig.json index b71e063f4..3ab4a13b2 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "lib": ["es2023"], + "lib": ["es2024"], "moduleResolution": "Bundler", "module": "ESNext", "allowJs": true, From 8aa719c3cb3811a8d4786b71cb9c6b3da52548e3 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Wed, 22 Oct 2025 14:32:45 -0700 Subject: [PATCH 160/189] refactor: use node protocol identifier --- src/bin/generateDocs.js | 10 +++++----- src/bin/generateOptions.js | 4 ++-- src/bin/generateRule.js | 16 ++++++++-------- src/rules/importsAsDependencies.js | 4 ++-- test/rules/index.js | 8 ++++---- 5 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/bin/generateDocs.js b/src/bin/generateDocs.js index 6ffc9ffcb..08e052c8e 100644 --- a/src/bin/generateDocs.js +++ b/src/bin/generateDocs.js @@ -1,14 +1,14 @@ +/** + * This script is used to inline assertions into the README.md documents. + */ import plugin from '../index.js'; import decamelize from 'decamelize'; -import fs from 'fs'; import Gitdown from 'gitdown'; import { glob, } from 'glob'; -/** - * This script is used to inline assertions into the README.md documents. - */ -import path from 'path'; +import fs from 'node:fs'; +import path from 'node:path'; const dirname = import.meta.dirname; diff --git a/src/bin/generateOptions.js b/src/bin/generateOptions.js index 8db5c2c49..7464ad34c 100644 --- a/src/bin/generateOptions.js +++ b/src/bin/generateOptions.js @@ -10,10 +10,10 @@ import { readdir, readFile, writeFile, -} from 'fs/promises'; +} from 'node:fs/promises'; import { join, -} from 'path'; +} from 'node:path'; const rulesDir = './src/rules'; diff --git a/src/bin/generateRule.js b/src/bin/generateRule.js index 0435d6317..ec8159779 100644 --- a/src/bin/generateRule.js +++ b/src/bin/generateRule.js @@ -1,20 +1,20 @@ /* eslint-disable no-console -- CLI */ - -import camelCase from 'camelcase'; -import { - existsSync, -} from 'fs'; -import fs from 'fs/promises'; /** * @example * ```shell * pnpm run create-rule my-new-rule -- --recommended * ``` */ -import open from 'open-editor'; + +import camelCase from 'camelcase'; +import { + existsSync, +} from 'node:fs'; +import fs from 'node:fs/promises'; import { resolve, -} from 'path'; +} from 'node:path'; +import open from 'open-editor'; // Todo: Would ideally have prompts, e.g., to ask for whether // type was problem/layout, etc. diff --git a/src/rules/importsAsDependencies.js b/src/rules/importsAsDependencies.js index 2d731b02a..dab62ea9b 100644 --- a/src/rules/importsAsDependencies.js +++ b/src/rules/importsAsDependencies.js @@ -6,13 +6,13 @@ import { } from '@es-joy/jsdoccomment'; import { readFileSync, -} from 'fs'; +} from 'node:fs'; import { isBuiltin as isBuiltinModule, } from 'node:module'; import { join, -} from 'path'; +} from 'node:path'; /** * @type {Set|null} diff --git a/test/rules/index.js b/test/rules/index.js index 311b98bf3..e0e0754d0 100644 --- a/test/rules/index.js +++ b/test/rules/index.js @@ -6,16 +6,16 @@ import { } from 'eslint'; import { readFileSync, -} from 'fs'; +} from 'node:fs'; +import { + join, +} from 'node:path'; import { parseArgs, } from 'node:util'; import { merge, } from 'object-deep-merge'; -import { - join, -} from 'path'; import semver from 'semver'; /** From c0e4e7c1734920b9abb99eab2e5bfd811d8bb5e1 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Thu, 23 Oct 2025 09:29:12 -0700 Subject: [PATCH 161/189] fix(`imports-as-dependencies`): check within `exports` for types; fixes #1114 --- docs/rules/imports-as-dependencies.md | 4 + package.json | 20 +- pnpm-lock.yaml | 993 ++++++++++-------- src/rules/importsAsDependencies.js | 7 +- .../rules/assertions/importsAsDependencies.js | 7 + 5 files changed, 581 insertions(+), 450 deletions(-) diff --git a/docs/rules/imports-as-dependencies.md b/docs/rules/imports-as-dependencies.md index c7fbcbc17..8bbe58935 100644 --- a/docs/rules/imports-as-dependencies.md +++ b/docs/rules/imports-as-dependencies.md @@ -95,5 +95,9 @@ The following patterns are not considered problems: /** * @type {null|import('node:fs').PathLike} */ + +/** + * @type {null|import('playwright').SomeApi} + */ ```` diff --git a/package.json b/package.json index 4251a850d..e9c172984 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ }, "dependencies": { "@es-joy/jsdoccomment": "~0.76.0", + "@es-joy/resolve.exports": "1.0.0", "are-docs-informative": "^0.0.2", "comment-parser": "1.4.1", "debug": "^4.4.3", @@ -23,29 +24,29 @@ "devDependencies": { "@arethetypeswrong/cli": "^0.18.2", "@babel/cli": "^7.28.3", - "@babel/core": "^7.28.4", - "@babel/eslint-parser": "^7.28.4", + "@babel/core": "^7.28.5", + "@babel/eslint-parser": "^7.28.5", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-transform-flow-strip-types": "^7.27.1", - "@babel/preset-env": "^7.28.3", + "@babel/preset-env": "^7.28.5", "@es-joy/escodegen": "^4.2.0", - "@es-joy/jsdoc-eslint-parser": "^0.24.0", + "@es-joy/jsdoc-eslint-parser": "^0.25.0", "@eslint/core": "^0.16.0", "@hkdobrev/run-if-changed": "^0.6.3", "@semantic-release/commit-analyzer": "^13.0.1", "@semantic-release/github": "^12.0.0", "@semantic-release/npm": "^13.1.1", - "@types/chai": "^5.2.2", + "@types/chai": "^5.2.3", "@types/debug": "^4.1.12", "@types/espree": "^10.1.0", "@types/esquery": "^1.5.4", "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@types/mocha": "^10.0.10", - "@types/node": "^24.8.1", + "@types/node": "^24.9.1", "@types/semver": "^7.7.1", "@types/spdx-expression-parse": "^3.0.5", - "@typescript-eslint/types": "^8.46.1", + "@typescript-eslint/types": "^8.46.2", "babel-plugin-add-module-exports": "^1.0.4", "babel-plugin-istanbul": "^7.0.1", "babel-plugin-transform-import-meta": "^2.3.3", @@ -62,14 +63,15 @@ "jsdoc-type-pratt-parser": "^6.11.0", "json-schema": "^0.4.0", "json-schema-to-typescript": "^15.0.4", - "lint-staged": "^16.2.4", + "lint-staged": "^16.2.6", "mocha": "^11.7.4", "open-editor": "^5.1.0", + "playwright": "^1.56.1", "replace": "^1.2.2", "rimraf": "^6.0.1", "semantic-release": "^25.0.1", "typescript": "5.9.3", - "typescript-eslint": "^8.46.1" + "typescript-eslint": "^8.46.2" }, "engines": { "node": ">=20.11.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 76ae05d1a..923f78935 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,6 +14,9 @@ importers: '@es-joy/jsdoccomment': specifier: ~0.76.0 version: 0.76.0 + '@es-joy/resolve.exports': + specifier: 1.0.0 + version: 1.0.0 are-docs-informative: specifier: ^0.0.2 version: 0.0.2 @@ -56,28 +59,28 @@ importers: version: 0.18.2 '@babel/cli': specifier: ^7.28.3 - version: 7.28.3(@babel/core@7.28.4) + version: 7.28.3(@babel/core@7.28.5) '@babel/core': - specifier: ^7.28.4 - version: 7.28.4 + specifier: ^7.28.5 + version: 7.28.5 '@babel/eslint-parser': - specifier: ^7.28.4 - version: 7.28.4(@babel/core@7.28.4)(eslint@9.38.0(jiti@2.6.1)) + specifier: ^7.28.5 + version: 7.28.5(@babel/core@7.28.5)(eslint@9.38.0(jiti@2.6.1)) '@babel/plugin-syntax-class-properties': specifier: ^7.12.13 - version: 7.12.13(@babel/core@7.28.4) + version: 7.12.13(@babel/core@7.28.5) '@babel/plugin-transform-flow-strip-types': specifier: ^7.27.1 - version: 7.27.1(@babel/core@7.28.4) + version: 7.27.1(@babel/core@7.28.5) '@babel/preset-env': - specifier: ^7.28.3 - version: 7.28.3(@babel/core@7.28.4) + specifier: ^7.28.5 + version: 7.28.5(@babel/core@7.28.5) '@es-joy/escodegen': specifier: ^4.2.0 version: 4.2.0 '@es-joy/jsdoc-eslint-parser': - specifier: ^0.24.0 - version: 0.24.0(jiti@2.6.1) + specifier: ^0.25.0 + version: 0.25.0(jiti@2.6.1) '@eslint/core': specifier: ^0.16.0 version: 0.16.0 @@ -94,8 +97,8 @@ importers: specifier: ^13.1.1 version: 13.1.1(semantic-release@25.0.1(typescript@5.9.3)) '@types/chai': - specifier: ^5.2.2 - version: 5.2.2 + specifier: ^5.2.3 + version: 5.2.3 '@types/debug': specifier: ^4.1.12 version: 4.1.12 @@ -115,8 +118,8 @@ importers: specifier: ^10.0.10 version: 10.0.10 '@types/node': - specifier: ^24.8.1 - version: 24.8.1 + specifier: ^24.9.1 + version: 24.9.1 '@types/semver': specifier: ^7.7.1 version: 7.7.1 @@ -124,8 +127,8 @@ importers: specifier: ^3.0.5 version: 3.0.5 '@typescript-eslint/types': - specifier: ^8.46.1 - version: 8.46.1 + specifier: ^8.46.2 + version: 8.46.2 babel-plugin-add-module-exports: specifier: ^1.0.4 version: 1.0.4 @@ -134,7 +137,7 @@ importers: version: 7.0.1 babel-plugin-transform-import-meta: specifier: ^2.3.3 - version: 2.3.3(@babel/core@7.28.4) + version: 2.3.3(@babel/core@7.28.5) c8: specifier: ^10.1.3 version: 10.1.3 @@ -152,7 +155,7 @@ importers: version: 9.38.0(jiti@2.6.1) eslint-config-canonical: specifier: ^45.0.1 - version: 45.0.1(@types/node@24.8.1)(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + version: 45.0.1(@types/node@24.9.1)(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) gitdown: specifier: ^4.1.1 version: 4.1.1(re2@1.20.9) @@ -175,14 +178,17 @@ importers: specifier: ^15.0.4 version: 15.0.4 lint-staged: - specifier: ^16.2.4 - version: 16.2.4 + specifier: ^16.2.6 + version: 16.2.6 mocha: specifier: ^11.7.4 version: 11.7.4 open-editor: specifier: ^5.1.0 version: 5.1.0 + playwright: + specifier: ^1.56.1 + version: 1.56.1 replace: specifier: ^1.2.2 version: 1.2.2 @@ -196,8 +202,8 @@ importers: specifier: 5.9.3 version: 5.9.3 typescript-eslint: - specifier: ^8.46.1 - version: 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + specifier: ^8.46.2 + version: 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) packages: @@ -244,12 +250,16 @@ packages: resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==} engines: {node: '>=6.9.0'} - '@babel/core@7.28.4': - resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==} + '@babel/compat-data@7.28.5': + resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.28.5': + resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==} engines: {node: '>=6.9.0'} - '@babel/eslint-parser@7.28.4': - resolution: {integrity: sha512-Aa+yDiH87980jR6zvRfFuCR1+dLb00vBydhTL+zI992Rz/wQhSvuxjmOOuJOgO3XmakO6RykRGD2S1mq1AtgHA==} + '@babel/eslint-parser@7.28.5': + resolution: {integrity: sha512-fcdRcWahONYo+JRnJg1/AekOacGvKx12Gu0qXJXFi2WBqQA1i7+O5PaxRB7kxE/Op94dExnCiiar6T09pvdHpA==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} peerDependencies: '@babel/core': ^7.11.0 @@ -259,6 +269,10 @@ packages: resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} engines: {node: '>=6.9.0'} + '@babel/generator@7.28.5': + resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.27.3': resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} engines: {node: '>=6.9.0'} @@ -334,6 +348,10 @@ packages: resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.27.1': resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} @@ -351,8 +369,13 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1': - resolution: {integrity: sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==} + '@babel/parser@7.28.5': + resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5': + resolution: {integrity: sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -447,8 +470,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoping@7.28.4': - resolution: {integrity: sha512-1yxmvN0MJHOhPVmAsmoW5liWwoILobu/d/ShymZmj867bAdxGbehIrew1DuLpw2Ukv+qDSSPQdYW1dLNE7t11A==} + '@babel/plugin-transform-block-scoping@7.28.5': + resolution: {integrity: sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -477,8 +500,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-destructuring@7.28.0': - resolution: {integrity: sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A==} + '@babel/plugin-transform-destructuring@7.28.5': + resolution: {integrity: sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -513,8 +536,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-exponentiation-operator@7.27.1': - resolution: {integrity: sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==} + '@babel/plugin-transform-exponentiation-operator@7.28.5': + resolution: {integrity: sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -555,8 +578,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-logical-assignment-operators@7.27.1': - resolution: {integrity: sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==} + '@babel/plugin-transform-logical-assignment-operators@7.28.5': + resolution: {integrity: sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -579,8 +602,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-systemjs@7.27.1': - resolution: {integrity: sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==} + '@babel/plugin-transform-modules-systemjs@7.28.5': + resolution: {integrity: sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -633,8 +656,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-chaining@7.27.1': - resolution: {integrity: sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==} + '@babel/plugin-transform-optional-chaining@7.28.5': + resolution: {integrity: sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -735,8 +758,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/preset-env@7.28.3': - resolution: {integrity: sha512-ROiDcM+GbYVPYBOeCR6uBXKkQpBExLl8k9HO1ygXEyds39j+vCCsjmj7S8GOniZQlEs81QlkdJZe76IpLSiqpg==} + '@babel/preset-env@7.28.5': + resolution: {integrity: sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -754,10 +777,18 @@ packages: resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==} engines: {node: '>=6.9.0'} + '@babel/traverse@7.28.5': + resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} + engines: {node: '>=6.9.0'} + '@babel/types@7.28.4': resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} engines: {node: '>=6.9.0'} + '@babel/types@7.28.5': + resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} + engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@1.0.2': resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} @@ -799,8 +830,8 @@ packages: resolution: {integrity: sha512-h2d737iS0LFAqypZOmXizu54qAbHofI/RpD30Zom03O6BCXKHuFevWKPcGarZbGq82h7qSBb5G6kLdhTMO+caw==} engines: {node: '>=4.0'} - '@es-joy/jsdoc-eslint-parser@0.24.0': - resolution: {integrity: sha512-c17hDO3+KTmwxd401yI4UjSdZ4CpvBDbYgtRSSQ3F8+VEY1KfBpQNhUV5YmtK+e8rFVbmmMV4ay3YVIsWwpU1g==} + '@es-joy/jsdoc-eslint-parser@0.25.0': + resolution: {integrity: sha512-x7WK9GyjB5BDTxdU/m/oVcK6kHDeFxaiaegSMWKSC77/rIHg2iBJiGnTDFn0UyO7NwvRjxwc3Az8G0UNDyNZTA==} engines: {node: '>=18.0.0'} '@es-joy/jsdoccomment@0.50.2': @@ -815,6 +846,10 @@ packages: resolution: {integrity: sha512-g+RihtzFgGTx2WYCuTHbdOXJeAlGnROws0TeALx9ow/ZmOROOZkVg5wp/B44n0WJgI4SQFP1eWM2iRPlU2Y14w==} engines: {node: '>=20.11.0'} + '@es-joy/resolve.exports@1.0.0': + resolution: {integrity: sha512-bbrmzsAZ9GA/3oBS6r8PWMtZarEhKHr413hak8ArwMEZ5DtaLErnkcyEWUsXy7urBcmVu/TpDzHPDVM5uIbx9A==} + engines: {node: '>=10'} + '@eslint-community/eslint-utils@4.9.0': resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1233,8 +1268,8 @@ packages: '@tybys/wasm-util@0.10.1': resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} - '@types/chai@5.2.2': - resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} @@ -1266,8 +1301,8 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@24.8.1': - resolution: {integrity: sha512-alv65KGRadQVfVcG69MuB4IzdYVpRwMG/mq8KWOaoOdyY617P5ivaDiMCGOFDWD2sAn5Q0mR3mRtUOgm99hL9Q==} + '@types/node@24.9.1': + resolution: {integrity: sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -1289,11 +1324,11 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/eslint-plugin@8.46.1': - resolution: {integrity: sha512-rUsLh8PXmBjdiPY+Emjz9NX2yHvhS11v0SR6xNJkm5GM1MO9ea/1GoDKlHHZGrOJclL/cZ2i/vRUYVtjRhrHVQ==} + '@typescript-eslint/eslint-plugin@8.46.2': + resolution: {integrity: sha512-ZGBMToy857/NIPaaCucIUQgqueOiq7HeAKkhlvqVV4lm089zUFW6ikRySx2v+cAhKeUCPuWVHeimyk6Dw1iY3w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.46.1 + '@typescript-eslint/parser': ^8.46.2 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' @@ -1304,8 +1339,8 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.46.1': - resolution: {integrity: sha512-6JSSaBZmsKvEkbRUkf7Zj7dru/8ZCrJxAqArcLaVMee5907JdtEbKGsZ7zNiIm/UAkpGUkaSMZEXShnN2D1HZA==} + '@typescript-eslint/parser@8.46.2': + resolution: {integrity: sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -1317,8 +1352,8 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.46.1': - resolution: {integrity: sha512-FOIaFVMHzRskXr5J4Jp8lFVV0gz5ngv3RHmn+E4HYxSJ3DgDzU7fVI1/M7Ijh1zf6S7HIoaIOtln1H5y8V+9Zg==} + '@typescript-eslint/project-service@8.46.2': + resolution: {integrity: sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' @@ -1327,8 +1362,8 @@ packages: resolution: {integrity: sha512-clmm8XSNj/1dGvJeO6VGH7EUSeA0FMs+5au/u3lrA3KfG8iJ4u8ym9/j2tTEoacAffdW1TVUzXO30W1JTJS7dA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.46.1': - resolution: {integrity: sha512-weL9Gg3/5F0pVQKiF8eOXFZp8emqWzZsOJuWRUNtHT+UNV2xSJegmpCNQHy37aEQIbToTq7RHKhWvOsmbM680A==} + '@typescript-eslint/scope-manager@8.46.2': + resolution: {integrity: sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/tsconfig-utils@8.45.0': @@ -1343,6 +1378,12 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/tsconfig-utils@8.46.2': + resolution: {integrity: sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/type-utils@8.45.0': resolution: {integrity: sha512-bpjepLlHceKgyMEPglAeULX1vixJDgaKocp0RVJ5u4wLJIMNuKtUXIczpJCPcn2waII0yuvks/5m5/h3ZQKs0A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1350,8 +1391,8 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.46.1': - resolution: {integrity: sha512-+BlmiHIiqufBxkVnOtFwjah/vrkF4MtKKvpXrKSPLCkCtAp8H01/VV43sfqA98Od7nJpDcFnkwgyfQbOG0AMvw==} + '@typescript-eslint/type-utils@8.46.2': + resolution: {integrity: sha512-HbPM4LbaAAt/DjxXaG9yiS9brOOz6fabal4uvUmaUYe6l3K1phQDMQKBRUrr06BQkxkvIZVVHttqiybM9nJsLA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -1361,8 +1402,8 @@ packages: resolution: {integrity: sha512-WugXLuOIq67BMgQInIxxnsSyRLFxdkJEJu8r4ngLR56q/4Q5LrbfkFRH27vMTjxEK8Pyz7QfzuZe/G15qQnVRA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.46.1': - resolution: {integrity: sha512-C+soprGBHwWBdkDpbaRC4paGBrkIXxVlNohadL5o0kfhsXqOC6GYH2S/Obmig+I0HTDl8wMaRySwrfrXVP8/pQ==} + '@typescript-eslint/types@8.46.2': + resolution: {integrity: sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@8.45.0': @@ -1371,8 +1412,8 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/typescript-estree@8.46.1': - resolution: {integrity: sha512-uIifjT4s8cQKFQ8ZBXXyoUODtRoAd7F7+G8MKmtzj17+1UbdzFl52AzRyZRyKqPHhgzvXunnSckVu36flGy8cg==} + '@typescript-eslint/typescript-estree@8.46.2': + resolution: {integrity: sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' @@ -1384,8 +1425,8 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.46.1': - resolution: {integrity: sha512-vkYUy6LdZS7q1v/Gxb2Zs7zziuXN0wxqsetJdeZdRe/f5dwJFglmuvZBfTUivCtjH725C1jWCDfpadadD95EDQ==} + '@typescript-eslint/utils@8.46.2': + resolution: {integrity: sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -1395,8 +1436,8 @@ packages: resolution: {integrity: sha512-qsaFBA3e09MIDAGFUrTk+dzqtfv1XPVz8t8d1f0ybTzrCY7BKiMC5cjrl1O/P7UmHsNyW90EYSkU/ZWpmXelag==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.46.1': - resolution: {integrity: sha512-ptkmIf2iDkNUjdeu2bQqhFPV1m6qTnFFjg7PPDjxKWaMaP0Z6I9l30Jr3g5QqbZGdw8YdYvLp+XnqnWWZOg/NA==} + '@typescript-eslint/visitor-keys@8.46.2': + resolution: {integrity: sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@unrs/resolver-binding-android-arm-eabi@1.11.1': @@ -1653,6 +1694,10 @@ packages: resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} engines: {node: '>=0.8'} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + ast-types-flow@0.0.8: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} @@ -2787,6 +2832,11 @@ packages: fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -3545,8 +3595,8 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - lint-staged@16.2.4: - resolution: {integrity: sha512-Pkyr/wd90oAyXk98i/2KwfkIhoYQUMtss769FIT9hFM5ogYZwrk+GRE46yKXSg2ZGhcJ1p38Gf5gmI5Ohjg2yg==} + lint-staged@16.2.6: + resolution: {integrity: sha512-s1gphtDbV4bmW1eylXpVMk2u7is7YsrLl8hzrtvC70h4ByhcMLZFY01Fx05ZUDNuv1H8HO4E+e2zgejV1jVwNw==} engines: {node: '>=20.17'} hasBin: true @@ -3554,8 +3604,8 @@ packages: resolution: {integrity: sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==} engines: {node: '>=18.0.0'} - listr2@9.0.4: - resolution: {integrity: sha512-1wd/kpAdKRLwv7/3OKC8zZ5U8e/fajCfWMxacUvB79S5nLrYGPtUI/8chMQhn3LQjsRVErTb9i1ECAwW0ZIHnQ==} + listr2@9.0.5: + resolution: {integrity: sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==} engines: {node: '>=20.0.0'} load-json-file@4.0.0: @@ -4195,6 +4245,16 @@ packages: resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} engines: {node: '>=10'} + playwright-core@1.56.1: + resolution: {integrity: sha512-hutraynyn31F+Bifme+Ps9Vq59hKuUCz7H1kDOcBs+2oGguKkWTU50bBWrtz34OUWmIwpBTWDxaRPXrIXkgvmQ==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.56.1: + resolution: {integrity: sha512-aFi5B0WovBHTEvpM3DzXTUaeN6eN0qWnTkKx4NQaH4Wvcmc153PdaY2UBdSYKaGYw+UyWXSVyxDUg5DoPEttjw==} + engines: {node: '>=18'} + hasBin: true + pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} @@ -4902,8 +4962,8 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} - typescript-eslint@8.46.1: - resolution: {integrity: sha512-VHgijW803JafdSsDO8I761r3SHrgk4T00IdyQ+/UsthtgPRsBWQLqoSxOolxTpxRKi1kGXK0bSz4CoAc9ObqJA==} + typescript-eslint@8.46.2: + resolution: {integrity: sha512-vbw8bOmiuYNdzzV3lsiWv6sRwjyuKJMQqWulBOU7M0RrxedXledX8G8kBbQeiOYDnTfiXz0Y4081E1QMNB6iQg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -4928,8 +4988,8 @@ packages: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} - undici-types@7.14.0: - resolution: {integrity: sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==} + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} undici@5.29.0: resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} @@ -5261,9 +5321,9 @@ snapshots: typescript: 5.6.1-rc validate-npm-package-name: 5.0.1 - '@babel/cli@7.28.3(@babel/core@7.28.4)': + '@babel/cli@7.28.3(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@jridgewell/trace-mapping': 0.3.31 commander: 6.2.1 convert-source-map: 2.0.0 @@ -5283,17 +5343,19 @@ snapshots: '@babel/compat-data@7.28.4': {} - '@babel/core@7.28.4': + '@babel/compat-data@7.28.5': {} + + '@babel/core@7.28.5': dependencies: '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.3 + '@babel/generator': 7.28.5 '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) '@babel/helpers': 7.28.4 - '@babel/parser': 7.28.4 + '@babel/parser': 7.28.5 '@babel/template': 7.27.2 - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 debug: 4.4.3(supports-color@8.1.1) @@ -5303,9 +5365,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/eslint-parser@7.28.4(@babel/core@7.28.4)(eslint@9.38.0(jiti@2.6.1))': + '@babel/eslint-parser@7.28.5(@babel/core@7.28.5)(eslint@9.38.0(jiti@2.6.1))': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 eslint: 9.38.0(jiti@2.6.1) eslint-visitor-keys: 2.1.0 @@ -5319,6 +5381,14 @@ snapshots: '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 + '@babel/generator@7.28.5': + dependencies: + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + '@babel/helper-annotate-as-pure@7.27.3': dependencies: '@babel/types': 7.28.4 @@ -5331,29 +5401,29 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.28.4)': + '@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 '@babel/traverse': 7.28.4 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.28.4)': + '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-annotate-as-pure': 7.27.3 regexpu-core: 6.4.0 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.5(@babel/core@7.28.4)': + '@babel/helper-define-polyfill-provider@0.6.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 debug: 4.4.3(supports-color@8.1.1) @@ -5373,17 +5443,17 @@ snapshots: '@babel/helper-module-imports@7.27.1': dependencies: - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)': + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-module-imports': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color @@ -5393,18 +5463,18 @@ snapshots: '@babel/helper-plugin-utils@7.27.1': {} - '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.28.4)': + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-wrap-function': 7.28.3 '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.4)': + '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 '@babel/traverse': 7.28.4 @@ -5422,6 +5492,8 @@ snapshots: '@babel/helper-validator-identifier@7.27.1': {} + '@babel/helper-validator-identifier@7.28.5': {} + '@babel/helper-validator-option@7.27.1': {} '@babel/helper-wrap-function@7.28.3': @@ -5435,503 +5507,507 @@ snapshots: '@babel/helpers@7.28.4': dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 '@babel/parser@7.28.4': dependencies: '@babel/types': 7.28.4 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.28.4)': + '@babel/parser@7.28.5': dependencies: - '@babel/core': 7.28.4 + '@babel/types': 7.28.5 + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-optional-chaining': 7.28.5(@babel/core@7.28.5) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3(@babel/core@7.28.4)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.28.4)': + '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.4)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.4)': + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-flow@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-syntax-flow@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.4)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-async-generator-functions@7.28.0(@babel/core@7.28.4)': + '@babel/plugin-transform-async-generator-functions@7.28.0(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.4) + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.5) '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.4) + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.5) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-block-scoping@7.28.4(@babel/core@7.28.4)': + '@babel/plugin-transform-block-scoping@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.28.3(@babel/core@7.28.4)': + '@babel/plugin-transform-class-static-block@7.28.3(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.28.4(@babel/core@7.28.4)': + '@babel/plugin-transform-classes@7.28.4(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-globals': 7.28.0 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5) '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 '@babel/template': 7.27.2 - '@babel/plugin-transform-destructuring@7.28.0(@babel/core@7.28.4)': + '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-explicit-resource-management@7.28.0(@babel/core@7.28.4)': + '@babel/plugin-transform-explicit-resource-management@7.28.0(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.4) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.5) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-exponentiation-operator@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-flow-strip-types@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-flow-strip-types@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-flow': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-syntax-flow': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-literals@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-logical-assignment-operators@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-modules-systemjs@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.28.4 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-object-rest-spread@7.28.4(@babel/core@7.28.4)': + '@babel/plugin-transform-object-rest-spread@7.28.4(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.4) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.4) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.5) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.5) '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-optional-chaining@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.28.4)': + '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-regenerator@7.28.4(@babel/core@7.28.4)': + '@babel/plugin-transform-regenerator@7.28.4(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-spread@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-spread@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 - '@babel/preset-env@7.28.3(@babel/core@7.28.4)': + '@babel/preset-env@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/compat-data': 7.28.4 - '@babel/core': 7.28.4 + '@babel/compat-data': 7.28.5 + '@babel/core': 7.28.5 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.3(@babel/core@7.28.4) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.4) - '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.28.4) - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.28.4) - '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-block-scoping': 7.28.4(@babel/core@7.28.4) - '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-class-static-block': 7.28.3(@babel/core@7.28.4) - '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.28.4) - '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.4) - '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-explicit-resource-management': 7.28.0(@babel/core@7.28.4) - '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-object-rest-spread': 7.28.4(@babel/core@7.28.4) - '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.4) - '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-regenerator': 7.28.4(@babel/core@7.28.4) - '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.28.4) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.28.4) - babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.4) - babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.4) - babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.4) + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.28.5) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.3(@babel/core@7.28.5) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.5) + '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.28.5) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.28.5) + '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-block-scoping': 7.28.5(@babel/core@7.28.5) + '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-class-static-block': 7.28.3(@babel/core@7.28.5) + '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.28.5) + '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.5) + '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-explicit-resource-management': 7.28.0(@babel/core@7.28.5) + '@babel/plugin-transform-exponentiation-operator': 7.28.5(@babel/core@7.28.5) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-logical-assignment-operators': 7.28.5(@babel/core@7.28.5) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-modules-systemjs': 7.28.5(@babel/core@7.28.5) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-object-rest-spread': 7.28.4(@babel/core@7.28.5) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-optional-chaining': 7.28.5(@babel/core@7.28.5) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.5) + '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-regenerator': 7.28.4(@babel/core@7.28.5) + '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.28.5) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.28.5) + babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.5) + babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.5) + babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.5) core-js-compat: 3.45.1 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.4)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 '@babel/types': 7.28.4 esutils: 2.0.3 @@ -5954,11 +6030,28 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/traverse@7.28.5': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.5 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.28.5 + '@babel/template': 7.27.2 + '@babel/types': 7.28.5 + debug: 4.4.3(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + '@babel/types@7.28.4': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 + '@babel/types@7.28.5': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + '@bcoe/v8-coverage@1.0.2': {} '@braidai/lang@1.1.2': {} @@ -6011,12 +6104,12 @@ snapshots: '@es-joy/estraverse@7.1.1': {} - '@es-joy/jsdoc-eslint-parser@0.24.0(jiti@2.6.1)': + '@es-joy/jsdoc-eslint-parser@0.25.0(jiti@2.6.1)': dependencies: - '@babel/core': 7.28.4 - '@babel/eslint-parser': 7.28.4(@babel/core@7.28.4)(eslint@9.38.0(jiti@2.6.1)) - '@es-joy/jsdoccomment': 0.62.0 - '@typescript-eslint/parser': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@babel/core': 7.28.5 + '@babel/eslint-parser': 7.28.5(@babel/core@7.28.5)(eslint@9.38.0(jiti@2.6.1)) + '@es-joy/jsdoccomment': 0.76.0 + '@typescript-eslint/parser': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) eslint: 9.38.0(jiti@2.6.1) esquery: 1.6.0 typescript: 5.9.3 @@ -6027,7 +6120,7 @@ snapshots: '@es-joy/jsdoccomment@0.50.2': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.46.1 + '@typescript-eslint/types': 8.46.2 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 4.1.0 @@ -6035,7 +6128,7 @@ snapshots: '@es-joy/jsdoccomment@0.62.0': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.46.1 + '@typescript-eslint/types': 8.46.2 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 5.9.2 @@ -6043,11 +6136,13 @@ snapshots: '@es-joy/jsdoccomment@0.76.0': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.46.1 + '@typescript-eslint/types': 8.46.2 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 6.10.0 + '@es-joy/resolve.exports@1.0.0': {} + '@eslint-community/eslint-utils@4.9.0(eslint@9.38.0(jiti@2.6.1))': dependencies: eslint: 9.38.0(jiti@2.6.1) @@ -6107,7 +6202,7 @@ snapshots: '@fastify/busboy@3.2.0': {} - '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.8.1)(eslint@9.38.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3)': + '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.9.1)(eslint@9.38.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3)': dependencies: '@graphql-tools/code-file-loader': 8.1.22(graphql@16.11.0) '@graphql-tools/graphql-tag-pluck': 8.3.21(graphql@16.11.0) @@ -6116,7 +6211,7 @@ snapshots: eslint: 9.38.0(jiti@2.6.1) fast-glob: 3.3.3 graphql: 16.11.0 - graphql-config: 5.1.5(@types/node@24.8.1)(graphql@16.11.0)(typescript@5.9.3) + graphql-config: 5.1.5(@types/node@24.9.1)(graphql@16.11.0)(typescript@5.9.3) graphql-depth-limit: 1.1.0(graphql@16.11.0) lodash.lowercase: 4.3.0 transitivePeerDependencies: @@ -6193,7 +6288,7 @@ snapshots: - uWebSockets.js - utf-8-validate - '@graphql-tools/executor-http@1.3.3(@types/node@24.8.1)(graphql@16.11.0)': + '@graphql-tools/executor-http@1.3.3(@types/node@24.9.1)(graphql@16.11.0)': dependencies: '@graphql-hive/signal': 1.0.0 '@graphql-tools/executor-common': 0.0.4(graphql@16.11.0) @@ -6203,7 +6298,7 @@ snapshots: '@whatwg-node/fetch': 0.10.11 '@whatwg-node/promise-helpers': 1.3.2 graphql: 16.11.0 - meros: 1.3.2(@types/node@24.8.1) + meros: 1.3.2(@types/node@24.9.1) tslib: 2.8.1 transitivePeerDependencies: - '@types/node' @@ -6243,9 +6338,9 @@ snapshots: '@graphql-tools/graphql-tag-pluck@8.3.21(graphql@16.11.0)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/parser': 7.28.4 - '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.5) '@babel/traverse': 7.28.4 '@babel/types': 7.28.4 '@graphql-tools/utils': 10.9.1(graphql@16.11.0) @@ -6293,10 +6388,10 @@ snapshots: graphql: 16.11.0 tslib: 2.8.1 - '@graphql-tools/url-loader@8.0.33(@types/node@24.8.1)(graphql@16.11.0)': + '@graphql-tools/url-loader@8.0.33(@types/node@24.9.1)(graphql@16.11.0)': dependencies: '@graphql-tools/executor-graphql-ws': 2.0.7(graphql@16.11.0) - '@graphql-tools/executor-http': 1.3.3(@types/node@24.8.1)(graphql@16.11.0) + '@graphql-tools/executor-http': 1.3.3(@types/node@24.9.1)(graphql@16.11.0) '@graphql-tools/executor-legacy-ws': 1.1.19(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) '@graphql-tools/wrap': 10.1.4(graphql@16.11.0) @@ -6643,9 +6738,10 @@ snapshots: tslib: 2.8.1 optional: true - '@types/chai@5.2.2': + '@types/chai@5.2.3': dependencies: '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 '@types/debug@4.1.12': dependencies: @@ -6674,9 +6770,9 @@ snapshots: '@types/ms@2.1.0': {} - '@types/node@24.8.1': + '@types/node@24.9.1': dependencies: - undici-types: 7.14.0 + undici-types: 7.16.0 '@types/normalize-package-data@2.4.4': {} @@ -6686,12 +6782,12 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 24.8.1 + '@types/node': 24.9.1 - '@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.45.0 '@typescript-eslint/type-utils': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/utils': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) @@ -6705,14 +6801,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.46.1 - '@typescript-eslint/type-utils': 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.46.1 + '@typescript-eslint/parser': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.46.2 + '@typescript-eslint/type-utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.46.2 eslint: 9.38.0(jiti@2.6.1) graphemer: 1.4.0 ignore: 7.0.5 @@ -6734,12 +6830,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.46.1 - '@typescript-eslint/types': 8.46.1 - '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.46.1 + '@typescript-eslint/scope-manager': 8.46.2 + '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.46.2 debug: 4.4.3(supports-color@8.1.1) eslint: 9.38.0(jiti@2.6.1) typescript: 5.9.3 @@ -6748,17 +6844,17 @@ snapshots: '@typescript-eslint/project-service@8.45.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.45.0(typescript@5.9.3) - '@typescript-eslint/types': 8.46.1 + '@typescript-eslint/tsconfig-utils': 8.46.1(typescript@5.9.3) + '@typescript-eslint/types': 8.46.2 debug: 4.4.3(supports-color@8.1.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.46.1(typescript@5.9.3)': + '@typescript-eslint/project-service@8.46.2(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.46.1(typescript@5.9.3) - '@typescript-eslint/types': 8.46.1 + '@typescript-eslint/tsconfig-utils': 8.46.2(typescript@5.9.3) + '@typescript-eslint/types': 8.46.2 debug: 4.4.3(supports-color@8.1.1) typescript: 5.9.3 transitivePeerDependencies: @@ -6769,10 +6865,10 @@ snapshots: '@typescript-eslint/types': 8.45.0 '@typescript-eslint/visitor-keys': 8.45.0 - '@typescript-eslint/scope-manager@8.46.1': + '@typescript-eslint/scope-manager@8.46.2': dependencies: - '@typescript-eslint/types': 8.46.1 - '@typescript-eslint/visitor-keys': 8.46.1 + '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/visitor-keys': 8.46.2 '@typescript-eslint/tsconfig-utils@8.45.0(typescript@5.9.3)': dependencies: @@ -6782,6 +6878,10 @@ snapshots: dependencies: typescript: 5.9.3 + '@typescript-eslint/tsconfig-utils@8.46.2(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + '@typescript-eslint/type-utils@8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.45.0 @@ -6794,11 +6894,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.46.1 - '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3(supports-color@8.1.1) eslint: 9.38.0(jiti@2.6.1) ts-api-utils: 2.1.0(typescript@5.9.3) @@ -6808,7 +6908,7 @@ snapshots: '@typescript-eslint/types@8.45.0': {} - '@typescript-eslint/types@8.46.1': {} + '@typescript-eslint/types@8.46.2': {} '@typescript-eslint/typescript-estree@8.45.0(typescript@5.9.3)': dependencies: @@ -6826,12 +6926,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.46.1(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.46.2(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.46.1(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.46.1(typescript@5.9.3) - '@typescript-eslint/types': 8.46.1 - '@typescript-eslint/visitor-keys': 8.46.1 + '@typescript-eslint/project-service': 8.46.2(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.46.2(typescript@5.9.3) + '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/visitor-keys': 8.46.2 debug: 4.4.3(supports-color@8.1.1) fast-glob: 3.3.3 is-glob: 4.0.3 @@ -6853,12 +6953,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.46.1 - '@typescript-eslint/types': 8.46.1 - '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.46.2 + '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) eslint: 9.38.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: @@ -6869,9 +6969,9 @@ snapshots: '@typescript-eslint/types': 8.45.0 eslint-visitor-keys: 4.2.1 - '@typescript-eslint/visitor-keys@8.46.1': + '@typescript-eslint/visitor-keys@8.46.2': dependencies: - '@typescript-eslint/types': 8.46.1 + '@typescript-eslint/types': 8.46.2 eslint-visitor-keys: 4.2.1 '@unrs/resolver-binding-android-arm-eabi@1.11.1': @@ -7106,6 +7206,8 @@ snapshots: assert-plus@1.0.0: {} + assertion-error@2.0.1: {} + ast-types-flow@0.0.8: {} ast-types@0.16.1: @@ -7140,33 +7242,33 @@ snapshots: transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.28.4): + babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.28.5): dependencies: - '@babel/compat-data': 7.28.4 - '@babel/core': 7.28.4 - '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4) + '@babel/compat-data': 7.28.5 + '@babel/core': 7.28.5 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.5) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.28.4): + babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.28.5): dependencies: - '@babel/core': 7.28.4 - '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.5) core-js-compat: 3.45.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.5(@babel/core@7.28.4): + babel-plugin-polyfill-regenerator@0.6.5(@babel/core@7.28.5): dependencies: - '@babel/core': 7.28.4 - '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.5) transitivePeerDependencies: - supports-color - babel-plugin-transform-import-meta@2.3.3(@babel/core@7.28.4): + babel-plugin-transform-import-meta@2.3.3(@babel/core@7.28.5): dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/template': 7.27.2 tslib: 2.8.1 @@ -7827,24 +7929,24 @@ snapshots: eslint: 9.38.0(jiti@2.6.1) semver: 7.7.3 - eslint-config-canonical@45.0.1(@types/node@24.8.1)(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): + eslint-config-canonical@45.0.1(@types/node@24.9.1)(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.8.1)(eslint@9.38.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3) + '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.9.1)(eslint@9.38.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3) '@next/eslint-plugin-next': 15.5.4 '@stylistic/eslint-plugin': 4.4.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@vitest/eslint-plugin': 1.3.13(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) eslint: 9.38.0(jiti@2.6.1) eslint-config-prettier: 10.1.8(eslint@9.38.0(jiti@2.6.1)) - eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)) + eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)) eslint-plugin-ava: 15.1.0(eslint@9.38.0(jiti@2.6.1)) - eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) eslint-plugin-eslint-comments: 3.2.0(eslint@9.38.0(jiti@2.6.1)) eslint-plugin-fp: 2.3.0(eslint@9.38.0(jiti@2.6.1)) eslint-plugin-functional: 9.0.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)) - eslint-plugin-jest: 28.14.0(@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)) + eslint-plugin-jest: 28.14.0(@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) eslint-plugin-jsdoc: 50.8.0(eslint@9.38.0(jiti@2.6.1)) eslint-plugin-jsonc: 2.20.1(eslint@9.38.0(jiti@2.6.1)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.38.0(jiti@2.6.1)) @@ -7865,7 +7967,7 @@ snapshots: graphql: 16.11.0 prettier: 3.6.2 ramda: 0.30.1 - typescript-eslint: 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + typescript-eslint: 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) yaml-eslint-parser: 1.3.0 transitivePeerDependencies: - '@apollo/subgraph' @@ -7899,7 +8001,7 @@ snapshots: optionalDependencies: unrs-resolver: 1.11.1 - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3(supports-color@8.1.1) @@ -7910,12 +8012,12 @@ snapshots: tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)) transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)): + eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)): dependencies: debug: 4.4.3(supports-color@8.1.1) eslint: 9.38.0(jiti@2.6.1) @@ -7926,8 +8028,8 @@ snapshots: tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)) transitivePeerDependencies: - supports-color @@ -7937,13 +8039,13 @@ snapshots: esquery: 1.6.0 jsonc-eslint-parser: 2.4.1 - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) eslint: 9.38.0(jiti@2.6.1) - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)) transitivePeerDependencies: - supports-color @@ -7959,14 +8061,14 @@ snapshots: pkg-dir: 5.0.0 resolve-from: 5.0.0 - eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): dependencies: '@typescript-eslint/utils': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) array-includes: 3.1.9 debug: 4.4.3(supports-color@8.1.1) doctrine: 3.0.0 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)) - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)) is-get-set-prop: 1.0.0 is-js-type: 2.0.0 is-obj-prop: 1.0.0 @@ -8021,9 +8123,9 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)): + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)): dependencies: - '@typescript-eslint/types': 8.46.1 + '@typescript-eslint/types': 8.46.2 comment-parser: 1.4.1 debug: 4.4.3(supports-color@8.1.1) eslint: 9.38.0(jiti@2.6.1) @@ -8034,16 +8136,16 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) transitivePeerDependencies: - supports-color - eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): dependencies: '@typescript-eslint/utils': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) eslint: 9.38.0(jiti@2.6.1) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) transitivePeerDependencies: - supports-color - typescript @@ -8130,7 +8232,7 @@ snapshots: eslint-plugin-perfectionist@4.15.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/types': 8.46.1 + '@typescript-eslint/types': 8.46.2 '@typescript-eslint/utils': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) eslint: 9.38.0(jiti@2.6.1) natural-orderby: 5.0.0 @@ -8154,9 +8256,9 @@ snapshots: eslint-plugin-react-hooks@6.1.0(eslint@9.38.0(jiti@2.6.1)): dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/parser': 7.28.4 - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.28.4) + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.28.5) eslint: 9.38.0(jiti@2.6.1) hermes-parser: 0.25.1 zod: 3.25.76 @@ -8499,6 +8601,9 @@ snapshots: fs.realpath@1.0.0: {} + fsevents@2.3.2: + optional: true + fsevents@2.3.3: optional: true @@ -8683,13 +8788,13 @@ snapshots: graphemer@1.4.0: {} - graphql-config@5.1.5(@types/node@24.8.1)(graphql@16.11.0)(typescript@5.9.3): + graphql-config@5.1.5(@types/node@24.9.1)(graphql@16.11.0)(typescript@5.9.3): dependencies: '@graphql-tools/graphql-file-loader': 8.1.2(graphql@16.11.0) '@graphql-tools/json-file-loader': 8.0.20(graphql@16.11.0) '@graphql-tools/load': 8.1.2(graphql@16.11.0) '@graphql-tools/merge': 9.1.1(graphql@16.11.0) - '@graphql-tools/url-loader': 8.0.33(@types/node@24.8.1)(graphql@16.11.0) + '@graphql-tools/url-loader': 8.0.33(@types/node@24.9.1)(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) cosmiconfig: 8.3.6(typescript@5.9.3) graphql: 16.11.0 @@ -9104,7 +9209,7 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/parser': 7.28.4 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 @@ -9275,10 +9380,10 @@ snapshots: lines-and-columns@1.2.4: {} - lint-staged@16.2.4: + lint-staged@16.2.6: dependencies: commander: 14.0.1 - listr2: 9.0.4 + listr2: 9.0.5 micromatch: 4.0.8 nano-spawn: 2.0.0 pidtree: 0.6.0 @@ -9294,7 +9399,7 @@ snapshots: rfdc: 1.4.1 wrap-ansi: 9.0.2 - listr2@9.0.4: + listr2@9.0.5: dependencies: cli-truncate: 5.1.0 colorette: 2.0.20 @@ -9448,9 +9553,9 @@ snapshots: merge2@1.4.1: {} - meros@1.3.2(@types/node@24.8.1): + meros@1.3.2(@types/node@24.9.1): optionalDependencies: - '@types/node': 24.8.1 + '@types/node': 24.9.1 micro-spelling-correcter@1.1.1: {} @@ -9886,6 +9991,14 @@ snapshots: dependencies: find-up: 5.0.0 + playwright-core@1.56.1: {} + + playwright@1.56.1: + dependencies: + playwright-core: 1.56.1 + optionalDependencies: + fsevents: 2.3.2 + pluralize@8.0.0: {} possible-typed-array-names@1.1.0: {} @@ -10711,12 +10824,12 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): + typescript-eslint@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) eslint: 9.38.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: @@ -10736,7 +10849,7 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 - undici-types@7.14.0: {} + undici-types@7.16.0: {} undici@5.29.0: dependencies: diff --git a/src/rules/importsAsDependencies.js b/src/rules/importsAsDependencies.js index dab62ea9b..e28bc0c49 100644 --- a/src/rules/importsAsDependencies.js +++ b/src/rules/importsAsDependencies.js @@ -4,6 +4,7 @@ import { traverse, tryParse, } from '@es-joy/jsdoccomment'; +import * as resolve from '@es-joy/resolve.exports'; import { readFileSync, } from 'node:fs'; @@ -103,7 +104,11 @@ export default iterateJsdoc(({ // Ignore } - if (!pkg || (!pkg.types && !pkg.typings)) { + if (!pkg || (!pkg.types && !pkg.typings && !resolve.exports(pkg, '.', { + conditions: [ + '!default', '!import', '!node', 'types', + ], + }))) { mod = `@types/${mod}`; } diff --git a/test/rules/assertions/importsAsDependencies.js b/test/rules/assertions/importsAsDependencies.js index 77f522e3e..c0eedf735 100644 --- a/test/rules/assertions/importsAsDependencies.js +++ b/test/rules/assertions/importsAsDependencies.js @@ -137,5 +137,12 @@ export default /** @type {import('../index.js').TestCases} */ ({ */ `, }, + { + code: ` + /** + * @type {null|import('playwright').SomeApi} + */ + `, + }, ], }); From 6c13a329914b375b0851a820a8ab6465fc486cc1 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Thu, 23 Oct 2025 09:32:50 -0700 Subject: [PATCH 162/189] chore: check Node 24 --- .github/workflows/feature.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/feature.yaml b/.github/workflows/feature.yaml index a58769f3e..523b7649c 100644 --- a/.github/workflows/feature.yaml +++ b/.github/workflows/feature.yaml @@ -42,6 +42,7 @@ jobs: node_js_version: - '20.11.0' - '22' + - '24' build: runs-on: ubuntu-latest name: Build From 0c4e5b6ef2a2eeaa2fd5028f1b4642d534e7dbe2 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Thu, 23 Oct 2025 09:57:23 -0700 Subject: [PATCH 163/189] fix(`imports-as-dependencies`): handle resolve.exports errors --- docs/rules/imports-as-dependencies.md | 5 ++ package.json | 1 + pnpm-lock.yaml | 48 +++++++++++++++++++ src/rules/importsAsDependencies.js | 14 ++++-- .../rules/assertions/importsAsDependencies.js | 13 +++++ 5 files changed, 76 insertions(+), 5 deletions(-) diff --git a/docs/rules/imports-as-dependencies.md b/docs/rules/imports-as-dependencies.md index 8bbe58935..93be625dd 100644 --- a/docs/rules/imports-as-dependencies.md +++ b/docs/rules/imports-as-dependencies.md @@ -40,6 +40,11 @@ The following patterns are considered problems: * @type {null|import('@sth/pkg').SomeApi} */ // Message: import points to package which is not found in dependencies + +/** + * @type {null|import('sinon').SomeApi} + */ +// Message: import points to package which is not found in dependencies ```` diff --git a/package.json b/package.json index e9c172984..417bd7aa5 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,7 @@ "replace": "^1.2.2", "rimraf": "^6.0.1", "semantic-release": "^25.0.1", + "sinon": "^21.0.0", "typescript": "5.9.3", "typescript-eslint": "^8.46.2" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 923f78935..c9afd81c9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -198,6 +198,9 @@ importers: semantic-release: specifier: ^25.0.1 version: 25.0.1(typescript@5.9.3) + sinon: + specifier: ^21.0.0 + version: 21.0.0 typescript: specifier: 5.9.3 version: 5.9.3 @@ -1253,6 +1256,15 @@ packages: resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} engines: {node: '>=18'} + '@sinonjs/commons@3.0.1': + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + + '@sinonjs/fake-timers@13.0.5': + resolution: {integrity: sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==} + + '@sinonjs/samsam@8.0.3': + resolution: {integrity: sha512-hw6HbX+GyVZzmaYNh82Ecj1vdGZrqVIn/keDTg63IgAwiQPO+xCz99uG6Woqgb4tM0mUiFENKZ4cqd7IX94AXQ==} + '@stylistic/eslint-plugin@4.4.1': resolution: {integrity: sha512-CEigAk7eOLyHvdgmpZsKFwtiqS2wFwI1fn4j09IU9GmD4euFM4jEBAViWeCqaNLlbX2k2+A/Fq9cje4HQBXuJQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -4606,6 +4618,9 @@ packages: resolution: {integrity: sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==} engines: {node: '>=6'} + sinon@21.0.0: + resolution: {integrity: sha512-TOgRcwFPbfGtpqvZw+hyqJDvqfapr1qUlOizROIk4bBLjlsjlB00Pg6wMFXNtJRpu+eCZuVOaLatG7M8105kAw==} + sister@3.0.2: resolution: {integrity: sha512-p19rtTs+NksBRKW9qn0UhZ8/TUI9BPw9lmtHny+Y3TinWlOa9jWh9xB0AtPSdmOy49NJJJSSe0Ey4C7h0TrcYA==} @@ -4930,6 +4945,14 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + type-detect@4.1.0: + resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} + engines: {node: '>=4'} + type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} @@ -6711,6 +6734,19 @@ snapshots: '@sindresorhus/merge-streams@4.0.0': {} + '@sinonjs/commons@3.0.1': + dependencies: + type-detect: 4.0.8 + + '@sinonjs/fake-timers@13.0.5': + dependencies: + '@sinonjs/commons': 3.0.1 + + '@sinonjs/samsam@8.0.3': + dependencies: + '@sinonjs/commons': 3.0.1 + type-detect: 4.1.0 + '@stylistic/eslint-plugin@4.4.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/utils': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) @@ -10421,6 +10457,14 @@ snapshots: figures: 2.0.0 pkg-conf: 2.1.0 + sinon@21.0.0: + dependencies: + '@sinonjs/commons': 3.0.1 + '@sinonjs/fake-timers': 13.0.5 + '@sinonjs/samsam': 8.0.3 + diff: 7.0.0 + supports-color: 7.2.0 + sister@3.0.2: {} skin-tone@2.0.0: @@ -10783,6 +10827,10 @@ snapshots: dependencies: prelude-ls: 1.2.1 + type-detect@4.0.8: {} + + type-detect@4.1.0: {} + type-fest@0.20.2: {} type-fest@1.4.0: {} diff --git a/src/rules/importsAsDependencies.js b/src/rules/importsAsDependencies.js index e28bc0c49..e3b418dd4 100644 --- a/src/rules/importsAsDependencies.js +++ b/src/rules/importsAsDependencies.js @@ -104,11 +104,15 @@ export default iterateJsdoc(({ // Ignore } - if (!pkg || (!pkg.types && !pkg.typings && !resolve.exports(pkg, '.', { - conditions: [ - '!default', '!import', '!node', 'types', - ], - }))) { + try { + if (!pkg || (!pkg.types && !pkg.typings && !resolve.exports(pkg, '.', { + conditions: [ + '!default', '!import', '!node', 'types', + ], + }))) { + mod = `@types/${mod}`; + } + } catch { mod = `@types/${mod}`; } diff --git a/test/rules/assertions/importsAsDependencies.js b/test/rules/assertions/importsAsDependencies.js index c0eedf735..95141e2e8 100644 --- a/test/rules/assertions/importsAsDependencies.js +++ b/test/rules/assertions/importsAsDependencies.js @@ -57,6 +57,19 @@ export default /** @type {import('../index.js').TestCases} */ ({ }, ], }, + { + code: ` + /** + * @type {null|import('sinon').SomeApi} + */ + `, + errors: [ + { + line: 3, + message: 'import points to package which is not found in dependencies', + }, + ], + }, ], valid: [ { From f938fdcc134edb6531a8b77b3b1238702d9d42d1 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Fri, 24 Oct 2025 13:57:26 -0700 Subject: [PATCH 164/189] fix(`no-undefined-types`): consider module scope variables as defined; fixes #1581 --- docs/rules/no-undefined-types.md | 18 ++++++++++++++++++ src/rules/noUndefinedTypes.js | 5 ++++- test/rules/assertions/noUndefinedTypes.js | 21 +++++++++++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/docs/rules/no-undefined-types.md b/docs/rules/no-undefined-types.md index 0b9eaa7ac..fbbe61394 100644 --- a/docs/rules/no-undefined-types.md +++ b/docs/rules/no-undefined-types.md @@ -1097,5 +1097,23 @@ class Storage { /** @type {globalThis.localStorage} */ #storage } + +/** + * La liste des sévérités. + * + * @type {Object} + */ +const Severities = { + FATAL: 1, + ERROR: 2, + WARN: 3, + INFO: 4, +}; + +/** + * @typedef {Severities[keyof Severities]} Severity Le type des sévérités. + */ + +export default Severities; ```` diff --git a/src/rules/noUndefinedTypes.js b/src/rules/noUndefinedTypes.js index af80beff6..670b4c1dd 100644 --- a/src/rules/noUndefinedTypes.js +++ b/src/rules/noUndefinedTypes.js @@ -342,7 +342,10 @@ export default iterateJsdoc(({ break; } - return []; + // Module scope names are also defined + return [ + name, + ]; } return [ diff --git a/test/rules/assertions/noUndefinedTypes.js b/test/rules/assertions/noUndefinedTypes.js index c4ec1636e..b1adacc6f 100644 --- a/test/rules/assertions/noUndefinedTypes.js +++ b/test/rules/assertions/noUndefinedTypes.js @@ -1870,5 +1870,26 @@ export default /** @type {import('../index.js').TestCases} */ ({ }, }, }, + { + code: ` + /** + * La liste des sévérités. + * + * @type {Object} + */ + const Severities = { + FATAL: 1, + ERROR: 2, + WARN: 3, + INFO: 4, + }; + + /** + * @typedef {Severities[keyof Severities]} Severity Le type des sévérités. + */ + + export default Severities; + `, + }, ], }); From ca57a1ffdeb8c48af0fb8be245a7ef2466af9d94 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sun, 26 Oct 2025 08:41:56 -0700 Subject: [PATCH 165/189] fix(CJS): provide CJS version of to-valid-identiifer; fixes #1583 --- .ncurc.cjs | 2 - package.json | 5 +- pnpm-lock.yaml | 272 +++++++++++++++++++++++++++++++++++++++++++++++ rollup.config.js | 16 +++ 4 files changed, 292 insertions(+), 3 deletions(-) create mode 100644 rollup.config.js diff --git a/.ncurc.cjs b/.ncurc.cjs index b340c5d88..5df05a809 100644 --- a/.ncurc.cjs +++ b/.ncurc.cjs @@ -4,8 +4,6 @@ module.exports = { reject: [ // Todo: When our package is converted to ESM only 'escape-string-regexp', - - // Todo: When our package is converted to ESM only 'are-docs-informative', ], }; diff --git a/package.json b/package.json index 417bd7aa5..4c6a24320 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "@es-joy/jsdoc-eslint-parser": "^0.25.0", "@eslint/core": "^0.16.0", "@hkdobrev/run-if-changed": "^0.6.3", + "@rollup/plugin-node-resolve": "^16.0.3", "@semantic-release/commit-analyzer": "^13.0.1", "@semantic-release/github": "^12.0.0", "@semantic-release/npm": "^13.1.1", @@ -69,6 +70,7 @@ "playwright": "^1.56.1", "replace": "^1.2.2", "rimraf": "^6.0.1", + "rollup": "^4.52.5", "semantic-release": "^25.0.1", "sinon": "^21.0.0", "typescript": "5.9.3", @@ -167,7 +169,8 @@ "tsc": "tsc", "tsc-build": "tsc -p tsconfig-prod.json", "tsc-cjs": "tsc -p tsconfig-cjs.json", - "build": "node ./src/bin/buildEntryFileForTS.js && rimraf ./dist && NODE_ENV=production babel ./src --out-file-extension .cjs --out-dir ./dist --copy-files --source-maps --ignore ./src/bin/*.js --no-copy-ignored && replace 'require\\(\"\\.(.*?)\\.[^.]*?\"\\)' 'require(\".$1.cjs\")' 'dist' -r --include=\"*.cjs\" && pnpm tsc-build && pnpm tsc-cjs", + "rollup": "rollup -c", + "build": "node ./src/bin/buildEntryFileForTS.js && rimraf ./dist && pnpm rollup && NODE_ENV=production babel ./src --out-file-extension .cjs --out-dir ./dist --copy-files --source-maps --ignore ./src/bin/*.js --no-copy-ignored && replace 'to-valid-identifier' '../to-valid-identifier.cjs' 'dist' -r --include=\"*.cjs\" && replace 'require\\(\"\\.(.*?)\\.[^.]*?\"\\)' 'require(\".$1.cjs\")' 'dist' -r --include=\"*.cjs\" && pnpm tsc-build && pnpm tsc-cjs", "attw": "attw --pack .", "check-docs": "node ./src/bin/generateDocs.js --check", "create-docs": "pnpm run create-options && node ./src/bin/generateDocs.js && pnpm ruleTypes", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c9afd81c9..79d6252ae 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -87,6 +87,9 @@ importers: '@hkdobrev/run-if-changed': specifier: ^0.6.3 version: 0.6.3(typescript@5.9.3) + '@rollup/plugin-node-resolve': + specifier: ^16.0.3 + version: 16.0.3(rollup@4.52.5) '@semantic-release/commit-analyzer': specifier: ^13.0.1 version: 13.0.1(semantic-release@25.0.1(typescript@5.9.3)) @@ -195,6 +198,9 @@ importers: rimraf: specifier: ^6.0.1 version: 6.0.1 + rollup: + specifier: ^4.52.5 + version: 4.52.5 semantic-release: specifier: ^25.0.1 version: 25.0.1(typescript@5.9.3) @@ -1213,6 +1219,134 @@ packages: '@repeaterjs/repeater@3.0.6': resolution: {integrity: sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==} + '@rollup/plugin-node-resolve@16.0.3': + resolution: {integrity: sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^2.78.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/pluginutils@5.3.0': + resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.52.5': + resolution: {integrity: sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.52.5': + resolution: {integrity: sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.52.5': + resolution: {integrity: sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.52.5': + resolution: {integrity: sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.52.5': + resolution: {integrity: sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.52.5': + resolution: {integrity: sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.52.5': + resolution: {integrity: sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.52.5': + resolution: {integrity: sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.52.5': + resolution: {integrity: sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.52.5': + resolution: {integrity: sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loong64-gnu@4.52.5': + resolution: {integrity: sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-ppc64-gnu@4.52.5': + resolution: {integrity: sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.52.5': + resolution: {integrity: sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.52.5': + resolution: {integrity: sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.52.5': + resolution: {integrity: sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.52.5': + resolution: {integrity: sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.52.5': + resolution: {integrity: sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-openharmony-arm64@4.52.5': + resolution: {integrity: sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.52.5': + resolution: {integrity: sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.52.5': + resolution: {integrity: sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.52.5': + resolution: {integrity: sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.52.5': + resolution: {integrity: sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==} + cpu: [x64] + os: [win32] + '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} @@ -1319,6 +1453,9 @@ packages: '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + '@types/resolve@1.20.2': + resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} + '@types/semver@7.7.1': resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} @@ -2170,6 +2307,10 @@ packages: resolution: {integrity: sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==} engines: {node: '>=16.0.0'} + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + default-browser-id@5.0.0: resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} engines: {node: '>=18'} @@ -2682,6 +2823,9 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -3328,6 +3472,9 @@ packages: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} + is-module@1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + is-negative-zero@2.0.3: resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} @@ -4502,6 +4649,11 @@ packages: resolution: {integrity: sha512-3niqt5bXFY1InKU8HKWqqYTYjtrBaxBMnXELXCXUYgtNYGUtZM5rB46HIC430AyacL95iEniGf7RgqsesykLmQ==} engines: {node: '>=18.0'} + rollup@4.52.5: + resolution: {integrity: sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + run-applescript@7.1.0: resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} engines: {node: '>=18'} @@ -6653,6 +6805,90 @@ snapshots: '@repeaterjs/repeater@3.0.6': {} + '@rollup/plugin-node-resolve@16.0.3(rollup@4.52.5)': + dependencies: + '@rollup/pluginutils': 5.3.0(rollup@4.52.5) + '@types/resolve': 1.20.2 + deepmerge: 4.3.1 + is-module: 1.0.0 + resolve: 1.22.10 + optionalDependencies: + rollup: 4.52.5 + + '@rollup/pluginutils@5.3.0(rollup@4.52.5)': + dependencies: + '@types/estree': 1.0.8 + estree-walker: 2.0.2 + picomatch: 4.0.3 + optionalDependencies: + rollup: 4.52.5 + + '@rollup/rollup-android-arm-eabi@4.52.5': + optional: true + + '@rollup/rollup-android-arm64@4.52.5': + optional: true + + '@rollup/rollup-darwin-arm64@4.52.5': + optional: true + + '@rollup/rollup-darwin-x64@4.52.5': + optional: true + + '@rollup/rollup-freebsd-arm64@4.52.5': + optional: true + + '@rollup/rollup-freebsd-x64@4.52.5': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.52.5': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.52.5': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.52.5': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.52.5': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.52.5': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.52.5': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.52.5': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.52.5': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.52.5': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.52.5': + optional: true + + '@rollup/rollup-linux-x64-musl@4.52.5': + optional: true + + '@rollup/rollup-openharmony-arm64@4.52.5': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.52.5': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.52.5': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.52.5': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.52.5': + optional: true + '@sec-ant/readable-stream@0.4.1': {} '@semantic-release/commit-analyzer@13.0.1(semantic-release@25.0.1(typescript@5.9.3))': @@ -6812,6 +7048,8 @@ snapshots: '@types/normalize-package-data@2.4.4': {} + '@types/resolve@1.20.2': {} + '@types/semver@7.7.1': {} '@types/spdx-expression-parse@3.0.5': {} @@ -7708,6 +7946,8 @@ snapshots: deepmerge-ts@7.1.5: {} + deepmerge@4.3.1: {} + default-browser-id@5.0.0: {} default-browser@5.2.1: @@ -8462,6 +8702,8 @@ snapshots: estraverse@5.3.0: {} + estree-walker@2.0.2: {} + esutils@2.0.3: {} eventemitter3@5.0.1: {} @@ -9136,6 +9378,8 @@ snapshots: is-map@2.0.3: {} + is-module@1.0.0: {} + is-negative-zero@2.0.3: {} is-number-object@1.1.1: @@ -10299,6 +10543,34 @@ snapshots: safe-stable-stringify: 2.5.0 semver-compare: 1.0.0 + rollup@4.52.5: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.52.5 + '@rollup/rollup-android-arm64': 4.52.5 + '@rollup/rollup-darwin-arm64': 4.52.5 + '@rollup/rollup-darwin-x64': 4.52.5 + '@rollup/rollup-freebsd-arm64': 4.52.5 + '@rollup/rollup-freebsd-x64': 4.52.5 + '@rollup/rollup-linux-arm-gnueabihf': 4.52.5 + '@rollup/rollup-linux-arm-musleabihf': 4.52.5 + '@rollup/rollup-linux-arm64-gnu': 4.52.5 + '@rollup/rollup-linux-arm64-musl': 4.52.5 + '@rollup/rollup-linux-loong64-gnu': 4.52.5 + '@rollup/rollup-linux-ppc64-gnu': 4.52.5 + '@rollup/rollup-linux-riscv64-gnu': 4.52.5 + '@rollup/rollup-linux-riscv64-musl': 4.52.5 + '@rollup/rollup-linux-s390x-gnu': 4.52.5 + '@rollup/rollup-linux-x64-gnu': 4.52.5 + '@rollup/rollup-linux-x64-musl': 4.52.5 + '@rollup/rollup-openharmony-arm64': 4.52.5 + '@rollup/rollup-win32-arm64-msvc': 4.52.5 + '@rollup/rollup-win32-ia32-msvc': 4.52.5 + '@rollup/rollup-win32-x64-gnu': 4.52.5 + '@rollup/rollup-win32-x64-msvc': 4.52.5 + fsevents: 2.3.3 + run-applescript@7.1.0: {} run-parallel@1.2.0: diff --git a/rollup.config.js b/rollup.config.js new file mode 100644 index 000000000..354f8ba07 --- /dev/null +++ b/rollup.config.js @@ -0,0 +1,16 @@ +import { + nodeResolve, +} from '@rollup/plugin-node-resolve'; + +export default [ + { + input: 'node_modules/to-valid-identifier/index.js', + output: { + file: 'dist/to-valid-identifier.cjs', + format: 'cjs', + }, + plugins: [ + nodeResolve(), + ], + }, +]; From c9a22b6287d7da56043e52b3d49ad36b6e7421db Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 28 Oct 2025 09:51:41 -0700 Subject: [PATCH 166/189] fix(`imports-as-dependencies`): check for object-based `types` (or `typings`) --- docs/rules/imports-as-dependencies.md | 4 ++++ package.json | 11 +++++++++-- pnpm-lock.yaml | 13 ++++++++----- src/rules/importsAsDependencies.js | 10 +--------- test/rules/assertions/importsAsDependencies.js | 7 +++++++ 5 files changed, 29 insertions(+), 16 deletions(-) diff --git a/docs/rules/imports-as-dependencies.md b/docs/rules/imports-as-dependencies.md index 93be625dd..4917c92fe 100644 --- a/docs/rules/imports-as-dependencies.md +++ b/docs/rules/imports-as-dependencies.md @@ -104,5 +104,9 @@ The following patterns are not considered problems: /** * @type {null|import('playwright').SomeApi} */ + +/** + * @type {null|import('ts-api-utils').SomeApi} + */ ```` diff --git a/package.json b/package.json index 4c6a24320..6b17d3076 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ }, "dependencies": { "@es-joy/jsdoccomment": "~0.76.0", - "@es-joy/resolve.exports": "1.0.0", + "@es-joy/resolve.exports": "1.2.0", "are-docs-informative": "^0.0.2", "comment-parser": "1.4.1", "debug": "^4.4.3", @@ -73,6 +73,7 @@ "rollup": "^4.52.5", "semantic-release": "^25.0.1", "sinon": "^21.0.0", + "ts-api-utils": "^2.1.0", "typescript": "5.9.3", "typescript-eslint": "^8.46.2" }, @@ -162,7 +163,13 @@ "pnpm": { "overrides": { "@types/eslint": "0.0.0-interferes-with-eslint-now" - } + }, + "ignoredBuiltDependencies": [ + "core-js", + "core-js-pure", + "re2", + "unrs-resolver" + ] }, "scripts": { "ruleTypes": "node ./src/bin/generateRuleTypes.js", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 79d6252ae..09e62ee4c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,8 +15,8 @@ importers: specifier: ~0.76.0 version: 0.76.0 '@es-joy/resolve.exports': - specifier: 1.0.0 - version: 1.0.0 + specifier: 1.2.0 + version: 1.2.0 are-docs-informative: specifier: ^0.0.2 version: 0.0.2 @@ -207,6 +207,9 @@ importers: sinon: specifier: ^21.0.0 version: 21.0.0 + ts-api-utils: + specifier: ^2.1.0 + version: 2.1.0(typescript@5.9.3) typescript: specifier: 5.9.3 version: 5.9.3 @@ -855,8 +858,8 @@ packages: resolution: {integrity: sha512-g+RihtzFgGTx2WYCuTHbdOXJeAlGnROws0TeALx9ow/ZmOROOZkVg5wp/B44n0WJgI4SQFP1eWM2iRPlU2Y14w==} engines: {node: '>=20.11.0'} - '@es-joy/resolve.exports@1.0.0': - resolution: {integrity: sha512-bbrmzsAZ9GA/3oBS6r8PWMtZarEhKHr413hak8ArwMEZ5DtaLErnkcyEWUsXy7urBcmVu/TpDzHPDVM5uIbx9A==} + '@es-joy/resolve.exports@1.2.0': + resolution: {integrity: sha512-Q9hjxWI5xBM+qW2enxfe8wDKdFWMfd0Z29k5ZJnuBqD/CasY5Zryj09aCA6owbGATWz+39p5uIdaHXpopOcG8g==} engines: {node: '>=10'} '@eslint-community/eslint-utils@4.9.0': @@ -6316,7 +6319,7 @@ snapshots: esquery: 1.6.0 jsdoc-type-pratt-parser: 6.10.0 - '@es-joy/resolve.exports@1.0.0': {} + '@es-joy/resolve.exports@1.2.0': {} '@eslint-community/eslint-utils@4.9.0(eslint@9.38.0(jiti@2.6.1))': dependencies: diff --git a/src/rules/importsAsDependencies.js b/src/rules/importsAsDependencies.js index e3b418dd4..967c87ca4 100644 --- a/src/rules/importsAsDependencies.js +++ b/src/rules/importsAsDependencies.js @@ -104,15 +104,7 @@ export default iterateJsdoc(({ // Ignore } - try { - if (!pkg || (!pkg.types && !pkg.typings && !resolve.exports(pkg, '.', { - conditions: [ - '!default', '!import', '!node', 'types', - ], - }))) { - mod = `@types/${mod}`; - } - } catch { + if (!pkg || (!pkg.types && !pkg.typings && !resolve.types(pkg))) { mod = `@types/${mod}`; } diff --git a/test/rules/assertions/importsAsDependencies.js b/test/rules/assertions/importsAsDependencies.js index 95141e2e8..f386dc57a 100644 --- a/test/rules/assertions/importsAsDependencies.js +++ b/test/rules/assertions/importsAsDependencies.js @@ -157,5 +157,12 @@ export default /** @type {import('../index.js').TestCases} */ ({ */ `, }, + { + code: ` + /** + * @type {null|import('ts-api-utils').SomeApi} + */ + `, + }, ], }); From 4f2ec35a391c6daf2570f927d24bb893ab83baa7 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 28 Oct 2025 15:24:24 -0700 Subject: [PATCH 167/189] fix: fixing of missing parent should go between child and grandparent Co-authored by Co-pilot --- docs/rules/require-param.md | 9 +++++++ src/rules/requireParam.js | 35 +++++++++++++++++---------- test/rules/assertions/requireParam.js | 29 +++++++++++++++++++++- 3 files changed, 59 insertions(+), 14 deletions(-) diff --git a/docs/rules/require-param.md b/docs/rules/require-param.md index 4918198ec..43aa20a8e 100644 --- a/docs/rules/require-param.md +++ b/docs/rules/require-param.md @@ -629,6 +629,15 @@ function quux ({ foo, bar: { baz }}) { } // Message: Missing JSDoc @param "root0" declaration. +/** + * @param root0 + * @param root0.foo + * @param root0.bar.baz + */ +function quux ({ foo, bar: { baz }}) { +} +// Message: Missing JSDoc @param "root0.bar" declaration. + /** * */ diff --git a/src/rules/requireParam.js b/src/rules/requireParam.js index 8c02470d1..2855f8ef0 100644 --- a/src/rules/requireParam.js +++ b/src/rules/requireParam.js @@ -181,27 +181,36 @@ export default iterateJsdoc(({ * }} */ const findExpectedIndex = (jsdocTags, indexAtFunctionParams) => { - const remainingRoots = functionParameterNames.slice(indexAtFunctionParams || 0); + // Get the parameters that come after the current index in the flattened order + const remainingFlattenedRoots = flattenedRoots.slice((indexAtFunctionParams || 0) + 1); + + // Find the first existing tag that comes after the current parameter in the flattened order const foundIndex = jsdocTags.findIndex(({ name, newAdd, }) => { - return !newAdd && remainingRoots.some((remainingRoot) => { - if (Array.isArray(remainingRoot)) { - return ( - /** - * @type {import('../jsdocUtils.js').FlattendRootInfo & { - * annotationParamName?: string|undefined; - * }} - */ (remainingRoot[1]).names.includes(name) - ); + if (newAdd) { + return false; + } + + // Check if the tag name matches any of the remaining flattened roots + return remainingFlattenedRoots.some((flattenedRoot) => { + // The flattened roots don't have the root prefix (e.g., "bar", "bar.baz") + // but JSDoc tags do (e.g., "root0", "root0.bar", "root0.bar.baz") + // So we need to check if the tag name ends with the flattened root + + // Check if tag name ends with "." + if (name.endsWith(`.${flattenedRoot}`)) { + return true; } - if (typeof remainingRoot === 'object') { - return name === remainingRoot.name; + // Also check if tag name exactly matches the flattenedRoot + // (for single-level params) + if (name === flattenedRoot) { + return true; } - return name === remainingRoot; + return false; }); }); diff --git a/test/rules/assertions/requireParam.js b/test/rules/assertions/requireParam.js index 95b8fdd37..0daf84524 100644 --- a/test/rules/assertions/requireParam.js +++ b/test/rules/assertions/requireParam.js @@ -339,6 +339,33 @@ export default /** @type {import('../index.js').TestCases} */ ({ } `, }, + { + code: ` + /** + * @param root0 + * @param root0.foo + * @param root0.bar.baz + */ + function quux ({ foo, bar: { baz }}) { + } + `, + errors: [ + { + line: 2, + message: 'Missing JSDoc @param "root0.bar" declaration.', + }, + ], + output: ` + /** + * @param root0 + * @param root0.foo + * @param root0.bar + * @param root0.bar.baz + */ + function quux ({ foo, bar: { baz }}) { + } + `, + }, { code: ` /** @@ -2244,8 +2271,8 @@ export default /** @type {import('../index.js').TestCases} */ ({ /** * Description. * @param {Object} options - * @param options.foo * @param {FooBar} foo + * @param options.foo * @param options.foo.bar */ function quux ({ foo: { bar } }) {} From 343816e57918337ebf27ac501a3c2070f1fd6f09 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Wed, 29 Oct 2025 11:12:19 -0700 Subject: [PATCH 168/189] test(`require-param`): add line numbers --- docs/rules/require-param.md | 10 ++--- test/rules/assertions/requireParam.js | 58 +++++++++++++++++++++------ test/rules/index.js | 16 ++------ 3 files changed, 54 insertions(+), 30 deletions(-) diff --git a/docs/rules/require-param.md b/docs/rules/require-param.md index 43aa20a8e..bf3b93569 100644 --- a/docs/rules/require-param.md +++ b/docs/rules/require-param.md @@ -1202,11 +1202,11 @@ function foo({ foo: { bar: { baz } }}) {} // Message: Missing JSDoc @param "options.foo.bar.baz" declaration. /** -* Returns a number. -* @param {Object} props Props. -* @param {Object} props.prop Prop. -* @return {number} A number. -*/ + * Returns a number. + * @param {Object} props Props. + * @param {Object} props.prop Prop. + * @return {number} A number. + */ export function testFn1 ({ prop = { a: 1, b: 2 } }) { } // "jsdoc/require-param": ["error"|"warn", {"useDefaultObjectProperties":true}] diff --git a/test/rules/assertions/requireParam.js b/test/rules/assertions/requireParam.js index 0daf84524..fba10bb30 100644 --- a/test/rules/assertions/requireParam.js +++ b/test/rules/assertions/requireParam.js @@ -287,6 +287,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ `, errors: [ { + line: 2, message: 'Missing JSDoc @param "options.foo" declaration.', }, ], @@ -1780,6 +1781,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ `, errors: [ { + line: 2, message: 'Missing JSDoc @param "options.foo" declaration.', }, ], @@ -1825,6 +1827,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ `, errors: [ { + line: 3, message: 'Missing JSDoc @param "options.permissions" declaration.', }, ], @@ -1933,6 +1936,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ `, errors: [ { + line: 2, message: 'Missing JSDoc @param "cfg.extra" declaration.', }, ], @@ -1966,6 +1970,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ `, errors: [ { + line: 2, message: 'Missing JSDoc @param "cfg.opts.extra" declaration.', }, ], @@ -2000,6 +2005,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ `, errors: [ { + line: 2, message: 'Missing JSDoc @param "cfg."1"" declaration.', }, ], @@ -2057,15 +2063,19 @@ export default /** @type {import('../index.js').TestCases} */ ({ `, errors: [ { + line: 2, message: 'Missing JSDoc @param "bbox.x" declaration.', }, { + line: 2, message: 'Missing JSDoc @param "bbox.y" declaration.', }, { + line: 2, message: 'Missing JSDoc @param "bbox.width" declaration.', }, { + line: 2, message: 'Missing JSDoc @param "bbox.height" declaration.', }, ], @@ -2100,15 +2110,19 @@ export default /** @type {import('../index.js').TestCases} */ ({ `, errors: [ { + line: 2, message: 'Missing JSDoc @param "bbox.x" declaration.', }, { + line: 2, message: 'Missing JSDoc @param "bbox.y" declaration.', }, { + line: 2, message: 'Missing JSDoc @param "bbox.width" declaration.', }, { + line: 2, message: 'Missing JSDoc @param "bbox.height" declaration.', }, ], @@ -2139,9 +2153,11 @@ export default /** @type {import('../index.js').TestCases} */ ({ `, errors: [ { + line: 3, message: 'Missing JSDoc @param "fetchOptions.url" declaration.', }, { + line: 3, message: 'Missing JSDoc @param "fetchOptions.options" declaration.', }, ], @@ -2208,6 +2224,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ `, errors: [ { + line: 2, message: 'Missing JSDoc @param "options.foo.bar" declaration.', }, ], @@ -2232,6 +2249,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ `, errors: [ { + line: 2, message: 'Missing JSDoc @param "options.foo.bar" declaration.', }, ], @@ -2261,9 +2279,11 @@ export default /** @type {import('../index.js').TestCases} */ ({ `, errors: [ { + line: 2, message: 'Missing JSDoc @param "options.foo" declaration.', }, { + line: 2, message: 'Missing JSDoc @param "options.foo.bar" declaration.', }, ], @@ -2289,6 +2309,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ `, errors: [ { + line: 2, message: 'Missing JSDoc @param "options.foo.bar" declaration.', }, ], @@ -2314,6 +2335,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ `, errors: [ { + line: 2, message: 'Missing JSDoc @param "options.foo.bar.baz" declaration.', }, ], @@ -2331,19 +2353,21 @@ export default /** @type {import('../index.js').TestCases} */ ({ { code: ` /** - * Returns a number. - * @param {Object} props Props. - * @param {Object} props.prop Prop. - * @return {number} A number. - */ + * Returns a number. + * @param {Object} props Props. + * @param {Object} props.prop Prop. + * @return {number} A number. + */ export function testFn1 ({ prop = { a: 1, b: 2 } }) { } `, errors: [ { + line: 2, message: 'Missing JSDoc @param "props.prop.a" declaration.', }, { + line: 2, message: 'Missing JSDoc @param "props.prop.b" declaration.', }, ], @@ -2357,13 +2381,13 @@ export default /** @type {import('../index.js').TestCases} */ ({ ], output: ` /** - * Returns a number. - * @param {Object} props Props. - * @param {Object} props.prop Prop. - * @param props.prop.a - * @param props.prop.b - * @return {number} A number. - */ + * Returns a number. + * @param {Object} props Props. + * @param {Object} props.prop Prop. + * @param props.prop.a + * @param props.prop.b + * @return {number} A number. + */ export function testFn1 ({ prop = { a: 1, b: 2 } }) { } `, @@ -2375,12 +2399,15 @@ export default /** @type {import('../index.js').TestCases} */ ({ `, errors: [ { + line: 2, message: 'Missing JSDoc @param "a" declaration.', }, { + line: 2, message: 'Missing JSDoc @param "b" declaration.', }, { + line: 2, message: 'Missing JSDoc @param "c" declaration.', }, ], @@ -2404,6 +2431,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ `, errors: [ { + line: 2, message: 'Missing JSDoc @param "baz" declaration.', }, ], @@ -2445,6 +2473,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ `, errors: [ { + line: 2, message: 'Missing JSDoc @param "verbose" declaration.', }, ], @@ -2492,6 +2521,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ `, errors: [ { + line: 6, message: 'Missing JSDoc @param "btnState" declaration.', }, ], @@ -2536,9 +2566,11 @@ export default /** @type {import('../index.js').TestCases} */ ({ `, errors: [ { + line: 3, message: 'Missing JSDoc @param "root1" declaration.', }, { + line: 3, message: 'Missing JSDoc @param "root1.bar" declaration.', }, ], @@ -2566,6 +2598,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ `, errors: [ { + line: 2, message: 'Missing JSDoc @param "b" declaration.', }, ], @@ -2592,6 +2625,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ `, errors: [ { + line: 2, message: 'Missing JSDoc @param "foo" declaration.', }, ], diff --git a/test/rules/index.js b/test/rules/index.js index e0e0754d0..35eeebb1c 100644 --- a/test/rules/index.js +++ b/test/rules/index.js @@ -83,20 +83,10 @@ export const runRuleTests = ({ return assertion; }); if (count) { - // Make an exception for now for `require-param` as it helps to find the - // many lines were it is missing to know which tests to check without - // adding false (or failing) expectations now - if (ruleName === 'require-param') { - // eslint-disable-next-line no-console -- CLI - console.log( - `Rule, \`${ruleName}\`, missing line numbers in errors: ${count}`, - ); - } else { - // eslint-disable-next-line no-console -- CLI - console.error(`Rule, \`${ruleName}\`, missing line numbers in errors: ${count}`); + // eslint-disable-next-line no-console -- CLI + console.error(`Rule, \`${ruleName}\`, missing line numbers in errors: ${count}`); - return; - } + return; } assertions.valid = assertions.valid.map((assertion) => { From 49df660b0d436c0afe2e41887b978632d4ab45e6 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Thu, 30 Oct 2025 16:15:55 -0700 Subject: [PATCH 169/189] chore: update devDeps. --- package.json | 4 ++-- pnpm-lock.yaml | 48 ++++++++++++++++++++++++------------------------ 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/package.json b/package.json index 6b17d3076..8a69df428 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@types/mocha": "^10.0.10", - "@types/node": "^24.9.1", + "@types/node": "^24.9.2", "@types/semver": "^7.7.1", "@types/spdx-expression-parse": "^3.0.5", "@typescript-eslint/types": "^8.46.2", @@ -69,7 +69,7 @@ "open-editor": "^5.1.0", "playwright": "^1.56.1", "replace": "^1.2.2", - "rimraf": "^6.0.1", + "rimraf": "^6.1.0", "rollup": "^4.52.5", "semantic-release": "^25.0.1", "sinon": "^21.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 09e62ee4c..60cfa117f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -121,8 +121,8 @@ importers: specifier: ^10.0.10 version: 10.0.10 '@types/node': - specifier: ^24.9.1 - version: 24.9.1 + specifier: ^24.9.2 + version: 24.9.2 '@types/semver': specifier: ^7.7.1 version: 7.7.1 @@ -158,7 +158,7 @@ importers: version: 9.38.0(jiti@2.6.1) eslint-config-canonical: specifier: ^45.0.1 - version: 45.0.1(@types/node@24.9.1)(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + version: 45.0.1(@types/node@24.9.2)(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) gitdown: specifier: ^4.1.1 version: 4.1.1(re2@1.20.9) @@ -196,8 +196,8 @@ importers: specifier: ^1.2.2 version: 1.2.2 rimraf: - specifier: ^6.0.1 - version: 6.0.1 + specifier: ^6.1.0 + version: 6.1.0 rollup: specifier: ^4.52.5 version: 4.52.5 @@ -1450,8 +1450,8 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@24.9.1': - resolution: {integrity: sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg==} + '@types/node@24.9.2': + resolution: {integrity: sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -4643,8 +4643,8 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rimraf@6.0.1: - resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} + rimraf@6.1.0: + resolution: {integrity: sha512-DxdlA1bdNzkZK7JiNWH+BAx1x4tEJWoTofIopFo6qWUU94jYrFZ0ubY05TqH3nWPJ1nKa1JWVFDINZ3fnrle/A==} engines: {node: 20 || >=22} hasBin: true @@ -6380,7 +6380,7 @@ snapshots: '@fastify/busboy@3.2.0': {} - '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.9.1)(eslint@9.38.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3)': + '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.9.2)(eslint@9.38.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3)': dependencies: '@graphql-tools/code-file-loader': 8.1.22(graphql@16.11.0) '@graphql-tools/graphql-tag-pluck': 8.3.21(graphql@16.11.0) @@ -6389,7 +6389,7 @@ snapshots: eslint: 9.38.0(jiti@2.6.1) fast-glob: 3.3.3 graphql: 16.11.0 - graphql-config: 5.1.5(@types/node@24.9.1)(graphql@16.11.0)(typescript@5.9.3) + graphql-config: 5.1.5(@types/node@24.9.2)(graphql@16.11.0)(typescript@5.9.3) graphql-depth-limit: 1.1.0(graphql@16.11.0) lodash.lowercase: 4.3.0 transitivePeerDependencies: @@ -6466,7 +6466,7 @@ snapshots: - uWebSockets.js - utf-8-validate - '@graphql-tools/executor-http@1.3.3(@types/node@24.9.1)(graphql@16.11.0)': + '@graphql-tools/executor-http@1.3.3(@types/node@24.9.2)(graphql@16.11.0)': dependencies: '@graphql-hive/signal': 1.0.0 '@graphql-tools/executor-common': 0.0.4(graphql@16.11.0) @@ -6476,7 +6476,7 @@ snapshots: '@whatwg-node/fetch': 0.10.11 '@whatwg-node/promise-helpers': 1.3.2 graphql: 16.11.0 - meros: 1.3.2(@types/node@24.9.1) + meros: 1.3.2(@types/node@24.9.2) tslib: 2.8.1 transitivePeerDependencies: - '@types/node' @@ -6566,10 +6566,10 @@ snapshots: graphql: 16.11.0 tslib: 2.8.1 - '@graphql-tools/url-loader@8.0.33(@types/node@24.9.1)(graphql@16.11.0)': + '@graphql-tools/url-loader@8.0.33(@types/node@24.9.2)(graphql@16.11.0)': dependencies: '@graphql-tools/executor-graphql-ws': 2.0.7(graphql@16.11.0) - '@graphql-tools/executor-http': 1.3.3(@types/node@24.9.1)(graphql@16.11.0) + '@graphql-tools/executor-http': 1.3.3(@types/node@24.9.2)(graphql@16.11.0) '@graphql-tools/executor-legacy-ws': 1.1.19(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) '@graphql-tools/wrap': 10.1.4(graphql@16.11.0) @@ -7045,7 +7045,7 @@ snapshots: '@types/ms@2.1.0': {} - '@types/node@24.9.1': + '@types/node@24.9.2': dependencies: undici-types: 7.16.0 @@ -7059,7 +7059,7 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 24.9.1 + '@types/node': 24.9.2 '@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: @@ -8208,9 +8208,9 @@ snapshots: eslint: 9.38.0(jiti@2.6.1) semver: 7.7.3 - eslint-config-canonical@45.0.1(@types/node@24.9.1)(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): + eslint-config-canonical@45.0.1(@types/node@24.9.2)(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.9.1)(eslint@9.38.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3) + '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.9.2)(eslint@9.38.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3) '@next/eslint-plugin-next': 15.5.4 '@stylistic/eslint-plugin': 4.4.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) @@ -9069,13 +9069,13 @@ snapshots: graphemer@1.4.0: {} - graphql-config@5.1.5(@types/node@24.9.1)(graphql@16.11.0)(typescript@5.9.3): + graphql-config@5.1.5(@types/node@24.9.2)(graphql@16.11.0)(typescript@5.9.3): dependencies: '@graphql-tools/graphql-file-loader': 8.1.2(graphql@16.11.0) '@graphql-tools/json-file-loader': 8.0.20(graphql@16.11.0) '@graphql-tools/load': 8.1.2(graphql@16.11.0) '@graphql-tools/merge': 9.1.1(graphql@16.11.0) - '@graphql-tools/url-loader': 8.0.33(@types/node@24.9.1)(graphql@16.11.0) + '@graphql-tools/url-loader': 8.0.33(@types/node@24.9.2)(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) cosmiconfig: 8.3.6(typescript@5.9.3) graphql: 16.11.0 @@ -9836,9 +9836,9 @@ snapshots: merge2@1.4.1: {} - meros@1.3.2(@types/node@24.9.1): + meros@1.3.2(@types/node@24.9.2): optionalDependencies: - '@types/node': 24.9.1 + '@types/node': 24.9.2 micro-spelling-correcter@1.1.1: {} @@ -10535,7 +10535,7 @@ snapshots: rfdc@1.4.1: {} - rimraf@6.0.1: + rimraf@6.1.0: dependencies: glob: 11.0.3 package-json-from-dist: 1.0.1 From 9b2d5408c997603ae786422258e4079ca491b37b Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Thu, 30 Oct 2025 16:21:25 -0700 Subject: [PATCH 170/189] chore: update eslint/core --- package.json | 2 +- pnpm-lock.yaml | 12 ++++++++++-- src/buildForbidRuleDefinition.js | 4 +--- src/buildRejectOrPreferRuleDefinition.js | 4 +--- test/index.js | 15 +++++++++++++++ 5 files changed, 28 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 8a69df428..28dab7ca6 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "@babel/preset-env": "^7.28.5", "@es-joy/escodegen": "^4.2.0", "@es-joy/jsdoc-eslint-parser": "^0.25.0", - "@eslint/core": "^0.16.0", + "@eslint/core": "^0.17.0", "@hkdobrev/run-if-changed": "^0.6.3", "@rollup/plugin-node-resolve": "^16.0.3", "@semantic-release/commit-analyzer": "^13.0.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 60cfa117f..bd1a8c02e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -82,8 +82,8 @@ importers: specifier: ^0.25.0 version: 0.25.0(jiti@2.6.1) '@eslint/core': - specifier: ^0.16.0 - version: 0.16.0 + specifier: ^0.17.0 + version: 0.17.0 '@hkdobrev/run-if-changed': specifier: ^0.6.3 version: 0.6.3(typescript@5.9.3) @@ -888,6 +888,10 @@ packages: resolution: {integrity: sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/core@0.17.0': + resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/eslintrc@3.3.1': resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -6348,6 +6352,10 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 + '@eslint/core@0.17.0': + dependencies: + '@types/json-schema': 7.0.15 + '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 diff --git a/src/buildForbidRuleDefinition.js b/src/buildForbidRuleDefinition.js index aa6252501..da3733f47 100644 --- a/src/buildForbidRuleDefinition.js +++ b/src/buildForbidRuleDefinition.js @@ -21,9 +21,7 @@ import iterateJsdoc from './iterateJsdoc.js'; * schema?: import('eslint').Rule.RuleMetaData['schema'] * url?: string, * }} cfg - * @returns {import('@eslint/core').RuleDefinition< - * import('@eslint/core').RuleDefinitionTypeOptions - * >} + * @returns {import('eslint').Rule.RuleModule} */ export const buildForbidRuleDefinition = ({ contextName, diff --git a/src/buildRejectOrPreferRuleDefinition.js b/src/buildRejectOrPreferRuleDefinition.js index fd7f91372..b00e95fdb 100644 --- a/src/buildRejectOrPreferRuleDefinition.js +++ b/src/buildRejectOrPreferRuleDefinition.js @@ -104,9 +104,7 @@ const infoUC = { * typeName?: string, * url?: string, * }} cfg - * @returns {import('@eslint/core').RuleDefinition< - * import('@eslint/core').RuleDefinitionTypeOptions - * >} + * @returns {import('eslint').Rule.RuleModule} */ export const buildRejectOrPreferRuleDefinition = ({ checkNativeTypes = null, diff --git a/test/index.js b/test/index.js index 3d36ac89a..3b93cafc7 100644 --- a/test/index.js +++ b/test/index.js @@ -10,6 +10,9 @@ import { import { expect, } from 'chai'; +import { + defineConfig, +} from 'eslint/config'; import { parser as typescriptEslintParser, } from 'typescript-eslint'; @@ -239,6 +242,18 @@ describe('buildForbidRuleDefinition', () => { }); }); +describe('`defineConfig`', () => { + it('works with `defineConfig`', () => { + expect(() => { + defineConfig({ + plugins: { + jsdoc: jsdocDefault, + }, + }); + }).not.to.throw(); + }); +}); + for (const [ contextName, contexts, From c72f8b00c8e2d5c8a466b9d72cf92a02dc2044b5 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Fri, 31 Oct 2025 13:59:03 -0700 Subject: [PATCH 171/189] chore: update eslint --- package.json | 4 +- pnpm-lock.yaml | 432 ++++++++++++++-------------- src/exportParser.js | 1 + src/iterateJsdoc.js | 10 +- src/jsdocUtils.js | 12 +- src/rules/convertToJsdocComments.js | 1 + src/rules/requireFileOverview.js | 2 +- src/rules/requireJsdoc.js | 1 + src/rules/requireParam.js | 2 +- 9 files changed, 237 insertions(+), 228 deletions(-) diff --git a/package.json b/package.json index 28dab7ca6..4b8d9d6f7 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "@hkdobrev/run-if-changed": "^0.6.3", "@rollup/plugin-node-resolve": "^16.0.3", "@semantic-release/commit-analyzer": "^13.0.1", - "@semantic-release/github": "^12.0.0", + "@semantic-release/github": "^12.0.1", "@semantic-release/npm": "^13.1.1", "@types/chai": "^5.2.3", "@types/debug": "^4.1.12", @@ -55,7 +55,7 @@ "camelcase": "^8.0.0", "chai": "^6.2.0", "decamelize": "^6.0.1", - "eslint": "9.38.0", + "eslint": "9.39.0", "eslint-config-canonical": "^45.0.1", "gitdown": "^4.1.1", "glob": "^11.0.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bd1a8c02e..2d8afacfd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -65,7 +65,7 @@ importers: version: 7.28.5 '@babel/eslint-parser': specifier: ^7.28.5 - version: 7.28.5(@babel/core@7.28.5)(eslint@9.38.0(jiti@2.6.1)) + version: 7.28.5(@babel/core@7.28.5)(eslint@9.39.0(jiti@2.6.1)) '@babel/plugin-syntax-class-properties': specifier: ^7.12.13 version: 7.12.13(@babel/core@7.28.5) @@ -94,8 +94,8 @@ importers: specifier: ^13.0.1 version: 13.0.1(semantic-release@25.0.1(typescript@5.9.3)) '@semantic-release/github': - specifier: ^12.0.0 - version: 12.0.0(semantic-release@25.0.1(typescript@5.9.3)) + specifier: ^12.0.1 + version: 12.0.1(semantic-release@25.0.1(typescript@5.9.3)) '@semantic-release/npm': specifier: ^13.1.1 version: 13.1.1(semantic-release@25.0.1(typescript@5.9.3)) @@ -154,11 +154,11 @@ importers: specifier: ^6.0.1 version: 6.0.1 eslint: - specifier: 9.38.0 - version: 9.38.0(jiti@2.6.1) + specifier: 9.39.0 + version: 9.39.0(jiti@2.6.1) eslint-config-canonical: specifier: ^45.0.1 - version: 45.0.1(@types/node@24.9.2)(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + version: 45.0.1(@types/node@24.9.2)(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) gitdown: specifier: ^4.1.1 version: 4.1.1(re2@1.20.9) @@ -215,7 +215,7 @@ importers: version: 5.9.3 typescript-eslint: specifier: ^8.46.2 - version: 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) packages: @@ -876,18 +876,14 @@ packages: resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-helpers@0.4.1': - resolution: {integrity: sha512-csZAzkNhsgwb0I/UAV6/RGFTbiakPCf0ZrGmrIxQpYvGZ00PhTkSnyKNolphgIvmnJeGw6rcGVEXfTzUnFuEvw==} + '@eslint/config-helpers@0.4.2': + resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/core@0.15.2': resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.16.0': - resolution: {integrity: sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.17.0': resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -896,8 +892,8 @@ packages: resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.38.0': - resolution: {integrity: sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A==} + '@eslint/js@9.39.0': + resolution: {integrity: sha512-BIhe0sW91JGPiaF1mOuPy5v8NflqfjIcDNpC+LbW9f609WVRX1rArrhi6Z2ymvrAry9jw+5POTj4t2t62o8Bmw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.7': @@ -908,8 +904,8 @@ packages: resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.4.0': - resolution: {integrity: sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==} + '@eslint/plugin-kit@0.4.1': + resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@fastify/busboy@2.1.1': @@ -1174,8 +1170,11 @@ packages: '@octokit/openapi-types@26.0.0': resolution: {integrity: sha512-7AtcfKtpo77j7Ts73b4OWhOZHTKo/gGY8bB3bNBQz4H+GRSWqx2yvj8TXRsbdTE0eRmYmXOEY66jM7mJ7LzfsA==} - '@octokit/plugin-paginate-rest@13.2.0': - resolution: {integrity: sha512-YuAlyjR8o5QoRSOvMHxSJzPtogkNMgeMv2mpccrvdUGeC3MKyfi/hS+KiFwyH/iRKIKyx+eIMsDjbt3p9r2GYA==} + '@octokit/openapi-types@27.0.0': + resolution: {integrity: sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==} + + '@octokit/plugin-paginate-rest@14.0.0': + resolution: {integrity: sha512-fNVRE7ufJiAA3XUrha2omTA39M6IXIc6GIZLvlbsm8QOQCYvpq/LkMNGyFlB1d8hTDzsAXa3OKtybdMAYsV/fw==} engines: {node: '>= 20'} peerDependencies: '@octokit/core': '>=6' @@ -1203,6 +1202,9 @@ packages: '@octokit/types@15.0.0': resolution: {integrity: sha512-8o6yDfmoGJUIeR9OfYU0/TUJTnMPG2r68+1yEdUeG2Fdqpj8Qetg0ziKIgcBm0RW/j29H41WP37CYCEhp6GoHQ==} + '@octokit/types@16.0.0': + resolution: {integrity: sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==} + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -1367,8 +1369,8 @@ packages: resolution: {integrity: sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==} engines: {node: '>=18'} - '@semantic-release/github@12.0.0': - resolution: {integrity: sha512-louWFjzZ+1dogfJTY8IuJuBcBUOTliYhBUYNcomnTfj0i959wtRQbr1POgdCoTHK7ut4N/0LNlYTH8SvSJM3hg==} + '@semantic-release/github@12.0.1': + resolution: {integrity: sha512-BSC7Ko6aRPnH8ttVBpd3gC98LTiyPdmrmX4qHilLw5EZqVrXrXwcKp/JKUC5hgm0XpJACR3nPjgbfOjTJ75PIA==} engines: {node: ^22.14.0 || >= 24.10.0} peerDependencies: semantic-release: '>=24.1.0' @@ -2788,8 +2790,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.38.0: - resolution: {integrity: sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==} + eslint@9.39.0: + resolution: {integrity: sha512-iy2GE3MHrYTL5lrCtMZ0X1KLEKKUjmK0kzwcnefhR66txcEmXZD2YWgR5GNdcEwkNx3a0siYkSvl0vIC+Svjmg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -5547,11 +5549,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/eslint-parser@7.28.5(@babel/core@7.28.5)(eslint@9.38.0(jiti@2.6.1))': + '@babel/eslint-parser@7.28.5(@babel/core@7.28.5)(eslint@9.39.0(jiti@2.6.1))': dependencies: '@babel/core': 7.28.5 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 9.38.0(jiti@2.6.1) + eslint: 9.39.0(jiti@2.6.1) eslint-visitor-keys: 2.1.0 semver: 6.3.1 @@ -6289,10 +6291,10 @@ snapshots: '@es-joy/jsdoc-eslint-parser@0.25.0(jiti@2.6.1)': dependencies: '@babel/core': 7.28.5 - '@babel/eslint-parser': 7.28.5(@babel/core@7.28.5)(eslint@9.38.0(jiti@2.6.1)) + '@babel/eslint-parser': 7.28.5(@babel/core@7.28.5)(eslint@9.39.0(jiti@2.6.1)) '@es-joy/jsdoccomment': 0.76.0 - '@typescript-eslint/parser': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.38.0(jiti@2.6.1) + '@typescript-eslint/parser': 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.0(jiti@2.6.1) esquery: 1.6.0 typescript: 5.9.3 transitivePeerDependencies: @@ -6325,9 +6327,9 @@ snapshots: '@es-joy/resolve.exports@1.2.0': {} - '@eslint-community/eslint-utils@4.9.0(eslint@9.38.0(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.0(eslint@9.39.0(jiti@2.6.1))': dependencies: - eslint: 9.38.0(jiti@2.6.1) + eslint: 9.39.0(jiti@2.6.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -6340,18 +6342,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.4.1': + '@eslint/config-helpers@0.4.2': dependencies: - '@eslint/core': 0.16.0 + '@eslint/core': 0.17.0 '@eslint/core@0.15.2': dependencies: '@types/json-schema': 7.0.15 - '@eslint/core@0.16.0': - dependencies: - '@types/json-schema': 7.0.15 - '@eslint/core@0.17.0': dependencies: '@types/json-schema': 7.0.15 @@ -6370,7 +6368,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.38.0': {} + '@eslint/js@9.39.0': {} '@eslint/object-schema@2.1.7': {} @@ -6379,22 +6377,22 @@ snapshots: '@eslint/core': 0.15.2 levn: 0.4.1 - '@eslint/plugin-kit@0.4.0': + '@eslint/plugin-kit@0.4.1': dependencies: - '@eslint/core': 0.16.0 + '@eslint/core': 0.17.0 levn: 0.4.1 '@fastify/busboy@2.1.1': {} '@fastify/busboy@3.2.0': {} - '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.9.2)(eslint@9.38.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3)': + '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.9.2)(eslint@9.39.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3)': dependencies: '@graphql-tools/code-file-loader': 8.1.22(graphql@16.11.0) '@graphql-tools/graphql-tag-pluck': 8.3.21(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) debug: 4.4.3(supports-color@8.1.1) - eslint: 9.38.0(jiti@2.6.1) + eslint: 9.39.0(jiti@2.6.1) fast-glob: 3.3.3 graphql: 16.11.0 graphql-config: 5.1.5(@types/node@24.9.2)(graphql@16.11.0)(typescript@5.9.3) @@ -6763,10 +6761,12 @@ snapshots: '@octokit/openapi-types@26.0.0': {} - '@octokit/plugin-paginate-rest@13.2.0(@octokit/core@7.0.5)': + '@octokit/openapi-types@27.0.0': {} + + '@octokit/plugin-paginate-rest@14.0.0(@octokit/core@7.0.5)': dependencies: '@octokit/core': 7.0.5 - '@octokit/types': 15.0.0 + '@octokit/types': 16.0.0 '@octokit/plugin-retry@8.0.2(@octokit/core@7.0.5)': dependencies: @@ -6797,6 +6797,10 @@ snapshots: dependencies: '@octokit/openapi-types': 26.0.0 + '@octokit/types@16.0.0': + dependencies: + '@octokit/openapi-types': 27.0.0 + '@pkgjs/parseargs@0.11.0': optional: true @@ -6918,10 +6922,10 @@ snapshots: '@semantic-release/error@4.0.0': {} - '@semantic-release/github@12.0.0(semantic-release@25.0.1(typescript@5.9.3))': + '@semantic-release/github@12.0.1(semantic-release@25.0.1(typescript@5.9.3))': dependencies: '@octokit/core': 7.0.5 - '@octokit/plugin-paginate-rest': 13.2.0(@octokit/core@7.0.5) + '@octokit/plugin-paginate-rest': 14.0.0(@octokit/core@7.0.5) '@octokit/plugin-retry': 8.0.2(@octokit/core@7.0.5) '@octokit/plugin-throttling': 11.0.2(@octokit/core@7.0.5) '@semantic-release/error': 4.0.0 @@ -6994,10 +6998,10 @@ snapshots: '@sinonjs/commons': 3.0.1 type-detect: 4.1.0 - '@stylistic/eslint-plugin@4.4.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': + '@stylistic/eslint-plugin@4.4.1(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/utils': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.38.0(jiti@2.6.1) + '@typescript-eslint/utils': 8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.0(jiti@2.6.1) eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 @@ -7069,15 +7073,15 @@ snapshots: dependencies: '@types/node': 24.9.2 - '@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.45.0 - '@typescript-eslint/type-utils': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.45.0 - eslint: 9.38.0(jiti@2.6.1) + eslint: 9.39.0(jiti@2.6.1) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -7086,15 +7090,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.46.2 - '@typescript-eslint/type-utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.46.2 - eslint: 9.38.0(jiti@2.6.1) + eslint: 9.39.0(jiti@2.6.1) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -7103,26 +7107,26 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.45.0 '@typescript-eslint/types': 8.45.0 '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.45.0 debug: 4.4.3(supports-color@8.1.1) - eslint: 9.38.0(jiti@2.6.1) + eslint: 9.39.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.46.2 '@typescript-eslint/types': 8.46.2 '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.46.2 debug: 4.4.3(supports-color@8.1.1) - eslint: 9.38.0(jiti@2.6.1) + eslint: 9.39.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -7167,25 +7171,25 @@ snapshots: dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.45.0 '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3(supports-color@8.1.1) - eslint: 9.38.0(jiti@2.6.1) + eslint: 9.39.0(jiti@2.6.1) ts-api-utils: 2.1.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.46.2 '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3(supports-color@8.1.1) - eslint: 9.38.0(jiti@2.6.1) + eslint: 9.39.0(jiti@2.6.1) ts-api-utils: 2.1.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: @@ -7227,24 +7231,24 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.0(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.45.0 '@typescript-eslint/types': 8.45.0 '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.3) - eslint: 9.38.0(jiti@2.6.1) + eslint: 9.39.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.0(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.46.2 '@typescript-eslint/types': 8.46.2 '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) - eslint: 9.38.0(jiti@2.6.1) + eslint: 9.39.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -7318,11 +7322,11 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - '@vitest/eslint-plugin@1.3.13(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': + '@vitest/eslint-plugin@1.3.13(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.45.0 - '@typescript-eslint/utils': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.38.0(jiti@2.6.1) + '@typescript-eslint/utils': 8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.0(jiti@2.6.1) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: @@ -8206,55 +8210,55 @@ snapshots: lodash.get: 4.4.2 lodash.zip: 4.2.0 - eslint-compat-utils@0.5.1(eslint@9.38.0(jiti@2.6.1)): + eslint-compat-utils@0.5.1(eslint@9.39.0(jiti@2.6.1)): dependencies: - eslint: 9.38.0(jiti@2.6.1) + eslint: 9.39.0(jiti@2.6.1) semver: 7.7.3 - eslint-compat-utils@0.6.5(eslint@9.38.0(jiti@2.6.1)): + eslint-compat-utils@0.6.5(eslint@9.39.0(jiti@2.6.1)): dependencies: - eslint: 9.38.0(jiti@2.6.1) + eslint: 9.39.0(jiti@2.6.1) semver: 7.7.3 - eslint-config-canonical@45.0.1(@types/node@24.9.2)(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): + eslint-config-canonical@45.0.1(@types/node@24.9.2)(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.9.2)(eslint@9.38.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3) + '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.9.2)(eslint@9.39.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3) '@next/eslint-plugin-next': 15.5.4 - '@stylistic/eslint-plugin': 4.4.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - '@vitest/eslint-plugin': 1.3.13(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.38.0(jiti@2.6.1) - eslint-config-prettier: 10.1.8(eslint@9.38.0(jiti@2.6.1)) - eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)) - eslint-plugin-ava: 15.1.0(eslint@9.38.0(jiti@2.6.1)) - eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-eslint-comments: 3.2.0(eslint@9.38.0(jiti@2.6.1)) - eslint-plugin-fp: 2.3.0(eslint@9.38.0(jiti@2.6.1)) - eslint-plugin-functional: 9.0.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)) - eslint-plugin-jest: 28.14.0(@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-jsdoc: 50.8.0(eslint@9.38.0(jiti@2.6.1)) - eslint-plugin-jsonc: 2.20.1(eslint@9.38.0(jiti@2.6.1)) - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.38.0(jiti@2.6.1)) - eslint-plugin-lodash: 8.0.0(eslint@9.38.0(jiti@2.6.1)) - eslint-plugin-mocha: 10.5.0(eslint@9.38.0(jiti@2.6.1)) + '@stylistic/eslint-plugin': 4.4.1(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + '@vitest/eslint-plugin': 1.3.13(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.0(jiti@2.6.1) + eslint-config-prettier: 10.1.8(eslint@9.39.0(jiti@2.6.1)) + eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1)) + eslint-plugin-ava: 15.1.0(eslint@9.39.0(jiti@2.6.1)) + eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + eslint-plugin-eslint-comments: 3.2.0(eslint@9.39.0(jiti@2.6.1)) + eslint-plugin-fp: 2.3.0(eslint@9.39.0(jiti@2.6.1)) + eslint-plugin-functional: 9.0.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)) + eslint-plugin-jest: 28.14.0(@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + eslint-plugin-jsdoc: 50.8.0(eslint@9.39.0(jiti@2.6.1)) + eslint-plugin-jsonc: 2.20.1(eslint@9.39.0(jiti@2.6.1)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.0(jiti@2.6.1)) + eslint-plugin-lodash: 8.0.0(eslint@9.39.0(jiti@2.6.1)) + eslint-plugin-mocha: 10.5.0(eslint@9.39.0(jiti@2.6.1)) eslint-plugin-modules-newline: 0.0.6 - eslint-plugin-n: 17.23.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-perfectionist: 4.15.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-prettier: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1))(prettier@3.6.2) - eslint-plugin-promise: 7.2.1(eslint@9.38.0(jiti@2.6.1)) - eslint-plugin-react: 7.37.5(eslint@9.38.0(jiti@2.6.1)) - eslint-plugin-react-hooks: 6.1.0(eslint@9.38.0(jiti@2.6.1)) - eslint-plugin-regexp: 2.10.0(eslint@9.38.0(jiti@2.6.1)) - eslint-plugin-unicorn: 60.0.0(eslint@9.38.0(jiti@2.6.1)) - eslint-plugin-yml: 1.18.0(eslint@9.38.0(jiti@2.6.1)) - eslint-plugin-zod: 1.4.0(eslint@9.38.0(jiti@2.6.1)) + eslint-plugin-n: 17.23.1(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + eslint-plugin-perfectionist: 4.15.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + eslint-plugin-prettier: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1))(prettier@3.6.2) + eslint-plugin-promise: 7.2.1(eslint@9.39.0(jiti@2.6.1)) + eslint-plugin-react: 7.37.5(eslint@9.39.0(jiti@2.6.1)) + eslint-plugin-react-hooks: 6.1.0(eslint@9.39.0(jiti@2.6.1)) + eslint-plugin-regexp: 2.10.0(eslint@9.39.0(jiti@2.6.1)) + eslint-plugin-unicorn: 60.0.0(eslint@9.39.0(jiti@2.6.1)) + eslint-plugin-yml: 1.18.0(eslint@9.39.0(jiti@2.6.1)) + eslint-plugin-zod: 1.4.0(eslint@9.39.0(jiti@2.6.1)) globals: 16.4.0 graphql: 16.11.0 prettier: 3.6.2 ramda: 0.30.1 - typescript-eslint: 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + typescript-eslint: 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) yaml-eslint-parser: 1.3.0 transitivePeerDependencies: - '@apollo/subgraph' @@ -8277,9 +8281,9 @@ snapshots: - utf-8-validate - vitest - eslint-config-prettier@10.1.8(eslint@9.38.0(jiti@2.6.1)): + eslint-config-prettier@10.1.8(eslint@9.39.0(jiti@2.6.1)): dependencies: - eslint: 9.38.0(jiti@2.6.1) + eslint: 9.39.0(jiti@2.6.1) eslint-import-context@0.1.9(unrs-resolver@1.11.1): dependencies: @@ -8288,26 +8292,26 @@ snapshots: optionalDependencies: unrs-resolver: 1.11.1 - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3(supports-color@8.1.1) - eslint: 9.38.0(jiti@2.6.1) + eslint: 9.39.0(jiti@2.6.1) get-tsconfig: 4.10.1 is-bun-module: 2.0.0 stable-hash: 0.0.5 tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)) transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)): + eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1)): dependencies: debug: 4.4.3(supports-color@8.1.1) - eslint: 9.38.0(jiti@2.6.1) + eslint: 9.39.0(jiti@2.6.1) eslint-import-context: 0.1.9(unrs-resolver@1.11.1) get-tsconfig: 4.10.1 is-bun-module: 2.0.0 @@ -8315,32 +8319,32 @@ snapshots: tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)) transitivePeerDependencies: - supports-color - eslint-json-compat-utils@0.2.1(eslint@9.38.0(jiti@2.6.1))(jsonc-eslint-parser@2.4.1): + eslint-json-compat-utils@0.2.1(eslint@9.39.0(jiti@2.6.1))(jsonc-eslint-parser@2.4.1): dependencies: - eslint: 9.38.0(jiti@2.6.1) + eslint: 9.39.0(jiti@2.6.1) esquery: 1.6.0 jsonc-eslint-parser: 2.4.1 - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.38.0(jiti@2.6.1) - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)) + '@typescript-eslint/parser': 8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.0(jiti@2.6.1) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1)) transitivePeerDependencies: - supports-color - eslint-plugin-ava@15.1.0(eslint@9.38.0(jiti@2.6.1)): + eslint-plugin-ava@15.1.0(eslint@9.39.0(jiti@2.6.1)): dependencies: enhance-visitors: 1.0.0 - eslint: 9.38.0(jiti@2.6.1) - eslint-utils: 3.0.0(eslint@9.38.0(jiti@2.6.1)) + eslint: 9.39.0(jiti@2.6.1) + eslint-utils: 3.0.0(eslint@9.39.0(jiti@2.6.1)) espree: 9.6.1 espurify: 2.1.1 import-modules: 2.1.0 @@ -8348,14 +8352,14 @@ snapshots: pkg-dir: 5.0.0 resolve-from: 5.0.0 - eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) array-includes: 3.1.9 debug: 4.4.3(supports-color@8.1.1) doctrine: 3.0.0 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)) - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1)) is-get-set-prop: 1.0.0 is-js-type: 2.0.0 is-obj-prop: 1.0.0 @@ -8375,34 +8379,34 @@ snapshots: - supports-color - typescript - eslint-plugin-es-x@7.8.0(eslint@9.38.0(jiti@2.6.1)): + eslint-plugin-es-x@7.8.0(eslint@9.39.0(jiti@2.6.1)): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.0(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.1 - eslint: 9.38.0(jiti@2.6.1) - eslint-compat-utils: 0.5.1(eslint@9.38.0(jiti@2.6.1)) + eslint: 9.39.0(jiti@2.6.1) + eslint-compat-utils: 0.5.1(eslint@9.39.0(jiti@2.6.1)) - eslint-plugin-eslint-comments@3.2.0(eslint@9.38.0(jiti@2.6.1)): + eslint-plugin-eslint-comments@3.2.0(eslint@9.39.0(jiti@2.6.1)): dependencies: escape-string-regexp: 1.0.5 - eslint: 9.38.0(jiti@2.6.1) + eslint: 9.39.0(jiti@2.6.1) ignore: 5.3.2 - eslint-plugin-fp@2.3.0(eslint@9.38.0(jiti@2.6.1)): + eslint-plugin-fp@2.3.0(eslint@9.39.0(jiti@2.6.1)): dependencies: create-eslint-index: 1.0.0 - eslint: 9.38.0(jiti@2.6.1) + eslint: 9.39.0(jiti@2.6.1) eslint-ast-utils: 1.1.0 lodash: 4.17.21 req-all: 0.1.0 - eslint-plugin-functional@9.0.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-functional@9.0.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) deepmerge-ts: 7.1.5 escape-string-regexp: 5.0.0 - eslint: 9.38.0(jiti@2.6.1) - is-immutable-type: 5.0.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.0(jiti@2.6.1) + is-immutable-type: 5.0.1(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) ts-api-utils: 2.1.0(typescript@5.9.3) ts-declaration-location: 1.0.7(typescript@5.9.3) optionalDependencies: @@ -8410,12 +8414,12 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)): + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)): dependencies: '@typescript-eslint/types': 8.46.2 comment-parser: 1.4.1 debug: 4.4.3(supports-color@8.1.1) - eslint: 9.38.0(jiti@2.6.1) + eslint: 9.39.0(jiti@2.6.1) eslint-import-context: 0.1.9(unrs-resolver@1.11.1) is-glob: 4.0.3 minimatch: 10.0.3 @@ -8423,28 +8427,28 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) transitivePeerDependencies: - supports-color - eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.38.0(jiti@2.6.1) + '@typescript-eslint/utils': 8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.0(jiti@2.6.1) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-jsdoc@50.8.0(eslint@9.38.0(jiti@2.6.1)): + eslint-plugin-jsdoc@50.8.0(eslint@9.39.0(jiti@2.6.1)): dependencies: '@es-joy/jsdoccomment': 0.50.2 are-docs-informative: 0.0.2 comment-parser: 1.4.1 debug: 4.4.3(supports-color@8.1.1) escape-string-regexp: 4.0.0 - eslint: 9.38.0(jiti@2.6.1) + eslint: 9.39.0(jiti@2.6.1) espree: 10.4.0 esquery: 1.6.0 parse-imports-exports: 0.2.4 @@ -8453,12 +8457,12 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-jsonc@2.20.1(eslint@9.38.0(jiti@2.6.1)): + eslint-plugin-jsonc@2.20.1(eslint@9.39.0(jiti@2.6.1)): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) - eslint: 9.38.0(jiti@2.6.1) - eslint-compat-utils: 0.6.5(eslint@9.38.0(jiti@2.6.1)) - eslint-json-compat-utils: 0.2.1(eslint@9.38.0(jiti@2.6.1))(jsonc-eslint-parser@2.4.1) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.0(jiti@2.6.1)) + eslint: 9.39.0(jiti@2.6.1) + eslint-compat-utils: 0.6.5(eslint@9.39.0(jiti@2.6.1)) + eslint-json-compat-utils: 0.2.1(eslint@9.39.0(jiti@2.6.1))(jsonc-eslint-parser@2.4.1) espree: 10.4.0 graphemer: 1.4.0 jsonc-eslint-parser: 2.4.1 @@ -8467,7 +8471,7 @@ snapshots: transitivePeerDependencies: - '@eslint/json' - eslint-plugin-jsx-a11y@6.10.2(eslint@9.38.0(jiti@2.6.1)): + eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.0(jiti@2.6.1)): dependencies: aria-query: 5.3.2 array-includes: 3.1.9 @@ -8477,7 +8481,7 @@ snapshots: axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 9.38.0(jiti@2.6.1) + eslint: 9.39.0(jiti@2.6.1) hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 @@ -8486,15 +8490,15 @@ snapshots: safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 - eslint-plugin-lodash@8.0.0(eslint@9.38.0(jiti@2.6.1)): + eslint-plugin-lodash@8.0.0(eslint@9.39.0(jiti@2.6.1)): dependencies: - eslint: 9.38.0(jiti@2.6.1) + eslint: 9.39.0(jiti@2.6.1) lodash: 4.17.21 - eslint-plugin-mocha@10.5.0(eslint@9.38.0(jiti@2.6.1)): + eslint-plugin-mocha@10.5.0(eslint@9.39.0(jiti@2.6.1)): dependencies: - eslint: 9.38.0(jiti@2.6.1) - eslint-utils: 3.0.0(eslint@9.38.0(jiti@2.6.1)) + eslint: 9.39.0(jiti@2.6.1) + eslint-utils: 3.0.0(eslint@9.39.0(jiti@2.6.1)) globals: 13.24.0 rambda: 7.5.0 @@ -8502,12 +8506,12 @@ snapshots: dependencies: requireindex: 1.1.0 - eslint-plugin-n@17.23.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-n@17.23.1(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.0(jiti@2.6.1)) enhanced-resolve: 5.18.3 - eslint: 9.38.0(jiti@2.6.1) - eslint-plugin-es-x: 7.8.0(eslint@9.38.0(jiti@2.6.1)) + eslint: 9.39.0(jiti@2.6.1) + eslint-plugin-es-x: 7.8.0(eslint@9.39.0(jiti@2.6.1)) get-tsconfig: 4.10.1 globals: 15.15.0 globrex: 0.1.2 @@ -8517,43 +8521,43 @@ snapshots: transitivePeerDependencies: - typescript - eslint-plugin-perfectionist@4.15.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-perfectionist@4.15.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3): dependencies: '@typescript-eslint/types': 8.46.2 - '@typescript-eslint/utils': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.38.0(jiti@2.6.1) + '@typescript-eslint/utils': 8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.0(jiti@2.6.1) natural-orderby: 5.0.0 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-prettier@5.5.4(eslint-config-prettier@10.1.8(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1))(prettier@3.6.2): + eslint-plugin-prettier@5.5.4(eslint-config-prettier@10.1.8(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1))(prettier@3.6.2): dependencies: - eslint: 9.38.0(jiti@2.6.1) + eslint: 9.39.0(jiti@2.6.1) prettier: 3.6.2 prettier-linter-helpers: 1.0.0 synckit: 0.11.11 optionalDependencies: - eslint-config-prettier: 10.1.8(eslint@9.38.0(jiti@2.6.1)) + eslint-config-prettier: 10.1.8(eslint@9.39.0(jiti@2.6.1)) - eslint-plugin-promise@7.2.1(eslint@9.38.0(jiti@2.6.1)): + eslint-plugin-promise@7.2.1(eslint@9.39.0(jiti@2.6.1)): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) - eslint: 9.38.0(jiti@2.6.1) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.0(jiti@2.6.1)) + eslint: 9.39.0(jiti@2.6.1) - eslint-plugin-react-hooks@6.1.0(eslint@9.38.0(jiti@2.6.1)): + eslint-plugin-react-hooks@6.1.0(eslint@9.39.0(jiti@2.6.1)): dependencies: '@babel/core': 7.28.5 '@babel/parser': 7.28.4 '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.28.5) - eslint: 9.38.0(jiti@2.6.1) + eslint: 9.39.0(jiti@2.6.1) hermes-parser: 0.25.1 zod: 3.25.76 zod-validation-error: 3.5.3(zod@3.25.76) transitivePeerDependencies: - supports-color - eslint-plugin-react@7.37.5(eslint@9.38.0(jiti@2.6.1)): + eslint-plugin-react@7.37.5(eslint@9.39.0(jiti@2.6.1)): dependencies: array-includes: 3.1.9 array.prototype.findlast: 1.2.5 @@ -8561,7 +8565,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.1 - eslint: 9.38.0(jiti@2.6.1) + eslint: 9.39.0(jiti@2.6.1) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -8575,27 +8579,27 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-regexp@2.10.0(eslint@9.38.0(jiti@2.6.1)): + eslint-plugin-regexp@2.10.0(eslint@9.39.0(jiti@2.6.1)): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.0(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.1 comment-parser: 1.4.1 - eslint: 9.38.0(jiti@2.6.1) + eslint: 9.39.0(jiti@2.6.1) jsdoc-type-pratt-parser: 4.8.0 refa: 0.12.1 regexp-ast-analysis: 0.7.1 scslre: 0.3.0 - eslint-plugin-unicorn@60.0.0(eslint@9.38.0(jiti@2.6.1)): + eslint-plugin-unicorn@60.0.0(eslint@9.39.0(jiti@2.6.1)): dependencies: '@babel/helper-validator-identifier': 7.27.1 - '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.0(jiti@2.6.1)) '@eslint/plugin-kit': 0.3.5 change-case: 5.4.4 ci-info: 4.3.0 clean-regexp: 1.0.0 core-js-compat: 3.45.1 - eslint: 9.38.0(jiti@2.6.1) + eslint: 9.39.0(jiti@2.6.1) esquery: 1.6.0 find-up-simple: 1.0.1 globals: 16.4.0 @@ -8608,20 +8612,20 @@ snapshots: semver: 7.7.3 strip-indent: 4.1.0 - eslint-plugin-yml@1.18.0(eslint@9.38.0(jiti@2.6.1)): + eslint-plugin-yml@1.18.0(eslint@9.39.0(jiti@2.6.1)): dependencies: debug: 4.4.3(supports-color@8.1.1) escape-string-regexp: 4.0.0 - eslint: 9.38.0(jiti@2.6.1) - eslint-compat-utils: 0.6.5(eslint@9.38.0(jiti@2.6.1)) + eslint: 9.39.0(jiti@2.6.1) + eslint-compat-utils: 0.6.5(eslint@9.39.0(jiti@2.6.1)) natural-compare: 1.4.0 yaml-eslint-parser: 1.3.0 transitivePeerDependencies: - supports-color - eslint-plugin-zod@1.4.0(eslint@9.38.0(jiti@2.6.1)): + eslint-plugin-zod@1.4.0(eslint@9.39.0(jiti@2.6.1)): dependencies: - eslint: 9.38.0(jiti@2.6.1) + eslint: 9.39.0(jiti@2.6.1) eslint-scope@5.1.1: dependencies: @@ -8633,9 +8637,9 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-utils@3.0.0(eslint@9.38.0(jiti@2.6.1)): + eslint-utils@3.0.0(eslint@9.39.0(jiti@2.6.1)): dependencies: - eslint: 9.38.0(jiti@2.6.1) + eslint: 9.39.0(jiti@2.6.1) eslint-visitor-keys: 2.1.0 eslint-visitor-keys@2.1.0: {} @@ -8644,16 +8648,16 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.38.0(jiti@2.6.1): + eslint@9.39.0(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.0(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.21.1 - '@eslint/config-helpers': 0.4.1 - '@eslint/core': 0.16.0 + '@eslint/config-helpers': 0.4.2 + '@eslint/core': 0.17.0 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.38.0 - '@eslint/plugin-kit': 0.4.0 + '@eslint/js': 9.39.0 + '@eslint/plugin-kit': 0.4.1 '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 @@ -9366,10 +9370,10 @@ snapshots: dependencies: is-extglob: 2.1.1 - is-immutable-type@5.0.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): + is-immutable-type@5.0.1(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/type-utils': 8.45.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.38.0(jiti@2.6.1) + '@typescript-eslint/type-utils': 8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.0(jiti@2.6.1) ts-api-utils: 2.1.0(typescript@5.9.3) ts-declaration-location: 1.0.7(typescript@5.9.3) typescript: 5.9.3 @@ -10625,7 +10629,7 @@ snapshots: dependencies: '@semantic-release/commit-analyzer': 13.0.1(semantic-release@25.0.1(typescript@5.9.3)) '@semantic-release/error': 4.0.0 - '@semantic-release/github': 12.0.0(semantic-release@25.0.1(typescript@5.9.3)) + '@semantic-release/github': 12.0.1(semantic-release@25.0.1(typescript@5.9.3)) '@semantic-release/npm': 13.1.1(semantic-release@25.0.1(typescript@5.9.3)) '@semantic-release/release-notes-generator': 14.1.0(semantic-release@25.0.1(typescript@5.9.3)) aggregate-error: 5.0.0 @@ -11155,13 +11159,13 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): + typescript-eslint@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.38.0(jiti@2.6.1) + '@typescript-eslint/utils': 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color diff --git a/src/exportParser.js b/src/exportParser.js index 7898e92ec..c3e0a266a 100644 --- a/src/exportParser.js +++ b/src/exportParser.js @@ -716,6 +716,7 @@ const ignorableNestedTypes = new Set([ * @returns {import('eslint').Rule.Node|false} */ const getExportAncestor = function (nde) { + /** @type {import('eslint').Rule.Node|null} */ let node = nde; let idx = 0; const ignorableIfDeep = ignorableNestedTypes.has(nde?.type); diff --git a/src/iterateJsdoc.js b/src/iterateJsdoc.js index 9f9965c13..0f7bb56f7 100644 --- a/src/iterateJsdoc.js +++ b/src/iterateJsdoc.js @@ -687,7 +687,7 @@ const getBasicUtils = (context, { /** * @callback Report * @param {string} message - * @param {import('eslint').Rule.ReportFixer|null} [fix] + * @param {import('@eslint/core').RuleFixer|null} [fix] * @param {null| * {line?: Integer, column?: Integer}| * import('comment-parser').Spec & {line?: Integer} @@ -2120,9 +2120,7 @@ const getIndentAndJSDoc = function (lines, jsdocNode) { /** * - * @typedef {{node: Node & { - * range: [number, number] - * }, state: StateObject}} NonCommentArgs + * @typedef {{node: Node, state: StateObject}} NonCommentArgs */ /** @@ -2312,9 +2310,7 @@ const iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveCommentContext return { /** - * @param {import('eslint').Rule.Node & { - * range: [Integer, Integer]; - * }} node + * @param {import('eslint').Rule.Node} node * @returns {void} */ '*:not(Program)' (node) { diff --git a/src/jsdocUtils.js b/src/jsdocUtils.js index c91ca1ea6..2976ab8d5 100644 --- a/src/jsdocUtils.js +++ b/src/jsdocUtils.js @@ -1406,7 +1406,7 @@ const hasNonFunctionYield = (node, checkYieldReturnValue) => { if ( /** @type {import('eslint').Rule.Node} */ ( node - ).parent.type === 'VariableDeclarator' + ).parent?.type === 'VariableDeclarator' ) { return true; } @@ -1812,11 +1812,17 @@ const exemptSpeciaMethods = (jsdoc, node, context, schema) => { ])) || isGetter(node) && ( !checkGetters || - checkGetters === 'no-setter' && hasAccessorPair(/** @type {import('./iterateJsdoc.js').Node} */ (node).parent) + checkGetters === 'no-setter' && hasAccessorPair( + /** @type {import('./iterateJsdoc.js').Node} */ + (/** @type {import('./iterateJsdoc.js').Node} */ (node).parent), + ) ) || isSetter(node) && ( !checkSetters || - checkSetters === 'no-getter' && hasAccessorPair(/** @type {import('./iterateJsdoc.js').Node} */ (node).parent) + checkSetters === 'no-getter' && hasAccessorPair( + /** @type {import('./iterateJsdoc.js').Node} */ + (/** @type {import('./iterateJsdoc.js').Node} */ (node).parent), + ) ); }; diff --git a/src/rules/convertToJsdocComments.js b/src/rules/convertToJsdocComments.js index 523e7cace..3343fd271 100644 --- a/src/rules/convertToJsdocComments.js +++ b/src/rules/convertToJsdocComments.js @@ -111,6 +111,7 @@ export default { const decorator = getDecorator( /** @type {import('eslint').Rule.Node} */ + // @ts-expect-error Bug? (baseNode), ); if (decorator) { diff --git a/src/rules/requireFileOverview.js b/src/rules/requireFileOverview.js index 1e004f114..10d6aeb38 100644 --- a/src/rules/requireFileOverview.js +++ b/src/rules/requireFileOverview.js @@ -207,7 +207,7 @@ will be checked, but you must use \`file\` on the configuration object).`, state, }) { if (!state.hasNonComment) { - state.hasNonComment = node.range[0]; + state.hasNonComment = /** @type {[number, number]} */ (node.range)?.[0]; } }, }); diff --git a/src/rules/requireJsdoc.js b/src/rules/requireJsdoc.js index 6b7895562..f458987ed 100644 --- a/src/rules/requireJsdoc.js +++ b/src/rules/requireJsdoc.js @@ -670,6 +670,7 @@ export default { const decorator = getDecorator( /** @type {import('eslint').Rule.Node} */ + // @ts-expect-error Bug? (baseNode), ); if (decorator) { diff --git a/src/rules/requireParam.js b/src/rules/requireParam.js index 2855f8ef0..fc95e53d9 100644 --- a/src/rules/requireParam.js +++ b/src/rules/requireParam.js @@ -74,7 +74,7 @@ export default iterateJsdoc(({ return; } - if (node && node.parent.type === 'VariableDeclarator' && + if (node && node.parent?.type === 'VariableDeclarator' && 'typeAnnotation' in node.parent.id && node.parent.id.typeAnnotation) { return; } From b47779cc6914b8a3188ec108a35e50a70fab718e Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Mon, 3 Nov 2025 06:59:17 -0700 Subject: [PATCH 172/189] fix(`no-undefined-types`): treat param names as defined; fixes #1591 --- docs/rules/no-undefined-types.md | 10 ++++++++++ src/rules/noUndefinedTypes.js | 11 +++++++++++ test/rules/assertions/noUndefinedTypes.js | 13 +++++++++++++ 3 files changed, 34 insertions(+) diff --git a/docs/rules/no-undefined-types.md b/docs/rules/no-undefined-types.md index fbbe61394..a09340a14 100644 --- a/docs/rules/no-undefined-types.md +++ b/docs/rules/no-undefined-types.md @@ -1115,5 +1115,15 @@ const Severities = { */ export default Severities; + +/** + * @template {unknown} T + * @param {unknown} value + * @param {...T} validValues + * @returns {value is T} + */ +const checkIsOnOf = (value, ...validValues) => { + return validValues.includes(value); +}; ```` diff --git a/src/rules/noUndefinedTypes.js b/src/rules/noUndefinedTypes.js index 670b4c1dd..16bc1ad88 100644 --- a/src/rules/noUndefinedTypes.js +++ b/src/rules/noUndefinedTypes.js @@ -466,6 +466,16 @@ export default iterateJsdoc(({ return utils.isNamepathOrUrlReferencingTag(tag); }).map(tagToParsedType('namepathOrURL')); + const definedNamesAndNamepaths = new Set(utils.filterTags(({ + tag, + }) => { + return utils.isNameOrNamepathDefiningTag(tag); + }).map(({ + name, + }) => { + return name; + })); + const tagsWithTypes = /** @type {TypeAndTagInfo[]} */ ([ ...typeTags, ...namepathReferencingTags, @@ -520,6 +530,7 @@ export default iterateJsdoc(({ if (type === 'JsdocTypeName') { const structuredTypes = structuredTags[tag.tag]?.type; if (!allDefinedTypes.has(val) && + !definedNamesAndNamepaths.has(val) && (!Array.isArray(structuredTypes) || !structuredTypes.includes(val)) ) { const parent = diff --git a/test/rules/assertions/noUndefinedTypes.js b/test/rules/assertions/noUndefinedTypes.js index b1adacc6f..c8f9ba895 100644 --- a/test/rules/assertions/noUndefinedTypes.js +++ b/test/rules/assertions/noUndefinedTypes.js @@ -1891,5 +1891,18 @@ export default /** @type {import('../index.js').TestCases} */ ({ export default Severities; `, }, + { + code: ` + /** + * @template {unknown} T + * @param {unknown} value + * @param {...T} validValues + * @returns {value is T} + */ + const checkIsOnOf = (value, ...validValues) => { + return validValues.includes(value); + }; + `, + }, ], }); From 2653fe16f054c40264947858d85b10a6d13a962f Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Mon, 3 Nov 2025 07:02:58 -0700 Subject: [PATCH 173/189] chore: update devDeps. --- package.json | 4 ++-- pnpm-lock.yaml | 52 +++++++++++++++++++++++++------------------------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/package.json b/package.json index 4b8d9d6f7..9703999f6 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@types/mocha": "^10.0.10", - "@types/node": "^24.9.2", + "@types/node": "^24.10.0", "@types/semver": "^7.7.1", "@types/spdx-expression-parse": "^3.0.5", "@typescript-eslint/types": "^8.46.2", @@ -59,7 +59,7 @@ "eslint-config-canonical": "^45.0.1", "gitdown": "^4.1.1", "glob": "^11.0.3", - "globals": "^16.4.0", + "globals": "^16.5.0", "husky": "^9.1.7", "jsdoc-type-pratt-parser": "^6.11.0", "json-schema": "^0.4.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2d8afacfd..8ab07a205 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -121,8 +121,8 @@ importers: specifier: ^10.0.10 version: 10.0.10 '@types/node': - specifier: ^24.9.2 - version: 24.9.2 + specifier: ^24.10.0 + version: 24.10.0 '@types/semver': specifier: ^7.7.1 version: 7.7.1 @@ -158,7 +158,7 @@ importers: version: 9.39.0(jiti@2.6.1) eslint-config-canonical: specifier: ^45.0.1 - version: 45.0.1(@types/node@24.9.2)(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + version: 45.0.1(@types/node@24.10.0)(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) gitdown: specifier: ^4.1.1 version: 4.1.1(re2@1.20.9) @@ -166,8 +166,8 @@ importers: specifier: ^11.0.3 version: 11.0.3 globals: - specifier: ^16.4.0 - version: 16.4.0 + specifier: ^16.5.0 + version: 16.5.0 husky: specifier: ^9.1.7 version: 9.1.7 @@ -1456,8 +1456,8 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@24.9.2': - resolution: {integrity: sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==} + '@types/node@24.10.0': + resolution: {integrity: sha512-qzQZRBqkFsYyaSWXuEHc2WR9c0a0CXwiE5FWUvn7ZM+vdy1uZLfCunD38UzhuB7YN/J11ndbDBcTmOdxJo9Q7A==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -3131,8 +3131,8 @@ packages: resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} engines: {node: '>=18'} - globals@16.4.0: - resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==} + globals@16.5.0: + resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} engines: {node: '>=18'} globalthis@1.0.4: @@ -6386,7 +6386,7 @@ snapshots: '@fastify/busboy@3.2.0': {} - '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.9.2)(eslint@9.39.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3)': + '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.10.0)(eslint@9.39.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3)': dependencies: '@graphql-tools/code-file-loader': 8.1.22(graphql@16.11.0) '@graphql-tools/graphql-tag-pluck': 8.3.21(graphql@16.11.0) @@ -6395,7 +6395,7 @@ snapshots: eslint: 9.39.0(jiti@2.6.1) fast-glob: 3.3.3 graphql: 16.11.0 - graphql-config: 5.1.5(@types/node@24.9.2)(graphql@16.11.0)(typescript@5.9.3) + graphql-config: 5.1.5(@types/node@24.10.0)(graphql@16.11.0)(typescript@5.9.3) graphql-depth-limit: 1.1.0(graphql@16.11.0) lodash.lowercase: 4.3.0 transitivePeerDependencies: @@ -6472,7 +6472,7 @@ snapshots: - uWebSockets.js - utf-8-validate - '@graphql-tools/executor-http@1.3.3(@types/node@24.9.2)(graphql@16.11.0)': + '@graphql-tools/executor-http@1.3.3(@types/node@24.10.0)(graphql@16.11.0)': dependencies: '@graphql-hive/signal': 1.0.0 '@graphql-tools/executor-common': 0.0.4(graphql@16.11.0) @@ -6482,7 +6482,7 @@ snapshots: '@whatwg-node/fetch': 0.10.11 '@whatwg-node/promise-helpers': 1.3.2 graphql: 16.11.0 - meros: 1.3.2(@types/node@24.9.2) + meros: 1.3.2(@types/node@24.10.0) tslib: 2.8.1 transitivePeerDependencies: - '@types/node' @@ -6572,10 +6572,10 @@ snapshots: graphql: 16.11.0 tslib: 2.8.1 - '@graphql-tools/url-loader@8.0.33(@types/node@24.9.2)(graphql@16.11.0)': + '@graphql-tools/url-loader@8.0.33(@types/node@24.10.0)(graphql@16.11.0)': dependencies: '@graphql-tools/executor-graphql-ws': 2.0.7(graphql@16.11.0) - '@graphql-tools/executor-http': 1.3.3(@types/node@24.9.2)(graphql@16.11.0) + '@graphql-tools/executor-http': 1.3.3(@types/node@24.10.0)(graphql@16.11.0) '@graphql-tools/executor-legacy-ws': 1.1.19(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) '@graphql-tools/wrap': 10.1.4(graphql@16.11.0) @@ -7057,7 +7057,7 @@ snapshots: '@types/ms@2.1.0': {} - '@types/node@24.9.2': + '@types/node@24.10.0': dependencies: undici-types: 7.16.0 @@ -7071,7 +7071,7 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 24.9.2 + '@types/node': 24.10.0 '@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: @@ -8220,9 +8220,9 @@ snapshots: eslint: 9.39.0(jiti@2.6.1) semver: 7.7.3 - eslint-config-canonical@45.0.1(@types/node@24.9.2)(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3): + eslint-config-canonical@45.0.1(@types/node@24.10.0)(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.9.2)(eslint@9.39.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3) + '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.10.0)(eslint@9.39.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3) '@next/eslint-plugin-next': 15.5.4 '@stylistic/eslint-plugin': 4.4.1(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) @@ -8254,7 +8254,7 @@ snapshots: eslint-plugin-unicorn: 60.0.0(eslint@9.39.0(jiti@2.6.1)) eslint-plugin-yml: 1.18.0(eslint@9.39.0(jiti@2.6.1)) eslint-plugin-zod: 1.4.0(eslint@9.39.0(jiti@2.6.1)) - globals: 16.4.0 + globals: 16.5.0 graphql: 16.11.0 prettier: 3.6.2 ramda: 0.30.1 @@ -8602,7 +8602,7 @@ snapshots: eslint: 9.39.0(jiti@2.6.1) esquery: 1.6.0 find-up-simple: 1.0.1 - globals: 16.4.0 + globals: 16.5.0 indent-string: 5.0.0 is-builtin-module: 5.0.0 jsesc: 3.1.0 @@ -9055,7 +9055,7 @@ snapshots: globals@15.15.0: {} - globals@16.4.0: {} + globals@16.5.0: {} globalthis@1.0.4: dependencies: @@ -9081,13 +9081,13 @@ snapshots: graphemer@1.4.0: {} - graphql-config@5.1.5(@types/node@24.9.2)(graphql@16.11.0)(typescript@5.9.3): + graphql-config@5.1.5(@types/node@24.10.0)(graphql@16.11.0)(typescript@5.9.3): dependencies: '@graphql-tools/graphql-file-loader': 8.1.2(graphql@16.11.0) '@graphql-tools/json-file-loader': 8.0.20(graphql@16.11.0) '@graphql-tools/load': 8.1.2(graphql@16.11.0) '@graphql-tools/merge': 9.1.1(graphql@16.11.0) - '@graphql-tools/url-loader': 8.0.33(@types/node@24.9.2)(graphql@16.11.0) + '@graphql-tools/url-loader': 8.0.33(@types/node@24.10.0)(graphql@16.11.0) '@graphql-tools/utils': 10.9.1(graphql@16.11.0) cosmiconfig: 8.3.6(typescript@5.9.3) graphql: 16.11.0 @@ -9848,9 +9848,9 @@ snapshots: merge2@1.4.1: {} - meros@1.3.2(@types/node@24.9.2): + meros@1.3.2(@types/node@24.10.0): optionalDependencies: - '@types/node': 24.9.2 + '@types/node': 24.10.0 micro-spelling-correcter@1.1.1: {} From 85a1ea128e443d05a82549f7b4738807d360e7b0 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Wed, 12 Nov 2025 03:40:41 -0700 Subject: [PATCH 174/189] feat(`sort-tags`): add `tagExceptions` to allow additional lines per tag; fixes #1594 --- .README/rules/sort-tags.md | 2 +- docs/rules/sort-tags.md | 33 ++++++++++++++++- src/rules.d.ts | 10 ++++++ src/rules/sortTags.js | 14 +++++++- test/rules/assertions/sortTags.js | 60 +++++++++++++++++++++++++++++++ 5 files changed, 116 insertions(+), 3 deletions(-) diff --git a/.README/rules/sort-tags.md b/.README/rules/sort-tags.md index 96569f25c..6cf688971 100644 --- a/.README/rules/sort-tags.md +++ b/.README/rules/sort-tags.md @@ -36,7 +36,7 @@ adding line breaks between tag groups. |Tags|any| |Recommended|false| |Settings|| -|Options|`alphabetizeExtras`, `linesBetween`, `reportIntraTagGroupSpacing`, `reportTagGroupSpacing`, `tagSequence`| +|Options|`alphabetizeExtras`, `linesBetween`, `reportIntraTagGroupSpacing`, `reportTagGroupSpacing`, `tagExceptions`, `tagSequence`| ## Failing examples diff --git a/docs/rules/sort-tags.md b/docs/rules/sort-tags.md index 41ecdbdbf..42d97f6bb 100644 --- a/docs/rules/sort-tags.md +++ b/docs/rules/sort-tags.md @@ -8,6 +8,7 @@ * [`linesBetween`](#user-content-sort-tags-options-linesbetween) * [`reportIntraTagGroupSpacing`](#user-content-sort-tags-options-reportintrataggroupspacing) * [`reportTagGroupSpacing`](#user-content-sort-tags-options-reporttaggroupspacing) + * [`tagExceptions`](#user-content-sort-tags-options-tagexceptions) * [`tagSequence`](#user-content-sort-tags-options-tagsequence) * [Context and settings](#user-content-sort-tags-context-and-settings) * [Failing examples](#user-content-sort-tags-failing-examples) @@ -80,6 +81,12 @@ as set by `linesBetween`. Defaults to `true`. Note that the very last tag will not have spacing applied regardless. For adding line breaks there, you may wish to use the `endLines` option of the `tag-lines` rule. + + +### tagExceptions + +Allows specification by tag of a specific higher maximum number of lines. Keys are tags and values are the maximum number of lines allowed for such tags. Overrides `linesBetween`. Defaults to no special exceptions per tag. + ### tagSequence @@ -285,7 +292,7 @@ See description on `tagSequence`. |Tags|any| |Recommended|false| |Settings|| -|Options|`alphabetizeExtras`, `linesBetween`, `reportIntraTagGroupSpacing`, `reportTagGroupSpacing`, `tagSequence`| +|Options|`alphabetizeExtras`, `linesBetween`, `reportIntraTagGroupSpacing`, `reportTagGroupSpacing`, `tagExceptions`, `tagSequence`| @@ -531,6 +538,19 @@ function quux () {} */ // "jsdoc/sort-tags": ["error"|"warn", {"tagSequence":[{"tags":["internal"]},{"tags":["template","param"]},{"tags":["returns"]},{"tags":["throws"]},{"tags":["see"]},{"tags":["example"]},{"tags":["since"]},{"tags":["deprecated"]}]}] // Message: Tag groups do not have the expected whitespace + +/** + * @param b + * @param a + * @returns {string} + * @example abc + * + * + * @example def + */ +function quux () {} +// "jsdoc/sort-tags": ["error"|"warn", {"linesBetween":0,"tagExceptions":{"example":1}}] +// Message: Intra-group tags have unexpected whitespace ```` @@ -651,5 +671,16 @@ function quux () {} */ function quux () {} // "jsdoc/sort-tags": ["error"|"warn", {"linesBetween":2,"reportTagGroupSpacing":false,"tagSequence":[{"tags":["qrs"]},{"tags":["def","xyz"]},{"tags":["abc"]}]}] + +/** + * @param b + * @param a + * @returns {string} + * @example abc + * + * @example def + */ +function quux () {} +// "jsdoc/sort-tags": ["error"|"warn", {"linesBetween":0,"tagExceptions":{"example":1}}] ```` diff --git a/src/rules.d.ts b/src/rules.d.ts index 48c3876bd..7a280390e 100644 --- a/src/rules.d.ts +++ b/src/rules.d.ts @@ -2660,6 +2660,16 @@ export interface Rules { * may wish to use the `endLines` option of the `tag-lines` rule. */ reportTagGroupSpacing?: boolean; + /** + * Allows specification by tag of a specific higher maximum number of lines. Keys are tags and values are the maximum number of lines allowed for such tags. Overrides `linesBetween`. Defaults to no special exceptions per tag. + */ + tagExceptions?: { + /** + * This interface was referenced by `undefined`'s JSON-Schema definition + * via the `patternProperty` ".*". + */ + [k: string]: number; + }; /** * An array of tag group objects indicating the preferred sequence for sorting tags. * diff --git a/src/rules/sortTags.js b/src/rules/sortTags.js index e2401f286..e8d1cd4ed 100644 --- a/src/rules/sortTags.js +++ b/src/rules/sortTags.js @@ -5,11 +5,13 @@ export default iterateJsdoc(({ context, jsdoc, utils, +// eslint-disable-next-line complexity -- Temporary }) => { const /** * @type {{ * linesBetween: import('../iterateJsdoc.js').Integer, + * tagExceptions: Record, * tagSequence: { * tags: string[] * }[], @@ -22,6 +24,7 @@ export default iterateJsdoc(({ linesBetween = 1, reportIntraTagGroupSpacing = true, reportTagGroupSpacing = true, + tagExceptions = {}, tagSequence = defaultTagOrder, } = context.options[0] || {}; @@ -328,7 +331,7 @@ export default iterateJsdoc(({ } const ct = countTagEmptyLines(tag); - if (ct) { + if (ct && (!tagExceptions[tag.tag] || tagExceptions[tag.tag] < ct)) { const fixer = () => { let foundFirstTag = false; @@ -548,6 +551,15 @@ will not have spacing applied regardless. For adding line breaks there, you may wish to use the \`endLines\` option of the \`tag-lines\` rule.`, type: 'boolean', }, + tagExceptions: { + description: 'Allows specification by tag of a specific higher maximum number of lines. Keys are tags and values are the maximum number of lines allowed for such tags. Overrides `linesBetween`. Defaults to no special exceptions per tag.', + patternProperties: { + '.*': { + type: 'number', + }, + }, + type: 'object', + }, tagSequence: { description: `An array of tag group objects indicating the preferred sequence for sorting tags. diff --git a/test/rules/assertions/sortTags.js b/test/rules/assertions/sortTags.js index f47ab0944..7f3f1ef06 100644 --- a/test/rules/assertions/sortTags.js +++ b/test/rules/assertions/sortTags.js @@ -1461,6 +1461,45 @@ export default /** @type {import('../index.js').TestCases} */ ({ */ `, }, + { + code: ` + /** + * @param b + * @param a + * @returns {string} + * @example abc + * + * + * @example def + */ + function quux () {} + `, + errors: [ + { + line: 6, + message: 'Intra-group tags have unexpected whitespace', + }, + ], + options: [ + { + linesBetween: 0, + tagExceptions: { + example: 1, + }, + }, + ], + output: ` + /** + * @param b + * @param a + * @returns {string} + * @example abc + * + * @example def + */ + function quux () {} + `, + }, ], valid: [ { @@ -1890,5 +1929,26 @@ export default /** @type {import('../index.js').TestCases} */ ({ }, ], }, + { + code: ` + /** + * @param b + * @param a + * @returns {string} + * @example abc + * + * @example def + */ + function quux () {} + `, + options: [ + { + linesBetween: 0, + tagExceptions: { + example: 1, + }, + }, + ], + }, ], }); From 92a87f75200480e76fbd13759b1e1b4f86ef187d Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 11 Nov 2025 09:24:39 -0700 Subject: [PATCH 175/189] test: remove deprecated `type` from tests --- test/rules/assertions/checkLineAlignment.js | 50 -------------------- test/rules/assertions/requireJsdoc.js | 52 --------------------- 2 files changed, 102 deletions(-) diff --git a/test/rules/assertions/checkLineAlignment.js b/test/rules/assertions/checkLineAlignment.js index c86ba7772..2f91fed7a 100644 --- a/test/rules/assertions/checkLineAlignment.js +++ b/test/rules/assertions/checkLineAlignment.js @@ -14,7 +14,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 2, message: 'Expected JSDoc block lines to be aligned.', - type: 'Block', }, ], options: [ @@ -45,7 +44,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 2, message: 'Expected JSDoc block lines to be aligned.', - type: 'Block', }, ], options: [ @@ -76,7 +74,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 2, message: 'Expected JSDoc block lines to be aligned.', - type: 'Block', }, ], options: [ @@ -106,7 +103,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 2, message: 'Expected JSDoc block lines to be aligned.', - type: 'Block', }, ], options: [ @@ -136,7 +132,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 2, message: 'Expected JSDoc block lines to be aligned.', - type: 'Block', }, ], options: [ @@ -166,7 +161,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 2, message: 'Expected JSDoc block lines to be aligned.', - type: 'Block', }, ], options: [ @@ -196,7 +190,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 2, message: 'Expected JSDoc block lines to be aligned.', - type: 'Block', }, ], options: [ @@ -226,7 +219,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 2, message: 'Expected JSDoc block lines to be aligned.', - type: 'Block', }, ], options: [ @@ -258,7 +250,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 3, message: 'Expected JSDoc block lines to be aligned.', - type: 'Block', }, ], options: [ @@ -292,7 +283,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 3, message: 'Expected JSDoc block lines to be aligned.', - type: 'Block', }, ], options: [ @@ -324,7 +314,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 2, message: 'Expected JSDoc block lines to be aligned.', - type: 'Block', }, ], options: [ @@ -357,7 +346,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 2, message: 'Expected JSDoc block lines to be aligned.', - type: 'Block', }, ], options: [ @@ -391,7 +379,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 2, message: 'Expected JSDoc block lines to be aligned.', - type: 'Block', }, ], options: [ @@ -425,7 +412,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 2, message: 'Expected JSDoc block lines to be aligned.', - type: 'Block', }, ], options: [ @@ -461,7 +447,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 2, message: 'Expected JSDoc block lines to be aligned.', - type: 'Block', }, ], options: [ @@ -498,12 +483,10 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 5, message: 'Expected JSDoc block lines to not be aligned.', - type: 'Block', }, { line: 6, message: 'Expected JSDoc block lines to not be aligned.', - type: 'Block', }, ], options: [ @@ -533,7 +516,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 6, message: 'Expected JSDoc block lines to not be aligned.', - type: 'Block', }, ], options: [ @@ -563,7 +545,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 6, message: 'Expected JSDoc block lines to not be aligned.', - type: 'Block', }, ], options: [ @@ -593,7 +574,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 6, message: 'Expected JSDoc block lines to not be aligned.', - type: 'Block', }, ], output: ` @@ -621,7 +601,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 2, message: 'Expected JSDoc block lines to be aligned.', - type: 'Block', }, ], options: [ @@ -655,7 +634,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 2, message: 'Expected JSDoc block lines to be aligned.', - type: 'Block', }, ], options: [ @@ -691,7 +669,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 2, message: 'Expected JSDoc block lines to be aligned.', - type: 'Block', }, ], options: [ @@ -720,12 +697,10 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 5, message: 'Expected JSDoc block lines to not be aligned.', - type: 'Block', }, { line: 6, message: 'Expected JSDoc block lines to not be aligned.', - type: 'Block', }, ], options: [ @@ -755,7 +730,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 6, message: 'Expected JSDoc block lines to not be aligned.', - type: 'Block', }, ], options: [ @@ -785,7 +759,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 6, message: 'Expected JSDoc block lines to not be aligned.', - type: 'Block', }, ], options: [ @@ -815,7 +788,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 5, message: 'Expected JSDoc block lines to not be aligned.', - type: 'Block', }, ], options: [ @@ -846,7 +818,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 7, message: 'Expected JSDoc block lines to not be aligned.', - type: 'Block', }, ], options: [ @@ -883,17 +854,14 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 6, message: 'Expected JSDoc block lines to not be aligned.', - type: 'Block', }, { line: 7, message: 'Expected JSDoc block lines to not be aligned.', - type: 'Block', }, { line: 8, message: 'Expected JSDoc block lines to not be aligned.', - type: 'Block', }, ], options: [ @@ -926,7 +894,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 2, message: 'Expected JSDoc block lines to be aligned.', - type: 'Block', }, ], options: [ @@ -959,7 +926,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 2, message: 'Expected JSDoc block lines to be aligned.', - type: 'Block', }, ], options: [ @@ -999,7 +965,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 2, message: 'Expected JSDoc block lines to be aligned.', - type: 'Block', }, ], options: [ @@ -1035,7 +1000,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 6, message: 'Expected JSDoc block lines to not be aligned.', - type: 'Block', }, ], options: [ @@ -1071,7 +1035,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 6, message: 'Expected JSDoc block lines to not be aligned.', - type: 'Block', }, ], options: [ @@ -1107,7 +1070,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 2, message: 'Expected JSDoc block lines to be aligned.', - type: 'Block', }, ], options: [ @@ -1140,7 +1102,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 2, message: 'Expected JSDoc block lines to be aligned.', - type: 'Block', }, ], options: [ @@ -1171,7 +1132,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 6, message: 'Expected JSDoc block lines to not be aligned.', - type: 'Block', }, ], options: [ @@ -1201,7 +1161,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 6, message: 'Expected JSDoc block lines to not be aligned.', - type: 'Block', }, ], options: [ @@ -1236,7 +1195,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 5, message: 'Expected JSDoc block lines to not be aligned.', - type: 'Block', }, ], options: [ @@ -1271,7 +1229,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 2, message: 'Expected JSDoc block lines to be aligned.', - type: 'Block', }, ], options: [ @@ -1305,7 +1262,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 2, message: 'Expected JSDoc block lines to be aligned.', - type: 'Block', }, ], options: [ @@ -1339,7 +1295,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 5, message: 'Expected JSDoc block lines to not be aligned.', - type: 'Block', }, ], options: [ @@ -1372,7 +1327,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 4, message: 'Expected wrap indent', - type: 'Block', }, ], options: [ @@ -1405,7 +1359,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 2, message: 'Expected JSDoc block lines to be aligned.', - type: 'Block', }, ], options: [ @@ -1440,7 +1393,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 6, message: 'Expected JSDoc block lines to not be aligned.', - type: 'Block', }, ], options: [ @@ -1472,7 +1424,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 4, message: 'Expected wrap indent', - type: 'Block', }, ], options: [ @@ -1501,7 +1452,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 4, message: 'Expected wrap indent', - type: 'Block', }, ], options: [ diff --git a/test/rules/assertions/requireJsdoc.js b/test/rules/assertions/requireJsdoc.js index bbd203351..0c86a93e1 100644 --- a/test/rules/assertions/requireJsdoc.js +++ b/test/rules/assertions/requireJsdoc.js @@ -19,7 +19,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 6, message: 'Missing JSDoc comment.', - type: 'TSMethodSignature', }, ], languageOptions: { @@ -67,7 +66,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 6, message: 'Missing JSDoc comment.', - type: 'TSPropertySignature', }, ], languageOptions: { @@ -113,7 +111,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 4, message: 'Missing JSDoc comment.', - type: 'TSMethodSignature', }, ], languageOptions: { @@ -152,7 +149,6 @@ export default /** @type {import('../index.js').TestCases} */ ({ { line: 4, message: 'Missing JSDoc comment.', - type: 'TSPropertySignature', }, ], languageOptions: { @@ -377,7 +373,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'FunctionExpression', }, ], languageOptions: { @@ -411,7 +406,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'FunctionDeclaration', }, ], languageOptions: { @@ -445,7 +439,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'ArrowFunctionExpression', }, ], languageOptions: { @@ -478,7 +471,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'ArrowFunctionExpression', }, ], languageOptions: { @@ -511,7 +503,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'ArrowFunctionExpression', }, ], languageOptions: { @@ -548,7 +539,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'ArrowFunctionExpression', }, ], languageOptions: { @@ -583,7 +573,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'ClassExpression', }, ], languageOptions: { @@ -614,7 +603,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'FunctionDeclaration', }, ], languageOptions: { @@ -647,7 +635,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'ArrowFunctionExpression', }, ], languageOptions: { @@ -680,7 +667,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'FunctionExpression', }, ], languageOptions: { @@ -713,7 +699,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'ClassDeclaration', }, ], languageOptions: { @@ -820,7 +805,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'FunctionDeclaration', }, ], output: ` @@ -844,7 +828,6 @@ function quux (foo) { { line: 5, message: 'Missing JSDoc comment.', - type: 'FunctionExpression', }, ], languageOptions: { @@ -886,7 +869,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'ClassDeclaration', }, ], languageOptions: { @@ -929,7 +911,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'ClassDeclaration', }, ], languageOptions: { @@ -972,7 +953,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'ClassDeclaration', }, ], languageOptions: { @@ -1015,7 +995,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'ClassDeclaration', }, ], languageOptions: { @@ -1051,7 +1030,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'ArrowFunctionExpression', }, ], languageOptions: { @@ -1079,7 +1057,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'ArrowFunctionExpression', }, ], languageOptions: { @@ -1107,7 +1084,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'FunctionExpression', }, ], options: [ @@ -1132,7 +1108,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'FunctionExpression', }, ], languageOptions: { @@ -1160,7 +1135,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'FunctionExpression', }, ], options: [ @@ -1185,7 +1159,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'FunctionDeclaration', }, ], options: [ @@ -1210,7 +1183,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'FunctionDeclaration', }, ], options: [ @@ -1237,7 +1209,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'FunctionExpression', }, ], languageOptions: { @@ -1270,7 +1241,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'FunctionExpression', }, ], languageOptions: { @@ -1307,7 +1277,6 @@ function quux (foo) { { line: 3, message: 'Missing JSDoc comment.', - type: 'FunctionExpression', }, ], languageOptions: { @@ -1346,7 +1315,6 @@ function quux (foo) { { line: 4, message: 'Missing JSDoc comment.', - type: 'FunctionExpression', }, ], languageOptions: { @@ -1387,7 +1355,6 @@ function quux (foo) { { line: 4, message: 'Missing JSDoc comment.', - type: 'FunctionExpression', }, ], languageOptions: { @@ -1426,7 +1393,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'FunctionExpression', }, ], languageOptions: { @@ -1464,7 +1430,6 @@ function quux (foo) { { line: 9, message: 'Missing JSDoc comment.', - type: 'FunctionExpression', }, ], languageOptions: { @@ -1505,7 +1470,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'FunctionExpression', }, ], languageOptions: { @@ -1544,7 +1508,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'ArrowFunctionExpression', }, ], languageOptions: { @@ -1583,7 +1546,6 @@ function quux (foo) { { line: 3, message: 'Missing JSDoc comment.', - type: 'FunctionExpression', }, ], languageOptions: { @@ -1619,7 +1581,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'FunctionDeclaration', }, ], languageOptions: { @@ -1652,7 +1613,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'FunctionDeclaration', }, ], languageOptions: { @@ -1688,7 +1648,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'FunctionDeclaration', }, ], languageOptions: { @@ -1722,7 +1681,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'FunctionDeclaration', }, ], languageOptions: { @@ -1755,7 +1713,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'FunctionDeclaration', }, ], languageOptions: { @@ -1827,7 +1784,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'FunctionExpression', }, ], languageOptions: { @@ -1861,7 +1817,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'ClassDeclaration', }, ], languageOptions: { @@ -1894,7 +1849,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'ClassDeclaration', }, ], languageOptions: { @@ -1929,7 +1883,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'FunctionExpression', }, ], languageOptions: { @@ -1964,7 +1917,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'FunctionExpression', }, ], languageOptions: { @@ -1999,7 +1951,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'FunctionDeclaration', }, ], languageOptions: { @@ -2031,7 +1982,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'FunctionExpression', }, ], languageOptions: { @@ -2068,7 +2018,6 @@ function quux (foo) { { line: 2, message: 'Missing JSDoc comment.', - type: 'FunctionDeclaration', }, ], languageOptions: { @@ -2107,7 +2056,6 @@ function quux (foo) { { line: 3, message: 'Missing JSDoc comment.', - type: 'Property', }, ], options: [ From 39a5b0af46bdd2a41e7d3074cfcb2f72aa8c4c35 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 11 Nov 2025 09:59:18 -0700 Subject: [PATCH 176/189] fix(`require-param`): ensure all structures with interfaces do not trigger with `interfaceExemptsParamsCheck: true` --- docs/rules/require-param.md | 11 +++++++++++ src/iterateJsdoc.js | 5 +++-- src/jsdocUtils.js | 16 +++++++++++++++- src/rules/requireParam.js | 19 +++++-------------- test/rules/assertions/requireParam.js | 21 +++++++++++++++++++++ 5 files changed, 55 insertions(+), 17 deletions(-) diff --git a/docs/rules/require-param.md b/docs/rules/require-param.md index bf3b93569..2a1af3ae2 100644 --- a/docs/rules/require-param.md +++ b/docs/rules/require-param.md @@ -1998,5 +1998,16 @@ function quux ({ }: FunctionInterface) { } // "jsdoc/require-param": ["error"|"warn", {"interfaceExemptsParamsCheck":true}] + +/** + * + */ +export async function fetchMarketstackEOD( + parameters: FetchEODParameters, +): Promise +{ + // ... +}; +// "jsdoc/require-param": ["error"|"warn", {"interfaceExemptsParamsCheck":true}] ```` diff --git a/src/iterateJsdoc.js b/src/iterateJsdoc.js index 0f7bb56f7..bc6cc2bda 100644 --- a/src/iterateJsdoc.js +++ b/src/iterateJsdoc.js @@ -257,6 +257,7 @@ import esquery from 'esquery'; /** * @callback GetFunctionParameterNames * @param {boolean} [useDefaultObjectProperties] + * @param {boolean} [ignoreInterfacedParameters] * @returns {import('./jsdocUtils.js').ParamNameInfo[]} */ @@ -1369,8 +1370,8 @@ const getUtils = ( utils.flattenRoots = jsdocUtils.flattenRoots; /** @type {GetFunctionParameterNames} */ - utils.getFunctionParameterNames = (useDefaultObjectProperties) => { - return jsdocUtils.getFunctionParameterNames(node, useDefaultObjectProperties); + utils.getFunctionParameterNames = (useDefaultObjectProperties, ignoreInterfacedParameters) => { + return jsdocUtils.getFunctionParameterNames(node, useDefaultObjectProperties, ignoreInterfacedParameters); }; /** @type {HasParams} */ diff --git a/src/jsdocUtils.js b/src/jsdocUtils.js index 2976ab8d5..f19ae10a5 100644 --- a/src/jsdocUtils.js +++ b/src/jsdocUtils.js @@ -203,11 +203,12 @@ const getPropertiesFromPropertySignature = (propSignature) => { /** * @param {ESTreeOrTypeScriptNode|null} functionNode * @param {boolean} [checkDefaultObjects] + * @param {boolean} [ignoreInterfacedParameters] * @throws {Error} * @returns {ParamNameInfo[]} */ const getFunctionParameterNames = ( - functionNode, checkDefaultObjects, + functionNode, checkDefaultObjects, ignoreInterfacedParameters, ) => { /* eslint-disable complexity -- Temporary */ /** @@ -230,6 +231,19 @@ const getFunctionParameterNames = ( const hasLeftTypeAnnotation = 'left' in param && 'typeAnnotation' in param.left; if ('typeAnnotation' in param || hasLeftTypeAnnotation) { + if (ignoreInterfacedParameters && 'typeAnnotation' in param && + param.typeAnnotation) { + // No-op + return [ + undefined, { + hasPropertyRest: false, + hasRestElement: false, + names: [], + rests: [], + }, + ]; + } + const typeAnnotation = hasLeftTypeAnnotation ? /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ ( param.left diff --git a/src/rules/requireParam.js b/src/rules/requireParam.js index fc95e53d9..e03cd2f0f 100644 --- a/src/rules/requireParam.js +++ b/src/rules/requireParam.js @@ -65,19 +65,10 @@ export default iterateJsdoc(({ useDefaultObjectProperties = false, } = context.options[0] || {}; - if (interfaceExemptsParamsCheck) { - if (node && 'params' in node && node.params.length === 1 && - node.params?.[0] && typeof node.params[0] === 'object' && - node.params[0].type === 'ObjectPattern' && - 'typeAnnotation' in node.params[0] && node.params[0].typeAnnotation - ) { - return; - } - - if (node && node.parent?.type === 'VariableDeclarator' && - 'typeAnnotation' in node.parent.id && node.parent.id.typeAnnotation) { - return; - } + if (interfaceExemptsParamsCheck && node && + node.parent?.type === 'VariableDeclarator' && + 'typeAnnotation' in node.parent.id && node.parent.id.typeAnnotation) { + return; } const preferredTagName = /** @type {string} */ (utils.getPreferredTagName({ @@ -87,7 +78,7 @@ export default iterateJsdoc(({ return; } - const functionParameterNames = utils.getFunctionParameterNames(useDefaultObjectProperties); + const functionParameterNames = utils.getFunctionParameterNames(useDefaultObjectProperties, interfaceExemptsParamsCheck); if (!functionParameterNames.length) { return; } diff --git a/test/rules/assertions/requireParam.js b/test/rules/assertions/requireParam.js index fba10bb30..42aa7b3f8 100644 --- a/test/rules/assertions/requireParam.js +++ b/test/rules/assertions/requireParam.js @@ -3953,5 +3953,26 @@ export default /** @type {import('../index.js').TestCases} */ ({ }, ], }, + { + code: ` + /** + * + */ + export async function fetchMarketstackEOD( + parameters: FetchEODParameters, + ): Promise + { + // ... + }; + `, + languageOptions: { + parser: typescriptEslintParser, + }, + options: [ + { + interfaceExemptsParamsCheck: true, + }, + ], + }, ], }); From 702b226213ea7f92745046d0278cb0ac6fab8d03 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Wed, 12 Nov 2025 05:03:54 -0700 Subject: [PATCH 177/189] fix(`tag-lines`): avoid reformatting post-delimiter spacing; fixes #1593 --- docs/rules/tag-lines.md | 25 ++++++++++ src/iterateJsdoc.js | 7 ++- src/rules/tagLines.js | 22 +++++---- test/rules/assertions/tagLines.js | 77 +++++++++++++++++++++++++++++++ 4 files changed, 121 insertions(+), 10 deletions(-) diff --git a/docs/rules/tag-lines.md b/docs/rules/tag-lines.md index a51f98077..ac60be941 100644 --- a/docs/rules/tag-lines.md +++ b/docs/rules/tag-lines.md @@ -397,6 +397,31 @@ The following patterns are considered problems: */ // "jsdoc/tag-lines": ["error"|"warn", "any",{"maxBlockLines":2,"startLines":5}] // Message: If set to a number, `maxBlockLines` must be greater than or equal to `startLines`. + +/** + * My Test Function, with some example code. + * + * ```js + * new Foo(); + * ``` + * + * + * @param {string} bar + */ +function myTestFunction(bar) { + +} +// "jsdoc/tag-lines": ["error"|"warn", "any",{"startLines":1}] +// Message: Expected only 1 line after block description + +/** + * + * Second Test Case + * @param {number} baz + * + */ +// "jsdoc/tag-lines": ["error"|"warn", "any",{"startLines":1}] +// Message: Expected 1 lines after block description ```` diff --git a/src/iterateJsdoc.js b/src/iterateJsdoc.js index bc6cc2bda..0fe99d993 100644 --- a/src/iterateJsdoc.js +++ b/src/iterateJsdoc.js @@ -170,7 +170,8 @@ import esquery from 'esquery'; * seedTokens: ( * tokens?: Partial * ) => import('comment-parser').Tokens, - * descLines: string[] + * descLines: string[], + * postDelims: string[] * ) => import('comment-parser').Line[]} setter * @returns {void} */ @@ -928,6 +929,8 @@ const getUtils = ( utils.setBlockDescription = (setter) => { /** @type {string[]} */ const descLines = []; + /** @type {string[]} */ + const postDelims = []; /** * @type {undefined|Integer} */ @@ -974,6 +977,7 @@ const getUtils = ( return true; } + postDelims.push(postDelimiter); descLines.push(description); return false; }); @@ -994,6 +998,7 @@ const getUtils = ( (info), seedTokens, descLines, + postDelims, ), ); } diff --git a/src/rules/tagLines.js b/src/rules/tagLines.js index 5614cba30..b3b3a2df9 100644 --- a/src/rules/tagLines.js +++ b/src/rules/tagLines.js @@ -37,18 +37,22 @@ const checkMaxBlockLines = ({ line: excessIndexLine, }, () => { - utils.setBlockDescription((info, seedTokens, descLines) => { + utils.setBlockDescription((info, seedTokens, descLines, postDelims) => { + const newPostDelims = [ + ...postDelims.slice(0, excessIndexLine), + ...postDelims.slice(excessIndexLine + excessBlockLines - 1 - maxBlockLines), + ]; return [ ...descLines.slice(0, excessIndexLine), ...descLines.slice(excessIndexLine + excessBlockLines - 1 - maxBlockLines), - ].map((desc) => { + ].map((desc, idx) => { return { number: 0, source: '', tokens: seedTokens({ ...info, description: desc, - postDelimiter: desc.trim() ? ' ' : '', + postDelimiter: newPostDelims[idx], }), }; }); @@ -310,15 +314,15 @@ export default iterateJsdoc(({ line: lastDescriptionLine - trailingDiff, }, () => { - utils.setBlockDescription((info, seedTokens, descLines) => { - return descLines.slice(0, -trailingDiff).map((desc) => { + utils.setBlockDescription((info, seedTokens, descLines, postDelims) => { + return descLines.slice(0, -trailingDiff).map((desc, idx) => { return { number: 0, source: '', tokens: seedTokens({ ...info, description: desc, - postDelimiter: desc.trim() ? info.postDelimiter : '', + postDelimiter: postDelims[idx], }), }; }); @@ -332,7 +336,7 @@ export default iterateJsdoc(({ line: lastDescriptionLine, }, () => { - utils.setBlockDescription((info, seedTokens, descLines) => { + utils.setBlockDescription((info, seedTokens, descLines, postDelims) => { return [ ...descLines, ...Array.from({ @@ -340,14 +344,14 @@ export default iterateJsdoc(({ }, () => { return ''; }), - ].map((desc) => { + ].map((desc, idx) => { return { number: 0, source: '', tokens: seedTokens({ ...info, description: desc, - postDelimiter: desc.trim() ? info.postDelimiter : '', + postDelimiter: desc.trim() ? postDelims[idx] : '', }), }; }); diff --git a/test/rules/assertions/tagLines.js b/test/rules/assertions/tagLines.js index 8a514d4ff..d17a07a6e 100644 --- a/test/rules/assertions/tagLines.js +++ b/test/rules/assertions/tagLines.js @@ -853,6 +853,83 @@ export default /** @type {import('../index.js').TestCases} */ ({ }, ], }, + { + code: ` + /** + * My Test Function, with some example code. + * + * \`\`\`js + * new Foo(); + * \`\`\` + * + * + * @param {string} bar + */ + function myTestFunction(bar) { + + } + `, + errors: [ + { + line: 8, + message: 'Expected only 1 line after block description', + }, + ], + options: [ + 'any', + { + startLines: 1, + }, + ], + output: ` + /** + * My Test Function, with some example code. + * + * \`\`\`js + * new Foo(); + * \`\`\` + * + * @param {string} bar + */ + function myTestFunction(bar) { + + } + `, + }, + { + code: ` + /** + * + * Second Test Case + * @param {number} baz + * + */ + `, + errors: [ + { + line: 4, + message: 'Expected 1 lines after block description', + }, + { + line: 6, + message: 'Expected 0 trailing lines', + }, + ], + options: [ + 'any', + { + startLines: 1, + }, + ], + output: ` + /** + * + * Second Test Case + * + * @param {number} baz + */ + `, + }, ], valid: [ { From 7d032f260d6c7ed957771af2a9101c8a35ba0440 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Thu, 13 Nov 2025 05:21:41 -0700 Subject: [PATCH 178/189] chore: update lock file --- pnpm-lock.yaml | 2154 +++++++++++++++++------------------------------- 1 file changed, 763 insertions(+), 1391 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8ab07a205..0cd5dec8e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -89,16 +89,16 @@ importers: version: 0.6.3(typescript@5.9.3) '@rollup/plugin-node-resolve': specifier: ^16.0.3 - version: 16.0.3(rollup@4.52.5) + version: 16.0.3(rollup@4.53.2) '@semantic-release/commit-analyzer': specifier: ^13.0.1 - version: 13.0.1(semantic-release@25.0.1(typescript@5.9.3)) + version: 13.0.1(semantic-release@25.0.2(typescript@5.9.3)) '@semantic-release/github': specifier: ^12.0.1 - version: 12.0.1(semantic-release@25.0.1(typescript@5.9.3)) + version: 12.0.2(semantic-release@25.0.2(typescript@5.9.3)) '@semantic-release/npm': specifier: ^13.1.1 - version: 13.1.1(semantic-release@25.0.1(typescript@5.9.3)) + version: 13.1.1(semantic-release@25.0.2(typescript@5.9.3)) '@types/chai': specifier: ^5.2.3 version: 5.2.3 @@ -122,7 +122,7 @@ importers: version: 10.0.10 '@types/node': specifier: ^24.10.0 - version: 24.10.0 + version: 24.10.1 '@types/semver': specifier: ^7.7.1 version: 7.7.1 @@ -131,7 +131,7 @@ importers: version: 3.0.5 '@typescript-eslint/types': specifier: ^8.46.2 - version: 8.46.2 + version: 8.46.4 babel-plugin-add-module-exports: specifier: ^1.0.4 version: 1.0.4 @@ -149,7 +149,7 @@ importers: version: 8.0.0 chai: specifier: ^6.2.0 - version: 6.2.0 + version: 6.2.1 decamelize: specifier: ^6.0.1 version: 6.0.1 @@ -158,10 +158,10 @@ importers: version: 9.39.0(jiti@2.6.1) eslint-config-canonical: specifier: ^45.0.1 - version: 45.0.1(@types/node@24.10.0)(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + version: 45.0.1(@types/node@24.10.1)(@typescript-eslint/utils@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) gitdown: specifier: ^4.1.1 - version: 4.1.1(re2@1.20.9) + version: 4.1.1 glob: specifier: ^11.0.3 version: 11.0.3 @@ -173,7 +173,7 @@ importers: version: 9.1.7 jsdoc-type-pratt-parser: specifier: ^6.11.0 - version: 6.11.0 + version: 6.11.1 json-schema: specifier: ^0.4.0 version: 0.4.0 @@ -185,7 +185,7 @@ importers: version: 16.2.6 mocha: specifier: ^11.7.4 - version: 11.7.4 + version: 11.7.5 open-editor: specifier: ^5.1.0 version: 5.1.0 @@ -200,10 +200,10 @@ importers: version: 6.1.0 rollup: specifier: ^4.52.5 - version: 4.52.5 + version: 4.53.2 semantic-release: specifier: ^25.0.1 - version: 25.0.1(typescript@5.9.3) + version: 25.0.2(typescript@5.9.3) sinon: specifier: ^21.0.0 version: 21.0.0 @@ -215,7 +215,7 @@ importers: version: 5.9.3 typescript-eslint: specifier: ^8.46.2 - version: 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) packages: @@ -258,10 +258,6 @@ packages: resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.28.4': - resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==} - engines: {node: '>=6.9.0'} - '@babel/compat-data@7.28.5': resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==} engines: {node: '>=6.9.0'} @@ -277,10 +273,6 @@ packages: '@babel/core': ^7.11.0 eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 - '@babel/generator@7.28.3': - resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} - engines: {node: '>=6.9.0'} - '@babel/generator@7.28.5': resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} engines: {node: '>=6.9.0'} @@ -293,14 +285,14 @@ packages: resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.28.3': - resolution: {integrity: sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==} + '@babel/helper-create-class-features-plugin@7.28.5': + resolution: {integrity: sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-create-regexp-features-plugin@7.27.1': - resolution: {integrity: sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==} + '@babel/helper-create-regexp-features-plugin@7.28.5': + resolution: {integrity: sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -314,8 +306,8 @@ packages: resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} engines: {node: '>=6.9.0'} - '@babel/helper-member-expression-to-functions@7.27.1': - resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==} + '@babel/helper-member-expression-to-functions@7.28.5': + resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} engines: {node: '>=6.9.0'} '@babel/helper-module-imports@7.27.1': @@ -356,10 +348,6 @@ packages: resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.27.1': - resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.28.5': resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} @@ -376,11 +364,6 @@ packages: resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} engines: {node: '>=6.9.0'} - '@babel/parser@7.28.4': - resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/parser@7.28.5': resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} engines: {node: '>=6.0.0'} @@ -416,13 +399,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-proposal-private-methods@7.18.6': - resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} @@ -785,18 +761,10 @@ packages: resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.28.4': - resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==} - engines: {node: '>=6.9.0'} - '@babel/traverse@7.28.5': resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.28.4': - resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} - engines: {node: '>=6.9.0'} - '@babel/types@7.28.5': resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} engines: {node: '>=6.9.0'} @@ -812,17 +780,17 @@ packages: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} - '@emnapi/core@1.5.0': - resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==} + '@emnapi/core@1.7.0': + resolution: {integrity: sha512-pJdKGq/1iquWYtv1RRSljZklxHCOCAJFJrImO5ZLKPJVJlVUcs8yFwNQlqS0Lo8xT1VAXXTCZocF9n26FWEKsw==} - '@emnapi/runtime@1.5.0': - resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} + '@emnapi/runtime@1.7.0': + resolution: {integrity: sha512-oAYoQnCYaQZKVS53Fq23ceWMRxq5EhQsE0x0RdQ55jT7wagMu5k+fS39v1fiSLrtrLQlXwVINenqhLMtTrV/1Q==} '@emnapi/wasi-threads@1.1.0': resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} - '@envelop/core@5.3.2': - resolution: {integrity: sha512-06Mu7fmyKzk09P2i2kHpGfItqLLgCq7uO5/nX4fc/iHMplWPNuAx4iYR+WXUQoFHDnP6EUbceQNQ5iyeMz9f3g==} + '@envelop/core@5.4.0': + resolution: {integrity: sha512-/1fat63pySE8rw/dZZArEVytLD90JApY85deDJ0/34gm+yhQ3k70CloSUevxoOE4YCGveG3s9SJJfQeeB4NAtQ==} engines: {node: '>=18.0.0'} '@envelop/instrumentation@1.0.0': @@ -868,8 +836,8 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.12.1': - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} '@eslint/config-array@0.21.1': @@ -939,8 +907,8 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/code-file-loader@8.1.22': - resolution: {integrity: sha512-FSka29kqFkfFmw36CwoQ+4iyhchxfEzPbXOi37lCEjWLHudGaPkXc3RyB9LdmBxx3g3GHEu43a5n5W8gfcrMdA==} + '@graphql-tools/code-file-loader@8.1.26': + resolution: {integrity: sha512-VamhpBEbrABCjtJqEFBUrHBBVX4Iw7q4Ga8H3W0P7mO+sE1HuTfpWirSdBLlhc6nGcSyTb6FA1mEgGjjUASIHA==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -975,56 +943,56 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/executor-legacy-ws@1.1.19': - resolution: {integrity: sha512-bEbv/SlEdhWQD0WZLUX1kOenEdVZk1yYtilrAWjRUgfHRZoEkY9s+oiqOxnth3z68wC2MWYx7ykkS5hhDamixg==} + '@graphql-tools/executor-legacy-ws@1.1.23': + resolution: {integrity: sha512-wwS6ZlJDaC+zxE1DcfYrPJk1ynQ0xcbOWS/x8dy4hO6ZCjRawkogoqN3Muab0E9RzuwF29LRu+aOH6isO5mQKg==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/executor@1.4.9': - resolution: {integrity: sha512-SAUlDT70JAvXeqV87gGzvDzUGofn39nvaVcVhNf12Dt+GfWHtNNO/RCn/Ea4VJaSLGzraUd41ObnN3i80EBU7w==} + '@graphql-tools/executor@1.4.13': + resolution: {integrity: sha512-2hTSRfH2kb4ua0ANOV/K6xUoCZsHAE6igE1bimtWUK7v0bowPIxGRKRPpF8JLbImpsJuTCC4HGOCMy7otg3FIQ==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/graphql-file-loader@8.1.2': - resolution: {integrity: sha512-VB6ttpwkqCu0KsA1/Wmev4qsu05Qfw49kgVSKkPjuyDQfVaqtr9ewEQRkX5CqnqHGEeLl6sOlNGEMM5fCVMWGQ==} + '@graphql-tools/graphql-file-loader@8.1.6': + resolution: {integrity: sha512-BwK9kUrRbv9w8WMFUedSkPogGdQivopRSRs1aqT9FUD1J3iVLltEHMUx9KTnpPHO7OcULSflMqQs5ZI/3cW+7Q==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/graphql-tag-pluck@8.3.21': - resolution: {integrity: sha512-TJhELNvR1tmghXMi6HVKp/Swxbx1rcSp/zdkuJZT0DCM3vOY11FXY6NW3aoxumcuYDNN3jqXcCPKstYGFPi5GQ==} + '@graphql-tools/graphql-tag-pluck@8.3.25': + resolution: {integrity: sha512-b8oTBe0mDQDh3zPcKCkaTPmjLv1TJslBUKXPNLfu5CWS2+gL8Z/z0UuAhCe5gTveuKDJYjkEO7xcct9JfcDi4g==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/import@7.1.2': - resolution: {integrity: sha512-+tlNQbLEqAA4LdWoLwM1tckx95lo8WIKd8vhj99b9rLwN/KfLwHWzdS3jnUFK7+99vmHmN1oE5v5zmqJz0MTKw==} + '@graphql-tools/import@7.1.6': + resolution: {integrity: sha512-aROsZq/ApWiAWE9k/xfYiKFUQiw81958e3DvL+HqGtbFQq+F11hIi0PgwOEiEereJZHIuVYZmIfbdQd4gFq4+w==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/json-file-loader@8.0.20': - resolution: {integrity: sha512-5v6W+ZLBBML5SgntuBDLsYoqUvwfNboAwL6BwPHi3z/hH1f8BS9/0+MCW9OGY712g7E4pc3y9KqS67mWF753eA==} + '@graphql-tools/json-file-loader@8.0.24': + resolution: {integrity: sha512-S2XKpUVAzY84hniaMpv6V0of2joPfLPaeY4XXUQZfi4w0uiPSzHWA/EnXohgojJsQLgN+FP4dXFfp2yA5GG6VA==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/load@8.1.2': - resolution: {integrity: sha512-WhDPv25/jRND+0uripofMX0IEwo6mrv+tJg6HifRmDu8USCD7nZhufT0PP7lIcuutqjIQFyogqT70BQsy6wOgw==} + '@graphql-tools/load@8.1.6': + resolution: {integrity: sha512-/bUYqGdB2Y6BflW42IjmauBDzxjec3LQmVAuImVGeiOqw1Rca/DDP7KRQe3vEv8yf/xMVj/PkIl+YRjoo12YxA==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/merge@9.1.1': - resolution: {integrity: sha512-BJ5/7Y7GOhTuvzzO5tSBFL4NGr7PVqTJY3KeIDlVTT8YLcTXtBR+hlrC3uyEym7Ragn+zyWdHeJ9ev+nRX1X2w==} + '@graphql-tools/merge@9.1.5': + resolution: {integrity: sha512-eVcir6nCcOC/Wzv7ZAng3xec3dj6FehE8+h9TvgvUyrDEKVMdFfrO6etRFZ2hucWVcY8S6drx7zQx04N4lPM8Q==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/schema@10.0.25': - resolution: {integrity: sha512-/PqE8US8kdQ7lB9M5+jlW8AyVjRGCKU7TSktuW3WNKSKmDO0MK1wakvb5gGdyT49MjAIb4a3LWxIpwo5VygZuw==} + '@graphql-tools/schema@10.0.29': + resolution: {integrity: sha512-+Htiupnq6U/AWOEAJerIOGT1pAf4u43Q3n2JmFpqFfYJchz6sKWZ7L9Lpe/NusaaUQty/IOF+eQlNFypEaWxhg==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -1035,8 +1003,8 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/utils@10.9.1': - resolution: {integrity: sha512-B1wwkXk9UvU7LCBkPs8513WxOQ2H8Fo5p8HR1+Id9WmYE5+bd51vqN+MbrqvWczHCH2gwkREgHJN88tE0n1FCw==} + '@graphql-tools/utils@10.10.3': + resolution: {integrity: sha512-2EdYiefeLLxsoeZTukSNZJ0E/Z5NnWBUGK2VJa0DQj1scDhVd93HeT1eW9TszJOYmIh3eWAKLv58ri/1XUmdsQ==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -1118,8 +1086,8 @@ packages: '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} - '@next/eslint-plugin-next@15.5.4': - resolution: {integrity: sha512-SR1vhXNNg16T4zffhJ4TS7Xn7eq4NfKfcOsRwea7RIAHrjRpI9ALYbamqIJqkAhowLlERffiwk0FMvTLNdnVtw==} + '@next/eslint-plugin-next@15.5.6': + resolution: {integrity: sha512-YxDvsT2fwy1j5gMqk3ppXlsgDopHnkM4BoxSVASbvvgh5zgsK8lvWerDzPip8k3WVzsTZ1O7A7si1KNfN4OZfQ==} '@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3': resolution: {integrity: sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==} @@ -1143,33 +1111,22 @@ packages: resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} engines: {node: '>=12.4.0'} - '@npmcli/agent@2.2.2': - resolution: {integrity: sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==} - engines: {node: ^16.14.0 || >=18.0.0} - - '@npmcli/fs@3.1.1': - resolution: {integrity: sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - '@octokit/auth-token@6.0.0': resolution: {integrity: sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==} engines: {node: '>= 20'} - '@octokit/core@7.0.5': - resolution: {integrity: sha512-t54CUOsFMappY1Jbzb7fetWeO0n6K0k/4+/ZpkS+3Joz8I4VcvY9OiEBFRYISqaI2fq5sCiPtAjRDOzVYG8m+Q==} + '@octokit/core@7.0.6': + resolution: {integrity: sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q==} engines: {node: '>= 20'} - '@octokit/endpoint@11.0.1': - resolution: {integrity: sha512-7P1dRAZxuWAOPI7kXfio88trNi/MegQ0IJD3vfgC3b+LZo1Qe6gRJc2v0mz2USWWJOKrB2h5spXCzGbw+fAdqA==} + '@octokit/endpoint@11.0.2': + resolution: {integrity: sha512-4zCpzP1fWc7QlqunZ5bSEjxc6yLAlRTnDwKtgXfcI/FxxGoqedDG8V2+xJ60bV2kODqcGB+nATdtap/XYq2NZQ==} engines: {node: '>= 20'} - '@octokit/graphql@9.0.2': - resolution: {integrity: sha512-iz6KzZ7u95Fzy9Nt2L8cG88lGRMr/qy1Q36ih/XVzMIlPDMYwaNLE/ENhqmIzgPrlNWiYJkwmveEetvxAgFBJw==} + '@octokit/graphql@9.0.3': + resolution: {integrity: sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA==} engines: {node: '>= 20'} - '@octokit/openapi-types@26.0.0': - resolution: {integrity: sha512-7AtcfKtpo77j7Ts73b4OWhOZHTKo/gGY8bB3bNBQz4H+GRSWqx2yvj8TXRsbdTE0eRmYmXOEY66jM7mJ7LzfsA==} - '@octokit/openapi-types@27.0.0': resolution: {integrity: sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==} @@ -1179,29 +1136,26 @@ packages: peerDependencies: '@octokit/core': '>=6' - '@octokit/plugin-retry@8.0.2': - resolution: {integrity: sha512-mVPCe77iaD8g1lIX46n9bHPUirFLzc3BfIzsZOpB7bcQh1ecS63YsAgcsyMGqvGa2ARQWKEFTrhMJX2MLJVHVw==} + '@octokit/plugin-retry@8.0.3': + resolution: {integrity: sha512-vKGx1i3MC0za53IzYBSBXcrhmd+daQDzuZfYDd52X5S0M2otf3kVZTVP8bLA3EkU0lTvd1WEC2OlNNa4G+dohA==} engines: {node: '>= 20'} peerDependencies: '@octokit/core': '>=7' - '@octokit/plugin-throttling@11.0.2': - resolution: {integrity: sha512-ntNIig4zZhQVOZF4fG9Wt8QCoz9ehb+xnlUwp74Ic2ANChCk8oKmRwV9zDDCtrvU1aERIOvtng8wsalEX7Jk5Q==} + '@octokit/plugin-throttling@11.0.3': + resolution: {integrity: sha512-34eE0RkFCKycLl2D2kq7W+LovheM/ex3AwZCYN8udpi6bxsyjZidb2McXs69hZhLmJlDqTSP8cH+jSRpiaijBg==} engines: {node: '>= 20'} peerDependencies: '@octokit/core': ^7.0.0 - '@octokit/request-error@7.0.1': - resolution: {integrity: sha512-CZpFwV4+1uBrxu7Cw8E5NCXDWFNf18MSY23TdxCBgjw1tXXHvTrZVsXlW8hgFTOLw8RQR1BBrMvYRtuyaijHMA==} + '@octokit/request-error@7.0.2': + resolution: {integrity: sha512-U8piOROoQQUyExw5c6dTkU3GKxts5/ERRThIauNL7yaRoeXW0q/5bgHWT7JfWBw1UyrbK8ERId2wVkcB32n0uQ==} engines: {node: '>= 20'} - '@octokit/request@10.0.5': - resolution: {integrity: sha512-TXnouHIYLtgDhKo+N6mXATnDBkV05VwbR0TtMWpgTHIoQdRQfCSzmy/LGqR1AbRMbijq/EckC/E3/ZNcU92NaQ==} + '@octokit/request@10.0.6': + resolution: {integrity: sha512-FO+UgZCUu+pPnZAR+iKdUt64kPE7QW7ciqpldaMXaNzixz5Jld8dJ31LAUewk0cfSRkNSRKyqG438ba9c/qDlQ==} engines: {node: '>= 20'} - '@octokit/types@15.0.0': - resolution: {integrity: sha512-8o6yDfmoGJUIeR9OfYU0/TUJTnMPG2r68+1yEdUeG2Fdqpj8Qetg0ziKIgcBm0RW/j29H41WP37CYCEhp6GoHQ==} - '@octokit/types@16.0.0': resolution: {integrity: sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==} @@ -1246,113 +1200,113 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.52.5': - resolution: {integrity: sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==} + '@rollup/rollup-android-arm-eabi@4.53.2': + resolution: {integrity: sha512-yDPzwsgiFO26RJA4nZo8I+xqzh7sJTZIWQOxn+/XOdPE31lAvLIYCKqjV+lNH/vxE2L2iH3plKxDCRK6i+CwhA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.52.5': - resolution: {integrity: sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==} + '@rollup/rollup-android-arm64@4.53.2': + resolution: {integrity: sha512-k8FontTxIE7b0/OGKeSN5B6j25EuppBcWM33Z19JoVT7UTXFSo3D9CdU39wGTeb29NO3XxpMNauh09B+Ibw+9g==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.52.5': - resolution: {integrity: sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==} + '@rollup/rollup-darwin-arm64@4.53.2': + resolution: {integrity: sha512-A6s4gJpomNBtJ2yioj8bflM2oogDwzUiMl2yNJ2v9E7++sHrSrsQ29fOfn5DM/iCzpWcebNYEdXpaK4tr2RhfQ==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.52.5': - resolution: {integrity: sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==} + '@rollup/rollup-darwin-x64@4.53.2': + resolution: {integrity: sha512-e6XqVmXlHrBlG56obu9gDRPW3O3hLxpwHpLsBJvuI8qqnsrtSZ9ERoWUXtPOkY8c78WghyPHZdmPhHLWNdAGEw==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.52.5': - resolution: {integrity: sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==} + '@rollup/rollup-freebsd-arm64@4.53.2': + resolution: {integrity: sha512-v0E9lJW8VsrwPux5Qe5CwmH/CF/2mQs6xU1MF3nmUxmZUCHazCjLgYvToOk+YuuUqLQBio1qkkREhxhc656ViA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.52.5': - resolution: {integrity: sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==} + '@rollup/rollup-freebsd-x64@4.53.2': + resolution: {integrity: sha512-ClAmAPx3ZCHtp6ysl4XEhWU69GUB1D+s7G9YjHGhIGCSrsg00nEGRRZHmINYxkdoJehde8VIsDC5t9C0gb6yqA==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.52.5': - resolution: {integrity: sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==} + '@rollup/rollup-linux-arm-gnueabihf@4.53.2': + resolution: {integrity: sha512-EPlb95nUsz6Dd9Qy13fI5kUPXNSljaG9FiJ4YUGU1O/Q77i5DYFW5KR8g1OzTcdZUqQQ1KdDqsTohdFVwCwjqg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.52.5': - resolution: {integrity: sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==} + '@rollup/rollup-linux-arm-musleabihf@4.53.2': + resolution: {integrity: sha512-BOmnVW+khAUX+YZvNfa0tGTEMVVEerOxN0pDk2E6N6DsEIa2Ctj48FOMfNDdrwinocKaC7YXUZ1pHlKpnkja/Q==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.52.5': - resolution: {integrity: sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==} + '@rollup/rollup-linux-arm64-gnu@4.53.2': + resolution: {integrity: sha512-Xt2byDZ+6OVNuREgBXr4+CZDJtrVso5woFtpKdGPhpTPHcNG7D8YXeQzpNbFRxzTVqJf7kvPMCub/pcGUWgBjA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.52.5': - resolution: {integrity: sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==} + '@rollup/rollup-linux-arm64-musl@4.53.2': + resolution: {integrity: sha512-+LdZSldy/I9N8+klim/Y1HsKbJ3BbInHav5qE9Iy77dtHC/pibw1SR/fXlWyAk0ThnpRKoODwnAuSjqxFRDHUQ==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.52.5': - resolution: {integrity: sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==} + '@rollup/rollup-linux-loong64-gnu@4.53.2': + resolution: {integrity: sha512-8ms8sjmyc1jWJS6WdNSA23rEfdjWB30LH8Wqj0Cqvv7qSHnvw6kgMMXRdop6hkmGPlyYBdRPkjJnj3KCUHV/uQ==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.52.5': - resolution: {integrity: sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==} + '@rollup/rollup-linux-ppc64-gnu@4.53.2': + resolution: {integrity: sha512-3HRQLUQbpBDMmzoxPJYd3W6vrVHOo2cVW8RUo87Xz0JPJcBLBr5kZ1pGcQAhdZgX9VV7NbGNipah1omKKe23/g==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.52.5': - resolution: {integrity: sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==} + '@rollup/rollup-linux-riscv64-gnu@4.53.2': + resolution: {integrity: sha512-fMjKi+ojnmIvhk34gZP94vjogXNNUKMEYs+EDaB/5TG/wUkoeua7p7VCHnE6T2Tx+iaghAqQX8teQzcvrYpaQA==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.52.5': - resolution: {integrity: sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==} + '@rollup/rollup-linux-riscv64-musl@4.53.2': + resolution: {integrity: sha512-XuGFGU+VwUUV5kLvoAdi0Wz5Xbh2SrjIxCtZj6Wq8MDp4bflb/+ThZsVxokM7n0pcbkEr2h5/pzqzDYI7cCgLQ==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.52.5': - resolution: {integrity: sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==} + '@rollup/rollup-linux-s390x-gnu@4.53.2': + resolution: {integrity: sha512-w6yjZF0P+NGzWR3AXWX9zc0DNEGdtvykB03uhonSHMRa+oWA6novflo2WaJr6JZakG2ucsyb+rvhrKac6NIy+w==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.52.5': - resolution: {integrity: sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==} + '@rollup/rollup-linux-x64-gnu@4.53.2': + resolution: {integrity: sha512-yo8d6tdfdeBArzC7T/PnHd7OypfI9cbuZzPnzLJIyKYFhAQ8SvlkKtKBMbXDxe1h03Rcr7u++nFS7tqXz87Gtw==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.52.5': - resolution: {integrity: sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==} + '@rollup/rollup-linux-x64-musl@4.53.2': + resolution: {integrity: sha512-ah59c1YkCxKExPP8O9PwOvs+XRLKwh/mV+3YdKqQ5AMQ0r4M4ZDuOrpWkUaqO7fzAHdINzV9tEVu8vNw48z0lA==} cpu: [x64] os: [linux] - '@rollup/rollup-openharmony-arm64@4.52.5': - resolution: {integrity: sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==} + '@rollup/rollup-openharmony-arm64@4.53.2': + resolution: {integrity: sha512-4VEd19Wmhr+Zy7hbUsFZ6YXEiP48hE//KPLCSVNY5RMGX2/7HZ+QkN55a3atM1C/BZCGIgqN+xrVgtdak2S9+A==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.52.5': - resolution: {integrity: sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==} + '@rollup/rollup-win32-arm64-msvc@4.53.2': + resolution: {integrity: sha512-IlbHFYc/pQCgew/d5fslcy1KEaYVCJ44G8pajugd8VoOEI8ODhtb/j8XMhLpwHCMB3yk2J07ctup10gpw2nyMA==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.52.5': - resolution: {integrity: sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==} + '@rollup/rollup-win32-ia32-msvc@4.53.2': + resolution: {integrity: sha512-lNlPEGgdUfSzdCWU176ku/dQRnA7W+Gp8d+cWv73jYrb8uT7HTVVxq62DUYxjbaByuf1Yk0RIIAbDzp+CnOTFg==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.52.5': - resolution: {integrity: sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==} + '@rollup/rollup-win32-x64-gnu@4.53.2': + resolution: {integrity: sha512-S6YojNVrHybQis2lYov1sd+uj7K0Q05NxHcGktuMMdIQ2VixGwAfbJ23NnlvvVV1bdpR2m5MsNBViHJKcA4ADw==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.52.5': - resolution: {integrity: sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==} + '@rollup/rollup-win32-x64-msvc@4.53.2': + resolution: {integrity: sha512-k+/Rkcyx//P6fetPoLMb8pBeqJBNGx81uuf7iljX9++yNBVRDQgD04L+SVXmXmh5ZP4/WOp4mWF0kmi06PW2tA==} cpu: [x64] os: [win32] @@ -1369,8 +1323,8 @@ packages: resolution: {integrity: sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==} engines: {node: '>=18'} - '@semantic-release/github@12.0.1': - resolution: {integrity: sha512-BSC7Ko6aRPnH8ttVBpd3gC98LTiyPdmrmX4qHilLw5EZqVrXrXwcKp/JKUC5hgm0XpJACR3nPjgbfOjTJ75PIA==} + '@semantic-release/github@12.0.2': + resolution: {integrity: sha512-qyqLS+aSGH1SfXIooBKjs7mvrv0deg8v+jemegfJg1kq6ji+GJV8CO08VJDEsvjp3O8XJmTTIAjjZbMzagzsdw==} engines: {node: ^22.14.0 || >= 24.10.0} peerDependencies: semantic-release: '>=24.1.0' @@ -1414,8 +1368,8 @@ packages: peerDependencies: eslint: '>=9.0.0' - '@theguild/federation-composition@0.20.1': - resolution: {integrity: sha512-lwYYKCeHmstOtbMtzxC0BQKWsUPYbEVRVdJ3EqR4jSpcF4gvNf3MOJv6yuvq6QsKqgYZURKRBszmg7VEDoi5Aw==} + '@theguild/federation-composition@0.20.2': + resolution: {integrity: sha512-QI4iSdrc4JvCWnMb1QbiHnEpdD33KGdiU66qfWOcM8ENebRGHkGjXDnUrVJ8F9g1dmCRMTNfn2NFGqTcDpeYXw==} engines: {node: '>=18'} peerDependencies: graphql: ^16.0.0 @@ -1456,8 +1410,8 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@24.10.0': - resolution: {integrity: sha512-qzQZRBqkFsYyaSWXuEHc2WR9c0a0CXwiE5FWUvn7ZM+vdy1uZLfCunD38UzhuB7YN/J11ndbDBcTmOdxJo9Q7A==} + '@types/node@24.10.1': + resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -1474,128 +1428,63 @@ packages: '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} - '@typescript-eslint/eslint-plugin@8.45.0': - resolution: {integrity: sha512-HC3y9CVuevvWCl/oyZuI47dOeDF9ztdMEfMH8/DW/Mhwa9cCLnK1oD7JoTVGW/u7kFzNZUKUoyJEqkaJh5y3Wg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.45.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/eslint-plugin@8.46.2': - resolution: {integrity: sha512-ZGBMToy857/NIPaaCucIUQgqueOiq7HeAKkhlvqVV4lm089zUFW6ikRySx2v+cAhKeUCPuWVHeimyk6Dw1iY3w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.46.2 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/parser@8.45.0': - resolution: {integrity: sha512-TGf22kon8KW+DeKaUmOibKWktRY8b2NSAZNdtWh798COm1NWx8+xJ6iFBtk3IvLdv6+LGLJLRlyhrhEDZWargQ==} + '@typescript-eslint/eslint-plugin@8.46.4': + resolution: {integrity: sha512-R48VhmTJqplNyDxCyqqVkFSZIx1qX6PzwqgcXn1olLrzxcSBDlOsbtcnQuQhNtnNiJ4Xe5gREI1foajYaYU2Vg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: + '@typescript-eslint/parser': ^8.46.4 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.46.2': - resolution: {integrity: sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==} + '@typescript-eslint/parser@8.46.4': + resolution: {integrity: sha512-tK3GPFWbirvNgsNKto+UmB/cRtn6TZfyw0D6IKrW55n6Vbs7KJoZtI//kpTKzE/DUmmnAFD8/Ca46s7Obs92/w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.45.0': - resolution: {integrity: sha512-3pcVHwMG/iA8afdGLMuTibGR7pDsn9RjDev6CCB+naRsSYs2pns5QbinF4Xqw6YC/Sj3lMrm/Im0eMfaa61WUg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/project-service@8.46.2': - resolution: {integrity: sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/scope-manager@8.45.0': - resolution: {integrity: sha512-clmm8XSNj/1dGvJeO6VGH7EUSeA0FMs+5au/u3lrA3KfG8iJ4u8ym9/j2tTEoacAffdW1TVUzXO30W1JTJS7dA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/scope-manager@8.46.2': - resolution: {integrity: sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/tsconfig-utils@8.45.0': - resolution: {integrity: sha512-aFdr+c37sc+jqNMGhH+ajxPXwjv9UtFZk79k8pLoJ6p4y0snmYpPA52GuWHgt2ZF4gRRW6odsEj41uZLojDt5w==} + '@typescript-eslint/project-service@8.46.4': + resolution: {integrity: sha512-nPiRSKuvtTN+no/2N1kt2tUh/HoFzeEgOm9fQ6XQk4/ApGqjx0zFIIaLJ6wooR1HIoozvj2j6vTi/1fgAz7UYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/tsconfig-utils@8.46.1': - resolution: {integrity: sha512-X88+J/CwFvlJB+mK09VFqx5FE4H5cXD+H/Bdza2aEWkSb8hnWIQorNcscRl4IEo1Cz9VI/+/r/jnGWkbWPx54g==} + '@typescript-eslint/scope-manager@8.46.4': + resolution: {integrity: sha512-tMDbLGXb1wC+McN1M6QeDx7P7c0UWO5z9CXqp7J8E+xGcJuUuevWKxuG8j41FoweS3+L41SkyKKkia16jpX7CA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/tsconfig-utils@8.46.2': - resolution: {integrity: sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag==} + '@typescript-eslint/tsconfig-utils@8.46.4': + resolution: {integrity: sha512-+/XqaZPIAk6Cjg7NWgSGe27X4zMGqrFqZ8atJsX3CWxH/jACqWnrWI68h7nHQld0y+k9eTTjb9r+KU4twLoo9A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.45.0': - resolution: {integrity: sha512-bpjepLlHceKgyMEPglAeULX1vixJDgaKocp0RVJ5u4wLJIMNuKtUXIczpJCPcn2waII0yuvks/5m5/h3ZQKs0A==} + '@typescript-eslint/type-utils@8.46.4': + resolution: {integrity: sha512-V4QC8h3fdT5Wro6vANk6eojqfbv5bpwHuMsBcJUJkqs2z5XnYhJzyz9Y02eUmF9u3PgXEUiOt4w4KHR3P+z0PQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.46.2': - resolution: {integrity: sha512-HbPM4LbaAAt/DjxXaG9yiS9brOOz6fabal4uvUmaUYe6l3K1phQDMQKBRUrr06BQkxkvIZVVHttqiybM9nJsLA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/types@8.45.0': - resolution: {integrity: sha512-WugXLuOIq67BMgQInIxxnsSyRLFxdkJEJu8r4ngLR56q/4Q5LrbfkFRH27vMTjxEK8Pyz7QfzuZe/G15qQnVRA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/types@8.46.2': - resolution: {integrity: sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ==} + '@typescript-eslint/types@8.46.4': + resolution: {integrity: sha512-USjyxm3gQEePdUwJBFjjGNG18xY9A2grDVGuk7/9AkjIF1L+ZrVnwR5VAU5JXtUnBL/Nwt3H31KlRDaksnM7/w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.45.0': - resolution: {integrity: sha512-GfE1NfVbLam6XQ0LcERKwdTTPlLvHvXXhOeUGC1OXi4eQBoyy1iVsW+uzJ/J9jtCz6/7GCQ9MtrQ0fml/jWCnA==} + '@typescript-eslint/typescript-estree@8.46.4': + resolution: {integrity: sha512-7oV2qEOr1d4NWNmpXLR35LvCfOkTNymY9oyW+lUHkmCno7aOmIf/hMaydnJBUTBMRCOGZh8YjkFOc8dadEoNGA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/typescript-estree@8.46.2': - resolution: {integrity: sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/utils@8.45.0': - resolution: {integrity: sha512-bxi1ht+tLYg4+XV2knz/F7RVhU0k6VrSMc9sb8DQ6fyCTrGQLHfo7lDtN0QJjZjKkLA2ThrKuCdHEvLReqtIGg==} + '@typescript-eslint/utils@8.46.4': + resolution: {integrity: sha512-AbSv11fklGXV6T28dp2Me04Uw90R2iJ30g2bgLz529Koehrmkbs1r7paFqr1vPCZi7hHwYxYtxfyQMRC8QaVSg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.46.2': - resolution: {integrity: sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/visitor-keys@8.45.0': - resolution: {integrity: sha512-qsaFBA3e09MIDAGFUrTk+dzqtfv1XPVz8t8d1f0ybTzrCY7BKiMC5cjrl1O/P7UmHsNyW90EYSkU/ZWpmXelag==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/visitor-keys@8.46.2': - resolution: {integrity: sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w==} + '@typescript-eslint/visitor-keys@8.46.4': + resolution: {integrity: sha512-/++5CYLQqsO9HFGLI7APrxBJYo+5OCMpViuhV8q5/Qa3o5mMrF//eQHks+PXcsAVaLdn817fMuS7zqoXNNZGaw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@unrs/resolver-binding-android-arm-eabi@1.11.1': @@ -1693,11 +1582,12 @@ packages: cpu: [x64] os: [win32] - '@vitest/eslint-plugin@1.3.13': - resolution: {integrity: sha512-QfzXd1+lCY3dIqPHOZlagA2bJYoWC5yAU3adv8Gks0rHAL6FpyXKYBiyMCuU6mRrbKUMphGqwDQobinOvYgJig==} + '@vitest/eslint-plugin@1.4.2': + resolution: {integrity: sha512-7rENIOOk6eqgtf2FsQWilgfQheeuGRiU3lB2H+pmtbcA4jOdtBfQHVqS7f/KCOJ2JKjrIJgow8yUeANi34rj9w==} + engines: {node: '>=18'} peerDependencies: - eslint: '>= 8.57.0' - typescript: '>= 5.0.0' + eslint: '>=8.57.0' + typescript: '>=5.0.0' vitest: '*' peerDependenciesMeta: typescript: @@ -1709,22 +1599,18 @@ packages: resolution: {integrity: sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw==} engines: {node: '>=18.0.0'} - '@whatwg-node/fetch@0.10.11': - resolution: {integrity: sha512-eR8SYtf9Nem1Tnl0IWrY33qJ5wCtIWlt3Fs3c6V4aAaTFLtkEQErXu3SSZg/XCHrj9hXSJ8/8t+CdMk5Qec/ZA==} + '@whatwg-node/fetch@0.10.13': + resolution: {integrity: sha512-b4PhJ+zYj4357zwk4TTuF2nEe0vVtOrwdsrNo5hL+u1ojXNhh1FgJ6pg1jzDlwlT4oBdzfSwaBwMCtFCsIWg8Q==} engines: {node: '>=18.0.0'} - '@whatwg-node/node-fetch@0.8.0': - resolution: {integrity: sha512-+z00GpWxKV/q8eMETwbdi80TcOoVEVZ4xSRkxYOZpn3kbV3nej5iViNzXVke/j3v4y1YpO5zMS/CVDIASvJnZQ==} + '@whatwg-node/node-fetch@0.8.4': + resolution: {integrity: sha512-AlKLc57loGoyYlrzDbejB9EeR+pfdJdGzbYnkEuZaGekFboBwzfVYVMsy88PMriqPI1ORpiGYGgSSWpx7a2sDA==} engines: {node: '>=18.0.0'} '@whatwg-node/promise-helpers@1.3.2': resolution: {integrity: sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA==} engines: {node: '>=16.0.0'} - abbrev@2.0.0: - resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - acorn-globals@1.0.9: resolution: {integrity: sha512-j3/4pkfih8W4NK22gxVSXcEonTpAHOHh0hu5BoZrKcOsW/4oBPxTi4Yk3SAj+FhC1f3+bRTkXdm4019gw1vg9g==} @@ -1747,10 +1633,6 @@ packages: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} - aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} - aggregate-error@5.0.0: resolution: {integrity: sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==} engines: {node: '>=18'} @@ -1758,8 +1640,8 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - ansi-escapes@7.1.1: - resolution: {integrity: sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==} + ansi-escapes@7.2.0: + resolution: {integrity: sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==} engines: {node: '>=18'} ansi-regex@5.0.1: @@ -1880,8 +1762,8 @@ packages: aws4@1.13.2: resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==} - axe-core@4.10.3: - resolution: {integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==} + axe-core@4.11.0: + resolution: {integrity: sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ==} engines: {node: '>=4'} axobject-query@4.1.0: @@ -1918,8 +1800,8 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - baseline-browser-mapping@2.8.9: - resolution: {integrity: sha512-hY/u2lxLrbecMEWSB0IpGzGyDyeoMFQhCvZd2jGFSE5I17Fh01sYUBPCJtkWERw7zrac9+cIghxm/ytJa2X8iA==} + baseline-browser-mapping@2.8.27: + resolution: {integrity: sha512-2CXFpkjVnY2FT+B6GrSYxzYf65BJWEqz5tIRHCvNsZZ2F3CmsCB37h8SpYgKG7y9C4YAeTipIPWG7EmFmhAeXA==} hasBin: true bcrypt-pbkdf@1.0.2: @@ -1958,8 +1840,8 @@ packages: browser-stdout@1.3.1: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} - browserslist@4.26.2: - resolution: {integrity: sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A==} + browserslist@4.28.0: + resolution: {integrity: sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -1981,10 +1863,6 @@ packages: monocart-coverage-reports: optional: true - cacache@18.0.4: - resolution: {integrity: sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==} - engines: {node: ^16.14.0 || >=18.0.0} - call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} @@ -2013,14 +1891,14 @@ packages: resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} engines: {node: '>=16'} - caniuse-lite@1.0.30001746: - resolution: {integrity: sha512-eA7Ys/DGw+pnkWWSE/id29f2IcPHVoE8wxtvE5JdvD2V28VTDPy1yEeo11Guz0sJ4ZeGRcm3uaTcAqK1LXaphA==} + caniuse-lite@1.0.30001754: + resolution: {integrity: sha512-x6OeBXueoAceOmotzx3PO4Zpt4rzpeIFsSr6AAePTZxSkXiYDUmpypEl7e2+8NCd9bD7bXjqyef8CJYPC1jfxg==} caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} - chai@6.2.0: - resolution: {integrity: sha512-aUTnJc/JipRzJrNADXVvpVqi6CO0dn3nx4EVPxijri+fj3LUUDyZQOgVeW54Ob3Y1Xh9Iz8f+CgaCl8v0mn9bA==} + chai@6.2.1: + resolution: {integrity: sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg==} engines: {node: '>=18'} chalk@2.4.2: @@ -2050,12 +1928,8 @@ packages: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} - chownr@2.0.0: - resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} - engines: {node: '>=10'} - - ci-info@4.3.0: - resolution: {integrity: sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==} + ci-info@4.3.1: + resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==} engines: {node: '>=8'} cjs-module-lexer@1.4.3: @@ -2065,10 +1939,6 @@ packages: resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} engines: {node: '>=4'} - clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - clean-stack@5.3.0: resolution: {integrity: sha512-9ngPTOhYGQqNVSfeJkYXHmF7AGWp4/nN5D/QqNQs3Dvxd1Kk/WpjHfNujKHYUQ/5CoGyOyFNoWSPk5afzP0QVg==} engines: {node: '>=14.16'} @@ -2090,8 +1960,8 @@ packages: resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} engines: {node: '>=18'} - cli-truncate@5.1.0: - resolution: {integrity: sha512-7JDGG+4Zp0CsknDCedl0DYdaeOhc46QNpXi3NLQblkZpXXgA6LncLDUUyvrjSvZeF3VRQa+KiMGomazQrC1V8g==} + cli-truncate@5.1.1: + resolution: {integrity: sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==} engines: {node: '>=20'} cliui@6.0.0: @@ -2136,8 +2006,8 @@ packages: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} - commander@14.0.1: - resolution: {integrity: sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==} + commander@14.0.2: + resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==} engines: {node: '>=20'} commander@6.2.1: @@ -2163,8 +2033,8 @@ packages: contents@5.0.0: resolution: {integrity: sha512-wnnGorqo07ZSIzMQmUc4vUv1NEXl7elBtqoz5UcysV+pbSvphZYfI763rXgpFK2H9o5rvjQQ8kZxp7hOOwIe3A==} - conventional-changelog-angular@8.0.0: - resolution: {integrity: sha512-CLf+zr6St0wIxos4bmaKHRXWAcsCXrJU6F4VdNDrGRK3B8LDLKoX3zuMV5GhtbGkVR/LohZ6MT6im43vZLSjmA==} + conventional-changelog-angular@8.1.0: + resolution: {integrity: sha512-GGf2Nipn1RUCAktxuVauVr1e3r8QrLP/B0lEUsFktmGqc3ddbQkhoJZHJctVU829U1c6mTSWftrVOCHaL85Q3w==} engines: {node: '>=18'} conventional-changelog-writer@8.2.0: @@ -2176,8 +2046,8 @@ packages: resolution: {integrity: sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q==} engines: {node: '>=18'} - conventional-commits-parser@6.2.0: - resolution: {integrity: sha512-uLnoLeIW4XaoFtH37qEcg/SXMJmKF4vi7V0H2rnPueg+VEtFGA/asSCNTcq4M/GQ6QmlzchAEtOoDTtKqWeHag==} + conventional-commits-parser@6.2.1: + resolution: {integrity: sha512-20pyHgnO40rvfI0NGF/xiEoFMkXDtkF8FwHvk5BokoFoCuTQRI8vrNCNFWUOfuolKJMm1tPCHc8GgYEtr1XRNA==} engines: {node: '>=18'} hasBin: true @@ -2188,8 +2058,8 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - core-js-compat@3.45.1: - resolution: {integrity: sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA==} + core-js-compat@3.46.0: + resolution: {integrity: sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law==} core-util-is@1.0.2: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} @@ -2275,15 +2145,6 @@ packages: supports-color: optional: true - debug@4.4.1: - resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -2324,8 +2185,8 @@ packages: resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} engines: {node: '>=18'} - default-browser@5.2.1: - resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} + default-browser@5.3.0: + resolution: {integrity: sha512-Qq68+VkJlc8tjnPV1i7HtbIn7ohmjZa88qUvHMIK0ZKUXMCuV45cT7cEXALPUmeXCe0q1DWQkQTemHVaLIFSrg==} engines: {node: '>=18'} define-data-property@1.1.4: @@ -2344,6 +2205,10 @@ packages: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} + diff-sequences@27.5.1: + resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + diff@7.0.0: resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==} engines: {node: '>=0.3.1'} @@ -2396,11 +2261,11 @@ packages: ecc-jsbn@0.1.2: resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} - electron-to-chromium@1.5.228: - resolution: {integrity: sha512-nxkiyuqAn4MJ1QbobwqJILiDtu/jk14hEAWaMiJmNPh1Z+jqoFlBFZjdXwLWGeVSeu9hGLg6+2G9yJaW8rBIFA==} + electron-to-chromium@1.5.250: + resolution: {integrity: sha512-/5UMj9IiGDMOFBnN4i7/Ry5onJrAGSbOGo3s9FEKmwobGq6xw832ccET0CE3CkkMBZ8GJSlUIesZofpyurqDXw==} - emoji-regex@10.5.0: - resolution: {integrity: sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==} + emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2411,9 +2276,6 @@ packages: emojilib@2.4.0: resolution: {integrity: sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==} - encoding@0.1.13: - resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} - enhance-visitors@1.0.0: resolution: {integrity: sha512-+29eJLiUixTEDRaZ35Vu8jP3gPLNcQQkQkOQjLp2X+6cZGGPDD/uasbFzvLsJKnGZnvmyZ0srxudwOtskHeIDA==} engines: {node: '>=4.0.0'} @@ -2444,9 +2306,6 @@ packages: resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} engines: {node: '>=18'} - err-code@2.0.3: - resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} - error-ex@1.3.4: resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} @@ -2668,8 +2527,8 @@ packages: peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - eslint-plugin-jsonc@2.20.1: - resolution: {integrity: sha512-gUzIwQHXx7ZPypUoadcyRi4WbHW2TPixDr0kqQ4miuJBU0emJmyGTlnaT3Og9X2a8R1CDayN9BFSq5weGWbTng==} + eslint-plugin-jsonc@2.21.0: + resolution: {integrity: sha512-HttlxdNG5ly3YjP1cFMP62R4qKLxJURfBZo2gnMY+yQojZxkLyOpY1H1KRTKBmvQeSG9pIpSGEhDjE17vvYosg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' @@ -2702,8 +2561,8 @@ packages: peerDependencies: eslint: '>=8.23.0' - eslint-plugin-perfectionist@4.15.0: - resolution: {integrity: sha512-pC7PgoXyDnEXe14xvRUhBII8A3zRgggKqJFx2a82fjrItDs1BSI7zdZnQtM2yQvcyod6/ujmzb7ejKPx8lZTnw==} + eslint-plugin-perfectionist@4.15.1: + resolution: {integrity: sha512-MHF0cBoOG0XyBf7G0EAFCuJJu4I18wy0zAoT1OHfx2o6EOx1EFTIzr2HGeuZa1kDcusoX0xJ9V7oZmaeFd773Q==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: eslint: '>=8.45.0' @@ -2728,8 +2587,8 @@ packages: peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - eslint-plugin-react-hooks@6.1.0: - resolution: {integrity: sha512-72mucw/WLzEqGvL2vwE6fWR6geO6UbmDjz3eAb3pezxTpFzgbfyUeFKzmZKr9LhwUWMXfTVh1g0rKEJoyKNdoA==} + eslint-plugin-react-hooks@6.1.1: + resolution: {integrity: sha512-St9EKZzOAQF704nt2oJvAKZHjhrpg25ClQoaAlHmPZuajFldVLqRDW4VBNAS01NzeiQF0m0qhG1ZA807K6aVaQ==} engines: {node: '>=18'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 @@ -2752,8 +2611,8 @@ packages: peerDependencies: eslint: '>=9.29.0' - eslint-plugin-yml@1.18.0: - resolution: {integrity: sha512-9NtbhHRN2NJa/s3uHchO3qVVZw0vyOIvWlXWGaKCr/6l3Go62wsvJK5byiI6ZoYztDsow4GnS69BZD3GnqH3hA==} + eslint-plugin-yml@1.19.0: + resolution: {integrity: sha512-S+4GbcCWksFKAvFJtf0vpdiCkZZvDJCV4Zsi9ahmYkYOYcf+LRqqzvzkb/ST7vTYV6sFwXOvawzYyL/jFT2nQA==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' @@ -2850,9 +2709,6 @@ packages: resolution: {integrity: sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==} engines: {node: ^18.19.0 || >=20.5.0} - exponential-backoff@3.1.2: - resolution: {integrity: sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==} - extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -2983,14 +2839,6 @@ packages: resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==} engines: {node: '>=14.14'} - fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 8'} - - fs-minipass@3.0.3: - resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - fs-readdir-recursive@1.1.0: resolution: {integrity: sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==} @@ -3077,8 +2925,8 @@ packages: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} - get-tsconfig@4.10.1: - resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} + get-tsconfig@4.13.0: + resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} get-urls@12.1.0: resolution: {integrity: sha512-qHO+QmPiI1bEw0Y/m+WMAAx/UoEEXLZwEx0DVaKMtlHNrKbMeV960LryIpd+E2Ykb9XkVHmVtpbCsmul3GhR0g==} @@ -3194,8 +3042,8 @@ packages: ws: optional: true - graphql@16.11.0: - resolution: {integrity: sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==} + graphql@16.12.0: + resolution: {integrity: sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} handlebars@4.7.8: @@ -3247,12 +3095,6 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true - hermes-estree@0.25.1: - resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} - - hermes-parser@0.25.1: - resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} - highlight.js@10.7.3: resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} @@ -3277,9 +3119,6 @@ packages: htmlparser2@3.10.1: resolution: {integrity: sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==} - http-cache-semantics@4.2.0: - resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} - http-proxy-agent@7.0.2: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} @@ -3305,10 +3144,6 @@ packages: engines: {node: '>=18'} hasBin: true - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -3336,10 +3171,6 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - indent-string@5.0.0: resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} engines: {node: '>=12'} @@ -3358,10 +3189,6 @@ packages: ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - install-artifact-from-github@1.4.0: - resolution: {integrity: sha512-+y6WywKZREw5rq7U2jvr2nmZpT7cbWbQQ0N/qfcseYnzHFz2cZz1Et52oY+XttYuYeTkI8Y+R2JNWj68MpQFSg==} - hasBin: true - internal-slot@1.1.0: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} @@ -3370,10 +3197,6 @@ packages: resolution: {integrity: sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw==} engines: {node: '>=12'} - ip-address@10.0.1: - resolution: {integrity: sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==} - engines: {node: '>= 12'} - ip-regex@4.3.0: resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==} engines: {node: '>=8'} @@ -3474,9 +3297,6 @@ packages: is-js-type@2.0.0: resolution: {integrity: sha512-Aj13l47+uyTjlQNHtXBV8Cji3jb037vxwMWCgopRR8h6xocgBGW3qG8qGlIOEmbXQtkKShKuBM9e8AA1OeQ+xw==} - is-lambda@1.0.1: - resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} - is-map@2.0.3: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} @@ -3590,10 +3410,6 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - isexe@3.1.1: - resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} - engines: {node: '>=16'} - isomorphic-ws@5.0.0: resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} peerDependencies: @@ -3652,8 +3468,8 @@ packages: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true jsbn@0.1.1: @@ -3675,8 +3491,8 @@ packages: resolution: {integrity: sha512-+LexoTRyYui5iOhJGn13N9ZazL23nAHGkXsa1p/C8yeq79WRfLBag6ZZ0FQG2aRoc9yfo59JT9EYCQonOkHKkQ==} engines: {node: '>=20.0.0'} - jsdoc-type-pratt-parser@6.11.0: - resolution: {integrity: sha512-c3jH8e79MgFCpyG+3JHAV0PiuOxrTId+Vq86smLNfJZNuG/MCfzJ02I5FhBjamjl3LEHY+ForykjAbk+m8Vd9g==} + jsdoc-type-pratt-parser@6.11.1: + resolution: {integrity: sha512-N94gNQOt6xdzjMAc3OowUNBIPjzy5cA5t4dZaM4lG8YTthiVRzSIjgGMjoePWYgcXO/8zAxMi6uSzY0YI26rmQ==} engines: {node: '>=20.0.0'} jsdom@6.5.1: @@ -3861,6 +3677,10 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + make-asynchronous@1.0.1: + resolution: {integrity: sha512-T9BPOmEOhp6SmV25SwLVcHK4E6JyG/coH3C6F1NjNXSziv/fd4GmsqMk8YR6qpPOswfaOCApSNkZv6fxoaYFcQ==} + engines: {node: '>=18'} + make-dir@2.1.0: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} engines: {node: '>=6'} @@ -3869,10 +3689,6 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} - make-fetch-happen@13.0.1: - resolution: {integrity: sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==} - engines: {node: ^16.14.0 || >=18.0.0} - markdown-contents@1.0.11: resolution: {integrity: sha512-6o8It0JhmoN398ATp8zOWHAniTB3/tEXUVTCP00gTqwZNc465DIoHTTaspyEkaov93QLhrqirxizJ29E/i8/0Q==} @@ -3949,8 +3765,8 @@ packages: resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} engines: {node: '>=18'} - minimatch@10.0.3: - resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} + minimatch@10.1.1: + resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} engines: {node: 20 || >=22} minimatch@3.0.5: @@ -3966,49 +3782,12 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass-collect@2.0.1: - resolution: {integrity: sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==} - engines: {node: '>=16 || 14 >=14.17'} - - minipass-fetch@3.0.5: - resolution: {integrity: sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - minipass-flush@1.0.5: - resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} - engines: {node: '>= 8'} - - minipass-pipeline@1.2.4: - resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} - engines: {node: '>=8'} - - minipass-sized@1.0.3: - resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} - engines: {node: '>=8'} - - minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} - - minipass@5.0.0: - resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} - engines: {node: '>=8'} - minipass@7.1.2: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} - minizlib@2.1.2: - resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} - engines: {node: '>= 8'} - - mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true - - mocha@11.7.4: - resolution: {integrity: sha512-1jYAaY8x0kAZ0XszLWu14pzsf4KV740Gld4HXkhNTXwcHx4AUEDkPzgEHg9CM5dVcW+zv036tjpsEbLraPJj4w==} + mocha@11.7.5: + resolution: {integrity: sha512-mTT6RgopEYABzXWFx+GcJ+ZQ32kp4fMf0xvpZIIfSq9Z8lC/++MtcCnQ9t5FP2veYEP95FIYSvW+U9fV4xrlig==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true @@ -4021,15 +3800,12 @@ packages: mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nan@2.23.0: - resolution: {integrity: sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ==} - nano-spawn@2.0.0: resolution: {integrity: sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw==} engines: {node: '>=20.17'} - napi-postinstall@0.3.3: - resolution: {integrity: sha512-uTp172LLXSxuSYHv/kou+f6KW3SMppU9ivthaVTXian9sOt3XM/zHYHpRZiLgQoxeWfYUnslNWQHF1+G71xcow==} + napi-postinstall@0.3.4: + resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} hasBin: true @@ -4040,10 +3816,6 @@ packages: resolution: {integrity: sha512-kKHJhxwpR/Okycz4HhQKKlhWe4ASEfPgkSWNmKFHd7+ezuQlxkA5cM3+XkBPvm1gmHen3w53qsYAv+8GwRrBlg==} engines: {node: '>=18'} - negotiator@0.6.4: - resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} - engines: {node: '>= 0.6'} - neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} @@ -4066,23 +3838,17 @@ packages: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - node-gyp@10.3.1: - resolution: {integrity: sha512-Pp3nFHBThHzVtNY7U6JfPjvT/DTE8+o/4xKsLQtBoU+j2HLsGlhcfzflAoUreaJbNmYnX+LlLi0qjV8kpyO6xQ==} - engines: {node: ^16.14.0 || >=18.0.0} - hasBin: true - - node-releases@2.0.21: - resolution: {integrity: sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==} - - nopt@7.2.1: - resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - hasBin: true + node-releases@2.0.27: + resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} normalize-package-data@6.0.2: resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} engines: {node: ^16.14.0 || >=18.0.0} + normalize-package-data@8.0.0: + resolution: {integrity: sha512-RWk+PI433eESQ7ounYxIp67CYuVsS1uYSonX3kA6ps/3LWfjVQa/ptEg6Y3T6uAMq1mWpX9PQ+qx+QaHpsc7gQ==} + engines: {node: ^20.17.0 || >=22.9.0} + normalize-path@2.1.1: resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} engines: {node: '>=0.10.0'} @@ -4250,6 +4016,10 @@ packages: resolution: {integrity: sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==} engines: {node: '>=12'} + p-event@6.0.1: + resolution: {integrity: sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==} + engines: {node: '>=16.17'} + p-filter@4.1.0: resolution: {integrity: sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==} engines: {node: '>=18'} @@ -4282,18 +4052,18 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} - - p-map@7.0.3: - resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==} + p-map@7.0.4: + resolution: {integrity: sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==} engines: {node: '>=18'} p-reduce@3.0.0: resolution: {integrity: sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==} engines: {node: '>=12'} + p-timeout@6.1.4: + resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} + engines: {node: '>=14.16'} + p-try@1.0.0: resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} engines: {node: '>=4'} @@ -4370,8 +4140,8 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} - path-scurry@2.0.0: - resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} + path-scurry@2.0.1: + resolution: {integrity: sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==} engines: {node: 20 || >=22} path-type@4.0.0: @@ -4452,17 +4222,9 @@ packages: resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==} engines: {node: '>=18'} - proc-log@4.2.0: - resolution: {integrity: sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - promise-retry@2.0.1: - resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} - engines: {node: '>=10'} - prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} @@ -4503,9 +4265,6 @@ packages: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true - re2@1.20.9: - resolution: {integrity: sha512-ZYcPTFr5ha2xq3WQjBDTF9CWPSDK1z28MLh5UFRxc//7X8BNQ3A7yR7ITnP0jO346661ertdKVFqw1qoL3FMEQ==} - react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} @@ -4513,6 +4272,14 @@ packages: resolution: {integrity: sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==} engines: {node: '>=18'} + read-package-up@12.0.0: + resolution: {integrity: sha512-Q5hMVBYur/eQNWDdbF4/Wqqr9Bjvtrw2kjGxxBbKLbx8bVCL8gcArjTy8zDUuLGQicftpMuU0riQNcAsbtOVsw==} + engines: {node: '>=20'} + + read-pkg@10.0.0: + resolution: {integrity: sha512-A70UlgfNdKI5NSvTTfHzLQj7NJRpJ4mT5tGafkllJ4wh71oYuGm/pzphHcmW4s35iox56KSK721AihodoXSc/A==} + engines: {node: '>=20'} + read-pkg@9.0.1: resolution: {integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==} engines: {node: '>=18'} @@ -4610,8 +4377,8 @@ packages: resolution: {integrity: sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg==} engines: {node: '>=0.10.5'} - reserved-identifiers@1.0.0: - resolution: {integrity: sha512-h0bP2Katmvf3hv4Z3WtDl4+6xt/OglQ2Xa6TnhZ/Rm9/7IH1crXQqMwD4J2ngKBonVv+fB55zfGgNDAmsevLVQ==} + reserved-identifiers@1.2.0: + resolution: {integrity: sha512-yE7KUfFvaBFzGPs5H3Ops1RevfUEsDc5Iz65rOwWg4lE8HJSYtle77uul3+573457oHvBKuHYDl/xqUkKpEEdw==} engines: {node: '>=18'} resolve-from@4.0.0: @@ -4625,8 +4392,8 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve@1.22.10: - resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + resolve@1.22.11: + resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} engines: {node: '>= 0.4'} hasBin: true @@ -4638,10 +4405,6 @@ packages: resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} engines: {node: '>=18'} - retry@0.12.0: - resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} - engines: {node: '>= 4'} - reusify@1.1.0: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -4654,12 +4417,12 @@ packages: engines: {node: 20 || >=22} hasBin: true - roarr@7.21.1: - resolution: {integrity: sha512-3niqt5bXFY1InKU8HKWqqYTYjtrBaxBMnXELXCXUYgtNYGUtZM5rB46HIC430AyacL95iEniGf7RgqsesykLmQ==} + roarr@7.21.2: + resolution: {integrity: sha512-RyXI+aNxwVyfF71a9cqz/jhXWbycnVh7GXnnJUniIBXKTOJQF3rmpNexStXt8TUcKyiXCwyfYzboZLMYUllPDA==} engines: {node: '>=18.0'} - rollup@4.52.5: - resolution: {integrity: sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==} + rollup@4.53.2: + resolution: {integrity: sha512-MHngMYwGJVi6Fmnk6ISmnk7JAHRNF0UkuucA0CUW3N3a4KnONPEZz+vUanQP/ZC/iY1Qkf3bwPWzyY84wEks1g==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -4699,8 +4462,8 @@ packages: resolution: {integrity: sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==} engines: {node: ^14.0.0 || >=16.0.0} - semantic-release@25.0.1: - resolution: {integrity: sha512-0OCYLm0AfVilNGukM+w0C4aptITfuW1Mhvmz8LQliLeYbPOTFRCIJzoltWWx/F5zVFe6np9eNatBUHdAvMFeZg==} + semantic-release@25.0.2: + resolution: {integrity: sha512-6qGjWccl5yoyugHt3jTgztJ9Y0JVzyH8/Voc/D8PlLat9pwxQYXz7W1Dpnq5h0/G5GCYGUaDSlYcyk3AMh5A6g==} engines: {node: ^22.14.0 || >= 24.10.0} hasBin: true @@ -4805,18 +4568,6 @@ packages: resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} engines: {node: '>=18'} - smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - - socks-proxy-agent@8.0.5: - resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} - engines: {node: '>= 14'} - - socks@2.8.7: - resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} - engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} @@ -4854,10 +4605,6 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - ssri@10.0.6: - resolution: {integrity: sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - stable-hash-x@0.2.0: resolution: {integrity: sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==} engines: {node: '>=12.0.0'} @@ -4947,8 +4694,8 @@ packages: resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} engines: {node: '>=18'} - strip-indent@4.1.0: - resolution: {integrity: sha512-OA95x+JPmL7kc7zCu+e+TeYxEiaIyndRx0OrBcK2QPPH09oAndr2ALvymxWA+Lx1PYYvFUm4O63pRkdJAaW96w==} + strip-indent@4.1.1: + resolution: {integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==} engines: {node: '>=12'} strip-json-comments@2.0.1: @@ -4963,8 +4710,8 @@ packages: resolution: {integrity: sha512-WZzIx3rC1CvbMDloLsVw0lkZVKJWbrkJ0k1ghKFmcnPrW1+jWbgTkTEWVtD9lMdmI4jZEz40+naBxl1dCUhXXw==} engines: {node: '>=14.16'} - super-regex@1.0.0: - resolution: {integrity: sha512-CY8u7DtbvucKuquCmOFEKhr9Besln7n9uN8eFbwcoGYWXOMW07u2o8njWaiXt11ylS3qoGF55pILjRmPlbodyg==} + super-regex@1.1.0: + resolution: {integrity: sha512-WHkws2ZflZe41zj6AolvvmaTrWds/VuyeYr9iPVv/oQeaIoVxMKaushfFWpOGDT+GuBrM/sVqF8KUCYQlSSTdQ==} engines: {node: '>=18'} supports-color@5.5.0: @@ -4998,13 +4745,13 @@ packages: resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} engines: {node: ^14.18.0 || >=16.0.0} - tapable@2.2.3: - resolution: {integrity: sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==} - engines: {node: '>=6'} + tagged-tag@1.0.0: + resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} + engines: {node: '>=20'} - tar@6.2.1: - resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} - engines: {node: '>=10'} + tapable@2.3.0: + resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} + engines: {node: '>=6'} temp-dir@3.0.0: resolution: {integrity: sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==} @@ -5047,8 +4794,8 @@ packages: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} - tlds@1.260.0: - resolution: {integrity: sha512-78+28EWBhCEE7qlyaHA9OR3IPvbCLiDh3Ckla593TksfFc9vfTsgvH7eS+dr3o9qr31gwGbogcI16yN91PoRjQ==} + tlds@1.261.0: + resolution: {integrity: sha512-QXqwfEl9ddlGBaRFXIvNKK6OhipSiLXuRuLJX5DErz0o0Q0rYxulWLdFryTkV5PkdZct5iMInwYEGe/eR++1AA==} hasBin: true to-regex-range@5.0.1: @@ -5130,6 +4877,10 @@ packages: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} + type-fest@5.2.0: + resolution: {integrity: sha512-xxCJm+Bckc6kQBknN7i9fnP/xobQRsRQxR01CztFkp/h++yfVxUUcmMgfR2HttJx/dpWjS9ubVuyspJv24Q9DA==} + engines: {node: '>=20'} + typed-array-buffer@1.0.3: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} @@ -5146,8 +4897,8 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} - typescript-eslint@8.46.2: - resolution: {integrity: sha512-vbw8bOmiuYNdzzV3lsiWv6sRwjyuKJMQqWulBOU7M0RrxedXledX8G8kBbQeiOYDnTfiXz0Y4081E1QMNB6iQg==} + typescript-eslint@8.46.4: + resolution: {integrity: sha512-KALyxkpYV5Ix7UhvjTwJXZv76VWsHG+NjNlt/z+a17SOQSiOcBdUXdbJdyXi7RPxrBFECtFOiPwUJQusJuCqrg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -5179,6 +4930,10 @@ packages: resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} engines: {node: '>=14.0'} + undici@7.16.0: + resolution: {integrity: sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==} + engines: {node: '>=20.18.1'} + unicode-canonical-property-names-ecmascript@2.0.1: resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} engines: {node: '>=4'} @@ -5207,14 +4962,6 @@ packages: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} - unique-filename@3.0.0: - resolution: {integrity: sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - unique-slug@4.0.0: - resolution: {integrity: sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - unique-string@3.0.0: resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} engines: {node: '>=12'} @@ -5233,8 +4980,8 @@ packages: unrs-resolver@1.11.1: resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} - update-browserslist-db@1.1.3: - resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + update-browserslist-db@1.1.4: + resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -5291,6 +5038,9 @@ packages: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} + web-worker@1.2.0: + resolution: {integrity: sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==} + whatwg-mimetype@4.0.0: resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} engines: {node: '>=18'} @@ -5322,11 +5072,6 @@ packages: engines: {node: '>= 8'} hasBin: true - which@4.0.0: - resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==} - engines: {node: ^16.13.0 || >=18.0.0} - hasBin: true - word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} @@ -5393,9 +5138,6 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yaml-eslint-parser@1.3.0: resolution: {integrity: sha512-E/+VitOorXSLiAqtTd7Yqax0/pAS3xaYMP+AUUJGOK1OZG3rhcj9fcJOM5HJ2VrP1FrStVCWr1muTfQCdj4tAA==} engines: {node: ^14.17.0 || >=16.0.0} @@ -5449,14 +5191,14 @@ packages: resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} engines: {node: '>=18'} - zod-validation-error@3.5.3: - resolution: {integrity: sha512-OT5Y8lbUadqVZCsnyFaTQ4/O2mys4tj7PqhdbBCp7McPwvIEKfPtdA6QfPeFQK2/Rz5LgwmAXRJTugBNBi0btw==} + zod-validation-error@4.0.2: + resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==} engines: {node: '>=18.0.0'} peerDependencies: zod: ^3.25.0 || ^4.0.0 - zod@3.25.76: - resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + zod@4.1.12: + resolution: {integrity: sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==} snapshots: @@ -5482,7 +5224,7 @@ snapshots: dependencies: '@jsdevtools/ono': 7.1.3 '@types/json-schema': 7.0.15 - js-yaml: 4.1.0 + js-yaml: 4.1.1 '@arethetypeswrong/cli@0.18.2': dependencies: @@ -5521,12 +5263,10 @@ snapshots: '@babel/code-frame@7.27.1': dependencies: - '@babel/helper-validator-identifier': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.28.4': {} - '@babel/compat-data@7.28.5': {} '@babel/core@7.28.5': @@ -5557,14 +5297,6 @@ snapshots: eslint-visitor-keys: 2.1.0 semver: 6.3.1 - '@babel/generator@7.28.3': - dependencies: - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - jsesc: 3.1.0 - '@babel/generator@7.28.5': dependencies: '@babel/parser': 7.28.5 @@ -5575,30 +5307,30 @@ snapshots: '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 '@babel/helper-compilation-targets@7.27.2': dependencies: - '@babel/compat-data': 7.28.4 + '@babel/compat-data': 7.28.5 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.26.2 + browserslist: 4.28.0 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.28.5)': + '@babel/helper-create-class-features-plugin@7.28.5(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-member-expression-to-functions': 7.28.5 '@babel/helper-optimise-call-expression': 7.27.1 '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.28.5 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.28.5)': + '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 '@babel/helper-annotate-as-pure': 7.27.3 @@ -5612,16 +5344,16 @@ snapshots: '@babel/helper-plugin-utils': 7.27.1 debug: 4.4.3(supports-color@8.1.1) lodash.debounce: 4.0.8 - resolve: 1.22.10 + resolve: 1.22.11 transitivePeerDependencies: - supports-color '@babel/helper-globals@7.28.0': {} - '@babel/helper-member-expression-to-functions@7.27.1': + '@babel/helper-member-expression-to-functions@7.28.5': dependencies: - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 transitivePeerDependencies: - supports-color @@ -5636,14 +5368,14 @@ snapshots: dependencies: '@babel/core': 7.28.5 '@babel/helper-module-imports': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color '@babel/helper-optimise-call-expression@7.27.1': dependencies: - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 '@babel/helper-plugin-utils@7.27.1': {} @@ -5652,30 +5384,28 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-wrap-function': 7.28.3 - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 - '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-member-expression-to-functions': 7.28.5 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 transitivePeerDependencies: - supports-color '@babel/helper-string-parser@7.27.1': {} - '@babel/helper-validator-identifier@7.27.1': {} - '@babel/helper-validator-identifier@7.28.5': {} '@babel/helper-validator-option@7.27.1': {} @@ -5683,8 +5413,8 @@ snapshots: '@babel/helper-wrap-function@7.28.3': dependencies: '@babel/template': 7.27.2 - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 transitivePeerDependencies: - supports-color @@ -5693,10 +5423,6 @@ snapshots: '@babel/template': 7.27.2 '@babel/types': 7.28.5 - '@babel/parser@7.28.4': - dependencies: - '@babel/types': 7.28.4 - '@babel/parser@7.28.5': dependencies: '@babel/types': 7.28.5 @@ -5732,15 +5458,7 @@ snapshots: dependencies: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.4 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.5) - '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color @@ -5771,7 +5489,7 @@ snapshots: '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.5) + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.5)': @@ -5784,7 +5502,7 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.5) - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color @@ -5810,7 +5528,7 @@ snapshots: '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.5) + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color @@ -5818,7 +5536,7 @@ snapshots: '@babel/plugin-transform-class-static-block@7.28.3(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.5) + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color @@ -5831,7 +5549,7 @@ snapshots: '@babel/helper-globals': 7.28.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5) - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color @@ -5852,7 +5570,7 @@ snapshots: '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.5) + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.28.5)': @@ -5863,7 +5581,7 @@ snapshots: '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.5) + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.28.5)': @@ -5908,7 +5626,7 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color @@ -5969,7 +5687,7 @@ snapshots: '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.5) + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.28.5)': @@ -5994,7 +5712,7 @@ snapshots: '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.5) '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.5) - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color @@ -6027,7 +5745,7 @@ snapshots: '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.5) + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color @@ -6036,7 +5754,7 @@ snapshots: dependencies: '@babel/core': 7.28.5 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.5) + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color @@ -6054,7 +5772,7 @@ snapshots: '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.5) + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.28.5)': @@ -6098,19 +5816,19 @@ snapshots: '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.5) + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.5) + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.5) + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 '@babel/preset-env@7.28.5(@babel/core@7.28.5)': @@ -6184,7 +5902,7 @@ snapshots: babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.5) babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.5) babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.5) - core-js-compat: 3.45.1 + core-js-compat: 3.46.0 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -6193,26 +5911,14 @@ snapshots: dependencies: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 esutils: 2.0.3 '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 - - '@babel/traverse@7.28.4': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.3 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.4 - '@babel/template': 7.27.2 - '@babel/types': 7.28.4 - debug: 4.4.3(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 '@babel/traverse@7.28.5': dependencies: @@ -6226,11 +5932,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/types@7.28.4': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - '@babel/types@7.28.5': dependencies: '@babel/helper-string-parser': 7.27.1 @@ -6243,13 +5944,13 @@ snapshots: '@colors/colors@1.5.0': optional: true - '@emnapi/core@1.5.0': + '@emnapi/core@1.7.0': dependencies: '@emnapi/wasi-threads': 1.1.0 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.5.0': + '@emnapi/runtime@1.7.0': dependencies: tslib: 2.8.1 optional: true @@ -6259,7 +5960,7 @@ snapshots: tslib: 2.8.1 optional: true - '@envelop/core@5.3.2': + '@envelop/core@5.4.0': dependencies: '@envelop/instrumentation': 1.0.0 '@envelop/types': 5.2.1 @@ -6293,7 +5994,7 @@ snapshots: '@babel/core': 7.28.5 '@babel/eslint-parser': 7.28.5(@babel/core@7.28.5)(eslint@9.39.0(jiti@2.6.1)) '@es-joy/jsdoccomment': 0.76.0 - '@typescript-eslint/parser': 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.0(jiti@2.6.1) esquery: 1.6.0 typescript: 5.9.3 @@ -6304,7 +6005,7 @@ snapshots: '@es-joy/jsdoccomment@0.50.2': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/types': 8.46.4 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 4.1.0 @@ -6312,7 +6013,7 @@ snapshots: '@es-joy/jsdoccomment@0.62.0': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/types': 8.46.4 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 5.9.2 @@ -6320,7 +6021,7 @@ snapshots: '@es-joy/jsdoccomment@0.76.0': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/types': 8.46.4 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 6.10.0 @@ -6332,7 +6033,7 @@ snapshots: eslint: 9.39.0(jiti@2.6.1) eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.12.1': {} + '@eslint-community/regexpp@4.12.2': {} '@eslint/config-array@0.21.1': dependencies: @@ -6362,7 +6063,7 @@ snapshots: globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.1 - js-yaml: 4.1.0 + js-yaml: 4.1.1 minimatch: 3.1.2 strip-json-comments: 3.1.1 transitivePeerDependencies: @@ -6386,17 +6087,17 @@ snapshots: '@fastify/busboy@3.2.0': {} - '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.10.0)(eslint@9.39.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3)': + '@graphql-eslint/eslint-plugin@4.4.0(@types/node@24.10.1)(eslint@9.39.0(jiti@2.6.1))(graphql@16.12.0)(typescript@5.9.3)': dependencies: - '@graphql-tools/code-file-loader': 8.1.22(graphql@16.11.0) - '@graphql-tools/graphql-tag-pluck': 8.3.21(graphql@16.11.0) - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + '@graphql-tools/code-file-loader': 8.1.26(graphql@16.12.0) + '@graphql-tools/graphql-tag-pluck': 8.3.25(graphql@16.12.0) + '@graphql-tools/utils': 10.10.3(graphql@16.12.0) debug: 4.4.3(supports-color@8.1.1) eslint: 9.39.0(jiti@2.6.1) fast-glob: 3.3.3 - graphql: 16.11.0 - graphql-config: 5.1.5(@types/node@24.10.0)(graphql@16.11.0)(typescript@5.9.3) - graphql-depth-limit: 1.1.0(graphql@16.11.0) + graphql: 16.12.0 + graphql-config: 5.1.5(@types/node@24.10.1)(graphql@16.12.0)(typescript@5.9.3) + graphql-depth-limit: 1.1.0(graphql@16.12.0) lodash.lowercase: 4.3.0 transitivePeerDependencies: - '@fastify/websocket' @@ -6411,57 +6112,57 @@ snapshots: '@graphql-hive/signal@1.0.0': {} - '@graphql-tools/batch-execute@9.0.19(graphql@16.11.0)': + '@graphql-tools/batch-execute@9.0.19(graphql@16.12.0)': dependencies: - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + '@graphql-tools/utils': 10.10.3(graphql@16.12.0) '@whatwg-node/promise-helpers': 1.3.2 dataloader: 2.2.3 - graphql: 16.11.0 + graphql: 16.12.0 tslib: 2.8.1 - '@graphql-tools/code-file-loader@8.1.22(graphql@16.11.0)': + '@graphql-tools/code-file-loader@8.1.26(graphql@16.12.0)': dependencies: - '@graphql-tools/graphql-tag-pluck': 8.3.21(graphql@16.11.0) - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + '@graphql-tools/graphql-tag-pluck': 8.3.25(graphql@16.12.0) + '@graphql-tools/utils': 10.10.3(graphql@16.12.0) globby: 11.1.0 - graphql: 16.11.0 + graphql: 16.12.0 tslib: 2.8.1 unixify: 1.0.0 transitivePeerDependencies: - supports-color - '@graphql-tools/delegate@10.2.23(graphql@16.11.0)': + '@graphql-tools/delegate@10.2.23(graphql@16.12.0)': dependencies: - '@graphql-tools/batch-execute': 9.0.19(graphql@16.11.0) - '@graphql-tools/executor': 1.4.9(graphql@16.11.0) - '@graphql-tools/schema': 10.0.25(graphql@16.11.0) - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + '@graphql-tools/batch-execute': 9.0.19(graphql@16.12.0) + '@graphql-tools/executor': 1.4.13(graphql@16.12.0) + '@graphql-tools/schema': 10.0.29(graphql@16.12.0) + '@graphql-tools/utils': 10.10.3(graphql@16.12.0) '@repeaterjs/repeater': 3.0.6 '@whatwg-node/promise-helpers': 1.3.2 dataloader: 2.2.3 dset: 3.1.4 - graphql: 16.11.0 + graphql: 16.12.0 tslib: 2.8.1 - '@graphql-tools/executor-common@0.0.4(graphql@16.11.0)': + '@graphql-tools/executor-common@0.0.4(graphql@16.12.0)': dependencies: - '@envelop/core': 5.3.2 - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) - graphql: 16.11.0 + '@envelop/core': 5.4.0 + '@graphql-tools/utils': 10.10.3(graphql@16.12.0) + graphql: 16.12.0 - '@graphql-tools/executor-common@0.0.6(graphql@16.11.0)': + '@graphql-tools/executor-common@0.0.6(graphql@16.12.0)': dependencies: - '@envelop/core': 5.3.2 - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) - graphql: 16.11.0 + '@envelop/core': 5.4.0 + '@graphql-tools/utils': 10.10.3(graphql@16.12.0) + graphql: 16.12.0 - '@graphql-tools/executor-graphql-ws@2.0.7(graphql@16.11.0)': + '@graphql-tools/executor-graphql-ws@2.0.7(graphql@16.12.0)': dependencies: - '@graphql-tools/executor-common': 0.0.6(graphql@16.11.0) - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + '@graphql-tools/executor-common': 0.0.6(graphql@16.12.0) + '@graphql-tools/utils': 10.10.3(graphql@16.12.0) '@whatwg-node/disposablestack': 0.0.6 - graphql: 16.11.0 - graphql-ws: 6.0.6(graphql@16.11.0)(ws@8.18.3) + graphql: 16.12.0 + graphql-ws: 6.0.6(graphql@16.12.0)(ws@8.18.3) isomorphic-ws: 5.0.0(ws@8.18.3) tslib: 2.8.1 ws: 8.18.3 @@ -6472,26 +6173,26 @@ snapshots: - uWebSockets.js - utf-8-validate - '@graphql-tools/executor-http@1.3.3(@types/node@24.10.0)(graphql@16.11.0)': + '@graphql-tools/executor-http@1.3.3(@types/node@24.10.1)(graphql@16.12.0)': dependencies: '@graphql-hive/signal': 1.0.0 - '@graphql-tools/executor-common': 0.0.4(graphql@16.11.0) - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + '@graphql-tools/executor-common': 0.0.4(graphql@16.12.0) + '@graphql-tools/utils': 10.10.3(graphql@16.12.0) '@repeaterjs/repeater': 3.0.6 '@whatwg-node/disposablestack': 0.0.6 - '@whatwg-node/fetch': 0.10.11 + '@whatwg-node/fetch': 0.10.13 '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.11.0 - meros: 1.3.2(@types/node@24.10.0) + graphql: 16.12.0 + meros: 1.3.2(@types/node@24.10.1) tslib: 2.8.1 transitivePeerDependencies: - '@types/node' - '@graphql-tools/executor-legacy-ws@1.1.19(graphql@16.11.0)': + '@graphql-tools/executor-legacy-ws@1.1.23(graphql@16.12.0)': dependencies: - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + '@graphql-tools/utils': 10.10.3(graphql@16.12.0) '@types/ws': 8.18.1 - graphql: 16.11.0 + graphql: 16.12.0 isomorphic-ws: 5.0.0(ws@8.18.3) tslib: 2.8.1 ws: 8.18.3 @@ -6499,90 +6200,90 @@ snapshots: - bufferutil - utf-8-validate - '@graphql-tools/executor@1.4.9(graphql@16.11.0)': + '@graphql-tools/executor@1.4.13(graphql@16.12.0)': dependencies: - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) - '@graphql-typed-document-node/core': 3.2.0(graphql@16.11.0) + '@graphql-tools/utils': 10.10.3(graphql@16.12.0) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) '@repeaterjs/repeater': 3.0.6 '@whatwg-node/disposablestack': 0.0.6 '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.11.0 + graphql: 16.12.0 tslib: 2.8.1 - '@graphql-tools/graphql-file-loader@8.1.2(graphql@16.11.0)': + '@graphql-tools/graphql-file-loader@8.1.6(graphql@16.12.0)': dependencies: - '@graphql-tools/import': 7.1.2(graphql@16.11.0) - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + '@graphql-tools/import': 7.1.6(graphql@16.12.0) + '@graphql-tools/utils': 10.10.3(graphql@16.12.0) globby: 11.1.0 - graphql: 16.11.0 + graphql: 16.12.0 tslib: 2.8.1 unixify: 1.0.0 transitivePeerDependencies: - supports-color - '@graphql-tools/graphql-tag-pluck@8.3.21(graphql@16.11.0)': + '@graphql-tools/graphql-tag-pluck@8.3.25(graphql@16.12.0)': dependencies: '@babel/core': 7.28.5 - '@babel/parser': 7.28.4 + '@babel/parser': 7.28.5 '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.5) - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) - graphql: 16.11.0 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + '@graphql-tools/utils': 10.10.3(graphql@16.12.0) + graphql: 16.12.0 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@graphql-tools/import@7.1.2(graphql@16.11.0)': + '@graphql-tools/import@7.1.6(graphql@16.12.0)': dependencies: - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) - '@theguild/federation-composition': 0.20.1(graphql@16.11.0) - graphql: 16.11.0 + '@graphql-tools/utils': 10.10.3(graphql@16.12.0) + '@theguild/federation-composition': 0.20.2(graphql@16.12.0) + graphql: 16.12.0 resolve-from: 5.0.0 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@graphql-tools/json-file-loader@8.0.20(graphql@16.11.0)': + '@graphql-tools/json-file-loader@8.0.24(graphql@16.12.0)': dependencies: - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + '@graphql-tools/utils': 10.10.3(graphql@16.12.0) globby: 11.1.0 - graphql: 16.11.0 + graphql: 16.12.0 tslib: 2.8.1 unixify: 1.0.0 - '@graphql-tools/load@8.1.2(graphql@16.11.0)': + '@graphql-tools/load@8.1.6(graphql@16.12.0)': dependencies: - '@graphql-tools/schema': 10.0.25(graphql@16.11.0) - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) - graphql: 16.11.0 + '@graphql-tools/schema': 10.0.29(graphql@16.12.0) + '@graphql-tools/utils': 10.10.3(graphql@16.12.0) + graphql: 16.12.0 p-limit: 3.1.0 tslib: 2.8.1 - '@graphql-tools/merge@9.1.1(graphql@16.11.0)': + '@graphql-tools/merge@9.1.5(graphql@16.12.0)': dependencies: - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) - graphql: 16.11.0 + '@graphql-tools/utils': 10.10.3(graphql@16.12.0) + graphql: 16.12.0 tslib: 2.8.1 - '@graphql-tools/schema@10.0.25(graphql@16.11.0)': + '@graphql-tools/schema@10.0.29(graphql@16.12.0)': dependencies: - '@graphql-tools/merge': 9.1.1(graphql@16.11.0) - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) - graphql: 16.11.0 + '@graphql-tools/merge': 9.1.5(graphql@16.12.0) + '@graphql-tools/utils': 10.10.3(graphql@16.12.0) + graphql: 16.12.0 tslib: 2.8.1 - '@graphql-tools/url-loader@8.0.33(@types/node@24.10.0)(graphql@16.11.0)': + '@graphql-tools/url-loader@8.0.33(@types/node@24.10.1)(graphql@16.12.0)': dependencies: - '@graphql-tools/executor-graphql-ws': 2.0.7(graphql@16.11.0) - '@graphql-tools/executor-http': 1.3.3(@types/node@24.10.0)(graphql@16.11.0) - '@graphql-tools/executor-legacy-ws': 1.1.19(graphql@16.11.0) - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) - '@graphql-tools/wrap': 10.1.4(graphql@16.11.0) + '@graphql-tools/executor-graphql-ws': 2.0.7(graphql@16.12.0) + '@graphql-tools/executor-http': 1.3.3(@types/node@24.10.1)(graphql@16.12.0) + '@graphql-tools/executor-legacy-ws': 1.1.23(graphql@16.12.0) + '@graphql-tools/utils': 10.10.3(graphql@16.12.0) + '@graphql-tools/wrap': 10.1.4(graphql@16.12.0) '@types/ws': 8.18.1 - '@whatwg-node/fetch': 0.10.11 + '@whatwg-node/fetch': 0.10.13 '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.11.0 + graphql: 16.12.0 isomorphic-ws: 5.0.0(ws@8.18.3) sync-fetch: 0.6.0-2 tslib: 2.8.1 @@ -6595,27 +6296,26 @@ snapshots: - uWebSockets.js - utf-8-validate - '@graphql-tools/utils@10.9.1(graphql@16.11.0)': + '@graphql-tools/utils@10.10.3(graphql@16.12.0)': dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.11.0) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) '@whatwg-node/promise-helpers': 1.3.2 cross-inspect: 1.0.1 - dset: 3.1.4 - graphql: 16.11.0 + graphql: 16.12.0 tslib: 2.8.1 - '@graphql-tools/wrap@10.1.4(graphql@16.11.0)': + '@graphql-tools/wrap@10.1.4(graphql@16.12.0)': dependencies: - '@graphql-tools/delegate': 10.2.23(graphql@16.11.0) - '@graphql-tools/schema': 10.0.25(graphql@16.11.0) - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + '@graphql-tools/delegate': 10.2.23(graphql@16.12.0) + '@graphql-tools/schema': 10.0.29(graphql@16.12.0) + '@graphql-tools/utils': 10.10.3(graphql@16.12.0) '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.11.0 + graphql: 16.12.0 tslib: 2.8.1 - '@graphql-typed-document-node/core@3.2.0(graphql@16.11.0)': + '@graphql-typed-document-node/core@3.2.0(graphql@16.12.0)': dependencies: - graphql: 16.11.0 + graphql: 16.12.0 '@hkdobrev/run-if-changed@0.6.3(typescript@5.9.3)': dependencies: @@ -6690,12 +6390,12 @@ snapshots: '@napi-rs/wasm-runtime@0.2.12': dependencies: - '@emnapi/core': 1.5.0 - '@emnapi/runtime': 1.5.0 + '@emnapi/core': 1.7.0 + '@emnapi/runtime': 1.7.0 '@tybys/wasm-util': 0.10.1 optional: true - '@next/eslint-plugin-next@15.5.4': + '@next/eslint-plugin-next@15.5.6': dependencies: fast-glob: 3.3.1 @@ -6720,83 +6420,61 @@ snapshots: '@nolyfill/is-core-module@1.0.39': {} - '@npmcli/agent@2.2.2': - dependencies: - agent-base: 7.1.4 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - lru-cache: 10.4.3 - socks-proxy-agent: 8.0.5 - transitivePeerDependencies: - - supports-color - optional: true - - '@npmcli/fs@3.1.1': - dependencies: - semver: 7.7.3 - optional: true - '@octokit/auth-token@6.0.0': {} - '@octokit/core@7.0.5': + '@octokit/core@7.0.6': dependencies: '@octokit/auth-token': 6.0.0 - '@octokit/graphql': 9.0.2 - '@octokit/request': 10.0.5 - '@octokit/request-error': 7.0.1 - '@octokit/types': 15.0.0 + '@octokit/graphql': 9.0.3 + '@octokit/request': 10.0.6 + '@octokit/request-error': 7.0.2 + '@octokit/types': 16.0.0 before-after-hook: 4.0.0 universal-user-agent: 7.0.3 - '@octokit/endpoint@11.0.1': + '@octokit/endpoint@11.0.2': dependencies: - '@octokit/types': 15.0.0 + '@octokit/types': 16.0.0 universal-user-agent: 7.0.3 - '@octokit/graphql@9.0.2': + '@octokit/graphql@9.0.3': dependencies: - '@octokit/request': 10.0.5 - '@octokit/types': 15.0.0 + '@octokit/request': 10.0.6 + '@octokit/types': 16.0.0 universal-user-agent: 7.0.3 - '@octokit/openapi-types@26.0.0': {} - '@octokit/openapi-types@27.0.0': {} - '@octokit/plugin-paginate-rest@14.0.0(@octokit/core@7.0.5)': + '@octokit/plugin-paginate-rest@14.0.0(@octokit/core@7.0.6)': dependencies: - '@octokit/core': 7.0.5 + '@octokit/core': 7.0.6 '@octokit/types': 16.0.0 - '@octokit/plugin-retry@8.0.2(@octokit/core@7.0.5)': + '@octokit/plugin-retry@8.0.3(@octokit/core@7.0.6)': dependencies: - '@octokit/core': 7.0.5 - '@octokit/request-error': 7.0.1 - '@octokit/types': 15.0.0 + '@octokit/core': 7.0.6 + '@octokit/request-error': 7.0.2 + '@octokit/types': 16.0.0 bottleneck: 2.19.5 - '@octokit/plugin-throttling@11.0.2(@octokit/core@7.0.5)': + '@octokit/plugin-throttling@11.0.3(@octokit/core@7.0.6)': dependencies: - '@octokit/core': 7.0.5 - '@octokit/types': 15.0.0 + '@octokit/core': 7.0.6 + '@octokit/types': 16.0.0 bottleneck: 2.19.5 - '@octokit/request-error@7.0.1': + '@octokit/request-error@7.0.2': dependencies: - '@octokit/types': 15.0.0 + '@octokit/types': 16.0.0 - '@octokit/request@10.0.5': + '@octokit/request@10.0.6': dependencies: - '@octokit/endpoint': 11.0.1 - '@octokit/request-error': 7.0.1 - '@octokit/types': 15.0.0 + '@octokit/endpoint': 11.0.2 + '@octokit/request-error': 7.0.2 + '@octokit/types': 16.0.0 fast-content-type-parse: 3.0.0 universal-user-agent: 7.0.3 - '@octokit/types@15.0.0': - dependencies: - '@octokit/openapi-types': 26.0.0 - '@octokit/types@16.0.0': dependencies: '@octokit/openapi-types': 27.0.0 @@ -6820,114 +6498,114 @@ snapshots: '@repeaterjs/repeater@3.0.6': {} - '@rollup/plugin-node-resolve@16.0.3(rollup@4.52.5)': + '@rollup/plugin-node-resolve@16.0.3(rollup@4.53.2)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.52.5) + '@rollup/pluginutils': 5.3.0(rollup@4.53.2) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 - resolve: 1.22.10 + resolve: 1.22.11 optionalDependencies: - rollup: 4.52.5 + rollup: 4.53.2 - '@rollup/pluginutils@5.3.0(rollup@4.52.5)': + '@rollup/pluginutils@5.3.0(rollup@4.53.2)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.3 optionalDependencies: - rollup: 4.52.5 + rollup: 4.53.2 - '@rollup/rollup-android-arm-eabi@4.52.5': + '@rollup/rollup-android-arm-eabi@4.53.2': optional: true - '@rollup/rollup-android-arm64@4.52.5': + '@rollup/rollup-android-arm64@4.53.2': optional: true - '@rollup/rollup-darwin-arm64@4.52.5': + '@rollup/rollup-darwin-arm64@4.53.2': optional: true - '@rollup/rollup-darwin-x64@4.52.5': + '@rollup/rollup-darwin-x64@4.53.2': optional: true - '@rollup/rollup-freebsd-arm64@4.52.5': + '@rollup/rollup-freebsd-arm64@4.53.2': optional: true - '@rollup/rollup-freebsd-x64@4.52.5': + '@rollup/rollup-freebsd-x64@4.53.2': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.52.5': + '@rollup/rollup-linux-arm-gnueabihf@4.53.2': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.52.5': + '@rollup/rollup-linux-arm-musleabihf@4.53.2': optional: true - '@rollup/rollup-linux-arm64-gnu@4.52.5': + '@rollup/rollup-linux-arm64-gnu@4.53.2': optional: true - '@rollup/rollup-linux-arm64-musl@4.52.5': + '@rollup/rollup-linux-arm64-musl@4.53.2': optional: true - '@rollup/rollup-linux-loong64-gnu@4.52.5': + '@rollup/rollup-linux-loong64-gnu@4.53.2': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.52.5': + '@rollup/rollup-linux-ppc64-gnu@4.53.2': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.52.5': + '@rollup/rollup-linux-riscv64-gnu@4.53.2': optional: true - '@rollup/rollup-linux-riscv64-musl@4.52.5': + '@rollup/rollup-linux-riscv64-musl@4.53.2': optional: true - '@rollup/rollup-linux-s390x-gnu@4.52.5': + '@rollup/rollup-linux-s390x-gnu@4.53.2': optional: true - '@rollup/rollup-linux-x64-gnu@4.52.5': + '@rollup/rollup-linux-x64-gnu@4.53.2': optional: true - '@rollup/rollup-linux-x64-musl@4.52.5': + '@rollup/rollup-linux-x64-musl@4.53.2': optional: true - '@rollup/rollup-openharmony-arm64@4.52.5': + '@rollup/rollup-openharmony-arm64@4.53.2': optional: true - '@rollup/rollup-win32-arm64-msvc@4.52.5': + '@rollup/rollup-win32-arm64-msvc@4.53.2': optional: true - '@rollup/rollup-win32-ia32-msvc@4.52.5': + '@rollup/rollup-win32-ia32-msvc@4.53.2': optional: true - '@rollup/rollup-win32-x64-gnu@4.52.5': + '@rollup/rollup-win32-x64-gnu@4.53.2': optional: true - '@rollup/rollup-win32-x64-msvc@4.52.5': + '@rollup/rollup-win32-x64-msvc@4.53.2': optional: true '@sec-ant/readable-stream@0.4.1': {} - '@semantic-release/commit-analyzer@13.0.1(semantic-release@25.0.1(typescript@5.9.3))': + '@semantic-release/commit-analyzer@13.0.1(semantic-release@25.0.2(typescript@5.9.3))': dependencies: - conventional-changelog-angular: 8.0.0 + conventional-changelog-angular: 8.1.0 conventional-changelog-writer: 8.2.0 conventional-commits-filter: 5.0.0 - conventional-commits-parser: 6.2.0 + conventional-commits-parser: 6.2.1 debug: 4.4.3(supports-color@8.1.1) import-from-esm: 2.0.0 lodash-es: 4.17.21 micromatch: 4.0.8 - semantic-release: 25.0.1(typescript@5.9.3) + semantic-release: 25.0.2(typescript@5.9.3) transitivePeerDependencies: - supports-color '@semantic-release/error@4.0.0': {} - '@semantic-release/github@12.0.1(semantic-release@25.0.1(typescript@5.9.3))': + '@semantic-release/github@12.0.2(semantic-release@25.0.2(typescript@5.9.3))': dependencies: - '@octokit/core': 7.0.5 - '@octokit/plugin-paginate-rest': 14.0.0(@octokit/core@7.0.5) - '@octokit/plugin-retry': 8.0.2(@octokit/core@7.0.5) - '@octokit/plugin-throttling': 11.0.2(@octokit/core@7.0.5) + '@octokit/core': 7.0.6 + '@octokit/plugin-paginate-rest': 14.0.0(@octokit/core@7.0.6) + '@octokit/plugin-retry': 8.0.3(@octokit/core@7.0.6) + '@octokit/plugin-throttling': 11.0.3(@octokit/core@7.0.6) '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 debug: 4.4.3(supports-color@8.1.1) @@ -6938,13 +6616,14 @@ snapshots: lodash-es: 4.17.21 mime: 4.1.0 p-filter: 4.1.0 - semantic-release: 25.0.1(typescript@5.9.3) + semantic-release: 25.0.2(typescript@5.9.3) tinyglobby: 0.2.15 + undici: 7.16.0 url-join: 5.0.0 transitivePeerDependencies: - supports-color - '@semantic-release/npm@13.1.1(semantic-release@25.0.1(typescript@5.9.3))': + '@semantic-release/npm@13.1.1(semantic-release@25.0.2(typescript@5.9.3))': dependencies: '@actions/core': 1.11.1 '@semantic-release/error': 4.0.0 @@ -6959,23 +6638,23 @@ snapshots: rc: 1.2.8 read-pkg: 9.0.1 registry-auth-token: 5.1.0 - semantic-release: 25.0.1(typescript@5.9.3) + semantic-release: 25.0.2(typescript@5.9.3) semver: 7.7.3 tempy: 3.1.0 - '@semantic-release/release-notes-generator@14.1.0(semantic-release@25.0.1(typescript@5.9.3))': + '@semantic-release/release-notes-generator@14.1.0(semantic-release@25.0.2(typescript@5.9.3))': dependencies: - conventional-changelog-angular: 8.0.0 + conventional-changelog-angular: 8.1.0 conventional-changelog-writer: 8.2.0 conventional-commits-filter: 5.0.0 - conventional-commits-parser: 6.2.0 + conventional-commits-parser: 6.2.1 debug: 4.4.3(supports-color@8.1.1) get-stream: 7.0.1 import-from-esm: 2.0.0 into-stream: 7.0.0 lodash-es: 4.17.21 read-package-up: 11.0.0 - semantic-release: 25.0.1(typescript@5.9.3) + semantic-release: 25.0.2(typescript@5.9.3) transitivePeerDependencies: - supports-color @@ -7000,7 +6679,7 @@ snapshots: '@stylistic/eslint-plugin@4.4.1(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/utils': 8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.0(jiti@2.6.1) eslint-visitor-keys: 4.2.1 espree: 10.4.0 @@ -7010,11 +6689,11 @@ snapshots: - supports-color - typescript - '@theguild/federation-composition@0.20.1(graphql@16.11.0)': + '@theguild/federation-composition@0.20.2(graphql@16.12.0)': dependencies: constant-case: 3.0.4 - debug: 4.4.1 - graphql: 16.11.0 + debug: 4.4.3(supports-color@8.1.1) + graphql: 16.12.0 json5: 2.2.3 lodash.sortby: 4.7.0 transitivePeerDependencies: @@ -7057,7 +6736,7 @@ snapshots: '@types/ms@2.1.0': {} - '@types/node@24.10.0': + '@types/node@24.10.1': dependencies: undici-types: 7.16.0 @@ -7071,16 +6750,16 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 24.10.0 + '@types/node': 24.10.1 - '@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.46.4(@typescript-eslint/parser@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.45.0 - '@typescript-eslint/type-utils': 8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.45.0 + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.46.4 + '@typescript-eslint/type-utils': 8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.46.4 eslint: 9.39.0(jiti@2.6.1) graphemer: 1.4.0 ignore: 7.0.5 @@ -7090,104 +6769,41 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.46.2 - '@typescript-eslint/type-utils': 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.46.2 - eslint: 9.39.0(jiti@2.6.1) - graphemer: 1.4.0 - ignore: 7.0.5 - natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.45.0 - '@typescript-eslint/types': 8.45.0 - '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.45.0 - debug: 4.4.3(supports-color@8.1.1) - eslint: 9.39.0(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.46.2 - '@typescript-eslint/types': 8.46.2 - '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.46.2 + '@typescript-eslint/scope-manager': 8.46.4 + '@typescript-eslint/types': 8.46.4 + '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.46.4 debug: 4.4.3(supports-color@8.1.1) eslint: 9.39.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.45.0(typescript@5.9.3)': + '@typescript-eslint/project-service@8.46.4(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.46.1(typescript@5.9.3) - '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/tsconfig-utils': 8.46.4(typescript@5.9.3) + '@typescript-eslint/types': 8.46.4 debug: 4.4.3(supports-color@8.1.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.46.2(typescript@5.9.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.46.2(typescript@5.9.3) - '@typescript-eslint/types': 8.46.2 - debug: 4.4.3(supports-color@8.1.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@8.45.0': - dependencies: - '@typescript-eslint/types': 8.45.0 - '@typescript-eslint/visitor-keys': 8.45.0 - - '@typescript-eslint/scope-manager@8.46.2': - dependencies: - '@typescript-eslint/types': 8.46.2 - '@typescript-eslint/visitor-keys': 8.46.2 - - '@typescript-eslint/tsconfig-utils@8.45.0(typescript@5.9.3)': - dependencies: - typescript: 5.9.3 - - '@typescript-eslint/tsconfig-utils@8.46.1(typescript@5.9.3)': - dependencies: - typescript: 5.9.3 - - '@typescript-eslint/tsconfig-utils@8.46.2(typescript@5.9.3)': + '@typescript-eslint/scope-manager@8.46.4': dependencies: - typescript: 5.9.3 + '@typescript-eslint/types': 8.46.4 + '@typescript-eslint/visitor-keys': 8.46.4 - '@typescript-eslint/type-utils@8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.46.4(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.45.0 - '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) - debug: 4.4.3(supports-color@8.1.1) - eslint: 9.39.0(jiti@2.6.1) - ts-api-utils: 2.1.0(typescript@5.9.3) typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/type-utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.46.2 - '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.46.4 + '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3(supports-color@8.1.1) eslint: 9.39.0(jiti@2.6.1) ts-api-utils: 2.1.0(typescript@5.9.3) @@ -7195,16 +6811,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.45.0': {} - - '@typescript-eslint/types@8.46.2': {} + '@typescript-eslint/types@8.46.4': {} - '@typescript-eslint/typescript-estree@8.45.0(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.46.4(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.45.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.45.0(typescript@5.9.3) - '@typescript-eslint/types': 8.45.0 - '@typescript-eslint/visitor-keys': 8.45.0 + '@typescript-eslint/project-service': 8.46.4(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.46.4(typescript@5.9.3) + '@typescript-eslint/types': 8.46.4 + '@typescript-eslint/visitor-keys': 8.46.4 debug: 4.4.3(supports-color@8.1.1) fast-glob: 3.3.3 is-glob: 4.0.3 @@ -7215,52 +6829,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.46.2(typescript@5.9.3)': - dependencies: - '@typescript-eslint/project-service': 8.46.2(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.46.2(typescript@5.9.3) - '@typescript-eslint/types': 8.46.2 - '@typescript-eslint/visitor-keys': 8.46.2 - debug: 4.4.3(supports-color@8.1.1) - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.3 - ts-api-utils: 2.1.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.0(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.45.0 - '@typescript-eslint/types': 8.45.0 - '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.46.4 + '@typescript-eslint/types': 8.46.4 + '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.9.3) eslint: 9.39.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/visitor-keys@8.46.4': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.0(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.46.2 - '@typescript-eslint/types': 8.46.2 - '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) - eslint: 9.39.0(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/visitor-keys@8.45.0': - dependencies: - '@typescript-eslint/types': 8.45.0 - eslint-visitor-keys: 4.2.1 - - '@typescript-eslint/visitor-keys@8.46.2': - dependencies: - '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/types': 8.46.4 eslint-visitor-keys: 4.2.1 '@unrs/resolver-binding-android-arm-eabi@1.11.1': @@ -7322,10 +6904,10 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - '@vitest/eslint-plugin@1.3.13(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)': + '@vitest/eslint-plugin@1.4.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.45.0 - '@typescript-eslint/utils': 8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.46.4 + '@typescript-eslint/utils': 8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.0(jiti@2.6.1) optionalDependencies: typescript: 5.9.3 @@ -7337,12 +6919,12 @@ snapshots: '@whatwg-node/promise-helpers': 1.3.2 tslib: 2.8.1 - '@whatwg-node/fetch@0.10.11': + '@whatwg-node/fetch@0.10.13': dependencies: - '@whatwg-node/node-fetch': 0.8.0 + '@whatwg-node/node-fetch': 0.8.4 urlpattern-polyfill: 10.1.0 - '@whatwg-node/node-fetch@0.8.0': + '@whatwg-node/node-fetch@0.8.4': dependencies: '@fastify/busboy': 3.2.0 '@whatwg-node/disposablestack': 0.0.6 @@ -7353,9 +6935,6 @@ snapshots: dependencies: tslib: 2.8.1 - abbrev@2.0.0: - optional: true - acorn-globals@1.0.9: dependencies: acorn: 2.7.0 @@ -7370,12 +6949,6 @@ snapshots: agent-base@7.1.4: {} - aggregate-error@3.1.0: - dependencies: - clean-stack: 2.2.0 - indent-string: 4.0.0 - optional: true - aggregate-error@5.0.0: dependencies: clean-stack: 5.3.0 @@ -7388,7 +6961,7 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ansi-escapes@7.1.1: + ansi-escapes@7.2.0: dependencies: environment: 1.1.0 @@ -7515,7 +7088,7 @@ snapshots: aws4@1.13.2: {} - axe-core@4.10.3: {} + axe-core@4.11.0: {} axobject-query@4.1.0: {} @@ -7544,7 +7117,7 @@ snapshots: dependencies: '@babel/core': 7.28.5 '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.5) - core-js-compat: 3.45.1 + core-js-compat: 3.46.0 transitivePeerDependencies: - supports-color @@ -7563,7 +7136,7 @@ snapshots: balanced-match@1.0.2: {} - baseline-browser-mapping@2.8.9: {} + baseline-browser-mapping@2.8.27: {} bcrypt-pbkdf@1.0.2: dependencies: @@ -7597,13 +7170,13 @@ snapshots: browser-stdout@1.3.1: {} - browserslist@4.26.2: + browserslist@4.28.0: dependencies: - baseline-browser-mapping: 2.8.9 - caniuse-lite: 1.0.30001746 - electron-to-chromium: 1.5.228 - node-releases: 2.0.21 - update-browserslist-db: 1.1.3(browserslist@4.26.2) + baseline-browser-mapping: 2.8.27 + caniuse-lite: 1.0.30001754 + electron-to-chromium: 1.5.250 + node-releases: 2.0.27 + update-browserslist-db: 1.1.4(browserslist@4.28.0) builtin-modules@5.0.0: {} @@ -7625,22 +7198,6 @@ snapshots: yargs: 17.7.2 yargs-parser: 21.1.1 - cacache@18.0.4: - dependencies: - '@npmcli/fs': 3.1.1 - fs-minipass: 3.0.3 - glob: 10.4.5 - lru-cache: 10.4.3 - minipass: 7.1.2 - minipass-collect: 2.0.1 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - p-map: 4.0.0 - ssri: 10.0.6 - tar: 6.2.1 - unique-filename: 3.0.0 - optional: true - call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 @@ -7666,11 +7223,11 @@ snapshots: camelcase@8.0.0: {} - caniuse-lite@1.0.30001746: {} + caniuse-lite@1.0.30001754: {} caseless@0.12.0: {} - chai@6.2.0: {} + chai@6.2.1: {} chalk@2.4.2: dependencies: @@ -7706,10 +7263,7 @@ snapshots: dependencies: readdirp: 4.1.2 - chownr@2.0.0: - optional: true - - ci-info@4.3.0: {} + ci-info@4.3.1: {} cjs-module-lexer@1.4.3: {} @@ -7717,9 +7271,6 @@ snapshots: dependencies: escape-string-regexp: 1.0.5 - clean-stack@2.2.0: - optional: true - clean-stack@5.3.0: dependencies: escape-string-regexp: 5.0.0 @@ -7748,7 +7299,7 @@ snapshots: slice-ansi: 5.0.0 string-width: 7.2.0 - cli-truncate@5.1.0: + cli-truncate@5.1.1: dependencies: slice-ansi: 7.1.2 string-width: 8.1.0 @@ -7801,7 +7352,7 @@ snapshots: commander@10.0.1: {} - commander@14.0.1: {} + commander@14.0.2: {} commander@6.2.1: {} @@ -7830,7 +7381,7 @@ snapshots: lodash: 4.17.21 sister: 3.0.2 - conventional-changelog-angular@8.0.0: + conventional-changelog-angular@8.1.0: dependencies: compare-func: 2.0.0 @@ -7843,7 +7394,7 @@ snapshots: conventional-commits-filter@5.0.0: {} - conventional-commits-parser@6.2.0: + conventional-commits-parser@6.2.1: dependencies: meow: 13.2.0 @@ -7851,9 +7402,9 @@ snapshots: convert-source-map@2.0.0: {} - core-js-compat@3.45.1: + core-js-compat@3.46.0: dependencies: - browserslist: 4.26.2 + browserslist: 4.28.0 core-util-is@1.0.2: {} @@ -7862,7 +7413,7 @@ snapshots: cosmiconfig@8.3.6(typescript@5.9.3): dependencies: import-fresh: 3.3.1 - js-yaml: 4.1.0 + js-yaml: 4.1.1 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: @@ -7872,7 +7423,7 @@ snapshots: dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 - js-yaml: 4.1.0 + js-yaml: 4.1.1 parse-json: 5.2.0 optionalDependencies: typescript: 5.9.3 @@ -7939,10 +7490,6 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.4.1: - dependencies: - ms: 2.1.3 - debug@4.4.3(supports-color@8.1.1): dependencies: ms: 2.1.3 @@ -7965,7 +7512,7 @@ snapshots: default-browser-id@5.0.0: {} - default-browser@5.2.1: + default-browser@5.3.0: dependencies: bundle-name: 4.1.0 default-browser-id: 5.0.0 @@ -7986,6 +7533,8 @@ snapshots: delayed-stream@1.0.0: {} + diff-sequences@27.5.1: {} + diff@7.0.0: {} dir-glob@3.0.1: @@ -8041,9 +7590,9 @@ snapshots: jsbn: 0.1.1 safer-buffer: 2.1.2 - electron-to-chromium@1.5.228: {} + electron-to-chromium@1.5.250: {} - emoji-regex@10.5.0: {} + emoji-regex@10.6.0: {} emoji-regex@8.0.0: {} @@ -8051,11 +7600,6 @@ snapshots: emojilib@2.4.0: {} - encoding@0.1.13: - dependencies: - iconv-lite: 0.6.3 - optional: true - enhance-visitors@1.0.0: dependencies: lodash: 4.17.21 @@ -8063,7 +7607,7 @@ snapshots: enhanced-resolve@5.18.3: dependencies: graceful-fs: 4.2.11 - tapable: 2.2.3 + tapable: 2.3.0 entities@1.1.2: {} @@ -8080,9 +7624,6 @@ snapshots: environment@1.1.0: {} - err-code@2.0.3: - optional: true - error-ex@1.3.4: dependencies: is-arrayish: 0.2.1 @@ -8220,45 +7761,45 @@ snapshots: eslint: 9.39.0(jiti@2.6.1) semver: 7.7.3 - eslint-config-canonical@45.0.1(@types/node@24.10.0)(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3): + eslint-config-canonical@45.0.1(@types/node@24.10.1)(@typescript-eslint/utils@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.10.0)(eslint@9.39.0(jiti@2.6.1))(graphql@16.11.0)(typescript@5.9.3) - '@next/eslint-plugin-next': 15.5.4 + '@graphql-eslint/eslint-plugin': 4.4.0(@types/node@24.10.1)(eslint@9.39.0(jiti@2.6.1))(graphql@16.12.0)(typescript@5.9.3) + '@next/eslint-plugin-next': 15.5.6 '@stylistic/eslint-plugin': 4.4.1(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) - '@vitest/eslint-plugin': 1.3.13(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.46.4(@typescript-eslint/parser@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + '@vitest/eslint-plugin': 1.4.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.0(jiti@2.6.1) eslint-config-prettier: 10.1.8(eslint@9.39.0(jiti@2.6.1)) - eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1)) + eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1)) eslint-plugin-ava: 15.1.0(eslint@9.39.0(jiti@2.6.1)) - eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + eslint-plugin-canonical: 5.1.3(@typescript-eslint/parser@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) eslint-plugin-eslint-comments: 3.2.0(eslint@9.39.0(jiti@2.6.1)) eslint-plugin-fp: 2.3.0(eslint@9.39.0(jiti@2.6.1)) eslint-plugin-functional: 9.0.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)) - eslint-plugin-jest: 28.14.0(@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)) + eslint-plugin-jest: 28.14.0(@typescript-eslint/eslint-plugin@8.46.4(@typescript-eslint/parser@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) eslint-plugin-jsdoc: 50.8.0(eslint@9.39.0(jiti@2.6.1)) - eslint-plugin-jsonc: 2.20.1(eslint@9.39.0(jiti@2.6.1)) + eslint-plugin-jsonc: 2.21.0(eslint@9.39.0(jiti@2.6.1)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.0(jiti@2.6.1)) eslint-plugin-lodash: 8.0.0(eslint@9.39.0(jiti@2.6.1)) eslint-plugin-mocha: 10.5.0(eslint@9.39.0(jiti@2.6.1)) eslint-plugin-modules-newline: 0.0.6 eslint-plugin-n: 17.23.1(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-perfectionist: 4.15.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + eslint-plugin-perfectionist: 4.15.1(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) eslint-plugin-prettier: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1))(prettier@3.6.2) eslint-plugin-promise: 7.2.1(eslint@9.39.0(jiti@2.6.1)) eslint-plugin-react: 7.37.5(eslint@9.39.0(jiti@2.6.1)) - eslint-plugin-react-hooks: 6.1.0(eslint@9.39.0(jiti@2.6.1)) + eslint-plugin-react-hooks: 6.1.1(eslint@9.39.0(jiti@2.6.1)) eslint-plugin-regexp: 2.10.0(eslint@9.39.0(jiti@2.6.1)) eslint-plugin-unicorn: 60.0.0(eslint@9.39.0(jiti@2.6.1)) - eslint-plugin-yml: 1.18.0(eslint@9.39.0(jiti@2.6.1)) + eslint-plugin-yml: 1.19.0(eslint@9.39.0(jiti@2.6.1)) eslint-plugin-zod: 1.4.0(eslint@9.39.0(jiti@2.6.1)) globals: 16.5.0 - graphql: 16.11.0 + graphql: 16.12.0 prettier: 3.6.2 ramda: 0.30.1 - typescript-eslint: 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + typescript-eslint: 8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) yaml-eslint-parser: 1.3.0 transitivePeerDependencies: - '@apollo/subgraph' @@ -8287,40 +7828,40 @@ snapshots: eslint-import-context@0.1.9(unrs-resolver@1.11.1): dependencies: - get-tsconfig: 4.10.1 + get-tsconfig: 4.13.0 stable-hash-x: 0.2.0 optionalDependencies: unrs-resolver: 1.11.1 - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3(supports-color@8.1.1) eslint: 9.39.0(jiti@2.6.1) - get-tsconfig: 4.10.1 + get-tsconfig: 4.13.0 is-bun-module: 2.0.0 stable-hash: 0.0.5 tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)) transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1)): + eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1)): dependencies: debug: 4.4.3(supports-color@8.1.1) eslint: 9.39.0(jiti@2.6.1) eslint-import-context: 0.1.9(unrs-resolver@1.11.1) - get-tsconfig: 4.10.1 + get-tsconfig: 4.13.0 is-bun-module: 2.0.0 stable-hash-x: 0.2.0 tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)) + eslint-plugin-import: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)) transitivePeerDependencies: - supports-color @@ -8330,13 +7871,13 @@ snapshots: esquery: 1.6.0 jsonc-eslint-parser: 2.4.1 - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.0(jiti@2.6.1) - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1)) transitivePeerDependencies: - supports-color @@ -8352,14 +7893,14 @@ snapshots: pkg-dir: 5.0.0 resolve-from: 5.0.0 - eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-canonical@5.1.3(@typescript-eslint/parser@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) array-includes: 3.1.9 debug: 4.4.3(supports-color@8.1.1) doctrine: 3.0.0 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1)) - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1)))(eslint@9.39.0(jiti@2.6.1)) is-get-set-prop: 1.0.0 is-js-type: 2.0.0 is-obj-prop: 1.0.0 @@ -8367,7 +7908,7 @@ snapshots: lodash: 4.17.21 natural-orderby: 5.0.0 recast: 0.23.11 - roarr: 7.21.1 + roarr: 7.21.2 tsconfig-paths: 4.2.0 transitivePeerDependencies: - '@typescript-eslint/parser' @@ -8382,7 +7923,7 @@ snapshots: eslint-plugin-es-x@7.8.0(eslint@9.39.0(jiti@2.6.1)): dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.0(jiti@2.6.1)) - '@eslint-community/regexpp': 4.12.1 + '@eslint-community/regexpp': 4.12.2 eslint: 9.39.0(jiti@2.6.1) eslint-compat-utils: 0.5.1(eslint@9.39.0(jiti@2.6.1)) @@ -8402,7 +7943,7 @@ snapshots: eslint-plugin-functional@9.0.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) deepmerge-ts: 7.1.5 escape-string-regexp: 5.0.0 eslint: 9.39.0(jiti@2.6.1) @@ -8414,29 +7955,29 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)): + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1)): dependencies: - '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/types': 8.46.4 comment-parser: 1.4.1 debug: 4.4.3(supports-color@8.1.1) eslint: 9.39.0(jiti@2.6.1) eslint-import-context: 0.1.9(unrs-resolver@1.11.1) is-glob: 4.0.3 - minimatch: 10.0.3 + minimatch: 10.1.1 semver: 7.7.3 stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) transitivePeerDependencies: - supports-color - eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.46.4(@typescript-eslint/parser@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.0(jiti@2.6.1) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.46.4(@typescript-eslint/parser@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) transitivePeerDependencies: - supports-color - typescript @@ -8457,9 +7998,10 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-jsonc@2.20.1(eslint@9.39.0(jiti@2.6.1)): + eslint-plugin-jsonc@2.21.0(eslint@9.39.0(jiti@2.6.1)): dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.0(jiti@2.6.1)) + diff-sequences: 27.5.1 eslint: 9.39.0(jiti@2.6.1) eslint-compat-utils: 0.6.5(eslint@9.39.0(jiti@2.6.1)) eslint-json-compat-utils: 0.2.1(eslint@9.39.0(jiti@2.6.1))(jsonc-eslint-parser@2.4.1) @@ -8477,7 +8019,7 @@ snapshots: array-includes: 3.1.9 array.prototype.flatmap: 1.3.3 ast-types-flow: 0.0.8 - axe-core: 4.10.3 + axe-core: 4.11.0 axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 @@ -8512,7 +8054,7 @@ snapshots: enhanced-resolve: 5.18.3 eslint: 9.39.0(jiti@2.6.1) eslint-plugin-es-x: 7.8.0(eslint@9.39.0(jiti@2.6.1)) - get-tsconfig: 4.10.1 + get-tsconfig: 4.13.0 globals: 15.15.0 globrex: 0.1.2 ignore: 5.3.2 @@ -8521,10 +8063,10 @@ snapshots: transitivePeerDependencies: - typescript - eslint-plugin-perfectionist@4.15.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-perfectionist@4.15.1(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/types': 8.46.2 - '@typescript-eslint/utils': 8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.46.4 + '@typescript-eslint/utils': 8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.0(jiti@2.6.1) natural-orderby: 5.0.0 transitivePeerDependencies: @@ -8545,15 +8087,13 @@ snapshots: '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.0(jiti@2.6.1)) eslint: 9.39.0(jiti@2.6.1) - eslint-plugin-react-hooks@6.1.0(eslint@9.39.0(jiti@2.6.1)): + eslint-plugin-react-hooks@6.1.1(eslint@9.39.0(jiti@2.6.1)): dependencies: '@babel/core': 7.28.5 - '@babel/parser': 7.28.4 - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.28.5) + '@babel/parser': 7.28.5 eslint: 9.39.0(jiti@2.6.1) - hermes-parser: 0.25.1 - zod: 3.25.76 - zod-validation-error: 3.5.3(zod@3.25.76) + zod: 4.1.12 + zod-validation-error: 4.0.2(zod@4.1.12) transitivePeerDependencies: - supports-color @@ -8582,7 +8122,7 @@ snapshots: eslint-plugin-regexp@2.10.0(eslint@9.39.0(jiti@2.6.1)): dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.0(jiti@2.6.1)) - '@eslint-community/regexpp': 4.12.1 + '@eslint-community/regexpp': 4.12.2 comment-parser: 1.4.1 eslint: 9.39.0(jiti@2.6.1) jsdoc-type-pratt-parser: 4.8.0 @@ -8592,13 +8132,13 @@ snapshots: eslint-plugin-unicorn@60.0.0(eslint@9.39.0(jiti@2.6.1)): dependencies: - '@babel/helper-validator-identifier': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.0(jiti@2.6.1)) '@eslint/plugin-kit': 0.3.5 change-case: 5.4.4 - ci-info: 4.3.0 + ci-info: 4.3.1 clean-regexp: 1.0.0 - core-js-compat: 3.45.1 + core-js-compat: 3.46.0 eslint: 9.39.0(jiti@2.6.1) esquery: 1.6.0 find-up-simple: 1.0.1 @@ -8610,11 +8150,12 @@ snapshots: regexp-tree: 0.1.27 regjsparser: 0.12.0 semver: 7.7.3 - strip-indent: 4.1.0 + strip-indent: 4.1.1 - eslint-plugin-yml@1.18.0(eslint@9.39.0(jiti@2.6.1)): + eslint-plugin-yml@1.19.0(eslint@9.39.0(jiti@2.6.1)): dependencies: debug: 4.4.3(supports-color@8.1.1) + diff-sequences: 27.5.1 escape-string-regexp: 4.0.0 eslint: 9.39.0(jiti@2.6.1) eslint-compat-utils: 0.6.5(eslint@9.39.0(jiti@2.6.1)) @@ -8651,7 +8192,7 @@ snapshots: eslint@9.39.0(jiti@2.6.1): dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.0(jiti@2.6.1)) - '@eslint-community/regexpp': 4.12.1 + '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.21.1 '@eslint/config-helpers': 0.4.2 '@eslint/core': 0.17.0 @@ -8750,9 +8291,6 @@ snapshots: strip-final-newline: 4.0.0 yoctocolors: 2.1.2 - exponential-backoff@3.1.2: - optional: true - extend@3.0.2: {} extsprintf@1.3.0: {} @@ -8837,7 +8375,7 @@ snapshots: find-versions@6.0.0: dependencies: semver-regex: 4.0.5 - super-regex: 1.0.0 + super-regex: 1.1.0 flat-cache@4.0.1: dependencies: @@ -8880,16 +8418,6 @@ snapshots: jsonfile: 6.2.0 universalify: 2.0.1 - fs-minipass@2.1.0: - dependencies: - minipass: 3.3.6 - optional: true - - fs-minipass@3.0.3: - dependencies: - minipass: 7.1.2 - optional: true - fs-readdir-recursive@1.1.0: {} fs.realpath@1.0.0: {} @@ -8964,15 +8492,15 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 - get-tsconfig@4.10.1: + get-tsconfig@4.13.0: dependencies: resolve-pkg-maps: 1.0.0 - get-urls@12.1.0(re2@1.20.9): + get-urls@12.1.0: dependencies: normalize-url: 8.1.0 super-regex: 0.2.0 - url-regex-safe: 4.0.0(re2@1.20.9) + url-regex-safe: 4.0.0 transitivePeerDependencies: - re2 @@ -8989,12 +8517,12 @@ snapshots: through2: 2.0.5 traverse: 0.6.8 - gitdown@4.1.1(re2@1.20.9): + gitdown@4.1.1: dependencies: bluebird: 3.7.2 deadlink: 1.1.3 filesize: 10.1.6 - get-urls: 12.1.0(re2@1.20.9) + get-urls: 12.1.0 gitinfo: 2.4.0 glob: 10.4.5 jsonfile: 6.2.0 @@ -9033,10 +8561,10 @@ snapshots: dependencies: foreground-child: 3.3.1 jackspeak: 4.1.1 - minimatch: 10.0.3 + minimatch: 10.1.1 minipass: 7.1.2 package-json-from-dist: 1.0.1 - path-scurry: 2.0.0 + path-scurry: 2.0.1 glob@7.2.3: dependencies: @@ -9081,16 +8609,16 @@ snapshots: graphemer@1.4.0: {} - graphql-config@5.1.5(@types/node@24.10.0)(graphql@16.11.0)(typescript@5.9.3): + graphql-config@5.1.5(@types/node@24.10.1)(graphql@16.12.0)(typescript@5.9.3): dependencies: - '@graphql-tools/graphql-file-loader': 8.1.2(graphql@16.11.0) - '@graphql-tools/json-file-loader': 8.0.20(graphql@16.11.0) - '@graphql-tools/load': 8.1.2(graphql@16.11.0) - '@graphql-tools/merge': 9.1.1(graphql@16.11.0) - '@graphql-tools/url-loader': 8.0.33(@types/node@24.10.0)(graphql@16.11.0) - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) + '@graphql-tools/graphql-file-loader': 8.1.6(graphql@16.12.0) + '@graphql-tools/json-file-loader': 8.0.24(graphql@16.12.0) + '@graphql-tools/load': 8.1.6(graphql@16.12.0) + '@graphql-tools/merge': 9.1.5(graphql@16.12.0) + '@graphql-tools/url-loader': 8.0.33(@types/node@24.10.1)(graphql@16.12.0) + '@graphql-tools/utils': 10.10.3(graphql@16.12.0) cosmiconfig: 8.3.6(typescript@5.9.3) - graphql: 16.11.0 + graphql: 16.12.0 jiti: 2.6.1 minimatch: 9.0.5 string-env-interpolation: 1.0.1 @@ -9105,18 +8633,18 @@ snapshots: - uWebSockets.js - utf-8-validate - graphql-depth-limit@1.1.0(graphql@16.11.0): + graphql-depth-limit@1.1.0(graphql@16.12.0): dependencies: arrify: 1.0.1 - graphql: 16.11.0 + graphql: 16.12.0 - graphql-ws@6.0.6(graphql@16.11.0)(ws@8.18.3): + graphql-ws@6.0.6(graphql@16.12.0)(ws@8.18.3): dependencies: - graphql: 16.11.0 + graphql: 16.12.0 optionalDependencies: ws: 8.18.3 - graphql@16.11.0: {} + graphql@16.12.0: {} handlebars@4.7.8: dependencies: @@ -9160,12 +8688,6 @@ snapshots: he@1.2.0: {} - hermes-estree@0.25.1: {} - - hermes-parser@0.25.1: - dependencies: - hermes-estree: 0.25.1 - highlight.js@10.7.3: {} hook-std@4.0.0: {} @@ -9191,9 +8713,6 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 - http-cache-semantics@4.2.0: - optional: true - http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.4 @@ -9220,11 +8739,6 @@ snapshots: husky@9.1.7: {} - iconv-lite@0.6.3: - dependencies: - safer-buffer: 2.1.2 - optional: true - ignore@5.3.2: {} ignore@7.0.5: {} @@ -9247,9 +8761,6 @@ snapshots: imurmurhash@0.1.4: {} - indent-string@4.0.0: - optional: true - indent-string@5.0.0: {} index-to-position@1.2.0: {} @@ -9263,9 +8774,6 @@ snapshots: ini@1.3.8: {} - install-artifact-from-github@1.4.0: - optional: true - internal-slot@1.1.0: dependencies: es-errors: 1.3.0 @@ -9277,9 +8785,6 @@ snapshots: from2: 2.3.0 p-is-promise: 3.0.0 - ip-address@10.0.1: - optional: true - ip-regex@4.3.0: {} is-array-buffer@3.0.5: @@ -9372,7 +8877,7 @@ snapshots: is-immutable-type@5.0.1(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/type-utils': 8.45.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.0(jiti@2.6.1) ts-api-utils: 2.1.0(typescript@5.9.3) ts-declaration-location: 1.0.7(typescript@5.9.3) @@ -9388,9 +8893,6 @@ snapshots: dependencies: js-types: 1.0.0 - is-lambda@1.0.1: - optional: true - is-map@2.0.3: {} is-module@1.0.0: {} @@ -9483,9 +8985,6 @@ snapshots: isexe@2.0.0: {} - isexe@3.1.1: - optional: true - isomorphic-ws@5.0.0(ws@8.18.3): dependencies: ws: 8.18.3 @@ -9505,7 +9004,7 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: '@babel/core': 7.28.5 - '@babel/parser': 7.28.4 + '@babel/parser': 7.28.5 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.7.3 @@ -9555,7 +9054,7 @@ snapshots: argparse: 1.0.10 esprima: 4.0.1 - js-yaml@4.1.0: + js-yaml@4.1.1: dependencies: argparse: 2.0.1 @@ -9569,7 +9068,7 @@ snapshots: jsdoc-type-pratt-parser@6.10.0: {} - jsdoc-type-pratt-parser@6.11.0: {} + jsdoc-type-pratt-parser@6.11.1: {} jsdom@6.5.1: dependencies: @@ -9606,7 +9105,7 @@ snapshots: '@types/json-schema': 7.0.15 '@types/lodash': 4.17.20 is-glob: 4.0.3 - js-yaml: 4.1.0 + js-yaml: 4.1.1 lodash: 4.17.21 minimist: 1.2.8 prettier: 3.6.2 @@ -9677,7 +9176,7 @@ snapshots: lint-staged@16.2.6: dependencies: - commander: 14.0.1 + commander: 14.0.2 listr2: 9.0.5 micromatch: 4.0.8 nano-spawn: 2.0.0 @@ -9696,7 +9195,7 @@ snapshots: listr2@9.0.5: dependencies: - cli-truncate: 5.1.0 + cli-truncate: 5.1.1 colorette: 2.0.20 eventemitter3: 5.0.1 log-update: 6.1.0 @@ -9756,7 +9255,7 @@ snapshots: log-update@6.1.0: dependencies: - ansi-escapes: 7.1.1 + ansi-escapes: 7.2.0 cli-cursor: 5.0.0 slice-ansi: 7.1.2 strip-ansi: 7.1.2 @@ -9780,6 +9279,12 @@ snapshots: dependencies: yallist: 3.1.1 + make-asynchronous@1.0.1: + dependencies: + p-event: 6.0.1 + type-fest: 4.41.0 + web-worker: 1.2.0 + make-dir@2.1.0: dependencies: pify: 4.0.1 @@ -9789,24 +9294,6 @@ snapshots: dependencies: semver: 7.7.3 - make-fetch-happen@13.0.1: - dependencies: - '@npmcli/agent': 2.2.2 - cacache: 18.0.4 - http-cache-semantics: 4.2.0 - is-lambda: 1.0.1 - minipass: 7.1.2 - minipass-fetch: 3.0.5 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - negotiator: 0.6.4 - proc-log: 4.2.0 - promise-retry: 2.0.1 - ssri: 10.0.6 - transitivePeerDependencies: - - supports-color - optional: true - markdown-contents@1.0.11: dependencies: contents: 5.0.0 @@ -9814,7 +9301,7 @@ snapshots: marked-terminal@7.3.0(marked@15.0.12): dependencies: - ansi-escapes: 7.1.1 + ansi-escapes: 7.2.0 ansi-regex: 6.2.2 chalk: 5.6.2 cli-highlight: 2.1.11 @@ -9825,7 +9312,7 @@ snapshots: marked-terminal@7.3.0(marked@9.1.6): dependencies: - ansi-escapes: 7.1.1 + ansi-escapes: 7.2.0 ansi-regex: 6.2.2 chalk: 5.6.2 cli-highlight: 2.1.11 @@ -9848,9 +9335,9 @@ snapshots: merge2@1.4.1: {} - meros@1.3.2(@types/node@24.10.0): + meros@1.3.2(@types/node@24.10.1): optionalDependencies: - '@types/node': 24.10.0 + '@types/node': 24.10.1 micro-spelling-correcter@1.1.1: {} @@ -9871,7 +9358,7 @@ snapshots: mimic-function@5.0.1: {} - minimatch@10.0.3: + minimatch@10.1.1: dependencies: '@isaacs/brace-expansion': 5.0.0 @@ -9889,55 +9376,9 @@ snapshots: minimist@1.2.8: {} - minipass-collect@2.0.1: - dependencies: - minipass: 7.1.2 - optional: true - - minipass-fetch@3.0.5: - dependencies: - minipass: 7.1.2 - minipass-sized: 1.0.3 - minizlib: 2.1.2 - optionalDependencies: - encoding: 0.1.13 - optional: true - - minipass-flush@1.0.5: - dependencies: - minipass: 3.3.6 - optional: true - - minipass-pipeline@1.2.4: - dependencies: - minipass: 3.3.6 - optional: true - - minipass-sized@1.0.3: - dependencies: - minipass: 3.3.6 - optional: true - - minipass@3.3.6: - dependencies: - yallist: 4.0.0 - optional: true - - minipass@5.0.0: - optional: true - minipass@7.1.2: {} - minizlib@2.1.2: - dependencies: - minipass: 3.3.6 - yallist: 4.0.0 - optional: true - - mkdirp@1.0.4: - optional: true - - mocha@11.7.4: + mocha@11.7.5: dependencies: browser-stdout: 1.3.1 chokidar: 4.0.3 @@ -9948,7 +9389,7 @@ snapshots: glob: 10.4.5 he: 1.2.0 is-path-inside: 3.0.3 - js-yaml: 4.1.0 + js-yaml: 4.1.1 log-symbols: 4.1.0 minimatch: 9.0.5 ms: 2.1.3 @@ -9971,20 +9412,14 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 - nan@2.23.0: - optional: true - nano-spawn@2.0.0: {} - napi-postinstall@0.3.3: {} + napi-postinstall@0.3.4: {} natural-compare@1.4.0: {} natural-orderby@5.0.0: {} - negotiator@0.6.4: - optional: true - neo-async@2.6.2: {} nerf-dart@1.0.0: {} @@ -10009,28 +9444,7 @@ snapshots: fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 - node-gyp@10.3.1: - dependencies: - env-paths: 2.2.1 - exponential-backoff: 3.1.2 - glob: 10.4.5 - graceful-fs: 4.2.11 - make-fetch-happen: 13.0.1 - nopt: 7.2.1 - proc-log: 4.2.0 - semver: 7.7.3 - tar: 6.2.1 - which: 4.0.0 - transitivePeerDependencies: - - supports-color - optional: true - - node-releases@2.0.21: {} - - nopt@7.2.1: - dependencies: - abbrev: 2.0.0 - optional: true + node-releases@2.0.27: {} normalize-package-data@6.0.2: dependencies: @@ -10038,6 +9452,12 @@ snapshots: semver: 7.7.3 validate-npm-package-license: 3.0.4 + normalize-package-data@8.0.0: + dependencies: + hosted-git-info: 9.0.2 + semver: 7.7.3 + validate-npm-package-license: 3.0.4 + normalize-path@2.1.1: dependencies: remove-trailing-separator: 1.1.0 @@ -10123,7 +9543,7 @@ snapshots: open@10.2.0: dependencies: - default-browser: 5.2.1 + default-browser: 5.3.0 define-lazy-prop: 3.0.0 is-inside-container: 1.0.0 wsl-utils: 0.1.0 @@ -10154,9 +9574,13 @@ snapshots: p-each-series@3.0.0: {} + p-event@6.0.1: + dependencies: + p-timeout: 6.1.4 + p-filter@4.1.0: dependencies: - p-map: 7.0.3 + p-map: 7.0.4 p-is-promise@3.0.0: {} @@ -10184,15 +9608,12 @@ snapshots: dependencies: p-limit: 3.1.0 - p-map@4.0.0: - dependencies: - aggregate-error: 3.1.0 - optional: true - - p-map@7.0.3: {} + p-map@7.0.4: {} p-reduce@3.0.0: {} + p-timeout@6.1.4: {} + p-try@1.0.0: {} p-try@2.2.0: {} @@ -10256,7 +9677,7 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 - path-scurry@2.0.0: + path-scurry@2.0.1: dependencies: lru-cache: 11.2.2 minipass: 7.1.2 @@ -10312,17 +9733,8 @@ snapshots: dependencies: parse-ms: 4.0.0 - proc-log@4.2.0: - optional: true - process-nextick-args@2.0.1: {} - promise-retry@2.0.1: - dependencies: - err-code: 2.0.3 - retry: 0.12.0 - optional: true - prop-types@15.8.1: dependencies: loose-envify: 1.4.0 @@ -10360,15 +9772,6 @@ snapshots: minimist: 1.2.8 strip-json-comments: 2.0.1 - re2@1.20.9: - dependencies: - install-artifact-from-github: 1.4.0 - nan: 2.23.0 - node-gyp: 10.3.1 - transitivePeerDependencies: - - supports-color - optional: true - react-is@16.13.1: {} read-package-up@11.0.0: @@ -10377,6 +9780,20 @@ snapshots: read-pkg: 9.0.1 type-fest: 4.41.0 + read-package-up@12.0.0: + dependencies: + find-up-simple: 1.0.1 + read-pkg: 10.0.0 + type-fest: 5.2.0 + + read-pkg@10.0.0: + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 8.0.0 + parse-json: 8.3.0 + type-fest: 5.2.0 + unicorn-magic: 0.3.0 + read-pkg@9.0.1: dependencies: '@types/normalize-package-data': 2.4.4 @@ -10418,7 +9835,7 @@ snapshots: refa@0.12.1: dependencies: - '@eslint-community/regexpp': 4.12.1 + '@eslint-community/regexpp': 4.12.2 reflect.getprototypeof@1.0.10: dependencies: @@ -10439,7 +9856,7 @@ snapshots: regexp-ast-analysis@0.7.1: dependencies: - '@eslint-community/regexpp': 4.12.1 + '@eslint-community/regexpp': 4.12.2 refa: 0.12.1 regexp-tree@0.1.27: {} @@ -10515,7 +9932,7 @@ snapshots: requireindex@1.1.0: {} - reserved-identifiers@1.0.0: {} + reserved-identifiers@1.2.0: {} resolve-from@4.0.0: {} @@ -10523,7 +9940,7 @@ snapshots: resolve-pkg-maps@1.0.0: {} - resolve@1.22.10: + resolve@1.22.11: dependencies: is-core-module: 2.16.1 path-parse: 1.0.7 @@ -10540,9 +9957,6 @@ snapshots: onetime: 7.0.0 signal-exit: 4.1.0 - retry@0.12.0: - optional: true - reusify@1.1.0: {} rfdc@1.4.1: {} @@ -10552,38 +9966,38 @@ snapshots: glob: 11.0.3 package-json-from-dist: 1.0.1 - roarr@7.21.1: + roarr@7.21.2: dependencies: fast-printf: 1.6.10 safe-stable-stringify: 2.5.0 semver-compare: 1.0.0 - rollup@4.52.5: + rollup@4.53.2: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.52.5 - '@rollup/rollup-android-arm64': 4.52.5 - '@rollup/rollup-darwin-arm64': 4.52.5 - '@rollup/rollup-darwin-x64': 4.52.5 - '@rollup/rollup-freebsd-arm64': 4.52.5 - '@rollup/rollup-freebsd-x64': 4.52.5 - '@rollup/rollup-linux-arm-gnueabihf': 4.52.5 - '@rollup/rollup-linux-arm-musleabihf': 4.52.5 - '@rollup/rollup-linux-arm64-gnu': 4.52.5 - '@rollup/rollup-linux-arm64-musl': 4.52.5 - '@rollup/rollup-linux-loong64-gnu': 4.52.5 - '@rollup/rollup-linux-ppc64-gnu': 4.52.5 - '@rollup/rollup-linux-riscv64-gnu': 4.52.5 - '@rollup/rollup-linux-riscv64-musl': 4.52.5 - '@rollup/rollup-linux-s390x-gnu': 4.52.5 - '@rollup/rollup-linux-x64-gnu': 4.52.5 - '@rollup/rollup-linux-x64-musl': 4.52.5 - '@rollup/rollup-openharmony-arm64': 4.52.5 - '@rollup/rollup-win32-arm64-msvc': 4.52.5 - '@rollup/rollup-win32-ia32-msvc': 4.52.5 - '@rollup/rollup-win32-x64-gnu': 4.52.5 - '@rollup/rollup-win32-x64-msvc': 4.52.5 + '@rollup/rollup-android-arm-eabi': 4.53.2 + '@rollup/rollup-android-arm64': 4.53.2 + '@rollup/rollup-darwin-arm64': 4.53.2 + '@rollup/rollup-darwin-x64': 4.53.2 + '@rollup/rollup-freebsd-arm64': 4.53.2 + '@rollup/rollup-freebsd-x64': 4.53.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.53.2 + '@rollup/rollup-linux-arm-musleabihf': 4.53.2 + '@rollup/rollup-linux-arm64-gnu': 4.53.2 + '@rollup/rollup-linux-arm64-musl': 4.53.2 + '@rollup/rollup-linux-loong64-gnu': 4.53.2 + '@rollup/rollup-linux-ppc64-gnu': 4.53.2 + '@rollup/rollup-linux-riscv64-gnu': 4.53.2 + '@rollup/rollup-linux-riscv64-musl': 4.53.2 + '@rollup/rollup-linux-s390x-gnu': 4.53.2 + '@rollup/rollup-linux-x64-gnu': 4.53.2 + '@rollup/rollup-linux-x64-musl': 4.53.2 + '@rollup/rollup-openharmony-arm64': 4.53.2 + '@rollup/rollup-win32-arm64-msvc': 4.53.2 + '@rollup/rollup-win32-ia32-msvc': 4.53.2 + '@rollup/rollup-win32-x64-gnu': 4.53.2 + '@rollup/rollup-win32-x64-msvc': 4.53.2 fsevents: 2.3.3 run-applescript@7.1.0: {} @@ -10621,17 +10035,17 @@ snapshots: scslre@0.3.0: dependencies: - '@eslint-community/regexpp': 4.12.1 + '@eslint-community/regexpp': 4.12.2 refa: 0.12.1 regexp-ast-analysis: 0.7.1 - semantic-release@25.0.1(typescript@5.9.3): + semantic-release@25.0.2(typescript@5.9.3): dependencies: - '@semantic-release/commit-analyzer': 13.0.1(semantic-release@25.0.1(typescript@5.9.3)) + '@semantic-release/commit-analyzer': 13.0.1(semantic-release@25.0.2(typescript@5.9.3)) '@semantic-release/error': 4.0.0 - '@semantic-release/github': 12.0.1(semantic-release@25.0.1(typescript@5.9.3)) - '@semantic-release/npm': 13.1.1(semantic-release@25.0.1(typescript@5.9.3)) - '@semantic-release/release-notes-generator': 14.1.0(semantic-release@25.0.1(typescript@5.9.3)) + '@semantic-release/github': 12.0.2(semantic-release@25.0.2(typescript@5.9.3)) + '@semantic-release/npm': 13.1.1(semantic-release@25.0.2(typescript@5.9.3)) + '@semantic-release/release-notes-generator': 14.1.0(semantic-release@25.0.2(typescript@5.9.3)) aggregate-error: 5.0.0 cosmiconfig: 9.0.0(typescript@5.9.3) debug: 4.4.3(supports-color@8.1.1) @@ -10650,7 +10064,7 @@ snapshots: micromatch: 4.0.8 p-each-series: 3.0.0 p-reduce: 3.0.0 - read-package-up: 11.0.0 + read-package-up: 12.0.0 resolve-from: 5.0.0 semver: 7.7.3 semver-diff: 5.0.0 @@ -10772,24 +10186,6 @@ snapshots: ansi-styles: 6.2.3 is-fullwidth-code-point: 5.1.0 - smart-buffer@4.2.0: - optional: true - - socks-proxy-agent@8.0.5: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3(supports-color@8.1.1) - socks: 2.8.7 - transitivePeerDependencies: - - supports-color - optional: true - - socks@2.8.7: - dependencies: - ip-address: 10.0.1 - smart-buffer: 4.2.0 - optional: true - source-map@0.6.1: {} source-map@0.7.6: @@ -10834,11 +10230,6 @@ snapshots: safer-buffer: 2.1.2 tweetnacl: 0.14.5 - ssri@10.0.6: - dependencies: - minipass: 7.1.2 - optional: true - stable-hash-x@0.2.0: {} stable-hash@0.0.5: {} @@ -10873,7 +10264,7 @@ snapshots: string-width@7.2.0: dependencies: - emoji-regex: 10.5.0 + emoji-regex: 10.6.0 get-east-asian-width: 1.4.0 strip-ansi: 7.1.2 @@ -10954,7 +10345,7 @@ snapshots: strip-final-newline@4.0.0: {} - strip-indent@4.1.0: {} + strip-indent@4.1.1: {} strip-json-comments@2.0.1: {} @@ -10966,9 +10357,10 @@ snapshots: function-timeout: 0.1.1 time-span: 5.1.0 - super-regex@1.0.0: + super-regex@1.1.0: dependencies: function-timeout: 1.0.2 + make-asynchronous: 1.0.1 time-span: 5.1.0 supports-color@5.5.0: @@ -11002,17 +10394,9 @@ snapshots: dependencies: '@pkgr/core': 0.2.9 - tapable@2.2.3: {} + tagged-tag@1.0.0: {} - tar@6.2.1: - dependencies: - chownr: 2.0.0 - fs-minipass: 2.1.0 - minipass: 5.0.0 - minizlib: 2.1.2 - mkdirp: 1.0.4 - yallist: 4.0.0 - optional: true + tapable@2.3.0: {} temp-dir@3.0.0: {} @@ -11061,7 +10445,7 @@ snapshots: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 - tlds@1.260.0: {} + tlds@1.261.0: {} to-regex-range@5.0.1: dependencies: @@ -11070,7 +10454,7 @@ snapshots: to-valid-identifier@1.0.0: dependencies: '@sindresorhus/base62': 1.0.0 - reserved-identifiers: 1.0.0 + reserved-identifiers: 1.2.0 tough-cookie@2.5.0: dependencies: @@ -11126,6 +10510,10 @@ snapshots: type-fest@4.41.0: {} + type-fest@5.2.0: + dependencies: + tagged-tag: 1.0.0 + typed-array-buffer@1.0.3: dependencies: call-bound: 1.0.4 @@ -11159,12 +10547,12 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3): + typescript-eslint@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.46.4(@typescript-eslint/parser@8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.4(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: @@ -11190,6 +10578,8 @@ snapshots: dependencies: '@fastify/busboy': 2.1.1 + undici@7.16.0: {} + unicode-canonical-property-names-ecmascript@2.0.1: {} unicode-emoji-modifier-base@1.0.0: {} @@ -11207,16 +10597,6 @@ snapshots: unicorn-magic@0.3.0: {} - unique-filename@3.0.0: - dependencies: - unique-slug: 4.0.0 - optional: true - - unique-slug@4.0.0: - dependencies: - imurmurhash: 0.1.4 - optional: true - unique-string@3.0.0: dependencies: crypto-random-string: 4.0.0 @@ -11231,7 +10611,7 @@ snapshots: unrs-resolver@1.11.1: dependencies: - napi-postinstall: 0.3.3 + napi-postinstall: 0.3.4 optionalDependencies: '@unrs/resolver-binding-android-arm-eabi': 1.11.1 '@unrs/resolver-binding-android-arm64': 1.11.1 @@ -11253,9 +10633,9 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 - update-browserslist-db@1.1.3(browserslist@4.26.2): + update-browserslist-db@1.1.4(browserslist@4.28.0): dependencies: - browserslist: 4.26.2 + browserslist: 4.28.0 escalade: 3.2.0 picocolors: 1.1.1 @@ -11269,12 +10649,10 @@ snapshots: url-join@5.0.0: {} - url-regex-safe@4.0.0(re2@1.20.9): + url-regex-safe@4.0.0: dependencies: ip-regex: 4.3.0 - tlds: 1.260.0 - optionalDependencies: - re2: 1.20.9 + tlds: 1.261.0 url-regexp@1.0.2: {} @@ -11305,6 +10683,8 @@ snapshots: web-streams-polyfill@3.3.3: {} + web-worker@1.2.0: {} + whatwg-mimetype@4.0.0: {} whatwg-url-compat@0.6.5: @@ -11358,11 +10738,6 @@ snapshots: dependencies: isexe: 2.0.0 - which@4.0.0: - dependencies: - isexe: 3.1.1 - optional: true - word-wrap@1.2.5: {} wordwrap@1.0.0: {} @@ -11413,9 +10788,6 @@ snapshots: yallist@3.1.1: {} - yallist@4.0.0: - optional: true - yaml-eslint-parser@1.3.0: dependencies: eslint-visitor-keys: 3.4.3 @@ -11488,8 +10860,8 @@ snapshots: yoctocolors@2.1.2: {} - zod-validation-error@3.5.3(zod@3.25.76): + zod-validation-error@4.0.2(zod@4.1.12): dependencies: - zod: 3.25.76 + zod: 4.1.12 - zod@3.25.76: {} + zod@4.1.12: {} From bba6dd8ffccb519b0a50d2ad7ab549264678f769 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 Nov 2025 02:28:24 +0000 Subject: [PATCH 179/189] chore(deps-dev): bump glob from 11.0.3 to 11.1.0 Bumps [glob](https://github.com/isaacs/node-glob) from 11.0.3 to 11.1.0. - [Changelog](https://github.com/isaacs/node-glob/blob/main/changelog.md) - [Commits](https://github.com/isaacs/node-glob/compare/v11.0.3...v11.1.0) --- updated-dependencies: - dependency-name: glob dependency-version: 11.1.0 dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- pnpm-lock.yaml | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0cd5dec8e..47e350d94 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -164,7 +164,7 @@ importers: version: 4.1.1 glob: specifier: ^11.0.3 - version: 11.0.3 + version: 11.1.0 globals: specifier: ^16.5.0 version: 16.5.0 @@ -780,11 +780,11 @@ packages: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} - '@emnapi/core@1.7.0': - resolution: {integrity: sha512-pJdKGq/1iquWYtv1RRSljZklxHCOCAJFJrImO5ZLKPJVJlVUcs8yFwNQlqS0Lo8xT1VAXXTCZocF9n26FWEKsw==} + '@emnapi/core@1.7.1': + resolution: {integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==} - '@emnapi/runtime@1.7.0': - resolution: {integrity: sha512-oAYoQnCYaQZKVS53Fq23ceWMRxq5EhQsE0x0RdQ55jT7wagMu5k+fS39v1fiSLrtrLQlXwVINenqhLMtTrV/1Q==} + '@emnapi/runtime@1.7.1': + resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} '@emnapi/wasi-threads@1.1.0': resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} @@ -2954,12 +2954,12 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + glob@10.5.0: + resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} hasBin: true - glob@11.0.3: - resolution: {integrity: sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==} + glob@11.1.0: + resolution: {integrity: sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==} engines: {node: 20 || >=22} hasBin: true @@ -5944,13 +5944,13 @@ snapshots: '@colors/colors@1.5.0': optional: true - '@emnapi/core@1.7.0': + '@emnapi/core@1.7.1': dependencies: '@emnapi/wasi-threads': 1.1.0 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.7.0': + '@emnapi/runtime@1.7.1': dependencies: tslib: 2.8.1 optional: true @@ -6390,8 +6390,8 @@ snapshots: '@napi-rs/wasm-runtime@0.2.12': dependencies: - '@emnapi/core': 1.7.0 - '@emnapi/runtime': 1.7.0 + '@emnapi/core': 1.7.1 + '@emnapi/runtime': 1.7.1 '@tybys/wasm-util': 0.10.1 optional: true @@ -8524,7 +8524,7 @@ snapshots: filesize: 10.1.6 get-urls: 12.1.0 gitinfo: 2.4.0 - glob: 10.4.5 + glob: 10.5.0 jsonfile: 6.2.0 lodash: 4.17.21 markdown-contents: 1.0.11 @@ -8548,7 +8548,7 @@ snapshots: dependencies: is-glob: 4.0.3 - glob@10.4.5: + glob@10.5.0: dependencies: foreground-child: 3.3.1 jackspeak: 3.4.3 @@ -8557,7 +8557,7 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 - glob@11.0.3: + glob@11.1.0: dependencies: foreground-child: 3.3.1 jackspeak: 4.1.1 @@ -9386,7 +9386,7 @@ snapshots: diff: 7.0.0 escape-string-regexp: 4.0.0 find-up: 5.0.0 - glob: 10.4.5 + glob: 10.5.0 he: 1.2.0 is-path-inside: 3.0.3 js-yaml: 4.1.1 @@ -9963,7 +9963,7 @@ snapshots: rimraf@6.1.0: dependencies: - glob: 11.0.3 + glob: 11.1.0 package-json-from-dist: 1.0.1 roarr@7.21.2: @@ -10416,7 +10416,7 @@ snapshots: test-exclude@7.0.1: dependencies: '@istanbuljs/schema': 0.1.3 - glob: 10.4.5 + glob: 10.5.0 minimatch: 9.0.5 thenify-all@1.6.0: From edaf615ce629d8c250808f77173d1a08c2185f17 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Wed, 19 Nov 2025 05:02:40 -0700 Subject: [PATCH 180/189] feat: `allowIndentedSections` option; fixes #541 --- .README/rules/check-indentation.md | 2 +- docs/rules/check-indentation.md | 51 +++++++++- src/rules.d.ts | 4 + src/rules/checkIndentation.js | 68 +++++++++++-- test/rules/assertions/checkIndentation.js | 114 ++++++++++++++++++++++ 5 files changed, 230 insertions(+), 9 deletions(-) diff --git a/.README/rules/check-indentation.md b/.README/rules/check-indentation.md index 805cc5f04..9e0c4777e 100644 --- a/.README/rules/check-indentation.md +++ b/.README/rules/check-indentation.md @@ -29,7 +29,7 @@ the following description is not reported: |Context|everywhere| |Tags|N/A| |Recommended|false| -|Options|`excludeTags`| +|Options|`allowIndentedSections`, `excludeTags`| ## Failing examples diff --git a/docs/rules/check-indentation.md b/docs/rules/check-indentation.md index a692d8a38..e44e0ebd0 100644 --- a/docs/rules/check-indentation.md +++ b/docs/rules/check-indentation.md @@ -3,6 +3,7 @@ # check-indentation * [Options](#user-content-check-indentation-options) + * [`allowIndentedSections`](#user-content-check-indentation-options-allowindentedsections) * [`excludeTags`](#user-content-check-indentation-options-excludetags) * [Context and settings](#user-content-check-indentation-context-and-settings) * [Failing examples](#user-content-check-indentation-failing-examples) @@ -31,6 +32,12 @@ the following description is not reported: A single options object has the following properties. + + +### allowIndentedSections + +Allows indentation of nested sections on subsequent lines (like bullet lists) + ### excludeTags @@ -65,7 +72,7 @@ report a padding issue: |Context|everywhere| |Tags|N/A| |Recommended|false| -|Options|`excludeTags`| +|Options|`allowIndentedSections`, `excludeTags`| @@ -179,6 +186,19 @@ function quux () { */ // "jsdoc/check-indentation": ["error"|"warn", {"excludeTags":[]}] // Message: There must be no indentation. + +/** + * @param {number} val Still disallowed + */ +// "jsdoc/check-indentation": ["error"|"warn", {"allowIndentedSections":true}] +// Message: There must be no indentation. + +/** + * Disallowed + * Indentation + */ +// "jsdoc/check-indentation": ["error"|"warn", {"allowIndentedSections":true}] +// Message: There must be no indentation. ```` @@ -293,5 +313,34 @@ function MyDecorator(options: { myOptions: number }) { function MyDecorator(options: { myOptions: number }) { return (Base: Function) => {}; } + +/** + * Foobar + * + * This method does the following things: + * - foo... + * this is the first step + * - bar + * this is the second step + */ +// "jsdoc/check-indentation": ["error"|"warn", {"allowIndentedSections":true}] + +/** + * Allowed + * Indentation + */ +// "jsdoc/check-indentation": ["error"|"warn", {"allowIndentedSections":true}] + +/** + * @param {number} val Multi- + * line + */ +// "jsdoc/check-indentation": ["error"|"warn", {"allowIndentedSections":true}] + +/** + * - foo: + * - bar + */ +// "jsdoc/check-indentation": ["error"|"warn", {"allowIndentedSections":true}] ```` diff --git a/src/rules.d.ts b/src/rules.d.ts index 7a280390e..3ee700908 100644 --- a/src/rules.d.ts +++ b/src/rules.d.ts @@ -47,6 +47,10 @@ export interface Rules { | [] | [ { + /** + * Allows indentation of nested sections on subsequent lines (like bullet lists) + */ + allowIndentedSections?: boolean; /** * Array of tags (e.g., `['example', 'description']`) whose content will be * "hidden" from the `check-indentation` rule. Defaults to `['example']`. diff --git a/src/rules/checkIndentation.js b/src/rules/checkIndentation.js index d8bb80f68..d246a8d0e 100644 --- a/src/rules/checkIndentation.js +++ b/src/rules/checkIndentation.js @@ -32,21 +32,71 @@ export default iterateJsdoc(({ sourceCode, }) => { const options = context.options[0] || {}; - const /** @type {{excludeTags: string[]}} */ { + const /** @type {{excludeTags: string[], allowIndentedSections: boolean}} */ { + allowIndentedSections = false, excludeTags = [ 'example', ], } = options; - const reg = /^(?:\/?\**|[ \t]*)\*[ \t]{2}/gmv; const textWithoutCodeBlocks = maskCodeBlocks(sourceCode.getText(jsdocNode)); const text = excludeTags.length ? maskExcludedContent(textWithoutCodeBlocks, excludeTags) : textWithoutCodeBlocks; - if (reg.test(text)) { - const lineBreaks = text.slice(0, reg.lastIndex).match(/\n/gv) || []; - report('There must be no indentation.', null, { - line: lineBreaks.length, - }); + if (allowIndentedSections) { + // When allowIndentedSections is enabled, only check for indentation on tag lines + // and the very first line of the main description + const lines = text.split('\n'); + let hasSeenContent = false; + + for (const [ + lineIndex, + line, + ] of lines.entries()) { + // Check for indentation (two or more spaces after *) + const indentMatch = line.match(/^(?:\/?\**|[\t ]*)\*([\t ]{2,})/gv); + + if (indentMatch) { + // Check what comes after the indentation + const afterIndent = line.slice(indentMatch[0].length); + + // If this is a tag line with indentation, always report + if (/^@\w+/v.test(afterIndent)) { + // Count newlines before this line + const precedingText = lines.slice(0, lineIndex).join('\n'); + const lineBreaks = precedingText.match(/\n/gv) || []; + report('There must be no indentation.', null, { + line: lineBreaks.length + 1, + }); + return; + } + + // If we haven't seen any content yet (main description first line) and there's content, report + if (!hasSeenContent && afterIndent.trim().length > 0) { + // Count newlines before this line + const precedingText = lines.slice(0, lineIndex).join('\n'); + const lineBreaks = precedingText.match(/\n/gv) || []; + report('There must be no indentation.', null, { + line: lineBreaks.length + 1, + }); + return; + } + + // Otherwise, allow it (continuation lines) + } + + // Track if we've seen any content (non-whitespace after the *) + if (/^\s*\*\s+\S/v.test(line)) { + hasSeenContent = true; + } + } + } else { + const reg = /^(?:\/?\**|[ \t]*)\*[ \t]{2}/gmv; + if (reg.test(text)) { + const lineBreaks = text.slice(0, reg.lastIndex).match(/\n/gv) || []; + report('There must be no indentation.', null, { + line: lineBreaks.length, + }); + } } }, { iterateAllJsdocs: true, @@ -59,6 +109,10 @@ export default iterateJsdoc(({ { additionalProperties: false, properties: { + allowIndentedSections: { + description: 'Allows indentation of nested sections on subsequent lines (like bullet lists)', + type: 'boolean', + }, excludeTags: { description: `Array of tags (e.g., \`['example', 'description']\`) whose content will be "hidden" from the \`check-indentation\` rule. Defaults to \`['example']\`. diff --git a/test/rules/assertions/checkIndentation.js b/test/rules/assertions/checkIndentation.js index 90c8cc8ce..b51952c4d 100644 --- a/test/rules/assertions/checkIndentation.js +++ b/test/rules/assertions/checkIndentation.js @@ -194,6 +194,63 @@ export default /** @type {import('../index.js').TestCases} */ ({ }, ], }, + { + code: ` + /** + * @param {number} val Still disallowed + */ + `, + errors: [ + { + line: 3, + message: 'There must be no indentation.', + }, + ], + options: [ + { + allowIndentedSections: true, + }, + ], + }, + { + code: ` + /** + * Disallowed + * Indentation + */ + `, + errors: [ + { + line: 3, + message: 'There must be no indentation.', + }, + ], + options: [ + { + allowIndentedSections: true, + }, + ], + }, + { + code: ` + /** + * Some text + * that is indented + * but is inconsistent + */ + `, + errors: [ + { + line: 5, + message: 'There must be no indentation.', + }, + ], + options: [ + { + allowIndentedSections: true, + }, + ], + }, ], valid: [ { @@ -349,5 +406,62 @@ export default /** @type {import('../index.js').TestCases} */ ({ parser: typescriptEslintParser, }, }, + { + code: ` + /** + * Foobar + * + * This method does the following things: + * - foo... + * this is the first step + * - bar + * this is the second step + */ + `, + options: [ + { + allowIndentedSections: true, + }, + ], + }, + { + code: ` + /** + * Allowed + * Indentation + */ + `, + options: [ + { + allowIndentedSections: true, + }, + ], + }, + { + code: ` + /** + * @param {number} val Multi- + * line + */ + `, + options: [ + { + allowIndentedSections: true, + }, + ], + }, + { + code: ` + /** + * - foo: + * - bar + */ + `, + options: [ + { + allowIndentedSections: true, + }, + ], + }, ], }); From 03adf63ba11b0be6ba67e096bc246af97c378e58 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Wed, 19 Nov 2025 05:21:31 -0700 Subject: [PATCH 181/189] refactor: forbid inconsistent indentation with new option --- docs/rules/check-indentation.md | 36 +++++++++++++ src/rules/checkIndentation.js | 48 ++++++++++++++---- test/rules/assertions/checkIndentation.js | 61 +++++++++++++++++++++++ 3 files changed, 135 insertions(+), 10 deletions(-) diff --git a/docs/rules/check-indentation.md b/docs/rules/check-indentation.md index e44e0ebd0..a72efc131 100644 --- a/docs/rules/check-indentation.md +++ b/docs/rules/check-indentation.md @@ -199,6 +199,19 @@ function quux () { */ // "jsdoc/check-indentation": ["error"|"warn", {"allowIndentedSections":true}] // Message: There must be no indentation. + +/** + * Some text + * that is indented + * but is inconsistent + */ +// "jsdoc/check-indentation": ["error"|"warn", {"allowIndentedSections":true}] +// Message: There must be no indentation. + +/** Indented on first line + */ +// "jsdoc/check-indentation": ["error"|"warn", {"allowIndentedSections":true}] +// Message: There must be no indentation. ```` @@ -342,5 +355,28 @@ function MyDecorator(options: { myOptions: number }) { * - bar */ // "jsdoc/check-indentation": ["error"|"warn", {"allowIndentedSections":true}] + +/** + * Some text + * that is indented + * and continues at same level + * and increases further + */ +// "jsdoc/check-indentation": ["error"|"warn", {"allowIndentedSections":true}] + +/** + * Description + * @param {string} foo Param + * with continuation + * at same indentation + */ +// "jsdoc/check-indentation": ["error"|"warn", {"allowIndentedSections":true}] + +/** + * Description + * + * More content + */ +// "jsdoc/check-indentation": ["error"|"warn", {"allowIndentedSections":true}] ```` diff --git a/src/rules/checkIndentation.js b/src/rules/checkIndentation.js index d246a8d0e..6e6f2b9bc 100644 --- a/src/rules/checkIndentation.js +++ b/src/rules/checkIndentation.js @@ -25,6 +25,17 @@ const maskCodeBlocks = (str) => { }); }; +/** + * @param {string[]} lines + * @param {number} lineIndex + * @returns {number} + */ +const getLineNumber = (lines, lineIndex) => { + const precedingText = lines.slice(0, lineIndex).join('\n'); + const lineBreaks = precedingText.match(/\n/gv) || []; + return lineBreaks.length + 1; +}; + export default iterateJsdoc(({ context, jsdocNode, @@ -47,47 +58,64 @@ export default iterateJsdoc(({ // and the very first line of the main description const lines = text.split('\n'); let hasSeenContent = false; + let currentSectionIndent = null; for (const [ lineIndex, line, ] of lines.entries()) { // Check for indentation (two or more spaces after *) - const indentMatch = line.match(/^(?:\/?\**|[\t ]*)\*([\t ]{2,})/gv); + const indentMatch = line.match(/^(?:\/?\**|[\t ]*)\*([\t ]{2,})/v); if (indentMatch) { // Check what comes after the indentation const afterIndent = line.slice(indentMatch[0].length); + const indentAmount = indentMatch[1].length; // If this is a tag line with indentation, always report if (/^@\w+/v.test(afterIndent)) { - // Count newlines before this line - const precedingText = lines.slice(0, lineIndex).join('\n'); - const lineBreaks = precedingText.match(/\n/gv) || []; report('There must be no indentation.', null, { - line: lineBreaks.length + 1, + line: getLineNumber(lines, lineIndex), }); return; } // If we haven't seen any content yet (main description first line) and there's content, report if (!hasSeenContent && afterIndent.trim().length > 0) { - // Count newlines before this line - const precedingText = lines.slice(0, lineIndex).join('\n'); - const lineBreaks = precedingText.match(/\n/gv) || []; report('There must be no indentation.', null, { - line: lineBreaks.length + 1, + line: getLineNumber(lines, lineIndex), }); return; } - // Otherwise, allow it (continuation lines) + // For continuation lines, check consistency + if (hasSeenContent && afterIndent.trim().length > 0) { + if (currentSectionIndent === null) { + // First indented line in this section, set the indent level + currentSectionIndent = indentAmount; + } else if (indentAmount < currentSectionIndent) { + // Indentation is less than the established level (inconsistent) + report('There must be no indentation.', null, { + line: getLineNumber(lines, lineIndex), + }); + return; + } + } + } else if (/^\s*\*\s+\S/v.test(line)) { + // No indentation on this line, reset section indent tracking + // (unless it's just whitespace or a closing comment) + currentSectionIndent = null; } // Track if we've seen any content (non-whitespace after the *) if (/^\s*\*\s+\S/v.test(line)) { hasSeenContent = true; } + + // Reset section indent when we encounter a tag + if (/@\w+/v.test(line)) { + currentSectionIndent = null; + } } } else { const reg = /^(?:\/?\**|[ \t]*)\*[ \t]{2}/gmv; diff --git a/test/rules/assertions/checkIndentation.js b/test/rules/assertions/checkIndentation.js index b51952c4d..7521bafc4 100644 --- a/test/rules/assertions/checkIndentation.js +++ b/test/rules/assertions/checkIndentation.js @@ -251,6 +251,23 @@ export default /** @type {import('../index.js').TestCases} */ ({ }, ], }, + { + code: ` + /** Indented on first line + */ + `, + errors: [ + { + line: 3, + message: 'There must be no indentation.', + }, + ], + options: [ + { + allowIndentedSections: true, + }, + ], + }, ], valid: [ { @@ -463,5 +480,49 @@ export default /** @type {import('../index.js').TestCases} */ ({ }, ], }, + { + code: ` + /** + * Some text + * that is indented + * and continues at same level + * and increases further + */ + `, + options: [ + { + allowIndentedSections: true, + }, + ], + }, + { + code: ` + /** + * Description + * @param {string} foo Param + * with continuation + * at same indentation + */ + `, + options: [ + { + allowIndentedSections: true, + }, + ], + }, + { + code: ` + /** + * Description + * + * More content + */ + `, + options: [ + { + allowIndentedSections: true, + }, + ], + }, ], }); From 99c7fbd09e7ca17037c745216478ef368e6c51ac Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Wed, 19 Nov 2025 06:29:20 -0700 Subject: [PATCH 182/189] feat: add `require-rejects` rule; fixes #755 --- .README/README.md | 6 + .README/rules/require-rejects.md | 24 ++ .README/rules/require-throws.md | 10 +- README.md | 7 + docs/rules/require-rejects.md | 356 +++++++++++++++++ docs/rules/require-throws.md | 10 +- eslint.config.js | 6 + src/index-cjs.js | 3 + src/index-esm.js | 5 + src/index.js | 8 + src/rules.d.ts | 33 ++ src/rules/checkTagNames.js | 6 +- src/rules/requireRejects.js | 242 ++++++++++++ test/index.js | 10 + test/rules/assertions/requireRejects.js | 489 ++++++++++++++++++++++++ test/rules/ruleNames.json | 1 + 16 files changed, 1206 insertions(+), 10 deletions(-) create mode 100644 .README/rules/require-rejects.md create mode 100644 docs/rules/require-rejects.md create mode 100644 src/rules/requireRejects.js create mode 100644 test/rules/assertions/requireRejects.js diff --git a/.README/README.md b/.README/README.md index 87b62422d..94c037978 100644 --- a/.README/README.md +++ b/.README/README.md @@ -84,6 +84,11 @@ export default [ 'type', ], }, + rejects: { + required: [ + 'type', + ], + }, }, */ } @@ -262,6 +267,7 @@ Finally, enable all of the rules that you would like to use. "jsdoc/require-property-name": 1, // Recommended "jsdoc/require-property-type": 1, // Recommended in non-TS configs "jsdoc/require-property": 1, // Recommended + "jsdoc/require-rejects": 1, // Recommended "jsdoc/require-returns-check": 1, // Recommended "jsdoc/require-returns-description": 1, // Recommended "jsdoc/require-returns-type": 1, // Recommended in non-TS configs diff --git a/.README/rules/require-rejects.md b/.README/rules/require-rejects.md new file mode 100644 index 000000000..22c490865 --- /dev/null +++ b/.README/rules/require-rejects.md @@ -0,0 +1,24 @@ +# `require-rejects` + +Requires a (non-standard) `@rejects` tag be added for detectable `Promise` +rejections. + +## Options + +{"gitdown": "options"} + +||| +|---|---| +|Context|everywhere| +|Tags|``| +|Recommended|false| +|Settings|| +|Options|`contexts`, `exemptedBy`| + +## Failing examples + + + +## Passing examples + + diff --git a/.README/rules/require-throws.md b/.README/rules/require-throws.md index 2a32ffb0b..ce75eee97 100644 --- a/.README/rules/require-throws.md +++ b/.README/rules/require-throws.md @@ -4,13 +4,15 @@ Requires that throw statements are documented. -Note that since throw statements within async functions end up as rejected -Promises, they are not considered as throw statements for the purposes of this -rule. See [issue 755](https://github.com/gajus/eslint-plugin-jsdoc/issues/755) -for our desire for a separate tag to document rejection types and see +See [this discussion](https://stackoverflow.com/questions/50071115/typescript-promise-rejection-type) on why TypeScript doesn't offer such a feature. +Note that since throw statements within async functions end up as rejected +`Promise`'s, they are not considered as throw statements for the purposes of +this rule. See the `require-rejects` rule for a non-standard way to document +`Promise` rejections. + ## Options {"gitdown": "options"} diff --git a/README.md b/README.md index 2b6a2be99..ad0089e66 100644 --- a/README.md +++ b/README.md @@ -103,6 +103,11 @@ export default [ 'type', ], }, + rejects: { + required: [ + 'type', + ], + }, }, */ } @@ -289,6 +294,7 @@ Finally, enable all of the rules that you would like to use. "jsdoc/require-property-name": 1, // Recommended "jsdoc/require-property-type": 1, // Recommended in non-TS configs "jsdoc/require-property": 1, // Recommended + "jsdoc/require-rejects": 1, // Recommended "jsdoc/require-returns-check": 1, // Recommended "jsdoc/require-returns-description": 1, // Recommended "jsdoc/require-returns-type": 1, // Recommended in non-TS configs @@ -484,6 +490,7 @@ non-default-recommended fixer). |:heavy_check_mark:|| [require-property-description](./docs/rules/require-property-description.md#readme) | Requires that each `@property` tag has a `description` value. | |:heavy_check_mark:|| [require-property-name](./docs/rules/require-property-name.md#readme) | Requires that all `@property` tags have names. | |:heavy_check_mark: (Off in TS; On in TS flavor)|| [require-property-type](./docs/rules/require-property-type.md#readme) | Requires that each `@property` tag has a type value (in curly brackets). | +||| [require-rejects](./docs/rules/require-rejects.md#readme) | Requires that Promise rejections are documented with `@rejects` tags. | |:heavy_check_mark:|:wrench:| [require-returns](./docs/rules/require-returns.md#readme) | Requires that returns are documented with `@returns`. | |:heavy_check_mark:|| [require-returns-check](./docs/rules/require-returns-check.md#readme) | Requires a return statement in function body if a `@returns` tag is specified in JSDoc comment(and reports if multiple `@returns` tags are present). | |:heavy_check_mark:|| [require-returns-description](./docs/rules/require-returns-description.md#readme) | Requires that the `@returns` tag has a `description` value (not including `void`/`undefined` type returns). | diff --git a/docs/rules/require-rejects.md b/docs/rules/require-rejects.md new file mode 100644 index 000000000..0e2233cd8 --- /dev/null +++ b/docs/rules/require-rejects.md @@ -0,0 +1,356 @@ + + +# require-rejects + +Requires a (non-standard) `@rejects` tag be added for detectable `Promise` +rejections. + + + +## Options + +A single options object has the following properties. + + + +### contexts + +Set this to an array of strings representing the AST context +(or objects with optional `context` and `comment` properties) where you wish +the rule to be applied. + +`context` defaults to `any` and `comment` defaults to no specific comment context. + +Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`, +`FunctionExpression`). + + + +### exemptedBy + +Array of tags (e.g., `['type']`) whose presence on the +document block avoids the need for a `@rejects`. Defaults to an array +with `abstract`, `virtual`, and `type`. If you set this array, it will overwrite the default, +so be sure to add back those tags if you wish their presence to cause +exemption of the rule. + + +||| +|---|---| +|Context|everywhere| +|Tags|``| +|Recommended|false| +|Settings|| +|Options|`contexts`, `exemptedBy`| + + + +## Failing examples + +The following patterns are considered problems: + +````ts +/** + * + */ +async function quux () { + throw new Error('abc'); +} +// Message: Promise-rejecting function requires `@reject` tag + +/** + * + */ +const quux = async () => { + throw new Error('abc'); +}; +// Message: Promise-rejecting function requires `@reject` tag + +/** + * + */ +const quux = async function () { + throw new Error('abc'); +}; +// Message: Promise-rejecting function requires `@reject` tag + +/** + * + */ +async function quux () { + try { + await sthAsync(); + } catch (err) { + if (cond) { + throw err; + } + } +} +// Message: Promise-rejecting function requires `@reject` tag + +/** + * + */ +function quux () { + return new Promise((resolve, reject) => { + reject(new Error('abc')); + }); +} +// Message: Promise-rejecting function requires `@reject` tag + +/** + * + */ +async function quux () { + if (cond) { + throw new Error('abc'); + } +} +// Message: Promise-rejecting function requires `@reject` tag + +/** + * + */ +async function quux () { + function inner () { + if (cond) { + throw new Error('abc'); + } + } + inner(); +} +// Message: Promise-rejecting function requires `@reject` tag + +/** + * + */ +async function quux () { + return Promise.reject(new Error('abc')); +} +// Message: Promise-rejecting function requires `@reject` tag + +/** + * + */ +function quux () { + if (cond) { + return Promise.reject(new Error('abc')); + } +} +// Message: Promise-rejecting function requires `@reject` tag + +/** + * + */ +async function quux () { + for (let i = 0; i < 10; i++) { + if (i > 5) { + throw new Error('abc'); + } + } +} +// Message: Promise-rejecting function requires `@reject` tag + +/** + * + */ +async function quux () { + while (cond) { + throw new Error('abc'); + } +} +// Message: Promise-rejecting function requires `@reject` tag + +/** + * + */ +async function quux () { + switch (val) { + case 1: + throw new Error('abc'); + case 2: + break; + } +} +// Message: Promise-rejecting function requires `@reject` tag + +/** + * + */ +async function quux () { + const arr = [1, 2, 3]; + for (const item of arr) { + if (item > 2) { + throw new Error('abc'); + } + } +} +// Message: Promise-rejecting function requires `@reject` tag + +/** + * + */ +async function quux () { + const obj = {a: 1, b: 2}; + for (const key in obj) { + if (key === 'a') { + throw new Error('abc'); + } + } +} +// Message: Promise-rejecting function requires `@reject` tag + +/** + * + */ +async function quux () { + do { + throw new Error('abc'); + } while (cond); +} +// Message: Promise-rejecting function requires `@reject` tag + +/** + * + */ +async function quux () { + label: { + throw new Error('abc'); + } +} +// Message: Promise-rejecting function requires `@reject` tag + +/** + * + */ +async function quux () { + try { + doSomething(); + } finally { + throw new Error('cleanup failed'); + } +} +// Message: Promise-rejecting function requires `@reject` tag +```` + + + + + +## Passing examples + +The following patterns are not considered problems: + +````ts +/** + * @rejects {Error} + */ +async function quux () { + throw new Error('abc'); +} + +/** + * @abstract + */ +async function quux () { + throw new Error('abc'); +} + +/** + * + */ +function quux () { + return 42; +} + +/** + * + */ +async function quux () { + return await sthAsync(); +} + +/** + * + */ +async function quux () { + if (cond) { + return; + } +} + +/** + * + */ +async function quux () { + const obj = new SomeClass(); +} + +/** + * + */ +function quux () { + const p = new Promise(someVariable); +} + +/** + * + */ +function quux () { + return new Promise(someVariable); +} + +/** + * + */ +async function quux () { + someFunction(); +} + +/** + * + */ +async function quux () { + try { + doSomething(); + } catch (err) { + console.error(err); + } +} + +/** + * + */ +async function quux () { + try { + throw new Error('wholly caught'); + } catch (err) { + console.error(err); + } +} + +/** + * + */ +async function quux () { + if (cond) { + doSomething(); + } else { + doOtherThing(); + } +} + +/** + * @callback MyCallback + */ +// "jsdoc/require-rejects": ["error"|"warn", {"contexts":["any"]}] + +/** + * + */ +async function quux () { + throw new Error('abc'); +} +// Settings: {"jsdoc":{"tagNamePreference":{"rejects":false}}} +```` + diff --git a/docs/rules/require-throws.md b/docs/rules/require-throws.md index 9237d503a..b6d546574 100644 --- a/docs/rules/require-throws.md +++ b/docs/rules/require-throws.md @@ -12,13 +12,15 @@ Requires that throw statements are documented. -Note that since throw statements within async functions end up as rejected -Promises, they are not considered as throw statements for the purposes of this -rule. See [issue 755](https://github.com/gajus/eslint-plugin-jsdoc/issues/755) -for our desire for a separate tag to document rejection types and see +See [this discussion](https://stackoverflow.com/questions/50071115/typescript-promise-rejection-type) on why TypeScript doesn't offer such a feature. +Note that since throw statements within async functions end up as rejected +`Promise`'s, they are not considered as throw statements for the purposes of +this rule. See the `require-rejects` rule for a non-standard way to document +`Promise` rejections. + ## Options diff --git a/eslint.config.js b/eslint.config.js index 89de65fb9..c8c86711d 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -17,6 +17,12 @@ const common = { }; export default [ + { + ignores: [ + 'coverage', + 'dist', + ], + }, ...canonical, // ...canonicalJsdoc, jsdoc({ diff --git a/src/index-cjs.js b/src/index-cjs.js index 290da8447..195fb6091 100644 --- a/src/index-cjs.js +++ b/src/index-cjs.js @@ -54,6 +54,7 @@ import requireProperty from './rules/requireProperty.js'; import requirePropertyDescription from './rules/requirePropertyDescription.js'; import requirePropertyName from './rules/requirePropertyName.js'; import requirePropertyType from './rules/requirePropertyType.js'; +import requireRejects from './rules/requireRejects.js'; import requireReturns from './rules/requireReturns.js'; import requireReturnsCheck from './rules/requireReturnsCheck.js'; import requireReturnsDescription from './rules/requireReturnsDescription.js'; @@ -188,6 +189,7 @@ index.rules = { 'require-property-description': requirePropertyDescription, 'require-property-name': requirePropertyName, 'require-property-type': requirePropertyType, + 'require-rejects': requireRejects, 'require-returns': requireReturns, 'require-returns-check': requireReturnsCheck, 'require-returns-description': requireReturnsDescription, @@ -332,6 +334,7 @@ const createRecommendedRuleset = (warnOrError, flatName) => { 'jsdoc/require-property-description': warnOrError, 'jsdoc/require-property-name': warnOrError, 'jsdoc/require-property-type': warnOrError, + 'jsdoc/require-rejects': 'off', 'jsdoc/require-returns': warnOrError, 'jsdoc/require-returns-check': warnOrError, 'jsdoc/require-returns-description': warnOrError, diff --git a/src/index-esm.js b/src/index-esm.js index 148cdd74c..21e16c719 100644 --- a/src/index-esm.js +++ b/src/index-esm.js @@ -177,6 +177,11 @@ export const jsdoc = function (cfg) { 'type', ], }, + rejects: { + required: [ + 'type', + ], + }, }, } : {}, diff --git a/src/index.js b/src/index.js index 95f624f5e..0ec9468d8 100644 --- a/src/index.js +++ b/src/index.js @@ -60,6 +60,7 @@ import requireProperty from './rules/requireProperty.js'; import requirePropertyDescription from './rules/requirePropertyDescription.js'; import requirePropertyName from './rules/requirePropertyName.js'; import requirePropertyType from './rules/requirePropertyType.js'; +import requireRejects from './rules/requireRejects.js'; import requireReturns from './rules/requireReturns.js'; import requireReturnsCheck from './rules/requireReturnsCheck.js'; import requireReturnsDescription from './rules/requireReturnsDescription.js'; @@ -194,6 +195,7 @@ index.rules = { 'require-property-description': requirePropertyDescription, 'require-property-name': requirePropertyName, 'require-property-type': requirePropertyType, + 'require-rejects': requireRejects, 'require-returns': requireReturns, 'require-returns-check': requireReturnsCheck, 'require-returns-description': requireReturnsDescription, @@ -338,6 +340,7 @@ const createRecommendedRuleset = (warnOrError, flatName) => { 'jsdoc/require-property-description': warnOrError, 'jsdoc/require-property-name': warnOrError, 'jsdoc/require-property-type': warnOrError, + 'jsdoc/require-rejects': 'off', 'jsdoc/require-returns': warnOrError, 'jsdoc/require-returns-check': warnOrError, 'jsdoc/require-returns-description': warnOrError, @@ -883,6 +886,11 @@ export const jsdoc = function (cfg) { 'type', ], }, + rejects: { + required: [ + 'type', + ], + }, }, } : {}, diff --git a/src/rules.d.ts b/src/rules.d.ts index 3ee700908..885713f9f 100644 --- a/src/rules.d.ts +++ b/src/rules.d.ts @@ -2196,6 +2196,39 @@ export interface Rules { /** Requires that each `@property` tag has a type value (in curly brackets). */ "jsdoc/require-property-type": []; + /** Requires that Promise rejections are documented with `@rejects` tags. */ + "jsdoc/require-rejects": + | [] + | [ + { + /** + * Set this to an array of strings representing the AST context + * (or objects with optional `context` and `comment` properties) where you wish + * the rule to be applied. + * + * `context` defaults to `any` and `comment` defaults to no specific comment context. + * + * Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`, + * `FunctionExpression`). + */ + contexts?: ( + | string + | { + comment?: string; + context?: string; + } + )[]; + /** + * Array of tags (e.g., `['type']`) whose presence on the + * document block avoids the need for a `@rejects`. Defaults to an array + * with `abstract`, `virtual`, and `type`. If you set this array, it will overwrite the default, + * so be sure to add back those tags if you wish their presence to cause + * exemption of the rule. + */ + exemptedBy?: string[]; + } + ]; + /** Requires that returns are documented with `@returns`. */ "jsdoc/require-returns": | [] diff --git a/src/rules/checkTagNames.js b/src/rules/checkTagNames.js index 461028ca0..070389a9f 100644 --- a/src/rules/checkTagNames.js +++ b/src/rules/checkTagNames.js @@ -124,7 +124,8 @@ export default iterateJsdoc(({ */ const isInAmbientContext = (subNode) => { return subNode.type === 'Program' ? - context.getFilename().endsWith('.d.ts') : + /* c8 ignore next -- Support old ESLint */ + (context.filename ?? context.getFilename()).endsWith('.d.ts') : Boolean( /** @type {import('@typescript-eslint/types').TSESTree.VariableDeclaration} */ ( subNode @@ -149,7 +150,8 @@ export default iterateJsdoc(({ return false; } - if (context.getFilename().endsWith('.d.ts') && [ + /* c8 ignore next -- Support old ESLint */ + if ((context.filename ?? context.getFilename()).endsWith('.d.ts') && [ null, 'Program', undefined, ].includes(node?.parent?.type)) { return false; diff --git a/src/rules/requireRejects.js b/src/rules/requireRejects.js new file mode 100644 index 000000000..c23f0a391 --- /dev/null +++ b/src/rules/requireRejects.js @@ -0,0 +1,242 @@ +import iterateJsdoc from '../iterateJsdoc.js'; + +/** + * Checks if a node or its children contain Promise rejection patterns + * @param {import('eslint').Rule.Node} node + * @param {boolean} [innerFunction] + * @returns {boolean} + */ +// eslint-disable-next-line complexity -- Temporary +const hasRejectValue = (node, innerFunction) => { + if (!node) { + return false; + } + + switch (node.type) { + case 'ArrowFunctionExpression': + case 'FunctionDeclaration': + case 'FunctionExpression': { + // For inner functions in async contexts, check if they throw + // (they could be called and cause rejection) + if (innerFunction) { + // Check the inner function's body for throw statements + return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.body), false); + } + + return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.body), true); + } + + case 'BlockStatement': { + return node.body.some((bodyNode) => { + return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (bodyNode), innerFunction); + }); + } + + case 'CallExpression': { + // Check for Promise.reject() + if (node.callee.type === 'MemberExpression' && + node.callee.object.type === 'Identifier' && + node.callee.object.name === 'Promise' && + node.callee.property.type === 'Identifier' && + node.callee.property.name === 'reject') { + return true; + } + + // Check for reject() call (in Promise executor context) + if (node.callee.type === 'Identifier' && node.callee.name === 'reject') { + return true; + } + + // Check if this is calling an inner function that might reject + if (innerFunction && node.callee.type === 'Identifier') { + // We found a function call inside - check if it could be calling a function that rejects + // We'll handle this in function body traversal + return false; + } + + return false; + } + + case 'DoWhileStatement': + case 'ForInStatement': + case 'ForOfStatement': + case 'ForStatement': + case 'LabeledStatement': + case 'WhileStatement': + + case 'WithStatement': { + return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.body), innerFunction); + } + + case 'ExpressionStatement': { + return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.expression), innerFunction); + } + + case 'IfStatement': { + return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.consequent), innerFunction) || hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.alternate), innerFunction); + } + + case 'NewExpression': { + // Check for new Promise((resolve, reject) => { reject(...) }) + if (node.callee.type === 'Identifier' && node.callee.name === 'Promise' && node.arguments.length > 0) { + const executor = node.arguments[0]; + if (executor.type === 'ArrowFunctionExpression' || executor.type === 'FunctionExpression') { + // Check if the executor has reject() calls + return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (executor.body), false); + } + } + + return false; + } + + case 'ReturnStatement': { + if (node.argument) { + return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.argument), innerFunction); + } + + return false; + } + + case 'SwitchStatement': { + return node.cases.some( + (someCase) => { + return someCase.consequent.some((nde) => { + return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (nde), innerFunction); + }); + }, + ); + } + + // Throw statements in async functions become rejections + case 'ThrowStatement': { + return true; + } + + case 'TryStatement': { + return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.handler && node.handler.body), innerFunction) || + hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.finalizer), innerFunction); + } + + default: { + return false; + } + } +}; + +/** + * We can skip checking for a rejects value, in case the documentation is inherited + * or the method is abstract. + * @param {import('../iterateJsdoc.js').Utils} utils + * @returns {boolean} + */ +const canSkip = (utils) => { + return utils.hasATag([ + 'abstract', + 'virtual', + 'type', + ]) || + utils.avoidDocs(); +}; + +export default iterateJsdoc(({ + node, + report, + utils, +}) => { + if (canSkip(utils)) { + return; + } + + const tagName = /** @type {string} */ (utils.getPreferredTagName({ + tagName: 'rejects', + })); + if (!tagName) { + return; + } + + const tags = utils.getTags(tagName); + const iteratingFunction = utils.isIteratingFunction(); + + const [ + tag, + ] = tags; + const missingRejectsTag = typeof tag === 'undefined' || tag === null; + + const shouldReport = () => { + if (!missingRejectsTag) { + return false; + } + + // Check if this is an async function or returns a Promise + const isAsync = utils.isAsync(); + if (!isAsync && !iteratingFunction) { + return false; + } + + // For async functions, check for throw statements + // For regular functions, check for Promise.reject or reject calls + return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node)); + }; + + if (shouldReport()) { + report('Promise-rejecting function requires `@reject` tag'); + } +}, { + contextDefaults: true, + meta: { + docs: { + description: 'Requires that Promise rejections are documented with `@rejects` tags.', + url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-rejects.md#repos-sticky-header', + }, + schema: [ + { + additionalProperties: false, + properties: { + contexts: { + description: `Set this to an array of strings representing the AST context +(or objects with optional \`context\` and \`comment\` properties) where you wish +the rule to be applied. + +\`context\` defaults to \`any\` and \`comment\` defaults to no specific comment context. + +Overrides the default contexts (\`ArrowFunctionExpression\`, \`FunctionDeclaration\`, +\`FunctionExpression\`).`, + items: { + anyOf: [ + { + type: 'string', + }, + { + additionalProperties: false, + properties: { + comment: { + type: 'string', + }, + context: { + type: 'string', + }, + }, + type: 'object', + }, + ], + }, + type: 'array', + }, + exemptedBy: { + description: `Array of tags (e.g., \`['type']\`) whose presence on the +document block avoids the need for a \`@rejects\`. Defaults to an array +with \`abstract\`, \`virtual\`, and \`type\`. If you set this array, it will overwrite the default, +so be sure to add back those tags if you wish their presence to cause +exemption of the rule.`, + items: { + type: 'string', + }, + type: 'array', + }, + }, + type: 'object', + }, + ], + type: 'suggestion', + }, +}); diff --git a/test/index.js b/test/index.js index 3b93cafc7..8b9c3acb4 100644 --- a/test/index.js +++ b/test/index.js @@ -125,6 +125,11 @@ describe('jsdoc()', () => { 'type', ], }, + rejects: { + required: [ + 'type', + ], + }, }, }, }); @@ -153,6 +158,11 @@ describe('jsdoc()', () => { 'type', ], }, + rejects: { + required: [ + 'type', + ], + }, see: { name: 'namepath-referencing', required: [ diff --git a/test/rules/assertions/requireRejects.js b/test/rules/assertions/requireRejects.js new file mode 100644 index 000000000..ae2c12524 --- /dev/null +++ b/test/rules/assertions/requireRejects.js @@ -0,0 +1,489 @@ +export default { + invalid: [ + { + code: ` + /** + * + */ + async function quux () { + throw new Error('abc'); + } + `, + errors: [ + { + line: 2, + message: 'Promise-rejecting function requires `@reject` tag', + }, + ], + }, + { + code: ` + /** + * + */ + const quux = async () => { + throw new Error('abc'); + }; + `, + errors: [ + { + line: 2, + message: 'Promise-rejecting function requires `@reject` tag', + }, + ], + }, + { + code: ` + /** + * + */ + const quux = async function () { + throw new Error('abc'); + }; + `, + errors: [ + { + line: 2, + message: 'Promise-rejecting function requires `@reject` tag', + }, + ], + }, + { + code: ` + /** + * + */ + async function quux () { + try { + await sthAsync(); + } catch (err) { + if (cond) { + throw err; + } + } + } + `, + errors: [ + { + line: 2, + message: 'Promise-rejecting function requires `@reject` tag', + }, + ], + }, + { + code: ` + /** + * + */ + function quux () { + return new Promise((resolve, reject) => { + reject(new Error('abc')); + }); + } + `, + errors: [ + { + line: 2, + message: 'Promise-rejecting function requires `@reject` tag', + }, + ], + }, + { + code: ` + /** + * + */ + async function quux () { + if (cond) { + throw new Error('abc'); + } + } + `, + errors: [ + { + line: 2, + message: 'Promise-rejecting function requires `@reject` tag', + }, + ], + }, + { + code: ` + /** + * + */ + async function quux () { + function inner () { + if (cond) { + throw new Error('abc'); + } + } + inner(); + } + `, + errors: [ + { + line: 2, + message: 'Promise-rejecting function requires `@reject` tag', + }, + ], + }, + { + code: ` + /** + * + */ + async function quux () { + return Promise.reject(new Error('abc')); + } + `, + errors: [ + { + line: 2, + message: 'Promise-rejecting function requires `@reject` tag', + }, + ], + }, + { + code: ` + /** + * + */ + function quux () { + if (cond) { + return Promise.reject(new Error('abc')); + } + } + `, + errors: [ + { + line: 2, + message: 'Promise-rejecting function requires `@reject` tag', + }, + ], + }, + { + code: ` + /** + * + */ + async function quux () { + for (let i = 0; i < 10; i++) { + if (i > 5) { + throw new Error('abc'); + } + } + } + `, + errors: [ + { + line: 2, + message: 'Promise-rejecting function requires `@reject` tag', + }, + ], + }, + { + code: ` + /** + * + */ + async function quux () { + while (cond) { + throw new Error('abc'); + } + } + `, + errors: [ + { + line: 2, + message: 'Promise-rejecting function requires `@reject` tag', + }, + ], + }, + { + code: ` + /** + * + */ + async function quux () { + switch (val) { + case 1: + throw new Error('abc'); + case 2: + break; + } + } + `, + errors: [ + { + line: 2, + message: 'Promise-rejecting function requires `@reject` tag', + }, + ], + }, + { + code: ` + /** + * + */ + async function quux () { + const arr = [1, 2, 3]; + for (const item of arr) { + if (item > 2) { + throw new Error('abc'); + } + } + } + `, + errors: [ + { + line: 2, + message: 'Promise-rejecting function requires `@reject` tag', + }, + ], + }, + { + code: ` + /** + * + */ + async function quux () { + const obj = {a: 1, b: 2}; + for (const key in obj) { + if (key === 'a') { + throw new Error('abc'); + } + } + } + `, + errors: [ + { + line: 2, + message: 'Promise-rejecting function requires `@reject` tag', + }, + ], + }, + { + code: ` + /** + * + */ + async function quux () { + do { + throw new Error('abc'); + } while (cond); + } + `, + errors: [ + { + line: 2, + message: 'Promise-rejecting function requires `@reject` tag', + }, + ], + }, + { + code: ` + /** + * + */ + async function quux () { + label: { + throw new Error('abc'); + } + } + `, + errors: [ + { + line: 2, + message: 'Promise-rejecting function requires `@reject` tag', + }, + ], + }, + { + code: ` + /** + * + */ + async function quux () { + try { + doSomething(); + } finally { + throw new Error('cleanup failed'); + } + } + `, + errors: [ + { + line: 2, + message: 'Promise-rejecting function requires `@reject` tag', + }, + ], + }, + ], + valid: [ + { + code: ` + /** + * @rejects {Error} + */ + async function quux () { + throw new Error('abc'); + } + `, + }, + { + code: ` + /** + * @abstract + */ + async function quux () { + throw new Error('abc'); + } + `, + }, + { + code: ` + /** + * + */ + function quux () { + return 42; + } + `, + }, + { + code: ` + /** + * + */ + async function quux () { + return await sthAsync(); + } + `, + }, + { + code: ` + /** + * + */ + async function quux () { + if (cond) { + return; + } + } + `, + }, + { + code: ` + /** + * + */ + async function quux () { + const obj = new SomeClass(); + } + `, + }, + { + code: ` + /** + * + */ + function quux () { + const p = new Promise(someVariable); + } + `, + }, + { + code: ` + /** + * + */ + function quux () { + return new Promise(someVariable); + } + `, + }, + { + code: ` + /** + * + */ + async function quux () { + someFunction(); + } + `, + }, + { + code: ` + /** + * + */ + async function quux () { + try { + doSomething(); + } catch (err) { + console.error(err); + } + } + `, + }, + { + code: ` + /** + * + */ + async function quux () { + try { + throw new Error('wholly caught'); + } catch (err) { + console.error(err); + } + } + `, + }, + { + code: ` + /** + * + */ + async function quux () { + if (cond) { + doSomething(); + } else { + doOtherThing(); + } + } + `, + }, + { + code: ` + /** + * @callback MyCallback + */ + `, + options: [ + { + contexts: [ + 'any', + ], + }, + ], + }, + { + code: ` + /** + * + */ + async function quux () { + throw new Error('abc'); + } + `, + settings: { + jsdoc: { + tagNamePreference: { + rejects: false, + }, + }, + }, + }, + ], +}; diff --git a/test/rules/ruleNames.json b/test/rules/ruleNames.json index 4d738b848..907ad5f8d 100644 --- a/test/rules/ruleNames.json +++ b/test/rules/ruleNames.json @@ -50,6 +50,7 @@ "require-property-description", "require-property-name", "require-property-type", + "require-rejects", "require-returns", "require-returns-check", "require-returns-description", From 30b633582ce81de67ce393ef23ee8e5772a38e36 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 20 Nov 2025 20:52:04 +0000 Subject: [PATCH 183/189] Add support for preserving list indentation in check-line-alignment (never mode) Co-authored-by: brettz9 <20234+brettz9@users.noreply.github.com> --- src/alignTransform.js | 59 ++++++++++++++++- src/rules/checkLineAlignment.js | 60 ++++++++++++++++- test/rules/assertions/checkLineAlignment.js | 73 +++++++++++++++++++++ 3 files changed, 190 insertions(+), 2 deletions(-) diff --git a/src/alignTransform.js b/src/alignTransform.js index 541832b18..fcddaae7d 100644 --- a/src/alignTransform.js +++ b/src/alignTransform.js @@ -9,6 +9,27 @@ import { util, } from 'comment-parser'; +/** + * Detects if a line starts with a markdown list marker + * Supports: -, *, numbered lists (1., 2., etc.) + * This explicitly excludes hyphens that are part of JSDoc tag syntax + * @param {string} text - The text to check + * @param {boolean} isFirstLineOfTag - True if this is the first line (tag line) + * @returns {boolean} - True if the text starts with a list marker + */ +const startsWithListMarker = (text, isFirstLineOfTag = false) => { + // On the first line of a tag, the hyphen is typically the JSDoc separator, + // not a list marker + if (isFirstLineOfTag) { + return false; + } + + // Match lines that start with optional whitespace, then a list marker + // - or * followed by a space + // or a number followed by . or ) and a space + return /^\s*(?:[\-*]|\d+(?:\.|\)))\s+/v.test(text); +}; + /** * @typedef {{ * hasNoTypes: boolean, @@ -315,9 +336,45 @@ const alignTransform = ({ // Not align. if (shouldAlign(tags, index, source)) { + // Save original postDelimiter before alignTokens modifies it + const originalPostDelimiter = tokens.postDelimiter; + // Remove the delimiter space + const originalIndent = tokens.postDelimiter.slice(1); + alignTokens(tokens, typelessInfo); + if (!disableWrapIndent && indentTag) { - tokens.postDelimiter += wrapIndent; + // Preserve extra indentation for list continuation lines + // Check if any previous line (or current) in the current tag has a list marker + let hasListMarker = false; + + // Find the start of the current tag + let tagStartIndex = index; + while (tagStartIndex > 0 && source[tagStartIndex].tokens.tag === '') { + tagStartIndex--; + } + + // Check all lines from tag start to current line for list markers + for (let idx = tagStartIndex; idx <= index; idx++) { + const isFirstLine = (idx === tagStartIndex); + if (source[idx]?.tokens?.description && startsWithListMarker(source[idx].tokens.description, isFirstLine)) { + hasListMarker = true; + break; + } + } + + // If we're in a list context and this line has extra indentation beyond wrapIndent, + // preserve the original indentation + const hasExtraIndent = originalIndent.length > wrapIndent.length && + originalIndent.startsWith(wrapIndent); + + if (hasListMarker && hasExtraIndent) { + // Preserve the original indentation completely + tokens.postDelimiter = originalPostDelimiter; + } else { + // Normal case: add wrapIndent after the aligned delimiter + tokens.postDelimiter += wrapIndent; + } } } diff --git a/src/rules/checkLineAlignment.js b/src/rules/checkLineAlignment.js index 10929b8a9..9d16e0358 100644 --- a/src/rules/checkLineAlignment.js +++ b/src/rules/checkLineAlignment.js @@ -8,6 +8,54 @@ const { flow: commentFlow, } = transforms; +/** + * Detects if a line starts with a markdown list marker + * Supports: -, *, numbered lists (1., 2., etc.) + * This explicitly excludes hyphens that are part of JSDoc tag syntax + * @param {string} text - The text to check + * @param {boolean} isFirstLineOfTag - True if this is the first line (tag line) + * @returns {boolean} - True if the text starts with a list marker + */ +const startsWithListMarker = (text, isFirstLineOfTag = false) => { + // On the first line of a tag, the hyphen is typically the JSDoc separator, + // not a list marker + if (isFirstLineOfTag) { + return false; + } + + // Match lines that start with optional whitespace, then a list marker + // - or * followed by a space + // or a number followed by . or ) and a space + return /^\s*(?:[\-*]|\d+(?:\.|\)))\s+/v.test(text); +}; + +/** + * Checks if we should allow extra indentation beyond wrapIndent. + * This is true for list continuation lines (lines with more indent than wrapIndent + * that follow a list item). + * @param {import('comment-parser').Spec} tag - The tag being checked + * @param {import('../iterateJsdoc.js').Integer} idx - Current line index (0-based in tag.source.slice(1)) + * @returns {boolean} - True if extra indentation should be allowed + */ +const shouldAllowExtraIndent = (tag, idx) => { + // Check if any previous line in this tag had a list marker + // idx is 0-based in the continuation lines (tag.source.slice(1)) + // So tag.source[0] is the tag line, tag.source[idx+1] is current line + let hasSeenListMarker = false; + + // Check all lines from the tag line onwards + for (let lineIdx = 0; lineIdx <= idx + 1; lineIdx++) { + const line = tag.source[lineIdx]; + const isFirstLine = lineIdx === 0; + if (line?.tokens?.description && startsWithListMarker(line.tokens.description, isFirstLine)) { + hasSeenListMarker = true; + break; + } + } + + return hasSeenListMarker; +}; + /** * @typedef {{ * postDelimiter: import('../iterateJsdoc.js').Integer, @@ -298,7 +346,17 @@ export default iterateJsdoc(({ } // Don't include a single separating space/tab - if (!disableWrapIndent && tokens.postDelimiter.slice(1) !== wrapIndent) { + const actualIndent = tokens.postDelimiter.slice(1); + const hasCorrectWrapIndent = actualIndent === wrapIndent; + + // Allow extra indentation if this line or previous lines contain list markers + // This preserves nested list structure + const hasExtraIndent = actualIndent.length > wrapIndent.length && + actualIndent.startsWith(wrapIndent); + const isInListContext = shouldAllowExtraIndent(tag, idx - 1); + + if (!disableWrapIndent && !hasCorrectWrapIndent && + !(hasExtraIndent && isInListContext)) { utils.reportJSDoc('Expected wrap indent', { line: tag.source[0].number + idx, }, () => { diff --git a/test/rules/assertions/checkLineAlignment.js b/test/rules/assertions/checkLineAlignment.js index 2f91fed7a..64c577f48 100644 --- a/test/rules/assertions/checkLineAlignment.js +++ b/test/rules/assertions/checkLineAlignment.js @@ -2167,5 +2167,78 @@ export default /** @type {import('../index.js').TestCases} */ ({ }, ], }, + // List indentation tests - should preserve nested list structure + { + code: ` + /** + * @return {Promise} A promise. + * - On success, resolves. + * - On error, rejects with details: + * - When aborted, textStatus is "abort". + * - On timeout, textStatus is "timeout". + */ + function test() {} + `, + options: [ + 'never', + { + wrapIndent: ' ', + }, + ], + }, + { + code: ` + /** + * @param {string} lorem Description with list: + * - First item + * - Second item + * - Nested item + * - Another nested item + */ + function test() {} + `, + options: [ + 'never', + { + wrapIndent: ' ', + }, + ], + }, + { + code: ` + /** + * @return {Promise} A promise. + * 1. First step + * 2. Second step with continuation + * on another line + * 3. Third step + */ + function test() {} + `, + options: [ + 'never', + { + wrapIndent: ' ', + }, + ], + }, + { + code: ` + /** + * @param {Object} options Configuration options. + * * First option + * * Second option with details: + * * Nested detail + * * Another detail + */ + function test() {} + `, + options: [ + 'never', + { + wrapIndent: ' ', + }, + ], + }, ], }); From 18e236ee2ce58990b659dc47f5b2ea39be8a5297 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 20 Nov 2025 20:57:31 +0000 Subject: [PATCH 184/189] Add support for preserving list indentation in check-line-alignment (never mode) Co-authored-by: brettz9 <20234+brettz9@users.noreply.github.com> --- src/alignTransform.js | 59 +------------------------------------------ 1 file changed, 1 insertion(+), 58 deletions(-) diff --git a/src/alignTransform.js b/src/alignTransform.js index fcddaae7d..541832b18 100644 --- a/src/alignTransform.js +++ b/src/alignTransform.js @@ -9,27 +9,6 @@ import { util, } from 'comment-parser'; -/** - * Detects if a line starts with a markdown list marker - * Supports: -, *, numbered lists (1., 2., etc.) - * This explicitly excludes hyphens that are part of JSDoc tag syntax - * @param {string} text - The text to check - * @param {boolean} isFirstLineOfTag - True if this is the first line (tag line) - * @returns {boolean} - True if the text starts with a list marker - */ -const startsWithListMarker = (text, isFirstLineOfTag = false) => { - // On the first line of a tag, the hyphen is typically the JSDoc separator, - // not a list marker - if (isFirstLineOfTag) { - return false; - } - - // Match lines that start with optional whitespace, then a list marker - // - or * followed by a space - // or a number followed by . or ) and a space - return /^\s*(?:[\-*]|\d+(?:\.|\)))\s+/v.test(text); -}; - /** * @typedef {{ * hasNoTypes: boolean, @@ -336,45 +315,9 @@ const alignTransform = ({ // Not align. if (shouldAlign(tags, index, source)) { - // Save original postDelimiter before alignTokens modifies it - const originalPostDelimiter = tokens.postDelimiter; - // Remove the delimiter space - const originalIndent = tokens.postDelimiter.slice(1); - alignTokens(tokens, typelessInfo); - if (!disableWrapIndent && indentTag) { - // Preserve extra indentation for list continuation lines - // Check if any previous line (or current) in the current tag has a list marker - let hasListMarker = false; - - // Find the start of the current tag - let tagStartIndex = index; - while (tagStartIndex > 0 && source[tagStartIndex].tokens.tag === '') { - tagStartIndex--; - } - - // Check all lines from tag start to current line for list markers - for (let idx = tagStartIndex; idx <= index; idx++) { - const isFirstLine = (idx === tagStartIndex); - if (source[idx]?.tokens?.description && startsWithListMarker(source[idx].tokens.description, isFirstLine)) { - hasListMarker = true; - break; - } - } - - // If we're in a list context and this line has extra indentation beyond wrapIndent, - // preserve the original indentation - const hasExtraIndent = originalIndent.length > wrapIndent.length && - originalIndent.startsWith(wrapIndent); - - if (hasListMarker && hasExtraIndent) { - // Preserve the original indentation completely - tokens.postDelimiter = originalPostDelimiter; - } else { - // Normal case: add wrapIndent after the aligned delimiter - tokens.postDelimiter += wrapIndent; - } + tokens.postDelimiter += wrapIndent; } } From da2c8727c89b1d25829215e1c81ef054aab4afc4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 20 Nov 2025 20:58:28 +0000 Subject: [PATCH 185/189] Add support for preserving list indentation in check-line-alignment (never mode) Co-authored-by: brettz9 <20234+brettz9@users.noreply.github.com> --- docs/rules/check-line-alignment.md | 40 ++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/docs/rules/check-line-alignment.md b/docs/rules/check-line-alignment.md index 08f2b11c9..3047713c6 100644 --- a/docs/rules/check-line-alignment.md +++ b/docs/rules/check-line-alignment.md @@ -1053,5 +1053,45 @@ function quux () { */ const fn = ( lorem ) => {} // "jsdoc/check-line-alignment": ["error"|"warn", "any",{"disableWrapIndent":true,"wrapIndent":" "}] + +/** + * @return {Promise} A promise. + * - On success, resolves. + * - On error, rejects with details: + * - When aborted, textStatus is "abort". + * - On timeout, textStatus is "timeout". + */ +function test() {} +// "jsdoc/check-line-alignment": ["error"|"warn", "never",{"wrapIndent":" "}] + +/** + * @param {string} lorem Description with list: + * - First item + * - Second item + * - Nested item + * - Another nested item + */ +function test() {} +// "jsdoc/check-line-alignment": ["error"|"warn", "never",{"wrapIndent":" "}] + +/** + * @return {Promise} A promise. + * 1. First step + * 2. Second step with continuation + * on another line + * 3. Third step + */ +function test() {} +// "jsdoc/check-line-alignment": ["error"|"warn", "never",{"wrapIndent":" "}] + +/** + * @param {Object} options Configuration options. + * * First option + * * Second option with details: + * * Nested detail + * * Another detail + */ +function test() {} +// "jsdoc/check-line-alignment": ["error"|"warn", "never",{"wrapIndent":" "}] ```` From af2d94086424890923e42a2d1a3ecf76757704c6 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 21 Nov 2025 14:16:51 +0000 Subject: [PATCH 186/189] Implement "always" mode support for list indentation preservation Co-authored-by: brettz9 <20234+brettz9@users.noreply.github.com> --- docs/rules/check-line-alignment.md | 30 +++++++ src/alignTransform.js | 88 ++++++++++++++++++++- test/rules/assertions/checkLineAlignment.js | 55 +++++++++++++ 3 files changed, 172 insertions(+), 1 deletion(-) diff --git a/docs/rules/check-line-alignment.md b/docs/rules/check-line-alignment.md index 3047713c6..d3ae7c6e1 100644 --- a/docs/rules/check-line-alignment.md +++ b/docs/rules/check-line-alignment.md @@ -1093,5 +1093,35 @@ function test() {} */ function test() {} // "jsdoc/check-line-alignment": ["error"|"warn", "never",{"wrapIndent":" "}] + +/** + * @param {string} param Description with list: + * - Item 1 + * - Nested item + */ +function test(param) {} +// "jsdoc/check-line-alignment": ["error"|"warn", "always",{"wrapIndent":" "}] + +/** + * Function description. + * + * @param {string} lorem Description. + * @param {int} sit Description with list: + * - First item + * - Second item + * - Nested item + */ +const fn = ( lorem, sit ) => {} +// "jsdoc/check-line-alignment": ["error"|"warn", "always",{"wrapIndent":" "}] + +/** + * @return {Promise} A promise. + * - On success, resolves. + * - On error, rejects with details: + * - When aborted, status is "abort". + * - On timeout, status is "timeout". + */ +function test() {} +// "jsdoc/check-line-alignment": ["error"|"warn", "always",{"wrapIndent":" "}] ```` diff --git a/src/alignTransform.js b/src/alignTransform.js index 541832b18..effe1e555 100644 --- a/src/alignTransform.js +++ b/src/alignTransform.js @@ -9,6 +9,27 @@ import { util, } from 'comment-parser'; +/** + * Detects if a line starts with a markdown list marker + * Supports: -, *, numbered lists (1., 2., etc.) + * This explicitly excludes hyphens that are part of JSDoc tag syntax + * @param {string} text - The text to check + * @param {boolean} isFirstLineOfTag - True if this is the first line (tag line) + * @returns {boolean} - True if the text starts with a list marker + */ +const startsWithListMarker = (text, isFirstLineOfTag = false) => { + // On the first line of a tag, the hyphen is typically the JSDoc separator, + // not a list marker + if (isFirstLineOfTag) { + return false; + } + + // Match lines that start with optional whitespace, then a list marker + // - or * followed by a space + // or a number followed by . or ) and a space + return /^\s*(?:[\-*]|\d+(?:\.|\)))\s+/v.test(text); +}; + /** * @typedef {{ * hasNoTypes: boolean, @@ -144,6 +165,59 @@ const space = (len) => { return ''.padStart(len, ' '); }; +/** + * Check if a tag or any of its lines contain list markers + * @param {import('./iterateJsdoc.js').Integer} index - Current line index + * @param {import('comment-parser').Line[]} source - All source lines + * @returns {{hasListMarker: boolean, tagStartIndex: import('./iterateJsdoc.js').Integer}} + */ +const checkForListMarkers = (index, source) => { + let hasListMarker = false; + let tagStartIndex = index; + while (tagStartIndex > 0 && source[tagStartIndex].tokens.tag === '') { + tagStartIndex--; + } + + for (let idx = tagStartIndex; idx <= index; idx++) { + const isFirstLine = (idx === tagStartIndex); + if (source[idx]?.tokens?.description && startsWithListMarker(source[idx].tokens.description, isFirstLine)) { + hasListMarker = true; + break; + } + } + + return { + hasListMarker, + tagStartIndex, + }; +}; + +/** + * Calculate extra indentation for list items relative to the first continuation line + * @param {import('./iterateJsdoc.js').Integer} index - Current line index + * @param {import('./iterateJsdoc.js').Integer} tagStartIndex - Index of the tag line + * @param {import('comment-parser').Line[]} source - All source lines + * @returns {string} - Extra indentation spaces + */ +const calculateListExtraIndent = (index, tagStartIndex, source) => { + // Find the first continuation line to use as baseline + let firstContinuationIndent = null; + for (let idx = tagStartIndex + 1; idx < source.length; idx++) { + if (source[idx].tokens.description && !source[idx].tokens.tag) { + firstContinuationIndent = source[idx].tokens.postDelimiter.length; + break; + } + } + + // Calculate the extra indentation of current line relative to the first continuation line + const currentOriginalIndent = source[index].tokens.postDelimiter.length; + const extraIndent = firstContinuationIndent !== null && currentOriginalIndent > firstContinuationIndent ? + ' '.repeat(currentOriginalIndent - firstContinuationIndent) : + ''; + + return extraIndent; +}; + /** * @param {{ * customSpacings: import('../src/rules/checkLineAlignment.js').CustomSpacings, @@ -316,8 +390,20 @@ const alignTransform = ({ // Not align. if (shouldAlign(tags, index, source)) { alignTokens(tokens, typelessInfo); + if (!disableWrapIndent && indentTag) { - tokens.postDelimiter += wrapIndent; + const { + hasListMarker, + tagStartIndex, + } = checkForListMarkers(index, source); + + if (hasListMarker && index > tagStartIndex) { + const extraIndent = calculateListExtraIndent(index, tagStartIndex, source); + tokens.postDelimiter += wrapIndent + extraIndent; + } else { + // Normal case: add wrapIndent after the aligned delimiter + tokens.postDelimiter += wrapIndent; + } } } diff --git a/test/rules/assertions/checkLineAlignment.js b/test/rules/assertions/checkLineAlignment.js index 64c577f48..621baccb8 100644 --- a/test/rules/assertions/checkLineAlignment.js +++ b/test/rules/assertions/checkLineAlignment.js @@ -2240,5 +2240,60 @@ export default /** @type {import('../index.js').TestCases} */ ({ }, ], }, + // Test cases for "always" mode with list indentation + { + code: ` + /** + * @param {string} param Description with list: + * - Item 1 + * - Nested item + */ + function test(param) {} + `, + options: [ + 'always', + { + wrapIndent: ' ', + }, + ], + }, + { + code: ` + /** + * Function description. + * + * @param {string} lorem Description. + * @param {int} sit Description with list: + * - First item + * - Second item + * - Nested item + */ + const fn = ( lorem, sit ) => {} + `, + options: [ + 'always', + { + wrapIndent: ' ', + }, + ], + }, + { + code: ` + /** + * @return {Promise} A promise. + * - On success, resolves. + * - On error, rejects with details: + * - When aborted, status is "abort". + * - On timeout, status is "timeout". + */ + function test() {} + `, + options: [ + 'always', + { + wrapIndent: ' ', + }, + ], + }, ], }); From f776d63e05cb38a82577157e841406a6cc90dea6 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sat, 22 Nov 2025 21:15:03 -0700 Subject: [PATCH 187/189] fix(`require-rejects`): do not treat synchronous throw as rejection; fixes #1603 --- docs/rules/require-rejects.md | 5 ++++ src/rules/requireRejects.js | 32 ++++++++++++++----------- test/rules/assertions/requireRejects.js | 20 ++++++++++++++-- 3 files changed, 41 insertions(+), 16 deletions(-) diff --git a/docs/rules/require-rejects.md b/docs/rules/require-rejects.md index 0e2233cd8..abbd899d0 100644 --- a/docs/rules/require-rejects.md +++ b/docs/rules/require-rejects.md @@ -352,5 +352,10 @@ async function quux () { throw new Error('abc'); } // Settings: {"jsdoc":{"tagNamePreference":{"rejects":false}}} + +/** @param bar Something. */ +export function foo(bar: string): void { + throw new Error(`some error: ${bar}`); +} ```` diff --git a/src/rules/requireRejects.js b/src/rules/requireRejects.js index c23f0a391..7938ee882 100644 --- a/src/rules/requireRejects.js +++ b/src/rules/requireRejects.js @@ -4,10 +4,11 @@ import iterateJsdoc from '../iterateJsdoc.js'; * Checks if a node or its children contain Promise rejection patterns * @param {import('eslint').Rule.Node} node * @param {boolean} [innerFunction] + * @param {boolean} [isAsync] * @returns {boolean} */ // eslint-disable-next-line complexity -- Temporary -const hasRejectValue = (node, innerFunction) => { +const hasRejectValue = (node, innerFunction, isAsync) => { if (!node) { return false; } @@ -19,16 +20,19 @@ const hasRejectValue = (node, innerFunction) => { // For inner functions in async contexts, check if they throw // (they could be called and cause rejection) if (innerFunction) { - // Check the inner function's body for throw statements - return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.body), false); + // Check inner functions for throws - if called from async context, throws become rejections + const innerIsAsync = node.async; + // Pass isAsync=true if the inner function is async OR if we're already in an async context + return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.body), false, innerIsAsync || isAsync); } - return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.body), true); + // This is the top-level function we're checking + return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.body), true, node.async); } case 'BlockStatement': { return node.body.some((bodyNode) => { - return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (bodyNode), innerFunction); + return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (bodyNode), innerFunction, isAsync); }); } @@ -65,15 +69,15 @@ const hasRejectValue = (node, innerFunction) => { case 'WhileStatement': case 'WithStatement': { - return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.body), innerFunction); + return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.body), innerFunction, isAsync); } case 'ExpressionStatement': { - return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.expression), innerFunction); + return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.expression), innerFunction, isAsync); } case 'IfStatement': { - return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.consequent), innerFunction) || hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.alternate), innerFunction); + return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.consequent), innerFunction, isAsync) || hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.alternate), innerFunction, isAsync); } case 'NewExpression': { @@ -82,7 +86,7 @@ const hasRejectValue = (node, innerFunction) => { const executor = node.arguments[0]; if (executor.type === 'ArrowFunctionExpression' || executor.type === 'FunctionExpression') { // Check if the executor has reject() calls - return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (executor.body), false); + return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (executor.body), false, false); } } @@ -91,7 +95,7 @@ const hasRejectValue = (node, innerFunction) => { case 'ReturnStatement': { if (node.argument) { - return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.argument), innerFunction); + return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.argument), innerFunction, isAsync); } return false; @@ -101,7 +105,7 @@ const hasRejectValue = (node, innerFunction) => { return node.cases.some( (someCase) => { return someCase.consequent.some((nde) => { - return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (nde), innerFunction); + return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (nde), innerFunction, isAsync); }); }, ); @@ -109,12 +113,12 @@ const hasRejectValue = (node, innerFunction) => { // Throw statements in async functions become rejections case 'ThrowStatement': { - return true; + return isAsync === true; } case 'TryStatement': { - return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.handler && node.handler.body), innerFunction) || - hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.finalizer), innerFunction); + return hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.handler && node.handler.body), innerFunction, isAsync) || + hasRejectValue(/** @type {import('eslint').Rule.Node} */ (node.finalizer), innerFunction, isAsync); } default: { diff --git a/test/rules/assertions/requireRejects.js b/test/rules/assertions/requireRejects.js index ae2c12524..6e611d784 100644 --- a/test/rules/assertions/requireRejects.js +++ b/test/rules/assertions/requireRejects.js @@ -1,4 +1,8 @@ -export default { +import { + parser as typescriptEslintParser, +} from 'typescript-eslint'; + +export default /** @type {import('../index.js').TestCases} */ ({ invalid: [ { code: ` @@ -485,5 +489,17 @@ export default { }, }, }, + { + code: ` + /** @param bar Something. */ + export function foo(bar: string): void { + throw new Error(\`some error: \${bar}\`); + } + `, + languageOptions: { + parser: typescriptEslintParser, + sourceType: 'module', + }, + }, ], -}; +}); From 44b263120a5837061765a9cdddc0b658c969dc85 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sat, 22 Nov 2025 22:17:40 -0700 Subject: [PATCH 188/189] fix(`require-rejects`): reflect proper tag name in error message --- docs/rules/require-rejects.md | 34 ++++++++++++------------- src/rules/requireRejects.js | 2 +- test/rules/assertions/requireRejects.js | 34 ++++++++++++------------- 3 files changed, 35 insertions(+), 35 deletions(-) diff --git a/docs/rules/require-rejects.md b/docs/rules/require-rejects.md index abbd899d0..0a8cb6fbb 100644 --- a/docs/rules/require-rejects.md +++ b/docs/rules/require-rejects.md @@ -56,7 +56,7 @@ The following patterns are considered problems: async function quux () { throw new Error('abc'); } -// Message: Promise-rejecting function requires `@reject` tag +// Message: Promise-rejecting function requires `@rejects` tag /** * @@ -64,7 +64,7 @@ async function quux () { const quux = async () => { throw new Error('abc'); }; -// Message: Promise-rejecting function requires `@reject` tag +// Message: Promise-rejecting function requires `@rejects` tag /** * @@ -72,7 +72,7 @@ const quux = async () => { const quux = async function () { throw new Error('abc'); }; -// Message: Promise-rejecting function requires `@reject` tag +// Message: Promise-rejecting function requires `@rejects` tag /** * @@ -86,7 +86,7 @@ async function quux () { } } } -// Message: Promise-rejecting function requires `@reject` tag +// Message: Promise-rejecting function requires `@rejects` tag /** * @@ -96,7 +96,7 @@ function quux () { reject(new Error('abc')); }); } -// Message: Promise-rejecting function requires `@reject` tag +// Message: Promise-rejecting function requires `@rejects` tag /** * @@ -106,7 +106,7 @@ async function quux () { throw new Error('abc'); } } -// Message: Promise-rejecting function requires `@reject` tag +// Message: Promise-rejecting function requires `@rejects` tag /** * @@ -119,7 +119,7 @@ async function quux () { } inner(); } -// Message: Promise-rejecting function requires `@reject` tag +// Message: Promise-rejecting function requires `@rejects` tag /** * @@ -127,7 +127,7 @@ async function quux () { async function quux () { return Promise.reject(new Error('abc')); } -// Message: Promise-rejecting function requires `@reject` tag +// Message: Promise-rejecting function requires `@rejects` tag /** * @@ -137,7 +137,7 @@ function quux () { return Promise.reject(new Error('abc')); } } -// Message: Promise-rejecting function requires `@reject` tag +// Message: Promise-rejecting function requires `@rejects` tag /** * @@ -149,7 +149,7 @@ async function quux () { } } } -// Message: Promise-rejecting function requires `@reject` tag +// Message: Promise-rejecting function requires `@rejects` tag /** * @@ -159,7 +159,7 @@ async function quux () { throw new Error('abc'); } } -// Message: Promise-rejecting function requires `@reject` tag +// Message: Promise-rejecting function requires `@rejects` tag /** * @@ -172,7 +172,7 @@ async function quux () { break; } } -// Message: Promise-rejecting function requires `@reject` tag +// Message: Promise-rejecting function requires `@rejects` tag /** * @@ -185,7 +185,7 @@ async function quux () { } } } -// Message: Promise-rejecting function requires `@reject` tag +// Message: Promise-rejecting function requires `@rejects` tag /** * @@ -198,7 +198,7 @@ async function quux () { } } } -// Message: Promise-rejecting function requires `@reject` tag +// Message: Promise-rejecting function requires `@rejects` tag /** * @@ -208,7 +208,7 @@ async function quux () { throw new Error('abc'); } while (cond); } -// Message: Promise-rejecting function requires `@reject` tag +// Message: Promise-rejecting function requires `@rejects` tag /** * @@ -218,7 +218,7 @@ async function quux () { throw new Error('abc'); } } -// Message: Promise-rejecting function requires `@reject` tag +// Message: Promise-rejecting function requires `@rejects` tag /** * @@ -230,7 +230,7 @@ async function quux () { throw new Error('cleanup failed'); } } -// Message: Promise-rejecting function requires `@reject` tag +// Message: Promise-rejecting function requires `@rejects` tag ```` diff --git a/src/rules/requireRejects.js b/src/rules/requireRejects.js index 7938ee882..fde8e52f6 100644 --- a/src/rules/requireRejects.js +++ b/src/rules/requireRejects.js @@ -183,7 +183,7 @@ export default iterateJsdoc(({ }; if (shouldReport()) { - report('Promise-rejecting function requires `@reject` tag'); + report('Promise-rejecting function requires `@rejects` tag'); } }, { contextDefaults: true, diff --git a/test/rules/assertions/requireRejects.js b/test/rules/assertions/requireRejects.js index 6e611d784..faffacc50 100644 --- a/test/rules/assertions/requireRejects.js +++ b/test/rules/assertions/requireRejects.js @@ -16,7 +16,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'Promise-rejecting function requires `@reject` tag', + message: 'Promise-rejecting function requires `@rejects` tag', }, ], }, @@ -32,7 +32,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'Promise-rejecting function requires `@reject` tag', + message: 'Promise-rejecting function requires `@rejects` tag', }, ], }, @@ -48,7 +48,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'Promise-rejecting function requires `@reject` tag', + message: 'Promise-rejecting function requires `@rejects` tag', }, ], }, @@ -70,7 +70,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'Promise-rejecting function requires `@reject` tag', + message: 'Promise-rejecting function requires `@rejects` tag', }, ], }, @@ -88,7 +88,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'Promise-rejecting function requires `@reject` tag', + message: 'Promise-rejecting function requires `@rejects` tag', }, ], }, @@ -106,7 +106,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'Promise-rejecting function requires `@reject` tag', + message: 'Promise-rejecting function requires `@rejects` tag', }, ], }, @@ -127,7 +127,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'Promise-rejecting function requires `@reject` tag', + message: 'Promise-rejecting function requires `@rejects` tag', }, ], }, @@ -143,7 +143,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'Promise-rejecting function requires `@reject` tag', + message: 'Promise-rejecting function requires `@rejects` tag', }, ], }, @@ -161,7 +161,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'Promise-rejecting function requires `@reject` tag', + message: 'Promise-rejecting function requires `@rejects` tag', }, ], }, @@ -181,7 +181,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'Promise-rejecting function requires `@reject` tag', + message: 'Promise-rejecting function requires `@rejects` tag', }, ], }, @@ -199,7 +199,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'Promise-rejecting function requires `@reject` tag', + message: 'Promise-rejecting function requires `@rejects` tag', }, ], }, @@ -220,7 +220,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'Promise-rejecting function requires `@reject` tag', + message: 'Promise-rejecting function requires `@rejects` tag', }, ], }, @@ -241,7 +241,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'Promise-rejecting function requires `@reject` tag', + message: 'Promise-rejecting function requires `@rejects` tag', }, ], }, @@ -262,7 +262,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'Promise-rejecting function requires `@reject` tag', + message: 'Promise-rejecting function requires `@rejects` tag', }, ], }, @@ -280,7 +280,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'Promise-rejecting function requires `@reject` tag', + message: 'Promise-rejecting function requires `@rejects` tag', }, ], }, @@ -298,7 +298,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'Promise-rejecting function requires `@reject` tag', + message: 'Promise-rejecting function requires `@rejects` tag', }, ], }, @@ -318,7 +318,7 @@ export default /** @type {import('../index.js').TestCases} */ ({ errors: [ { line: 2, - message: 'Promise-rejecting function requires `@reject` tag', + message: 'Promise-rejecting function requires `@rejects` tag', }, ], }, From 3cd7cbddecf01b59c07c8fba850da24228cb50ef Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sat, 6 Dec 2025 18:15:24 -0700 Subject: [PATCH 189/189] feat(`check-tag-names`, `require-template`, `check-template-names`): make `typeParam` a non-preferred alias for `template` --- docs/rules/check-tag-names.md | 5 +++ docs/rules/check-template-names.md | 6 +++ docs/rules/require-template.md | 19 +++++++++ src/rules/checkTemplateNames.js | 11 ++++- src/rules/requireTemplate.js | 17 ++++++-- src/tagNames.js | 7 +++- test/rules/assertions/checkTagNames.js | 14 +++++++ test/rules/assertions/checkTemplateNames.js | 20 +++++++++ test/rules/assertions/requireTemplate.js | 45 +++++++++++++++++++++ 9 files changed, 136 insertions(+), 8 deletions(-) diff --git a/docs/rules/check-tag-names.md b/docs/rules/check-tag-names.md index dc76ac6da..ef0b3d703 100644 --- a/docs/rules/check-tag-names.md +++ b/docs/rules/check-tag-names.md @@ -1157,5 +1157,10 @@ interface WebTwain { * @param {AnotherType} anotherName And yet {@another} */ // "jsdoc/check-tag-names": ["error"|"warn", {"inlineTags":["inline","another","inlineTag","link"]}] + +/** + * @typeParam T + */ +// Settings: {"jsdoc":{"tagNamePreference":{"template":"typeParam"}}} ```` diff --git a/docs/rules/check-template-names.md b/docs/rules/check-template-names.md index 794f75d4d..345022a68 100644 --- a/docs/rules/check-template-names.md +++ b/docs/rules/check-template-names.md @@ -214,6 +214,12 @@ export default class { * @param {[X, Y | undefined]} someParam */ // Message: @template D not in use + +/** + * @template + */ +// Settings: {"jsdoc":{"tagNamePreference":{"template":false}}} +// Message: Unexpected tag `@template` ```` diff --git a/docs/rules/require-template.md b/docs/rules/require-template.md index f5c16d92e..5de090018 100644 --- a/docs/rules/require-template.md +++ b/docs/rules/require-template.md @@ -236,6 +236,12 @@ function foo(bar: T, baz: number | boolean): T { return bar; } // Message: Missing @template T + +/** + * @template + */ +// Settings: {"jsdoc":{"tagNamePreference":{"template":false}}} +// Message: Unexpected tag `@template` ```` @@ -399,5 +405,18 @@ type Pairs = [D, V | undefined]; * @typedef {[D, V | undefined]} Pairs */ // "jsdoc/require-template": ["error"|"warn", {"exemptedBy":["inheritdoc"]}] + +/** + * Test interface for type definitions. + * + * @typeParam Foo - dummy type param + */ +export interface Test { + /** + * + */ + bar: Foo; +} +// Settings: {"jsdoc":{"tagNamePreference":{"template":"typeParam"}}} ```` diff --git a/src/rules/checkTemplateNames.js b/src/rules/checkTemplateNames.js index f43dc7248..640cc55c5 100644 --- a/src/rules/checkTemplateNames.js +++ b/src/rules/checkTemplateNames.js @@ -23,7 +23,14 @@ export default iterateJsdoc(({ mode, } = settings; - const templateTags = utils.getTags('template'); + const tgName = /** @type {string} */ (utils.getPreferredTagName({ + tagName: 'template', + })); + if (!tgName) { + return; + } + + const templateTags = utils.getTags(tgName); const usedNames = new Set(); /** @@ -73,7 +80,7 @@ export default iterateJsdoc(({ const names = utils.parseClosureTemplateTag(tag); for (const nme of names) { if (!usedNames.has(nme)) { - report(`@template ${nme} not in use`, null, tag); + report(`@${tgName} ${nme} not in use`, null, tag); } } } diff --git a/src/rules/requireTemplate.js b/src/rules/requireTemplate.js index 8f4d42f42..543c594be 100644 --- a/src/rules/requireTemplate.js +++ b/src/rules/requireTemplate.js @@ -25,7 +25,16 @@ export default iterateJsdoc(({ } = settings; const usedNames = new Set(); - const templateTags = utils.getTags('template'); + + const tgName = /** @type {string} */ (utils.getPreferredTagName({ + tagName: 'template', + })); + if (!tgName) { + return; + } + + const templateTags = utils.getTags(tgName); + const templateNames = templateTags.flatMap((tag) => { return utils.parseClosureTemplateTag(tag); }); @@ -34,7 +43,7 @@ export default iterateJsdoc(({ for (const tag of templateTags) { const names = utils.parseClosureTemplateTag(tag); if (names.length > 1) { - report(`Missing separate @template for ${names[1]}`, null, tag); + report(`Missing separate @${tgName} for ${names[1]}`, null, tag); } } } @@ -64,7 +73,7 @@ export default iterateJsdoc(({ for (const usedName of usedNames) { if (!templateNames.includes(usedName)) { - report(`Missing @template ${usedName}`); + report(`Missing @${tgName} ${usedName}`); } } }; @@ -156,7 +165,7 @@ export default iterateJsdoc(({ // Could check against whitelist/blacklist for (const usedName of usedNames) { if (!templateNames.includes(usedName)) { - report(`Missing @template ${usedName}`, null, usedNameToTag.get(usedName)); + report(`Missing @${tgName} ${usedName}`, null, usedNameToTag.get(usedName)); } } }; diff --git a/src/tagNames.js b/src/tagNames.js index 6476f501d..81942364d 100644 --- a/src/tagNames.js +++ b/src/tagNames.js @@ -150,8 +150,11 @@ const typeScriptTags = { satisfies: [], // `@template` is also in TypeScript per: - // https://www.typescriptlang.org/docs/handbook/type-checking-javascript-files.html#supported-jsdoc - template: [], + // https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html#template + template: [ + // Alias as per https://typedoc.org/documents/Tags._typeParam.html + 'typeParam', + ], }; /** diff --git a/test/rules/assertions/checkTagNames.js b/test/rules/assertions/checkTagNames.js index bc6837839..730f50182 100644 --- a/test/rules/assertions/checkTagNames.js +++ b/test/rules/assertions/checkTagNames.js @@ -1499,5 +1499,19 @@ export default /** @type {import('../index.js').TestCases} */ ({ }, ], }, + { + code: ` + /** + * @typeParam T + */ + `, + settings: { + jsdoc: { + tagNamePreference: { + template: 'typeParam', + }, + }, + }, + }, ], }); diff --git a/test/rules/assertions/checkTemplateNames.js b/test/rules/assertions/checkTemplateNames.js index b5b113954..0d0cd005d 100644 --- a/test/rules/assertions/checkTemplateNames.js +++ b/test/rules/assertions/checkTemplateNames.js @@ -464,6 +464,26 @@ export default /** @type {import('../index.js').TestCases} */ ({ }, ], }, + { + code: ` + /** + * @template + */ + `, + errors: [ + { + line: 3, + message: 'Unexpected tag `@template`', + }, + ], + settings: { + jsdoc: { + tagNamePreference: { + template: false, + }, + }, + }, + }, ], valid: [ { diff --git a/test/rules/assertions/requireTemplate.js b/test/rules/assertions/requireTemplate.js index 53fb24c0c..fa563c949 100644 --- a/test/rules/assertions/requireTemplate.js +++ b/test/rules/assertions/requireTemplate.js @@ -426,6 +426,26 @@ export default /** @type {import('../index.js').TestCases} */ ({ parser: typescriptEslintParser, }, }, + { + code: ` + /** + * @template + */ + `, + errors: [ + { + line: 3, + message: 'Unexpected tag `@template`', + }, + ], + settings: { + jsdoc: { + tagNamePreference: { + template: false, + }, + }, + }, + }, ], valid: [ { @@ -701,5 +721,30 @@ export default /** @type {import('../index.js').TestCases} */ ({ }, ], }, + { + code: ` + /** + * Test interface for type definitions. + * + * @typeParam Foo - dummy type param + */ + export interface Test { + /** + * + */ + bar: Foo; + } + `, + languageOptions: { + parser: typescriptEslintParser, + }, + settings: { + jsdoc: { + tagNamePreference: { + template: 'typeParam', + }, + }, + }, + }, ], });