diff --git a/.github/workflows/react-doctor.yml b/.github/workflows/react-doctor.yml new file mode 100644 index 00000000..554e519c --- /dev/null +++ b/.github/workflows/react-doctor.yml @@ -0,0 +1,27 @@ +name: React Doctor + +on: + pull_request: + types: [opened, synchronize, reopened, ready_for_review] + push: + branches: [master] + +permissions: + contents: read + pull-requests: write + issues: write + statuses: write + +concurrency: + group: react-doctor-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + react-doctor: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 + with: + fetch-depth: 0 + persist-credentials: false + - uses: millionco/react-doctor@0b4f4f4bd248a154e64eb508a48347f71154b3f3 # v2 diff --git a/doctor.config.json b/doctor.config.json new file mode 100644 index 00000000..f88b7552 --- /dev/null +++ b/doctor.config.json @@ -0,0 +1,46 @@ +{ + "ignore": { + "files": [ + "config/**", + "mock/**", + "public/**", + "scripts/**", + "types/**", + ".worktrees/**", + "cloudflare-worker/**", + "src/.umi*/**", + "src/services/**", + "src/service-worker.js", + "**/_mock.ts", + "**/*.md", + "**/*.less", + "**/*.css" + ], + "overrides": [ + { + "files": [ + "src/global.tsx", + "src/global.style.ts", + "src/loading.tsx", + "src/locales/**", + "src/pages/**", + "tests/__mocks__/**" + ], + "rules": ["deslop/unused-file"] + }, + { + "files": ["package.json"], + "rules": ["deslop/unused-dev-dependency"] + }, + { + "files": [ + "src/pages/form/advanced-form/index.tsx", + "src/pages/table-list/index.tsx" + ], + "rules": ["react-doctor/no-giant-component"] + } + ] + }, + "blocking": "error", + "adoptExistingLintConfig": true +} diff --git a/package-lock.json b/package-lock.json index 4e154feb..c39ae650 100644 --- a/package-lock.json +++ b/package-lock.json @@ -57,7 +57,7 @@ "jsdom": "^29.1.1", "lint-staged": "^17.0.2", "mockjs": "^1.1.0", - "react-doctor": "^0.5.0", + "react-doctor": "^0.5.8", "swagger-ui-dist": "^5.32.5", "tailwindcss": "^4.3.0", "ts-node": "^10.9.2", @@ -2493,23 +2493,6 @@ "react": ">=16.8.0" } }, - "node_modules/@effect/platform-node-shared": { - "version": "4.0.0-beta.70", - "resolved": "https://registry.npmjs.org/@effect/platform-node-shared/-/platform-node-shared-4.0.0-beta.70.tgz", - "integrity": "sha512-3VXuL63IDmq13We+ApRKn2JW3Rb9g5gj1YEmfb8u2b73norur1VsIJ/pRE4qjShevg19dQYi2JsLawSZ6gApug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/ws": "^8.18.1", - "ws": "^8.20.0" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "effect": "^4.0.0-beta.70" - } - }, "node_modules/@emnapi/core": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", @@ -4368,90 +4351,6 @@ "@module-federation/sdk": "0.8.12" } }, - "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.4.tgz", - "integrity": "sha512-LCkGo6JDfaBhgST7UpPWgNgLINpcpabaHfyz5OBx75nUYxBsaEPxjnyNjWpeb/xBup/682QnBfRBy2/LvPutZQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.4.tgz", - "integrity": "sha512-zExlW9zUJKZH/tOtVMttwjKa4Xm/3KcNjnE3dPN92uCktwavMxpgCA3MoJK/DOnTWsQgo224OaST27/mPNAf+w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.4.tgz", - "integrity": "sha512-Tg3yX65f5GbtXLkrYEHE5oibZG9epyYWas7FogTTEJeDEF9JlXJzKgXaNhT3UXlTOeA+AfZpYZYZ0uPj7Cfquw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.4.tgz", - "integrity": "sha512-dgX0P/9wGPJeHFBG+ZmhgE6bmtMt7NP5CRBGyyktpopdk/mW4POnrpQsSLtKI1dwpc+pPLuXHDh6vvskyQE/sw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.4.tgz", - "integrity": "sha512-8TNXMEjJc3QEy7R/x1INhgiU+XakDAFUzBhaz7+Rbrs8NH5UQeHQxxmzsSBJGyV6I1jW79undiQm8tOI+D+8FQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.4.tgz", - "integrity": "sha512-CmCXPQrkbwExx3j946/PtHWHbYJiCRBRDl4BlkRQcJB/YOwQxJRTpoo7aTsortjgoJ1x7opzTSxn7C+ASSLVjQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, "node_modules/@napi-rs/nice": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.1.1.tgz", @@ -4596,9 +4495,6 @@ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -4616,9 +4512,6 @@ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -4636,9 +4529,6 @@ "ppc64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -4656,9 +4546,6 @@ "riscv64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -4676,9 +4563,6 @@ "s390x" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -4696,9 +4580,6 @@ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -4716,9 +4597,6 @@ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -4797,14 +4675,14 @@ } }, "node_modules/@napi-rs/wasm-runtime": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz", - "integrity": "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.5.tgz", + "integrity": "sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q==", "dev": true, "license": "MIT", "optional": true, "dependencies": { - "@tybys/wasm-util": "^0.10.1" + "@tybys/wasm-util": "^0.10.2" }, "funding": { "type": "github", @@ -5318,9 +5196,9 @@ } }, "node_modules/@oxc-resolver/binding-android-arm-eabi": { - "version": "11.20.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-android-arm-eabi/-/binding-android-arm-eabi-11.20.0.tgz", - "integrity": "sha512-IjfWOXRgJFNdORDl+Uf1aibNgZY2guOD3zmOhx1BGVb/MIiqlFTdmjpQNplSN58lhWehnX4UNqC3QwpUo8pjJg==", + "version": "11.21.3", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-android-arm-eabi/-/binding-android-arm-eabi-11.21.3.tgz", + "integrity": "sha512-eNU11A2WNizh04v3uyaJCootrHIaS0B9aHYXvAvVnPNk4xYSjMUjHnhQ6dewPN2MRYDskV85d1N0Aw0WNWhcyg==", "cpu": [ "arm" ], @@ -5332,9 +5210,9 @@ ] }, "node_modules/@oxc-resolver/binding-android-arm64": { - "version": "11.20.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-android-arm64/-/binding-android-arm64-11.20.0.tgz", - "integrity": "sha512-QqslZAuFQG8Q9xm7JuIn8JUbvywhSBMVhuQHtYW+auirZJloS41oxUUaBXk7uUhZJgp44c5zQLeVvmFaDQB+2Q==", + "version": "11.21.3", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-android-arm64/-/binding-android-arm64-11.21.3.tgz", + "integrity": "sha512-8Q+ZjTLvn2dIcWsrmhdrEihm7q+ag/k+mkry7Z+t0QbbHaVxXQfvH9AewyVMh/WrpEKhQ3DDgx9fYbqeCpeOEw==", "cpu": [ "arm64" ], @@ -5346,9 +5224,9 @@ ] }, "node_modules/@oxc-resolver/binding-darwin-arm64": { - "version": "11.20.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-darwin-arm64/-/binding-darwin-arm64-11.20.0.tgz", - "integrity": "sha512-MUcavykj2ewlR+kc5arpg4tC2RvzJkUxWtNv74pf7lcNk00GpIpN43vXMj+j6r4eMmfZhlb8hueKoIb8e9kAGQ==", + "version": "11.21.3", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-darwin-arm64/-/binding-darwin-arm64-11.21.3.tgz", + "integrity": "sha512-wkh0qKZGHXVUDxFw3oA1TXnU2BDYY/r775oJflGeIr8uDPPoN2pk8gijQIzYRT6hoql/lg3+Tx/SaTn9e2/aGg==", "cpu": [ "arm64" ], @@ -5360,9 +5238,9 @@ ] }, "node_modules/@oxc-resolver/binding-darwin-x64": { - "version": "11.20.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-darwin-x64/-/binding-darwin-x64-11.20.0.tgz", - "integrity": "sha512-BGB16nRUK5Etiv//ihPyzj8Lj1px0mhh4YIfe0FDf045ywknfSm0GEbiRESpr6Q4K82AvnyaRIhhluHByvS4bg==", + "version": "11.21.3", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-darwin-x64/-/binding-darwin-x64-11.21.3.tgz", + "integrity": "sha512-HbNc23FAQYbuyDV2vBWMez4u4mrsm5RAkniGZAWqr6lYZ3N4beeqIb776jzwRl8qL2zRhHVXpUj97X0QgogVzg==", "cpu": [ "x64" ], @@ -5374,9 +5252,9 @@ ] }, "node_modules/@oxc-resolver/binding-freebsd-x64": { - "version": "11.20.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-freebsd-x64/-/binding-freebsd-x64-11.20.0.tgz", - "integrity": "sha512-JZgtePaqj3qmD5XFHJaSLWzHRxQu0LaPkdoM1KJXYADvAaa83ijXHclV3ej3CueeW0wxfIAbGCZVP45J0CA7uQ==", + "version": "11.21.3", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-freebsd-x64/-/binding-freebsd-x64-11.21.3.tgz", + "integrity": "sha512-K6xNsTUPEUdfrn0+kbMq5nOUB5w1C5pavPQngt4TM2FpN91lP0PBe2srSpamb4d69O7h86oAi/qWX/kZNRSjkw==", "cpu": [ "x64" ], @@ -5388,9 +5266,9 @@ ] }, "node_modules/@oxc-resolver/binding-linux-arm-gnueabihf": { - "version": "11.20.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-11.20.0.tgz", - "integrity": "sha512-hOQ/p3ry3v3SchUBXicrrnszaI/UmYzM4wtS4RGfwgVUX7a+HbyQSzJ5aOzu+o6XZkFkS3ZXN4PZAzhOb77OSg==", + "version": "11.21.3", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-11.21.3.tgz", + "integrity": "sha512-VcFmOpcpWX1zoEy8M58tR2M9YxM+Z9RuQhqAx5q0CTmrruaP7Gveejg75hzd/5sg5nk9G3aLALEa3hE2FsmmTQ==", "cpu": [ "arm" ], @@ -5402,9 +5280,9 @@ ] }, "node_modules/@oxc-resolver/binding-linux-arm-musleabihf": { - "version": "11.20.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-11.20.0.tgz", - "integrity": "sha512-2ArPksaw0AqeuGBfoS715VF+JvJQAhD2niWgjE5hVO+L+nAfikVQopvngCMX9x4BD8itWoQ3dnikrQyl5Ho5Jg==", + "version": "11.21.3", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-11.21.3.tgz", + "integrity": "sha512-quVoxFLBy43hWaQbbDtQNRwAX5vX76mv7n64icAtQcJ3eNgVeblqmkupF/hAneNthdqSlnd1sTjb3aQSaDPaCQ==", "cpu": [ "arm" ], @@ -5416,9 +5294,9 @@ ] }, "node_modules/@oxc-resolver/binding-linux-arm64-gnu": { - "version": "11.20.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-11.20.0.tgz", - "integrity": "sha512-0bJnmYFp62JdZ4nVMDUZ/C58BCZOCcqgKtnUlp7L9Ojf/czIN+3j72YlLPeWLkzlr6SlYvIQA4SGV/HyO0d+qg==", + "version": "11.21.3", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-11.21.3.tgz", + "integrity": "sha512-X0AqNZgcD07Q4V3RDK18/vYOj/HQT/FnmEFGYS2jTWqY7JO13ryE3TEs3eAIgUJhBnNkpEaiXqz3VK8M7qQhWQ==", "cpu": [ "arm64" ], @@ -5430,9 +5308,9 @@ ] }, "node_modules/@oxc-resolver/binding-linux-arm64-musl": { - "version": "11.20.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm64-musl/-/binding-linux-arm64-musl-11.20.0.tgz", - "integrity": "sha512-wKHHzPKZo7Ufhv/Bt6yxT7FOgnIgW4gwXcJUipkShGp68W3wGVqvr1Sr0fY65lN0Oy6y41+g2kIDvkgZaMMUkw==", + "version": "11.21.3", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm64-musl/-/binding-linux-arm64-musl-11.21.3.tgz", + "integrity": "sha512-YkaQnaKYdbuaXvRt5Qd0GpbihzVnyfR6z1SpYfIUC6RTu4NF7lDKPjVkYb+jRI2gedVO2rVpN35Y6akG6ud4Lw==", "cpu": [ "arm64" ], @@ -5444,9 +5322,9 @@ ] }, "node_modules/@oxc-resolver/binding-linux-ppc64-gnu": { - "version": "11.20.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-11.20.0.tgz", - "integrity": "sha512-RN8goF7Ie0B79L4i4G6OeBocTgSC56vJbQ65VJje+oXnldVpLnOU7j/AQ/dP94TcCS+Yh6WG8u3Qt4ETteXFNQ==", + "version": "11.21.3", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-11.21.3.tgz", + "integrity": "sha512-gB9HwhrPiFqUzDeEq+y/CgAijz1YdI6BnXz5GaH2Pa9cWdutchlkGFAiAuGb/PjVQpiK6NFKzFuztxrweoit7A==", "cpu": [ "ppc64" ], @@ -5458,9 +5336,9 @@ ] }, "node_modules/@oxc-resolver/binding-linux-riscv64-gnu": { - "version": "11.20.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-11.20.0.tgz", - "integrity": "sha512-5l1yU6/xQEqLZRzxqmMxJfWPslpwCmBsdDGaBvABPehxquCXDC7dd7oraNdKSJUMDXSM7VvVj8H2D2FTjU7oWw==", + "version": "11.21.3", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-11.21.3.tgz", + "integrity": "sha512-zjDWBlYk8QGv0H8dsPUWqkfjYIIjG2TvspGkzXL0eImbgxtZorA/klKeHyolevoT3Kvbi+1iMr9Lhrh7jf54Og==", "cpu": [ "riscv64" ], @@ -5472,9 +5350,9 @@ ] }, "node_modules/@oxc-resolver/binding-linux-riscv64-musl": { - "version": "11.20.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-11.20.0.tgz", - "integrity": "sha512-xHEvkbgz6UC+A3JOyDQy76LkUaxsNSfIr3/GV8slwZsnuooJiIB34gzJfsyvR4JdCYNUUPsRJc/w/oWkODu+hg==", + "version": "11.21.3", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-11.21.3.tgz", + "integrity": "sha512-4UfsQvacV388y1zpXL7C1x1FNYaV52JtuNRiuzrfQA2z1z6ElVrsidkGsrvQ5EgeSq1Pj7kaKqrgGkvFuxJ/tw==", "cpu": [ "riscv64" ], @@ -5486,9 +5364,9 @@ ] }, "node_modules/@oxc-resolver/binding-linux-s390x-gnu": { - "version": "11.20.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-11.20.0.tgz", - "integrity": "sha512-aWPDUUmSeyHvlW+SoEUd+JIJsQhVhu6a5tBpDRMu058naPAchTgAVGCFy35zjbnFlt0i8hLWziff6HX0D3LU4g==", + "version": "11.21.3", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-11.21.3.tgz", + "integrity": "sha512-b5uH+HKH0MP5mNBYaK75SKsJbw52URqrx2LavYdq6wb0l3ExAG5niYRP9DWUNHdKilpaBVM2bXk9HNWrH3ew7Q==", "cpu": [ "s390x" ], @@ -5500,9 +5378,9 @@ ] }, "node_modules/@oxc-resolver/binding-linux-x64-gnu": { - "version": "11.20.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-x64-gnu/-/binding-linux-x64-gnu-11.20.0.tgz", - "integrity": "sha512-x2YeSimvhJjKLVD8KSu8f/rqU1potcdEMkApIPJqjZWN7c2Fpt4g2X32WDg1p+XDAmyT7nuQGe0vnhvXeLbH+g==", + "version": "11.21.3", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-x64-gnu/-/binding-linux-x64-gnu-11.21.3.tgz", + "integrity": "sha512-PjYlmilBpNRh2ntXNYAK3Am5w/nPfEpnU/96iNx7CI8EzAn12J4JRiec63wHJTH31nLoCNxBg/829pN+3CfG3Q==", "cpu": [ "x64" ], @@ -5514,9 +5392,9 @@ ] }, "node_modules/@oxc-resolver/binding-linux-x64-musl": { - "version": "11.20.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-x64-musl/-/binding-linux-x64-musl-11.20.0.tgz", - "integrity": "sha512-kcRLEIxpZefeYfLChjpgFf3ilBzRDZ+yobMrpRsQlSrxuFGtm3U6PMU7AaEpMqo3NfDGVyJJseAjnRLzMFHjwQ==", + "version": "11.21.3", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-x64-musl/-/binding-linux-x64-musl-11.21.3.tgz", + "integrity": "sha512-QTBAb7JuHlZ7JUEyM8UiQi2f7m/L4swBhP2TNpYIDc9Wp/wRw1G/8sl6i13aIzQAXH7LKIm294LeOHd0lQR8zA==", "cpu": [ "x64" ], @@ -5528,9 +5406,9 @@ ] }, "node_modules/@oxc-resolver/binding-openharmony-arm64": { - "version": "11.20.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-openharmony-arm64/-/binding-openharmony-arm64-11.20.0.tgz", - "integrity": "sha512-HHcfnApSZGtKhTiHqe8OZruOZe5XuFQH5/E0Yhj3u8fnFvzkM4/k6WjacUf4SvA0SPEAbfbgYmVPuo0VX/fIBQ==", + "version": "11.21.3", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-openharmony-arm64/-/binding-openharmony-arm64-11.21.3.tgz", + "integrity": "sha512-4j1DFwjwv36ec9kds0jU/ucQ5Ha4ERO/H95BxR5JFf0kqUUAJ1kwII7XhTc1vZrkdJkvLGC9Q2MbpObpum8RBg==", "cpu": [ "arm64" ], @@ -5542,9 +5420,9 @@ ] }, "node_modules/@oxc-resolver/binding-wasm32-wasi": { - "version": "11.20.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-wasm32-wasi/-/binding-wasm32-wasi-11.20.0.tgz", - "integrity": "sha512-Tn0y1XOFYHNfK1wp1Z5QK8Rcld/bsOwRISQXfqAZ5IBpv8Gz1IvV39fUWNprqNdRizgcvFhOzWwFun2zkJsyBg==", + "version": "11.21.3", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-wasm32-wasi/-/binding-wasm32-wasi-11.21.3.tgz", + "integrity": "sha512-i8oluoel5kru/j1WNrjmQSiA3GQ7wvIYVR1IwIoZtKogAhya2iub+ZKIeSIkcJOrnzQ18Tzl/F+kL3fYOxZLvA==", "cpu": [ "wasm32" ], @@ -5552,18 +5430,52 @@ "license": "MIT", "optional": true, "dependencies": { - "@emnapi/core": "1.10.0", - "@emnapi/runtime": "1.10.0", - "@napi-rs/wasm-runtime": "^1.1.4" + "@emnapi/core": "1.11.0", + "@emnapi/runtime": "1.11.0", + "@napi-rs/wasm-runtime": "^1.1.5" }, "engines": { "node": ">=14.0.0" } }, + "node_modules/@oxc-resolver/binding-wasm32-wasi/node_modules/@emnapi/core": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.0.tgz", + "integrity": "sha512-l9Oo58x0HOP5znGzVhYW9U3e5wVuA4LAZU2AGezTmkhO1CgQRFDhDg4nneHsu/t3WniXg9QrG2nIXL/ZS8ln8Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@oxc-resolver/binding-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.0.tgz", + "integrity": "sha512-55coeOFKHv1ywEcUXJtWU5f+Jr/W5tZDvZig8DLKSwUN1JpROQ4rk/SNOQiFWmaR/VKF4zuFyW1B8JduOSv6Pg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@oxc-resolver/binding-wasm32-wasi/node_modules/@emnapi/wasi-threads": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", + "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@oxc-resolver/binding-win32-arm64-msvc": { - "version": "11.20.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-11.20.0.tgz", - "integrity": "sha512-qPi25YNPe4YenS8MgsQU2+bIFHxxpLx1LVna2444cEHqNPhNjvWf9zqj4aWE43H9LpAsTmkkAlA3eL5ElBU3mA==", + "version": "11.21.3", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-11.21.3.tgz", + "integrity": "sha512-M/8dw8dD6aOs+NlPJax401CZB9I7Aut84isQLgALGGwke4Afvw+/7yYhZb94yXf6t2sPLhQLmSmtSV+2FhsOWg==", "cpu": [ "arm64" ], @@ -5575,9 +5487,9 @@ ] }, "node_modules/@oxc-resolver/binding-win32-x64-msvc": { - "version": "11.20.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-win32-x64-msvc/-/binding-win32-x64-msvc-11.20.0.tgz", - "integrity": "sha512-Wb14jWEW8huH6It9F6sXd9vrYmIS7pMrgkU6sxpLxkP+9z+wRgs71hUEhRpcn8FOXAFa27FVWfY2tRpbfTzfLw==", + "version": "11.21.3", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-win32-x64-msvc/-/binding-win32-x64-msvc-11.21.3.tgz", + "integrity": "sha512-H7BCt/VnS9hnmMp42eGhZ99izSCRvlnWwy/N71K1/J8QoExwY4262Z8QiEkMDtduRJrztayDxETTckmUuAVL9Q==", "cpu": [ "x64" ], @@ -5589,9 +5501,9 @@ ] }, "node_modules/@oxlint/binding-android-arm-eabi": { - "version": "1.68.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm-eabi/-/binding-android-arm-eabi-1.68.0.tgz", - "integrity": "sha512-wEdsIspexXLLMCPAEOcCuFLMt6aE3AzTuA/nQKLPRnoJ+EQTturmGheDkhHuuVHx0GbutjQ3JKmEn+Gz6Ag28Q==", + "version": "1.66.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm-eabi/-/binding-android-arm-eabi-1.66.0.tgz", + "integrity": "sha512-f7kq8N51T4phpzqfBpA2qaVTI/KrkCmNwaj3t/97I/WLTDI+UhlP5GL9eER+zVxBhtlx5rKXWByJU1/zDAvyaw==", "cpu": [ "arm" ], @@ -5606,9 +5518,9 @@ } }, "node_modules/@oxlint/binding-android-arm64": { - "version": "1.68.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm64/-/binding-android-arm64-1.68.0.tgz", - "integrity": "sha512-6aZRNNXQTsYtgaus8HTb9nuCcsrQTlKXGnktwvwW0n/SooRWNxNb3925grDkC63aEYZuCIyOVLV16IdYIoC2aQ==", + "version": "1.66.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm64/-/binding-android-arm64-1.66.0.tgz", + "integrity": "sha512-xu6QO71tdDS9mjmLZ3AqhtaVHBvdmsOKkYnReNNDgh+XiwnsipeQOIxbiYOOO0iAXycJ+GK0wdMSZP/2j/AmSg==", "cpu": [ "arm64" ], @@ -5623,9 +5535,9 @@ } }, "node_modules/@oxlint/binding-darwin-arm64": { - "version": "1.68.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-arm64/-/binding-darwin-arm64-1.68.0.tgz", - "integrity": "sha512-lVTbsE3kO4bLpZELgjRZuAJc8kP98wb83yMXWH8gaPaFZ+cM2IDeZto4ByoUAYj0Mxv2rvw+A1ssZequSepVSg==", + "version": "1.66.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-arm64/-/binding-darwin-arm64-1.66.0.tgz", + "integrity": "sha512-HZ24VimSOC7mxuEA99e0H2FS0C1yO3+iW13jPRAk+e2njsUs3QeAXsafCDyaIrV/MirdOVez+etQNQsJE43zNQ==", "cpu": [ "arm64" ], @@ -5640,9 +5552,9 @@ } }, "node_modules/@oxlint/binding-darwin-x64": { - "version": "1.68.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-x64/-/binding-darwin-x64-1.68.0.tgz", - "integrity": "sha512-nCmw2XrmQskjBUh/sfP5yKs93V68LijQgjd1cuuZ/q4SCARngLYs60/qqyzuMsg8QQ9KArDI98hxs/RDGE4KRQ==", + "version": "1.66.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-x64/-/binding-darwin-x64-1.66.0.tgz", + "integrity": "sha512-awhj8ZvJrrRSnXj7V++rpZvTmnl99L6mi0B7gg7Cp7BN6cKpzuI481bHNLvXGA9GB1/oEgA3ponuyoAc6Md12A==", "cpu": [ "x64" ], @@ -5657,9 +5569,9 @@ } }, "node_modules/@oxlint/binding-freebsd-x64": { - "version": "1.68.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-freebsd-x64/-/binding-freebsd-x64-1.68.0.tgz", - "integrity": "sha512-TI4ovQJliYE9V6e06cEv+qEI9uj7Ao65fmif4er4HD+aouyYyh0P31q2jh3KtqsOHHcQqv2PZ61TjJFLpBDGWQ==", + "version": "1.66.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-freebsd-x64/-/binding-freebsd-x64-1.66.0.tgz", + "integrity": "sha512-KQF0oVV21/FjIqkRuL8Q1vh8ECsE5+ocdH5tcqTQ4ZnYuDVoYibQUNfqBjQaUsP6UIIda5Y75Wpm5p4RgQWiWw==", "cpu": [ "x64" ], @@ -5674,9 +5586,9 @@ } }, "node_modules/@oxlint/binding-linux-arm-gnueabihf": { - "version": "1.68.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.68.0.tgz", - "integrity": "sha512-LcNnEi9g71Cmry5ZpLbKT+oVv+/zYG3hYVAbBBB5X85nOQZSk8l92CnDkxJMcxUg0NCnMCOFZuaVDlMyv4tYJw==", + "version": "1.66.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.66.0.tgz", + "integrity": "sha512-9u1rgwZSEXWb30vbFZzQ78HVXBo0WCKNwJ3a2InRUTNMRng+PUDIoSFmA+m4HdUfBaIqftShq8J8qHc+eE/Vig==", "cpu": [ "arm" ], @@ -5691,9 +5603,9 @@ } }, "node_modules/@oxlint/binding-linux-arm-musleabihf": { - "version": "1.68.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-1.68.0.tgz", - "integrity": "sha512-OovHahL3FX4UaK+hgSf11llUx2vszqjSdQQ61Ck9InOEI/ptZoC4XSQJurITqItVvd53JSlmkLMeaNjM1PoQew==", + "version": "1.66.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-1.66.0.tgz", + "integrity": "sha512-Ynot2HR1bHxUaNWoC280MVTDfZuaWuP3XfSMRDhyuZrVjhzoaBCVFlw8h8qeZjWKVUBhPWFIxB7AQTlK8Z2WWg==", "cpu": [ "arm" ], @@ -5708,9 +5620,9 @@ } }, "node_modules/@oxlint/binding-linux-arm64-gnu": { - "version": "1.68.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.68.0.tgz", - "integrity": "sha512-YbzTglnHLzzi9zv5or8Ztz5fykAoZE8W9iM42/bOrF4HBSB6rJTqdLQWuoP76EHQw9DuKl76K1QmFlG29sPJXQ==", + "version": "1.66.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.66.0.tgz", + "integrity": "sha512-xCbgzciGgo+A4aQZEknsNrNiIwY7sU5SfRuMmRjPIvZAgdF34cIHiKvwOsS5XRLjlTVSFwitmq6YclTtHTfU+g==", "cpu": [ "arm64" ], @@ -5725,9 +5637,9 @@ } }, "node_modules/@oxlint/binding-linux-arm64-musl": { - "version": "1.68.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.68.0.tgz", - "integrity": "sha512-qVKtCZNic+OoNnOr/hCQAu22HSQzflI7Fsq/Blzkw02SnLuv163k3kfmrVpZjSBlUHgsRKj6WgQiw30d3SX02Q==", + "version": "1.66.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.66.0.tgz", + "integrity": "sha512-hmo+ZB/lHkR1HdDmnziNpzSLmulnUSu10VEqX2Yex7OwvoBAbjJQLvy4gIBRV3AAwWnCvAxKp5Nv1GE6LU1QMg==", "cpu": [ "arm64" ], @@ -5742,9 +5654,9 @@ } }, "node_modules/@oxlint/binding-linux-ppc64-gnu": { - "version": "1.68.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.68.0.tgz", - "integrity": "sha512-zExyZ8ZOUuAyQ0y9jpTcyjKUz62YY9JhKPyVxzvjTpXzZ3ujdqiVwfPWDdnA1SsIOrxdtxHn7KErDHLWskFjXg==", + "version": "1.66.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.66.0.tgz", + "integrity": "sha512-2Invd4Uyy81mVooQC5FBtfxSNrvcX1OxbMlVQ6M2erRrNI2awFYF26YNW2yFxdVFZ4ffNOWKghtMjhnUPsXsVA==", "cpu": [ "ppc64" ], @@ -5759,9 +5671,9 @@ } }, "node_modules/@oxlint/binding-linux-riscv64-gnu": { - "version": "1.68.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-1.68.0.tgz", - "integrity": "sha512-6C4MPuwewyDavA7sxM14wzgRi5GGL68HPIxRCdVyS75U4MDbpFVYzKO9WNR6KLKTMPq2pcz3THwo1sK2uiqngw==", + "version": "1.66.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-1.66.0.tgz", + "integrity": "sha512-s0iXPDQVdgayE3RGa/N2DZF7tjgg0TwEtD1sGoDxqPDGrIXgo45H0yHknT0f9A0yteASsweYZtDyTuVlM4aSag==", "cpu": [ "riscv64" ], @@ -5776,9 +5688,9 @@ } }, "node_modules/@oxlint/binding-linux-riscv64-musl": { - "version": "1.68.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-1.68.0.tgz", - "integrity": "sha512-bnZooVeHAcvA+dH0EDLgx+7HY/DRi6e0hFszg3P+OBatuUjV6EvfIyNIzWOusmqAVh4L6r21GGTZtiKE4iqM4Q==", + "version": "1.66.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-1.66.0.tgz", + "integrity": "sha512-OekL4XFiu7RPK0JIZi8VeHgtIXPREf42t8Cy/rKEsC+P3gcqDgNAAGiyuUOpdbG4wwbfue1q4CHcCO7spSve6w==", "cpu": [ "riscv64" ], @@ -5793,9 +5705,9 @@ } }, "node_modules/@oxlint/binding-linux-s390x-gnu": { - "version": "1.68.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.68.0.tgz", - "integrity": "sha512-dIqnZnJSmHCMOUpUcWQOiV14o3DDPVx1DSsMaSzvdhNjC1tB1iEPZbdiMSCIEYbkgbsYznHXWqFdKL8WUB3F8g==", + "version": "1.66.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.66.0.tgz", + "integrity": "sha512-Ga1D0kj1SFslm34ThA/BdkUlyAYEnTsXyRC4pF0C5agZSwtGdHYWMTQWemUfBGp4RCG4QWXgdO+HmmmKqOtlBg==", "cpu": [ "s390x" ], @@ -5810,9 +5722,9 @@ } }, "node_modules/@oxlint/binding-linux-x64-gnu": { - "version": "1.68.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.68.0.tgz", - "integrity": "sha512-zc9lEnfV/HreDTY6gdMlZe+irkwHSxQ4/B1pS9GyK7RVaA5LxhoZY/w6/o2vIwLLEYiXQ5ujGxOM1ZazeFAAIA==", + "version": "1.66.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.66.0.tgz", + "integrity": "sha512-p5jfP1wUZe/IC3qpQO84n9DRnf9g3lKRtLBlQq23ykyrDglHcVx7sWmVTlPuU6SBw8mNnPzyOn022G3XZHnlww==", "cpu": [ "x64" ], @@ -5827,9 +5739,9 @@ } }, "node_modules/@oxlint/binding-linux-x64-musl": { - "version": "1.68.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-musl/-/binding-linux-x64-musl-1.68.0.tgz", - "integrity": "sha512-Dl5QEX0TCo/40Cdh1o1JdPS//+YiWqjC+Hrrya5OQmStZZr4svAFtdlqcpCrU9yq2Mo3vRVyO9B3h0dzD8s36Q==", + "version": "1.66.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-musl/-/binding-linux-x64-musl-1.66.0.tgz", + "integrity": "sha512-vUB/sYlYZorDL1ZD+o9mRv7zbsykrrFRtmgS6R8musZqLtrPRQn1gc1eGpuX+sfdccz42STl/AqldY6XRb2upQ==", "cpu": [ "x64" ], @@ -5844,9 +5756,9 @@ } }, "node_modules/@oxlint/binding-openharmony-arm64": { - "version": "1.68.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-openharmony-arm64/-/binding-openharmony-arm64-1.68.0.tgz", - "integrity": "sha512-/qy6dOvi4S3/LeXq0l5BT5pRKPYA7oj3uKwJOAZOr5HRLL+HK6jdBynvWuXIA2wwfE01RzNYmbBdM7vwYx00sA==", + "version": "1.66.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-openharmony-arm64/-/binding-openharmony-arm64-1.66.0.tgz", + "integrity": "sha512-yde+6p/F59xRkGR9H1HfngWRif1QRJjynZK349l+UI0H6w9hL3G8/AVaTHFyTtLVQ56qtNbX2/5Dc77n1ovnOg==", "cpu": [ "arm64" ], @@ -5861,9 +5773,9 @@ } }, "node_modules/@oxlint/binding-win32-arm64-msvc": { - "version": "1.68.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.68.0.tgz", - "integrity": "sha512-fHNtVqPHSYE7UFDSLVFUjxQjnSVXxseNJmRW+XuP4pXXDwePdPda43NL7/BBCFTxHjycOc44JNDaOPtFDNui9A==", + "version": "1.66.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.66.0.tgz", + "integrity": "sha512-O9GLucgoTdmOrbBX+EjzNe7o/Ze5TFOvXcib6bzUOtBOmj6cV+zw18NgB+cGKAkDw1Pdqs8vGkfHbbsLuDtXWg==", "cpu": [ "arm64" ], @@ -5878,9 +5790,9 @@ } }, "node_modules/@oxlint/binding-win32-ia32-msvc": { - "version": "1.68.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.68.0.tgz", - "integrity": "sha512-NnKXr4Wgo4nps3erhrE0f8shBvBPZMHg72nDsvX0JyrRvsNiP3f1JNvbCKh+A6VFvpF7ZoJxu904P3cKMhvZnA==", + "version": "1.66.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.66.0.tgz", + "integrity": "sha512-m3Pjwc2MfTcom4E4gOv7DyuGyt7OfGNCbmqDHd+N7EzXmP+ppHuudm2NjcA3AjV5TSeGxaguVF4SbTKHe1USYA==", "cpu": [ "ia32" ], @@ -5895,9 +5807,9 @@ } }, "node_modules/@oxlint/binding-win32-x64-msvc": { - "version": "1.68.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.68.0.tgz", - "integrity": "sha512-zg5pA+84AlU6XHJ3ruiRxziO71QTrz8nLsk6u01JGS5+tL9/bnlakFiklFrcy4R1/V7ktWtaNitN3JZWmKnf6g==", + "version": "1.66.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.66.0.tgz", + "integrity": "sha512-/DbBvw8UFBhja6PqudUjV4UtfsJr0Oa7jUjWVKB0g86lj/VwnPrkngn0sFql3c9RDA0O16dh7ozsXb6GjNAzBQ==", "cpu": [ "x64" ], @@ -7705,9 +7617,6 @@ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -7725,9 +7634,6 @@ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -7745,9 +7651,6 @@ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -7765,9 +7668,6 @@ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -9862,9 +9762,6 @@ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MPL-2.0", "optional": true, "os": [ @@ -9886,9 +9783,6 @@ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MPL-2.0", "optional": true, "os": [ @@ -9910,9 +9804,6 @@ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MPL-2.0", "optional": true, "os": [ @@ -9934,9 +9825,6 @@ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MPL-2.0", "optional": true, "os": [ @@ -10114,9 +10002,6 @@ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -10134,9 +10019,6 @@ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -10154,9 +10036,6 @@ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -10174,9 +10053,6 @@ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -11662,9 +11538,6 @@ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -11682,9 +11555,6 @@ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -11702,9 +11572,6 @@ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -11722,9 +11589,6 @@ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -15981,9 +15845,9 @@ } }, "node_modules/deslop-js": { - "version": "0.0.21", - "resolved": "https://registry.npmjs.org/deslop-js/-/deslop-js-0.0.21.tgz", - "integrity": "sha512-1fYusMl4tDaQ/xdHFtLfDe8kFrEeU0Vu0Pfiy2k/Gd4HSqYlQj1Z7iRqldNneRyuCzNMhwNBvhaL07Urbh5VOA==", + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/deslop-js/-/deslop-js-0.5.8.tgz", + "integrity": "sha512-Vq9D2x4dAIW24zcH55DTrl3/vi13UNKfXgw0yj7ULTssZ6KOdw/oyBHtlvE94KFC9yYEhgFTrGjaqqZKvV9pwA==", "dev": true, "license": "MIT", "dependencies": { @@ -16669,9 +16533,6 @@ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -16689,9 +16550,6 @@ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -16709,9 +16567,6 @@ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -16729,9 +16584,6 @@ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -16943,35 +16795,6 @@ "dev": true, "license": "MIT" }, - "node_modules/effect": { - "version": "4.0.0-beta.70", - "resolved": "https://registry.npmjs.org/effect/-/effect-4.0.0-beta.70.tgz", - "integrity": "sha512-8AwGTRiNriirHGEYHrOS0E9fzdhIqCdZjiHP1YXmNo2UyPGS43ILsymsSHT7V0DJS+8dvlKq2RxnrDBUhDNZHg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@standard-schema/spec": "^1.1.0", - "fast-check": "^4.8.0", - "find-my-way-ts": "^0.1.6", - "ini": "^7.0.0", - "kubernetes-types": "^1.30.0", - "msgpackr": "^2.0.1", - "multipasta": "^0.2.7", - "toml": "^4.1.1", - "uuid": "^14.0.0", - "yaml": "^2.9.0" - } - }, - "node_modules/effect/node_modules/ini": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-7.0.0.tgz", - "integrity": "sha512-ifK0CgjALofS5bkrcTy4RaQ9Vx2Knf/eLeIO+NaswQEpH1UblrtTSCIvN71qQDMq0PeQ/SSPojvEJp9vvvfr+w==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^22.22.2 || ^24.15.0 || >=26.0.0" - } - }, "node_modules/electron-to-chromium": { "version": "1.5.351", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.351.tgz", @@ -18133,29 +17956,6 @@ "type": "^2.7.2" } }, - "node_modules/fast-check": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-4.8.0.tgz", - "integrity": "sha512-GOJ158CUMnN6cSahsv4+ExARvIDuzzinFjkp0E9WtiBa5zcVeLozVkWaE4IzFcc+Y48Wp1EDlUZsXRyAztQcSg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ], - "license": "MIT", - "dependencies": { - "pure-rand": "^8.0.0" - }, - "engines": { - "node": ">=12.17.0" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -18429,13 +18229,6 @@ "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "node_modules/find-my-way-ts": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/find-my-way-ts/-/find-my-way-ts-0.1.6.tgz", - "integrity": "sha512-a85L9ZoXtNAey3Y6Z+eBWW658kO/MwR7zIafkIUPUMf3isZG0NCs2pjW2wtjxAKuJPxMAsHUIP4ZPGv0o5gyTA==", - "dev": true, - "license": "MIT" - }, "node_modules/find-root": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", @@ -21602,13 +21395,6 @@ "dev": true, "license": "MIT" }, - "node_modules/kubernetes-types": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/kubernetes-types/-/kubernetes-types-1.30.0.tgz", - "integrity": "sha512-Dew1okvhM/SQcIa2rcgujNndZwU8VnSapDgdxlYoB84ZlpAD43U6KLAFqYo17ykSFGHNPrg0qry0bP+GJd9v7Q==", - "dev": true, - "license": "Apache-2.0" - }, "node_modules/layout-base": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", @@ -22872,46 +22658,6 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, - "node_modules/msgpackr": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-2.0.2.tgz", - "integrity": "sha512-c5hYOXFbP79Slh6Dzd2wzk+jnV7mX1UxfMYtilnY1NmalXPqG8DGb5cYCMBrW4AsH3zekBBZd4QrKz9NhtvYLQ==", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "msgpackr-extract": "^3.0.4" - } - }, - "node_modules/msgpackr-extract": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.4.tgz", - "integrity": "sha512-4kmO/MdyUIkLIvTPr8VHLil4AtoKIoniWPIEk5+CDy0xnWC84azhSFmuJ7PxZdsYtiP5kEeQsORAVIeMgxT+Hw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "node-gyp-build-optional-packages": "5.2.2" - }, - "bin": { - "download-msgpackr-prebuilds": "bin/download-prebuilds.js" - }, - "optionalDependencies": { - "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.4", - "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.4", - "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.4", - "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.4", - "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.4", - "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.4" - } - }, - "node_modules/multipasta": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/multipasta/-/multipasta-0.2.7.tgz", - "integrity": "sha512-KPA58d68KgGil15oDqXjkUBEBYc00XvbPj5/X+dyzeo/lWm9Nc25pQRlf1D+gv4OpK7NM0J1odrbu9JNNGvynA==", - "dev": true, - "license": "MIT" - }, "node_modules/nanoid": { "version": "3.3.12", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", @@ -23114,22 +22860,6 @@ "webidl-conversions": "^3.0.0" } }, - "node_modules/node-gyp-build-optional-packages": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz", - "integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "detect-libc": "^2.0.1" - }, - "bin": { - "node-gyp-build-optional-packages": "bin.js", - "node-gyp-build-optional-packages-optional": "optional.js", - "node-gyp-build-optional-packages-test": "build-test.js" - } - }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -23860,40 +23590,40 @@ } }, "node_modules/oxc-resolver": { - "version": "11.20.0", - "resolved": "https://registry.npmjs.org/oxc-resolver/-/oxc-resolver-11.20.0.tgz", - "integrity": "sha512-CblytBiV/a/ZXY34dsVU2NxhIOxMXst8CvDCtyBelVITgd7PLrKzbEbA6oKLdPjvDKDzCiW48qzmzZ+mYaqn+g==", + "version": "11.21.3", + "resolved": "https://registry.npmjs.org/oxc-resolver/-/oxc-resolver-11.21.3.tgz", + "integrity": "sha512-2Mx3fKQz7+xgrBONjsxOgCGtMHOn38/HxMzW1I5efwXB5a4lRN0Vp40gYUJFBWJslcrvwoofTrqoTnLbwTd3pA==", "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/Boshen" }, "optionalDependencies": { - "@oxc-resolver/binding-android-arm-eabi": "11.20.0", - "@oxc-resolver/binding-android-arm64": "11.20.0", - "@oxc-resolver/binding-darwin-arm64": "11.20.0", - "@oxc-resolver/binding-darwin-x64": "11.20.0", - "@oxc-resolver/binding-freebsd-x64": "11.20.0", - "@oxc-resolver/binding-linux-arm-gnueabihf": "11.20.0", - "@oxc-resolver/binding-linux-arm-musleabihf": "11.20.0", - "@oxc-resolver/binding-linux-arm64-gnu": "11.20.0", - "@oxc-resolver/binding-linux-arm64-musl": "11.20.0", - "@oxc-resolver/binding-linux-ppc64-gnu": "11.20.0", - "@oxc-resolver/binding-linux-riscv64-gnu": "11.20.0", - "@oxc-resolver/binding-linux-riscv64-musl": "11.20.0", - "@oxc-resolver/binding-linux-s390x-gnu": "11.20.0", - "@oxc-resolver/binding-linux-x64-gnu": "11.20.0", - "@oxc-resolver/binding-linux-x64-musl": "11.20.0", - "@oxc-resolver/binding-openharmony-arm64": "11.20.0", - "@oxc-resolver/binding-wasm32-wasi": "11.20.0", - "@oxc-resolver/binding-win32-arm64-msvc": "11.20.0", - "@oxc-resolver/binding-win32-x64-msvc": "11.20.0" + "@oxc-resolver/binding-android-arm-eabi": "11.21.3", + "@oxc-resolver/binding-android-arm64": "11.21.3", + "@oxc-resolver/binding-darwin-arm64": "11.21.3", + "@oxc-resolver/binding-darwin-x64": "11.21.3", + "@oxc-resolver/binding-freebsd-x64": "11.21.3", + "@oxc-resolver/binding-linux-arm-gnueabihf": "11.21.3", + "@oxc-resolver/binding-linux-arm-musleabihf": "11.21.3", + "@oxc-resolver/binding-linux-arm64-gnu": "11.21.3", + "@oxc-resolver/binding-linux-arm64-musl": "11.21.3", + "@oxc-resolver/binding-linux-ppc64-gnu": "11.21.3", + "@oxc-resolver/binding-linux-riscv64-gnu": "11.21.3", + "@oxc-resolver/binding-linux-riscv64-musl": "11.21.3", + "@oxc-resolver/binding-linux-s390x-gnu": "11.21.3", + "@oxc-resolver/binding-linux-x64-gnu": "11.21.3", + "@oxc-resolver/binding-linux-x64-musl": "11.21.3", + "@oxc-resolver/binding-openharmony-arm64": "11.21.3", + "@oxc-resolver/binding-wasm32-wasi": "11.21.3", + "@oxc-resolver/binding-win32-arm64-msvc": "11.21.3", + "@oxc-resolver/binding-win32-x64-msvc": "11.21.3" } }, "node_modules/oxlint": { - "version": "1.68.0", - "resolved": "https://registry.npmjs.org/oxlint/-/oxlint-1.68.0.tgz", - "integrity": "sha512-dXcbq+xsmLrMy6T8d0euf3IYUfLmjHIE11pOxiUSi5LHkFZaYPv568R6sEjcavVpUxoaQe66UBuK4HEi74NxpA==", + "version": "1.66.0", + "resolved": "https://registry.npmjs.org/oxlint/-/oxlint-1.66.0.tgz", + "integrity": "sha512-N4LLxYLd94KEBqXDMDM5f+2PUpItTjDLreXe2Gn5KhjhCK4Qp2YUXaBi8Yu325ryOgKwt22m45fpD7nPOn69Yw==", "dev": true, "license": "MIT", "bin": { @@ -23906,59 +23636,55 @@ "url": "https://github.com/sponsors/Boshen" }, "optionalDependencies": { - "@oxlint/binding-android-arm-eabi": "1.68.0", - "@oxlint/binding-android-arm64": "1.68.0", - "@oxlint/binding-darwin-arm64": "1.68.0", - "@oxlint/binding-darwin-x64": "1.68.0", - "@oxlint/binding-freebsd-x64": "1.68.0", - "@oxlint/binding-linux-arm-gnueabihf": "1.68.0", - "@oxlint/binding-linux-arm-musleabihf": "1.68.0", - "@oxlint/binding-linux-arm64-gnu": "1.68.0", - "@oxlint/binding-linux-arm64-musl": "1.68.0", - "@oxlint/binding-linux-ppc64-gnu": "1.68.0", - "@oxlint/binding-linux-riscv64-gnu": "1.68.0", - "@oxlint/binding-linux-riscv64-musl": "1.68.0", - "@oxlint/binding-linux-s390x-gnu": "1.68.0", - "@oxlint/binding-linux-x64-gnu": "1.68.0", - "@oxlint/binding-linux-x64-musl": "1.68.0", - "@oxlint/binding-openharmony-arm64": "1.68.0", - "@oxlint/binding-win32-arm64-msvc": "1.68.0", - "@oxlint/binding-win32-ia32-msvc": "1.68.0", - "@oxlint/binding-win32-x64-msvc": "1.68.0" - }, - "peerDependencies": { - "oxlint-tsgolint": ">=0.22.1", - "vite-plus": "*" + "@oxlint/binding-android-arm-eabi": "1.66.0", + "@oxlint/binding-android-arm64": "1.66.0", + "@oxlint/binding-darwin-arm64": "1.66.0", + "@oxlint/binding-darwin-x64": "1.66.0", + "@oxlint/binding-freebsd-x64": "1.66.0", + "@oxlint/binding-linux-arm-gnueabihf": "1.66.0", + "@oxlint/binding-linux-arm-musleabihf": "1.66.0", + "@oxlint/binding-linux-arm64-gnu": "1.66.0", + "@oxlint/binding-linux-arm64-musl": "1.66.0", + "@oxlint/binding-linux-ppc64-gnu": "1.66.0", + "@oxlint/binding-linux-riscv64-gnu": "1.66.0", + "@oxlint/binding-linux-riscv64-musl": "1.66.0", + "@oxlint/binding-linux-s390x-gnu": "1.66.0", + "@oxlint/binding-linux-x64-gnu": "1.66.0", + "@oxlint/binding-linux-x64-musl": "1.66.0", + "@oxlint/binding-openharmony-arm64": "1.66.0", + "@oxlint/binding-win32-arm64-msvc": "1.66.0", + "@oxlint/binding-win32-ia32-msvc": "1.66.0", + "@oxlint/binding-win32-x64-msvc": "1.66.0" + }, + "peerDependencies": { + "oxlint-tsgolint": ">=0.22.1" }, "peerDependenciesMeta": { "oxlint-tsgolint": { "optional": true - }, - "vite-plus": { - "optional": true } } }, "node_modules/oxlint-plugin-react-doctor": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/oxlint-plugin-react-doctor/-/oxlint-plugin-react-doctor-0.5.0.tgz", - "integrity": "sha512-2oXQZKc3N2XPGmKQ0+GtZ4TSlNb4Jm1DKDrxhBE1zBK01PIjz9lXSUQm0hFCXFmlGmjVF7/GE11U9p2Oe0o9Nw==", + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/oxlint-plugin-react-doctor/-/oxlint-plugin-react-doctor-0.5.8.tgz", + "integrity": "sha512-L0jveKAMbqF1qAqA2Ksu8aH0/Q8FDQxLwXmHYgALa2XlsxEUuamJ+1Da2MhPWJ2ahn+ekFbnWK20qixxD+fw6A==", "dev": true, "license": "MIT", "dependencies": { "@typescript-eslint/types": "^8.59.3", "eslint-scope": "^9.1.2", "eslint-visitor-keys": "^5.0.1", - "oxc-parser": "^0.132.0" + "oxc-parser": "^0.135.0" }, "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": "^20.19.0 || >=22.13.0" } }, "node_modules/oxlint-plugin-react-doctor/node_modules/@oxc-parser/binding-android-arm-eabi": { - "version": "0.132.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-android-arm-eabi/-/binding-android-arm-eabi-0.132.0.tgz", - "integrity": "sha512-KrLaPWa5c9Y7LkW+rKkaUE3y7DBDrQtaf7rlsSDfv6KAHUjgzAIRA761Lrrp6//Yd/Rlie/yEOt9YENCoJnOcw==", + "version": "0.135.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-android-arm-eabi/-/binding-android-arm-eabi-0.135.0.tgz", + "integrity": "sha512-sHeZItACNcA5WRAWqF6ixriR4GkZDyY10gVgnZU7pXku1DjHFATSqnwZM809jl0gXPHxb6fKzYQCK7bNK5cACQ==", "cpu": [ "arm" ], @@ -23973,9 +23699,9 @@ } }, "node_modules/oxlint-plugin-react-doctor/node_modules/@oxc-parser/binding-android-arm64": { - "version": "0.132.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-android-arm64/-/binding-android-arm64-0.132.0.tgz", - "integrity": "sha512-SThDrSeamB/kG2+NxcJ5/wSLcV6dUqDknrPLqFYQ0ST/55mtBP4M7Q/f3QbubH6aAd11wpzZn/nwbVRSdobOpg==", + "version": "0.135.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-android-arm64/-/binding-android-arm64-0.135.0.tgz", + "integrity": "sha512-wPte+SzgzWWFgMSF8YZDNM+tBXtJg0AXBi7+tU3yS2z1f2Af9kRLZLKuJojADmuD/cZexmnMHHC3SDItTW77Iw==", "cpu": [ "arm64" ], @@ -23990,9 +23716,9 @@ } }, "node_modules/oxlint-plugin-react-doctor/node_modules/@oxc-parser/binding-darwin-arm64": { - "version": "0.132.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.132.0.tgz", - "integrity": "sha512-Lc0f/TYoKBghE5/2Gsv7bLXk+TJZunx2Tf61X8hG4ARXdc8UYI26dCGccFSd1AyFbK3jfaNXtMnupggDbjPXdQ==", + "version": "0.135.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.135.0.tgz", + "integrity": "sha512-BmKz3lHIsqVos+9aPcdYCT9MG3APoUyM43KlEFhJMWNVDOGG8FKyiFz81Bc+mGz2o0hpuQ3PfXLfVWJrKXjo2g==", "cpu": [ "arm64" ], @@ -24007,9 +23733,9 @@ } }, "node_modules/oxlint-plugin-react-doctor/node_modules/@oxc-parser/binding-darwin-x64": { - "version": "0.132.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-x64/-/binding-darwin-x64-0.132.0.tgz", - "integrity": "sha512-RG2eJIpf7C21z9HSSXFw1bTArdpKe7Y4fwcJTwRq1yCSe1vSavaN9GA1sm9KqzemTLAGVktQ+7qBTGp0vQeUZg==", + "version": "0.135.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-x64/-/binding-darwin-x64-0.135.0.tgz", + "integrity": "sha512-dM8BS+8+Br1fNvmh2QZbGiHaYttwLebRa6J4Uz9vuFzMNmvsdRYwf7993ptOaV0JTrR63AaoVLjX7nhWbijxjQ==", "cpu": [ "x64" ], @@ -24024,9 +23750,9 @@ } }, "node_modules/oxlint-plugin-react-doctor/node_modules/@oxc-parser/binding-freebsd-x64": { - "version": "0.132.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-freebsd-x64/-/binding-freebsd-x64-0.132.0.tgz", - "integrity": "sha512-wQIPntPLtJ8NcBpvKPbEv3NqzV6k8eP8tP/jE9Rg8HTg/j7urZGFSsTCPCW5k77Qfw2DM4vRvc9p3I4yq/Shvw==", + "version": "0.135.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-freebsd-x64/-/binding-freebsd-x64-0.135.0.tgz", + "integrity": "sha512-xlZnvvJdR9bGu2pOhvR5hMuKPHCE6Sa9owK5A484mzjHdm75VRV5nCs5w/jkmGODMMTFc+KN7EnZqEieM813kw==", "cpu": [ "x64" ], @@ -24041,9 +23767,9 @@ } }, "node_modules/oxlint-plugin-react-doctor/node_modules/@oxc-parser/binding-linux-arm-gnueabihf": { - "version": "0.132.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.132.0.tgz", - "integrity": "sha512-PixKEpeSe3yxQWqNyOCBALRYc72+Tj7ILDofUl3iXo25cVOzLA6jHUhmOINRtWIPh7dbUie3QNeabwaQpZTw6w==", + "version": "0.135.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.135.0.tgz", + "integrity": "sha512-PSR8LmBK/H/PQRiN8g7RebQgZX/ntVCrdT/JBfNxE5ezdHG1s2i4rbazsRJYD83TTI1MmgTpC0MGL42PLtskQQ==", "cpu": [ "arm" ], @@ -24058,9 +23784,9 @@ } }, "node_modules/oxlint-plugin-react-doctor/node_modules/@oxc-parser/binding-linux-arm-musleabihf": { - "version": "0.132.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.132.0.tgz", - "integrity": "sha512-sCR+DzGHlyHKnbA2z9zWjTUhIo8Sy0enJl4RDsBwPmkxYynPatpwOAWe8W5127SlW0boqUWHGtr1NWn5UwIhXQ==", + "version": "0.135.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.135.0.tgz", + "integrity": "sha512-I85GJXzfUsigkkk7Ngdz95C217M4FdUi1Z2HrX5UyPmURobwQZ7m2bbUvwFkz4VGZd+lymFGKHvDZ3RQC9qOzA==", "cpu": [ "arm" ], @@ -24075,9 +23801,9 @@ } }, "node_modules/oxlint-plugin-react-doctor/node_modules/@oxc-parser/binding-linux-arm64-gnu": { - "version": "0.132.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.132.0.tgz", - "integrity": "sha512-sQBix5P2cW+IpzTcCwYxnh9yALrKSIkKJThspBvMGcygSMnbzkSvhN7SfuX1hvBk8y1XEChsdkU3ET0V5DmzUw==", + "version": "0.135.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.135.0.tgz", + "integrity": "sha512-zqEY0npz0g0aGZj/8a5BclunjVDytsBQHYtIC10Gd26HcrLwbVF6YDbqRQjunMGYdSo97u6xOBl05aTDI2diDQ==", "cpu": [ "arm64" ], @@ -24092,9 +23818,9 @@ } }, "node_modules/oxlint-plugin-react-doctor/node_modules/@oxc-parser/binding-linux-arm64-musl": { - "version": "0.132.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.132.0.tgz", - "integrity": "sha512-WozHg3Kc//8Sk756HXXgMbEAvqtG+Lzb9JOojwQzIGDtN78Az2dLttkb71akWYUF/8IgYfDSlfKh4Uot8is5Vw==", + "version": "0.135.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.135.0.tgz", + "integrity": "sha512-mWAfprP819gQ2qYst1RxgTI8b/z0b29OpoKfRflIXLHde2dZLihQD4g47Onuvtpo5GPIkMYPRlX9QoeZfs/GnQ==", "cpu": [ "arm64" ], @@ -24109,9 +23835,9 @@ } }, "node_modules/oxlint-plugin-react-doctor/node_modules/@oxc-parser/binding-linux-ppc64-gnu": { - "version": "0.132.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.132.0.tgz", - "integrity": "sha512-CmX/ulNBOEwWTyVRmcpYKAcAizW6+OjtLJgo7fXoL9OqQvjF4VER8tPomv44vwzfSCy1BHbsB0ZlZYzYJNj4cA==", + "version": "0.135.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.135.0.tgz", + "integrity": "sha512-gri8c2AOmJKJwOux2KTHFBfUaXoJURuVMKhmKEi/2hTF55cQteTDV2XNfTiE5oCC+Tnem1Y4/MWzcyDadtsSag==", "cpu": [ "ppc64" ], @@ -24126,9 +23852,9 @@ } }, "node_modules/oxlint-plugin-react-doctor/node_modules/@oxc-parser/binding-linux-riscv64-gnu": { - "version": "0.132.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.132.0.tgz", - "integrity": "sha512-j9oQS+hM90SdhviNGWbPgT4+Rlq+ac++q/zjgwPD1mVHgxHzATvoRGtDx0sXGmFOQ9J9YkwAhYGb5MAHL6TAsA==", + "version": "0.135.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.135.0.tgz", + "integrity": "sha512-Y2tkupCG5wo0SxH2rMLG4d4Kmv6DaM3sBp+GuM5lox0S8Za6VxKgQrY2Mut088QQxKkEE89n/4CCCgmw2o0e3Q==", "cpu": [ "riscv64" ], @@ -24143,9 +23869,9 @@ } }, "node_modules/oxlint-plugin-react-doctor/node_modules/@oxc-parser/binding-linux-riscv64-musl": { - "version": "0.132.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.132.0.tgz", - "integrity": "sha512-bLz+Xi+Agnfmd7kWPEsSVwCn2k4EyIalZkNBcQ0OGIv9rqn8VgCPLNd03tM9mKX/5TdlvDXalz0q71BIrOPNqg==", + "version": "0.135.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.135.0.tgz", + "integrity": "sha512-xDRJq6i6WTynjeP+ISbDpyH4p9BaJ0wuQcL0lCSDkt9qOXC9dmwpOu1VG/TlwmPI3KpYntmO9nJCuc3TMTsNBA==", "cpu": [ "riscv64" ], @@ -24160,9 +23886,9 @@ } }, "node_modules/oxlint-plugin-react-doctor/node_modules/@oxc-parser/binding-linux-s390x-gnu": { - "version": "0.132.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.132.0.tgz", - "integrity": "sha512-U6t2qbJU0ypTfyj9QV3W1Y6mITDTL8ai/OR6NUn85vyHthOvobKWgXzU4tu0EskSzlpuVFz1g0jFGulDIUKHxQ==", + "version": "0.135.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.135.0.tgz", + "integrity": "sha512-V4MoUuiCRNvihxhIufRxvK+ka013V4joTSK0FAGA1KEjLuNprfH6N/Qw2uxQEVIFuNYMhD/hV6xJ/ptbzlKdHg==", "cpu": [ "s390x" ], @@ -24177,9 +23903,9 @@ } }, "node_modules/oxlint-plugin-react-doctor/node_modules/@oxc-parser/binding-linux-x64-gnu": { - "version": "0.132.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.132.0.tgz", - "integrity": "sha512-WcEaSNHFk8yz5YFlQQAlhq6jOFmZBB/RKE7uzhyCIf+pF1Lmv9gUH4221mle2Gd9iHyWT3ySNph8yZgb1xYdWg==", + "version": "0.135.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.135.0.tgz", + "integrity": "sha512-JCFZ7zM7KXOKoPAbK/ZB4wY0M1jxRECiem2UQuiXLjzGqS9+hno7mtX+qyK2F7HWK2xPhyJb+frpcOtk5DKOtg==", "cpu": [ "x64" ], @@ -24194,9 +23920,9 @@ } }, "node_modules/oxlint-plugin-react-doctor/node_modules/@oxc-parser/binding-linux-x64-musl": { - "version": "0.132.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.132.0.tgz", - "integrity": "sha512-iQrV4iJzQgRwK3BWRmQl1C3C6g3wYpXN2WLdQdyR+efoUnncdShZAVp9OgcojtlD3MDRbuOMGG3SjxF4fL4nlQ==", + "version": "0.135.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.135.0.tgz", + "integrity": "sha512-9jSVS1b3hOV7sdKH4aA2DFfnTz0RgQd0v2BefR+LYbH8yIlmSM22JJZbAAjVeVXmFgUAk3zJQ1tpE/Nd+Vi2YQ==", "cpu": [ "x64" ], @@ -24211,9 +23937,9 @@ } }, "node_modules/oxlint-plugin-react-doctor/node_modules/@oxc-parser/binding-openharmony-arm64": { - "version": "0.132.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-openharmony-arm64/-/binding-openharmony-arm64-0.132.0.tgz", - "integrity": "sha512-FWzmUGrZ6GUby4U7WIwcCtab6tdmlTO3xTRRKyb5kjIJVEiaUAT8animUG/nK8ZCA8gkRkPOTId4rl6uTqUmJQ==", + "version": "0.135.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-openharmony-arm64/-/binding-openharmony-arm64-0.135.0.tgz", + "integrity": "sha512-M857ZLBSdn1Uy/SJJz5zh0qGu67B4P9omCgXGBU2LLqTzraX6ZjVNaKq5yW1PDw/LgJXDXR/dbZfgmB310f11Q==", "cpu": [ "arm64" ], @@ -24228,9 +23954,9 @@ } }, "node_modules/oxlint-plugin-react-doctor/node_modules/@oxc-parser/binding-wasm32-wasi": { - "version": "0.132.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-wasm32-wasi/-/binding-wasm32-wasi-0.132.0.tgz", - "integrity": "sha512-TlbMppxJI5CjWDes0QaP6G3aneVg1yikBu5QYI+DUShF9WDL66ccgKFNNGmi/Wybtszw6hxwAvv76T4DaPKnHw==", + "version": "0.135.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-wasm32-wasi/-/binding-wasm32-wasi-0.135.0.tgz", + "integrity": "sha512-2w6DVcntQZX9U5RhXtgiWb3FLWFB5EcwI1U8yr3htOCJUJjagN4BFUHz/Y/d9ZsumndZ6ByxxWEtbUZNE1bfFw==", "cpu": [ "wasm32" ], @@ -24247,9 +23973,9 @@ } }, "node_modules/oxlint-plugin-react-doctor/node_modules/@oxc-parser/binding-win32-arm64-msvc": { - "version": "0.132.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.132.0.tgz", - "integrity": "sha512-RH/NbFjGKqdUAUi7Oh3LQPxUk2hsWFEEQ38HSnbRQT8QjBZFKqL1fMbmsB3N4jy/KPh9iX94+9dmkEMBBbambw==", + "version": "0.135.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.135.0.tgz", + "integrity": "sha512-rX1U8+IH2Z37EJjDXKa1iifvUQAdba+vZ4Ewj1iaG5eA/QaSybzclCOwtWa0/5BuUQnnK/T2JHUEFrwhL6Ck2Q==", "cpu": [ "arm64" ], @@ -24264,9 +23990,9 @@ } }, "node_modules/oxlint-plugin-react-doctor/node_modules/@oxc-parser/binding-win32-ia32-msvc": { - "version": "0.132.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.132.0.tgz", - "integrity": "sha512-JUr4jQY9jxoIB/YTLXr6XofSi5xikj6p5/Ns1h0VOBDT0j1jKU+kMsv2xxv51RwnETcXpA1Yw/9oUAfcqfaqEA==", + "version": "0.135.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.135.0.tgz", + "integrity": "sha512-9FAisBbH1QICGAjlJobiuKGd/jOuVmyqniWdQMwTa5SkCl6hhuotBCJf1n46B0flYbSOR5TzfV9HZCWSyb3c/Q==", "cpu": [ "ia32" ], @@ -24281,9 +24007,9 @@ } }, "node_modules/oxlint-plugin-react-doctor/node_modules/@oxc-parser/binding-win32-x64-msvc": { - "version": "0.132.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.132.0.tgz", - "integrity": "sha512-2dapgHpA5X8DSXF4AU36hJWYf6zP0tKjMXFRAZFBD62pkevW/uhFDXoFH9Y/3Fd2EtDrw5ByNnR1wVE9X9y0SQ==", + "version": "0.135.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.135.0.tgz", + "integrity": "sha512-wYF+A2AzJ2n7ul6q+Z2G/ia0S2+8cUp0AgWZzoFvF4WmUcl1P7p+o6se1Gdr5wGnWuF0iAMIkGddrjCarNr2yA==", "cpu": [ "x64" ], @@ -24298,9 +24024,9 @@ } }, "node_modules/oxlint-plugin-react-doctor/node_modules/@oxc-project/types": { - "version": "0.132.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.132.0.tgz", - "integrity": "sha512-FESMOxil5Se014ui/Eq8fT5uHJo6nIRwH0PfJrZJXs6Gek3ZVFOrpUv3YIZT20m+extU98Hg1Ym72U58rlsxUQ==", + "version": "0.135.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.135.0.tgz", + "integrity": "sha512-wR+xRdFkUBMvcAjBJ2q2kcZM6d+DKu2NgoOyxZgYwZdLhmiv6+rnO8PZ/P68kMiZtIKm+pW7zyEJ4kSOs0vo+Q==", "dev": true, "license": "MIT", "funding": { @@ -24308,9 +24034,9 @@ } }, "node_modules/oxlint-plugin-react-doctor/node_modules/@typescript-eslint/types": { - "version": "8.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.61.0.tgz", - "integrity": "sha512-9QTQpZ5Iin4CdIodfbDQFSeiSJKidgYJYug1P9CC2xWgUTvlmixViqDZNciMjwLBZyJnG4tGmPl97rVAFb1AJg==", + "version": "8.61.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.61.1.tgz", + "integrity": "sha512-G+CRlPqLv7Bz1IZVs03x5K59F1veqL0EJUROAdGhKsEq8qOiRiZbI+HUojPq5l0fEGOKModD9br6lObhB8zkoA==", "dev": true, "license": "MIT", "engines": { @@ -24354,13 +24080,13 @@ } }, "node_modules/oxlint-plugin-react-doctor/node_modules/oxc-parser": { - "version": "0.132.0", - "resolved": "https://registry.npmjs.org/oxc-parser/-/oxc-parser-0.132.0.tgz", - "integrity": "sha512-+0LAPHaqtfQlvWdpaAa09SmOaZZgP8C552xosEkGJ4+ruEwP1Vgx+sqBgcBCNfR6KDCmagGOZTde8wmAvcI/Hg==", + "version": "0.135.0", + "resolved": "https://registry.npmjs.org/oxc-parser/-/oxc-parser-0.135.0.tgz", + "integrity": "sha512-/DaPStu0s2zzNSRRniKyTPM6Z/o+DapOp2JYNKDL8AsgaBGPK2IdZyB87SQjVH+xeQPz+Qr9mrjglfkYgtbVRA==", "dev": true, "license": "MIT", "dependencies": { - "@oxc-project/types": "^0.132.0" + "@oxc-project/types": "^0.135.0" }, "engines": { "node": "^20.19.0 || >=22.12.0" @@ -24369,26 +24095,26 @@ "url": "https://github.com/sponsors/Boshen" }, "optionalDependencies": { - "@oxc-parser/binding-android-arm-eabi": "0.132.0", - "@oxc-parser/binding-android-arm64": "0.132.0", - "@oxc-parser/binding-darwin-arm64": "0.132.0", - "@oxc-parser/binding-darwin-x64": "0.132.0", - "@oxc-parser/binding-freebsd-x64": "0.132.0", - "@oxc-parser/binding-linux-arm-gnueabihf": "0.132.0", - "@oxc-parser/binding-linux-arm-musleabihf": "0.132.0", - "@oxc-parser/binding-linux-arm64-gnu": "0.132.0", - "@oxc-parser/binding-linux-arm64-musl": "0.132.0", - "@oxc-parser/binding-linux-ppc64-gnu": "0.132.0", - "@oxc-parser/binding-linux-riscv64-gnu": "0.132.0", - "@oxc-parser/binding-linux-riscv64-musl": "0.132.0", - "@oxc-parser/binding-linux-s390x-gnu": "0.132.0", - "@oxc-parser/binding-linux-x64-gnu": "0.132.0", - "@oxc-parser/binding-linux-x64-musl": "0.132.0", - "@oxc-parser/binding-openharmony-arm64": "0.132.0", - "@oxc-parser/binding-wasm32-wasi": "0.132.0", - "@oxc-parser/binding-win32-arm64-msvc": "0.132.0", - "@oxc-parser/binding-win32-ia32-msvc": "0.132.0", - "@oxc-parser/binding-win32-x64-msvc": "0.132.0" + "@oxc-parser/binding-android-arm-eabi": "0.135.0", + "@oxc-parser/binding-android-arm64": "0.135.0", + "@oxc-parser/binding-darwin-arm64": "0.135.0", + "@oxc-parser/binding-darwin-x64": "0.135.0", + "@oxc-parser/binding-freebsd-x64": "0.135.0", + "@oxc-parser/binding-linux-arm-gnueabihf": "0.135.0", + "@oxc-parser/binding-linux-arm-musleabihf": "0.135.0", + "@oxc-parser/binding-linux-arm64-gnu": "0.135.0", + "@oxc-parser/binding-linux-arm64-musl": "0.135.0", + "@oxc-parser/binding-linux-ppc64-gnu": "0.135.0", + "@oxc-parser/binding-linux-riscv64-gnu": "0.135.0", + "@oxc-parser/binding-linux-riscv64-musl": "0.135.0", + "@oxc-parser/binding-linux-s390x-gnu": "0.135.0", + "@oxc-parser/binding-linux-x64-gnu": "0.135.0", + "@oxc-parser/binding-linux-x64-musl": "0.135.0", + "@oxc-parser/binding-openharmony-arm64": "0.135.0", + "@oxc-parser/binding-wasm32-wasi": "0.135.0", + "@oxc-parser/binding-win32-arm64-msvc": "0.135.0", + "@oxc-parser/binding-win32-ia32-msvc": "0.135.0", + "@oxc-parser/binding-win32-x64-msvc": "0.135.0" } }, "node_modules/p-limit": { @@ -25964,23 +25690,6 @@ "dev": true, "license": "MIT" }, - "node_modules/pure-rand": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-8.4.0.tgz", - "integrity": "sha512-IoM8YF/jY0hiugFo/wOWqfmarlE6J0wc6fDK1PhftMk7MGhVZl88sZimmqBBFomLOCSmcCCpsfj7wXASCpvK9A==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ], - "license": "MIT" - }, "node_modules/qiankun": { "version": "2.10.16", "resolved": "https://registry.npmjs.org/qiankun/-/qiankun-2.10.16.tgz", @@ -26867,25 +26576,23 @@ } }, "node_modules/react-doctor": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/react-doctor/-/react-doctor-0.5.0.tgz", - "integrity": "sha512-MEx7RgRv2kXp6HoPMzc7fFz5Mm3vCqS3Z7clkjmDbsPamjCz7TrDDWQarfaPr7woWA6FOAaWHt1bGhQ88cfEEw==", + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/react-doctor/-/react-doctor-0.5.8.tgz", + "integrity": "sha512-gDXDQ+48KeFq2jkVgsUhQ67oQ+kUMdnIaA+YeS9VXXZFXSg9wxY5dDxurEpILSh8RwO06W8p6uCnTR+wn5B/GA==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.29.0", - "@effect/platform-node-shared": "4.0.0-beta.70", "@sentry/node": "^10.54.0", "agent-install": "0.0.5", "conf": "^15.1.0", "confbox": "^0.2.4", - "deslop-js": "^0.0.21", - "effect": "4.0.0-beta.70", + "deslop-js": "0.5.8", "eslint-plugin-react-hooks": "^7.1.1", "jiti": "^2.7.0", "magicast": "^0.5.3", - "oxlint": "^1.66.0", - "oxlint-plugin-react-doctor": "0.5.0", + "oxlint": ">=1.66.0 <1.67.0", + "oxlint-plugin-react-doctor": "0.5.8", "prompts": "^2.4.2", "typescript": ">=5.0.4 <7", "vscode-languageserver": "^9.0.1", @@ -26896,7 +26603,7 @@ "react-doctor": "bin/react-doctor.js" }, "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": "^20.19.0 || >=22.13.0" } }, "node_modules/react-doctor/node_modules/@babel/core": { @@ -30414,16 +30121,6 @@ "node": ">=0.6" } }, - "node_modules/toml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/toml/-/toml-4.1.1.tgz", - "integrity": "sha512-EBJnVBr3dTXdA89WVFoAIPUqkBjxPMwRqsfuo1r240tKFHXv3zgca4+NJib/h6TyvGF7vOawz0jGuryJCdNHrw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20" - } - }, "node_modules/topojson-client": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.1.0.tgz", diff --git a/package.json b/package.json index f2e93127..d32240ca 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "jsdom": "^29.1.1", "lint-staged": "^17.0.2", "mockjs": "^1.1.0", - "react-doctor": "^0.5.0", + "react-doctor": "^0.5.8", "swagger-ui-dist": "^5.32.5", "tailwindcss": "^4.3.0", "ts-node": "^10.9.2", diff --git a/react-doctor.config.json b/react-doctor.config.json deleted file mode 100644 index 9e119880..00000000 --- a/react-doctor.config.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "ignore": { - "files": [ - "config/**", - "mock/**", - "public/**", - "scripts/**", - "types/**", - "cloudflare-worker/**", - "src/.umi*/**", - "src/services/**", - "src/service-worker.js", - "**/_mock.ts", - "**/*.md", - "**/*.less", - "**/*.css" - ] - }, - "failOn": "error", - "adoptExistingLintConfig": true -} diff --git a/src/components/AvatarList/index.style.ts b/src/components/AvatarList/index.style.ts index d601a1d8..f471f4b8 100644 --- a/src/components/AvatarList/index.style.ts +++ b/src/components/AvatarList/index.style.ts @@ -35,6 +35,12 @@ const useStyles = createStyles(({ token }) => { }, }, }, + avatarButton: { + padding: 0, + border: 0, + background: 'transparent', + cursor: 'pointer', + }, }; }); diff --git a/src/components/AvatarList/index.tsx b/src/components/AvatarList/index.tsx index 36f3b33b..1b5819d1 100644 --- a/src/components/AvatarList/index.tsx +++ b/src/components/AvatarList/index.tsx @@ -31,38 +31,31 @@ const avatarSizeToClassName = (styles: any, size?: SizeType | 'mini') => [styles.avatarItemMini]: size === 'mini', }); -const Item: React.FC = ({ - src, - size, - tips, - onClick = () => {}, -}) => { +const Item: React.FC = ({ src, size, tips, onClick }) => { const { styles } = useStyles(); const cls = avatarSizeToClassName(styles, size); + const avatar = tips ? ( + + + + ) : ( + + ); + return ( -
  • { - if (e.key === 'Enter') onClick(); - } - : undefined - } - > - {tips ? ( - - - +
  • + {onClick ? ( + ) : ( - + avatar )}
  • ); diff --git a/src/components/OfflineBanner/index.tsx b/src/components/OfflineBanner/index.tsx index 50d8d879..e4347880 100644 --- a/src/components/OfflineBanner/index.tsx +++ b/src/components/OfflineBanner/index.tsx @@ -1,31 +1,27 @@ import { getIntl } from '@umijs/max'; import { Alert } from 'antd'; -import { useEffect, useRef, useState } from 'react'; +import { useSyncExternalStore } from 'react'; -const OfflineBanner: React.FC = () => { - const isOnlineRef = useRef(true); - const [, forceUpdate] = useState(0); +const subscribeOnlineStatus = (callback: () => void) => { + window.addEventListener('online', callback); + window.addEventListener('offline', callback); + return () => { + window.removeEventListener('online', callback); + window.removeEventListener('offline', callback); + }; +}; + +const getOnlineStatus = () => + typeof navigator === 'undefined' ? true : navigator.onLine; - useEffect(() => { - isOnlineRef.current = navigator.onLine; - forceUpdate((n) => n + 1); - const handleOnline = () => { - isOnlineRef.current = true; - forceUpdate((n: number) => n + 1); - }; - const handleOffline = () => { - isOnlineRef.current = false; - forceUpdate((n: number) => n + 1); - }; - window.addEventListener('online', handleOnline); - window.addEventListener('offline', handleOffline); - return () => { - window.removeEventListener('online', handleOnline); - window.removeEventListener('offline', handleOffline); - }; - }, []); +const OfflineBanner: React.FC = () => { + const isOnline = useSyncExternalStore( + subscribeOnlineStatus, + getOnlineStatus, + () => true, + ); - if (isOnlineRef.current) return null; + if (isOnline) return null; return ( , + label: '个人设置', + }, + { + key: 'theme', + icon: , + label: '主题设置', + }, + { + type: 'divider' as const, + }, + { + key: 'logout', + icon: , + label: '退出登录', + }, +]; + +const loginOut = async () => { + try { + await outLogin(); + } catch { + // Local logout has already cleared user state; redirect should still proceed. + } + const { search, pathname } = window.location; + const urlParams = new URL(window.location.href).searchParams; + const searchParams = new URLSearchParams({ + redirect: pathname + search, + }); + const redirect = urlParams.get('redirect'); + if (window.location.pathname !== '/user/login' && !redirect) { + history.replace({ + pathname: '/user/login', + search: searchParams.toString(), + }); + } +}; + export const AvatarDropdown: React.FC = ({ children, }) => { - const loginOut = async () => { - await outLogin(); - const { search, pathname } = window.location; - const urlParams = new URL(window.location.href).searchParams; - const searchParams = new URLSearchParams({ - redirect: pathname + search, - }); - const redirect = urlParams.get('redirect'); - if (window.location.pathname !== '/user/login' && !redirect) { - history.replace({ - pathname: '/user/login', - search: searchParams.toString(), - }); - } - }; const { initialState, setInitialState } = useModel('@@initialState'); const onMenuClick: MenuProps['onClick'] = (event) => { @@ -60,27 +86,6 @@ export const AvatarDropdown: React.FC = ({ return ; } - const menuItems: MenuProps['items'] = [ - { - key: 'settings', - icon: , - label: '个人设置', - }, - { - key: 'theme', - icon: , - label: '主题设置', - }, - { - type: 'divider' as const, - }, - { - key: 'logout', - icon: , - label: '退出登录', - }, - ]; - return ( = { + 'zh-CN': { emoji: '🇨🇳', label: '简体中文' }, + 'zh-TW': { emoji: '🇭🇰', label: '繁體中文' }, + 'en-US': { emoji: '🇺🇸', label: 'English' }, + 'ja-JP': { emoji: '🇯🇵', label: '日本語' }, + 'pt-BR': { emoji: '🇧🇷', label: 'Português' }, + 'id-ID': { emoji: '🇮🇩', label: 'Bahasa Indonesia' }, + 'fa-IR': { emoji: '🇮🇷', label: 'فارسی' }, + 'bn-BD': { emoji: '🇧🇩', label: 'বাংলা' }, +}; + +const onLangClick: MenuProps['onClick'] = ({ key }) => { + if (key.startsWith('lang-')) { + setLocale(key.replace('lang-', ''), false); + } +}; + +export const LangDropdown: React.FC = () => { + const { styles } = useHeaderActionStyles(); + const allLocales = useMemo(() => getAllLocales(), []); + const currentLocale = getLocale(); + const supportLocales = allLocales.filter((l) => l in localeLabelMap); + + if (supportLocales.length <= 1) { + return null; + } + + const langItems: MenuProps['items'] = supportLocales.map((locale) => ({ + key: `lang-${locale}`, + icon: + locale === currentLocale ? ( + + ) : ( + + ), + label: `${localeLabelMap[locale]?.emoji ?? ''} ${localeLabelMap[locale]?.label ?? locale}`, + })); + + return ( + + + + ); +}; diff --git a/src/components/RightContent/VersionDropdown.tsx b/src/components/RightContent/VersionDropdown.tsx new file mode 100644 index 00000000..2079c14b --- /dev/null +++ b/src/components/RightContent/VersionDropdown.tsx @@ -0,0 +1,36 @@ +import { ForkOutlined } from '@ant-design/icons'; +import type { MenuProps } from 'antd'; +import { Button } from 'antd'; +import HeaderDropdown from '../HeaderDropdown'; +import useHeaderActionStyles from './style'; + +const versionItems: MenuProps['items'] = [ + { key: 'https://v5.pro.ant.design', label: 'v5' }, + { key: 'https://v4.pro.ant.design', label: 'v4' }, + { key: 'https://v2.pro.ant.design', label: 'v2' }, + { key: 'https://v1.pro.ant.design', label: 'v1' }, +]; + +const onVersionClick: MenuProps['onClick'] = ({ key }) => { + window.open(key, '_blank', 'noopener,noreferrer'); +}; + +export const VersionDropdown: React.FC = () => { + const { styles } = useHeaderActionStyles(); + return ( + + + + ); +}; diff --git a/src/components/RightContent/index.tsx b/src/components/RightContent/index.tsx index ea0b19f2..a6943678 100644 --- a/src/components/RightContent/index.tsx +++ b/src/components/RightContent/index.tsx @@ -1,43 +1,13 @@ -import { - BookOutlined, - CheckOutlined, - ForkOutlined, - GlobalOutlined, -} from '@ant-design/icons'; -import { getAllLocales, getLocale, history, setLocale } from '@umijs/max'; -import type { MenuProps } from 'antd'; +import { BookOutlined } from '@ant-design/icons'; +import { history } from '@umijs/max'; import { Button, Tooltip } from 'antd'; -import { createStyles } from 'antd-style'; -import React, { useMemo } from 'react'; -import HeaderDropdown from '../HeaderDropdown'; - -export const localeLabelMap: Record = - { - 'zh-CN': { emoji: '🇨🇳', label: '简体中文' }, - 'zh-TW': { emoji: '🇭🇰', label: '繁體中文' }, - 'en-US': { emoji: '🇺🇸', label: 'English' }, - 'ja-JP': { emoji: '🇯🇵', label: '日本語' }, - 'pt-BR': { emoji: '🇧🇷', label: 'Português' }, - 'id-ID': { emoji: '🇮🇩', label: 'Bahasa Indonesia' }, - 'fa-IR': { emoji: '🇮🇷', label: 'فارسی' }, - 'bn-BD': { emoji: '🇧🇩', label: 'বাংলা' }, - }; - -const useStyles = createStyles(({ token, css }) => ({ - action: css` - display: inline-flex !important; - align-items: center !important; - justify-content: center !important; - height: 36px !important; - min-width: 36px; - padding-inline: 8px !important; - padding-block: 0 !important; - border-radius: ${token.borderRadius}px !important; - `, -})); +import React from 'react'; +import { LangDropdown } from './LangDropdown'; +import useHeaderActionStyles from './style'; +import { VersionDropdown } from './VersionDropdown'; export const DocLink: React.FC = () => { - const { styles } = useStyles(); + const { styles } = useHeaderActionStyles(); return ( - - ); -}; - -export const LangDropdown: React.FC = () => { - const { styles } = useStyles(); - const allLocales = useMemo(() => getAllLocales(), []); - const currentLocale = getLocale(); - const supportLocales = allLocales.filter((l) => l in localeLabelMap); - - if (supportLocales.length <= 1) { - return null; - } - - const langItems: MenuProps['items'] = supportLocales.map((locale) => ({ - key: `lang-${locale}`, - icon: - locale === currentLocale ? ( - - ) : ( - - ), - label: `${localeLabelMap[locale]?.emoji ?? ''} ${localeLabelMap[locale]?.label ?? locale}`, - })); - - const onLangClick: MenuProps['onClick'] = ({ key }) => { - if (key.startsWith('lang-')) { - setLocale(key.replace('lang-', ''), false); - } - }; - - return ( - - - - ); -}; +export { LangDropdown, VersionDropdown }; diff --git a/src/components/RightContent/style.ts b/src/components/RightContent/style.ts new file mode 100644 index 00000000..fdde3a5f --- /dev/null +++ b/src/components/RightContent/style.ts @@ -0,0 +1,16 @@ +import { createStyles } from 'antd-style'; + +const useHeaderActionStyles = createStyles(({ token, css }) => ({ + action: css` + display: inline-flex !important; + align-items: center !important; + justify-content: center !important; + height: 36px !important; + min-width: 36px; + padding-inline: 8px !important; + padding-block: 0 !important; + border-radius: ${token.borderRadius}px !important; + `, +})); + +export default useHeaderActionStyles; diff --git a/src/components/TagSelect/index.tsx b/src/components/TagSelect/index.tsx index c2b319e7..17c428bb 100644 --- a/src/components/TagSelect/index.tsx +++ b/src/components/TagSelect/index.tsx @@ -1,6 +1,6 @@ import { DownOutlined, UpOutlined } from '@ant-design/icons'; import { useMergedState } from '@rc-component/util'; -import { Tag } from 'antd'; +import { Button, Tag } from 'antd'; import { clsx } from 'clsx'; import React, { type FC, useMemo, useState } from 'react'; import useStyles from './index.style'; @@ -32,6 +32,10 @@ type TagSelectOptionElement = React.ReactElement< typeof TagSelectOption >; +const isTagSelectOption = (node: TagSelectOptionElement) => + node?.type && + (node.type.isTagSelectOption || node.type.displayName === 'TagSelectOption'); + interface TagSelectProps { onChange?: (value: (string | number)[]) => void; expandable?: boolean; @@ -71,11 +75,6 @@ const TagSelect: FC & { }, ); - const isTagSelectOption = (node: TagSelectOptionElement) => - node?.type && - (node.type.isTagSelectOption || - node.type.displayName === 'TagSelectOption'); - // Memoize all tags to avoid recalculating on every render const allTags = useMemo(() => { const childrenArray = React.Children.toArray( @@ -136,19 +135,10 @@ const TagSelect: FC & { return child; })} {expandable && ( - { - e.preventDefault(); - setExpand(!expand); - }} - onKeyDown={(e) => { - if (e.key === 'Enter') { - e.preventDefault(); - setExpand(!expand); - } - }} + onClick={() => setExpand((prev) => !prev)} > {expand ? ( <> @@ -160,7 +150,7 @@ const TagSelect: FC & { )} - + )} ); diff --git a/src/pages/account/center/components/Projects/index.tsx b/src/pages/account/center/components/Projects/index.tsx index 36067b89..0c97cac8 100644 --- a/src/pages/account/center/components/Projects/index.tsx +++ b/src/pages/account/center/components/Projects/index.tsx @@ -36,7 +36,7 @@ const Projects: React.FC = () => { cover={{item.title}} > {item.title}} + title={{item.title}} description={item.subDescription} />
    diff --git a/src/pages/account/settings/components/base.tsx b/src/pages/account/settings/components/base.tsx index 51301806..9bf5e8c6 100644 --- a/src/pages/account/settings/components/base.tsx +++ b/src/pages/account/settings/components/base.tsx @@ -27,6 +27,10 @@ const validatorPhone = ( callback(); }; +const handleFinish = async () => { + message.success('更新基本信息成功'); +}; + const BaseView: React.FC = () => { const { styles } = useStyles(); @@ -45,9 +49,6 @@ const BaseView: React.FC = () => { } return ''; }; - const handleFinish = async () => { - message.success('更新基本信息成功'); - }; return (
    {loading ? null : ( diff --git a/src/pages/account/settings/components/binding.tsx b/src/pages/account/settings/components/binding.tsx index 10aad1ca..80ad7a35 100644 --- a/src/pages/account/settings/components/binding.tsx +++ b/src/pages/account/settings/components/binding.tsx @@ -3,47 +3,47 @@ import { DingdingOutlined, TaobaoOutlined, } from '@ant-design/icons'; -import { List } from 'antd'; +import { Button, List } from 'antd'; import React from 'react'; -const BindingView: React.FC = () => { - const getData = () => [ - { - title: '绑定淘宝', - description: '当前未绑定淘宝账号', - actions: [ - - 绑定 - , - ], - avatar: , - }, - { - title: '绑定支付宝', - description: '当前未绑定支付宝账号', - actions: [ - - 绑定 - , - ], - avatar: , - }, - { - title: '绑定钉钉', - description: '当前未绑定钉钉账号', - actions: [ - - 绑定 - , - ], - avatar: , - }, - ]; +const bindingData = [ + { + title: '绑定淘宝', + description: '当前未绑定淘宝账号', + actions: [ + , + ], + avatar: , + }, + { + title: '绑定支付宝', + description: '当前未绑定支付宝账号', + actions: [ + , + ], + avatar: , + }, + { + title: '绑定钉钉', + description: '当前未绑定钉钉账号', + actions: [ + , + ], + avatar: , + }, +]; +const BindingView: React.FC = () => { return ( ( = T extends (infer U)[] ? U : T; -const Action = ( - +const notificationAction = (key: string) => ( + ); -const NotificationView: React.FC = () => { - const getData = () => { - return [ - { - title: '用户消息', - description: '其他用户的消息将以站内信的形式通知', - actions: [Action], - }, - { - title: '系统消息', - description: '系统消息将以站内信的形式通知', - actions: [Action], - }, - { - title: '待办任务', - description: '待办任务将以站内信的形式通知', - actions: [Action], - }, - ]; - }; +const notificationData = [ + { + key: 'user-message', + title: '用户消息', + description: '其他用户的消息将以站内信的形式通知', + actions: [notificationAction('user-message-switch')], + }, + { + key: 'system-message', + title: '系统消息', + description: '系统消息将以站内信的形式通知', + actions: [notificationAction('system-message-switch')], + }, + { + key: 'todo-task', + title: '待办任务', + description: '待办任务将以站内信的形式通知', + actions: [notificationAction('todo-task-switch')], + }, +]; - const data = getData(); +const NotificationView: React.FC = () => { + const data = notificationData; return ( > + rowKey="key" itemLayout="horizontal" dataSource={data} renderItem={(item) => ( diff --git a/src/pages/account/settings/components/security.tsx b/src/pages/account/settings/components/security.tsx index d5c6398f..a7a26e14 100644 --- a/src/pages/account/settings/components/security.tsx +++ b/src/pages/account/settings/components/security.tsx @@ -1,4 +1,4 @@ -import { List } from 'antd'; +import { Button, List } from 'antd'; import React from 'react'; type Unpacked = T extends (infer U)[] ? U : T; @@ -9,61 +9,61 @@ const passwordStrength = { weak: 弱 Weak, }; -const SecurityView: React.FC = () => { - const getData = () => [ - { - title: '账户密码', - description: ( - <> - 当前密码强度: - {passwordStrength.strong} - - ), - actions: [ - - 修改 - , - ], - }, - { - title: '密保手机', - description: `已绑定手机:138****8293`, - actions: [ - - 修改 - , - ], - }, - { - title: '密保问题', - description: '未设置密保问题,密保问题可有效保护账户安全', - actions: [ - - 设置 - , - ], - }, - { - title: '备用邮箱', - description: `已绑定邮箱:ant***sign.com`, - actions: [ - - 修改 - , - ], - }, - { - title: 'MFA 设备', - description: '未绑定 MFA 设备,绑定后,可以进行二次确认', - actions: [ - - 绑定 - , - ], - }, - ]; +const securityData = [ + { + title: '账户密码', + description: ( + <> + 当前密码强度: + {passwordStrength.strong} + + ), + actions: [ + , + ], + }, + { + title: '密保手机', + description: `已绑定手机:138****8293`, + actions: [ + , + ], + }, + { + title: '密保问题', + description: '未设置密保问题,密保问题可有效保护账户安全', + actions: [ + , + ], + }, + { + title: '备用邮箱', + description: `已绑定邮箱:ant***sign.com`, + actions: [ + , + ], + }, + { + title: 'MFA 设备', + description: '未绑定 MFA 设备,绑定后,可以进行二次确认', + actions: [ + , + ], + }, +]; - const data = getData(); +const SecurityView: React.FC = () => { + const data = securityData; return ( > itemLayout="horizontal" diff --git a/src/pages/account/settings/index.tsx b/src/pages/account/settings/index.tsx index e6242bf3..8fdd6bbc 100644 --- a/src/pages/account/settings/index.tsx +++ b/src/pages/account/settings/index.tsx @@ -13,6 +13,17 @@ type SettingsState = { selectKey: SettingsStateKeys; }; +const menuMap: Record = { + base: '基本设置', + security: '安全设置', + binding: '账号绑定', + notification: '新消息通知', +}; +const menuItems = Object.keys(menuMap).map((item) => ({ + key: item, + label: menuMap[item], +})); + const SettingsContent: React.FC<{ selectKey: SettingsStateKeys }> = ({ selectKey, }) => { @@ -32,12 +43,6 @@ const SettingsContent: React.FC<{ selectKey: SettingsStateKeys }> = ({ const Settings: React.FC = () => { const { styles } = useStyles(); - const menuMap: Record = { - base: '基本设置', - security: '安全设置', - binding: '账号绑定', - notification: '新消息通知', - }; const [initConfig, setInitConfig] = useState({ mode: 'inline', selectKey: 'base', @@ -75,12 +80,6 @@ const Settings: React.FC = () => { window.removeEventListener('resize', handler); }; }, []); - const getMenu = () => { - return Object.keys(menuMap).map((item) => ({ - key: item, - label: menuMap[item], - })); - }; return (
    { selectKey: key as SettingsStateKeys, })); }} - items={getMenu()} + items={menuItems} />
    diff --git a/src/pages/dashboard/analysis/components/Charts/index.tsx b/src/pages/dashboard/analysis/components/Charts/index.tsx deleted file mode 100644 index d407c39b..00000000 --- a/src/pages/dashboard/analysis/components/Charts/index.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import { formatYuan } from '@/utils/format'; -import ChartCard from './ChartCard'; -import Field from './Field'; - -const Charts = { - yuan: formatYuan, - ChartCard, - Field, -}; - -export { ChartCard, Charts as default, Field, formatYuan as yuan }; diff --git a/src/pages/dashboard/analysis/components/IntroduceRow.tsx b/src/pages/dashboard/analysis/components/IntroduceRow.tsx index fe1031d3..b278e4fb 100644 --- a/src/pages/dashboard/analysis/components/IntroduceRow.tsx +++ b/src/pages/dashboard/analysis/components/IntroduceRow.tsx @@ -5,7 +5,8 @@ import { formatNumber } from '@/utils/format'; import type { DataItem } from '../data.d'; import useStyles from '../style.style'; import Yuan from '../utils/Yuan'; -import { ChartCard, Field } from './Charts'; +import ChartCard from './Charts/ChartCard'; +import Field from './Charts/Field'; import Trend from './Trend'; const topColResponsiveProps = { diff --git a/src/pages/dashboard/analysis/components/NumberInfo/index.tsx b/src/pages/dashboard/analysis/components/NumberInfo/index.tsx index e6d09b58..979ff9dc 100644 --- a/src/pages/dashboard/analysis/components/NumberInfo/index.tsx +++ b/src/pages/dashboard/analysis/components/NumberInfo/index.tsx @@ -5,6 +5,7 @@ import useStyles from './index.style'; export type NumberInfoProps = { title?: React.ReactNode | string; subTitle?: React.ReactNode | string; + renderSubTitle?: () => React.ReactNode; total?: React.ReactNode | string; status?: 'up' | 'down'; theme?: string; @@ -17,6 +18,7 @@ const NumberInfo: React.FC = ({ theme, title, subTitle, + renderSubTitle, total, subTotal, status, @@ -25,6 +27,8 @@ const NumberInfo: React.FC = ({ ...rest }) => { const { styles } = useStyles(); + const subTitleNode = renderSubTitle?.() ?? subTitle; + const hasSubTitle = subTitleNode !== null && subTitleNode !== undefined; return (
    = ({ {title}
    )} - {subTitle && ( + {hasSubTitle && (
    - {subTitle} + {subTitleNode}
    )}
    React.ReactNode; salesType: 'all' | 'online' | 'stores'; salesPieData: DataItem[]; handleChangeSalesType?: (value: 'all' | 'online' | 'stores') => void; }) => { const { styles } = useStyles(); + const dropdownGroup = renderDropdownGroup(); + const extra = ( +
    + {dropdownGroup} + +
    + ); return ( - {dropdownGroup} - -
    - } + extra={extra} > 销售额 ( + + 搜索用户数 + + + + +); + +const renderAverageSearchSubtitle = () => ( + + 人均搜索次数 + + + + +); + const TopSearch = ({ loading, visitData2, searchData, - dropdownGroup, + renderDropdownGroup, }: { loading: boolean; visitData2: DataItem[]; - dropdownGroup: React.ReactNode; + renderDropdownGroup: () => React.ReactNode; searchData: DataItem[]; }) => { + const dropdownGroup = renderDropdownGroup(); const columns = [ { title: '排名', @@ -92,18 +119,7 @@ const TopSearch = ({ }} > - 搜索用户数 - - - - - } + renderSubTitle={renderSearchUserSubtitle} gap={8} total={formatNumber(12321)} status="up" @@ -131,18 +147,7 @@ const TopSearch = ({ }} > - 人均搜索次数 - - - - - } + renderSubTitle={renderAverageSearchSubtitle} total={2.7} status="down" subTotal={26.2} diff --git a/src/pages/dashboard/analysis/index.tsx b/src/pages/dashboard/analysis/index.tsx index b38672b5..dc97b8dd 100644 --- a/src/pages/dashboard/analysis/index.tsx +++ b/src/pages/dashboard/analysis/index.tsx @@ -29,7 +29,7 @@ const Analysis: FC = () => { const [salesType, setSalesType] = useState('all'); const [currentTabKey, setCurrentTabKey] = useState(''); const [rangePickerValue, setRangePickerValue] = useState( - getTimeDistance('year'), + () => getTimeDistance('year'), ); const { isLoading: loading, data } = useQuery({ queryKey: ['dashboard-analysis'], @@ -71,7 +71,7 @@ const Analysis: FC = () => { : data?.salesTypeDataOffline; } - const dropdownGroup = ( + const renderDropdownGroup = () => ( = () => { loading={loading} visitData2={data?.visitData2 || []} searchData={data?.searchData || []} - dropdownGroup={dropdownGroup} + renderDropdownGroup={renderDropdownGroup} /> = ({ children }) => { - const spanRef = useRef(null); - - useEffect(() => { - if (spanRef.current) { - spanRef.current.innerHTML = yuan(children); - } - }, [children]); - - return ; + return {formatYuan(children)}; }; export default Yuan; diff --git a/src/pages/dashboard/analysis/utils/utils.ts b/src/pages/dashboard/analysis/utils/utils.ts index 6a1d4d5e..114e8ea0 100644 --- a/src/pages/dashboard/analysis/utils/utils.ts +++ b/src/pages/dashboard/analysis/utils/utils.ts @@ -3,7 +3,7 @@ import dayjs from 'dayjs'; type RangePickerValue = RangePickerProps['value']; -export function fixedZero(val: number) { +function fixedZero(val: number) { return val * 1 < 10 ? `0${val}` : val; } diff --git a/src/pages/dashboard/monitor/components/ActiveChart/index.tsx b/src/pages/dashboard/monitor/components/ActiveChart/index.tsx index 1f6ea808..97129947 100644 --- a/src/pages/dashboard/monitor/components/ActiveChart/index.tsx +++ b/src/pages/dashboard/monitor/components/ActiveChart/index.tsx @@ -20,14 +20,17 @@ function getActiveData() { const ActiveChart = () => { const timerRef = useRef(null); const { styles } = useStyles(); - const [activeData, setActiveData] = useState<{ x: string; y: number }[]>([]); + const [activeData, setActiveData] = useState<{ x: string; y: number }[]>(() => + getActiveData(), + ); useEffect(() => { const loopData = () => { setActiveData(getActiveData()); timerRef.current = window.setTimeout(loopData, 2000); }; - loopData(); + // Initial data is already created lazily; start the refresh cadence after one interval. + timerRef.current = window.setTimeout(loopData, 2000); return () => { if (timerRef.current) { clearTimeout(timerRef.current); diff --git a/src/pages/dashboard/workplace/index.tsx b/src/pages/dashboard/workplace/index.tsx index 891a25ff..5f9828ad 100644 --- a/src/pages/dashboard/workplace/index.tsx +++ b/src/pages/dashboard/workplace/index.tsx @@ -118,7 +118,7 @@ const Workplace: FC = () => { avatar={} title={ - + {item.user.name}   @@ -281,12 +281,12 @@ const Workplace: FC = () => { {projectNotice.map((item) => { return ( - + {item.member.substring(0, 3)} - + ); })} diff --git a/src/pages/form/advanced-form/index.tsx b/src/pages/form/advanced-form/index.tsx index 2f761f16..6370cfda 100644 --- a/src/pages/form/advanced-form/index.tsx +++ b/src/pages/form/advanced-form/index.tsx @@ -10,7 +10,7 @@ import { ProFormText, ProFormTimePicker, } from '@ant-design/pro-components'; -import { Card, Col, message, Popover, Row } from 'antd'; +import { Button, Card, Col, message, Popover, Row } from 'antd'; import type { FC } from 'react'; import { useRef, useState } from 'react'; import { fakeSubmitForm } from './service'; @@ -161,16 +161,13 @@ const AdvancedForm: FC> = () => { valueType: 'option', render: (_, record: TableFormDateType, _index, action) => { return [ - { - e.preventDefault(); - action?.startEditable(record.key); - }} + type="link" + onClick={() => action?.startEditable(record.key)} > 编辑 - , + , ]; }, }, diff --git a/src/pages/form/basic-form/index.test.tsx b/src/pages/form/basic-form/index.test.tsx index f990e855..5b065c91 100644 --- a/src/pages/form/basic-form/index.test.tsx +++ b/src/pages/form/basic-form/index.test.tsx @@ -12,16 +12,12 @@ vi.mock('@ant-design/pro-components', () => ({
    ), ProForm: ({ children, onFinish }: any) => ( -
    { - e.preventDefault(); - onFinish?.(); - }} - > +
    {children} - - + +
    ), ProFormText: ({ label, name }: any) => (
    {label}
    @@ -145,7 +141,7 @@ describe('BasicForm', () => { submitButton.click(); await waitFor(() => { - expect(mockSubmit).toHaveBeenCalled(); + expect(mockSubmit.mock.calls[0]?.[0]).toEqual({}); }); }); diff --git a/src/pages/list/basic-list/index.tsx b/src/pages/list/basic-list/index.tsx index 3416b23f..36f5c171 100644 --- a/src/pages/list/basic-list/index.tsx +++ b/src/pages/list/basic-list/index.tsx @@ -171,9 +171,9 @@ const BasicList: FC = () => { ], }} > - + ); }; @@ -229,16 +229,13 @@ const BasicList: FC = () => { renderItem={(item) => ( { - e.preventDefault(); - showEditModal(item); - }} + type="link" + onClick={() => showEditModal(item)} > 编辑 - , + , renderMoreBtn(item), ]} > diff --git a/src/pages/list/card-list/index.tsx b/src/pages/list/card-list/index.tsx index bdeae33d..62e37641 100644 --- a/src/pages/list/card-list/index.tsx +++ b/src/pages/list/card-list/index.tsx @@ -7,6 +7,8 @@ import { queryFakeList } from './service'; import useStyles from './style.style'; const { Paragraph } = Typography; +const nullData: Partial = {}; + const CardList = () => { const { styles } = useStyles(); const { data, isLoading: loading } = useQuery({ @@ -22,21 +24,21 @@ const CardList = () => { 提供跨越设计与开发的体验解决方案。

    ); - const nullData: Partial = {}; return (
    @@ -79,12 +80,12 @@ const CardList = () => { hoverable className={styles.card} actions={[ - + , + , ]} > { src={item.avatar} /> } - title={{item.title}} + title={{item.title}} description={ { }; const list = data?.list || []; + const listItemExtra =
    ; const setOwner = () => { + const owner = ['wzj']; form.setFieldsValue({ - owner: ['wzj'], + owner, }); - }; - - const owners = [ - { - id: 'wzj', - name: '我自己', - }, - { - id: 'wjh', - name: '吴家豪', - }, - { - id: 'zxx', - name: '周星星', - }, - { - id: 'zly', - name: '赵丽颖', - }, - { - id: 'ym', - name: '姚明', - }, - ]; - - const formItemLayout = { - wrapperCol: { - xs: { span: 24 }, - sm: { span: 24 }, - md: { span: 12 }, - }, + filtersRef.current = { + ...filtersRef.current, + owner, + }; + refetch(); }; const loadMoreDom = list.length > 0 && ( @@ -180,22 +185,13 @@ const Articles: FC = () => { options={ownerOptions} /> - { - e.preventDefault(); - setOwner(); - }} - onKeyDown={(e) => { - if (e.key === 'Enter') { - e.preventDefault(); - setOwner(); - } - }} + onClick={setOwner} > 只看自己的 - + @@ -245,7 +241,6 @@ const Articles: FC = () => { loading={loading} rowKey="id" itemLayout="vertical" - loadMore={loadMoreDom} dataSource={list} renderItem={(item) => ( { , , ]} - extra={
    } + extra={listItemExtra} > { )} /> + {loadMoreDom} ); diff --git a/src/pages/list/search/projects/index.tsx b/src/pages/list/search/projects/index.tsx index f76f1c3b..17953223 100644 --- a/src/pages/list/search/projects/index.tsx +++ b/src/pages/list/search/projects/index.tsx @@ -12,6 +12,17 @@ import useStyles from './style.style'; const FormItem = Form.Item; const { Paragraph } = Typography; const getKey = (id: string, index: number) => `${id}-${index}`; +const formItemLayout = { + wrapperCol: { + xs: { + span: 24, + }, + sm: { + span: 16, + }, + }, +}; + const Projects: FC = () => { const { styles } = useStyles(); const [filters, setFilters] = useState<{ @@ -50,7 +61,7 @@ const Projects: FC = () => { cover={{item.title}} > {item.title}} + title={{item.title}} description={ { )} /> ); - const formItemLayout = { - wrapperCol: { - xs: { - span: 24, - }, - sm: { - span: 16, - }, - }, - }; return (
    diff --git a/src/pages/profile/advanced/index.tsx b/src/pages/profile/advanced/index.tsx index 43239156..51ae36a0 100644 --- a/src/pages/profile/advanced/index.tsx +++ b/src/pages/profile/advanced/index.tsx @@ -150,7 +150,7 @@ const descriptionItems: DescriptionsProps['items'] = [ { key: '1', label: '创建人', children: '曲丽丽' }, { key: '2', label: '订购产品', children: 'XX 服务' }, { key: '3', label: '创建时间', children: '2017-07-07' }, - { key: '4', label: '关联单据', children: 12421 }, + { key: '4', label: '关联单据', children: 12421 }, { key: '5', label: '生效日期', children: '2017-07-07 ~ 2017-08-08' }, { key: '6', label: '备注', children: '请于两个工作日内确认' }, ]; @@ -305,7 +305,9 @@ const Advanced: FC = () => { }} />
    - 催一下 +
    ); diff --git a/src/pages/result/fail/index.tsx b/src/pages/result/fail/index.tsx index 5c924358..2c97967c 100644 --- a/src/pages/result/fail/index.tsx +++ b/src/pages/result/fail/index.tsx @@ -22,15 +22,16 @@ export default () => { className={styles.error_icon} /> 您的账户已被冻结 - 立即解冻 - +
    { className={styles.error_icon} /> 您的账户还不具备申请资格 - 立即升级 - +
    ); diff --git a/src/pages/result/success/index.tsx b/src/pages/result/success/index.tsx index cc260105..387bb401 100644 --- a/src/pages/result/success/index.tsx +++ b/src/pages/result/success/index.tsx @@ -51,7 +51,7 @@ const Success: React.FC = () => { }} > 周毛毛 - +
    ); diff --git a/src/pages/table-list/index.tsx b/src/pages/table-list/index.tsx index b1459967..4ce8f49f 100644 --- a/src/pages/table-list/index.tsx +++ b/src/pages/table-list/index.tsx @@ -58,16 +58,15 @@ const TableList: React.FC = () => { dataIndex: 'name', render: (dom, entity) => { return ( - { - e.preventDefault(); + ); }, }, @@ -197,12 +196,12 @@ const TableList: React.FC = () => { render: (_, record) => [ + } key="config" onOk={actionRef.current?.reload} diff --git a/src/pages/user/login/index.tsx b/src/pages/user/login/index.tsx index e4218395..0b762c1b 100644 --- a/src/pages/user/login/index.tsx +++ b/src/pages/user/login/index.tsx @@ -19,7 +19,7 @@ import { useIntl, useModel, } from '@umijs/max'; -import { Alert, App, Tabs } from 'antd'; +import { Alert, App, Button, Tabs } from 'antd'; import { createStyles } from 'antd-style'; import React, { startTransition, useState } from 'react'; import { Footer } from '@/components'; @@ -27,6 +27,24 @@ import { login } from '@/services/ant-design-pro/api'; import { getFakeCaptcha } from '@/services/ant-design-pro/login'; import Settings from '../../../../config/defaultSettings'; +/** + * Validate redirect URL to prevent open redirect attacks. + * Only allow same-origin relative paths starting with '/'. + */ +const getSafeRedirectUrl = (redirect: string | null): string => { + if (!redirect?.startsWith('/')) return '/'; + + if (redirect.startsWith('//')) return '/'; + + try { + const parsed = new URL(redirect, window.location.origin); + if (parsed.origin !== window.location.origin) return '/'; + return `${parsed.pathname}${parsed.search}${parsed.hash}`; + } catch { + return '/'; + } +}; + const useStyles = createStyles(({ token }) => { return { action: { @@ -117,27 +135,6 @@ const Login: React.FC = () => { const { message } = App.useApp(); const intl = useIntl(); - /** - * Validate redirect URL to prevent open redirect attacks - * Only allow same-origin relative paths starting with '/' - */ - const getSafeRedirectUrl = (redirect: string | null): string => { - if (!redirect?.startsWith('/')) return '/'; - - // Block protocol-relative URLs (//example.com) - if (redirect.startsWith('//')) return '/'; - - try { - const parsed = new URL(redirect, window.location.origin); - // Only allow same-origin URLs - if (parsed.origin !== window.location.origin) return '/'; - // Return the path with query and hash preserved - return `${parsed.pathname}${parsed.search}${parsed.hash}`; - } catch { - return '/'; - } - }; - const fetchUserInfo = async () => { const userInfo = await initialState?.fetchUserInfo?.(); if (userInfo) { @@ -395,17 +392,18 @@ const Login: React.FC = () => { defaultMessage="自动登录" /> - - +
    diff --git a/src/pages/user/register-result/index.tsx b/src/pages/user/register-result/index.tsx index 33ff7d82..9ba9f160 100644 --- a/src/pages/user/register-result/index.tsx +++ b/src/pages/user/register-result/index.tsx @@ -9,11 +9,9 @@ const RegisterResult: React.FC> = () => { const actions = (
    - - - + diff --git a/src/pages/user/register/index.tsx b/src/pages/user/register/index.tsx index de1fde95..2dffe3ff 100644 --- a/src/pages/user/register/index.tsx +++ b/src/pages/user/register/index.tsx @@ -1,4 +1,4 @@ -import { useMutation } from '@tanstack/react-query'; +import { useMutation, useQueryClient } from '@tanstack/react-query'; import { history, Link } from '@umijs/max'; import { Button, @@ -30,6 +30,34 @@ const passwordProgressMap: { pass: 'normal', poor: 'exception', }; + +const getPasswordStatus = (value?: string) => { + if (value && value.length > 9) { + return 'ok'; + } + if (value && value.length > 5) { + return 'pass'; + } + return 'poor'; +}; + +const PasswordProgress: React.FC<{ + value?: string; + styles: Record; +}> = ({ value, styles }) => { + const passwordStatus = getPasswordStatus(value); + return value?.length ? ( +
    + 100 ? 100 : value.length * 10} + showInfo={false} + /> +
    + ) : null; +}; + const Register: FC = () => { const { styles } = useStyles(); const [count, setCount]: [number, any] = useState(0); @@ -38,6 +66,7 @@ const Register: FC = () => { const [popover, setPopover]: [boolean, any] = useState(false); const confirmDirty = false; let interval: number | undefined; + const queryClient = useQueryClient(); const passwordStatusMap = { ok: ( @@ -75,16 +104,6 @@ const Register: FC = () => { } }, 1000); }; - const getPasswordStatus = () => { - const value = form.getFieldValue('password'); - if (value && value.length > 9) { - return 'ok'; - } - if (value && value.length > 5) { - return 'pass'; - } - return 'poor'; - }; const { isPending: submitting, mutate: register } = useMutation({ mutationFn: (formValues: Store) => { const payload = { @@ -99,6 +118,7 @@ const Register: FC = () => { }, onSuccess: (data, params) => { if (data.status === 'ok') { + queryClient.invalidateQueries({ queryKey: ['current-user'] }); message.success('注册成功!'); history.push({ pathname: `/user/register-result?account=${params.mail}`, @@ -139,22 +159,8 @@ const Register: FC = () => { const changePrefix = (value: string) => { setPrefix(value); }; - const renderPasswordProgress = () => { - const value = form.getFieldValue('password'); - const passwordStatus = getPasswordStatus(); - return value?.length ? ( -
    - 100 ? 100 : value.length * 10} - showInfo={false} - /> -
    - ) : null; - }; + const password = Form.useWatch('password', form); + const passwordStatus = getPasswordStatus(password); return (

    注册

    @@ -188,8 +194,8 @@ const Register: FC = () => { padding: '4px 0', }} > - {passwordStatusMap[getPasswordStatus()]} - {renderPasswordProgress()} + {passwordStatusMap[passwordStatus]} +