/* eslint-env node */ /* no-op */ /** @type {import('next').NextConfig} */ const nextConfig = { // Enable standalone output only for production deployment output: process.env.NODE_ENV === "production" ? "standalone" : undefined, // Ensure workspace package resolves/transpiles correctly in monorepo transpilePackages: [], experimental: { externalDir: true, }, // Tell Next to NOT bundle these server-only libs serverExternalPackages: [ "pino", "pino-pretty", "pino-abstract-transport", "thread-stream", "sonic-boom", // Avoid flaky vendor-chunk resolution during dev for small utils "tailwind-merge", ], // Turbopack configuration (Next.js 15.5+) // Note: public turbopack options are limited; aliasing is handled via tsconfig/webpack resolutions // Environment variables validation env: { NEXT_PUBLIC_API_BASE: process.env.NEXT_PUBLIC_API_BASE, NEXT_PUBLIC_APP_NAME: process.env.NEXT_PUBLIC_APP_NAME, NEXT_PUBLIC_APP_VERSION: process.env.NEXT_PUBLIC_APP_VERSION, }, // Image optimization images: { remotePatterns: [ { protocol: "https", hostname: "**", }, ], }, // Disable ESLint blocking during production builds to avoid CI/CD failures eslint: { ignoreDuringBuilds: true, }, // Security headers async headers() { return [ { // Apply security headers to all routes source: "/(.*)", headers: [ { key: "X-Frame-Options", value: "DENY", }, { key: "X-Content-Type-Options", value: "nosniff", }, { key: "Referrer-Policy", value: "strict-origin-when-cross-origin", }, { key: "X-XSS-Protection", value: "1; mode=block", }, // Content Security Policy - development-friendly { key: "Content-Security-Policy", value: process.env.NODE_ENV === "development" ? "default-src 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' data:; connect-src 'self' https: http://localhost:* ws://localhost:*; frame-ancestors 'none';" : "default-src 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' data:; connect-src 'self' https:; frame-ancestors 'none';", }, ], }, ]; }, // Production optimizations compiler: { // Remove console.logs in production removeConsole: process.env.NODE_ENV === "production", }, // Keep type checking enabled; monorepo paths provide types typescript: { ignoreBuildErrors: false }, // Prefer Turbopack; no custom webpack override needed }; export default nextConfig;