EvoCalculator.Client2/apps/web/next.config.js
2024-04-27 11:22:26 +03:00

166 lines
4.5 KiB
JavaScript

const fs = require('fs');
const path = require('path');
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 { withSentryConfig } = require('@sentry/nextjs');
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,
};
}
const cspHeader = `
upgrade-insecure-requests;
default-src ${
process.env.NODE_ENV === 'development' ? 'http: ws:' : ''
} https: wss: data: blob: 'self';
base-uri 'self';
connect-src 'self' *.evoleasing.ru ${process.env.NODE_ENV === 'development' ? 'ws:' : ''} wss:;
worker-src 'self' blob:;
font-src 'self' fonts.gstatic.com fonts.googleapis.com;
script-src 'self' ${
process.env.NODE_ENV === 'development' ? "'unsafe-eval' 'unsafe-inline'" : ''
};
style-src 'self' 'unsafe-inline' fonts.googleapis.com;
object-src 'none';
frame-ancestors 'none';
`;
module.exports = withSentryConfig(
{
async headers() {
return [
{
source: '/(.*)',
headers: [
{
key: 'Content-Security-Policy',
value: cspHeader.replace(/\n/g, ''),
},
],
},
];
},
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 redirects() {
return [
{
source: '/admin',
destination: '/admin/cache',
permanent: true,
},
];
},
async rewrites() {
return [
{
destination: env.URL_CRM_GRAPHQL_PROXY + '/:path*',
source: urls.URL_CRM_GRAPHQL_PROXY + '/:path*',
},
{
destination: env.URL_CRM_DOWNLOADKP_BASE + '/:path*',
source: urls.URL_CRM_DOWNLOADKP_PROXY + '/:path*',
},
{
destination: env.URL_GET_USER_DIRECT,
source: urls.URL_GET_USER_PROXY,
},
{
destination: env.URL_CORE_FINGAP_DIRECT,
source: urls.URL_CORE_FINGAP_PROXY,
},
{
destination: env.URL_1C_TRANSTAX_DIRECT,
source: urls.URL_1C_TRANSTAX_PROXY,
},
{
destination: env.URL_ELT_KASKO_DIRECT,
source: urls.URL_ELT_KASKO_PROXY,
},
{
destination: env.URL_ELT_OSAGO_DIRECT,
source: urls.URL_ELT_OSAGO_PROXY,
},
{
destination: env.URL_CACHE_GET_QUERIES_DIRECT,
source: urls.URL_CACHE_GET_QUERIES_PROXY,
},
{
destination: env.URL_CACHE_DELETE_QUERY_DIRECT + '/:path*',
source: urls.URL_CACHE_DELETE_QUERY_PROXY + '/:path*',
},
{
destination: env.URL_CACHE_RESET_QUERIES_DIRECT,
source: urls.URL_CACHE_RESET_QUERIES_PROXY,
},
{
destination: env.URL_CACHE_GET_QUERY_DIRECT,
source: urls.URL_CACHE_GET_QUERY_PROXY,
},
...favicons.map((fileName) => buildFaviconRewrite(`/${fileName}`)),
];
},
sentry: {
disableClientWebpackPlugin: true,
disableServerWebpackPlugin: true,
hideSourceMaps: true,
tunnelRoute: '/track-error',
},
serverRuntimeConfig: serverRuntimeConfigSchema.parse(env),
swcMinify: true,
transpilePackages: [
'ui',
'tools',
'antd',
'@ant-design/icons',
'rc-pagination',
'rc-picker',
'@ant-design',
'@rc-component',
'rc-table',
],
},
{
authToken: env.SENTRY_AUTH_TOKEN,
org: 'sentry',
project: 'calculator-client',
silent: true,
url: 'https://errors.evoleasing.ru/',
},
{
automaticVercelMonitors: true,
disableClientWebpackPlugin: true,
disableLogger: true,
disableServerWebpackPlugin: true,
hideSourceMaps: true,
transpileClientSDK: false,
tunnelRoute: '/track-error',
}
);