mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-06-28 00:24:19 +00:00
7605902324
* test(audit): add gremlins/rapid/coverage tooling + AUDIT.md scaffold * test(audit): hygiene sweep (race-clean except logger global; Finding #2) + smell inventory * test(audit): cover untested error/edge branches (TLS proxy+pin, migration tag cleanup=Finding #1) * test(audit): strengthen internal/sub link tests (dedup key, TLS/Reality mapping, clash well-formedness) * test(audit): property (rapid) + fuzz tests for joinHostPort/userinfo/pin/ParseLink * test(audit): tighten frontend subSortIndex rejection assertions + wire coverage * ci(audit): add shuffle gate + non-blocking race job (Finding #2) + fuzz-smoke; document mutation policy * chore(audit): gitignore frontend coverage output * test(audit): exhaustive whole-repo pass — strengthen 5 weak/fake tests (netproxy, CSP, modal per-protocol loops, schema coercions) * docs(contributing): add Testing section (conventions, race/shuffle, fuzz, mutation policy); drop AUDIT.md ledger * fix(logger,migration): guard logBuffer with mutex; execute legacy tag cleanup (tx.Exec); make CI race gate blocking * ci(mutation): add nightly scoped gremlins workflow (informational artifacts) * test(audit): strengthen runtime tests — baseURL scheme/port bounds, isNonEmptySlice, trafficReset * test(audit): strengthen clash tests — reality field mapping + tcp-header validation * test(audit): runtime — egress-proxy + content-type tests; drop redundant bp=='' branch * test(audit): strengthen link parser/helper tests (defaultPort, splitComma, base64, canonicalQuery, tls/reality/transport mapping) * test(audit): strengthen sub/xray/common/netsafe/mtproto/config/middleware tests (kill surviving mutants) * test(audit): raise timeout on protocol-iteration modal tests (heavy re-renders, slow on CI) * fix(logger): GetLogs returns at most c entries (off-by-one fix; addresses PR review) * perf(logger): snapshot logBuffer under lock so GetLogs doesn't block logging; clarify fuzz-seed docs (addresses PR review)
78 lines
2.2 KiB
JSON
78 lines
2.2 KiB
JSON
{
|
|
"name": "3x-ui-frontend",
|
|
"private": true,
|
|
"version": "0.3.1",
|
|
"type": "module",
|
|
"description": "3x-ui panel frontend (React 19 + Ant Design 6 + Vite 8).",
|
|
"engines": {
|
|
"node": ">=22.0.0",
|
|
"npm": ">=10.0.0"
|
|
},
|
|
"scripts": {
|
|
"dev": "vite",
|
|
"build": "npm run gen:api && vite build",
|
|
"preview": "vite preview",
|
|
"lint": "eslint src",
|
|
"typecheck": "tsc --noEmit",
|
|
"test": "vitest run",
|
|
"test:watch": "vitest",
|
|
"gen": "npm run gen:zod && npm run gen:api",
|
|
"gen:api": "node --experimental-strip-types --disable-warning=ExperimentalWarning scripts/build-openapi.mjs",
|
|
"gen:zod": "cd .. && go run ./tools/openapigen"
|
|
},
|
|
"dependencies": {
|
|
"@ant-design/icons": "^6.2.5",
|
|
"@codemirror/lang-json": "^6.0.2",
|
|
"@codemirror/theme-one-dark": "^6.1.3",
|
|
"@tanstack/react-query": "^5.101.0",
|
|
"@tanstack/react-query-devtools": "^5.101.0",
|
|
"antd": "^6.4.3",
|
|
"axios": "^1.17.0",
|
|
"codemirror": "^6.0.2",
|
|
"dayjs": "^1.11.21",
|
|
"i18next": "^26.3.1",
|
|
"otpauth": "^9.5.1",
|
|
"persian-calendar-suite": "^1.5.5",
|
|
"qs": "^6.15.2",
|
|
"react": "^19.2.7",
|
|
"react-dom": "^19.2.7",
|
|
"react-i18next": "^17.0.8",
|
|
"react-router-dom": "^7.16.0",
|
|
"recharts": "^3.8.1",
|
|
"swagger-ui-react": "^5.32.6",
|
|
"zod": "^4.4.3"
|
|
},
|
|
"devDependencies": {
|
|
"@eslint/js": "^10.0.1",
|
|
"@testing-library/dom": "^10.4.1",
|
|
"@testing-library/react": "^16.3.2",
|
|
"@types/react": "^19.2.16",
|
|
"@types/react-dom": "^19.2.3",
|
|
"@types/swagger-ui-react": "^5.18.0",
|
|
"@vitejs/plugin-react": "^6.0.2",
|
|
"@vitest/coverage-v8": "^4.1.8",
|
|
"eslint": "^10.4.1",
|
|
"eslint-plugin-react-hooks": "^7.1.1",
|
|
"globals": "^17.6.0",
|
|
"jsdom": "^29.1.1",
|
|
"typescript": "^6.0.3",
|
|
"typescript-eslint": "^8.60.1",
|
|
"vite": "8.0.16",
|
|
"vitest": "^4.1.8"
|
|
},
|
|
"overrides": {
|
|
"react-copy-to-clipboard": "^5.1.1",
|
|
"react-inspector": "^9.0.0",
|
|
"react-debounce-input": {
|
|
"react": "^19.0.0"
|
|
}
|
|
},
|
|
"allowScripts": {
|
|
"@scarf/scarf": false,
|
|
"@tree-sitter-grammars/tree-sitter-yaml": false,
|
|
"tree-sitter": false,
|
|
"core-js-pure": false,
|
|
"tree-sitter-json": false
|
|
}
|
|
}
|