@@ -23,6 +23,8 @@ import {
2323 MAX_CPU_CORES ,
2424 MIN_IMAGE_THRESHOLD_ARTICLELIST_PAGE ,
2525 downloadAndSaveModule ,
26+ downloadAndSaveStartupModule ,
27+ getModuleDependencies ,
2628 genCanonicalLink ,
2729 genHeaderCSSLink ,
2830 genHeaderScript ,
@@ -96,6 +98,8 @@ async function execute(argv: any) {
9698 publisher : _publisher ,
9799 outputDirectory : _outputDirectory ,
98100 addNamespaces : _addNamespaces ,
101+ javaScript : _javaScript ,
102+ addModules : _addModules ,
99103 customZimFavicon,
100104 optimisationCacheUrl,
101105 customFlavour,
@@ -167,6 +171,10 @@ async function execute(argv: any) {
167171 MediaWiki . password = mwPassword
168172 MediaWiki . username = mwUsername
169173
174+ const javaScript = _javaScript || 'trusted'
175+ const addModules = _addModules ? String ( _addModules ) . split ( ',' ) : [ ]
176+ const trustedJs = javaScript === 'none' ? null : javaScript === 'trusted' ? config . output . mw . js_trusted . concat ( addModules ) : [ ]
177+
170178 /* Download helpers; TODO: Merge with something else / expand this. */
171179 Downloader . init = {
172180 uaString : `${ config . userAgent } (${ adminEmail } )` ,
@@ -175,6 +183,7 @@ async function execute(argv: any) {
175183 optimisationCacheUrl,
176184 s3,
177185 webp,
186+ trustedJs,
178187 insecure : argv . insecure ,
179188 }
180189
@@ -444,12 +453,48 @@ async function execute(argv: any) {
444453 const { jsModuleDependencies, cssModuleDependencies, staticFilesList } = await saveArticles ( zimCreator , dump )
445454 logger . log ( `Fetching Articles finished in ${ ( Date . now ( ) - stime ) / 1000 } seconds` )
446455
447- logger . log ( `Found [${ jsModuleDependencies . size } ] js module dependencies` )
448- logger . log ( `Found [${ cssModuleDependencies . size } ] style module dependencies` )
449-
450456 logger . info ( 'Copying Static Resource Files' )
451457 await saveStaticFiles ( staticFilesList , zimCreator )
452458
459+ if ( javaScript === 'none' ) {
460+ jsModuleDependencies . clear ( )
461+ } else {
462+ // Get list of all possible modules from startup
463+ const allModules = await downloadAndSaveStartupModule ( zimCreator )
464+ addModules . forEach ( ( oneModule ) => {
465+ jsModuleDependencies . add ( oneModule )
466+ } )
467+ // Include known dynamic dependencies
468+ const dynamicJsDeps = config . output . mw . js_dynamic_dependencies
469+ Object . keys ( dynamicJsDeps ) . forEach ( ( oneDep : keyof typeof dynamicJsDeps ) => {
470+ if ( jsModuleDependencies . has ( oneDep ) ) {
471+ dynamicJsDeps [ oneDep ] . forEach ( ( extraDep ) => {
472+ jsModuleDependencies . add ( extraDep )
473+ } )
474+ }
475+ } )
476+ // Include all dependencies of the dependencies
477+ jsModuleDependencies . forEach ( ( oneDep ) => {
478+ const oneModule = allModules . find ( ( oneModule ) => oneModule [ 0 ] === oneDep )
479+ if ( ! oneModule ) {
480+ jsModuleDependencies . delete ( oneDep )
481+ return logger . warn ( `Unknown JS module [${ oneDep } ] removed` )
482+ }
483+ getModuleDependencies ( oneModule , allModules ) . forEach ( ( extraDep ) => {
484+ jsModuleDependencies . add ( extraDep )
485+ } )
486+ } )
487+ // Don't store JS for CSS modules
488+ cssModuleDependencies . forEach ( ( oneModule ) => {
489+ if ( ! addModules . includes ( oneModule ) ) {
490+ jsModuleDependencies . delete ( oneModule )
491+ }
492+ } )
493+ }
494+
495+ logger . log ( `Found [${ jsModuleDependencies . size } ] js module dependencies` )
496+ logger . log ( `Found [${ cssModuleDependencies . size } ] style module dependencies` )
497+
453498 const allDependenciesWithType = [
454499 { type : 'js' , moduleList : Array . from ( jsModuleDependencies ) } ,
455500 { type : 'css' , moduleList : Array . from ( cssModuleDependencies ) } ,
@@ -461,6 +506,9 @@ async function execute(argv: any) {
461506 return pmap (
462507 moduleList ,
463508 ( oneModule ) => {
509+ if ( oneModule . startsWith ( 'user' ) ) {
510+ return
511+ }
464512 return downloadAndSaveModule ( zimCreator , oneModule , type as any )
465513 } ,
466514 { concurrency : Downloader . speed } ,
0 commit comments