owncast/web/next.config.js
mahmed2000 1a5e7cb113
Fix custom runtimeCaching rules, default runtimeCaching rule order (#3685)
Co-authored-by: Muaz Ahmad <mahmad2000@protonmail.com>
2024-04-14 15:41:39 -07:00

107 lines
2.9 KiB
JavaScript

const withLess = require('next-with-less');
const withBundleAnalyzer = require('@next/bundle-analyzer')({
enabled: process.env.ANALYZE === 'true',
});
const { PHASE_DEVELOPMENT_SERVER } = require('next/constants');
const runtimeCaching = require('next-pwa/cache');
const withPWA = require('next-pwa')({
dest: 'public',
runtimeCaching: [
{
urlPattern: /\.(?:ts|m3u8)$/i,
handler: 'NetworkOnly',
},
{
urlPattern: (url) => { return url.pathname.startsWith("/admin/"); },
handler: 'NetworkOnly',
options: {
fetchOptions: { credentials: 'same-origin' }
}
},
{
urlPattern: (url) => { return url.pathname.startsWith("/api/"); },
handler: 'NetworkOnly',
},
...runtimeCaching,
],
register: true,
skipWaiting: true,
disableDevLogs: true,
publicExcludes: ['!img/platformlogos/**/*', '!styles/admin/**/*'],
buildExcludes: [/chunks\/pages\/admin.*/, '!**/admin/**/*'],
sourcemap: process.env.NODE_ENV === 'development',
disable: process.env.NODE_ENV === 'development',
});
async function rewrites() {
return [
{
source: '/api/:path*',
destination: 'http://localhost:8080/api/:path*', // Proxy to Backend to work around CORS.
},
{
source: '/hls/:path*',
destination: 'http://localhost:8080/hls/:path*', // Proxy to Backend to work around CORS.
},
{
source: '/img/:path*',
destination: 'http://localhost:8080/img/:path*', // Proxy to Backend to work around CORS.
},
{
source: '/logo',
destination: 'http://localhost:8080/logo', // Proxy to Backend to work around CORS.
},
{
source: '/thumbnail.jpg',
destination: 'http://localhost:8080/thumbnail.jpg', // Proxy to Backend to work around CORS.
},
{
source: '/customjavascript',
destination: 'http://localhost:8080/customjavascript', // Proxy to Backend to work around CORS.
},
];
}
module.exports = async phase => {
/**
* @type {import('next').NextConfig}
*/
let nextConfig = withPWA(
withBundleAnalyzer(
withLess({
productionBrowserSourceMaps: process.env.SOURCE_MAPS === 'true',
trailingSlash: true,
reactStrictMode: true,
images: {
unoptimized: true,
},
swcMinify: true,
transpilePackages: [ "antd", "@ant-design", "rc-util", "rc-pagination", "rc-picker", "rc-notification", "rc-tooltip", "rc-tree", "rc-table" ],
webpack(config) {
config.module.rules.push({
test: /\.svg$/i,
issuer: /\.[jt]sx?$/,
use: ['@svgr/webpack'],
});
return config;
},
pageExtensions: ['tsx'],
}),
),
);
if (phase === PHASE_DEVELOPMENT_SERVER) {
nextConfig = {
...nextConfig,
rewrites,
};
} else {
nextConfig = {
...nextConfig,
output: 'export',
};
}
return nextConfig;
};