Refactor source paths

This commit is contained in:
linguist
2020-12-30 20:05:31 +01:00
parent dd0b3c5626
commit e38614a100
45 changed files with 32 additions and 36 deletions

View File

@@ -0,0 +1,49 @@
//Setup
export default async function ({login, data, q}, {enabled = false} = {}) {
//Plugin execution
try {
//Check if plugin is enabled and requirements are met
if ((!enabled)||(!q.languages))
return null
//Parameters override
let {"languages.ignored":ignored = "", "languages.skipped":skipped = ""} = q
//Ignored languages
ignored = decodeURIComponent(ignored).split(",").map(x => x.trim().toLocaleLowerCase()).filter(x => x)
//Skipped repositories
skipped = decodeURIComponent(skipped).split(",").map(x => x.trim().toLocaleLowerCase()).filter(x => x)
//Iterate through user's repositories and retrieve languages data
console.debug(`metrics/compute/${login}/plugins > languages > processing ${data.user.repositories.nodes.length} repositories`)
const languages = {colors:{}, total:0, stats:{}}
for (const repository of data.user.repositories.nodes) {
//Skip repository if asked
if (skipped.includes(repository.name.toLocaleLowerCase())) {
console.debug(`metrics/compute/${login}/plugins > languages > skipped repository ${repository.name}`)
continue
}
//Process repository languages
for (const {size, node:{color, name}} of Object.values(repository.languages.edges)) {
//Ignore language if asked
if (ignored.includes(name.toLocaleLowerCase())) {
console.debug(`metrics/compute/${login}/plugins > languages > ignored language ${name}`)
continue
}
//Update language stats
languages.stats[name] = (languages.stats[name] ?? 0) + size
languages.colors[name] = color ?? "#ededed"
languages.total += size
}
}
//Compute languages stats
console.debug(`metrics/compute/${login}/plugins > languages > computing stats`)
Object.keys(languages.stats).map(name => languages.stats[name] /= languages.total)
languages.favorites = Object.entries(languages.stats).sort(([an, a], [bn, b]) => b - a).slice(0, 8).map(([name, value]) => ({name, value, color:languages.colors[name], x:0}))
for (let i = 1; i < languages.favorites.length; i++)
languages.favorites[i].x = languages.favorites[i-1].x + languages.favorites[i-1].value
//Results
return languages
}
//Handle errors
catch (error) {
throw {error:{message:"An error occured", instance:error}}
}
}