refactor server
This commit is contained in:
parent
5ed3fda233
commit
a8ef583dea
1 changed files with 109 additions and 46 deletions
155
server.js
155
server.js
|
@ -36,29 +36,40 @@ function getLanguagePercentages(languages) {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
app.get('/:owner/:repo', async function (req, res) {
|
async function getLanguages(owner, repo) {
|
||||||
const repoResp = await fetch(
|
const languagesResp = await fetch(
|
||||||
`${forgejoBaseUrl}/api/v1/repos/${encodeURIComponent(
|
`${forgejoBaseUrl}/api/v1/repos/${encodeURIComponent(
|
||||||
req.params.owner
|
owner
|
||||||
)}/${encodeURIComponent(req.params.repo)}`
|
)}/${encodeURIComponent(repo)}/languages`
|
||||||
)
|
)
|
||||||
|
if (languagesResp.ok) {
|
||||||
|
return getLanguagePercentages(await languagesResp.json())
|
||||||
|
}
|
||||||
|
return {}
|
||||||
|
}
|
||||||
|
|
||||||
|
app.get('/:owner/:repo', async function (req, res) {
|
||||||
|
const [repoResp, commitsResp, languages] = await Promise.all([
|
||||||
|
fetch(
|
||||||
|
`${forgejoBaseUrl}/api/v1/repos/${encodeURIComponent(
|
||||||
|
req.params.owner
|
||||||
|
)}/${encodeURIComponent(req.params.repo)}`
|
||||||
|
),
|
||||||
|
fetch(
|
||||||
|
`${forgejoBaseUrl}/api/v1/repos/${encodeURIComponent(
|
||||||
|
req.params.owner
|
||||||
|
)}/${encodeURIComponent(req.params.repo)}/commits?limit=1`
|
||||||
|
),
|
||||||
|
getLanguages(req.params.owner, req.params.repo)
|
||||||
|
])
|
||||||
if (!repoResp.ok) {
|
if (!repoResp.ok) {
|
||||||
res.status(repoResp.status)
|
res.status(repoResp.status)
|
||||||
res.end()
|
res.end()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
const repo = await repoResp.json()
|
const repo = await repoResp.json()
|
||||||
let languages = {}
|
repo.commits_count =
|
||||||
if (!repo.empty && repo.languages_url) {
|
Number.parseInt(commitsResp.headers.get('x-total-count')) || 0
|
||||||
const languagesResp = await fetch(
|
|
||||||
`${forgejoBaseUrl}/api/v1/repos/${encodeURIComponent(
|
|
||||||
req.params.owner
|
|
||||||
)}/${encodeURIComponent(req.params.repo)}/languages`
|
|
||||||
)
|
|
||||||
if (languagesResp.ok) {
|
|
||||||
languages = getLanguagePercentages(await languagesResp.json())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const html = await eta.renderAsync('repo', {
|
const html = await eta.renderAsync('repo', {
|
||||||
repo,
|
repo,
|
||||||
languages,
|
languages,
|
||||||
|
@ -75,28 +86,22 @@ app.get('/:owner/:repo', async function (req, res) {
|
||||||
})
|
})
|
||||||
|
|
||||||
app.get('/:owner/:repo/commit/:hash', async function (req, res) {
|
app.get('/:owner/:repo/commit/:hash', async function (req, res) {
|
||||||
const commitResp = await fetch(
|
const [commitResp, languages] = await Promise.all([
|
||||||
`${forgejoBaseUrl}/api/v1/repos/${encodeURIComponent(
|
fetch(
|
||||||
req.params.owner
|
`${forgejoBaseUrl}/api/v1/repos/${encodeURIComponent(
|
||||||
)}/${encodeURIComponent(req.params.repo)}/git/commits/${encodeURIComponent(
|
req.params.owner
|
||||||
req.params.hash
|
)}/${encodeURIComponent(
|
||||||
)}`
|
req.params.repo
|
||||||
)
|
)}/git/commits/${encodeURIComponent(req.params.hash)}`
|
||||||
|
),
|
||||||
|
getLanguages(req.params.owner, req.params.repo)
|
||||||
|
])
|
||||||
if (!commitResp.ok) {
|
if (!commitResp.ok) {
|
||||||
res.status(commitResp.status)
|
res.status(commitResp.status)
|
||||||
res.end()
|
res.end()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
const commit = await commitResp.json()
|
const commit = await commitResp.json()
|
||||||
let languages = {}
|
|
||||||
const languagesResp = await fetch(
|
|
||||||
`${forgejoBaseUrl}/api/v1/repos/${encodeURIComponent(
|
|
||||||
req.params.owner
|
|
||||||
)}/${encodeURIComponent(req.params.repo)}/languages`
|
|
||||||
)
|
|
||||||
if (languagesResp.ok) {
|
|
||||||
languages = getLanguagePercentages(await languagesResp.json())
|
|
||||||
}
|
|
||||||
const html = await eta.renderAsync('commit', {
|
const html = await eta.renderAsync('commit', {
|
||||||
commit: {
|
commit: {
|
||||||
...commit.commit,
|
...commit.commit,
|
||||||
|
@ -121,28 +126,35 @@ app.get('/:owner/:repo/commit/:hash', async function (req, res) {
|
||||||
res.send(await render(html))
|
res.send(await render(html))
|
||||||
})
|
})
|
||||||
|
|
||||||
app.get('/:owner/:repo/issue/:num', async function (req, res) {
|
app.get('/:owner/:repo/:type/:num', (req, res, next) => {
|
||||||
const issueResp = await fetch(
|
if (req.params.type != 'pull' && req.params.type != 'issue') return next()
|
||||||
`${forgejoBaseUrl}/api/v1/repos/${encodeURIComponent(
|
res.redirect(
|
||||||
req.params.owner
|
`/${req.params.owner}/${req.params.repo}/${req.params.type}s/${req.params.num}`
|
||||||
)}/${encodeURIComponent(req.params.repo)}/issues/${encodeURIComponent(
|
|
||||||
req.params.num
|
|
||||||
)}`
|
|
||||||
)
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
app.get('/:owner/:repo/issues/:num', async function (req, res) {
|
||||||
|
const [issueResp, languages] = await Promise.all([
|
||||||
|
fetch(
|
||||||
|
`${forgejoBaseUrl}/api/v1/repos/${encodeURIComponent(
|
||||||
|
req.params.owner
|
||||||
|
)}/${encodeURIComponent(req.params.repo)}/issues/${encodeURIComponent(
|
||||||
|
req.params.num
|
||||||
|
)}`
|
||||||
|
),
|
||||||
|
getLanguages(req.params.owner, req.params.repo)
|
||||||
|
])
|
||||||
if (!issueResp.ok) {
|
if (!issueResp.ok) {
|
||||||
res.status(issueResp.status)
|
res.status(issueResp.status)
|
||||||
res.end()
|
res.end()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
const issue = await issueResp.json()
|
const issue = await issueResp.json()
|
||||||
let languages = {}
|
if (issue.pull_request) {
|
||||||
const languagesResp = await fetch(
|
res.redirect(
|
||||||
`${forgejoBaseUrl}/api/v1/repos/${encodeURIComponent(
|
`/${req.params.owner}/${req.params.repo}/pulls/${req.params.num}`
|
||||||
req.params.owner
|
)
|
||||||
)}/${encodeURIComponent(req.params.repo)}/languages`
|
return
|
||||||
)
|
|
||||||
if (languagesResp.ok) {
|
|
||||||
languages = getLanguagePercentages(await languagesResp.json())
|
|
||||||
}
|
}
|
||||||
const html = await eta.renderAsync('issue', {
|
const html = await eta.renderAsync('issue', {
|
||||||
issue,
|
issue,
|
||||||
|
@ -159,6 +171,57 @@ app.get('/:owner/:repo/issue/:num', async function (req, res) {
|
||||||
res.send(await render(html))
|
res.send(await render(html))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
app.get('/:owner/:repo/pulls/:num', async function (req, res) {
|
||||||
|
const [pullResp, pullCommitsResp, languages] = await Promise.all([
|
||||||
|
fetch(
|
||||||
|
`${forgejoBaseUrl}/api/v1/repos/${encodeURIComponent(
|
||||||
|
req.params.owner
|
||||||
|
)}/${encodeURIComponent(req.params.repo)}/pulls/${encodeURIComponent(
|
||||||
|
req.params.num
|
||||||
|
)}`
|
||||||
|
),
|
||||||
|
fetch(
|
||||||
|
`${forgejoBaseUrl}/api/v1/repos/${encodeURIComponent(
|
||||||
|
req.params.owner
|
||||||
|
)}/${encodeURIComponent(req.params.repo)}/pulls/${encodeURIComponent(
|
||||||
|
req.params.num
|
||||||
|
)}/commits?limit=0`
|
||||||
|
),
|
||||||
|
getLanguages(req.params.owner, req.params.repo)
|
||||||
|
])
|
||||||
|
if (!pullResp.ok || !pullCommitsResp.ok) {
|
||||||
|
res.status(pullResp.status)
|
||||||
|
res.end()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const [pull, commits] = await Promise.all([
|
||||||
|
pullResp.json(),
|
||||||
|
pullCommitsResp.json()
|
||||||
|
])
|
||||||
|
pull.commits_count =
|
||||||
|
Number.parseInt(pullCommitsResp.headers.get('x-total-count')) || 0
|
||||||
|
const stats = { total: 0, additions: 0, deletions: 0 }
|
||||||
|
for (const commit of commits) {
|
||||||
|
stats.total += commit.stats.total
|
||||||
|
stats.additions += commit.stats.additions
|
||||||
|
stats.deletions += commit.stats.deletions
|
||||||
|
}
|
||||||
|
const html = await eta.renderAsync('issue', {
|
||||||
|
issue: pull,
|
||||||
|
prStats: stats,
|
||||||
|
languages,
|
||||||
|
languageColors,
|
||||||
|
debug
|
||||||
|
})
|
||||||
|
if (debug) {
|
||||||
|
res.send(await renderHtml(html))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
res.type('png')
|
||||||
|
res.set('Content-Disposition', 'inline')
|
||||||
|
res.send(await render(html))
|
||||||
|
})
|
||||||
|
|
||||||
const [port, host] = [process.env.PORT ?? 9054, process.env.HOST ?? '127.0.0.1']
|
const [port, host] = [process.env.PORT ?? 9054, process.env.HOST ?? '127.0.0.1']
|
||||||
|
|
||||||
app.listen(port, host, () => {
|
app.listen(port, host, () => {
|
||||||
|
|
Loading…
Reference in a new issue