forked from mystiq/hydrogen-web
Split functions into smaller functions
This commit is contained in:
parent
5eec724712
commit
fbdd512e06
1 changed files with 49 additions and 15 deletions
|
@ -43,10 +43,39 @@ function addThemesToConfig(bundle, manifestLocations, defaultThemes) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function parseBundle(bundle) {
|
/**
|
||||||
|
* Returns a mapping from location (of manifest file) to an array containing all the chunks (of css files) generated from that location.
|
||||||
|
* To understand what chunk means in this context, see https://rollupjs.org/guide/en/#generatebundle.
|
||||||
|
* @param {*} bundle Mapping from fileName to AssetInfo | ChunkInfo
|
||||||
|
*/
|
||||||
|
function getMappingFromLocationToChunkArray(bundle) {
|
||||||
const chunkMap = new Map();
|
const chunkMap = new Map();
|
||||||
|
for (const [fileName, info] of Object.entries(bundle)) {
|
||||||
|
if (!fileName.endsWith(".css") || info.type === "asset" || info.facadeModuleId?.includes("type=runtime")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
const location = info.facadeModuleId?.match(/(.+)\/.+\.css/)?.[1];
|
||||||
|
if (!location) {
|
||||||
|
throw new Error("Cannot find location of css chunk!");
|
||||||
|
}
|
||||||
|
const array = chunkMap.get(location);
|
||||||
|
if (!array) {
|
||||||
|
chunkMap.set(location, [info]);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
array.push(info);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return chunkMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a mapping from unhashed file name (of css files) to AssetInfo.
|
||||||
|
* To understand what AssetInfo means in this context, see https://rollupjs.org/guide/en/#generatebundle.
|
||||||
|
* @param {*} bundle Mapping from fileName to AssetInfo | ChunkInfo
|
||||||
|
*/
|
||||||
|
function getMappingFromFileNameToAssetInfo(bundle) {
|
||||||
const assetMap = new Map();
|
const assetMap = new Map();
|
||||||
let runtimeThemeChunkMap = new Map();
|
|
||||||
for (const [fileName, info] of Object.entries(bundle)) {
|
for (const [fileName, info] of Object.entries(bundle)) {
|
||||||
if (!fileName.endsWith(".css")) {
|
if (!fileName.endsWith(".css")) {
|
||||||
continue;
|
continue;
|
||||||
|
@ -58,6 +87,20 @@ function parseBundle(bundle) {
|
||||||
* searching through the bundle array later.
|
* searching through the bundle array later.
|
||||||
*/
|
*/
|
||||||
assetMap.set(info.name, info);
|
assetMap.set(info.name, info);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return assetMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a mapping from location (of manifest file) to ChunkInfo of the runtime css asset
|
||||||
|
* To understand what ChunkInfo means in this context, see https://rollupjs.org/guide/en/#generatebundle.
|
||||||
|
* @param {*} bundle Mapping from fileName to AssetInfo | ChunkInfo
|
||||||
|
*/
|
||||||
|
function getMappingFromLocationToRuntimeChunk(bundle) {
|
||||||
|
let runtimeThemeChunkMap = new Map();
|
||||||
|
for (const [fileName, info] of Object.entries(bundle)) {
|
||||||
|
if (!fileName.endsWith(".css") || info.type === "asset") {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
const location = info.facadeModuleId?.match(/(.+)\/.+\.css/)?.[1];
|
const location = info.facadeModuleId?.match(/(.+)\/.+\.css/)?.[1];
|
||||||
|
@ -70,17 +113,9 @@ function parseBundle(bundle) {
|
||||||
* so store this separately.
|
* so store this separately.
|
||||||
*/
|
*/
|
||||||
runtimeThemeChunkMap.set(location, info);
|
runtimeThemeChunkMap.set(location, info);
|
||||||
continue;
|
|
||||||
}
|
|
||||||
const array = chunkMap.get(location);
|
|
||||||
if (!array) {
|
|
||||||
chunkMap.set(location, [info]);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
array.push(info);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return { chunkMap, assetMap, runtimeThemeChunkMap };
|
return runtimeThemeChunkMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = function buildThemes(options) {
|
module.exports = function buildThemes(options) {
|
||||||
|
@ -246,10 +281,9 @@ module.exports = function buildThemes(options) {
|
||||||
},
|
},
|
||||||
|
|
||||||
generateBundle(_, bundle) {
|
generateBundle(_, bundle) {
|
||||||
// assetMap: Mapping from asset-name (eg: element-dark.css) to AssetInfo
|
const assetMap = getMappingFromFileNameToAssetInfo(bundle);
|
||||||
// chunkMap: Mapping from theme-location (eg: hydrogen-web/src/.../css/themes/element) to a list of ChunkInfo
|
const chunkMap = getMappingFromLocationToChunkArray(bundle);
|
||||||
// types of AssetInfo and ChunkInfo can be found at https://rollupjs.org/guide/en/#generatebundle
|
const runtimeThemeChunkMap = getMappingFromLocationToRuntimeChunk(bundle);
|
||||||
const { assetMap, chunkMap, runtimeThemeChunkMap } = parseBundle(bundle);
|
|
||||||
const manifestLocations = [];
|
const manifestLocations = [];
|
||||||
// Location of the directory containing manifest relative to the root of the build output
|
// Location of the directory containing manifest relative to the root of the build output
|
||||||
const manifestLocation = "assets";
|
const manifestLocation = "assets";
|
||||||
|
|
Loading…
Reference in a new issue