/** * Creates a bundle object that is stored on req.bundle. */ function createBundle(webpackStats) { const { publicPath, assetsByChunkName } = webpackStats; /** * Returns a public URL to the given asset. */ function createURL(asset) { return publicPath + asset; } /** * Returns an array of URLs to all assets in the given chunks. */ function getAssets(chunks = ["main"]) { return (Array.isArray(chunks) ? chunks : [chunks]) .reduce((memo, chunk) => memo.concat(assetsByChunkName[chunk] || []), []) .map(createURL); } /** * Returns an array of URLs to all JavaScript files in the given chunks. */ function getScripts(...chunks) { return getAssets(...chunks).filter(asset => /\.js$/.test(asset)); } /** * Returns an array of URLs to all CSS files in the given chunks. */ function getStyles(...chunks) { return getAssets(...chunks).filter(asset => /\.css$/.test(asset)); } return { createURL, getAssets, getScripts, getStyles }; } module.exports = createBundle;