Upgrade all packages to latest major versions; fix two pre-existing bugs

Frontend:
- next 15 → 16.2.6, react 19.0 → 19.2.6, eslint-config-next updated to match
- Add missing axios dependency (was implicit, broke build)
- Fix VideoPlayer.tsx broken absolute import path (pre-existing bug)
- Fix uploads route handler params to async (Next.js 16 breaking change)
- Remove deprecated images.domains → remotePatterns in next.config.js
- Remove experimental.serverActions (promoted to stable, then removed in v16)
- Update lint script: next lint removed in v16, now uses eslint directly

Backend:
- express 4 → 5.2.1, mongoose 8 → 9.6.2
- bcrypt 5 → 6, helmet 7 → 8, zod 3 → 4
This commit is contained in:
Chris Haulmark 2026-05-24 13:05:38 -06:00
parent e2e33764d3
commit dd9c48f6cd
9 changed files with 1607 additions and 1231 deletions

1136
backend/package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -13,21 +13,21 @@
"dependencies": {
"@ffprobe-installer/ffprobe": "^2.1.2",
"@types/multer": "^1.4.12",
"bcrypt": "^5.1.1",
"bcrypt": "^6.0.0",
"cors": "^2.8.5",
"dotenv": "^16.4.0",
"express": "^4.18.2",
"express": "^5.2.1",
"express-rate-limit": "^7.1.5",
"fluent-ffmpeg": "^2.1.3",
"fs-extra": "^11.3.0",
"helmet": "^7.1.0",
"helmet": "^8.2.0",
"jsonwebtoken": "^9.0.2",
"mongoose": "^8.1.0",
"mongoose": "^9.6.2",
"morgan": "^1.10.0",
"multer": "^1.4.5-lts.2",
"nodemailer": "^6.9.9",
"redis": "^4.6.12",
"zod": "^3.22.4"
"zod": "^4.4.3"
},
"devDependencies": {
"@types/bcrypt": "^5.0.2",

View file

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

View file

@ -2,14 +2,12 @@
const nextConfig = {
reactStrictMode: true,
images: {
domains: ['localhost'],
remotePatterns: [
{ protocol: 'http', hostname: 'localhost' },
{ protocol: 'https', hostname: 'lad1908.org' },
],
formats: ['image/avif', 'image/webp'],
},
experimental: {
serverActions: {
allowedOrigins: ['localhost:3000', 'olathedeafclub.com'],
},
},
headers: async () => {
return [
{

File diff suppressed because it is too large Load diff

View file

@ -7,23 +7,24 @@
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint"
"lint": "eslint ."
},
"dependencies": {
"axios": "^1.16.1",
"framer-motion": "^12.6.0",
"next": "^15.3.3",
"next": "^16.2.6",
"next-themes": "^0.4.6",
"react": "19.0.0",
"react-dom": "19.0.0"
"react": "^19.2.6",
"react-dom": "^19.2.6"
},
"devDependencies": {
"@tailwindcss/postcss": "^4.0.15",
"@types/node": "^20.0.0",
"@types/react": "^19.0.12",
"@types/react-dom": "^19.0.4",
"@types/react": "^19.2.15",
"@types/react-dom": "^19.2.3",
"autoprefixer": "^10.4.0",
"eslint": "^9.0.0",
"eslint-config-next": "^15.2.3",
"eslint-config-next": "^16.2.6",
"postcss": "^8.4.0",
"tailwindcss": "^4.0.0",
"typescript": "^5.8.0"

View file

@ -8,11 +8,11 @@ import fs from 'fs';
*/
export async function GET(
request: NextRequest,
{ params }: { params: { path: string[] } }
{ params }: { params: Promise<{ path: string[] }> }
) {
try {
// Get the file path from the URL
const filePath = params.path.join('/');
const { path: pathSegments } = await params;
const filePath = pathSegments.join('/');
// Construct the absolute path to the file
// This assumes the backend is in the same directory as the frontend

View file

@ -1,7 +1,7 @@
'use client';
import React, { useState, useRef, useEffect } from 'react';
import { PlayIcon, PauseIcon } from 'frontend/src/components/atoms/Icons';
import { PlayIcon, PauseIcon } from '../atoms/Icons';
interface VideoPlayerProps {
videoUrl: string;

View file

@ -13,10 +13,10 @@
"incremental": true,
"module": "esnext",
"esModuleInterop": true,
"moduleResolution": "node",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
"jsx": "react-jsx",
"plugins": [
{
"name": "next"
@ -24,14 +24,17 @@
],
"baseUrl": ".",
"paths": {
"@/*": ["src/*"]
"@/*": [
"src/*"
]
}
},
"include": [
"next-env.d.ts",
".next/types/**/*.ts",
"**/*.ts",
"**/*.tsx"
"**/*.tsx",
".next/dev/types/**/*.ts"
],
"exclude": [
"node_modules"