/
validate.ts
47 lines (42 loc) 路 960 Bytes
/
validate.ts
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
import Ajv from 'ajv';
import {UserConfig} from '@commitlint/types';
import schema from './commitlint.schema.json';
import {formatErrors} from './formatErrors';
const TYPE_OF = [
'undefined',
'string',
'number',
'object',
'function',
'boolean',
'symbol',
];
export function validateConfig(
source: string,
config: unknown
): asserts config is UserConfig {
const ajv = new Ajv({
meta: false,
strict: false,
useDefaults: true,
validateSchema: false,
verbose: true,
});
ajv.addKeyword({
keyword: 'typeof',
validate: function typeOfFunc(schema: any, data: any) {
return typeof data === schema;
},
metaSchema: {type: 'string', enum: TYPE_OF},
schema: true,
});
const validate = ajv.compile(schema);
const isValid = validate(config);
if (!isValid && validate.errors && validate.errors.length) {
throw new Error(
`Commitlint configuration in ${source} is invalid:\n${formatErrors(
validate.errors
)}`
);
}
}