infrastructure: scaffold React app with Vite, TypeScript, and basic App component

This commit is contained in:
gnezim
2026-04-05 18:59:51 +03:00
parent 22aac303c7
commit 6786c4df23
9 changed files with 180 additions and 0 deletions
+21
View File
@@ -0,0 +1,21 @@
# dependencies
node_modules/
*.lock
package-lock.json
# production
dist/
dist-ssr/
*.local
# compiled output
src/**/*.js
src/**/*.js.map
# misc
.DS_Store
*.log
*.swp
*.swo
.vscode
.idea
+13
View File
@@ -0,0 +1,13 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Aeroflot Flights</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>
+32
View File
@@ -0,0 +1,32 @@
{
"name": "@aeroflot-flights/react",
"version": "1.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"preview": "vite preview"
},
"dependencies": {
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-router-dom": "^6.15.0",
"primereact": "^10.0.0",
"primeicons": "^6.0.0",
"leaflet": "^1.7.1",
"i18next": "^23.7.0",
"i18next-http-backend": "^2.4.0",
"react-i18next": "^13.5.0",
"axios": "^1.6.0",
"@tanstack/react-query": "^5.28.0",
"zustand": "^4.4.0"
},
"devDependencies": {
"vite": "^5.0.0",
"@vitejs/plugin-react": "^4.2.0",
"typescript": "^5.3.0",
"@types/react": "^18.2.0",
"@types/react-dom": "^18.2.0",
"sass": "^1.69.0"
}
}
+8
View File
@@ -0,0 +1,8 @@
export default function App() {
return (
<div className="app" data-testid="page-loaded">
<h1>Aeroflot Flights - React Migration</h1>
<p>Coming soon...</p>
</div>
)
}
+7
View File
@@ -0,0 +1,7 @@
import ReactDOM from 'react-dom/client'
import App from './app/App'
import './styles/index.scss'
ReactDOM.createRoot(document.getElementById('root')!).render(
<App />,
)
+41
View File
@@ -0,0 +1,41 @@
/* Main styles for Aeroflot Flights React App */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
background-color: #f5f5f5;
}
#root {
width: 100%;
height: 100%;
}
.app {
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 20px;
h1 {
font-size: 2.5rem;
margin-bottom: 1rem;
color: #333;
}
p {
font-size: 1.1rem;
color: #666;
}
}
+26
View File
@@ -0,0 +1,26 @@
{
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"module": "ESNext",
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"resolveJsonModule": true,
"moduleResolution": "bundler",
"jsx": "react-jsx",
"baseUrl": ".",
"paths": {
"@app/*": ["./src/app/*"],
"@styles/*": ["./src/styles/*"],
"@assets/*": ["./src/assets/*"]
}
},
"include": ["src"],
"references": [{ "path": "./tsconfig.node.json" }]
}
+10
View File
@@ -0,0 +1,10 @@
{
"compilerOptions": {
"composite": true,
"skipLibCheck": true,
"module": "ESNext",
"moduleResolution": "bundler",
"allowSyntheticDefaultImports": true
},
"include": ["vite.config.ts"]
}
+22
View File
@@ -0,0 +1,22 @@
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import path from 'path'
export default defineConfig({
plugins: [react()],
server: {
port: 3001,
open: false,
},
resolve: {
alias: {
'@app': path.resolve(__dirname, './src/app'),
'@styles': path.resolve(__dirname, './src/styles'),
'@assets': path.resolve(__dirname, './src/assets'),
},
},
build: {
outDir: 'dist',
sourcemap: false,
},
})