UNPKG

commitiquette

Version:

Plugin for commitizen to use commitLint config

94 lines (93 loc) 4.28 kB
"use strict"; 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;