83 lines
2.3 KiB
JavaScript
83 lines
2.3 KiB
JavaScript
// SPDX-FileCopyrightText: 2025 Contributors to the CitrineOS Project
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
import createNextIntlPlugin from 'next-intl/plugin';
|
|
import { dirname, resolve } from 'path';
|
|
import { fileURLToPath } from 'url';
|
|
|
|
const __filename = fileURLToPath(import.meta.url);
|
|
const __dirname = dirname(__filename);
|
|
|
|
const withNextIntl = createNextIntlPlugin(resolve(__dirname, 'src/lib/i18n/request.ts'));
|
|
|
|
/** @type {import('next').NextConfig} */
|
|
const nextConfig = {
|
|
output: 'standalone',
|
|
// Trace from the monorepo root so the standalone output bundles workspace
|
|
// dependencies (@citrineos/base) correctly.
|
|
outputFileTracingRoot: resolve(__dirname, '../..'),
|
|
devIndicators: {
|
|
position: 'bottom-right',
|
|
},
|
|
eslint: {
|
|
// Next 15's built-in lint runner does not currently load the flat
|
|
// eslint.config.mjs + typescript-eslint parser correctly here, causing
|
|
// spurious "import is reserved" errors. Run lint via `pnpm lint` instead.
|
|
ignoreDuringBuilds: true,
|
|
},
|
|
typescript: {
|
|
// Ignore type errors during build — Leaflet dynamic imports cause
|
|
// TypeScript type-checking loops with the Refine CLI build process.
|
|
ignoreBuildErrors: true,
|
|
},
|
|
images: {
|
|
remotePatterns: [
|
|
{
|
|
protocol: 'https',
|
|
hostname: 'storage.googleapis.com',
|
|
pathname: '/**',
|
|
},
|
|
],
|
|
},
|
|
webpack: (config, { isServer }) => {
|
|
config.resolve.alias = {
|
|
...config.resolve.alias,
|
|
'class-transformer/types/storage': resolve(
|
|
__dirname,
|
|
'node_modules/class-transformer/cjs/storage.js',
|
|
),
|
|
};
|
|
// Force new file names to bust cache
|
|
if (!isServer) {
|
|
config.output.filename = 'static/chunks/[name].[contenthash:8].js';
|
|
config.output.chunkFilename = 'static/chunks/[name].[contenthash:8].js';
|
|
}
|
|
return config;
|
|
},
|
|
async headers() {
|
|
return [
|
|
{
|
|
source: '/(.*)',
|
|
headers: [
|
|
{
|
|
key: 'Referrer-Policy',
|
|
value: 'no-referrer-when-downgrade',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
source: '/_next/static/:path*',
|
|
headers: [
|
|
{
|
|
key: 'Cache-Control',
|
|
value: 'no-cache, no-store, must-revalidate',
|
|
},
|
|
],
|
|
},
|
|
];
|
|
},
|
|
};
|
|
|
|
export default withNextIntl(nextConfig);
|