@@ -20,15 +20,19 @@ function getAssets(chunks, getAsset) {
20
20
return _ . uniqBy ( _ . flatMap ( chunks , chunk => getAsset ( chunk ) ) , 'url' )
21
21
}
22
22
23
- function assetToScriptTag ( asset ) {
23
+ function extraPropsToString ( extraProps ) {
24
+ return Object . keys ( extraProps ) . reduce ( ( acc , key ) => `${ acc } ${ key } ="${ extraProps [ key ] } "` , '' ) ;
25
+ }
26
+
27
+ function assetToScriptTag ( asset , extraProps ) {
24
28
return `<script async data-chunk="${ asset . chunk } " src="${
25
29
asset . url
26
- } "></script>`
30
+ } "${ extraPropsToString ( extraProps ) } ></script>`
27
31
}
28
32
29
- function assetToScriptElement ( asset ) {
33
+ function assetToScriptElement ( asset , extraProps ) {
30
34
return (
31
- < script key = { asset . url } async data-chunk = { asset . chunk } src = { asset . url } />
35
+ < script key = { asset . url } async data-chunk = { asset . chunk } src = { asset . url } { ... extraProps } />
32
36
)
33
37
}
34
38
@@ -44,40 +48,41 @@ function assetToStyleString(asset) {
44
48
} )
45
49
}
46
50
47
- function assetToStyleTag ( asset ) {
51
+ function assetToStyleTag ( asset , extraProps ) {
48
52
return `<link data-chunk="${ asset . chunk } " rel="stylesheet" href="${
49
53
asset . url
50
- } ">`
54
+ } "${ extraPropsToString ( extraProps ) } >`
51
55
}
52
56
53
- function assetToStyleTagInline ( asset ) {
57
+ function assetToStyleTagInline ( asset , extraProps ) {
54
58
return new Promise ( ( resolve , reject ) => {
55
59
fs . readFile ( asset . path , 'utf8' , ( err , data ) => {
56
60
if ( err ) {
57
61
reject ( err )
58
62
return
59
63
}
60
64
resolve (
61
- `<style type="text/css" data-chunk="${ asset . chunk } ">
65
+ `<style type="text/css" data-chunk="${ asset . chunk } "${ extraPropsToString ( extraProps ) } >
62
66
${ data }
63
67
</style>` ,
64
68
)
65
69
} )
66
70
} )
67
71
}
68
72
69
- function assetToStyleElement ( asset ) {
73
+ function assetToStyleElement ( asset , extraProps ) {
70
74
return (
71
75
< link
72
76
key = { asset . url }
73
77
data-chunk = { asset . chunk }
74
78
rel = "stylesheet"
75
79
href = { asset . url }
80
+ { ...extraProps }
76
81
/>
77
82
)
78
83
}
79
84
80
- function assetToStyleElementInline ( asset ) {
85
+ function assetToStyleElementInline ( asset , extraProps ) {
81
86
return new Promise ( ( resolve , reject ) => {
82
87
fs . readFile ( asset . path , 'utf8' , ( err , data ) => {
83
88
if ( err ) {
@@ -89,6 +94,7 @@ function assetToStyleElementInline(asset) {
89
94
key = { asset . url }
90
95
data-chunk = { asset . chunk }
91
96
dangerouslySetInnerHTML = { { __html : data } }
97
+ { ...extraProps }
92
98
/> ,
93
99
)
94
100
} )
@@ -225,17 +231,18 @@ class ChunkExtractor {
225
231
) } ;`
226
232
}
227
233
228
- getRequiredChunksScriptTag ( ) {
229
- return `<script>${ this . getRequiredChunksScriptContent ( ) } </script>`
234
+ getRequiredChunksScriptTag ( extraProps ) {
235
+ return `<script${ extraPropsToString ( extraProps ) } >${ this . getRequiredChunksScriptContent ( ) } </script>`
230
236
}
231
237
232
- getRequiredChunksScriptElement ( ) {
238
+ getRequiredChunksScriptElement ( extraProps ) {
233
239
return (
234
240
< script
235
241
key = "required"
236
242
dangerouslySetInnerHTML = { {
237
243
__html : this . getRequiredChunksScriptContent ( ) ,
238
244
} }
245
+ { ...extraProps }
239
246
/>
240
247
)
241
248
}
@@ -275,18 +282,18 @@ class ChunkExtractor {
275
282
return assets
276
283
}
277
284
278
- getScriptTags ( ) {
279
- const requiredScriptTag = this . getRequiredChunksScriptTag ( )
285
+ getScriptTags ( extraProps = { } ) {
286
+ const requiredScriptTag = this . getRequiredChunksScriptTag ( extraProps )
280
287
const mainAssets = this . getMainAssets ( 'script' )
281
- const assetsScriptTags = mainAssets . map ( asset => assetToScriptTag ( asset ) )
288
+ const assetsScriptTags = mainAssets . map ( asset => assetToScriptTag ( asset , extraProps ) )
282
289
return joinTags ( [ requiredScriptTag , ...assetsScriptTags ] )
283
290
}
284
291
285
- getScriptElements ( ) {
286
- const requiredScriptElement = this . getRequiredChunksScriptElement ( )
292
+ getScriptElements ( extraProps = { } ) {
293
+ const requiredScriptElement = this . getRequiredChunksScriptElement ( extraProps )
287
294
const mainAssets = this . getMainAssets ( 'script' )
288
295
const assetsScriptElements = mainAssets . map ( asset =>
289
- assetToScriptElement ( asset ) ,
296
+ assetToScriptElement ( asset , extraProps ) ,
290
297
)
291
298
return [ requiredScriptElement , ...assetsScriptElements ]
292
299
}
@@ -299,28 +306,28 @@ class ChunkExtractor {
299
306
return Promise . all ( promises ) . then ( results => joinTags ( results ) )
300
307
}
301
308
302
- getStyleTags ( ) {
309
+ getStyleTags ( extraProps = { } ) {
303
310
const mainAssets = this . getMainAssets ( 'style' )
304
- return joinTags ( mainAssets . map ( asset => assetToStyleTag ( asset ) ) )
311
+ return joinTags ( mainAssets . map ( asset => assetToStyleTag ( asset , extraProps ) ) )
305
312
}
306
313
307
- getInlineStyleTags ( ) {
314
+ getInlineStyleTags ( extraProps = { } ) {
308
315
const mainAssets = this . getMainAssets ( 'style' )
309
316
const promises = mainAssets . map ( asset =>
310
- assetToStyleTagInline ( asset ) . then ( data => data ) ,
317
+ assetToStyleTagInline ( asset , extraProps ) . then ( data => data ) ,
311
318
)
312
319
return Promise . all ( promises ) . then ( results => joinTags ( results ) )
313
320
}
314
321
315
- getStyleElements ( ) {
322
+ getStyleElements ( extraProps = { } ) {
316
323
const mainAssets = this . getMainAssets ( 'style' )
317
- return mainAssets . map ( asset => assetToStyleElement ( asset ) )
324
+ return mainAssets . map ( asset => assetToStyleElement ( asset , extraProps ) )
318
325
}
319
326
320
- getInlineStyleElements ( ) {
327
+ getInlineStyleElements ( extraProps = { } ) {
321
328
const mainAssets = this . getMainAssets ( 'style' )
322
329
const promises = mainAssets . map ( asset =>
323
- assetToStyleElementInline ( asset ) . then ( data => data ) ,
330
+ assetToStyleElementInline ( asset , extraProps ) . then ( data => data ) ,
324
331
)
325
332
return Promise . all ( promises ) . then ( results => results )
326
333
}
0 commit comments