-
-
Notifications
You must be signed in to change notification settings - Fork 57
/
badge.js
48 lines (39 loc) · 1.11 KB
/
badge.js
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
'use strict';
const rule = require('unified-lint-rule');
const visit = require('unist-util-visit');
const badgeUrlWhitelist = new Set([
'https://awesome.re',
'https://github.com/sindresorhus/awesome'
]);
const badgeSrcUrlWhitelist = new Set([
'https://awesome.re/badge.svg',
'https://awesome.re/badge-flat.svg',
'https://awesome.re/badge-flat2.svg'
]);
const isValidBadgeUrl = url => badgeUrlWhitelist.has(url);
const isValidBadgeSrcUrl = url => badgeSrcUrlWhitelist.has(url);
module.exports = rule('remark-lint:awesome/badge', (ast, file) => {
visit(ast, 'heading', (node, index) => {
if (index > 0) {
return;
}
let hasBadge = false;
for (const child of node.children) {
if (node.depth !== 1 || child.type !== 'link' || !isValidBadgeUrl(child.url)) {
continue;
}
for (const child2 of child.children) {
if (child2.type === 'image') {
if (!isValidBadgeSrcUrl(child2.url)) {
file.message('Invalid badge source', child2);
return;
}
hasBadge = true;
}
}
}
if (!hasBadge) {
file.message('Missing Awesome badge after the main heading', node);
}
});
});