const { withPlugins } = require('next-composed-plugins'); const withLess = require('next-with-less'); const fs = require('fs'); const path = require('path'); const { COLORS_DEV, COLORS_PROD } = require('./constants/colors'); const envSchema = require('./config/schema/env'); const urls = require('./constants/urls'); const { devices } = require('./config/ui'); const { publicRuntimeConfigSchema } = require('./config/schema/runtime-config'); const { serverRuntimeConfigSchema } = require('./config/schema/runtime-config'); const env = envSchema.parse(process.env); const favicons = fs.readdirSync('./public/favicon/prod'); const faviconSubPath = env.USE_DEV_COLORS ? '/favicon/dev' : '/favicon/prod'; function buildFaviconRewrite(source) { return { destination: String.prototype.concat(env.BASE_PATH, faviconSubPath, source), source, }; } /** @type {import('next').NextConfig} */ const nextConfig = { basePath: env.BASE_PATH, compiler: { styledComponents: true, }, eslint: { ignoreDuringBuilds: true, }, experimental: { outputFileTracingRoot: path.join(__dirname, '../../'), }, images: { deviceSizes: devices, }, output: 'standalone', publicRuntimeConfig: publicRuntimeConfigSchema.parse(env), reactStrictMode: true, async rewrites() { return [ { destination: env.URL_CRM_GRAPHQL_DIRECT, source: urls.URL_CRM_GRAPHQL_PROXY, }, { destination: env.URL_GET_USER_DIRECT, source: urls.URL_GET_USER_PROXY, }, { destination: env.URL_CORE_FINGAP_DIRECT, source: urls.URL_CORE_FINGAP_PROXY, }, ...favicons.map((fileName) => buildFaviconRewrite(`/${fileName}`)), ]; }, serverRuntimeConfig: serverRuntimeConfigSchema.parse(env), swcMinify: true, transpilePackages: ['ui', 'tools'], }; const plugins = [withLess]; const colorPrimary = env.USE_DEV_COLORS ? COLORS_DEV.COLOR_PRIMARY : COLORS_PROD.COLOR_PRIMARY; const config = { ...nextConfig, lessLoaderOptions: { lessOptions: { modifyVars: { 'primary-color': colorPrimary, }, }, }, }; module.exports = withPlugins(config, plugins);