| 1234567891011121314151617181920212223242526272829303132333435363738 |
- import { query } from "@solidjs/router"
- import { config } from "~/config"
- export const github = query(async () => {
- "use server"
- const headers = {
- "User-Agent":
- "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36",
- }
- const apiBaseUrl = config.github.repoUrl.replace("https://github.com/", "https://api.github.com/repos/")
- try {
- const [meta, releases, contributors] = await Promise.all([
- fetch(apiBaseUrl, { headers }).then((res) => res.json()),
- fetch(`${apiBaseUrl}/releases`, { headers }).then((res) => res.json()),
- fetch(`${apiBaseUrl}/contributors?per_page=1`, { headers }),
- ])
- if (!Array.isArray(releases) || releases.length === 0) {
- return undefined
- }
- const [release] = releases
- const linkHeader = contributors.headers.get("Link")
- const contributorCount = linkHeader
- ? Number.parseInt(linkHeader.match(/&page=(\d+)>; rel="last"/)?.at(1) ?? "0")
- : 0
- return {
- stars: meta.stargazers_count,
- release: {
- name: release.name,
- url: release.html_url,
- tag_name: release.tag_name,
- },
- contributors: contributorCount,
- }
- } catch (e) {
- console.error(e)
- }
- return undefined
- }, "github")
|