bundlewatch
Version:
Keep watch of your bundle size
142 lines (108 loc) • 5.13 kB
JavaScript
;
var _commander = require('commander');
var _commander2 = _interopRequireDefault(_commander);
var _chalk = require('chalk');
var _chalk2 = _interopRequireDefault(_chalk);
var _determineConfig = require('./determineConfig');
var _determineConfig2 = _interopRequireDefault(_determineConfig);
var _logger = require('../logger');
var _logger2 = _interopRequireDefault(_logger);
var _app = require('../app');
var _app2 = _interopRequireDefault(_app);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
const prettyPrintResults = fullResults => {
_logger2.default.log('');
fullResults.forEach(result => {
const filePath = _chalk2.default.italic(result.filePath) + ':';
if (result.error) {
_logger2.default.log(`${_chalk2.default.red('ERROR')} ${filePath} ${result.error}`);
return;
}
if (result.status === _app.STATUSES.FAIL) {
_logger2.default.log(`${_chalk2.default.redBright('FAIL')} ${filePath} ${result.message}`);
return;
}
if (result.status === _app.STATUSES.WARN) {
_logger2.default.log(`${_chalk2.default.yellowBright('WARN')} ${filePath} ${result.message}`);
return;
}
_logger2.default.log(`${_chalk2.default.greenBright('PASS')} ${filePath} ${result.message}`);
});
_logger2.default.log('');
};
const main = (() => {
var _ref = _asyncToGenerator(function* () {
const config = (0, _determineConfig2.default)(_commander2.default);
if (config.files && config.files.length > 0) {
const results = yield (0, _app2.default)(config);
if (results.url) {
_logger2.default.log('');
_logger2.default.log(`${_chalk2.default.cyanBright('Result breakdown at:')} ${results.url}`);
}
prettyPrintResults(results.fullResults);
if (results.status === _app.STATUSES.FAIL) {
_logger2.default.log(_chalk2.default.redBright(`bundlewatch FAIL`));
_logger2.default.log(results.summary);
_logger2.default.log('');
return 1;
}
if (results.status === _app.STATUSES.WARN) {
_logger2.default.log(_chalk2.default.redBright(`bundlewatch WARN`));
_logger2.default.log(results.summary);
_logger2.default.log('');
return 0;
}
_logger2.default.log(_chalk2.default.greenBright(`bundlewatch PASS`));
_logger2.default.log(results.summary);
_logger2.default.log('');
return 0;
}
_logger2.default.error(`Configuration missing:
Run ${_chalk2.default.italic('bundlewatch --help')} for examples and options
Documentation available at: http://bundlewatch.io/`);
return 1;
});
return function main() {
return _ref.apply(this, arguments);
};
})();
const mainSafe = (() => {
var _ref2 = _asyncToGenerator(function* () {
try {
const errorCode = yield main();
return errorCode;
} catch (error) {
if (error.type === 'ValidationError') {
_logger2.default.fatal(error.message);
return 1;
}
_logger2.default.fatal(`Uncaught exception`, error);
return 1;
}
});
return function mainSafe() {
return _ref2.apply(this, arguments);
};
})();
_commander2.default.usage('[options] <filePathGlobs ...>').option('--config [configFilePath]', 'file to read configuration from, if used all options are blown away').option('--max-size [maxSize]', 'maximum size threshold (e.g. 3kb)').option('--compression [compression]', 'specify which compression algorithm to use');
_commander2.default.on('--help', () => {
_logger2.default.log('');
_logger2.default.log(' Examples:');
_logger2.default.log('');
_logger2.default.log(' Read configuration from package.json');
_logger2.default.log(' $ bundlewatch ');
_logger2.default.log('');
_logger2.default.log(' Read configuration from file');
_logger2.default.log(' $ bundlewatch --config internals/bundlewatch.config.js');
_logger2.default.log('');
_logger2.default.log(' Use command line');
_logger2.default.log(' $ bundlewatch --max-size 100KB ./src/*.js /lib/*.js');
_logger2.default.log('');
_logger2.default.log('');
});
_commander2.default.parse(process.argv);
mainSafe().then(errorCode => {
process.exitCode = errorCode;
});