mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-06-06 13:14:11 +00:00
Step 0 of the planned vue->react migration. React 19, antd 5, i18next
+ react-i18next, typescript 5, and @vitejs/plugin-react 6 are added as
dev/runtime deps alongside the existing vue stack. Both frameworks
coexist in the build until the last entry flips.
* vite.config.js: react() plugin runs next to vue(); new manualChunks
for vendor-react / vendor-antd-react / vendor-icons-react /
vendor-i18next. Existing vue chunks unchanged.
* eslint.config.js: typescript-eslint + eslint-plugin-react-hooks
rules scoped to *.{ts,tsx}; vue config untouched for *.{js,vue}.
* tsconfig.json: strict, jsx: react-jsx, moduleResolution: bundler,
allowJs: true (lets .tsx files import the remaining .js modules
during incremental migration), @/* path alias.
* env.d.ts: Vite client types + window.X_UI_BASE_PATH typing +
SubPageData shape consumed by the subscription page.
Vite stays pinned at 8.0.13 per the existing project policy. No
existing .vue/.js source files touched in this step.
eslint-plugin-react (not -hooks) is not included because its latest
release does not yet support ESLint 10. react-hooks/purity covers
the safety-critical case; revisit when the plugin updates.
56 lines
1.4 KiB
JSON
56 lines
1.4 KiB
JSON
{
|
|
"name": "3x-ui-frontend",
|
|
"private": true,
|
|
"version": "0.0.3",
|
|
"type": "module",
|
|
"description": "3x-ui panel frontend (Vue 3 + Ant Design Vue 4 + Vite 8).",
|
|
"engines": {
|
|
"node": ">=22.0.0",
|
|
"npm": ">=10.0.0"
|
|
},
|
|
"scripts": {
|
|
"dev": "vite",
|
|
"build": "vite build",
|
|
"preview": "vite preview",
|
|
"lint": "eslint src",
|
|
"typecheck": "tsc --noEmit"
|
|
},
|
|
"dependencies": {
|
|
"@ant-design/icons": "^6.2.3",
|
|
"@ant-design/icons-vue": "^7.0.1",
|
|
"@codemirror/lang-json": "^6.0.2",
|
|
"@codemirror/theme-one-dark": "^6.1.3",
|
|
"ant-design-vue": "^4.2.6",
|
|
"antd": "^5.29.3",
|
|
"axios": "^1.7.9",
|
|
"codemirror": "^6.0.2",
|
|
"dayjs": "^1.11.20",
|
|
"i18next": "^25.10.10",
|
|
"otpauth": "^9.5.1",
|
|
"qs": "^6.13.1",
|
|
"react": "^19.2.6",
|
|
"react-dom": "^19.2.6",
|
|
"react-i18next": "^16.6.6",
|
|
"vue": "^3.5.34",
|
|
"vue-i18n": "^11.1.4",
|
|
"vue3-persian-datetime-picker": "^1.2.2"
|
|
},
|
|
"devDependencies": {
|
|
"@eslint/js": "^10.0.1",
|
|
"@types/react": "^19.2.15",
|
|
"@types/react-dom": "^19.2.3",
|
|
"@vitejs/plugin-react": "^6.0.2",
|
|
"@vitejs/plugin-vue": "^6.0.6",
|
|
"eslint": "^10.3.0",
|
|
"eslint-plugin-react-hooks": "^7.1.1",
|
|
"eslint-plugin-vue": "^10.9.1",
|
|
"globals": "^17.6.0",
|
|
"typescript": "^5.9.3",
|
|
"typescript-eslint": "^8.59.4",
|
|
"vite": "8.0.13",
|
|
"vue-eslint-parser": "^10.4.0"
|
|
},
|
|
"overrides": {
|
|
"moment-jalaali": "^0.10.4"
|
|
}
|
|
}
|