conventional-changelog-lint
Version:
Lint commit messages against a conventional-changelog preset and ruleset
150 lines (111 loc) • 4.61 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var _lodash = require('lodash');
var _rc = require('rc');
var _rc2 = _interopRequireDefault(_rc);
var _resolveExtends = require('./resolve-extends');
var _resolveExtends2 = _interopRequireDefault(_resolveExtends);
var _executeRule = require('./execute-rule');
var _executeRule2 = _interopRequireDefault(_executeRule);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var defaults = {
extends: ['angular']
};
var defaultName = 'conventional-changelog-lint';
var defaultSettings = {
prefix: 'conventional-changelog-lint-config'
};
exports.default = function () {
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2() {
var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultName;
var settings = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultSettings;
var seed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
var userConfig, applicableDefaults, config, opts, extended, preset, executed;
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
// Obtain config from .rc files
userConfig = (0, _lodash.omit)((0, _rc2.default)(name, settings.defaults), '_');
// Use the default extends config if there is no userConfig file found
// See https://git.io/vwT1C for reference
applicableDefaults = userConfig.config ? {} : defaults;
// Merge passed config with file based options
config = (0, _lodash.merge)(userConfig, seed);
opts = (0, _lodash.merge)({}, applicableDefaults, (0, _lodash.pick)(config, 'extends'));
// Resolve extends key
extended = (0, _resolveExtends2.default)(opts, settings.prefix);
preset = (0, _lodash.mergeWith)({}, extended, config, function (a, b) {
if (Array.isArray(b)) {
return b;
}
});
// Execute rule config functions if needed
_context2.next = 8;
return Promise.all(['rules', 'wildcards'].map(function (key) {
return [key, preset[key]];
}).map(function () {
var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(item) {
var _item, key, value, executedValue;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_item = (0, _slicedToArray3.default)(item, 2), key = _item[0], value = _item[1];
_context.next = 3;
return Promise.all(Object.entries(value || {}).map(function (entry) {
return (0, _executeRule2.default)(entry);
}));
case 3:
executedValue = _context.sent;
return _context.abrupt('return', [key, executedValue.reduce(function (registry, item) {
var _item2 = (0, _slicedToArray3.default)(item, 2),
key = _item2[0],
value = _item2[1];
return (0, _extends3.default)({}, registry, {
[key]: value
});
}, {})]);
case 5:
case 'end':
return _context.stop();
}
}
}, _callee, undefined);
}));
return function (_x4) {
return _ref2.apply(this, arguments);
};
}()));
case 8:
executed = _context2.sent;
return _context2.abrupt('return', executed.reduce(function (registry, item) {
var _item3 = (0, _slicedToArray3.default)(item, 2),
key = _item3[0],
value = _item3[1];
return (0, _extends3.default)({}, registry, {
[key]: value
});
}, preset));
case 10:
case 'end':
return _context2.stop();
}
}
}, _callee2, undefined);
}));
return function () {
return _ref.apply(this, arguments);
};
}();
module.exports = exports['default'];
;