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) {
|
||||
const repoResp = await fetch(
|
||||
async function getLanguages(owner, repo) {
|
||||
const languagesResp = await fetch(
|
||||
`${forgejoBaseUrl}/api/v1/repos/${encodeURIComponent(
|
||||
req.params.owner
|
||||
)}/${encodeURIComponent(req.params.repo)}`
|
||||
owner
|
||||
)}/${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) {
|
||||
res.status(repoResp.status)
|
||||
res.end()
|
||||
return
|
||||
}
|
||||
const repo = await repoResp.json()
|
||||
let languages = {}
|
||||
if (!repo.empty && repo.languages_url) {
|
||||
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())
|
||||
}
|
||||
}
|
||||
repo.commits_count =
|
||||
Number.parseInt(commitsResp.headers.get('x-total-count')) || 0
|
||||
const html = await eta.renderAsync('repo', {
|
||||
repo,
|
||||
languages,
|
||||
|
@ -75,28 +86,22 @@ app.get('/:owner/:repo', async function (req, res) {
|
|||
})
|
||||
|
||||
app.get('/:owner/:repo/commit/:hash', async function (req, res) {
|
||||
const commitResp = await fetch(
|
||||
`${forgejoBaseUrl}/api/v1/repos/${encodeURIComponent(
|
||||
req.params.owner
|
||||
)}/${encodeURIComponent(req.params.repo)}/git/commits/${encodeURIComponent(
|
||||
req.params.hash
|
||||
)}`
|
||||
)
|
||||
const [commitResp, languages] = await Promise.all([
|
||||
fetch(
|
||||
`${forgejoBaseUrl}/api/v1/repos/${encodeURIComponent(
|
||||
req.params.owner
|
||||
)}/${encodeURIComponent(
|
||||
req.params.repo
|
||||
)}/git/commits/${encodeURIComponent(req.params.hash)}`
|
||||
),
|
||||
getLanguages(req.params.owner, req.params.repo)
|
||||
])
|
||||
if (!commitResp.ok) {
|
||||
res.status(commitResp.status)
|
||||
res.end()
|
||||
return
|
||||
}
|
||||
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', {
|
||||
commit: {
|
||||
...commit.commit,
|
||||
|
@ -121,28 +126,35 @@ app.get('/:owner/:repo/commit/:hash', async function (req, res) {
|
|||
res.send(await render(html))
|
||||
})
|
||||
|
||||
app.get('/:owner/:repo/issue/:num', async function (req, res) {
|
||||
const issueResp = await fetch(
|
||||
`${forgejoBaseUrl}/api/v1/repos/${encodeURIComponent(
|
||||
req.params.owner
|
||||
)}/${encodeURIComponent(req.params.repo)}/issues/${encodeURIComponent(
|
||||
req.params.num
|
||||
)}`
|
||||
app.get('/:owner/:repo/:type/:num', (req, res, next) => {
|
||||
if (req.params.type != 'pull' && req.params.type != 'issue') return next()
|
||||
res.redirect(
|
||||
`/${req.params.owner}/${req.params.repo}/${req.params.type}s/${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) {
|
||||
res.status(issueResp.status)
|
||||
res.end()
|
||||
return
|
||||
}
|
||||
const issue = await issueResp.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())
|
||||
if (issue.pull_request) {
|
||||
res.redirect(
|
||||
`/${req.params.owner}/${req.params.repo}/pulls/${req.params.num}`
|
||||
)
|
||||
return
|
||||
}
|
||||
const html = await eta.renderAsync('issue', {
|
||||
issue,
|
||||
|
@ -159,6 +171,57 @@ app.get('/:owner/:repo/issue/:num', async function (req, res) {
|
|||
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']
|
||||
|
||||
app.listen(port, host, () => {
|
||||
|
|
Loading…
Reference in a new issue