/
spec-components-invalid-map-name.ts
69 lines (66 loc) · 2.03 KB
/
spec-components-invalid-map-name.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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import { Oas3Rule } from '../../visitors';
import { Problem, UserContext } from '../../walk';
import { Location } from '../../ref-utils';
export const SpecComponentsInvalidMapName: Oas3Rule = () => {
const KEYS_REGEX = '^[a-zA-Z0-9\\.\\-_]+$';
function validateKey(
key: string | number,
report: (problem: Problem) => void,
location: Location,
component: string
) {
if (!new RegExp(KEYS_REGEX).test(key as string)) {
report({
message: `The map key in ${component} "${key}" does not match the regular expression "${KEYS_REGEX}"`,
location: location.key(),
});
}
}
return {
NamedSchemas: {
Schema(_node, { key, report, location }: UserContext) {
validateKey(key, report, location, 'schemas');
},
},
NamedParameters: {
Parameter(_node, { key, report, location }: UserContext) {
validateKey(key, report, location, 'parameters');
},
},
NamedResponses: {
Response(_node, { key, report, location }: UserContext) {
validateKey(key, report, location, 'responses');
},
},
NamedExamples: {
Example(_node, { key, report, location }: UserContext) {
validateKey(key, report, location, 'examples');
},
},
NamedRequestBodies: {
RequestBody(_node, { key, report, location }: UserContext) {
validateKey(key, report, location, 'requestBodies');
},
},
NamedHeaders: {
Header(_node, { key, report, location }: UserContext) {
validateKey(key, report, location, 'headers');
},
},
NamedSecuritySchemes: {
SecurityScheme(_node, { key, report, location }: UserContext) {
validateKey(key, report, location, 'securitySchemes');
},
},
NamedLinks: {
Link(_node, { key, report, location }: UserContext) {
validateKey(key, report, location, 'links');
},
},
NamedCallbacks: {
Callback(_node, { key, report, location }: UserContext) {
validateKey(key, report, location, 'callbacks');
},
},
};
};