11// eslint-disable-next-line @next/next/no-document-import-in-page
22import { Head as NextHead } from "next/document" ;
3- import { partition } from "ramda" ;
43import React , { Fragment } from "react" ;
54import { getExcludeList , isHashProxy } from "../cfg" ;
6- import { isInlineScriptElement } from "../utils" ;
75import { writeManifestToFileWithLock } from "./file-io" ;
8- import { collectStyleElem , iterableScripts , pullManifest } from "./manifest" ;
6+ import { deepExtractStyleElemHashes , deepMapExtractScripts } from "./utils" ;
7+ import { collectStyleElem , pullManifest } from "./manifest" ;
98import {
9+ createFragmentPaddedProxy ,
10+ registerFragmentPaddedProxyForVariants ,
11+ } from "./script-inlining" ;
12+ import {
13+ deepEnsureScriptElementsInManifest ,
14+ deepMapScriptsToManifest ,
1015 ensureNextPreloadLinksInManifest ,
1116 ensureNextScriptsInManifest ,
1217 loadNextByProxy ,
18+ preNextScriptsByProxy ,
1319} from "./next-scripts" ;
14- import { createTrustedLoadingProxy } from "./script-inlining" ;
15- import {
16- deepExtractStyleElemHashes ,
17- deepEnsureScriptElementsInManifest ,
18- deepExtractScripts ,
19- deepMapScriptsToManifest ,
20- } from "./utils" ;
2120
2221export default class Head extends NextHead {
2322 private proxyfiedScripts : any [ ] = [ ] ;
@@ -29,7 +28,8 @@ export default class Head extends NextHead {
2928 return preloadScripts ;
3029 }
3130 if ( isHashProxy ( ) ) {
32- return [ ] ;
31+ preloadScripts = createFragmentPaddedProxy ( preloadScripts ) ;
32+ return preloadScripts ;
3333 }
3434 preloadScripts = ensureNextPreloadLinksInManifest (
3535 preloadScripts ,
@@ -44,7 +44,8 @@ export default class Head extends NextHead {
4444 return preloadScripts ;
4545 }
4646 if ( isHashProxy ( ) ) {
47- return [ ] ;
47+ preloadScripts = createFragmentPaddedProxy ( preloadScripts ) ;
48+ return preloadScripts ;
4849 }
4950 preloadScripts = ensureNextPreloadLinksInManifest (
5051 preloadScripts ,
@@ -59,7 +60,7 @@ export default class Head extends NextHead {
5960 if ( getExcludeList ( ) . includes ( "scripts" ) ) {
6061 return scripts ;
6162 }
62- scripts = deepMapScriptsToManifest ( scripts ) ;
63+ scripts = deepMapScriptsToManifest ( scripts , "Head" ) ;
6364 return scripts ;
6465 }
6566
@@ -70,17 +71,14 @@ export default class Head extends NextHead {
7071 return scripts ;
7172 }
7273 if ( isHashProxy ( ) ) {
73- const scriptss = deepExtractScripts ( scripts ) ;
74- const polyfillProxy = createTrustedLoadingProxy ( scriptss ) ;
75- createTrustedLoadingProxy (
76- scriptss . map ( ( s ) => React . cloneElement ( s , { defer : false } ) )
77- ) ;
78- return [ polyfillProxy ] ;
74+ const polyfillProxy = createFragmentPaddedProxy ( scripts ) ;
75+ registerFragmentPaddedProxyForVariants ( scripts ) ;
76+ return polyfillProxy ;
7977 }
8078 return ensureNextScriptsInManifest (
8179 scripts ,
82- "Head" ,
83- this . context . canonicalBase
80+ this . context . canonicalBase ,
81+ "Head"
8482 ) ;
8583 }
8684
@@ -95,23 +93,10 @@ export default class Head extends NextHead {
9593 }
9694 const isArray = Array . isArray ( scripts ) ;
9795 if ( isHashProxy ( ) ) {
98- let [ inlineScripts , srcScripts ] = partition (
99- isInlineScriptElement ,
100- deepExtractScripts ( scripts )
101- ) ;
102- inlineScripts = deepMapScriptsToManifest ( inlineScripts ) ;
103- const srcProxy = createTrustedLoadingProxy ( srcScripts ) ;
104- createTrustedLoadingProxy (
105- srcScripts . map ( ( s ) => React . cloneElement ( s , { defer : false } ) )
106- ) ;
107- inlineScripts = deepMapScriptsToManifest ( inlineScripts ) ;
108- return isArray ? (
109- [ ...inlineScripts , srcProxy ]
110- ) : (
111- < Fragment key = { scripts . key } > { [ ...inlineScripts , srcProxy ] } </ Fragment >
112- ) ;
96+ scripts = preNextScriptsByProxy ( scripts , "Head" ) ;
97+ return scripts ;
11398 }
114- scripts = deepMapScriptsToManifest ( scripts ) ;
99+ scripts = deepMapScriptsToManifest ( scripts , "Head" ) ;
115100 return isArray ? scripts : < Fragment key = { scripts . key } > { scripts } </ Fragment > ;
116101 }
117102
@@ -122,13 +107,13 @@ export default class Head extends NextHead {
122107 return scripts ;
123108 }
124109 if ( isHashProxy ( ) ) {
125- this . proxyfiedScripts . push ( ...deepExtractScripts ( scripts ) ) ;
110+ this . proxyfiedScripts . push ( ...deepMapExtractScripts ( scripts ) ) ;
126111 return [ ] ;
127112 }
128113 return ensureNextScriptsInManifest (
129114 scripts ,
130- "Head" ,
131- this . context . canonicalBase
115+ this . context . canonicalBase ,
116+ "Head"
132117 ) ;
133118 }
134119
@@ -138,14 +123,17 @@ export default class Head extends NextHead {
138123 if ( getExcludeList ( ) . includes ( "scripts" ) ) {
139124 return scripts ;
140125 }
126+ // need to call preload links during build time to collect proxy hash
127+ this . getPreloadDynamicChunks ( ) ;
128+ this . getPreloadMainLinks ( files ) ;
141129 if ( isHashProxy ( ) ) {
142- this . proxyfiedScripts . push ( ...deepExtractScripts ( scripts ) ) ;
143- scripts = [ loadNextByProxy ( this . proxyfiedScripts , "Head" ) ] ;
130+ this . proxyfiedScripts . push ( ...deepMapExtractScripts ( scripts ) ) ;
131+ scripts = loadNextByProxy ( this . proxyfiedScripts , "Head" ) ;
144132 } else {
145133 scripts = ensureNextScriptsInManifest (
146134 scripts ,
147- "Head" ,
148135 this . context . canonicalBase ,
136+ "Head" ,
149137 true
150138 ) ;
151139 }
@@ -154,11 +142,17 @@ export default class Head extends NextHead {
154142 }
155143
156144 render ( ) {
157- deepEnsureScriptElementsInManifest ( this . props . children , getExcludeList ( ) ) ;
158- collectStyleElem (
159- ...deepExtractStyleElemHashes ( this . context . styles , getExcludeList ( ) ) ,
160- ...deepExtractStyleElemHashes ( this . props . children , getExcludeList ( ) )
161- ) ;
145+ if ( ! getExcludeList ( ) . includes ( "scripts" ) ) {
146+ deepEnsureScriptElementsInManifest ( this . props . children ) ;
147+ }
148+
149+ if ( ! getExcludeList ( ) . includes ( "styles" ) ) {
150+ collectStyleElem (
151+ ...deepExtractStyleElemHashes ( this . context . styles ) ,
152+ ...deepExtractStyleElemHashes ( this . props . children )
153+ ) ;
154+ }
155+
162156 return super . render ( ) ;
163157 }
164158}
0 commit comments