SurfSense/surfsense_web/next.config.ts

91 lines
2.3 KiB
TypeScript
Raw Normal View History

2025-07-27 10:05:37 -07:00
import { createMDX } from "fumadocs-mdx/next";
import type { NextConfig } from "next";
import createNextIntlPlugin from "next-intl/plugin";
// Create the next-intl plugin
const withNextIntl = createNextIntlPlugin("./i18n/request.ts");
2025-04-07 23:47:06 -07:00
const nextConfig: NextConfig = {
output: "standalone",
2025-11-23 15:23:31 +05:30
// Disable StrictMode for BlockNote compatibility with React 19/Next 15
reactStrictMode: false,
2025-07-27 10:05:37 -07:00
typescript: {
ignoreBuildErrors: true,
},
images: {
remotePatterns: [
{
protocol: "https",
2025-08-23 19:40:29 -07:00
hostname: "**",
},
],
},
2025-11-23 15:23:31 +05:30
// Mark BlockNote server packages as external
2025-11-23 16:39:23 +05:30
serverExternalPackages: ["@blocknote/server-util"],
2025-11-23 15:23:31 +05:30
// Turbopack config (used during `next dev --turbopack`)
turbopack: {
rules: {
"*.svg": {
loaders: ["@svgr/webpack"],
as: "*.js",
},
},
},
// Configure webpack to handle blocknote packages + SVGR
2025-11-23 15:23:31 +05:30
webpack: (config, { isServer }) => {
if (isServer) {
// Don't bundle these packages on the server
2025-11-23 16:39:23 +05:30
config.externals = [...(config.externals || []), "@blocknote/server-util"];
2025-11-23 15:23:31 +05:30
}
// SVGR: import *.svg as React components
2026-02-10 19:06:21 +05:30
const fileLoaderRule = config.module.rules.find((rule: any) => rule.test?.test?.(".svg"));
config.module.rules.push(
// Re-apply the existing file loader for *.svg?url imports
{
...fileLoaderRule,
test: /\.svg$/i,
resourceQuery: /url/, // e.g. import icon from './icon.svg?url'
},
// Convert all other *.svg imports to React components
{
test: /\.svg$/i,
issuer: fileLoaderRule.issuer,
resourceQuery: { not: [...fileLoaderRule.resourceQuery.not, /url/] },
use: ["@svgr/webpack"],
2026-02-10 19:06:21 +05:30
}
);
fileLoaderRule.exclude = /\.svg$/i;
2025-11-23 15:23:31 +05:30
return config;
},
// PostHog reverse proxy configuration
// This helps bypass ad blockers by routing requests through your domain
async rewrites() {
return [
{
source: "/ingest/static/:path*",
destination: "https://us-assets.i.posthog.com/static/:path*",
},
{
source: "/ingest/:path*",
destination: "https://us.i.posthog.com/:path*",
},
{
source: "/ingest/decide",
destination: "https://us.i.posthog.com/decide",
},
];
},
// Required for PostHog reverse proxy to work correctly
skipTrailingSlashRedirect: true,
2025-04-07 23:47:06 -07:00
};
// Wrap the config with MDX and next-intl plugins
2025-04-22 02:24:13 -07:00
const withMDX = createMDX({});
export default withNextIntl(withMDX(nextConfig));