diff options
Diffstat (limited to '')
-rw-r--r-- | packages/bun-framework-next/next_document.tsx | 0 | ||||
-rw-r--r-- | packages/bun-framework-next/renderDocument.tsx | 60 |
2 files changed, 32 insertions, 28 deletions
diff --git a/packages/bun-framework-next/next_document.tsx b/packages/bun-framework-next/next_document.tsx new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/packages/bun-framework-next/next_document.tsx diff --git a/packages/bun-framework-next/renderDocument.tsx b/packages/bun-framework-next/renderDocument.tsx index 4b299c149..42e988b88 100644 --- a/packages/bun-framework-next/renderDocument.tsx +++ b/packages/bun-framework-next/renderDocument.tsx @@ -39,36 +39,43 @@ if ("HtmlContext" in NextUtils) { } } -function appendNextBody(html: string, docPropsHtml) { +function appendNextBody(documentHTML: string, pageContent: string) { if (nextVersion.startsWith("12.0")) { const NEXT_12_0_BODY_RENDER_TARGET = "__NEXT_BODY_RENDER_TARGET__"; - const bodyRenderIdx = html.indexOf(NEXT_12_0_BODY_RENDER_TARGET); + const bodyRenderIdx = documentHTML.indexOf(NEXT_12_0_BODY_RENDER_TARGET); + + if (!documentHTML.startsWith("<!DOCTYPE html>")) { + documentHTML = "<!DOCTYPE html>" + documentHTML; + } return ( - html.substring(0, bodyRenderIdx) + - docPropsHtml + - html.substring(bodyRenderIdx + NEXT_12_0_BODY_RENDER_TARGET.length) + documentHTML.substring(0, bodyRenderIdx) + + pageContent + + documentHTML.substring( + bodyRenderIdx + NEXT_12_0_BODY_RENDER_TARGET.length + ) ); } else { - const end = html.lastIndexOf("</next-js-internal-body-render-target>"); - - const start = html.lastIndexOf( - "<next-js-internal-body-render-target>", - end + var [renderTargetPrefix, renderTargetSuffix] = documentHTML.split( + "<next-js-internal-body-render-target></next-js-internal-body-render-target>" ); - if (start === -1 || end === -1) { + if (!renderTargetPrefix || !renderTargetSuffix) { throw new Error( "Can't find where your <App /> starts or where the <Document /> ends. \nThis is probably a version incompatibility. Please mention this error in Bun's discord\n\n" + - html + documentHTML ); } + if (!renderTargetPrefix.startsWith("<!DOCTYPE html>")) { + renderTargetPrefix = "<!DOCTYPE html>" + renderTargetPrefix; + } + return ( - html.substring(0, start) + - `<div id="__next">${docPropsHtml || ""}</div>` + - html.substring(end) + renderTargetPrefix + + `<div id="__next">${pageContent || ""}</div>` + + renderTargetSuffix ); } } @@ -243,19 +250,16 @@ function renderDocument( ...docProps, }; - return ( - "<!DOCTYPE html>" + - ReactDOMServer.renderToStaticMarkup( - <AmpStateContext.Provider value={ampState}> - {/* HTMLContextProvider expects useMainContent */} + return ReactDOMServer.renderToString( + <AmpStateContext.Provider value={ampState}> + {/* HTMLContextProvider expects useMainContent */} + {/* @ts-expect-error */} + <HtmlContext.Provider value={htmlProps}> + {/* Document doesn't expect useMaybeDeferContent */} {/* @ts-expect-error */} - <HtmlContext.Provider value={htmlProps}> - {/* Document doesn't expect useMaybeDeferContent */} - {/* @ts-expect-error */} - <Document {...htmlProps} {...docProps}></Document> - </HtmlContext.Provider> - </AmpStateContext.Provider> - ) + <Document {...htmlProps} {...docProps}></Document> + </HtmlContext.Provider> + </AmpStateContext.Provider> ); } @@ -760,7 +764,7 @@ export async function render({ }, // Only enabled in production as development mode has features relying on HMR (style injection for example) // @ts-expect-error - unstable_runtimeJS: true, + unstable_runtimeJS: false, // process.env.NODE_ENV === "production" // ? pageConfig.unstable_runtimeJS // : undefined, |