-
Notifications
You must be signed in to change notification settings - Fork 963
Expand file tree
/
Copy pathgetRuleQuestionConfig.ts
More file actions
74 lines (66 loc) · 2.08 KB
/
getRuleQuestionConfig.ts
File metadata and controls
74 lines (66 loc) · 2.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import {RuleField} from '@commitlint/types';
import {QuestionConfig} from '../Question.js';
import {getPromptMessages, getPromptQuestions} from '../store/prompts.js';
import {getRule} from '../store/rules.js';
import getCaseFn from '../utils/case-fn.js';
import getFullStopFn from '../utils/full-stop-fn.js';
import {
enumRuleIsActive,
getEnumList,
getMaxLength,
getMinLength,
ruleIsActive,
ruleIsApplicable,
ruleIsDisabled,
} from '../utils/rules.js';
export default function (rulePrefix: RuleField): QuestionConfig | null {
const questions = getPromptQuestions();
const questionSettings = questions[rulePrefix];
const emptyRule = getRule(rulePrefix, 'empty');
const mustBeEmpty =
emptyRule && ruleIsActive(emptyRule) && ruleIsApplicable(emptyRule);
if (mustBeEmpty) {
return null;
}
const canBeSkip = !emptyRule || ruleIsDisabled(emptyRule);
const enumRule = getRule(rulePrefix, 'enum');
const enumRuleList =
enumRule && enumRuleIsActive(enumRule) ? getEnumList(enumRule) : null;
let enumList;
if (enumRuleList) {
const enumDescriptions = questionSettings?.['enum'];
if (enumDescriptions) {
const enumNames = Object.keys(enumDescriptions);
const longest = Math.max(
...enumRuleList.map((enumName) => enumName.length)
);
// TODO emoji + title
enumList = enumRuleList
.sort((a, b) => enumNames.indexOf(a) - enumNames.indexOf(b))
.map((enumName) => {
const enumDescription = enumDescriptions[enumName]?.description;
if (enumDescription) {
return {
name: `${enumName}:`.padEnd(longest + 4) + enumDescription,
value: enumName,
short: enumName,
};
} else {
return enumName;
}
});
} else {
enumList = [...enumRuleList];
}
}
return {
skip: canBeSkip,
enumList,
title: questionSettings?.['description'] ?? `${rulePrefix}:`,
caseFn: getCaseFn(getRule(rulePrefix, 'case')),
fullStopFn: getFullStopFn(getRule(rulePrefix, 'full-stop')),
minLength: getMinLength(getRule(rulePrefix, 'min-length')),
maxLength: getMaxLength(getRule(rulePrefix, 'max-length')),
messages: getPromptMessages(),
};
}