forked from GSA/code-gov-data
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutils.js
100 lines (81 loc) · 2.95 KB
/
utils.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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
const fs = require("fs");
const licenses = require('spdx-license-list');
// generate
const text = fs.readFileSync('languages.txt', 'utf-8');
const standard_languages = text.split("\n").map(line => line.trim()).filter(Boolean);
console.log("standardLanguages:", standard_languages);
const languageKey2Name = standard_languages.reduce((accumulator, language) => {
accumulator[language.toLowerCase()] = language;
return accumulator;
}, {});
const licensesKey2Name = Object.keys(licenses).reduce((accumulator, id) => {
const { name, url } = licenses[id];
accumulator[id.toLowerCase()] = { id, name };
accumulator[name.toLowerCase()] = { id, name };
accumulator[url.toLowerCase()] = { id, name };
return accumulator;
}, {});
const sortByName = (a, b) => {
return a.name.toLowerCase() > b.name.toLowerCase() ? 1 : -1;
}
function getUsageTypes(items) {
return [
{ name: "Open Source", value: 'openSource' },
{ name: "Government-Wide Reuse", value: 'governmentWideReuse' }
]
}
function getAgencies(items) {
const agencies = new Set();
items.forEach(item => {
const { acronym, name } = item.agency;
if (acronym && name) {
agencies.add(JSON.stringify({ 'name': name, 'value': acronym }));
}
});
return Array.from(agencies).map(JSON.parse).sort(sortByName);
}
function getLanguages(items) {
const languages = new Set();
items.forEach(item => {
if (item.languages) {
item.languages.forEach(language => {
if (language) {
const language_in_lower_case = language.toLowerCase();
if (languageKey2Name.hasOwnProperty(language_in_lower_case)) {
const proper_name = languageKey2Name[language_in_lower_case];
languages.add(JSON.stringify({ 'name': proper_name, 'value': proper_name }));
}
}
});
}
});
return Array.from(languages).map(JSON.parse).sort(sortByName);
}
function getLicenses(repos) {
const licenses = new Set();
repos.forEach(repo => {
if (repo.permissions && repo.permissions.licenses) {
if (Array.isArray(repo.permissions.licenses)) {
repo.permissions.licenses.forEach(license => {
const { name, URL } = license;
if (name) {
const key = name.toLowerCase().trim();
if (licensesKey2Name.hasOwnProperty(key)) {
const {name, id } = licensesKey2Name[key];
licenses.add(JSON.stringify({ name, value: id}));
}
}
if (URL) {
const key = URL.toLowerCase().trim();
if (licensesKey2Name.hasOwnProperty(key)) {
const {name, id } = licensesKey2Name[key];
licenses.add(JSON.stringify({ name, value: id}));
}
}
});
}
}
});
return Array.from(licenses).map(JSON.parse).sort(sortByName);
}
module.exports = { getAgencies, getLanguages, getLicenses, getUsageTypes, languageKey2Name, licensesKey2Name, sortByName }