135 lines
3.1 KiB
TypeScript
135 lines
3.1 KiB
TypeScript
import {
|
|
SiteStatisticsAnimeArgs,
|
|
SiteStatisticsCharactersArgs,
|
|
SiteStatisticsMangaArgs,
|
|
SiteStatisticsReviewsArgs,
|
|
SiteStatisticsStaffArgs,
|
|
SiteStatisticsStudiosArgs,
|
|
SiteStatisticsUsersArgs,
|
|
} from "../../graphql-codegen/generated/graphql.ts"
|
|
import { Fields, Fn, OperationParser } from "../types/Anilist.ts"
|
|
import type { AtLeastOne } from "../types/AtLeastOne.ts"
|
|
import { SiteTrendConnection } from "./SiteTrend.ts"
|
|
|
|
export const SiteStatistics = ({ operation, level }: Fields<OperationParser>) => ({
|
|
withUsers(
|
|
op: {
|
|
alias?: string
|
|
args?: AtLeastOne<SiteStatisticsUsersArgs>
|
|
fn: Fn<typeof SiteTrendConnection>
|
|
},
|
|
) {
|
|
operation.set({
|
|
alias: op.alias,
|
|
subField: "users",
|
|
level,
|
|
hasSubField: true,
|
|
variables: op?.args,
|
|
})
|
|
op.fn(SiteTrendConnection({ operation, level: level + 1 }))
|
|
return this
|
|
},
|
|
withAnime(
|
|
op: {
|
|
alias?: string
|
|
args?: AtLeastOne<SiteStatisticsAnimeArgs>
|
|
fn: Fn<typeof SiteTrendConnection>
|
|
},
|
|
) {
|
|
operation.set({
|
|
alias: op.alias,
|
|
subField: "anime",
|
|
level,
|
|
hasSubField: true,
|
|
variables: op?.args,
|
|
})
|
|
op.fn(SiteTrendConnection({ operation, level: level + 1 }))
|
|
return this
|
|
},
|
|
withManga(
|
|
op: {
|
|
alias?: string
|
|
args?: AtLeastOne<SiteStatisticsMangaArgs>
|
|
fn: Fn<typeof SiteTrendConnection>
|
|
},
|
|
) {
|
|
operation.set({
|
|
alias: op.alias,
|
|
subField: "manga",
|
|
level,
|
|
hasSubField: true,
|
|
variables: op?.args,
|
|
})
|
|
op.fn(SiteTrendConnection({ operation, level: level + 1 }))
|
|
return this
|
|
},
|
|
withCharacters(
|
|
op: {
|
|
alias?: string
|
|
args?: AtLeastOne<SiteStatisticsCharactersArgs>
|
|
fn: Fn<typeof SiteTrendConnection>
|
|
},
|
|
) {
|
|
operation.set({
|
|
alias: op.alias,
|
|
subField: "characters",
|
|
level,
|
|
hasSubField: true,
|
|
variables: op?.args,
|
|
})
|
|
op.fn(SiteTrendConnection({ operation, level: level + 1 }))
|
|
return this
|
|
},
|
|
withStaff(
|
|
op: {
|
|
alias?: string
|
|
args?: AtLeastOne<SiteStatisticsStaffArgs>
|
|
fn: Fn<typeof SiteTrendConnection>
|
|
},
|
|
) {
|
|
operation.set({
|
|
alias: op.alias,
|
|
subField: "staff",
|
|
level,
|
|
hasSubField: true,
|
|
variables: op?.args,
|
|
})
|
|
op.fn(SiteTrendConnection({ operation, level: level + 1 }))
|
|
return this
|
|
},
|
|
withStudios(
|
|
op: {
|
|
alias?: string
|
|
args?: AtLeastOne<SiteStatisticsStudiosArgs>
|
|
fn: Fn<typeof SiteTrendConnection>
|
|
},
|
|
) {
|
|
operation.set({
|
|
alias: op.alias,
|
|
subField: "studios",
|
|
level,
|
|
hasSubField: true,
|
|
variables: op?.args,
|
|
})
|
|
op.fn(SiteTrendConnection({ operation, level: level + 1 }))
|
|
return this
|
|
},
|
|
withReviews(
|
|
op: {
|
|
alias?: string
|
|
args?: AtLeastOne<SiteStatisticsReviewsArgs>
|
|
fn: Fn<typeof SiteTrendConnection>
|
|
},
|
|
) {
|
|
operation.set({
|
|
alias: op.alias,
|
|
subField: "reviews",
|
|
level,
|
|
hasSubField: true,
|
|
variables: op?.args,
|
|
})
|
|
op.fn(SiteTrendConnection({ operation, level: level + 1 }))
|
|
return this
|
|
},
|
|
})
|