UNPKG

buildsize-cli

Version:
78 lines 4 kB
#!/usr/bin/env node "use strict"; 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