chore: code formatting
This commit is contained in:
@@ -4,6 +4,8 @@ import axios from "axios"
|
|||||||
import processes from "child_process"
|
import processes from "child_process"
|
||||||
import crypto from "crypto"
|
import crypto from "crypto"
|
||||||
import { minify as csso } from "csso"
|
import { minify as csso } from "csso"
|
||||||
|
import * as d3 from "d3"
|
||||||
|
import D3node from "d3-node"
|
||||||
import emoji from "emoji-name-map"
|
import emoji from "emoji-name-map"
|
||||||
import { fileTypeFromBuffer } from "file-type"
|
import { fileTypeFromBuffer } from "file-type"
|
||||||
import fss from "fs"
|
import fss from "fs"
|
||||||
@@ -30,8 +32,6 @@ import twemojis from "twemoji-parser"
|
|||||||
import url from "url"
|
import url from "url"
|
||||||
import util from "util"
|
import util from "util"
|
||||||
import xmlformat from "xml-formatter"
|
import xmlformat from "xml-formatter"
|
||||||
import * as d3 from "d3"
|
|
||||||
import D3node from "d3-node"
|
|
||||||
prism_lang()
|
prism_lang()
|
||||||
|
|
||||||
//Exports
|
//Exports
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ export default async function({login, data, imports, rest, q, account}, {enabled
|
|||||||
return null
|
return null
|
||||||
|
|
||||||
//Load inputs
|
//Load inputs
|
||||||
let {skipped, sections, "repositories.limit":_repositories_limit, "history.limit":_history_limit} = imports.metadata.plugins.lines.inputs({data, account, q})
|
let {skipped, sections, "repositories.limit": _repositories_limit, "history.limit": _history_limit} = imports.metadata.plugins.lines.inputs({data, account, q})
|
||||||
skipped.push(...data.shared["repositories.skipped"])
|
skipped.push(...data.shared["repositories.skipped"])
|
||||||
|
|
||||||
//Context
|
//Context
|
||||||
@@ -23,7 +23,9 @@ export default async function({login, data, imports, rest, q, account}, {enabled
|
|||||||
//Get contributors stats from repositories
|
//Get contributors stats from repositories
|
||||||
console.debug(`metrics/compute/${login}/plugins > lines > querying api`)
|
console.debug(`metrics/compute/${login}/plugins > lines > querying api`)
|
||||||
const repos = {}, weeks = {}
|
const repos = {}, weeks = {}
|
||||||
const response = [...await Promise.allSettled(repositories.map(async ({repo, owner}) => (skipped.includes(repo.toLocaleLowerCase())) || (skipped.includes(`${owner}/${repo}`.toLocaleLowerCase())) ? {} : {handle:`${owner}/${repo}`, stats:(await rest.repos.getContributorsStats({owner, repo})).data}))].filter(({status}) => status === "fulfilled").map(({value}) => value)
|
const response = [...await Promise.allSettled(repositories.map(async ({repo, owner}) => (skipped.includes(repo.toLocaleLowerCase())) || (skipped.includes(`${owner}/${repo}`.toLocaleLowerCase())) ? {} : {handle: `${owner}/${repo}`, stats: (await rest.repos.getContributorsStats({owner, repo})).data}))].filter(({status}) => status === "fulfilled").map((
|
||||||
|
{value},
|
||||||
|
) => value)
|
||||||
|
|
||||||
//Compute changed lines
|
//Compute changed lines
|
||||||
console.debug(`metrics/compute/${login}/plugins > lines > computing total diff`)
|
console.debug(`metrics/compute/${login}/plugins > lines > computing total diff`)
|
||||||
@@ -32,7 +34,7 @@ export default async function({login, data, imports, rest, q, account}, {enabled
|
|||||||
if (!Array.isArray(stats))
|
if (!Array.isArray(stats))
|
||||||
return
|
return
|
||||||
//Compute editions
|
//Compute editions
|
||||||
repos[handle] = {added:0, deleted:0, changed:0}
|
repos[handle] = {added: 0, deleted: 0, changed: 0}
|
||||||
const contributors = stats.filter(({author}) => context.mode === "repository" ? true : author?.login?.toLocaleLowerCase() === login.toLocaleLowerCase())
|
const contributors = stats.filter(({author}) => context.mode === "repository" ? true : author?.login?.toLocaleLowerCase() === login.toLocaleLowerCase())
|
||||||
for (const contributor of contributors) {
|
for (const contributor of contributors) {
|
||||||
let added = 0, changed = 0, deleted = 0
|
let added = 0, changed = 0, deleted = 0
|
||||||
@@ -43,7 +45,7 @@ export default async function({login, data, imports, rest, q, account}, {enabled
|
|||||||
//Compute editions per week
|
//Compute editions per week
|
||||||
const date = new Date(w * 1000).toISOString().substring(0, 10)
|
const date = new Date(w * 1000).toISOString().substring(0, 10)
|
||||||
if (!weeks[date])
|
if (!weeks[date])
|
||||||
weeks[date] = {added:0, deleted:0, changed:0}
|
weeks[date] = {added: 0, deleted: 0, changed: 0}
|
||||||
weeks[date].added += a
|
weeks[date].added += a
|
||||||
weeks[date].deleted += d
|
weeks[date].deleted += d
|
||||||
weeks[date].changed += c
|
weeks[date].changed += c
|
||||||
@@ -61,8 +63,8 @@ export default async function({login, data, imports, rest, q, account}, {enabled
|
|||||||
added: Object.entries(repos).map(([_, {added}]) => added).reduce((a, b) => a + b, 0),
|
added: Object.entries(repos).map(([_, {added}]) => added).reduce((a, b) => a + b, 0),
|
||||||
deleted: Object.entries(repos).map(([_, {deleted}]) => deleted).reduce((a, b) => a + b, 0),
|
deleted: Object.entries(repos).map(([_, {deleted}]) => deleted).reduce((a, b) => a + b, 0),
|
||||||
changed: Object.entries(repos).map(([_, {changed}]) => changed).reduce((a, b) => a + b, 0),
|
changed: Object.entries(repos).map(([_, {changed}]) => changed).reduce((a, b) => a + b, 0),
|
||||||
repos:Object.entries(repos).map(([handle, stats]) => ({handle, ...stats})).sort((a, b) => (b.added + b.deleted + b.changed) - (a.added + a.deleted + a.changed)).slice(0, _repositories_limit),
|
repos: Object.entries(repos).map(([handle, stats]) => ({handle, ...stats})).sort((a, b) => (b.added + b.deleted + b.changed) - (a.added + a.deleted + a.changed)).slice(0, _repositories_limit),
|
||||||
weeks:Object.entries(weeks).map(([date, stats]) => ({date, ...stats})).filter(({added, deleted, changed}) => added + deleted + changed).sort((a, b) => new Date(a.date) - new Date(b.date)),
|
weeks: Object.entries(weeks).map(([date, stats]) => ({date, ...stats})).filter(({added, deleted, changed}) => added + deleted + changed).sort((a, b) => new Date(a.date) - new Date(b.date)),
|
||||||
}
|
}
|
||||||
|
|
||||||
//Diff graphs
|
//Diff graphs
|
||||||
@@ -80,9 +82,9 @@ export default async function({login, data, imports, rest, q, account}, {enabled
|
|||||||
const end = new Date(weeks.at(-1).date)
|
const end = new Date(weeks.at(-1).date)
|
||||||
const x = d3.scaleTime()
|
const x = d3.scaleTime()
|
||||||
.domain([start, end])
|
.domain([start, end])
|
||||||
.range([margin+offset, width-(offset+margin)])
|
.range([margin + offset, width - (offset + margin)])
|
||||||
svg.append("g")
|
svg.append("g")
|
||||||
.attr("transform", `translate(0,${height-(offset+margin)})`)
|
.attr("transform", `translate(0,${height - (offset + margin)})`)
|
||||||
.call(d3.axisBottom(x))
|
.call(d3.axisBottom(x))
|
||||||
.selectAll("text")
|
.selectAll("text")
|
||||||
.attr("transform", "translate(-5,5) rotate(-45)")
|
.attr("transform", "translate(-5,5) rotate(-45)")
|
||||||
@@ -90,25 +92,27 @@ export default async function({login, data, imports, rest, q, account}, {enabled
|
|||||||
.style("font-size", 20)
|
.style("font-size", 20)
|
||||||
|
|
||||||
//Diff range
|
//Diff range
|
||||||
const points = weeks.flatMap(({added, deleted, changed}) => [added+changed, deleted+changed])
|
const points = weeks.flatMap(({added, deleted, changed}) => [added + changed, deleted + changed])
|
||||||
const extremum = Math.max(...points)
|
const extremum = Math.max(...points)
|
||||||
const y = d3.scaleLinear()
|
const y = d3.scaleLinear()
|
||||||
.domain([extremum, -extremum])
|
.domain([extremum, -extremum])
|
||||||
.range([margin, height-(offset+margin)])
|
.range([margin, height - (offset + margin)])
|
||||||
svg.append("g")
|
svg.append("g")
|
||||||
.attr("transform", `translate(${margin+offset},0)`)
|
.attr("transform", `translate(${margin + offset},0)`)
|
||||||
.call(d3.axisLeft(y).ticks(7).tickFormat(d3.format(".2s")))
|
.call(d3.axisLeft(y).ticks(7).tickFormat(d3.format(".2s")))
|
||||||
.selectAll("text")
|
.selectAll("text")
|
||||||
.style("font-size", 20)
|
.style("font-size", 20)
|
||||||
|
|
||||||
//Generate history
|
//Generate history
|
||||||
for (const {type, sign, fill} of [{type:"added", sign:+1, fill:"rgb(63, 185, 80)"}, {type:"deleted", sign:-1, fill:"rgb(218, 54, 51)"}]) {
|
for (const {type, sign, fill} of [{type: "added", sign: +1, fill: "rgb(63, 185, 80)"}, {type: "deleted", sign: -1, fill: "rgb(218, 54, 51)"}]) {
|
||||||
svg.append("path")
|
svg.append("path")
|
||||||
.datum(weeks.map(({date, ...diff}) => [new Date(date), sign*(diff[type]+diff.changed)]))
|
.datum(weeks.map(({date, ...diff}) => [new Date(date), sign * (diff[type] + diff.changed)]))
|
||||||
.attr("d", d3.area()
|
.attr(
|
||||||
|
"d",
|
||||||
|
d3.area()
|
||||||
.x(d => x(d[0]))
|
.x(d => x(d[0]))
|
||||||
.y0(d => y(d[1]))
|
.y0(d => y(d[1]))
|
||||||
.y1(() => y(0))
|
.y1(() => y(0)),
|
||||||
)
|
)
|
||||||
.attr("fill", fill)
|
.attr("fill", fill)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user