~james/core

core/web/src/lib/api/repoCounts.ts -rw-r--r-- 1.0 KiB
452f17b7 — james chore(import): snapshot james.dad.town/core at f70c71c7696a 15 hours ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import type { BobbinContext } from "#lib/api/client.ts";
import { count } from "#lib/api/count.ts";
import { parallel } from "#lib/api/load.ts";
import type { RepoCounts } from "#lib/components/repo/types.ts";

export const loadRepoCounts = (ctx: BobbinContext, repoDid?: string): Promise<RepoCounts> =>
	parallel({
		stars: repoDid
			? count(ctx, "org.tangled.feed.countStars", repoDid).catch(() => null)
			: Promise.resolve(null),
		issues: repoDid
			? count(ctx, "org.tangled.repo.countIssues", repoDid, { state: "open" }).catch(
					() => null
				)
			: Promise.resolve(null),
		pulls: repoDid
			? count(ctx, "org.tangled.repo.countPulls", repoDid, { status: "open" }).catch(
					() => null
				)
			: Promise.resolve(null),
		forks: repoDid
			? count(ctx, "org.tangled.repo.countForks", repoDid).catch(() => null)
			: Promise.resolve(null)
	}).then((stats) => ({
		stars: stats.stars?.distinctAuthors ?? 0,
		issues: stats.issues?.count ?? 0,
		pulls: stats.pulls?.count ?? 0,
		forks: stats.forks?.count ?? 0
	}));