@@ -21,13 +21,21 @@ const generate = async (argv) => {
2121 return matches ? dir : undefined ;
2222 } ) . filter ( key => ! ! key && allThemes . includes ( key ) ) ;
2323
24+ // Themes that doesn't exist on the file system
25+ const missingThemes = allThemes . filter ( theme => ! themesOnFileSystem . includes ( theme ) ) ;
26+
2427 const packageName = JSON . parse ( await fs . readFile ( "package.json" ) ) . name ;
2528
26- const availableThemesArray = `[${ themesOnFileSystem . map ( theme => `"${ theme } "` ) . join ( ", " ) } ]` ;
29+ // Contain all supported themes from assets-meta.js
30+ const availableThemesArray = `[${ allThemes . map ( theme => `"${ theme } "` ) . join ( ", " ) } ]` ;
31+
2732 const dynamicImportLines = themesOnFileSystem . map ( theme => `\t\tcase "${ theme } ": return (await import(/* webpackChunkName: "${ packageName . replace ( "@" , "" ) . replace ( "/" , "-" ) } -${ theme . replace ( "_" , "-" ) } -parameters-bundle" */"../assets/themes/${ theme } /parameters-bundle.css.json")).default;` ) . join ( "\n" ) ;
2833 const dynamicImportJSONAttrLines = themesOnFileSystem . map ( theme => `\t\tcase "${ theme } ": return (await import(/* webpackChunkName: "${ packageName . replace ( "@" , "" ) . replace ( "/" , "-" ) } -${ theme . replace ( "_" , "-" ) } -parameters-bundle" */"../assets/themes/${ theme } /parameters-bundle.css.json", {with: { type: 'json'}})).default;` ) . join ( "\n" ) ;
2934 const fetchMetaResolveLines = themesOnFileSystem . map ( theme => `\t\tcase "${ theme } ": return (await fetch(new URL("../assets/themes/${ theme } /parameters-bundle.css.json", import.meta.url))).json();` ) . join ( "\n" ) ;
3035
36+ // Lines for missing themes to avoid runtime errors. By default parameters-bundle.css.json returns a strings.
37+ const missingThemesLines = missingThemes . map ( theme => `\t\tcase "${ theme } ": return "";` ) . join ( "\n" ) ;
38+
3139 // dynamic imports file content
3240 const contentDynamic = function ( lines ) {
3341 return `// @ts-nocheck
@@ -55,9 +63,9 @@ ${availableThemesArray}
5563
5664 await fs . mkdir ( path . dirname ( outputFileDynamic ) , { recursive : true } ) ;
5765 return Promise . all ( [
58- fs . writeFile ( outputFileDynamic , contentDynamic ( dynamicImportLines ) ) ,
59- fs . writeFile ( outputFileDynamicImportJSONAttr , contentDynamic ( dynamicImportJSONAttrLines ) ) ,
60- fs . writeFile ( outputFileFetchMetaResolve , contentDynamic ( fetchMetaResolveLines ) ) ,
66+ fs . writeFile ( outputFileDynamic , contentDynamic ( dynamicImportLines . concat ( "\n" , missingThemesLines ) ) ) ,
67+ fs . writeFile ( outputFileDynamicImportJSONAttr , contentDynamic ( dynamicImportJSONAttrLines . concat ( "\n" , missingThemesLines ) ) ) ,
68+ fs . writeFile ( outputFileFetchMetaResolve , contentDynamic ( fetchMetaResolveLines . concat ( "\n" , missingThemesLines ) ) ) ,
6169 ] ) .
6270 then ( ( ) => {
6371 console . log ( "Generated themes JSON imports." ) ;
0 commit comments