-
Notifications
You must be signed in to change notification settings - Fork 42
/
Copy pathget-tools-by-category.js
78 lines (60 loc) · 2.08 KB
/
get-tools-by-category.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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
const setUnclassified = require('./set-unclassified');
const setDisplayProperties = (sourceTool) => {
const tool = sourceTool;
// eslint-disable-next-line no-nested-ternary
tool.swagger = tool.v2 === null ? 'Unknown' : (tool.v2 ? 'Yes' : 'No');
// eslint-disable-next-line no-nested-ternary
tool.version30 = tool.v3 === null ? 'Unknown' : (tool.v3 ? 'Yes' : 'No');
// eslint-disable-next-line no-nested-ternary
tool.version31 = tool.v3_1 === null ? 'Unknown' : (tool.v3_1 ? 'Yes' : 'No');
tool.homepage = tool.homepage || tool.link;
if ((!tool.repository || tool.repository.trim() === '') && tool.homepage.match(/.*github\.com/)) {
tool.repository = tool.homepage;
}
if (tool.repositoryMetadata) {
const {
owner, stars, watchers, forks, created, updated, archived, language,
} = tool.repositoryMetadata;
return Object.assign(
tool,
{
moreDetails: true,
owner,
language,
stars: (stars || 'N/A'),
watchers,
forks,
created,
lastUpdated: updated,
archived: archived ? 'Yes' : 'No',
},
);
}
return Object.assign(tool, { moreDetails: false, stars: 'N/A' });
};
module.exports = (toolList) => Object.entries(toolList
.map((tool) => {
const { category } = tool;
if (!category) {
return Object.assign(tool, { category: ['All', 'Unclassified'] });
}
return Object.assign(
tool,
{ category: (Array.isArray(tool.category) ? tool.category : [tool.category]).concat(['All']) },
);
})
.reduce((output, tool) => {
const update = output;
if (!tool.category) {
const category = setUnclassified();
update[category] = (update[category] || []).concat([setDisplayProperties(tool)]);
return update;
}
(Array.isArray(tool.category) ? tool.category : [tool.category])
.forEach((c) => {
const category = setUnclassified(c);
update[category] = (update[category] || []).concat([setDisplayProperties(tool)]);
});
return update;
}, {}))
.map(([category, tools]) => ({ category, tools }));