Files
pse.dev/next.config.mjs
Kalidou Diagne 1c42c7f31d feat: optimizations and clean up (#431)
* Add image optimization and image fallback
* Add fonts optimization
* Replace images with code with actual code blocks
* Fix mpz project banner not loading #432
* Fix Replace text loading with skeletons #428
* Remove unused files
2025-06-05 11:21:58 +09:00

57 lines
1.4 KiB
JavaScript

import nextMdx from "@next/mdx";
import path from "path";
import { fileURLToPath } from "url";
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const withMDX = nextMdx({
webpack: (config, { isServer }) => {
if (isServer) {
config.resolve.alias["zlib-sync"] = path.resolve(__dirname, "lib/dummy-zlib-sync.js");
config.externals.push("erlpack");
} else {
config.externals.push("discord.js", "@discordjs/rest");
}
return config;
},
extension: /\.mdx?$/,
options: {
remarkPlugins: [],
rehypePlugins: [],
},
})
/** @type {import('next').NextConfig} */
const nextConfig = {
pageExtensions: ["js", "jsx", "mdx", "ts", "tsx", "md"],
reactStrictMode: true,
images: {
remotePatterns: [
{
protocol: "https",
hostname: "i.ytimg.com",
pathname: "/**",
},
{
protocol: "https",
hostname: "img.youtube.com",
pathname: "/**",
}
],
formats: ["image/avif", "image/webp"],
deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
imageSizes: [16, 32, 48, 64, 96, 128, 256, 384],
minimumCacheTTL: 60,
dangerouslyAllowSVG: true,
contentDispositionType: "attachment",
contentSecurityPolicy: "default-src 'self'; script-src 'none'; sandbox;",
},
experimental: {
mdxRs: true,
optimizePackageImports: ["@heroicons/react", "lucide-react"],
},
swcMinify: true,
}
export default withMDX(nextConfig)