conventional-changelog-lint
Version:
Lint commit messages against a conventional-changelog preset and ruleset
231 lines (181 loc) • 6.05 kB
JavaScript
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
// Assemble the engine
var main = function () {
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2(options) {
var _this = this;
var raw, flags, fromStdin, input;
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
raw = options.input, flags = options.flags;
fromStdin = rules.fromStdin(raw, flags);
if (!fromStdin) {
_context2.next = 9;
break;
}
_context2.next = 5;
return (0, _getStdin2.default)();
case 5:
_context2.t1 = _context2.sent;
_context2.t0 = [_context2.t1];
_context2.next = 12;
break;
case 9:
_context2.next = 11;
return (0, _.getMessages)((0, _lodash.pick)(flags, 'edit', 'from', 'to'));
case 11:
_context2.t0 = _context2.sent;
case 12:
input = _context2.t0;
return _context2.abrupt('return', Promise.all(input.map(function () {
var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(commit) {
var fmt, seed, report, formatted, error;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
fmt = new _chalk2.default.constructor({ enabled: flags.color });
seed = {};
if (flags.extends) {
seed.extends = flags.extends.split(',');
}
_context.t0 = _2.default;
_context.t1 = commit;
_context.next = 7;
return (0, _.getPreset)(flags.preset);
case 7:
_context.t2 = _context.sent;
_context.next = 10;
return (0, _.getConfiguration)('conventional-changelog-lint', {
prefix: 'conventional-changelog-lint-config'
}, seed);
case 10:
_context.t3 = _context.sent;
_context.t4 = {
preset: _context.t2,
configuration: _context.t3
};
_context.next = 14;
return (0, _context.t0)(_context.t1, _context.t4);
case 14:
report = _context.sent;
formatted = (0, _.format)(report, { color: flags.color });
if (!flags.quiet) {
console.log(`${fmt.grey('⧗')} input: ${fmt.bold(commit.split('\n')[0])}`);
console.log(formatted.join('\n'));
}
if (!(report.errors.length > 0)) {
_context.next = 21;
break;
}
error = new Error(formatted[formatted.length - 1]);
error.type = _package2.default.name;
throw error;
case 21:
return _context.abrupt('return', console.log(''));
case 22:
case 'end':
return _context.stop();
}
}
}, _callee, _this);
}));
return function (_x2) {
return _ref2.apply(this, arguments);
};
}())));
case 14:
case 'end':
return _context2.stop();
}
}
}, _callee2, this);
}));
return function main(_x) {
return _ref.apply(this, arguments);
};
}();
// Start the engine
require('babel-polyfill');
var _chalk = require('chalk');
var _chalk2 = _interopRequireDefault(_chalk);
var _meow = require('meow');
var _meow2 = _interopRequireDefault(_meow);
var _lodash = require('lodash');
var _getStdin = require('get-stdin');
var _getStdin2 = _interopRequireDefault(_getStdin);
var _package = require('../package.json');
var _package2 = _interopRequireDefault(_package);
var _help = require('./help');
var _help2 = _interopRequireDefault(_help);
var _ = require('./');
var _2 = _interopRequireDefault(_);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Behavioural rules
*/
// eslint-disable-line import/extensions
var rules = {
fromStdin: function fromStdin(input, flags) {
return input.length === 0 && flags.from === null && flags.to === null && !flags.edit;
}
}; // eslint-disable-line import/no-unassigned-import
// npm modules
var configuration = {
string: ['from', 'to', 'preset', 'extends'],
boolean: ['edit', 'help', 'version', 'quiet', 'color'],
alias: {
c: 'color',
e: 'edit',
f: 'from',
p: 'preset',
t: 'to',
q: 'quiet',
h: 'help',
v: 'version',
x: 'extends'
},
description: {
color: 'toggle colored output',
edit: 'read last commit message found in ./git/COMMIT_EDITMSG',
extends: 'array of shareable configurations to extend',
from: 'lower end of the commit range to lint; applies if edit=false',
preset: 'conventional-changelog-preset to use for commit message parsing',
to: 'upper end of the commit range to lint; applies if edit=false',
quiet: 'toggle console output'
},
default: {
color: true,
edit: false,
from: null,
preset: 'angular',
to: null,
quiet: false
},
unknown(arg) {
throw new Error(`unknown flags: ${arg}`);
}
};
// Init meow 😸cli
var cli = (0, _meow2.default)({
help: `[input] reads from stdin if --edit, --from, --to are omitted\n${(0, _help2.default)(configuration)}`,
description: `${_package2.default.name}@${_package2.default.version} - ${_package2.default.description}`
}, configuration);main(cli).catch(function (err) {
return setTimeout(function () {
if (err.type === _package2.default.name) {
process.exit(1);
}
throw err;
});
});
// Catch unhandled rejections globally
process.on('unhandledRejection', function (reason, promise) {
console.log('Unhandled Rejection at: Promise ', promise, ' reason: ', reason);
throw reason;
});
;