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