From 0a85cfa4550a65a370fc2f7a0aa215de3325d2e0 Mon Sep 17 00:00:00 2001 From: Claude <242468646+Claude@users.noreply.github.com> Date: Wed, 6 May 2026 23:02:12 +0800 Subject: [PATCH 1/2] chore(deps): update @umijs/max to 4.6.50, upgrade utoopack to 1.4.2 (#11763) Co-authored-by: anthropic-code-agent[bot] <242468646+Claude@users.noreply.github.com> Co-authored-by: Alex Zhu --- package-lock.json | 311 +++++++++--------- package.json | 4 +- .../login/__snapshots__/login.test.tsx.snap | 8 +- 3 files changed, 161 insertions(+), 162 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3f9a4ec1..86900f8f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43,8 +43,8 @@ "@types/react-helmet": "^6.1.11", "@types/topojson-client": "^3.1.5", "@types/topojson-specification": "^1.0.5", - "@umijs/lint": "^4.6.49", - "@umijs/max": "^4.6.49", + "@umijs/lint": "^4.6.50", + "@umijs/max": "^4.6.50", "@umijs/max-plugin-openapi": "^2.0.3", "@umijs/request-record": "^1.1.4", "cross-env": "^10.1.0", @@ -4351,10 +4351,9 @@ } }, "node_modules/@hono/node-ws": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@hono/node-ws/-/node-ws-1.3.0.tgz", - "integrity": "sha512-ju25YbbvLuXdqBCmLZLqnNYu1nbHIQjoyUqA8ApZOeL1k4skuiTcw5SW77/5SUYo2Xi2NVBJoVlfQurnKEp03Q==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@hono/node-ws/-/node-ws-1.3.1.tgz", + "integrity": "sha512-vo/MwCnpJAVHBkGzWjCJ28wF45fYHAfbPZcH2rodZODHtch2GHA94KtMfusmVycTUtsLAsaNsHhtY6P8X3RQsA==", "dev": true, "license": "MIT", "dependencies": { @@ -4364,7 +4363,7 @@ "node": ">=18.14.1" }, "peerDependencies": { - "@hono/node-server": "^1.19.2", + "@hono/node-server": "^1.19.11", "hono": "^4.6.0" } }, @@ -8553,26 +8552,26 @@ } }, "node_modules/@umijs/ast": { - "version": "4.6.49", - "resolved": "https://registry.npmjs.org/@umijs/ast/-/ast-4.6.49.tgz", - "integrity": "sha512-k94kRJOpQjxc0lPumqH00m9yTjLOmdHIPiui8iJi4aiee8lqLeXkXGVZZ/D282LJ9eyxMDmH6qbcoKC51+Qe5g==", + "version": "4.6.50", + "resolved": "https://registry.npmjs.org/@umijs/ast/-/ast-4.6.50.tgz", + "integrity": "sha512-QU0Gzd7XYb2wrI67XQD4XwpbeSJznjrTTUzk8wSTqm1309Wqy8TEUHjG8pTxsruhZ+jmE+eQmRtzUM6yGn8TkA==", "dev": true, "license": "MIT", "dependencies": { - "@umijs/bundler-utils": "4.6.49" + "@umijs/bundler-utils": "4.6.50" } }, "node_modules/@umijs/babel-preset-umi": { - "version": "4.6.49", - "resolved": "https://registry.npmjs.org/@umijs/babel-preset-umi/-/babel-preset-umi-4.6.49.tgz", - "integrity": "sha512-ZQsF72ZwaLPSDy9yBPaanClDvb26rL0tLORhknmLeZu4ZNWlNV5bOF2wRvI6F0u0OTalA4ET2sXynNqHZZHbrg==", + "version": "4.6.50", + "resolved": "https://registry.npmjs.org/@umijs/babel-preset-umi/-/babel-preset-umi-4.6.50.tgz", + "integrity": "sha512-kPFiB2uPOHi29+SZNnPQG6ARtPnuXmpxw3CTEGA4FBW13Pnpq3lSBXXnsMBLhylqdwYqV21z1SPCLLbLNG8T4w==", "dev": true, "license": "MIT", "dependencies": { "@babel/runtime": "7.23.6", "@bloomberg/record-tuple-polyfill": "0.0.4", - "@umijs/bundler-utils": "4.6.49", - "@umijs/utils": "4.6.49", + "@umijs/bundler-utils": "4.6.50", + "@umijs/utils": "4.6.50", "core-js": "3.34.0" } }, @@ -8597,14 +8596,14 @@ "license": "MIT" }, "node_modules/@umijs/bundler-esbuild": { - "version": "4.6.49", - "resolved": "https://registry.npmjs.org/@umijs/bundler-esbuild/-/bundler-esbuild-4.6.49.tgz", - "integrity": "sha512-ToRxSRw4yhQMGMR4qJyONvilmy7qYPIOjYBKp0YrB4ewMuu37cT8yVLYuKK4uBT9rSB8rnMcvjMaNrZN/zg1bg==", + "version": "4.6.50", + "resolved": "https://registry.npmjs.org/@umijs/bundler-esbuild/-/bundler-esbuild-4.6.50.tgz", + "integrity": "sha512-PNo92NIpysl3YAU2k2cjASodHJa0ZaSJ2F5/2LfW2gYhKG107r09ZHFT1CXzwS47XQBHg3OWwDbuFQLJgrEiIw==", "dev": true, "license": "MIT", "dependencies": { - "@umijs/bundler-utils": "4.6.49", - "@umijs/utils": "4.6.49", + "@umijs/bundler-utils": "4.6.50", + "@umijs/utils": "4.6.50", "enhanced-resolve": "5.9.3", "postcss": "^8.4.21", "postcss-flexbugs-fixes": "5.0.2", @@ -9012,13 +9011,13 @@ } }, "node_modules/@umijs/bundler-utils": { - "version": "4.6.49", - "resolved": "https://registry.npmjs.org/@umijs/bundler-utils/-/bundler-utils-4.6.49.tgz", - "integrity": "sha512-OJnIjvAaE+89h4H/rQt1PowHR3Oz/NLW29pX/LkM1ycXjMcLegQgx3lLA3G7bYxjXt3WVkmmUVGxC6vPGcaseA==", + "version": "4.6.50", + "resolved": "https://registry.npmjs.org/@umijs/bundler-utils/-/bundler-utils-4.6.50.tgz", + "integrity": "sha512-sX6FcG683LvRCVtA/JTyOesz6z9bXMAx8dFDgRhp8SJDj1Yxe7FDIuDXop2kUzQIRjqb66TLbj6uXGQUhhaVoQ==", "dev": true, "license": "MIT", "dependencies": { - "@umijs/utils": "4.6.49", + "@umijs/utils": "4.6.50", "esbuild": "0.21.4", "regenerate": "^1.4.2", "regenerate-unicode-properties": "10.1.1", @@ -9026,14 +9025,14 @@ } }, "node_modules/@umijs/bundler-utoopack": { - "version": "4.6.49", - "resolved": "https://registry.npmjs.org/@umijs/bundler-utoopack/-/bundler-utoopack-4.6.49.tgz", - "integrity": "sha512-U9hrdd7eW/Lu4ayxIx8t14vHzrgILCCEJHqd6b2U98GSiqAs6Msu9aieM97FD9u/r13X4IefRBhD2dhLEN7UJg==", + "version": "4.6.50", + "resolved": "https://registry.npmjs.org/@umijs/bundler-utoopack/-/bundler-utoopack-4.6.50.tgz", + "integrity": "sha512-FCWHlaGGJyXEqGFmu4x6vrYWV4wByIL4eFPC9k2XWiPImJdmY/zCTB/1THhx9reI9SkojaG8FihgaNgVdbp5LQ==", "dev": true, "dependencies": { - "@umijs/bundler-utils": "4.6.49", - "@umijs/bundler-webpack": "4.6.49", - "@utoo/pack": "1.4.2-alpha.0", + "@umijs/bundler-utils": "4.6.50", + "@umijs/bundler-webpack": "4.6.50", + "@utoo/pack": "1.4.2", "compression": "^1.7.4", "connect-history-api-fallback": "^2.0.0", "cors": "^2.8.5", @@ -9344,15 +9343,15 @@ } }, "node_modules/@umijs/bundler-vite": { - "version": "4.6.49", - "resolved": "https://registry.npmjs.org/@umijs/bundler-vite/-/bundler-vite-4.6.49.tgz", - "integrity": "sha512-I6yZK58PGhe/PEwPNp3mz+971COAmJH3gceueUJEtouxgODwhbHniIVHrmysALizzYEnqB6dcPI1G9nqPyW0sA==", + "version": "4.6.50", + "resolved": "https://registry.npmjs.org/@umijs/bundler-vite/-/bundler-vite-4.6.50.tgz", + "integrity": "sha512-7ZHnk5Wd3SkRVEegRFI7f+3rPJeAUdAy0NTxMxKKGrbMSzaXuub/cOChqMsjTUCzyF+I8bLeC6+9JUNYMnXNOQ==", "dev": true, "license": "MIT", "dependencies": { "@svgr/core": "6.5.1", - "@umijs/bundler-utils": "4.6.49", - "@umijs/utils": "4.6.49", + "@umijs/bundler-utils": "4.6.50", + "@umijs/utils": "4.6.50", "@vitejs/plugin-react": "4.0.0", "core-js": "3.34.0", "less": "4.1.3", @@ -9366,9 +9365,9 @@ } }, "node_modules/@umijs/bundler-webpack": { - "version": "4.6.49", - "resolved": "https://registry.npmjs.org/@umijs/bundler-webpack/-/bundler-webpack-4.6.49.tgz", - "integrity": "sha512-HLS9+kkw/je1fuaLT5S61rfxf4l1uRRMJukBaDsfN3wIdDlov/GjGN8C9oyShvNGJD+AIxLRo/NMEcbdNijqTQ==", + "version": "4.6.50", + "resolved": "https://registry.npmjs.org/@umijs/bundler-webpack/-/bundler-webpack-4.6.50.tgz", + "integrity": "sha512-hWSuC6P6zVmRCWJdKpJNKvOI0luPZlmdBCKD9A9WCP+A4464ktGlqCtnswYY7v6Aa1NT0lZ0RviUWxCGdAnc6A==", "dev": true, "license": "MIT", "dependencies": { @@ -9376,12 +9375,12 @@ "@svgr/plugin-jsx": "^6.5.1", "@svgr/plugin-svgo": "^6.5.1", "@types/hapi__joi": "17.1.9", - "@umijs/babel-preset-umi": "4.6.49", - "@umijs/bundler-utils": "4.6.49", + "@umijs/babel-preset-umi": "4.6.50", + "@umijs/bundler-utils": "4.6.50", "@umijs/case-sensitive-paths-webpack-plugin": "^1.0.1", - "@umijs/mfsu": "4.6.49", + "@umijs/mfsu": "4.6.50", "@umijs/react-refresh-webpack-plugin": "0.5.11", - "@umijs/utils": "4.6.49", + "@umijs/utils": "4.6.50", "cors": "^2.8.5", "css-loader": "6.7.1", "es5-imcompatible-versions": "^0.1.78", @@ -9740,14 +9739,14 @@ "license": "MIT" }, "node_modules/@umijs/core": { - "version": "4.6.49", - "resolved": "https://registry.npmjs.org/@umijs/core/-/core-4.6.49.tgz", - "integrity": "sha512-J+9DYeV2X0EdqpeXHZ3PSe99M32YS4SKtbU7MuZmRYqr7el03N8o9A7gj60ND5OE4SzhwodLR8i6WEGPyZWUog==", + "version": "4.6.50", + "resolved": "https://registry.npmjs.org/@umijs/core/-/core-4.6.50.tgz", + "integrity": "sha512-ycoFJ9nT6E7Mjq47KaIkjksq4h0RwEwfv60VEzrG5idO3/lHVjfKgoEGO7KwNbzJovC/Wk7AEAWz9qfpoaXnPg==", "dev": true, "license": "MIT", "dependencies": { - "@umijs/bundler-utils": "4.6.49", - "@umijs/utils": "4.6.49" + "@umijs/bundler-utils": "4.6.50", + "@umijs/utils": "4.6.50" } }, "node_modules/@umijs/did-you-know": { @@ -9943,9 +9942,9 @@ } }, "node_modules/@umijs/lint": { - "version": "4.6.49", - "resolved": "https://registry.npmjs.org/@umijs/lint/-/lint-4.6.49.tgz", - "integrity": "sha512-iPUjZ4w4t3cj/lSmtGN71jSQFPGIkih7DNkACLSQLtgaxpJ1DQYC8EIegN/Md49lKO9FN/UmyXD0fEW5Qyap5w==", + "version": "4.6.50", + "resolved": "https://registry.npmjs.org/@umijs/lint/-/lint-4.6.50.tgz", + "integrity": "sha512-UIoC1TtexdTUgu6lwIw2fMgTiOUXzm2pz+iCmYAOJLngnXYn17VfrJT4c7VaokjFZuCGDpp/mW+4/MFhTpOK/g==", "dev": true, "license": "MIT", "dependencies": { @@ -9954,7 +9953,7 @@ "@stylelint/postcss-css-in-js": "^0.38.0", "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", - "@umijs/babel-preset-umi": "4.6.49", + "@umijs/babel-preset-umi": "4.6.50", "eslint-plugin-jest": "27.2.3", "eslint-plugin-react": "7.33.2", "eslint-plugin-react-hooks": "4.6.0", @@ -10275,18 +10274,18 @@ } }, "node_modules/@umijs/max": { - "version": "4.6.49", - "resolved": "https://registry.npmjs.org/@umijs/max/-/max-4.6.49.tgz", - "integrity": "sha512-AYv57uGY5Nw/eIMcQLG29YGyfgJ232GZMamP6WdZco/8eTwDq2aE86lqh3swvYIjNrP8FMAzsoHlYiG7UYdEcA==", + "version": "4.6.50", + "resolved": "https://registry.npmjs.org/@umijs/max/-/max-4.6.50.tgz", + "integrity": "sha512-OQiwd59G9HmoOsmosX/lPu/xHo5dH7oOl8PnBU4c+77xlvlIxKW9vTDgojto2uGQpqh7/EOf/zOQUDEDjqF6FA==", "dev": true, "license": "MIT", "dependencies": { - "@umijs/lint": "4.6.49", - "@umijs/plugins": "4.6.49", + "@umijs/lint": "4.6.50", + "@umijs/plugins": "4.6.50", "antd": "^4.20.6", "eslint": "8.35.0", "stylelint": "14.8.2", - "umi": "4.6.49" + "umi": "4.6.50" }, "bin": { "max": "bin/max.js" @@ -10449,15 +10448,15 @@ } }, "node_modules/@umijs/mfsu": { - "version": "4.6.49", - "resolved": "https://registry.npmjs.org/@umijs/mfsu/-/mfsu-4.6.49.tgz", - "integrity": "sha512-SlqQqBO7qodU0M3DP+ELhumx5lzDx+7CyS/tCJc1zsZUJMZ7a7xvMCiMPOqbL/YCkrO+nNfO62SWPKdWM3nFKA==", + "version": "4.6.50", + "resolved": "https://registry.npmjs.org/@umijs/mfsu/-/mfsu-4.6.50.tgz", + "integrity": "sha512-9B+i+001fOEB4joVW3PJpwTDGt9y1XNqrv/ubXkuVcEWPbHHafTlhzGtJukT6Av2i/ro98XLYeUA/sswhvLzHg==", "dev": true, "license": "MIT", "dependencies": { - "@umijs/bundler-esbuild": "4.6.49", - "@umijs/bundler-utils": "4.6.49", - "@umijs/utils": "4.6.49", + "@umijs/bundler-esbuild": "4.6.50", + "@umijs/bundler-utils": "4.6.50", + "@umijs/utils": "4.6.50", "enhanced-resolve": "5.9.3", "is-equal": "^1.6.4" } @@ -10523,9 +10522,9 @@ } }, "node_modules/@umijs/plugin-run": { - "version": "4.6.49", - "resolved": "https://registry.npmjs.org/@umijs/plugin-run/-/plugin-run-4.6.49.tgz", - "integrity": "sha512-dg6aewJysW6+E9homv7nQAdqiy/7SFLzF8tTogvzfGjFuozGkGGNXf/IVcCKHXEcjFJy48R4CC4fPZKiapqmfQ==", + "version": "4.6.50", + "resolved": "https://registry.npmjs.org/@umijs/plugin-run/-/plugin-run-4.6.50.tgz", + "integrity": "sha512-VTjh3q8ARZOypLR5kUBAupMHwFW2x15CFM05EzSDSaJuPXPOyit7O+4gfAEnHBr1S8WMZF56D8OtiFprsjZYtw==", "dev": true, "license": "MIT", "dependencies": { @@ -10533,9 +10532,9 @@ } }, "node_modules/@umijs/plugins": { - "version": "4.6.49", - "resolved": "https://registry.npmjs.org/@umijs/plugins/-/plugins-4.6.49.tgz", - "integrity": "sha512-6OGd3NznM9EymGpe/2npcfHXem4vNwp+xWDCL6H5Z2amNILvT9DiGeile8jczuYIkMIELxQQPj3WS+keq1gwAw==", + "version": "4.6.50", + "resolved": "https://registry.npmjs.org/@umijs/plugins/-/plugins-4.6.50.tgz", + "integrity": "sha512-EexuCD0LiN2Itg3RrSeULwFEmatuwX6WdfFbZdOSwtJqstUOh3KERBQ5vbalJMlLQjXhbFIeSlzY57sXDgUVDA==", "dev": true, "license": "MIT", "dependencies": { @@ -10547,7 +10546,7 @@ "@ant-design/pro-components": "^2.0.1", "@tanstack/react-query": "^4.24.10", "@tanstack/react-query-devtools": "^4.24.10", - "@umijs/bundler-utils": "4.6.49", + "@umijs/bundler-utils": "4.6.50", "@umijs/valtio": "1.0.4", "antd-dayjs-webpack-plugin": "^1.0.6", "axios": "^0.27.2", @@ -10698,34 +10697,34 @@ } }, "node_modules/@umijs/preset-umi": { - "version": "4.6.49", - "resolved": "https://registry.npmjs.org/@umijs/preset-umi/-/preset-umi-4.6.49.tgz", - "integrity": "sha512-5DADLLrv2vkAaJK+griLoJFl4qotC96BKl4r6eTxOWxUk20iLcuHPXNbAPVHsCIiiZZNGeNMfiltm4RkaPqNzw==", + "version": "4.6.50", + "resolved": "https://registry.npmjs.org/@umijs/preset-umi/-/preset-umi-4.6.50.tgz", + "integrity": "sha512-JsRv1/GS+eAm496TSerxFQT+Yb4bHQq7W32C1qfCDJYqx8WLeBBrWhYoX+wX04llvcNY8R7P2NDJ0w3zuPE/3Q==", "dev": true, "license": "MIT", "dependencies": { "@iconify/utils": "2.1.1", "@stagewise/toolbar": "0.6.2", "@svgr/core": "6.5.1", - "@umijs/ast": "4.6.49", - "@umijs/babel-preset-umi": "4.6.49", - "@umijs/bundler-esbuild": "4.6.49", + "@umijs/ast": "4.6.50", + "@umijs/babel-preset-umi": "4.6.50", + "@umijs/bundler-esbuild": "4.6.50", "@umijs/bundler-mako": "0.11.10", - "@umijs/bundler-utils": "4.6.49", - "@umijs/bundler-utoopack": "4.6.49", - "@umijs/bundler-vite": "4.6.49", - "@umijs/bundler-webpack": "4.6.49", - "@umijs/core": "4.6.49", + "@umijs/bundler-utils": "4.6.50", + "@umijs/bundler-utoopack": "4.6.50", + "@umijs/bundler-vite": "4.6.50", + "@umijs/bundler-webpack": "4.6.50", + "@umijs/core": "4.6.50", "@umijs/did-you-know": "^1.0.4", "@umijs/es-module-parser": "0.0.7", "@umijs/history": "5.3.1", - "@umijs/mfsu": "4.6.49", - "@umijs/plugin-run": "4.6.49", - "@umijs/renderer-react": "4.6.49", - "@umijs/server": "4.6.49", + "@umijs/mfsu": "4.6.50", + "@umijs/plugin-run": "4.6.50", + "@umijs/renderer-react": "4.6.50", + "@umijs/server": "4.6.50", "@umijs/ui": "3.0.1", - "@umijs/utils": "4.6.49", - "@umijs/zod2ts": "4.6.49", + "@umijs/utils": "4.6.50", + "@umijs/zod2ts": "4.6.50", "babel-plugin-dynamic-import-node": "2.3.3", "babel-plugin-react-compiler": "0.0.0-experimental-c23de8d-20240515", "click-to-react-component": "1.1.3", @@ -10936,9 +10935,9 @@ } }, "node_modules/@umijs/renderer-react": { - "version": "4.6.49", - "resolved": "https://registry.npmjs.org/@umijs/renderer-react/-/renderer-react-4.6.49.tgz", - "integrity": "sha512-HqvtH2pO4Y5K65KnqdD+3fU6pxfDNuwX5vBgp9aD0BRflI4CjFz9jL85apEoMjFPUY1kybmjVGL83d3+kgrLFA==", + "version": "4.6.50", + "resolved": "https://registry.npmjs.org/@umijs/renderer-react/-/renderer-react-4.6.50.tgz", + "integrity": "sha512-AwO4MLt+45xmWnHw9P+gzqCQv5h6PRjbJsvFakl2BOW94fVaLMDt6wBcwdy5LlOdrNPmBImtvHHvH0k7HxjCEA==", "dev": true, "license": "MIT", "dependencies": { @@ -11291,13 +11290,13 @@ "license": "MIT" }, "node_modules/@umijs/server": { - "version": "4.6.49", - "resolved": "https://registry.npmjs.org/@umijs/server/-/server-4.6.49.tgz", - "integrity": "sha512-QRtxHb1Go1nDYLu+oVBMwp83hv+u+/Jx5n+rd7a0BydzXCLRj3eS3ABUCnG/CV+Uds22jcwLVayE+xjzcrlreQ==", + "version": "4.6.50", + "resolved": "https://registry.npmjs.org/@umijs/server/-/server-4.6.50.tgz", + "integrity": "sha512-1PRUs1XxbQbZDOdI9voo3qTxmXCnlw7EnCtiY6lC82MGklaAcB5kC9TEHItUpXCrLLH3rkd5EZzh41aLBjBCtQ==", "dev": true, "license": "MIT", "dependencies": { - "@umijs/bundler-utils": "4.6.49", + "@umijs/bundler-utils": "4.6.50", "history": "5.3.0", "react": "18.3.1", "react-dom": "18.3.1", @@ -11342,16 +11341,16 @@ } }, "node_modules/@umijs/test": { - "version": "4.6.49", - "resolved": "https://registry.npmjs.org/@umijs/test/-/test-4.6.49.tgz", - "integrity": "sha512-69cROJ9LEUoJcIeV+qGk6P2d63xukq47DmqN9qFN0U3mZpOKbWYgtYu7wgajZigY8MRiAcRo0d3kMVOu3GJGmg==", + "version": "4.6.50", + "resolved": "https://registry.npmjs.org/@umijs/test/-/test-4.6.50.tgz", + "integrity": "sha512-yazAgTYQedGHQoUVkbm4kHNHqvE8VMQBkfG8IxIYnIVHvmGSHiKXT9iTafvbKWmKwAHaSFXAIEMzzIdYaj9LTA==", "dev": true, "license": "MIT", "dependencies": { "@babel/plugin-transform-modules-commonjs": "7.23.3", "@jest/types": "27.5.1", - "@umijs/bundler-utils": "4.6.49", - "@umijs/utils": "4.6.49", + "@umijs/bundler-utils": "4.6.50", + "@umijs/utils": "4.6.50", "babel-jest": "^29.7.0", "esbuild": "0.21.4", "identity-obj-proxy": "3.0.0", @@ -11755,9 +11754,9 @@ } }, "node_modules/@umijs/utils": { - "version": "4.6.49", - "resolved": "https://registry.npmjs.org/@umijs/utils/-/utils-4.6.49.tgz", - "integrity": "sha512-cJRgm36un9GaJ/QU/bSllhLuPkAPCC3y3SYW8TaJY2jPFZHLuVYbN8uOFn1SwPP/bur4DW9m6yyjIbTT68cmsA==", + "version": "4.6.50", + "resolved": "https://registry.npmjs.org/@umijs/utils/-/utils-4.6.50.tgz", + "integrity": "sha512-bqW6nVG1xpgrudWcX1DRdiDzYHzEtILRkg9iHm1BAjQ4/g40GHvWwFXY6QY+/jBo9Nw86jCI6Sg4DQ1zUBCfZw==", "dev": true, "license": "MIT", "dependencies": { @@ -11804,9 +11803,9 @@ } }, "node_modules/@umijs/zod2ts": { - "version": "4.6.49", - "resolved": "https://registry.npmjs.org/@umijs/zod2ts/-/zod2ts-4.6.49.tgz", - "integrity": "sha512-rzU5Wi6nOQPmMI188X0GjnADacJR1g74ayQWyy6OZ2kFea12TUrCOK/1yVOjWUMCN5Bo/khCCDkDlFeWxlHp8w==", + "version": "4.6.50", + "resolved": "https://registry.npmjs.org/@umijs/zod2ts/-/zod2ts-4.6.50.tgz", + "integrity": "sha512-kvLWaCyjZpVQzZwj6cV5Y36VwQYPTe1h2N06QITDSZdCqAfy/LCUE0r7AwrXlbeJoVSXVFUp3jdDdoLh4Q+2+Q==", "dev": true, "license": "MIT" }, @@ -12110,9 +12109,9 @@ } }, "node_modules/@utoo/pack": { - "version": "1.4.2-alpha.0", - "resolved": "https://registry.npmjs.org/@utoo/pack/-/pack-1.4.2-alpha.0.tgz", - "integrity": "sha512-jj8X5c/IBCDuTQLiOJ/f6tn59xRKYDDH9COMo6Iftu40sgjPzIuLVApkkOhF5y9J2QYNvZj+5iwykhOqfLtY1A==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@utoo/pack/-/pack-1.4.2.tgz", + "integrity": "sha512-qfXsQ/Ik8aAfMaCud6JVBZ5ksjJw5CWn056gHvidmEZ3sBr0JIt+/MJ18ydczaWyjoQokL4y3e5sVbkpJLlFEw==", "dev": true, "license": "MIT", "dependencies": { @@ -12120,7 +12119,7 @@ "@hono/node-server": "^1.19.11", "@hono/node-ws": "^1.3.0", "@swc/helpers": "0.5.15", - "@utoo/pack-shared": "1.4.2-alpha.0", + "@utoo/pack-shared": "1.4.2", "domparser-rs": "^0.0.7", "find-up": "4.1.0", "get-port": "5.1.1", @@ -12135,13 +12134,13 @@ "node": ">= 20" }, "optionalDependencies": { - "@utoo/pack-darwin-arm64": "1.4.2-alpha.0", - "@utoo/pack-darwin-x64": "1.4.2-alpha.0", - "@utoo/pack-linux-arm64-gnu": "1.4.2-alpha.0", - "@utoo/pack-linux-arm64-musl": "1.4.2-alpha.0", - "@utoo/pack-linux-x64-gnu": "1.4.2-alpha.0", - "@utoo/pack-linux-x64-musl": "1.4.2-alpha.0", - "@utoo/pack-win32-x64-msvc": "1.4.2-alpha.0" + "@utoo/pack-darwin-arm64": "1.4.2", + "@utoo/pack-darwin-x64": "1.4.2", + "@utoo/pack-linux-arm64-gnu": "1.4.2", + "@utoo/pack-linux-arm64-musl": "1.4.2", + "@utoo/pack-linux-x64-gnu": "1.4.2", + "@utoo/pack-linux-x64-musl": "1.4.2", + "@utoo/pack-win32-x64-msvc": "1.4.2" }, "peerDependencies": { "less": "^4.0.0", @@ -12154,9 +12153,9 @@ } }, "node_modules/@utoo/pack-darwin-arm64": { - "version": "1.4.2-alpha.0", - "resolved": "https://registry.npmjs.org/@utoo/pack-darwin-arm64/-/pack-darwin-arm64-1.4.2-alpha.0.tgz", - "integrity": "sha512-klJgkxyUkcC5w+kMC3gqhyUYNUfCu760cn6ZJqld+SZbZRc64TlZS0DNJmpmxfCle2w8GQ+9wVW959C1HdthbA==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@utoo/pack-darwin-arm64/-/pack-darwin-arm64-1.4.2.tgz", + "integrity": "sha512-lMjMDOWSobJEwfslgit7CNYW5JWPxOHY0Gm5ZOXI/KcL5S7bHUJ9Ktc/KoaONEssscECLN/kbJrx2S0ZEFmV3A==", "cpu": [ "arm64" ], @@ -12171,9 +12170,9 @@ } }, "node_modules/@utoo/pack-darwin-x64": { - "version": "1.4.2-alpha.0", - "resolved": "https://registry.npmjs.org/@utoo/pack-darwin-x64/-/pack-darwin-x64-1.4.2-alpha.0.tgz", - "integrity": "sha512-HIHpCqDzX4pU7aIrDi0cL2EKTsB6d2UCx7QGWM2mlZh1ALUmMp5ARvH1V69ekoYFX5xWaQz7dOGAcQDE4HO6Cg==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@utoo/pack-darwin-x64/-/pack-darwin-x64-1.4.2.tgz", + "integrity": "sha512-mAV+Cmt5yNIyHI6hj0q+A76gQDbTeCi2ipI5STqgrDJQsLuPbV7gOVqKo2CF4S9Kc0+o7au88EAYZ6RstnvBUQ==", "cpu": [ "x64" ], @@ -12188,9 +12187,9 @@ } }, "node_modules/@utoo/pack-linux-arm64-gnu": { - "version": "1.4.2-alpha.0", - "resolved": "https://registry.npmjs.org/@utoo/pack-linux-arm64-gnu/-/pack-linux-arm64-gnu-1.4.2-alpha.0.tgz", - "integrity": "sha512-qKradp/tVxkDfwZyPEUnMfT8Pn8MRhVRNQP3xNAJFJu12XjTbIFfvx4imkJJJyh1ASgu9f4rzt/dMEWsSLKe7w==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@utoo/pack-linux-arm64-gnu/-/pack-linux-arm64-gnu-1.4.2.tgz", + "integrity": "sha512-6hV/kXzAtLO2LaudbndNJDR7JTk7WtprKpPWjHctPHTaDhhWkj6jiIvYobhIaE7WZ6iHpO7iboEdUcBDUgzO9w==", "cpu": [ "arm64" ], @@ -12205,9 +12204,9 @@ } }, "node_modules/@utoo/pack-linux-arm64-musl": { - "version": "1.4.2-alpha.0", - "resolved": "https://registry.npmjs.org/@utoo/pack-linux-arm64-musl/-/pack-linux-arm64-musl-1.4.2-alpha.0.tgz", - "integrity": "sha512-I9wX4ksqQpKbTOI88ieSQ2UcXLuTf0IjX4HvCbI0hO1kwO1IGXDikERGW8/Joz0pBnz9VVVYYyFmOAwAJjWDaQ==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@utoo/pack-linux-arm64-musl/-/pack-linux-arm64-musl-1.4.2.tgz", + "integrity": "sha512-NLdpXaN0/Ka8cb+dAbis5aBShPyKZoiBp+2BDS/ci20daC+jcgO6y+VdERk1P48Iyqfkrm542pIuv+YQNBBQhg==", "cpu": [ "arm64" ], @@ -12222,9 +12221,9 @@ } }, "node_modules/@utoo/pack-linux-x64-gnu": { - "version": "1.4.2-alpha.0", - "resolved": "https://registry.npmjs.org/@utoo/pack-linux-x64-gnu/-/pack-linux-x64-gnu-1.4.2-alpha.0.tgz", - "integrity": "sha512-ulAErHc4doQN9x4XaLwcJEiW5lzYh3cDBWCpsyGQhmb+0qYuFCxGu8M+zJ7x5pEwJK/dm2QAbAx3RWp3uc68hw==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@utoo/pack-linux-x64-gnu/-/pack-linux-x64-gnu-1.4.2.tgz", + "integrity": "sha512-xQdV+N8uv8PeIvmJcohiuWlY1jqKelgN/PjjVZM0stLy36KJ3qQjIdOKL/4UQbZ5Y9MUKn/6Z+pVTMwVhT3EPg==", "cpu": [ "x64" ], @@ -12239,9 +12238,9 @@ } }, "node_modules/@utoo/pack-linux-x64-musl": { - "version": "1.4.2-alpha.0", - "resolved": "https://registry.npmjs.org/@utoo/pack-linux-x64-musl/-/pack-linux-x64-musl-1.4.2-alpha.0.tgz", - "integrity": "sha512-ajgZqq9US6oSisR9aEfwTGtH3UOejsIyUGDxd4KuTmp0YeB9aReLU/rutpvYYjEEqsWCR0//Et2z7ZLdDNOv8A==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@utoo/pack-linux-x64-musl/-/pack-linux-x64-musl-1.4.2.tgz", + "integrity": "sha512-YY3uC0fkgNSGzObFbtaC7fku379Rl17WJgVJm71QF6QpEUwyAOCJ+BRRLDksXd9wKTuTWPo66DON53PbFFc88w==", "cpu": [ "x64" ], @@ -12256,9 +12255,9 @@ } }, "node_modules/@utoo/pack-shared": { - "version": "1.4.2-alpha.0", - "resolved": "https://registry.npmjs.org/@utoo/pack-shared/-/pack-shared-1.4.2-alpha.0.tgz", - "integrity": "sha512-FFREzT2/NAP8h1MYiqnmq9Y33dE+u8pmwWfL+2pIPncz5v/4+3lxFRIhJaoQf2w1jf4ASpSCQ7/MYFj1fJfgWA==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@utoo/pack-shared/-/pack-shared-1.4.2.tgz", + "integrity": "sha512-vqfUPRS7kCAbwiXUp8arskpl6by0C3OTIkZSqnzoyNpj9+cHhdoMuA+YhauY4t8Jkoo63b5/XifRAPWXCZGKhw==", "dev": true, "license": "MIT", "dependencies": { @@ -12283,9 +12282,9 @@ } }, "node_modules/@utoo/pack-win32-x64-msvc": { - "version": "1.4.2-alpha.0", - "resolved": "https://registry.npmjs.org/@utoo/pack-win32-x64-msvc/-/pack-win32-x64-msvc-1.4.2-alpha.0.tgz", - "integrity": "sha512-tMvNInThU89lFZ2rar0nQx3drdO+CiN003bZJ0e2MU9BKh2BTZcdngGNFRVrONSmlS5um2lTJAK7LBGSAw0+rg==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@utoo/pack-win32-x64-msvc/-/pack-win32-x64-msvc-1.4.2.tgz", + "integrity": "sha512-CWJ/GOgFGhDPQtyljjpoIcQpCLeiYQ+0TvVmfQNUEUlMj1iqe7DnKiMlzdck/GskesgzTXns1uHY0L5efwplWg==", "cpu": [ "x64" ], @@ -19358,9 +19357,9 @@ "license": "MIT" }, "node_modules/hono": { - "version": "4.12.16", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.16.tgz", - "integrity": "sha512-jN0ZewiNAWSe5khM3EyCmBb250+b40wWbwNILNfEvq84VREWwOIkuUsFONk/3i3nqkz7Oe1PcpM2mwQEK2L9Kg==", + "version": "4.12.17", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.17.tgz", + "integrity": "sha512-FbJJNb/XgX7YW0hX/V8w5oYLztKEsRLykCMZWt1WdLtsfjzMvmoqWBA4H4t5norinq8/rh20oiZYr+WSl4UzAQ==", "dev": true, "license": "MIT", "engines": { @@ -30690,22 +30689,22 @@ "license": "MIT" }, "node_modules/umi": { - "version": "4.6.49", - "resolved": "https://registry.npmjs.org/umi/-/umi-4.6.49.tgz", - "integrity": "sha512-u2MoHzZv3S4jj4kg50jsMbghp+GYlCNAYAF4lSll3c+Awj2crmXr2F+LwIUpbqERvCHi0BQ5TsMB8fwiAvQMwA==", + "version": "4.6.50", + "resolved": "https://registry.npmjs.org/umi/-/umi-4.6.50.tgz", + "integrity": "sha512-olpFHU38xdke49bvz5jPeA9mWg4DL7Bdmvnnrs+7+8XXtgVxAlkFOvKVCt09nZ0C9OIu8F0gRsjyXNF5cVjixA==", "dev": true, "license": "MIT", "dependencies": { "@babel/runtime": "7.23.6", - "@umijs/bundler-utils": "4.6.49", - "@umijs/bundler-webpack": "4.6.49", - "@umijs/core": "4.6.49", - "@umijs/lint": "4.6.49", - "@umijs/preset-umi": "4.6.49", - "@umijs/renderer-react": "4.6.49", - "@umijs/server": "4.6.49", - "@umijs/test": "4.6.49", - "@umijs/utils": "4.6.49", + "@umijs/bundler-utils": "4.6.50", + "@umijs/bundler-webpack": "4.6.50", + "@umijs/core": "4.6.50", + "@umijs/lint": "4.6.50", + "@umijs/preset-umi": "4.6.50", + "@umijs/renderer-react": "4.6.50", + "@umijs/server": "4.6.50", + "@umijs/test": "4.6.50", + "@umijs/utils": "4.6.50", "prettier-plugin-organize-imports": "^3.2.2", "prettier-plugin-packagejson": "2.4.3" }, diff --git a/package.json b/package.json index aa6db4b4..d1dfeb38 100644 --- a/package.json +++ b/package.json @@ -68,8 +68,8 @@ "@types/react-helmet": "^6.1.11", "@types/topojson-client": "^3.1.5", "@types/topojson-specification": "^1.0.5", - "@umijs/lint": "^4.6.49", - "@umijs/max": "^4.6.49", + "@umijs/lint": "^4.6.50", + "@umijs/max": "^4.6.50", "@umijs/max-plugin-openapi": "^2.0.3", "@umijs/request-record": "^1.1.4", "cross-env": "^10.1.0", diff --git a/src/pages/user/login/__snapshots__/login.test.tsx.snap b/src/pages/user/login/__snapshots__/login.test.tsx.snap index e799acfc..a6f80d4d 100644 --- a/src/pages/user/login/__snapshots__/login.test.tsx.snap +++ b/src/pages/user/login/__snapshots__/login.test.tsx.snap @@ -500,7 +500,7 @@ exports[`Login Page should login success 1`] = ` rel="noopener noreferrer" target="_blank" > - 4.6.49 + 4.6.50
- 1.4.2-alpha.0 + 1.4.2
- 4.6.49 + 4.6.50
- 1.4.2-alpha.0 + 1.4.2
Date: Wed, 6 May 2026 23:27:29 +0800 Subject: [PATCH 2/2] docs: add antd lint to CI, improve CLAUDE.md and cheatsheets (#11766) Co-authored-by: Claude Opus 4.7 --- .github/workflows/ci.yml | 10 +++++ CLAUDE.md | 22 ++++++++-- docs/cheatsheet.en-US.md | 95 ++++++++++++++++++++++++++++++++++++---- docs/cheatsheet.zh-CN.md | 95 ++++++++++++++++++++++++++++++++++++---- 4 files changed, 203 insertions(+), 19 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 381f234e..b2abf452 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,6 +6,16 @@ permissions: contents: read jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-node@v5 + with: + node-version: 20 + - run: npm ci + - run: npx antd lint ./src + build: runs-on: ${{ matrix.os }} strategy: diff --git a/CLAUDE.md b/CLAUDE.md index c8d0b9f7..ee40aa3f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -90,7 +90,7 @@ Umi Max (`@umijs/max`) is the meta-framework. It wraps the build pipeline and pr - **@tanstack/react-query** for complex server state (e.g., table-list uses `useMutation` + `useQuery`) - Most pages use ProTable's built-in `request` prop for data loading -### Styling: Three Systems Coexist +### Styling Systems 1. **Tailwind CSS v4** — entry: `src/tailwind.css`, PostCSS plugin in `postcss.config.js`. Best for layout utilities 2. **antd-style v4** (`createStyles`) — CSS-in-JS with design token access (`{ token }`). Preferred when consuming theme tokens @@ -117,6 +117,12 @@ Each page directory contains its own index.tsx, optional service.ts, _mock.ts, d `cloudflare-worker/` is a separate deployable (Hono framework, own `package.json`/`tsconfig.json`). Not an npm workspace — manage independently. Provides the production demo API. +```bash +cd cloudflare-worker +npm run dev # Local dev (wrangler dev) +npm run deploy # Deploy to Cloudflare (wrangler deploy) +``` + ## Ant Design CLI `@ant-design/cli` (antd) is installed as a dev dependency. It provides offline antd component metadata and project analysis. Run via `npx antd`. @@ -139,7 +145,17 @@ The CLI also supports MCP server mode: `npx antd mcp` (for IDE integrations). - **TypeScript strict mode** enabled. Path aliases: `@/*` → `./src/*`, `@@/*` → `./src/.umi/*`. - **Node >= 20** required. - **Markdown as raw strings**: `config/md-raw-loader.cjs` lets `.md` files be imported as strings (used in Welcome/cheatsheet pages with `@ant-design/x-markdown`). -- **Auto-generated code in `src/services/`** is excluded from Biome linting. Never edit manually — regenerate with `npm run openapi`. +- **Auto-generated code in `src/services/`** is excluded from Biome linting - **Adding a new page**: 1) Create component in `src/pages/` 2) Add route in `config/routes.ts` 3) Add menu translation in `src/locales/` (route `name` maps to `menu.xxx` i18n key) - **Adding global state**: Create a file in `src/models/` exporting a custom Hook, use `useModel('filename')` in components -- **Access control**: Route-level via `access` field in routes; component-level via `` or `useAccess()` hook from `@umijs/max` \ No newline at end of file +- **Access control**: Route-level via `access` field in routes; component-level via `` or `useAccess()` hook from `@umijs/max` + +## Gotchas & Troubleshooting + +- **`.umi` directory**: Auto-generated by Umi. If dev server behaves unexpectedly, delete `src/.umi` and restart +- **Port 8000 in use**: Kill the process (`lsof -ti:8000 | xargs kill`) or use `PORT=3000 npm start` to change it +- **Mock not updating**: Umi usually auto-discovers `mock/` and `src/pages/**/_mock.ts` changes. If a new file isn't recognized, try restarting the dev server +- **Biome + antd lint**: Both must pass before committing. `npm run lint` runs Biome + tsc; `npx antd lint ./src` runs separately. Do not install ESLint or Prettier — this project uses Biome only +- **`src/services/` is auto-generated**: Never edit manually. Run `npm run openapi` to regenerate +- **`npm run simple` is irreversible**: Always commit or branch before running it +- **Lock file**: Uses `package-lock.json`. If deps break, delete `node_modules` and reinstall diff --git a/docs/cheatsheet.en-US.md b/docs/cheatsheet.en-US.md index d017a0da..9ea85058 100644 --- a/docs/cheatsheet.en-US.md +++ b/docs/cheatsheet.en-US.md @@ -100,6 +100,7 @@ npm install # Update dependencies **Route config** is in `config/routes.ts`: ```ts +// File: config/routes.ts export default [ { path: '/welcome', @@ -143,12 +144,19 @@ const location = useLocation(); // current route info **ProLayout config** is in `config/defaultSettings.ts`: ```ts +// File: config/defaultSettings.ts export default { - navTheme: 'light', // nav theme: light / dark - colorPrimary: '#1890ff', // primary color - layout: 'mix', // layout mode: side / top / mix - contentWidth: 'Fluid', // content width: Fluid / Fixed - fixSiderbar: true, // fixed sidebar + navTheme: 'light', // nav theme: light / dark + colorPrimary: '#1890ff', // primary color + layout: 'mix', // layout mode: side / top / mix + contentWidth: 'Fluid', // content width: Fluid / Fixed + fixedHeader: false, // fixed header + fixSiderbar: true, // fixed sidebar + colorWeak: false, // color weak mode + title: 'Ant Design Pro', // site title + logo: 'https://...', // logo URL + iconfontUrl: '', // iconfont URL + token: {}, // ProLayout token for fine-grained style customization }; ``` @@ -181,7 +189,7 @@ const Page = () => ( **useModel — lightweight global state:** Create a file in `src/models/` to auto-register: ```ts -// src/models/counter.ts +// File: src/models/counter.ts import { useState } from 'react'; export default function useCounter() { @@ -229,7 +237,7 @@ const mutation = useMutation({ **Initial state — getInitialState:** Define in `src/app.tsx`, accessible globally: ```tsx -// src/app.tsx +// File: src/app.tsx export async function getInitialState() { const currentUser = await fetchUserInfo(); return { currentUser }; @@ -249,6 +257,7 @@ const { initialState } = useModel('@@initialState'); **Request config** is in `src/app.tsx`: ```ts +// File: src/app.tsx export const request: RequestConfig = { baseURL: 'https://api.example.com', timeout: 10000, @@ -288,6 +297,7 @@ Auto-generates API calling code under `src/services/` based on `config/oneapi.js **Define permissions** in `src/access.ts`: ```ts +// File: src/access.ts export default function access(initialState: { currentUser?: API.CurrentUser }) { const { currentUser } = initialState; return { @@ -441,7 +451,7 @@ Test files go next to the component, named `*.test.ts(x)`. **Mock data:** Create files in `mock/`: ```ts -// mock/user.ts +// File: mock/user.ts export default { 'GET /api/currentUser': { name: 'Serati Ma', access: 'admin' }, 'POST /api/login': (req, res) => { res.end('ok'); }, @@ -453,6 +463,7 @@ Umi auto-registers mocks, active in dev mode. **Proxy config** is in `config/proxy.ts`: ```ts +// File: config/proxy.ts export default { dev: { '/api/': { @@ -488,3 +499,71 @@ Create a file in `src/models/` exporting a custom Hook, then use `useModel('file 1. Configure `openAPI` in `config/config.ts` 2. Run `npm run openapi` 3. Code is auto-generated under `src/services/` → See [umi FAQ](https://umijs.org/en-US/docs/introduce/faq) + +## Common Tasks + +### Add a New Page + +```bash +# 1. Create the page component +# File: src/pages/my-page/index.tsx + +# 2. Register in route config +# File: config/routes.ts +# { path: '/my-page', name: 'myPage', icon: 'file', component: './my-page' } + +# 3. Add i18n translations (for menu display) +# File: src/locales/zh-CN/menu.ts → menu.myPage: '我的页面' +# File: src/locales/en-US/menu.ts → menu.myPage: 'My Page' +``` + +### Add Global State + +```bash +# 1. Create a model file (filename becomes the model key) +# File: src/models/myModel.ts +# Export a custom Hook: export default function useMyModel() { ... } + +# 2. Use in components +# import { useModel } from '@umijs/max'; +# const { data } = useModel('myModel'); // 'myModel' matches filename +``` + +### Add a Mock API + +```bash +# Global mock: mock/api.ts (applies to all environments) +# Page-level mock: src/pages/my-page/_mock.ts (auto-discovered by Umi) + +# Mock format: +# export default { 'GET /api/my-data': { data: [] } } +``` + +### Generate API Service Code + +```bash +# 1. Edit OpenAPI config: config/oneapi.json +# 2. Run generation (overwrites src/services/ant-design-pro/) +npm run openapi +# 3. Never edit generated code manually — modify oneapi.json and regenerate +``` + +### Switch to Simple Mode + +```bash +git add -A && git commit -m "chore: save before simple" # Must commit first +npm run simple # Irreversible +npm install # Update dependencies +``` + +## Constraints & Gotchas + +- **`src/services/ant-design-pro/`** is auto-generated code. Do NOT edit manually. Modify `config/oneapi.json` and run `npm run openapi` to regenerate. +- **`npm run simple` is irreversible**: It deletes demo pages and unused dependencies. Always commit before running. +- **`.umi` temp directory**: `src/.umi` is auto-generated by Umi. Delete it and restart the dev server if you encounter unexpected behavior. +- **Biome over ESLint**: This project uses Biome for linting and formatting. Do not install ESLint or Prettier plugins. +- **Commit convention**: Must follow [Conventional Commits](https://www.conventionalcommits.org/) (e.g., `feat:`, `fix:`, `chore:`). +- **`npx antd lint ./src`**: Must pass with zero errors and warnings before committing. +- **Mock priority**: `mock/` directory for global mocks, `src/pages/**/_mock.ts` for page-level mocks. Both are auto-registered by Umi. +- **Styling priority**: Tailwind (layout) > antd-style (theme tokens) > CSS Modules (component styles) > Less (legacy global styles only). +- **Path aliases**: `@/*` → `./src/*`, `@@/*` → `./src/.umi/*` diff --git a/docs/cheatsheet.zh-CN.md b/docs/cheatsheet.zh-CN.md index f640e875..8ff9b7c5 100644 --- a/docs/cheatsheet.zh-CN.md +++ b/docs/cheatsheet.zh-CN.md @@ -100,6 +100,7 @@ npm install # 更新依赖 **路由配置** 位于 `config/routes.ts`: ```ts +// File: config/routes.ts export default [ { path: '/welcome', @@ -143,12 +144,19 @@ const location = useLocation(); // 当前路由信息 **ProLayout 配置** 位于 `config/defaultSettings.ts`: ```ts +// File: config/defaultSettings.ts export default { - navTheme: 'light', // 导航主题:light / dark - colorPrimary: '#1890ff', // 主题色 - layout: 'mix', // 布局模式:side / top / mix - contentWidth: 'Fluid', // 内容宽度:Fluid / Fixed - fixSiderbar: true, // 固定侧边栏 + navTheme: 'light', // 导航主题:light / dark + colorPrimary: '#1890ff', // 主题色 + layout: 'mix', // 布局模式:side / top / mix + contentWidth: 'Fluid', // 内容宽度:Fluid / Fixed + fixedHeader: false, // 固定顶部导航 + fixSiderbar: true, // 固定侧边栏 + colorWeak: false, // 色弱模式 + title: 'Ant Design Pro', // 站点标题 + logo: 'https://...', // Logo URL + iconfontUrl: '', // 图标字体 URL + token: {}, // ProLayout token,用于细粒度样式定制 }; ``` @@ -181,7 +189,7 @@ const Page = () => ( **useModel — 轻量全局状态:** 在 `src/models/` 下创建文件即自动注册: ```ts -// src/models/counter.ts +// File: src/models/counter.ts import { useState } from 'react'; export default function useCounter() { @@ -229,7 +237,7 @@ const mutation = useMutation({ **初始状态 — getInitialState:** 在 `src/app.tsx` 中定义,全局可访问: ```tsx -// src/app.tsx +// File: src/app.tsx export async function getInitialState() { const currentUser = await fetchUserInfo(); return { currentUser }; @@ -249,6 +257,7 @@ const { initialState } = useModel('@@initialState'); **请求配置** 位于 `src/app.tsx`: ```ts +// File: src/app.tsx export const request: RequestConfig = { baseURL: 'https://api.example.com', timeout: 10000, @@ -288,6 +297,7 @@ npm run openapi **定义权限** 在 `src/access.ts`: ```ts +// File: src/access.ts export default function access(initialState: { currentUser?: API.CurrentUser }) { const { currentUser } = initialState; return { @@ -441,7 +451,7 @@ npm run test:update # 更新快照 **Mock 数据:** 在 `mock/` 目录下创建文件: ```ts -// mock/user.ts +// File: mock/user.ts export default { 'GET /api/currentUser': { name: 'Serati Ma', access: 'admin' }, 'POST /api/login': (req, res) => { res.end('ok'); }, @@ -453,6 +463,7 @@ Umi 自动注册 mock,开发模式下生效。 **代理配置** 位于 `config/proxy.ts`: ```ts +// File: config/proxy.ts export default { dev: { '/api/': { @@ -488,3 +499,71 @@ export default { 1. 在 `config/config.ts` 配置 `openAPI` 2. 运行 `npm run openapi` 3. 自动生成 `src/services/` 下的代码 → 更多内容见 [umi FAQ](https://umijs.org/docs/introduce/faq) + +## 常见任务 + +### 添加新页面 + +```bash +# 1. 创建页面组件 +# 文件路径:src/pages/my-page/index.tsx + +# 2. 在路由配置中注册 +# 文件路径:config/routes.ts +# { path: '/my-page', name: 'myPage', icon: 'file', component: './my-page' } + +# 3. 添加国际化翻译(如需菜单显示) +# 文件路径:src/locales/zh-CN/menu.ts → menu.myPage: '我的页面' +# 文件路径:src/locales/en-US/menu.ts → menu.myPage: 'My Page' +``` + +### 添加全局状态 + +```bash +# 1. 创建 model 文件(文件名即 model key) +# 文件路径:src/models/myModel.ts +# 导出自定义 Hook:export default function useMyModel() { ... } + +# 2. 在组件中使用 +# import { useModel } from '@umijs/max'; +# const { data } = useModel('myModel'); // 'myModel' 对应文件名 +``` + +### 添加 Mock 接口 + +```bash +# 全局 Mock:mock/api.ts(匹配所有环境) +# 页面级 Mock:src/pages/my-page/_mock.ts(Umi 自动发现) + +# Mock 格式: +# export default { 'GET /api/my-data': { data: [] } } +``` + +### 生成 API 服务代码 + +```bash +# 1. 编辑 OpenAPI 配置:config/oneapi.json +# 2. 运行生成命令(覆盖 src/services/ant-design-pro/) +npm run openapi +# 3. 不要手动编辑生成代码,改 oneapi.json 重新生成 +``` + +### 切换到精简模式 + +```bash +git add -A && git commit -m "chore: save before simple" # 必须先提交 +npm run simple # 不可逆操作 +npm install # 更新依赖 +``` + +## 注意事项 + +- **`src/services/ant-design-pro/`** 为自动生成代码,禁止手动编辑。修改 `config/oneapi.json` 后执行 `npm run openapi` 重新生成 +- **`npm run simple` 不可逆**:会删除示例页面和多余依赖,执行前务必提交代码 +- **`.umi` 临时目录**:`src/.umi` 由 Umi 自动生成,遇到异常可删除后重启开发服务器 +- **Biome 代替 ESLint**:项目使用 Biome 进行 lint 和格式化,不要安装 ESLint 或 Prettier 插件 +- **Commit 规范**:必须遵循 [Conventional Commits](https://www.conventionalcommits.org/),如 `feat:`, `fix:`, `chore:` 等 +- **`npx antd lint ./src`**:提交前必须零错误零警告 +- **Mock 优先级**:`mock/` 目录为全局 Mock,`src/pages/**/_mock.ts` 为页面级 Mock,两者都会被 Umi 自动注册 +- **样式优先级**:Tailwind(布局)> antd-style(主题 token)> CSS Modules(组件样式)> Less(仅遗留全局样式) +- **路径别名**:`@/*` → `./src/*`,`@@/*` → `./src/.umi/*`