## Summary - Upgrade Next.js 14.2 → 16.1, React 18 → 19, React DOM 18 → 19 - Upgrade @sentry/nextjs 9 → 10, @auth0/nextjs-auth0 3 → 4, ESLint 8 → 9 - Migrate all async request APIs (cookies, params, searchParams are now Promises) - Migrate middleware.ts → proxy.ts (Next.js 16 convention) - Rewrite ESLint config for flat config format - New Auth0Client setup with backward-compatible AUTH0_DOMAIN derivation - Turbopack browser-only resolveAlias for web-tree-sitter Node.js stubs ## Test plan - [ ] `npm run build` passes - [ ] `npm run lint` passes (0 errors, warnings only from React Compiler rules) - [ ] `npm run type-check` passes - [ ] `npm run dev` starts successfully with Turbopack - [ ] Auth login/logout flow works end-to-end - [ ] Verify `AUTH0_DOMAIN` or `AUTH0_ISSUER_BASE_URL` env var is set in deployment
104 lines
2.8 KiB
JavaScript
104 lines
2.8 KiB
JavaScript
import { dirname } from "path"
|
|
import { fileURLToPath } from "url"
|
|
|
|
const __dirname = dirname(fileURLToPath(import.meta.url))
|
|
|
|
/** @type {import("next").NextConfig} */
|
|
const nextConfig = {
|
|
transpilePackages: ["@codeflash-ai/common"],
|
|
webpack: (config, { isServer }) => {
|
|
config.watchOptions = {
|
|
poll: 1000,
|
|
aggregateTimeout: 300,
|
|
}
|
|
|
|
// Handle web-tree-sitter's Node.js module imports in browser.
|
|
// fallback handles static require(); alias handles dynamic import()
|
|
if (!isServer) {
|
|
config.resolve.fallback = {
|
|
...config.resolve.fallback,
|
|
fs: false,
|
|
"fs/promises": false,
|
|
path: false,
|
|
module: false,
|
|
}
|
|
config.resolve.alias = {
|
|
...config.resolve.alias,
|
|
module: false,
|
|
}
|
|
}
|
|
|
|
return config
|
|
},
|
|
turbopack: {
|
|
root: __dirname,
|
|
resolveAlias: {
|
|
// Stub Node.js built-ins that web-tree-sitter tries to import in the browser.
|
|
// Uses { browser: ... } so aliases only apply to client bundles, not SSR.
|
|
'fs': { browser: './src/lib/empty-shim.js' },
|
|
'fs/promises': { browser: './src/lib/empty-shim.js' },
|
|
'path': { browser: './src/lib/empty-shim.js' },
|
|
'module': { browser: './src/lib/empty-shim.js' },
|
|
},
|
|
},
|
|
experimental: {
|
|
serverActions: {
|
|
allowedOrigins: ["app.codeflash.ai", "localhost:3000"],
|
|
bodySizeLimit: '5mb', // Increased from default 1mb to handle large PR creation payloads
|
|
},
|
|
},
|
|
typescript: {
|
|
ignoreBuildErrors: false,
|
|
},
|
|
// Optimize for production stability
|
|
poweredByHeader: false,
|
|
compress: true,
|
|
images: {
|
|
remotePatterns: [
|
|
{
|
|
protocol: "https",
|
|
hostname: "avatars.githubusercontent.com",
|
|
},
|
|
{
|
|
protocol: "https",
|
|
hostname: "github.com",
|
|
},
|
|
],
|
|
},
|
|
}
|
|
|
|
// module.exports = nextConfig
|
|
|
|
import { withSentryConfig } from "@sentry/nextjs"
|
|
|
|
export default withSentryConfig(
|
|
nextConfig,
|
|
{
|
|
// For all available options, see:
|
|
// https://github.com/getsentry/sentry-webpack-plugin#options
|
|
|
|
// Suppresses source map uploading logs during build
|
|
silent: true,
|
|
org: "codeflash-ai",
|
|
project: "webapp",
|
|
},
|
|
{
|
|
// For all available options, see:
|
|
// https://docs.sentry.io/platforms/javascript/guides/nextjs/manual-setup/
|
|
|
|
// Upload a larger set of source maps for prettier stack traces (increases build time)
|
|
widenClientFileUpload: true,
|
|
|
|
// Routes browser requests to Sentry through a Next.js rewrite to circumvent ad-blockers (increases server load)
|
|
tunnelRoute: "/monitoring",
|
|
|
|
// Hides source maps from generated client bundles
|
|
hideSourceMaps: true,
|
|
|
|
// Automatically tree-shake Sentry logger statements to reduce bundle size
|
|
disableLogger: true,
|
|
|
|
// Disable automatic instrumentation that might cause issues
|
|
automaticVercelMonitors: false,
|
|
},
|
|
)
|