diff --git a/packages/next/build/webpack/loaders/next-middleware-ssr-loader/render.ts b/packages/next/build/webpack/loaders/next-middleware-ssr-loader/render.ts index beefd6dcb861..826752d4201e 100644 --- a/packages/next/build/webpack/loaders/next-middleware-ssr-loader/render.ts +++ b/packages/next/build/webpack/loaders/next-middleware-ssr-loader/render.ts @@ -12,20 +12,6 @@ import { WebNextResponse, } from '../../../../server/base-http/web' -const createHeaders = (args?: any) => ({ - ...args, - 'x-middleware-ssr': '1', - 'Cache-Control': 'no-cache, no-store, max-age=0, must-revalidate', -}) - -function sendError(req: any, error: Error) { - const defaultMessage = 'An error occurred while rendering ' + req.url + '.' - return new Response((error && error.message) || defaultMessage, { - status: 500, - headers: createHeaders(), - }) -} - // Polyfilled for `path-browserify` inside the Web Server. process.cwd = () => '' @@ -135,19 +121,14 @@ export function getRender({ // Preflight request if (request.method === 'HEAD') { + // Hint the client that the matched route is a SSR page. return new Response(null, { - headers: createHeaders(), + headers: { + 'x-middleware-ssr': '1', + }, }) } - // @TODO: We should move this into server/render. - if (Document.getInitialProps) { - const err = new Error( - '`getInitialProps` in Document component is not supported with the Edge Runtime.' - ) - return sendError(req, err) - } - const renderServerComponentData = isServerComponent ? query.__flight__ !== undefined : false diff --git a/packages/next/server/dev/hot-reloader.ts b/packages/next/server/dev/hot-reloader.ts index 92847d189629..0c6454f8072b 100644 --- a/packages/next/server/dev/hot-reloader.ts +++ b/packages/next/server/dev/hot-reloader.ts @@ -336,6 +336,8 @@ export default class HotReloader { ) ) + const hasEdgeRuntimePages = this.runtime === 'edge' + return webpackConfigSpan .traceChild('generate-webpack-config') .traceAsyncFn(() => @@ -363,7 +365,7 @@ export default class HotReloader { }), // For the edge runtime, we need an extra compiler to generate the // web-targeted server bundle for now. - this.runtime === 'edge' + hasEdgeRuntimePages ? getBaseWebpackConfig(this.dir, { dev: true, isServer: true, diff --git a/packages/next/server/render.tsx b/packages/next/server/render.tsx index 4dbb76ffec85..d8dbd4976893 100644 --- a/packages/next/server/render.tsx +++ b/packages/next/server/render.tsx @@ -1249,6 +1249,13 @@ export async function renderToHTML( */ const generateStaticHTML = supportsDynamicHTML !== true const renderDocument = async () => { + if (runtime === 'edge' && Document.getInitialProps) { + // In the Edge runtime, Document.getInitialProps isn't supported. + throw new Error( + '`getInitialProps` in Document component is not supported with the Edge Runtime.' + ) + } + if (!runtime && Document.getInitialProps) { const renderPage: RenderPage = ( options: ComponentsEnhancer = {}