commitiquette
Version:
Plugin for commitizen to use commitLint config
125 lines (124 loc) • 5.49 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.footerMaker = exports.issuesTransformerFactory = exports.breakingTransformFactory = exports.issuesMessageFactory = exports.breakingChangeMessageFactory = exports.issueFilterFactory = exports.breakingChangeFilterFactory = exports.validatorFactory = void 0;
var tslib_1 = require("tslib");
var utils_1 = require("../utils");
var validators_1 = require("../validators");
var filters_1 = require("../filters");
var BREAKING_CHANGE = 'BREAKING CHANGE: ';
function validatorFactory(rules) {
return function (value, answers) {
var _a;
var breaking = (_a = answers.breaking) !== null && _a !== void 0 ? _a : '';
return (0, validators_1.validate)([
{
value: value + breaking,
rule: rules['footer-max-length'],
validator: validators_1.maxLengthValidator,
message: function (length) { return "Footer maximum length of " + length + " has been exceeded"; },
},
{
value: value + breaking,
rule: rules['footer-min-length'],
validator: validators_1.minLengthValidator,
message: function (length) { return "Footer minimum length of " + length + " has not been met"; },
},
]);
};
}
exports.validatorFactory = validatorFactory;
function breakingChangeFilterFactory(rules, prefix) {
return function (value) {
return (0, utils_1.pipeWith)(value, function (v) { return prefix + v; }, function (v) { return (0, filters_1.maxLineLengthFilter)(v, rules['footer-max-line-length']); }, function (v) { return (0, filters_1.leadingBlankFilter)(v, rules['footer-leading-blank']); });
};
}
exports.breakingChangeFilterFactory = breakingChangeFilterFactory;
function issueFilterFactory(rules) {
return function (value, answers) {
return (0, utils_1.pipeWith)(value, function (v) { return (0, filters_1.maxLineLengthFilter)(v, rules['footer-max-line-length']); }, function (v) { return (0, filters_1.leadingBlankFilter)(v, rules['footer-leading-blank']); }, function (v) { return (answers.isBreaking ? '\n' : '') + v; });
};
}
exports.issueFilterFactory = issueFilterFactory;
function breakingChangeMessageFactory(rules) {
return function () {
var maxLength = (0, utils_1.valueFromRule)(rules['footer-max-length']);
var MESSAGE = 'Describe the breaking changes';
if (!maxLength) {
return MESSAGE + ":\n";
}
return MESSAGE + " (max " + maxLength + " chars):\n";
};
}
exports.breakingChangeMessageFactory = breakingChangeMessageFactory;
function issuesMessageFactory(rules) {
return function () {
var maxLength = (0, utils_1.valueFromRule)(rules['footer-max-length']);
var MESSAGE = 'Add issue references (e.g. "fix #123", "re #123".)';
if (!maxLength) {
return MESSAGE + ":\n";
}
return MESSAGE + " (max " + maxLength + " chars):\n";
};
}
exports.issuesMessageFactory = issuesMessageFactory;
function isFixCommit(answers) {
var _a;
return (_a = (answers === null || answers === void 0 ? void 0 : answers.type) == 'fix') !== null && _a !== void 0 ? _a : false;
}
function breakingTransformFactory(rules, prefix) {
return function (value) {
var footerMaxLength = (0, utils_1.valueFromRule)(rules['footer-max-length']);
if (footerMaxLength) {
return (0, utils_1.maxLengthTransformerFactory)(footerMaxLength - prefix.length)(value);
}
return value;
};
}
exports.breakingTransformFactory = breakingTransformFactory;
function issuesTransformerFactory(rules) {
return function (value) {
var footerMaxLength = (0, utils_1.valueFromRule)(rules['footer-max-length']);
if (footerMaxLength) {
return (0, utils_1.maxLengthTransformerFactory)(footerMaxLength)(value);
}
return value;
};
}
exports.issuesTransformerFactory = issuesTransformerFactory;
function footerMaker(questions, rules) {
var footerQuestions = [
{
type: 'confirm',
name: 'isBreaking',
message: 'Are there any breaking changes?',
default: false,
},
{
type: 'input',
name: 'breaking',
message: breakingChangeMessageFactory(rules),
when: function (answers) { return !!answers.isBreaking; },
validate: validatorFactory(rules),
transformer: breakingTransformFactory(rules, BREAKING_CHANGE),
filter: breakingChangeFilterFactory(rules, BREAKING_CHANGE),
},
{
type: 'confirm',
name: 'isIssue',
message: 'Does this fix Does this change affect any open issues?',
when: function (answers) { return !isFixCommit(answers); },
default: false,
},
{
type: 'input',
name: 'issue',
message: issuesMessageFactory(rules),
when: function (answers) { return isFixCommit(answers) || !!answers.isIssue; },
validate: validatorFactory(rules),
transformer: issuesTransformerFactory(rules),
filter: issueFilterFactory(rules),
},
];
return (0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], questions, true), footerQuestions, true);
}
exports.footerMaker = footerMaker;