forked from DIYgod/RSSHub
-
Notifications
You must be signed in to change notification settings - Fork 0
/
maintainer.js
57 lines (49 loc) · 1.66 KB
/
maintainer.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
49
50
51
52
53
54
55
56
57
const dirname = __dirname + '/v2';
const fs = require('fs');
const { join } = require('path');
// Presence Check
for (const dir of fs.readdirSync(dirname)) {
const dirPath = join(dirname, dir);
if (fs.existsSync(join(dirPath, 'router.js')) && !fs.existsSync(join(dirPath, 'maintainer.js'))) {
throw Error(`No maintainer.js in "${dirPath}".`);
}
}
// 遍历整个 routes 文件夹,收集模块 maintainer.js
const maintainerPath = require('require-all')({
dirname,
filter: /maintainer\.js$/,
});
const maintainers = {};
// 将收集到的自定义模块进行合并
for (const dir in maintainerPath) {
const routes = maintainerPath[dir]['maintainer.js']; // Do not merge other file
// typo check e.g., ✘ module.export, ✔ module.exports
if (!Object.keys(routes).length) {
throw Error(`No maintainer in "${dir}".`);
}
for (const author of Object.values(routes)) {
if (!Array.isArray(author)) {
throw Error(`Maintainers' name should be an array in "${dir}".`);
}
// check for [], [''] or ['Someone', '']
if (author.length < 1 || author.includes('')) {
throw Error(`Empty maintainer in "${dir}".`);
}
}
for (const key in routes) {
maintainers['/' + dir + (key.endsWith('/') ? key.substring(0, key.length - 1) : key)] = routes[key];
}
}
// 兼容旧版路由
const router = require('./router');
router.stack.forEach((e) => {
if (!maintainers[e.path]) {
maintainers[e.path] = [];
}
});
module.exports = Object.keys(maintainers)
.sort()
.reduce((obj, path) => {
obj[path] = maintainers[path];
return obj;
}, {});