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
}));