import withBundleAnalyzer from '@next/bundle-analyzer'; const IS_PRODUCTION = process.env.NODE_ENV === 'production'; const SUPABASE_URL = process.env.NEXT_PUBLIC_SUPABASE_URL; const INTERNAL_PACKAGES = [ '@kit/ui', '@kit/auth', '@kit/accounts', '@kit/team-accounts', '@kit/shared', '@kit/supabase', '@kit/i18n', '@kit/mailers', '@kit/billing', '@kit/billing-gateway', '@kit/stripe', ]; /** @type {import('next').NextConfig} */ const config = { reactStrictMode: true, swcMinify: true, /** Enables hot reloading for local packages without a build step */ transpilePackages: INTERNAL_PACKAGES, pageExtensions: ['ts', 'tsx'], images: { remotePatterns: getRemotePatterns(), }, experimental: { mdxRs: true, optimizePackageImports: [ 'recharts', 'lucide-react', '@radix-ui/react-icons', '@radix-ui/react-avatar', '@radix-ui/react-select', 'date-fns', ...INTERNAL_PACKAGES, ], }, modularizeImports: { 'lucide-react': { transform: 'lucide-react/dist/esm/icons/{{ kebabCase member }}', }, lodash: { transform: 'lodash/{{member}}', }, }, /** We already do linting and typechecking as separate tasks in CI */ eslint: { ignoreDuringBuilds: true }, typescript: { ignoreBuildErrors: true }, }; export default withBundleAnalyzer({ enabled: process.env.ANALYZE === 'true', })(config); function getRemotePatterns() { // add here the remote patterns for your images const remotePatterns = []; if (SUPABASE_URL) { const hostname = new URL(SUPABASE_URL).hostname; remotePatterns.push({ protocol: 'https', hostname, }); } return IS_PRODUCTION ? remotePatterns : [ { protocol: 'http', hostname: '127.0.0.1', }, ]; }