@commitlint/cz-commitlint
Version:
Commitizen adapter using the commitlint.config.js
59 lines • 2.3 kB
JavaScript
import Question from './Question.js';
import getRuleQuestionConfig from './services/getRuleQuestionConfig.js';
import { getPromptSettings } from './store/prompts.js';
export class HeaderQuestion extends Question {
headerMaxLength;
headerMinLength;
constructor(name, questionConfig, headerMaxLength, headerMinLength) {
super(name, questionConfig);
this.headerMaxLength = headerMaxLength ?? Infinity;
this.headerMinLength = headerMinLength ?? 0;
}
beforeQuestionStart(answers) {
const headerRemainLength = this.headerMaxLength - combineCommitMessage(answers).length;
this.maxLength = Math.min(this.maxLength, headerRemainLength);
this.minLength = Math.min(this.minLength, this.headerMinLength);
}
}
export function combineCommitMessage(answers) {
const { type = '', scope = '', subject = '' } = answers;
const prefix = `${type}${scope ? `(${scope})` : ''}`;
if (subject) {
return ((prefix ? prefix + ': ' : '') + subject).trim();
}
else {
return prefix.trim();
}
}
export function getQuestions() {
// header: type, scope, subject
const questions = [];
const headerRuleFields = ['type', 'scope', 'subject'];
const headerRuleQuestionConfig = getRuleQuestionConfig('header');
if (!headerRuleQuestionConfig) {
return [];
}
headerRuleFields.forEach((name) => {
const questionConfig = getQuestionConfig(name);
if (questionConfig) {
const instance = new HeaderQuestion(name, questionConfig, headerRuleQuestionConfig.maxLength, headerRuleQuestionConfig.minLength);
questions.push(instance.question);
}
});
return questions;
}
export function getQuestionConfig(name) {
const questionConfig = getRuleQuestionConfig(name);
if (questionConfig) {
if (name === 'scope') {
if (getPromptSettings()['enableMultipleScopes']) {
questionConfig.multipleSelectDefaultDelimiter =
getPromptSettings()['scopeEnumSeparator'];
}
// split scope string to segments, match commitlint rules
questionConfig.multipleValueDelimiters = /\/|\\|,/g;
}
}
return questionConfig;
}
//# sourceMappingURL=SectionHeader.js.map