buildsize-cli
Version:
file size check for cli
78 lines • 4 kB
JavaScript
;
var glob = require('glob');
var bytes = require('bytes');
var fs = require('fs');
var cosmiconfig = require('cosmiconfig').cosmiconfig;
var program = require('commander');
var message = require('./message');
var sizes = require('./sizes');
var diffPercentage = require('./diffPercentage');
program.option('-c, --config <config>', 'path containing file size config setup').parse(process.argv);
var explorer = cosmiconfig('buildsize', ['.buildsizerc.js', 'buildsize.config.js']);
var configPath = program === null || program === void 0 ? void 0 : program.config;
module.exports = explorer
.search(configPath)
.then(function (result) {
var config = result.config;
var files = config.files, failMessage = config.failMessage, _a = config.failOnMissingBundles, failOnMissingBundles = _a === void 0 ? false : _a;
var hasError = [];
files.map(function (file) {
var paths = glob.sync(file.path);
if (!paths.length) {
if (failOnMissingBundles) {
hasError.push('');
return message('failure', "There is no matching file for ".concat(file.path, " in ").concat(process.cwd()), '');
}
return message('warning', "There is no matching file for ".concat(file.path, " in ").concat(process.cwd()));
}
return paths.map(function (path) {
var maxSize = file.maxSize, minSize = file.minSize, compression = file.compression, externals = file.externals, _a = file.lastSize, lastSize = _a === void 0 ? false : _a;
var maxFileSize = bytes(maxSize) || Infinity;
var minFileSize = bytes(minSize) || 0;
var compressionType = compression || 'raw';
var size = sizes(fs.readFileSync(path, 'utf8'), compressionType);
// externals subtract from total size
var externalsTotalSize = 0;
if (externals) {
Object.keys(externals).forEach(function (idx) {
externalsTotalSize += bytes(externals[idx]);
});
}
var externalSize = externalsTotalSize > 0 && bytes(size - externalsTotalSize);
var finalSize = size - externalsTotalSize;
// messages for build finalSize checks
var maxSizeMsg = "".concat(bytes(maxFileSize), " (").concat(compressionType, ")");
var sizeMsg = "".concat(externalSize || bytes(finalSize));
// minimum size check text
var minSizeText = '';
if (minFileSize > 0)
minSizeText = "minSize ".concat(bytes(minFileSize), " < ");
var basicMsg = {
message: path,
info: "\n \u00B7 ".concat(minSizeText || '').concat(sizeMsg, " < maxSize ").concat(maxSizeMsg).concat(lastSize ? diffPercentage(maxFileSize, finalSize) : '')
};
// validate build sizes
var invalidMaxSize = finalSize > maxFileSize;
var invalidMinSize = finalSize < minFileSize;
if (invalidMaxSize || invalidMinSize) {
if (file.warnOnly)
return message('warning', basicMsg.message, basicMsg.info);
hasError.push('');
return message('failure', basicMsg.message, basicMsg.info);
}
return message('success', basicMsg.message, basicMsg.info);
});
});
if (hasError.length) {
message('exit', "Build size check has failed in ".concat(hasError.length, " file").concat(hasError.length > 1 ? 's' : '', "\n").concat(failMessage || ''));
}
else {
message('complete', "Build size checks have passed, please continue on.");
}
})
.catch(function (error) {
console.warn(error);
return message('exit', "Sorry, cannot find a valid config file in ".concat(configPath || 'root', " path\n"));
});
//# sourceMappingURL=index.js.map