varan
Version:
A webpack starter kit for offline-first bring-your-own-code apps with server side rendering
77 lines • 3.18 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const path_1 = __importDefault(require("path"));
const fs_extra_1 = __importDefault(require("fs-extra"));
// Init
const additionalExtensions = {
gzip: '.gz',
brotli: '.br',
};
const ignoredExtensions = ['.map'];
// Exports
async function getBuildStatsFromManifest(searchPath, manifest) {
try {
// Locate all files
const statistics = (manifest.assets || [])
.filter((asset) => !ignoredExtensions.includes(path_1.default.extname(asset.name)))
.reduce((acc, asset) => {
acc.assets[asset.name] = {
name: asset.name,
size: asset.size,
chunks: {},
};
asset.chunkNames.forEach((chunkName) => {
if (!acc.chunks[chunkName]) {
acc.chunks[chunkName] = {
name: chunkName,
assets: {},
get size() {
return Object.values(this.assets).reduce((sum, curAsset) => {
return curAsset.size ? sum + curAsset.size : sum;
}, 0);
},
get gzip() {
return Object.values(this.assets).reduce((sum, curAsset) => {
return curAsset.gzip ? (sum || 0) + curAsset.gzip : sum;
}, undefined);
},
get brotli() {
return Object.values(this.assets).reduce((sum, curAsset) => {
return curAsset.brotli ? (sum || 0) + curAsset.brotli : sum;
}, undefined);
},
};
}
acc.chunks[chunkName].assets[asset.name] = acc.assets[asset.name];
acc.assets[asset.name].chunks[chunkName] = acc.chunks[chunkName];
});
return acc;
}, { chunks: {}, assets: {} });
// Enrich files with compressed version details
const files = Object.values(statistics.assets);
const extensions = Object.entries(additionalExtensions);
// TODO: Consider rewriting to optimize for parallel lookup
for (const file of files) {
for (const [extName, extValue] of extensions) {
try {
// eslint-disable-next-line no-await-in-loop
const extFile = await fs_extra_1.default.stat(path_1.default.resolve(searchPath, file.name + extValue));
file[extName] = extFile.size;
}
catch (err) {
// Empty
}
}
}
// Rewrite to correct format
return statistics;
}
catch (err) {
return null;
}
}
exports.default = getBuildStatsFromManifest;
//# sourceMappingURL=getBuildStatsFromManifest.js.map