chore: upgrade to next 16 + react 19

- next 14.2 -> 16.2, react/react-dom 18 -> 19, eslint 8 -> 9,
  typescript-eslint 6 -> 8, typescript 5.3 -> 5.7, @types/react* -> 19
- remove i18n config from next.config.js (unsupported in App Router; it
  forced a pages-router _document and broke the 404 prerender)
- Next 16 reconfigured tsconfig (moduleResolution bundler, jsx react-jsx)

Build, unit tests, and e2e all green on the new stack.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
isra el
2026-07-11 01:10:35 +03:00
parent c92740c401
commit ea1b00ce3f
5 changed files with 2595 additions and 1511 deletions

3
web/next-env.d.ts vendored
View File

@@ -1,5 +1,6 @@
/// <reference types="next" /> /// <reference types="next" />
/// <reference types="next/image-types/global" /> /// <reference types="next/image-types/global" />
import "./.next/dev/types/routes.d.ts";
// NOTE: This file should not be edited // NOTE: This file should not be edited
// see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information. // see https://nextjs.org/docs/app/api-reference/config/typescript for more information.

View File

@@ -1,10 +1,6 @@
/** @type {import('next').NextConfig} */ /** @type {import('next').NextConfig} */
const nextConfig = { const nextConfig = {
reactStrictMode: true, reactStrictMode: true,
i18n: {
locales: ['en-US'],
defaultLocale: 'en-US',
},
output: 'standalone', output: 'standalone',
async redirects() { async redirects() {

View File

@@ -44,14 +44,14 @@
"cmdk": "^1.1.1", "cmdk": "^1.1.1",
"date-fns": "^4.1.0", "date-fns": "^4.1.0",
"lucide-react": "^0.453.0", "lucide-react": "^0.453.0",
"next": "14.2.26", "next": "16.2.10",
"next-auth": "^4.24.10", "next-auth": "^4.24.10",
"next-themes": "^0.4.3", "next-themes": "^0.4.3",
"papaparse": "^5.4.1", "papaparse": "^5.4.1",
"prisma": "^5.22.0", "prisma": "^5.22.0",
"react": "^18.2.0", "react": "^19.2.0",
"react-day-picker": "^9.9.0", "react-day-picker": "^9.9.0",
"react-dom": "^18.2.0", "react-dom": "^19.2.0",
"react-dropzone": "^14.3.5", "react-dropzone": "^14.3.5",
"react-hook-form": "^7.53.1", "react-hook-form": "^7.53.1",
"react-qr-code": "^2.0.12", "react-qr-code": "^2.0.12",
@@ -75,16 +75,16 @@
"jsdom": "^25.0.1", "jsdom": "^25.0.1",
"msw": "^2.7.0", "msw": "^2.7.0",
"vitest": "^2.1.8", "vitest": "^2.1.8",
"@types/node": "20.11.5", "@types/node": "^20.11.5",
"@types/react": "18.2.48", "@types/react": "^19.2.0",
"@types/react-dom": "18.2.18", "@types/react-dom": "^19.2.0",
"@typescript-eslint/eslint-plugin": "^6.19.0", "@typescript-eslint/eslint-plugin": "^8.18.0",
"@typescript-eslint/parser": "^6.19.0", "@typescript-eslint/parser": "^8.18.0",
"autoprefixer": "^10.4.20", "autoprefixer": "^10.4.20",
"eslint": "8.56.0", "eslint": "^9.17.0",
"eslint-config-next": "14.1.0", "eslint-config-next": "16.2.10",
"postcss": "^8.4.47", "postcss": "^8.4.47",
"tailwindcss": "^3.4.14", "tailwindcss": "^3.4.14",
"typescript": "5.3.3" "typescript": "^5.7.2"
} }
} }

4049
web/pnpm-lock.yaml generated
View File

File diff suppressed because it is too large Load Diff

View File

@@ -1,10 +1,16 @@
{ {
"compilerOptions": { "compilerOptions": {
"target": "es5", "target": "es5",
"lib": ["dom", "dom.iterable", "esnext"], "lib": [
"dom",
"dom.iterable",
"esnext"
],
"baseUrl": ".", "baseUrl": ".",
"paths": { "paths": {
"@/*": ["./*"] "@/*": [
"./*"
]
}, },
"allowJs": true, "allowJs": true,
"skipLibCheck": true, "skipLibCheck": true,
@@ -13,18 +19,26 @@
"noEmit": true, "noEmit": true,
"esModuleInterop": true, "esModuleInterop": true,
"module": "esnext", "module": "esnext",
"moduleResolution": "node", "moduleResolution": "bundler",
"resolveJsonModule": true, "resolveJsonModule": true,
"isolatedModules": true, "isolatedModules": true,
"jsx": "preserve", "jsx": "react-jsx",
"incremental": true, "incremental": true,
"plugins": [ "plugins": [
{ {
"name": "next" "name": "next"
} }
], ],
"strictNullChecks": false, "strictNullChecks": false
}, },
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], "include": [
"exclude": ["node_modules"] "next-env.d.ts",
"**/*.ts",
"**/*.tsx",
".next/types/**/*.ts",
".next/dev/types/**/*.ts"
],
"exclude": [
"node_modules"
]
} }