~james/core

core/web/src/lib/api/count.ts -rw-r--r-- 1.3 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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import type { BobbinContext, XrpcRequestInit } from "#lib/api/client.ts";
import { jsonGet } from "#lib/api/_request.ts";
import type { TicketState } from "#lib/api/records.ts";

// count endpoints share { subject } params and { count, distinctAuthors } output.
export type CountName =
	| "org.tangled.feed.countStars"
	| "org.tangled.feed.countStarsBy"
	| "org.tangled.feed.countComments"
	| "org.tangled.feed.countCommentsBy"
	| "org.tangled.feed.countReactions"
	| "org.tangled.feed.countReactionsBy"
	| "org.tangled.graph.countFollows"
	| "org.tangled.graph.countFollowsBy"
	| "org.tangled.label.countDefinitions"
	| "org.tangled.publicKey.countKeys"
	| "org.tangled.repo.countArtifacts"
	| "org.tangled.repo.countArtifactsBy"
	| "org.tangled.repo.countCollaborators"
	| "org.tangled.repo.countCollaboratorsBy"
	| "org.tangled.repo.countForks"
	| "org.tangled.repo.countIssues"
	| "org.tangled.repo.countPulls"
	| "org.tangled.repo.countRepos"
	| "org.tangled.string.countStrings";

export interface CountResult {
	count: number;
	distinctAuthors: number;
}

export interface CountFilter {
	author?: string;
	state?: TicketState;
	status?: TicketState;
}

export const count = (
	ctx: BobbinContext,
	name: CountName,
	subject: string,
	filter: CountFilter = {},
	init?: XrpcRequestInit
): Promise<CountResult> => jsonGet<CountResult>(ctx, name, { subject, ...filter }, init);