@@ -78,6 +78,7 @@ import { appendMutableCookies } from '../web/spec-extension/adapters/request-coo
78
78
import { ComponentsType } from '../../build/webpack/loaders/next-app-loader'
79
79
import { ModuleReference } from '../../build/webpack/loaders/metadata/types'
80
80
import { createServerInsertedHTML } from './server-inserted-html'
81
+ import { getRequiredScripts } from './required-scripts'
81
82
82
83
export type GetDynamicParamFromSegment = (
83
84
// [slug] / [[slug]] / [...slug]
@@ -1387,11 +1388,15 @@ export async function renderToHTMLOrFlight(
1387
1388
* A new React Component that renders the provided React Component
1388
1389
* using Flight which can then be rendered to HTML.
1389
1390
*/
1390
- const createServerComponentsRenderer = ( loaderTreeToRender : LoaderTree ) =>
1391
+ const createServerComponentsRenderer = (
1392
+ loaderTreeToRender : LoaderTree ,
1393
+ preinitScripts : ( ) => void
1394
+ ) =>
1391
1395
createServerComponentRenderer < {
1392
1396
asNotFound : boolean
1393
1397
} > (
1394
1398
async ( props ) => {
1399
+ preinitScripts ( )
1395
1400
// Create full component tree from root to leaf.
1396
1401
const injectedCSS = new Set < string > ( )
1397
1402
const injectedFontPreloadTags = new Set < string > ( )
@@ -1490,7 +1495,16 @@ export async function renderToHTMLOrFlight(
1490
1495
integrity : subresourceIntegrityManifest ?. [ polyfill ] ,
1491
1496
} ) )
1492
1497
1493
- const ServerComponentsRenderer = createServerComponentsRenderer ( tree )
1498
+ const [ preinitScripts , bootstrapScript ] = getRequiredScripts (
1499
+ buildManifest ,
1500
+ assetPrefix ,
1501
+ subresourceIntegrityManifest ,
1502
+ getAssetQueryString ( true )
1503
+ )
1504
+ const ServerComponentsRenderer = createServerComponentsRenderer (
1505
+ tree ,
1506
+ preinitScripts
1507
+ )
1494
1508
const content = (
1495
1509
< HeadManagerContext . Provider
1496
1510
value = { {
@@ -1576,28 +1590,7 @@ export async function renderToHTMLOrFlight(
1576
1590
onError : htmlRendererErrorHandler ,
1577
1591
nonce,
1578
1592
// Include hydration scripts in the HTML
1579
- bootstrapScripts : [
1580
- ...( subresourceIntegrityManifest
1581
- ? buildManifest . rootMainFiles . map ( ( src ) => ( {
1582
- src :
1583
- `${ assetPrefix } /_next/` +
1584
- src +
1585
- // Always include the timestamp query in development
1586
- // as Safari caches them during the same session, no
1587
- // matter what cache headers are set.
1588
- getAssetQueryString ( true ) ,
1589
- integrity : subresourceIntegrityManifest [ src ] ,
1590
- } ) )
1591
- : buildManifest . rootMainFiles . map (
1592
- ( src ) =>
1593
- `${ assetPrefix } /_next/` +
1594
- src +
1595
- // Always include the timestamp query in development
1596
- // as Safari caches them during the same session, no
1597
- // matter what cache headers are set.
1598
- getAssetQueryString ( true )
1599
- ) ) ,
1600
- ] ,
1593
+ bootstrapScripts : [ bootstrapScript ] ,
1601
1594
} ,
1602
1595
} )
1603
1596
@@ -1680,8 +1673,18 @@ export async function renderToHTMLOrFlight(
1680
1673
) }
1681
1674
</ >
1682
1675
)
1676
+
1677
+ const [ errorPreinitScripts , errorBootstrapScript ] =
1678
+ getRequiredScripts (
1679
+ buildManifest ,
1680
+ assetPrefix ,
1681
+ subresourceIntegrityManifest ,
1682
+ getAssetQueryString ( false )
1683
+ )
1684
+
1683
1685
const ErrorPage = createServerComponentRenderer (
1684
1686
async ( ) => {
1687
+ errorPreinitScripts ( )
1685
1688
const [ MetadataTree , MetadataOutlet ] = createMetadataComponents ( {
1686
1689
tree, // still use original tree with not-found boundaries to extract metadata
1687
1690
pathname,
@@ -1762,20 +1765,7 @@ export async function renderToHTMLOrFlight(
1762
1765
streamOptions : {
1763
1766
nonce,
1764
1767
// Include hydration scripts in the HTML
1765
- bootstrapScripts : subresourceIntegrityManifest
1766
- ? buildManifest . rootMainFiles . map ( ( src ) => ( {
1767
- src :
1768
- `${ assetPrefix } /_next/` +
1769
- src +
1770
- getAssetQueryString ( false ) ,
1771
- integrity : subresourceIntegrityManifest [ src ] ,
1772
- } ) )
1773
- : buildManifest . rootMainFiles . map (
1774
- ( src ) =>
1775
- `${ assetPrefix } /_next/` +
1776
- src +
1777
- getAssetQueryString ( false )
1778
- ) ,
1768
+ bootstrapScripts : [ errorBootstrapScript ] ,
1779
1769
} ,
1780
1770
} )
1781
1771
0 commit comments