commitiquette
Version:
Plugin for commitizen to use commitLint config
94 lines (93 loc) • 4.28 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.subjectMaker = exports.transformerFactory = exports.messageFactory = exports.filterFactory = exports.validatorFactory = void 0;
var tslib_1 = require("tslib");
var chalk_1 = require("chalk");
var utils_1 = require("../utils");
var validators_1 = require("../validators");
var filters_1 = require("../filters");
var commit_template_1 = require("../commit-template");
function validatorFactory(rules) {
return function (value, answers) {
var headerValue = (0, commit_template_1.headerTemplate)(answers.type, answers.scope, value);
return (0, validators_1.validate)([
{
value: headerValue,
rule: rules['header-max-length'],
validator: validators_1.maxLengthValidator,
message: function (length) { return "Header \"" + headerValue + "\" cannot be longer than " + length; },
},
{
value: value,
rule: rules['subject-max-length'],
validator: validators_1.maxLengthValidator,
message: function (length) { return "Subject maximum length of " + length + " has been exceeded"; },
},
{
value: value,
rule: rules['subject-min-length'],
validator: validators_1.minLengthValidator,
message: function (length) { return "Subject minimum length of " + length + " has not been met"; },
},
{
value: value,
rule: rules['subject-empty'],
validator: validators_1.emptyValidator,
message: function () { return 'Subject cannot be empty'; },
},
{
value: value,
rule: rules['subject-case'],
validator: validators_1.caseValidator,
message: function (ruleValue, applicable) { return "Subject must " + (applicable == 'never' ? 'not ' : '') + "be in " + ruleValue; },
},
]);
};
}
exports.validatorFactory = validatorFactory;
function filterFactory(rules) {
return function (value) {
return (0, utils_1.pipeWith)(value, function (v) { return (0, filters_1.wordCaseFilter)(v, rules['subject-case']); }, function (v) { return (0, filters_1.fullStopFilter)(v, rules['subject-full-stop']); });
};
}
exports.filterFactory = filterFactory;
function messageFactory(rules) {
return function (answers) {
var maxLength = (0, utils_1.valueFromRule)(rules['header-max-length']);
if (!maxLength) {
return "Write a short, imperative tense description of the change:\n";
}
return "Write a short, imperative tense description of the change (max " + (maxLength - (0, commit_template_1.headerTemplate)(answers.type, answers.scope).length) + " chars):\n";
};
}
exports.messageFactory = messageFactory;
function transformerFactory(rules) {
var filter = filterFactory(rules);
return function (value, answers) {
var headerMaxLength = (0, utils_1.valueFromRule)(rules['header-max-length']);
if (headerMaxLength) {
var color = filter(value).length <= headerMaxLength - (0, commit_template_1.headerTemplate)(answers.type, answers.scope).length ? chalk_1.green : chalk_1.red;
return color("(" + value.length + ") " + value);
}
var subjectMaxLength = (0, utils_1.valueFromRule)(rules['subject-max-length']);
if (subjectMaxLength) {
var color = filter(value).length <= subjectMaxLength ? chalk_1.green : chalk_1.red;
return color("(" + value.length + ") " + value);
}
return value;
};
}
exports.transformerFactory = transformerFactory;
function subjectMaker(questions, rules) {
var filter = filterFactory(rules);
var question = {
message: messageFactory(rules),
name: 'subject',
type: 'input',
validate: validatorFactory(rules),
filter: filter,
transformer: transformerFactory(rules),
};
return (0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], questions, true), [question], false);
}
exports.subjectMaker = subjectMaker;