{"version":3,"file":"index.cjs","names":["ActivitySort","ActivityType","AiringSort","CharacterRole","CharacterSort","ExternalLinkMediaType","ExternalLinkType","LikeableType","MediaFormat","MediaListSort","MediaListStatus","MediaRankType","MediaRelation","MediaSeason","MediaSort","MediaSource","MediaStatus","MediaTrendSort","MediaType","ModActionType","ModRole","NotificationType","RecommendationRating","RecommendationSort","ReviewRating","ReviewSort","RevisionHistoryAction","ScoreFormat","SiteTrendSort","StaffLanguage","StaffSort","StudioSort","SubmissionSort","SubmissionStatus","ThreadCommentSort","ThreadSort","UserSort","UserStaffNameLanguage","UserStatisticsSort","UserTitleLanguage","createAuthPlugin","createApiCoreClient","mergeHeaders","createGraphQLRequester","dedupeGraphQLFragmentDefinitions","MediaType","MediaListStatus","MediaType"],"sources":["../src/__generated__/anilist-sdk.ts","../src/client/index.ts","../src/selections/builder.ts","../src/selections/options.ts","../src/services/validation.ts","../src/services/animeService.ts","../src/services/characterService.ts","../src/services/graphqlService.ts","../src/services/mangaService.ts","../src/services/mediaType.ts","../src/services/mediaListService.ts","../src/services/mediaService.ts","../src/services/socialService.ts","../src/services/staffService.ts","../src/services/studioService.ts","../src/services/userService.ts","../src/__generated__/anilist-schema.ts","../src/pagination.ts","../src/index.ts"],"sourcesContent":["/** Internal type. DO NOT USE DIRECTLY. */\ntype Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };\n/** Internal type. DO NOT USE DIRECTLY. */\nexport type Incremental<T> = T | { [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never };\n\nexport interface GraphQLClientRequestOptions<\n  TVariables extends object = Record<string, unknown>,\n> {\n  document: string | { toString(): string };\n  variables?: TVariables;\n  requestHeaders?: Record<string, string>;\n  signal?: RequestInit[\"signal\"];\n  timeoutMs?: number;\n  cacheKey?: string;\n  tags?: string[];\n  operationName?: string;\n}\n\nexport interface GraphQLClient {\n  request<\n    TData = unknown,\n    TVariables extends object = Record<string, unknown>,\n  >(options: GraphQLClientRequestOptions<TVariables>): Promise<TData>;\n}\n\nexport const ActivitySort = {\n  Id: \"ID\",\n  IdDesc: \"ID_DESC\",\n  Pinned: \"PINNED\",\n} as const;\n\nexport const ActivityType = {\n  AnimeList: \"ANIME_LIST\",\n  MangaList: \"MANGA_LIST\",\n  MediaList: \"MEDIA_LIST\",\n  Message: \"MESSAGE\",\n  Text: \"TEXT\",\n} as const;\n\nexport const AiringSort = {\n  Episode: \"EPISODE\",\n  EpisodeDesc: \"EPISODE_DESC\",\n  Id: \"ID\",\n  IdDesc: \"ID_DESC\",\n  MediaId: \"MEDIA_ID\",\n  MediaIdDesc: \"MEDIA_ID_DESC\",\n  Time: \"TIME\",\n  TimeDesc: \"TIME_DESC\",\n} as const;\n\nexport const CharacterRole = {\n  Background: \"BACKGROUND\",\n  Main: \"MAIN\",\n  Supporting: \"SUPPORTING\",\n} as const;\n\nexport const CharacterSort = {\n  Favourites: \"FAVOURITES\",\n  FavouritesDesc: \"FAVOURITES_DESC\",\n  Id: \"ID\",\n  IdDesc: \"ID_DESC\",\n  Relevance: \"RELEVANCE\",\n  Role: \"ROLE\",\n  RoleDesc: \"ROLE_DESC\",\n  SearchMatch: \"SEARCH_MATCH\",\n} as const;\n\nexport const ExternalLinkMediaType = {\n  Anime: \"ANIME\",\n  Manga: \"MANGA\",\n  Staff: \"STAFF\",\n} as const;\n\nexport const ExternalLinkType = {\n  Info: \"INFO\",\n  Social: \"SOCIAL\",\n  Streaming: \"STREAMING\",\n} as const;\n\nexport const LikeableType = {\n  Activity: \"ACTIVITY\",\n  ActivityReply: \"ACTIVITY_REPLY\",\n  Thread: \"THREAD\",\n  ThreadComment: \"THREAD_COMMENT\",\n} as const;\n\nexport const MediaFormat = {\n  Manga: \"MANGA\",\n  Movie: \"MOVIE\",\n  Music: \"MUSIC\",\n  Novel: \"NOVEL\",\n  Ona: \"ONA\",\n  OneShot: \"ONE_SHOT\",\n  Ova: \"OVA\",\n  Special: \"SPECIAL\",\n  Tv: \"TV\",\n  TvShort: \"TV_SHORT\",\n} as const;\n\nexport const MediaListSort = {\n  AddedTime: \"ADDED_TIME\",\n  AddedTimeDesc: \"ADDED_TIME_DESC\",\n  FinishedOn: \"FINISHED_ON\",\n  FinishedOnDesc: \"FINISHED_ON_DESC\",\n  MediaId: \"MEDIA_ID\",\n  MediaIdDesc: \"MEDIA_ID_DESC\",\n  MediaPopularity: \"MEDIA_POPULARITY\",\n  MediaPopularityDesc: \"MEDIA_POPULARITY_DESC\",\n  MediaTitleEnglish: \"MEDIA_TITLE_ENGLISH\",\n  MediaTitleEnglishDesc: \"MEDIA_TITLE_ENGLISH_DESC\",\n  MediaTitleNative: \"MEDIA_TITLE_NATIVE\",\n  MediaTitleNativeDesc: \"MEDIA_TITLE_NATIVE_DESC\",\n  MediaTitleRomaji: \"MEDIA_TITLE_ROMAJI\",\n  MediaTitleRomajiDesc: \"MEDIA_TITLE_ROMAJI_DESC\",\n  Priority: \"PRIORITY\",\n  PriorityDesc: \"PRIORITY_DESC\",\n  Progress: \"PROGRESS\",\n  ProgressDesc: \"PROGRESS_DESC\",\n  ProgressVolumes: \"PROGRESS_VOLUMES\",\n  ProgressVolumesDesc: \"PROGRESS_VOLUMES_DESC\",\n  Repeat: \"REPEAT\",\n  RepeatDesc: \"REPEAT_DESC\",\n  Score: \"SCORE\",\n  ScoreDesc: \"SCORE_DESC\",\n  StartedOn: \"STARTED_ON\",\n  StartedOnDesc: \"STARTED_ON_DESC\",\n  Status: \"STATUS\",\n  StatusDesc: \"STATUS_DESC\",\n  UpdatedTime: \"UPDATED_TIME\",\n  UpdatedTimeDesc: \"UPDATED_TIME_DESC\",\n} as const;\n\nexport const MediaListStatus = {\n  Completed: \"COMPLETED\",\n  Current: \"CURRENT\",\n  Dropped: \"DROPPED\",\n  Paused: \"PAUSED\",\n  Planning: \"PLANNING\",\n  Repeating: \"REPEATING\",\n} as const;\n\nexport const MediaRankType = {\n  Popular: \"POPULAR\",\n  Rated: \"RATED\",\n} as const;\n\nexport const MediaRelation = {\n  Adaptation: \"ADAPTATION\",\n  Alternative: \"ALTERNATIVE\",\n  Character: \"CHARACTER\",\n  Compilation: \"COMPILATION\",\n  Contains: \"CONTAINS\",\n  Other: \"OTHER\",\n  Parent: \"PARENT\",\n  Prequel: \"PREQUEL\",\n  SameUniverse: \"SAME_UNIVERSE\",\n  Sequel: \"SEQUEL\",\n  SideStory: \"SIDE_STORY\",\n  Source: \"SOURCE\",\n  SpinOff: \"SPIN_OFF\",\n  Summary: \"SUMMARY\",\n} as const;\n\nexport const MediaSeason = {\n  Fall: \"FALL\",\n  Spring: \"SPRING\",\n  Summer: \"SUMMER\",\n  Winter: \"WINTER\",\n} as const;\n\nexport const MediaSort = {\n  Chapters: \"CHAPTERS\",\n  ChaptersDesc: \"CHAPTERS_DESC\",\n  Duration: \"DURATION\",\n  DurationDesc: \"DURATION_DESC\",\n  EndDate: \"END_DATE\",\n  EndDateDesc: \"END_DATE_DESC\",\n  Episodes: \"EPISODES\",\n  EpisodesDesc: \"EPISODES_DESC\",\n  Favourites: \"FAVOURITES\",\n  FavouritesDesc: \"FAVOURITES_DESC\",\n  Format: \"FORMAT\",\n  FormatDesc: \"FORMAT_DESC\",\n  Id: \"ID\",\n  IdDesc: \"ID_DESC\",\n  Popularity: \"POPULARITY\",\n  PopularityDesc: \"POPULARITY_DESC\",\n  Score: \"SCORE\",\n  ScoreDesc: \"SCORE_DESC\",\n  SearchMatch: \"SEARCH_MATCH\",\n  StartDate: \"START_DATE\",\n  StartDateDesc: \"START_DATE_DESC\",\n  Status: \"STATUS\",\n  StatusDesc: \"STATUS_DESC\",\n  TitleEnglish: \"TITLE_ENGLISH\",\n  TitleEnglishDesc: \"TITLE_ENGLISH_DESC\",\n  TitleNative: \"TITLE_NATIVE\",\n  TitleNativeDesc: \"TITLE_NATIVE_DESC\",\n  TitleRomaji: \"TITLE_ROMAJI\",\n  TitleRomajiDesc: \"TITLE_ROMAJI_DESC\",\n  Trending: \"TRENDING\",\n  TrendingDesc: \"TRENDING_DESC\",\n  Type: \"TYPE\",\n  TypeDesc: \"TYPE_DESC\",\n  UpdatedAt: \"UPDATED_AT\",\n  UpdatedAtDesc: \"UPDATED_AT_DESC\",\n  Volumes: \"VOLUMES\",\n  VolumesDesc: \"VOLUMES_DESC\",\n} as const;\n\nexport const MediaSource = {\n  Anime: \"ANIME\",\n  Comic: \"COMIC\",\n  Doujinshi: \"DOUJINSHI\",\n  Game: \"GAME\",\n  LightNovel: \"LIGHT_NOVEL\",\n  LiveAction: \"LIVE_ACTION\",\n  Manga: \"MANGA\",\n  MultimediaProject: \"MULTIMEDIA_PROJECT\",\n  Novel: \"NOVEL\",\n  Original: \"ORIGINAL\",\n  Other: \"OTHER\",\n  PictureBook: \"PICTURE_BOOK\",\n  VideoGame: \"VIDEO_GAME\",\n  VisualNovel: \"VISUAL_NOVEL\",\n  WebNovel: \"WEB_NOVEL\",\n} as const;\n\nexport const MediaStatus = {\n  Cancelled: \"CANCELLED\",\n  Finished: \"FINISHED\",\n  Hiatus: \"HIATUS\",\n  NotYetReleased: \"NOT_YET_RELEASED\",\n  Releasing: \"RELEASING\",\n} as const;\n\nexport const MediaTrendSort = {\n  Date: \"DATE\",\n  DateDesc: \"DATE_DESC\",\n  Episode: \"EPISODE\",\n  EpisodeDesc: \"EPISODE_DESC\",\n  Id: \"ID\",\n  IdDesc: \"ID_DESC\",\n  MediaId: \"MEDIA_ID\",\n  MediaIdDesc: \"MEDIA_ID_DESC\",\n  Popularity: \"POPULARITY\",\n  PopularityDesc: \"POPULARITY_DESC\",\n  Score: \"SCORE\",\n  ScoreDesc: \"SCORE_DESC\",\n  Trending: \"TRENDING\",\n  TrendingDesc: \"TRENDING_DESC\",\n} as const;\n\nexport const MediaType = {\n  Anime: \"ANIME\",\n  Manga: \"MANGA\",\n} as const;\n\nexport const ModActionType = {\n  Anon: \"ANON\",\n  Ban: \"BAN\",\n  Delete: \"DELETE\",\n  Edit: \"EDIT\",\n  Expire: \"EXPIRE\",\n  Note: \"NOTE\",\n  Report: \"REPORT\",\n  Reset: \"RESET\",\n} as const;\n\nexport const ModRole = {\n  Admin: \"ADMIN\",\n  AnimeData: \"ANIME_DATA\",\n  CharacterData: \"CHARACTER_DATA\",\n  Community: \"COMMUNITY\",\n  Developer: \"DEVELOPER\",\n  DiscordCommunity: \"DISCORD_COMMUNITY\",\n  LeadAnimeData: \"LEAD_ANIME_DATA\",\n  LeadCommunity: \"LEAD_COMMUNITY\",\n  LeadDeveloper: \"LEAD_DEVELOPER\",\n  LeadMangaData: \"LEAD_MANGA_DATA\",\n  LeadSocialMedia: \"LEAD_SOCIAL_MEDIA\",\n  MangaData: \"MANGA_DATA\",\n  Retired: \"RETIRED\",\n  SocialMedia: \"SOCIAL_MEDIA\",\n  StaffData: \"STAFF_DATA\",\n} as const;\n\nexport const NotificationType = {\n  ActivityLike: \"ACTIVITY_LIKE\",\n  ActivityMention: \"ACTIVITY_MENTION\",\n  ActivityMessage: \"ACTIVITY_MESSAGE\",\n  ActivityReply: \"ACTIVITY_REPLY\",\n  ActivityReplyLike: \"ACTIVITY_REPLY_LIKE\",\n  ActivityReplySubscribed: \"ACTIVITY_REPLY_SUBSCRIBED\",\n  Airing: \"AIRING\",\n  CharacterSubmissionUpdate: \"CHARACTER_SUBMISSION_UPDATE\",\n  Following: \"FOLLOWING\",\n  MediaDataChange: \"MEDIA_DATA_CHANGE\",\n  MediaDeletion: \"MEDIA_DELETION\",\n  MediaMerge: \"MEDIA_MERGE\",\n  MediaSubmissionUpdate: \"MEDIA_SUBMISSION_UPDATE\",\n  RelatedMediaAddition: \"RELATED_MEDIA_ADDITION\",\n  StaffSubmissionUpdate: \"STAFF_SUBMISSION_UPDATE\",\n  ThreadCommentLike: \"THREAD_COMMENT_LIKE\",\n  ThreadCommentMention: \"THREAD_COMMENT_MENTION\",\n  ThreadCommentReply: \"THREAD_COMMENT_REPLY\",\n  ThreadLike: \"THREAD_LIKE\",\n  ThreadSubscribed: \"THREAD_SUBSCRIBED\",\n} as const;\n\nexport const RecommendationRating = {\n  NoRating: \"NO_RATING\",\n  RateDown: \"RATE_DOWN\",\n  RateUp: \"RATE_UP\",\n} as const;\n\nexport const RecommendationSort = {\n  Id: \"ID\",\n  IdDesc: \"ID_DESC\",\n  Rating: \"RATING\",\n  RatingDesc: \"RATING_DESC\",\n} as const;\n\nexport const ReviewRating = {\n  DownVote: \"DOWN_VOTE\",\n  NoVote: \"NO_VOTE\",\n  UpVote: \"UP_VOTE\",\n} as const;\n\nexport const ReviewSort = {\n  CreatedAt: \"CREATED_AT\",\n  CreatedAtDesc: \"CREATED_AT_DESC\",\n  Id: \"ID\",\n  IdDesc: \"ID_DESC\",\n  Rating: \"RATING\",\n  RatingDesc: \"RATING_DESC\",\n  Score: \"SCORE\",\n  ScoreDesc: \"SCORE_DESC\",\n  UpdatedAt: \"UPDATED_AT\",\n  UpdatedAtDesc: \"UPDATED_AT_DESC\",\n} as const;\n\nexport const RevisionHistoryAction = {\n  Create: \"CREATE\",\n  Edit: \"EDIT\",\n} as const;\n\nexport const ScoreFormat = {\n  Point3: \"POINT_3\",\n  Point5: \"POINT_5\",\n  Point10: \"POINT_10\",\n  Point10Decimal: \"POINT_10_DECIMAL\",\n  Point100: \"POINT_100\",\n} as const;\n\nexport const SiteTrendSort = {\n  Change: \"CHANGE\",\n  ChangeDesc: \"CHANGE_DESC\",\n  Count: \"COUNT\",\n  CountDesc: \"COUNT_DESC\",\n  Date: \"DATE\",\n  DateDesc: \"DATE_DESC\",\n} as const;\n\nexport const StaffLanguage = {\n  English: \"ENGLISH\",\n  French: \"FRENCH\",\n  German: \"GERMAN\",\n  Hebrew: \"HEBREW\",\n  Hungarian: \"HUNGARIAN\",\n  Italian: \"ITALIAN\",\n  Japanese: \"JAPANESE\",\n  Korean: \"KOREAN\",\n  Portuguese: \"PORTUGUESE\",\n  Spanish: \"SPANISH\",\n} as const;\n\nexport const StaffSort = {\n  Favourites: \"FAVOURITES\",\n  FavouritesDesc: \"FAVOURITES_DESC\",\n  Id: \"ID\",\n  IdDesc: \"ID_DESC\",\n  Language: \"LANGUAGE\",\n  LanguageDesc: \"LANGUAGE_DESC\",\n  Relevance: \"RELEVANCE\",\n  Role: \"ROLE\",\n  RoleDesc: \"ROLE_DESC\",\n  SearchMatch: \"SEARCH_MATCH\",\n} as const;\n\nexport const StudioSort = {\n  Favourites: \"FAVOURITES\",\n  FavouritesDesc: \"FAVOURITES_DESC\",\n  Id: \"ID\",\n  IdDesc: \"ID_DESC\",\n  Name: \"NAME\",\n  NameDesc: \"NAME_DESC\",\n  SearchMatch: \"SEARCH_MATCH\",\n} as const;\n\nexport const SubmissionSort = {\n  Id: \"ID\",\n  IdDesc: \"ID_DESC\",\n} as const;\n\nexport const SubmissionStatus = {\n  Accepted: \"ACCEPTED\",\n  PartiallyAccepted: \"PARTIALLY_ACCEPTED\",\n  Pending: \"PENDING\",\n  Rejected: \"REJECTED\",\n} as const;\n\nexport const ThreadCommentSort = {\n  Id: \"ID\",\n  IdDesc: \"ID_DESC\",\n} as const;\n\nexport const ThreadSort = {\n  CreatedAt: \"CREATED_AT\",\n  CreatedAtDesc: \"CREATED_AT_DESC\",\n  Id: \"ID\",\n  IdDesc: \"ID_DESC\",\n  IsSticky: \"IS_STICKY\",\n  RepliedAt: \"REPLIED_AT\",\n  RepliedAtDesc: \"REPLIED_AT_DESC\",\n  ReplyCount: \"REPLY_COUNT\",\n  ReplyCountDesc: \"REPLY_COUNT_DESC\",\n  SearchMatch: \"SEARCH_MATCH\",\n  Title: \"TITLE\",\n  TitleDesc: \"TITLE_DESC\",\n  UpdatedAt: \"UPDATED_AT\",\n  UpdatedAtDesc: \"UPDATED_AT_DESC\",\n  ViewCount: \"VIEW_COUNT\",\n  ViewCountDesc: \"VIEW_COUNT_DESC\",\n} as const;\n\nexport const UserSort = {\n  ChaptersRead: \"CHAPTERS_READ\",\n  ChaptersReadDesc: \"CHAPTERS_READ_DESC\",\n  Id: \"ID\",\n  IdDesc: \"ID_DESC\",\n  SearchMatch: \"SEARCH_MATCH\",\n  Username: \"USERNAME\",\n  UsernameDesc: \"USERNAME_DESC\",\n  WatchedTime: \"WATCHED_TIME\",\n  WatchedTimeDesc: \"WATCHED_TIME_DESC\",\n} as const;\n\nexport const UserStaffNameLanguage = {\n  Native: \"NATIVE\",\n  Romaji: \"ROMAJI\",\n  RomajiWestern: \"ROMAJI_WESTERN\",\n} as const;\n\nexport const UserStatisticsSort = {\n  Count: \"COUNT\",\n  CountDesc: \"COUNT_DESC\",\n  Id: \"ID\",\n  IdDesc: \"ID_DESC\",\n  MeanScore: \"MEAN_SCORE\",\n  MeanScoreDesc: \"MEAN_SCORE_DESC\",\n  Progress: \"PROGRESS\",\n  ProgressDesc: \"PROGRESS_DESC\",\n} as const;\n\nexport const UserTitleLanguage = {\n  English: \"ENGLISH\",\n  EnglishStylised: \"ENGLISH_STYLISED\",\n  Native: \"NATIVE\",\n  NativeStylised: \"NATIVE_STYLISED\",\n  Romaji: \"ROMAJI\",\n  RomajiStylised: \"ROMAJI_STYLISED\",\n} as const;\n\ntype TypedDocumentStringConstructor = {\n  new <TResult = unknown, TVariables = unknown>(\n    value: string,\n    meta?: Record<string, unknown>,\n  ): string;\n};\n\nconst TypedDocumentString = class extends String {\n  readonly value: string;\n  readonly __meta__?: Record<string, unknown>;\n\n  constructor(value: string, meta?: Record<string, unknown>) {\n    super(value);\n    this.value = value;\n    this.__meta__ = meta;\n  }\n\n  override toString(): string {\n    return this.value;\n  }\n} as unknown as TypedDocumentStringConstructor;\n\n/** Activity type enum. */\nexport type ActivityType =\n  /** A anime list update activity */\n  | 'ANIME_LIST'\n  /** A manga list update activity */\n  | 'MANGA_LIST'\n  /** Anime & Manga list update, only used in query arguments */\n  | 'MEDIA_LIST'\n  /** A text message activity sent to another user */\n  | 'MESSAGE'\n  /** A text activity */\n  | 'TEXT';\n\n/** The role the character plays in the media */\nexport type CharacterRole =\n  /** A background character in the media */\n  | 'BACKGROUND'\n  /** A primary character role in the media */\n  | 'MAIN'\n  /** A supporting character role in the media */\n  | 'SUPPORTING';\n\nexport type ExternalLinkType =\n  | 'INFO'\n  | 'SOCIAL'\n  | 'STREAMING';\n\n/** Date object that allows for incomplete date values (fuzzy) */\nexport type FuzzyDateInput = {\n  /** Numeric Day (24) */\n  day: number | null | undefined;\n  /** Numeric Month (3) */\n  month: number | null | undefined;\n  /** Numeric Year (2017) */\n  year: number | null | undefined;\n};\n\n/** Types that can be liked */\nexport type LikeableType =\n  | 'ACTIVITY'\n  | 'ACTIVITY_REPLY'\n  | 'THREAD'\n  | 'THREAD_COMMENT';\n\n/** The format the media was released in */\nexport type MediaFormat =\n  /** Professionally published manga with more than one chapter */\n  | 'MANGA'\n  /** Anime movies with a theatrical release */\n  | 'MOVIE'\n  /** Short anime released as a music video */\n  | 'MUSIC'\n  /** Written books released as a series of light novels */\n  | 'NOVEL'\n  /** (Original Net Animation) Anime that have been originally released online or are only available through streaming services. */\n  | 'ONA'\n  /** Manga with just one chapter */\n  | 'ONE_SHOT'\n  /** (Original Video Animation) Anime that have been released directly on DVD/Blu-ray without originally going through a theatrical release or television broadcast */\n  | 'OVA'\n  /** Special episodes that have been included in DVD/Blu-ray releases, picture dramas, pilots, etc */\n  | 'SPECIAL'\n  /** Anime broadcast on television */\n  | 'TV'\n  /** Anime which are under 15 minutes in length and broadcast on television */\n  | 'TV_SHORT';\n\n/** Media list watching/reading status enum. */\nexport type MediaListStatus =\n  /** Finished watching/reading */\n  | 'COMPLETED'\n  /** Currently watching/reading */\n  | 'CURRENT'\n  /** Stopped watching/reading before completing */\n  | 'DROPPED'\n  /** Paused watching/reading */\n  | 'PAUSED'\n  /** Planning to watch/read */\n  | 'PLANNING'\n  /** Re-watching/reading */\n  | 'REPEATING';\n\n/** The type of ranking */\nexport type MediaRankType =\n  /** Ranking is based on the media's popularity */\n  | 'POPULAR'\n  /** Ranking is based on the media's ratings/score */\n  | 'RATED';\n\n/** Type of relation media has to its parent. */\nexport type MediaRelation =\n  /** An adaption of this media into a different format */\n  | 'ADAPTATION'\n  /** An alternative version of the same media */\n  | 'ALTERNATIVE'\n  /** Shares at least 1 character */\n  | 'CHARACTER'\n  /** Version 2 only. */\n  | 'COMPILATION'\n  /** Version 2 only. */\n  | 'CONTAINS'\n  /** Other */\n  | 'OTHER'\n  /** The media a side story is from */\n  | 'PARENT'\n  /** Released before the relation */\n  | 'PREQUEL'\n  /** Version 3 only. The media is set in the same universe as another media */\n  | 'SAME_UNIVERSE'\n  /** Released after the relation */\n  | 'SEQUEL'\n  /** A side story of the parent media */\n  | 'SIDE_STORY'\n  /** Version 2 only. The source material the media was adapted from */\n  | 'SOURCE'\n  /** An alternative version of the media with a different primary focus */\n  | 'SPIN_OFF'\n  /** A shortened and summarized version */\n  | 'SUMMARY';\n\nexport type MediaSeason =\n  /** Predominantly started airing between October and November */\n  | 'FALL'\n  /** Predominantly started airing between April and June */\n  | 'SPRING'\n  /** Predominantly started airing between July and September */\n  | 'SUMMER'\n  /** Predominantly started airing between January and March */\n  | 'WINTER';\n\n/** Source type the media was adapted from */\nexport type MediaSource =\n  /** Version 2+ only. Japanese Anime */\n  | 'ANIME'\n  /** Version 3 only. Comics excluding manga */\n  | 'COMIC'\n  /** Version 2+ only. Self-published works */\n  | 'DOUJINSHI'\n  /** Version 3 only. Games excluding video games */\n  | 'GAME'\n  /** Written work published in volumes */\n  | 'LIGHT_NOVEL'\n  /** Version 3 only. Live action media such as movies or TV show */\n  | 'LIVE_ACTION'\n  /** Asian comic book */\n  | 'MANGA'\n  /** Version 3 only. Multimedia project */\n  | 'MULTIMEDIA_PROJECT'\n  /** Version 2+ only. Written works not published in volumes */\n  | 'NOVEL'\n  /** An original production not based of another work */\n  | 'ORIGINAL'\n  /** Other */\n  | 'OTHER'\n  /** Version 3 only. Picture book */\n  | 'PICTURE_BOOK'\n  /** Video game */\n  | 'VIDEO_GAME'\n  /** Video game driven primary by text and narrative */\n  | 'VISUAL_NOVEL'\n  /** Version 3 only. Written works published online */\n  | 'WEB_NOVEL';\n\n/** The current releasing status of the media */\nexport type MediaStatus =\n  /** Ended before the work could be finished */\n  | 'CANCELLED'\n  /** Has completed and is no longer being released */\n  | 'FINISHED'\n  /** Version 2 only. Is currently paused from releasing and will resume at a later date */\n  | 'HIATUS'\n  /** To be released at a later date */\n  | 'NOT_YET_RELEASED'\n  /** Currently releasing */\n  | 'RELEASING';\n\n/** Media type enum, anime or manga. */\nexport type MediaType =\n  /** Japanese Anime */\n  | 'ANIME'\n  /** Asian comic */\n  | 'MANGA';\n\n/** Mod role enums */\nexport type ModRole =\n  /** An AniList administrator */\n  | 'ADMIN'\n  /** An anime data moderator */\n  | 'ANIME_DATA'\n  /** A character data moderator */\n  | 'CHARACTER_DATA'\n  /** A community moderator */\n  | 'COMMUNITY'\n  /** An AniList developer */\n  | 'DEVELOPER'\n  /** A discord community moderator */\n  | 'DISCORD_COMMUNITY'\n  /** A lead anime data moderator */\n  | 'LEAD_ANIME_DATA'\n  /** A lead community moderator */\n  | 'LEAD_COMMUNITY'\n  /** A head developer of AniList */\n  | 'LEAD_DEVELOPER'\n  /** A lead manga data moderator */\n  | 'LEAD_MANGA_DATA'\n  /** A lead social media moderator */\n  | 'LEAD_SOCIAL_MEDIA'\n  /** A manga data moderator */\n  | 'MANGA_DATA'\n  /** A retired moderator */\n  | 'RETIRED'\n  /** A social media moderator */\n  | 'SOCIAL_MEDIA'\n  /** A staff data moderator */\n  | 'STAFF_DATA';\n\n/** Notification type enum */\nexport type NotificationType =\n  /** A user has liked your activity */\n  | 'ACTIVITY_LIKE'\n  /** A user has mentioned you in their activity */\n  | 'ACTIVITY_MENTION'\n  /** A user has sent you message */\n  | 'ACTIVITY_MESSAGE'\n  /** A user has replied to your activity */\n  | 'ACTIVITY_REPLY'\n  /** A user has liked your activity reply */\n  | 'ACTIVITY_REPLY_LIKE'\n  /** A user has replied to activity you have also replied to */\n  | 'ACTIVITY_REPLY_SUBSCRIBED'\n  /** An anime you are currently watching has aired */\n  | 'AIRING'\n  /** A user's character submission has been accepted, partially accepted, or rejected */\n  | 'CHARACTER_SUBMISSION_UPDATE'\n  /** A user has followed you */\n  | 'FOLLOWING'\n  /** An anime or manga has had a data change that affects how a user may track it in their lists */\n  | 'MEDIA_DATA_CHANGE'\n  /** An anime or manga on the user's list has been deleted from the site */\n  | 'MEDIA_DELETION'\n  /** Anime or manga entries on the user's list have been merged into a single entry */\n  | 'MEDIA_MERGE'\n  /** A user's submission has been accepted, partially accepted, or rejected */\n  | 'MEDIA_SUBMISSION_UPDATE'\n  /** A new anime or manga has been added to the site where its related media is on the user's list */\n  | 'RELATED_MEDIA_ADDITION'\n  /** A user's staff submission has been accepted, partially accepted, or rejected */\n  | 'STAFF_SUBMISSION_UPDATE'\n  /** A user has liked your forum comment */\n  | 'THREAD_COMMENT_LIKE'\n  /** A user has mentioned you in a forum comment */\n  | 'THREAD_COMMENT_MENTION'\n  /** A user has replied to your forum comment */\n  | 'THREAD_COMMENT_REPLY'\n  /** A user has liked your forum thread */\n  | 'THREAD_LIKE'\n  /** A user has commented in one of your subscribed forum threads */\n  | 'THREAD_SUBSCRIBED';\n\n/** Recommendation rating enums */\nexport type RecommendationRating =\n  | 'NO_RATING'\n  | 'RATE_DOWN'\n  | 'RATE_UP';\n\n/** Review rating enums */\nexport type ReviewRating =\n  | 'DOWN_VOTE'\n  | 'NO_VOTE'\n  | 'UP_VOTE';\n\n/** Media list scoring type */\nexport type ScoreFormat =\n  /** An integer from 0-3. Should be represented in Smileys. 0 => No Score, 1 => :(, 2 => :|, 3 => :) */\n  | 'POINT_3'\n  /** An integer from 0-5. Should be represented in Stars */\n  | 'POINT_5'\n  /** An integer from 0-10 */\n  | 'POINT_10'\n  /** A float from 0-10 with 1 decimal place */\n  | 'POINT_10_DECIMAL'\n  /** An integer from 0-100 */\n  | 'POINT_100';\n\n/** The language the user wants to see staff and character names in */\nexport type UserStaffNameLanguage =\n  /** The staff or character's name in their native language */\n  | 'NATIVE'\n  /** The romanization of the staff or character's native name */\n  | 'ROMAJI'\n  /** The romanization of the staff or character's native name, with western name ordering */\n  | 'ROMAJI_WESTERN';\n\n/** The language the user wants to see media titles in */\nexport type UserTitleLanguage =\n  /** The official english title */\n  | 'ENGLISH'\n  /** The official english title, stylised by media creator */\n  | 'ENGLISH_STYLISED'\n  /** Official title in it's native language */\n  | 'NATIVE'\n  /** Official title in it's native language, stylised by media creator */\n  | 'NATIVE_STYLISED'\n  /** The romanization of the native language title */\n  | 'ROMAJI'\n  /** The romanization of the native language title, stylised by media creator */\n  | 'ROMAJI_STYLISED';\n\nexport type AnimeFragment = { id: number, idMal: number | null, bannerImage: string | null, description: string | null, format: MediaFormat | null, status: MediaStatus | null, type: MediaType | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, genres: Array<string | null> | null, averageScore: number | null, meanScore: number | null, popularity: number | null, favourites: number | null, trending: number | null, source: MediaSource | null, countryOfOrigin: unknown, isAdult: boolean | null, isLicensed: boolean | null, isLocked: boolean | null, isFavourite: boolean, isFavouriteBlocked: boolean, hashtag: string | null, synonyms: Array<string | null> | null, season: MediaSeason | null, seasonYear: number | null, siteUrl: string | null, updatedAt: number | null, autoCreateForumThread: boolean | null, isRecommendationBlocked: boolean | null, isReviewBlocked: boolean | null, modNotes: string | null, nextAiringEpisode: { id: number, airingAt: number, timeUntilAiring: number, episode: number, mediaId: number } | null, streamingEpisodes: Array<{ title: string | null, thumbnail: string | null, url: string | null, site: string | null } | null> | null, studios: { edges: Array<{ isMain: boolean, favouriteOrder: number | null, node: { id: number, name: string, isAnimationStudio: boolean, favourites: number | null, isFavourite: boolean, siteUrl: string | null } | null } | null> | null } | null, relations: { edges: Array<{ id: number | null, relationType: MediaRelation | null, isMainStudio: boolean, characterRole: CharacterRole | null, characterName: string | null, roleNotes: string | null, dubGroup: string | null, staffRole: string | null, favouriteOrder: number | null, node: { id: number, type: MediaType | null, format: MediaFormat | null, status: MediaStatus | null, season: MediaSeason | null, seasonYear: number | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, averageScore: number | null, popularity: number | null, favourites: number | null, genres: Array<string | null> | null, isAdult: boolean | null, countryOfOrigin: unknown, siteUrl: string | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null } | null } | null> | null } | null, characters: { edges: Array<{ id: number | null, role: CharacterRole | null, name: string | null, favouriteOrder: number | null, voiceActors: Array<{ id: number, languageV2: string | null, name: { full: string | null, native: string | null } | null, image: { large: string | null, medium: string | null } | null } | null> | null, voiceActorRoles: Array<{ roleNotes: string | null, dubGroup: string | null, voiceActor: { id: number, name: { full: string | null } | null } | null } | null> | null, node: { id: number, description: string | null, gender: string | null, age: string | null, bloodType: string | null, isFavourite: boolean, isFavouriteBlocked: boolean, favourites: number | null, siteUrl: string | null, name: { alternative: Array<string | null> | null, alternativeSpoiler: Array<string | null> | null, first: string | null, full: string | null, last: string | null, middle: string | null, native: string | null, userPreferred: string | null } | null, image: { large: string | null, medium: string | null } | null, dateOfBirth: { year: number | null, month: number | null, day: number | null } | null } | null } | null> | null, nodes: Array<{ id: number, description: string | null, gender: string | null, age: string | null, bloodType: string | null, isFavourite: boolean, isFavouriteBlocked: boolean, favourites: number | null, siteUrl: string | null, name: { alternative: Array<string | null> | null, alternativeSpoiler: Array<string | null> | null, first: string | null, full: string | null, last: string | null, middle: string | null, native: string | null, userPreferred: string | null } | null, image: { large: string | null, medium: string | null } | null, dateOfBirth: { year: number | null, month: number | null, day: number | null } | null } | null> | null } | null, staff: { edges: Array<{ id: number | null, role: string | null, favouriteOrder: number | null, node: { id: number, description: string | null, primaryOccupations: Array<string | null> | null, gender: string | null, bloodType: string | null, homeTown: string | null, languageV2: string | null, yearsActive: Array<number | null> | null, favourites: number | null, isFavourite: boolean, isFavouriteBlocked: boolean, age: number | null, siteUrl: string | null, name: { full: string | null, native: string | null, first: string | null, middle: string | null, last: string | null, userPreferred: string | null } | null, image: { large: string | null, medium: string | null } | null, dateOfBirth: { year: number | null, month: number | null, day: number | null } | null, dateOfDeath: { year: number | null, month: number | null, day: number | null } | null } | null } | null> | null, nodes: Array<{ id: number, description: string | null, primaryOccupations: Array<string | null> | null, gender: string | null, bloodType: string | null, homeTown: string | null, languageV2: string | null, yearsActive: Array<number | null> | null, favourites: number | null, isFavourite: boolean, isFavouriteBlocked: boolean, age: number | null, siteUrl: string | null, name: { full: string | null, native: string | null, first: string | null, middle: string | null, last: string | null, userPreferred: string | null } | null, image: { large: string | null, medium: string | null } | null, dateOfBirth: { year: number | null, month: number | null, day: number | null } | null, dateOfDeath: { year: number | null, month: number | null, day: number | null } | null } | null> | null } | null, tags: Array<{ id: number, name: string, description: string | null, category: string | null, rank: number | null, isGeneralSpoiler: boolean | null, isMediaSpoiler: boolean | null, isAdult: boolean | null, userId: number | null } | null> | null, rankings: Array<{ id: number, rank: number, type: MediaRankType, format: MediaFormat, year: number | null, season: MediaSeason | null, allTime: boolean | null, context: string } | null> | null, externalLinks: Array<{ id: number, url: string | null, site: string, siteId: number | null, type: ExternalLinkType | null, language: string | null, color: string | null, icon: string | null, notes: string | null, isDisabled: boolean | null } | null> | null, stats: { scoreDistribution: Array<{ score: number | null, amount: number | null } | null> | null, statusDistribution: Array<{ status: MediaListStatus | null, amount: number | null } | null> | null, airingProgression: Array<{ episode: number | null, score: number | null, watching: number | null } | null> | null } | null, trailer: { id: string | null, site: string | null, thumbnail: string | null } | null, reviews: { pageInfo: { total: number | null } | null } | null, recommendations: { pageInfo: { total: number | null } | null } | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null };\n\nexport type CharacterFragment = { id: number, description: string | null, gender: string | null, age: string | null, bloodType: string | null, isFavourite: boolean, isFavouriteBlocked: boolean, favourites: number | null, siteUrl: string | null, name: { alternative: Array<string | null> | null, alternativeSpoiler: Array<string | null> | null, first: string | null, full: string | null, last: string | null, middle: string | null, native: string | null, userPreferred: string | null } | null, image: { large: string | null, medium: string | null } | null, dateOfBirth: { year: number | null, month: number | null, day: number | null } | null };\n\nexport type CoverImageFragment = { large: string | null, medium: string | null, extraLarge: string | null, color: string | null };\n\nexport type DateFragment = { year: number | null, month: number | null, day: number | null };\n\nexport type CharacterImageFragment = { large: string | null, medium: string | null };\n\nexport type StaffImageFragment = { large: string | null, medium: string | null };\n\nexport type UserAvatarFragment = { large: string | null, medium: string | null };\n\nexport type TitleFragment = { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null };\n\nexport type CharacterEdgeFragment = { id: number | null, role: CharacterRole | null, name: string | null, favouriteOrder: number | null, voiceActors: Array<{ id: number, languageV2: string | null, name: { full: string | null, native: string | null } | null, image: { large: string | null, medium: string | null } | null } | null> | null, voiceActorRoles: Array<{ roleNotes: string | null, dubGroup: string | null, voiceActor: { id: number, name: { full: string | null } | null } | null } | null> | null, node: { id: number, description: string | null, gender: string | null, age: string | null, bloodType: string | null, isFavourite: boolean, isFavouriteBlocked: boolean, favourites: number | null, siteUrl: string | null, name: { alternative: Array<string | null> | null, alternativeSpoiler: Array<string | null> | null, first: string | null, full: string | null, last: string | null, middle: string | null, native: string | null, userPreferred: string | null } | null, image: { large: string | null, medium: string | null } | null, dateOfBirth: { year: number | null, month: number | null, day: number | null } | null } | null };\n\nexport type CharacterConnectionFragment = { edges: Array<{ id: number | null, role: CharacterRole | null, name: string | null, favouriteOrder: number | null, voiceActors: Array<{ id: number, languageV2: string | null, name: { full: string | null, native: string | null } | null, image: { large: string | null, medium: string | null } | null } | null> | null, voiceActorRoles: Array<{ roleNotes: string | null, dubGroup: string | null, voiceActor: { id: number, name: { full: string | null } | null } | null } | null> | null, node: { id: number, description: string | null, gender: string | null, age: string | null, bloodType: string | null, isFavourite: boolean, isFavouriteBlocked: boolean, favourites: number | null, siteUrl: string | null, name: { alternative: Array<string | null> | null, alternativeSpoiler: Array<string | null> | null, first: string | null, full: string | null, last: string | null, middle: string | null, native: string | null, userPreferred: string | null } | null, image: { large: string | null, medium: string | null } | null, dateOfBirth: { year: number | null, month: number | null, day: number | null } | null } | null } | null> | null, nodes: Array<{ id: number, description: string | null, gender: string | null, age: string | null, bloodType: string | null, isFavourite: boolean, isFavouriteBlocked: boolean, favourites: number | null, siteUrl: string | null, name: { alternative: Array<string | null> | null, alternativeSpoiler: Array<string | null> | null, first: string | null, full: string | null, last: string | null, middle: string | null, native: string | null, userPreferred: string | null } | null, image: { large: string | null, medium: string | null } | null, dateOfBirth: { year: number | null, month: number | null, day: number | null } | null } | null> | null };\n\nexport type MediaRelationNodeFragment = { id: number, type: MediaType | null, format: MediaFormat | null, status: MediaStatus | null, season: MediaSeason | null, seasonYear: number | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, averageScore: number | null, popularity: number | null, favourites: number | null, genres: Array<string | null> | null, isAdult: boolean | null, countryOfOrigin: unknown, siteUrl: string | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null };\n\nexport type MediaRelationEdgeFragment = { id: number | null, relationType: MediaRelation | null, isMainStudio: boolean, characterRole: CharacterRole | null, characterName: string | null, roleNotes: string | null, dubGroup: string | null, staffRole: string | null, favouriteOrder: number | null, node: { id: number, type: MediaType | null, format: MediaFormat | null, status: MediaStatus | null, season: MediaSeason | null, seasonYear: number | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, averageScore: number | null, popularity: number | null, favourites: number | null, genres: Array<string | null> | null, isAdult: boolean | null, countryOfOrigin: unknown, siteUrl: string | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null } | null };\n\nexport type MediaRelationConnectionFragment = { edges: Array<{ id: number | null, relationType: MediaRelation | null, isMainStudio: boolean, characterRole: CharacterRole | null, characterName: string | null, roleNotes: string | null, dubGroup: string | null, staffRole: string | null, favouriteOrder: number | null, node: { id: number, type: MediaType | null, format: MediaFormat | null, status: MediaStatus | null, season: MediaSeason | null, seasonYear: number | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, averageScore: number | null, popularity: number | null, favourites: number | null, genres: Array<string | null> | null, isAdult: boolean | null, countryOfOrigin: unknown, siteUrl: string | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null } | null } | null> | null };\n\nexport type StaffEdgeFragment = { id: number | null, role: string | null, favouriteOrder: number | null, node: { id: number, description: string | null, primaryOccupations: Array<string | null> | null, gender: string | null, bloodType: string | null, homeTown: string | null, languageV2: string | null, yearsActive: Array<number | null> | null, favourites: number | null, isFavourite: boolean, isFavouriteBlocked: boolean, age: number | null, siteUrl: string | null, name: { full: string | null, native: string | null, first: string | null, middle: string | null, last: string | null, userPreferred: string | null } | null, image: { large: string | null, medium: string | null } | null, dateOfBirth: { year: number | null, month: number | null, day: number | null } | null, dateOfDeath: { year: number | null, month: number | null, day: number | null } | null } | null };\n\nexport type StaffConnectionFragment = { edges: Array<{ id: number | null, role: string | null, favouriteOrder: number | null, node: { id: number, description: string | null, primaryOccupations: Array<string | null> | null, gender: string | null, bloodType: string | null, homeTown: string | null, languageV2: string | null, yearsActive: Array<number | null> | null, favourites: number | null, isFavourite: boolean, isFavouriteBlocked: boolean, age: number | null, siteUrl: string | null, name: { full: string | null, native: string | null, first: string | null, middle: string | null, last: string | null, userPreferred: string | null } | null, image: { large: string | null, medium: string | null } | null, dateOfBirth: { year: number | null, month: number | null, day: number | null } | null, dateOfDeath: { year: number | null, month: number | null, day: number | null } | null } | null } | null> | null, nodes: Array<{ id: number, description: string | null, primaryOccupations: Array<string | null> | null, gender: string | null, bloodType: string | null, homeTown: string | null, languageV2: string | null, yearsActive: Array<number | null> | null, favourites: number | null, isFavourite: boolean, isFavouriteBlocked: boolean, age: number | null, siteUrl: string | null, name: { full: string | null, native: string | null, first: string | null, middle: string | null, last: string | null, userPreferred: string | null } | null, image: { large: string | null, medium: string | null } | null, dateOfBirth: { year: number | null, month: number | null, day: number | null } | null, dateOfDeath: { year: number | null, month: number | null, day: number | null } | null } | null> | null };\n\nexport type StudioNodeFragment = { id: number, name: string, isAnimationStudio: boolean, favourites: number | null, isFavourite: boolean, siteUrl: string | null };\n\nexport type StudioEdgeFragment = { isMain: boolean, favouriteOrder: number | null, node: { id: number, name: string, isAnimationStudio: boolean, favourites: number | null, isFavourite: boolean, siteUrl: string | null } | null };\n\nexport type StudioConnectionFragment = { edges: Array<{ isMain: boolean, favouriteOrder: number | null, node: { id: number, name: string, isAnimationStudio: boolean, favourites: number | null, isFavourite: boolean, siteUrl: string | null } | null } | null> | null };\n\nexport type CharacterNameFragment = { alternative: Array<string | null> | null, alternativeSpoiler: Array<string | null> | null, first: string | null, full: string | null, last: string | null, middle: string | null, native: string | null, userPreferred: string | null };\n\nexport type CharacterBasicFragment = { id: number, description: string | null, gender: string | null, age: string | null, bloodType: string | null, isFavourite: boolean, isFavouriteBlocked: boolean, favourites: number | null, siteUrl: string | null, name: { alternative: Array<string | null> | null, alternativeSpoiler: Array<string | null> | null, first: string | null, full: string | null, last: string | null, middle: string | null, native: string | null, userPreferred: string | null } | null, image: { large: string | null, medium: string | null } | null, dateOfBirth: { year: number | null, month: number | null, day: number | null } | null };\n\nexport type StaffNameFragment = { full: string | null, native: string | null, first: string | null, middle: string | null, last: string | null, userPreferred: string | null };\n\nexport type StaffBasicFragment = { id: number, description: string | null, primaryOccupations: Array<string | null> | null, gender: string | null, bloodType: string | null, homeTown: string | null, languageV2: string | null, yearsActive: Array<number | null> | null, favourites: number | null, isFavourite: boolean, isFavouriteBlocked: boolean, age: number | null, siteUrl: string | null, name: { full: string | null, native: string | null, first: string | null, middle: string | null, last: string | null, userPreferred: string | null } | null, image: { large: string | null, medium: string | null } | null, dateOfBirth: { year: number | null, month: number | null, day: number | null } | null, dateOfDeath: { year: number | null, month: number | null, day: number | null } | null };\n\nexport type UserOptionsFragment = { titleLanguage: UserTitleLanguage | null, displayAdultContent: boolean | null, airingNotifications: boolean | null, profileColor: string | null, timezone: string | null, activityMergeTime: number | null, staffNameLanguage: UserStaffNameLanguage | null, restrictMessagesToFollowing: boolean | null, notificationOptions: Array<{ type: NotificationType | null, enabled: boolean | null } | null> | null, disabledListActivity: Array<{ disabled: boolean | null, type: MediaListStatus | null } | null> | null };\n\nexport type UserMediaListOptionsFragment = { scoreFormat: ScoreFormat | null, rowOrder: string | null, useLegacyLists: boolean | null, sharedTheme: unknown, sharedThemeEnabled: boolean | null, animeList: { sectionOrder: Array<string | null> | null, splitCompletedSectionByFormat: boolean | null, customLists: Array<string | null> | null, advancedScoring: Array<string | null> | null, advancedScoringEnabled: boolean | null } | null, mangaList: { sectionOrder: Array<string | null> | null, splitCompletedSectionByFormat: boolean | null, customLists: Array<string | null> | null, advancedScoring: Array<string | null> | null, advancedScoringEnabled: boolean | null } | null };\n\nexport type UserFavouritesFragment = { anime: { nodes: Array<{ id: number, title: { romaji: string | null } | null } | null> | null } | null, manga: { nodes: Array<{ id: number, title: { romaji: string | null } | null } | null> | null } | null, characters: { nodes: Array<{ id: number, name: { full: string | null } | null } | null> | null } | null, staff: { nodes: Array<{ id: number, name: { full: string | null } | null } | null> | null } | null, studios: { nodes: Array<{ id: number, name: string } | null> | null } | null };\n\nexport type UserStatisticsFragment = { anime: { count: number, meanScore: number, standardDeviation: number, minutesWatched: number, episodesWatched: number, chaptersRead: number, volumesRead: number, scores: Array<{ score: number | null, count: number, meanScore: number, minutesWatched: number } | null> | null, lengths: Array<{ length: string | null, count: number, meanScore: number, minutesWatched: number } | null> | null, formats: Array<{ format: MediaFormat | null, count: number, meanScore: number, minutesWatched: number } | null> | null, statuses: Array<{ status: MediaListStatus | null, count: number, meanScore: number, minutesWatched: number } | null> | null, releaseYears: Array<{ releaseYear: number | null, count: number, meanScore: number, minutesWatched: number } | null> | null, startYears: Array<{ startYear: number | null, count: number, meanScore: number, minutesWatched: number } | null> | null, genres: Array<{ genre: string | null, count: number, meanScore: number, minutesWatched: number } | null> | null, tags: Array<{ count: number, meanScore: number, minutesWatched: number, tag: { name: string } | null } | null> | null, countries: Array<{ country: unknown, count: number, meanScore: number, minutesWatched: number } | null> | null, voiceActors: Array<{ count: number, meanScore: number, minutesWatched: number, characterIds: Array<number | null>, mediaIds: Array<number | null>, voiceActor: { id: number, name: { full: string | null } | null } | null } | null> | null, staff: Array<{ count: number, meanScore: number, minutesWatched: number, mediaIds: Array<number | null>, staff: { id: number, name: { full: string | null } | null } | null } | null> | null, studios: Array<{ count: number, meanScore: number, minutesWatched: number, mediaIds: Array<number | null>, studio: { id: number, name: string } | null } | null> | null } | null, manga: { count: number, meanScore: number, standardDeviation: number, chaptersRead: number, volumesRead: number, scores: Array<{ score: number | null, count: number, meanScore: number, chaptersRead: number } | null> | null, lengths: Array<{ length: string | null, count: number, meanScore: number, chaptersRead: number } | null> | null, formats: Array<{ format: MediaFormat | null, count: number, meanScore: number, chaptersRead: number } | null> | null, statuses: Array<{ status: MediaListStatus | null, count: number, meanScore: number, chaptersRead: number } | null> | null, releaseYears: Array<{ releaseYear: number | null, count: number, meanScore: number, chaptersRead: number } | null> | null, startYears: Array<{ startYear: number | null, count: number, meanScore: number, chaptersRead: number } | null> | null, genres: Array<{ genre: string | null, count: number, meanScore: number, chaptersRead: number } | null> | null, tags: Array<{ count: number, meanScore: number, chaptersRead: number, tag: { name: string } | null } | null> | null, countries: Array<{ country: unknown, count: number, meanScore: number, chaptersRead: number } | null> | null, staff: Array<{ count: number, meanScore: number, chaptersRead: number, mediaIds: Array<number | null>, staff: { id: number, name: { full: string | null } | null } | null } | null> | null, studios: Array<{ count: number, meanScore: number, chaptersRead: number, mediaIds: Array<number | null>, studio: { id: number, name: string } | null } | null> | null } | null };\n\nexport type UserBasicFragment = { id: number, name: string, about: string | null, bannerImage: string | null, donatorTier: number | null, donatorBadge: string | null, isFollowing: boolean | null, isFollower: boolean | null, isBlocked: boolean | null, createdAt: number | null, updatedAt: number | null, unreadNotificationCount: number | null, bans: unknown, moderatorRoles: Array<ModRole | null> | null, moderatorStatus: string | null, siteUrl: string | null, avatar: { large: string | null, medium: string | null } | null, options: { titleLanguage: UserTitleLanguage | null, displayAdultContent: boolean | null, airingNotifications: boolean | null, profileColor: string | null, timezone: string | null, activityMergeTime: number | null, staffNameLanguage: UserStaffNameLanguage | null, restrictMessagesToFollowing: boolean | null, notificationOptions: Array<{ type: NotificationType | null, enabled: boolean | null } | null> | null, disabledListActivity: Array<{ disabled: boolean | null, type: MediaListStatus | null } | null> | null } | null, mediaListOptions: { scoreFormat: ScoreFormat | null, rowOrder: string | null, useLegacyLists: boolean | null, sharedTheme: unknown, sharedThemeEnabled: boolean | null, animeList: { sectionOrder: Array<string | null> | null, splitCompletedSectionByFormat: boolean | null, customLists: Array<string | null> | null, advancedScoring: Array<string | null> | null, advancedScoringEnabled: boolean | null } | null, mangaList: { sectionOrder: Array<string | null> | null, splitCompletedSectionByFormat: boolean | null, customLists: Array<string | null> | null, advancedScoring: Array<string | null> | null, advancedScoringEnabled: boolean | null } | null } | null, favourites: { anime: { nodes: Array<{ id: number, title: { romaji: string | null } | null } | null> | null } | null, manga: { nodes: Array<{ id: number, title: { romaji: string | null } | null } | null> | null } | null, characters: { nodes: Array<{ id: number, name: { full: string | null } | null } | null> | null } | null, staff: { nodes: Array<{ id: number, name: { full: string | null } | null } | null> | null } | null, studios: { nodes: Array<{ id: number, name: string } | null> | null } | null } | null, statistics: { anime: { count: number, meanScore: number, standardDeviation: number, minutesWatched: number, episodesWatched: number, chaptersRead: number, volumesRead: number, scores: Array<{ score: number | null, count: number, meanScore: number, minutesWatched: number } | null> | null, lengths: Array<{ length: string | null, count: number, meanScore: number, minutesWatched: number } | null> | null, formats: Array<{ format: MediaFormat | null, count: number, meanScore: number, minutesWatched: number } | null> | null, statuses: Array<{ status: MediaListStatus | null, count: number, meanScore: number, minutesWatched: number } | null> | null, releaseYears: Array<{ releaseYear: number | null, count: number, meanScore: number, minutesWatched: number } | null> | null, startYears: Array<{ startYear: number | null, count: number, meanScore: number, minutesWatched: number } | null> | null, genres: Array<{ genre: string | null, count: number, meanScore: number, minutesWatched: number } | null> | null, tags: Array<{ count: number, meanScore: number, minutesWatched: number, tag: { name: string } | null } | null> | null, countries: Array<{ country: unknown, count: number, meanScore: number, minutesWatched: number } | null> | null, voiceActors: Array<{ count: number, meanScore: number, minutesWatched: number, characterIds: Array<number | null>, mediaIds: Array<number | null>, voiceActor: { id: number, name: { full: string | null } | null } | null } | null> | null, staff: Array<{ count: number, meanScore: number, minutesWatched: number, mediaIds: Array<number | null>, staff: { id: number, name: { full: string | null } | null } | null } | null> | null, studios: Array<{ count: number, meanScore: number, minutesWatched: number, mediaIds: Array<number | null>, studio: { id: number, name: string } | null } | null> | null } | null, manga: { count: number, meanScore: number, standardDeviation: number, chaptersRead: number, volumesRead: number, scores: Array<{ score: number | null, count: number, meanScore: number, chaptersRead: number } | null> | null, lengths: Array<{ length: string | null, count: number, meanScore: number, chaptersRead: number } | null> | null, formats: Array<{ format: MediaFormat | null, count: number, meanScore: number, chaptersRead: number } | null> | null, statuses: Array<{ status: MediaListStatus | null, count: number, meanScore: number, chaptersRead: number } | null> | null, releaseYears: Array<{ releaseYear: number | null, count: number, meanScore: number, chaptersRead: number } | null> | null, startYears: Array<{ startYear: number | null, count: number, meanScore: number, chaptersRead: number } | null> | null, genres: Array<{ genre: string | null, count: number, meanScore: number, chaptersRead: number } | null> | null, tags: Array<{ count: number, meanScore: number, chaptersRead: number, tag: { name: string } | null } | null> | null, countries: Array<{ country: unknown, count: number, meanScore: number, chaptersRead: number } | null> | null, staff: Array<{ count: number, meanScore: number, chaptersRead: number, mediaIds: Array<number | null>, staff: { id: number, name: { full: string | null } | null } | null } | null> | null, studios: Array<{ count: number, meanScore: number, chaptersRead: number, mediaIds: Array<number | null>, studio: { id: number, name: string } | null } | null> | null } | null } | null, stats: { watchedTime: number | null, chaptersRead: number | null } | null, previousNames: Array<{ name: string | null, createdAt: number | null, updatedAt: number | null } | null> | null };\n\nexport type MangaFragment = { id: number, idMal: number | null, bannerImage: string | null, description: string | null, format: MediaFormat | null, status: MediaStatus | null, type: MediaType | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, genres: Array<string | null> | null, averageScore: number | null, meanScore: number | null, popularity: number | null, favourites: number | null, trending: number | null, source: MediaSource | null, countryOfOrigin: unknown, isAdult: boolean | null, isLicensed: boolean | null, isLocked: boolean | null, isFavourite: boolean, isFavouriteBlocked: boolean, hashtag: string | null, synonyms: Array<string | null> | null, season: MediaSeason | null, seasonYear: number | null, siteUrl: string | null, updatedAt: number | null, autoCreateForumThread: boolean | null, isRecommendationBlocked: boolean | null, isReviewBlocked: boolean | null, modNotes: string | null, relations: { edges: Array<{ id: number | null, relationType: MediaRelation | null, isMainStudio: boolean, characterRole: CharacterRole | null, characterName: string | null, roleNotes: string | null, dubGroup: string | null, staffRole: string | null, favouriteOrder: number | null, node: { id: number, type: MediaType | null, format: MediaFormat | null, status: MediaStatus | null, season: MediaSeason | null, seasonYear: number | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, averageScore: number | null, popularity: number | null, favourites: number | null, genres: Array<string | null> | null, isAdult: boolean | null, countryOfOrigin: unknown, siteUrl: string | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null } | null } | null> | null } | null, characters: { edges: Array<{ id: number | null, role: CharacterRole | null, name: string | null, favouriteOrder: number | null, voiceActors: Array<{ id: number, languageV2: string | null, name: { full: string | null, native: string | null } | null, image: { large: string | null, medium: string | null } | null } | null> | null, voiceActorRoles: Array<{ roleNotes: string | null, dubGroup: string | null, voiceActor: { id: number, name: { full: string | null } | null } | null } | null> | null, node: { id: number, description: string | null, gender: string | null, age: string | null, bloodType: string | null, isFavourite: boolean, isFavouriteBlocked: boolean, favourites: number | null, siteUrl: string | null, name: { alternative: Array<string | null> | null, alternativeSpoiler: Array<string | null> | null, first: string | null, full: string | null, last: string | null, middle: string | null, native: string | null, userPreferred: string | null } | null, image: { large: string | null, medium: string | null } | null, dateOfBirth: { year: number | null, month: number | null, day: number | null } | null } | null } | null> | null, nodes: Array<{ id: number, description: string | null, gender: string | null, age: string | null, bloodType: string | null, isFavourite: boolean, isFavouriteBlocked: boolean, favourites: number | null, siteUrl: string | null, name: { alternative: Array<string | null> | null, alternativeSpoiler: Array<string | null> | null, first: string | null, full: string | null, last: string | null, middle: string | null, native: string | null, userPreferred: string | null } | null, image: { large: string | null, medium: string | null } | null, dateOfBirth: { year: number | null, month: number | null, day: number | null } | null } | null> | null } | null, staff: { edges: Array<{ id: number | null, role: string | null, favouriteOrder: number | null, node: { id: number, description: string | null, primaryOccupations: Array<string | null> | null, gender: string | null, bloodType: string | null, homeTown: string | null, languageV2: string | null, yearsActive: Array<number | null> | null, favourites: number | null, isFavourite: boolean, isFavouriteBlocked: boolean, age: number | null, siteUrl: string | null, name: { full: string | null, native: string | null, first: string | null, middle: string | null, last: string | null, userPreferred: string | null } | null, image: { large: string | null, medium: string | null } | null, dateOfBirth: { year: number | null, month: number | null, day: number | null } | null, dateOfDeath: { year: number | null, month: number | null, day: number | null } | null } | null } | null> | null, nodes: Array<{ id: number, description: string | null, primaryOccupations: Array<string | null> | null, gender: string | null, bloodType: string | null, homeTown: string | null, languageV2: string | null, yearsActive: Array<number | null> | null, favourites: number | null, isFavourite: boolean, isFavouriteBlocked: boolean, age: number | null, siteUrl: string | null, name: { full: string | null, native: string | null, first: string | null, middle: string | null, last: string | null, userPreferred: string | null } | null, image: { large: string | null, medium: string | null } | null, dateOfBirth: { year: number | null, month: number | null, day: number | null } | null, dateOfDeath: { year: number | null, month: number | null, day: number | null } | null } | null> | null } | null, tags: Array<{ id: number, name: string, description: string | null, category: string | null, rank: number | null, isGeneralSpoiler: boolean | null, isMediaSpoiler: boolean | null, isAdult: boolean | null, userId: number | null } | null> | null, rankings: Array<{ id: number, rank: number, type: MediaRankType, format: MediaFormat, year: number | null, season: MediaSeason | null, allTime: boolean | null, context: string } | null> | null, externalLinks: Array<{ id: number, url: string | null, site: string, siteId: number | null, type: ExternalLinkType | null, language: string | null, color: string | null, icon: string | null, notes: string | null, isDisabled: boolean | null } | null> | null, stats: { scoreDistribution: Array<{ score: number | null, amount: number | null } | null> | null, statusDistribution: Array<{ status: MediaListStatus | null, amount: number | null } | null> | null, airingProgression: Array<{ episode: number | null, score: number | null, watching: number | null } | null> | null } | null, trailer: { id: string | null, site: string | null, thumbnail: string | null } | null, reviews: { pageInfo: { total: number | null } | null } | null, recommendations: { pageInfo: { total: number | null } | null } | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null };\n\nexport type MediaFragment = { id: number, idMal: number | null, bannerImage: string | null, description: string | null, format: MediaFormat | null, status: MediaStatus | null, type: MediaType | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, genres: Array<string | null> | null, averageScore: number | null, meanScore: number | null, popularity: number | null, favourites: number | null, trending: number | null, source: MediaSource | null, countryOfOrigin: unknown, isAdult: boolean | null, isLicensed: boolean | null, isLocked: boolean | null, isFavourite: boolean, isFavouriteBlocked: boolean, hashtag: string | null, synonyms: Array<string | null> | null, season: MediaSeason | null, seasonYear: number | null, siteUrl: string | null, updatedAt: number | null, autoCreateForumThread: boolean | null, isRecommendationBlocked: boolean | null, isReviewBlocked: boolean | null, modNotes: string | null, nextAiringEpisode: { id: number, airingAt: number, timeUntilAiring: number, episode: number, mediaId: number } | null, tags: Array<{ id: number, name: string, description: string | null, category: string | null, rank: number | null } | null> | null, externalLinks: Array<{ id: number, url: string | null, site: string, siteId: number | null, type: ExternalLinkType | null } | null> | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null };\n\nexport type MediaCoreFragment = { id: number, idMal: number | null, bannerImage: string | null, description: string | null, format: MediaFormat | null, status: MediaStatus | null, type: MediaType | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, genres: Array<string | null> | null, averageScore: number | null, meanScore: number | null, popularity: number | null, favourites: number | null, trending: number | null, source: MediaSource | null, countryOfOrigin: unknown, isAdult: boolean | null, isLicensed: boolean | null, isLocked: boolean | null, isFavourite: boolean, isFavouriteBlocked: boolean, hashtag: string | null, synonyms: Array<string | null> | null, season: MediaSeason | null, seasonYear: number | null, siteUrl: string | null, updatedAt: number | null, autoCreateForumThread: boolean | null, isRecommendationBlocked: boolean | null, isReviewBlocked: boolean | null, modNotes: string | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null };\n\nexport type MediaDetailedFragment = { id: number, idMal: number | null, bannerImage: string | null, description: string | null, format: MediaFormat | null, status: MediaStatus | null, type: MediaType | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, genres: Array<string | null> | null, averageScore: number | null, meanScore: number | null, popularity: number | null, favourites: number | null, trending: number | null, source: MediaSource | null, countryOfOrigin: unknown, isAdult: boolean | null, isLicensed: boolean | null, isLocked: boolean | null, isFavourite: boolean, isFavouriteBlocked: boolean, hashtag: string | null, synonyms: Array<string | null> | null, season: MediaSeason | null, seasonYear: number | null, siteUrl: string | null, updatedAt: number | null, autoCreateForumThread: boolean | null, isRecommendationBlocked: boolean | null, isReviewBlocked: boolean | null, modNotes: string | null, tags: Array<{ id: number, name: string, description: string | null, category: string | null, rank: number | null, isGeneralSpoiler: boolean | null, isMediaSpoiler: boolean | null, isAdult: boolean | null, userId: number | null } | null> | null, rankings: Array<{ id: number, rank: number, type: MediaRankType, format: MediaFormat, year: number | null, season: MediaSeason | null, allTime: boolean | null, context: string } | null> | null, externalLinks: Array<{ id: number, url: string | null, site: string, siteId: number | null, type: ExternalLinkType | null, language: string | null, color: string | null, icon: string | null, notes: string | null, isDisabled: boolean | null } | null> | null, stats: { scoreDistribution: Array<{ score: number | null, amount: number | null } | null> | null, statusDistribution: Array<{ status: MediaListStatus | null, amount: number | null } | null> | null, airingProgression: Array<{ episode: number | null, score: number | null, watching: number | null } | null> | null } | null, trailer: { id: string | null, site: string | null, thumbnail: string | null } | null, reviews: { pageInfo: { total: number | null } | null } | null, recommendations: { pageInfo: { total: number | null } | null } | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null };\n\nexport type MediaBasicFragment = { id: number, idMal: number | null, bannerImage: string | null, description: string | null, format: MediaFormat | null, status: MediaStatus | null, type: MediaType | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, genres: Array<string | null> | null, averageScore: number | null, meanScore: number | null, popularity: number | null, favourites: number | null, trending: number | null, source: MediaSource | null, countryOfOrigin: unknown, isAdult: boolean | null, isLicensed: boolean | null, isLocked: boolean | null, isFavourite: boolean, isFavouriteBlocked: boolean, hashtag: string | null, synonyms: Array<string | null> | null, season: MediaSeason | null, seasonYear: number | null, siteUrl: string | null, updatedAt: number | null, autoCreateForumThread: boolean | null, isRecommendationBlocked: boolean | null, isReviewBlocked: boolean | null, modNotes: string | null, tags: Array<{ id: number, name: string, description: string | null, category: string | null, rank: number | null } | null> | null, externalLinks: Array<{ id: number, url: string | null, site: string, siteId: number | null, type: ExternalLinkType | null } | null> | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null };\n\nexport type MediaExternalLinkFragment = { id: number, url: string | null, site: string, siteId: number | null, type: ExternalLinkType | null, language: string | null, color: string | null, icon: string | null, notes: string | null, isDisabled: boolean | null };\n\nexport type MediaExternalLinkBasicFragment = { id: number, url: string | null, site: string, siteId: number | null, type: ExternalLinkType | null };\n\nexport type MediaRankFragment = { id: number, rank: number, type: MediaRankType, format: MediaFormat, year: number | null, season: MediaSeason | null, allTime: boolean | null, context: string };\n\nexport type ScoreDistributionFragment = { score: number | null, amount: number | null };\n\nexport type StatusDistributionFragment = { status: MediaListStatus | null, amount: number | null };\n\nexport type MediaStatsFragment = { scoreDistribution: Array<{ score: number | null, amount: number | null } | null> | null, statusDistribution: Array<{ status: MediaListStatus | null, amount: number | null } | null> | null, airingProgression: Array<{ episode: number | null, score: number | null, watching: number | null } | null> | null };\n\nexport type MediaStreamingEpisodeFragment = { title: string | null, thumbnail: string | null, url: string | null, site: string | null };\n\nexport type AiringScheduleFragment = { id: number, airingAt: number, timeUntilAiring: number, episode: number, mediaId: number };\n\nexport type MediaTagFragment = { id: number, name: string, description: string | null, category: string | null, rank: number | null, isGeneralSpoiler: boolean | null, isMediaSpoiler: boolean | null, isAdult: boolean | null, userId: number | null };\n\nexport type MediaTagBasicFragment = { id: number, name: string, description: string | null, category: string | null, rank: number | null };\n\nexport type MediaTrailerFragment = { id: string | null, site: string | null, thumbnail: string | null };\n\nexport type MediaListFragment = { id: number, mediaId: number, userId: number, status: MediaListStatus | null, score: number | null, progress: number | null, progressVolumes: number | null, repeat: number | null, priority: number | null, private: boolean | null, notes: string | null, hiddenFromStatusLists: boolean | null, customLists: unknown, advancedScores: unknown, updatedAt: number | null, createdAt: number | null, startedAt: { year: number | null, month: number | null, day: number | null } | null, completedAt: { year: number | null, month: number | null, day: number | null } | null, media: { id: number, idMal: number | null, bannerImage: string | null, description: string | null, format: MediaFormat | null, status: MediaStatus | null, type: MediaType | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, genres: Array<string | null> | null, averageScore: number | null, meanScore: number | null, popularity: number | null, favourites: number | null, trending: number | null, source: MediaSource | null, countryOfOrigin: unknown, isAdult: boolean | null, isLicensed: boolean | null, isLocked: boolean | null, isFavourite: boolean, isFavouriteBlocked: boolean, hashtag: string | null, synonyms: Array<string | null> | null, season: MediaSeason | null, seasonYear: number | null, siteUrl: string | null, updatedAt: number | null, autoCreateForumThread: boolean | null, isRecommendationBlocked: boolean | null, isReviewBlocked: boolean | null, modNotes: string | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null } | null };\n\nexport type RecommendationFragment = { id: number, rating: number | null, userRating: RecommendationRating | null, user: { id: number, name: string } | null, media: { id: number, title: { userPreferred: string | null } | null } | null, mediaRecommendation: { id: number, title: { userPreferred: string | null } | null } | null };\n\nexport type ReviewFragment = { id: number, userId: number, mediaId: number, mediaType: MediaType | null, summary: string | null, body: string | null, rating: number | null, ratingAmount: number | null, score: number | null, private: boolean | null, siteUrl: string | null, createdAt: number, updatedAt: number, userRating: ReviewRating | null, user: { id: number, name: string } | null, media: { id: number, title: { userPreferred: string | null } | null } | null };\n\nexport type StaffFragment = { id: number, description: string | null, primaryOccupations: Array<string | null> | null, gender: string | null, bloodType: string | null, homeTown: string | null, languageV2: string | null, yearsActive: Array<number | null> | null, favourites: number | null, isFavourite: boolean, isFavouriteBlocked: boolean, age: number | null, siteUrl: string | null, name: { full: string | null, native: string | null, first: string | null, middle: string | null, last: string | null, userPreferred: string | null } | null, image: { large: string | null, medium: string | null } | null, dateOfBirth: { year: number | null, month: number | null, day: number | null } | null, dateOfDeath: { year: number | null, month: number | null, day: number | null } | null };\n\nexport type StudioFragment = { id: number, name: string, isAnimationStudio: boolean, favourites: number | null, isFavourite: boolean, siteUrl: string | null, media: { pageInfo: { total: number | null, perPage: number | null, currentPage: number | null, lastPage: number | null, hasNextPage: boolean | null } | null } | null };\n\nexport type UserFragment = { id: number, name: string, about: string | null, bannerImage: string | null, donatorTier: number | null, donatorBadge: string | null, isFollowing: boolean | null, isFollower: boolean | null, isBlocked: boolean | null, createdAt: number | null, updatedAt: number | null, unreadNotificationCount: number | null, bans: unknown, moderatorRoles: Array<ModRole | null> | null, moderatorStatus: string | null, siteUrl: string | null, avatar: { large: string | null, medium: string | null } | null, options: { titleLanguage: UserTitleLanguage | null, displayAdultContent: boolean | null, airingNotifications: boolean | null, profileColor: string | null, timezone: string | null, activityMergeTime: number | null, staffNameLanguage: UserStaffNameLanguage | null, restrictMessagesToFollowing: boolean | null, notificationOptions: Array<{ type: NotificationType | null, enabled: boolean | null } | null> | null, disabledListActivity: Array<{ disabled: boolean | null, type: MediaListStatus | null } | null> | null } | null, mediaListOptions: { scoreFormat: ScoreFormat | null, rowOrder: string | null, useLegacyLists: boolean | null, sharedTheme: unknown, sharedThemeEnabled: boolean | null, animeList: { sectionOrder: Array<string | null> | null, splitCompletedSectionByFormat: boolean | null, customLists: Array<string | null> | null, advancedScoring: Array<string | null> | null, advancedScoringEnabled: boolean | null } | null, mangaList: { sectionOrder: Array<string | null> | null, splitCompletedSectionByFormat: boolean | null, customLists: Array<string | null> | null, advancedScoring: Array<string | null> | null, advancedScoringEnabled: boolean | null } | null } | null, favourites: { anime: { nodes: Array<{ id: number, title: { romaji: string | null } | null } | null> | null } | null, manga: { nodes: Array<{ id: number, title: { romaji: string | null } | null } | null> | null } | null, characters: { nodes: Array<{ id: number, name: { full: string | null } | null } | null> | null } | null, staff: { nodes: Array<{ id: number, name: { full: string | null } | null } | null> | null } | null, studios: { nodes: Array<{ id: number, name: string } | null> | null } | null } | null, statistics: { anime: { count: number, meanScore: number, standardDeviation: number, minutesWatched: number, episodesWatched: number, chaptersRead: number, volumesRead: number, scores: Array<{ score: number | null, count: number, meanScore: number, minutesWatched: number } | null> | null, lengths: Array<{ length: string | null, count: number, meanScore: number, minutesWatched: number } | null> | null, formats: Array<{ format: MediaFormat | null, count: number, meanScore: number, minutesWatched: number } | null> | null, statuses: Array<{ status: MediaListStatus | null, count: number, meanScore: number, minutesWatched: number } | null> | null, releaseYears: Array<{ releaseYear: number | null, count: number, meanScore: number, minutesWatched: number } | null> | null, startYears: Array<{ startYear: number | null, count: number, meanScore: number, minutesWatched: number } | null> | null, genres: Array<{ genre: string | null, count: number, meanScore: number, minutesWatched: number } | null> | null, tags: Array<{ count: number, meanScore: number, minutesWatched: number, tag: { name: string } | null } | null> | null, countries: Array<{ country: unknown, count: number, meanScore: number, minutesWatched: number } | null> | null, voiceActors: Array<{ count: number, meanScore: number, minutesWatched: number, characterIds: Array<number | null>, mediaIds: Array<number | null>, voiceActor: { id: number, name: { full: string | null } | null } | null } | null> | null, staff: Array<{ count: number, meanScore: number, minutesWatched: number, mediaIds: Array<number | null>, staff: { id: number, name: { full: string | null } | null } | null } | null> | null, studios: Array<{ count: number, meanScore: number, minutesWatched: number, mediaIds: Array<number | null>, studio: { id: number, name: string } | null } | null> | null } | null, manga: { count: number, meanScore: number, standardDeviation: number, chaptersRead: number, volumesRead: number, scores: Array<{ score: number | null, count: number, meanScore: number, chaptersRead: number } | null> | null, lengths: Array<{ length: string | null, count: number, meanScore: number, chaptersRead: number } | null> | null, formats: Array<{ format: MediaFormat | null, count: number, meanScore: number, chaptersRead: number } | null> | null, statuses: Array<{ status: MediaListStatus | null, count: number, meanScore: number, chaptersRead: number } | null> | null, releaseYears: Array<{ releaseYear: number | null, count: number, meanScore: number, chaptersRead: number } | null> | null, startYears: Array<{ startYear: number | null, count: number, meanScore: number, chaptersRead: number } | null> | null, genres: Array<{ genre: string | null, count: number, meanScore: number, chaptersRead: number } | null> | null, tags: Array<{ count: number, meanScore: number, chaptersRead: number, tag: { name: string } | null } | null> | null, countries: Array<{ country: unknown, count: number, meanScore: number, chaptersRead: number } | null> | null, staff: Array<{ count: number, meanScore: number, chaptersRead: number, mediaIds: Array<number | null>, staff: { id: number, name: { full: string | null } | null } | null } | null> | null, studios: Array<{ count: number, meanScore: number, chaptersRead: number, mediaIds: Array<number | null>, studio: { id: number, name: string } | null } | null> | null } | null } | null, stats: { watchedTime: number | null, chaptersRead: number | null } | null, previousNames: Array<{ name: string | null, createdAt: number | null, updatedAt: number | null } | null> | null };\n\nexport type GetAnimeBrowseQueryVariables = Exact<{\n  genre: string | null | undefined;\n  format: MediaFormat | null | undefined;\n  status: MediaStatus | null | undefined;\n  seasonYear: number | null | undefined;\n  page?: number | null | undefined;\n  perPage?: number | null | undefined;\n}>;\n\n\nexport type GetAnimeBrowseQuery = { Page: { pageInfo: { hasNextPage: boolean | null, currentPage: number | null, total: number | null } | null, media: Array<{ id: number, bannerImage: string | null, genres: Array<string | null> | null, format: MediaFormat | null, status: MediaStatus | null, seasonYear: number | null, averageScore: number | null, episodes: number | null, title: { english: string | null, romaji: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { extraLarge: string | null, large: string | null } | null } | null> | null } | null };\n\nexport type GetAnimeByIdQueryVariables = Exact<{\n  id: number;\n}>;\n\n\nexport type GetAnimeByIdQuery = { Media: { id: number, idMal: number | null, bannerImage: string | null, description: string | null, format: MediaFormat | null, status: MediaStatus | null, type: MediaType | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, genres: Array<string | null> | null, averageScore: number | null, meanScore: number | null, popularity: number | null, favourites: number | null, trending: number | null, source: MediaSource | null, countryOfOrigin: unknown, isAdult: boolean | null, isLicensed: boolean | null, isLocked: boolean | null, isFavourite: boolean, isFavouriteBlocked: boolean, hashtag: string | null, synonyms: Array<string | null> | null, season: MediaSeason | null, seasonYear: number | null, siteUrl: string | null, updatedAt: number | null, autoCreateForumThread: boolean | null, isRecommendationBlocked: boolean | null, isReviewBlocked: boolean | null, modNotes: string | null, nextAiringEpisode: { id: number, airingAt: number, timeUntilAiring: number, episode: number, mediaId: number } | null, characters: { edges: Array<{ role: CharacterRole | null, node: { id: number, description: string | null, gender: string | null, age: string | null, bloodType: string | null, isFavourite: boolean, isFavouriteBlocked: boolean, favourites: number | null, siteUrl: string | null, name: { alternative: Array<string | null> | null, alternativeSpoiler: Array<string | null> | null, first: string | null, full: string | null, last: string | null, middle: string | null, native: string | null, userPreferred: string | null } | null, image: { large: string | null, medium: string | null } | null, dateOfBirth: { year: number | null, month: number | null, day: number | null } | null } | null } | null> | null } | null, staff: { edges: Array<{ role: string | null, node: { id: number, description: string | null, primaryOccupations: Array<string | null> | null, gender: string | null, bloodType: string | null, homeTown: string | null, languageV2: string | null, yearsActive: Array<number | null> | null, favourites: number | null, isFavourite: boolean, isFavouriteBlocked: boolean, age: number | null, siteUrl: string | null, name: { full: string | null, native: string | null, first: string | null, middle: string | null, last: string | null, userPreferred: string | null } | null, image: { large: string | null, medium: string | null } | null, dateOfBirth: { year: number | null, month: number | null, day: number | null } | null, dateOfDeath: { year: number | null, month: number | null, day: number | null } | null } | null } | null> | null } | null, studios: { edges: Array<{ node: { id: number, name: string, isAnimationStudio: boolean, favourites: number | null, isFavourite: boolean, siteUrl: string | null, media: { pageInfo: { total: number | null, perPage: number | null, currentPage: number | null, lastPage: number | null, hasNextPage: boolean | null } | null } | null } | null } | null> | null } | null, tags: Array<{ id: number, name: string, description: string | null, category: string | null, rank: number | null, isGeneralSpoiler: boolean | null, isMediaSpoiler: boolean | null, isAdult: boolean | null, userId: number | null } | null> | null, rankings: Array<{ id: number, rank: number, type: MediaRankType, format: MediaFormat, year: number | null, season: MediaSeason | null, allTime: boolean | null, context: string } | null> | null, externalLinks: Array<{ id: number, url: string | null, site: string, siteId: number | null, type: ExternalLinkType | null, language: string | null, color: string | null, icon: string | null, notes: string | null, isDisabled: boolean | null } | null> | null, stats: { scoreDistribution: Array<{ score: number | null, amount: number | null } | null> | null, statusDistribution: Array<{ status: MediaListStatus | null, amount: number | null } | null> | null, airingProgression: Array<{ episode: number | null, score: number | null, watching: number | null } | null> | null } | null, trailer: { id: string | null, site: string | null, thumbnail: string | null } | null, reviews: { pageInfo: { total: number | null } | null } | null, recommendations: { pageInfo: { total: number | null } | null } | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null } | null };\n\nexport type GetAnimeByTitleQueryVariables = Exact<{\n  title: string;\n  page?: number | null | undefined;\n  perPage?: number | null | undefined;\n}>;\n\n\nexport type GetAnimeByTitleQuery = { Page: { pageInfo: { hasNextPage: boolean | null, currentPage: number | null } | null, media: Array<{ id: number, idMal: number | null, bannerImage: string | null, description: string | null, format: MediaFormat | null, status: MediaStatus | null, type: MediaType | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, genres: Array<string | null> | null, averageScore: number | null, meanScore: number | null, popularity: number | null, favourites: number | null, trending: number | null, source: MediaSource | null, countryOfOrigin: unknown, isAdult: boolean | null, isLicensed: boolean | null, isLocked: boolean | null, isFavourite: boolean, isFavouriteBlocked: boolean, hashtag: string | null, synonyms: Array<string | null> | null, season: MediaSeason | null, seasonYear: number | null, siteUrl: string | null, updatedAt: number | null, autoCreateForumThread: boolean | null, isRecommendationBlocked: boolean | null, isReviewBlocked: boolean | null, modNotes: string | null, nextAiringEpisode: { id: number, airingAt: number, timeUntilAiring: number, episode: number, mediaId: number } | null, tags: Array<{ id: number, name: string, description: string | null, category: string | null, rank: number | null } | null> | null, externalLinks: Array<{ id: number, url: string | null, site: string, siteId: number | null, type: ExternalLinkType | null } | null> | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null } | null> | null } | null };\n\nexport type GetAnimeCharactersQueryVariables = Exact<{\n  id: number | null | undefined;\n}>;\n\n\nexport type GetAnimeCharactersQuery = { Media: { characters: { edges: Array<{ role: CharacterRole | null, node: { id: number, description: string | null, gender: string | null, age: string | null, bloodType: string | null, isFavourite: boolean, isFavouriteBlocked: boolean, favourites: number | null, siteUrl: string | null, name: { alternative: Array<string | null> | null, alternativeSpoiler: Array<string | null> | null, first: string | null, full: string | null, last: string | null, middle: string | null, native: string | null, userPreferred: string | null } | null, image: { large: string | null, medium: string | null } | null, dateOfBirth: { year: number | null, month: number | null, day: number | null } | null } | null } | null> | null } | null } | null };\n\nexport type GetAnimeListByGenreQueryVariables = Exact<{\n  genre: string;\n  page?: number | null | undefined;\n  perPage?: number | null | undefined;\n}>;\n\n\nexport type GetAnimeListByGenreQuery = { Page: { pageInfo: { hasNextPage: boolean | null } | null, media: Array<{ id: number, idMal: number | null, bannerImage: string | null, description: string | null, format: MediaFormat | null, status: MediaStatus | null, type: MediaType | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, genres: Array<string | null> | null, averageScore: number | null, meanScore: number | null, popularity: number | null, favourites: number | null, trending: number | null, source: MediaSource | null, countryOfOrigin: unknown, isAdult: boolean | null, isLicensed: boolean | null, isLocked: boolean | null, isFavourite: boolean, isFavouriteBlocked: boolean, hashtag: string | null, synonyms: Array<string | null> | null, season: MediaSeason | null, seasonYear: number | null, siteUrl: string | null, updatedAt: number | null, autoCreateForumThread: boolean | null, isRecommendationBlocked: boolean | null, isReviewBlocked: boolean | null, modNotes: string | null, nextAiringEpisode: { id: number, airingAt: number, timeUntilAiring: number, episode: number, mediaId: number } | null, tags: Array<{ id: number, name: string, description: string | null, category: string | null, rank: number | null } | null> | null, externalLinks: Array<{ id: number, url: string | null, site: string, siteId: number | null, type: ExternalLinkType | null } | null> | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null } | null> | null } | null };\n\nexport type GetAnimePopularQueryVariables = Exact<{\n  page?: number | null | undefined;\n  perPage?: number | null | undefined;\n}>;\n\n\nexport type GetAnimePopularQuery = { Page: { pageInfo: { hasNextPage: boolean | null, currentPage: number | null } | null, media: Array<{ id: number, idMal: number | null, bannerImage: string | null, description: string | null, format: MediaFormat | null, status: MediaStatus | null, type: MediaType | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, genres: Array<string | null> | null, averageScore: number | null, meanScore: number | null, popularity: number | null, favourites: number | null, trending: number | null, source: MediaSource | null, countryOfOrigin: unknown, isAdult: boolean | null, isLicensed: boolean | null, isLocked: boolean | null, isFavourite: boolean, isFavouriteBlocked: boolean, hashtag: string | null, synonyms: Array<string | null> | null, season: MediaSeason | null, seasonYear: number | null, siteUrl: string | null, updatedAt: number | null, autoCreateForumThread: boolean | null, isRecommendationBlocked: boolean | null, isReviewBlocked: boolean | null, modNotes: string | null, nextAiringEpisode: { id: number, airingAt: number, timeUntilAiring: number, episode: number, mediaId: number } | null, tags: Array<{ id: number, name: string, description: string | null, category: string | null, rank: number | null } | null> | null, externalLinks: Array<{ id: number, url: string | null, site: string, siteId: number | null, type: ExternalLinkType | null } | null> | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null } | null> | null } | null };\n\nexport type GetAnimeRecommendationsQueryVariables = Exact<{\n  id: number | null | undefined;\n}>;\n\n\nexport type GetAnimeRecommendationsQuery = { Media: { recommendations: { edges: Array<{ node: { media: { id: number, idMal: number | null, bannerImage: string | null, description: string | null, format: MediaFormat | null, status: MediaStatus | null, type: MediaType | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, genres: Array<string | null> | null, averageScore: number | null, meanScore: number | null, popularity: number | null, favourites: number | null, trending: number | null, source: MediaSource | null, countryOfOrigin: unknown, isAdult: boolean | null, isLicensed: boolean | null, isLocked: boolean | null, isFavourite: boolean, isFavouriteBlocked: boolean, hashtag: string | null, synonyms: Array<string | null> | null, season: MediaSeason | null, seasonYear: number | null, siteUrl: string | null, updatedAt: number | null, autoCreateForumThread: boolean | null, isRecommendationBlocked: boolean | null, isReviewBlocked: boolean | null, modNotes: string | null, nextAiringEpisode: { id: number, airingAt: number, timeUntilAiring: number, episode: number, mediaId: number } | null, tags: Array<{ id: number, name: string, description: string | null, category: string | null, rank: number | null } | null> | null, externalLinks: Array<{ id: number, url: string | null, site: string, siteId: number | null, type: ExternalLinkType | null } | null> | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null } | null } | null } | null> | null } | null } | null };\n\nexport type GetAnimeRelationsQueryVariables = Exact<{\n  id: number | null | undefined;\n}>;\n\n\nexport type GetAnimeRelationsQuery = { Media: { relations: { edges: Array<{ relationType: MediaRelation | null, node: { id: number, idMal: number | null, bannerImage: string | null, description: string | null, format: MediaFormat | null, status: MediaStatus | null, type: MediaType | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, genres: Array<string | null> | null, averageScore: number | null, meanScore: number | null, popularity: number | null, favourites: number | null, trending: number | null, source: MediaSource | null, countryOfOrigin: unknown, isAdult: boolean | null, isLicensed: boolean | null, isLocked: boolean | null, isFavourite: boolean, isFavouriteBlocked: boolean, hashtag: string | null, synonyms: Array<string | null> | null, season: MediaSeason | null, seasonYear: number | null, siteUrl: string | null, updatedAt: number | null, autoCreateForumThread: boolean | null, isRecommendationBlocked: boolean | null, isReviewBlocked: boolean | null, modNotes: string | null, nextAiringEpisode: { id: number, airingAt: number, timeUntilAiring: number, episode: number, mediaId: number } | null, tags: Array<{ id: number, name: string, description: string | null, category: string | null, rank: number | null } | null> | null, externalLinks: Array<{ id: number, url: string | null, site: string, siteId: number | null, type: ExternalLinkType | null } | null> | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null } | null } | null> | null } | null } | null };\n\nexport type GetAnimeStaffQueryVariables = Exact<{\n  id: number | null | undefined;\n}>;\n\n\nexport type GetAnimeStaffQuery = { Media: { staff: { edges: Array<{ role: string | null, node: { id: number, description: string | null, primaryOccupations: Array<string | null> | null, gender: string | null, bloodType: string | null, homeTown: string | null, languageV2: string | null, yearsActive: Array<number | null> | null, favourites: number | null, isFavourite: boolean, isFavouriteBlocked: boolean, age: number | null, siteUrl: string | null, name: { full: string | null, native: string | null, first: string | null, middle: string | null, last: string | null, userPreferred: string | null } | null, image: { large: string | null, medium: string | null } | null, dateOfBirth: { year: number | null, month: number | null, day: number | null } | null, dateOfDeath: { year: number | null, month: number | null, day: number | null } | null } | null } | null> | null } | null } | null };\n\nexport type GetAnimeTrendingQueryVariables = Exact<{\n  page?: number | null | undefined;\n  perPage?: number | null | undefined;\n}>;\n\n\nexport type GetAnimeTrendingQuery = { Page: { pageInfo: { hasNextPage: boolean | null, currentPage: number | null } | null, media: Array<{ id: number, idMal: number | null, bannerImage: string | null, description: string | null, format: MediaFormat | null, status: MediaStatus | null, type: MediaType | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, genres: Array<string | null> | null, averageScore: number | null, meanScore: number | null, popularity: number | null, favourites: number | null, trending: number | null, source: MediaSource | null, countryOfOrigin: unknown, isAdult: boolean | null, isLicensed: boolean | null, isLocked: boolean | null, isFavourite: boolean, isFavouriteBlocked: boolean, hashtag: string | null, synonyms: Array<string | null> | null, season: MediaSeason | null, seasonYear: number | null, siteUrl: string | null, updatedAt: number | null, autoCreateForumThread: boolean | null, isRecommendationBlocked: boolean | null, isReviewBlocked: boolean | null, modNotes: string | null, nextAiringEpisode: { id: number, airingAt: number, timeUntilAiring: number, episode: number, mediaId: number } | null, tags: Array<{ id: number, name: string, description: string | null, category: string | null, rank: number | null } | null> | null, externalLinks: Array<{ id: number, url: string | null, site: string, siteId: number | null, type: ExternalLinkType | null } | null> | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null } | null> | null } | null };\n\nexport type GetSeasonalAnimeQueryVariables = Exact<{\n  season: MediaSeason | null | undefined;\n  seasonYear: number | null | undefined;\n  page: number | null | undefined;\n  perPage: number | null | undefined;\n}>;\n\n\nexport type GetSeasonalAnimeQuery = { Page: { pageInfo: { hasNextPage: boolean | null, currentPage: number | null } | null, media: Array<{ id: number, bannerImage: string | null, genres: Array<string | null> | null, seasonYear: number | null, season: MediaSeason | null, title: { english: string | null, romaji: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { extraLarge: string | null, large: string | null } | null } | null> | null } | null };\n\nexport type SearchAnimeQueryVariables = Exact<{\n  query: string | null | undefined;\n  page: number | null | undefined;\n  perPage: number | null | undefined;\n}>;\n\n\nexport type SearchAnimeQuery = { Page: { pageInfo: { hasNextPage: boolean | null, currentPage: number | null } | null, media: Array<{ id: number, idMal: number | null, bannerImage: string | null, description: string | null, format: MediaFormat | null, status: MediaStatus | null, type: MediaType | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, genres: Array<string | null> | null, averageScore: number | null, meanScore: number | null, popularity: number | null, favourites: number | null, trending: number | null, source: MediaSource | null, countryOfOrigin: unknown, isAdult: boolean | null, isLicensed: boolean | null, isLocked: boolean | null, isFavourite: boolean, isFavouriteBlocked: boolean, hashtag: string | null, synonyms: Array<string | null> | null, season: MediaSeason | null, seasonYear: number | null, siteUrl: string | null, updatedAt: number | null, autoCreateForumThread: boolean | null, isRecommendationBlocked: boolean | null, isReviewBlocked: boolean | null, modNotes: string | null, nextAiringEpisode: { id: number, airingAt: number, timeUntilAiring: number, episode: number, mediaId: number } | null, tags: Array<{ id: number, name: string, description: string | null, category: string | null, rank: number | null } | null> | null, externalLinks: Array<{ id: number, url: string | null, site: string, siteId: number | null, type: ExternalLinkType | null } | null> | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null } | null> | null } | null };\n\nexport type ToggleFavoriteAnimeMutationVariables = Exact<{\n  animeId: number;\n}>;\n\n\nexport type ToggleFavoriteAnimeMutation = { ToggleFavourite: { anime: { nodes: Array<{ id: number } | null> | null } | null } | null };\n\nexport type CharactersBirthdayTodayQueryVariables = Exact<{\n  page: number | null | undefined;\n  perPage: number | null | undefined;\n}>;\n\n\nexport type CharactersBirthdayTodayQuery = { Page: { pageInfo: { hasNextPage: boolean | null, currentPage: number | null } | null, characters: Array<{ id: number, description: string | null, gender: string | null, age: string | null, bloodType: string | null, isFavourite: boolean, isFavouriteBlocked: boolean, favourites: number | null, siteUrl: string | null, name: { alternative: Array<string | null> | null, alternativeSpoiler: Array<string | null> | null, first: string | null, full: string | null, last: string | null, middle: string | null, native: string | null, userPreferred: string | null } | null, image: { large: string | null, medium: string | null } | null, dateOfBirth: { year: number | null, month: number | null, day: number | null } | null } | null> | null } | null };\n\nexport type GetCharacterByIdQueryVariables = Exact<{\n  id: number;\n}>;\n\n\nexport type GetCharacterByIdQuery = { Character: { isFavourite: boolean, favourites: number | null, id: number, description: string | null, gender: string | null, age: string | null, bloodType: string | null, isFavouriteBlocked: boolean, siteUrl: string | null, media: { nodes: Array<{ id: number, type: MediaType | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null } | null> | null } | null, name: { alternative: Array<string | null> | null, alternativeSpoiler: Array<string | null> | null, first: string | null, full: string | null, last: string | null, middle: string | null, native: string | null, userPreferred: string | null } | null, image: { large: string | null, medium: string | null } | null, dateOfBirth: { year: number | null, month: number | null, day: number | null } | null } | null };\n\nexport type ToggleFavoriteCharacterMutationVariables = Exact<{\n  charID: number;\n}>;\n\n\nexport type ToggleFavoriteCharacterMutation = { ToggleFavourite: { characters: { nodes: Array<{ id: number } | null> | null } | null } | null };\n\nexport type GetMangaBrowseQueryVariables = Exact<{\n  genre: string | null | undefined;\n  format: MediaFormat | null | undefined;\n  status: MediaStatus | null | undefined;\n  startDate: unknown;\n  page?: number | null | undefined;\n  perPage?: number | null | undefined;\n}>;\n\n\nexport type GetMangaBrowseQuery = { Page: { pageInfo: { hasNextPage: boolean | null, currentPage: number | null, total: number | null } | null, media: Array<{ id: number, bannerImage: string | null, genres: Array<string | null> | null, format: MediaFormat | null, status: MediaStatus | null, averageScore: number | null, chapters: number | null, volumes: number | null, title: { english: string | null, romaji: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { extraLarge: string | null, large: string | null } | null, startDate: { year: number | null } | null } | null> | null } | null };\n\nexport type GetMangaByIdQueryVariables = Exact<{\n  id: number;\n}>;\n\n\nexport type GetMangaByIdQuery = { Media: { id: number, idMal: number | null, bannerImage: string | null, description: string | null, format: MediaFormat | null, status: MediaStatus | null, type: MediaType | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, genres: Array<string | null> | null, averageScore: number | null, meanScore: number | null, popularity: number | null, favourites: number | null, trending: number | null, source: MediaSource | null, countryOfOrigin: unknown, isAdult: boolean | null, isLicensed: boolean | null, isLocked: boolean | null, isFavourite: boolean, isFavouriteBlocked: boolean, hashtag: string | null, synonyms: Array<string | null> | null, season: MediaSeason | null, seasonYear: number | null, siteUrl: string | null, updatedAt: number | null, autoCreateForumThread: boolean | null, isRecommendationBlocked: boolean | null, isReviewBlocked: boolean | null, modNotes: string | null, nextAiringEpisode: { id: number, airingAt: number, timeUntilAiring: number, episode: number, mediaId: number } | null, tags: Array<{ id: number, name: string, description: string | null, category: string | null, rank: number | null } | null> | null, externalLinks: Array<{ id: number, url: string | null, site: string, siteId: number | null, type: ExternalLinkType | null } | null> | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null } | null };\n\nexport type GetMangaByTitleQueryVariables = Exact<{\n  title: string;\n  page?: number | null | undefined;\n  perPage?: number | null | undefined;\n}>;\n\n\nexport type GetMangaByTitleQuery = { Page: { pageInfo: { hasNextPage: boolean | null, currentPage: number | null } | null, media: Array<{ id: number, idMal: number | null, bannerImage: string | null, description: string | null, format: MediaFormat | null, status: MediaStatus | null, type: MediaType | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, genres: Array<string | null> | null, averageScore: number | null, meanScore: number | null, popularity: number | null, favourites: number | null, trending: number | null, source: MediaSource | null, countryOfOrigin: unknown, isAdult: boolean | null, isLicensed: boolean | null, isLocked: boolean | null, isFavourite: boolean, isFavouriteBlocked: boolean, hashtag: string | null, synonyms: Array<string | null> | null, season: MediaSeason | null, seasonYear: number | null, siteUrl: string | null, updatedAt: number | null, autoCreateForumThread: boolean | null, isRecommendationBlocked: boolean | null, isReviewBlocked: boolean | null, modNotes: string | null, nextAiringEpisode: { id: number, airingAt: number, timeUntilAiring: number, episode: number, mediaId: number } | null, tags: Array<{ id: number, name: string, description: string | null, category: string | null, rank: number | null } | null> | null, externalLinks: Array<{ id: number, url: string | null, site: string, siteId: number | null, type: ExternalLinkType | null } | null> | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null } | null> | null } | null };\n\nexport type GetMangaCharactersQueryVariables = Exact<{\n  id: number | null | undefined;\n}>;\n\n\nexport type GetMangaCharactersQuery = { Media: { characters: { edges: Array<{ role: CharacterRole | null, node: { id: number, description: string | null, gender: string | null, age: string | null, bloodType: string | null, isFavourite: boolean, isFavouriteBlocked: boolean, favourites: number | null, siteUrl: string | null, name: { alternative: Array<string | null> | null, alternativeSpoiler: Array<string | null> | null, first: string | null, full: string | null, last: string | null, middle: string | null, native: string | null, userPreferred: string | null } | null, image: { large: string | null, medium: string | null } | null, dateOfBirth: { year: number | null, month: number | null, day: number | null } | null } | null } | null> | null } | null } | null };\n\nexport type GetMangaListByGenreQueryVariables = Exact<{\n  genre: string | null | undefined;\n  page?: number | null | undefined;\n  perPage?: number | null | undefined;\n}>;\n\n\nexport type GetMangaListByGenreQuery = { Page: { pageInfo: { hasNextPage: boolean | null } | null, media: Array<{ id: number, idMal: number | null, bannerImage: string | null, description: string | null, format: MediaFormat | null, status: MediaStatus | null, type: MediaType | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, genres: Array<string | null> | null, averageScore: number | null, meanScore: number | null, popularity: number | null, favourites: number | null, trending: number | null, source: MediaSource | null, countryOfOrigin: unknown, isAdult: boolean | null, isLicensed: boolean | null, isLocked: boolean | null, isFavourite: boolean, isFavouriteBlocked: boolean, hashtag: string | null, synonyms: Array<string | null> | null, season: MediaSeason | null, seasonYear: number | null, siteUrl: string | null, updatedAt: number | null, autoCreateForumThread: boolean | null, isRecommendationBlocked: boolean | null, isReviewBlocked: boolean | null, modNotes: string | null, nextAiringEpisode: { id: number, airingAt: number, timeUntilAiring: number, episode: number, mediaId: number } | null, tags: Array<{ id: number, name: string, description: string | null, category: string | null, rank: number | null } | null> | null, externalLinks: Array<{ id: number, url: string | null, site: string, siteId: number | null, type: ExternalLinkType | null } | null> | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null } | null> | null } | null };\n\nexport type GetMangaPopularQueryVariables = Exact<{\n  page?: number | null | undefined;\n  perPage?: number | null | undefined;\n}>;\n\n\nexport type GetMangaPopularQuery = { Page: { pageInfo: { hasNextPage: boolean | null, currentPage: number | null } | null, media: Array<{ id: number, idMal: number | null, bannerImage: string | null, description: string | null, format: MediaFormat | null, status: MediaStatus | null, type: MediaType | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, genres: Array<string | null> | null, averageScore: number | null, meanScore: number | null, popularity: number | null, favourites: number | null, trending: number | null, source: MediaSource | null, countryOfOrigin: unknown, isAdult: boolean | null, isLicensed: boolean | null, isLocked: boolean | null, isFavourite: boolean, isFavouriteBlocked: boolean, hashtag: string | null, synonyms: Array<string | null> | null, season: MediaSeason | null, seasonYear: number | null, siteUrl: string | null, updatedAt: number | null, autoCreateForumThread: boolean | null, isRecommendationBlocked: boolean | null, isReviewBlocked: boolean | null, modNotes: string | null, nextAiringEpisode: { id: number, airingAt: number, timeUntilAiring: number, episode: number, mediaId: number } | null, tags: Array<{ id: number, name: string, description: string | null, category: string | null, rank: number | null } | null> | null, externalLinks: Array<{ id: number, url: string | null, site: string, siteId: number | null, type: ExternalLinkType | null } | null> | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null } | null> | null } | null };\n\nexport type GetMangaRecommendationsQueryVariables = Exact<{\n  id: number | null | undefined;\n}>;\n\n\nexport type GetMangaRecommendationsQuery = { Media: { recommendations: { edges: Array<{ node: { media: { id: number, idMal: number | null, bannerImage: string | null, description: string | null, format: MediaFormat | null, status: MediaStatus | null, type: MediaType | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, genres: Array<string | null> | null, averageScore: number | null, meanScore: number | null, popularity: number | null, favourites: number | null, trending: number | null, source: MediaSource | null, countryOfOrigin: unknown, isAdult: boolean | null, isLicensed: boolean | null, isLocked: boolean | null, isFavourite: boolean, isFavouriteBlocked: boolean, hashtag: string | null, synonyms: Array<string | null> | null, season: MediaSeason | null, seasonYear: number | null, siteUrl: string | null, updatedAt: number | null, autoCreateForumThread: boolean | null, isRecommendationBlocked: boolean | null, isReviewBlocked: boolean | null, modNotes: string | null, nextAiringEpisode: { id: number, airingAt: number, timeUntilAiring: number, episode: number, mediaId: number } | null, tags: Array<{ id: number, name: string, description: string | null, category: string | null, rank: number | null } | null> | null, externalLinks: Array<{ id: number, url: string | null, site: string, siteId: number | null, type: ExternalLinkType | null } | null> | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null } | null } | null } | null> | null } | null } | null };\n\nexport type GetMangaRelationsQueryVariables = Exact<{\n  id: number | null | undefined;\n}>;\n\n\nexport type GetMangaRelationsQuery = { Media: { relations: { edges: Array<{ relationType: MediaRelation | null, node: { id: number, idMal: number | null, bannerImage: string | null, description: string | null, format: MediaFormat | null, status: MediaStatus | null, type: MediaType | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, genres: Array<string | null> | null, averageScore: number | null, meanScore: number | null, popularity: number | null, favourites: number | null, trending: number | null, source: MediaSource | null, countryOfOrigin: unknown, isAdult: boolean | null, isLicensed: boolean | null, isLocked: boolean | null, isFavourite: boolean, isFavouriteBlocked: boolean, hashtag: string | null, synonyms: Array<string | null> | null, season: MediaSeason | null, seasonYear: number | null, siteUrl: string | null, updatedAt: number | null, autoCreateForumThread: boolean | null, isRecommendationBlocked: boolean | null, isReviewBlocked: boolean | null, modNotes: string | null, nextAiringEpisode: { id: number, airingAt: number, timeUntilAiring: number, episode: number, mediaId: number } | null, tags: Array<{ id: number, name: string, description: string | null, category: string | null, rank: number | null } | null> | null, externalLinks: Array<{ id: number, url: string | null, site: string, siteId: number | null, type: ExternalLinkType | null } | null> | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null } | null } | null> | null } | null } | null };\n\nexport type GetMangaStaffQueryVariables = Exact<{\n  id: number | null | undefined;\n}>;\n\n\nexport type GetMangaStaffQuery = { Media: { staff: { edges: Array<{ role: string | null, node: { id: number, description: string | null, primaryOccupations: Array<string | null> | null, gender: string | null, bloodType: string | null, homeTown: string | null, languageV2: string | null, yearsActive: Array<number | null> | null, favourites: number | null, isFavourite: boolean, isFavouriteBlocked: boolean, age: number | null, siteUrl: string | null, name: { full: string | null, native: string | null, first: string | null, middle: string | null, last: string | null, userPreferred: string | null } | null, image: { large: string | null, medium: string | null } | null, dateOfBirth: { year: number | null, month: number | null, day: number | null } | null, dateOfDeath: { year: number | null, month: number | null, day: number | null } | null } | null } | null> | null } | null } | null };\n\nexport type GetMangaTrendingQueryVariables = Exact<{\n  page?: number | null | undefined;\n  perPage?: number | null | undefined;\n}>;\n\n\nexport type GetMangaTrendingQuery = { Page: { pageInfo: { hasNextPage: boolean | null, currentPage: number | null } | null, media: Array<{ id: number, idMal: number | null, bannerImage: string | null, description: string | null, format: MediaFormat | null, status: MediaStatus | null, type: MediaType | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, genres: Array<string | null> | null, averageScore: number | null, meanScore: number | null, popularity: number | null, favourites: number | null, trending: number | null, source: MediaSource | null, countryOfOrigin: unknown, isAdult: boolean | null, isLicensed: boolean | null, isLocked: boolean | null, isFavourite: boolean, isFavouriteBlocked: boolean, hashtag: string | null, synonyms: Array<string | null> | null, season: MediaSeason | null, seasonYear: number | null, siteUrl: string | null, updatedAt: number | null, autoCreateForumThread: boolean | null, isRecommendationBlocked: boolean | null, isReviewBlocked: boolean | null, modNotes: string | null, nextAiringEpisode: { id: number, airingAt: number, timeUntilAiring: number, episode: number, mediaId: number } | null, tags: Array<{ id: number, name: string, description: string | null, category: string | null, rank: number | null } | null> | null, externalLinks: Array<{ id: number, url: string | null, site: string, siteId: number | null, type: ExternalLinkType | null } | null> | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null } | null> | null } | null };\n\nexport type SearchMangaQueryVariables = Exact<{\n  query: string | null | undefined;\n  page: number | null | undefined;\n  perPage: number | null | undefined;\n}>;\n\n\nexport type SearchMangaQuery = { Page: { pageInfo: { hasNextPage: boolean | null, currentPage: number | null } | null, media: Array<{ id: number, idMal: number | null, bannerImage: string | null, description: string | null, format: MediaFormat | null, status: MediaStatus | null, type: MediaType | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, genres: Array<string | null> | null, averageScore: number | null, meanScore: number | null, popularity: number | null, favourites: number | null, trending: number | null, source: MediaSource | null, countryOfOrigin: unknown, isAdult: boolean | null, isLicensed: boolean | null, isLocked: boolean | null, isFavourite: boolean, isFavouriteBlocked: boolean, hashtag: string | null, synonyms: Array<string | null> | null, season: MediaSeason | null, seasonYear: number | null, siteUrl: string | null, updatedAt: number | null, autoCreateForumThread: boolean | null, isRecommendationBlocked: boolean | null, isReviewBlocked: boolean | null, modNotes: string | null, nextAiringEpisode: { id: number, airingAt: number, timeUntilAiring: number, episode: number, mediaId: number } | null, tags: Array<{ id: number, name: string, description: string | null, category: string | null, rank: number | null } | null> | null, externalLinks: Array<{ id: number, url: string | null, site: string, siteId: number | null, type: ExternalLinkType | null } | null> | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null } | null> | null } | null };\n\nexport type ToggleFavoriteMangaMutationVariables = Exact<{\n  mangaId: number;\n}>;\n\n\nexport type ToggleFavoriteMangaMutation = { ToggleFavourite: { manga: { nodes: Array<{ id: number } | null> | null } | null } | null };\n\nexport type DeleteReviewMutationVariables = Exact<{\n  id: number | null | undefined;\n}>;\n\n\nexport type DeleteReviewMutation = { DeleteReview: { deleted: boolean | null } | null };\n\nexport type GetAiringScheduleQueryVariables = Exact<{\n  id: number;\n}>;\n\n\nexport type GetAiringScheduleQuery = { AiringSchedule: { id: number, airingAt: number, timeUntilAiring: number, episode: number, mediaId: number } | null };\n\nexport type GetAiringSchedulesByMediaQueryVariables = Exact<{\n  mediaId: number | null | undefined;\n  page?: number | null | undefined;\n  perPage?: number | null | undefined;\n}>;\n\n\nexport type GetAiringSchedulesByMediaQuery = { Page: { pageInfo: { hasNextPage: boolean | null, currentPage: number | null, total: number | null } | null, airingSchedules: Array<{ id: number, airingAt: number, timeUntilAiring: number, episode: number, mediaId: number } | null> | null } | null };\n\nexport type GetGenresQueryVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type GetGenresQuery = { GenreCollection: Array<string | null> | null };\n\nexport type GetMediaByIdQueryVariables = Exact<{\n  id: number;\n}>;\n\n\nexport type GetMediaByIdQuery = { Media: { id: number, idMal: number | null, bannerImage: string | null, description: string | null, format: MediaFormat | null, status: MediaStatus | null, type: MediaType | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, genres: Array<string | null> | null, averageScore: number | null, meanScore: number | null, popularity: number | null, favourites: number | null, trending: number | null, source: MediaSource | null, countryOfOrigin: unknown, isAdult: boolean | null, isLicensed: boolean | null, isLocked: boolean | null, isFavourite: boolean, isFavouriteBlocked: boolean, hashtag: string | null, synonyms: Array<string | null> | null, season: MediaSeason | null, seasonYear: number | null, siteUrl: string | null, updatedAt: number | null, autoCreateForumThread: boolean | null, isRecommendationBlocked: boolean | null, isReviewBlocked: boolean | null, modNotes: string | null, nextAiringEpisode: { id: number, airingAt: number, timeUntilAiring: number, episode: number, mediaId: number } | null, tags: Array<{ id: number, name: string, description: string | null, category: string | null, rank: number | null } | null> | null, externalLinks: Array<{ id: number, url: string | null, site: string, siteId: number | null, type: ExternalLinkType | null } | null> | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null } | null };\n\nexport type GetMediaReviewsQueryVariables = Exact<{\n  mediaId: number | null | undefined;\n  page?: number | null | undefined;\n  perPage?: number | null | undefined;\n}>;\n\n\nexport type GetMediaReviewsQuery = { Page: { pageInfo: { hasNextPage: boolean | null, currentPage: number | null, total: number | null } | null, reviews: Array<{ id: number, userId: number, mediaId: number, mediaType: MediaType | null, summary: string | null, body: string | null, rating: number | null, ratingAmount: number | null, score: number | null, private: boolean | null, siteUrl: string | null, createdAt: number, updatedAt: number, userRating: ReviewRating | null, user: { id: number, name: string } | null, media: { id: number, title: { userPreferred: string | null } | null } | null } | null> | null } | null };\n\nexport type GetMediaTagsQueryVariables = Exact<{\n  status: number | null | undefined;\n}>;\n\n\nexport type GetMediaTagsQuery = { MediaTagCollection: Array<{ id: number, name: string, description: string | null, category: string | null, rank: number | null, isGeneralSpoiler: boolean | null, isMediaSpoiler: boolean | null, isAdult: boolean | null, userId: number | null } | null> | null };\n\nexport type GetRecommendationsPageQueryVariables = Exact<{\n  mediaId: number | null | undefined;\n  page?: number | null | undefined;\n  perPage?: number | null | undefined;\n}>;\n\n\nexport type GetRecommendationsPageQuery = { Page: { pageInfo: { hasNextPage: boolean | null, currentPage: number | null, total: number | null } | null, recommendations: Array<{ id: number, rating: number | null, userRating: RecommendationRating | null, user: { id: number, name: string } | null, media: { id: number, title: { userPreferred: string | null } | null } | null, mediaRecommendation: { id: number, title: { userPreferred: string | null } | null } | null } | null> | null } | null };\n\nexport type RateReviewMutationVariables = Exact<{\n  reviewId: number | null | undefined;\n  rating: ReviewRating | null | undefined;\n}>;\n\n\nexport type RateReviewMutation = { RateReview: { id: number, userId: number, mediaId: number, mediaType: MediaType | null, summary: string | null, body: string | null, rating: number | null, ratingAmount: number | null, score: number | null, private: boolean | null, siteUrl: string | null, createdAt: number, updatedAt: number, userRating: ReviewRating | null, user: { id: number, name: string } | null, media: { id: number, title: { userPreferred: string | null } | null } | null } | null };\n\nexport type SaveRecommendationMutationVariables = Exact<{\n  mediaId: number | null | undefined;\n  mediaRecommendationId: number | null | undefined;\n  rating: RecommendationRating | null | undefined;\n}>;\n\n\nexport type SaveRecommendationMutation = { SaveRecommendation: { id: number, rating: number | null, userRating: RecommendationRating | null, user: { id: number, name: string } | null, media: { id: number, title: { userPreferred: string | null } | null } | null, mediaRecommendation: { id: number, title: { userPreferred: string | null } | null } | null } | null };\n\nexport type SaveReviewMutationVariables = Exact<{\n  id: number | null | undefined;\n  mediaId: number | null | undefined;\n  body: string | null | undefined;\n  summary: string | null | undefined;\n  score: number | null | undefined;\n  private: boolean | null | undefined;\n}>;\n\n\nexport type SaveReviewMutation = { SaveReview: { id: number, userId: number, mediaId: number, mediaType: MediaType | null, summary: string | null, body: string | null, rating: number | null, ratingAmount: number | null, score: number | null, private: boolean | null, siteUrl: string | null, createdAt: number, updatedAt: number, userRating: ReviewRating | null, user: { id: number, name: string } | null, media: { id: number, title: { userPreferred: string | null } | null } | null } | null };\n\nexport type DeleteCustomListMutationVariables = Exact<{\n  customList: string | null | undefined;\n  type: MediaType | null | undefined;\n}>;\n\n\nexport type DeleteCustomListMutation = { DeleteCustomList: { deleted: boolean | null } | null };\n\nexport type DeleteMediaListEntryMutationVariables = Exact<{\n  id: number;\n}>;\n\n\nexport type DeleteMediaListEntryMutation = { DeleteMediaListEntry: { deleted: boolean | null } | null };\n\nexport type GetMediaListQueryVariables = Exact<{\n  id: number | null | undefined;\n}>;\n\n\nexport type GetMediaListQuery = { MediaList: { id: number, mediaId: number, userId: number, status: MediaListStatus | null, score: number | null, progress: number | null, progressVolumes: number | null, repeat: number | null, priority: number | null, private: boolean | null, notes: string | null, hiddenFromStatusLists: boolean | null, customLists: unknown, advancedScores: unknown, updatedAt: number | null, createdAt: number | null, startedAt: { year: number | null, month: number | null, day: number | null } | null, completedAt: { year: number | null, month: number | null, day: number | null } | null, media: { id: number, idMal: number | null, bannerImage: string | null, description: string | null, format: MediaFormat | null, status: MediaStatus | null, type: MediaType | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, genres: Array<string | null> | null, averageScore: number | null, meanScore: number | null, popularity: number | null, favourites: number | null, trending: number | null, source: MediaSource | null, countryOfOrigin: unknown, isAdult: boolean | null, isLicensed: boolean | null, isLocked: boolean | null, isFavourite: boolean, isFavouriteBlocked: boolean, hashtag: string | null, synonyms: Array<string | null> | null, season: MediaSeason | null, seasonYear: number | null, siteUrl: string | null, updatedAt: number | null, autoCreateForumThread: boolean | null, isRecommendationBlocked: boolean | null, isReviewBlocked: boolean | null, modNotes: string | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null } | null } | null };\n\nexport type GetMediaListByUserQueryVariables = Exact<{\n  userId: number | null | undefined;\n  mediaType: MediaType | null | undefined;\n  status: MediaListStatus | null | undefined;\n}>;\n\n\nexport type GetMediaListByUserQuery = { MediaListCollection: { lists: Array<{ entries: Array<{ id: number, mediaId: number, userId: number, status: MediaListStatus | null, score: number | null, progress: number | null, progressVolumes: number | null, repeat: number | null, priority: number | null, private: boolean | null, notes: string | null, hiddenFromStatusLists: boolean | null, customLists: unknown, advancedScores: unknown, updatedAt: number | null, createdAt: number | null, startedAt: { year: number | null, month: number | null, day: number | null } | null, completedAt: { year: number | null, month: number | null, day: number | null } | null, media: { id: number, idMal: number | null, bannerImage: string | null, description: string | null, format: MediaFormat | null, status: MediaStatus | null, type: MediaType | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, genres: Array<string | null> | null, averageScore: number | null, meanScore: number | null, popularity: number | null, favourites: number | null, trending: number | null, source: MediaSource | null, countryOfOrigin: unknown, isAdult: boolean | null, isLicensed: boolean | null, isLocked: boolean | null, isFavourite: boolean, isFavouriteBlocked: boolean, hashtag: string | null, synonyms: Array<string | null> | null, season: MediaSeason | null, seasonYear: number | null, siteUrl: string | null, updatedAt: number | null, autoCreateForumThread: boolean | null, isRecommendationBlocked: boolean | null, isReviewBlocked: boolean | null, modNotes: string | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null } | null } | null> | null } | null> | null } | null };\n\nexport type GetMediaListByUserByUsernameQueryVariables = Exact<{\n  userName: string | null | undefined;\n  mediaType: MediaType | null | undefined;\n  status: MediaListStatus | null | undefined;\n}>;\n\n\nexport type GetMediaListByUserByUsernameQuery = { MediaListCollection: { lists: Array<{ entries: Array<{ id: number, mediaId: number, userId: number, status: MediaListStatus | null, score: number | null, progress: number | null, progressVolumes: number | null, repeat: number | null, priority: number | null, private: boolean | null, notes: string | null, hiddenFromStatusLists: boolean | null, customLists: unknown, advancedScores: unknown, updatedAt: number | null, createdAt: number | null, startedAt: { year: number | null, month: number | null, day: number | null } | null, completedAt: { year: number | null, month: number | null, day: number | null } | null, media: { id: number, idMal: number | null, bannerImage: string | null, description: string | null, format: MediaFormat | null, status: MediaStatus | null, type: MediaType | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, genres: Array<string | null> | null, averageScore: number | null, meanScore: number | null, popularity: number | null, favourites: number | null, trending: number | null, source: MediaSource | null, countryOfOrigin: unknown, isAdult: boolean | null, isLicensed: boolean | null, isLocked: boolean | null, isFavourite: boolean, isFavouriteBlocked: boolean, hashtag: string | null, synonyms: Array<string | null> | null, season: MediaSeason | null, seasonYear: number | null, siteUrl: string | null, updatedAt: number | null, autoCreateForumThread: boolean | null, isRecommendationBlocked: boolean | null, isReviewBlocked: boolean | null, modNotes: string | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null } | null } | null> | null } | null> | null } | null };\n\nexport type SaveMediaListEntryMutationVariables = Exact<{\n  mediaId: number | null | undefined;\n  id: number | null | undefined;\n  status: MediaListStatus | null | undefined;\n  score: number | null | undefined;\n  scoreRaw: number | null | undefined;\n  progress: number | null | undefined;\n  progressVolumes: number | null | undefined;\n  repeat: number | null | undefined;\n  private: boolean | null | undefined;\n  notes: string | null | undefined;\n  startedAt: FuzzyDateInput | null | undefined;\n  completedAt: FuzzyDateInput | null | undefined;\n  advancedScores: Array<number | null | undefined> | number | null | undefined;\n  customLists: Array<string | null | undefined> | string | null | undefined;\n  hiddenFromStatusLists: boolean | null | undefined;\n  priority: number | null | undefined;\n}>;\n\n\nexport type SaveMediaListEntryMutation = { SaveMediaListEntry: { id: number, mediaId: number, userId: number, status: MediaListStatus | null, score: number | null, progress: number | null, progressVolumes: number | null, repeat: number | null, priority: number | null, private: boolean | null, notes: string | null, hiddenFromStatusLists: boolean | null, customLists: unknown, advancedScores: unknown, updatedAt: number | null, createdAt: number | null, startedAt: { year: number | null, month: number | null, day: number | null } | null, completedAt: { year: number | null, month: number | null, day: number | null } | null, media: { id: number, idMal: number | null, bannerImage: string | null, description: string | null, format: MediaFormat | null, status: MediaStatus | null, type: MediaType | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, genres: Array<string | null> | null, averageScore: number | null, meanScore: number | null, popularity: number | null, favourites: number | null, trending: number | null, source: MediaSource | null, countryOfOrigin: unknown, isAdult: boolean | null, isLicensed: boolean | null, isLocked: boolean | null, isFavourite: boolean, isFavouriteBlocked: boolean, hashtag: string | null, synonyms: Array<string | null> | null, season: MediaSeason | null, seasonYear: number | null, siteUrl: string | null, updatedAt: number | null, autoCreateForumThread: boolean | null, isRecommendationBlocked: boolean | null, isReviewBlocked: boolean | null, modNotes: string | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null } | null } | null };\n\nexport type UpdateMediaListEntriesMutationVariables = Exact<{\n  ids: Array<number | null | undefined> | number | null | undefined;\n  status: MediaListStatus | null | undefined;\n  score: number | null | undefined;\n  scoreRaw: number | null | undefined;\n  progress: number | null | undefined;\n  progressVolumes: number | null | undefined;\n  repeat: number | null | undefined;\n  private: boolean | null | undefined;\n  notes: string | null | undefined;\n  startedAt: FuzzyDateInput | null | undefined;\n  completedAt: FuzzyDateInput | null | undefined;\n  advancedScores: Array<number | null | undefined> | number | null | undefined;\n  hiddenFromStatusLists: boolean | null | undefined;\n  priority: number | null | undefined;\n}>;\n\n\nexport type UpdateMediaListEntriesMutation = { UpdateMediaListEntries: Array<{ id: number, mediaId: number, userId: number, status: MediaListStatus | null, score: number | null, progress: number | null, progressVolumes: number | null, repeat: number | null, priority: number | null, private: boolean | null, notes: string | null, hiddenFromStatusLists: boolean | null, customLists: unknown, advancedScores: unknown, updatedAt: number | null, createdAt: number | null, startedAt: { year: number | null, month: number | null, day: number | null } | null, completedAt: { year: number | null, month: number | null, day: number | null } | null, media: { id: number, idMal: number | null, bannerImage: string | null, description: string | null, format: MediaFormat | null, status: MediaStatus | null, type: MediaType | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, genres: Array<string | null> | null, averageScore: number | null, meanScore: number | null, popularity: number | null, favourites: number | null, trending: number | null, source: MediaSource | null, countryOfOrigin: unknown, isAdult: boolean | null, isLicensed: boolean | null, isLocked: boolean | null, isFavourite: boolean, isFavouriteBlocked: boolean, hashtag: string | null, synonyms: Array<string | null> | null, season: MediaSeason | null, seasonYear: number | null, siteUrl: string | null, updatedAt: number | null, autoCreateForumThread: boolean | null, isRecommendationBlocked: boolean | null, isReviewBlocked: boolean | null, modNotes: string | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null } | null } | null> | null };\n\nexport type DeleteActivityMutationVariables = Exact<{\n  id: number | null | undefined;\n}>;\n\n\nexport type DeleteActivityMutation = { DeleteActivity: { deleted: boolean | null } | null };\n\nexport type DeleteActivityReplyMutationVariables = Exact<{\n  id: number | null | undefined;\n}>;\n\n\nexport type DeleteActivityReplyMutation = { DeleteActivityReply: { deleted: boolean | null } | null };\n\nexport type DeleteThreadMutationVariables = Exact<{\n  id: number | null | undefined;\n}>;\n\n\nexport type DeleteThreadMutation = { DeleteThread: { deleted: boolean | null } | null };\n\nexport type DeleteThreadCommentMutationVariables = Exact<{\n  id: number | null | undefined;\n}>;\n\n\nexport type DeleteThreadCommentMutation = { DeleteThreadComment: { deleted: boolean | null } | null };\n\nexport type GetActivitiesQueryVariables = Exact<{\n  userId: number | null | undefined;\n  page?: number | null | undefined;\n  perPage?: number | null | undefined;\n}>;\n\n\nexport type GetActivitiesQuery = { Page: { pageInfo: { hasNextPage: boolean | null, currentPage: number | null, total: number | null } | null, activities: Array<\n      | { id: number, type: ActivityType | null, userId: number | null, createdAt: number, status: string | null, progress: string | null }\n      | { id: number, type: ActivityType | null, messengerId: number | null, createdAt: number, message: string | null }\n      | { id: number, type: ActivityType | null, userId: number | null, createdAt: number, text: string | null }\n     | null> | null } | null };\n\nexport type GetActivityQueryVariables = Exact<{\n  id: number;\n}>;\n\n\nexport type GetActivityQuery = { Activity:\n    | { id: number, type: ActivityType | null, userId: number | null, createdAt: number, status: string | null, progress: string | null }\n    | { id: number, type: ActivityType | null, messengerId: number | null, createdAt: number, message: string | null }\n    | { id: number, type: ActivityType | null, userId: number | null, createdAt: number, text: string | null }\n   | null };\n\nexport type GetActivityRepliesQueryVariables = Exact<{\n  activityId: number | null | undefined;\n  page?: number | null | undefined;\n  perPage?: number | null | undefined;\n}>;\n\n\nexport type GetActivityRepliesQuery = { Page: { pageInfo: { hasNextPage: boolean | null, currentPage: number | null, total: number | null } | null, activityReplies: Array<{ id: number, activityId: number | null, userId: number | null, text: string | null, createdAt: number, likeCount: number, isLiked: boolean | null, user: { id: number, name: string } | null } | null> | null } | null };\n\nexport type GetActivityReplyQueryVariables = Exact<{\n  id: number;\n}>;\n\n\nexport type GetActivityReplyQuery = { ActivityReply: { id: number, activityId: number | null, userId: number | null, text: string | null, createdAt: number, likeCount: number, isLiked: boolean | null, user: { id: number, name: string } | null } | null };\n\nexport type GetFollowersQueryVariables = Exact<{\n  userId: number;\n  page?: number | null | undefined;\n  perPage?: number | null | undefined;\n}>;\n\n\nexport type GetFollowersQuery = { Page: { pageInfo: { hasNextPage: boolean | null, currentPage: number | null, total: number | null } | null, followers: Array<{ id: number, name: string, siteUrl: string | null } | null> | null } | null };\n\nexport type GetFollowingQueryVariables = Exact<{\n  userId: number;\n  page?: number | null | undefined;\n  perPage?: number | null | undefined;\n}>;\n\n\nexport type GetFollowingQuery = { Page: { pageInfo: { hasNextPage: boolean | null, currentPage: number | null, total: number | null } | null, following: Array<{ id: number, name: string, siteUrl: string | null } | null> | null } | null };\n\nexport type GetMarkdownQueryVariables = Exact<{\n  markdown: string;\n}>;\n\n\nexport type GetMarkdownQuery = { Markdown: { html: string | null } | null };\n\nexport type GetNotificationsQueryVariables = Exact<{\n  page?: number | null | undefined;\n  perPage?: number | null | undefined;\n  resetNotificationCount?: boolean | null | undefined;\n}>;\n\n\nexport type GetNotificationsQuery = { Page: { pageInfo: { hasNextPage: boolean | null, currentPage: number | null, total: number | null } | null, notifications: Array<\n      | { id: number, type: NotificationType | null, createdAt: number | null }\n      | { id: number, type: NotificationType | null, createdAt: number | null }\n      | { id: number, type: NotificationType | null, createdAt: number | null }\n      | { id: number, type: NotificationType | null, createdAt: number | null }\n      | { id: number, type: NotificationType | null, createdAt: number | null }\n      | { id: number, type: NotificationType | null, createdAt: number | null }\n      | { id: number, type: NotificationType | null, createdAt: number | null }\n      | { id: number, type: NotificationType | null, createdAt: number | null }\n      | { id: number, type: NotificationType | null, createdAt: number | null }\n      | { id: number, type: NotificationType | null, createdAt: number | null }\n      | { id: number, type: NotificationType | null, createdAt: number | null }\n      | { id: number, type: NotificationType | null, createdAt: number | null }\n      | { id: number, type: NotificationType | null, createdAt: number | null }\n      | { id: number, type: NotificationType | null, createdAt: number | null }\n      | { id: number, type: NotificationType | null, createdAt: number | null }\n      | { id: number, type: NotificationType | null, createdAt: number | null }\n      | { id: number, type: NotificationType | null, createdAt: number | null }\n      | { id: number, type: NotificationType | null, createdAt: number | null }\n      | { id: number, type: NotificationType | null, createdAt: number | null }\n      | { id: number, type: NotificationType | null, createdAt: number | null }\n     | null> | null } | null };\n\nexport type GetSiteStatisticsQueryVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type GetSiteStatisticsQuery = { SiteStatistics: { users: { nodes: Array<{ count: number, date: number, change: number } | null> | null } | null, anime: { nodes: Array<{ count: number, date: number, change: number } | null> | null } | null, manga: { nodes: Array<{ count: number, date: number, change: number } | null> | null } | null, characters: { nodes: Array<{ count: number, date: number, change: number } | null> | null } | null, staff: { nodes: Array<{ count: number, date: number, change: number } | null> | null } | null, studios: { nodes: Array<{ count: number, date: number, change: number } | null> | null } | null, reviews: { nodes: Array<{ count: number, date: number, change: number } | null> | null } | null } | null };\n\nexport type GetThreadQueryVariables = Exact<{\n  id: number;\n}>;\n\n\nexport type GetThreadQuery = { Thread: { id: number, title: string | null, body: string | null, userId: number, createdAt: number, updatedAt: number, replyCount: number | null, viewCount: number | null, likeCount: number, isLocked: boolean | null, isSticky: boolean | null, isSubscribed: boolean | null, user: { id: number, name: string } | null } | null };\n\nexport type GetThreadCommentQueryVariables = Exact<{\n  id: number;\n}>;\n\n\nexport type GetThreadCommentQuery = { ThreadComment: Array<{ id: number, threadId: number | null, userId: number | null, comment: string | null, createdAt: number, updatedAt: number, likeCount: number, isLiked: boolean | null, user: { id: number, name: string } | null } | null> | null };\n\nexport type GetThreadCommentsQueryVariables = Exact<{\n  threadId: number | null | undefined;\n  page?: number | null | undefined;\n  perPage?: number | null | undefined;\n}>;\n\n\nexport type GetThreadCommentsQuery = { Page: { pageInfo: { hasNextPage: boolean | null, currentPage: number | null, total: number | null } | null, threadComments: Array<{ id: number, threadId: number | null, userId: number | null, comment: string | null, createdAt: number, updatedAt: number, likeCount: number, isLiked: boolean | null, user: { id: number, name: string } | null } | null> | null } | null };\n\nexport type GetThreadsQueryVariables = Exact<{\n  search: string | null | undefined;\n  userId: number | null | undefined;\n  page?: number | null | undefined;\n  perPage?: number | null | undefined;\n}>;\n\n\nexport type GetThreadsQuery = { Page: { pageInfo: { hasNextPage: boolean | null, currentPage: number | null, total: number | null } | null, threads: Array<{ id: number, title: string | null, body: string | null, userId: number, createdAt: number, updatedAt: number, replyCount: number | null, viewCount: number | null, likeCount: number, isLocked: boolean | null, isSticky: boolean | null, isSubscribed: boolean | null, user: { id: number, name: string } | null } | null> | null } | null };\n\nexport type SaveActivityReplyMutationVariables = Exact<{\n  id: number | null | undefined;\n  activityId: number | null | undefined;\n  text: string | null | undefined;\n  asMod: boolean | null | undefined;\n}>;\n\n\nexport type SaveActivityReplyMutation = { SaveActivityReply: { id: number, activityId: number | null, userId: number | null, text: string | null, createdAt: number, likeCount: number, isLiked: boolean | null, user: { id: number, name: string } | null } | null };\n\nexport type SaveMessageActivityMutationVariables = Exact<{\n  id: number | null | undefined;\n  message: string | null | undefined;\n  recipientId: number | null | undefined;\n  private: boolean | null | undefined;\n  locked: boolean | null | undefined;\n  asMod: boolean | null | undefined;\n}>;\n\n\nexport type SaveMessageActivityMutation = { SaveMessageActivity: { id: number, type: ActivityType | null, messengerId: number | null, createdAt: number, message: string | null, isLiked: boolean | null, isLocked: boolean | null, likeCount: number, siteUrl: string | null } | null };\n\nexport type SaveTextActivityMutationVariables = Exact<{\n  id: number | null | undefined;\n  text: string | null | undefined;\n  locked: boolean | null | undefined;\n}>;\n\n\nexport type SaveTextActivityMutation = { SaveTextActivity: { id: number, type: ActivityType | null, userId: number | null, createdAt: number, text: string | null, isLiked: boolean | null, isLocked: boolean | null, likeCount: number, siteUrl: string | null } | null };\n\nexport type SaveThreadMutationVariables = Exact<{\n  id: number | null | undefined;\n  title: string | null | undefined;\n  body: string | null | undefined;\n  categories: Array<number | null | undefined> | number | null | undefined;\n  mediaCategories: Array<number | null | undefined> | number | null | undefined;\n  sticky: boolean | null | undefined;\n  locked: boolean | null | undefined;\n}>;\n\n\nexport type SaveThreadMutation = { SaveThread: { id: number, title: string | null, body: string | null, userId: number, createdAt: number, updatedAt: number, replyCount: number | null, viewCount: number | null, likeCount: number, isLocked: boolean | null, isSticky: boolean | null, isSubscribed: boolean | null, user: { id: number, name: string } | null } | null };\n\nexport type SaveThreadCommentMutationVariables = Exact<{\n  id: number | null | undefined;\n  threadId: number | null | undefined;\n  parentCommentId: number | null | undefined;\n  comment: string | null | undefined;\n  locked: boolean | null | undefined;\n}>;\n\n\nexport type SaveThreadCommentMutation = { SaveThreadComment: { id: number, threadId: number | null, userId: number | null, comment: string | null, createdAt: number, updatedAt: number, likeCount: number, isLiked: boolean | null, user: { id: number, name: string } | null } | null };\n\nexport type ToggleActivityPinMutationVariables = Exact<{\n  id: number | null | undefined;\n  pinned: boolean | null | undefined;\n}>;\n\n\nexport type ToggleActivityPinMutation = { ToggleActivityPin:\n    | { id: number, isPinned: boolean | null }\n    | { id: number, isPinned: boolean | null }\n    | { id: number, isPinned: boolean | null }\n   | null };\n\nexport type ToggleActivitySubscriptionMutationVariables = Exact<{\n  activityId: number | null | undefined;\n  subscribe: boolean | null | undefined;\n}>;\n\n\nexport type ToggleActivitySubscriptionMutation = { ToggleActivitySubscription:\n    | { id: number, isSubscribed: boolean | null }\n    | { id: number, isSubscribed: boolean | null }\n    | { id: number, isSubscribed: boolean | null }\n   | null };\n\nexport type ToggleFollowMutationVariables = Exact<{\n  userId: number | null | undefined;\n}>;\n\n\nexport type ToggleFollowMutation = { ToggleFollow: { id: number, name: string, isFollowing: boolean | null, siteUrl: string | null } | null };\n\nexport type ToggleLikeMutationVariables = Exact<{\n  id: number | null | undefined;\n  type: LikeableType | null | undefined;\n}>;\n\n\nexport type ToggleLikeMutation = { ToggleLikeV2:\n    | { id: number }\n    | { id: number }\n    | { id: number }\n    | { id: number }\n    | { id: number }\n    | { id: number }\n   | null };\n\nexport type ToggleThreadSubscriptionMutationVariables = Exact<{\n  threadId: number | null | undefined;\n  subscribe: boolean | null | undefined;\n}>;\n\n\nexport type ToggleThreadSubscriptionMutation = { ToggleThreadSubscription: { id: number, isSubscribed: boolean | null } | null };\n\nexport type GetStaffByIdQueryVariables = Exact<{\n  id: number;\n}>;\n\n\nexport type GetStaffByIdQuery = { Staff: { isFavourite: boolean, favourites: number | null, id: number, description: string | null, primaryOccupations: Array<string | null> | null, gender: string | null, bloodType: string | null, homeTown: string | null, languageV2: string | null, yearsActive: Array<number | null> | null, isFavouriteBlocked: boolean, age: number | null, siteUrl: string | null, staffMedia: { nodes: Array<{ id: number, type: MediaType | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null } | null> | null } | null, characters: { nodes: Array<{ id: number, description: string | null, gender: string | null, age: string | null, bloodType: string | null, isFavourite: boolean, isFavouriteBlocked: boolean, favourites: number | null, siteUrl: string | null, name: { alternative: Array<string | null> | null, alternativeSpoiler: Array<string | null> | null, first: string | null, full: string | null, last: string | null, middle: string | null, native: string | null, userPreferred: string | null } | null, image: { large: string | null, medium: string | null } | null, dateOfBirth: { year: number | null, month: number | null, day: number | null } | null } | null> | null } | null, characterMedia: { nodes: Array<{ id: number, type: MediaType | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null } | null> | null } | null, name: { full: string | null, native: string | null, first: string | null, middle: string | null, last: string | null, userPreferred: string | null } | null, image: { large: string | null, medium: string | null } | null, dateOfBirth: { year: number | null, month: number | null, day: number | null } | null, dateOfDeath: { year: number | null, month: number | null, day: number | null } | null } | null };\n\nexport type StaffBirthdayTodayQueryVariables = Exact<{\n  page: number | null | undefined;\n  perPage: number | null | undefined;\n}>;\n\n\nexport type StaffBirthdayTodayQuery = { Page: { pageInfo: { hasNextPage: boolean | null, currentPage: number | null } | null, staff: Array<{ id: number, name: { alternative: Array<string | null> | null, first: string | null, full: string | null, last: string | null, middle: string | null, native: string | null, userPreferred: string | null } | null } | null> | null } | null };\n\nexport type ToggleFavoriteStaffMutationVariables = Exact<{\n  staffID: number;\n}>;\n\n\nexport type ToggleFavoriteStaffMutation = { ToggleFavourite: { staff: { nodes: Array<{ id: number } | null> | null } | null } | null };\n\nexport type GetStudioByIdQueryVariables = Exact<{\n  id: number;\n}>;\n\n\nexport type GetStudioByIdQuery = { Studio: { id: number, name: string, isAnimationStudio: boolean, favourites: number | null, isFavourite: boolean, siteUrl: string | null, media: { pageInfo: { total: number | null, perPage: number | null, currentPage: number | null, lastPage: number | null, hasNextPage: boolean | null } | null } | null } | null };\n\nexport type SearchStudioQueryVariables = Exact<{\n  query: string | null | undefined;\n  page: number | null | undefined;\n  perPage: number | null | undefined;\n}>;\n\n\nexport type SearchStudioQuery = { Page: { pageInfo: { total: number | null, perPage: number | null, currentPage: number | null, lastPage: number | null, hasNextPage: boolean | null } | null, studios: Array<{ id: number, name: string, isAnimationStudio: boolean, favourites: number | null, isFavourite: boolean, siteUrl: string | null } | null> | null } | null };\n\nexport type ToggleFavoriteStudioMutationVariables = Exact<{\n  studioId: number;\n}>;\n\n\nexport type ToggleFavoriteStudioMutation = { ToggleFavourite: { studios: { nodes: Array<{ id: number } | null> | null } | null } | null };\n\nexport type GetUserAnimeListQueryVariables = Exact<{\n  userId: number | null | undefined;\n  status: MediaListStatus | null | undefined;\n}>;\n\n\nexport type GetUserAnimeListQuery = { MediaListCollection: { lists: Array<{ entries: Array<{ id: number, mediaId: number, userId: number, status: MediaListStatus | null, score: number | null, progress: number | null, progressVolumes: number | null, repeat: number | null, priority: number | null, private: boolean | null, notes: string | null, hiddenFromStatusLists: boolean | null, customLists: unknown, advancedScores: unknown, updatedAt: number | null, createdAt: number | null, startedAt: { year: number | null, month: number | null, day: number | null } | null, completedAt: { year: number | null, month: number | null, day: number | null } | null, media: { id: number, idMal: number | null, bannerImage: string | null, description: string | null, format: MediaFormat | null, status: MediaStatus | null, type: MediaType | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, genres: Array<string | null> | null, averageScore: number | null, meanScore: number | null, popularity: number | null, favourites: number | null, trending: number | null, source: MediaSource | null, countryOfOrigin: unknown, isAdult: boolean | null, isLicensed: boolean | null, isLocked: boolean | null, isFavourite: boolean, isFavouriteBlocked: boolean, hashtag: string | null, synonyms: Array<string | null> | null, season: MediaSeason | null, seasonYear: number | null, siteUrl: string | null, updatedAt: number | null, autoCreateForumThread: boolean | null, isRecommendationBlocked: boolean | null, isReviewBlocked: boolean | null, modNotes: string | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null } | null } | null> | null } | null> | null } | null };\n\nexport type GetUserAnimeListByUsernameQueryVariables = Exact<{\n  userName: string | null | undefined;\n  status: MediaListStatus | null | undefined;\n}>;\n\n\nexport type GetUserAnimeListByUsernameQuery = { MediaListCollection: { lists: Array<{ entries: Array<{ id: number, mediaId: number, userId: number, status: MediaListStatus | null, score: number | null, progress: number | null, progressVolumes: number | null, repeat: number | null, priority: number | null, private: boolean | null, notes: string | null, hiddenFromStatusLists: boolean | null, customLists: unknown, advancedScores: unknown, updatedAt: number | null, createdAt: number | null, startedAt: { year: number | null, month: number | null, day: number | null } | null, completedAt: { year: number | null, month: number | null, day: number | null } | null, media: { id: number, idMal: number | null, bannerImage: string | null, description: string | null, format: MediaFormat | null, status: MediaStatus | null, type: MediaType | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, genres: Array<string | null> | null, averageScore: number | null, meanScore: number | null, popularity: number | null, favourites: number | null, trending: number | null, source: MediaSource | null, countryOfOrigin: unknown, isAdult: boolean | null, isLicensed: boolean | null, isLocked: boolean | null, isFavourite: boolean, isFavouriteBlocked: boolean, hashtag: string | null, synonyms: Array<string | null> | null, season: MediaSeason | null, seasonYear: number | null, siteUrl: string | null, updatedAt: number | null, autoCreateForumThread: boolean | null, isRecommendationBlocked: boolean | null, isReviewBlocked: boolean | null, modNotes: string | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null } | null } | null> | null } | null> | null } | null };\n\nexport type GetUserInfoQueryVariables = Exact<{\n  id: number | null | undefined;\n}>;\n\n\nexport type GetUserInfoQuery = { User: { id: number, name: string, about: string | null, bannerImage: string | null, donatorTier: number | null, donatorBadge: string | null, isFollowing: boolean | null, isFollower: boolean | null, isBlocked: boolean | null, createdAt: number | null, updatedAt: number | null, unreadNotificationCount: number | null, bans: unknown, moderatorRoles: Array<ModRole | null> | null, moderatorStatus: string | null, siteUrl: string | null, avatar: { large: string | null, medium: string | null } | null, options: { titleLanguage: UserTitleLanguage | null, displayAdultContent: boolean | null, airingNotifications: boolean | null, profileColor: string | null, timezone: string | null, activityMergeTime: number | null, staffNameLanguage: UserStaffNameLanguage | null, restrictMessagesToFollowing: boolean | null, notificationOptions: Array<{ type: NotificationType | null, enabled: boolean | null } | null> | null, disabledListActivity: Array<{ disabled: boolean | null, type: MediaListStatus | null } | null> | null } | null, mediaListOptions: { scoreFormat: ScoreFormat | null, rowOrder: string | null, useLegacyLists: boolean | null, sharedTheme: unknown, sharedThemeEnabled: boolean | null, animeList: { sectionOrder: Array<string | null> | null, splitCompletedSectionByFormat: boolean | null, customLists: Array<string | null> | null, advancedScoring: Array<string | null> | null, advancedScoringEnabled: boolean | null } | null, mangaList: { sectionOrder: Array<string | null> | null, splitCompletedSectionByFormat: boolean | null, customLists: Array<string | null> | null, advancedScoring: Array<string | null> | null, advancedScoringEnabled: boolean | null } | null } | null, favourites: { anime: { nodes: Array<{ id: number, title: { romaji: string | null } | null } | null> | null } | null, manga: { nodes: Array<{ id: number, title: { romaji: string | null } | null } | null> | null } | null, characters: { nodes: Array<{ id: number, name: { full: string | null } | null } | null> | null } | null, staff: { nodes: Array<{ id: number, name: { full: string | null } | null } | null> | null } | null, studios: { nodes: Array<{ id: number, name: string } | null> | null } | null } | null, statistics: { anime: { count: number, meanScore: number, standardDeviation: number, minutesWatched: number, episodesWatched: number, chaptersRead: number, volumesRead: number, scores: Array<{ score: number | null, count: number, meanScore: number, minutesWatched: number } | null> | null, lengths: Array<{ length: string | null, count: number, meanScore: number, minutesWatched: number } | null> | null, formats: Array<{ format: MediaFormat | null, count: number, meanScore: number, minutesWatched: number } | null> | null, statuses: Array<{ status: MediaListStatus | null, count: number, meanScore: number, minutesWatched: number } | null> | null, releaseYears: Array<{ releaseYear: number | null, count: number, meanScore: number, minutesWatched: number } | null> | null, startYears: Array<{ startYear: number | null, count: number, meanScore: number, minutesWatched: number } | null> | null, genres: Array<{ genre: string | null, count: number, meanScore: number, minutesWatched: number } | null> | null, tags: Array<{ count: number, meanScore: number, minutesWatched: number, tag: { name: string } | null } | null> | null, countries: Array<{ country: unknown, count: number, meanScore: number, minutesWatched: number } | null> | null, voiceActors: Array<{ count: number, meanScore: number, minutesWatched: number, characterIds: Array<number | null>, mediaIds: Array<number | null>, voiceActor: { id: number, name: { full: string | null } | null } | null } | null> | null, staff: Array<{ count: number, meanScore: number, minutesWatched: number, mediaIds: Array<number | null>, staff: { id: number, name: { full: string | null } | null } | null } | null> | null, studios: Array<{ count: number, meanScore: number, minutesWatched: number, mediaIds: Array<number | null>, studio: { id: number, name: string } | null } | null> | null } | null, manga: { count: number, meanScore: number, standardDeviation: number, chaptersRead: number, volumesRead: number, scores: Array<{ score: number | null, count: number, meanScore: number, chaptersRead: number } | null> | null, lengths: Array<{ length: string | null, count: number, meanScore: number, chaptersRead: number } | null> | null, formats: Array<{ format: MediaFormat | null, count: number, meanScore: number, chaptersRead: number } | null> | null, statuses: Array<{ status: MediaListStatus | null, count: number, meanScore: number, chaptersRead: number } | null> | null, releaseYears: Array<{ releaseYear: number | null, count: number, meanScore: number, chaptersRead: number } | null> | null, startYears: Array<{ startYear: number | null, count: number, meanScore: number, chaptersRead: number } | null> | null, genres: Array<{ genre: string | null, count: number, meanScore: number, chaptersRead: number } | null> | null, tags: Array<{ count: number, meanScore: number, chaptersRead: number, tag: { name: string } | null } | null> | null, countries: Array<{ country: unknown, count: number, meanScore: number, chaptersRead: number } | null> | null, staff: Array<{ count: number, meanScore: number, chaptersRead: number, mediaIds: Array<number | null>, staff: { id: number, name: { full: string | null } | null } | null } | null> | null, studios: Array<{ count: number, meanScore: number, chaptersRead: number, mediaIds: Array<number | null>, studio: { id: number, name: string } | null } | null> | null } | null } | null, stats: { watchedTime: number | null, chaptersRead: number | null } | null, previousNames: Array<{ name: string | null, createdAt: number | null, updatedAt: number | null } | null> | null } | null };\n\nexport type GetUserInfoByUsernameQueryVariables = Exact<{\n  userName: string | null | undefined;\n}>;\n\n\nexport type GetUserInfoByUsernameQuery = { User: { id: number, name: string, about: string | null, bannerImage: string | null, donatorTier: number | null, donatorBadge: string | null, isFollowing: boolean | null, isFollower: boolean | null, isBlocked: boolean | null, createdAt: number | null, updatedAt: number | null, unreadNotificationCount: number | null, bans: unknown, moderatorRoles: Array<ModRole | null> | null, moderatorStatus: string | null, siteUrl: string | null, avatar: { large: string | null, medium: string | null } | null, options: { titleLanguage: UserTitleLanguage | null, displayAdultContent: boolean | null, airingNotifications: boolean | null, profileColor: string | null, timezone: string | null, activityMergeTime: number | null, staffNameLanguage: UserStaffNameLanguage | null, restrictMessagesToFollowing: boolean | null, notificationOptions: Array<{ type: NotificationType | null, enabled: boolean | null } | null> | null, disabledListActivity: Array<{ disabled: boolean | null, type: MediaListStatus | null } | null> | null } | null, mediaListOptions: { scoreFormat: ScoreFormat | null, rowOrder: string | null, useLegacyLists: boolean | null, sharedTheme: unknown, sharedThemeEnabled: boolean | null, animeList: { sectionOrder: Array<string | null> | null, splitCompletedSectionByFormat: boolean | null, customLists: Array<string | null> | null, advancedScoring: Array<string | null> | null, advancedScoringEnabled: boolean | null } | null, mangaList: { sectionOrder: Array<string | null> | null, splitCompletedSectionByFormat: boolean | null, customLists: Array<string | null> | null, advancedScoring: Array<string | null> | null, advancedScoringEnabled: boolean | null } | null } | null, favourites: { anime: { nodes: Array<{ id: number, title: { romaji: string | null } | null } | null> | null } | null, manga: { nodes: Array<{ id: number, title: { romaji: string | null } | null } | null> | null } | null, characters: { nodes: Array<{ id: number, name: { full: string | null } | null } | null> | null } | null, staff: { nodes: Array<{ id: number, name: { full: string | null } | null } | null> | null } | null, studios: { nodes: Array<{ id: number, name: string } | null> | null } | null } | null, statistics: { anime: { count: number, meanScore: number, standardDeviation: number, minutesWatched: number, episodesWatched: number, chaptersRead: number, volumesRead: number, scores: Array<{ score: number | null, count: number, meanScore: number, minutesWatched: number } | null> | null, lengths: Array<{ length: string | null, count: number, meanScore: number, minutesWatched: number } | null> | null, formats: Array<{ format: MediaFormat | null, count: number, meanScore: number, minutesWatched: number } | null> | null, statuses: Array<{ status: MediaListStatus | null, count: number, meanScore: number, minutesWatched: number } | null> | null, releaseYears: Array<{ releaseYear: number | null, count: number, meanScore: number, minutesWatched: number } | null> | null, startYears: Array<{ startYear: number | null, count: number, meanScore: number, minutesWatched: number } | null> | null, genres: Array<{ genre: string | null, count: number, meanScore: number, minutesWatched: number } | null> | null, tags: Array<{ count: number, meanScore: number, minutesWatched: number, tag: { name: string } | null } | null> | null, countries: Array<{ country: unknown, count: number, meanScore: number, minutesWatched: number } | null> | null, voiceActors: Array<{ count: number, meanScore: number, minutesWatched: number, characterIds: Array<number | null>, mediaIds: Array<number | null>, voiceActor: { id: number, name: { full: string | null } | null } | null } | null> | null, staff: Array<{ count: number, meanScore: number, minutesWatched: number, mediaIds: Array<number | null>, staff: { id: number, name: { full: string | null } | null } | null } | null> | null, studios: Array<{ count: number, meanScore: number, minutesWatched: number, mediaIds: Array<number | null>, studio: { id: number, name: string } | null } | null> | null } | null, manga: { count: number, meanScore: number, standardDeviation: number, chaptersRead: number, volumesRead: number, scores: Array<{ score: number | null, count: number, meanScore: number, chaptersRead: number } | null> | null, lengths: Array<{ length: string | null, count: number, meanScore: number, chaptersRead: number } | null> | null, formats: Array<{ format: MediaFormat | null, count: number, meanScore: number, chaptersRead: number } | null> | null, statuses: Array<{ status: MediaListStatus | null, count: number, meanScore: number, chaptersRead: number } | null> | null, releaseYears: Array<{ releaseYear: number | null, count: number, meanScore: number, chaptersRead: number } | null> | null, startYears: Array<{ startYear: number | null, count: number, meanScore: number, chaptersRead: number } | null> | null, genres: Array<{ genre: string | null, count: number, meanScore: number, chaptersRead: number } | null> | null, tags: Array<{ count: number, meanScore: number, chaptersRead: number, tag: { name: string } | null } | null> | null, countries: Array<{ country: unknown, count: number, meanScore: number, chaptersRead: number } | null> | null, staff: Array<{ count: number, meanScore: number, chaptersRead: number, mediaIds: Array<number | null>, staff: { id: number, name: { full: string | null } | null } | null } | null> | null, studios: Array<{ count: number, meanScore: number, chaptersRead: number, mediaIds: Array<number | null>, studio: { id: number, name: string } | null } | null> | null } | null } | null, stats: { watchedTime: number | null, chaptersRead: number | null } | null, previousNames: Array<{ name: string | null, createdAt: number | null, updatedAt: number | null } | null> | null } | null };\n\nexport type GetUserListQueryVariables = Exact<{\n  page: number | null | undefined;\n  perPage: number | null | undefined;\n}>;\n\n\nexport type GetUserListQuery = { Page: { pageInfo: { hasNextPage: boolean | null, currentPage: number | null } | null, users: Array<{ id: number, name: string, about: string | null, bannerImage: string | null, donatorTier: number | null, donatorBadge: string | null, isFollowing: boolean | null, isFollower: boolean | null, isBlocked: boolean | null, createdAt: number | null, updatedAt: number | null, unreadNotificationCount: number | null, bans: unknown, moderatorRoles: Array<ModRole | null> | null, moderatorStatus: string | null, siteUrl: string | null, avatar: { large: string | null, medium: string | null } | null, options: { titleLanguage: UserTitleLanguage | null, displayAdultContent: boolean | null, airingNotifications: boolean | null, profileColor: string | null, timezone: string | null, activityMergeTime: number | null, staffNameLanguage: UserStaffNameLanguage | null, restrictMessagesToFollowing: boolean | null, notificationOptions: Array<{ type: NotificationType | null, enabled: boolean | null } | null> | null, disabledListActivity: Array<{ disabled: boolean | null, type: MediaListStatus | null } | null> | null } | null, mediaListOptions: { scoreFormat: ScoreFormat | null, rowOrder: string | null, useLegacyLists: boolean | null, sharedTheme: unknown, sharedThemeEnabled: boolean | null, animeList: { sectionOrder: Array<string | null> | null, splitCompletedSectionByFormat: boolean | null, customLists: Array<string | null> | null, advancedScoring: Array<string | null> | null, advancedScoringEnabled: boolean | null } | null, mangaList: { sectionOrder: Array<string | null> | null, splitCompletedSectionByFormat: boolean | null, customLists: Array<string | null> | null, advancedScoring: Array<string | null> | null, advancedScoringEnabled: boolean | null } | null } | null, favourites: { anime: { nodes: Array<{ id: number, title: { romaji: string | null } | null } | null> | null } | null, manga: { nodes: Array<{ id: number, title: { romaji: string | null } | null } | null> | null } | null, characters: { nodes: Array<{ id: number, name: { full: string | null } | null } | null> | null } | null, staff: { nodes: Array<{ id: number, name: { full: string | null } | null } | null> | null } | null, studios: { nodes: Array<{ id: number, name: string } | null> | null } | null } | null, statistics: { anime: { count: number, meanScore: number, standardDeviation: number, minutesWatched: number, episodesWatched: number, chaptersRead: number, volumesRead: number, scores: Array<{ score: number | null, count: number, meanScore: number, minutesWatched: number } | null> | null, lengths: Array<{ length: string | null, count: number, meanScore: number, minutesWatched: number } | null> | null, formats: Array<{ format: MediaFormat | null, count: number, meanScore: number, minutesWatched: number } | null> | null, statuses: Array<{ status: MediaListStatus | null, count: number, meanScore: number, minutesWatched: number } | null> | null, releaseYears: Array<{ releaseYear: number | null, count: number, meanScore: number, minutesWatched: number } | null> | null, startYears: Array<{ startYear: number | null, count: number, meanScore: number, minutesWatched: number } | null> | null, genres: Array<{ genre: string | null, count: number, meanScore: number, minutesWatched: number } | null> | null, tags: Array<{ count: number, meanScore: number, minutesWatched: number, tag: { name: string } | null } | null> | null, countries: Array<{ country: unknown, count: number, meanScore: number, minutesWatched: number } | null> | null, voiceActors: Array<{ count: number, meanScore: number, minutesWatched: number, characterIds: Array<number | null>, mediaIds: Array<number | null>, voiceActor: { id: number, name: { full: string | null } | null } | null } | null> | null, staff: Array<{ count: number, meanScore: number, minutesWatched: number, mediaIds: Array<number | null>, staff: { id: number, name: { full: string | null } | null } | null } | null> | null, studios: Array<{ count: number, meanScore: number, minutesWatched: number, mediaIds: Array<number | null>, studio: { id: number, name: string } | null } | null> | null } | null, manga: { count: number, meanScore: number, standardDeviation: number, chaptersRead: number, volumesRead: number, scores: Array<{ score: number | null, count: number, meanScore: number, chaptersRead: number } | null> | null, lengths: Array<{ length: string | null, count: number, meanScore: number, chaptersRead: number } | null> | null, formats: Array<{ format: MediaFormat | null, count: number, meanScore: number, chaptersRead: number } | null> | null, statuses: Array<{ status: MediaListStatus | null, count: number, meanScore: number, chaptersRead: number } | null> | null, releaseYears: Array<{ releaseYear: number | null, count: number, meanScore: number, chaptersRead: number } | null> | null, startYears: Array<{ startYear: number | null, count: number, meanScore: number, chaptersRead: number } | null> | null, genres: Array<{ genre: string | null, count: number, meanScore: number, chaptersRead: number } | null> | null, tags: Array<{ count: number, meanScore: number, chaptersRead: number, tag: { name: string } | null } | null> | null, countries: Array<{ country: unknown, count: number, meanScore: number, chaptersRead: number } | null> | null, staff: Array<{ count: number, meanScore: number, chaptersRead: number, mediaIds: Array<number | null>, staff: { id: number, name: { full: string | null } | null } | null } | null> | null, studios: Array<{ count: number, meanScore: number, chaptersRead: number, mediaIds: Array<number | null>, studio: { id: number, name: string } | null } | null> | null } | null } | null, stats: { watchedTime: number | null, chaptersRead: number | null } | null, previousNames: Array<{ name: string | null, createdAt: number | null, updatedAt: number | null } | null> | null } | null> | null } | null };\n\nexport type GetUserMangaListQueryVariables = Exact<{\n  userId: number | null | undefined;\n  status: MediaListStatus | null | undefined;\n}>;\n\n\nexport type GetUserMangaListQuery = { MediaListCollection: { lists: Array<{ entries: Array<{ id: number, mediaId: number, userId: number, status: MediaListStatus | null, score: number | null, progress: number | null, progressVolumes: number | null, repeat: number | null, priority: number | null, private: boolean | null, notes: string | null, hiddenFromStatusLists: boolean | null, customLists: unknown, advancedScores: unknown, updatedAt: number | null, createdAt: number | null, startedAt: { year: number | null, month: number | null, day: number | null } | null, completedAt: { year: number | null, month: number | null, day: number | null } | null, media: { id: number, idMal: number | null, bannerImage: string | null, description: string | null, format: MediaFormat | null, status: MediaStatus | null, type: MediaType | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, genres: Array<string | null> | null, averageScore: number | null, meanScore: number | null, popularity: number | null, favourites: number | null, trending: number | null, source: MediaSource | null, countryOfOrigin: unknown, isAdult: boolean | null, isLicensed: boolean | null, isLocked: boolean | null, isFavourite: boolean, isFavouriteBlocked: boolean, hashtag: string | null, synonyms: Array<string | null> | null, season: MediaSeason | null, seasonYear: number | null, siteUrl: string | null, updatedAt: number | null, autoCreateForumThread: boolean | null, isRecommendationBlocked: boolean | null, isReviewBlocked: boolean | null, modNotes: string | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null } | null } | null> | null } | null> | null } | null };\n\nexport type GetUserMangaListByUsernameQueryVariables = Exact<{\n  userName: string | null | undefined;\n  status: MediaListStatus | null | undefined;\n}>;\n\n\nexport type GetUserMangaListByUsernameQuery = { MediaListCollection: { lists: Array<{ entries: Array<{ id: number, mediaId: number, userId: number, status: MediaListStatus | null, score: number | null, progress: number | null, progressVolumes: number | null, repeat: number | null, priority: number | null, private: boolean | null, notes: string | null, hiddenFromStatusLists: boolean | null, customLists: unknown, advancedScores: unknown, updatedAt: number | null, createdAt: number | null, startedAt: { year: number | null, month: number | null, day: number | null } | null, completedAt: { year: number | null, month: number | null, day: number | null } | null, media: { id: number, idMal: number | null, bannerImage: string | null, description: string | null, format: MediaFormat | null, status: MediaStatus | null, type: MediaType | null, episodes: number | null, chapters: number | null, volumes: number | null, duration: number | null, genres: Array<string | null> | null, averageScore: number | null, meanScore: number | null, popularity: number | null, favourites: number | null, trending: number | null, source: MediaSource | null, countryOfOrigin: unknown, isAdult: boolean | null, isLicensed: boolean | null, isLocked: boolean | null, isFavourite: boolean, isFavouriteBlocked: boolean, hashtag: string | null, synonyms: Array<string | null> | null, season: MediaSeason | null, seasonYear: number | null, siteUrl: string | null, updatedAt: number | null, autoCreateForumThread: boolean | null, isRecommendationBlocked: boolean | null, isReviewBlocked: boolean | null, modNotes: string | null, title: { romaji: string | null, english: string | null, native: string | null, userPreferred: string | null } | null, coverImage: { large: string | null, medium: string | null, extraLarge: string | null, color: string | null } | null, startDate: { year: number | null, month: number | null, day: number | null } | null, endDate: { year: number | null, month: number | null, day: number | null } | null } | null } | null> | null } | null> | null } | null };\n\nexport type GetUserReviewsQueryVariables = Exact<{\n  userId: number | null | undefined;\n  page?: number | null | undefined;\n  perPage?: number | null | undefined;\n}>;\n\n\nexport type GetUserReviewsQuery = { Page: { pageInfo: { hasNextPage: boolean | null, currentPage: number | null, total: number | null } | null, reviews: Array<{ id: number, userId: number, mediaId: number, mediaType: MediaType | null, summary: string | null, body: string | null, rating: number | null, ratingAmount: number | null, score: number | null, private: boolean | null, siteUrl: string | null, createdAt: number, updatedAt: number, userRating: ReviewRating | null, user: { id: number, name: string } | null, media: { id: number, title: { userPreferred: string | null } | null } | null } | null> | null } | null };\n\nexport type GetUserStatisticsQueryVariables = Exact<{\n  id: number | null | undefined;\n}>;\n\n\nexport type GetUserStatisticsQuery = { User: { statistics: { anime: { count: number, meanScore: number, minutesWatched: number, episodesWatched: number, standardDeviation: number, genres: Array<{ genre: string | null, count: number, meanScore: number, minutesWatched: number } | null> | null, tags: Array<{ count: number, meanScore: number, minutesWatched: number, tag: { id: number, name: string } | null } | null> | null, statuses: Array<{ status: MediaListStatus | null, count: number, meanScore: number, minutesWatched: number } | null> | null, formats: Array<{ format: MediaFormat | null, count: number, meanScore: number, minutesWatched: number } | null> | null, releaseYears: Array<{ releaseYear: number | null, count: number, meanScore: number, minutesWatched: number } | null> | null } | null, manga: { count: number, meanScore: number, chaptersRead: number, volumesRead: number, standardDeviation: number, genres: Array<{ genre: string | null, count: number, meanScore: number, chaptersRead: number } | null> | null, tags: Array<{ count: number, meanScore: number, chaptersRead: number, tag: { id: number, name: string } | null } | null> | null, statuses: Array<{ status: MediaListStatus | null, count: number, meanScore: number, chaptersRead: number } | null> | null, formats: Array<{ format: MediaFormat | null, count: number, meanScore: number, chaptersRead: number } | null> | null } | null } | null } | null };\n\nexport type GetUserStatisticsByUsernameQueryVariables = Exact<{\n  userName: string | null | undefined;\n}>;\n\n\nexport type GetUserStatisticsByUsernameQuery = { User: { statistics: { anime: { count: number, meanScore: number, minutesWatched: number, episodesWatched: number, standardDeviation: number, genres: Array<{ genre: string | null, count: number, meanScore: number, minutesWatched: number } | null> | null, tags: Array<{ count: number, meanScore: number, minutesWatched: number, tag: { id: number, name: string } | null } | null> | null, statuses: Array<{ status: MediaListStatus | null, count: number, meanScore: number, minutesWatched: number } | null> | null, formats: Array<{ format: MediaFormat | null, count: number, meanScore: number, minutesWatched: number } | null> | null, releaseYears: Array<{ releaseYear: number | null, count: number, meanScore: number, minutesWatched: number } | null> | null } | null, manga: { count: number, meanScore: number, chaptersRead: number, volumesRead: number, standardDeviation: number, genres: Array<{ genre: string | null, count: number, meanScore: number, chaptersRead: number } | null> | null, tags: Array<{ count: number, meanScore: number, chaptersRead: number, tag: { id: number, name: string } | null } | null> | null, statuses: Array<{ status: MediaListStatus | null, count: number, meanScore: number, chaptersRead: number } | null> | null, formats: Array<{ format: MediaFormat | null, count: number, meanScore: number, chaptersRead: number } | null> | null } | null } | null } | null };\n\nexport type GetViewerQueryVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type GetViewerQuery = { Viewer: { id: number, name: string, about: string | null, bannerImage: string | null, donatorTier: number | null, donatorBadge: string | null, isFollowing: boolean | null, isFollower: boolean | null, isBlocked: boolean | null, createdAt: number | null, updatedAt: number | null, unreadNotificationCount: number | null, bans: unknown, moderatorRoles: Array<ModRole | null> | null, moderatorStatus: string | null, siteUrl: string | null, avatar: { large: string | null, medium: string | null } | null, options: { titleLanguage: UserTitleLanguage | null, displayAdultContent: boolean | null, airingNotifications: boolean | null, profileColor: string | null, timezone: string | null, activityMergeTime: number | null, staffNameLanguage: UserStaffNameLanguage | null, restrictMessagesToFollowing: boolean | null, notificationOptions: Array<{ type: NotificationType | null, enabled: boolean | null } | null> | null, disabledListActivity: Array<{ disabled: boolean | null, type: MediaListStatus | null } | null> | null } | null, mediaListOptions: { scoreFormat: ScoreFormat | null, rowOrder: string | null, useLegacyLists: boolean | null, sharedTheme: unknown, sharedThemeEnabled: boolean | null, animeList: { sectionOrder: Array<string | null> | null, splitCompletedSectionByFormat: boolean | null, customLists: Array<string | null> | null, advancedScoring: Array<string | null> | null, advancedScoringEnabled: boolean | null } | null, mangaList: { sectionOrder: Array<string | null> | null, splitCompletedSectionByFormat: boolean | null, customLists: Array<string | null> | null, advancedScoring: Array<string | null> | null, advancedScoringEnabled: boolean | null } | null } | null, favourites: { anime: { nodes: Array<{ id: number, title: { romaji: string | null } | null } | null> | null } | null, manga: { nodes: Array<{ id: number, title: { romaji: string | null } | null } | null> | null } | null, characters: { nodes: Array<{ id: number, name: { full: string | null } | null } | null> | null } | null, staff: { nodes: Array<{ id: number, name: { full: string | null } | null } | null> | null } | null, studios: { nodes: Array<{ id: number, name: string } | null> | null } | null } | null, statistics: { anime: { count: number, meanScore: number, standardDeviation: number, minutesWatched: number, episodesWatched: number, chaptersRead: number, volumesRead: number, scores: Array<{ score: number | null, count: number, meanScore: number, minutesWatched: number } | null> | null, lengths: Array<{ length: string | null, count: number, meanScore: number, minutesWatched: number } | null> | null, formats: Array<{ format: MediaFormat | null, count: number, meanScore: number, minutesWatched: number } | null> | null, statuses: Array<{ status: MediaListStatus | null, count: number, meanScore: number, minutesWatched: number } | null> | null, releaseYears: Array<{ releaseYear: number | null, count: number, meanScore: number, minutesWatched: number } | null> | null, startYears: Array<{ startYear: number | null, count: number, meanScore: number, minutesWatched: number } | null> | null, genres: Array<{ genre: string | null, count: number, meanScore: number, minutesWatched: number } | null> | null, tags: Array<{ count: number, meanScore: number, minutesWatched: number, tag: { name: string } | null } | null> | null, countries: Array<{ country: unknown, count: number, meanScore: number, minutesWatched: number } | null> | null, voiceActors: Array<{ count: number, meanScore: number, minutesWatched: number, characterIds: Array<number | null>, mediaIds: Array<number | null>, voiceActor: { id: number, name: { full: string | null } | null } | null } | null> | null, staff: Array<{ count: number, meanScore: number, minutesWatched: number, mediaIds: Array<number | null>, staff: { id: number, name: { full: string | null } | null } | null } | null> | null, studios: Array<{ count: number, meanScore: number, minutesWatched: number, mediaIds: Array<number | null>, studio: { id: number, name: string } | null } | null> | null } | null, manga: { count: number, meanScore: number, standardDeviation: number, chaptersRead: number, volumesRead: number, scores: Array<{ score: number | null, count: number, meanScore: number, chaptersRead: number } | null> | null, lengths: Array<{ length: string | null, count: number, meanScore: number, chaptersRead: number } | null> | null, formats: Array<{ format: MediaFormat | null, count: number, meanScore: number, chaptersRead: number } | null> | null, statuses: Array<{ status: MediaListStatus | null, count: number, meanScore: number, chaptersRead: number } | null> | null, releaseYears: Array<{ releaseYear: number | null, count: number, meanScore: number, chaptersRead: number } | null> | null, startYears: Array<{ startYear: number | null, count: number, meanScore: number, chaptersRead: number } | null> | null, genres: Array<{ genre: string | null, count: number, meanScore: number, chaptersRead: number } | null> | null, tags: Array<{ count: number, meanScore: number, chaptersRead: number, tag: { name: string } | null } | null> | null, countries: Array<{ country: unknown, count: number, meanScore: number, chaptersRead: number } | null> | null, staff: Array<{ count: number, meanScore: number, chaptersRead: number, mediaIds: Array<number | null>, staff: { id: number, name: { full: string | null } | null } | null } | null> | null, studios: Array<{ count: number, meanScore: number, chaptersRead: number, mediaIds: Array<number | null>, studio: { id: number, name: string } | null } | null> | null } | null } | null, stats: { watchedTime: number | null, chaptersRead: number | null } | null, previousNames: Array<{ name: string | null, createdAt: number | null, updatedAt: number | null } | null> | null } | null };\n\nexport type GetViewerStatisticsQueryVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type GetViewerStatisticsQuery = { Viewer: { statistics: { anime: { count: number, meanScore: number, standardDeviation: number, minutesWatched: number, episodesWatched: number, chaptersRead: number, volumesRead: number, scores: Array<{ score: number | null, count: number, meanScore: number, minutesWatched: number } | null> | null, lengths: Array<{ length: string | null, count: number, meanScore: number, minutesWatched: number } | null> | null, formats: Array<{ format: MediaFormat | null, count: number, meanScore: number, minutesWatched: number } | null> | null, statuses: Array<{ status: MediaListStatus | null, count: number, meanScore: number, minutesWatched: number } | null> | null, releaseYears: Array<{ releaseYear: number | null, count: number, meanScore: number, minutesWatched: number } | null> | null, startYears: Array<{ startYear: number | null, count: number, meanScore: number, minutesWatched: number } | null> | null, genres: Array<{ genre: string | null, count: number, meanScore: number, minutesWatched: number } | null> | null, tags: Array<{ count: number, meanScore: number, minutesWatched: number, tag: { name: string } | null } | null> | null, countries: Array<{ country: unknown, count: number, meanScore: number, minutesWatched: number } | null> | null, voiceActors: Array<{ count: number, meanScore: number, minutesWatched: number, characterIds: Array<number | null>, mediaIds: Array<number | null>, voiceActor: { id: number, name: { full: string | null } | null } | null } | null> | null, staff: Array<{ count: number, meanScore: number, minutesWatched: number, mediaIds: Array<number | null>, staff: { id: number, name: { full: string | null } | null } | null } | null> | null, studios: Array<{ count: number, meanScore: number, minutesWatched: number, mediaIds: Array<number | null>, studio: { id: number, name: string } | null } | null> | null } | null, manga: { count: number, meanScore: number, standardDeviation: number, chaptersRead: number, volumesRead: number, scores: Array<{ score: number | null, count: number, meanScore: number, chaptersRead: number } | null> | null, lengths: Array<{ length: string | null, count: number, meanScore: number, chaptersRead: number } | null> | null, formats: Array<{ format: MediaFormat | null, count: number, meanScore: number, chaptersRead: number } | null> | null, statuses: Array<{ status: MediaListStatus | null, count: number, meanScore: number, chaptersRead: number } | null> | null, releaseYears: Array<{ releaseYear: number | null, count: number, meanScore: number, chaptersRead: number } | null> | null, startYears: Array<{ startYear: number | null, count: number, meanScore: number, chaptersRead: number } | null> | null, genres: Array<{ genre: string | null, count: number, meanScore: number, chaptersRead: number } | null> | null, tags: Array<{ count: number, meanScore: number, chaptersRead: number, tag: { name: string } | null } | null> | null, countries: Array<{ country: unknown, count: number, meanScore: number, chaptersRead: number } | null> | null, staff: Array<{ count: number, meanScore: number, chaptersRead: number, mediaIds: Array<number | null>, staff: { id: number, name: { full: string | null } | null } | null } | null> | null, studios: Array<{ count: number, meanScore: number, chaptersRead: number, mediaIds: Array<number | null>, studio: { id: number, name: string } | null } | null> | null } | null } | null } | null };\n\nexport const TitleFragmentDoc = new TypedDocumentString(`\n    fragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}\n    `, {\"fragmentName\":\"TitleFragment\"});\nexport const CoverImageFragmentDoc = new TypedDocumentString(`\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\n    `, {\"fragmentName\":\"CoverImageFragment\"});\nexport const DateFragmentDoc = new TypedDocumentString(`\n    fragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\n    `, {\"fragmentName\":\"DateFragment\"});\nexport const MediaCoreFragmentDoc = new TypedDocumentString(`\n    fragment MediaCoreFragment on Media {\n  id\n  idMal\n  title {\n    ...TitleFragment\n  }\n  coverImage {\n    ...CoverImageFragment\n  }\n  bannerImage\n  description\n  format\n  status\n  type\n  episodes\n  chapters\n  volumes\n  duration\n  genres\n  averageScore\n  meanScore\n  popularity\n  favourites\n  trending\n  source\n  countryOfOrigin\n  isAdult\n  isLicensed\n  isLocked\n  isFavourite\n  isFavouriteBlocked\n  hashtag\n  synonyms\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  siteUrl\n  updatedAt\n  autoCreateForumThread\n  isRecommendationBlocked\n  isReviewBlocked\n  modNotes\n}\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}`, {\"fragmentName\":\"MediaCoreFragment\"});\nexport const MediaTagFragmentDoc = new TypedDocumentString(`\n    fragment MediaTagFragment on MediaTag {\n  id\n  name\n  description\n  category\n  rank\n  isGeneralSpoiler\n  isMediaSpoiler\n  isAdult\n  userId\n}\n    `, {\"fragmentName\":\"MediaTagFragment\"});\nexport const MediaRankFragmentDoc = new TypedDocumentString(`\n    fragment MediaRankFragment on MediaRank {\n  id\n  rank\n  type\n  format\n  year\n  season\n  allTime\n  context\n}\n    `, {\"fragmentName\":\"MediaRankFragment\"});\nexport const MediaExternalLinkFragmentDoc = new TypedDocumentString(`\n    fragment MediaExternalLinkFragment on MediaExternalLink {\n  id\n  url\n  site\n  siteId\n  type\n  language\n  color\n  icon\n  notes\n  isDisabled\n}\n    `, {\"fragmentName\":\"MediaExternalLinkFragment\"});\nexport const ScoreDistributionFragmentDoc = new TypedDocumentString(`\n    fragment ScoreDistributionFragment on ScoreDistribution {\n  score\n  amount\n}\n    `, {\"fragmentName\":\"ScoreDistributionFragment\"});\nexport const StatusDistributionFragmentDoc = new TypedDocumentString(`\n    fragment StatusDistributionFragment on StatusDistribution {\n  status\n  amount\n}\n    `, {\"fragmentName\":\"StatusDistributionFragment\"});\nexport const MediaStatsFragmentDoc = new TypedDocumentString(`\n    fragment MediaStatsFragment on MediaStats {\n  scoreDistribution {\n    ...ScoreDistributionFragment\n  }\n  statusDistribution {\n    ...StatusDistributionFragment\n  }\n  airingProgression {\n    episode\n    score\n    watching\n  }\n}\n    fragment ScoreDistributionFragment on ScoreDistribution {\n  score\n  amount\n}\nfragment StatusDistributionFragment on StatusDistribution {\n  status\n  amount\n}`, {\"fragmentName\":\"MediaStatsFragment\"});\nexport const MediaTrailerFragmentDoc = new TypedDocumentString(`\n    fragment MediaTrailerFragment on MediaTrailer {\n  id\n  site\n  thumbnail\n}\n    `, {\"fragmentName\":\"MediaTrailerFragment\"});\nexport const MediaDetailedFragmentDoc = new TypedDocumentString(`\n    fragment MediaDetailedFragment on Media {\n  ...MediaCoreFragment\n  tags {\n    ...MediaTagFragment\n  }\n  rankings {\n    ...MediaRankFragment\n  }\n  externalLinks {\n    ...MediaExternalLinkFragment\n  }\n  stats {\n    ...MediaStatsFragment\n  }\n  trailer {\n    ...MediaTrailerFragment\n  }\n  reviews(page: 1, perPage: 1) {\n    pageInfo {\n      total\n    }\n  }\n  recommendations(page: 1, perPage: 1) {\n    pageInfo {\n      total\n    }\n  }\n}\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}\nfragment MediaCoreFragment on Media {\n  id\n  idMal\n  title {\n    ...TitleFragment\n  }\n  coverImage {\n    ...CoverImageFragment\n  }\n  bannerImage\n  description\n  format\n  status\n  type\n  episodes\n  chapters\n  volumes\n  duration\n  genres\n  averageScore\n  meanScore\n  popularity\n  favourites\n  trending\n  source\n  countryOfOrigin\n  isAdult\n  isLicensed\n  isLocked\n  isFavourite\n  isFavouriteBlocked\n  hashtag\n  synonyms\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  siteUrl\n  updatedAt\n  autoCreateForumThread\n  isRecommendationBlocked\n  isReviewBlocked\n  modNotes\n}\nfragment MediaExternalLinkFragment on MediaExternalLink {\n  id\n  url\n  site\n  siteId\n  type\n  language\n  color\n  icon\n  notes\n  isDisabled\n}\nfragment MediaRankFragment on MediaRank {\n  id\n  rank\n  type\n  format\n  year\n  season\n  allTime\n  context\n}\nfragment ScoreDistributionFragment on ScoreDistribution {\n  score\n  amount\n}\nfragment StatusDistributionFragment on StatusDistribution {\n  status\n  amount\n}\nfragment MediaStatsFragment on MediaStats {\n  scoreDistribution {\n    ...ScoreDistributionFragment\n  }\n  statusDistribution {\n    ...StatusDistributionFragment\n  }\n  airingProgression {\n    episode\n    score\n    watching\n  }\n}\nfragment MediaTagFragment on MediaTag {\n  id\n  name\n  description\n  category\n  rank\n  isGeneralSpoiler\n  isMediaSpoiler\n  isAdult\n  userId\n}\nfragment MediaTrailerFragment on MediaTrailer {\n  id\n  site\n  thumbnail\n}`, {\"fragmentName\":\"MediaDetailedFragment\"});\nexport const AiringScheduleFragmentDoc = new TypedDocumentString(`\n    fragment AiringScheduleFragment on AiringSchedule {\n  id\n  airingAt\n  timeUntilAiring\n  episode\n  mediaId\n}\n    `, {\"fragmentName\":\"AiringScheduleFragment\"});\nexport const MediaStreamingEpisodeFragmentDoc = new TypedDocumentString(`\n    fragment MediaStreamingEpisodeFragment on MediaStreamingEpisode {\n  title\n  thumbnail\n  url\n  site\n}\n    `, {\"fragmentName\":\"MediaStreamingEpisodeFragment\"});\nexport const StudioNodeFragmentDoc = new TypedDocumentString(`\n    fragment StudioNodeFragment on Studio {\n  id\n  name\n  isAnimationStudio\n  favourites\n  isFavourite\n  siteUrl\n}\n    `, {\"fragmentName\":\"StudioNodeFragment\"});\nexport const StudioEdgeFragmentDoc = new TypedDocumentString(`\n    fragment StudioEdgeFragment on StudioEdge {\n  isMain\n  favouriteOrder\n  node {\n    ...StudioNodeFragment\n  }\n}\n    fragment StudioNodeFragment on Studio {\n  id\n  name\n  isAnimationStudio\n  favourites\n  isFavourite\n  siteUrl\n}`, {\"fragmentName\":\"StudioEdgeFragment\"});\nexport const StudioConnectionFragmentDoc = new TypedDocumentString(`\n    fragment StudioConnectionFragment on StudioConnection {\n  edges {\n    ...StudioEdgeFragment\n  }\n}\n    fragment StudioNodeFragment on Studio {\n  id\n  name\n  isAnimationStudio\n  favourites\n  isFavourite\n  siteUrl\n}\nfragment StudioEdgeFragment on StudioEdge {\n  isMain\n  favouriteOrder\n  node {\n    ...StudioNodeFragment\n  }\n}`, {\"fragmentName\":\"StudioConnectionFragment\"});\nexport const MediaRelationNodeFragmentDoc = new TypedDocumentString(`\n    fragment MediaRelationNodeFragment on Media {\n  id\n  title {\n    ...TitleFragment\n  }\n  type\n  format\n  status\n  coverImage {\n    ...CoverImageFragment\n  }\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  episodes\n  chapters\n  volumes\n  duration\n  averageScore\n  popularity\n  favourites\n  genres\n  isAdult\n  countryOfOrigin\n  siteUrl\n}\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}`, {\"fragmentName\":\"MediaRelationNodeFragment\"});\nexport const MediaRelationEdgeFragmentDoc = new TypedDocumentString(`\n    fragment MediaRelationEdgeFragment on MediaEdge {\n  id\n  relationType\n  isMainStudio\n  characterRole\n  characterName\n  roleNotes\n  dubGroup\n  staffRole\n  favouriteOrder\n  node {\n    ...MediaRelationNodeFragment\n  }\n}\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}\nfragment MediaRelationNodeFragment on Media {\n  id\n  title {\n    ...TitleFragment\n  }\n  type\n  format\n  status\n  coverImage {\n    ...CoverImageFragment\n  }\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  episodes\n  chapters\n  volumes\n  duration\n  averageScore\n  popularity\n  favourites\n  genres\n  isAdult\n  countryOfOrigin\n  siteUrl\n}`, {\"fragmentName\":\"MediaRelationEdgeFragment\"});\nexport const MediaRelationConnectionFragmentDoc = new TypedDocumentString(`\n    fragment MediaRelationConnectionFragment on MediaConnection {\n  edges {\n    ...MediaRelationEdgeFragment\n  }\n}\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}\nfragment MediaRelationNodeFragment on Media {\n  id\n  title {\n    ...TitleFragment\n  }\n  type\n  format\n  status\n  coverImage {\n    ...CoverImageFragment\n  }\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  episodes\n  chapters\n  volumes\n  duration\n  averageScore\n  popularity\n  favourites\n  genres\n  isAdult\n  countryOfOrigin\n  siteUrl\n}\nfragment MediaRelationEdgeFragment on MediaEdge {\n  id\n  relationType\n  isMainStudio\n  characterRole\n  characterName\n  roleNotes\n  dubGroup\n  staffRole\n  favouriteOrder\n  node {\n    ...MediaRelationNodeFragment\n  }\n}`, {\"fragmentName\":\"MediaRelationConnectionFragment\"});\nexport const CharacterNameFragmentDoc = new TypedDocumentString(`\n    fragment CharacterNameFragment on CharacterName {\n  alternative\n  alternativeSpoiler\n  first\n  full\n  last\n  middle\n  native\n  userPreferred\n}\n    `, {\"fragmentName\":\"CharacterNameFragment\"});\nexport const CharacterImageFragmentDoc = new TypedDocumentString(`\n    fragment CharacterImageFragment on CharacterImage {\n  large\n  medium\n}\n    `, {\"fragmentName\":\"CharacterImageFragment\"});\nexport const CharacterBasicFragmentDoc = new TypedDocumentString(`\n    fragment CharacterBasicFragment on Character {\n  id\n  name {\n    ...CharacterNameFragment\n  }\n  image {\n    ...CharacterImageFragment\n  }\n  description\n  gender\n  dateOfBirth {\n    ...DateFragment\n  }\n  age\n  bloodType\n  isFavourite\n  isFavouriteBlocked\n  favourites\n  siteUrl\n}\n    fragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment CharacterImageFragment on CharacterImage {\n  large\n  medium\n}\nfragment CharacterNameFragment on CharacterName {\n  alternative\n  alternativeSpoiler\n  first\n  full\n  last\n  middle\n  native\n  userPreferred\n}`, {\"fragmentName\":\"CharacterBasicFragment\"});\nexport const CharacterEdgeFragmentDoc = new TypedDocumentString(`\n    fragment CharacterEdgeFragment on CharacterEdge {\n  id\n  role\n  name\n  voiceActors {\n    id\n    name {\n      full\n      native\n    }\n    image {\n      large\n      medium\n    }\n    languageV2\n  }\n  voiceActorRoles {\n    roleNotes\n    dubGroup\n    voiceActor {\n      id\n      name {\n        full\n      }\n    }\n  }\n  favouriteOrder\n  node {\n    ...CharacterBasicFragment\n  }\n}\n    fragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment CharacterImageFragment on CharacterImage {\n  large\n  medium\n}\nfragment CharacterNameFragment on CharacterName {\n  alternative\n  alternativeSpoiler\n  first\n  full\n  last\n  middle\n  native\n  userPreferred\n}\nfragment CharacterBasicFragment on Character {\n  id\n  name {\n    ...CharacterNameFragment\n  }\n  image {\n    ...CharacterImageFragment\n  }\n  description\n  gender\n  dateOfBirth {\n    ...DateFragment\n  }\n  age\n  bloodType\n  isFavourite\n  isFavouriteBlocked\n  favourites\n  siteUrl\n}`, {\"fragmentName\":\"CharacterEdgeFragment\"});\nexport const CharacterConnectionFragmentDoc = new TypedDocumentString(`\n    fragment CharacterConnectionFragment on CharacterConnection {\n  edges {\n    ...CharacterEdgeFragment\n  }\n  nodes {\n    ...CharacterBasicFragment\n  }\n}\n    fragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment CharacterImageFragment on CharacterImage {\n  large\n  medium\n}\nfragment CharacterEdgeFragment on CharacterEdge {\n  id\n  role\n  name\n  voiceActors {\n    id\n    name {\n      full\n      native\n    }\n    image {\n      large\n      medium\n    }\n    languageV2\n  }\n  voiceActorRoles {\n    roleNotes\n    dubGroup\n    voiceActor {\n      id\n      name {\n        full\n      }\n    }\n  }\n  favouriteOrder\n  node {\n    ...CharacterBasicFragment\n  }\n}\nfragment CharacterNameFragment on CharacterName {\n  alternative\n  alternativeSpoiler\n  first\n  full\n  last\n  middle\n  native\n  userPreferred\n}\nfragment CharacterBasicFragment on Character {\n  id\n  name {\n    ...CharacterNameFragment\n  }\n  image {\n    ...CharacterImageFragment\n  }\n  description\n  gender\n  dateOfBirth {\n    ...DateFragment\n  }\n  age\n  bloodType\n  isFavourite\n  isFavouriteBlocked\n  favourites\n  siteUrl\n}`, {\"fragmentName\":\"CharacterConnectionFragment\"});\nexport const StaffNameFragmentDoc = new TypedDocumentString(`\n    fragment StaffNameFragment on StaffName {\n  full\n  native\n  first\n  middle\n  last\n  userPreferred\n}\n    `, {\"fragmentName\":\"StaffNameFragment\"});\nexport const StaffImageFragmentDoc = new TypedDocumentString(`\n    fragment StaffImageFragment on StaffImage {\n  large\n  medium\n}\n    `, {\"fragmentName\":\"StaffImageFragment\"});\nexport const StaffBasicFragmentDoc = new TypedDocumentString(`\n    fragment StaffBasicFragment on Staff {\n  id\n  name {\n    ...StaffNameFragment\n  }\n  image {\n    ...StaffImageFragment\n  }\n  description\n  primaryOccupations\n  gender\n  bloodType\n  homeTown\n  languageV2\n  yearsActive\n  favourites\n  isFavourite\n  isFavouriteBlocked\n  dateOfBirth {\n    ...DateFragment\n  }\n  dateOfDeath {\n    ...DateFragment\n  }\n  age\n  siteUrl\n}\n    fragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment StaffImageFragment on StaffImage {\n  large\n  medium\n}\nfragment StaffNameFragment on StaffName {\n  full\n  native\n  first\n  middle\n  last\n  userPreferred\n}`, {\"fragmentName\":\"StaffBasicFragment\"});\nexport const StaffEdgeFragmentDoc = new TypedDocumentString(`\n    fragment StaffEdgeFragment on StaffEdge {\n  id\n  role\n  favouriteOrder\n  node {\n    ...StaffBasicFragment\n  }\n}\n    fragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment StaffImageFragment on StaffImage {\n  large\n  medium\n}\nfragment StaffNameFragment on StaffName {\n  full\n  native\n  first\n  middle\n  last\n  userPreferred\n}\nfragment StaffBasicFragment on Staff {\n  id\n  name {\n    ...StaffNameFragment\n  }\n  image {\n    ...StaffImageFragment\n  }\n  description\n  primaryOccupations\n  gender\n  bloodType\n  homeTown\n  languageV2\n  yearsActive\n  favourites\n  isFavourite\n  isFavouriteBlocked\n  dateOfBirth {\n    ...DateFragment\n  }\n  dateOfDeath {\n    ...DateFragment\n  }\n  age\n  siteUrl\n}`, {\"fragmentName\":\"StaffEdgeFragment\"});\nexport const StaffConnectionFragmentDoc = new TypedDocumentString(`\n    fragment StaffConnectionFragment on StaffConnection {\n  edges {\n    ...StaffEdgeFragment\n  }\n  nodes {\n    ...StaffBasicFragment\n  }\n}\n    fragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment StaffImageFragment on StaffImage {\n  large\n  medium\n}\nfragment StaffEdgeFragment on StaffEdge {\n  id\n  role\n  favouriteOrder\n  node {\n    ...StaffBasicFragment\n  }\n}\nfragment StaffNameFragment on StaffName {\n  full\n  native\n  first\n  middle\n  last\n  userPreferred\n}\nfragment StaffBasicFragment on Staff {\n  id\n  name {\n    ...StaffNameFragment\n  }\n  image {\n    ...StaffImageFragment\n  }\n  description\n  primaryOccupations\n  gender\n  bloodType\n  homeTown\n  languageV2\n  yearsActive\n  favourites\n  isFavourite\n  isFavouriteBlocked\n  dateOfBirth {\n    ...DateFragment\n  }\n  dateOfDeath {\n    ...DateFragment\n  }\n  age\n  siteUrl\n}`, {\"fragmentName\":\"StaffConnectionFragment\"});\nexport const AnimeFragmentDoc = new TypedDocumentString(`\n    fragment AnimeFragment on Media {\n  ...MediaDetailedFragment\n  nextAiringEpisode {\n    ...AiringScheduleFragment\n  }\n  streamingEpisodes {\n    ...MediaStreamingEpisodeFragment\n  }\n  studios {\n    ...StudioConnectionFragment\n  }\n  relations {\n    ...MediaRelationConnectionFragment\n  }\n  characters {\n    ...CharacterConnectionFragment\n  }\n  staff {\n    ...StaffConnectionFragment\n  }\n}\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment CharacterImageFragment on CharacterImage {\n  large\n  medium\n}\nfragment StaffImageFragment on StaffImage {\n  large\n  medium\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}\nfragment CharacterEdgeFragment on CharacterEdge {\n  id\n  role\n  name\n  voiceActors {\n    id\n    name {\n      full\n      native\n    }\n    image {\n      large\n      medium\n    }\n    languageV2\n  }\n  voiceActorRoles {\n    roleNotes\n    dubGroup\n    voiceActor {\n      id\n      name {\n        full\n      }\n    }\n  }\n  favouriteOrder\n  node {\n    ...CharacterBasicFragment\n  }\n}\nfragment CharacterConnectionFragment on CharacterConnection {\n  edges {\n    ...CharacterEdgeFragment\n  }\n  nodes {\n    ...CharacterBasicFragment\n  }\n}\nfragment MediaRelationNodeFragment on Media {\n  id\n  title {\n    ...TitleFragment\n  }\n  type\n  format\n  status\n  coverImage {\n    ...CoverImageFragment\n  }\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  episodes\n  chapters\n  volumes\n  duration\n  averageScore\n  popularity\n  favourites\n  genres\n  isAdult\n  countryOfOrigin\n  siteUrl\n}\nfragment MediaRelationEdgeFragment on MediaEdge {\n  id\n  relationType\n  isMainStudio\n  characterRole\n  characterName\n  roleNotes\n  dubGroup\n  staffRole\n  favouriteOrder\n  node {\n    ...MediaRelationNodeFragment\n  }\n}\nfragment MediaRelationConnectionFragment on MediaConnection {\n  edges {\n    ...MediaRelationEdgeFragment\n  }\n}\nfragment StaffEdgeFragment on StaffEdge {\n  id\n  role\n  favouriteOrder\n  node {\n    ...StaffBasicFragment\n  }\n}\nfragment StaffConnectionFragment on StaffConnection {\n  edges {\n    ...StaffEdgeFragment\n  }\n  nodes {\n    ...StaffBasicFragment\n  }\n}\nfragment StudioNodeFragment on Studio {\n  id\n  name\n  isAnimationStudio\n  favourites\n  isFavourite\n  siteUrl\n}\nfragment StudioEdgeFragment on StudioEdge {\n  isMain\n  favouriteOrder\n  node {\n    ...StudioNodeFragment\n  }\n}\nfragment StudioConnectionFragment on StudioConnection {\n  edges {\n    ...StudioEdgeFragment\n  }\n}\nfragment CharacterNameFragment on CharacterName {\n  alternative\n  alternativeSpoiler\n  first\n  full\n  last\n  middle\n  native\n  userPreferred\n}\nfragment CharacterBasicFragment on Character {\n  id\n  name {\n    ...CharacterNameFragment\n  }\n  image {\n    ...CharacterImageFragment\n  }\n  description\n  gender\n  dateOfBirth {\n    ...DateFragment\n  }\n  age\n  bloodType\n  isFavourite\n  isFavouriteBlocked\n  favourites\n  siteUrl\n}\nfragment StaffNameFragment on StaffName {\n  full\n  native\n  first\n  middle\n  last\n  userPreferred\n}\nfragment StaffBasicFragment on Staff {\n  id\n  name {\n    ...StaffNameFragment\n  }\n  image {\n    ...StaffImageFragment\n  }\n  description\n  primaryOccupations\n  gender\n  bloodType\n  homeTown\n  languageV2\n  yearsActive\n  favourites\n  isFavourite\n  isFavouriteBlocked\n  dateOfBirth {\n    ...DateFragment\n  }\n  dateOfDeath {\n    ...DateFragment\n  }\n  age\n  siteUrl\n}\nfragment MediaCoreFragment on Media {\n  id\n  idMal\n  title {\n    ...TitleFragment\n  }\n  coverImage {\n    ...CoverImageFragment\n  }\n  bannerImage\n  description\n  format\n  status\n  type\n  episodes\n  chapters\n  volumes\n  duration\n  genres\n  averageScore\n  meanScore\n  popularity\n  favourites\n  trending\n  source\n  countryOfOrigin\n  isAdult\n  isLicensed\n  isLocked\n  isFavourite\n  isFavouriteBlocked\n  hashtag\n  synonyms\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  siteUrl\n  updatedAt\n  autoCreateForumThread\n  isRecommendationBlocked\n  isReviewBlocked\n  modNotes\n}\nfragment MediaDetailedFragment on Media {\n  ...MediaCoreFragment\n  tags {\n    ...MediaTagFragment\n  }\n  rankings {\n    ...MediaRankFragment\n  }\n  externalLinks {\n    ...MediaExternalLinkFragment\n  }\n  stats {\n    ...MediaStatsFragment\n  }\n  trailer {\n    ...MediaTrailerFragment\n  }\n  reviews(page: 1, perPage: 1) {\n    pageInfo {\n      total\n    }\n  }\n  recommendations(page: 1, perPage: 1) {\n    pageInfo {\n      total\n    }\n  }\n}\nfragment MediaExternalLinkFragment on MediaExternalLink {\n  id\n  url\n  site\n  siteId\n  type\n  language\n  color\n  icon\n  notes\n  isDisabled\n}\nfragment MediaRankFragment on MediaRank {\n  id\n  rank\n  type\n  format\n  year\n  season\n  allTime\n  context\n}\nfragment ScoreDistributionFragment on ScoreDistribution {\n  score\n  amount\n}\nfragment StatusDistributionFragment on StatusDistribution {\n  status\n  amount\n}\nfragment MediaStatsFragment on MediaStats {\n  scoreDistribution {\n    ...ScoreDistributionFragment\n  }\n  statusDistribution {\n    ...StatusDistributionFragment\n  }\n  airingProgression {\n    episode\n    score\n    watching\n  }\n}\nfragment MediaStreamingEpisodeFragment on MediaStreamingEpisode {\n  title\n  thumbnail\n  url\n  site\n}\nfragment AiringScheduleFragment on AiringSchedule {\n  id\n  airingAt\n  timeUntilAiring\n  episode\n  mediaId\n}\nfragment MediaTagFragment on MediaTag {\n  id\n  name\n  description\n  category\n  rank\n  isGeneralSpoiler\n  isMediaSpoiler\n  isAdult\n  userId\n}\nfragment MediaTrailerFragment on MediaTrailer {\n  id\n  site\n  thumbnail\n}`, {\"fragmentName\":\"AnimeFragment\"});\nexport const CharacterFragmentDoc = new TypedDocumentString(`\n    fragment CharacterFragment on Character {\n  ...CharacterBasicFragment\n}\n    fragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment CharacterImageFragment on CharacterImage {\n  large\n  medium\n}\nfragment CharacterNameFragment on CharacterName {\n  alternative\n  alternativeSpoiler\n  first\n  full\n  last\n  middle\n  native\n  userPreferred\n}\nfragment CharacterBasicFragment on Character {\n  id\n  name {\n    ...CharacterNameFragment\n  }\n  image {\n    ...CharacterImageFragment\n  }\n  description\n  gender\n  dateOfBirth {\n    ...DateFragment\n  }\n  age\n  bloodType\n  isFavourite\n  isFavouriteBlocked\n  favourites\n  siteUrl\n}`, {\"fragmentName\":\"CharacterFragment\"});\nexport const MangaFragmentDoc = new TypedDocumentString(`\n    fragment MangaFragment on Media {\n  ...MediaDetailedFragment\n  relations {\n    ...MediaRelationConnectionFragment\n  }\n  characters {\n    ...CharacterConnectionFragment\n  }\n  staff {\n    ...StaffConnectionFragment\n  }\n}\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment CharacterImageFragment on CharacterImage {\n  large\n  medium\n}\nfragment StaffImageFragment on StaffImage {\n  large\n  medium\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}\nfragment CharacterEdgeFragment on CharacterEdge {\n  id\n  role\n  name\n  voiceActors {\n    id\n    name {\n      full\n      native\n    }\n    image {\n      large\n      medium\n    }\n    languageV2\n  }\n  voiceActorRoles {\n    roleNotes\n    dubGroup\n    voiceActor {\n      id\n      name {\n        full\n      }\n    }\n  }\n  favouriteOrder\n  node {\n    ...CharacterBasicFragment\n  }\n}\nfragment CharacterConnectionFragment on CharacterConnection {\n  edges {\n    ...CharacterEdgeFragment\n  }\n  nodes {\n    ...CharacterBasicFragment\n  }\n}\nfragment MediaRelationNodeFragment on Media {\n  id\n  title {\n    ...TitleFragment\n  }\n  type\n  format\n  status\n  coverImage {\n    ...CoverImageFragment\n  }\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  episodes\n  chapters\n  volumes\n  duration\n  averageScore\n  popularity\n  favourites\n  genres\n  isAdult\n  countryOfOrigin\n  siteUrl\n}\nfragment MediaRelationEdgeFragment on MediaEdge {\n  id\n  relationType\n  isMainStudio\n  characterRole\n  characterName\n  roleNotes\n  dubGroup\n  staffRole\n  favouriteOrder\n  node {\n    ...MediaRelationNodeFragment\n  }\n}\nfragment MediaRelationConnectionFragment on MediaConnection {\n  edges {\n    ...MediaRelationEdgeFragment\n  }\n}\nfragment StaffEdgeFragment on StaffEdge {\n  id\n  role\n  favouriteOrder\n  node {\n    ...StaffBasicFragment\n  }\n}\nfragment StaffConnectionFragment on StaffConnection {\n  edges {\n    ...StaffEdgeFragment\n  }\n  nodes {\n    ...StaffBasicFragment\n  }\n}\nfragment CharacterNameFragment on CharacterName {\n  alternative\n  alternativeSpoiler\n  first\n  full\n  last\n  middle\n  native\n  userPreferred\n}\nfragment CharacterBasicFragment on Character {\n  id\n  name {\n    ...CharacterNameFragment\n  }\n  image {\n    ...CharacterImageFragment\n  }\n  description\n  gender\n  dateOfBirth {\n    ...DateFragment\n  }\n  age\n  bloodType\n  isFavourite\n  isFavouriteBlocked\n  favourites\n  siteUrl\n}\nfragment StaffNameFragment on StaffName {\n  full\n  native\n  first\n  middle\n  last\n  userPreferred\n}\nfragment StaffBasicFragment on Staff {\n  id\n  name {\n    ...StaffNameFragment\n  }\n  image {\n    ...StaffImageFragment\n  }\n  description\n  primaryOccupations\n  gender\n  bloodType\n  homeTown\n  languageV2\n  yearsActive\n  favourites\n  isFavourite\n  isFavouriteBlocked\n  dateOfBirth {\n    ...DateFragment\n  }\n  dateOfDeath {\n    ...DateFragment\n  }\n  age\n  siteUrl\n}\nfragment MediaCoreFragment on Media {\n  id\n  idMal\n  title {\n    ...TitleFragment\n  }\n  coverImage {\n    ...CoverImageFragment\n  }\n  bannerImage\n  description\n  format\n  status\n  type\n  episodes\n  chapters\n  volumes\n  duration\n  genres\n  averageScore\n  meanScore\n  popularity\n  favourites\n  trending\n  source\n  countryOfOrigin\n  isAdult\n  isLicensed\n  isLocked\n  isFavourite\n  isFavouriteBlocked\n  hashtag\n  synonyms\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  siteUrl\n  updatedAt\n  autoCreateForumThread\n  isRecommendationBlocked\n  isReviewBlocked\n  modNotes\n}\nfragment MediaDetailedFragment on Media {\n  ...MediaCoreFragment\n  tags {\n    ...MediaTagFragment\n  }\n  rankings {\n    ...MediaRankFragment\n  }\n  externalLinks {\n    ...MediaExternalLinkFragment\n  }\n  stats {\n    ...MediaStatsFragment\n  }\n  trailer {\n    ...MediaTrailerFragment\n  }\n  reviews(page: 1, perPage: 1) {\n    pageInfo {\n      total\n    }\n  }\n  recommendations(page: 1, perPage: 1) {\n    pageInfo {\n      total\n    }\n  }\n}\nfragment MediaExternalLinkFragment on MediaExternalLink {\n  id\n  url\n  site\n  siteId\n  type\n  language\n  color\n  icon\n  notes\n  isDisabled\n}\nfragment MediaRankFragment on MediaRank {\n  id\n  rank\n  type\n  format\n  year\n  season\n  allTime\n  context\n}\nfragment ScoreDistributionFragment on ScoreDistribution {\n  score\n  amount\n}\nfragment StatusDistributionFragment on StatusDistribution {\n  status\n  amount\n}\nfragment MediaStatsFragment on MediaStats {\n  scoreDistribution {\n    ...ScoreDistributionFragment\n  }\n  statusDistribution {\n    ...StatusDistributionFragment\n  }\n  airingProgression {\n    episode\n    score\n    watching\n  }\n}\nfragment MediaTagFragment on MediaTag {\n  id\n  name\n  description\n  category\n  rank\n  isGeneralSpoiler\n  isMediaSpoiler\n  isAdult\n  userId\n}\nfragment MediaTrailerFragment on MediaTrailer {\n  id\n  site\n  thumbnail\n}`, {\"fragmentName\":\"MangaFragment\"});\nexport const MediaTagBasicFragmentDoc = new TypedDocumentString(`\n    fragment MediaTagBasicFragment on MediaTag {\n  id\n  name\n  description\n  category\n  rank\n}\n    `, {\"fragmentName\":\"MediaTagBasicFragment\"});\nexport const MediaExternalLinkBasicFragmentDoc = new TypedDocumentString(`\n    fragment MediaExternalLinkBasicFragment on MediaExternalLink {\n  id\n  url\n  site\n  siteId\n  type\n}\n    `, {\"fragmentName\":\"MediaExternalLinkBasicFragment\"});\nexport const MediaBasicFragmentDoc = new TypedDocumentString(`\n    fragment MediaBasicFragment on Media {\n  ...MediaCoreFragment\n  tags {\n    ...MediaTagBasicFragment\n  }\n  externalLinks {\n    ...MediaExternalLinkBasicFragment\n  }\n}\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}\nfragment MediaCoreFragment on Media {\n  id\n  idMal\n  title {\n    ...TitleFragment\n  }\n  coverImage {\n    ...CoverImageFragment\n  }\n  bannerImage\n  description\n  format\n  status\n  type\n  episodes\n  chapters\n  volumes\n  duration\n  genres\n  averageScore\n  meanScore\n  popularity\n  favourites\n  trending\n  source\n  countryOfOrigin\n  isAdult\n  isLicensed\n  isLocked\n  isFavourite\n  isFavouriteBlocked\n  hashtag\n  synonyms\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  siteUrl\n  updatedAt\n  autoCreateForumThread\n  isRecommendationBlocked\n  isReviewBlocked\n  modNotes\n}\nfragment MediaExternalLinkBasicFragment on MediaExternalLink {\n  id\n  url\n  site\n  siteId\n  type\n}\nfragment MediaTagBasicFragment on MediaTag {\n  id\n  name\n  description\n  category\n  rank\n}`, {\"fragmentName\":\"MediaBasicFragment\"});\nexport const MediaFragmentDoc = new TypedDocumentString(`\n    fragment MediaFragment on Media {\n  ...MediaBasicFragment\n  nextAiringEpisode {\n    id\n    airingAt\n    timeUntilAiring\n    episode\n    mediaId\n  }\n}\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}\nfragment MediaCoreFragment on Media {\n  id\n  idMal\n  title {\n    ...TitleFragment\n  }\n  coverImage {\n    ...CoverImageFragment\n  }\n  bannerImage\n  description\n  format\n  status\n  type\n  episodes\n  chapters\n  volumes\n  duration\n  genres\n  averageScore\n  meanScore\n  popularity\n  favourites\n  trending\n  source\n  countryOfOrigin\n  isAdult\n  isLicensed\n  isLocked\n  isFavourite\n  isFavouriteBlocked\n  hashtag\n  synonyms\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  siteUrl\n  updatedAt\n  autoCreateForumThread\n  isRecommendationBlocked\n  isReviewBlocked\n  modNotes\n}\nfragment MediaBasicFragment on Media {\n  ...MediaCoreFragment\n  tags {\n    ...MediaTagBasicFragment\n  }\n  externalLinks {\n    ...MediaExternalLinkBasicFragment\n  }\n}\nfragment MediaExternalLinkBasicFragment on MediaExternalLink {\n  id\n  url\n  site\n  siteId\n  type\n}\nfragment MediaTagBasicFragment on MediaTag {\n  id\n  name\n  description\n  category\n  rank\n}`, {\"fragmentName\":\"MediaFragment\"});\nexport const MediaListFragmentDoc = new TypedDocumentString(`\n    fragment MediaListFragment on MediaList {\n  id\n  mediaId\n  userId\n  status\n  score\n  progress\n  progressVolumes\n  repeat\n  priority\n  private\n  notes\n  hiddenFromStatusLists\n  customLists\n  advancedScores\n  startedAt {\n    ...DateFragment\n  }\n  completedAt {\n    ...DateFragment\n  }\n  updatedAt\n  createdAt\n  media {\n    ...MediaCoreFragment\n  }\n}\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}\nfragment MediaCoreFragment on Media {\n  id\n  idMal\n  title {\n    ...TitleFragment\n  }\n  coverImage {\n    ...CoverImageFragment\n  }\n  bannerImage\n  description\n  format\n  status\n  type\n  episodes\n  chapters\n  volumes\n  duration\n  genres\n  averageScore\n  meanScore\n  popularity\n  favourites\n  trending\n  source\n  countryOfOrigin\n  isAdult\n  isLicensed\n  isLocked\n  isFavourite\n  isFavouriteBlocked\n  hashtag\n  synonyms\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  siteUrl\n  updatedAt\n  autoCreateForumThread\n  isRecommendationBlocked\n  isReviewBlocked\n  modNotes\n}`, {\"fragmentName\":\"MediaListFragment\"});\nexport const RecommendationFragmentDoc = new TypedDocumentString(`\n    fragment RecommendationFragment on Recommendation {\n  id\n  rating\n  userRating\n  user {\n    id\n    name\n  }\n  media {\n    id\n    title {\n      userPreferred\n    }\n  }\n  mediaRecommendation {\n    id\n    title {\n      userPreferred\n    }\n  }\n}\n    `, {\"fragmentName\":\"RecommendationFragment\"});\nexport const ReviewFragmentDoc = new TypedDocumentString(`\n    fragment ReviewFragment on Review {\n  id\n  userId\n  mediaId\n  mediaType\n  summary\n  body\n  rating\n  ratingAmount\n  score\n  private\n  siteUrl\n  createdAt\n  updatedAt\n  userRating\n  user {\n    id\n    name\n  }\n  media {\n    id\n    title {\n      userPreferred\n    }\n  }\n}\n    `, {\"fragmentName\":\"ReviewFragment\"});\nexport const StaffFragmentDoc = new TypedDocumentString(`\n    fragment StaffFragment on Staff {\n  ...StaffBasicFragment\n}\n    fragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment StaffImageFragment on StaffImage {\n  large\n  medium\n}\nfragment StaffNameFragment on StaffName {\n  full\n  native\n  first\n  middle\n  last\n  userPreferred\n}\nfragment StaffBasicFragment on Staff {\n  id\n  name {\n    ...StaffNameFragment\n  }\n  image {\n    ...StaffImageFragment\n  }\n  description\n  primaryOccupations\n  gender\n  bloodType\n  homeTown\n  languageV2\n  yearsActive\n  favourites\n  isFavourite\n  isFavouriteBlocked\n  dateOfBirth {\n    ...DateFragment\n  }\n  dateOfDeath {\n    ...DateFragment\n  }\n  age\n  siteUrl\n}`, {\"fragmentName\":\"StaffFragment\"});\nexport const StudioFragmentDoc = new TypedDocumentString(`\n    fragment StudioFragment on Studio {\n  ...StudioNodeFragment\n  media {\n    pageInfo {\n      total\n      perPage\n      currentPage\n      lastPage\n      hasNextPage\n    }\n  }\n}\n    fragment StudioNodeFragment on Studio {\n  id\n  name\n  isAnimationStudio\n  favourites\n  isFavourite\n  siteUrl\n}`, {\"fragmentName\":\"StudioFragment\"});\nexport const UserAvatarFragmentDoc = new TypedDocumentString(`\n    fragment UserAvatarFragment on UserAvatar {\n  large\n  medium\n}\n    `, {\"fragmentName\":\"UserAvatarFragment\"});\nexport const UserOptionsFragmentDoc = new TypedDocumentString(`\n    fragment UserOptionsFragment on UserOptions {\n  titleLanguage\n  displayAdultContent\n  airingNotifications\n  profileColor\n  notificationOptions {\n    type\n    enabled\n  }\n  timezone\n  activityMergeTime\n  staffNameLanguage\n  restrictMessagesToFollowing\n  disabledListActivity {\n    disabled\n    type\n  }\n}\n    `, {\"fragmentName\":\"UserOptionsFragment\"});\nexport const UserMediaListOptionsFragmentDoc = new TypedDocumentString(`\n    fragment UserMediaListOptionsFragment on MediaListOptions {\n  scoreFormat\n  rowOrder\n  useLegacyLists\n  animeList {\n    sectionOrder\n    splitCompletedSectionByFormat\n    customLists\n    advancedScoring\n    advancedScoringEnabled\n  }\n  mangaList {\n    sectionOrder\n    splitCompletedSectionByFormat\n    customLists\n    advancedScoring\n    advancedScoringEnabled\n  }\n  sharedTheme\n  sharedThemeEnabled\n}\n    `, {\"fragmentName\":\"UserMediaListOptionsFragment\"});\nexport const UserFavouritesFragmentDoc = new TypedDocumentString(`\n    fragment UserFavouritesFragment on Favourites {\n  anime {\n    nodes {\n      id\n      title {\n        romaji\n      }\n    }\n  }\n  manga {\n    nodes {\n      id\n      title {\n        romaji\n      }\n    }\n  }\n  characters {\n    nodes {\n      id\n      name {\n        full\n      }\n    }\n  }\n  staff {\n    nodes {\n      id\n      name {\n        full\n      }\n    }\n  }\n  studios {\n    nodes {\n      id\n      name\n    }\n  }\n}\n    `, {\"fragmentName\":\"UserFavouritesFragment\"});\nexport const UserStatisticsFragmentDoc = new TypedDocumentString(`\n    fragment UserStatisticsFragment on UserStatisticTypes {\n  anime {\n    count\n    meanScore\n    standardDeviation\n    minutesWatched\n    episodesWatched\n    chaptersRead\n    volumesRead\n    scores {\n      score\n      count\n      meanScore\n      minutesWatched\n    }\n    lengths {\n      length\n      count\n      meanScore\n      minutesWatched\n    }\n    formats {\n      format\n      count\n      meanScore\n      minutesWatched\n    }\n    statuses {\n      status\n      count\n      meanScore\n      minutesWatched\n    }\n    releaseYears {\n      releaseYear\n      count\n      meanScore\n      minutesWatched\n    }\n    startYears {\n      startYear\n      count\n      meanScore\n      minutesWatched\n    }\n    genres {\n      genre\n      count\n      meanScore\n      minutesWatched\n    }\n    tags {\n      tag {\n        name\n      }\n      count\n      meanScore\n      minutesWatched\n    }\n    countries {\n      country\n      count\n      meanScore\n      minutesWatched\n    }\n    voiceActors {\n      count\n      meanScore\n      minutesWatched\n      voiceActor {\n        id\n        name {\n          full\n        }\n      }\n      characterIds\n      mediaIds\n    }\n    staff {\n      count\n      meanScore\n      minutesWatched\n      staff {\n        id\n        name {\n          full\n        }\n      }\n      mediaIds\n    }\n    studios {\n      count\n      meanScore\n      minutesWatched\n      studio {\n        id\n        name\n      }\n      mediaIds\n    }\n  }\n  manga {\n    count\n    meanScore\n    standardDeviation\n    chaptersRead\n    volumesRead\n    scores {\n      score\n      count\n      meanScore\n      chaptersRead\n    }\n    lengths {\n      length\n      count\n      meanScore\n      chaptersRead\n    }\n    formats {\n      format\n      count\n      meanScore\n      chaptersRead\n    }\n    statuses {\n      status\n      count\n      meanScore\n      chaptersRead\n    }\n    releaseYears {\n      releaseYear\n      count\n      meanScore\n      chaptersRead\n    }\n    startYears {\n      startYear\n      count\n      meanScore\n      chaptersRead\n    }\n    genres {\n      genre\n      count\n      meanScore\n      chaptersRead\n    }\n    tags {\n      tag {\n        name\n      }\n      count\n      meanScore\n      chaptersRead\n    }\n    countries {\n      country\n      count\n      meanScore\n      chaptersRead\n    }\n    staff {\n      count\n      meanScore\n      chaptersRead\n      staff {\n        id\n        name {\n          full\n        }\n      }\n      mediaIds\n    }\n    studios {\n      count\n      meanScore\n      chaptersRead\n      studio {\n        id\n        name\n      }\n      mediaIds\n    }\n  }\n}\n    `, {\"fragmentName\":\"UserStatisticsFragment\"});\nexport const UserBasicFragmentDoc = new TypedDocumentString(`\n    fragment UserBasicFragment on User {\n  id\n  name\n  avatar {\n    ...UserAvatarFragment\n  }\n  about\n  bannerImage\n  donatorTier\n  donatorBadge\n  isFollowing\n  isFollower\n  isBlocked\n  createdAt\n  updatedAt\n  unreadNotificationCount\n  bans\n  moderatorRoles\n  moderatorStatus\n  options {\n    ...UserOptionsFragment\n  }\n  mediaListOptions {\n    ...UserMediaListOptionsFragment\n  }\n  favourites {\n    ...UserFavouritesFragment\n  }\n  statistics {\n    ...UserStatisticsFragment\n  }\n  siteUrl\n  stats {\n    watchedTime\n    chaptersRead\n  }\n  previousNames {\n    name\n    createdAt\n    updatedAt\n  }\n}\n    fragment UserAvatarFragment on UserAvatar {\n  large\n  medium\n}\nfragment UserOptionsFragment on UserOptions {\n  titleLanguage\n  displayAdultContent\n  airingNotifications\n  profileColor\n  notificationOptions {\n    type\n    enabled\n  }\n  timezone\n  activityMergeTime\n  staffNameLanguage\n  restrictMessagesToFollowing\n  disabledListActivity {\n    disabled\n    type\n  }\n}\nfragment UserMediaListOptionsFragment on MediaListOptions {\n  scoreFormat\n  rowOrder\n  useLegacyLists\n  animeList {\n    sectionOrder\n    splitCompletedSectionByFormat\n    customLists\n    advancedScoring\n    advancedScoringEnabled\n  }\n  mangaList {\n    sectionOrder\n    splitCompletedSectionByFormat\n    customLists\n    advancedScoring\n    advancedScoringEnabled\n  }\n  sharedTheme\n  sharedThemeEnabled\n}\nfragment UserFavouritesFragment on Favourites {\n  anime {\n    nodes {\n      id\n      title {\n        romaji\n      }\n    }\n  }\n  manga {\n    nodes {\n      id\n      title {\n        romaji\n      }\n    }\n  }\n  characters {\n    nodes {\n      id\n      name {\n        full\n      }\n    }\n  }\n  staff {\n    nodes {\n      id\n      name {\n        full\n      }\n    }\n  }\n  studios {\n    nodes {\n      id\n      name\n    }\n  }\n}\nfragment UserStatisticsFragment on UserStatisticTypes {\n  anime {\n    count\n    meanScore\n    standardDeviation\n    minutesWatched\n    episodesWatched\n    chaptersRead\n    volumesRead\n    scores {\n      score\n      count\n      meanScore\n      minutesWatched\n    }\n    lengths {\n      length\n      count\n      meanScore\n      minutesWatched\n    }\n    formats {\n      format\n      count\n      meanScore\n      minutesWatched\n    }\n    statuses {\n      status\n      count\n      meanScore\n      minutesWatched\n    }\n    releaseYears {\n      releaseYear\n      count\n      meanScore\n      minutesWatched\n    }\n    startYears {\n      startYear\n      count\n      meanScore\n      minutesWatched\n    }\n    genres {\n      genre\n      count\n      meanScore\n      minutesWatched\n    }\n    tags {\n      tag {\n        name\n      }\n      count\n      meanScore\n      minutesWatched\n    }\n    countries {\n      country\n      count\n      meanScore\n      minutesWatched\n    }\n    voiceActors {\n      count\n      meanScore\n      minutesWatched\n      voiceActor {\n        id\n        name {\n          full\n        }\n      }\n      characterIds\n      mediaIds\n    }\n    staff {\n      count\n      meanScore\n      minutesWatched\n      staff {\n        id\n        name {\n          full\n        }\n      }\n      mediaIds\n    }\n    studios {\n      count\n      meanScore\n      minutesWatched\n      studio {\n        id\n        name\n      }\n      mediaIds\n    }\n  }\n  manga {\n    count\n    meanScore\n    standardDeviation\n    chaptersRead\n    volumesRead\n    scores {\n      score\n      count\n      meanScore\n      chaptersRead\n    }\n    lengths {\n      length\n      count\n      meanScore\n      chaptersRead\n    }\n    formats {\n      format\n      count\n      meanScore\n      chaptersRead\n    }\n    statuses {\n      status\n      count\n      meanScore\n      chaptersRead\n    }\n    releaseYears {\n      releaseYear\n      count\n      meanScore\n      chaptersRead\n    }\n    startYears {\n      startYear\n      count\n      meanScore\n      chaptersRead\n    }\n    genres {\n      genre\n      count\n      meanScore\n      chaptersRead\n    }\n    tags {\n      tag {\n        name\n      }\n      count\n      meanScore\n      chaptersRead\n    }\n    countries {\n      country\n      count\n      meanScore\n      chaptersRead\n    }\n    staff {\n      count\n      meanScore\n      chaptersRead\n      staff {\n        id\n        name {\n          full\n        }\n      }\n      mediaIds\n    }\n    studios {\n      count\n      meanScore\n      chaptersRead\n      studio {\n        id\n        name\n      }\n      mediaIds\n    }\n  }\n}`, {\"fragmentName\":\"UserBasicFragment\"});\nexport const UserFragmentDoc = new TypedDocumentString(`\n    fragment UserFragment on User {\n  ...UserBasicFragment\n}\n    fragment UserAvatarFragment on UserAvatar {\n  large\n  medium\n}\nfragment UserOptionsFragment on UserOptions {\n  titleLanguage\n  displayAdultContent\n  airingNotifications\n  profileColor\n  notificationOptions {\n    type\n    enabled\n  }\n  timezone\n  activityMergeTime\n  staffNameLanguage\n  restrictMessagesToFollowing\n  disabledListActivity {\n    disabled\n    type\n  }\n}\nfragment UserMediaListOptionsFragment on MediaListOptions {\n  scoreFormat\n  rowOrder\n  useLegacyLists\n  animeList {\n    sectionOrder\n    splitCompletedSectionByFormat\n    customLists\n    advancedScoring\n    advancedScoringEnabled\n  }\n  mangaList {\n    sectionOrder\n    splitCompletedSectionByFormat\n    customLists\n    advancedScoring\n    advancedScoringEnabled\n  }\n  sharedTheme\n  sharedThemeEnabled\n}\nfragment UserFavouritesFragment on Favourites {\n  anime {\n    nodes {\n      id\n      title {\n        romaji\n      }\n    }\n  }\n  manga {\n    nodes {\n      id\n      title {\n        romaji\n      }\n    }\n  }\n  characters {\n    nodes {\n      id\n      name {\n        full\n      }\n    }\n  }\n  staff {\n    nodes {\n      id\n      name {\n        full\n      }\n    }\n  }\n  studios {\n    nodes {\n      id\n      name\n    }\n  }\n}\nfragment UserStatisticsFragment on UserStatisticTypes {\n  anime {\n    count\n    meanScore\n    standardDeviation\n    minutesWatched\n    episodesWatched\n    chaptersRead\n    volumesRead\n    scores {\n      score\n      count\n      meanScore\n      minutesWatched\n    }\n    lengths {\n      length\n      count\n      meanScore\n      minutesWatched\n    }\n    formats {\n      format\n      count\n      meanScore\n      minutesWatched\n    }\n    statuses {\n      status\n      count\n      meanScore\n      minutesWatched\n    }\n    releaseYears {\n      releaseYear\n      count\n      meanScore\n      minutesWatched\n    }\n    startYears {\n      startYear\n      count\n      meanScore\n      minutesWatched\n    }\n    genres {\n      genre\n      count\n      meanScore\n      minutesWatched\n    }\n    tags {\n      tag {\n        name\n      }\n      count\n      meanScore\n      minutesWatched\n    }\n    countries {\n      country\n      count\n      meanScore\n      minutesWatched\n    }\n    voiceActors {\n      count\n      meanScore\n      minutesWatched\n      voiceActor {\n        id\n        name {\n          full\n        }\n      }\n      characterIds\n      mediaIds\n    }\n    staff {\n      count\n      meanScore\n      minutesWatched\n      staff {\n        id\n        name {\n          full\n        }\n      }\n      mediaIds\n    }\n    studios {\n      count\n      meanScore\n      minutesWatched\n      studio {\n        id\n        name\n      }\n      mediaIds\n    }\n  }\n  manga {\n    count\n    meanScore\n    standardDeviation\n    chaptersRead\n    volumesRead\n    scores {\n      score\n      count\n      meanScore\n      chaptersRead\n    }\n    lengths {\n      length\n      count\n      meanScore\n      chaptersRead\n    }\n    formats {\n      format\n      count\n      meanScore\n      chaptersRead\n    }\n    statuses {\n      status\n      count\n      meanScore\n      chaptersRead\n    }\n    releaseYears {\n      releaseYear\n      count\n      meanScore\n      chaptersRead\n    }\n    startYears {\n      startYear\n      count\n      meanScore\n      chaptersRead\n    }\n    genres {\n      genre\n      count\n      meanScore\n      chaptersRead\n    }\n    tags {\n      tag {\n        name\n      }\n      count\n      meanScore\n      chaptersRead\n    }\n    countries {\n      country\n      count\n      meanScore\n      chaptersRead\n    }\n    staff {\n      count\n      meanScore\n      chaptersRead\n      staff {\n        id\n        name {\n          full\n        }\n      }\n      mediaIds\n    }\n    studios {\n      count\n      meanScore\n      chaptersRead\n      studio {\n        id\n        name\n      }\n      mediaIds\n    }\n  }\n}\nfragment UserBasicFragment on User {\n  id\n  name\n  avatar {\n    ...UserAvatarFragment\n  }\n  about\n  bannerImage\n  donatorTier\n  donatorBadge\n  isFollowing\n  isFollower\n  isBlocked\n  createdAt\n  updatedAt\n  unreadNotificationCount\n  bans\n  moderatorRoles\n  moderatorStatus\n  options {\n    ...UserOptionsFragment\n  }\n  mediaListOptions {\n    ...UserMediaListOptionsFragment\n  }\n  favourites {\n    ...UserFavouritesFragment\n  }\n  statistics {\n    ...UserStatisticsFragment\n  }\n  siteUrl\n  stats {\n    watchedTime\n    chaptersRead\n  }\n  previousNames {\n    name\n    createdAt\n    updatedAt\n  }\n}`, {\"fragmentName\":\"UserFragment\"});\nexport const GetAnimeBrowseDocument = new TypedDocumentString(`\n    query GetAnimeBrowse($genre: String, $format: MediaFormat, $status: MediaStatus, $seasonYear: Int, $page: Int = 1, $perPage: Int = 10) {\n  Page(page: $page, perPage: $perPage) {\n    pageInfo {\n      hasNextPage\n      currentPage\n      total\n    }\n    media(\n      genre: $genre\n      format: $format\n      status: $status\n      seasonYear: $seasonYear\n      type: ANIME\n      sort: POPULARITY_DESC\n      isAdult: false\n    ) {\n      id\n      title {\n        english\n        romaji\n        native\n        userPreferred\n      }\n      coverImage {\n        extraLarge\n        large\n      }\n      bannerImage\n      genres\n      format\n      status\n      seasonYear\n      averageScore\n      episodes\n    }\n  }\n}\n    `);\nexport const GetAnimeByIdDocument = new TypedDocumentString(`\n    query GetAnimeById($id: Int!) {\n  Media(id: $id, type: ANIME) {\n    ...MediaDetailedFragment\n    nextAiringEpisode {\n      ...AiringScheduleFragment\n    }\n    characters {\n      edges {\n        role\n        node {\n          ...CharacterFragment\n        }\n      }\n    }\n    staff {\n      edges {\n        role\n        node {\n          ...StaffFragment\n        }\n      }\n    }\n    studios {\n      edges {\n        node {\n          ...StudioFragment\n        }\n      }\n    }\n  }\n}\n    fragment CharacterFragment on Character {\n  ...CharacterBasicFragment\n}\nfragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment CharacterImageFragment on CharacterImage {\n  large\n  medium\n}\nfragment StaffImageFragment on StaffImage {\n  large\n  medium\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}\nfragment StudioNodeFragment on Studio {\n  id\n  name\n  isAnimationStudio\n  favourites\n  isFavourite\n  siteUrl\n}\nfragment CharacterNameFragment on CharacterName {\n  alternative\n  alternativeSpoiler\n  first\n  full\n  last\n  middle\n  native\n  userPreferred\n}\nfragment CharacterBasicFragment on Character {\n  id\n  name {\n    ...CharacterNameFragment\n  }\n  image {\n    ...CharacterImageFragment\n  }\n  description\n  gender\n  dateOfBirth {\n    ...DateFragment\n  }\n  age\n  bloodType\n  isFavourite\n  isFavouriteBlocked\n  favourites\n  siteUrl\n}\nfragment StaffNameFragment on StaffName {\n  full\n  native\n  first\n  middle\n  last\n  userPreferred\n}\nfragment StaffBasicFragment on Staff {\n  id\n  name {\n    ...StaffNameFragment\n  }\n  image {\n    ...StaffImageFragment\n  }\n  description\n  primaryOccupations\n  gender\n  bloodType\n  homeTown\n  languageV2\n  yearsActive\n  favourites\n  isFavourite\n  isFavouriteBlocked\n  dateOfBirth {\n    ...DateFragment\n  }\n  dateOfDeath {\n    ...DateFragment\n  }\n  age\n  siteUrl\n}\nfragment MediaCoreFragment on Media {\n  id\n  idMal\n  title {\n    ...TitleFragment\n  }\n  coverImage {\n    ...CoverImageFragment\n  }\n  bannerImage\n  description\n  format\n  status\n  type\n  episodes\n  chapters\n  volumes\n  duration\n  genres\n  averageScore\n  meanScore\n  popularity\n  favourites\n  trending\n  source\n  countryOfOrigin\n  isAdult\n  isLicensed\n  isLocked\n  isFavourite\n  isFavouriteBlocked\n  hashtag\n  synonyms\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  siteUrl\n  updatedAt\n  autoCreateForumThread\n  isRecommendationBlocked\n  isReviewBlocked\n  modNotes\n}\nfragment MediaDetailedFragment on Media {\n  ...MediaCoreFragment\n  tags {\n    ...MediaTagFragment\n  }\n  rankings {\n    ...MediaRankFragment\n  }\n  externalLinks {\n    ...MediaExternalLinkFragment\n  }\n  stats {\n    ...MediaStatsFragment\n  }\n  trailer {\n    ...MediaTrailerFragment\n  }\n  reviews(page: 1, perPage: 1) {\n    pageInfo {\n      total\n    }\n  }\n  recommendations(page: 1, perPage: 1) {\n    pageInfo {\n      total\n    }\n  }\n}\nfragment MediaExternalLinkFragment on MediaExternalLink {\n  id\n  url\n  site\n  siteId\n  type\n  language\n  color\n  icon\n  notes\n  isDisabled\n}\nfragment MediaRankFragment on MediaRank {\n  id\n  rank\n  type\n  format\n  year\n  season\n  allTime\n  context\n}\nfragment ScoreDistributionFragment on ScoreDistribution {\n  score\n  amount\n}\nfragment StatusDistributionFragment on StatusDistribution {\n  status\n  amount\n}\nfragment MediaStatsFragment on MediaStats {\n  scoreDistribution {\n    ...ScoreDistributionFragment\n  }\n  statusDistribution {\n    ...StatusDistributionFragment\n  }\n  airingProgression {\n    episode\n    score\n    watching\n  }\n}\nfragment AiringScheduleFragment on AiringSchedule {\n  id\n  airingAt\n  timeUntilAiring\n  episode\n  mediaId\n}\nfragment MediaTagFragment on MediaTag {\n  id\n  name\n  description\n  category\n  rank\n  isGeneralSpoiler\n  isMediaSpoiler\n  isAdult\n  userId\n}\nfragment MediaTrailerFragment on MediaTrailer {\n  id\n  site\n  thumbnail\n}\nfragment StaffFragment on Staff {\n  ...StaffBasicFragment\n}\nfragment StudioFragment on Studio {\n  ...StudioNodeFragment\n  media {\n    pageInfo {\n      total\n      perPage\n      currentPage\n      lastPage\n      hasNextPage\n    }\n  }\n}`);\nexport const GetAnimeByTitleDocument = new TypedDocumentString(`\n    query GetAnimeByTitle($title: String!, $page: Int = 1, $perPage: Int = 1) {\n  Page(page: $page, perPage: $perPage) {\n    pageInfo {\n      hasNextPage\n      currentPage\n    }\n    media(search: $title, type: ANIME) {\n      ...MediaFragment\n    }\n  }\n}\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}\nfragment MediaFragment on Media {\n  ...MediaBasicFragment\n  nextAiringEpisode {\n    id\n    airingAt\n    timeUntilAiring\n    episode\n    mediaId\n  }\n}\nfragment MediaCoreFragment on Media {\n  id\n  idMal\n  title {\n    ...TitleFragment\n  }\n  coverImage {\n    ...CoverImageFragment\n  }\n  bannerImage\n  description\n  format\n  status\n  type\n  episodes\n  chapters\n  volumes\n  duration\n  genres\n  averageScore\n  meanScore\n  popularity\n  favourites\n  trending\n  source\n  countryOfOrigin\n  isAdult\n  isLicensed\n  isLocked\n  isFavourite\n  isFavouriteBlocked\n  hashtag\n  synonyms\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  siteUrl\n  updatedAt\n  autoCreateForumThread\n  isRecommendationBlocked\n  isReviewBlocked\n  modNotes\n}\nfragment MediaBasicFragment on Media {\n  ...MediaCoreFragment\n  tags {\n    ...MediaTagBasicFragment\n  }\n  externalLinks {\n    ...MediaExternalLinkBasicFragment\n  }\n}\nfragment MediaExternalLinkBasicFragment on MediaExternalLink {\n  id\n  url\n  site\n  siteId\n  type\n}\nfragment MediaTagBasicFragment on MediaTag {\n  id\n  name\n  description\n  category\n  rank\n}`);\nexport const GetAnimeCharactersDocument = new TypedDocumentString(`\n    query GetAnimeCharacters($id: Int) {\n  Media(id: $id, type: ANIME) {\n    characters {\n      edges {\n        role\n        node {\n          ...CharacterFragment\n        }\n      }\n    }\n  }\n}\n    fragment CharacterFragment on Character {\n  ...CharacterBasicFragment\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment CharacterImageFragment on CharacterImage {\n  large\n  medium\n}\nfragment CharacterNameFragment on CharacterName {\n  alternative\n  alternativeSpoiler\n  first\n  full\n  last\n  middle\n  native\n  userPreferred\n}\nfragment CharacterBasicFragment on Character {\n  id\n  name {\n    ...CharacterNameFragment\n  }\n  image {\n    ...CharacterImageFragment\n  }\n  description\n  gender\n  dateOfBirth {\n    ...DateFragment\n  }\n  age\n  bloodType\n  isFavourite\n  isFavouriteBlocked\n  favourites\n  siteUrl\n}`);\nexport const GetAnimeListByGenreDocument = new TypedDocumentString(`\n    query GetAnimeListByGenre($genre: String!, $page: Int = 1, $perPage: Int = 10) {\n  Page(page: $page, perPage: $perPage) {\n    pageInfo {\n      hasNextPage\n    }\n    media(genre: $genre, type: ANIME) {\n      ...MediaFragment\n    }\n  }\n}\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}\nfragment MediaFragment on Media {\n  ...MediaBasicFragment\n  nextAiringEpisode {\n    id\n    airingAt\n    timeUntilAiring\n    episode\n    mediaId\n  }\n}\nfragment MediaCoreFragment on Media {\n  id\n  idMal\n  title {\n    ...TitleFragment\n  }\n  coverImage {\n    ...CoverImageFragment\n  }\n  bannerImage\n  description\n  format\n  status\n  type\n  episodes\n  chapters\n  volumes\n  duration\n  genres\n  averageScore\n  meanScore\n  popularity\n  favourites\n  trending\n  source\n  countryOfOrigin\n  isAdult\n  isLicensed\n  isLocked\n  isFavourite\n  isFavouriteBlocked\n  hashtag\n  synonyms\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  siteUrl\n  updatedAt\n  autoCreateForumThread\n  isRecommendationBlocked\n  isReviewBlocked\n  modNotes\n}\nfragment MediaBasicFragment on Media {\n  ...MediaCoreFragment\n  tags {\n    ...MediaTagBasicFragment\n  }\n  externalLinks {\n    ...MediaExternalLinkBasicFragment\n  }\n}\nfragment MediaExternalLinkBasicFragment on MediaExternalLink {\n  id\n  url\n  site\n  siteId\n  type\n}\nfragment MediaTagBasicFragment on MediaTag {\n  id\n  name\n  description\n  category\n  rank\n}`);\nexport const GetAnimePopularDocument = new TypedDocumentString(`\n    query GetAnimePopular($page: Int = 1, $perPage: Int = 20) {\n  Page(page: $page, perPage: $perPage) {\n    pageInfo {\n      hasNextPage\n      currentPage\n    }\n    media(sort: POPULARITY_DESC, type: ANIME) {\n      ...MediaFragment\n    }\n  }\n}\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}\nfragment MediaFragment on Media {\n  ...MediaBasicFragment\n  nextAiringEpisode {\n    id\n    airingAt\n    timeUntilAiring\n    episode\n    mediaId\n  }\n}\nfragment MediaCoreFragment on Media {\n  id\n  idMal\n  title {\n    ...TitleFragment\n  }\n  coverImage {\n    ...CoverImageFragment\n  }\n  bannerImage\n  description\n  format\n  status\n  type\n  episodes\n  chapters\n  volumes\n  duration\n  genres\n  averageScore\n  meanScore\n  popularity\n  favourites\n  trending\n  source\n  countryOfOrigin\n  isAdult\n  isLicensed\n  isLocked\n  isFavourite\n  isFavouriteBlocked\n  hashtag\n  synonyms\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  siteUrl\n  updatedAt\n  autoCreateForumThread\n  isRecommendationBlocked\n  isReviewBlocked\n  modNotes\n}\nfragment MediaBasicFragment on Media {\n  ...MediaCoreFragment\n  tags {\n    ...MediaTagBasicFragment\n  }\n  externalLinks {\n    ...MediaExternalLinkBasicFragment\n  }\n}\nfragment MediaExternalLinkBasicFragment on MediaExternalLink {\n  id\n  url\n  site\n  siteId\n  type\n}\nfragment MediaTagBasicFragment on MediaTag {\n  id\n  name\n  description\n  category\n  rank\n}`);\nexport const GetAnimeRecommendationsDocument = new TypedDocumentString(`\n    query GetAnimeRecommendations($id: Int) {\n  Media(id: $id, type: ANIME) {\n    recommendations {\n      edges {\n        node {\n          media {\n            ...MediaFragment\n          }\n        }\n      }\n    }\n  }\n}\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}\nfragment MediaFragment on Media {\n  ...MediaBasicFragment\n  nextAiringEpisode {\n    id\n    airingAt\n    timeUntilAiring\n    episode\n    mediaId\n  }\n}\nfragment MediaCoreFragment on Media {\n  id\n  idMal\n  title {\n    ...TitleFragment\n  }\n  coverImage {\n    ...CoverImageFragment\n  }\n  bannerImage\n  description\n  format\n  status\n  type\n  episodes\n  chapters\n  volumes\n  duration\n  genres\n  averageScore\n  meanScore\n  popularity\n  favourites\n  trending\n  source\n  countryOfOrigin\n  isAdult\n  isLicensed\n  isLocked\n  isFavourite\n  isFavouriteBlocked\n  hashtag\n  synonyms\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  siteUrl\n  updatedAt\n  autoCreateForumThread\n  isRecommendationBlocked\n  isReviewBlocked\n  modNotes\n}\nfragment MediaBasicFragment on Media {\n  ...MediaCoreFragment\n  tags {\n    ...MediaTagBasicFragment\n  }\n  externalLinks {\n    ...MediaExternalLinkBasicFragment\n  }\n}\nfragment MediaExternalLinkBasicFragment on MediaExternalLink {\n  id\n  url\n  site\n  siteId\n  type\n}\nfragment MediaTagBasicFragment on MediaTag {\n  id\n  name\n  description\n  category\n  rank\n}`);\nexport const GetAnimeRelationsDocument = new TypedDocumentString(`\n    query GetAnimeRelations($id: Int) {\n  Media(id: $id, type: ANIME) {\n    relations {\n      edges {\n        relationType\n        node {\n          ...MediaFragment\n        }\n      }\n    }\n  }\n}\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}\nfragment MediaFragment on Media {\n  ...MediaBasicFragment\n  nextAiringEpisode {\n    id\n    airingAt\n    timeUntilAiring\n    episode\n    mediaId\n  }\n}\nfragment MediaCoreFragment on Media {\n  id\n  idMal\n  title {\n    ...TitleFragment\n  }\n  coverImage {\n    ...CoverImageFragment\n  }\n  bannerImage\n  description\n  format\n  status\n  type\n  episodes\n  chapters\n  volumes\n  duration\n  genres\n  averageScore\n  meanScore\n  popularity\n  favourites\n  trending\n  source\n  countryOfOrigin\n  isAdult\n  isLicensed\n  isLocked\n  isFavourite\n  isFavouriteBlocked\n  hashtag\n  synonyms\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  siteUrl\n  updatedAt\n  autoCreateForumThread\n  isRecommendationBlocked\n  isReviewBlocked\n  modNotes\n}\nfragment MediaBasicFragment on Media {\n  ...MediaCoreFragment\n  tags {\n    ...MediaTagBasicFragment\n  }\n  externalLinks {\n    ...MediaExternalLinkBasicFragment\n  }\n}\nfragment MediaExternalLinkBasicFragment on MediaExternalLink {\n  id\n  url\n  site\n  siteId\n  type\n}\nfragment MediaTagBasicFragment on MediaTag {\n  id\n  name\n  description\n  category\n  rank\n}`);\nexport const GetAnimeStaffDocument = new TypedDocumentString(`\n    query GetAnimeStaff($id: Int) {\n  Media(id: $id, type: ANIME) {\n    staff {\n      edges {\n        role\n        node {\n          ...StaffFragment\n        }\n      }\n    }\n  }\n}\n    fragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment StaffImageFragment on StaffImage {\n  large\n  medium\n}\nfragment StaffNameFragment on StaffName {\n  full\n  native\n  first\n  middle\n  last\n  userPreferred\n}\nfragment StaffBasicFragment on Staff {\n  id\n  name {\n    ...StaffNameFragment\n  }\n  image {\n    ...StaffImageFragment\n  }\n  description\n  primaryOccupations\n  gender\n  bloodType\n  homeTown\n  languageV2\n  yearsActive\n  favourites\n  isFavourite\n  isFavouriteBlocked\n  dateOfBirth {\n    ...DateFragment\n  }\n  dateOfDeath {\n    ...DateFragment\n  }\n  age\n  siteUrl\n}\nfragment StaffFragment on Staff {\n  ...StaffBasicFragment\n}`);\nexport const GetAnimeTrendingDocument = new TypedDocumentString(`\n    query GetAnimeTrending($page: Int = 1, $perPage: Int = 20) {\n  Page(page: $page, perPage: $perPage) {\n    pageInfo {\n      hasNextPage\n      currentPage\n    }\n    media(sort: TRENDING_DESC, type: ANIME) {\n      ...MediaFragment\n    }\n  }\n}\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}\nfragment MediaFragment on Media {\n  ...MediaBasicFragment\n  nextAiringEpisode {\n    id\n    airingAt\n    timeUntilAiring\n    episode\n    mediaId\n  }\n}\nfragment MediaCoreFragment on Media {\n  id\n  idMal\n  title {\n    ...TitleFragment\n  }\n  coverImage {\n    ...CoverImageFragment\n  }\n  bannerImage\n  description\n  format\n  status\n  type\n  episodes\n  chapters\n  volumes\n  duration\n  genres\n  averageScore\n  meanScore\n  popularity\n  favourites\n  trending\n  source\n  countryOfOrigin\n  isAdult\n  isLicensed\n  isLocked\n  isFavourite\n  isFavouriteBlocked\n  hashtag\n  synonyms\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  siteUrl\n  updatedAt\n  autoCreateForumThread\n  isRecommendationBlocked\n  isReviewBlocked\n  modNotes\n}\nfragment MediaBasicFragment on Media {\n  ...MediaCoreFragment\n  tags {\n    ...MediaTagBasicFragment\n  }\n  externalLinks {\n    ...MediaExternalLinkBasicFragment\n  }\n}\nfragment MediaExternalLinkBasicFragment on MediaExternalLink {\n  id\n  url\n  site\n  siteId\n  type\n}\nfragment MediaTagBasicFragment on MediaTag {\n  id\n  name\n  description\n  category\n  rank\n}`);\nexport const GetSeasonalAnimeDocument = new TypedDocumentString(`\n    query GetSeasonalAnime($season: MediaSeason, $seasonYear: Int, $page: Int, $perPage: Int) {\n  Page(page: $page, perPage: $perPage) {\n    pageInfo {\n      hasNextPage\n      currentPage\n    }\n    media(\n      season: $season\n      seasonYear: $seasonYear\n      type: ANIME\n      sort: POPULARITY_DESC\n      isAdult: false\n    ) {\n      id\n      title {\n        english\n        romaji\n        native\n        userPreferred\n      }\n      coverImage {\n        extraLarge\n        large\n      }\n      bannerImage\n      genres\n      seasonYear\n      season\n    }\n  }\n}\n    `);\nexport const SearchAnimeDocument = new TypedDocumentString(`\n    query SearchAnime($query: String, $page: Int, $perPage: Int) {\n  Page(page: $page, perPage: $perPage) {\n    pageInfo {\n      hasNextPage\n      currentPage\n    }\n    media(search: $query, type: ANIME) {\n      ...MediaFragment\n    }\n  }\n}\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}\nfragment MediaFragment on Media {\n  ...MediaBasicFragment\n  nextAiringEpisode {\n    id\n    airingAt\n    timeUntilAiring\n    episode\n    mediaId\n  }\n}\nfragment MediaCoreFragment on Media {\n  id\n  idMal\n  title {\n    ...TitleFragment\n  }\n  coverImage {\n    ...CoverImageFragment\n  }\n  bannerImage\n  description\n  format\n  status\n  type\n  episodes\n  chapters\n  volumes\n  duration\n  genres\n  averageScore\n  meanScore\n  popularity\n  favourites\n  trending\n  source\n  countryOfOrigin\n  isAdult\n  isLicensed\n  isLocked\n  isFavourite\n  isFavouriteBlocked\n  hashtag\n  synonyms\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  siteUrl\n  updatedAt\n  autoCreateForumThread\n  isRecommendationBlocked\n  isReviewBlocked\n  modNotes\n}\nfragment MediaBasicFragment on Media {\n  ...MediaCoreFragment\n  tags {\n    ...MediaTagBasicFragment\n  }\n  externalLinks {\n    ...MediaExternalLinkBasicFragment\n  }\n}\nfragment MediaExternalLinkBasicFragment on MediaExternalLink {\n  id\n  url\n  site\n  siteId\n  type\n}\nfragment MediaTagBasicFragment on MediaTag {\n  id\n  name\n  description\n  category\n  rank\n}`);\nexport const ToggleFavoriteAnimeDocument = new TypedDocumentString(`\n    mutation ToggleFavoriteAnime($animeId: Int!) {\n  ToggleFavourite(animeId: $animeId) {\n    anime(page: 1, perPage: 25) {\n      nodes {\n        id\n      }\n    }\n  }\n}\n    `);\nexport const CharactersBirthdayTodayDocument = new TypedDocumentString(`\n    query CharactersBirthdayToday($page: Int, $perPage: Int) {\n  Page(page: $page, perPage: $perPage) {\n    pageInfo {\n      hasNextPage\n      currentPage\n    }\n    characters(isBirthday: true) {\n      ...CharacterFragment\n    }\n  }\n}\n    fragment CharacterFragment on Character {\n  ...CharacterBasicFragment\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment CharacterImageFragment on CharacterImage {\n  large\n  medium\n}\nfragment CharacterNameFragment on CharacterName {\n  alternative\n  alternativeSpoiler\n  first\n  full\n  last\n  middle\n  native\n  userPreferred\n}\nfragment CharacterBasicFragment on Character {\n  id\n  name {\n    ...CharacterNameFragment\n  }\n  image {\n    ...CharacterImageFragment\n  }\n  description\n  gender\n  dateOfBirth {\n    ...DateFragment\n  }\n  age\n  bloodType\n  isFavourite\n  isFavouriteBlocked\n  favourites\n  siteUrl\n}`);\nexport const GetCharacterByIdDocument = new TypedDocumentString(`\n    query GetCharacterById($id: Int!) {\n  Character(id: $id) {\n    ...CharacterFragment\n    isFavourite\n    favourites\n    media {\n      nodes {\n        id\n        title {\n          romaji\n          english\n          native\n          userPreferred\n        }\n        type\n      }\n    }\n  }\n}\n    fragment CharacterFragment on Character {\n  ...CharacterBasicFragment\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment CharacterImageFragment on CharacterImage {\n  large\n  medium\n}\nfragment CharacterNameFragment on CharacterName {\n  alternative\n  alternativeSpoiler\n  first\n  full\n  last\n  middle\n  native\n  userPreferred\n}\nfragment CharacterBasicFragment on Character {\n  id\n  name {\n    ...CharacterNameFragment\n  }\n  image {\n    ...CharacterImageFragment\n  }\n  description\n  gender\n  dateOfBirth {\n    ...DateFragment\n  }\n  age\n  bloodType\n  isFavourite\n  isFavouriteBlocked\n  favourites\n  siteUrl\n}`);\nexport const ToggleFavoriteCharacterDocument = new TypedDocumentString(`\n    mutation ToggleFavoriteCharacter($charID: Int!) {\n  ToggleFavourite(characterId: $charID) {\n    characters(page: 1, perPage: 25) {\n      nodes {\n        id\n      }\n    }\n  }\n}\n    `);\nexport const GetMangaBrowseDocument = new TypedDocumentString(`\n    query GetMangaBrowse($genre: String, $format: MediaFormat, $status: MediaStatus, $startDate: FuzzyDateInt, $page: Int = 1, $perPage: Int = 10) {\n  Page(page: $page, perPage: $perPage) {\n    pageInfo {\n      hasNextPage\n      currentPage\n      total\n    }\n    media(\n      genre: $genre\n      format: $format\n      status: $status\n      startDate: $startDate\n      type: MANGA\n      sort: POPULARITY_DESC\n      isAdult: false\n    ) {\n      id\n      title {\n        english\n        romaji\n        native\n        userPreferred\n      }\n      coverImage {\n        extraLarge\n        large\n      }\n      bannerImage\n      genres\n      format\n      status\n      startDate {\n        year\n      }\n      averageScore\n      chapters\n      volumes\n    }\n  }\n}\n    `);\nexport const GetMangaByIdDocument = new TypedDocumentString(`\n    query GetMangaById($id: Int!) {\n  Media(id: $id, type: MANGA) {\n    ...MediaFragment\n  }\n}\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}\nfragment MediaFragment on Media {\n  ...MediaBasicFragment\n  nextAiringEpisode {\n    id\n    airingAt\n    timeUntilAiring\n    episode\n    mediaId\n  }\n}\nfragment MediaCoreFragment on Media {\n  id\n  idMal\n  title {\n    ...TitleFragment\n  }\n  coverImage {\n    ...CoverImageFragment\n  }\n  bannerImage\n  description\n  format\n  status\n  type\n  episodes\n  chapters\n  volumes\n  duration\n  genres\n  averageScore\n  meanScore\n  popularity\n  favourites\n  trending\n  source\n  countryOfOrigin\n  isAdult\n  isLicensed\n  isLocked\n  isFavourite\n  isFavouriteBlocked\n  hashtag\n  synonyms\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  siteUrl\n  updatedAt\n  autoCreateForumThread\n  isRecommendationBlocked\n  isReviewBlocked\n  modNotes\n}\nfragment MediaBasicFragment on Media {\n  ...MediaCoreFragment\n  tags {\n    ...MediaTagBasicFragment\n  }\n  externalLinks {\n    ...MediaExternalLinkBasicFragment\n  }\n}\nfragment MediaExternalLinkBasicFragment on MediaExternalLink {\n  id\n  url\n  site\n  siteId\n  type\n}\nfragment MediaTagBasicFragment on MediaTag {\n  id\n  name\n  description\n  category\n  rank\n}`);\nexport const GetMangaByTitleDocument = new TypedDocumentString(`\n    query GetMangaByTitle($title: String!, $page: Int = 1, $perPage: Int = 1) {\n  Page(page: $page, perPage: $perPage) {\n    pageInfo {\n      hasNextPage\n      currentPage\n    }\n    media(search: $title, type: MANGA) {\n      ...MediaFragment\n    }\n  }\n}\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}\nfragment MediaFragment on Media {\n  ...MediaBasicFragment\n  nextAiringEpisode {\n    id\n    airingAt\n    timeUntilAiring\n    episode\n    mediaId\n  }\n}\nfragment MediaCoreFragment on Media {\n  id\n  idMal\n  title {\n    ...TitleFragment\n  }\n  coverImage {\n    ...CoverImageFragment\n  }\n  bannerImage\n  description\n  format\n  status\n  type\n  episodes\n  chapters\n  volumes\n  duration\n  genres\n  averageScore\n  meanScore\n  popularity\n  favourites\n  trending\n  source\n  countryOfOrigin\n  isAdult\n  isLicensed\n  isLocked\n  isFavourite\n  isFavouriteBlocked\n  hashtag\n  synonyms\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  siteUrl\n  updatedAt\n  autoCreateForumThread\n  isRecommendationBlocked\n  isReviewBlocked\n  modNotes\n}\nfragment MediaBasicFragment on Media {\n  ...MediaCoreFragment\n  tags {\n    ...MediaTagBasicFragment\n  }\n  externalLinks {\n    ...MediaExternalLinkBasicFragment\n  }\n}\nfragment MediaExternalLinkBasicFragment on MediaExternalLink {\n  id\n  url\n  site\n  siteId\n  type\n}\nfragment MediaTagBasicFragment on MediaTag {\n  id\n  name\n  description\n  category\n  rank\n}`);\nexport const GetMangaCharactersDocument = new TypedDocumentString(`\n    query GetMangaCharacters($id: Int) {\n  Media(id: $id, type: MANGA) {\n    characters {\n      edges {\n        role\n        node {\n          ...CharacterFragment\n        }\n      }\n    }\n  }\n}\n    fragment CharacterFragment on Character {\n  ...CharacterBasicFragment\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment CharacterImageFragment on CharacterImage {\n  large\n  medium\n}\nfragment CharacterNameFragment on CharacterName {\n  alternative\n  alternativeSpoiler\n  first\n  full\n  last\n  middle\n  native\n  userPreferred\n}\nfragment CharacterBasicFragment on Character {\n  id\n  name {\n    ...CharacterNameFragment\n  }\n  image {\n    ...CharacterImageFragment\n  }\n  description\n  gender\n  dateOfBirth {\n    ...DateFragment\n  }\n  age\n  bloodType\n  isFavourite\n  isFavouriteBlocked\n  favourites\n  siteUrl\n}`);\nexport const GetMangaListByGenreDocument = new TypedDocumentString(`\n    query GetMangaListByGenre($genre: String, $page: Int = 1, $perPage: Int = 10) {\n  Page(page: $page, perPage: $perPage) {\n    pageInfo {\n      hasNextPage\n    }\n    media(genre: $genre, type: MANGA) {\n      ...MediaFragment\n    }\n  }\n}\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}\nfragment MediaFragment on Media {\n  ...MediaBasicFragment\n  nextAiringEpisode {\n    id\n    airingAt\n    timeUntilAiring\n    episode\n    mediaId\n  }\n}\nfragment MediaCoreFragment on Media {\n  id\n  idMal\n  title {\n    ...TitleFragment\n  }\n  coverImage {\n    ...CoverImageFragment\n  }\n  bannerImage\n  description\n  format\n  status\n  type\n  episodes\n  chapters\n  volumes\n  duration\n  genres\n  averageScore\n  meanScore\n  popularity\n  favourites\n  trending\n  source\n  countryOfOrigin\n  isAdult\n  isLicensed\n  isLocked\n  isFavourite\n  isFavouriteBlocked\n  hashtag\n  synonyms\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  siteUrl\n  updatedAt\n  autoCreateForumThread\n  isRecommendationBlocked\n  isReviewBlocked\n  modNotes\n}\nfragment MediaBasicFragment on Media {\n  ...MediaCoreFragment\n  tags {\n    ...MediaTagBasicFragment\n  }\n  externalLinks {\n    ...MediaExternalLinkBasicFragment\n  }\n}\nfragment MediaExternalLinkBasicFragment on MediaExternalLink {\n  id\n  url\n  site\n  siteId\n  type\n}\nfragment MediaTagBasicFragment on MediaTag {\n  id\n  name\n  description\n  category\n  rank\n}`);\nexport const GetMangaPopularDocument = new TypedDocumentString(`\n    query GetMangaPopular($page: Int = 1, $perPage: Int = 20) {\n  Page(page: $page, perPage: $perPage) {\n    pageInfo {\n      hasNextPage\n      currentPage\n    }\n    media(sort: POPULARITY_DESC, type: MANGA) {\n      ...MediaFragment\n    }\n  }\n}\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}\nfragment MediaFragment on Media {\n  ...MediaBasicFragment\n  nextAiringEpisode {\n    id\n    airingAt\n    timeUntilAiring\n    episode\n    mediaId\n  }\n}\nfragment MediaCoreFragment on Media {\n  id\n  idMal\n  title {\n    ...TitleFragment\n  }\n  coverImage {\n    ...CoverImageFragment\n  }\n  bannerImage\n  description\n  format\n  status\n  type\n  episodes\n  chapters\n  volumes\n  duration\n  genres\n  averageScore\n  meanScore\n  popularity\n  favourites\n  trending\n  source\n  countryOfOrigin\n  isAdult\n  isLicensed\n  isLocked\n  isFavourite\n  isFavouriteBlocked\n  hashtag\n  synonyms\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  siteUrl\n  updatedAt\n  autoCreateForumThread\n  isRecommendationBlocked\n  isReviewBlocked\n  modNotes\n}\nfragment MediaBasicFragment on Media {\n  ...MediaCoreFragment\n  tags {\n    ...MediaTagBasicFragment\n  }\n  externalLinks {\n    ...MediaExternalLinkBasicFragment\n  }\n}\nfragment MediaExternalLinkBasicFragment on MediaExternalLink {\n  id\n  url\n  site\n  siteId\n  type\n}\nfragment MediaTagBasicFragment on MediaTag {\n  id\n  name\n  description\n  category\n  rank\n}`);\nexport const GetMangaRecommendationsDocument = new TypedDocumentString(`\n    query GetMangaRecommendations($id: Int) {\n  Media(id: $id, type: MANGA) {\n    recommendations {\n      edges {\n        node {\n          media {\n            ...MediaFragment\n          }\n        }\n      }\n    }\n  }\n}\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}\nfragment MediaFragment on Media {\n  ...MediaBasicFragment\n  nextAiringEpisode {\n    id\n    airingAt\n    timeUntilAiring\n    episode\n    mediaId\n  }\n}\nfragment MediaCoreFragment on Media {\n  id\n  idMal\n  title {\n    ...TitleFragment\n  }\n  coverImage {\n    ...CoverImageFragment\n  }\n  bannerImage\n  description\n  format\n  status\n  type\n  episodes\n  chapters\n  volumes\n  duration\n  genres\n  averageScore\n  meanScore\n  popularity\n  favourites\n  trending\n  source\n  countryOfOrigin\n  isAdult\n  isLicensed\n  isLocked\n  isFavourite\n  isFavouriteBlocked\n  hashtag\n  synonyms\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  siteUrl\n  updatedAt\n  autoCreateForumThread\n  isRecommendationBlocked\n  isReviewBlocked\n  modNotes\n}\nfragment MediaBasicFragment on Media {\n  ...MediaCoreFragment\n  tags {\n    ...MediaTagBasicFragment\n  }\n  externalLinks {\n    ...MediaExternalLinkBasicFragment\n  }\n}\nfragment MediaExternalLinkBasicFragment on MediaExternalLink {\n  id\n  url\n  site\n  siteId\n  type\n}\nfragment MediaTagBasicFragment on MediaTag {\n  id\n  name\n  description\n  category\n  rank\n}`);\nexport const GetMangaRelationsDocument = new TypedDocumentString(`\n    query GetMangaRelations($id: Int) {\n  Media(id: $id, type: MANGA) {\n    relations {\n      edges {\n        relationType\n        node {\n          ...MediaFragment\n        }\n      }\n    }\n  }\n}\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}\nfragment MediaFragment on Media {\n  ...MediaBasicFragment\n  nextAiringEpisode {\n    id\n    airingAt\n    timeUntilAiring\n    episode\n    mediaId\n  }\n}\nfragment MediaCoreFragment on Media {\n  id\n  idMal\n  title {\n    ...TitleFragment\n  }\n  coverImage {\n    ...CoverImageFragment\n  }\n  bannerImage\n  description\n  format\n  status\n  type\n  episodes\n  chapters\n  volumes\n  duration\n  genres\n  averageScore\n  meanScore\n  popularity\n  favourites\n  trending\n  source\n  countryOfOrigin\n  isAdult\n  isLicensed\n  isLocked\n  isFavourite\n  isFavouriteBlocked\n  hashtag\n  synonyms\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  siteUrl\n  updatedAt\n  autoCreateForumThread\n  isRecommendationBlocked\n  isReviewBlocked\n  modNotes\n}\nfragment MediaBasicFragment on Media {\n  ...MediaCoreFragment\n  tags {\n    ...MediaTagBasicFragment\n  }\n  externalLinks {\n    ...MediaExternalLinkBasicFragment\n  }\n}\nfragment MediaExternalLinkBasicFragment on MediaExternalLink {\n  id\n  url\n  site\n  siteId\n  type\n}\nfragment MediaTagBasicFragment on MediaTag {\n  id\n  name\n  description\n  category\n  rank\n}`);\nexport const GetMangaStaffDocument = new TypedDocumentString(`\n    query GetMangaStaff($id: Int) {\n  Media(id: $id, type: MANGA) {\n    staff {\n      edges {\n        role\n        node {\n          ...StaffFragment\n        }\n      }\n    }\n  }\n}\n    fragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment StaffImageFragment on StaffImage {\n  large\n  medium\n}\nfragment StaffNameFragment on StaffName {\n  full\n  native\n  first\n  middle\n  last\n  userPreferred\n}\nfragment StaffBasicFragment on Staff {\n  id\n  name {\n    ...StaffNameFragment\n  }\n  image {\n    ...StaffImageFragment\n  }\n  description\n  primaryOccupations\n  gender\n  bloodType\n  homeTown\n  languageV2\n  yearsActive\n  favourites\n  isFavourite\n  isFavouriteBlocked\n  dateOfBirth {\n    ...DateFragment\n  }\n  dateOfDeath {\n    ...DateFragment\n  }\n  age\n  siteUrl\n}\nfragment StaffFragment on Staff {\n  ...StaffBasicFragment\n}`);\nexport const GetMangaTrendingDocument = new TypedDocumentString(`\n    query GetMangaTrending($page: Int = 1, $perPage: Int = 20) {\n  Page(page: $page, perPage: $perPage) {\n    pageInfo {\n      hasNextPage\n      currentPage\n    }\n    media(sort: TRENDING_DESC, type: MANGA) {\n      ...MediaFragment\n    }\n  }\n}\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}\nfragment MediaFragment on Media {\n  ...MediaBasicFragment\n  nextAiringEpisode {\n    id\n    airingAt\n    timeUntilAiring\n    episode\n    mediaId\n  }\n}\nfragment MediaCoreFragment on Media {\n  id\n  idMal\n  title {\n    ...TitleFragment\n  }\n  coverImage {\n    ...CoverImageFragment\n  }\n  bannerImage\n  description\n  format\n  status\n  type\n  episodes\n  chapters\n  volumes\n  duration\n  genres\n  averageScore\n  meanScore\n  popularity\n  favourites\n  trending\n  source\n  countryOfOrigin\n  isAdult\n  isLicensed\n  isLocked\n  isFavourite\n  isFavouriteBlocked\n  hashtag\n  synonyms\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  siteUrl\n  updatedAt\n  autoCreateForumThread\n  isRecommendationBlocked\n  isReviewBlocked\n  modNotes\n}\nfragment MediaBasicFragment on Media {\n  ...MediaCoreFragment\n  tags {\n    ...MediaTagBasicFragment\n  }\n  externalLinks {\n    ...MediaExternalLinkBasicFragment\n  }\n}\nfragment MediaExternalLinkBasicFragment on MediaExternalLink {\n  id\n  url\n  site\n  siteId\n  type\n}\nfragment MediaTagBasicFragment on MediaTag {\n  id\n  name\n  description\n  category\n  rank\n}`);\nexport const SearchMangaDocument = new TypedDocumentString(`\n    query SearchManga($query: String, $page: Int, $perPage: Int) {\n  Page(page: $page, perPage: $perPage) {\n    pageInfo {\n      hasNextPage\n      currentPage\n    }\n    media(search: $query, type: MANGA) {\n      ...MediaFragment\n    }\n  }\n}\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}\nfragment MediaFragment on Media {\n  ...MediaBasicFragment\n  nextAiringEpisode {\n    id\n    airingAt\n    timeUntilAiring\n    episode\n    mediaId\n  }\n}\nfragment MediaCoreFragment on Media {\n  id\n  idMal\n  title {\n    ...TitleFragment\n  }\n  coverImage {\n    ...CoverImageFragment\n  }\n  bannerImage\n  description\n  format\n  status\n  type\n  episodes\n  chapters\n  volumes\n  duration\n  genres\n  averageScore\n  meanScore\n  popularity\n  favourites\n  trending\n  source\n  countryOfOrigin\n  isAdult\n  isLicensed\n  isLocked\n  isFavourite\n  isFavouriteBlocked\n  hashtag\n  synonyms\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  siteUrl\n  updatedAt\n  autoCreateForumThread\n  isRecommendationBlocked\n  isReviewBlocked\n  modNotes\n}\nfragment MediaBasicFragment on Media {\n  ...MediaCoreFragment\n  tags {\n    ...MediaTagBasicFragment\n  }\n  externalLinks {\n    ...MediaExternalLinkBasicFragment\n  }\n}\nfragment MediaExternalLinkBasicFragment on MediaExternalLink {\n  id\n  url\n  site\n  siteId\n  type\n}\nfragment MediaTagBasicFragment on MediaTag {\n  id\n  name\n  description\n  category\n  rank\n}`);\nexport const ToggleFavoriteMangaDocument = new TypedDocumentString(`\n    mutation ToggleFavoriteManga($mangaId: Int!) {\n  ToggleFavourite(mangaId: $mangaId) {\n    manga(page: 1, perPage: 25) {\n      nodes {\n        id\n      }\n    }\n  }\n}\n    `);\nexport const DeleteReviewDocument = new TypedDocumentString(`\n    mutation DeleteReview($id: Int) {\n  DeleteReview(id: $id) {\n    deleted\n  }\n}\n    `);\nexport const GetAiringScheduleDocument = new TypedDocumentString(`\n    query GetAiringSchedule($id: Int!) {\n  AiringSchedule(id: $id) {\n    ...AiringScheduleFragment\n  }\n}\n    fragment AiringScheduleFragment on AiringSchedule {\n  id\n  airingAt\n  timeUntilAiring\n  episode\n  mediaId\n}`);\nexport const GetAiringSchedulesByMediaDocument = new TypedDocumentString(`\n    query GetAiringSchedulesByMedia($mediaId: Int, $page: Int = 1, $perPage: Int = 25) {\n  Page(page: $page, perPage: $perPage) {\n    pageInfo {\n      hasNextPage\n      currentPage\n      total\n    }\n    airingSchedules(mediaId: $mediaId) {\n      ...AiringScheduleFragment\n    }\n  }\n}\n    fragment AiringScheduleFragment on AiringSchedule {\n  id\n  airingAt\n  timeUntilAiring\n  episode\n  mediaId\n}`);\nexport const GetGenresDocument = new TypedDocumentString(`\n    query GetGenres {\n  GenreCollection\n}\n    `);\nexport const GetMediaByIdDocument = new TypedDocumentString(`\n    query GetMediaById($id: Int!) {\n  Media(id: $id) {\n    ...MediaFragment\n  }\n}\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}\nfragment MediaFragment on Media {\n  ...MediaBasicFragment\n  nextAiringEpisode {\n    id\n    airingAt\n    timeUntilAiring\n    episode\n    mediaId\n  }\n}\nfragment MediaCoreFragment on Media {\n  id\n  idMal\n  title {\n    ...TitleFragment\n  }\n  coverImage {\n    ...CoverImageFragment\n  }\n  bannerImage\n  description\n  format\n  status\n  type\n  episodes\n  chapters\n  volumes\n  duration\n  genres\n  averageScore\n  meanScore\n  popularity\n  favourites\n  trending\n  source\n  countryOfOrigin\n  isAdult\n  isLicensed\n  isLocked\n  isFavourite\n  isFavouriteBlocked\n  hashtag\n  synonyms\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  siteUrl\n  updatedAt\n  autoCreateForumThread\n  isRecommendationBlocked\n  isReviewBlocked\n  modNotes\n}\nfragment MediaBasicFragment on Media {\n  ...MediaCoreFragment\n  tags {\n    ...MediaTagBasicFragment\n  }\n  externalLinks {\n    ...MediaExternalLinkBasicFragment\n  }\n}\nfragment MediaExternalLinkBasicFragment on MediaExternalLink {\n  id\n  url\n  site\n  siteId\n  type\n}\nfragment MediaTagBasicFragment on MediaTag {\n  id\n  name\n  description\n  category\n  rank\n}`);\nexport const GetMediaReviewsDocument = new TypedDocumentString(`\n    query GetMediaReviews($mediaId: Int, $page: Int = 1, $perPage: Int = 10) {\n  Page(page: $page, perPage: $perPage) {\n    pageInfo {\n      hasNextPage\n      currentPage\n      total\n    }\n    reviews(mediaId: $mediaId) {\n      ...ReviewFragment\n    }\n  }\n}\n    fragment ReviewFragment on Review {\n  id\n  userId\n  mediaId\n  mediaType\n  summary\n  body\n  rating\n  ratingAmount\n  score\n  private\n  siteUrl\n  createdAt\n  updatedAt\n  userRating\n  user {\n    id\n    name\n  }\n  media {\n    id\n    title {\n      userPreferred\n    }\n  }\n}`);\nexport const GetMediaTagsDocument = new TypedDocumentString(`\n    query GetMediaTags($status: Int) {\n  MediaTagCollection(status: $status) {\n    ...MediaTagFragment\n  }\n}\n    fragment MediaTagFragment on MediaTag {\n  id\n  name\n  description\n  category\n  rank\n  isGeneralSpoiler\n  isMediaSpoiler\n  isAdult\n  userId\n}`);\nexport const GetRecommendationsPageDocument = new TypedDocumentString(`\n    query GetRecommendationsPage($mediaId: Int, $page: Int = 1, $perPage: Int = 10) {\n  Page(page: $page, perPage: $perPage) {\n    pageInfo {\n      hasNextPage\n      currentPage\n      total\n    }\n    recommendations(mediaId: $mediaId) {\n      ...RecommendationFragment\n    }\n  }\n}\n    fragment RecommendationFragment on Recommendation {\n  id\n  rating\n  userRating\n  user {\n    id\n    name\n  }\n  media {\n    id\n    title {\n      userPreferred\n    }\n  }\n  mediaRecommendation {\n    id\n    title {\n      userPreferred\n    }\n  }\n}`);\nexport const RateReviewDocument = new TypedDocumentString(`\n    mutation RateReview($reviewId: Int, $rating: ReviewRating) {\n  RateReview(reviewId: $reviewId, rating: $rating) {\n    ...ReviewFragment\n  }\n}\n    fragment ReviewFragment on Review {\n  id\n  userId\n  mediaId\n  mediaType\n  summary\n  body\n  rating\n  ratingAmount\n  score\n  private\n  siteUrl\n  createdAt\n  updatedAt\n  userRating\n  user {\n    id\n    name\n  }\n  media {\n    id\n    title {\n      userPreferred\n    }\n  }\n}`);\nexport const SaveRecommendationDocument = new TypedDocumentString(`\n    mutation SaveRecommendation($mediaId: Int, $mediaRecommendationId: Int, $rating: RecommendationRating) {\n  SaveRecommendation(\n    mediaId: $mediaId\n    mediaRecommendationId: $mediaRecommendationId\n    rating: $rating\n  ) {\n    ...RecommendationFragment\n  }\n}\n    fragment RecommendationFragment on Recommendation {\n  id\n  rating\n  userRating\n  user {\n    id\n    name\n  }\n  media {\n    id\n    title {\n      userPreferred\n    }\n  }\n  mediaRecommendation {\n    id\n    title {\n      userPreferred\n    }\n  }\n}`);\nexport const SaveReviewDocument = new TypedDocumentString(`\n    mutation SaveReview($id: Int, $mediaId: Int, $body: String, $summary: String, $score: Int, $private: Boolean) {\n  SaveReview(\n    id: $id\n    mediaId: $mediaId\n    body: $body\n    summary: $summary\n    score: $score\n    private: $private\n  ) {\n    ...ReviewFragment\n  }\n}\n    fragment ReviewFragment on Review {\n  id\n  userId\n  mediaId\n  mediaType\n  summary\n  body\n  rating\n  ratingAmount\n  score\n  private\n  siteUrl\n  createdAt\n  updatedAt\n  userRating\n  user {\n    id\n    name\n  }\n  media {\n    id\n    title {\n      userPreferred\n    }\n  }\n}`);\nexport const DeleteCustomListDocument = new TypedDocumentString(`\n    mutation DeleteCustomList($customList: String, $type: MediaType) {\n  DeleteCustomList(customList: $customList, type: $type) {\n    deleted\n  }\n}\n    `);\nexport const DeleteMediaListEntryDocument = new TypedDocumentString(`\n    mutation DeleteMediaListEntry($id: Int!) {\n  DeleteMediaListEntry(id: $id) {\n    deleted\n  }\n}\n    `);\nexport const GetMediaListDocument = new TypedDocumentString(`\n    query GetMediaList($id: Int) {\n  MediaList(id: $id) {\n    ...MediaListFragment\n  }\n}\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}\nfragment MediaCoreFragment on Media {\n  id\n  idMal\n  title {\n    ...TitleFragment\n  }\n  coverImage {\n    ...CoverImageFragment\n  }\n  bannerImage\n  description\n  format\n  status\n  type\n  episodes\n  chapters\n  volumes\n  duration\n  genres\n  averageScore\n  meanScore\n  popularity\n  favourites\n  trending\n  source\n  countryOfOrigin\n  isAdult\n  isLicensed\n  isLocked\n  isFavourite\n  isFavouriteBlocked\n  hashtag\n  synonyms\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  siteUrl\n  updatedAt\n  autoCreateForumThread\n  isRecommendationBlocked\n  isReviewBlocked\n  modNotes\n}\nfragment MediaListFragment on MediaList {\n  id\n  mediaId\n  userId\n  status\n  score\n  progress\n  progressVolumes\n  repeat\n  priority\n  private\n  notes\n  hiddenFromStatusLists\n  customLists\n  advancedScores\n  startedAt {\n    ...DateFragment\n  }\n  completedAt {\n    ...DateFragment\n  }\n  updatedAt\n  createdAt\n  media {\n    ...MediaCoreFragment\n  }\n}`);\nexport const GetMediaListByUserDocument = new TypedDocumentString(`\n    query GetMediaListByUser($userId: Int, $mediaType: MediaType, $status: MediaListStatus) {\n  MediaListCollection(userId: $userId, type: $mediaType, status: $status) {\n    lists {\n      entries {\n        ...MediaListFragment\n      }\n    }\n  }\n}\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}\nfragment MediaCoreFragment on Media {\n  id\n  idMal\n  title {\n    ...TitleFragment\n  }\n  coverImage {\n    ...CoverImageFragment\n  }\n  bannerImage\n  description\n  format\n  status\n  type\n  episodes\n  chapters\n  volumes\n  duration\n  genres\n  averageScore\n  meanScore\n  popularity\n  favourites\n  trending\n  source\n  countryOfOrigin\n  isAdult\n  isLicensed\n  isLocked\n  isFavourite\n  isFavouriteBlocked\n  hashtag\n  synonyms\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  siteUrl\n  updatedAt\n  autoCreateForumThread\n  isRecommendationBlocked\n  isReviewBlocked\n  modNotes\n}\nfragment MediaListFragment on MediaList {\n  id\n  mediaId\n  userId\n  status\n  score\n  progress\n  progressVolumes\n  repeat\n  priority\n  private\n  notes\n  hiddenFromStatusLists\n  customLists\n  advancedScores\n  startedAt {\n    ...DateFragment\n  }\n  completedAt {\n    ...DateFragment\n  }\n  updatedAt\n  createdAt\n  media {\n    ...MediaCoreFragment\n  }\n}`);\nexport const GetMediaListByUserByUsernameDocument = new TypedDocumentString(`\n    query GetMediaListByUserByUsername($userName: String, $mediaType: MediaType, $status: MediaListStatus) {\n  MediaListCollection(userName: $userName, type: $mediaType, status: $status) {\n    lists {\n      entries {\n        ...MediaListFragment\n      }\n    }\n  }\n}\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}\nfragment MediaCoreFragment on Media {\n  id\n  idMal\n  title {\n    ...TitleFragment\n  }\n  coverImage {\n    ...CoverImageFragment\n  }\n  bannerImage\n  description\n  format\n  status\n  type\n  episodes\n  chapters\n  volumes\n  duration\n  genres\n  averageScore\n  meanScore\n  popularity\n  favourites\n  trending\n  source\n  countryOfOrigin\n  isAdult\n  isLicensed\n  isLocked\n  isFavourite\n  isFavouriteBlocked\n  hashtag\n  synonyms\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  siteUrl\n  updatedAt\n  autoCreateForumThread\n  isRecommendationBlocked\n  isReviewBlocked\n  modNotes\n}\nfragment MediaListFragment on MediaList {\n  id\n  mediaId\n  userId\n  status\n  score\n  progress\n  progressVolumes\n  repeat\n  priority\n  private\n  notes\n  hiddenFromStatusLists\n  customLists\n  advancedScores\n  startedAt {\n    ...DateFragment\n  }\n  completedAt {\n    ...DateFragment\n  }\n  updatedAt\n  createdAt\n  media {\n    ...MediaCoreFragment\n  }\n}`);\nexport const SaveMediaListEntryDocument = new TypedDocumentString(`\n    mutation SaveMediaListEntry($mediaId: Int, $id: Int, $status: MediaListStatus, $score: Float, $scoreRaw: Int, $progress: Int, $progressVolumes: Int, $repeat: Int, $private: Boolean, $notes: String, $startedAt: FuzzyDateInput, $completedAt: FuzzyDateInput, $advancedScores: [Float], $customLists: [String], $hiddenFromStatusLists: Boolean, $priority: Int) {\n  SaveMediaListEntry(\n    mediaId: $mediaId\n    id: $id\n    status: $status\n    score: $score\n    scoreRaw: $scoreRaw\n    progress: $progress\n    progressVolumes: $progressVolumes\n    repeat: $repeat\n    private: $private\n    notes: $notes\n    startedAt: $startedAt\n    completedAt: $completedAt\n    advancedScores: $advancedScores\n    customLists: $customLists\n    hiddenFromStatusLists: $hiddenFromStatusLists\n    priority: $priority\n  ) {\n    ...MediaListFragment\n  }\n}\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}\nfragment MediaCoreFragment on Media {\n  id\n  idMal\n  title {\n    ...TitleFragment\n  }\n  coverImage {\n    ...CoverImageFragment\n  }\n  bannerImage\n  description\n  format\n  status\n  type\n  episodes\n  chapters\n  volumes\n  duration\n  genres\n  averageScore\n  meanScore\n  popularity\n  favourites\n  trending\n  source\n  countryOfOrigin\n  isAdult\n  isLicensed\n  isLocked\n  isFavourite\n  isFavouriteBlocked\n  hashtag\n  synonyms\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  siteUrl\n  updatedAt\n  autoCreateForumThread\n  isRecommendationBlocked\n  isReviewBlocked\n  modNotes\n}\nfragment MediaListFragment on MediaList {\n  id\n  mediaId\n  userId\n  status\n  score\n  progress\n  progressVolumes\n  repeat\n  priority\n  private\n  notes\n  hiddenFromStatusLists\n  customLists\n  advancedScores\n  startedAt {\n    ...DateFragment\n  }\n  completedAt {\n    ...DateFragment\n  }\n  updatedAt\n  createdAt\n  media {\n    ...MediaCoreFragment\n  }\n}`);\nexport const UpdateMediaListEntriesDocument = new TypedDocumentString(`\n    mutation UpdateMediaListEntries($ids: [Int], $status: MediaListStatus, $score: Float, $scoreRaw: Int, $progress: Int, $progressVolumes: Int, $repeat: Int, $private: Boolean, $notes: String, $startedAt: FuzzyDateInput, $completedAt: FuzzyDateInput, $advancedScores: [Float], $hiddenFromStatusLists: Boolean, $priority: Int) {\n  UpdateMediaListEntries(\n    ids: $ids\n    status: $status\n    score: $score\n    scoreRaw: $scoreRaw\n    progress: $progress\n    progressVolumes: $progressVolumes\n    repeat: $repeat\n    private: $private\n    notes: $notes\n    startedAt: $startedAt\n    completedAt: $completedAt\n    advancedScores: $advancedScores\n    hiddenFromStatusLists: $hiddenFromStatusLists\n    priority: $priority\n  ) {\n    ...MediaListFragment\n  }\n}\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}\nfragment MediaCoreFragment on Media {\n  id\n  idMal\n  title {\n    ...TitleFragment\n  }\n  coverImage {\n    ...CoverImageFragment\n  }\n  bannerImage\n  description\n  format\n  status\n  type\n  episodes\n  chapters\n  volumes\n  duration\n  genres\n  averageScore\n  meanScore\n  popularity\n  favourites\n  trending\n  source\n  countryOfOrigin\n  isAdult\n  isLicensed\n  isLocked\n  isFavourite\n  isFavouriteBlocked\n  hashtag\n  synonyms\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  siteUrl\n  updatedAt\n  autoCreateForumThread\n  isRecommendationBlocked\n  isReviewBlocked\n  modNotes\n}\nfragment MediaListFragment on MediaList {\n  id\n  mediaId\n  userId\n  status\n  score\n  progress\n  progressVolumes\n  repeat\n  priority\n  private\n  notes\n  hiddenFromStatusLists\n  customLists\n  advancedScores\n  startedAt {\n    ...DateFragment\n  }\n  completedAt {\n    ...DateFragment\n  }\n  updatedAt\n  createdAt\n  media {\n    ...MediaCoreFragment\n  }\n}`);\nexport const DeleteActivityDocument = new TypedDocumentString(`\n    mutation DeleteActivity($id: Int) {\n  DeleteActivity(id: $id) {\n    deleted\n  }\n}\n    `);\nexport const DeleteActivityReplyDocument = new TypedDocumentString(`\n    mutation DeleteActivityReply($id: Int) {\n  DeleteActivityReply(id: $id) {\n    deleted\n  }\n}\n    `);\nexport const DeleteThreadDocument = new TypedDocumentString(`\n    mutation DeleteThread($id: Int) {\n  DeleteThread(id: $id) {\n    deleted\n  }\n}\n    `);\nexport const DeleteThreadCommentDocument = new TypedDocumentString(`\n    mutation DeleteThreadComment($id: Int) {\n  DeleteThreadComment(id: $id) {\n    deleted\n  }\n}\n    `);\nexport const GetActivitiesDocument = new TypedDocumentString(`\n    query GetActivities($userId: Int, $page: Int = 1, $perPage: Int = 25) {\n  Page(page: $page, perPage: $perPage) {\n    pageInfo {\n      hasNextPage\n      currentPage\n      total\n    }\n    activities(userId: $userId, sort: ID_DESC) {\n      ... on TextActivity {\n        id\n        type\n        userId\n        createdAt\n        text\n      }\n      ... on ListActivity {\n        id\n        type\n        userId\n        createdAt\n        status\n        progress\n      }\n      ... on MessageActivity {\n        id\n        type\n        messengerId\n        createdAt\n        message\n      }\n    }\n  }\n}\n    `);\nexport const GetActivityDocument = new TypedDocumentString(`\n    query GetActivity($id: Int!) {\n  Activity(id: $id) {\n    ... on TextActivity {\n      id\n      type\n      userId\n      createdAt\n      text\n    }\n    ... on ListActivity {\n      id\n      type\n      userId\n      createdAt\n      status\n      progress\n    }\n    ... on MessageActivity {\n      id\n      type\n      messengerId\n      createdAt\n      message\n    }\n  }\n}\n    `);\nexport const GetActivityRepliesDocument = new TypedDocumentString(`\n    query GetActivityReplies($activityId: Int, $page: Int = 1, $perPage: Int = 25) {\n  Page(page: $page, perPage: $perPage) {\n    pageInfo {\n      hasNextPage\n      currentPage\n      total\n    }\n    activityReplies(activityId: $activityId) {\n      id\n      activityId\n      userId\n      text\n      createdAt\n      likeCount\n      isLiked\n      user {\n        id\n        name\n      }\n    }\n  }\n}\n    `);\nexport const GetActivityReplyDocument = new TypedDocumentString(`\n    query GetActivityReply($id: Int!) {\n  ActivityReply(id: $id) {\n    id\n    activityId\n    userId\n    text\n    createdAt\n    likeCount\n    isLiked\n    user {\n      id\n      name\n    }\n  }\n}\n    `);\nexport const GetFollowersDocument = new TypedDocumentString(`\n    query GetFollowers($userId: Int!, $page: Int = 1, $perPage: Int = 25) {\n  Page(page: $page, perPage: $perPage) {\n    pageInfo {\n      hasNextPage\n      currentPage\n      total\n    }\n    followers(userId: $userId) {\n      id\n      name\n      siteUrl\n    }\n  }\n}\n    `);\nexport const GetFollowingDocument = new TypedDocumentString(`\n    query GetFollowing($userId: Int!, $page: Int = 1, $perPage: Int = 25) {\n  Page(page: $page, perPage: $perPage) {\n    pageInfo {\n      hasNextPage\n      currentPage\n      total\n    }\n    following(userId: $userId) {\n      id\n      name\n      siteUrl\n    }\n  }\n}\n    `);\nexport const GetMarkdownDocument = new TypedDocumentString(`\n    query GetMarkdown($markdown: String!) {\n  Markdown(markdown: $markdown) {\n    html\n  }\n}\n    `);\nexport const GetNotificationsDocument = new TypedDocumentString(`\n    query GetNotifications($page: Int = 1, $perPage: Int = 25, $resetNotificationCount: Boolean = false) {\n  Page(page: $page, perPage: $perPage) {\n    pageInfo {\n      hasNextPage\n      currentPage\n      total\n    }\n    notifications(resetNotificationCount: $resetNotificationCount) {\n      ... on ActivityLikeNotification {\n        id\n        type\n        createdAt\n      }\n      ... on ActivityMentionNotification {\n        id\n        type\n        createdAt\n      }\n      ... on ActivityMessageNotification {\n        id\n        type\n        createdAt\n      }\n      ... on ActivityReplyLikeNotification {\n        id\n        type\n        createdAt\n      }\n      ... on ActivityReplyNotification {\n        id\n        type\n        createdAt\n      }\n      ... on ActivityReplySubscribedNotification {\n        id\n        type\n        createdAt\n      }\n      ... on AiringNotification {\n        id\n        type\n        createdAt\n      }\n      ... on CharacterSubmissionUpdateNotification {\n        id\n        type\n        createdAt\n      }\n      ... on FollowingNotification {\n        id\n        type\n        createdAt\n      }\n      ... on MediaDataChangeNotification {\n        id\n        type\n        createdAt\n      }\n      ... on MediaDeletionNotification {\n        id\n        type\n        createdAt\n      }\n      ... on MediaMergeNotification {\n        id\n        type\n        createdAt\n      }\n      ... on MediaSubmissionUpdateNotification {\n        id\n        type\n        createdAt\n      }\n      ... on RelatedMediaAdditionNotification {\n        id\n        type\n        createdAt\n      }\n      ... on StaffSubmissionUpdateNotification {\n        id\n        type\n        createdAt\n      }\n      ... on ThreadCommentLikeNotification {\n        id\n        type\n        createdAt\n      }\n      ... on ThreadCommentMentionNotification {\n        id\n        type\n        createdAt\n      }\n      ... on ThreadCommentReplyNotification {\n        id\n        type\n        createdAt\n      }\n      ... on ThreadCommentSubscribedNotification {\n        id\n        type\n        createdAt\n      }\n      ... on ThreadLikeNotification {\n        id\n        type\n        createdAt\n      }\n    }\n  }\n}\n    `);\nexport const GetSiteStatisticsDocument = new TypedDocumentString(`\n    query GetSiteStatistics {\n  SiteStatistics {\n    users {\n      nodes {\n        count\n        date\n        change\n      }\n    }\n    anime {\n      nodes {\n        count\n        date\n        change\n      }\n    }\n    manga {\n      nodes {\n        count\n        date\n        change\n      }\n    }\n    characters {\n      nodes {\n        count\n        date\n        change\n      }\n    }\n    staff {\n      nodes {\n        count\n        date\n        change\n      }\n    }\n    studios {\n      nodes {\n        count\n        date\n        change\n      }\n    }\n    reviews {\n      nodes {\n        count\n        date\n        change\n      }\n    }\n  }\n}\n    `);\nexport const GetThreadDocument = new TypedDocumentString(`\n    query GetThread($id: Int!) {\n  Thread(id: $id) {\n    id\n    title\n    body\n    userId\n    createdAt\n    updatedAt\n    replyCount\n    viewCount\n    likeCount\n    isLocked\n    isSticky\n    isSubscribed\n    user {\n      id\n      name\n    }\n  }\n}\n    `);\nexport const GetThreadCommentDocument = new TypedDocumentString(`\n    query GetThreadComment($id: Int!) {\n  ThreadComment(id: $id) {\n    id\n    threadId\n    userId\n    comment\n    createdAt\n    updatedAt\n    likeCount\n    isLiked\n    user {\n      id\n      name\n    }\n  }\n}\n    `);\nexport const GetThreadCommentsDocument = new TypedDocumentString(`\n    query GetThreadComments($threadId: Int, $page: Int = 1, $perPage: Int = 25) {\n  Page(page: $page, perPage: $perPage) {\n    pageInfo {\n      hasNextPage\n      currentPage\n      total\n    }\n    threadComments(threadId: $threadId) {\n      id\n      threadId\n      userId\n      comment\n      createdAt\n      updatedAt\n      likeCount\n      isLiked\n      user {\n        id\n        name\n      }\n    }\n  }\n}\n    `);\nexport const GetThreadsDocument = new TypedDocumentString(`\n    query GetThreads($search: String, $userId: Int, $page: Int = 1, $perPage: Int = 25) {\n  Page(page: $page, perPage: $perPage) {\n    pageInfo {\n      hasNextPage\n      currentPage\n      total\n    }\n    threads(search: $search, userId: $userId, sort: ID_DESC) {\n      id\n      title\n      body\n      userId\n      createdAt\n      updatedAt\n      replyCount\n      viewCount\n      likeCount\n      isLocked\n      isSticky\n      isSubscribed\n      user {\n        id\n        name\n      }\n    }\n  }\n}\n    `);\nexport const SaveActivityReplyDocument = new TypedDocumentString(`\n    mutation SaveActivityReply($id: Int, $activityId: Int, $text: String, $asMod: Boolean) {\n  SaveActivityReply(id: $id, activityId: $activityId, text: $text, asMod: $asMod) {\n    id\n    activityId\n    userId\n    text\n    createdAt\n    likeCount\n    isLiked\n    user {\n      id\n      name\n    }\n  }\n}\n    `);\nexport const SaveMessageActivityDocument = new TypedDocumentString(`\n    mutation SaveMessageActivity($id: Int, $message: String, $recipientId: Int, $private: Boolean, $locked: Boolean, $asMod: Boolean) {\n  SaveMessageActivity(\n    id: $id\n    message: $message\n    recipientId: $recipientId\n    private: $private\n    locked: $locked\n    asMod: $asMod\n  ) {\n    id\n    type\n    messengerId\n    createdAt\n    message\n    isLiked\n    isLocked\n    likeCount\n    siteUrl\n  }\n}\n    `);\nexport const SaveTextActivityDocument = new TypedDocumentString(`\n    mutation SaveTextActivity($id: Int, $text: String, $locked: Boolean) {\n  SaveTextActivity(id: $id, text: $text, locked: $locked) {\n    id\n    type\n    userId\n    createdAt\n    text\n    isLiked\n    isLocked\n    likeCount\n    siteUrl\n  }\n}\n    `);\nexport const SaveThreadDocument = new TypedDocumentString(`\n    mutation SaveThread($id: Int, $title: String, $body: String, $categories: [Int], $mediaCategories: [Int], $sticky: Boolean, $locked: Boolean) {\n  SaveThread(\n    id: $id\n    title: $title\n    body: $body\n    categories: $categories\n    mediaCategories: $mediaCategories\n    sticky: $sticky\n    locked: $locked\n  ) {\n    id\n    title\n    body\n    userId\n    createdAt\n    updatedAt\n    replyCount\n    viewCount\n    likeCount\n    isLocked\n    isSticky\n    isSubscribed\n    user {\n      id\n      name\n    }\n  }\n}\n    `);\nexport const SaveThreadCommentDocument = new TypedDocumentString(`\n    mutation SaveThreadComment($id: Int, $threadId: Int, $parentCommentId: Int, $comment: String, $locked: Boolean) {\n  SaveThreadComment(\n    id: $id\n    threadId: $threadId\n    parentCommentId: $parentCommentId\n    comment: $comment\n    locked: $locked\n  ) {\n    id\n    threadId\n    userId\n    comment\n    createdAt\n    updatedAt\n    likeCount\n    isLiked\n    user {\n      id\n      name\n    }\n  }\n}\n    `);\nexport const ToggleActivityPinDocument = new TypedDocumentString(`\n    mutation ToggleActivityPin($id: Int, $pinned: Boolean) {\n  ToggleActivityPin(id: $id, pinned: $pinned) {\n    ... on TextActivity {\n      id\n      isPinned\n    }\n    ... on ListActivity {\n      id\n      isPinned\n    }\n    ... on MessageActivity {\n      id\n      isPinned\n    }\n  }\n}\n    `);\nexport const ToggleActivitySubscriptionDocument = new TypedDocumentString(`\n    mutation ToggleActivitySubscription($activityId: Int, $subscribe: Boolean) {\n  ToggleActivitySubscription(activityId: $activityId, subscribe: $subscribe) {\n    ... on TextActivity {\n      id\n      isSubscribed\n    }\n    ... on ListActivity {\n      id\n      isSubscribed\n    }\n    ... on MessageActivity {\n      id\n      isSubscribed\n    }\n  }\n}\n    `);\nexport const ToggleFollowDocument = new TypedDocumentString(`\n    mutation ToggleFollow($userId: Int) {\n  ToggleFollow(userId: $userId) {\n    id\n    name\n    isFollowing\n    siteUrl\n  }\n}\n    `);\nexport const ToggleLikeDocument = new TypedDocumentString(`\n    mutation ToggleLike($id: Int, $type: LikeableType) {\n  ToggleLikeV2(id: $id, type: $type) {\n    ... on ActivityReply {\n      id\n    }\n    ... on ListActivity {\n      id\n    }\n    ... on MessageActivity {\n      id\n    }\n    ... on TextActivity {\n      id\n    }\n    ... on Thread {\n      id\n    }\n    ... on ThreadComment {\n      id\n    }\n  }\n}\n    `);\nexport const ToggleThreadSubscriptionDocument = new TypedDocumentString(`\n    mutation ToggleThreadSubscription($threadId: Int, $subscribe: Boolean) {\n  ToggleThreadSubscription(threadId: $threadId, subscribe: $subscribe) {\n    id\n    isSubscribed\n  }\n}\n    `);\nexport const GetStaffByIdDocument = new TypedDocumentString(`\n    query GetStaffById($id: Int!) {\n  Staff(id: $id) {\n    ...StaffFragment\n    isFavourite\n    favourites\n    staffMedia {\n      nodes {\n        id\n        title {\n          romaji\n          english\n          native\n          userPreferred\n        }\n        type\n      }\n    }\n    characters {\n      nodes {\n        ...CharacterFragment\n      }\n    }\n    characterMedia {\n      nodes {\n        id\n        title {\n          romaji\n          english\n          native\n          userPreferred\n        }\n        type\n      }\n    }\n  }\n}\n    fragment CharacterFragment on Character {\n  ...CharacterBasicFragment\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment CharacterImageFragment on CharacterImage {\n  large\n  medium\n}\nfragment StaffImageFragment on StaffImage {\n  large\n  medium\n}\nfragment CharacterNameFragment on CharacterName {\n  alternative\n  alternativeSpoiler\n  first\n  full\n  last\n  middle\n  native\n  userPreferred\n}\nfragment CharacterBasicFragment on Character {\n  id\n  name {\n    ...CharacterNameFragment\n  }\n  image {\n    ...CharacterImageFragment\n  }\n  description\n  gender\n  dateOfBirth {\n    ...DateFragment\n  }\n  age\n  bloodType\n  isFavourite\n  isFavouriteBlocked\n  favourites\n  siteUrl\n}\nfragment StaffNameFragment on StaffName {\n  full\n  native\n  first\n  middle\n  last\n  userPreferred\n}\nfragment StaffBasicFragment on Staff {\n  id\n  name {\n    ...StaffNameFragment\n  }\n  image {\n    ...StaffImageFragment\n  }\n  description\n  primaryOccupations\n  gender\n  bloodType\n  homeTown\n  languageV2\n  yearsActive\n  favourites\n  isFavourite\n  isFavouriteBlocked\n  dateOfBirth {\n    ...DateFragment\n  }\n  dateOfDeath {\n    ...DateFragment\n  }\n  age\n  siteUrl\n}\nfragment StaffFragment on Staff {\n  ...StaffBasicFragment\n}`);\nexport const StaffBirthdayTodayDocument = new TypedDocumentString(`\n    query StaffBirthdayToday($page: Int, $perPage: Int) {\n  Page(page: $page, perPage: $perPage) {\n    pageInfo {\n      hasNextPage\n      currentPage\n    }\n    staff(isBirthday: true) {\n      id\n      name {\n        alternative\n        first\n        full\n        last\n        middle\n        native\n        userPreferred\n      }\n    }\n  }\n}\n    `);\nexport const ToggleFavoriteStaffDocument = new TypedDocumentString(`\n    mutation ToggleFavoriteStaff($staffID: Int!) {\n  ToggleFavourite(staffId: $staffID) {\n    staff(page: 1, perPage: 25) {\n      nodes {\n        id\n      }\n    }\n  }\n}\n    `);\nexport const GetStudioByIdDocument = new TypedDocumentString(`\n    query GetStudioById($id: Int!) {\n  Studio(id: $id) {\n    ...StudioFragment\n  }\n}\n    fragment StudioNodeFragment on Studio {\n  id\n  name\n  isAnimationStudio\n  favourites\n  isFavourite\n  siteUrl\n}\nfragment StudioFragment on Studio {\n  ...StudioNodeFragment\n  media {\n    pageInfo {\n      total\n      perPage\n      currentPage\n      lastPage\n      hasNextPage\n    }\n  }\n}`);\nexport const SearchStudioDocument = new TypedDocumentString(`\n    query SearchStudio($query: String, $page: Int, $perPage: Int) {\n  Page(page: $page, perPage: $perPage) {\n    pageInfo {\n      total\n      perPage\n      currentPage\n      lastPage\n      hasNextPage\n    }\n    studios(search: $query) {\n      ...StudioNodeFragment\n    }\n  }\n}\n    fragment StudioNodeFragment on Studio {\n  id\n  name\n  isAnimationStudio\n  favourites\n  isFavourite\n  siteUrl\n}`);\nexport const ToggleFavoriteStudioDocument = new TypedDocumentString(`\n    mutation ToggleFavoriteStudio($studioId: Int!) {\n  ToggleFavourite(studioId: $studioId) {\n    studios(page: 1, perPage: 25) {\n      nodes {\n        id\n      }\n    }\n  }\n}\n    `);\nexport const GetUserAnimeListDocument = new TypedDocumentString(`\n    query GetUserAnimeList($userId: Int, $status: MediaListStatus) {\n  MediaListCollection(userId: $userId, type: ANIME, status: $status) {\n    lists {\n      entries {\n        ...MediaListFragment\n      }\n    }\n  }\n}\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}\nfragment MediaCoreFragment on Media {\n  id\n  idMal\n  title {\n    ...TitleFragment\n  }\n  coverImage {\n    ...CoverImageFragment\n  }\n  bannerImage\n  description\n  format\n  status\n  type\n  episodes\n  chapters\n  volumes\n  duration\n  genres\n  averageScore\n  meanScore\n  popularity\n  favourites\n  trending\n  source\n  countryOfOrigin\n  isAdult\n  isLicensed\n  isLocked\n  isFavourite\n  isFavouriteBlocked\n  hashtag\n  synonyms\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  siteUrl\n  updatedAt\n  autoCreateForumThread\n  isRecommendationBlocked\n  isReviewBlocked\n  modNotes\n}\nfragment MediaListFragment on MediaList {\n  id\n  mediaId\n  userId\n  status\n  score\n  progress\n  progressVolumes\n  repeat\n  priority\n  private\n  notes\n  hiddenFromStatusLists\n  customLists\n  advancedScores\n  startedAt {\n    ...DateFragment\n  }\n  completedAt {\n    ...DateFragment\n  }\n  updatedAt\n  createdAt\n  media {\n    ...MediaCoreFragment\n  }\n}`);\nexport const GetUserAnimeListByUsernameDocument = new TypedDocumentString(`\n    query GetUserAnimeListByUsername($userName: String, $status: MediaListStatus) {\n  MediaListCollection(userName: $userName, type: ANIME, status: $status) {\n    lists {\n      entries {\n        ...MediaListFragment\n      }\n    }\n  }\n}\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}\nfragment MediaCoreFragment on Media {\n  id\n  idMal\n  title {\n    ...TitleFragment\n  }\n  coverImage {\n    ...CoverImageFragment\n  }\n  bannerImage\n  description\n  format\n  status\n  type\n  episodes\n  chapters\n  volumes\n  duration\n  genres\n  averageScore\n  meanScore\n  popularity\n  favourites\n  trending\n  source\n  countryOfOrigin\n  isAdult\n  isLicensed\n  isLocked\n  isFavourite\n  isFavouriteBlocked\n  hashtag\n  synonyms\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  siteUrl\n  updatedAt\n  autoCreateForumThread\n  isRecommendationBlocked\n  isReviewBlocked\n  modNotes\n}\nfragment MediaListFragment on MediaList {\n  id\n  mediaId\n  userId\n  status\n  score\n  progress\n  progressVolumes\n  repeat\n  priority\n  private\n  notes\n  hiddenFromStatusLists\n  customLists\n  advancedScores\n  startedAt {\n    ...DateFragment\n  }\n  completedAt {\n    ...DateFragment\n  }\n  updatedAt\n  createdAt\n  media {\n    ...MediaCoreFragment\n  }\n}`);\nexport const GetUserInfoDocument = new TypedDocumentString(`\n    query GetUserInfo($id: Int) {\n  User(id: $id) {\n    ...UserFragment\n  }\n}\n    fragment UserAvatarFragment on UserAvatar {\n  large\n  medium\n}\nfragment UserOptionsFragment on UserOptions {\n  titleLanguage\n  displayAdultContent\n  airingNotifications\n  profileColor\n  notificationOptions {\n    type\n    enabled\n  }\n  timezone\n  activityMergeTime\n  staffNameLanguage\n  restrictMessagesToFollowing\n  disabledListActivity {\n    disabled\n    type\n  }\n}\nfragment UserMediaListOptionsFragment on MediaListOptions {\n  scoreFormat\n  rowOrder\n  useLegacyLists\n  animeList {\n    sectionOrder\n    splitCompletedSectionByFormat\n    customLists\n    advancedScoring\n    advancedScoringEnabled\n  }\n  mangaList {\n    sectionOrder\n    splitCompletedSectionByFormat\n    customLists\n    advancedScoring\n    advancedScoringEnabled\n  }\n  sharedTheme\n  sharedThemeEnabled\n}\nfragment UserFavouritesFragment on Favourites {\n  anime {\n    nodes {\n      id\n      title {\n        romaji\n      }\n    }\n  }\n  manga {\n    nodes {\n      id\n      title {\n        romaji\n      }\n    }\n  }\n  characters {\n    nodes {\n      id\n      name {\n        full\n      }\n    }\n  }\n  staff {\n    nodes {\n      id\n      name {\n        full\n      }\n    }\n  }\n  studios {\n    nodes {\n      id\n      name\n    }\n  }\n}\nfragment UserStatisticsFragment on UserStatisticTypes {\n  anime {\n    count\n    meanScore\n    standardDeviation\n    minutesWatched\n    episodesWatched\n    chaptersRead\n    volumesRead\n    scores {\n      score\n      count\n      meanScore\n      minutesWatched\n    }\n    lengths {\n      length\n      count\n      meanScore\n      minutesWatched\n    }\n    formats {\n      format\n      count\n      meanScore\n      minutesWatched\n    }\n    statuses {\n      status\n      count\n      meanScore\n      minutesWatched\n    }\n    releaseYears {\n      releaseYear\n      count\n      meanScore\n      minutesWatched\n    }\n    startYears {\n      startYear\n      count\n      meanScore\n      minutesWatched\n    }\n    genres {\n      genre\n      count\n      meanScore\n      minutesWatched\n    }\n    tags {\n      tag {\n        name\n      }\n      count\n      meanScore\n      minutesWatched\n    }\n    countries {\n      country\n      count\n      meanScore\n      minutesWatched\n    }\n    voiceActors {\n      count\n      meanScore\n      minutesWatched\n      voiceActor {\n        id\n        name {\n          full\n        }\n      }\n      characterIds\n      mediaIds\n    }\n    staff {\n      count\n      meanScore\n      minutesWatched\n      staff {\n        id\n        name {\n          full\n        }\n      }\n      mediaIds\n    }\n    studios {\n      count\n      meanScore\n      minutesWatched\n      studio {\n        id\n        name\n      }\n      mediaIds\n    }\n  }\n  manga {\n    count\n    meanScore\n    standardDeviation\n    chaptersRead\n    volumesRead\n    scores {\n      score\n      count\n      meanScore\n      chaptersRead\n    }\n    lengths {\n      length\n      count\n      meanScore\n      chaptersRead\n    }\n    formats {\n      format\n      count\n      meanScore\n      chaptersRead\n    }\n    statuses {\n      status\n      count\n      meanScore\n      chaptersRead\n    }\n    releaseYears {\n      releaseYear\n      count\n      meanScore\n      chaptersRead\n    }\n    startYears {\n      startYear\n      count\n      meanScore\n      chaptersRead\n    }\n    genres {\n      genre\n      count\n      meanScore\n      chaptersRead\n    }\n    tags {\n      tag {\n        name\n      }\n      count\n      meanScore\n      chaptersRead\n    }\n    countries {\n      country\n      count\n      meanScore\n      chaptersRead\n    }\n    staff {\n      count\n      meanScore\n      chaptersRead\n      staff {\n        id\n        name {\n          full\n        }\n      }\n      mediaIds\n    }\n    studios {\n      count\n      meanScore\n      chaptersRead\n      studio {\n        id\n        name\n      }\n      mediaIds\n    }\n  }\n}\nfragment UserBasicFragment on User {\n  id\n  name\n  avatar {\n    ...UserAvatarFragment\n  }\n  about\n  bannerImage\n  donatorTier\n  donatorBadge\n  isFollowing\n  isFollower\n  isBlocked\n  createdAt\n  updatedAt\n  unreadNotificationCount\n  bans\n  moderatorRoles\n  moderatorStatus\n  options {\n    ...UserOptionsFragment\n  }\n  mediaListOptions {\n    ...UserMediaListOptionsFragment\n  }\n  favourites {\n    ...UserFavouritesFragment\n  }\n  statistics {\n    ...UserStatisticsFragment\n  }\n  siteUrl\n  stats {\n    watchedTime\n    chaptersRead\n  }\n  previousNames {\n    name\n    createdAt\n    updatedAt\n  }\n}\nfragment UserFragment on User {\n  ...UserBasicFragment\n}`);\nexport const GetUserInfoByUsernameDocument = new TypedDocumentString(`\n    query GetUserInfoByUsername($userName: String) {\n  User(name: $userName) {\n    ...UserFragment\n  }\n}\n    fragment UserAvatarFragment on UserAvatar {\n  large\n  medium\n}\nfragment UserOptionsFragment on UserOptions {\n  titleLanguage\n  displayAdultContent\n  airingNotifications\n  profileColor\n  notificationOptions {\n    type\n    enabled\n  }\n  timezone\n  activityMergeTime\n  staffNameLanguage\n  restrictMessagesToFollowing\n  disabledListActivity {\n    disabled\n    type\n  }\n}\nfragment UserMediaListOptionsFragment on MediaListOptions {\n  scoreFormat\n  rowOrder\n  useLegacyLists\n  animeList {\n    sectionOrder\n    splitCompletedSectionByFormat\n    customLists\n    advancedScoring\n    advancedScoringEnabled\n  }\n  mangaList {\n    sectionOrder\n    splitCompletedSectionByFormat\n    customLists\n    advancedScoring\n    advancedScoringEnabled\n  }\n  sharedTheme\n  sharedThemeEnabled\n}\nfragment UserFavouritesFragment on Favourites {\n  anime {\n    nodes {\n      id\n      title {\n        romaji\n      }\n    }\n  }\n  manga {\n    nodes {\n      id\n      title {\n        romaji\n      }\n    }\n  }\n  characters {\n    nodes {\n      id\n      name {\n        full\n      }\n    }\n  }\n  staff {\n    nodes {\n      id\n      name {\n        full\n      }\n    }\n  }\n  studios {\n    nodes {\n      id\n      name\n    }\n  }\n}\nfragment UserStatisticsFragment on UserStatisticTypes {\n  anime {\n    count\n    meanScore\n    standardDeviation\n    minutesWatched\n    episodesWatched\n    chaptersRead\n    volumesRead\n    scores {\n      score\n      count\n      meanScore\n      minutesWatched\n    }\n    lengths {\n      length\n      count\n      meanScore\n      minutesWatched\n    }\n    formats {\n      format\n      count\n      meanScore\n      minutesWatched\n    }\n    statuses {\n      status\n      count\n      meanScore\n      minutesWatched\n    }\n    releaseYears {\n      releaseYear\n      count\n      meanScore\n      minutesWatched\n    }\n    startYears {\n      startYear\n      count\n      meanScore\n      minutesWatched\n    }\n    genres {\n      genre\n      count\n      meanScore\n      minutesWatched\n    }\n    tags {\n      tag {\n        name\n      }\n      count\n      meanScore\n      minutesWatched\n    }\n    countries {\n      country\n      count\n      meanScore\n      minutesWatched\n    }\n    voiceActors {\n      count\n      meanScore\n      minutesWatched\n      voiceActor {\n        id\n        name {\n          full\n        }\n      }\n      characterIds\n      mediaIds\n    }\n    staff {\n      count\n      meanScore\n      minutesWatched\n      staff {\n        id\n        name {\n          full\n        }\n      }\n      mediaIds\n    }\n    studios {\n      count\n      meanScore\n      minutesWatched\n      studio {\n        id\n        name\n      }\n      mediaIds\n    }\n  }\n  manga {\n    count\n    meanScore\n    standardDeviation\n    chaptersRead\n    volumesRead\n    scores {\n      score\n      count\n      meanScore\n      chaptersRead\n    }\n    lengths {\n      length\n      count\n      meanScore\n      chaptersRead\n    }\n    formats {\n      format\n      count\n      meanScore\n      chaptersRead\n    }\n    statuses {\n      status\n      count\n      meanScore\n      chaptersRead\n    }\n    releaseYears {\n      releaseYear\n      count\n      meanScore\n      chaptersRead\n    }\n    startYears {\n      startYear\n      count\n      meanScore\n      chaptersRead\n    }\n    genres {\n      genre\n      count\n      meanScore\n      chaptersRead\n    }\n    tags {\n      tag {\n        name\n      }\n      count\n      meanScore\n      chaptersRead\n    }\n    countries {\n      country\n      count\n      meanScore\n      chaptersRead\n    }\n    staff {\n      count\n      meanScore\n      chaptersRead\n      staff {\n        id\n        name {\n          full\n        }\n      }\n      mediaIds\n    }\n    studios {\n      count\n      meanScore\n      chaptersRead\n      studio {\n        id\n        name\n      }\n      mediaIds\n    }\n  }\n}\nfragment UserBasicFragment on User {\n  id\n  name\n  avatar {\n    ...UserAvatarFragment\n  }\n  about\n  bannerImage\n  donatorTier\n  donatorBadge\n  isFollowing\n  isFollower\n  isBlocked\n  createdAt\n  updatedAt\n  unreadNotificationCount\n  bans\n  moderatorRoles\n  moderatorStatus\n  options {\n    ...UserOptionsFragment\n  }\n  mediaListOptions {\n    ...UserMediaListOptionsFragment\n  }\n  favourites {\n    ...UserFavouritesFragment\n  }\n  statistics {\n    ...UserStatisticsFragment\n  }\n  siteUrl\n  stats {\n    watchedTime\n    chaptersRead\n  }\n  previousNames {\n    name\n    createdAt\n    updatedAt\n  }\n}\nfragment UserFragment on User {\n  ...UserBasicFragment\n}`);\nexport const GetUserListDocument = new TypedDocumentString(`\n    query GetUserList($page: Int, $perPage: Int) {\n  Page(page: $page, perPage: $perPage) {\n    pageInfo {\n      hasNextPage\n      currentPage\n    }\n    users {\n      ...UserFragment\n    }\n  }\n}\n    fragment UserAvatarFragment on UserAvatar {\n  large\n  medium\n}\nfragment UserOptionsFragment on UserOptions {\n  titleLanguage\n  displayAdultContent\n  airingNotifications\n  profileColor\n  notificationOptions {\n    type\n    enabled\n  }\n  timezone\n  activityMergeTime\n  staffNameLanguage\n  restrictMessagesToFollowing\n  disabledListActivity {\n    disabled\n    type\n  }\n}\nfragment UserMediaListOptionsFragment on MediaListOptions {\n  scoreFormat\n  rowOrder\n  useLegacyLists\n  animeList {\n    sectionOrder\n    splitCompletedSectionByFormat\n    customLists\n    advancedScoring\n    advancedScoringEnabled\n  }\n  mangaList {\n    sectionOrder\n    splitCompletedSectionByFormat\n    customLists\n    advancedScoring\n    advancedScoringEnabled\n  }\n  sharedTheme\n  sharedThemeEnabled\n}\nfragment UserFavouritesFragment on Favourites {\n  anime {\n    nodes {\n      id\n      title {\n        romaji\n      }\n    }\n  }\n  manga {\n    nodes {\n      id\n      title {\n        romaji\n      }\n    }\n  }\n  characters {\n    nodes {\n      id\n      name {\n        full\n      }\n    }\n  }\n  staff {\n    nodes {\n      id\n      name {\n        full\n      }\n    }\n  }\n  studios {\n    nodes {\n      id\n      name\n    }\n  }\n}\nfragment UserStatisticsFragment on UserStatisticTypes {\n  anime {\n    count\n    meanScore\n    standardDeviation\n    minutesWatched\n    episodesWatched\n    chaptersRead\n    volumesRead\n    scores {\n      score\n      count\n      meanScore\n      minutesWatched\n    }\n    lengths {\n      length\n      count\n      meanScore\n      minutesWatched\n    }\n    formats {\n      format\n      count\n      meanScore\n      minutesWatched\n    }\n    statuses {\n      status\n      count\n      meanScore\n      minutesWatched\n    }\n    releaseYears {\n      releaseYear\n      count\n      meanScore\n      minutesWatched\n    }\n    startYears {\n      startYear\n      count\n      meanScore\n      minutesWatched\n    }\n    genres {\n      genre\n      count\n      meanScore\n      minutesWatched\n    }\n    tags {\n      tag {\n        name\n      }\n      count\n      meanScore\n      minutesWatched\n    }\n    countries {\n      country\n      count\n      meanScore\n      minutesWatched\n    }\n    voiceActors {\n      count\n      meanScore\n      minutesWatched\n      voiceActor {\n        id\n        name {\n          full\n        }\n      }\n      characterIds\n      mediaIds\n    }\n    staff {\n      count\n      meanScore\n      minutesWatched\n      staff {\n        id\n        name {\n          full\n        }\n      }\n      mediaIds\n    }\n    studios {\n      count\n      meanScore\n      minutesWatched\n      studio {\n        id\n        name\n      }\n      mediaIds\n    }\n  }\n  manga {\n    count\n    meanScore\n    standardDeviation\n    chaptersRead\n    volumesRead\n    scores {\n      score\n      count\n      meanScore\n      chaptersRead\n    }\n    lengths {\n      length\n      count\n      meanScore\n      chaptersRead\n    }\n    formats {\n      format\n      count\n      meanScore\n      chaptersRead\n    }\n    statuses {\n      status\n      count\n      meanScore\n      chaptersRead\n    }\n    releaseYears {\n      releaseYear\n      count\n      meanScore\n      chaptersRead\n    }\n    startYears {\n      startYear\n      count\n      meanScore\n      chaptersRead\n    }\n    genres {\n      genre\n      count\n      meanScore\n      chaptersRead\n    }\n    tags {\n      tag {\n        name\n      }\n      count\n      meanScore\n      chaptersRead\n    }\n    countries {\n      country\n      count\n      meanScore\n      chaptersRead\n    }\n    staff {\n      count\n      meanScore\n      chaptersRead\n      staff {\n        id\n        name {\n          full\n        }\n      }\n      mediaIds\n    }\n    studios {\n      count\n      meanScore\n      chaptersRead\n      studio {\n        id\n        name\n      }\n      mediaIds\n    }\n  }\n}\nfragment UserBasicFragment on User {\n  id\n  name\n  avatar {\n    ...UserAvatarFragment\n  }\n  about\n  bannerImage\n  donatorTier\n  donatorBadge\n  isFollowing\n  isFollower\n  isBlocked\n  createdAt\n  updatedAt\n  unreadNotificationCount\n  bans\n  moderatorRoles\n  moderatorStatus\n  options {\n    ...UserOptionsFragment\n  }\n  mediaListOptions {\n    ...UserMediaListOptionsFragment\n  }\n  favourites {\n    ...UserFavouritesFragment\n  }\n  statistics {\n    ...UserStatisticsFragment\n  }\n  siteUrl\n  stats {\n    watchedTime\n    chaptersRead\n  }\n  previousNames {\n    name\n    createdAt\n    updatedAt\n  }\n}\nfragment UserFragment on User {\n  ...UserBasicFragment\n}`);\nexport const GetUserMangaListDocument = new TypedDocumentString(`\n    query GetUserMangaList($userId: Int, $status: MediaListStatus) {\n  MediaListCollection(userId: $userId, type: MANGA, status: $status) {\n    lists {\n      entries {\n        ...MediaListFragment\n      }\n    }\n  }\n}\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}\nfragment MediaCoreFragment on Media {\n  id\n  idMal\n  title {\n    ...TitleFragment\n  }\n  coverImage {\n    ...CoverImageFragment\n  }\n  bannerImage\n  description\n  format\n  status\n  type\n  episodes\n  chapters\n  volumes\n  duration\n  genres\n  averageScore\n  meanScore\n  popularity\n  favourites\n  trending\n  source\n  countryOfOrigin\n  isAdult\n  isLicensed\n  isLocked\n  isFavourite\n  isFavouriteBlocked\n  hashtag\n  synonyms\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  siteUrl\n  updatedAt\n  autoCreateForumThread\n  isRecommendationBlocked\n  isReviewBlocked\n  modNotes\n}\nfragment MediaListFragment on MediaList {\n  id\n  mediaId\n  userId\n  status\n  score\n  progress\n  progressVolumes\n  repeat\n  priority\n  private\n  notes\n  hiddenFromStatusLists\n  customLists\n  advancedScores\n  startedAt {\n    ...DateFragment\n  }\n  completedAt {\n    ...DateFragment\n  }\n  updatedAt\n  createdAt\n  media {\n    ...MediaCoreFragment\n  }\n}`);\nexport const GetUserMangaListByUsernameDocument = new TypedDocumentString(`\n    query GetUserMangaListByUsername($userName: String, $status: MediaListStatus) {\n  MediaListCollection(userName: $userName, type: MANGA, status: $status) {\n    lists {\n      entries {\n        ...MediaListFragment\n      }\n    }\n  }\n}\n    fragment CoverImageFragment on MediaCoverImage {\n  large\n  medium\n  extraLarge\n  color\n}\nfragment DateFragment on FuzzyDate {\n  year\n  month\n  day\n}\nfragment TitleFragment on MediaTitle {\n  romaji\n  english\n  native\n  userPreferred\n}\nfragment MediaCoreFragment on Media {\n  id\n  idMal\n  title {\n    ...TitleFragment\n  }\n  coverImage {\n    ...CoverImageFragment\n  }\n  bannerImage\n  description\n  format\n  status\n  type\n  episodes\n  chapters\n  volumes\n  duration\n  genres\n  averageScore\n  meanScore\n  popularity\n  favourites\n  trending\n  source\n  countryOfOrigin\n  isAdult\n  isLicensed\n  isLocked\n  isFavourite\n  isFavouriteBlocked\n  hashtag\n  synonyms\n  startDate {\n    ...DateFragment\n  }\n  endDate {\n    ...DateFragment\n  }\n  season\n  seasonYear\n  siteUrl\n  updatedAt\n  autoCreateForumThread\n  isRecommendationBlocked\n  isReviewBlocked\n  modNotes\n}\nfragment MediaListFragment on MediaList {\n  id\n  mediaId\n  userId\n  status\n  score\n  progress\n  progressVolumes\n  repeat\n  priority\n  private\n  notes\n  hiddenFromStatusLists\n  customLists\n  advancedScores\n  startedAt {\n    ...DateFragment\n  }\n  completedAt {\n    ...DateFragment\n  }\n  updatedAt\n  createdAt\n  media {\n    ...MediaCoreFragment\n  }\n}`);\nexport const GetUserReviewsDocument = new TypedDocumentString(`\n    query GetUserReviews($userId: Int, $page: Int = 1, $perPage: Int = 10) {\n  Page(page: $page, perPage: $perPage) {\n    pageInfo {\n      hasNextPage\n      currentPage\n      total\n    }\n    reviews(userId: $userId) {\n      ...ReviewFragment\n    }\n  }\n}\n    fragment ReviewFragment on Review {\n  id\n  userId\n  mediaId\n  mediaType\n  summary\n  body\n  rating\n  ratingAmount\n  score\n  private\n  siteUrl\n  createdAt\n  updatedAt\n  userRating\n  user {\n    id\n    name\n  }\n  media {\n    id\n    title {\n      userPreferred\n    }\n  }\n}`);\nexport const GetUserStatisticsDocument = new TypedDocumentString(`\n    query GetUserStatistics($id: Int) {\n  User(id: $id) {\n    statistics {\n      anime {\n        count\n        meanScore\n        minutesWatched\n        episodesWatched\n        standardDeviation\n        genres(limit: 10, sort: COUNT_DESC) {\n          genre\n          count\n          meanScore\n          minutesWatched\n        }\n        tags(limit: 10, sort: COUNT_DESC) {\n          tag {\n            id\n            name\n          }\n          count\n          meanScore\n          minutesWatched\n        }\n        statuses {\n          status\n          count\n          meanScore\n          minutesWatched\n        }\n        formats {\n          format\n          count\n          meanScore\n          minutesWatched\n        }\n        releaseYears {\n          releaseYear\n          count\n          meanScore\n          minutesWatched\n        }\n      }\n      manga {\n        count\n        meanScore\n        chaptersRead\n        volumesRead\n        standardDeviation\n        genres(limit: 10, sort: COUNT_DESC) {\n          genre\n          count\n          meanScore\n          chaptersRead\n        }\n        tags(limit: 10, sort: COUNT_DESC) {\n          tag {\n            id\n            name\n          }\n          count\n          meanScore\n          chaptersRead\n        }\n        statuses {\n          status\n          count\n          meanScore\n          chaptersRead\n        }\n        formats {\n          format\n          count\n          meanScore\n          chaptersRead\n        }\n      }\n    }\n  }\n}\n    `);\nexport const GetUserStatisticsByUsernameDocument = new TypedDocumentString(`\n    query GetUserStatisticsByUsername($userName: String) {\n  User(name: $userName) {\n    statistics {\n      anime {\n        count\n        meanScore\n        minutesWatched\n        episodesWatched\n        standardDeviation\n        genres(limit: 10, sort: COUNT_DESC) {\n          genre\n          count\n          meanScore\n          minutesWatched\n        }\n        tags(limit: 10, sort: COUNT_DESC) {\n          tag {\n            id\n            name\n          }\n          count\n          meanScore\n          minutesWatched\n        }\n        statuses {\n          status\n          count\n          meanScore\n          minutesWatched\n        }\n        formats {\n          format\n          count\n          meanScore\n          minutesWatched\n        }\n        releaseYears {\n          releaseYear\n          count\n          meanScore\n          minutesWatched\n        }\n      }\n      manga {\n        count\n        meanScore\n        chaptersRead\n        volumesRead\n        standardDeviation\n        genres(limit: 10, sort: COUNT_DESC) {\n          genre\n          count\n          meanScore\n          chaptersRead\n        }\n        tags(limit: 10, sort: COUNT_DESC) {\n          tag {\n            id\n            name\n          }\n          count\n          meanScore\n          chaptersRead\n        }\n        statuses {\n          status\n          count\n          meanScore\n          chaptersRead\n        }\n        formats {\n          format\n          count\n          meanScore\n          chaptersRead\n        }\n      }\n    }\n  }\n}\n    `);\nexport const GetViewerDocument = new TypedDocumentString(`\n    query GetViewer {\n  Viewer {\n    ...UserFragment\n  }\n}\n    fragment UserAvatarFragment on UserAvatar {\n  large\n  medium\n}\nfragment UserOptionsFragment on UserOptions {\n  titleLanguage\n  displayAdultContent\n  airingNotifications\n  profileColor\n  notificationOptions {\n    type\n    enabled\n  }\n  timezone\n  activityMergeTime\n  staffNameLanguage\n  restrictMessagesToFollowing\n  disabledListActivity {\n    disabled\n    type\n  }\n}\nfragment UserMediaListOptionsFragment on MediaListOptions {\n  scoreFormat\n  rowOrder\n  useLegacyLists\n  animeList {\n    sectionOrder\n    splitCompletedSectionByFormat\n    customLists\n    advancedScoring\n    advancedScoringEnabled\n  }\n  mangaList {\n    sectionOrder\n    splitCompletedSectionByFormat\n    customLists\n    advancedScoring\n    advancedScoringEnabled\n  }\n  sharedTheme\n  sharedThemeEnabled\n}\nfragment UserFavouritesFragment on Favourites {\n  anime {\n    nodes {\n      id\n      title {\n        romaji\n      }\n    }\n  }\n  manga {\n    nodes {\n      id\n      title {\n        romaji\n      }\n    }\n  }\n  characters {\n    nodes {\n      id\n      name {\n        full\n      }\n    }\n  }\n  staff {\n    nodes {\n      id\n      name {\n        full\n      }\n    }\n  }\n  studios {\n    nodes {\n      id\n      name\n    }\n  }\n}\nfragment UserStatisticsFragment on UserStatisticTypes {\n  anime {\n    count\n    meanScore\n    standardDeviation\n    minutesWatched\n    episodesWatched\n    chaptersRead\n    volumesRead\n    scores {\n      score\n      count\n      meanScore\n      minutesWatched\n    }\n    lengths {\n      length\n      count\n      meanScore\n      minutesWatched\n    }\n    formats {\n      format\n      count\n      meanScore\n      minutesWatched\n    }\n    statuses {\n      status\n      count\n      meanScore\n      minutesWatched\n    }\n    releaseYears {\n      releaseYear\n      count\n      meanScore\n      minutesWatched\n    }\n    startYears {\n      startYear\n      count\n      meanScore\n      minutesWatched\n    }\n    genres {\n      genre\n      count\n      meanScore\n      minutesWatched\n    }\n    tags {\n      tag {\n        name\n      }\n      count\n      meanScore\n      minutesWatched\n    }\n    countries {\n      country\n      count\n      meanScore\n      minutesWatched\n    }\n    voiceActors {\n      count\n      meanScore\n      minutesWatched\n      voiceActor {\n        id\n        name {\n          full\n        }\n      }\n      characterIds\n      mediaIds\n    }\n    staff {\n      count\n      meanScore\n      minutesWatched\n      staff {\n        id\n        name {\n          full\n        }\n      }\n      mediaIds\n    }\n    studios {\n      count\n      meanScore\n      minutesWatched\n      studio {\n        id\n        name\n      }\n      mediaIds\n    }\n  }\n  manga {\n    count\n    meanScore\n    standardDeviation\n    chaptersRead\n    volumesRead\n    scores {\n      score\n      count\n      meanScore\n      chaptersRead\n    }\n    lengths {\n      length\n      count\n      meanScore\n      chaptersRead\n    }\n    formats {\n      format\n      count\n      meanScore\n      chaptersRead\n    }\n    statuses {\n      status\n      count\n      meanScore\n      chaptersRead\n    }\n    releaseYears {\n      releaseYear\n      count\n      meanScore\n      chaptersRead\n    }\n    startYears {\n      startYear\n      count\n      meanScore\n      chaptersRead\n    }\n    genres {\n      genre\n      count\n      meanScore\n      chaptersRead\n    }\n    tags {\n      tag {\n        name\n      }\n      count\n      meanScore\n      chaptersRead\n    }\n    countries {\n      country\n      count\n      meanScore\n      chaptersRead\n    }\n    staff {\n      count\n      meanScore\n      chaptersRead\n      staff {\n        id\n        name {\n          full\n        }\n      }\n      mediaIds\n    }\n    studios {\n      count\n      meanScore\n      chaptersRead\n      studio {\n        id\n        name\n      }\n      mediaIds\n    }\n  }\n}\nfragment UserBasicFragment on User {\n  id\n  name\n  avatar {\n    ...UserAvatarFragment\n  }\n  about\n  bannerImage\n  donatorTier\n  donatorBadge\n  isFollowing\n  isFollower\n  isBlocked\n  createdAt\n  updatedAt\n  unreadNotificationCount\n  bans\n  moderatorRoles\n  moderatorStatus\n  options {\n    ...UserOptionsFragment\n  }\n  mediaListOptions {\n    ...UserMediaListOptionsFragment\n  }\n  favourites {\n    ...UserFavouritesFragment\n  }\n  statistics {\n    ...UserStatisticsFragment\n  }\n  siteUrl\n  stats {\n    watchedTime\n    chaptersRead\n  }\n  previousNames {\n    name\n    createdAt\n    updatedAt\n  }\n}\nfragment UserFragment on User {\n  ...UserBasicFragment\n}`);\nexport const GetViewerStatisticsDocument = new TypedDocumentString(`\n    query GetViewerStatistics {\n  Viewer {\n    statistics {\n      ...UserStatisticsFragment\n    }\n  }\n}\n    fragment UserStatisticsFragment on UserStatisticTypes {\n  anime {\n    count\n    meanScore\n    standardDeviation\n    minutesWatched\n    episodesWatched\n    chaptersRead\n    volumesRead\n    scores {\n      score\n      count\n      meanScore\n      minutesWatched\n    }\n    lengths {\n      length\n      count\n      meanScore\n      minutesWatched\n    }\n    formats {\n      format\n      count\n      meanScore\n      minutesWatched\n    }\n    statuses {\n      status\n      count\n      meanScore\n      minutesWatched\n    }\n    releaseYears {\n      releaseYear\n      count\n      meanScore\n      minutesWatched\n    }\n    startYears {\n      startYear\n      count\n      meanScore\n      minutesWatched\n    }\n    genres {\n      genre\n      count\n      meanScore\n      minutesWatched\n    }\n    tags {\n      tag {\n        name\n      }\n      count\n      meanScore\n      minutesWatched\n    }\n    countries {\n      country\n      count\n      meanScore\n      minutesWatched\n    }\n    voiceActors {\n      count\n      meanScore\n      minutesWatched\n      voiceActor {\n        id\n        name {\n          full\n        }\n      }\n      characterIds\n      mediaIds\n    }\n    staff {\n      count\n      meanScore\n      minutesWatched\n      staff {\n        id\n        name {\n          full\n        }\n      }\n      mediaIds\n    }\n    studios {\n      count\n      meanScore\n      minutesWatched\n      studio {\n        id\n        name\n      }\n      mediaIds\n    }\n  }\n  manga {\n    count\n    meanScore\n    standardDeviation\n    chaptersRead\n    volumesRead\n    scores {\n      score\n      count\n      meanScore\n      chaptersRead\n    }\n    lengths {\n      length\n      count\n      meanScore\n      chaptersRead\n    }\n    formats {\n      format\n      count\n      meanScore\n      chaptersRead\n    }\n    statuses {\n      status\n      count\n      meanScore\n      chaptersRead\n    }\n    releaseYears {\n      releaseYear\n      count\n      meanScore\n      chaptersRead\n    }\n    startYears {\n      startYear\n      count\n      meanScore\n      chaptersRead\n    }\n    genres {\n      genre\n      count\n      meanScore\n      chaptersRead\n    }\n    tags {\n      tag {\n        name\n      }\n      count\n      meanScore\n      chaptersRead\n    }\n    countries {\n      country\n      count\n      meanScore\n      chaptersRead\n    }\n    staff {\n      count\n      meanScore\n      chaptersRead\n      staff {\n        id\n        name {\n          full\n        }\n      }\n      mediaIds\n    }\n    studios {\n      count\n      meanScore\n      chaptersRead\n      studio {\n        id\n        name\n      }\n      mediaIds\n    }\n  }\n}`);\nexport type Requester<C = {}> = <R, V>(doc: string, vars?: V, options?: C) => Promise<R> | AsyncIterable<R>\nexport function getSdk<C>(requester: Requester<C>) {\n  return {\n    GetAnimeBrowse(variables?: GetAnimeBrowseQueryVariables, options?: C): Promise<GetAnimeBrowseQuery> {\n      return requester<GetAnimeBrowseQuery, GetAnimeBrowseQueryVariables>(GetAnimeBrowseDocument, variables, options) as Promise<GetAnimeBrowseQuery>;\n    },\n    GetAnimeById(variables: GetAnimeByIdQueryVariables, options?: C): Promise<GetAnimeByIdQuery> {\n      return requester<GetAnimeByIdQuery, GetAnimeByIdQueryVariables>(GetAnimeByIdDocument, variables, options) as Promise<GetAnimeByIdQuery>;\n    },\n    GetAnimeByTitle(variables: GetAnimeByTitleQueryVariables, options?: C): Promise<GetAnimeByTitleQuery> {\n      return requester<GetAnimeByTitleQuery, GetAnimeByTitleQueryVariables>(GetAnimeByTitleDocument, variables, options) as Promise<GetAnimeByTitleQuery>;\n    },\n    GetAnimeCharacters(variables?: GetAnimeCharactersQueryVariables, options?: C): Promise<GetAnimeCharactersQuery> {\n      return requester<GetAnimeCharactersQuery, GetAnimeCharactersQueryVariables>(GetAnimeCharactersDocument, variables, options) as Promise<GetAnimeCharactersQuery>;\n    },\n    GetAnimeListByGenre(variables: GetAnimeListByGenreQueryVariables, options?: C): Promise<GetAnimeListByGenreQuery> {\n      return requester<GetAnimeListByGenreQuery, GetAnimeListByGenreQueryVariables>(GetAnimeListByGenreDocument, variables, options) as Promise<GetAnimeListByGenreQuery>;\n    },\n    GetAnimePopular(variables?: GetAnimePopularQueryVariables, options?: C): Promise<GetAnimePopularQuery> {\n      return requester<GetAnimePopularQuery, GetAnimePopularQueryVariables>(GetAnimePopularDocument, variables, options) as Promise<GetAnimePopularQuery>;\n    },\n    GetAnimeRecommendations(variables?: GetAnimeRecommendationsQueryVariables, options?: C): Promise<GetAnimeRecommendationsQuery> {\n      return requester<GetAnimeRecommendationsQuery, GetAnimeRecommendationsQueryVariables>(GetAnimeRecommendationsDocument, variables, options) as Promise<GetAnimeRecommendationsQuery>;\n    },\n    GetAnimeRelations(variables?: GetAnimeRelationsQueryVariables, options?: C): Promise<GetAnimeRelationsQuery> {\n      return requester<GetAnimeRelationsQuery, GetAnimeRelationsQueryVariables>(GetAnimeRelationsDocument, variables, options) as Promise<GetAnimeRelationsQuery>;\n    },\n    GetAnimeStaff(variables?: GetAnimeStaffQueryVariables, options?: C): Promise<GetAnimeStaffQuery> {\n      return requester<GetAnimeStaffQuery, GetAnimeStaffQueryVariables>(GetAnimeStaffDocument, variables, options) as Promise<GetAnimeStaffQuery>;\n    },\n    GetAnimeTrending(variables?: GetAnimeTrendingQueryVariables, options?: C): Promise<GetAnimeTrendingQuery> {\n      return requester<GetAnimeTrendingQuery, GetAnimeTrendingQueryVariables>(GetAnimeTrendingDocument, variables, options) as Promise<GetAnimeTrendingQuery>;\n    },\n    GetSeasonalAnime(variables?: GetSeasonalAnimeQueryVariables, options?: C): Promise<GetSeasonalAnimeQuery> {\n      return requester<GetSeasonalAnimeQuery, GetSeasonalAnimeQueryVariables>(GetSeasonalAnimeDocument, variables, options) as Promise<GetSeasonalAnimeQuery>;\n    },\n    SearchAnime(variables?: SearchAnimeQueryVariables, options?: C): Promise<SearchAnimeQuery> {\n      return requester<SearchAnimeQuery, SearchAnimeQueryVariables>(SearchAnimeDocument, variables, options) as Promise<SearchAnimeQuery>;\n    },\n    ToggleFavoriteAnime(variables: ToggleFavoriteAnimeMutationVariables, options?: C): Promise<ToggleFavoriteAnimeMutation> {\n      return requester<ToggleFavoriteAnimeMutation, ToggleFavoriteAnimeMutationVariables>(ToggleFavoriteAnimeDocument, variables, options) as Promise<ToggleFavoriteAnimeMutation>;\n    },\n    CharactersBirthdayToday(variables?: CharactersBirthdayTodayQueryVariables, options?: C): Promise<CharactersBirthdayTodayQuery> {\n      return requester<CharactersBirthdayTodayQuery, CharactersBirthdayTodayQueryVariables>(CharactersBirthdayTodayDocument, variables, options) as Promise<CharactersBirthdayTodayQuery>;\n    },\n    GetCharacterById(variables: GetCharacterByIdQueryVariables, options?: C): Promise<GetCharacterByIdQuery> {\n      return requester<GetCharacterByIdQuery, GetCharacterByIdQueryVariables>(GetCharacterByIdDocument, variables, options) as Promise<GetCharacterByIdQuery>;\n    },\n    ToggleFavoriteCharacter(variables: ToggleFavoriteCharacterMutationVariables, options?: C): Promise<ToggleFavoriteCharacterMutation> {\n      return requester<ToggleFavoriteCharacterMutation, ToggleFavoriteCharacterMutationVariables>(ToggleFavoriteCharacterDocument, variables, options) as Promise<ToggleFavoriteCharacterMutation>;\n    },\n    GetMangaBrowse(variables?: GetMangaBrowseQueryVariables, options?: C): Promise<GetMangaBrowseQuery> {\n      return requester<GetMangaBrowseQuery, GetMangaBrowseQueryVariables>(GetMangaBrowseDocument, variables, options) as Promise<GetMangaBrowseQuery>;\n    },\n    GetMangaById(variables: GetMangaByIdQueryVariables, options?: C): Promise<GetMangaByIdQuery> {\n      return requester<GetMangaByIdQuery, GetMangaByIdQueryVariables>(GetMangaByIdDocument, variables, options) as Promise<GetMangaByIdQuery>;\n    },\n    GetMangaByTitle(variables: GetMangaByTitleQueryVariables, options?: C): Promise<GetMangaByTitleQuery> {\n      return requester<GetMangaByTitleQuery, GetMangaByTitleQueryVariables>(GetMangaByTitleDocument, variables, options) as Promise<GetMangaByTitleQuery>;\n    },\n    GetMangaCharacters(variables?: GetMangaCharactersQueryVariables, options?: C): Promise<GetMangaCharactersQuery> {\n      return requester<GetMangaCharactersQuery, GetMangaCharactersQueryVariables>(GetMangaCharactersDocument, variables, options) as Promise<GetMangaCharactersQuery>;\n    },\n    GetMangaListByGenre(variables?: GetMangaListByGenreQueryVariables, options?: C): Promise<GetMangaListByGenreQuery> {\n      return requester<GetMangaListByGenreQuery, GetMangaListByGenreQueryVariables>(GetMangaListByGenreDocument, variables, options) as Promise<GetMangaListByGenreQuery>;\n    },\n    GetMangaPopular(variables?: GetMangaPopularQueryVariables, options?: C): Promise<GetMangaPopularQuery> {\n      return requester<GetMangaPopularQuery, GetMangaPopularQueryVariables>(GetMangaPopularDocument, variables, options) as Promise<GetMangaPopularQuery>;\n    },\n    GetMangaRecommendations(variables?: GetMangaRecommendationsQueryVariables, options?: C): Promise<GetMangaRecommendationsQuery> {\n      return requester<GetMangaRecommendationsQuery, GetMangaRecommendationsQueryVariables>(GetMangaRecommendationsDocument, variables, options) as Promise<GetMangaRecommendationsQuery>;\n    },\n    GetMangaRelations(variables?: GetMangaRelationsQueryVariables, options?: C): Promise<GetMangaRelationsQuery> {\n      return requester<GetMangaRelationsQuery, GetMangaRelationsQueryVariables>(GetMangaRelationsDocument, variables, options) as Promise<GetMangaRelationsQuery>;\n    },\n    GetMangaStaff(variables?: GetMangaStaffQueryVariables, options?: C): Promise<GetMangaStaffQuery> {\n      return requester<GetMangaStaffQuery, GetMangaStaffQueryVariables>(GetMangaStaffDocument, variables, options) as Promise<GetMangaStaffQuery>;\n    },\n    GetMangaTrending(variables?: GetMangaTrendingQueryVariables, options?: C): Promise<GetMangaTrendingQuery> {\n      return requester<GetMangaTrendingQuery, GetMangaTrendingQueryVariables>(GetMangaTrendingDocument, variables, options) as Promise<GetMangaTrendingQuery>;\n    },\n    SearchManga(variables?: SearchMangaQueryVariables, options?: C): Promise<SearchMangaQuery> {\n      return requester<SearchMangaQuery, SearchMangaQueryVariables>(SearchMangaDocument, variables, options) as Promise<SearchMangaQuery>;\n    },\n    ToggleFavoriteManga(variables: ToggleFavoriteMangaMutationVariables, options?: C): Promise<ToggleFavoriteMangaMutation> {\n      return requester<ToggleFavoriteMangaMutation, ToggleFavoriteMangaMutationVariables>(ToggleFavoriteMangaDocument, variables, options) as Promise<ToggleFavoriteMangaMutation>;\n    },\n    DeleteReview(variables?: DeleteReviewMutationVariables, options?: C): Promise<DeleteReviewMutation> {\n      return requester<DeleteReviewMutation, DeleteReviewMutationVariables>(DeleteReviewDocument, variables, options) as Promise<DeleteReviewMutation>;\n    },\n    GetAiringSchedule(variables: GetAiringScheduleQueryVariables, options?: C): Promise<GetAiringScheduleQuery> {\n      return requester<GetAiringScheduleQuery, GetAiringScheduleQueryVariables>(GetAiringScheduleDocument, variables, options) as Promise<GetAiringScheduleQuery>;\n    },\n    GetAiringSchedulesByMedia(variables?: GetAiringSchedulesByMediaQueryVariables, options?: C): Promise<GetAiringSchedulesByMediaQuery> {\n      return requester<GetAiringSchedulesByMediaQuery, GetAiringSchedulesByMediaQueryVariables>(GetAiringSchedulesByMediaDocument, variables, options) as Promise<GetAiringSchedulesByMediaQuery>;\n    },\n    GetGenres(variables?: GetGenresQueryVariables, options?: C): Promise<GetGenresQuery> {\n      return requester<GetGenresQuery, GetGenresQueryVariables>(GetGenresDocument, variables, options) as Promise<GetGenresQuery>;\n    },\n    GetMediaById(variables: GetMediaByIdQueryVariables, options?: C): Promise<GetMediaByIdQuery> {\n      return requester<GetMediaByIdQuery, GetMediaByIdQueryVariables>(GetMediaByIdDocument, variables, options) as Promise<GetMediaByIdQuery>;\n    },\n    GetMediaReviews(variables?: GetMediaReviewsQueryVariables, options?: C): Promise<GetMediaReviewsQuery> {\n      return requester<GetMediaReviewsQuery, GetMediaReviewsQueryVariables>(GetMediaReviewsDocument, variables, options) as Promise<GetMediaReviewsQuery>;\n    },\n    GetMediaTags(variables?: GetMediaTagsQueryVariables, options?: C): Promise<GetMediaTagsQuery> {\n      return requester<GetMediaTagsQuery, GetMediaTagsQueryVariables>(GetMediaTagsDocument, variables, options) as Promise<GetMediaTagsQuery>;\n    },\n    GetRecommendationsPage(variables?: GetRecommendationsPageQueryVariables, options?: C): Promise<GetRecommendationsPageQuery> {\n      return requester<GetRecommendationsPageQuery, GetRecommendationsPageQueryVariables>(GetRecommendationsPageDocument, variables, options) as Promise<GetRecommendationsPageQuery>;\n    },\n    RateReview(variables?: RateReviewMutationVariables, options?: C): Promise<RateReviewMutation> {\n      return requester<RateReviewMutation, RateReviewMutationVariables>(RateReviewDocument, variables, options) as Promise<RateReviewMutation>;\n    },\n    SaveRecommendation(variables?: SaveRecommendationMutationVariables, options?: C): Promise<SaveRecommendationMutation> {\n      return requester<SaveRecommendationMutation, SaveRecommendationMutationVariables>(SaveRecommendationDocument, variables, options) as Promise<SaveRecommendationMutation>;\n    },\n    SaveReview(variables?: SaveReviewMutationVariables, options?: C): Promise<SaveReviewMutation> {\n      return requester<SaveReviewMutation, SaveReviewMutationVariables>(SaveReviewDocument, variables, options) as Promise<SaveReviewMutation>;\n    },\n    DeleteCustomList(variables?: DeleteCustomListMutationVariables, options?: C): Promise<DeleteCustomListMutation> {\n      return requester<DeleteCustomListMutation, DeleteCustomListMutationVariables>(DeleteCustomListDocument, variables, options) as Promise<DeleteCustomListMutation>;\n    },\n    DeleteMediaListEntry(variables: DeleteMediaListEntryMutationVariables, options?: C): Promise<DeleteMediaListEntryMutation> {\n      return requester<DeleteMediaListEntryMutation, DeleteMediaListEntryMutationVariables>(DeleteMediaListEntryDocument, variables, options) as Promise<DeleteMediaListEntryMutation>;\n    },\n    GetMediaList(variables?: GetMediaListQueryVariables, options?: C): Promise<GetMediaListQuery> {\n      return requester<GetMediaListQuery, GetMediaListQueryVariables>(GetMediaListDocument, variables, options) as Promise<GetMediaListQuery>;\n    },\n    GetMediaListByUser(variables?: GetMediaListByUserQueryVariables, options?: C): Promise<GetMediaListByUserQuery> {\n      return requester<GetMediaListByUserQuery, GetMediaListByUserQueryVariables>(GetMediaListByUserDocument, variables, options) as Promise<GetMediaListByUserQuery>;\n    },\n    GetMediaListByUserByUsername(variables?: GetMediaListByUserByUsernameQueryVariables, options?: C): Promise<GetMediaListByUserByUsernameQuery> {\n      return requester<GetMediaListByUserByUsernameQuery, GetMediaListByUserByUsernameQueryVariables>(GetMediaListByUserByUsernameDocument, variables, options) as Promise<GetMediaListByUserByUsernameQuery>;\n    },\n    SaveMediaListEntry(variables?: SaveMediaListEntryMutationVariables, options?: C): Promise<SaveMediaListEntryMutation> {\n      return requester<SaveMediaListEntryMutation, SaveMediaListEntryMutationVariables>(SaveMediaListEntryDocument, variables, options) as Promise<SaveMediaListEntryMutation>;\n    },\n    UpdateMediaListEntries(variables?: UpdateMediaListEntriesMutationVariables, options?: C): Promise<UpdateMediaListEntriesMutation> {\n      return requester<UpdateMediaListEntriesMutation, UpdateMediaListEntriesMutationVariables>(UpdateMediaListEntriesDocument, variables, options) as Promise<UpdateMediaListEntriesMutation>;\n    },\n    DeleteActivity(variables?: DeleteActivityMutationVariables, options?: C): Promise<DeleteActivityMutation> {\n      return requester<DeleteActivityMutation, DeleteActivityMutationVariables>(DeleteActivityDocument, variables, options) as Promise<DeleteActivityMutation>;\n    },\n    DeleteActivityReply(variables?: DeleteActivityReplyMutationVariables, options?: C): Promise<DeleteActivityReplyMutation> {\n      return requester<DeleteActivityReplyMutation, DeleteActivityReplyMutationVariables>(DeleteActivityReplyDocument, variables, options) as Promise<DeleteActivityReplyMutation>;\n    },\n    DeleteThread(variables?: DeleteThreadMutationVariables, options?: C): Promise<DeleteThreadMutation> {\n      return requester<DeleteThreadMutation, DeleteThreadMutationVariables>(DeleteThreadDocument, variables, options) as Promise<DeleteThreadMutation>;\n    },\n    DeleteThreadComment(variables?: DeleteThreadCommentMutationVariables, options?: C): Promise<DeleteThreadCommentMutation> {\n      return requester<DeleteThreadCommentMutation, DeleteThreadCommentMutationVariables>(DeleteThreadCommentDocument, variables, options) as Promise<DeleteThreadCommentMutation>;\n    },\n    GetActivities(variables?: GetActivitiesQueryVariables, options?: C): Promise<GetActivitiesQuery> {\n      return requester<GetActivitiesQuery, GetActivitiesQueryVariables>(GetActivitiesDocument, variables, options) as Promise<GetActivitiesQuery>;\n    },\n    GetActivity(variables: GetActivityQueryVariables, options?: C): Promise<GetActivityQuery> {\n      return requester<GetActivityQuery, GetActivityQueryVariables>(GetActivityDocument, variables, options) as Promise<GetActivityQuery>;\n    },\n    GetActivityReplies(variables?: GetActivityRepliesQueryVariables, options?: C): Promise<GetActivityRepliesQuery> {\n      return requester<GetActivityRepliesQuery, GetActivityRepliesQueryVariables>(GetActivityRepliesDocument, variables, options) as Promise<GetActivityRepliesQuery>;\n    },\n    GetActivityReply(variables: GetActivityReplyQueryVariables, options?: C): Promise<GetActivityReplyQuery> {\n      return requester<GetActivityReplyQuery, GetActivityReplyQueryVariables>(GetActivityReplyDocument, variables, options) as Promise<GetActivityReplyQuery>;\n    },\n    GetFollowers(variables: GetFollowersQueryVariables, options?: C): Promise<GetFollowersQuery> {\n      return requester<GetFollowersQuery, GetFollowersQueryVariables>(GetFollowersDocument, variables, options) as Promise<GetFollowersQuery>;\n    },\n    GetFollowing(variables: GetFollowingQueryVariables, options?: C): Promise<GetFollowingQuery> {\n      return requester<GetFollowingQuery, GetFollowingQueryVariables>(GetFollowingDocument, variables, options) as Promise<GetFollowingQuery>;\n    },\n    GetMarkdown(variables: GetMarkdownQueryVariables, options?: C): Promise<GetMarkdownQuery> {\n      return requester<GetMarkdownQuery, GetMarkdownQueryVariables>(GetMarkdownDocument, variables, options) as Promise<GetMarkdownQuery>;\n    },\n    GetNotifications(variables?: GetNotificationsQueryVariables, options?: C): Promise<GetNotificationsQuery> {\n      return requester<GetNotificationsQuery, GetNotificationsQueryVariables>(GetNotificationsDocument, variables, options) as Promise<GetNotificationsQuery>;\n    },\n    GetSiteStatistics(variables?: GetSiteStatisticsQueryVariables, options?: C): Promise<GetSiteStatisticsQuery> {\n      return requester<GetSiteStatisticsQuery, GetSiteStatisticsQueryVariables>(GetSiteStatisticsDocument, variables, options) as Promise<GetSiteStatisticsQuery>;\n    },\n    GetThread(variables: GetThreadQueryVariables, options?: C): Promise<GetThreadQuery> {\n      return requester<GetThreadQuery, GetThreadQueryVariables>(GetThreadDocument, variables, options) as Promise<GetThreadQuery>;\n    },\n    GetThreadComment(variables: GetThreadCommentQueryVariables, options?: C): Promise<GetThreadCommentQuery> {\n      return requester<GetThreadCommentQuery, GetThreadCommentQueryVariables>(GetThreadCommentDocument, variables, options) as Promise<GetThreadCommentQuery>;\n    },\n    GetThreadComments(variables?: GetThreadCommentsQueryVariables, options?: C): Promise<GetThreadCommentsQuery> {\n      return requester<GetThreadCommentsQuery, GetThreadCommentsQueryVariables>(GetThreadCommentsDocument, variables, options) as Promise<GetThreadCommentsQuery>;\n    },\n    GetThreads(variables?: GetThreadsQueryVariables, options?: C): Promise<GetThreadsQuery> {\n      return requester<GetThreadsQuery, GetThreadsQueryVariables>(GetThreadsDocument, variables, options) as Promise<GetThreadsQuery>;\n    },\n    SaveActivityReply(variables?: SaveActivityReplyMutationVariables, options?: C): Promise<SaveActivityReplyMutation> {\n      return requester<SaveActivityReplyMutation, SaveActivityReplyMutationVariables>(SaveActivityReplyDocument, variables, options) as Promise<SaveActivityReplyMutation>;\n    },\n    SaveMessageActivity(variables?: SaveMessageActivityMutationVariables, options?: C): Promise<SaveMessageActivityMutation> {\n      return requester<SaveMessageActivityMutation, SaveMessageActivityMutationVariables>(SaveMessageActivityDocument, variables, options) as Promise<SaveMessageActivityMutation>;\n    },\n    SaveTextActivity(variables?: SaveTextActivityMutationVariables, options?: C): Promise<SaveTextActivityMutation> {\n      return requester<SaveTextActivityMutation, SaveTextActivityMutationVariables>(SaveTextActivityDocument, variables, options) as Promise<SaveTextActivityMutation>;\n    },\n    SaveThread(variables?: SaveThreadMutationVariables, options?: C): Promise<SaveThreadMutation> {\n      return requester<SaveThreadMutation, SaveThreadMutationVariables>(SaveThreadDocument, variables, options) as Promise<SaveThreadMutation>;\n    },\n    SaveThreadComment(variables?: SaveThreadCommentMutationVariables, options?: C): Promise<SaveThreadCommentMutation> {\n      return requester<SaveThreadCommentMutation, SaveThreadCommentMutationVariables>(SaveThreadCommentDocument, variables, options) as Promise<SaveThreadCommentMutation>;\n    },\n    ToggleActivityPin(variables?: ToggleActivityPinMutationVariables, options?: C): Promise<ToggleActivityPinMutation> {\n      return requester<ToggleActivityPinMutation, ToggleActivityPinMutationVariables>(ToggleActivityPinDocument, variables, options) as Promise<ToggleActivityPinMutation>;\n    },\n    ToggleActivitySubscription(variables?: ToggleActivitySubscriptionMutationVariables, options?: C): Promise<ToggleActivitySubscriptionMutation> {\n      return requester<ToggleActivitySubscriptionMutation, ToggleActivitySubscriptionMutationVariables>(ToggleActivitySubscriptionDocument, variables, options) as Promise<ToggleActivitySubscriptionMutation>;\n    },\n    ToggleFollow(variables?: ToggleFollowMutationVariables, options?: C): Promise<ToggleFollowMutation> {\n      return requester<ToggleFollowMutation, ToggleFollowMutationVariables>(ToggleFollowDocument, variables, options) as Promise<ToggleFollowMutation>;\n    },\n    ToggleLike(variables?: ToggleLikeMutationVariables, options?: C): Promise<ToggleLikeMutation> {\n      return requester<ToggleLikeMutation, ToggleLikeMutationVariables>(ToggleLikeDocument, variables, options) as Promise<ToggleLikeMutation>;\n    },\n    ToggleThreadSubscription(variables?: ToggleThreadSubscriptionMutationVariables, options?: C): Promise<ToggleThreadSubscriptionMutation> {\n      return requester<ToggleThreadSubscriptionMutation, ToggleThreadSubscriptionMutationVariables>(ToggleThreadSubscriptionDocument, variables, options) as Promise<ToggleThreadSubscriptionMutation>;\n    },\n    GetStaffById(variables: GetStaffByIdQueryVariables, options?: C): Promise<GetStaffByIdQuery> {\n      return requester<GetStaffByIdQuery, GetStaffByIdQueryVariables>(GetStaffByIdDocument, variables, options) as Promise<GetStaffByIdQuery>;\n    },\n    StaffBirthdayToday(variables?: StaffBirthdayTodayQueryVariables, options?: C): Promise<StaffBirthdayTodayQuery> {\n      return requester<StaffBirthdayTodayQuery, StaffBirthdayTodayQueryVariables>(StaffBirthdayTodayDocument, variables, options) as Promise<StaffBirthdayTodayQuery>;\n    },\n    ToggleFavoriteStaff(variables: ToggleFavoriteStaffMutationVariables, options?: C): Promise<ToggleFavoriteStaffMutation> {\n      return requester<ToggleFavoriteStaffMutation, ToggleFavoriteStaffMutationVariables>(ToggleFavoriteStaffDocument, variables, options) as Promise<ToggleFavoriteStaffMutation>;\n    },\n    GetStudioById(variables: GetStudioByIdQueryVariables, options?: C): Promise<GetStudioByIdQuery> {\n      return requester<GetStudioByIdQuery, GetStudioByIdQueryVariables>(GetStudioByIdDocument, variables, options) as Promise<GetStudioByIdQuery>;\n    },\n    SearchStudio(variables?: SearchStudioQueryVariables, options?: C): Promise<SearchStudioQuery> {\n      return requester<SearchStudioQuery, SearchStudioQueryVariables>(SearchStudioDocument, variables, options) as Promise<SearchStudioQuery>;\n    },\n    ToggleFavoriteStudio(variables: ToggleFavoriteStudioMutationVariables, options?: C): Promise<ToggleFavoriteStudioMutation> {\n      return requester<ToggleFavoriteStudioMutation, ToggleFavoriteStudioMutationVariables>(ToggleFavoriteStudioDocument, variables, options) as Promise<ToggleFavoriteStudioMutation>;\n    },\n    GetUserAnimeList(variables?: GetUserAnimeListQueryVariables, options?: C): Promise<GetUserAnimeListQuery> {\n      return requester<GetUserAnimeListQuery, GetUserAnimeListQueryVariables>(GetUserAnimeListDocument, variables, options) as Promise<GetUserAnimeListQuery>;\n    },\n    GetUserAnimeListByUsername(variables?: GetUserAnimeListByUsernameQueryVariables, options?: C): Promise<GetUserAnimeListByUsernameQuery> {\n      return requester<GetUserAnimeListByUsernameQuery, GetUserAnimeListByUsernameQueryVariables>(GetUserAnimeListByUsernameDocument, variables, options) as Promise<GetUserAnimeListByUsernameQuery>;\n    },\n    GetUserInfo(variables?: GetUserInfoQueryVariables, options?: C): Promise<GetUserInfoQuery> {\n      return requester<GetUserInfoQuery, GetUserInfoQueryVariables>(GetUserInfoDocument, variables, options) as Promise<GetUserInfoQuery>;\n    },\n    GetUserInfoByUsername(variables?: GetUserInfoByUsernameQueryVariables, options?: C): Promise<GetUserInfoByUsernameQuery> {\n      return requester<GetUserInfoByUsernameQuery, GetUserInfoByUsernameQueryVariables>(GetUserInfoByUsernameDocument, variables, options) as Promise<GetUserInfoByUsernameQuery>;\n    },\n    GetUserList(variables?: GetUserListQueryVariables, options?: C): Promise<GetUserListQuery> {\n      return requester<GetUserListQuery, GetUserListQueryVariables>(GetUserListDocument, variables, options) as Promise<GetUserListQuery>;\n    },\n    GetUserMangaList(variables?: GetUserMangaListQueryVariables, options?: C): Promise<GetUserMangaListQuery> {\n      return requester<GetUserMangaListQuery, GetUserMangaListQueryVariables>(GetUserMangaListDocument, variables, options) as Promise<GetUserMangaListQuery>;\n    },\n    GetUserMangaListByUsername(variables?: GetUserMangaListByUsernameQueryVariables, options?: C): Promise<GetUserMangaListByUsernameQuery> {\n      return requester<GetUserMangaListByUsernameQuery, GetUserMangaListByUsernameQueryVariables>(GetUserMangaListByUsernameDocument, variables, options) as Promise<GetUserMangaListByUsernameQuery>;\n    },\n    GetUserReviews(variables?: GetUserReviewsQueryVariables, options?: C): Promise<GetUserReviewsQuery> {\n      return requester<GetUserReviewsQuery, GetUserReviewsQueryVariables>(GetUserReviewsDocument, variables, options) as Promise<GetUserReviewsQuery>;\n    },\n    GetUserStatistics(variables?: GetUserStatisticsQueryVariables, options?: C): Promise<GetUserStatisticsQuery> {\n      return requester<GetUserStatisticsQuery, GetUserStatisticsQueryVariables>(GetUserStatisticsDocument, variables, options) as Promise<GetUserStatisticsQuery>;\n    },\n    GetUserStatisticsByUsername(variables?: GetUserStatisticsByUsernameQueryVariables, options?: C): Promise<GetUserStatisticsByUsernameQuery> {\n      return requester<GetUserStatisticsByUsernameQuery, GetUserStatisticsByUsernameQueryVariables>(GetUserStatisticsByUsernameDocument, variables, options) as Promise<GetUserStatisticsByUsernameQuery>;\n    },\n    GetViewer(variables?: GetViewerQueryVariables, options?: C): Promise<GetViewerQuery> {\n      return requester<GetViewerQuery, GetViewerQueryVariables>(GetViewerDocument, variables, options) as Promise<GetViewerQuery>;\n    },\n    GetViewerStatistics(variables?: GetViewerStatisticsQueryVariables, options?: C): Promise<GetViewerStatisticsQuery> {\n      return requester<GetViewerStatisticsQuery, GetViewerStatisticsQueryVariables>(GetViewerStatisticsDocument, variables, options) as Promise<GetViewerStatisticsQuery>;\n    }\n  };\n}\nexport type Sdk = ReturnType<typeof getSdk>;","import {\n\ttype BaseHttpClient,\n\ttype ClientConfig,\n\tcreateClient as createApiCoreClient,\n\tcreateAuthPlugin,\n\tcreateGraphQLRequester,\n\tdedupeGraphQLFragmentDefinitions,\n\ttype HeaderInput,\n\ttype MaybePromise,\n\tmergeHeaders,\n} from \"@api-wrappers/api-core\";\nimport { type GraphQLClient, getSdk } from \"../__generated__/anilist-sdk\";\n\nconst ANILIST_API_URL = \"https://graphql.anilist.co\";\nconst MAX_ATTEMPTS = 4;\n\nexport type AnilistToken =\n\t| string\n\t| (() => MaybePromise<string | null | undefined>);\n\nexport interface AnilistOptions {\n\t/** Static token or a token provider evaluated before every request. */\n\ttoken?: AnilistToken;\n\t/** Optional api-core overrides. AniList defaults are applied when omitted. */\n\tcore?: Omit<ClientConfig, \"baseUrl\" | \"defaultHeaders\"> & {\n\t\tbaseUrl?: string;\n\t\tdefaultHeaders?: HeaderInput;\n\t};\n\t/** Existing api-core client to use instead of constructing one. */\n\thttpClient?: BaseHttpClient;\n}\n\nexport interface AnilistRequestOptions {\n\trequestHeaders?: Record<string, string>;\n\tsignal?: RequestInit[\"signal\"];\n\ttimeoutMs?: number;\n\tcacheKey?: string;\n\ttags?: string[];\n\toperationName?: string;\n}\n\nexport type AnilistClientInput = string | AnilistOptions | undefined;\n\nexport interface AnilistClientBundle {\n\thttpClient: BaseHttpClient;\n\tgraphQLClient: GraphQLClient;\n\tsdkClient: ReturnType<typeof createSdkClient>;\n}\n\nexport const createHttpClient = (\n\tinput?: AnilistClientInput,\n): BaseHttpClient => {\n\tconst options = normalizeOptions(input);\n\tif (options.httpClient) return options.httpClient;\n\n\tconst core = options.core ?? {};\n\tconst plugins = [...(core.plugins ?? [])];\n\tif (options.token) plugins.push(createAuthPlugin(options.token));\n\n\treturn createApiCoreClient({\n\t\t...core,\n\t\tbaseUrl: core.baseUrl ?? ANILIST_API_URL,\n\t\tdefaultHeaders: mergeHeaders(\n\t\t\t{ \"content-type\": \"application/json\" },\n\t\t\tcore.defaultHeaders,\n\t\t),\n\t\tplugins,\n\t\tretry: core.retry ?? {\n\t\t\tmaxAttempts: MAX_ATTEMPTS,\n\t\t\tdelayMs: 1000,\n\t\t\tretriableStatusCodes: [429],\n\t\t},\n\t});\n};\n\nexport const createGraphQLClient = (\n\tinput?: AnilistClientInput,\n): GraphQLClient => {\n\treturn createGraphQLClientFromHttpClient(createHttpClient(input));\n};\n\nexport const createClientBundle = (\n\tinput?: AnilistClientInput,\n): AnilistClientBundle => {\n\tconst httpClient = createHttpClient(input);\n\tconst graphQLClient = createGraphQLClientFromHttpClient(httpClient);\n\n\treturn {\n\t\thttpClient,\n\t\tgraphQLClient,\n\t\tsdkClient: createSdkClient(graphQLClient),\n\t};\n};\n\nexport const createClient = (input?: AnilistClientInput) => {\n\treturn createSdkClient(createGraphQLClient(input));\n};\n\nexport const createSdkClient = (client: GraphQLClient) => {\n\treturn getSdk<AnilistRequestOptions>((document, variables, options) =>\n\t\tclient.request({\n\t\t\tdocument: String(document),\n\t\t\tvariables: variables as Record<string, unknown> | undefined,\n\t\t\t...options,\n\t\t}),\n\t);\n};\n\nconst createGraphQLClientFromHttpClient = (\n\thttpClient: Pick<BaseHttpClient, \"graphql\">,\n): GraphQLClient => {\n\tconst requester = createGraphQLRequester(httpClient, {\n\t\ttransformDocument: dedupeGraphQLFragmentDefinitions,\n\t});\n\n\treturn {\n\t\trequest({ signal, document, ...options }) {\n\t\t\treturn requester.request({\n\t\t\t\t...options,\n\t\t\t\tdocument: String(document),\n\t\t\t\tsignal: signal ?? undefined,\n\t\t\t});\n\t\t},\n\t};\n};\n\nconst normalizeOptions = (input?: AnilistClientInput): AnilistOptions => {\n\treturn typeof input === \"string\" ? { token: input } : (input ?? {});\n};\n","import type {\n\tActivityReplyPageSelect,\n\tActivityReplySelect,\n\tAiringSchedulePageSelect,\n\tAiringScheduleSelect,\n\tCharacterPageSelect,\n\tCharacterSelect,\n\tDeletedSelect,\n\tFavouritesSelect,\n\tFollowersPageSelect,\n\tFollowingPageSelect,\n\tMediaListCollectionSelect,\n\tMediaListSelect,\n\tMediaPageSelect,\n\tMediaSelect,\n\tMediaTagSelect,\n\tParsedMarkdownSelect,\n\tRecommendationPageSelect,\n\tRecommendationSelect,\n\tReviewPageSelect,\n\tReviewSelect,\n\tSiteStatisticsSelect,\n\tStaffPageSelect,\n\tStaffSelect,\n\tStudioPageSelect,\n\tStudioSelect,\n\tThreadCommentPageSelect,\n\tThreadCommentSelect,\n\tThreadPageSelect,\n\tThreadSelect,\n\tUserPageSelect,\n\tUserSelect,\n\tUserStatisticTypesSelect,\n} from \"./types\";\n\n// ── Core recursive builder ────────────────────────────────────────────────────\n\n// Converts a selection object into a GraphQL selection set string.\n// Field names come directly from the selection object keys — no string\n// concatenation of user-supplied values. TypeScript types constrain which\n// keys are valid; runtime only rejects empty selections.\nfunction buildSelectionSet(\n\tselect: Record<string, unknown>,\n\tindent: string,\n): string {\n\tconst lines: string[] = [];\n\n\tfor (const [key, value] of Object.entries(select)) {\n\t\tif (!/^[_A-Za-z][_0-9A-Za-z]*$/.test(key)) {\n\t\t\tthrow new TypeError(`Invalid GraphQL field name \"${key}\" in selection.`);\n\t\t}\n\t\tif (value === undefined || value === null) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (value === true) {\n\t\t\tlines.push(`${indent}${key}`);\n\t\t} else if (typeof value === \"object\" && !Array.isArray(value)) {\n\t\t\tconst inner = buildSelectionSet(\n\t\t\t\tvalue as Record<string, unknown>,\n\t\t\t\t`${indent}  `,\n\t\t\t);\n\t\t\tif (!inner) {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\t`Selection for \"${key}\" must have at least one field selected.`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tlines.push(`${indent}${key} {\\n${inner}\\n${indent}}`);\n\t\t} else {\n\t\t\tthrow new TypeError(\n\t\t\t\t`Selection for \"${key}\" must be true or a nested selection object.`,\n\t\t\t);\n\t\t}\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\nfunction requireNonEmpty(set: string, context: string): string {\n\tif (!set)\n\t\tthrow new TypeError(`${context} must have at least one field selected.`);\n\treturn set;\n}\n\ntype RootDocumentOptions = {\n\toperationName: string;\n\tvariableDefinitions: string;\n\trootField: string;\n\trootArgs?: string[];\n\tselect: Record<string, unknown>;\n\tcontext: string;\n};\n\ntype PageDocumentOptions = {\n\toperationName: string;\n\tvariableDefinitions: string;\n\tfieldName: string;\n\tfieldArgs?: string[];\n\tselect: Record<string, unknown>;\n\tcontext: string;\n};\n\ntype MutationDocumentOptions = {\n\toperationName: string;\n\tvariableDefinitions: string;\n\trootField: string;\n\trootArgs?: string[];\n\tselect: Record<string, unknown>;\n\tcontext: string;\n};\n\nfunction formatArgs(args: string[] | undefined): string {\n\treturn args?.length ? `(${args.join(\", \")})` : \"\";\n}\n\nexport function buildRootDocument(options: RootDocumentOptions): string {\n\tconst body = requireNonEmpty(\n\t\tbuildSelectionSet(options.select, \"    \"),\n\t\toptions.context,\n\t);\n\tconst rootArgs = formatArgs(options.rootArgs);\n\treturn `query ${options.operationName}${options.variableDefinitions} {\\n  ${options.rootField}${rootArgs} {\\n${body}\\n  }\\n}`;\n}\n\nexport function buildMutationDocument(\n\toptions: MutationDocumentOptions,\n): string {\n\tconst body = requireNonEmpty(\n\t\tbuildSelectionSet(options.select, \"    \"),\n\t\toptions.context,\n\t);\n\tconst rootArgs = formatArgs(options.rootArgs);\n\treturn `mutation ${options.operationName}${options.variableDefinitions} {\\n  ${options.rootField}${rootArgs} {\\n${body}\\n  }\\n}`;\n}\n\nexport function buildPageDocument(options: PageDocumentOptions): string {\n\tfor (const key of Object.keys(options.select)) {\n\t\tif (key !== \"pageInfo\" && key !== options.fieldName) {\n\t\t\tthrow new TypeError(\n\t\t\t\t`Invalid page selection key \"${key}\". Allowed keys: pageInfo, ${options.fieldName}.`,\n\t\t\t);\n\t\t}\n\t}\n\n\tconst sections: string[] = [];\n\tconst pageInfo = options.select.pageInfo;\n\tconst field = options.select[options.fieldName];\n\n\tif (pageInfo !== undefined && pageInfo !== null) {\n\t\tconst inner = requireNonEmpty(\n\t\t\tbuildSelectionSet(pageInfo as Record<string, unknown>, \"      \"),\n\t\t\t\"pageInfo selection\",\n\t\t);\n\t\tsections.push(`    pageInfo {\\n${inner}\\n    }`);\n\t}\n\n\tif (field !== undefined && field !== null) {\n\t\tconst inner = requireNonEmpty(\n\t\t\tbuildSelectionSet(field as Record<string, unknown>, \"      \"),\n\t\t\t`${options.fieldName} selection`,\n\t\t);\n\t\tsections.push(\n\t\t\t`    ${options.fieldName}${formatArgs(options.fieldArgs)} {\\n${inner}\\n    }`,\n\t\t);\n\t}\n\n\tif (!sections.length) {\n\t\tthrow new TypeError(\n\t\t\t`${options.context} must have at least one of: pageInfo, ${options.fieldName}.`,\n\t\t);\n\t}\n\n\tif (field === undefined || field === null) {\n\t\tthrow new TypeError(\n\t\t\t`${options.context} must select \"${options.fieldName}\". AniList computes pageInfo from that field, so pageInfo cannot be selected on its own.`,\n\t\t);\n\t}\n\n\tconst pageBody = sections.join(\"\\n\");\n\treturn `query ${options.operationName}${options.variableDefinitions} {\\n  Page(page: $page, perPage: $perPage) {\\n${pageBody}\\n  }\\n}`;\n}\n\n// ── Top-level document builders ───────────────────────────────────────────────\n\nexport function buildAnimeByIdDocument(select: MediaSelect): string {\n\treturn buildRootDocument({\n\t\toperationName: \"SelectedAnimeById\",\n\t\tvariableDefinitions: \"($id: Int)\",\n\t\trootField: \"Media\",\n\t\trootArgs: [\"id: $id\", \"type: ANIME\"],\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"MediaSelect\",\n\t});\n}\n\nexport function buildMangaByIdDocument(select: MediaSelect): string {\n\treturn buildRootDocument({\n\t\toperationName: \"SelectedMangaById\",\n\t\tvariableDefinitions: \"($id: Int)\",\n\t\trootField: \"Media\",\n\t\trootArgs: [\"id: $id\", \"type: MANGA\"],\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"MediaSelect\",\n\t});\n}\n\nexport function buildMediaByIdDocument(select: MediaSelect): string {\n\treturn buildRootDocument({\n\t\toperationName: \"SelectedMediaById\",\n\t\tvariableDefinitions: \"($id: Int)\",\n\t\trootField: \"Media\",\n\t\trootArgs: [\"id: $id\"],\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"MediaSelect\",\n\t});\n}\n\nexport function buildCharacterByIdDocument(select: CharacterSelect): string {\n\treturn buildRootDocument({\n\t\toperationName: \"SelectedCharacterById\",\n\t\tvariableDefinitions: \"($id: Int)\",\n\t\trootField: \"Character\",\n\t\trootArgs: [\"id: $id\"],\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"CharacterSelect\",\n\t});\n}\n\nexport function buildStaffByIdDocument(select: StaffSelect): string {\n\treturn buildRootDocument({\n\t\toperationName: \"SelectedStaffById\",\n\t\tvariableDefinitions: \"($id: Int)\",\n\t\trootField: \"Staff\",\n\t\trootArgs: [\"id: $id\"],\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"StaffSelect\",\n\t});\n}\n\nexport function buildStudioByIdDocument(select: StudioSelect): string {\n\treturn buildRootDocument({\n\t\toperationName: \"SelectedStudioById\",\n\t\tvariableDefinitions: \"($id: Int)\",\n\t\trootField: \"Studio\",\n\t\trootArgs: [\"id: $id\"],\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"StudioSelect\",\n\t});\n}\n\nexport function buildUserByIdDocument(select: UserSelect): string {\n\treturn buildRootDocument({\n\t\toperationName: \"SelectedUserById\",\n\t\tvariableDefinitions: \"($id: Int)\",\n\t\trootField: \"User\",\n\t\trootArgs: [\"id: $id\"],\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"UserSelect\",\n\t});\n}\n\nexport function buildUserByUsernameDocument(select: UserSelect): string {\n\treturn buildRootDocument({\n\t\toperationName: \"SelectedUserByUsername\",\n\t\tvariableDefinitions: \"($userName: String)\",\n\t\trootField: \"User\",\n\t\trootArgs: [\"name: $userName\"],\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"UserSelect\",\n\t});\n}\n\nexport function buildMediaListByIdDocument(select: MediaListSelect): string {\n\treturn buildRootDocument({\n\t\toperationName: \"SelectedMediaListById\",\n\t\tvariableDefinitions: \"($id: Int)\",\n\t\trootField: \"MediaList\",\n\t\trootArgs: [\"id: $id\"],\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"MediaListSelect\",\n\t});\n}\n\nexport function buildMediaListCollectionByUserDocument(\n\tselect: MediaListCollectionSelect,\n\tby: \"id\" | \"username\",\n): string {\n\treturn buildRootDocument({\n\t\toperationName:\n\t\t\tby === \"id\"\n\t\t\t\t? \"SelectedMediaListCollectionByUser\"\n\t\t\t\t: \"SelectedMediaListCollectionByUsername\",\n\t\tvariableDefinitions:\n\t\t\tby === \"id\"\n\t\t\t\t? \"($userId: Int, $mediaType: MediaType, $status: MediaListStatus)\"\n\t\t\t\t: \"($userName: String, $mediaType: MediaType, $status: MediaListStatus)\",\n\t\trootField: \"MediaListCollection\",\n\t\trootArgs: [\n\t\t\tby === \"id\" ? \"userId: $userId\" : \"userName: $userName\",\n\t\t\t\"type: $mediaType\",\n\t\t\t\"status: $status\",\n\t\t],\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"MediaListCollectionSelect\",\n\t});\n}\n\nexport function buildToggleFavouriteDocument(\n\tselect: FavouritesSelect,\n\tfield: \"animeId\" | \"mangaId\" | \"characterId\" | \"staffId\" | \"studioId\",\n): string {\n\tconst operationNameByField = {\n\t\tanimeId: \"SelectedToggleFavoriteAnime\",\n\t\tmangaId: \"SelectedToggleFavoriteManga\",\n\t\tcharacterId: \"SelectedToggleFavoriteCharacter\",\n\t\tstaffId: \"SelectedToggleFavoriteStaff\",\n\t\tstudioId: \"SelectedToggleFavoriteStudio\",\n\t} satisfies Record<typeof field, string>;\n\n\treturn buildMutationDocument({\n\t\toperationName: operationNameByField[field],\n\t\tvariableDefinitions: \"($id: Int)\",\n\t\trootField: \"ToggleFavourite\",\n\t\trootArgs: [`${field}: $id`],\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"FavouritesSelect\",\n\t});\n}\n\nexport function buildSaveMediaListEntryDocument(\n\tselect: MediaListSelect,\n): string {\n\treturn buildMutationDocument({\n\t\toperationName: \"SelectedSaveMediaListEntry\",\n\t\tvariableDefinitions:\n\t\t\t\"($mediaId: Int, $id: Int, $status: MediaListStatus, $score: Float, $scoreRaw: Int, $progress: Int, $progressVolumes: Int, $repeat: Int, $private: Boolean, $notes: String, $startedAt: FuzzyDateInput, $completedAt: FuzzyDateInput, $advancedScores: [Float], $customLists: [String], $hiddenFromStatusLists: Boolean, $priority: Int)\",\n\t\trootField: \"SaveMediaListEntry\",\n\t\trootArgs: [\n\t\t\t\"mediaId: $mediaId\",\n\t\t\t\"id: $id\",\n\t\t\t\"status: $status\",\n\t\t\t\"score: $score\",\n\t\t\t\"scoreRaw: $scoreRaw\",\n\t\t\t\"progress: $progress\",\n\t\t\t\"progressVolumes: $progressVolumes\",\n\t\t\t\"repeat: $repeat\",\n\t\t\t\"private: $private\",\n\t\t\t\"notes: $notes\",\n\t\t\t\"startedAt: $startedAt\",\n\t\t\t\"completedAt: $completedAt\",\n\t\t\t\"advancedScores: $advancedScores\",\n\t\t\t\"customLists: $customLists\",\n\t\t\t\"hiddenFromStatusLists: $hiddenFromStatusLists\",\n\t\t\t\"priority: $priority\",\n\t\t],\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"MediaListSelect\",\n\t});\n}\n\nexport function buildDeleteMediaListEntryDocument(\n\tselect: DeletedSelect,\n): string {\n\treturn buildMutationDocument({\n\t\toperationName: \"SelectedDeleteMediaListEntry\",\n\t\tvariableDefinitions: \"($id: Int)\",\n\t\trootField: \"DeleteMediaListEntry\",\n\t\trootArgs: [\"id: $id\"],\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"DeletedSelect\",\n\t});\n}\n\nexport function buildUpdateMediaListEntriesDocument(\n\tselect: MediaListSelect,\n): string {\n\treturn buildMutationDocument({\n\t\toperationName: \"SelectedUpdateMediaListEntries\",\n\t\tvariableDefinitions:\n\t\t\t\"($ids: [Int], $status: MediaListStatus, $score: Float, $scoreRaw: Int, $progress: Int, $progressVolumes: Int, $repeat: Int, $private: Boolean, $notes: String, $startedAt: FuzzyDateInput, $completedAt: FuzzyDateInput, $advancedScores: [Float], $hiddenFromStatusLists: Boolean, $priority: Int)\",\n\t\trootField: \"UpdateMediaListEntries\",\n\t\trootArgs: [\n\t\t\t\"ids: $ids\",\n\t\t\t\"status: $status\",\n\t\t\t\"score: $score\",\n\t\t\t\"scoreRaw: $scoreRaw\",\n\t\t\t\"progress: $progress\",\n\t\t\t\"progressVolumes: $progressVolumes\",\n\t\t\t\"repeat: $repeat\",\n\t\t\t\"private: $private\",\n\t\t\t\"notes: $notes\",\n\t\t\t\"startedAt: $startedAt\",\n\t\t\t\"completedAt: $completedAt\",\n\t\t\t\"advancedScores: $advancedScores\",\n\t\t\t\"hiddenFromStatusLists: $hiddenFromStatusLists\",\n\t\t\t\"priority: $priority\",\n\t\t],\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"MediaListSelect\",\n\t});\n}\n\nexport function buildDeleteCustomListDocument(select: DeletedSelect): string {\n\treturn buildMutationDocument({\n\t\toperationName: \"SelectedDeleteCustomList\",\n\t\tvariableDefinitions: \"($customList: String, $type: MediaType)\",\n\t\trootField: \"DeleteCustomList\",\n\t\trootArgs: [\"customList: $customList\", \"type: $type\"],\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"DeletedSelect\",\n\t});\n}\n\nexport function buildAnimeSearchDocument(select: MediaPageSelect): string {\n\treturn buildSearchDocument(select, \"ANIME\");\n}\n\nexport function buildMangaSearchDocument(select: MediaPageSelect): string {\n\treturn buildSearchDocument(select, \"MANGA\");\n}\n\nfunction buildSearchDocument(\n\tselect: MediaPageSelect,\n\ttype: \"ANIME\" | \"MANGA\",\n): string {\n\treturn buildPageDocument({\n\t\toperationName:\n\t\t\ttype === \"ANIME\" ? \"SelectedAnimeSearch\" : \"SelectedMangaSearch\",\n\t\tvariableDefinitions: \"($query: String, $page: Int, $perPage: Int)\",\n\t\tfieldName: \"media\",\n\t\tfieldArgs: [\"search: $query\", `type: ${type}`],\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"page select\",\n\t});\n}\n\nexport function buildMediaPageDocument(\n\toperationName: string,\n\tvariableDefinitions: string,\n\tfieldArgs: string[],\n\tselect: MediaPageSelect,\n): string {\n\treturn buildPageDocument({\n\t\toperationName,\n\t\tvariableDefinitions,\n\t\tfieldName: \"media\",\n\t\tfieldArgs,\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"page select\",\n\t});\n}\n\nexport function buildCharacterPageDocument(\n\toperationName: string,\n\tvariableDefinitions: string,\n\tfieldArgs: string[],\n\tselect: CharacterPageSelect,\n): string {\n\treturn buildPageDocument({\n\t\toperationName,\n\t\tvariableDefinitions,\n\t\tfieldName: \"characters\",\n\t\tfieldArgs,\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"page select\",\n\t});\n}\n\nexport function buildStaffPageDocument(\n\toperationName: string,\n\tvariableDefinitions: string,\n\tfieldArgs: string[],\n\tselect: StaffPageSelect,\n): string {\n\treturn buildPageDocument({\n\t\toperationName,\n\t\tvariableDefinitions,\n\t\tfieldName: \"staff\",\n\t\tfieldArgs,\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"page select\",\n\t});\n}\n\nexport function buildStudioPageDocument(\n\toperationName: string,\n\tvariableDefinitions: string,\n\tfieldArgs: string[],\n\tselect: StudioPageSelect,\n): string {\n\treturn buildPageDocument({\n\t\toperationName,\n\t\tvariableDefinitions,\n\t\tfieldName: \"studios\",\n\t\tfieldArgs,\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"page select\",\n\t});\n}\n\nexport function buildUserPageDocument(\n\toperationName: string,\n\tvariableDefinitions: string,\n\tfieldArgs: string[],\n\tselect: UserPageSelect,\n): string {\n\treturn buildPageDocument({\n\t\toperationName,\n\t\tvariableDefinitions,\n\t\tfieldName: \"users\",\n\t\tfieldArgs,\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"page select\",\n\t});\n}\n\nexport function buildMediaTagCollectionDocument(\n\tselect: MediaTagSelect,\n): string {\n\treturn buildRootDocument({\n\t\toperationName: \"SelectedMediaTagCollection\",\n\t\tvariableDefinitions: \"($status: Int)\",\n\t\trootField: \"MediaTagCollection\",\n\t\trootArgs: [\"status: $status\"],\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"MediaTagSelect\",\n\t});\n}\n\nexport function buildAiringScheduleByIdDocument(\n\tselect: AiringScheduleSelect,\n): string {\n\treturn buildRootDocument({\n\t\toperationName: \"SelectedAiringScheduleById\",\n\t\tvariableDefinitions: \"($id: Int)\",\n\t\trootField: \"AiringSchedule\",\n\t\trootArgs: [\"id: $id\"],\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"AiringScheduleSelect\",\n\t});\n}\n\nexport function buildAiringSchedulePageDocument(\n\toperationName: string,\n\tvariableDefinitions: string,\n\tfieldArgs: string[],\n\tselect: AiringSchedulePageSelect,\n): string {\n\treturn buildPageDocument({\n\t\toperationName,\n\t\tvariableDefinitions,\n\t\tfieldName: \"airingSchedules\",\n\t\tfieldArgs,\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"page select\",\n\t});\n}\n\nexport function buildViewerDocument(select: UserSelect): string {\n\treturn buildRootDocument({\n\t\toperationName: \"SelectedViewer\",\n\t\tvariableDefinitions: \"\",\n\t\trootField: \"Viewer\",\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"UserSelect\",\n\t});\n}\n\nexport function buildViewerStatisticsDocument(\n\tselect: UserStatisticTypesSelect,\n): string {\n\treturn buildRootDocument({\n\t\toperationName: \"SelectedViewerStatistics\",\n\t\tvariableDefinitions: \"\",\n\t\trootField: \"Viewer\",\n\t\tselect: { statistics: select },\n\t\tcontext: \"UserStatisticTypesSelect\",\n\t});\n}\n\nexport function buildReviewPageDocument(\n\toperationName: string,\n\tvariableDefinitions: string,\n\tfieldArgs: string[],\n\tselect: ReviewPageSelect,\n): string {\n\treturn buildPageDocument({\n\t\toperationName,\n\t\tvariableDefinitions,\n\t\tfieldName: \"reviews\",\n\t\tfieldArgs,\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"page select\",\n\t});\n}\n\nexport function buildRecommendationPageDocument(\n\toperationName: string,\n\tvariableDefinitions: string,\n\tfieldArgs: string[],\n\tselect: RecommendationPageSelect,\n): string {\n\treturn buildPageDocument({\n\t\toperationName,\n\t\tvariableDefinitions,\n\t\tfieldName: \"recommendations\",\n\t\tfieldArgs,\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"page select\",\n\t});\n}\n\nexport function buildSaveRecommendationDocument(\n\tselect: RecommendationSelect,\n): string {\n\treturn buildMutationDocument({\n\t\toperationName: \"SelectedSaveRecommendation\",\n\t\tvariableDefinitions:\n\t\t\t\"($mediaId: Int, $mediaRecommendationId: Int, $rating: RecommendationRating)\",\n\t\trootField: \"SaveRecommendation\",\n\t\trootArgs: [\n\t\t\t\"mediaId: $mediaId\",\n\t\t\t\"mediaRecommendationId: $mediaRecommendationId\",\n\t\t\t\"rating: $rating\",\n\t\t],\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"RecommendationSelect\",\n\t});\n}\n\nexport function buildRateReviewDocument(select: ReviewSelect): string {\n\treturn buildMutationDocument({\n\t\toperationName: \"SelectedRateReview\",\n\t\tvariableDefinitions: \"($reviewId: Int, $rating: ReviewRating)\",\n\t\trootField: \"RateReview\",\n\t\trootArgs: [\"reviewId: $reviewId\", \"rating: $rating\"],\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"ReviewSelect\",\n\t});\n}\n\nexport function buildSaveReviewDocument(select: ReviewSelect): string {\n\treturn buildMutationDocument({\n\t\toperationName: \"SelectedSaveReview\",\n\t\tvariableDefinitions:\n\t\t\t\"($id: Int, $mediaId: Int, $body: String, $summary: String, $score: Int, $private: Boolean)\",\n\t\trootField: \"SaveReview\",\n\t\trootArgs: [\n\t\t\t\"id: $id\",\n\t\t\t\"mediaId: $mediaId\",\n\t\t\t\"body: $body\",\n\t\t\t\"summary: $summary\",\n\t\t\t\"score: $score\",\n\t\t\t\"private: $private\",\n\t\t],\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"ReviewSelect\",\n\t});\n}\n\nexport function buildDeleteReviewDocument(select: DeletedSelect): string {\n\treturn buildMutationDocument({\n\t\toperationName: \"SelectedDeleteReview\",\n\t\tvariableDefinitions: \"($id: Int)\",\n\t\trootField: \"DeleteReview\",\n\t\trootArgs: [\"id: $id\"],\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"DeletedSelect\",\n\t});\n}\n\nexport function buildFollowingPageDocument(\n\tselect: FollowingPageSelect,\n): string {\n\treturn buildPageDocument({\n\t\toperationName: \"SelectedFollowing\",\n\t\tvariableDefinitions: \"($userId: Int!, $page: Int, $perPage: Int)\",\n\t\tfieldName: \"following\",\n\t\tfieldArgs: [\"userId: $userId\"],\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"page select\",\n\t});\n}\n\nexport function buildFollowersPageDocument(\n\tselect: FollowersPageSelect,\n): string {\n\treturn buildPageDocument({\n\t\toperationName: \"SelectedFollowers\",\n\t\tvariableDefinitions: \"($userId: Int!, $page: Int, $perPage: Int)\",\n\t\tfieldName: \"followers\",\n\t\tfieldArgs: [\"userId: $userId\"],\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"page select\",\n\t});\n}\n\nexport function buildActivityReplyPageDocument(\n\tselect: ActivityReplyPageSelect,\n): string {\n\treturn buildPageDocument({\n\t\toperationName: \"SelectedActivityReplies\",\n\t\tvariableDefinitions: \"($activityId: Int, $page: Int, $perPage: Int)\",\n\t\tfieldName: \"activityReplies\",\n\t\tfieldArgs: [\"activityId: $activityId\"],\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"page select\",\n\t});\n}\n\nexport function buildActivityReplyByIdDocument(\n\tselect: ActivityReplySelect,\n): string {\n\treturn buildRootDocument({\n\t\toperationName: \"SelectedActivityReplyById\",\n\t\tvariableDefinitions: \"($id: Int)\",\n\t\trootField: \"ActivityReply\",\n\t\trootArgs: [\"id: $id\"],\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"ActivityReplySelect\",\n\t});\n}\n\nexport function buildThreadPageDocument(select: ThreadPageSelect): string {\n\treturn buildPageDocument({\n\t\toperationName: \"SelectedThreads\",\n\t\tvariableDefinitions:\n\t\t\t\"($search: String, $userId: Int, $page: Int, $perPage: Int)\",\n\t\tfieldName: \"threads\",\n\t\tfieldArgs: [\"search: $search\", \"userId: $userId\"],\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"page select\",\n\t});\n}\n\nexport function buildThreadByIdDocument(select: ThreadSelect): string {\n\treturn buildRootDocument({\n\t\toperationName: \"SelectedThreadById\",\n\t\tvariableDefinitions: \"($id: Int)\",\n\t\trootField: \"Thread\",\n\t\trootArgs: [\"id: $id\"],\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"ThreadSelect\",\n\t});\n}\n\nexport function buildThreadCommentPageDocument(\n\tselect: ThreadCommentPageSelect,\n): string {\n\treturn buildPageDocument({\n\t\toperationName: \"SelectedThreadComments\",\n\t\tvariableDefinitions: \"($threadId: Int, $page: Int, $perPage: Int)\",\n\t\tfieldName: \"threadComments\",\n\t\tfieldArgs: [\"threadId: $threadId\"],\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"page select\",\n\t});\n}\n\nexport function buildThreadCommentByIdDocument(\n\tselect: ThreadCommentSelect,\n): string {\n\treturn buildRootDocument({\n\t\toperationName: \"SelectedThreadCommentById\",\n\t\tvariableDefinitions: \"($id: Int)\",\n\t\trootField: \"ThreadComment\",\n\t\trootArgs: [\"id: $id\"],\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"ThreadCommentSelect\",\n\t});\n}\n\nexport function buildSiteStatisticsDocument(\n\tselect: SiteStatisticsSelect,\n): string {\n\treturn buildRootDocument({\n\t\toperationName: \"SelectedSiteStatistics\",\n\t\tvariableDefinitions: \"\",\n\t\trootField: \"SiteStatistics\",\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"SiteStatisticsSelect\",\n\t});\n}\n\nexport function buildParsedMarkdownDocument(\n\tselect: ParsedMarkdownSelect,\n): string {\n\treturn buildRootDocument({\n\t\toperationName: \"SelectedMarkdown\",\n\t\tvariableDefinitions: \"($markdown: String!)\",\n\t\trootField: \"Markdown\",\n\t\trootArgs: [\"markdown: $markdown\"],\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"ParsedMarkdownSelect\",\n\t});\n}\n\nexport function buildToggleFollowDocument(select: UserSelect): string {\n\treturn buildMutationDocument({\n\t\toperationName: \"SelectedToggleFollow\",\n\t\tvariableDefinitions: \"($userId: Int)\",\n\t\trootField: \"ToggleFollow\",\n\t\trootArgs: [\"userId: $userId\"],\n\t\tselect: select as Record<string, unknown>,\n\t\tcontext: \"UserSelect\",\n\t});\n}\n","export type RootSelectionOption<TKey extends string, TSelect> = {\n\tselect: { [K in TKey]: TSelect };\n};\n\nconst isSelectionObject = (value: unknown): value is Record<string, unknown> =>\n\tvalue !== null && typeof value === \"object\" && !Array.isArray(value);\n\n/**\n * Returns the selection nested under the root key, for example the\n * `{ id: true }` in `{ select: { media: { id: true } } }`.\n * @throws TypeError when `select` is not exactly `{ [key]: { ... } }`.\n */\nexport function resolveSelection<TKey extends string, TSelect>(\n\toptions: RootSelectionOption<TKey, TSelect>,\n\tkey: TKey,\n): TSelect {\n\tconst select: unknown = options.select;\n\n\tif (!isSelectionObject(select)) {\n\t\tthrow new TypeError(\"select must be an object.\");\n\t}\n\n\tconst keys = Object.keys(select);\n\n\tif (keys.length === 1 && keys[0] === key && isSelectionObject(select[key])) {\n\t\treturn select[key] as TSelect;\n\t}\n\n\tthrow new TypeError(\n\t\t`select must be { ${key}: { ... } }. Direct selections were removed in v4; wrap the fields in the \"${key}\" root.`,\n\t);\n}\n\n/**\n * Returns the page selection nested under `page`, for example the\n * `{ pageInfo: { ... }, media: { ... } }` in `{ select: { page: { ... } } }`.\n * @throws TypeError when `select` is not exactly `{ page: { ... } }`.\n */\nexport function resolvePageSelection<TSelect>(\n\tselect: unknown,\n\tfieldName: string,\n): TSelect {\n\tif (\n\t\tisSelectionObject(select) &&\n\t\tObject.keys(select).length === 1 &&\n\t\tisSelectionObject(select.page)\n\t) {\n\t\treturn select.page as TSelect;\n\t}\n\n\tthrow new TypeError(\n\t\t`Page select must be { page: { pageInfo?: { ... }, ${fieldName}?: { ... } } }. Legacy page bodies were removed in v4; wrap them in \"page\".`,\n\t);\n}\n\nexport function hasSelection<TKey extends string, TSelect>(\n\toptions: RootSelectionOption<TKey, TSelect> | undefined,\n): options is RootSelectionOption<TKey, TSelect> {\n\treturn options?.select !== undefined;\n}\n","/**\n * AniList caps `perPage` at 50 for every paginated connection.\n */\nexport const ANILIST_MAX_PER_PAGE = 50;\n\n/**\n * Throws unless `value` is a positive integer, and returns it unchanged.\n * @param value - The value to validate.\n * @param name - Argument name used in the error message.\n */\nexport const assertPositiveInt = (value: number, name = \"id\"): number => {\n\tif (!Number.isInteger(value) || value <= 0) {\n\t\tthrow new TypeError(`${name} must be a positive integer.`);\n\t}\n\treturn value;\n};\n\n/**\n * Validates an optional `perPage` argument against AniList's maximum of 50 and\n * returns it, or the fallback when it is `undefined`.\n * @param perPage - The caller-provided page size.\n * @param fallback - Value returned when `perPage` is undefined.\n */\nexport const normalizePerPage = (\n\tperPage: number | undefined,\n\tfallback: number,\n): number => {\n\tif (perPage === undefined) return fallback;\n\tif (\n\t\t!Number.isInteger(perPage) ||\n\t\tperPage < 1 ||\n\t\tperPage > ANILIST_MAX_PER_PAGE\n\t) {\n\t\tthrow new TypeError(\n\t\t\t`perPage must be an integer between 1 and ${ANILIST_MAX_PER_PAGE} (AniList's maximum).`,\n\t\t);\n\t}\n\treturn perPage;\n};\n\n/**\n * Throws unless `status` is `undefined` or a status string. Catches callers\n * still passing selection options in the v3 position, which is now `status`.\n * @param status - The caller-provided list status.\n */\nexport const assertOptionalStatus = (status: unknown): void => {\n\tif (status !== undefined && typeof status !== \"string\") {\n\t\tthrow new TypeError(\n\t\t\t\"status must be a MediaListStatus or undefined. Since v4, selection options are the argument after status: pass undefined for status to select without filtering.\",\n\t\t);\n\t}\n};\n","import type { ANILISTSDK } from \"../@types\";\nimport type {\n\tMediaFormat,\n\tMediaSeason,\n\tMediaStatus,\n} from \"../__generated__/anilist-schema\";\nimport type {\n\tGetAnimeBrowseQuery,\n\tGetSeasonalAnimeQuery,\n\tGraphQLClient,\n\tToggleFavoriteAnimeMutation,\n} from \"../__generated__/anilist-sdk\";\nimport {\n\tbuildAnimeByIdDocument,\n\tbuildAnimeSearchDocument,\n\tbuildMediaPageDocument,\n\tbuildToggleFavouriteDocument,\n} from \"../selections/builder\";\nimport type { RootSelectionOption } from \"../selections/options\";\nimport {\n\thasSelection,\n\tresolvePageSelection,\n\tresolveSelection,\n} from \"../selections/options\";\nimport type {\n\tFavouritesSelect,\n\tMediaPageSelect,\n\tMediaSelect,\n\tSelectedFavourites,\n\tSelectedMedia,\n\tSelectedMediaPage,\n} from \"../selections/types\";\nimport { assertPositiveInt, normalizePerPage } from \"./validation\";\n\n/**\n * Service class for interacting with AniList anime-related queries.\n */\nexport class AnimeService {\n\tprivate client: ANILISTSDK;\n\tprivate graphQLClient: GraphQLClient | undefined;\n\n\t/**\n\t * Constructs a new AnimeService instance.\n\t * @param client - An instance of the AniList SDK client.\n\t * @param graphQLClient - Optional low-level GraphQL client for selected queries.\n\t */\n\tconstructor(client: ANILISTSDK, graphQLClient?: GraphQLClient) {\n\t\tthis.client = client;\n\t\tthis.graphQLClient = graphQLClient;\n\t}\n\n\tprivate selectedMedia<TSelect extends MediaSelect>(\n\t\tselect: TSelect,\n\t\tvariables: { id: number },\n\t): Promise<{ Media: SelectedMedia<TSelect> | null }> {\n\t\tif (!this.graphQLClient) {\n\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t}\n\t\tconst document = buildAnimeByIdDocument(select);\n\t\treturn this.graphQLClient.request<\n\t\t\t{ Media: SelectedMedia<TSelect> | null },\n\t\t\t{ id: number }\n\t\t>({ document, variables });\n\t}\n\n\tprivate selectedMediaPage<TSelect extends MediaPageSelect>(\n\t\tdocument: string,\n\t\tvariables: Record<string, unknown>,\n\t): Promise<{ page: SelectedMediaPage<TSelect> | null }> {\n\t\tif (!this.graphQLClient) {\n\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t}\n\t\treturn this.graphQLClient\n\t\t\t.request<\n\t\t\t\t{ Page: SelectedMediaPage<TSelect> | null },\n\t\t\t\tRecord<string, unknown>\n\t\t\t>({ document, variables })\n\t\t\t.then((raw) => ({ page: raw.Page }));\n\t}\n\n\t/**\n\t * Retrieves anime information by ID.\n\t * When `options.select` is provided, only the selected fields are returned via a dynamic query.\n\t * @param id - The unique ID of the anime.\n\t */\n\tgetAnimeById(id: number): ReturnType<ANILISTSDK[\"GetAnimeById\"]>;\n\tgetAnimeById<TSelect extends MediaSelect>(\n\t\tid: number,\n\t\toptions: RootSelectionOption<\"media\", TSelect>,\n\t): Promise<{ media: SelectedMedia<TSelect> | null }>;\n\tgetAnimeById<TSelect extends MediaSelect>(\n\t\tid: number,\n\t\toptions?: RootSelectionOption<\"media\", TSelect>,\n\t): unknown {\n\t\tassertPositiveInt(id);\n\t\tif (hasSelection(options)) {\n\t\t\tconst select = resolveSelection(options, \"media\");\n\t\t\treturn this.selectedMedia(select, { id }).then((raw) => ({\n\t\t\t\tmedia: raw.Media,\n\t\t\t}));\n\t\t}\n\t\treturn this.client.GetAnimeById({ id });\n\t}\n\n\t/**\n\t * Searches for anime by title or keyword.\n\t * When `options.select` is provided, only the selected fields are returned.\n\t * @param search - The search query string.\n\t * @param page - Optional page number. Defaults to 1.\n\t * @param perPage - Optional number of results per page. Defaults to 10.\n\t */\n\tgetAnimeBySearch(\n\t\tsearch: string,\n\t\tpage?: number,\n\t\tperPage?: number,\n\t): ReturnType<ANILISTSDK[\"SearchAnime\"]>;\n\tgetAnimeBySearch<TSelect extends MediaPageSelect>(\n\t\tsearch: string,\n\t\tpage: number,\n\t\tperPage: number,\n\t\toptions: { select: { page: TSelect } },\n\t): Promise<{ page: SelectedMediaPage<TSelect> | null }>;\n\tgetAnimeBySearch<TSelect extends MediaPageSelect>(\n\t\tsearch: string,\n\t\tpage = 1,\n\t\tperPage = 10,\n\t\toptions?: { select: { page: TSelect } },\n\t):\n\t\t| ReturnType<ANILISTSDK[\"SearchAnime\"]>\n\t\t| Promise<{ page: SelectedMediaPage<TSelect> | null }> {\n\t\tnormalizePerPage(perPage, 10);\n\t\tif (options?.select !== undefined) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst document = buildAnimeSearchDocument(\n\t\t\t\tresolvePageSelection<TSelect>(options.select, \"media\"),\n\t\t\t);\n\t\t\tconst p: Promise<{ page: SelectedMediaPage<TSelect> | null }> =\n\t\t\t\tthis.graphQLClient\n\t\t\t\t\t.request<\n\t\t\t\t\t\t{ Page: SelectedMediaPage<TSelect> | null },\n\t\t\t\t\t\t{ query: string; page: number; perPage: number }\n\t\t\t\t\t>({ document, variables: { query: search, page, perPage } })\n\t\t\t\t\t.then((raw) => ({ page: raw.Page }));\n\t\t\treturn p;\n\t\t}\n\t\treturn this.client.SearchAnime({ query: search, page, perPage });\n\t}\n\n\t/**\n\t * Retrieves a list of currently trending anime.\n\t * @param page - Optional page number. Defaults to 1.\n\t * @param perPage - Optional number of results per page. Defaults to 10.\n\t * @returns A promise resolving to trending anime.\n\t */\n\tgetTrendingAnime(\n\t\tpage?: number,\n\t\tperPage?: number,\n\t): ReturnType<ANILISTSDK[\"GetAnimeTrending\"]>;\n\tgetTrendingAnime<TSelect extends MediaPageSelect>(\n\t\tpage: number,\n\t\tperPage: number,\n\t\toptions: { select: { page: TSelect } },\n\t): Promise<{ page: SelectedMediaPage<TSelect> | null }>;\n\tgetTrendingAnime<TSelect extends MediaPageSelect>(\n\t\tpage = 1,\n\t\tperPage = 10,\n\t\toptions?: { select: { page: TSelect } },\n\t):\n\t\t| ReturnType<ANILISTSDK[\"GetAnimeTrending\"]>\n\t\t| Promise<{ page: SelectedMediaPage<TSelect> | null }> {\n\t\tnormalizePerPage(perPage, 10);\n\t\tif (options?.select !== undefined) {\n\t\t\tconst document = buildMediaPageDocument(\n\t\t\t\t\"SelectedAnimeTrending\",\n\t\t\t\t\"($page: Int, $perPage: Int)\",\n\t\t\t\t[\"type: ANIME\", \"sort: TRENDING_DESC\"],\n\t\t\t\tresolvePageSelection<TSelect>(options.select, \"media\"),\n\t\t\t);\n\t\t\treturn this.selectedMediaPage<TSelect>(document, { page, perPage });\n\t\t}\n\t\treturn this.client.GetAnimeTrending({ page, perPage });\n\t}\n\n\t/**\n\t * Retrieves a list of popular anime.\n\t * @param page - Optional page number. Defaults to 1.\n\t * @param perPage - Optional number of results per page. Defaults to 10.\n\t * @returns A promise resolving to popular anime.\n\t */\n\tgetPopularAnime(\n\t\tpage?: number,\n\t\tperPage?: number,\n\t): ReturnType<ANILISTSDK[\"GetAnimePopular\"]>;\n\tgetPopularAnime<TSelect extends MediaPageSelect>(\n\t\tpage: number,\n\t\tperPage: number,\n\t\toptions: { select: { page: TSelect } },\n\t): Promise<{ page: SelectedMediaPage<TSelect> | null }>;\n\tgetPopularAnime<TSelect extends MediaPageSelect>(\n\t\tpage = 1,\n\t\tperPage = 10,\n\t\toptions?: { select: { page: TSelect } },\n\t):\n\t\t| ReturnType<ANILISTSDK[\"GetAnimePopular\"]>\n\t\t| Promise<{ page: SelectedMediaPage<TSelect> | null }> {\n\t\tnormalizePerPage(perPage, 10);\n\t\tif (options?.select !== undefined) {\n\t\t\tconst document = buildMediaPageDocument(\n\t\t\t\t\"SelectedAnimePopular\",\n\t\t\t\t\"($page: Int, $perPage: Int)\",\n\t\t\t\t[\"type: ANIME\", \"sort: POPULARITY_DESC\"],\n\t\t\t\tresolvePageSelection<TSelect>(options.select, \"media\"),\n\t\t\t);\n\t\t\treturn this.selectedMediaPage<TSelect>(document, { page, perPage });\n\t\t}\n\t\treturn this.client.GetAnimePopular({ page, perPage });\n\t}\n\n\t/**\n\t * Retrieves anime recommendations based on a specific anime.\n\t * @param mediaId - The ID of the anime to get recommendations for.\n\t * @returns A promise resolving to recommended anime.\n\t */\n\tgetRecommendations(\n\t\tmediaId: number,\n\t): ReturnType<ANILISTSDK[\"GetAnimeRecommendations\"]>;\n\tgetRecommendations<TSelect extends MediaSelect>(\n\t\tmediaId: number,\n\t\toptions: RootSelectionOption<\"media\", TSelect>,\n\t): Promise<{ media: SelectedMedia<TSelect> | null }>;\n\tgetRecommendations<TSelect extends MediaSelect>(\n\t\tmediaId: number,\n\t\toptions?: RootSelectionOption<\"media\", TSelect>,\n\t): unknown {\n\t\tassertPositiveInt(mediaId, \"mediaId\");\n\t\tif (hasSelection(options)) {\n\t\t\tconst select = resolveSelection(options, \"media\");\n\t\t\treturn this.selectedMedia(select, {\n\t\t\t\tid: mediaId,\n\t\t\t}).then((raw) => ({ media: raw.Media }));\n\t\t}\n\t\treturn this.client.GetAnimeRecommendations({ id: mediaId });\n\t}\n\n\t/**\n\t * Retrieves characters for a given anime.\n\t * @param mediaId - The ID of the anime.\n\t * @returns A promise resolving to the characters list.\n\t */\n\tgetCharacters(mediaId: number): ReturnType<ANILISTSDK[\"GetAnimeCharacters\"]>;\n\tgetCharacters<TSelect extends MediaSelect>(\n\t\tmediaId: number,\n\t\toptions: RootSelectionOption<\"media\", TSelect>,\n\t): Promise<{ media: SelectedMedia<TSelect> | null }>;\n\tgetCharacters<TSelect extends MediaSelect>(\n\t\tmediaId: number,\n\t\toptions?: RootSelectionOption<\"media\", TSelect>,\n\t): unknown {\n\t\tassertPositiveInt(mediaId, \"mediaId\");\n\t\tif (hasSelection(options)) {\n\t\t\tconst select = resolveSelection(options, \"media\");\n\t\t\treturn this.selectedMedia(select, {\n\t\t\t\tid: mediaId,\n\t\t\t}).then((raw) => ({ media: raw.Media }));\n\t\t}\n\t\treturn this.client.GetAnimeCharacters({ id: mediaId });\n\t}\n\n\t/**\n\t * Retrieves staff associated with a given anime.\n\t * @param mediaId - The ID of the anime.\n\t * @returns A promise resolving to the staff list.\n\t */\n\tgetStaff(mediaId: number): ReturnType<ANILISTSDK[\"GetAnimeStaff\"]>;\n\tgetStaff<TSelect extends MediaSelect>(\n\t\tmediaId: number,\n\t\toptions: RootSelectionOption<\"media\", TSelect>,\n\t): Promise<{ media: SelectedMedia<TSelect> | null }>;\n\tgetStaff<TSelect extends MediaSelect>(\n\t\tmediaId: number,\n\t\toptions?: RootSelectionOption<\"media\", TSelect>,\n\t): unknown {\n\t\tassertPositiveInt(mediaId, \"mediaId\");\n\t\tif (hasSelection(options)) {\n\t\t\tconst select = resolveSelection(options, \"media\");\n\t\t\treturn this.selectedMedia(select, {\n\t\t\t\tid: mediaId,\n\t\t\t}).then((raw) => ({ media: raw.Media }));\n\t\t}\n\t\treturn this.client.GetAnimeStaff({ id: mediaId });\n\t}\n\n\t/**\n\t * Retrieves related media for a given anime (e.g., sequels, prequels).\n\t * @param mediaId - The ID of the anime.\n\t * @returns A promise resolving to related anime/media.\n\t */\n\tgetRelations(mediaId: number): ReturnType<ANILISTSDK[\"GetAnimeRelations\"]>;\n\tgetRelations<TSelect extends MediaSelect>(\n\t\tmediaId: number,\n\t\toptions: RootSelectionOption<\"media\", TSelect>,\n\t): Promise<{ media: SelectedMedia<TSelect> | null }>;\n\tgetRelations<TSelect extends MediaSelect>(\n\t\tmediaId: number,\n\t\toptions?: RootSelectionOption<\"media\", TSelect>,\n\t): unknown {\n\t\tassertPositiveInt(mediaId, \"mediaId\");\n\t\tif (hasSelection(options)) {\n\t\t\tconst select = resolveSelection(options, \"media\");\n\t\t\treturn this.selectedMedia(select, {\n\t\t\t\tid: mediaId,\n\t\t\t}).then((raw) => ({ media: raw.Media }));\n\t\t}\n\t\treturn this.client.GetAnimeRelations({ id: mediaId });\n\t}\n\n\t/**\n\t * Retrieves anime by its title.\n\t * @param title - The title of the anime.\n\t * @returns A promise resolving to the matching anime.\n\t */\n\tgetAnimeByTitle(\n\t\ttitle: string,\n\t\tpage?: number,\n\t\tperPage?: number,\n\t): ReturnType<ANILISTSDK[\"GetAnimeByTitle\"]>;\n\tgetAnimeByTitle<TSelect extends MediaPageSelect>(\n\t\ttitle: string,\n\t\tpage: number,\n\t\tperPage: number,\n\t\toptions: { select: { page: TSelect } },\n\t): Promise<{ page: SelectedMediaPage<TSelect> | null }>;\n\tgetAnimeByTitle<TSelect extends MediaPageSelect>(\n\t\ttitle: string,\n\t\tpage = 1,\n\t\tperPage = 1,\n\t\toptions?: { select: { page: TSelect } },\n\t):\n\t\t| ReturnType<ANILISTSDK[\"GetAnimeByTitle\"]>\n\t\t| Promise<{ page: SelectedMediaPage<TSelect> | null }> {\n\t\tassertPositiveInt(page, \"page\");\n\t\tconst limit = normalizePerPage(perPage, 1);\n\t\tif (options?.select !== undefined) {\n\t\t\tconst document = buildMediaPageDocument(\n\t\t\t\t\"SelectedAnimeByTitle\",\n\t\t\t\t\"($title: String, $page: Int, $perPage: Int)\",\n\t\t\t\t[\"search: $title\", \"type: ANIME\"],\n\t\t\t\tresolvePageSelection<TSelect>(options.select, \"media\"),\n\t\t\t);\n\t\t\treturn this.selectedMediaPage<TSelect>(document, {\n\t\t\t\ttitle,\n\t\t\t\tpage,\n\t\t\t\tperPage: limit,\n\t\t\t});\n\t\t}\n\t\treturn this.client.GetAnimeByTitle({ title, page, perPage: limit });\n\t}\n\n\t/**\n\t * Retrieves a list of anime filtered by genre.\n\t * @param genre - The genre to filter by.\n\t * @param page - Optional page number. Defaults to 1.\n\t * @param perPage - Optional number of results per page. Defaults to 10.\n\t * @returns A promise resolving to the filtered anime list.\n\t */\n\tgetAnimeListByGenre(\n\t\tgenre: string,\n\t\tpage?: number,\n\t\tperPage?: number,\n\t): ReturnType<ANILISTSDK[\"GetAnimeListByGenre\"]>;\n\tgetAnimeListByGenre<TSelect extends MediaPageSelect>(\n\t\tgenre: string,\n\t\tpage: number,\n\t\tperPage: number,\n\t\toptions: { select: { page: TSelect } },\n\t): Promise<{ page: SelectedMediaPage<TSelect> | null }>;\n\tgetAnimeListByGenre<TSelect extends MediaPageSelect>(\n\t\tgenre: string,\n\t\tpage = 1,\n\t\tperPage = 10,\n\t\toptions?: { select: { page: TSelect } },\n\t):\n\t\t| ReturnType<ANILISTSDK[\"GetAnimeListByGenre\"]>\n\t\t| Promise<{ page: SelectedMediaPage<TSelect> | null }> {\n\t\tnormalizePerPage(perPage, 10);\n\t\tif (options?.select !== undefined) {\n\t\t\tconst document = buildMediaPageDocument(\n\t\t\t\t\"SelectedAnimeListByGenre\",\n\t\t\t\t\"($genre: String, $page: Int, $perPage: Int)\",\n\t\t\t\t[\"genre: $genre\", \"type: ANIME\"],\n\t\t\t\tresolvePageSelection<TSelect>(options.select, \"media\"),\n\t\t\t);\n\t\t\treturn this.selectedMediaPage<TSelect>(document, {\n\t\t\t\tgenre,\n\t\t\t\tpage,\n\t\t\t\tperPage,\n\t\t\t});\n\t\t}\n\t\treturn this.client.GetAnimeListByGenre({ genre, page, perPage });\n\t}\n\n\t/**\n\t * Browses anime with optional filters for genre, format, status, and season year.\n\t * @param filters - Optional filters to narrow the results.\n\t * @param page - Optional page number. Defaults to 1.\n\t * @param perPage - Optional number of results per page. Defaults to 10.\n\t * @returns A promise resolving to the filtered, paginated anime list with pageInfo.\n\t */\n\tbrowseAnime(\n\t\tfilters?: {\n\t\t\tgenre?: string;\n\t\t\tformat?: MediaFormat;\n\t\t\tstatus?: MediaStatus;\n\t\t\tseasonYear?: number;\n\t\t},\n\t\tpage?: number,\n\t\tperPage?: number,\n\t): Promise<GetAnimeBrowseQuery>;\n\tbrowseAnime<TSelect extends MediaPageSelect>(\n\t\tfilters: {\n\t\t\tgenre?: string;\n\t\t\tformat?: MediaFormat;\n\t\t\tstatus?: MediaStatus;\n\t\t\tseasonYear?: number;\n\t\t},\n\t\tpage: number,\n\t\tperPage: number,\n\t\toptions: { select: { page: TSelect } },\n\t): Promise<{ page: SelectedMediaPage<TSelect> | null }>;\n\tbrowseAnime<TSelect extends MediaPageSelect>(\n\t\tfilters: {\n\t\t\tgenre?: string;\n\t\t\tformat?: MediaFormat;\n\t\t\tstatus?: MediaStatus;\n\t\t\tseasonYear?: number;\n\t\t} = {},\n\t\tpage = 1,\n\t\tperPage = 10,\n\t\toptions?: { select: { page: TSelect } },\n\t):\n\t\t| Promise<GetAnimeBrowseQuery>\n\t\t| Promise<{ page: SelectedMediaPage<TSelect> | null }> {\n\t\tconst { genre, format, status, seasonYear } = filters;\n\t\tnormalizePerPage(perPage, 10);\n\t\tif (options?.select !== undefined) {\n\t\t\tconst document = buildMediaPageDocument(\n\t\t\t\t\"SelectedAnimeBrowse\",\n\t\t\t\t\"($genre: String, $format: MediaFormat, $status: MediaStatus, $seasonYear: Int, $page: Int, $perPage: Int)\",\n\t\t\t\t[\n\t\t\t\t\t\"genre: $genre\",\n\t\t\t\t\t\"format: $format\",\n\t\t\t\t\t\"status: $status\",\n\t\t\t\t\t\"seasonYear: $seasonYear\",\n\t\t\t\t\t\"type: ANIME\",\n\t\t\t\t\t\"sort: POPULARITY_DESC\",\n\t\t\t\t\t\"isAdult: false\",\n\t\t\t\t],\n\t\t\t\tresolvePageSelection<TSelect>(options.select, \"media\"),\n\t\t\t);\n\t\t\treturn this.selectedMediaPage<TSelect>(document, {\n\t\t\t\tgenre,\n\t\t\t\tformat,\n\t\t\t\tstatus,\n\t\t\t\tseasonYear,\n\t\t\t\tpage,\n\t\t\t\tperPage,\n\t\t\t});\n\t\t}\n\t\treturn this.client.GetAnimeBrowse({\n\t\t\tgenre,\n\t\t\tformat,\n\t\t\tstatus,\n\t\t\tseasonYear,\n\t\t\tpage,\n\t\t\tperPage,\n\t\t});\n\t}\n\n\t/**\n\t * Retrieves seasonal anime for a specific season and year.\n\t * @param season - The AniList media season to filter by.\n\t * @param seasonYear - The season year to filter by.\n\t * @param page - Optional page number. Defaults to AniList's server default.\n\t * @param perPage - Optional number of results per page. Defaults to AniList's server default.\n\t * @returns A promise resolving to the seasonal anime list with pageInfo.\n\t */\n\tgetSeasonalAnime(\n\t\tseason: MediaSeason,\n\t\tseasonYear: number,\n\t\tpage?: number,\n\t\tperPage?: number,\n\t): Promise<GetSeasonalAnimeQuery>;\n\tgetSeasonalAnime<TSelect extends MediaPageSelect>(\n\t\tseason: MediaSeason,\n\t\tseasonYear: number,\n\t\tpage: number,\n\t\tperPage: number,\n\t\toptions: { select: { page: TSelect } },\n\t): Promise<{ page: SelectedMediaPage<TSelect> | null }>;\n\tgetSeasonalAnime<TSelect extends MediaPageSelect>(\n\t\tseason: MediaSeason,\n\t\tseasonYear: number,\n\t\tpage?: number,\n\t\tperPage?: number,\n\t\toptions?: { select: { page: TSelect } },\n\t):\n\t\t| Promise<GetSeasonalAnimeQuery>\n\t\t| Promise<{ page: SelectedMediaPage<TSelect> | null }> {\n\t\tnormalizePerPage(perPage, 10);\n\t\tif (options?.select !== undefined) {\n\t\t\tconst document = buildMediaPageDocument(\n\t\t\t\t\"SelectedSeasonalAnime\",\n\t\t\t\t\"($season: MediaSeason, $seasonYear: Int, $page: Int, $perPage: Int)\",\n\t\t\t\t[\n\t\t\t\t\t\"season: $season\",\n\t\t\t\t\t\"seasonYear: $seasonYear\",\n\t\t\t\t\t\"type: ANIME\",\n\t\t\t\t\t\"sort: POPULARITY_DESC\",\n\t\t\t\t\t\"isAdult: false\",\n\t\t\t\t],\n\t\t\t\tresolvePageSelection<TSelect>(options.select, \"media\"),\n\t\t\t);\n\t\t\treturn this.selectedMediaPage<TSelect>(document, {\n\t\t\t\tseason,\n\t\t\t\tseasonYear,\n\t\t\t\tpage: page ?? 1,\n\t\t\t\tperPage: perPage ?? 10,\n\t\t\t});\n\t\t}\n\t\treturn this.client.GetSeasonalAnime({\n\t\t\tseason,\n\t\t\tseasonYear,\n\t\t\tpage,\n\t\t\tperPage,\n\t\t});\n\t}\n\n\t/**\n\t * Toggles the favorite status of an anime. Requires authentication.\n\t * @param animeId - The ID of the anime to toggle as favorite.\n\t * @returns A promise resolving to the result of the toggle mutation.\n\t */\n\ttoggleFavourite(animeId: number): Promise<ToggleFavoriteAnimeMutation>;\n\ttoggleFavourite<TSelect extends FavouritesSelect>(\n\t\tanimeId: number,\n\t\toptions: RootSelectionOption<\"favorites\", TSelect>,\n\t): Promise<{ favorites: SelectedFavourites<TSelect> | null }>;\n\ttoggleFavourite<TSelect extends FavouritesSelect>(\n\t\tanimeId: number,\n\t\toptions?: RootSelectionOption<\"favorites\", TSelect>,\n\t): unknown {\n\t\tif (options === undefined) return this.toggleFavorite(animeId);\n\t\treturn this.toggleFavorite(animeId, options);\n\t}\n\n\t/**\n\t * Toggles the favorite status of an anime. Requires authentication.\n\t * Alias for {@link toggleFavourite}.\n\t * @param animeId - The ID of the anime to toggle as favorite.\n\t * @returns A promise resolving to the result of the toggle mutation.\n\t */\n\ttoggleFavorite(animeId: number): Promise<ToggleFavoriteAnimeMutation>;\n\ttoggleFavorite<TSelect extends FavouritesSelect>(\n\t\tanimeId: number,\n\t\toptions: RootSelectionOption<\"favorites\", TSelect>,\n\t): Promise<{ favorites: SelectedFavourites<TSelect> | null }>;\n\ttoggleFavorite<TSelect extends FavouritesSelect>(\n\t\tanimeId: number,\n\t\toptions?: RootSelectionOption<\"favorites\", TSelect>,\n\t): unknown {\n\t\tassertPositiveInt(animeId, \"animeId\");\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"favorites\");\n\t\t\tconst document = buildToggleFavouriteDocument(select, \"animeId\");\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<\n\t\t\t\t\t{ ToggleFavourite: SelectedFavourites<TSelect> | null },\n\t\t\t\t\t{ id: number }\n\t\t\t\t>({ document, variables: { id: animeId } })\n\t\t\t\t.then((raw) => ({ favorites: raw.ToggleFavourite }));\n\t\t}\n\t\treturn this.client.ToggleFavoriteAnime({ animeId });\n\t}\n}\n","import type { ANILISTSDK } from \"../@types\";\nimport type { GraphQLClient } from \"../__generated__/anilist-sdk\";\nimport {\n\tbuildCharacterByIdDocument,\n\tbuildCharacterPageDocument,\n\tbuildToggleFavouriteDocument,\n} from \"../selections/builder\";\nimport type { RootSelectionOption } from \"../selections/options\";\nimport {\n\thasSelection,\n\tresolvePageSelection,\n\tresolveSelection,\n} from \"../selections/options\";\nimport type {\n\tCharacterPageSelect,\n\tCharacterSelect,\n\tFavouritesSelect,\n\tSelectedCharacter,\n\tSelectedCharacterPage,\n\tSelectedFavourites,\n} from \"../selections/types\";\nimport { assertPositiveInt, normalizePerPage } from \"./validation\";\n\n/**\n * Service class for interacting with AniList character-related queries.\n */\nexport class CharacterService {\n\tprivate client: ANILISTSDK;\n\tprivate graphQLClient: GraphQLClient | undefined;\n\n\t/**\n\t * Constructs a new CharacterService instance.\n\t * @param client - An instance of the AniList SDK client.\n\t * @param graphQLClient - Optional low-level GraphQL client for selected queries.\n\t */\n\tconstructor(client: ANILISTSDK, graphQLClient?: GraphQLClient) {\n\t\tthis.client = client;\n\t\tthis.graphQLClient = graphQLClient;\n\t}\n\n\t/**\n\t * Retrieves character information by character ID.\n\t * @param id - The unique ID of the character.\n\t * @returns A promise resolving to the character data.\n\t */\n\tgetCharacterById(id: number): ReturnType<ANILISTSDK[\"GetCharacterById\"]>;\n\tgetCharacterById<TSelect extends CharacterSelect>(\n\t\tid: number,\n\t\toptions: RootSelectionOption<\"character\", TSelect>,\n\t): Promise<{ character: SelectedCharacter<TSelect> | null }>;\n\tgetCharacterById<TSelect extends CharacterSelect>(\n\t\tid: number,\n\t\toptions?: RootSelectionOption<\"character\", TSelect>,\n\t): unknown {\n\t\tassertPositiveInt(id);\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"character\");\n\t\t\tconst document = buildCharacterByIdDocument(select);\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<\n\t\t\t\t\t{ Character: SelectedCharacter<TSelect> | null },\n\t\t\t\t\t{ id: number }\n\t\t\t\t>({ document, variables: { id } })\n\t\t\t\t.then((raw) => ({ character: raw.Character }));\n\t\t}\n\t\treturn this.client.GetCharacterById({ id });\n\t}\n\n\t/**\n\t * Retrieves a list of characters whose birthdays are today.\n\t * @param page - Optional page number for pagination. Defaults to 1.\n\t * @param perPage - Optional number of characters per page. Defaults to 25.\n\t * @returns A promise resolving to the list of today's birthday characters.\n\t */\n\tgetCharactersBirthdayToday(\n\t\tpage?: number,\n\t\tperPage?: number,\n\t): ReturnType<ANILISTSDK[\"CharactersBirthdayToday\"]>;\n\tgetCharactersBirthdayToday<TSelect extends CharacterPageSelect>(\n\t\tpage: number,\n\t\tperPage: number,\n\t\toptions: { select: { page: TSelect } },\n\t): Promise<{ page: SelectedCharacterPage<TSelect> | null }>;\n\tgetCharactersBirthdayToday<TSelect extends CharacterPageSelect>(\n\t\tpage = 1,\n\t\tperPage = 25,\n\t\toptions?: { select: { page: TSelect } },\n\t):\n\t\t| ReturnType<ANILISTSDK[\"CharactersBirthdayToday\"]>\n\t\t| Promise<{ page: SelectedCharacterPage<TSelect> | null }> {\n\t\tnormalizePerPage(perPage, 25);\n\t\tif (options?.select !== undefined) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst document = buildCharacterPageDocument(\n\t\t\t\t\"SelectedCharactersBirthdayToday\",\n\t\t\t\t\"($page: Int, $perPage: Int)\",\n\t\t\t\t[\"isBirthday: true\"],\n\t\t\t\tresolvePageSelection<TSelect>(options.select, \"characters\"),\n\t\t\t);\n\t\t\tconst selected: Promise<{ page: SelectedCharacterPage<TSelect> | null }> =\n\t\t\t\tthis.graphQLClient\n\t\t\t\t\t.request<\n\t\t\t\t\t\t{ Page: SelectedCharacterPage<TSelect> | null },\n\t\t\t\t\t\t{ page: number; perPage: number }\n\t\t\t\t\t>({ document, variables: { page, perPage } })\n\t\t\t\t\t.then((raw) => ({ page: raw.Page }));\n\t\t\treturn selected;\n\t\t}\n\t\treturn this.client.CharactersBirthdayToday({ page, perPage });\n\t}\n\n\t/**\n\t * Toggles the favorite status of a character.\n\t * @param characterId - The ID of the character to toggle as favorite.\n\t * @returns A promise resolving to the result of the toggle mutation.\n\t */\n\ttoggleFavoriteCharacter(\n\t\tcharacterId: number,\n\t): ReturnType<ANILISTSDK[\"ToggleFavoriteCharacter\"]>;\n\ttoggleFavoriteCharacter<TSelect extends FavouritesSelect>(\n\t\tcharacterId: number,\n\t\toptions: RootSelectionOption<\"favorites\", TSelect>,\n\t): Promise<{ favorites: SelectedFavourites<TSelect> | null }>;\n\ttoggleFavoriteCharacter<TSelect extends FavouritesSelect>(\n\t\tcharacterId: number,\n\t\toptions?: RootSelectionOption<\"favorites\", TSelect>,\n\t): unknown {\n\t\tassertPositiveInt(characterId, \"characterId\");\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"favorites\");\n\t\t\tconst document = buildToggleFavouriteDocument(select, \"characterId\");\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<\n\t\t\t\t\t{ ToggleFavourite: SelectedFavourites<TSelect> | null },\n\t\t\t\t\t{ id: number }\n\t\t\t\t>({ document, variables: { id: characterId } })\n\t\t\t\t.then((raw) => ({ favorites: raw.ToggleFavourite }));\n\t\t}\n\t\treturn this.client.ToggleFavoriteCharacter({ charID: characterId });\n\t}\n}\n","import type { GraphQLClient } from \"../__generated__/anilist-sdk\";\nimport type { AnilistRequestOptions } from \"../client\";\n\n/**\n * A GraphQL document accepted by the low-level client: a raw document string\n * or any object with a `toString()` implementation, such as codegen\n * `TypedDocumentString` values.\n */\nexport type GraphQLDocument = string | { toString(): string };\n\n/**\n * Low-level GraphQL access for AniList features that do not yet have a\n * dedicated convenience method.\n */\nexport class GraphQLService {\n\tprivate client: GraphQLClient;\n\n\tconstructor(client: GraphQLClient) {\n\t\tthis.client = client;\n\t}\n\n\t/**\n\t * Executes an arbitrary AniList GraphQL operation.\n\t * @param document - GraphQL query or mutation document, or a typed document.\n\t * @param variables - Optional operation variables.\n\t * @param options - Optional api-core request controls.\n\t * @returns A promise resolving to the typed GraphQL response data.\n\t */\n\trequest<TData = unknown, TVariables extends object = Record<string, never>>(\n\t\tdocument: GraphQLDocument,\n\t\tvariables?: TVariables,\n\t\toptions?: AnilistRequestOptions,\n\t) {\n\t\treturn this.client.request<TData, TVariables>({\n\t\t\tdocument,\n\t\t\tvariables,\n\t\t\t...options,\n\t\t});\n\t}\n}\n","import type { ANILISTSDK } from \"../@types\";\nimport type { MediaFormat, MediaStatus } from \"../__generated__/anilist-schema\";\nimport type {\n\tGetMangaBrowseQuery,\n\tGetMangaByTitleQuery,\n\tGetMangaCharactersQuery,\n\tGetMangaListByGenreQuery,\n\tGetMangaPopularQuery,\n\tGetMangaRecommendationsQuery,\n\tGetMangaRelationsQuery,\n\tGetMangaStaffQuery,\n\tGetMangaTrendingQuery,\n\tGraphQLClient,\n\tToggleFavoriteMangaMutation,\n} from \"../__generated__/anilist-sdk\";\nimport {\n\tbuildMangaByIdDocument,\n\tbuildMangaSearchDocument,\n\tbuildMediaPageDocument,\n\tbuildToggleFavouriteDocument,\n} from \"../selections/builder\";\nimport type { RootSelectionOption } from \"../selections/options\";\nimport {\n\thasSelection,\n\tresolvePageSelection,\n\tresolveSelection,\n} from \"../selections/options\";\nimport type {\n\tFavouritesSelect,\n\tMediaPageSelect,\n\tMediaSelect,\n\tSelectedFavourites,\n\tSelectedMedia,\n\tSelectedMediaPage,\n} from \"../selections/types\";\nimport { assertPositiveInt, normalizePerPage } from \"./validation\";\n\n/**\n * Service class for interacting with AniList manga-related queries.\n */\nexport class MangaService {\n\tprivate client: ANILISTSDK;\n\tprivate graphQLClient: GraphQLClient | undefined;\n\n\t/**\n\t * Constructs a new MangaService instance.\n\t * @param client - An instance of the AniList SDK client.\n\t * @param graphQLClient - Optional low-level GraphQL client for selected queries.\n\t */\n\tconstructor(client: ANILISTSDK, graphQLClient?: GraphQLClient) {\n\t\tthis.client = client;\n\t\tthis.graphQLClient = graphQLClient;\n\t}\n\n\tprivate selectedMedia<TSelect extends MediaSelect>(\n\t\tselect: TSelect,\n\t\tvariables: { id: number },\n\t): Promise<{ Media: SelectedMedia<TSelect> | null }> {\n\t\tif (!this.graphQLClient) {\n\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t}\n\t\tconst document = buildMangaByIdDocument(select);\n\t\treturn this.graphQLClient.request<\n\t\t\t{ Media: SelectedMedia<TSelect> | null },\n\t\t\t{ id: number }\n\t\t>({ document, variables });\n\t}\n\n\tprivate selectedMediaPage<TSelect extends MediaPageSelect>(\n\t\tdocument: string,\n\t\tvariables: Record<string, unknown>,\n\t): Promise<{ page: SelectedMediaPage<TSelect> | null }> {\n\t\tif (!this.graphQLClient) {\n\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t}\n\t\treturn this.graphQLClient\n\t\t\t.request<\n\t\t\t\t{ Page: SelectedMediaPage<TSelect> | null },\n\t\t\t\tRecord<string, unknown>\n\t\t\t>({ document, variables })\n\t\t\t.then((raw) => ({ page: raw.Page }));\n\t}\n\n\t/**\n\t * Retrieves manga details by ID.\n\t * When `options.select` is provided, only the selected fields are returned.\n\t * @param id - The unique ID of the manga.\n\t */\n\tgetMangaById(id: number): ReturnType<ANILISTSDK[\"GetMangaById\"]>;\n\tgetMangaById<TSelect extends MediaSelect>(\n\t\tid: number,\n\t\toptions: RootSelectionOption<\"media\", TSelect>,\n\t): Promise<{ media: SelectedMedia<TSelect> | null }>;\n\tgetMangaById<TSelect extends MediaSelect>(\n\t\tid: number,\n\t\toptions?: RootSelectionOption<\"media\", TSelect>,\n\t): unknown {\n\t\tassertPositiveInt(id);\n\t\tif (hasSelection(options)) {\n\t\t\tconst select = resolveSelection(options, \"media\");\n\t\t\treturn this.selectedMedia(select, { id }).then((raw) => ({\n\t\t\t\tmedia: raw.Media,\n\t\t\t}));\n\t\t}\n\t\treturn this.client.GetMangaById({ id });\n\t}\n\n\t/**\n\t * Retrieves manga by title.\n\t * @param title - The title of the manga.\n\t * @returns A promise resolving to the matching manga entry.\n\t */\n\tgetMangaByTitle(\n\t\ttitle: string,\n\t\tpage?: number,\n\t\tperPage?: number,\n\t): Promise<GetMangaByTitleQuery>;\n\tgetMangaByTitle<TSelect extends MediaPageSelect>(\n\t\ttitle: string,\n\t\tpage: number,\n\t\tperPage: number,\n\t\toptions: { select: { page: TSelect } },\n\t): Promise<{ page: SelectedMediaPage<TSelect> | null }>;\n\tgetMangaByTitle<TSelect extends MediaPageSelect>(\n\t\ttitle: string,\n\t\tpage = 1,\n\t\tperPage = 1,\n\t\toptions?: { select: { page: TSelect } },\n\t):\n\t\t| Promise<GetMangaByTitleQuery>\n\t\t| Promise<{ page: SelectedMediaPage<TSelect> | null }> {\n\t\tassertPositiveInt(page, \"page\");\n\t\tconst limit = normalizePerPage(perPage, 1);\n\t\tif (options?.select !== undefined) {\n\t\t\tconst document = buildMediaPageDocument(\n\t\t\t\t\"SelectedMangaByTitle\",\n\t\t\t\t\"($title: String, $page: Int, $perPage: Int)\",\n\t\t\t\t[\"search: $title\", \"type: MANGA\"],\n\t\t\t\tresolvePageSelection<TSelect>(options.select, \"media\"),\n\t\t\t);\n\t\t\treturn this.selectedMediaPage<TSelect>(document, {\n\t\t\t\ttitle,\n\t\t\t\tpage,\n\t\t\t\tperPage: limit,\n\t\t\t});\n\t\t}\n\t\treturn this.client.GetMangaByTitle({ title, page, perPage: limit });\n\t}\n\n\t/**\n\t * Searches for manga by title or keyword.\n\t * When `options.select` is provided, only the selected fields are returned.\n\t * @param search - The search query string.\n\t * @param page - Optional page number. Defaults to 1.\n\t * @param perPage - Optional number of results per page. Defaults to 10.\n\t */\n\tgetMangaBySearch(\n\t\tsearch: string,\n\t\tpage?: number,\n\t\tperPage?: number,\n\t): ReturnType<ANILISTSDK[\"SearchManga\"]>;\n\tgetMangaBySearch<TSelect extends MediaPageSelect>(\n\t\tsearch: string,\n\t\tpage: number,\n\t\tperPage: number,\n\t\toptions: { select: { page: TSelect } },\n\t): Promise<{ page: SelectedMediaPage<TSelect> | null }>;\n\tgetMangaBySearch<TSelect extends MediaPageSelect>(\n\t\tsearch: string,\n\t\tpage = 1,\n\t\tperPage = 10,\n\t\toptions?: { select: { page: TSelect } },\n\t):\n\t\t| ReturnType<ANILISTSDK[\"SearchManga\"]>\n\t\t| Promise<{ page: SelectedMediaPage<TSelect> | null }> {\n\t\tnormalizePerPage(perPage, 10);\n\t\tif (options?.select !== undefined) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst document = buildMangaSearchDocument(\n\t\t\t\tresolvePageSelection<TSelect>(options.select, \"media\"),\n\t\t\t);\n\t\t\tconst p: Promise<{ page: SelectedMediaPage<TSelect> | null }> =\n\t\t\t\tthis.graphQLClient\n\t\t\t\t\t.request<\n\t\t\t\t\t\t{ Page: SelectedMediaPage<TSelect> | null },\n\t\t\t\t\t\t{ query: string; page: number; perPage: number }\n\t\t\t\t\t>({ document, variables: { query: search, page, perPage } })\n\t\t\t\t\t.then((raw) => ({ page: raw.Page }));\n\t\t\treturn p;\n\t\t}\n\t\treturn this.client.SearchManga({ query: search, page, perPage });\n\t}\n\n\t/**\n\t * Retrieves characters associated with a manga.\n\t * @param mediaId - The ID of the manga.\n\t * @returns A promise resolving to the list of characters.\n\t */\n\tgetMangaCharacters(mediaId: number): Promise<GetMangaCharactersQuery>;\n\tgetMangaCharacters<TSelect extends MediaSelect>(\n\t\tmediaId: number,\n\t\toptions: RootSelectionOption<\"media\", TSelect>,\n\t): Promise<{ media: SelectedMedia<TSelect> | null }>;\n\tgetMangaCharacters<TSelect extends MediaSelect>(\n\t\tmediaId: number,\n\t\toptions?: RootSelectionOption<\"media\", TSelect>,\n\t): unknown {\n\t\tassertPositiveInt(mediaId, \"mediaId\");\n\t\tif (hasSelection(options)) {\n\t\t\tconst select = resolveSelection(options, \"media\");\n\t\t\treturn this.selectedMedia(select, {\n\t\t\t\tid: mediaId,\n\t\t\t}).then((raw) => ({ media: raw.Media }));\n\t\t}\n\t\treturn this.client.GetMangaCharacters({ id: mediaId });\n\t}\n\n\t/**\n\t * Retrieves manga entries filtered by genre.\n\t * @param genre - The genre to filter by.\n\t * @param page - Optional page number. Defaults to 1.\n\t * @param perPage - Optional number of results per page. Defaults to 10.\n\t * @returns A promise resolving to the list of manga in that genre.\n\t */\n\tgetMangaListByGenre(\n\t\tgenre: string,\n\t\tpage?: number,\n\t\tperPage?: number,\n\t): Promise<GetMangaListByGenreQuery>;\n\tgetMangaListByGenre<TSelect extends MediaPageSelect>(\n\t\tgenre: string,\n\t\tpage: number,\n\t\tperPage: number,\n\t\toptions: { select: { page: TSelect } },\n\t): Promise<{ page: SelectedMediaPage<TSelect> | null }>;\n\tgetMangaListByGenre<TSelect extends MediaPageSelect>(\n\t\tgenre: string,\n\t\tpage = 1,\n\t\tperPage = 10,\n\t\toptions?: { select: { page: TSelect } },\n\t):\n\t\t| Promise<GetMangaListByGenreQuery>\n\t\t| Promise<{ page: SelectedMediaPage<TSelect> | null }> {\n\t\tnormalizePerPage(perPage, 10);\n\t\tif (options?.select !== undefined) {\n\t\t\tconst document = buildMediaPageDocument(\n\t\t\t\t\"SelectedMangaListByGenre\",\n\t\t\t\t\"($genre: String, $page: Int, $perPage: Int)\",\n\t\t\t\t[\"genre: $genre\", \"type: MANGA\"],\n\t\t\t\tresolvePageSelection<TSelect>(options.select, \"media\"),\n\t\t\t);\n\t\t\treturn this.selectedMediaPage<TSelect>(document, {\n\t\t\t\tgenre,\n\t\t\t\tpage,\n\t\t\t\tperPage,\n\t\t\t});\n\t\t}\n\t\treturn this.client.GetMangaListByGenre({ genre, page, perPage });\n\t}\n\n\t/**\n\t * Retrieves manga recommendations based on a given manga.\n\t * @param mediaId - The ID of the manga to get recommendations for.\n\t * @returns A promise resolving to recommended manga.\n\t */\n\tgetMangaRecommendations(\n\t\tmediaId: number,\n\t): Promise<GetMangaRecommendationsQuery>;\n\tgetMangaRecommendations<TSelect extends MediaSelect>(\n\t\tmediaId: number,\n\t\toptions: RootSelectionOption<\"media\", TSelect>,\n\t): Promise<{ media: SelectedMedia<TSelect> | null }>;\n\tgetMangaRecommendations<TSelect extends MediaSelect>(\n\t\tmediaId: number,\n\t\toptions?: RootSelectionOption<\"media\", TSelect>,\n\t): unknown {\n\t\tassertPositiveInt(mediaId, \"mediaId\");\n\t\tif (hasSelection(options)) {\n\t\t\tconst select = resolveSelection(options, \"media\");\n\t\t\treturn this.selectedMedia(select, {\n\t\t\t\tid: mediaId,\n\t\t\t}).then((raw) => ({ media: raw.Media }));\n\t\t}\n\t\treturn this.client.GetMangaRecommendations({ id: mediaId });\n\t}\n\n\t/**\n\t * Retrieves related manga/media for a given manga.\n\t * @param mediaId - The ID of the manga.\n\t * @returns A promise resolving to related manga/media.\n\t */\n\tgetMangaRelations(mediaId: number): Promise<GetMangaRelationsQuery>;\n\tgetMangaRelations<TSelect extends MediaSelect>(\n\t\tmediaId: number,\n\t\toptions: RootSelectionOption<\"media\", TSelect>,\n\t): Promise<{ media: SelectedMedia<TSelect> | null }>;\n\tgetMangaRelations<TSelect extends MediaSelect>(\n\t\tmediaId: number,\n\t\toptions?: RootSelectionOption<\"media\", TSelect>,\n\t): unknown {\n\t\tassertPositiveInt(mediaId, \"mediaId\");\n\t\tif (hasSelection(options)) {\n\t\t\tconst select = resolveSelection(options, \"media\");\n\t\t\treturn this.selectedMedia(select, {\n\t\t\t\tid: mediaId,\n\t\t\t}).then((raw) => ({ media: raw.Media }));\n\t\t}\n\t\treturn this.client.GetMangaRelations({ id: mediaId });\n\t}\n\n\t/**\n\t * Retrieves staff associated with a given manga.\n\t * @param mediaId - The ID of the manga.\n\t * @returns A promise resolving to the staff list.\n\t */\n\tgetMangaStaff(mediaId: number): Promise<GetMangaStaffQuery>;\n\tgetMangaStaff<TSelect extends MediaSelect>(\n\t\tmediaId: number,\n\t\toptions: RootSelectionOption<\"media\", TSelect>,\n\t): Promise<{ media: SelectedMedia<TSelect> | null }>;\n\tgetMangaStaff<TSelect extends MediaSelect>(\n\t\tmediaId: number,\n\t\toptions?: RootSelectionOption<\"media\", TSelect>,\n\t): unknown {\n\t\tassertPositiveInt(mediaId, \"mediaId\");\n\t\tif (hasSelection(options)) {\n\t\t\tconst select = resolveSelection(options, \"media\");\n\t\t\treturn this.selectedMedia(select, {\n\t\t\t\tid: mediaId,\n\t\t\t}).then((raw) => ({ media: raw.Media }));\n\t\t}\n\t\treturn this.client.GetMangaStaff({ id: mediaId });\n\t}\n\n\t/**\n\t * Browses manga with optional filters for genre, format, status, and start\n\t * date. AniList has no seasonal manga, so browse is the manga counterpart to\n\t * `anime.browseAnime`.\n\t * When `options.select` is provided, only the selected fields are returned.\n\t * @param filters - Optional filters to narrow the results.\n\t * @param page - Optional page number. Defaults to 1.\n\t * @param perPage - Optional number of results per page. Defaults to 10.\n\t * @returns A promise resolving to the filtered, paginated manga list.\n\t */\n\tbrowseManga(\n\t\tfilters?: {\n\t\t\tgenre?: string;\n\t\t\tformat?: MediaFormat;\n\t\t\tstatus?: MediaStatus;\n\t\t\tstartDate?: number;\n\t\t},\n\t\tpage?: number,\n\t\tperPage?: number,\n\t): Promise<GetMangaBrowseQuery>;\n\tbrowseManga<TSelect extends MediaPageSelect>(\n\t\tfilters: {\n\t\t\tgenre?: string;\n\t\t\tformat?: MediaFormat;\n\t\t\tstatus?: MediaStatus;\n\t\t\tstartDate?: number;\n\t\t},\n\t\tpage: number,\n\t\tperPage: number,\n\t\toptions: { select: { page: TSelect } },\n\t): Promise<{ page: SelectedMediaPage<TSelect> | null }>;\n\tbrowseManga<TSelect extends MediaPageSelect>(\n\t\tfilters: {\n\t\t\tgenre?: string;\n\t\t\tformat?: MediaFormat;\n\t\t\tstatus?: MediaStatus;\n\t\t\tstartDate?: number;\n\t\t} = {},\n\t\tpage = 1,\n\t\tperPage = 10,\n\t\toptions?: { select: { page: TSelect } },\n\t):\n\t\t| Promise<GetMangaBrowseQuery>\n\t\t| Promise<{ page: SelectedMediaPage<TSelect> | null }> {\n\t\tconst { genre, format, status, startDate } = filters;\n\t\tconst limit = normalizePerPage(perPage, 10);\n\t\tif (options?.select !== undefined) {\n\t\t\tconst document = buildMediaPageDocument(\n\t\t\t\t\"SelectedMangaBrowse\",\n\t\t\t\t\"($genre: String, $format: MediaFormat, $status: MediaStatus, $startDate: FuzzyDateInt, $page: Int, $perPage: Int)\",\n\t\t\t\t[\n\t\t\t\t\t\"genre: $genre\",\n\t\t\t\t\t\"format: $format\",\n\t\t\t\t\t\"status: $status\",\n\t\t\t\t\t\"startDate: $startDate\",\n\t\t\t\t\t\"type: MANGA\",\n\t\t\t\t\t\"sort: POPULARITY_DESC\",\n\t\t\t\t\t\"isAdult: false\",\n\t\t\t\t],\n\t\t\t\tresolvePageSelection<TSelect>(options.select, \"media\"),\n\t\t\t);\n\t\t\treturn this.selectedMediaPage<TSelect>(document, {\n\t\t\t\tgenre,\n\t\t\t\tformat,\n\t\t\t\tstatus,\n\t\t\t\tstartDate,\n\t\t\t\tpage,\n\t\t\t\tperPage: limit,\n\t\t\t});\n\t\t}\n\t\treturn this.client.GetMangaBrowse({\n\t\t\tgenre,\n\t\t\tformat,\n\t\t\tstatus,\n\t\t\tstartDate,\n\t\t\tpage,\n\t\t\tperPage: limit,\n\t\t});\n\t}\n\n\t/**\n\t * Retrieves trending manga entries.\n\t * @param page - Optional page number. Defaults to 1.\n\t * @param perPage - Optional number of entries per page. Defaults to 20.\n\t * @returns A promise resolving to trending manga.\n\t */\n\tgetMangaTrending(\n\t\tpage?: number,\n\t\tperPage?: number,\n\t): Promise<GetMangaTrendingQuery>;\n\tgetMangaTrending<TSelect extends MediaPageSelect>(\n\t\tpage: number,\n\t\tperPage: number,\n\t\toptions: { select: { page: TSelect } },\n\t): Promise<{ page: SelectedMediaPage<TSelect> | null }>;\n\tgetMangaTrending<TSelect extends MediaPageSelect>(\n\t\tpage = 1,\n\t\tperPage = 20,\n\t\toptions?: { select: { page: TSelect } },\n\t):\n\t\t| Promise<GetMangaTrendingQuery>\n\t\t| Promise<{ page: SelectedMediaPage<TSelect> | null }> {\n\t\tnormalizePerPage(perPage, 20);\n\t\tif (options?.select !== undefined) {\n\t\t\tconst document = buildMediaPageDocument(\n\t\t\t\t\"SelectedMangaTrending\",\n\t\t\t\t\"($page: Int, $perPage: Int)\",\n\t\t\t\t[\"type: MANGA\", \"sort: TRENDING_DESC\"],\n\t\t\t\tresolvePageSelection<TSelect>(options.select, \"media\"),\n\t\t\t);\n\t\t\treturn this.selectedMediaPage<TSelect>(document, { page, perPage });\n\t\t}\n\t\treturn this.client.GetMangaTrending({ page, perPage });\n\t}\n\n\t/**\n\t * Retrieves popular manga entries.\n\t * @param page - Optional page number. Defaults to 1.\n\t * @param perPage - Optional number of entries per page. Defaults to 20.\n\t * @returns A promise resolving to popular manga.\n\t */\n\tgetMangaPopular(\n\t\tpage?: number,\n\t\tperPage?: number,\n\t): Promise<GetMangaPopularQuery>;\n\tgetMangaPopular<TSelect extends MediaPageSelect>(\n\t\tpage: number,\n\t\tperPage: number,\n\t\toptions: { select: { page: TSelect } },\n\t): Promise<{ page: SelectedMediaPage<TSelect> | null }>;\n\tgetMangaPopular<TSelect extends MediaPageSelect>(\n\t\tpage = 1,\n\t\tperPage = 20,\n\t\toptions?: { select: { page: TSelect } },\n\t):\n\t\t| Promise<GetMangaPopularQuery>\n\t\t| Promise<{ page: SelectedMediaPage<TSelect> | null }> {\n\t\tnormalizePerPage(perPage, 20);\n\t\tif (options?.select !== undefined) {\n\t\t\tconst document = buildMediaPageDocument(\n\t\t\t\t\"SelectedMangaPopular\",\n\t\t\t\t\"($page: Int, $perPage: Int)\",\n\t\t\t\t[\"type: MANGA\", \"sort: POPULARITY_DESC\"],\n\t\t\t\tresolvePageSelection<TSelect>(options.select, \"media\"),\n\t\t\t);\n\t\t\treturn this.selectedMediaPage<TSelect>(document, { page, perPage });\n\t\t}\n\t\treturn this.client.GetMangaPopular({ page, perPage });\n\t}\n\n\t/**\n\t * Toggles the favorite status of a manga. Requires authentication.\n\t * @param mangaId - The ID of the manga to toggle as favorite.\n\t * @returns A promise resolving to the result of the toggle mutation.\n\t */\n\ttoggleFavourite(mangaId: number): Promise<ToggleFavoriteMangaMutation>;\n\ttoggleFavourite<TSelect extends FavouritesSelect>(\n\t\tmangaId: number,\n\t\toptions: RootSelectionOption<\"favorites\", TSelect>,\n\t): Promise<{ favorites: SelectedFavourites<TSelect> | null }>;\n\ttoggleFavourite<TSelect extends FavouritesSelect>(\n\t\tmangaId: number,\n\t\toptions?: RootSelectionOption<\"favorites\", TSelect>,\n\t): unknown {\n\t\tif (options === undefined) return this.toggleFavorite(mangaId);\n\t\treturn this.toggleFavorite(mangaId, options);\n\t}\n\n\t/**\n\t * Toggles the favorite status of a manga. Requires authentication.\n\t * Alias for {@link toggleFavourite}.\n\t * @param mangaId - The ID of the manga to toggle as favorite.\n\t * @returns A promise resolving to the result of the toggle mutation.\n\t */\n\ttoggleFavorite(mangaId: number): Promise<ToggleFavoriteMangaMutation>;\n\ttoggleFavorite<TSelect extends FavouritesSelect>(\n\t\tmangaId: number,\n\t\toptions: RootSelectionOption<\"favorites\", TSelect>,\n\t): Promise<{ favorites: SelectedFavourites<TSelect> | null }>;\n\ttoggleFavorite<TSelect extends FavouritesSelect>(\n\t\tmangaId: number,\n\t\toptions?: RootSelectionOption<\"favorites\", TSelect>,\n\t): unknown {\n\t\tassertPositiveInt(mangaId, \"mangaId\");\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"favorites\");\n\t\t\tconst document = buildToggleFavouriteDocument(select, \"mangaId\");\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<\n\t\t\t\t\t{ ToggleFavourite: SelectedFavourites<TSelect> | null },\n\t\t\t\t\t{ id: number }\n\t\t\t\t>({ document, variables: { id: mangaId } })\n\t\t\t\t.then((raw) => ({ favorites: raw.ToggleFavourite }));\n\t\t}\n\t\treturn this.client.ToggleFavoriteManga({ mangaId });\n\t}\n}\n","import type { MediaTypeNonEnum } from \"../@types\";\nimport { MediaType } from \"../__generated__/anilist-sdk\";\n\nexport const toMediaType = (mediaType: MediaTypeNonEnum): MediaType => {\n\tif (mediaType === \"ANIME\") return MediaType.Anime;\n\tif (mediaType === \"MANGA\") return MediaType.Manga;\n\tthrow new TypeError('mediaType must be \"ANIME\" or \"MANGA\".');\n};\n","import type { ANILISTSDK, MediaTypeNonEnum } from \"../@types\";\nimport type {\n\tDeleteMediaListEntryMutation,\n\tFuzzyDateInput,\n\tGraphQLClient,\n\tMediaListStatus,\n\tSaveMediaListEntryMutation,\n\tSaveMediaListEntryMutationVariables,\n\tUpdateMediaListEntriesMutationVariables,\n} from \"../__generated__/anilist-sdk\";\nimport {\n\tbuildDeleteCustomListDocument,\n\tbuildDeleteMediaListEntryDocument,\n\tbuildMediaListByIdDocument,\n\tbuildMediaListCollectionByUserDocument,\n\tbuildSaveMediaListEntryDocument,\n\tbuildUpdateMediaListEntriesDocument,\n} from \"../selections/builder\";\nimport type { RootSelectionOption } from \"../selections/options\";\nimport { hasSelection, resolveSelection } from \"../selections/options\";\nimport type {\n\tDeletedSelect,\n\tMediaListCollectionSelect,\n\tMediaListSelect,\n\tSelectedDeleted,\n\tSelectedMediaList,\n\tSelectedMediaListCollection,\n} from \"../selections/types\";\nimport { toMediaType } from \"./mediaType\";\nimport { assertOptionalStatus, assertPositiveInt } from \"./validation\";\n\ntype SaveMediaListEntryFields = {\n\tstatus?: MediaListStatus | null;\n\tscore?: number | null;\n\tscoreRaw?: number | null;\n\tprogress?: number | null;\n\tprogressVolumes?: number | null;\n\trepeat?: number | null;\n\tprivate?: boolean | null;\n\tnotes?: string | null;\n\tstartedAt?: FuzzyDateInput | null;\n\tcompletedAt?: FuzzyDateInput | null;\n\tadvancedScores?: Array<number | null> | null;\n\tcustomLists?: Array<string | null> | null;\n\thiddenFromStatusLists?: boolean | null;\n\tpriority?: number | null;\n};\n\nexport type SaveMediaListEntryInput = SaveMediaListEntryFields &\n\t(\n\t\t| { mediaId: number; id?: number | null }\n\t\t| { id: number; mediaId?: number | null }\n\t);\n\nexport type UpdateMediaListEntriesInput = Omit<\n\tSaveMediaListEntryFields,\n\t\"customLists\"\n> & {\n\tids: number[];\n};\n\n/**\n * Service class for retrieving and managing media lists from AniList.\n */\nexport class MediaListService {\n\tprivate client: ANILISTSDK;\n\tprivate graphQLClient: GraphQLClient | undefined;\n\n\t/**\n\t * Constructs a new MediaListService instance.\n\t * @param client - An instance of the AniList SDK client.\n\t * @param graphQLClient - Optional low-level GraphQL client for selected queries.\n\t */\n\tconstructor(client: ANILISTSDK, graphQLClient?: GraphQLClient) {\n\t\tthis.client = client;\n\t\tthis.graphQLClient = graphQLClient;\n\t}\n\n\t/**\n\t * Retrieves a user's media list by ID.\n\t * @param id - The ID of the list to retrieve.\n\t * @returns A promise resolving to the media list.\n\t */\n\tgetMediaList(id: number): ReturnType<ANILISTSDK[\"GetMediaList\"]>;\n\tgetMediaList<TSelect extends MediaListSelect>(\n\t\tid: number,\n\t\toptions: RootSelectionOption<\"mediaList\", TSelect>,\n\t): Promise<{ mediaList: SelectedMediaList<TSelect> | null }>;\n\tgetMediaList<TSelect extends MediaListSelect>(\n\t\tid: number,\n\t\toptions?: RootSelectionOption<\"mediaList\", TSelect>,\n\t): unknown {\n\t\tassertPositiveInt(id);\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"mediaList\");\n\t\t\tconst document = buildMediaListByIdDocument(select);\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<\n\t\t\t\t\t{ MediaList: SelectedMediaList<TSelect> | null },\n\t\t\t\t\t{ id: number }\n\t\t\t\t>({ document, variables: { id } })\n\t\t\t\t.then((raw) => ({ mediaList: raw.MediaList }));\n\t\t}\n\t\treturn this.client.GetMediaList({ id });\n\t}\n\n\t/**\n\t * Retrieves a media list using the user ID.\n\t * @param userId - The ID of the user whose media list to retrieve.\n\t * @param mediaType - The media type (\"ANIME\" or \"MANGA\").\n\t * @param status - Optional media list status filter.\n\t * @returns A promise resolving to the user's media list.\n\t */\n\tgetMediaListByUser(\n\t\tuserId: number,\n\t\tmediaType: MediaTypeNonEnum,\n\t\tstatus?: MediaListStatus,\n\t): ReturnType<ANILISTSDK[\"GetMediaListByUser\"]>;\n\tgetMediaListByUser<TSelect extends MediaListCollectionSelect>(\n\t\tuserId: number,\n\t\tmediaType: MediaTypeNonEnum,\n\t\tstatus: MediaListStatus | undefined,\n\t\toptions: RootSelectionOption<\"mediaListCollection\", TSelect>,\n\t): Promise<{\n\t\tmediaListCollection: SelectedMediaListCollection<TSelect> | null;\n\t}>;\n\tgetMediaListByUser<TSelect extends MediaListCollectionSelect>(\n\t\tuserId: number,\n\t\tmediaType: MediaTypeNonEnum,\n\t\tstatus?: MediaListStatus,\n\t\toptions?: RootSelectionOption<\"mediaListCollection\", TSelect>,\n\t): unknown {\n\t\tassertOptionalStatus(status);\n\t\tassertPositiveInt(userId, \"userId\");\n\t\tconst normalizedType = toMediaType(mediaType);\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"mediaListCollection\");\n\t\t\tconst document = buildMediaListCollectionByUserDocument(select, \"id\");\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<\n\t\t\t\t\t{ MediaListCollection: SelectedMediaListCollection<TSelect> | null },\n\t\t\t\t\t{\n\t\t\t\t\t\tuserId: number;\n\t\t\t\t\t\tmediaType: ReturnType<typeof toMediaType>;\n\t\t\t\t\t\tstatus?: MediaListStatus;\n\t\t\t\t\t}\n\t\t\t\t>({\n\t\t\t\t\tdocument,\n\t\t\t\t\tvariables: {\n\t\t\t\t\t\tuserId,\n\t\t\t\t\t\tmediaType: normalizedType,\n\t\t\t\t\t\t...(status !== undefined ? { status } : {}),\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\t.then((raw) => ({ mediaListCollection: raw.MediaListCollection }));\n\t\t}\n\t\treturn this.client.GetMediaListByUser({\n\t\t\tuserId,\n\t\t\tmediaType: normalizedType,\n\t\t\tstatus,\n\t\t});\n\t}\n\n\t/**\n\t * Retrieves a media list using the username.\n\t * @param userName - The username of the user whose media list to retrieve.\n\t * @param mediaType - The media type (\"ANIME\" or \"MANGA\").\n\t * @param status - Optional media list status filter.\n\t * @returns A promise resolving to the user's media list.\n\t */\n\tgetMediaListByUsername(\n\t\tuserName: string,\n\t\tmediaType: MediaTypeNonEnum,\n\t\tstatus?: MediaListStatus,\n\t): ReturnType<ANILISTSDK[\"GetMediaListByUserByUsername\"]>;\n\tgetMediaListByUsername<TSelect extends MediaListCollectionSelect>(\n\t\tuserName: string,\n\t\tmediaType: MediaTypeNonEnum,\n\t\tstatus: MediaListStatus | undefined,\n\t\toptions: RootSelectionOption<\"mediaListCollection\", TSelect>,\n\t): Promise<{\n\t\tmediaListCollection: SelectedMediaListCollection<TSelect> | null;\n\t}>;\n\tgetMediaListByUsername<TSelect extends MediaListCollectionSelect>(\n\t\tuserName: string,\n\t\tmediaType: MediaTypeNonEnum,\n\t\tstatus?: MediaListStatus,\n\t\toptions?: RootSelectionOption<\"mediaListCollection\", TSelect>,\n\t): unknown {\n\t\tassertOptionalStatus(status);\n\t\tconst normalizedType = toMediaType(mediaType);\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"mediaListCollection\");\n\t\t\tconst document = buildMediaListCollectionByUserDocument(\n\t\t\t\tselect,\n\t\t\t\t\"username\",\n\t\t\t);\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<\n\t\t\t\t\t{ MediaListCollection: SelectedMediaListCollection<TSelect> | null },\n\t\t\t\t\t{\n\t\t\t\t\t\tuserName: string;\n\t\t\t\t\t\tmediaType: ReturnType<typeof toMediaType>;\n\t\t\t\t\t\tstatus?: MediaListStatus;\n\t\t\t\t\t}\n\t\t\t\t>({\n\t\t\t\t\tdocument,\n\t\t\t\t\tvariables: {\n\t\t\t\t\t\tuserName,\n\t\t\t\t\t\tmediaType: normalizedType,\n\t\t\t\t\t\t...(status !== undefined ? { status } : {}),\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\t.then((raw) => ({ mediaListCollection: raw.MediaListCollection }));\n\t\t}\n\t\treturn this.client.GetMediaListByUserByUsername({\n\t\t\tuserName,\n\t\t\tmediaType: normalizedType,\n\t\t\tstatus,\n\t\t});\n\t}\n\n\t/**\n\t * Saves (creates or updates) a media list entry. Requires authentication.\n\t * @param variables - The entry fields to save (mediaId required; all others optional).\n\t * @returns A promise resolving to the saved media list entry.\n\t */\n\tsaveEntry(\n\t\tvariables: SaveMediaListEntryInput,\n\t): Promise<SaveMediaListEntryMutation>;\n\tsaveEntry<TSelect extends MediaListSelect>(\n\t\tvariables: SaveMediaListEntryInput,\n\t\toptions: RootSelectionOption<\"mediaList\", TSelect>,\n\t): Promise<{ mediaList: SelectedMediaList<TSelect> | null }>;\n\tsaveEntry<TSelect extends MediaListSelect>(\n\t\tvariables: SaveMediaListEntryInput,\n\t\toptions?: RootSelectionOption<\"mediaList\", TSelect>,\n\t): unknown {\n\t\tif (variables.mediaId == null && variables.id == null) {\n\t\t\tthrow new TypeError(\"saveEntry requires either mediaId or id.\");\n\t\t}\n\t\tif (variables.id != null) assertPositiveInt(variables.id);\n\t\tif (variables.mediaId != null) {\n\t\t\tassertPositiveInt(variables.mediaId, \"mediaId\");\n\t\t}\n\t\tconst mutationVariables: SaveMediaListEntryMutationVariables = {\n\t\t\tadvancedScores: variables.advancedScores,\n\t\t\tcompletedAt: variables.completedAt,\n\t\t\tcustomLists: variables.customLists,\n\t\t\thiddenFromStatusLists: variables.hiddenFromStatusLists,\n\t\t\tid: variables.id,\n\t\t\tmediaId: variables.mediaId,\n\t\t\tnotes: variables.notes,\n\t\t\tprivate: variables.private,\n\t\t\tpriority: variables.priority,\n\t\t\tprogress: variables.progress,\n\t\t\tprogressVolumes: variables.progressVolumes,\n\t\t\trepeat: variables.repeat,\n\t\t\tscore: variables.score,\n\t\t\tscoreRaw: variables.scoreRaw,\n\t\t\tstartedAt: variables.startedAt,\n\t\t\tstatus: variables.status,\n\t\t};\n\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"mediaList\");\n\t\t\tconst document = buildSaveMediaListEntryDocument(select);\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<\n\t\t\t\t\t{ SaveMediaListEntry: SelectedMediaList<TSelect> | null },\n\t\t\t\t\tSaveMediaListEntryMutationVariables\n\t\t\t\t>({ document, variables: mutationVariables })\n\t\t\t\t.then((raw) => ({ mediaList: raw.SaveMediaListEntry }));\n\t\t}\n\n\t\treturn this.client.SaveMediaListEntry(mutationVariables);\n\t}\n\n\t/**\n\t * Deletes a media list entry by its list entry ID. Requires authentication.\n\t * @param id - The ID of the media list entry to delete.\n\t * @returns A promise resolving to the deletion result.\n\t */\n\tdeleteEntry(id: number): Promise<DeleteMediaListEntryMutation>;\n\tdeleteEntry<TSelect extends DeletedSelect>(\n\t\tid: number,\n\t\toptions: RootSelectionOption<\"deleteMediaListEntry\", TSelect>,\n\t): Promise<{ deleteMediaListEntry: SelectedDeleted<TSelect> | null }>;\n\tdeleteEntry<TSelect extends DeletedSelect>(\n\t\tid: number,\n\t\toptions?: RootSelectionOption<\"deleteMediaListEntry\", TSelect>,\n\t): unknown {\n\t\tassertPositiveInt(id);\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"deleteMediaListEntry\");\n\t\t\tconst document = buildDeleteMediaListEntryDocument(select);\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<\n\t\t\t\t\t{ DeleteMediaListEntry: SelectedDeleted<TSelect> | null },\n\t\t\t\t\t{ id: number }\n\t\t\t\t>({ document, variables: { id } })\n\t\t\t\t.then((raw) => ({ deleteMediaListEntry: raw.DeleteMediaListEntry }));\n\t\t}\n\t\treturn this.client.DeleteMediaListEntry({ id });\n\t}\n\n\t/**\n\t * Updates the same fields on many media list entries at once. Requires authentication.\n\t * @param entries - The entry ids plus the fields to apply to every entry.\n\t * @returns A promise resolving to the updated media list entries.\n\t */\n\tupdateEntries(\n\t\tentries: UpdateMediaListEntriesInput,\n\t): ReturnType<ANILISTSDK[\"UpdateMediaListEntries\"]>;\n\tupdateEntries<TSelect extends MediaListSelect>(\n\t\tentries: UpdateMediaListEntriesInput,\n\t\toptions: RootSelectionOption<\"updateMediaListEntries\", TSelect>,\n\t): Promise<{\n\t\tupdateMediaListEntries: Array<SelectedMediaList<TSelect> | null> | null;\n\t}>;\n\tupdateEntries<TSelect extends MediaListSelect>(\n\t\tentries: UpdateMediaListEntriesInput,\n\t\toptions?: RootSelectionOption<\"updateMediaListEntries\", TSelect>,\n\t): unknown {\n\t\tif (entries.ids.length === 0) {\n\t\t\tthrow new TypeError(\"updateEntries requires at least one id.\");\n\t\t}\n\t\tfor (const entryId of entries.ids) assertPositiveInt(entryId, \"ids\");\n\t\tconst { ids, ...fields } = entries;\n\t\tconst mutationVariables: UpdateMediaListEntriesMutationVariables = {\n\t\t\tadvancedScores: fields.advancedScores,\n\t\t\tcompletedAt: fields.completedAt,\n\t\t\thiddenFromStatusLists: fields.hiddenFromStatusLists,\n\t\t\tids,\n\t\t\tnotes: fields.notes,\n\t\t\tpriority: fields.priority,\n\t\t\tprivate: fields.private,\n\t\t\tprogress: fields.progress,\n\t\t\tprogressVolumes: fields.progressVolumes,\n\t\t\trepeat: fields.repeat,\n\t\t\tscore: fields.score,\n\t\t\tscoreRaw: fields.scoreRaw,\n\t\t\tstartedAt: fields.startedAt,\n\t\t\tstatus: fields.status,\n\t\t};\n\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"updateMediaListEntries\");\n\t\t\tconst document = buildUpdateMediaListEntriesDocument(select);\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<\n\t\t\t\t\t{\n\t\t\t\t\t\tUpdateMediaListEntries: Array<SelectedMediaList<TSelect> | null> | null;\n\t\t\t\t\t},\n\t\t\t\t\tUpdateMediaListEntriesMutationVariables\n\t\t\t\t>({ document, variables: mutationVariables })\n\t\t\t\t.then((raw) => ({\n\t\t\t\t\tupdateMediaListEntries: raw.UpdateMediaListEntries,\n\t\t\t\t}));\n\t\t}\n\n\t\treturn this.client.UpdateMediaListEntries(mutationVariables);\n\t}\n\n\t/**\n\t * Deletes a custom list. Requires authentication.\n\t * @param customList - The name of the custom list to delete.\n\t * @param type - The media type the list belongs to (\"ANIME\" or \"MANGA\").\n\t * @returns A promise resolving to the deletion result.\n\t */\n\tdeleteCustomList(\n\t\tcustomList: string,\n\t\ttype: MediaTypeNonEnum,\n\t): ReturnType<ANILISTSDK[\"DeleteCustomList\"]>;\n\tdeleteCustomList<TSelect extends DeletedSelect>(\n\t\tcustomList: string,\n\t\ttype: MediaTypeNonEnum,\n\t\toptions: RootSelectionOption<\"deleteCustomList\", TSelect>,\n\t): Promise<{ deleteCustomList: SelectedDeleted<TSelect> | null }>;\n\tdeleteCustomList<TSelect extends DeletedSelect>(\n\t\tcustomList: string,\n\t\ttype: MediaTypeNonEnum,\n\t\toptions?: RootSelectionOption<\"deleteCustomList\", TSelect>,\n\t): unknown {\n\t\tconst normalizedType = toMediaType(type);\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"deleteCustomList\");\n\t\t\tconst document = buildDeleteCustomListDocument(select);\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<\n\t\t\t\t\t{ DeleteCustomList: SelectedDeleted<TSelect> | null },\n\t\t\t\t\t{ customList: string; type: ReturnType<typeof toMediaType> }\n\t\t\t\t>({ document, variables: { customList, type: normalizedType } })\n\t\t\t\t.then((raw) => ({ deleteCustomList: raw.DeleteCustomList }));\n\t\t}\n\t\treturn this.client.DeleteCustomList({\n\t\t\tcustomList,\n\t\t\ttype: normalizedType,\n\t\t});\n\t}\n}\n","import type { ANILISTSDK, MediaTypeNonEnum } from \"../@types\";\nimport type { Page } from \"../__generated__/anilist-schema\";\nimport type {\n\tGraphQLClient,\n\tMediaListStatus,\n\tRecommendationRating,\n\tReviewRating,\n\tSaveReviewMutationVariables,\n} from \"../__generated__/anilist-sdk\";\nimport {\n\tbuildAiringScheduleByIdDocument,\n\tbuildAiringSchedulePageDocument,\n\tbuildDeleteReviewDocument,\n\tbuildMediaByIdDocument,\n\tbuildMediaListCollectionByUserDocument,\n\tbuildMediaTagCollectionDocument,\n\tbuildRateReviewDocument,\n\tbuildRecommendationPageDocument,\n\tbuildReviewPageDocument,\n\tbuildSaveRecommendationDocument,\n\tbuildSaveReviewDocument,\n} from \"../selections/builder\";\nimport type { RootSelectionOption } from \"../selections/options\";\nimport {\n\thasSelection,\n\tresolvePageSelection,\n\tresolveSelection,\n} from \"../selections/options\";\nimport type {\n\tAiringSchedulePageSelect,\n\tAiringScheduleSelect,\n\tDeletedSelect,\n\tMediaListCollectionSelect,\n\tMediaSelect,\n\tMediaTagSelect,\n\tRecommendationPageSelect,\n\tRecommendationSelect,\n\tReviewPageSelect,\n\tReviewSelect,\n\tSelectedAiringSchedule,\n\tSelectedAiringSchedulePage,\n\tSelectedDeleted,\n\tSelectedFields,\n\tSelectedMedia,\n\tSelectedMediaListCollection,\n\tSelectedMediaTag,\n\tSelectedRecommendation,\n\tSelectedRecommendationPage,\n\tSelectedReview,\n\tSelectedReviewPage,\n} from \"../selections/types\";\nimport { toMediaType } from \"./mediaType\";\nimport {\n\tassertOptionalStatus,\n\tassertPositiveInt,\n\tnormalizePerPage,\n} from \"./validation\";\n\n/**\n * Fields accepted by {@link MediaService.saveReview}. Provide `id` to update\n * an existing review or `mediaId` to create one.\n */\nexport type SaveReviewInput = {\n\tid?: number | null;\n\tmediaId?: number | null;\n\tbody?: string | null;\n\tsummary?: string | null;\n\tscore?: number | null;\n\tprivate?: boolean | null;\n};\n\n/**\n * Service class responsible for interacting with the AniList API to retrieve media details.\n */\nexport class MediaService {\n\tprivate client: ANILISTSDK;\n\tprivate graphQLClient: GraphQLClient | undefined;\n\n\t/**\n\t * Creates an instance of the MediaService.\n\t * @param client - The AniList SDK client instance used to communicate with the AniList API.\n\t * @param graphQLClient - Optional low-level GraphQL client for selected queries.\n\t */\n\tconstructor(client: ANILISTSDK, graphQLClient?: GraphQLClient) {\n\t\tthis.client = client;\n\t\tthis.graphQLClient = graphQLClient;\n\t}\n\n\t/**\n\t * Fetches media details by its unique ID.\n\t * When `options.select` is provided, only the selected fields are returned.\n\t * @param id - The unique identifier for the media (e.g., an Anime or Manga).\n\t */\n\tgetMediaById(id: number): ReturnType<ANILISTSDK[\"GetMediaById\"]>;\n\tgetMediaById<TSelect extends MediaSelect>(\n\t\tid: number,\n\t\toptions: RootSelectionOption<\"media\", TSelect>,\n\t): Promise<{ media: SelectedMedia<TSelect> | null }>;\n\tgetMediaById<TSelect extends MediaSelect>(\n\t\tid: number,\n\t\toptions?: RootSelectionOption<\"media\", TSelect>,\n\t): unknown {\n\t\tassertPositiveInt(id);\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"media\");\n\t\t\tconst document = buildMediaByIdDocument(select);\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<{ Media: SelectedMedia<TSelect> | null }, { id: number }>({\n\t\t\t\t\tdocument,\n\t\t\t\t\tvariables: { id },\n\t\t\t\t})\n\t\t\t\t.then((raw) => ({ media: raw.Media }));\n\t\t}\n\t\treturn this.client.GetMediaById({ id });\n\t}\n\n\t/**\n\t * Retrieves a user's media list based on the media type (Anime or Manga).\n\t * @param userId - The unique ID of the user whose media list is being requested.\n\t * @param mediaType - The type of media list to fetch: either \"ANIME\" or \"MANGA\".\n\t * @param status - Optional media list status filter.\n\t * @returns A promise that resolves with the user's media list.\n\t */\n\tgetMediaList(\n\t\tuserId: number,\n\t\tmediaType: MediaTypeNonEnum,\n\t\tstatus?: MediaListStatus,\n\t): ReturnType<ANILISTSDK[\"GetMediaListByUser\"]>;\n\tgetMediaList<TSelect extends MediaListCollectionSelect>(\n\t\tuserId: number,\n\t\tmediaType: MediaTypeNonEnum,\n\t\tstatus: MediaListStatus | undefined,\n\t\toptions: RootSelectionOption<\"mediaListCollection\", TSelect>,\n\t): Promise<{\n\t\tmediaListCollection: SelectedMediaListCollection<TSelect> | null;\n\t}>;\n\tgetMediaList<TSelect extends MediaListCollectionSelect>(\n\t\tuserId: number,\n\t\tmediaType: MediaTypeNonEnum,\n\t\tstatus?: MediaListStatus,\n\t\toptions?: RootSelectionOption<\"mediaListCollection\", TSelect>,\n\t): unknown {\n\t\tassertOptionalStatus(status);\n\t\tassertPositiveInt(userId, \"userId\");\n\t\tconst normalizedType = toMediaType(mediaType);\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"mediaListCollection\");\n\t\t\tconst document = buildMediaListCollectionByUserDocument(select, \"id\");\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<\n\t\t\t\t\t{ MediaListCollection: SelectedMediaListCollection<TSelect> | null },\n\t\t\t\t\t{\n\t\t\t\t\t\tuserId: number;\n\t\t\t\t\t\tmediaType: ReturnType<typeof toMediaType>;\n\t\t\t\t\t\tstatus?: MediaListStatus;\n\t\t\t\t\t}\n\t\t\t\t>({\n\t\t\t\t\tdocument,\n\t\t\t\t\tvariables: {\n\t\t\t\t\t\tuserId,\n\t\t\t\t\t\tmediaType: normalizedType,\n\t\t\t\t\t\t...(status !== undefined ? { status } : {}),\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\t.then((raw) => ({ mediaListCollection: raw.MediaListCollection }));\n\t\t}\n\t\treturn this.client.GetMediaListByUser({\n\t\t\tmediaType: normalizedType,\n\t\t\tstatus,\n\t\t\tuserId,\n\t\t});\n\t}\n\n\t/**\n\t * Retrieves a user's media list by their username, filtered by media type (Anime or Manga).\n\t * @param userName - The username of the user whose media list is being requested.\n\t * @param mediaType - The type of media list to fetch: either \"ANIME\" or \"MANGA\".\n\t * @param status - Optional media list status filter.\n\t * @returns A promise that resolves with the user's media list.\n\t */\n\tgetMediaListByUsername(\n\t\tuserName: string,\n\t\tmediaType: MediaTypeNonEnum,\n\t\tstatus?: MediaListStatus,\n\t): ReturnType<ANILISTSDK[\"GetMediaListByUserByUsername\"]>;\n\tgetMediaListByUsername<TSelect extends MediaListCollectionSelect>(\n\t\tuserName: string,\n\t\tmediaType: MediaTypeNonEnum,\n\t\tstatus: MediaListStatus | undefined,\n\t\toptions: RootSelectionOption<\"mediaListCollection\", TSelect>,\n\t): Promise<{\n\t\tmediaListCollection: SelectedMediaListCollection<TSelect> | null;\n\t}>;\n\tgetMediaListByUsername<TSelect extends MediaListCollectionSelect>(\n\t\tuserName: string,\n\t\tmediaType: MediaTypeNonEnum,\n\t\tstatus?: MediaListStatus,\n\t\toptions?: RootSelectionOption<\"mediaListCollection\", TSelect>,\n\t): unknown {\n\t\tassertOptionalStatus(status);\n\t\tconst normalizedType = toMediaType(mediaType);\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"mediaListCollection\");\n\t\t\tconst document = buildMediaListCollectionByUserDocument(\n\t\t\t\tselect,\n\t\t\t\t\"username\",\n\t\t\t);\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<\n\t\t\t\t\t{ MediaListCollection: SelectedMediaListCollection<TSelect> | null },\n\t\t\t\t\t{\n\t\t\t\t\t\tuserName: string;\n\t\t\t\t\t\tmediaType: ReturnType<typeof toMediaType>;\n\t\t\t\t\t\tstatus?: MediaListStatus;\n\t\t\t\t\t}\n\t\t\t\t>({\n\t\t\t\t\tdocument,\n\t\t\t\t\tvariables: {\n\t\t\t\t\t\tuserName,\n\t\t\t\t\t\tmediaType: normalizedType,\n\t\t\t\t\t\t...(status !== undefined ? { status } : {}),\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\t.then((raw) => ({ mediaListCollection: raw.MediaListCollection }));\n\t\t}\n\t\treturn this.client.GetMediaListByUserByUsername({\n\t\t\tmediaType: normalizedType,\n\t\t\tstatus,\n\t\t\tuserName,\n\t\t});\n\t}\n\n\t/**\n\t * Retrieves the full list of AniList genres.\n\t * @returns A promise resolving to the genre names.\n\t */\n\tgetGenres(): ReturnType<ANILISTSDK[\"GetGenres\"]> {\n\t\treturn this.client.GetGenres();\n\t}\n\n\t/**\n\t * Retrieves the AniList media tag collection.\n\t * When `options.select` is provided, only the selected fields are returned.\n\t * @param status - Optional tag status filter.\n\t */\n\tgetMediaTags(status?: number): ReturnType<ANILISTSDK[\"GetMediaTags\"]>;\n\tgetMediaTags<TSelect extends MediaTagSelect>(\n\t\tstatus: number | undefined,\n\t\toptions: RootSelectionOption<\"mediaTagCollection\", TSelect>,\n\t): Promise<{\n\t\tmediaTagCollection: Array<SelectedMediaTag<TSelect> | null> | null;\n\t}>;\n\tgetMediaTags<TSelect extends MediaTagSelect>(\n\t\tstatus?: number,\n\t\toptions?: RootSelectionOption<\"mediaTagCollection\", TSelect>,\n\t): unknown {\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"mediaTagCollection\");\n\t\t\tconst document = buildMediaTagCollectionDocument(select);\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<\n\t\t\t\t\t{\n\t\t\t\t\t\tMediaTagCollection: Array<SelectedMediaTag<TSelect> | null> | null;\n\t\t\t\t\t},\n\t\t\t\t\t{ status?: number }\n\t\t\t\t>({ document, variables: { status } })\n\t\t\t\t.then((raw) => ({ mediaTagCollection: raw.MediaTagCollection }));\n\t\t}\n\t\treturn this.client.GetMediaTags({ status });\n\t}\n\n\t/**\n\t * Retrieves an airing schedule entry by its unique ID.\n\t * When `options.select` is provided, only the selected fields are returned.\n\t * @param id - The unique ID of the airing schedule entry.\n\t */\n\tgetAiringSchedule(id: number): ReturnType<ANILISTSDK[\"GetAiringSchedule\"]>;\n\tgetAiringSchedule<TSelect extends AiringScheduleSelect>(\n\t\tid: number,\n\t\toptions: RootSelectionOption<\"airingSchedule\", TSelect>,\n\t): Promise<{ airingSchedule: SelectedAiringSchedule<TSelect> | null }>;\n\tgetAiringSchedule<TSelect extends AiringScheduleSelect>(\n\t\tid: number,\n\t\toptions?: RootSelectionOption<\"airingSchedule\", TSelect>,\n\t): unknown {\n\t\tassertPositiveInt(id);\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"airingSchedule\");\n\t\t\tconst document = buildAiringScheduleByIdDocument(select);\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<\n\t\t\t\t\t{ AiringSchedule: SelectedAiringSchedule<TSelect> | null },\n\t\t\t\t\t{ id: number }\n\t\t\t\t>({ document, variables: { id } })\n\t\t\t\t.then((raw) => ({ airingSchedule: raw.AiringSchedule }));\n\t\t}\n\t\treturn this.client.GetAiringSchedule({ id });\n\t}\n\n\tprivate selectedPage<TSelect>(\n\t\tdocument: string,\n\t\tvariables: Record<string, unknown>,\n\t): Promise<{ page: SelectedFields<Page, TSelect> | null }> {\n\t\tif (!this.graphQLClient) {\n\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t}\n\t\treturn this.graphQLClient\n\t\t\t.request<\n\t\t\t\t{ Page: SelectedFields<Page, TSelect> | null },\n\t\t\t\tRecord<string, unknown>\n\t\t\t>({ document, variables })\n\t\t\t.then((raw) => ({ page: raw.Page }));\n\t}\n\n\t/**\n\t * Retrieves the airing schedule for a media entry.\n\t * When `options.select` is provided, only the selected fields are returned.\n\t * @param mediaId - The ID of the media whose schedule should be fetched.\n\t * @param page - Optional page number. Defaults to 1.\n\t * @param perPage - Optional number of entries per page. Defaults to 25.\n\t */\n\tgetAiringSchedulesByMedia(\n\t\tmediaId: number,\n\t\tpage?: number,\n\t\tperPage?: number,\n\t): ReturnType<ANILISTSDK[\"GetAiringSchedulesByMedia\"]>;\n\tgetAiringSchedulesByMedia<TSelect extends AiringSchedulePageSelect>(\n\t\tmediaId: number,\n\t\tpage: number,\n\t\tperPage: number,\n\t\toptions: { select: { page: TSelect } },\n\t): Promise<{ page: SelectedAiringSchedulePage<TSelect> | null }>;\n\tgetAiringSchedulesByMedia<TSelect extends AiringSchedulePageSelect>(\n\t\tmediaId: number,\n\t\tpage = 1,\n\t\tperPage = 25,\n\t\toptions?: { select: { page: TSelect } },\n\t):\n\t\t| ReturnType<ANILISTSDK[\"GetAiringSchedulesByMedia\"]>\n\t\t| Promise<{ page: SelectedAiringSchedulePage<TSelect> | null }> {\n\t\tconst limit = normalizePerPage(perPage, 25);\n\t\tassertPositiveInt(mediaId, \"mediaId\");\n\t\tif (options?.select !== undefined) {\n\t\t\tconst document = buildAiringSchedulePageDocument(\n\t\t\t\t\"SelectedAiringSchedulesByMedia\",\n\t\t\t\t\"($mediaId: Int, $page: Int, $perPage: Int)\",\n\t\t\t\t[\"mediaId: $mediaId\"],\n\t\t\t\tresolvePageSelection<TSelect>(options.select, \"airingSchedules\"),\n\t\t\t);\n\t\t\treturn this.selectedPage<TSelect>(document, {\n\t\t\t\tmediaId,\n\t\t\t\tpage,\n\t\t\t\tperPage: limit,\n\t\t\t});\n\t\t}\n\t\treturn this.client.GetAiringSchedulesByMedia({\n\t\t\tmediaId,\n\t\t\tpage,\n\t\t\tperPage: limit,\n\t\t});\n\t}\n\n\t/**\n\t * Retrieves reviews for a media entry.\n\t * When `options.select` is provided, only the selected fields are returned.\n\t * @param mediaId - The ID of the media whose reviews should be fetched.\n\t * @param page - Optional page number. Defaults to 1.\n\t * @param perPage - Optional number of reviews per page. Defaults to 10.\n\t */\n\tgetReviews(\n\t\tmediaId: number,\n\t\tpage?: number,\n\t\tperPage?: number,\n\t): ReturnType<ANILISTSDK[\"GetMediaReviews\"]>;\n\tgetReviews<TSelect extends ReviewPageSelect>(\n\t\tmediaId: number,\n\t\tpage: number,\n\t\tperPage: number,\n\t\toptions: { select: { page: TSelect } },\n\t): Promise<{ page: SelectedReviewPage<TSelect> | null }>;\n\tgetReviews<TSelect extends ReviewPageSelect>(\n\t\tmediaId: number,\n\t\tpage = 1,\n\t\tperPage = 10,\n\t\toptions?: { select: { page: TSelect } },\n\t):\n\t\t| ReturnType<ANILISTSDK[\"GetMediaReviews\"]>\n\t\t| Promise<{ page: SelectedFields<Page, TSelect> | null }> {\n\t\tconst limit = normalizePerPage(perPage, 10);\n\t\tassertPositiveInt(mediaId, \"mediaId\");\n\t\tif (options?.select !== undefined) {\n\t\t\tconst document = buildReviewPageDocument(\n\t\t\t\t\"SelectedMediaReviews\",\n\t\t\t\t\"($mediaId: Int, $page: Int, $perPage: Int)\",\n\t\t\t\t[\"mediaId: $mediaId\"],\n\t\t\t\tresolvePageSelection<TSelect>(options.select, \"reviews\"),\n\t\t\t);\n\t\t\treturn this.selectedPage<TSelect>(document, {\n\t\t\t\tmediaId,\n\t\t\t\tpage,\n\t\t\t\tperPage: limit,\n\t\t\t});\n\t\t}\n\t\treturn this.client.GetMediaReviews({ mediaId, page, perPage: limit });\n\t}\n\n\t/**\n\t * Retrieves recommendations for a media entry.\n\t * When `options.select` is provided, only the selected fields are returned.\n\t * @param mediaId - The ID of the media whose recommendations should be fetched.\n\t * @param page - Optional page number. Defaults to 1.\n\t * @param perPage - Optional number of recommendations per page. Defaults to 10.\n\t */\n\tgetRecommendationsPage(\n\t\tmediaId: number,\n\t\tpage?: number,\n\t\tperPage?: number,\n\t): ReturnType<ANILISTSDK[\"GetRecommendationsPage\"]>;\n\tgetRecommendationsPage<TSelect extends RecommendationPageSelect>(\n\t\tmediaId: number,\n\t\tpage: number,\n\t\tperPage: number,\n\t\toptions: { select: { page: TSelect } },\n\t): Promise<{ page: SelectedRecommendationPage<TSelect> | null }>;\n\tgetRecommendationsPage<TSelect extends RecommendationPageSelect>(\n\t\tmediaId: number,\n\t\tpage = 1,\n\t\tperPage = 10,\n\t\toptions?: { select: { page: TSelect } },\n\t):\n\t\t| ReturnType<ANILISTSDK[\"GetRecommendationsPage\"]>\n\t\t| Promise<{ page: SelectedFields<Page, TSelect> | null }> {\n\t\tconst limit = normalizePerPage(perPage, 10);\n\t\tassertPositiveInt(mediaId, \"mediaId\");\n\t\tif (options?.select !== undefined) {\n\t\t\tconst document = buildRecommendationPageDocument(\n\t\t\t\t\"SelectedRecommendationsPage\",\n\t\t\t\t\"($mediaId: Int, $page: Int, $perPage: Int)\",\n\t\t\t\t[\"mediaId: $mediaId\"],\n\t\t\t\tresolvePageSelection<TSelect>(options.select, \"recommendations\"),\n\t\t\t);\n\t\t\treturn this.selectedPage<TSelect>(document, {\n\t\t\t\tmediaId,\n\t\t\t\tpage,\n\t\t\t\tperPage: limit,\n\t\t\t});\n\t\t}\n\t\treturn this.client.GetRecommendationsPage({\n\t\t\tmediaId,\n\t\t\tpage,\n\t\t\tperPage: limit,\n\t\t});\n\t}\n\n\t/**\n\t * Saves a recommendation rating. Requires authentication.\n\t * @param mediaId - The media the recommendation belongs to.\n\t * @param mediaRecommendationId - The recommended media.\n\t * @param rating - Optional rating (`RecommendationRating`).\n\t */\n\tsaveRecommendation(\n\t\tmediaId: number,\n\t\tmediaRecommendationId: number,\n\t\trating?: RecommendationRating,\n\t): ReturnType<ANILISTSDK[\"SaveRecommendation\"]>;\n\tsaveRecommendation<TSelect extends RecommendationSelect>(\n\t\tmediaId: number,\n\t\tmediaRecommendationId: number,\n\t\trating: RecommendationRating | undefined,\n\t\toptions: RootSelectionOption<\"recommendation\", TSelect>,\n\t): Promise<{ recommendation: SelectedRecommendation<TSelect> | null }>;\n\tsaveRecommendation<TSelect extends RecommendationSelect>(\n\t\tmediaId: number,\n\t\tmediaRecommendationId: number,\n\t\trating?: RecommendationRating,\n\t\toptions?: RootSelectionOption<\"recommendation\", TSelect>,\n\t): unknown {\n\t\tassertPositiveInt(mediaId, \"mediaId\");\n\t\tassertPositiveInt(mediaRecommendationId, \"mediaRecommendationId\");\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"recommendation\");\n\t\t\tconst document = buildSaveRecommendationDocument(select);\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<\n\t\t\t\t\t{ SaveRecommendation: SelectedRecommendation<TSelect> | null },\n\t\t\t\t\t{\n\t\t\t\t\t\tmediaId: number;\n\t\t\t\t\t\tmediaRecommendationId: number;\n\t\t\t\t\t\trating?: RecommendationRating;\n\t\t\t\t\t}\n\t\t\t\t>({\n\t\t\t\t\tdocument,\n\t\t\t\t\tvariables: { mediaId, mediaRecommendationId, rating },\n\t\t\t\t})\n\t\t\t\t.then((raw) => ({ recommendation: raw.SaveRecommendation }));\n\t\t}\n\t\treturn this.client.SaveRecommendation({\n\t\t\tmediaId,\n\t\t\tmediaRecommendationId,\n\t\t\trating,\n\t\t});\n\t}\n\n\t/**\n\t * Rates a review. Requires authentication.\n\t * @param reviewId - The ID of the review to rate.\n\t * @param rating - Optional rating (`ReviewRating`).\n\t */\n\trateReview(\n\t\treviewId: number,\n\t\trating?: ReviewRating,\n\t): ReturnType<ANILISTSDK[\"RateReview\"]>;\n\trateReview<TSelect extends ReviewSelect>(\n\t\treviewId: number,\n\t\trating: ReviewRating | undefined,\n\t\toptions: RootSelectionOption<\"review\", TSelect>,\n\t): Promise<{ review: SelectedReview<TSelect> | null }>;\n\trateReview<TSelect extends ReviewSelect>(\n\t\treviewId: number,\n\t\trating?: ReviewRating,\n\t\toptions?: RootSelectionOption<\"review\", TSelect>,\n\t): unknown {\n\t\tassertPositiveInt(reviewId, \"reviewId\");\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"review\");\n\t\t\tconst document = buildRateReviewDocument(select);\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<\n\t\t\t\t\t{ RateReview: SelectedReview<TSelect> | null },\n\t\t\t\t\t{ reviewId: number; rating?: ReviewRating }\n\t\t\t\t>({ document, variables: { reviewId, rating } })\n\t\t\t\t.then((raw) => ({ review: raw.RateReview }));\n\t\t}\n\t\treturn this.client.RateReview({ reviewId, rating });\n\t}\n\n\t/**\n\t * Saves (creates or updates) a review. Requires authentication.\n\t * @param input - The review fields to save.\n\t */\n\tsaveReview(input: SaveReviewInput): ReturnType<ANILISTSDK[\"SaveReview\"]>;\n\tsaveReview<TSelect extends ReviewSelect>(\n\t\tinput: SaveReviewInput,\n\t\toptions: RootSelectionOption<\"review\", TSelect>,\n\t): Promise<{ review: SelectedReview<TSelect> | null }>;\n\tsaveReview<TSelect extends ReviewSelect>(\n\t\tinput: SaveReviewInput,\n\t\toptions?: RootSelectionOption<\"review\", TSelect>,\n\t): unknown {\n\t\tconst mutationVariables: SaveReviewMutationVariables = {\n\t\t\tbody: input.body,\n\t\t\tid: input.id,\n\t\t\tmediaId: input.mediaId,\n\t\t\tprivate: input.private,\n\t\t\tscore: input.score,\n\t\t\tsummary: input.summary,\n\t\t};\n\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"review\");\n\t\t\tconst document = buildSaveReviewDocument(select);\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<\n\t\t\t\t\t{ SaveReview: SelectedReview<TSelect> | null },\n\t\t\t\t\tSaveReviewMutationVariables\n\t\t\t\t>({ document, variables: mutationVariables })\n\t\t\t\t.then((raw) => ({ review: raw.SaveReview }));\n\t\t}\n\t\treturn this.client.SaveReview(mutationVariables);\n\t}\n\n\t/**\n\t * Deletes a review. Requires authentication.\n\t * @param id - The ID of the review to delete.\n\t */\n\tdeleteReview(id: number): ReturnType<ANILISTSDK[\"DeleteReview\"]>;\n\tdeleteReview<TSelect extends DeletedSelect>(\n\t\tid: number,\n\t\toptions: RootSelectionOption<\"deleteReview\", TSelect>,\n\t): Promise<{ deleteReview: SelectedDeleted<TSelect> | null }>;\n\tdeleteReview<TSelect extends DeletedSelect>(\n\t\tid: number,\n\t\toptions?: RootSelectionOption<\"deleteReview\", TSelect>,\n\t): unknown {\n\t\tassertPositiveInt(id);\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"deleteReview\");\n\t\t\tconst document = buildDeleteReviewDocument(select);\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<\n\t\t\t\t\t{ DeleteReview: SelectedDeleted<TSelect> | null },\n\t\t\t\t\t{ id: number }\n\t\t\t\t>({ document, variables: { id } })\n\t\t\t\t.then((raw) => ({ deleteReview: raw.DeleteReview }));\n\t\t}\n\t\treturn this.client.DeleteReview({ id });\n\t}\n}\n","import type { ANILISTSDK } from \"../@types\";\nimport type { Page } from \"../__generated__/anilist-schema\";\nimport type {\n\tGraphQLClient,\n\tLikeableType,\n\tSaveActivityReplyMutationVariables,\n\tSaveMessageActivityMutationVariables,\n\tSaveTextActivityMutationVariables,\n\tSaveThreadCommentMutationVariables,\n\tSaveThreadMutationVariables,\n} from \"../__generated__/anilist-sdk\";\nimport {\n\tbuildActivityReplyByIdDocument,\n\tbuildActivityReplyPageDocument,\n\tbuildFollowersPageDocument,\n\tbuildFollowingPageDocument,\n\tbuildParsedMarkdownDocument,\n\tbuildSiteStatisticsDocument,\n\tbuildThreadByIdDocument,\n\tbuildThreadCommentByIdDocument,\n\tbuildThreadCommentPageDocument,\n\tbuildThreadPageDocument,\n\tbuildToggleFollowDocument,\n} from \"../selections/builder\";\nimport type { RootSelectionOption } from \"../selections/options\";\nimport {\n\thasSelection,\n\tresolvePageSelection,\n\tresolveSelection,\n} from \"../selections/options\";\nimport type {\n\tActivityReplyPageSelect,\n\tActivityReplySelect,\n\tFollowersPageSelect,\n\tFollowingPageSelect,\n\tParsedMarkdownSelect,\n\tSelectedActivityReply,\n\tSelectedActivityReplyPage,\n\tSelectedFields,\n\tSelectedFollowersPage,\n\tSelectedFollowingPage,\n\tSelectedParsedMarkdown,\n\tSelectedSiteStatistics,\n\tSelectedThread,\n\tSelectedThreadComment,\n\tSelectedThreadCommentPage,\n\tSelectedThreadPage,\n\tSelectedUser,\n\tSiteStatisticsSelect,\n\tThreadCommentPageSelect,\n\tThreadCommentSelect,\n\tThreadPageSelect,\n\tThreadSelect,\n\tUserSelect,\n} from \"../selections/types\";\nimport { assertPositiveInt, normalizePerPage } from \"./validation\";\n\n/**\n * Optional filters for {@link SocialService.getThreads}.\n */\nexport type ThreadSearchFilters = {\n\t/** Thread title/body search string. */\n\tsearch?: string;\n\t/** Restrict results to a specific user ID. */\n\tuserId?: number;\n};\n\n/**\n * Fields accepted by {@link SocialService.saveTextActivity}.\n */\nexport type SaveTextActivityInput = {\n\tid?: number | null;\n\ttext?: string | null;\n\tlocked?: boolean | null;\n};\n\n/**\n * Fields accepted by {@link SocialService.saveMessageActivity}.\n */\nexport type SaveMessageActivityInput = {\n\tid?: number | null;\n\tmessage?: string | null;\n\trecipientId?: number | null;\n\tprivate?: boolean | null;\n\tlocked?: boolean | null;\n\tasMod?: boolean | null;\n};\n\n/**\n * Fields accepted by {@link SocialService.saveActivityReply}.\n */\nexport type SaveActivityReplyInput = {\n\tid?: number | null;\n\tactivityId?: number | null;\n\ttext?: string | null;\n\tasMod?: boolean | null;\n};\n\n/**\n * Fields accepted by {@link SocialService.saveThread}.\n */\nexport type SaveThreadInput = {\n\tid?: number | null;\n\ttitle?: string | null;\n\tbody?: string | null;\n\tcategories?: number[] | null;\n\tmediaCategories?: number[] | null;\n\tsticky?: boolean | null;\n\tlocked?: boolean | null;\n};\n\n/**\n * Fields accepted by {@link SocialService.saveThreadComment}.\n */\nexport type SaveThreadCommentInput = {\n\tid?: number | null;\n\tthreadId?: number | null;\n\tparentCommentId?: number | null;\n\tcomment?: string | null;\n\tlocked?: boolean | null;\n};\n\n/**\n * Service class for social and forum queries: follows, activities,\n * notifications, threads, comments, site statistics, and markdown.\n *\n * Union-typed roots (`ActivityUnion`, `NotificationUnion`, `LikeableUnion`)\n * do not support `select`; use {@link GraphQLService.request} for custom\n * projections of those types.\n */\nexport class SocialService {\n\tprivate client: ANILISTSDK;\n\tprivate graphQLClient: GraphQLClient | undefined;\n\n\t/**\n\t * Constructs a new SocialService instance.\n\t * @param client - An instance of the AniList SDK client.\n\t * @param graphQLClient - Optional low-level GraphQL client for selected queries.\n\t */\n\tconstructor(client: ANILISTSDK, graphQLClient?: GraphQLClient) {\n\t\tthis.client = client;\n\t\tthis.graphQLClient = graphQLClient;\n\t}\n\n\tprivate selectedPage<TSelect>(\n\t\tdocument: string,\n\t\tvariables: Record<string, unknown>,\n\t): Promise<{ page: SelectedFields<Page, TSelect> | null }> {\n\t\tif (!this.graphQLClient) {\n\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t}\n\t\treturn this.graphQLClient\n\t\t\t.request<\n\t\t\t\t{ Page: SelectedFields<Page, TSelect> | null },\n\t\t\t\tRecord<string, unknown>\n\t\t\t>({ document, variables })\n\t\t\t.then((raw) => ({ page: raw.Page }));\n\t}\n\n\t/**\n\t * Retrieves the users a user follows.\n\t * When `options.select` is provided, only the selected fields are returned.\n\t * @param userId - The ID of the user whose follows should be fetched.\n\t * @param page - Optional page number. Defaults to 1.\n\t * @param perPage - Optional number of users per page. Defaults to 25.\n\t */\n\tgetFollowing(\n\t\tuserId: number,\n\t\tpage?: number,\n\t\tperPage?: number,\n\t): ReturnType<ANILISTSDK[\"GetFollowing\"]>;\n\tgetFollowing<TSelect extends FollowingPageSelect>(\n\t\tuserId: number,\n\t\tpage: number,\n\t\tperPage: number,\n\t\toptions: { select: { page: TSelect } },\n\t): Promise<{ page: SelectedFollowingPage<TSelect> | null }>;\n\tgetFollowing<TSelect extends FollowingPageSelect>(\n\t\tuserId: number,\n\t\tpage = 1,\n\t\tperPage = 25,\n\t\toptions?: { select: { page: TSelect } },\n\t):\n\t\t| ReturnType<ANILISTSDK[\"GetFollowing\"]>\n\t\t| Promise<{ page: SelectedFields<Page, TSelect> | null }> {\n\t\tassertPositiveInt(userId, \"userId\");\n\t\tnormalizePerPage(perPage, 25);\n\t\tif (options?.select !== undefined) {\n\t\t\tconst document = buildFollowingPageDocument(\n\t\t\t\tresolvePageSelection<TSelect>(options.select, \"following\"),\n\t\t\t);\n\t\t\treturn this.selectedPage<TSelect>(document, { userId, page, perPage });\n\t\t}\n\t\treturn this.client.GetFollowing({ userId, page, perPage });\n\t}\n\n\t/**\n\t * Retrieves the followers of a user.\n\t * When `options.select` is provided, only the selected fields are returned.\n\t * @param userId - The ID of the user whose followers should be fetched.\n\t * @param page - Optional page number. Defaults to 1.\n\t * @param perPage - Optional number of users per page. Defaults to 25.\n\t */\n\tgetFollowers(\n\t\tuserId: number,\n\t\tpage?: number,\n\t\tperPage?: number,\n\t): ReturnType<ANILISTSDK[\"GetFollowers\"]>;\n\tgetFollowers<TSelect extends FollowersPageSelect>(\n\t\tuserId: number,\n\t\tpage: number,\n\t\tperPage: number,\n\t\toptions: { select: { page: TSelect } },\n\t): Promise<{ page: SelectedFollowersPage<TSelect> | null }>;\n\tgetFollowers<TSelect extends FollowersPageSelect>(\n\t\tuserId: number,\n\t\tpage = 1,\n\t\tperPage = 25,\n\t\toptions?: { select: { page: TSelect } },\n\t):\n\t\t| ReturnType<ANILISTSDK[\"GetFollowers\"]>\n\t\t| Promise<{ page: SelectedFields<Page, TSelect> | null }> {\n\t\tassertPositiveInt(userId, \"userId\");\n\t\tnormalizePerPage(perPage, 25);\n\t\tif (options?.select !== undefined) {\n\t\t\tconst document = buildFollowersPageDocument(\n\t\t\t\tresolvePageSelection<TSelect>(options.select, \"followers\"),\n\t\t\t);\n\t\t\treturn this.selectedPage<TSelect>(document, { userId, page, perPage });\n\t\t}\n\t\treturn this.client.GetFollowers({ userId, page, perPage });\n\t}\n\n\t/**\n\t * Retrieves the authenticated user's notifications. Requires authentication.\n\t * Union-typed notifications do not support `select`.\n\t * @param page - Optional page number. Defaults to 1.\n\t * @param perPage - Optional number of notifications per page. Defaults to 25.\n\t * @param options - Set `resetNotificationCount` to `true` to mark the\n\t * notifications as read. Defaults to `false`, so reading them leaves the\n\t * unread count untouched.\n\t */\n\tgetNotifications(\n\t\tpage?: number,\n\t\tperPage?: number,\n\t\toptions: { resetNotificationCount?: boolean } = {},\n\t): ReturnType<ANILISTSDK[\"GetNotifications\"]> {\n\t\tnormalizePerPage(perPage, 25);\n\t\treturn this.client.GetNotifications({\n\t\t\tpage,\n\t\t\tperPage,\n\t\t\tresetNotificationCount: options.resetNotificationCount ?? false,\n\t\t});\n\t}\n\n\t/**\n\t * Retrieves activity entries, optionally for a specific user.\n\t * Union-typed activities do not support `select`.\n\t * @param userId - Optional user ID to filter activities by.\n\t * @param page - Optional page number. Defaults to 1.\n\t * @param perPage - Optional number of activities per page. Defaults to 25.\n\t */\n\tgetActivities(\n\t\tuserId?: number,\n\t\tpage?: number,\n\t\tperPage?: number,\n\t): ReturnType<ANILISTSDK[\"GetActivities\"]> {\n\t\tnormalizePerPage(perPage, 25);\n\t\treturn this.client.GetActivities({ userId, page, perPage });\n\t}\n\n\t/**\n\t * Retrieves a single activity. Union-typed activities do not support `select`.\n\t * @param id - The unique ID of the activity.\n\t */\n\tgetActivity(id: number): ReturnType<ANILISTSDK[\"GetActivity\"]> {\n\t\tassertPositiveInt(id);\n\t\treturn this.client.GetActivity({ id });\n\t}\n\n\t/**\n\t * Retrieves replies to an activity.\n\t * When `options.select` is provided, only the selected fields are returned.\n\t * @param activityId - Optional activity ID to filter replies by.\n\t * @param page - Optional page number. Defaults to 1.\n\t * @param perPage - Optional number of replies per page. Defaults to 25.\n\t */\n\tgetActivityReplies(\n\t\tactivityId?: number,\n\t\tpage?: number,\n\t\tperPage?: number,\n\t): ReturnType<ANILISTSDK[\"GetActivityReplies\"]>;\n\tgetActivityReplies<TSelect extends ActivityReplyPageSelect>(\n\t\tactivityId: number | undefined,\n\t\tpage: number,\n\t\tperPage: number,\n\t\toptions: { select: { page: TSelect } },\n\t): Promise<{ page: SelectedActivityReplyPage<TSelect> | null }>;\n\tgetActivityReplies<TSelect extends ActivityReplyPageSelect>(\n\t\tactivityId: number | undefined,\n\t\tpage = 1,\n\t\tperPage = 25,\n\t\toptions?: { select: { page: TSelect } },\n\t):\n\t\t| ReturnType<ANILISTSDK[\"GetActivityReplies\"]>\n\t\t| Promise<{ page: SelectedFields<Page, TSelect> | null }> {\n\t\tnormalizePerPage(perPage, 25);\n\t\tif (options?.select !== undefined) {\n\t\t\tconst document = buildActivityReplyPageDocument(\n\t\t\t\tresolvePageSelection<TSelect>(options.select, \"activityReplies\"),\n\t\t\t);\n\t\t\treturn this.selectedPage<TSelect>(document, {\n\t\t\t\tactivityId,\n\t\t\t\tpage,\n\t\t\t\tperPage,\n\t\t\t});\n\t\t}\n\t\treturn this.client.GetActivityReplies({ activityId, page, perPage });\n\t}\n\n\t/**\n\t * Retrieves a single activity reply.\n\t * When `options.select` is provided, only the selected fields are returned.\n\t * @param id - The unique ID of the activity reply.\n\t */\n\tgetActivityReply(id: number): ReturnType<ANILISTSDK[\"GetActivityReply\"]>;\n\tgetActivityReply<TSelect extends ActivityReplySelect>(\n\t\tid: number,\n\t\toptions: RootSelectionOption<\"activityReply\", TSelect>,\n\t): Promise<{ activityReply: SelectedActivityReply<TSelect> | null }>;\n\tgetActivityReply<TSelect extends ActivityReplySelect>(\n\t\tid: number,\n\t\toptions?: RootSelectionOption<\"activityReply\", TSelect>,\n\t): unknown {\n\t\tassertPositiveInt(id);\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"activityReply\");\n\t\t\tconst document = buildActivityReplyByIdDocument(select);\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<\n\t\t\t\t\t{ ActivityReply: SelectedActivityReply<TSelect> | null },\n\t\t\t\t\t{ id: number }\n\t\t\t\t>({ document, variables: { id } })\n\t\t\t\t.then((raw) => ({ activityReply: raw.ActivityReply }));\n\t\t}\n\t\treturn this.client.GetActivityReply({ id });\n\t}\n\n\t/**\n\t * Retrieves forum threads, optionally filtered by search or user.\n\t * When `options.select` is provided, only the selected fields are returned.\n\t * @param filters - Optional search string and user filter.\n\t * @param page - Optional page number. Defaults to 1.\n\t * @param perPage - Optional number of threads per page. Defaults to 25.\n\t */\n\tgetThreads(\n\t\tfilters?: ThreadSearchFilters,\n\t\tpage?: number,\n\t\tperPage?: number,\n\t): ReturnType<ANILISTSDK[\"GetThreads\"]>;\n\tgetThreads<TSelect extends ThreadPageSelect>(\n\t\tfilters: ThreadSearchFilters | undefined,\n\t\tpage: number,\n\t\tperPage: number,\n\t\toptions: { select: { page: TSelect } },\n\t): Promise<{ page: SelectedThreadPage<TSelect> | null }>;\n\tgetThreads<TSelect extends ThreadPageSelect>(\n\t\tfilters: ThreadSearchFilters = {},\n\t\tpage = 1,\n\t\tperPage = 25,\n\t\toptions?: { select: { page: TSelect } },\n\t):\n\t\t| ReturnType<ANILISTSDK[\"GetThreads\"]>\n\t\t| Promise<{ page: SelectedFields<Page, TSelect> | null }> {\n\t\tnormalizePerPage(perPage, 25);\n\t\tconst { search, userId } = filters;\n\t\tif (options?.select !== undefined) {\n\t\t\tconst document = buildThreadPageDocument(\n\t\t\t\tresolvePageSelection<TSelect>(options.select, \"threads\"),\n\t\t\t);\n\t\t\treturn this.selectedPage<TSelect>(document, {\n\t\t\t\tsearch,\n\t\t\t\tuserId,\n\t\t\t\tpage,\n\t\t\t\tperPage,\n\t\t\t});\n\t\t}\n\t\treturn this.client.GetThreads({ search, userId, page, perPage });\n\t}\n\n\t/**\n\t * Retrieves a single forum thread.\n\t * When `options.select` is provided, only the selected fields are returned.\n\t * @param id - The unique ID of the thread.\n\t */\n\tgetThread(id: number): ReturnType<ANILISTSDK[\"GetThread\"]>;\n\tgetThread<TSelect extends ThreadSelect>(\n\t\tid: number,\n\t\toptions: RootSelectionOption<\"thread\", TSelect>,\n\t): Promise<{ thread: SelectedThread<TSelect> | null }>;\n\tgetThread<TSelect extends ThreadSelect>(\n\t\tid: number,\n\t\toptions?: RootSelectionOption<\"thread\", TSelect>,\n\t): unknown {\n\t\tassertPositiveInt(id);\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"thread\");\n\t\t\tconst document = buildThreadByIdDocument(select);\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<{ Thread: SelectedThread<TSelect> | null }, { id: number }>({\n\t\t\t\t\tdocument,\n\t\t\t\t\tvariables: { id },\n\t\t\t\t})\n\t\t\t\t.then((raw) => ({ thread: raw.Thread }));\n\t\t}\n\t\treturn this.client.GetThread({ id });\n\t}\n\n\t/**\n\t * Retrieves comments on a thread.\n\t * When `options.select` is provided, only the selected fields are returned.\n\t * @param threadId - Optional thread ID to filter comments by.\n\t * @param page - Optional page number. Defaults to 1.\n\t * @param perPage - Optional number of comments per page. Defaults to 25.\n\t */\n\tgetThreadComments(\n\t\tthreadId?: number,\n\t\tpage?: number,\n\t\tperPage?: number,\n\t): ReturnType<ANILISTSDK[\"GetThreadComments\"]>;\n\tgetThreadComments<TSelect extends ThreadCommentPageSelect>(\n\t\tthreadId: number | undefined,\n\t\tpage: number,\n\t\tperPage: number,\n\t\toptions: { select: { page: TSelect } },\n\t): Promise<{ page: SelectedThreadCommentPage<TSelect> | null }>;\n\tgetThreadComments<TSelect extends ThreadCommentPageSelect>(\n\t\tthreadId: number | undefined,\n\t\tpage = 1,\n\t\tperPage = 25,\n\t\toptions?: { select: { page: TSelect } },\n\t):\n\t\t| ReturnType<ANILISTSDK[\"GetThreadComments\"]>\n\t\t| Promise<{ page: SelectedFields<Page, TSelect> | null }> {\n\t\tnormalizePerPage(perPage, 25);\n\t\tif (options?.select !== undefined) {\n\t\t\tconst document = buildThreadCommentPageDocument(\n\t\t\t\tresolvePageSelection<TSelect>(options.select, \"threadComments\"),\n\t\t\t);\n\t\t\treturn this.selectedPage<TSelect>(document, {\n\t\t\t\tthreadId,\n\t\t\t\tpage,\n\t\t\t\tperPage,\n\t\t\t});\n\t\t}\n\t\treturn this.client.GetThreadComments({ threadId, page, perPage });\n\t}\n\n\t/**\n\t * Retrieves a single thread comment (AniList returns a list with one entry).\n\t * When `options.select` is provided, only the selected fields are returned.\n\t * @param id - The unique ID of the thread comment.\n\t */\n\tgetThreadComment(id: number): ReturnType<ANILISTSDK[\"GetThreadComment\"]>;\n\tgetThreadComment<TSelect extends ThreadCommentSelect>(\n\t\tid: number,\n\t\toptions: RootSelectionOption<\"threadComments\", TSelect>,\n\t): Promise<{\n\t\tthreadComments: Array<SelectedThreadComment<TSelect> | null> | null;\n\t}>;\n\tgetThreadComment<TSelect extends ThreadCommentSelect>(\n\t\tid: number,\n\t\toptions?: RootSelectionOption<\"threadComments\", TSelect>,\n\t): unknown {\n\t\tassertPositiveInt(id);\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"threadComments\");\n\t\t\tconst document = buildThreadCommentByIdDocument(select);\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<\n\t\t\t\t\t{\n\t\t\t\t\t\tThreadComment: Array<SelectedThreadComment<TSelect> | null> | null;\n\t\t\t\t\t},\n\t\t\t\t\t{ id: number }\n\t\t\t\t>({ document, variables: { id } })\n\t\t\t\t.then((raw) => ({ threadComments: raw.ThreadComment }));\n\t\t}\n\t\treturn this.client.GetThreadComment({ id });\n\t}\n\n\t/**\n\t * Retrieves AniList site-wide statistics.\n\t * When `options.select` is provided, only the selected fields are returned.\n\t */\n\tgetSiteStatistics(): ReturnType<ANILISTSDK[\"GetSiteStatistics\"]>;\n\tgetSiteStatistics<TSelect extends SiteStatisticsSelect>(options: {\n\t\tselect: TSelect;\n\t}): Promise<{ SiteStatistics: SelectedSiteStatistics<TSelect> | null }>;\n\tgetSiteStatistics<TSelect extends SiteStatisticsSelect>(\n\t\toptions: RootSelectionOption<\"siteStatistics\", TSelect>,\n\t): Promise<{ siteStatistics: SelectedSiteStatistics<TSelect> | null }>;\n\tgetSiteStatistics<TSelect extends SiteStatisticsSelect>(\n\t\toptions?: RootSelectionOption<\"siteStatistics\", TSelect>,\n\t): unknown {\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"siteStatistics\");\n\t\t\tconst document = buildSiteStatisticsDocument(select);\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<{ SiteStatistics: SelectedSiteStatistics<TSelect> | null }>({\n\t\t\t\t\tdocument,\n\t\t\t\t})\n\t\t\t\t.then((raw) => ({ siteStatistics: raw.SiteStatistics }));\n\t\t}\n\t\treturn this.client.GetSiteStatistics();\n\t}\n\n\t/**\n\t * Renders AniList markdown to HTML.\n\t * When `options.select` is provided, only the selected fields are returned.\n\t * @param markdown - The markdown source to render.\n\t */\n\tgetMarkdown(markdown: string): ReturnType<ANILISTSDK[\"GetMarkdown\"]>;\n\tgetMarkdown<TSelect extends ParsedMarkdownSelect>(\n\t\tmarkdown: string,\n\t\toptions: RootSelectionOption<\"markdown\", TSelect>,\n\t): Promise<{ markdown: SelectedParsedMarkdown<TSelect> | null }>;\n\tgetMarkdown<TSelect extends ParsedMarkdownSelect>(\n\t\tmarkdown: string,\n\t\toptions?: RootSelectionOption<\"markdown\", TSelect>,\n\t): unknown {\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"markdown\");\n\t\t\tconst document = buildParsedMarkdownDocument(select);\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<\n\t\t\t\t\t{ Markdown: SelectedParsedMarkdown<TSelect> | null },\n\t\t\t\t\t{ markdown: string }\n\t\t\t\t>({ document, variables: { markdown } })\n\t\t\t\t.then((raw) => ({ markdown: raw.Markdown }));\n\t\t}\n\t\treturn this.client.GetMarkdown({ markdown });\n\t}\n\n\t/**\n\t * Toggles whether the authenticated user follows another user. Requires authentication.\n\t * When `options.select` is provided, only the selected fields are returned.\n\t * @param userId - The ID of the user to follow or unfollow.\n\t */\n\ttoggleFollow(userId: number): ReturnType<ANILISTSDK[\"ToggleFollow\"]>;\n\ttoggleFollow<TSelect extends UserSelect>(\n\t\tuserId: number,\n\t\toptions: RootSelectionOption<\"user\", TSelect>,\n\t): Promise<{ user: SelectedUser<TSelect> | null }>;\n\ttoggleFollow<TSelect extends UserSelect>(\n\t\tuserId: number,\n\t\toptions?: RootSelectionOption<\"user\", TSelect>,\n\t): unknown {\n\t\tassertPositiveInt(userId, \"userId\");\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"user\");\n\t\t\tconst document = buildToggleFollowDocument(select);\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<\n\t\t\t\t\t{ ToggleFollow: SelectedUser<TSelect> | null },\n\t\t\t\t\t{ userId: number }\n\t\t\t\t>({ document, variables: { userId } })\n\t\t\t\t.then((raw) => ({ user: raw.ToggleFollow }));\n\t\t}\n\t\treturn this.client.ToggleFollow({ userId });\n\t}\n\n\t/**\n\t * Toggles a like on a likeable entity. Requires authentication.\n\t * The `LikeableUnion` result does not support `select`.\n\t * @param id - The ID of the likeable entity.\n\t * @param type - The `LikeableType` of the entity. IDs are only unique per\n\t * type, so AniList needs it to resolve `id`.\n\t */\n\ttoggleLike(\n\t\tid: number,\n\t\ttype: LikeableType,\n\t): ReturnType<ANILISTSDK[\"ToggleLike\"]> {\n\t\tassertPositiveInt(id);\n\t\treturn this.client.ToggleLike({ id, type });\n\t}\n\n\t/**\n\t * Creates or updates a text activity. Requires authentication.\n\t * @param input - The activity fields to save (`text` is required by AniList).\n\t */\n\tsaveTextActivity(\n\t\tinput: SaveTextActivityInput,\n\t): ReturnType<ANILISTSDK[\"SaveTextActivity\"]> {\n\t\tconst variables: SaveTextActivityMutationVariables = {\n\t\t\tid: input.id,\n\t\t\tlocked: input.locked,\n\t\t\ttext: input.text,\n\t\t};\n\t\treturn this.client.SaveTextActivity(variables);\n\t}\n\n\t/**\n\t * Creates or updates a message activity. Requires authentication.\n\t * @param input - The message fields to save.\n\t */\n\tsaveMessageActivity(\n\t\tinput: SaveMessageActivityInput,\n\t): ReturnType<ANILISTSDK[\"SaveMessageActivity\"]> {\n\t\tconst variables: SaveMessageActivityMutationVariables = {\n\t\t\tasMod: input.asMod,\n\t\t\tid: input.id,\n\t\t\tlocked: input.locked,\n\t\t\tmessage: input.message,\n\t\t\tprivate: input.private,\n\t\t\trecipientId: input.recipientId,\n\t\t};\n\t\treturn this.client.SaveMessageActivity(variables);\n\t}\n\n\t/**\n\t * Creates or updates an activity reply. Requires authentication.\n\t * @param input - The reply fields to save.\n\t */\n\tsaveActivityReply(\n\t\tinput: SaveActivityReplyInput,\n\t): ReturnType<ANILISTSDK[\"SaveActivityReply\"]> {\n\t\tconst variables: SaveActivityReplyMutationVariables = {\n\t\t\tactivityId: input.activityId,\n\t\t\tasMod: input.asMod,\n\t\t\tid: input.id,\n\t\t\ttext: input.text,\n\t\t};\n\t\treturn this.client.SaveActivityReply(variables);\n\t}\n\n\t/**\n\t * Deletes an activity. Requires authentication.\n\t * @param id - The ID of the activity to delete.\n\t */\n\tdeleteActivity(id: number): ReturnType<ANILISTSDK[\"DeleteActivity\"]> {\n\t\tassertPositiveInt(id);\n\t\treturn this.client.DeleteActivity({ id });\n\t}\n\n\t/**\n\t * Deletes an activity reply. Requires authentication.\n\t * @param id - The ID of the activity reply to delete.\n\t */\n\tdeleteActivityReply(\n\t\tid: number,\n\t): ReturnType<ANILISTSDK[\"DeleteActivityReply\"]> {\n\t\tassertPositiveInt(id);\n\t\treturn this.client.DeleteActivityReply({ id });\n\t}\n\n\t/**\n\t * Subscribes to or unsubscribes from an activity. Requires authentication.\n\t * The `ActivityUnion` result does not support `select`.\n\t * @param activityId - The ID of the activity.\n\t * @param subscribe - `true` to subscribe, `false` to unsubscribe.\n\t */\n\ttoggleActivitySubscription(\n\t\tactivityId: number,\n\t\tsubscribe?: boolean,\n\t): ReturnType<ANILISTSDK[\"ToggleActivitySubscription\"]> {\n\t\tassertPositiveInt(activityId, \"activityId\");\n\t\treturn this.client.ToggleActivitySubscription({ activityId, subscribe });\n\t}\n\n\t/**\n\t * Pins or unpins an activity. Requires authentication.\n\t * The `ActivityUnion` result does not support `select`.\n\t * @param id - The ID of the activity.\n\t * @param pinned - `true` to pin, `false` to unpin.\n\t */\n\ttoggleActivityPin(\n\t\tid: number,\n\t\tpinned?: boolean,\n\t): ReturnType<ANILISTSDK[\"ToggleActivityPin\"]> {\n\t\tassertPositiveInt(id);\n\t\treturn this.client.ToggleActivityPin({ id, pinned });\n\t}\n\n\t/**\n\t * Creates or updates a forum thread. Requires authentication.\n\t * @param input - The thread fields to save.\n\t */\n\tsaveThread(input: SaveThreadInput): ReturnType<ANILISTSDK[\"SaveThread\"]> {\n\t\tconst variables: SaveThreadMutationVariables = {\n\t\t\tbody: input.body,\n\t\t\tcategories: input.categories,\n\t\t\tid: input.id,\n\t\t\tlocked: input.locked,\n\t\t\tmediaCategories: input.mediaCategories,\n\t\t\tsticky: input.sticky,\n\t\t\ttitle: input.title,\n\t\t};\n\t\treturn this.client.SaveThread(variables);\n\t}\n\n\t/**\n\t * Creates or updates a thread comment. Requires authentication.\n\t * @param input - The comment fields to save.\n\t */\n\tsaveThreadComment(\n\t\tinput: SaveThreadCommentInput,\n\t): ReturnType<ANILISTSDK[\"SaveThreadComment\"]> {\n\t\tconst variables: SaveThreadCommentMutationVariables = {\n\t\t\tcomment: input.comment,\n\t\t\tid: input.id,\n\t\t\tlocked: input.locked,\n\t\t\tparentCommentId: input.parentCommentId,\n\t\t\tthreadId: input.threadId,\n\t\t};\n\t\treturn this.client.SaveThreadComment(variables);\n\t}\n\n\t/**\n\t * Deletes a forum thread. Requires authentication.\n\t * @param id - The ID of the thread to delete.\n\t */\n\tdeleteThread(id: number): ReturnType<ANILISTSDK[\"DeleteThread\"]> {\n\t\tassertPositiveInt(id);\n\t\treturn this.client.DeleteThread({ id });\n\t}\n\n\t/**\n\t * Deletes a thread comment. Requires authentication.\n\t * @param id - The ID of the thread comment to delete.\n\t */\n\tdeleteThreadComment(\n\t\tid: number,\n\t): ReturnType<ANILISTSDK[\"DeleteThreadComment\"]> {\n\t\tassertPositiveInt(id);\n\t\treturn this.client.DeleteThreadComment({ id });\n\t}\n\n\t/**\n\t * Subscribes to or unsubscribes from a thread. Requires authentication.\n\t * @param threadId - The ID of the thread.\n\t * @param subscribe - `true` to subscribe, `false` to unsubscribe.\n\t */\n\ttoggleThreadSubscription(\n\t\tthreadId: number,\n\t\tsubscribe?: boolean,\n\t): ReturnType<ANILISTSDK[\"ToggleThreadSubscription\"]> {\n\t\tassertPositiveInt(threadId, \"threadId\");\n\t\treturn this.client.ToggleThreadSubscription({ threadId, subscribe });\n\t}\n}\n","import type { ANILISTSDK } from \"../@types\";\nimport type { GraphQLClient } from \"../__generated__/anilist-sdk\";\nimport {\n\tbuildStaffByIdDocument,\n\tbuildStaffPageDocument,\n\tbuildToggleFavouriteDocument,\n} from \"../selections/builder\";\nimport type { RootSelectionOption } from \"../selections/options\";\nimport {\n\thasSelection,\n\tresolvePageSelection,\n\tresolveSelection,\n} from \"../selections/options\";\nimport type {\n\tFavouritesSelect,\n\tSelectedFavourites,\n\tSelectedStaff,\n\tSelectedStaffPage,\n\tStaffPageSelect,\n\tStaffSelect,\n} from \"../selections/types\";\nimport { assertPositiveInt, normalizePerPage } from \"./validation\";\n\n/**\n * Service class for interacting with AniList staff-related queries.\n */\nexport class StaffService {\n\tprivate client: ANILISTSDK;\n\tprivate graphQLClient: GraphQLClient | undefined;\n\n\t/**\n\t * Constructs a new StaffService instance.\n\t * @param client - An instance of the AniList SDK client.\n\t * @param graphQLClient - Optional low-level GraphQL client for selected queries.\n\t */\n\tconstructor(client: ANILISTSDK, graphQLClient?: GraphQLClient) {\n\t\tthis.client = client;\n\t\tthis.graphQLClient = graphQLClient;\n\t}\n\n\t/**\n\t * Retrieves staff information by staff ID.\n\t * @param id - The unique ID of the staff member.\n\t * @returns A promise resolving to the staff information.\n\t */\n\tgetStaffById(id: number): ReturnType<ANILISTSDK[\"GetStaffById\"]>;\n\tgetStaffById<TSelect extends StaffSelect>(\n\t\tid: number,\n\t\toptions: RootSelectionOption<\"staff\", TSelect>,\n\t): Promise<{ staff: SelectedStaff<TSelect> | null }>;\n\tgetStaffById<TSelect extends StaffSelect>(\n\t\tid: number,\n\t\toptions?: RootSelectionOption<\"staff\", TSelect>,\n\t): unknown {\n\t\tassertPositiveInt(id);\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"staff\");\n\t\t\tconst document = buildStaffByIdDocument(select);\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<{ Staff: SelectedStaff<TSelect> | null }, { id: number }>({\n\t\t\t\t\tdocument,\n\t\t\t\t\tvariables: { id },\n\t\t\t\t})\n\t\t\t\t.then((raw) => ({ staff: raw.Staff }));\n\t\t}\n\t\treturn this.client.GetStaffById({ id });\n\t}\n\n\t/**\n\t * Retrieves a list of staff members who have birthdays today.\n\t * @param page - Optional page number for pagination. Defaults to 1.\n\t * @param perPage - Optional number of staff members per page. Defaults to 25.\n\t * @returns A promise resolving to the staff birthday list.\n\t */\n\tgetStaffBirthdayToday(\n\t\tpage?: number,\n\t\tperPage?: number,\n\t): ReturnType<ANILISTSDK[\"StaffBirthdayToday\"]>;\n\tgetStaffBirthdayToday<TSelect extends StaffPageSelect>(\n\t\tpage: number,\n\t\tperPage: number,\n\t\toptions: { select: { page: TSelect } },\n\t): Promise<{ page: SelectedStaffPage<TSelect> | null }>;\n\tgetStaffBirthdayToday<TSelect extends StaffPageSelect>(\n\t\tpage = 1,\n\t\tperPage = 25,\n\t\toptions?: { select: { page: TSelect } },\n\t):\n\t\t| ReturnType<ANILISTSDK[\"StaffBirthdayToday\"]>\n\t\t| Promise<{ page: SelectedStaffPage<TSelect> | null }> {\n\t\tnormalizePerPage(perPage, 25);\n\t\tif (options?.select !== undefined) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst document = buildStaffPageDocument(\n\t\t\t\t\"SelectedStaffBirthdayToday\",\n\t\t\t\t\"($page: Int, $perPage: Int)\",\n\t\t\t\t[\"isBirthday: true\"],\n\t\t\t\tresolvePageSelection<TSelect>(options.select, \"staff\"),\n\t\t\t);\n\t\t\tconst selected: Promise<{ page: SelectedStaffPage<TSelect> | null }> =\n\t\t\t\tthis.graphQLClient\n\t\t\t\t\t.request<\n\t\t\t\t\t\t{ Page: SelectedStaffPage<TSelect> | null },\n\t\t\t\t\t\t{ page: number; perPage: number }\n\t\t\t\t\t>({ document, variables: { page, perPage } })\n\t\t\t\t\t.then((raw) => ({ page: raw.Page }));\n\t\t\treturn selected;\n\t\t}\n\t\treturn this.client.StaffBirthdayToday({ page, perPage });\n\t}\n\n\t/**\n\t * Toggles the favorite status of a staff member.\n\t * @param staffId - The ID of the staff member to toggle as favorite.\n\t * @returns A promise resolving to the result of the toggle mutation.\n\t */\n\ttoggleFavoriteStaff(\n\t\tstaffId: number,\n\t): ReturnType<ANILISTSDK[\"ToggleFavoriteStaff\"]>;\n\ttoggleFavoriteStaff<TSelect extends FavouritesSelect>(\n\t\tstaffId: number,\n\t\toptions: RootSelectionOption<\"favorites\", TSelect>,\n\t): Promise<{ favorites: SelectedFavourites<TSelect> | null }>;\n\ttoggleFavoriteStaff<TSelect extends FavouritesSelect>(\n\t\tstaffId: number,\n\t\toptions?: RootSelectionOption<\"favorites\", TSelect>,\n\t): unknown {\n\t\tassertPositiveInt(staffId, \"staffId\");\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"favorites\");\n\t\t\tconst document = buildToggleFavouriteDocument(select, \"staffId\");\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<\n\t\t\t\t\t{ ToggleFavourite: SelectedFavourites<TSelect> | null },\n\t\t\t\t\t{ id: number }\n\t\t\t\t>({ document, variables: { id: staffId } })\n\t\t\t\t.then((raw) => ({ favorites: raw.ToggleFavourite }));\n\t\t}\n\t\treturn this.client.ToggleFavoriteStaff({ staffID: staffId });\n\t}\n}\n","import type { ANILISTSDK } from \"../@types\";\nimport type { GraphQLClient } from \"../__generated__/anilist-sdk\";\nimport {\n\tbuildStudioByIdDocument,\n\tbuildStudioPageDocument,\n\tbuildToggleFavouriteDocument,\n} from \"../selections/builder\";\nimport type { RootSelectionOption } from \"../selections/options\";\nimport {\n\thasSelection,\n\tresolvePageSelection,\n\tresolveSelection,\n} from \"../selections/options\";\nimport type {\n\tFavouritesSelect,\n\tSelectedFavourites,\n\tSelectedStudio,\n\tSelectedStudioPage,\n\tStudioPageSelect,\n\tStudioSelect,\n} from \"../selections/types\";\nimport { assertPositiveInt, normalizePerPage } from \"./validation\";\n\n/**\n * Service class for interacting with AniList studio-related queries.\n */\nexport class StudioService {\n\tprivate client: ANILISTSDK;\n\tprivate graphQLClient: GraphQLClient | undefined;\n\n\t/**\n\t * Constructs a new StudioService instance.\n\t * @param client - An instance of the AniList SDK client.\n\t * @param graphQLClient - Optional low-level GraphQL client for selected queries.\n\t */\n\tconstructor(client: ANILISTSDK, graphQLClient?: GraphQLClient) {\n\t\tthis.client = client;\n\t\tthis.graphQLClient = graphQLClient;\n\t}\n\n\t/**\n\t * Retrieves studio information by studio ID.\n\t * @param id - The unique ID of the studio.\n\t * @returns A promise resolving to the studio information.\n\t */\n\tgetStudioById(id: number): ReturnType<ANILISTSDK[\"GetStudioById\"]>;\n\tgetStudioById<TSelect extends StudioSelect>(\n\t\tid: number,\n\t\toptions: RootSelectionOption<\"studio\", TSelect>,\n\t): Promise<{ studio: SelectedStudio<TSelect> | null }>;\n\tgetStudioById<TSelect extends StudioSelect>(\n\t\tid: number,\n\t\toptions?: RootSelectionOption<\"studio\", TSelect>,\n\t): unknown {\n\t\tassertPositiveInt(id);\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"studio\");\n\t\t\tconst document = buildStudioByIdDocument(select);\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<{ Studio: SelectedStudio<TSelect> | null }, { id: number }>({\n\t\t\t\t\tdocument,\n\t\t\t\t\tvariables: { id },\n\t\t\t\t})\n\t\t\t\t.then((raw) => ({ studio: raw.Studio }));\n\t\t}\n\t\treturn this.client.GetStudioById({ id });\n\t}\n\n\t/**\n\t * Searches for studios by name.\n\t * The response keeps AniList's paginated `Page` shape, matching the other\n\t * search methods.\n\t * @param search - The search query string.\n\t * @param page - Optional page number. Defaults to 1.\n\t * @param perPage - Optional number of results per page. Defaults to 10.\n\t * @returns A promise resolving to the paginated studio search results.\n\t */\n\tgetStudioBySearch(\n\t\tsearch: string,\n\t\tpage?: number,\n\t\tperPage?: number,\n\t): ReturnType<ANILISTSDK[\"SearchStudio\"]>;\n\tgetStudioBySearch<TSelect extends StudioPageSelect>(\n\t\tsearch: string,\n\t\tpage: number,\n\t\tperPage: number,\n\t\toptions: { select: { page: TSelect } },\n\t): Promise<{ page: SelectedStudioPage<TSelect> | null }>;\n\tgetStudioBySearch<TSelect extends StudioPageSelect>(\n\t\tsearch: string,\n\t\tpage = 1,\n\t\tperPage = 10,\n\t\toptions?: { select: { page: TSelect } },\n\t):\n\t\t| ReturnType<ANILISTSDK[\"SearchStudio\"]>\n\t\t| Promise<{ page: SelectedStudioPage<TSelect> | null }> {\n\t\tnormalizePerPage(perPage, 10);\n\t\tif (options?.select !== undefined) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst document = buildStudioPageDocument(\n\t\t\t\t\"SelectedStudioSearch\",\n\t\t\t\t\"($query: String, $page: Int, $perPage: Int)\",\n\t\t\t\t[\"search: $query\"],\n\t\t\t\tresolvePageSelection<TSelect>(options.select, \"studios\"),\n\t\t\t);\n\t\t\tconst selected: Promise<{ page: SelectedStudioPage<TSelect> | null }> =\n\t\t\t\tthis.graphQLClient\n\t\t\t\t\t.request<\n\t\t\t\t\t\t{ Page: SelectedStudioPage<TSelect> | null },\n\t\t\t\t\t\t{ query: string; page: number; perPage: number }\n\t\t\t\t\t>({ document, variables: { query: search, page, perPage } })\n\t\t\t\t\t.then((raw) => ({ page: raw.Page }));\n\t\t\treturn selected;\n\t\t}\n\t\treturn this.client.SearchStudio({ query: search, page, perPage });\n\t}\n\n\t/**\n\t * Toggles the favorite status of a studio. Requires authentication.\n\t * @param studioId - The ID of the studio to toggle as favorite.\n\t * @returns A promise resolving to the result of the toggle mutation.\n\t */\n\ttoggleFavorite(\n\t\tstudioId: number,\n\t): ReturnType<ANILISTSDK[\"ToggleFavoriteStudio\"]>;\n\ttoggleFavorite<TSelect extends FavouritesSelect>(\n\t\tstudioId: number,\n\t\toptions: RootSelectionOption<\"favorites\", TSelect>,\n\t): Promise<{ favorites: SelectedFavourites<TSelect> | null }>;\n\ttoggleFavorite<TSelect extends FavouritesSelect>(\n\t\tstudioId: number,\n\t\toptions?: RootSelectionOption<\"favorites\", TSelect>,\n\t): unknown {\n\t\tassertPositiveInt(studioId, \"studioId\");\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"favorites\");\n\t\t\tconst document = buildToggleFavouriteDocument(select, \"studioId\");\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<\n\t\t\t\t\t{ ToggleFavourite: SelectedFavourites<TSelect> | null },\n\t\t\t\t\t{ id: number }\n\t\t\t\t>({ document, variables: { id: studioId } })\n\t\t\t\t.then((raw) => ({ favorites: raw.ToggleFavourite }));\n\t\t}\n\t\treturn this.client.ToggleFavoriteStudio({ studioId });\n\t}\n}\n","import type { ANILISTSDK } from \"../@types\";\nimport type { Page } from \"../__generated__/anilist-schema\";\nimport {\n\ttype GraphQLClient,\n\tMediaListStatus,\n\tMediaType,\n} from \"../__generated__/anilist-sdk\";\nimport {\n\tbuildMediaListCollectionByUserDocument,\n\tbuildReviewPageDocument,\n\tbuildUserByIdDocument,\n\tbuildUserByUsernameDocument,\n\tbuildUserPageDocument,\n\tbuildViewerDocument,\n\tbuildViewerStatisticsDocument,\n} from \"../selections/builder\";\nimport type { RootSelectionOption } from \"../selections/options\";\nimport {\n\thasSelection,\n\tresolvePageSelection,\n\tresolveSelection,\n} from \"../selections/options\";\nimport type {\n\tMediaListCollectionSelect,\n\tReviewPageSelect,\n\tSelectedFields,\n\tSelectedMediaListCollection,\n\tSelectedReviewPage,\n\tSelectedUser,\n\tSelectedUserPage,\n\tSelectedUserStatisticTypes,\n\tUserPageSelect,\n\tUserSelect,\n\tUserStatisticTypesSelect,\n} from \"../selections/types\";\nimport { assertPositiveInt, normalizePerPage } from \"./validation\";\n\n/**\n * Service class for interacting with AniList user-related queries.\n */\nexport class UserService {\n\tprivate client: ANILISTSDK;\n\tprivate graphQLClient: GraphQLClient | undefined;\n\n\t/**\n\t * Constructs a new UserService instance.\n\t * @param client - An instance of the AniList SDK client.\n\t * @param graphQLClient - Optional low-level GraphQL client for selected queries.\n\t */\n\tconstructor(client: ANILISTSDK, graphQLClient?: GraphQLClient) {\n\t\tthis.client = client;\n\t\tthis.graphQLClient = graphQLClient;\n\t}\n\n\t/**\n\t * Retrieves basic user information by user ID.\n\t * @param userId - The unique ID of the user.\n\t * @returns A promise resolving to the user information.\n\t */\n\tgetUserInfo(userId: number): ReturnType<ANILISTSDK[\"GetUserInfo\"]>;\n\tgetUserInfo<TSelect extends UserSelect>(\n\t\tuserId: number,\n\t\toptions: RootSelectionOption<\"user\", TSelect>,\n\t): Promise<{ user: SelectedUser<TSelect> | null }>;\n\tgetUserInfo<TSelect extends UserSelect>(\n\t\tuserId: number,\n\t\toptions?: RootSelectionOption<\"user\", TSelect>,\n\t): unknown {\n\t\tassertPositiveInt(userId, \"userId\");\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"user\");\n\t\t\tconst document = buildUserByIdDocument(select);\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<{ User: SelectedUser<TSelect> | null }, { id: number }>({\n\t\t\t\t\tdocument,\n\t\t\t\t\tvariables: { id: userId },\n\t\t\t\t})\n\t\t\t\t.then((raw) => ({ user: raw.User }));\n\t\t}\n\t\treturn this.client.GetUserInfo({ id: userId });\n\t}\n\n\t/**\n\t * Retrieves basic user information by userName.\n\t * @param userName - The userName of the user.\n\t * @returns A promise resolving to the user information.\n\t */\n\tgetUserInfoByUsername(\n\t\tuserName: string,\n\t): ReturnType<ANILISTSDK[\"GetUserInfoByUsername\"]>;\n\tgetUserInfoByUsername<TSelect extends UserSelect>(\n\t\tuserName: string,\n\t\toptions: RootSelectionOption<\"user\", TSelect>,\n\t): Promise<{ user: SelectedUser<TSelect> | null }>;\n\tgetUserInfoByUsername<TSelect extends UserSelect>(\n\t\tuserName: string,\n\t\toptions?: RootSelectionOption<\"user\", TSelect>,\n\t): unknown {\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"user\");\n\t\t\tconst document = buildUserByUsernameDocument(select);\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<{ User: SelectedUser<TSelect> | null }, { userName: string }>({\n\t\t\t\t\tdocument,\n\t\t\t\t\tvariables: { userName },\n\t\t\t\t})\n\t\t\t\t.then((raw) => ({ user: raw.User }));\n\t\t}\n\t\treturn this.client.GetUserInfoByUsername({ userName });\n\t}\n\n\t/**\n\t * Retrieves the user's anime list with optional filtering by status.\n\t * @param userId - The unique ID of the user.\n\t * @param status - Optional media list status filter defaults to current.\n\t * @returns A promise resolving to the user's anime list.\n\t */\n\tgetUserAnimeList(\n\t\tuserId: number,\n\t\tstatus?: MediaListStatus,\n\t): ReturnType<ANILISTSDK[\"GetUserAnimeList\"]>;\n\tgetUserAnimeList<TSelect extends MediaListCollectionSelect>(\n\t\tuserId: number,\n\t\tstatus: MediaListStatus | undefined,\n\t\toptions: RootSelectionOption<\"mediaListCollection\", TSelect>,\n\t): Promise<{\n\t\tmediaListCollection: SelectedMediaListCollection<TSelect> | null;\n\t}>;\n\tgetUserAnimeList<TSelect extends MediaListCollectionSelect>(\n\t\tuserId: number,\n\t\tstatus?: MediaListStatus,\n\t\toptions?: RootSelectionOption<\"mediaListCollection\", TSelect>,\n\t): unknown {\n\t\tassertPositiveInt(userId, \"userId\");\n\t\tconst normalizedStatus = status ?? MediaListStatus.Current;\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"mediaListCollection\");\n\t\t\tconst document = buildMediaListCollectionByUserDocument(select, \"id\");\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<\n\t\t\t\t\t{ MediaListCollection: SelectedMediaListCollection<TSelect> | null },\n\t\t\t\t\t{\n\t\t\t\t\t\tuserId: number;\n\t\t\t\t\t\tmediaType: MediaType;\n\t\t\t\t\t\tstatus: MediaListStatus;\n\t\t\t\t\t}\n\t\t\t\t>({\n\t\t\t\t\tdocument,\n\t\t\t\t\tvariables: {\n\t\t\t\t\t\tuserId,\n\t\t\t\t\t\tmediaType: MediaType.Anime,\n\t\t\t\t\t\tstatus: normalizedStatus,\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\t.then((raw) => ({ mediaListCollection: raw.MediaListCollection }));\n\t\t}\n\t\treturn this.client.GetUserAnimeList({\n\t\t\tstatus: normalizedStatus,\n\t\t\tuserId,\n\t\t});\n\t}\n\n\t/**\n\t * Retrieves the user's anime list with optional filtering by status.\n\t * @param userName - The userName of the user.\n\t * @param status - Optional media list status filter defaults to current.\n\t * @returns A promise resolving to the user's anime list.\n\t */\n\tgetUserAnimeListByUsername(\n\t\tuserName: string,\n\t\tstatus?: MediaListStatus,\n\t): ReturnType<ANILISTSDK[\"GetUserAnimeListByUsername\"]>;\n\tgetUserAnimeListByUsername<TSelect extends MediaListCollectionSelect>(\n\t\tuserName: string,\n\t\tstatus: MediaListStatus | undefined,\n\t\toptions: RootSelectionOption<\"mediaListCollection\", TSelect>,\n\t): Promise<{\n\t\tmediaListCollection: SelectedMediaListCollection<TSelect> | null;\n\t}>;\n\tgetUserAnimeListByUsername<TSelect extends MediaListCollectionSelect>(\n\t\tuserName: string,\n\t\tstatus?: MediaListStatus,\n\t\toptions?: RootSelectionOption<\"mediaListCollection\", TSelect>,\n\t): unknown {\n\t\tconst normalizedStatus = status ?? MediaListStatus.Current;\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"mediaListCollection\");\n\t\t\tconst document = buildMediaListCollectionByUserDocument(\n\t\t\t\tselect,\n\t\t\t\t\"username\",\n\t\t\t);\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<\n\t\t\t\t\t{ MediaListCollection: SelectedMediaListCollection<TSelect> | null },\n\t\t\t\t\t{\n\t\t\t\t\t\tuserName: string;\n\t\t\t\t\t\tmediaType: MediaType;\n\t\t\t\t\t\tstatus: MediaListStatus;\n\t\t\t\t\t}\n\t\t\t\t>({\n\t\t\t\t\tdocument,\n\t\t\t\t\tvariables: {\n\t\t\t\t\t\tuserName,\n\t\t\t\t\t\tmediaType: MediaType.Anime,\n\t\t\t\t\t\tstatus: normalizedStatus,\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\t.then((raw) => ({ mediaListCollection: raw.MediaListCollection }));\n\t\t}\n\t\treturn this.client.GetUserAnimeListByUsername({\n\t\t\tstatus: normalizedStatus,\n\t\t\tuserName,\n\t\t});\n\t}\n\n\t/**\n\t * Retrieves the user's manga list with optional filtering by status.\n\t * @param userId - The unique ID of the user.\n\t * @param status - Optional media list status filter defaults to current.\n\t * @returns A promise resolving to the user's manga list.\n\t */\n\tgetUserMangaList(\n\t\tuserId: number,\n\t\tstatus?: MediaListStatus,\n\t): ReturnType<ANILISTSDK[\"GetUserMangaList\"]>;\n\tgetUserMangaList<TSelect extends MediaListCollectionSelect>(\n\t\tuserId: number,\n\t\tstatus: MediaListStatus | undefined,\n\t\toptions: RootSelectionOption<\"mediaListCollection\", TSelect>,\n\t): Promise<{\n\t\tmediaListCollection: SelectedMediaListCollection<TSelect> | null;\n\t}>;\n\tgetUserMangaList<TSelect extends MediaListCollectionSelect>(\n\t\tuserId: number,\n\t\tstatus?: MediaListStatus,\n\t\toptions?: RootSelectionOption<\"mediaListCollection\", TSelect>,\n\t): unknown {\n\t\tassertPositiveInt(userId, \"userId\");\n\t\tconst normalizedStatus = status ?? MediaListStatus.Current;\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"mediaListCollection\");\n\t\t\tconst document = buildMediaListCollectionByUserDocument(select, \"id\");\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<\n\t\t\t\t\t{ MediaListCollection: SelectedMediaListCollection<TSelect> | null },\n\t\t\t\t\t{\n\t\t\t\t\t\tuserId: number;\n\t\t\t\t\t\tmediaType: MediaType;\n\t\t\t\t\t\tstatus: MediaListStatus;\n\t\t\t\t\t}\n\t\t\t\t>({\n\t\t\t\t\tdocument,\n\t\t\t\t\tvariables: {\n\t\t\t\t\t\tuserId,\n\t\t\t\t\t\tmediaType: MediaType.Manga,\n\t\t\t\t\t\tstatus: normalizedStatus,\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\t.then((raw) => ({ mediaListCollection: raw.MediaListCollection }));\n\t\t}\n\t\treturn this.client.GetUserMangaList({\n\t\t\tstatus: normalizedStatus,\n\t\t\tuserId,\n\t\t});\n\t}\n\n\t/**\n\t * Retrieves the user's manga list with optional filtering by status.\n\t * @param userName - The userName of the user.\n\t * @param status - Optional media list status filter defaults to current.\n\t * @returns A promise resolving to the user's manga list.\n\t */\n\tgetUserMangaListByUsername(\n\t\tuserName: string,\n\t\tstatus?: MediaListStatus,\n\t): ReturnType<ANILISTSDK[\"GetUserMangaListByUsername\"]>;\n\tgetUserMangaListByUsername<TSelect extends MediaListCollectionSelect>(\n\t\tuserName: string,\n\t\tstatus: MediaListStatus | undefined,\n\t\toptions: RootSelectionOption<\"mediaListCollection\", TSelect>,\n\t): Promise<{\n\t\tmediaListCollection: SelectedMediaListCollection<TSelect> | null;\n\t}>;\n\tgetUserMangaListByUsername<TSelect extends MediaListCollectionSelect>(\n\t\tuserName: string,\n\t\tstatus?: MediaListStatus,\n\t\toptions?: RootSelectionOption<\"mediaListCollection\", TSelect>,\n\t): unknown {\n\t\tconst normalizedStatus = status ?? MediaListStatus.Current;\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"mediaListCollection\");\n\t\t\tconst document = buildMediaListCollectionByUserDocument(\n\t\t\t\tselect,\n\t\t\t\t\"username\",\n\t\t\t);\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<\n\t\t\t\t\t{ MediaListCollection: SelectedMediaListCollection<TSelect> | null },\n\t\t\t\t\t{\n\t\t\t\t\t\tuserName: string;\n\t\t\t\t\t\tmediaType: MediaType;\n\t\t\t\t\t\tstatus: MediaListStatus;\n\t\t\t\t\t}\n\t\t\t\t>({\n\t\t\t\t\tdocument,\n\t\t\t\t\tvariables: {\n\t\t\t\t\t\tuserName,\n\t\t\t\t\t\tmediaType: MediaType.Manga,\n\t\t\t\t\t\tstatus: normalizedStatus,\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\t.then((raw) => ({ mediaListCollection: raw.MediaListCollection }));\n\t\t}\n\t\treturn this.client.GetUserMangaListByUsername({\n\t\t\tstatus: normalizedStatus,\n\t\t\tuserName,\n\t\t});\n\t}\n\n\t/**\n\t * Retrieves a paginated list of users.\n\t * @param page - Optional page number for pagination defaults to 1.\n\t * @param perPage - Optional number of users per page defaults to 10.\n\t * @returns A promise resolving to the paginated user list.\n\t */\n\tgetUserList(\n\t\tpage?: number,\n\t\tperPage?: number,\n\t): ReturnType<ANILISTSDK[\"GetUserList\"]>;\n\tgetUserList<TSelect extends UserPageSelect>(\n\t\tpage: number,\n\t\tperPage: number,\n\t\toptions: { select: { page: TSelect } },\n\t): Promise<{ page: SelectedUserPage<TSelect> | null }>;\n\tgetUserList<TSelect extends UserPageSelect>(\n\t\tpage = 1,\n\t\tperPage = 10,\n\t\toptions?: { select: { page: TSelect } },\n\t): unknown {\n\t\tconst limit = normalizePerPage(perPage, 10);\n\t\tif (options?.select !== undefined) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst document = buildUserPageDocument(\n\t\t\t\t\"SelectedUserList\",\n\t\t\t\t\"($page: Int, $perPage: Int)\",\n\t\t\t\t[],\n\t\t\t\tresolvePageSelection<TSelect>(options.select, \"users\"),\n\t\t\t);\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<\n\t\t\t\t\t{ Page: SelectedUserPage<TSelect> | null },\n\t\t\t\t\t{ page: number; perPage: number }\n\t\t\t\t>({ document, variables: { page, perPage: limit } })\n\t\t\t\t.then((raw) => ({ page: raw.Page }));\n\t\t}\n\t\treturn this.client.GetUserList({\n\t\t\tpage,\n\t\t\tperPage: limit,\n\t\t});\n\t}\n\n\t/**\n\t * Retrieves user statistics by user ID.\n\t * @param userId - The unique ID of the user.\n\t * @returns A promise resolving to the user's statistics.\n\t */\n\tgetUserStatistics(\n\t\tuserId: number,\n\t): ReturnType<ANILISTSDK[\"GetUserStatistics\"]>;\n\tgetUserStatistics<TSelect extends UserSelect>(\n\t\tuserId: number,\n\t\toptions: RootSelectionOption<\"user\", TSelect>,\n\t): Promise<{ user: SelectedUser<TSelect> | null }>;\n\tgetUserStatistics<TSelect extends UserSelect>(\n\t\tuserId: number,\n\t\toptions?: RootSelectionOption<\"user\", TSelect>,\n\t): unknown {\n\t\tassertPositiveInt(userId, \"userId\");\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"user\");\n\t\t\tconst document = buildUserByIdDocument(select);\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<{ User: SelectedUser<TSelect> | null }, { id: number }>({\n\t\t\t\t\tdocument,\n\t\t\t\t\tvariables: { id: userId },\n\t\t\t\t})\n\t\t\t\t.then((raw) => ({ user: raw.User }));\n\t\t}\n\t\treturn this.client.GetUserStatistics({ id: userId });\n\t}\n\n\t/**\n\t * Retrieves user statistics by userName.\n\t * @param userName - The userName of the user.\n\t * @returns A promise resolving to the user's statistics.\n\t */\n\tgetUserStatisticsByUsername(\n\t\tuserName: string,\n\t): ReturnType<ANILISTSDK[\"GetUserStatisticsByUsername\"]>;\n\tgetUserStatisticsByUsername<TSelect extends UserSelect>(\n\t\tuserName: string,\n\t\toptions: RootSelectionOption<\"user\", TSelect>,\n\t): Promise<{ user: SelectedUser<TSelect> | null }>;\n\tgetUserStatisticsByUsername<TSelect extends UserSelect>(\n\t\tuserName: string,\n\t\toptions?: RootSelectionOption<\"user\", TSelect>,\n\t): unknown {\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"user\");\n\t\t\tconst document = buildUserByUsernameDocument(select);\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<{ User: SelectedUser<TSelect> | null }, { userName: string }>({\n\t\t\t\t\tdocument,\n\t\t\t\t\tvariables: { userName },\n\t\t\t\t})\n\t\t\t\t.then((raw) => ({ user: raw.User }));\n\t\t}\n\t\treturn this.client.GetUserStatisticsByUsername({ userName });\n\t}\n\n\t/**\n\t * Retrieves the authenticated user's profile. Requires authentication.\n\t * When `options.select` is provided, only the selected fields are returned.\n\t */\n\tgetViewer(): ReturnType<ANILISTSDK[\"GetViewer\"]>;\n\tgetViewer<TSelect extends UserSelect>(options: {\n\t\tselect: TSelect;\n\t}): Promise<{ Viewer: SelectedUser<TSelect> | null }>;\n\tgetViewer<TSelect extends UserSelect>(\n\t\toptions: RootSelectionOption<\"viewer\", TSelect>,\n\t): Promise<{ viewer: SelectedUser<TSelect> | null }>;\n\tgetViewer<TSelect extends UserSelect>(\n\t\toptions?: RootSelectionOption<\"viewer\", TSelect>,\n\t): unknown {\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"viewer\");\n\t\t\tconst document = buildViewerDocument(select);\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<{ Viewer: SelectedUser<TSelect> | null }>({ document })\n\t\t\t\t.then((raw) => ({ viewer: raw.Viewer }));\n\t\t}\n\t\treturn this.client.GetViewer();\n\t}\n\n\t/**\n\t * Retrieves the authenticated user's statistics. Requires authentication.\n\t * When `options.select` is provided, only the selected statistics are returned.\n\t */\n\tgetViewerStatistics(): ReturnType<ANILISTSDK[\"GetViewerStatistics\"]>;\n\tgetViewerStatistics<TSelect extends UserStatisticTypesSelect>(options: {\n\t\tselect: TSelect;\n\t}): Promise<{\n\t\tViewer: { statistics: SelectedUserStatisticTypes<TSelect> | null } | null;\n\t}>;\n\tgetViewerStatistics<TSelect extends UserStatisticTypesSelect>(\n\t\toptions: RootSelectionOption<\"viewerStatistics\", TSelect>,\n\t): Promise<{ viewerStatistics: SelectedUserStatisticTypes<TSelect> | null }>;\n\tgetViewerStatistics<TSelect extends UserStatisticTypesSelect>(\n\t\toptions?: RootSelectionOption<\"viewerStatistics\", TSelect>,\n\t): unknown {\n\t\tif (hasSelection(options)) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst select = resolveSelection(options, \"viewerStatistics\");\n\t\t\tconst document = buildViewerStatisticsDocument(select);\n\t\t\treturn this.graphQLClient\n\t\t\t\t.request<{\n\t\t\t\t\tViewer: {\n\t\t\t\t\t\tstatistics: SelectedUserStatisticTypes<TSelect> | null;\n\t\t\t\t\t} | null;\n\t\t\t\t}>({ document })\n\t\t\t\t.then((raw) => ({ viewerStatistics: raw.Viewer?.statistics ?? null }));\n\t\t}\n\t\treturn this.client.GetViewerStatistics();\n\t}\n\n\t/**\n\t * Retrieves reviews written by a user.\n\t * When `options.select` is provided, only the selected fields are returned.\n\t * @param userId - The ID of the user whose reviews should be fetched.\n\t * @param page - Optional page number. Defaults to 1.\n\t * @param perPage - Optional number of reviews per page. Defaults to 10.\n\t */\n\tgetReviews(\n\t\tuserId: number,\n\t\tpage?: number,\n\t\tperPage?: number,\n\t): ReturnType<ANILISTSDK[\"GetUserReviews\"]>;\n\tgetReviews<TSelect extends ReviewPageSelect>(\n\t\tuserId: number,\n\t\tpage: number,\n\t\tperPage: number,\n\t\toptions: { select: { page: TSelect } },\n\t): Promise<{ page: SelectedReviewPage<TSelect> | null }>;\n\tgetReviews<TSelect extends ReviewPageSelect>(\n\t\tuserId: number,\n\t\tpage = 1,\n\t\tperPage = 10,\n\t\toptions?: { select: { page: TSelect } },\n\t):\n\t\t| ReturnType<ANILISTSDK[\"GetUserReviews\"]>\n\t\t| Promise<{ page: SelectedFields<Page, TSelect> | null }> {\n\t\tconst limit = normalizePerPage(perPage, 10);\n\t\tassertPositiveInt(userId, \"userId\");\n\t\tif (options?.select !== undefined) {\n\t\t\tif (!this.graphQLClient) {\n\t\t\t\tthrow new Error(\"graphQLClient is required for selected queries.\");\n\t\t\t}\n\t\t\tconst document = buildReviewPageDocument(\n\t\t\t\t\"SelectedUserReviews\",\n\t\t\t\t\"($userId: Int, $page: Int, $perPage: Int)\",\n\t\t\t\t[\"userId: $userId\"],\n\t\t\t\tresolvePageSelection<TSelect>(options.select, \"reviews\"),\n\t\t\t);\n\t\t\tconst selected: Promise<{\n\t\t\t\tpage: SelectedFields<Page, TSelect> | null;\n\t\t\t}> = this.graphQLClient\n\t\t\t\t.request<\n\t\t\t\t\t{ Page: SelectedFields<Page, TSelect> | null },\n\t\t\t\t\t{ userId: number; page: number; perPage: number }\n\t\t\t\t>({ document, variables: { userId, page, perPage: limit } })\n\t\t\t\t.then((raw) => ({ page: raw.Page }));\n\t\t\treturn selected;\n\t\t}\n\t\treturn this.client.GetUserReviews({ userId, page, perPage: limit });\n\t}\n}\n","export type Maybe<T> = T | null;\nexport type InputMaybe<T> = Maybe<T>;\n/** All built-in and custom scalars, mapped to their actual values */\nexport type Scalars = {\n  ID: { input: string; output: string; }\n  String: { input: string; output: string; }\n  Boolean: { input: boolean; output: boolean; }\n  Int: { input: number; output: number; }\n  Float: { input: number; output: number; }\n  CountryCode: { input: unknown; output: unknown; }\n  FuzzyDateInt: { input: unknown; output: unknown; }\n  Json: { input: unknown; output: unknown; }\n};\n\n/** Notification for when a activity is liked */\nexport type ActivityLikeNotification = {\n  /** The liked activity */\n  activity: Maybe<ActivityUnion>;\n  /** The id of the activity which was liked */\n  activityId: Scalars['Int']['output'];\n  /** The notification context text */\n  context: Maybe<Scalars['String']['output']>;\n  /** The time the notification was created at */\n  createdAt: Maybe<Scalars['Int']['output']>;\n  /** The id of the Notification */\n  id: Scalars['Int']['output'];\n  /** The type of notification */\n  type: Maybe<NotificationType>;\n  /** The user who liked the activity */\n  user: Maybe<User>;\n  /** The id of the user who liked to the activity */\n  userId: Scalars['Int']['output'];\n};\n\n/** Notification for when authenticated user is @ mentioned in activity or reply */\nexport type ActivityMentionNotification = {\n  /** The liked activity */\n  activity: Maybe<ActivityUnion>;\n  /** The id of the activity where mentioned */\n  activityId: Scalars['Int']['output'];\n  /** The notification context text */\n  context: Maybe<Scalars['String']['output']>;\n  /** The time the notification was created at */\n  createdAt: Maybe<Scalars['Int']['output']>;\n  /** The id of the Notification */\n  id: Scalars['Int']['output'];\n  /** The type of notification */\n  type: Maybe<NotificationType>;\n  /** The user who mentioned the authenticated user */\n  user: Maybe<User>;\n  /** The id of the user who mentioned the authenticated user */\n  userId: Scalars['Int']['output'];\n};\n\n/** Notification for when a user is send an activity message */\nexport type ActivityMessageNotification = {\n  /** The id of the activity message */\n  activityId: Scalars['Int']['output'];\n  /** The notification context text */\n  context: Maybe<Scalars['String']['output']>;\n  /** The time the notification was created at */\n  createdAt: Maybe<Scalars['Int']['output']>;\n  /** The id of the Notification */\n  id: Scalars['Int']['output'];\n  /** The message activity */\n  message: Maybe<MessageActivity>;\n  /** The type of notification */\n  type: Maybe<NotificationType>;\n  /** The user who sent the message */\n  user: Maybe<User>;\n  /** The if of the user who send the message */\n  userId: Scalars['Int']['output'];\n};\n\n/** Replay to an activity item */\nexport type ActivityReply = {\n  /** The id of the parent activity */\n  activityId: Maybe<Scalars['Int']['output']>;\n  /** The time the reply was created at */\n  createdAt: Scalars['Int']['output'];\n  /** The id of the reply */\n  id: Scalars['Int']['output'];\n  /** If the currently authenticated user liked the reply */\n  isLiked: Maybe<Scalars['Boolean']['output']>;\n  /** The amount of likes the reply has */\n  likeCount: Scalars['Int']['output'];\n  /** The users who liked the reply */\n  likes: Maybe<Array<Maybe<User>>>;\n  /** The reply text */\n  text: Maybe<Scalars['String']['output']>;\n  /** The user who created reply */\n  user: Maybe<User>;\n  /** The id of the replies creator */\n  userId: Maybe<Scalars['Int']['output']>;\n};\n\n\n/** Replay to an activity item */\nexport type ActivityReplyTextArgs = {\n  asHtml: InputMaybe<Scalars['Boolean']['input']>;\n};\n\n/** Notification for when a activity reply is liked */\nexport type ActivityReplyLikeNotification = {\n  /** The liked activity */\n  activity: Maybe<ActivityUnion>;\n  /** The id of the activity where the reply which was liked */\n  activityId: Scalars['Int']['output'];\n  /** The notification context text */\n  context: Maybe<Scalars['String']['output']>;\n  /** The time the notification was created at */\n  createdAt: Maybe<Scalars['Int']['output']>;\n  /** The id of the Notification */\n  id: Scalars['Int']['output'];\n  /** The type of notification */\n  type: Maybe<NotificationType>;\n  /** The user who liked the activity reply */\n  user: Maybe<User>;\n  /** The id of the user who liked to the activity reply */\n  userId: Scalars['Int']['output'];\n};\n\n/** Notification for when a user replies to the authenticated users activity */\nexport type ActivityReplyNotification = {\n  /** The liked activity */\n  activity: Maybe<ActivityUnion>;\n  /** The id of the activity which was replied too */\n  activityId: Scalars['Int']['output'];\n  /** The notification context text */\n  context: Maybe<Scalars['String']['output']>;\n  /** The time the notification was created at */\n  createdAt: Maybe<Scalars['Int']['output']>;\n  /** The id of the Notification */\n  id: Scalars['Int']['output'];\n  /** The type of notification */\n  type: Maybe<NotificationType>;\n  /** The user who replied to the activity */\n  user: Maybe<User>;\n  /** The id of the user who replied to the activity */\n  userId: Scalars['Int']['output'];\n};\n\n/** Notification for when a user replies to activity the authenticated user has replied to */\nexport type ActivityReplySubscribedNotification = {\n  /** The liked activity */\n  activity: Maybe<ActivityUnion>;\n  /** The id of the activity which was replied too */\n  activityId: Scalars['Int']['output'];\n  /** The notification context text */\n  context: Maybe<Scalars['String']['output']>;\n  /** The time the notification was created at */\n  createdAt: Maybe<Scalars['Int']['output']>;\n  /** The id of the Notification */\n  id: Scalars['Int']['output'];\n  /** The type of notification */\n  type: Maybe<NotificationType>;\n  /** The user who replied to the activity */\n  user: Maybe<User>;\n  /** The id of the user who replied to the activity */\n  userId: Scalars['Int']['output'];\n};\n\n/** Activity sort enums */\nexport enum ActivitySort {\n  Id = 'ID',\n  IdDesc = 'ID_DESC',\n  Pinned = 'PINNED'\n}\n\n/** Activity type enum. */\nexport enum ActivityType {\n  /** A anime list update activity */\n  AnimeList = 'ANIME_LIST',\n  /** A manga list update activity */\n  MangaList = 'MANGA_LIST',\n  /** Anime & Manga list update, only used in query arguments */\n  MediaList = 'MEDIA_LIST',\n  /** A text message activity sent to another user */\n  Message = 'MESSAGE',\n  /** A text activity */\n  Text = 'TEXT'\n}\n\n/** Activity union type */\nexport type ActivityUnion = ListActivity | MessageActivity | TextActivity;\n\n/** Notification for when an episode of anime airs */\nexport type AiringNotification = {\n  /** The id of the aired anime */\n  animeId: Scalars['Int']['output'];\n  /** The notification context text */\n  contexts: Maybe<Array<Maybe<Scalars['String']['output']>>>;\n  /** The time the notification was created at */\n  createdAt: Maybe<Scalars['Int']['output']>;\n  /** The episode number that just aired */\n  episode: Scalars['Int']['output'];\n  /** The id of the Notification */\n  id: Scalars['Int']['output'];\n  /** The associated media of the airing schedule */\n  media: Maybe<Media>;\n  /** The type of notification */\n  type: Maybe<NotificationType>;\n};\n\n/** Score & Watcher stats for airing anime by episode and mid-week */\nexport type AiringProgression = {\n  /** The episode the stats were recorded at. .5 is the mid point between 2 episodes airing dates. */\n  episode: Maybe<Scalars['Float']['output']>;\n  /** The average score for the media */\n  score: Maybe<Scalars['Float']['output']>;\n  /** The amount of users watching the anime */\n  watching: Maybe<Scalars['Int']['output']>;\n};\n\n/** Media Airing Schedule. NOTE: We only aim to guarantee that FUTURE airing data is present and accurate. */\nexport type AiringSchedule = {\n  /** The time the episode airs at */\n  airingAt: Scalars['Int']['output'];\n  /** The airing episode number */\n  episode: Scalars['Int']['output'];\n  /** The id of the airing schedule item */\n  id: Scalars['Int']['output'];\n  /** The associate media of the airing episode */\n  media: Maybe<Media>;\n  /** The associate media id of the airing episode */\n  mediaId: Scalars['Int']['output'];\n  /** Seconds until episode starts airing */\n  timeUntilAiring: Scalars['Int']['output'];\n};\n\nexport type AiringScheduleConnection = {\n  edges: Maybe<Array<Maybe<AiringScheduleEdge>>>;\n  nodes: Maybe<Array<Maybe<AiringSchedule>>>;\n  /** The pagination information */\n  pageInfo: Maybe<PageInfo>;\n};\n\n/** AiringSchedule connection edge */\nexport type AiringScheduleEdge = {\n  /** The id of the connection */\n  id: Maybe<Scalars['Int']['output']>;\n  node: Maybe<AiringSchedule>;\n};\n\nexport type AiringScheduleInput = {\n  airingAt: InputMaybe<Scalars['Int']['input']>;\n  episode: InputMaybe<Scalars['Int']['input']>;\n  timeUntilAiring: InputMaybe<Scalars['Int']['input']>;\n};\n\n/** Airing schedule sort enums */\nexport enum AiringSort {\n  Episode = 'EPISODE',\n  EpisodeDesc = 'EPISODE_DESC',\n  Id = 'ID',\n  IdDesc = 'ID_DESC',\n  MediaId = 'MEDIA_ID',\n  MediaIdDesc = 'MEDIA_ID_DESC',\n  Time = 'TIME',\n  TimeDesc = 'TIME_DESC'\n}\n\nexport type AniChartHighlightInput = {\n  highlight: InputMaybe<Scalars['String']['input']>;\n  mediaId: InputMaybe<Scalars['Int']['input']>;\n};\n\nexport type AniChartUser = {\n  highlights: Maybe<Scalars['Json']['output']>;\n  settings: Maybe<Scalars['Json']['output']>;\n  user: Maybe<User>;\n};\n\n/** A character that features in an anime or manga */\nexport type Character = {\n  /** The character's age. Note this is a string, not an int, it may contain further text and additional ages. */\n  age: Maybe<Scalars['String']['output']>;\n  /** The characters blood type */\n  bloodType: Maybe<Scalars['String']['output']>;\n  /** The character's birth date */\n  dateOfBirth: Maybe<FuzzyDate>;\n  /** A general description of the character */\n  description: Maybe<Scalars['String']['output']>;\n  /** The amount of user's who have favourited the character */\n  favourites: Maybe<Scalars['Int']['output']>;\n  /** The character's gender. Usually Male, Female, or Non-binary but can be any string. */\n  gender: Maybe<Scalars['String']['output']>;\n  /** The id of the character */\n  id: Scalars['Int']['output'];\n  /** Character images */\n  image: Maybe<CharacterImage>;\n  /** If the character is marked as favourite by the currently authenticated user */\n  isFavourite: Scalars['Boolean']['output'];\n  /** If the character is blocked from being added to favourites */\n  isFavouriteBlocked: Scalars['Boolean']['output'];\n  /** Media that includes the character */\n  media: Maybe<MediaConnection>;\n  /** Notes for site moderators */\n  modNotes: Maybe<Scalars['String']['output']>;\n  /** The names of the character */\n  name: Maybe<CharacterName>;\n  /** The url for the character page on the AniList website */\n  siteUrl: Maybe<Scalars['String']['output']>;\n  /** @deprecated No data available */\n  updatedAt: Maybe<Scalars['Int']['output']>;\n};\n\n\n/** A character that features in an anime or manga */\nexport type CharacterDescriptionArgs = {\n  asHtml: InputMaybe<Scalars['Boolean']['input']>;\n};\n\n\n/** A character that features in an anime or manga */\nexport type CharacterMediaArgs = {\n  onList: InputMaybe<Scalars['Boolean']['input']>;\n  page: InputMaybe<Scalars['Int']['input']>;\n  perPage: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<MediaSort>>>;\n  type: InputMaybe<MediaType>;\n};\n\nexport type CharacterConnection = {\n  edges: Maybe<Array<Maybe<CharacterEdge>>>;\n  nodes: Maybe<Array<Maybe<Character>>>;\n  /** The pagination information */\n  pageInfo: Maybe<PageInfo>;\n};\n\n/** Character connection edge */\nexport type CharacterEdge = {\n  /** The order the character should be displayed from the users favourites */\n  favouriteOrder: Maybe<Scalars['Int']['output']>;\n  /** The id of the connection */\n  id: Maybe<Scalars['Int']['output']>;\n  /** The media the character is in */\n  media: Maybe<Array<Maybe<Media>>>;\n  /** Media specific character name */\n  name: Maybe<Scalars['String']['output']>;\n  node: Maybe<Character>;\n  /** The characters role in the media */\n  role: Maybe<CharacterRole>;\n  /** The voice actors of the character with role date */\n  voiceActorRoles: Maybe<Array<Maybe<StaffRoleType>>>;\n  /** The voice actors of the character */\n  voiceActors: Maybe<Array<Maybe<Staff>>>;\n};\n\n\n/** Character connection edge */\nexport type CharacterEdgeVoiceActorRolesArgs = {\n  language: InputMaybe<StaffLanguage>;\n  sort: InputMaybe<Array<InputMaybe<StaffSort>>>;\n};\n\n\n/** Character connection edge */\nexport type CharacterEdgeVoiceActorsArgs = {\n  language: InputMaybe<StaffLanguage>;\n  sort: InputMaybe<Array<InputMaybe<StaffSort>>>;\n};\n\nexport type CharacterImage = {\n  /** The character's image of media at its largest size */\n  large: Maybe<Scalars['String']['output']>;\n  /** The character's image of media at medium size */\n  medium: Maybe<Scalars['String']['output']>;\n};\n\n/** The names of the character */\nexport type CharacterName = {\n  /** Other names the character might be referred to as */\n  alternative: Maybe<Array<Maybe<Scalars['String']['output']>>>;\n  /** Other names the character might be referred to as but are spoilers */\n  alternativeSpoiler: Maybe<Array<Maybe<Scalars['String']['output']>>>;\n  /** The character's given name */\n  first: Maybe<Scalars['String']['output']>;\n  /** The character's first and last name */\n  full: Maybe<Scalars['String']['output']>;\n  /** The character's surname */\n  last: Maybe<Scalars['String']['output']>;\n  /** The character's middle name */\n  middle: Maybe<Scalars['String']['output']>;\n  /** The character's full name in their native language */\n  native: Maybe<Scalars['String']['output']>;\n  /** The currently authenticated users preferred name language. Default romaji for non-authenticated */\n  userPreferred: Maybe<Scalars['String']['output']>;\n};\n\n/** The names of the character */\nexport type CharacterNameInput = {\n  /** Other names the character might be referred by */\n  alternative: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;\n  /** Other names the character might be referred to as but are spoilers */\n  alternativeSpoiler: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;\n  /** The character's given name */\n  first: InputMaybe<Scalars['String']['input']>;\n  /** The character's surname */\n  last: InputMaybe<Scalars['String']['input']>;\n  /** The character's middle name */\n  middle: InputMaybe<Scalars['String']['input']>;\n  /** The character's full name in their native language */\n  native: InputMaybe<Scalars['String']['input']>;\n};\n\n/** The role the character plays in the media */\nexport enum CharacterRole {\n  /** A background character in the media */\n  Background = 'BACKGROUND',\n  /** A primary character role in the media */\n  Main = 'MAIN',\n  /** A supporting character role in the media */\n  Supporting = 'SUPPORTING'\n}\n\n/** Character sort enums */\nexport enum CharacterSort {\n  Favourites = 'FAVOURITES',\n  FavouritesDesc = 'FAVOURITES_DESC',\n  Id = 'ID',\n  IdDesc = 'ID_DESC',\n  /** Order manually decided by moderators */\n  Relevance = 'RELEVANCE',\n  Role = 'ROLE',\n  RoleDesc = 'ROLE_DESC',\n  SearchMatch = 'SEARCH_MATCH'\n}\n\n/** A submission for a character that features in an anime or manga */\nexport type CharacterSubmission = {\n  /** Data Mod assigned to handle the submission */\n  assignee: Maybe<User>;\n  /** Character that the submission is referencing */\n  character: Maybe<Character>;\n  createdAt: Maybe<Scalars['Int']['output']>;\n  /** The id of the submission */\n  id: Scalars['Int']['output'];\n  /** Whether the submission is locked */\n  locked: Maybe<Scalars['Boolean']['output']>;\n  /** Inner details of submission status */\n  notes: Maybe<Scalars['String']['output']>;\n  source: Maybe<Scalars['String']['output']>;\n  /** Status of the submission */\n  status: Maybe<SubmissionStatus>;\n  /** The character submission changes */\n  submission: Maybe<Character>;\n  /** Submitter for the submission */\n  submitter: Maybe<User>;\n};\n\nexport type CharacterSubmissionConnection = {\n  edges: Maybe<Array<Maybe<CharacterSubmissionEdge>>>;\n  nodes: Maybe<Array<Maybe<CharacterSubmission>>>;\n  /** The pagination information */\n  pageInfo: Maybe<PageInfo>;\n};\n\n/** CharacterSubmission connection edge */\nexport type CharacterSubmissionEdge = {\n  node: Maybe<CharacterSubmission>;\n  /** The characters role in the media */\n  role: Maybe<CharacterRole>;\n  /** The submitted voice actors of the character */\n  submittedVoiceActors: Maybe<Array<Maybe<StaffSubmission>>>;\n  /** The voice actors of the character */\n  voiceActors: Maybe<Array<Maybe<Staff>>>;\n};\n\n/** Notification for when a character submission is accepted, partially accepted, or rejected */\nexport type CharacterSubmissionUpdateNotification = {\n  /** The character that was modified. */\n  character: Maybe<Character>;\n  /** The notification context text */\n  contexts: Maybe<Array<Maybe<Scalars['String']['output']>>>;\n  /** The time the notification was created at */\n  createdAt: Maybe<Scalars['Int']['output']>;\n  /** The id of the Notification */\n  id: Scalars['Int']['output'];\n  /** The notes of the submission */\n  notes: Maybe<Scalars['String']['output']>;\n  /** The status of the submission */\n  status: Maybe<Scalars['String']['output']>;\n  /** The type of notification */\n  type: Maybe<NotificationType>;\n};\n\n/** Deleted data type */\nexport type Deleted = {\n  /** If an item has been successfully deleted */\n  deleted: Maybe<Scalars['Boolean']['output']>;\n};\n\nexport enum ExternalLinkMediaType {\n  Anime = 'ANIME',\n  Manga = 'MANGA',\n  Staff = 'STAFF'\n}\n\nexport enum ExternalLinkType {\n  Info = 'INFO',\n  Social = 'SOCIAL',\n  Streaming = 'STREAMING'\n}\n\n/** User's favourite anime, manga, characters, staff & studios */\nexport type Favourites = {\n  /** Favourite anime */\n  anime: Maybe<MediaConnection>;\n  /** Favourite characters */\n  characters: Maybe<CharacterConnection>;\n  /** Favourite manga */\n  manga: Maybe<MediaConnection>;\n  /** Favourite staff */\n  staff: Maybe<StaffConnection>;\n  /** Favourite studios */\n  studios: Maybe<StudioConnection>;\n};\n\n\n/** User's favourite anime, manga, characters, staff & studios */\nexport type FavouritesAnimeArgs = {\n  page: InputMaybe<Scalars['Int']['input']>;\n  perPage: InputMaybe<Scalars['Int']['input']>;\n};\n\n\n/** User's favourite anime, manga, characters, staff & studios */\nexport type FavouritesCharactersArgs = {\n  page: InputMaybe<Scalars['Int']['input']>;\n  perPage: InputMaybe<Scalars['Int']['input']>;\n};\n\n\n/** User's favourite anime, manga, characters, staff & studios */\nexport type FavouritesMangaArgs = {\n  page: InputMaybe<Scalars['Int']['input']>;\n  perPage: InputMaybe<Scalars['Int']['input']>;\n};\n\n\n/** User's favourite anime, manga, characters, staff & studios */\nexport type FavouritesStaffArgs = {\n  page: InputMaybe<Scalars['Int']['input']>;\n  perPage: InputMaybe<Scalars['Int']['input']>;\n};\n\n\n/** User's favourite anime, manga, characters, staff & studios */\nexport type FavouritesStudiosArgs = {\n  page: InputMaybe<Scalars['Int']['input']>;\n  perPage: InputMaybe<Scalars['Int']['input']>;\n};\n\n/** Notification for when the authenticated user is followed by another user */\nexport type FollowingNotification = {\n  /** The notification context text */\n  context: Maybe<Scalars['String']['output']>;\n  /** The time the notification was created at */\n  createdAt: Maybe<Scalars['Int']['output']>;\n  /** The id of the Notification */\n  id: Scalars['Int']['output'];\n  /** The type of notification */\n  type: Maybe<NotificationType>;\n  /** The liked activity */\n  user: Maybe<User>;\n  /** The id of the user who followed the authenticated user */\n  userId: Scalars['Int']['output'];\n};\n\n/** User's format statistics */\nexport type FormatStats = {\n  amount: Maybe<Scalars['Int']['output']>;\n  format: Maybe<MediaFormat>;\n};\n\n/** Date object that allows for incomplete date values (fuzzy) */\nexport type FuzzyDate = {\n  /** Numeric Day (24) */\n  day: Maybe<Scalars['Int']['output']>;\n  /** Numeric Month (3) */\n  month: Maybe<Scalars['Int']['output']>;\n  /** Numeric Year (2017) */\n  year: Maybe<Scalars['Int']['output']>;\n};\n\n/** Date object that allows for incomplete date values (fuzzy) */\nexport type FuzzyDateInput = {\n  /** Numeric Day (24) */\n  day: InputMaybe<Scalars['Int']['input']>;\n  /** Numeric Month (3) */\n  month: InputMaybe<Scalars['Int']['input']>;\n  /** Numeric Year (2017) */\n  year: InputMaybe<Scalars['Int']['input']>;\n};\n\n/** User's genre statistics */\nexport type GenreStats = {\n  amount: Maybe<Scalars['Int']['output']>;\n  genre: Maybe<Scalars['String']['output']>;\n  meanScore: Maybe<Scalars['Int']['output']>;\n  /** The amount of time in minutes the genre has been watched by the user */\n  timeWatched: Maybe<Scalars['Int']['output']>;\n};\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type InternalPage = {\n  activities: Maybe<Array<Maybe<ActivityUnion>>>;\n  activityReplies: Maybe<Array<Maybe<ActivityReply>>>;\n  airingSchedules: Maybe<Array<Maybe<AiringSchedule>>>;\n  characterSubmissions: Maybe<Array<Maybe<CharacterSubmission>>>;\n  characters: Maybe<Array<Maybe<Character>>>;\n  followers: Maybe<Array<Maybe<User>>>;\n  following: Maybe<Array<Maybe<User>>>;\n  likes: Maybe<Array<Maybe<User>>>;\n  media: Maybe<Array<Maybe<Media>>>;\n  mediaList: Maybe<Array<Maybe<MediaList>>>;\n  mediaSubmissions: Maybe<Array<Maybe<MediaSubmission>>>;\n  mediaTrends: Maybe<Array<Maybe<MediaTrend>>>;\n  modActions: Maybe<Array<Maybe<ModAction>>>;\n  notifications: Maybe<Array<Maybe<NotificationUnion>>>;\n  /** The pagination information */\n  pageInfo: Maybe<PageInfo>;\n  recommendations: Maybe<Array<Maybe<Recommendation>>>;\n  reports: Maybe<Array<Maybe<Report>>>;\n  reviews: Maybe<Array<Maybe<Review>>>;\n  revisionHistory: Maybe<Array<Maybe<RevisionHistory>>>;\n  staff: Maybe<Array<Maybe<Staff>>>;\n  staffSubmissions: Maybe<Array<Maybe<StaffSubmission>>>;\n  studios: Maybe<Array<Maybe<Studio>>>;\n  threadComments: Maybe<Array<Maybe<ThreadComment>>>;\n  threads: Maybe<Array<Maybe<Thread>>>;\n  userBlockSearch: Maybe<Array<Maybe<User>>>;\n  users: Maybe<Array<Maybe<User>>>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type InternalPageActivitiesArgs = {\n  createdAt: InputMaybe<Scalars['Int']['input']>;\n  createdAt_greater: InputMaybe<Scalars['Int']['input']>;\n  createdAt_lesser: InputMaybe<Scalars['Int']['input']>;\n  hasReplies: InputMaybe<Scalars['Boolean']['input']>;\n  hasRepliesOrTypeText: InputMaybe<Scalars['Boolean']['input']>;\n  id: InputMaybe<Scalars['Int']['input']>;\n  id_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  id_not: InputMaybe<Scalars['Int']['input']>;\n  id_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  isFollowing: InputMaybe<Scalars['Boolean']['input']>;\n  mediaId: InputMaybe<Scalars['Int']['input']>;\n  mediaId_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  mediaId_not: InputMaybe<Scalars['Int']['input']>;\n  mediaId_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  messengerId: InputMaybe<Scalars['Int']['input']>;\n  messengerId_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  messengerId_not: InputMaybe<Scalars['Int']['input']>;\n  messengerId_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  sort: InputMaybe<Array<InputMaybe<ActivitySort>>>;\n  type: InputMaybe<ActivityType>;\n  type_in: InputMaybe<Array<InputMaybe<ActivityType>>>;\n  type_not: InputMaybe<ActivityType>;\n  type_not_in: InputMaybe<Array<InputMaybe<ActivityType>>>;\n  userId: InputMaybe<Scalars['Int']['input']>;\n  userId_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  userId_not: InputMaybe<Scalars['Int']['input']>;\n  userId_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type InternalPageActivityRepliesArgs = {\n  activityId: InputMaybe<Scalars['Int']['input']>;\n  id: InputMaybe<Scalars['Int']['input']>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type InternalPageAiringSchedulesArgs = {\n  airingAt: InputMaybe<Scalars['Int']['input']>;\n  airingAt_greater: InputMaybe<Scalars['Int']['input']>;\n  airingAt_lesser: InputMaybe<Scalars['Int']['input']>;\n  episode: InputMaybe<Scalars['Int']['input']>;\n  episode_greater: InputMaybe<Scalars['Int']['input']>;\n  episode_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  episode_lesser: InputMaybe<Scalars['Int']['input']>;\n  episode_not: InputMaybe<Scalars['Int']['input']>;\n  episode_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  id: InputMaybe<Scalars['Int']['input']>;\n  id_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  id_not: InputMaybe<Scalars['Int']['input']>;\n  id_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  mediaId: InputMaybe<Scalars['Int']['input']>;\n  mediaId_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  mediaId_not: InputMaybe<Scalars['Int']['input']>;\n  mediaId_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  notYetAired: InputMaybe<Scalars['Boolean']['input']>;\n  sort: InputMaybe<Array<InputMaybe<AiringSort>>>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type InternalPageCharacterSubmissionsArgs = {\n  assigneeId: InputMaybe<Scalars['Int']['input']>;\n  characterId: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<SubmissionSort>>>;\n  status: InputMaybe<SubmissionStatus>;\n  userId: InputMaybe<Scalars['Int']['input']>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type InternalPageCharactersArgs = {\n  id: InputMaybe<Scalars['Int']['input']>;\n  id_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  id_not: InputMaybe<Scalars['Int']['input']>;\n  id_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  isBirthday: InputMaybe<Scalars['Boolean']['input']>;\n  search: InputMaybe<Scalars['String']['input']>;\n  sort: InputMaybe<Array<InputMaybe<CharacterSort>>>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type InternalPageFollowersArgs = {\n  sort: InputMaybe<Array<InputMaybe<UserSort>>>;\n  userId: Scalars['Int']['input'];\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type InternalPageFollowingArgs = {\n  sort: InputMaybe<Array<InputMaybe<UserSort>>>;\n  userId: Scalars['Int']['input'];\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type InternalPageLikesArgs = {\n  likeableId: InputMaybe<Scalars['Int']['input']>;\n  type: InputMaybe<LikeableType>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type InternalPageMediaArgs = {\n  averageScore: InputMaybe<Scalars['Int']['input']>;\n  averageScore_greater: InputMaybe<Scalars['Int']['input']>;\n  averageScore_lesser: InputMaybe<Scalars['Int']['input']>;\n  averageScore_not: InputMaybe<Scalars['Int']['input']>;\n  chapters: InputMaybe<Scalars['Int']['input']>;\n  chapters_greater: InputMaybe<Scalars['Int']['input']>;\n  chapters_lesser: InputMaybe<Scalars['Int']['input']>;\n  countryOfOrigin: InputMaybe<Scalars['CountryCode']['input']>;\n  countryOfOrigin_in: InputMaybe<Array<InputMaybe<Scalars['CountryCode']['input']>>>;\n  countryOfOrigin_not_in: InputMaybe<Array<InputMaybe<Scalars['CountryCode']['input']>>>;\n  duration: InputMaybe<Scalars['Int']['input']>;\n  duration_greater: InputMaybe<Scalars['Int']['input']>;\n  duration_lesser: InputMaybe<Scalars['Int']['input']>;\n  endDate: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  endDate_greater: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  endDate_lesser: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  endDate_like: InputMaybe<Scalars['String']['input']>;\n  episodes: InputMaybe<Scalars['Int']['input']>;\n  episodes_greater: InputMaybe<Scalars['Int']['input']>;\n  episodes_lesser: InputMaybe<Scalars['Int']['input']>;\n  format: InputMaybe<MediaFormat>;\n  format_in: InputMaybe<Array<InputMaybe<MediaFormat>>>;\n  format_not: InputMaybe<MediaFormat>;\n  format_not_in: InputMaybe<Array<InputMaybe<MediaFormat>>>;\n  genre: InputMaybe<Scalars['String']['input']>;\n  genre_in: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;\n  genre_not_in: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;\n  id: InputMaybe<Scalars['Int']['input']>;\n  idMal: InputMaybe<Scalars['Int']['input']>;\n  idMal_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  idMal_not: InputMaybe<Scalars['Int']['input']>;\n  idMal_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  id_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  id_not: InputMaybe<Scalars['Int']['input']>;\n  id_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  isAdult: InputMaybe<Scalars['Boolean']['input']>;\n  isLicensed: InputMaybe<Scalars['Boolean']['input']>;\n  licensedBy: InputMaybe<Scalars['String']['input']>;\n  licensedById: InputMaybe<Scalars['Int']['input']>;\n  licensedById_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  licensedBy_in: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;\n  minimumTagRank: InputMaybe<Scalars['Int']['input']>;\n  onList: InputMaybe<Scalars['Boolean']['input']>;\n  popularity: InputMaybe<Scalars['Int']['input']>;\n  popularity_greater: InputMaybe<Scalars['Int']['input']>;\n  popularity_lesser: InputMaybe<Scalars['Int']['input']>;\n  popularity_not: InputMaybe<Scalars['Int']['input']>;\n  search: InputMaybe<Scalars['String']['input']>;\n  season: InputMaybe<MediaSeason>;\n  seasonYear: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<MediaSort>>>;\n  source: InputMaybe<MediaSource>;\n  source_in: InputMaybe<Array<InputMaybe<MediaSource>>>;\n  startDate: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  startDate_greater: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  startDate_lesser: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  startDate_like: InputMaybe<Scalars['String']['input']>;\n  status: InputMaybe<MediaStatus>;\n  status_in: InputMaybe<Array<InputMaybe<MediaStatus>>>;\n  status_not: InputMaybe<MediaStatus>;\n  status_not_in: InputMaybe<Array<InputMaybe<MediaStatus>>>;\n  tag: InputMaybe<Scalars['String']['input']>;\n  tagCategory: InputMaybe<Scalars['String']['input']>;\n  tagCategory_in: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;\n  tagCategory_not_in: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;\n  tag_in: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;\n  tag_not_in: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;\n  type: InputMaybe<MediaType>;\n  volumes: InputMaybe<Scalars['Int']['input']>;\n  volumes_greater: InputMaybe<Scalars['Int']['input']>;\n  volumes_lesser: InputMaybe<Scalars['Int']['input']>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type InternalPageMediaListArgs = {\n  compareWithAuthList: InputMaybe<Scalars['Boolean']['input']>;\n  completedAt: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  completedAt_greater: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  completedAt_lesser: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  completedAt_like: InputMaybe<Scalars['String']['input']>;\n  id: InputMaybe<Scalars['Int']['input']>;\n  isFollowing: InputMaybe<Scalars['Boolean']['input']>;\n  mediaId: InputMaybe<Scalars['Int']['input']>;\n  mediaId_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  mediaId_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  notes: InputMaybe<Scalars['String']['input']>;\n  notes_like: InputMaybe<Scalars['String']['input']>;\n  sort: InputMaybe<Array<InputMaybe<MediaListSort>>>;\n  startedAt: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  startedAt_greater: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  startedAt_lesser: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  startedAt_like: InputMaybe<Scalars['String']['input']>;\n  status: InputMaybe<MediaListStatus>;\n  status_in: InputMaybe<Array<InputMaybe<MediaListStatus>>>;\n  status_not: InputMaybe<MediaListStatus>;\n  status_not_in: InputMaybe<Array<InputMaybe<MediaListStatus>>>;\n  type: InputMaybe<MediaType>;\n  userId: InputMaybe<Scalars['Int']['input']>;\n  userId_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  userName: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type InternalPageMediaSubmissionsArgs = {\n  assigneeId: InputMaybe<Scalars['Int']['input']>;\n  mediaId: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<SubmissionSort>>>;\n  status: InputMaybe<SubmissionStatus>;\n  submissionId: InputMaybe<Scalars['Int']['input']>;\n  type: InputMaybe<MediaType>;\n  userId: InputMaybe<Scalars['Int']['input']>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type InternalPageMediaTrendsArgs = {\n  averageScore: InputMaybe<Scalars['Int']['input']>;\n  averageScore_greater: InputMaybe<Scalars['Int']['input']>;\n  averageScore_lesser: InputMaybe<Scalars['Int']['input']>;\n  averageScore_not: InputMaybe<Scalars['Int']['input']>;\n  date: InputMaybe<Scalars['Int']['input']>;\n  date_greater: InputMaybe<Scalars['Int']['input']>;\n  date_lesser: InputMaybe<Scalars['Int']['input']>;\n  episode: InputMaybe<Scalars['Int']['input']>;\n  episode_greater: InputMaybe<Scalars['Int']['input']>;\n  episode_lesser: InputMaybe<Scalars['Int']['input']>;\n  episode_not: InputMaybe<Scalars['Int']['input']>;\n  mediaId: InputMaybe<Scalars['Int']['input']>;\n  mediaId_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  mediaId_not: InputMaybe<Scalars['Int']['input']>;\n  mediaId_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  popularity: InputMaybe<Scalars['Int']['input']>;\n  popularity_greater: InputMaybe<Scalars['Int']['input']>;\n  popularity_lesser: InputMaybe<Scalars['Int']['input']>;\n  popularity_not: InputMaybe<Scalars['Int']['input']>;\n  releasing: InputMaybe<Scalars['Boolean']['input']>;\n  sort: InputMaybe<Array<InputMaybe<MediaTrendSort>>>;\n  trending: InputMaybe<Scalars['Int']['input']>;\n  trending_greater: InputMaybe<Scalars['Int']['input']>;\n  trending_lesser: InputMaybe<Scalars['Int']['input']>;\n  trending_not: InputMaybe<Scalars['Int']['input']>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type InternalPageModActionsArgs = {\n  modId: InputMaybe<Scalars['Int']['input']>;\n  modId_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  modId_not: InputMaybe<Scalars['Int']['input']>;\n  modId_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  userId: InputMaybe<Scalars['Int']['input']>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type InternalPageNotificationsArgs = {\n  resetNotificationCount: InputMaybe<Scalars['Boolean']['input']>;\n  type: InputMaybe<NotificationType>;\n  type_in: InputMaybe<Array<InputMaybe<NotificationType>>>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type InternalPageRecommendationsArgs = {\n  id: InputMaybe<Scalars['Int']['input']>;\n  mediaId: InputMaybe<Scalars['Int']['input']>;\n  mediaRecommendationId: InputMaybe<Scalars['Int']['input']>;\n  onList: InputMaybe<Scalars['Boolean']['input']>;\n  rating: InputMaybe<Scalars['Int']['input']>;\n  rating_greater: InputMaybe<Scalars['Int']['input']>;\n  rating_lesser: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<RecommendationSort>>>;\n  userId: InputMaybe<Scalars['Int']['input']>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type InternalPageReportsArgs = {\n  reportedId: InputMaybe<Scalars['Int']['input']>;\n  reporterId: InputMaybe<Scalars['Int']['input']>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type InternalPageReviewsArgs = {\n  id: InputMaybe<Scalars['Int']['input']>;\n  mediaId: InputMaybe<Scalars['Int']['input']>;\n  mediaType: InputMaybe<MediaType>;\n  sort: InputMaybe<Array<InputMaybe<ReviewSort>>>;\n  userId: InputMaybe<Scalars['Int']['input']>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type InternalPageRevisionHistoryArgs = {\n  characterId: InputMaybe<Scalars['Int']['input']>;\n  mediaId: InputMaybe<Scalars['Int']['input']>;\n  staffId: InputMaybe<Scalars['Int']['input']>;\n  studioId: InputMaybe<Scalars['Int']['input']>;\n  userId: InputMaybe<Scalars['Int']['input']>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type InternalPageStaffArgs = {\n  id: InputMaybe<Scalars['Int']['input']>;\n  id_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  id_not: InputMaybe<Scalars['Int']['input']>;\n  id_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  isBirthday: InputMaybe<Scalars['Boolean']['input']>;\n  search: InputMaybe<Scalars['String']['input']>;\n  sort: InputMaybe<Array<InputMaybe<StaffSort>>>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type InternalPageStaffSubmissionsArgs = {\n  assigneeId: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<SubmissionSort>>>;\n  staffId: InputMaybe<Scalars['Int']['input']>;\n  status: InputMaybe<SubmissionStatus>;\n  userId: InputMaybe<Scalars['Int']['input']>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type InternalPageStudiosArgs = {\n  id: InputMaybe<Scalars['Int']['input']>;\n  id_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  id_not: InputMaybe<Scalars['Int']['input']>;\n  id_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  search: InputMaybe<Scalars['String']['input']>;\n  sort: InputMaybe<Array<InputMaybe<StudioSort>>>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type InternalPageThreadCommentsArgs = {\n  id: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<ThreadCommentSort>>>;\n  threadId: InputMaybe<Scalars['Int']['input']>;\n  userId: InputMaybe<Scalars['Int']['input']>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type InternalPageThreadsArgs = {\n  categoryId: InputMaybe<Scalars['Int']['input']>;\n  id: InputMaybe<Scalars['Int']['input']>;\n  id_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  mediaCategoryId: InputMaybe<Scalars['Int']['input']>;\n  replyUserId: InputMaybe<Scalars['Int']['input']>;\n  search: InputMaybe<Scalars['String']['input']>;\n  sort: InputMaybe<Array<InputMaybe<ThreadSort>>>;\n  subscribed: InputMaybe<Scalars['Boolean']['input']>;\n  userId: InputMaybe<Scalars['Int']['input']>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type InternalPageUserBlockSearchArgs = {\n  search: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type InternalPageUsersArgs = {\n  id: InputMaybe<Scalars['Int']['input']>;\n  isModerator: InputMaybe<Scalars['Boolean']['input']>;\n  name: InputMaybe<Scalars['String']['input']>;\n  search: InputMaybe<Scalars['String']['input']>;\n  sort: InputMaybe<Array<InputMaybe<UserSort>>>;\n};\n\n/** Types that can be liked */\nexport enum LikeableType {\n  Activity = 'ACTIVITY',\n  ActivityReply = 'ACTIVITY_REPLY',\n  Thread = 'THREAD',\n  ThreadComment = 'THREAD_COMMENT'\n}\n\n/** Likeable union type */\nexport type LikeableUnion = ActivityReply | ListActivity | MessageActivity | TextActivity | Thread | ThreadComment;\n\n/** User list activity (anime & manga updates) */\nexport type ListActivity = {\n  /** The time the activity was created at */\n  createdAt: Scalars['Int']['output'];\n  /** The id of the activity */\n  id: Scalars['Int']['output'];\n  /** If the currently authenticated user liked the activity */\n  isLiked: Maybe<Scalars['Boolean']['output']>;\n  /** If the activity is locked and can receive replies */\n  isLocked: Maybe<Scalars['Boolean']['output']>;\n  /** If the activity is pinned to the top of the users activity feed */\n  isPinned: Maybe<Scalars['Boolean']['output']>;\n  /** If the currently authenticated user is subscribed to the activity */\n  isSubscribed: Maybe<Scalars['Boolean']['output']>;\n  /** The amount of likes the activity has */\n  likeCount: Scalars['Int']['output'];\n  /** The users who liked the activity */\n  likes: Maybe<Array<Maybe<User>>>;\n  /** The associated media to the activity update */\n  media: Maybe<Media>;\n  /** The list progress made */\n  progress: Maybe<Scalars['String']['output']>;\n  /** The written replies to the activity */\n  replies: Maybe<Array<Maybe<ActivityReply>>>;\n  /** The number of activity replies */\n  replyCount: Scalars['Int']['output'];\n  /** The url for the activity page on the AniList website */\n  siteUrl: Maybe<Scalars['String']['output']>;\n  /** The list item's textual status */\n  status: Maybe<Scalars['String']['output']>;\n  /** The type of activity */\n  type: Maybe<ActivityType>;\n  /** The owner of the activity */\n  user: Maybe<User>;\n  /** The user id of the activity's creator */\n  userId: Maybe<Scalars['Int']['output']>;\n};\n\nexport type ListActivityOption = {\n  disabled: Maybe<Scalars['Boolean']['output']>;\n  type: Maybe<MediaListStatus>;\n};\n\nexport type ListActivityOptionInput = {\n  disabled: InputMaybe<Scalars['Boolean']['input']>;\n  type: InputMaybe<MediaListStatus>;\n};\n\n/** User's list score statistics */\nexport type ListScoreStats = {\n  meanScore: Maybe<Scalars['Int']['output']>;\n  standardDeviation: Maybe<Scalars['Int']['output']>;\n};\n\n/** Anime or Manga */\nexport type Media = {\n  /** The media's entire airing schedule */\n  airingSchedule: Maybe<AiringScheduleConnection>;\n  /** If the media should have forum thread automatically created for it on airing episode release */\n  autoCreateForumThread: Maybe<Scalars['Boolean']['output']>;\n  /** A weighted average score of all the user's scores of the media */\n  averageScore: Maybe<Scalars['Int']['output']>;\n  /** The banner image of the media */\n  bannerImage: Maybe<Scalars['String']['output']>;\n  /** The amount of chapters the manga has when complete */\n  chapters: Maybe<Scalars['Int']['output']>;\n  /** The characters in the media */\n  characters: Maybe<CharacterConnection>;\n  /** Where the media was created. (ISO 3166-1 alpha-2) */\n  countryOfOrigin: Maybe<Scalars['CountryCode']['output']>;\n  /** The cover images of the media */\n  coverImage: Maybe<MediaCoverImage>;\n  /** Short description of the media's story and characters */\n  description: Maybe<Scalars['String']['output']>;\n  /** The general length of each anime episode in minutes */\n  duration: Maybe<Scalars['Int']['output']>;\n  /** The last official release date of the media */\n  endDate: Maybe<FuzzyDate>;\n  /** The amount of episodes the anime has when complete */\n  episodes: Maybe<Scalars['Int']['output']>;\n  /** External links to another site related to the media */\n  externalLinks: Maybe<Array<Maybe<MediaExternalLink>>>;\n  /** The amount of user's who have favourited the media */\n  favourites: Maybe<Scalars['Int']['output']>;\n  /** The format the media was released in */\n  format: Maybe<MediaFormat>;\n  /** The genres of the media */\n  genres: Maybe<Array<Maybe<Scalars['String']['output']>>>;\n  /** Official Twitter hashtags for the media */\n  hashtag: Maybe<Scalars['String']['output']>;\n  /** The id of the media */\n  id: Scalars['Int']['output'];\n  /** The mal id of the media */\n  idMal: Maybe<Scalars['Int']['output']>;\n  /** If the media is intended only for 18+ adult audiences */\n  isAdult: Maybe<Scalars['Boolean']['output']>;\n  /** If the media is marked as favourite by the current authenticated user */\n  isFavourite: Scalars['Boolean']['output'];\n  /** If the media is blocked from being added to favourites */\n  isFavouriteBlocked: Scalars['Boolean']['output'];\n  /** If the media is officially licensed or a self-published doujin release */\n  isLicensed: Maybe<Scalars['Boolean']['output']>;\n  /** Locked media may not be added to lists our favorited. This may be due to the entry pending for deletion or other reasons. */\n  isLocked: Maybe<Scalars['Boolean']['output']>;\n  /** If the media is blocked from being recommended to/from */\n  isRecommendationBlocked: Maybe<Scalars['Boolean']['output']>;\n  /** If the media is blocked from being reviewed */\n  isReviewBlocked: Maybe<Scalars['Boolean']['output']>;\n  /** Mean score of all the user's scores of the media */\n  meanScore: Maybe<Scalars['Int']['output']>;\n  /** The authenticated user's media list entry for the media */\n  mediaListEntry: Maybe<MediaList>;\n  /** Notes for site moderators */\n  modNotes: Maybe<Scalars['String']['output']>;\n  /** The media's next episode airing schedule */\n  nextAiringEpisode: Maybe<AiringSchedule>;\n  /** The number of users with the media on their list */\n  popularity: Maybe<Scalars['Int']['output']>;\n  /** The ranking of the media in a particular time span and format compared to other media */\n  rankings: Maybe<Array<Maybe<MediaRank>>>;\n  /** User recommendations for similar media */\n  recommendations: Maybe<RecommendationConnection>;\n  /** Other media in the same or connecting franchise */\n  relations: Maybe<MediaConnection>;\n  /** User reviews of the media */\n  reviews: Maybe<ReviewConnection>;\n  /** The season the media was initially released in */\n  season: Maybe<MediaSeason>;\n  /**\n   * The year & season the media was initially released in\n   * @deprecated\n   */\n  seasonInt: Maybe<Scalars['Int']['output']>;\n  /** The season year the media was initially released in */\n  seasonYear: Maybe<Scalars['Int']['output']>;\n  /** The url for the media page on the AniList website */\n  siteUrl: Maybe<Scalars['String']['output']>;\n  /** Source type the media was adapted from. */\n  source: Maybe<MediaSource>;\n  /** The staff who produced the media */\n  staff: Maybe<StaffConnection>;\n  /** The first official release date of the media */\n  startDate: Maybe<FuzzyDate>;\n  stats: Maybe<MediaStats>;\n  /** The current releasing status of the media */\n  status: Maybe<MediaStatus>;\n  /** Data and links to legal streaming episodes on external sites */\n  streamingEpisodes: Maybe<Array<Maybe<MediaStreamingEpisode>>>;\n  /** The companies who produced the media */\n  studios: Maybe<StudioConnection>;\n  /** Alternative titles of the media */\n  synonyms: Maybe<Array<Maybe<Scalars['String']['output']>>>;\n  /** List of tags that describes elements and themes of the media */\n  tags: Maybe<Array<Maybe<MediaTag>>>;\n  /** The official titles of the media in various languages */\n  title: Maybe<MediaTitle>;\n  /** Media trailer or advertisement */\n  trailer: Maybe<MediaTrailer>;\n  /** The amount of related activity in the past hour */\n  trending: Maybe<Scalars['Int']['output']>;\n  /** The media's daily trend stats */\n  trends: Maybe<MediaTrendConnection>;\n  /** The type of the media; anime or manga */\n  type: Maybe<MediaType>;\n  /** When the media's data was last updated */\n  updatedAt: Maybe<Scalars['Int']['output']>;\n  /** The amount of volumes the manga has when complete */\n  volumes: Maybe<Scalars['Int']['output']>;\n};\n\n\n/** Anime or Manga */\nexport type MediaAiringScheduleArgs = {\n  notYetAired: InputMaybe<Scalars['Boolean']['input']>;\n  page: InputMaybe<Scalars['Int']['input']>;\n  perPage: InputMaybe<Scalars['Int']['input']>;\n};\n\n\n/** Anime or Manga */\nexport type MediaCharactersArgs = {\n  page: InputMaybe<Scalars['Int']['input']>;\n  perPage: InputMaybe<Scalars['Int']['input']>;\n  role: InputMaybe<CharacterRole>;\n  sort: InputMaybe<Array<InputMaybe<CharacterSort>>>;\n};\n\n\n/** Anime or Manga */\nexport type MediaDescriptionArgs = {\n  asHtml: InputMaybe<Scalars['Boolean']['input']>;\n};\n\n\n/** Anime or Manga */\nexport type MediaRecommendationsArgs = {\n  page: InputMaybe<Scalars['Int']['input']>;\n  perPage: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<RecommendationSort>>>;\n};\n\n\n/** Anime or Manga */\nexport type MediaReviewsArgs = {\n  limit: InputMaybe<Scalars['Int']['input']>;\n  page: InputMaybe<Scalars['Int']['input']>;\n  perPage: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<ReviewSort>>>;\n};\n\n\n/** Anime or Manga */\nexport type MediaSourceArgs = {\n  version: InputMaybe<Scalars['Int']['input']>;\n};\n\n\n/** Anime or Manga */\nexport type MediaStaffArgs = {\n  page: InputMaybe<Scalars['Int']['input']>;\n  perPage: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<StaffSort>>>;\n};\n\n\n/** Anime or Manga */\nexport type MediaStatusArgs = {\n  version: InputMaybe<Scalars['Int']['input']>;\n};\n\n\n/** Anime or Manga */\nexport type MediaStudiosArgs = {\n  isMain: InputMaybe<Scalars['Boolean']['input']>;\n  sort: InputMaybe<Array<InputMaybe<StudioSort>>>;\n};\n\n\n/** Anime or Manga */\nexport type MediaTrendsArgs = {\n  page: InputMaybe<Scalars['Int']['input']>;\n  perPage: InputMaybe<Scalars['Int']['input']>;\n  releasing: InputMaybe<Scalars['Boolean']['input']>;\n  sort: InputMaybe<Array<InputMaybe<MediaTrendSort>>>;\n};\n\n/** Internal - Media characters separated */\nexport type MediaCharacter = {\n  /** The characters in the media voiced by the parent actor */\n  character: Maybe<Character>;\n  /** Media specific character name */\n  characterName: Maybe<Scalars['String']['output']>;\n  dubGroup: Maybe<Scalars['String']['output']>;\n  /** The id of the connection */\n  id: Maybe<Scalars['Int']['output']>;\n  /** The characters role in the media */\n  role: Maybe<CharacterRole>;\n  roleNotes: Maybe<Scalars['String']['output']>;\n  /** The voice actor of the character */\n  voiceActor: Maybe<Staff>;\n};\n\nexport type MediaConnection = {\n  edges: Maybe<Array<Maybe<MediaEdge>>>;\n  nodes: Maybe<Array<Maybe<Media>>>;\n  /** The pagination information */\n  pageInfo: Maybe<PageInfo>;\n};\n\nexport type MediaCoverImage = {\n  /** Average #hex color of cover image */\n  color: Maybe<Scalars['String']['output']>;\n  /** The cover image url of the media at its largest size. If this size isn't available, large will be provided instead. */\n  extraLarge: Maybe<Scalars['String']['output']>;\n  /** The cover image url of the media at a large size */\n  large: Maybe<Scalars['String']['output']>;\n  /** The cover image url of the media at medium size */\n  medium: Maybe<Scalars['String']['output']>;\n};\n\n/** Notification for when a media entry's data was changed in a significant way impacting users' list tracking */\nexport type MediaDataChangeNotification = {\n  /** The reason for the media data change */\n  context: Maybe<Scalars['String']['output']>;\n  /** The time the notification was created at */\n  createdAt: Maybe<Scalars['Int']['output']>;\n  /** The id of the Notification */\n  id: Scalars['Int']['output'];\n  /** The media that received data changes */\n  media: Maybe<Media>;\n  /** The id of the media that received data changes */\n  mediaId: Scalars['Int']['output'];\n  /** The reason for the media data change */\n  reason: Maybe<Scalars['String']['output']>;\n  /** The type of notification */\n  type: Maybe<NotificationType>;\n};\n\n/** Notification for when a media tracked in a user's list is deleted from the site */\nexport type MediaDeletionNotification = {\n  /** The reason for the media deletion */\n  context: Maybe<Scalars['String']['output']>;\n  /** The time the notification was created at */\n  createdAt: Maybe<Scalars['Int']['output']>;\n  /** The title of the deleted media */\n  deletedMediaTitle: Maybe<Scalars['String']['output']>;\n  /** The id of the Notification */\n  id: Scalars['Int']['output'];\n  /** The reason for the media deletion */\n  reason: Maybe<Scalars['String']['output']>;\n  /** The type of notification */\n  type: Maybe<NotificationType>;\n};\n\n/** Media connection edge */\nexport type MediaEdge = {\n  /** Media specific character name */\n  characterName: Maybe<Scalars['String']['output']>;\n  /** The characters role in the media */\n  characterRole: Maybe<CharacterRole>;\n  /** The characters in the media voiced by the parent actor */\n  characters: Maybe<Array<Maybe<Character>>>;\n  /** Used for grouping roles where multiple dubs exist for the same language. Either dubbing company name or language variant. */\n  dubGroup: Maybe<Scalars['String']['output']>;\n  /** The order the media should be displayed from the users favourites */\n  favouriteOrder: Maybe<Scalars['Int']['output']>;\n  /** The id of the connection */\n  id: Maybe<Scalars['Int']['output']>;\n  /** If the studio is the main animation studio of the media (For Studio->MediaConnection field only) */\n  isMainStudio: Scalars['Boolean']['output'];\n  node: Maybe<Media>;\n  /** The type of relation to the parent model */\n  relationType: Maybe<MediaRelation>;\n  /** Notes regarding the VA's role for the character */\n  roleNotes: Maybe<Scalars['String']['output']>;\n  /** The role of the staff member in the production of the media */\n  staffRole: Maybe<Scalars['String']['output']>;\n  /** The voice actors of the character with role date */\n  voiceActorRoles: Maybe<Array<Maybe<StaffRoleType>>>;\n  /** The voice actors of the character */\n  voiceActors: Maybe<Array<Maybe<Staff>>>;\n};\n\n\n/** Media connection edge */\nexport type MediaEdgeRelationTypeArgs = {\n  version: InputMaybe<Scalars['Int']['input']>;\n};\n\n\n/** Media connection edge */\nexport type MediaEdgeVoiceActorRolesArgs = {\n  language: InputMaybe<StaffLanguage>;\n  sort: InputMaybe<Array<InputMaybe<StaffSort>>>;\n};\n\n\n/** Media connection edge */\nexport type MediaEdgeVoiceActorsArgs = {\n  language: InputMaybe<StaffLanguage>;\n  sort: InputMaybe<Array<InputMaybe<StaffSort>>>;\n};\n\n/** An external link to another site related to the media or staff member */\nexport type MediaExternalLink = {\n  color: Maybe<Scalars['String']['output']>;\n  /** The icon image url of the site. Not available for all links. Transparent PNG 64x64 */\n  icon: Maybe<Scalars['String']['output']>;\n  /** The id of the external link */\n  id: Scalars['Int']['output'];\n  isDisabled: Maybe<Scalars['Boolean']['output']>;\n  /** Language the site content is in. See Staff language field for values. */\n  language: Maybe<Scalars['String']['output']>;\n  notes: Maybe<Scalars['String']['output']>;\n  /** The links website site name */\n  site: Scalars['String']['output'];\n  /** The links website site id */\n  siteId: Maybe<Scalars['Int']['output']>;\n  type: Maybe<ExternalLinkType>;\n  /** The url of the external link or base url of link source */\n  url: Maybe<Scalars['String']['output']>;\n};\n\n/** An external link to another site related to the media */\nexport type MediaExternalLinkInput = {\n  /** The id of the external link */\n  id: Scalars['Int']['input'];\n  /** The site location of the external link */\n  site: Scalars['String']['input'];\n  /** The url of the external link */\n  url: Scalars['String']['input'];\n};\n\n/** The format the media was released in */\nexport enum MediaFormat {\n  /** Professionally published manga with more than one chapter */\n  Manga = 'MANGA',\n  /** Anime movies with a theatrical release */\n  Movie = 'MOVIE',\n  /** Short anime released as a music video */\n  Music = 'MUSIC',\n  /** Written books released as a series of light novels */\n  Novel = 'NOVEL',\n  /** (Original Net Animation) Anime that have been originally released online or are only available through streaming services. */\n  Ona = 'ONA',\n  /** Manga with just one chapter */\n  OneShot = 'ONE_SHOT',\n  /** (Original Video Animation) Anime that have been released directly on DVD/Blu-ray without originally going through a theatrical release or television broadcast */\n  Ova = 'OVA',\n  /** Special episodes that have been included in DVD/Blu-ray releases, picture dramas, pilots, etc */\n  Special = 'SPECIAL',\n  /** Anime broadcast on television */\n  Tv = 'TV',\n  /** Anime which are under 15 minutes in length and broadcast on television */\n  TvShort = 'TV_SHORT'\n}\n\n/** List of anime or manga */\nexport type MediaList = {\n  /** Map of advanced scores with name keys */\n  advancedScores: Maybe<Scalars['Json']['output']>;\n  /** When the entry was completed by the user */\n  completedAt: Maybe<FuzzyDate>;\n  /** When the entry data was created */\n  createdAt: Maybe<Scalars['Int']['output']>;\n  /** Map of booleans for which custom lists the entry are in */\n  customLists: Maybe<Scalars['Json']['output']>;\n  /** If the entry shown be hidden from non-custom lists */\n  hiddenFromStatusLists: Maybe<Scalars['Boolean']['output']>;\n  /** The id of the list entry */\n  id: Scalars['Int']['output'];\n  media: Maybe<Media>;\n  /** The id of the media */\n  mediaId: Scalars['Int']['output'];\n  /** Text notes */\n  notes: Maybe<Scalars['String']['output']>;\n  /** Priority of planning */\n  priority: Maybe<Scalars['Int']['output']>;\n  /** If the entry should only be visible to authenticated user */\n  private: Maybe<Scalars['Boolean']['output']>;\n  /** The amount of episodes/chapters consumed by the user */\n  progress: Maybe<Scalars['Int']['output']>;\n  /** The amount of volumes read by the user */\n  progressVolumes: Maybe<Scalars['Int']['output']>;\n  /** The amount of times the user has rewatched/read the media */\n  repeat: Maybe<Scalars['Int']['output']>;\n  /** The score of the entry */\n  score: Maybe<Scalars['Float']['output']>;\n  /** When the entry was started by the user */\n  startedAt: Maybe<FuzzyDate>;\n  /** The watching/reading status */\n  status: Maybe<MediaListStatus>;\n  /** When the entry data was last updated */\n  updatedAt: Maybe<Scalars['Int']['output']>;\n  user: Maybe<User>;\n  /** The id of the user owner of the list entry */\n  userId: Scalars['Int']['output'];\n};\n\n\n/** List of anime or manga */\nexport type MediaListCustomListsArgs = {\n  asArray: InputMaybe<Scalars['Boolean']['input']>;\n};\n\n\n/** List of anime or manga */\nexport type MediaListScoreArgs = {\n  format: InputMaybe<ScoreFormat>;\n};\n\n/** List of anime or manga */\nexport type MediaListCollection = {\n  /**\n   * A map of media list entry arrays grouped by custom lists\n   * @deprecated Not GraphQL spec compliant, use lists field instead.\n   */\n  customLists: Maybe<Array<Maybe<Array<Maybe<MediaList>>>>>;\n  /** If there is another chunk */\n  hasNextChunk: Maybe<Scalars['Boolean']['output']>;\n  /** Grouped media list entries */\n  lists: Maybe<Array<Maybe<MediaListGroup>>>;\n  /**\n   * A map of media list entry arrays grouped by status\n   * @deprecated Not GraphQL spec compliant, use lists field instead.\n   */\n  statusLists: Maybe<Array<Maybe<Array<Maybe<MediaList>>>>>;\n  /** The owner of the list */\n  user: Maybe<User>;\n};\n\n\n/** List of anime or manga */\nexport type MediaListCollectionCustomListsArgs = {\n  asArray: InputMaybe<Scalars['Boolean']['input']>;\n};\n\n\n/** List of anime or manga */\nexport type MediaListCollectionStatusListsArgs = {\n  asArray: InputMaybe<Scalars['Boolean']['input']>;\n};\n\n/** List group of anime or manga entries */\nexport type MediaListGroup = {\n  /** Media list entries */\n  entries: Maybe<Array<Maybe<MediaList>>>;\n  isCustomList: Maybe<Scalars['Boolean']['output']>;\n  isSplitCompletedList: Maybe<Scalars['Boolean']['output']>;\n  name: Maybe<Scalars['String']['output']>;\n  status: Maybe<MediaListStatus>;\n};\n\n/** A user's list options */\nexport type MediaListOptions = {\n  /** The user's anime list options */\n  animeList: Maybe<MediaListTypeOptions>;\n  /** The user's manga list options */\n  mangaList: Maybe<MediaListTypeOptions>;\n  /** The default order list rows should be displayed in */\n  rowOrder: Maybe<Scalars['String']['output']>;\n  /** The score format the user is using for media lists */\n  scoreFormat: Maybe<ScoreFormat>;\n  /**\n   * The list theme options for both lists\n   * @deprecated No longer used\n   */\n  sharedTheme: Maybe<Scalars['Json']['output']>;\n  /**\n   * If the shared theme should be used instead of the individual list themes\n   * @deprecated No longer used\n   */\n  sharedThemeEnabled: Maybe<Scalars['Boolean']['output']>;\n  /** @deprecated No longer used */\n  useLegacyLists: Maybe<Scalars['Boolean']['output']>;\n};\n\n/** A user's list options for anime or manga lists */\nexport type MediaListOptionsInput = {\n  /** The names of the user's advanced scoring sections */\n  advancedScoring: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;\n  /** If advanced scoring is enabled */\n  advancedScoringEnabled: InputMaybe<Scalars['Boolean']['input']>;\n  /** The names of the user's custom lists */\n  customLists: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;\n  /** The order each list should be displayed in */\n  sectionOrder: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;\n  /** If the completed sections of the list should be separated by format */\n  splitCompletedSectionByFormat: InputMaybe<Scalars['Boolean']['input']>;\n  /** list theme */\n  theme: InputMaybe<Scalars['String']['input']>;\n};\n\n/** Media list sort enums */\nexport enum MediaListSort {\n  AddedTime = 'ADDED_TIME',\n  AddedTimeDesc = 'ADDED_TIME_DESC',\n  FinishedOn = 'FINISHED_ON',\n  FinishedOnDesc = 'FINISHED_ON_DESC',\n  MediaId = 'MEDIA_ID',\n  MediaIdDesc = 'MEDIA_ID_DESC',\n  MediaPopularity = 'MEDIA_POPULARITY',\n  MediaPopularityDesc = 'MEDIA_POPULARITY_DESC',\n  MediaTitleEnglish = 'MEDIA_TITLE_ENGLISH',\n  MediaTitleEnglishDesc = 'MEDIA_TITLE_ENGLISH_DESC',\n  MediaTitleNative = 'MEDIA_TITLE_NATIVE',\n  MediaTitleNativeDesc = 'MEDIA_TITLE_NATIVE_DESC',\n  MediaTitleRomaji = 'MEDIA_TITLE_ROMAJI',\n  MediaTitleRomajiDesc = 'MEDIA_TITLE_ROMAJI_DESC',\n  Priority = 'PRIORITY',\n  PriorityDesc = 'PRIORITY_DESC',\n  Progress = 'PROGRESS',\n  ProgressDesc = 'PROGRESS_DESC',\n  ProgressVolumes = 'PROGRESS_VOLUMES',\n  ProgressVolumesDesc = 'PROGRESS_VOLUMES_DESC',\n  Repeat = 'REPEAT',\n  RepeatDesc = 'REPEAT_DESC',\n  Score = 'SCORE',\n  ScoreDesc = 'SCORE_DESC',\n  StartedOn = 'STARTED_ON',\n  StartedOnDesc = 'STARTED_ON_DESC',\n  Status = 'STATUS',\n  StatusDesc = 'STATUS_DESC',\n  UpdatedTime = 'UPDATED_TIME',\n  UpdatedTimeDesc = 'UPDATED_TIME_DESC'\n}\n\n/** Media list watching/reading status enum. */\nexport enum MediaListStatus {\n  /** Finished watching/reading */\n  Completed = 'COMPLETED',\n  /** Currently watching/reading */\n  Current = 'CURRENT',\n  /** Stopped watching/reading before completing */\n  Dropped = 'DROPPED',\n  /** Paused watching/reading */\n  Paused = 'PAUSED',\n  /** Planning to watch/read */\n  Planning = 'PLANNING',\n  /** Re-watching/reading */\n  Repeating = 'REPEATING'\n}\n\n/** A user's list options for anime or manga lists */\nexport type MediaListTypeOptions = {\n  /** The names of the user's advanced scoring sections */\n  advancedScoring: Maybe<Array<Maybe<Scalars['String']['output']>>>;\n  /** If advanced scoring is enabled */\n  advancedScoringEnabled: Maybe<Scalars['Boolean']['output']>;\n  /** The names of the user's custom lists */\n  customLists: Maybe<Array<Maybe<Scalars['String']['output']>>>;\n  /** The order each list should be displayed in */\n  sectionOrder: Maybe<Array<Maybe<Scalars['String']['output']>>>;\n  /** If the completed sections of the list should be separated by format */\n  splitCompletedSectionByFormat: Maybe<Scalars['Boolean']['output']>;\n  /**\n   * The list theme options\n   * @deprecated This field has not yet been fully implemented and may change without warning\n   */\n  theme: Maybe<Scalars['Json']['output']>;\n};\n\n/** Notification for when a media entry is merged into another for a user who had it on their list */\nexport type MediaMergeNotification = {\n  /** The reason for the media data change */\n  context: Maybe<Scalars['String']['output']>;\n  /** The time the notification was created at */\n  createdAt: Maybe<Scalars['Int']['output']>;\n  /** The title of the deleted media */\n  deletedMediaTitles: Maybe<Array<Maybe<Scalars['String']['output']>>>;\n  /** The id of the Notification */\n  id: Scalars['Int']['output'];\n  /** The media that was merged into */\n  media: Maybe<Media>;\n  /** The id of the media that was merged into */\n  mediaId: Scalars['Int']['output'];\n  /** The reason for the media merge */\n  reason: Maybe<Scalars['String']['output']>;\n  /** The type of notification */\n  type: Maybe<NotificationType>;\n};\n\n/** The ranking of a media in a particular time span and format compared to other media */\nexport type MediaRank = {\n  /** If the ranking is based on all time instead of a season/year */\n  allTime: Maybe<Scalars['Boolean']['output']>;\n  /** String that gives context to the ranking type and time span */\n  context: Scalars['String']['output'];\n  /** The format the media is ranked within */\n  format: MediaFormat;\n  /** The id of the rank */\n  id: Scalars['Int']['output'];\n  /** The numerical rank of the media */\n  rank: Scalars['Int']['output'];\n  /** The season the media is ranked within */\n  season: Maybe<MediaSeason>;\n  /** The type of ranking */\n  type: MediaRankType;\n  /** The year the media is ranked within */\n  year: Maybe<Scalars['Int']['output']>;\n};\n\n/** The type of ranking */\nexport enum MediaRankType {\n  /** Ranking is based on the media's popularity */\n  Popular = 'POPULAR',\n  /** Ranking is based on the media's ratings/score */\n  Rated = 'RATED'\n}\n\n/** Type of relation media has to its parent. */\nexport enum MediaRelation {\n  /** An adaption of this media into a different format */\n  Adaptation = 'ADAPTATION',\n  /** An alternative version of the same media */\n  Alternative = 'ALTERNATIVE',\n  /** Shares at least 1 character */\n  Character = 'CHARACTER',\n  /** Version 2 only. */\n  Compilation = 'COMPILATION',\n  /** Version 2 only. */\n  Contains = 'CONTAINS',\n  /** Other */\n  Other = 'OTHER',\n  /** The media a side story is from */\n  Parent = 'PARENT',\n  /** Released before the relation */\n  Prequel = 'PREQUEL',\n  /** Version 3 only. The media is set in the same universe as another media */\n  SameUniverse = 'SAME_UNIVERSE',\n  /** Released after the relation */\n  Sequel = 'SEQUEL',\n  /** A side story of the parent media */\n  SideStory = 'SIDE_STORY',\n  /** Version 2 only. The source material the media was adapted from */\n  Source = 'SOURCE',\n  /** An alternative version of the media with a different primary focus */\n  SpinOff = 'SPIN_OFF',\n  /** A shortened and summarized version */\n  Summary = 'SUMMARY'\n}\n\nexport enum MediaSeason {\n  /** Predominantly started airing between October and November */\n  Fall = 'FALL',\n  /** Predominantly started airing between April and June */\n  Spring = 'SPRING',\n  /** Predominantly started airing between July and September */\n  Summer = 'SUMMER',\n  /** Predominantly started airing between January and March */\n  Winter = 'WINTER'\n}\n\n/** Media sort enums */\nexport enum MediaSort {\n  Chapters = 'CHAPTERS',\n  ChaptersDesc = 'CHAPTERS_DESC',\n  Duration = 'DURATION',\n  DurationDesc = 'DURATION_DESC',\n  EndDate = 'END_DATE',\n  EndDateDesc = 'END_DATE_DESC',\n  Episodes = 'EPISODES',\n  EpisodesDesc = 'EPISODES_DESC',\n  Favourites = 'FAVOURITES',\n  FavouritesDesc = 'FAVOURITES_DESC',\n  Format = 'FORMAT',\n  FormatDesc = 'FORMAT_DESC',\n  Id = 'ID',\n  IdDesc = 'ID_DESC',\n  Popularity = 'POPULARITY',\n  PopularityDesc = 'POPULARITY_DESC',\n  Score = 'SCORE',\n  ScoreDesc = 'SCORE_DESC',\n  SearchMatch = 'SEARCH_MATCH',\n  StartDate = 'START_DATE',\n  StartDateDesc = 'START_DATE_DESC',\n  Status = 'STATUS',\n  StatusDesc = 'STATUS_DESC',\n  TitleEnglish = 'TITLE_ENGLISH',\n  TitleEnglishDesc = 'TITLE_ENGLISH_DESC',\n  TitleNative = 'TITLE_NATIVE',\n  TitleNativeDesc = 'TITLE_NATIVE_DESC',\n  TitleRomaji = 'TITLE_ROMAJI',\n  TitleRomajiDesc = 'TITLE_ROMAJI_DESC',\n  Trending = 'TRENDING',\n  TrendingDesc = 'TRENDING_DESC',\n  Type = 'TYPE',\n  TypeDesc = 'TYPE_DESC',\n  UpdatedAt = 'UPDATED_AT',\n  UpdatedAtDesc = 'UPDATED_AT_DESC',\n  Volumes = 'VOLUMES',\n  VolumesDesc = 'VOLUMES_DESC'\n}\n\n/** Source type the media was adapted from */\nexport enum MediaSource {\n  /** Version 2+ only. Japanese Anime */\n  Anime = 'ANIME',\n  /** Version 3 only. Comics excluding manga */\n  Comic = 'COMIC',\n  /** Version 2+ only. Self-published works */\n  Doujinshi = 'DOUJINSHI',\n  /** Version 3 only. Games excluding video games */\n  Game = 'GAME',\n  /** Written work published in volumes */\n  LightNovel = 'LIGHT_NOVEL',\n  /** Version 3 only. Live action media such as movies or TV show */\n  LiveAction = 'LIVE_ACTION',\n  /** Asian comic book */\n  Manga = 'MANGA',\n  /** Version 3 only. Multimedia project */\n  MultimediaProject = 'MULTIMEDIA_PROJECT',\n  /** Version 2+ only. Written works not published in volumes */\n  Novel = 'NOVEL',\n  /** An original production not based of another work */\n  Original = 'ORIGINAL',\n  /** Other */\n  Other = 'OTHER',\n  /** Version 3 only. Picture book */\n  PictureBook = 'PICTURE_BOOK',\n  /** Video game */\n  VideoGame = 'VIDEO_GAME',\n  /** Video game driven primary by text and narrative */\n  VisualNovel = 'VISUAL_NOVEL',\n  /** Version 3 only. Written works published online */\n  WebNovel = 'WEB_NOVEL'\n}\n\n/** A media's statistics */\nexport type MediaStats = {\n  /** @deprecated Replaced by MediaTrends */\n  airingProgression: Maybe<Array<Maybe<AiringProgression>>>;\n  scoreDistribution: Maybe<Array<Maybe<ScoreDistribution>>>;\n  statusDistribution: Maybe<Array<Maybe<StatusDistribution>>>;\n};\n\n/** The current releasing status of the media */\nexport enum MediaStatus {\n  /** Ended before the work could be finished */\n  Cancelled = 'CANCELLED',\n  /** Has completed and is no longer being released */\n  Finished = 'FINISHED',\n  /** Version 2 only. Is currently paused from releasing and will resume at a later date */\n  Hiatus = 'HIATUS',\n  /** To be released at a later date */\n  NotYetReleased = 'NOT_YET_RELEASED',\n  /** Currently releasing */\n  Releasing = 'RELEASING'\n}\n\n/** Data and links to legal streaming episodes on external sites */\nexport type MediaStreamingEpisode = {\n  /** The site location of the streaming episodes */\n  site: Maybe<Scalars['String']['output']>;\n  /** Url of episode image thumbnail */\n  thumbnail: Maybe<Scalars['String']['output']>;\n  /** Title of the episode */\n  title: Maybe<Scalars['String']['output']>;\n  /** The url of the episode */\n  url: Maybe<Scalars['String']['output']>;\n};\n\n/** Media submission */\nexport type MediaSubmission = {\n  /** Data Mod assigned to handle the submission */\n  assignee: Maybe<User>;\n  changes: Maybe<Array<Maybe<Scalars['String']['output']>>>;\n  characters: Maybe<Array<Maybe<MediaSubmissionComparison>>>;\n  createdAt: Maybe<Scalars['Int']['output']>;\n  externalLinks: Maybe<Array<Maybe<MediaSubmissionComparison>>>;\n  /** The id of the submission */\n  id: Scalars['Int']['output'];\n  /** Whether the submission is locked */\n  locked: Maybe<Scalars['Boolean']['output']>;\n  media: Maybe<Media>;\n  notes: Maybe<Scalars['String']['output']>;\n  relations: Maybe<Array<Maybe<MediaEdge>>>;\n  source: Maybe<Scalars['String']['output']>;\n  staff: Maybe<Array<Maybe<MediaSubmissionComparison>>>;\n  /** Status of the submission */\n  status: Maybe<SubmissionStatus>;\n  studios: Maybe<Array<Maybe<MediaSubmissionComparison>>>;\n  submission: Maybe<Media>;\n  /** User submitter of the submission */\n  submitter: Maybe<User>;\n  submitterStats: Maybe<Scalars['Json']['output']>;\n};\n\n/** Media submission with comparison to current data */\nexport type MediaSubmissionComparison = {\n  character: Maybe<MediaCharacter>;\n  externalLink: Maybe<MediaExternalLink>;\n  staff: Maybe<StaffEdge>;\n  studio: Maybe<StudioEdge>;\n  submission: Maybe<MediaSubmissionEdge>;\n};\n\nexport type MediaSubmissionEdge = {\n  character: Maybe<Character>;\n  characterName: Maybe<Scalars['String']['output']>;\n  characterRole: Maybe<CharacterRole>;\n  characterSubmission: Maybe<Character>;\n  dubGroup: Maybe<Scalars['String']['output']>;\n  externalLink: Maybe<MediaExternalLink>;\n  /** The id of the direct submission */\n  id: Maybe<Scalars['Int']['output']>;\n  isMain: Maybe<Scalars['Boolean']['output']>;\n  media: Maybe<Media>;\n  roleNotes: Maybe<Scalars['String']['output']>;\n  staff: Maybe<Staff>;\n  staffRole: Maybe<Scalars['String']['output']>;\n  staffSubmission: Maybe<Staff>;\n  studio: Maybe<Studio>;\n  voiceActor: Maybe<Staff>;\n  voiceActorSubmission: Maybe<Staff>;\n};\n\n/** Notification for when a media submission is accepted, partially accepted, or rejected */\nexport type MediaSubmissionUpdateNotification = {\n  /** The notification context text */\n  contexts: Maybe<Array<Maybe<Scalars['String']['output']>>>;\n  /** The time the notification was created at */\n  createdAt: Maybe<Scalars['Int']['output']>;\n  /** The id of the Notification */\n  id: Scalars['Int']['output'];\n  /** The media that was created or modified. If this submission was to create a new media and it was rejected, this will be null. */\n  media: Maybe<Media>;\n  /** The notes of the submission */\n  notes: Maybe<Scalars['String']['output']>;\n  /** The status of the submission */\n  status: Maybe<Scalars['String']['output']>;\n  /** The title of the media that was submitted. If this submission was to edit an existing media, this will be null. */\n  submittedTitle: Maybe<Scalars['String']['output']>;\n  /** The type of notification */\n  type: Maybe<NotificationType>;\n};\n\n/** A tag that describes a theme or element of the media */\nexport type MediaTag = {\n  /** The categories of tags this tag belongs to */\n  category: Maybe<Scalars['String']['output']>;\n  /** A general description of the tag */\n  description: Maybe<Scalars['String']['output']>;\n  /** The id of the tag */\n  id: Scalars['Int']['output'];\n  /** If the tag is only for adult 18+ media */\n  isAdult: Maybe<Scalars['Boolean']['output']>;\n  /** If the tag could be a spoiler for any media */\n  isGeneralSpoiler: Maybe<Scalars['Boolean']['output']>;\n  /** If the tag is a spoiler for this media */\n  isMediaSpoiler: Maybe<Scalars['Boolean']['output']>;\n  /** The name of the tag */\n  name: Scalars['String']['output'];\n  /** The relevance ranking of the tag out of the 100 for this media */\n  rank: Maybe<Scalars['Int']['output']>;\n  /** The user who submitted the tag */\n  userId: Maybe<Scalars['Int']['output']>;\n};\n\n/** The official titles of the media in various languages */\nexport type MediaTitle = {\n  /** The official english title */\n  english: Maybe<Scalars['String']['output']>;\n  /** Official title in it's native language */\n  native: Maybe<Scalars['String']['output']>;\n  /** The romanization of the native language title */\n  romaji: Maybe<Scalars['String']['output']>;\n  /** The currently authenticated users preferred title language. Default romaji for non-authenticated */\n  userPreferred: Maybe<Scalars['String']['output']>;\n};\n\n\n/** The official titles of the media in various languages */\nexport type MediaTitleEnglishArgs = {\n  stylised: InputMaybe<Scalars['Boolean']['input']>;\n};\n\n\n/** The official titles of the media in various languages */\nexport type MediaTitleNativeArgs = {\n  stylised: InputMaybe<Scalars['Boolean']['input']>;\n};\n\n\n/** The official titles of the media in various languages */\nexport type MediaTitleRomajiArgs = {\n  stylised: InputMaybe<Scalars['Boolean']['input']>;\n};\n\n/** The official titles of the media in various languages */\nexport type MediaTitleInput = {\n  /** The official english title */\n  english: InputMaybe<Scalars['String']['input']>;\n  /** Official title in it's native language */\n  native: InputMaybe<Scalars['String']['input']>;\n  /** The romanization of the native language title */\n  romaji: InputMaybe<Scalars['String']['input']>;\n};\n\n/** Media trailer or advertisement */\nexport type MediaTrailer = {\n  /** The trailer video id */\n  id: Maybe<Scalars['String']['output']>;\n  /** The site the video is hosted by (Currently either youtube or dailymotion) */\n  site: Maybe<Scalars['String']['output']>;\n  /** The url for the thumbnail image of the video */\n  thumbnail: Maybe<Scalars['String']['output']>;\n};\n\n/** Daily media statistics */\nexport type MediaTrend = {\n  /** A weighted average score of all the user's scores of the media */\n  averageScore: Maybe<Scalars['Int']['output']>;\n  /** The day the data was recorded (timestamp) */\n  date: Scalars['Int']['output'];\n  /** The episode number of the anime released on this day */\n  episode: Maybe<Scalars['Int']['output']>;\n  /** The number of users with watching/reading the media */\n  inProgress: Maybe<Scalars['Int']['output']>;\n  /** The related media */\n  media: Maybe<Media>;\n  /** The id of the tag */\n  mediaId: Scalars['Int']['output'];\n  /** The number of users with the media on their list */\n  popularity: Maybe<Scalars['Int']['output']>;\n  /** If the media was being released at this time */\n  releasing: Scalars['Boolean']['output'];\n  /** The amount of media activity on the day */\n  trending: Scalars['Int']['output'];\n};\n\nexport type MediaTrendConnection = {\n  edges: Maybe<Array<Maybe<MediaTrendEdge>>>;\n  nodes: Maybe<Array<Maybe<MediaTrend>>>;\n  /** The pagination information */\n  pageInfo: Maybe<PageInfo>;\n};\n\n/** Media trend connection edge */\nexport type MediaTrendEdge = {\n  node: Maybe<MediaTrend>;\n};\n\n/** Media trend sort enums */\nexport enum MediaTrendSort {\n  Date = 'DATE',\n  DateDesc = 'DATE_DESC',\n  Episode = 'EPISODE',\n  EpisodeDesc = 'EPISODE_DESC',\n  Id = 'ID',\n  IdDesc = 'ID_DESC',\n  MediaId = 'MEDIA_ID',\n  MediaIdDesc = 'MEDIA_ID_DESC',\n  Popularity = 'POPULARITY',\n  PopularityDesc = 'POPULARITY_DESC',\n  Score = 'SCORE',\n  ScoreDesc = 'SCORE_DESC',\n  Trending = 'TRENDING',\n  TrendingDesc = 'TRENDING_DESC'\n}\n\n/** Media type enum, anime or manga. */\nexport enum MediaType {\n  /** Japanese Anime */\n  Anime = 'ANIME',\n  /** Asian comic */\n  Manga = 'MANGA'\n}\n\n/** User message activity */\nexport type MessageActivity = {\n  /** The time the activity was created at */\n  createdAt: Scalars['Int']['output'];\n  /** The id of the activity */\n  id: Scalars['Int']['output'];\n  /** If the currently authenticated user liked the activity */\n  isLiked: Maybe<Scalars['Boolean']['output']>;\n  /** If the activity is locked and can receive replies */\n  isLocked: Maybe<Scalars['Boolean']['output']>;\n  /** If the activity is pinned to the top of the users activity feed */\n  isPinned: Maybe<Scalars['Boolean']['output']>;\n  /** If the message is private and only viewable to the sender and recipients */\n  isPrivate: Maybe<Scalars['Boolean']['output']>;\n  /** If the currently authenticated user is subscribed to the activity */\n  isSubscribed: Maybe<Scalars['Boolean']['output']>;\n  /** The amount of likes the activity has */\n  likeCount: Scalars['Int']['output'];\n  /** The users who liked the activity */\n  likes: Maybe<Array<Maybe<User>>>;\n  /** The message text (Markdown) */\n  message: Maybe<Scalars['String']['output']>;\n  /** The user who sent the activity message */\n  messenger: Maybe<User>;\n  /** The user id of the activity's sender */\n  messengerId: Maybe<Scalars['Int']['output']>;\n  /** The user who the activity message was sent to */\n  recipient: Maybe<User>;\n  /** The user id of the activity's recipient */\n  recipientId: Maybe<Scalars['Int']['output']>;\n  /** The written replies to the activity */\n  replies: Maybe<Array<Maybe<ActivityReply>>>;\n  /** The number of activity replies */\n  replyCount: Scalars['Int']['output'];\n  /** The url for the activity page on the AniList website */\n  siteUrl: Maybe<Scalars['String']['output']>;\n  /** The type of the activity */\n  type: Maybe<ActivityType>;\n};\n\n\n/** User message activity */\nexport type MessageActivityMessageArgs = {\n  asHtml: InputMaybe<Scalars['Boolean']['input']>;\n};\n\nexport type ModAction = {\n  createdAt: Scalars['Int']['output'];\n  data: Maybe<Scalars['String']['output']>;\n  /** The id of the action */\n  id: Scalars['Int']['output'];\n  mod: Maybe<User>;\n  objectId: Maybe<Scalars['Int']['output']>;\n  objectType: Maybe<Scalars['String']['output']>;\n  type: Maybe<ModActionType>;\n  user: Maybe<User>;\n};\n\nexport enum ModActionType {\n  Anon = 'ANON',\n  Ban = 'BAN',\n  Delete = 'DELETE',\n  Edit = 'EDIT',\n  Expire = 'EXPIRE',\n  Note = 'NOTE',\n  Report = 'REPORT',\n  Reset = 'RESET'\n}\n\n/** Mod role enums */\nexport enum ModRole {\n  /** An AniList administrator */\n  Admin = 'ADMIN',\n  /** An anime data moderator */\n  AnimeData = 'ANIME_DATA',\n  /** A character data moderator */\n  CharacterData = 'CHARACTER_DATA',\n  /** A community moderator */\n  Community = 'COMMUNITY',\n  /** An AniList developer */\n  Developer = 'DEVELOPER',\n  /** A discord community moderator */\n  DiscordCommunity = 'DISCORD_COMMUNITY',\n  /** A lead anime data moderator */\n  LeadAnimeData = 'LEAD_ANIME_DATA',\n  /** A lead community moderator */\n  LeadCommunity = 'LEAD_COMMUNITY',\n  /** A head developer of AniList */\n  LeadDeveloper = 'LEAD_DEVELOPER',\n  /** A lead manga data moderator */\n  LeadMangaData = 'LEAD_MANGA_DATA',\n  /** A lead social media moderator */\n  LeadSocialMedia = 'LEAD_SOCIAL_MEDIA',\n  /** A manga data moderator */\n  MangaData = 'MANGA_DATA',\n  /** A retired moderator */\n  Retired = 'RETIRED',\n  /** A social media moderator */\n  SocialMedia = 'SOCIAL_MEDIA',\n  /** A staff data moderator */\n  StaffData = 'STAFF_DATA'\n}\n\nexport type Mutation = {\n  /** Delete an activity item of the authenticated users */\n  DeleteActivity: Maybe<Deleted>;\n  /** Delete an activity reply of the authenticated users */\n  DeleteActivityReply: Maybe<Deleted>;\n  /** Delete a custom list and remove the list entries from it */\n  DeleteCustomList: Maybe<Deleted>;\n  /** Delete a media list entry */\n  DeleteMediaListEntry: Maybe<Deleted>;\n  /** Delete a review */\n  DeleteReview: Maybe<Deleted>;\n  /** Delete a thread */\n  DeleteThread: Maybe<Deleted>;\n  /** Delete a thread comment */\n  DeleteThreadComment: Maybe<Deleted>;\n  /** Rate a review */\n  RateReview: Maybe<Review>;\n  /** Create or update an activity reply */\n  SaveActivityReply: Maybe<ActivityReply>;\n  /** Update list activity (Mod Only) */\n  SaveListActivity: Maybe<ListActivity>;\n  /** Create or update a media list entry */\n  SaveMediaListEntry: Maybe<MediaList>;\n  /** Create or update message activity for the currently authenticated user */\n  SaveMessageActivity: Maybe<MessageActivity>;\n  /** Recommendation a media */\n  SaveRecommendation: Maybe<Recommendation>;\n  /** Create or update a review */\n  SaveReview: Maybe<Review>;\n  /** Create or update text activity for the currently authenticated user */\n  SaveTextActivity: Maybe<TextActivity>;\n  /** Create or update a forum thread */\n  SaveThread: Maybe<Thread>;\n  /** Create or update a thread comment */\n  SaveThreadComment: Maybe<ThreadComment>;\n  /** Toggle activity to be pinned to the top of the user's activity feed */\n  ToggleActivityPin: Maybe<ActivityUnion>;\n  /** Toggle the subscription of an activity item */\n  ToggleActivitySubscription: Maybe<ActivityUnion>;\n  /** Favourite or unfavourite an anime, manga, character, staff member, or studio */\n  ToggleFavourite: Maybe<Favourites>;\n  /** Toggle the un/following of a user */\n  ToggleFollow: Maybe<User>;\n  /**\n   * Add or remove a like from a likeable type.\n   *                           Returns all the users who liked the same model\n   */\n  ToggleLike: Maybe<Array<Maybe<User>>>;\n  /** Add or remove a like from a likeable type. */\n  ToggleLikeV2: Maybe<LikeableUnion>;\n  /** Toggle the subscription of a forum thread */\n  ToggleThreadSubscription: Maybe<Thread>;\n  UpdateAniChartHighlights: Maybe<Scalars['Json']['output']>;\n  UpdateAniChartSettings: Maybe<Scalars['Json']['output']>;\n  /** Update the order favourites are displayed in */\n  UpdateFavouriteOrder: Maybe<Favourites>;\n  /** Update multiple media list entries to the same values */\n  UpdateMediaListEntries: Maybe<Array<Maybe<MediaList>>>;\n  UpdateUser: Maybe<User>;\n};\n\n\nexport type MutationDeleteActivityArgs = {\n  id: InputMaybe<Scalars['Int']['input']>;\n};\n\n\nexport type MutationDeleteActivityReplyArgs = {\n  id: InputMaybe<Scalars['Int']['input']>;\n};\n\n\nexport type MutationDeleteCustomListArgs = {\n  customList: InputMaybe<Scalars['String']['input']>;\n  type: InputMaybe<MediaType>;\n};\n\n\nexport type MutationDeleteMediaListEntryArgs = {\n  id: InputMaybe<Scalars['Int']['input']>;\n};\n\n\nexport type MutationDeleteReviewArgs = {\n  id: InputMaybe<Scalars['Int']['input']>;\n};\n\n\nexport type MutationDeleteThreadArgs = {\n  id: InputMaybe<Scalars['Int']['input']>;\n};\n\n\nexport type MutationDeleteThreadCommentArgs = {\n  id: InputMaybe<Scalars['Int']['input']>;\n};\n\n\nexport type MutationRateReviewArgs = {\n  rating: InputMaybe<ReviewRating>;\n  reviewId: InputMaybe<Scalars['Int']['input']>;\n};\n\n\nexport type MutationSaveActivityReplyArgs = {\n  activityId: InputMaybe<Scalars['Int']['input']>;\n  asMod: InputMaybe<Scalars['Boolean']['input']>;\n  id: InputMaybe<Scalars['Int']['input']>;\n  text: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type MutationSaveListActivityArgs = {\n  id: InputMaybe<Scalars['Int']['input']>;\n  locked: InputMaybe<Scalars['Boolean']['input']>;\n};\n\n\nexport type MutationSaveMediaListEntryArgs = {\n  advancedScores: InputMaybe<Array<InputMaybe<Scalars['Float']['input']>>>;\n  completedAt: InputMaybe<FuzzyDateInput>;\n  customLists: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;\n  hiddenFromStatusLists: InputMaybe<Scalars['Boolean']['input']>;\n  id: InputMaybe<Scalars['Int']['input']>;\n  mediaId: InputMaybe<Scalars['Int']['input']>;\n  notes: InputMaybe<Scalars['String']['input']>;\n  priority: InputMaybe<Scalars['Int']['input']>;\n  private: InputMaybe<Scalars['Boolean']['input']>;\n  progress: InputMaybe<Scalars['Int']['input']>;\n  progressVolumes: InputMaybe<Scalars['Int']['input']>;\n  repeat: InputMaybe<Scalars['Int']['input']>;\n  score: InputMaybe<Scalars['Float']['input']>;\n  scoreRaw: InputMaybe<Scalars['Int']['input']>;\n  startedAt: InputMaybe<FuzzyDateInput>;\n  status: InputMaybe<MediaListStatus>;\n};\n\n\nexport type MutationSaveMessageActivityArgs = {\n  asMod: InputMaybe<Scalars['Boolean']['input']>;\n  id: InputMaybe<Scalars['Int']['input']>;\n  locked: InputMaybe<Scalars['Boolean']['input']>;\n  message: InputMaybe<Scalars['String']['input']>;\n  private: InputMaybe<Scalars['Boolean']['input']>;\n  recipientId: InputMaybe<Scalars['Int']['input']>;\n};\n\n\nexport type MutationSaveRecommendationArgs = {\n  mediaId: InputMaybe<Scalars['Int']['input']>;\n  mediaRecommendationId: InputMaybe<Scalars['Int']['input']>;\n  rating: InputMaybe<RecommendationRating>;\n};\n\n\nexport type MutationSaveReviewArgs = {\n  body: InputMaybe<Scalars['String']['input']>;\n  id: InputMaybe<Scalars['Int']['input']>;\n  mediaId: InputMaybe<Scalars['Int']['input']>;\n  private: InputMaybe<Scalars['Boolean']['input']>;\n  score: InputMaybe<Scalars['Int']['input']>;\n  summary: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type MutationSaveTextActivityArgs = {\n  id: InputMaybe<Scalars['Int']['input']>;\n  locked: InputMaybe<Scalars['Boolean']['input']>;\n  text: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type MutationSaveThreadArgs = {\n  body: InputMaybe<Scalars['String']['input']>;\n  categories: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  id: InputMaybe<Scalars['Int']['input']>;\n  locked: InputMaybe<Scalars['Boolean']['input']>;\n  mediaCategories: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  sticky: InputMaybe<Scalars['Boolean']['input']>;\n  title: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type MutationSaveThreadCommentArgs = {\n  comment: InputMaybe<Scalars['String']['input']>;\n  id: InputMaybe<Scalars['Int']['input']>;\n  locked: InputMaybe<Scalars['Boolean']['input']>;\n  parentCommentId: InputMaybe<Scalars['Int']['input']>;\n  threadId: InputMaybe<Scalars['Int']['input']>;\n};\n\n\nexport type MutationToggleActivityPinArgs = {\n  id: InputMaybe<Scalars['Int']['input']>;\n  pinned: InputMaybe<Scalars['Boolean']['input']>;\n};\n\n\nexport type MutationToggleActivitySubscriptionArgs = {\n  activityId: InputMaybe<Scalars['Int']['input']>;\n  subscribe: InputMaybe<Scalars['Boolean']['input']>;\n};\n\n\nexport type MutationToggleFavouriteArgs = {\n  animeId: InputMaybe<Scalars['Int']['input']>;\n  characterId: InputMaybe<Scalars['Int']['input']>;\n  mangaId: InputMaybe<Scalars['Int']['input']>;\n  staffId: InputMaybe<Scalars['Int']['input']>;\n  studioId: InputMaybe<Scalars['Int']['input']>;\n};\n\n\nexport type MutationToggleFollowArgs = {\n  userId: InputMaybe<Scalars['Int']['input']>;\n};\n\n\nexport type MutationToggleLikeArgs = {\n  id: InputMaybe<Scalars['Int']['input']>;\n  type: InputMaybe<LikeableType>;\n};\n\n\nexport type MutationToggleLikeV2Args = {\n  id: InputMaybe<Scalars['Int']['input']>;\n  type: InputMaybe<LikeableType>;\n};\n\n\nexport type MutationToggleThreadSubscriptionArgs = {\n  subscribe: InputMaybe<Scalars['Boolean']['input']>;\n  threadId: InputMaybe<Scalars['Int']['input']>;\n};\n\n\nexport type MutationUpdateAniChartHighlightsArgs = {\n  highlights: InputMaybe<Array<InputMaybe<AniChartHighlightInput>>>;\n};\n\n\nexport type MutationUpdateAniChartSettingsArgs = {\n  outgoingLinkProvider: InputMaybe<Scalars['String']['input']>;\n  sort: InputMaybe<Scalars['String']['input']>;\n  theme: InputMaybe<Scalars['String']['input']>;\n  titleLanguage: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type MutationUpdateFavouriteOrderArgs = {\n  animeIds: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  animeOrder: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  characterIds: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  characterOrder: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  mangaIds: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  mangaOrder: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  staffIds: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  staffOrder: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  studioIds: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  studioOrder: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n};\n\n\nexport type MutationUpdateMediaListEntriesArgs = {\n  advancedScores: InputMaybe<Array<InputMaybe<Scalars['Float']['input']>>>;\n  completedAt: InputMaybe<FuzzyDateInput>;\n  hiddenFromStatusLists: InputMaybe<Scalars['Boolean']['input']>;\n  ids: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  notes: InputMaybe<Scalars['String']['input']>;\n  priority: InputMaybe<Scalars['Int']['input']>;\n  private: InputMaybe<Scalars['Boolean']['input']>;\n  progress: InputMaybe<Scalars['Int']['input']>;\n  progressVolumes: InputMaybe<Scalars['Int']['input']>;\n  repeat: InputMaybe<Scalars['Int']['input']>;\n  score: InputMaybe<Scalars['Float']['input']>;\n  scoreRaw: InputMaybe<Scalars['Int']['input']>;\n  startedAt: InputMaybe<FuzzyDateInput>;\n  status: InputMaybe<MediaListStatus>;\n};\n\n\nexport type MutationUpdateUserArgs = {\n  about: InputMaybe<Scalars['String']['input']>;\n  activityMergeTime: InputMaybe<Scalars['Int']['input']>;\n  airingNotifications: InputMaybe<Scalars['Boolean']['input']>;\n  animeListOptions: InputMaybe<MediaListOptionsInput>;\n  disabledListActivity: InputMaybe<Array<InputMaybe<ListActivityOptionInput>>>;\n  displayAdultContent: InputMaybe<Scalars['Boolean']['input']>;\n  donatorBadge: InputMaybe<Scalars['String']['input']>;\n  mangaListOptions: InputMaybe<MediaListOptionsInput>;\n  notificationOptions: InputMaybe<Array<InputMaybe<NotificationOptionInput>>>;\n  profileColor: InputMaybe<Scalars['String']['input']>;\n  restrictMessagesToFollowing: InputMaybe<Scalars['Boolean']['input']>;\n  rowOrder: InputMaybe<Scalars['String']['input']>;\n  scoreFormat: InputMaybe<ScoreFormat>;\n  staffNameLanguage: InputMaybe<UserStaffNameLanguage>;\n  timezone: InputMaybe<Scalars['String']['input']>;\n  titleLanguage: InputMaybe<UserTitleLanguage>;\n};\n\n/** Notification option */\nexport type NotificationOption = {\n  /** Whether this type of notification is enabled */\n  enabled: Maybe<Scalars['Boolean']['output']>;\n  /** The type of notification */\n  type: Maybe<NotificationType>;\n};\n\n/** Notification option input */\nexport type NotificationOptionInput = {\n  /** Whether this type of notification is enabled */\n  enabled: InputMaybe<Scalars['Boolean']['input']>;\n  /** The type of notification */\n  type: InputMaybe<NotificationType>;\n};\n\n/** Notification type enum */\nexport enum NotificationType {\n  /** A user has liked your activity */\n  ActivityLike = 'ACTIVITY_LIKE',\n  /** A user has mentioned you in their activity */\n  ActivityMention = 'ACTIVITY_MENTION',\n  /** A user has sent you message */\n  ActivityMessage = 'ACTIVITY_MESSAGE',\n  /** A user has replied to your activity */\n  ActivityReply = 'ACTIVITY_REPLY',\n  /** A user has liked your activity reply */\n  ActivityReplyLike = 'ACTIVITY_REPLY_LIKE',\n  /** A user has replied to activity you have also replied to */\n  ActivityReplySubscribed = 'ACTIVITY_REPLY_SUBSCRIBED',\n  /** An anime you are currently watching has aired */\n  Airing = 'AIRING',\n  /** A user's character submission has been accepted, partially accepted, or rejected */\n  CharacterSubmissionUpdate = 'CHARACTER_SUBMISSION_UPDATE',\n  /** A user has followed you */\n  Following = 'FOLLOWING',\n  /** An anime or manga has had a data change that affects how a user may track it in their lists */\n  MediaDataChange = 'MEDIA_DATA_CHANGE',\n  /** An anime or manga on the user's list has been deleted from the site */\n  MediaDeletion = 'MEDIA_DELETION',\n  /** Anime or manga entries on the user's list have been merged into a single entry */\n  MediaMerge = 'MEDIA_MERGE',\n  /** A user's submission has been accepted, partially accepted, or rejected */\n  MediaSubmissionUpdate = 'MEDIA_SUBMISSION_UPDATE',\n  /** A new anime or manga has been added to the site where its related media is on the user's list */\n  RelatedMediaAddition = 'RELATED_MEDIA_ADDITION',\n  /** A user's staff submission has been accepted, partially accepted, or rejected */\n  StaffSubmissionUpdate = 'STAFF_SUBMISSION_UPDATE',\n  /** A user has liked your forum comment */\n  ThreadCommentLike = 'THREAD_COMMENT_LIKE',\n  /** A user has mentioned you in a forum comment */\n  ThreadCommentMention = 'THREAD_COMMENT_MENTION',\n  /** A user has replied to your forum comment */\n  ThreadCommentReply = 'THREAD_COMMENT_REPLY',\n  /** A user has liked your forum thread */\n  ThreadLike = 'THREAD_LIKE',\n  /** A user has commented in one of your subscribed forum threads */\n  ThreadSubscribed = 'THREAD_SUBSCRIBED'\n}\n\n/** Notification union type */\nexport type NotificationUnion = ActivityLikeNotification | ActivityMentionNotification | ActivityMessageNotification | ActivityReplyLikeNotification | ActivityReplyNotification | ActivityReplySubscribedNotification | AiringNotification | CharacterSubmissionUpdateNotification | FollowingNotification | MediaDataChangeNotification | MediaDeletionNotification | MediaMergeNotification | MediaSubmissionUpdateNotification | RelatedMediaAdditionNotification | StaffSubmissionUpdateNotification | ThreadCommentLikeNotification | ThreadCommentMentionNotification | ThreadCommentReplyNotification | ThreadCommentSubscribedNotification | ThreadLikeNotification;\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type Page = {\n  activities: Maybe<Array<Maybe<ActivityUnion>>>;\n  activityReplies: Maybe<Array<Maybe<ActivityReply>>>;\n  airingSchedules: Maybe<Array<Maybe<AiringSchedule>>>;\n  characters: Maybe<Array<Maybe<Character>>>;\n  followers: Maybe<Array<Maybe<User>>>;\n  following: Maybe<Array<Maybe<User>>>;\n  likes: Maybe<Array<Maybe<User>>>;\n  media: Maybe<Array<Maybe<Media>>>;\n  mediaList: Maybe<Array<Maybe<MediaList>>>;\n  mediaTrends: Maybe<Array<Maybe<MediaTrend>>>;\n  notifications: Maybe<Array<Maybe<NotificationUnion>>>;\n  /** The pagination information */\n  pageInfo: Maybe<PageInfo>;\n  recommendations: Maybe<Array<Maybe<Recommendation>>>;\n  reviews: Maybe<Array<Maybe<Review>>>;\n  staff: Maybe<Array<Maybe<Staff>>>;\n  studios: Maybe<Array<Maybe<Studio>>>;\n  threadComments: Maybe<Array<Maybe<ThreadComment>>>;\n  threads: Maybe<Array<Maybe<Thread>>>;\n  users: Maybe<Array<Maybe<User>>>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type PageActivitiesArgs = {\n  createdAt: InputMaybe<Scalars['Int']['input']>;\n  createdAt_greater: InputMaybe<Scalars['Int']['input']>;\n  createdAt_lesser: InputMaybe<Scalars['Int']['input']>;\n  hasReplies: InputMaybe<Scalars['Boolean']['input']>;\n  hasRepliesOrTypeText: InputMaybe<Scalars['Boolean']['input']>;\n  id: InputMaybe<Scalars['Int']['input']>;\n  id_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  id_not: InputMaybe<Scalars['Int']['input']>;\n  id_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  isFollowing: InputMaybe<Scalars['Boolean']['input']>;\n  mediaId: InputMaybe<Scalars['Int']['input']>;\n  mediaId_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  mediaId_not: InputMaybe<Scalars['Int']['input']>;\n  mediaId_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  messengerId: InputMaybe<Scalars['Int']['input']>;\n  messengerId_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  messengerId_not: InputMaybe<Scalars['Int']['input']>;\n  messengerId_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  sort: InputMaybe<Array<InputMaybe<ActivitySort>>>;\n  type: InputMaybe<ActivityType>;\n  type_in: InputMaybe<Array<InputMaybe<ActivityType>>>;\n  type_not: InputMaybe<ActivityType>;\n  type_not_in: InputMaybe<Array<InputMaybe<ActivityType>>>;\n  userId: InputMaybe<Scalars['Int']['input']>;\n  userId_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  userId_not: InputMaybe<Scalars['Int']['input']>;\n  userId_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type PageActivityRepliesArgs = {\n  activityId: InputMaybe<Scalars['Int']['input']>;\n  id: InputMaybe<Scalars['Int']['input']>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type PageAiringSchedulesArgs = {\n  airingAt: InputMaybe<Scalars['Int']['input']>;\n  airingAt_greater: InputMaybe<Scalars['Int']['input']>;\n  airingAt_lesser: InputMaybe<Scalars['Int']['input']>;\n  episode: InputMaybe<Scalars['Int']['input']>;\n  episode_greater: InputMaybe<Scalars['Int']['input']>;\n  episode_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  episode_lesser: InputMaybe<Scalars['Int']['input']>;\n  episode_not: InputMaybe<Scalars['Int']['input']>;\n  episode_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  id: InputMaybe<Scalars['Int']['input']>;\n  id_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  id_not: InputMaybe<Scalars['Int']['input']>;\n  id_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  mediaId: InputMaybe<Scalars['Int']['input']>;\n  mediaId_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  mediaId_not: InputMaybe<Scalars['Int']['input']>;\n  mediaId_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  notYetAired: InputMaybe<Scalars['Boolean']['input']>;\n  sort: InputMaybe<Array<InputMaybe<AiringSort>>>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type PageCharactersArgs = {\n  id: InputMaybe<Scalars['Int']['input']>;\n  id_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  id_not: InputMaybe<Scalars['Int']['input']>;\n  id_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  isBirthday: InputMaybe<Scalars['Boolean']['input']>;\n  search: InputMaybe<Scalars['String']['input']>;\n  sort: InputMaybe<Array<InputMaybe<CharacterSort>>>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type PageFollowersArgs = {\n  sort: InputMaybe<Array<InputMaybe<UserSort>>>;\n  userId: Scalars['Int']['input'];\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type PageFollowingArgs = {\n  sort: InputMaybe<Array<InputMaybe<UserSort>>>;\n  userId: Scalars['Int']['input'];\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type PageLikesArgs = {\n  likeableId: InputMaybe<Scalars['Int']['input']>;\n  type: InputMaybe<LikeableType>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type PageMediaArgs = {\n  averageScore: InputMaybe<Scalars['Int']['input']>;\n  averageScore_greater: InputMaybe<Scalars['Int']['input']>;\n  averageScore_lesser: InputMaybe<Scalars['Int']['input']>;\n  averageScore_not: InputMaybe<Scalars['Int']['input']>;\n  chapters: InputMaybe<Scalars['Int']['input']>;\n  chapters_greater: InputMaybe<Scalars['Int']['input']>;\n  chapters_lesser: InputMaybe<Scalars['Int']['input']>;\n  countryOfOrigin: InputMaybe<Scalars['CountryCode']['input']>;\n  countryOfOrigin_in: InputMaybe<Array<InputMaybe<Scalars['CountryCode']['input']>>>;\n  countryOfOrigin_not_in: InputMaybe<Array<InputMaybe<Scalars['CountryCode']['input']>>>;\n  duration: InputMaybe<Scalars['Int']['input']>;\n  duration_greater: InputMaybe<Scalars['Int']['input']>;\n  duration_lesser: InputMaybe<Scalars['Int']['input']>;\n  endDate: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  endDate_greater: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  endDate_lesser: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  endDate_like: InputMaybe<Scalars['String']['input']>;\n  episodes: InputMaybe<Scalars['Int']['input']>;\n  episodes_greater: InputMaybe<Scalars['Int']['input']>;\n  episodes_lesser: InputMaybe<Scalars['Int']['input']>;\n  format: InputMaybe<MediaFormat>;\n  format_in: InputMaybe<Array<InputMaybe<MediaFormat>>>;\n  format_not: InputMaybe<MediaFormat>;\n  format_not_in: InputMaybe<Array<InputMaybe<MediaFormat>>>;\n  genre: InputMaybe<Scalars['String']['input']>;\n  genre_in: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;\n  genre_not_in: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;\n  id: InputMaybe<Scalars['Int']['input']>;\n  idMal: InputMaybe<Scalars['Int']['input']>;\n  idMal_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  idMal_not: InputMaybe<Scalars['Int']['input']>;\n  idMal_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  id_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  id_not: InputMaybe<Scalars['Int']['input']>;\n  id_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  isAdult: InputMaybe<Scalars['Boolean']['input']>;\n  isLicensed: InputMaybe<Scalars['Boolean']['input']>;\n  licensedBy: InputMaybe<Scalars['String']['input']>;\n  licensedById: InputMaybe<Scalars['Int']['input']>;\n  licensedById_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  licensedBy_in: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;\n  minimumTagRank: InputMaybe<Scalars['Int']['input']>;\n  onList: InputMaybe<Scalars['Boolean']['input']>;\n  popularity: InputMaybe<Scalars['Int']['input']>;\n  popularity_greater: InputMaybe<Scalars['Int']['input']>;\n  popularity_lesser: InputMaybe<Scalars['Int']['input']>;\n  popularity_not: InputMaybe<Scalars['Int']['input']>;\n  search: InputMaybe<Scalars['String']['input']>;\n  season: InputMaybe<MediaSeason>;\n  seasonYear: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<MediaSort>>>;\n  source: InputMaybe<MediaSource>;\n  source_in: InputMaybe<Array<InputMaybe<MediaSource>>>;\n  startDate: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  startDate_greater: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  startDate_lesser: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  startDate_like: InputMaybe<Scalars['String']['input']>;\n  status: InputMaybe<MediaStatus>;\n  status_in: InputMaybe<Array<InputMaybe<MediaStatus>>>;\n  status_not: InputMaybe<MediaStatus>;\n  status_not_in: InputMaybe<Array<InputMaybe<MediaStatus>>>;\n  tag: InputMaybe<Scalars['String']['input']>;\n  tagCategory: InputMaybe<Scalars['String']['input']>;\n  tagCategory_in: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;\n  tagCategory_not_in: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;\n  tag_in: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;\n  tag_not_in: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;\n  type: InputMaybe<MediaType>;\n  volumes: InputMaybe<Scalars['Int']['input']>;\n  volumes_greater: InputMaybe<Scalars['Int']['input']>;\n  volumes_lesser: InputMaybe<Scalars['Int']['input']>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type PageMediaListArgs = {\n  compareWithAuthList: InputMaybe<Scalars['Boolean']['input']>;\n  completedAt: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  completedAt_greater: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  completedAt_lesser: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  completedAt_like: InputMaybe<Scalars['String']['input']>;\n  id: InputMaybe<Scalars['Int']['input']>;\n  isFollowing: InputMaybe<Scalars['Boolean']['input']>;\n  mediaId: InputMaybe<Scalars['Int']['input']>;\n  mediaId_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  mediaId_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  notes: InputMaybe<Scalars['String']['input']>;\n  notes_like: InputMaybe<Scalars['String']['input']>;\n  sort: InputMaybe<Array<InputMaybe<MediaListSort>>>;\n  startedAt: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  startedAt_greater: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  startedAt_lesser: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  startedAt_like: InputMaybe<Scalars['String']['input']>;\n  status: InputMaybe<MediaListStatus>;\n  status_in: InputMaybe<Array<InputMaybe<MediaListStatus>>>;\n  status_not: InputMaybe<MediaListStatus>;\n  status_not_in: InputMaybe<Array<InputMaybe<MediaListStatus>>>;\n  type: InputMaybe<MediaType>;\n  userId: InputMaybe<Scalars['Int']['input']>;\n  userId_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  userName: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type PageMediaTrendsArgs = {\n  averageScore: InputMaybe<Scalars['Int']['input']>;\n  averageScore_greater: InputMaybe<Scalars['Int']['input']>;\n  averageScore_lesser: InputMaybe<Scalars['Int']['input']>;\n  averageScore_not: InputMaybe<Scalars['Int']['input']>;\n  date: InputMaybe<Scalars['Int']['input']>;\n  date_greater: InputMaybe<Scalars['Int']['input']>;\n  date_lesser: InputMaybe<Scalars['Int']['input']>;\n  episode: InputMaybe<Scalars['Int']['input']>;\n  episode_greater: InputMaybe<Scalars['Int']['input']>;\n  episode_lesser: InputMaybe<Scalars['Int']['input']>;\n  episode_not: InputMaybe<Scalars['Int']['input']>;\n  mediaId: InputMaybe<Scalars['Int']['input']>;\n  mediaId_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  mediaId_not: InputMaybe<Scalars['Int']['input']>;\n  mediaId_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  popularity: InputMaybe<Scalars['Int']['input']>;\n  popularity_greater: InputMaybe<Scalars['Int']['input']>;\n  popularity_lesser: InputMaybe<Scalars['Int']['input']>;\n  popularity_not: InputMaybe<Scalars['Int']['input']>;\n  releasing: InputMaybe<Scalars['Boolean']['input']>;\n  sort: InputMaybe<Array<InputMaybe<MediaTrendSort>>>;\n  trending: InputMaybe<Scalars['Int']['input']>;\n  trending_greater: InputMaybe<Scalars['Int']['input']>;\n  trending_lesser: InputMaybe<Scalars['Int']['input']>;\n  trending_not: InputMaybe<Scalars['Int']['input']>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type PageNotificationsArgs = {\n  resetNotificationCount: InputMaybe<Scalars['Boolean']['input']>;\n  type: InputMaybe<NotificationType>;\n  type_in: InputMaybe<Array<InputMaybe<NotificationType>>>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type PageRecommendationsArgs = {\n  id: InputMaybe<Scalars['Int']['input']>;\n  mediaId: InputMaybe<Scalars['Int']['input']>;\n  mediaRecommendationId: InputMaybe<Scalars['Int']['input']>;\n  onList: InputMaybe<Scalars['Boolean']['input']>;\n  rating: InputMaybe<Scalars['Int']['input']>;\n  rating_greater: InputMaybe<Scalars['Int']['input']>;\n  rating_lesser: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<RecommendationSort>>>;\n  userId: InputMaybe<Scalars['Int']['input']>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type PageReviewsArgs = {\n  id: InputMaybe<Scalars['Int']['input']>;\n  mediaId: InputMaybe<Scalars['Int']['input']>;\n  mediaType: InputMaybe<MediaType>;\n  sort: InputMaybe<Array<InputMaybe<ReviewSort>>>;\n  userId: InputMaybe<Scalars['Int']['input']>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type PageStaffArgs = {\n  id: InputMaybe<Scalars['Int']['input']>;\n  id_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  id_not: InputMaybe<Scalars['Int']['input']>;\n  id_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  isBirthday: InputMaybe<Scalars['Boolean']['input']>;\n  search: InputMaybe<Scalars['String']['input']>;\n  sort: InputMaybe<Array<InputMaybe<StaffSort>>>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type PageStudiosArgs = {\n  id: InputMaybe<Scalars['Int']['input']>;\n  id_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  id_not: InputMaybe<Scalars['Int']['input']>;\n  id_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  search: InputMaybe<Scalars['String']['input']>;\n  sort: InputMaybe<Array<InputMaybe<StudioSort>>>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type PageThreadCommentsArgs = {\n  id: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<ThreadCommentSort>>>;\n  threadId: InputMaybe<Scalars['Int']['input']>;\n  userId: InputMaybe<Scalars['Int']['input']>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type PageThreadsArgs = {\n  categoryId: InputMaybe<Scalars['Int']['input']>;\n  id: InputMaybe<Scalars['Int']['input']>;\n  id_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  mediaCategoryId: InputMaybe<Scalars['Int']['input']>;\n  replyUserId: InputMaybe<Scalars['Int']['input']>;\n  search: InputMaybe<Scalars['String']['input']>;\n  sort: InputMaybe<Array<InputMaybe<ThreadSort>>>;\n  subscribed: InputMaybe<Scalars['Boolean']['input']>;\n  userId: InputMaybe<Scalars['Int']['input']>;\n};\n\n\n/** Page of data. Limited to a max depth of 5000 entries. This is calculated as the page parameter multiplied by the perPage parameter. */\nexport type PageUsersArgs = {\n  id: InputMaybe<Scalars['Int']['input']>;\n  isModerator: InputMaybe<Scalars['Boolean']['input']>;\n  name: InputMaybe<Scalars['String']['input']>;\n  search: InputMaybe<Scalars['String']['input']>;\n  sort: InputMaybe<Array<InputMaybe<UserSort>>>;\n};\n\nexport type PageInfo = {\n  /** The current page */\n  currentPage: Maybe<Scalars['Int']['output']>;\n  /** If there is another page */\n  hasNextPage: Maybe<Scalars['Boolean']['output']>;\n  /** The last page */\n  lastPage: Maybe<Scalars['Int']['output']>;\n  /** The count on a page */\n  perPage: Maybe<Scalars['Int']['output']>;\n  /** The total number of items. Note: This value is not guaranteed to be accurate, do not rely on this for logic */\n  total: Maybe<Scalars['Int']['output']>;\n};\n\n/** Provides the parsed markdown as html */\nexport type ParsedMarkdown = {\n  /** The parsed markdown as html */\n  html: Maybe<Scalars['String']['output']>;\n};\n\nexport type Query = {\n  /** Activity query */\n  Activity: Maybe<ActivityUnion>;\n  /** Activity reply query */\n  ActivityReply: Maybe<ActivityReply>;\n  /** Airing schedule query */\n  AiringSchedule: Maybe<AiringSchedule>;\n  AniChartUser: Maybe<AniChartUser>;\n  /** Character query */\n  Character: Maybe<Character>;\n  /** ExternalLinkSource collection query */\n  ExternalLinkSourceCollection: Maybe<Array<Maybe<MediaExternalLink>>>;\n  /** Follower query */\n  Follower: Maybe<User>;\n  /** Following query */\n  Following: Maybe<User>;\n  /** Collection of all the possible media genres */\n  GenreCollection: Maybe<Array<Maybe<Scalars['String']['output']>>>;\n  /** Like query */\n  Like: Maybe<User>;\n  /** Provide AniList markdown to be converted to html (Requires auth) */\n  Markdown: Maybe<ParsedMarkdown>;\n  /** Media query */\n  Media: Maybe<Media>;\n  /** Media list query */\n  MediaList: Maybe<MediaList>;\n  /** Media list collection query, provides list pre-grouped by status & custom lists. User ID and Media Type arguments required. */\n  MediaListCollection: Maybe<MediaListCollection>;\n  /** Collection of all the possible media tags */\n  MediaTagCollection: Maybe<Array<Maybe<MediaTag>>>;\n  /** Media Trend query */\n  MediaTrend: Maybe<MediaTrend>;\n  /** Notification query */\n  Notification: Maybe<NotificationUnion>;\n  Page: Maybe<Page>;\n  /** Recommendation query */\n  Recommendation: Maybe<Recommendation>;\n  /** Review query */\n  Review: Maybe<Review>;\n  /** Site statistics query */\n  SiteStatistics: Maybe<SiteStatistics>;\n  /** Staff query */\n  Staff: Maybe<Staff>;\n  /** Studio query */\n  Studio: Maybe<Studio>;\n  /** Thread query */\n  Thread: Maybe<Thread>;\n  /** Comment query */\n  ThreadComment: Maybe<Array<Maybe<ThreadComment>>>;\n  /** User query */\n  User: Maybe<User>;\n  /** Get the currently authenticated user */\n  Viewer: Maybe<User>;\n};\n\n\nexport type QueryActivityArgs = {\n  createdAt: InputMaybe<Scalars['Int']['input']>;\n  createdAt_greater: InputMaybe<Scalars['Int']['input']>;\n  createdAt_lesser: InputMaybe<Scalars['Int']['input']>;\n  hasReplies: InputMaybe<Scalars['Boolean']['input']>;\n  hasRepliesOrTypeText: InputMaybe<Scalars['Boolean']['input']>;\n  id: InputMaybe<Scalars['Int']['input']>;\n  id_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  id_not: InputMaybe<Scalars['Int']['input']>;\n  id_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  isFollowing: InputMaybe<Scalars['Boolean']['input']>;\n  mediaId: InputMaybe<Scalars['Int']['input']>;\n  mediaId_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  mediaId_not: InputMaybe<Scalars['Int']['input']>;\n  mediaId_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  messengerId: InputMaybe<Scalars['Int']['input']>;\n  messengerId_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  messengerId_not: InputMaybe<Scalars['Int']['input']>;\n  messengerId_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  sort: InputMaybe<Array<InputMaybe<ActivitySort>>>;\n  type: InputMaybe<ActivityType>;\n  type_in: InputMaybe<Array<InputMaybe<ActivityType>>>;\n  type_not: InputMaybe<ActivityType>;\n  type_not_in: InputMaybe<Array<InputMaybe<ActivityType>>>;\n  userId: InputMaybe<Scalars['Int']['input']>;\n  userId_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  userId_not: InputMaybe<Scalars['Int']['input']>;\n  userId_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n};\n\n\nexport type QueryActivityReplyArgs = {\n  activityId: InputMaybe<Scalars['Int']['input']>;\n  id: InputMaybe<Scalars['Int']['input']>;\n};\n\n\nexport type QueryAiringScheduleArgs = {\n  airingAt: InputMaybe<Scalars['Int']['input']>;\n  airingAt_greater: InputMaybe<Scalars['Int']['input']>;\n  airingAt_lesser: InputMaybe<Scalars['Int']['input']>;\n  episode: InputMaybe<Scalars['Int']['input']>;\n  episode_greater: InputMaybe<Scalars['Int']['input']>;\n  episode_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  episode_lesser: InputMaybe<Scalars['Int']['input']>;\n  episode_not: InputMaybe<Scalars['Int']['input']>;\n  episode_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  id: InputMaybe<Scalars['Int']['input']>;\n  id_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  id_not: InputMaybe<Scalars['Int']['input']>;\n  id_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  mediaId: InputMaybe<Scalars['Int']['input']>;\n  mediaId_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  mediaId_not: InputMaybe<Scalars['Int']['input']>;\n  mediaId_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  notYetAired: InputMaybe<Scalars['Boolean']['input']>;\n  sort: InputMaybe<Array<InputMaybe<AiringSort>>>;\n};\n\n\nexport type QueryCharacterArgs = {\n  id: InputMaybe<Scalars['Int']['input']>;\n  id_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  id_not: InputMaybe<Scalars['Int']['input']>;\n  id_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  isBirthday: InputMaybe<Scalars['Boolean']['input']>;\n  search: InputMaybe<Scalars['String']['input']>;\n  sort: InputMaybe<Array<InputMaybe<CharacterSort>>>;\n};\n\n\nexport type QueryExternalLinkSourceCollectionArgs = {\n  id: InputMaybe<Scalars['Int']['input']>;\n  mediaType: InputMaybe<ExternalLinkMediaType>;\n  type: InputMaybe<ExternalLinkType>;\n};\n\n\nexport type QueryFollowerArgs = {\n  sort: InputMaybe<Array<InputMaybe<UserSort>>>;\n  userId: Scalars['Int']['input'];\n};\n\n\nexport type QueryFollowingArgs = {\n  sort: InputMaybe<Array<InputMaybe<UserSort>>>;\n  userId: Scalars['Int']['input'];\n};\n\n\nexport type QueryLikeArgs = {\n  likeableId: InputMaybe<Scalars['Int']['input']>;\n  type: InputMaybe<LikeableType>;\n};\n\n\nexport type QueryMarkdownArgs = {\n  markdown: Scalars['String']['input'];\n};\n\n\nexport type QueryMediaArgs = {\n  averageScore: InputMaybe<Scalars['Int']['input']>;\n  averageScore_greater: InputMaybe<Scalars['Int']['input']>;\n  averageScore_lesser: InputMaybe<Scalars['Int']['input']>;\n  averageScore_not: InputMaybe<Scalars['Int']['input']>;\n  chapters: InputMaybe<Scalars['Int']['input']>;\n  chapters_greater: InputMaybe<Scalars['Int']['input']>;\n  chapters_lesser: InputMaybe<Scalars['Int']['input']>;\n  countryOfOrigin: InputMaybe<Scalars['CountryCode']['input']>;\n  countryOfOrigin_in: InputMaybe<Array<InputMaybe<Scalars['CountryCode']['input']>>>;\n  countryOfOrigin_not_in: InputMaybe<Array<InputMaybe<Scalars['CountryCode']['input']>>>;\n  duration: InputMaybe<Scalars['Int']['input']>;\n  duration_greater: InputMaybe<Scalars['Int']['input']>;\n  duration_lesser: InputMaybe<Scalars['Int']['input']>;\n  endDate: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  endDate_greater: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  endDate_lesser: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  endDate_like: InputMaybe<Scalars['String']['input']>;\n  episodes: InputMaybe<Scalars['Int']['input']>;\n  episodes_greater: InputMaybe<Scalars['Int']['input']>;\n  episodes_lesser: InputMaybe<Scalars['Int']['input']>;\n  format: InputMaybe<MediaFormat>;\n  format_in: InputMaybe<Array<InputMaybe<MediaFormat>>>;\n  format_not: InputMaybe<MediaFormat>;\n  format_not_in: InputMaybe<Array<InputMaybe<MediaFormat>>>;\n  genre: InputMaybe<Scalars['String']['input']>;\n  genre_in: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;\n  genre_not_in: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;\n  id: InputMaybe<Scalars['Int']['input']>;\n  idMal: InputMaybe<Scalars['Int']['input']>;\n  idMal_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  idMal_not: InputMaybe<Scalars['Int']['input']>;\n  idMal_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  id_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  id_not: InputMaybe<Scalars['Int']['input']>;\n  id_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  isAdult: InputMaybe<Scalars['Boolean']['input']>;\n  isLicensed: InputMaybe<Scalars['Boolean']['input']>;\n  licensedBy: InputMaybe<Scalars['String']['input']>;\n  licensedById: InputMaybe<Scalars['Int']['input']>;\n  licensedById_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  licensedBy_in: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;\n  minimumTagRank: InputMaybe<Scalars['Int']['input']>;\n  onList: InputMaybe<Scalars['Boolean']['input']>;\n  popularity: InputMaybe<Scalars['Int']['input']>;\n  popularity_greater: InputMaybe<Scalars['Int']['input']>;\n  popularity_lesser: InputMaybe<Scalars['Int']['input']>;\n  popularity_not: InputMaybe<Scalars['Int']['input']>;\n  search: InputMaybe<Scalars['String']['input']>;\n  season: InputMaybe<MediaSeason>;\n  seasonYear: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<MediaSort>>>;\n  source: InputMaybe<MediaSource>;\n  source_in: InputMaybe<Array<InputMaybe<MediaSource>>>;\n  startDate: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  startDate_greater: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  startDate_lesser: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  startDate_like: InputMaybe<Scalars['String']['input']>;\n  status: InputMaybe<MediaStatus>;\n  status_in: InputMaybe<Array<InputMaybe<MediaStatus>>>;\n  status_not: InputMaybe<MediaStatus>;\n  status_not_in: InputMaybe<Array<InputMaybe<MediaStatus>>>;\n  tag: InputMaybe<Scalars['String']['input']>;\n  tagCategory: InputMaybe<Scalars['String']['input']>;\n  tagCategory_in: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;\n  tagCategory_not_in: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;\n  tag_in: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;\n  tag_not_in: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;\n  type: InputMaybe<MediaType>;\n  volumes: InputMaybe<Scalars['Int']['input']>;\n  volumes_greater: InputMaybe<Scalars['Int']['input']>;\n  volumes_lesser: InputMaybe<Scalars['Int']['input']>;\n};\n\n\nexport type QueryMediaListArgs = {\n  compareWithAuthList: InputMaybe<Scalars['Boolean']['input']>;\n  completedAt: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  completedAt_greater: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  completedAt_lesser: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  completedAt_like: InputMaybe<Scalars['String']['input']>;\n  id: InputMaybe<Scalars['Int']['input']>;\n  isFollowing: InputMaybe<Scalars['Boolean']['input']>;\n  mediaId: InputMaybe<Scalars['Int']['input']>;\n  mediaId_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  mediaId_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  notes: InputMaybe<Scalars['String']['input']>;\n  notes_like: InputMaybe<Scalars['String']['input']>;\n  sort: InputMaybe<Array<InputMaybe<MediaListSort>>>;\n  startedAt: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  startedAt_greater: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  startedAt_lesser: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  startedAt_like: InputMaybe<Scalars['String']['input']>;\n  status: InputMaybe<MediaListStatus>;\n  status_in: InputMaybe<Array<InputMaybe<MediaListStatus>>>;\n  status_not: InputMaybe<MediaListStatus>;\n  status_not_in: InputMaybe<Array<InputMaybe<MediaListStatus>>>;\n  type: InputMaybe<MediaType>;\n  userId: InputMaybe<Scalars['Int']['input']>;\n  userId_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  userName: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryMediaListCollectionArgs = {\n  chunk: InputMaybe<Scalars['Int']['input']>;\n  completedAt: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  completedAt_greater: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  completedAt_lesser: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  completedAt_like: InputMaybe<Scalars['String']['input']>;\n  forceSingleCompletedList: InputMaybe<Scalars['Boolean']['input']>;\n  notes: InputMaybe<Scalars['String']['input']>;\n  notes_like: InputMaybe<Scalars['String']['input']>;\n  perChunk: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<MediaListSort>>>;\n  startedAt: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  startedAt_greater: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  startedAt_lesser: InputMaybe<Scalars['FuzzyDateInt']['input']>;\n  startedAt_like: InputMaybe<Scalars['String']['input']>;\n  status: InputMaybe<MediaListStatus>;\n  status_in: InputMaybe<Array<InputMaybe<MediaListStatus>>>;\n  status_not: InputMaybe<MediaListStatus>;\n  status_not_in: InputMaybe<Array<InputMaybe<MediaListStatus>>>;\n  type: InputMaybe<MediaType>;\n  userId: InputMaybe<Scalars['Int']['input']>;\n  userName: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryMediaTagCollectionArgs = {\n  status: InputMaybe<Scalars['Int']['input']>;\n};\n\n\nexport type QueryMediaTrendArgs = {\n  averageScore: InputMaybe<Scalars['Int']['input']>;\n  averageScore_greater: InputMaybe<Scalars['Int']['input']>;\n  averageScore_lesser: InputMaybe<Scalars['Int']['input']>;\n  averageScore_not: InputMaybe<Scalars['Int']['input']>;\n  date: InputMaybe<Scalars['Int']['input']>;\n  date_greater: InputMaybe<Scalars['Int']['input']>;\n  date_lesser: InputMaybe<Scalars['Int']['input']>;\n  episode: InputMaybe<Scalars['Int']['input']>;\n  episode_greater: InputMaybe<Scalars['Int']['input']>;\n  episode_lesser: InputMaybe<Scalars['Int']['input']>;\n  episode_not: InputMaybe<Scalars['Int']['input']>;\n  mediaId: InputMaybe<Scalars['Int']['input']>;\n  mediaId_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  mediaId_not: InputMaybe<Scalars['Int']['input']>;\n  mediaId_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  popularity: InputMaybe<Scalars['Int']['input']>;\n  popularity_greater: InputMaybe<Scalars['Int']['input']>;\n  popularity_lesser: InputMaybe<Scalars['Int']['input']>;\n  popularity_not: InputMaybe<Scalars['Int']['input']>;\n  releasing: InputMaybe<Scalars['Boolean']['input']>;\n  sort: InputMaybe<Array<InputMaybe<MediaTrendSort>>>;\n  trending: InputMaybe<Scalars['Int']['input']>;\n  trending_greater: InputMaybe<Scalars['Int']['input']>;\n  trending_lesser: InputMaybe<Scalars['Int']['input']>;\n  trending_not: InputMaybe<Scalars['Int']['input']>;\n};\n\n\nexport type QueryNotificationArgs = {\n  resetNotificationCount: InputMaybe<Scalars['Boolean']['input']>;\n  type: InputMaybe<NotificationType>;\n  type_in: InputMaybe<Array<InputMaybe<NotificationType>>>;\n};\n\n\nexport type QueryPageArgs = {\n  page: InputMaybe<Scalars['Int']['input']>;\n  perPage: InputMaybe<Scalars['Int']['input']>;\n};\n\n\nexport type QueryRecommendationArgs = {\n  id: InputMaybe<Scalars['Int']['input']>;\n  mediaId: InputMaybe<Scalars['Int']['input']>;\n  mediaRecommendationId: InputMaybe<Scalars['Int']['input']>;\n  onList: InputMaybe<Scalars['Boolean']['input']>;\n  rating: InputMaybe<Scalars['Int']['input']>;\n  rating_greater: InputMaybe<Scalars['Int']['input']>;\n  rating_lesser: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<RecommendationSort>>>;\n  userId: InputMaybe<Scalars['Int']['input']>;\n};\n\n\nexport type QueryReviewArgs = {\n  id: InputMaybe<Scalars['Int']['input']>;\n  mediaId: InputMaybe<Scalars['Int']['input']>;\n  mediaType: InputMaybe<MediaType>;\n  sort: InputMaybe<Array<InputMaybe<ReviewSort>>>;\n  userId: InputMaybe<Scalars['Int']['input']>;\n};\n\n\nexport type QueryStaffArgs = {\n  id: InputMaybe<Scalars['Int']['input']>;\n  id_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  id_not: InputMaybe<Scalars['Int']['input']>;\n  id_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  isBirthday: InputMaybe<Scalars['Boolean']['input']>;\n  search: InputMaybe<Scalars['String']['input']>;\n  sort: InputMaybe<Array<InputMaybe<StaffSort>>>;\n};\n\n\nexport type QueryStudioArgs = {\n  id: InputMaybe<Scalars['Int']['input']>;\n  id_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  id_not: InputMaybe<Scalars['Int']['input']>;\n  id_not_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  search: InputMaybe<Scalars['String']['input']>;\n  sort: InputMaybe<Array<InputMaybe<StudioSort>>>;\n};\n\n\nexport type QueryThreadArgs = {\n  categoryId: InputMaybe<Scalars['Int']['input']>;\n  id: InputMaybe<Scalars['Int']['input']>;\n  id_in: InputMaybe<Array<InputMaybe<Scalars['Int']['input']>>>;\n  mediaCategoryId: InputMaybe<Scalars['Int']['input']>;\n  replyUserId: InputMaybe<Scalars['Int']['input']>;\n  search: InputMaybe<Scalars['String']['input']>;\n  sort: InputMaybe<Array<InputMaybe<ThreadSort>>>;\n  subscribed: InputMaybe<Scalars['Boolean']['input']>;\n  userId: InputMaybe<Scalars['Int']['input']>;\n};\n\n\nexport type QueryThreadCommentArgs = {\n  id: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<ThreadCommentSort>>>;\n  threadId: InputMaybe<Scalars['Int']['input']>;\n  userId: InputMaybe<Scalars['Int']['input']>;\n};\n\n\nexport type QueryUserArgs = {\n  id: InputMaybe<Scalars['Int']['input']>;\n  isModerator: InputMaybe<Scalars['Boolean']['input']>;\n  name: InputMaybe<Scalars['String']['input']>;\n  search: InputMaybe<Scalars['String']['input']>;\n  sort: InputMaybe<Array<InputMaybe<UserSort>>>;\n};\n\n/** Media recommendation */\nexport type Recommendation = {\n  /** The id of the recommendation */\n  id: Scalars['Int']['output'];\n  /** The media the recommendation is from */\n  media: Maybe<Media>;\n  /** The recommended media */\n  mediaRecommendation: Maybe<Media>;\n  /** Users rating of the recommendation */\n  rating: Maybe<Scalars['Int']['output']>;\n  /** The user that first created the recommendation */\n  user: Maybe<User>;\n  /** The rating of the recommendation by currently authenticated user */\n  userRating: Maybe<RecommendationRating>;\n};\n\nexport type RecommendationConnection = {\n  edges: Maybe<Array<Maybe<RecommendationEdge>>>;\n  nodes: Maybe<Array<Maybe<Recommendation>>>;\n  /** The pagination information */\n  pageInfo: Maybe<PageInfo>;\n};\n\n/** Recommendation connection edge */\nexport type RecommendationEdge = {\n  node: Maybe<Recommendation>;\n};\n\n/** Recommendation rating enums */\nexport enum RecommendationRating {\n  NoRating = 'NO_RATING',\n  RateDown = 'RATE_DOWN',\n  RateUp = 'RATE_UP'\n}\n\n/** Recommendation sort enums */\nexport enum RecommendationSort {\n  Id = 'ID',\n  IdDesc = 'ID_DESC',\n  Rating = 'RATING',\n  RatingDesc = 'RATING_DESC'\n}\n\n/** Notification for when new media is added to the site */\nexport type RelatedMediaAdditionNotification = {\n  /** The notification context text */\n  context: Maybe<Scalars['String']['output']>;\n  /** The time the notification was created at */\n  createdAt: Maybe<Scalars['Int']['output']>;\n  /** The id of the Notification */\n  id: Scalars['Int']['output'];\n  /** The associated media of the airing schedule */\n  media: Maybe<Media>;\n  /** The id of the new media */\n  mediaId: Scalars['Int']['output'];\n  /** The type of notification */\n  type: Maybe<NotificationType>;\n};\n\nexport type Report = {\n  cleared: Maybe<Scalars['Boolean']['output']>;\n  /** When the entry data was created */\n  createdAt: Maybe<Scalars['Int']['output']>;\n  id: Scalars['Int']['output'];\n  reason: Maybe<Scalars['String']['output']>;\n  reported: Maybe<User>;\n  reporter: Maybe<User>;\n};\n\n/** A Review that features in an anime or manga */\nexport type Review = {\n  /** The main review body text */\n  body: Maybe<Scalars['String']['output']>;\n  /** The time of the thread creation */\n  createdAt: Scalars['Int']['output'];\n  /** The id of the review */\n  id: Scalars['Int']['output'];\n  /** The media the review is of */\n  media: Maybe<Media>;\n  /** The id of the review's media */\n  mediaId: Scalars['Int']['output'];\n  /** For which type of media the review is for */\n  mediaType: Maybe<MediaType>;\n  /** If the review is not yet publicly published and is only viewable by creator */\n  private: Maybe<Scalars['Boolean']['output']>;\n  /** The total user rating of the review */\n  rating: Maybe<Scalars['Int']['output']>;\n  /** The amount of user ratings of the review */\n  ratingAmount: Maybe<Scalars['Int']['output']>;\n  /** The review score of the media */\n  score: Maybe<Scalars['Int']['output']>;\n  /** The url for the review page on the AniList website */\n  siteUrl: Maybe<Scalars['String']['output']>;\n  /** A short summary of the review */\n  summary: Maybe<Scalars['String']['output']>;\n  /** The time of the thread last update */\n  updatedAt: Scalars['Int']['output'];\n  /** The creator of the review */\n  user: Maybe<User>;\n  /** The id of the review's creator */\n  userId: Scalars['Int']['output'];\n  /** The rating of the review by currently authenticated user */\n  userRating: Maybe<ReviewRating>;\n};\n\n\n/** A Review that features in an anime or manga */\nexport type ReviewBodyArgs = {\n  asHtml: InputMaybe<Scalars['Boolean']['input']>;\n};\n\nexport type ReviewConnection = {\n  edges: Maybe<Array<Maybe<ReviewEdge>>>;\n  nodes: Maybe<Array<Maybe<Review>>>;\n  /** The pagination information */\n  pageInfo: Maybe<PageInfo>;\n};\n\n/** Review connection edge */\nexport type ReviewEdge = {\n  node: Maybe<Review>;\n};\n\n/** Review rating enums */\nexport enum ReviewRating {\n  DownVote = 'DOWN_VOTE',\n  NoVote = 'NO_VOTE',\n  UpVote = 'UP_VOTE'\n}\n\n/** Review sort enums */\nexport enum ReviewSort {\n  /** @deprecated Use ID instead */\n  CreatedAt = 'CREATED_AT',\n  /** @deprecated Use ID_DESC instead */\n  CreatedAtDesc = 'CREATED_AT_DESC',\n  Id = 'ID',\n  IdDesc = 'ID_DESC',\n  Rating = 'RATING',\n  RatingDesc = 'RATING_DESC',\n  Score = 'SCORE',\n  ScoreDesc = 'SCORE_DESC',\n  UpdatedAt = 'UPDATED_AT',\n  UpdatedAtDesc = 'UPDATED_AT_DESC'\n}\n\n/** Feed of mod edit activity */\nexport type RevisionHistory = {\n  /** The action taken on the objects */\n  action: Maybe<RevisionHistoryAction>;\n  /** A JSON object of the fields that changed */\n  changes: Maybe<Scalars['Json']['output']>;\n  /** The character the mod feed entry references */\n  character: Maybe<Character>;\n  /** When the mod feed entry was created */\n  createdAt: Maybe<Scalars['Int']['output']>;\n  /** The external link source the mod feed entry references */\n  externalLink: Maybe<MediaExternalLink>;\n  /** The id of the media */\n  id: Scalars['Int']['output'];\n  /** The media the mod feed entry references */\n  media: Maybe<Media>;\n  /** The staff member the mod feed entry references */\n  staff: Maybe<Staff>;\n  /** The studio the mod feed entry references */\n  studio: Maybe<Studio>;\n  /** The user who made the edit to the object */\n  user: Maybe<User>;\n};\n\n/** Revision history actions */\nexport enum RevisionHistoryAction {\n  Create = 'CREATE',\n  Edit = 'EDIT'\n}\n\n/** A user's list score distribution. */\nexport type ScoreDistribution = {\n  /** The amount of list entries with this score */\n  amount: Maybe<Scalars['Int']['output']>;\n  score: Maybe<Scalars['Int']['output']>;\n};\n\n/** Media list scoring type */\nexport enum ScoreFormat {\n  /** An integer from 0-3. Should be represented in Smileys. 0 => No Score, 1 => :(, 2 => :|, 3 => :) */\n  Point_3 = 'POINT_3',\n  /** An integer from 0-5. Should be represented in Stars */\n  Point_5 = 'POINT_5',\n  /** An integer from 0-10 */\n  Point_10 = 'POINT_10',\n  /** A float from 0-10 with 1 decimal place */\n  Point_10Decimal = 'POINT_10_DECIMAL',\n  /** An integer from 0-100 */\n  Point_100 = 'POINT_100'\n}\n\nexport type SiteStatistics = {\n  anime: Maybe<SiteTrendConnection>;\n  characters: Maybe<SiteTrendConnection>;\n  manga: Maybe<SiteTrendConnection>;\n  reviews: Maybe<SiteTrendConnection>;\n  staff: Maybe<SiteTrendConnection>;\n  studios: Maybe<SiteTrendConnection>;\n  users: Maybe<SiteTrendConnection>;\n};\n\n\nexport type SiteStatisticsAnimeArgs = {\n  page: InputMaybe<Scalars['Int']['input']>;\n  perPage: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<SiteTrendSort>>>;\n};\n\n\nexport type SiteStatisticsCharactersArgs = {\n  page: InputMaybe<Scalars['Int']['input']>;\n  perPage: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<SiteTrendSort>>>;\n};\n\n\nexport type SiteStatisticsMangaArgs = {\n  page: InputMaybe<Scalars['Int']['input']>;\n  perPage: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<SiteTrendSort>>>;\n};\n\n\nexport type SiteStatisticsReviewsArgs = {\n  page: InputMaybe<Scalars['Int']['input']>;\n  perPage: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<SiteTrendSort>>>;\n};\n\n\nexport type SiteStatisticsStaffArgs = {\n  page: InputMaybe<Scalars['Int']['input']>;\n  perPage: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<SiteTrendSort>>>;\n};\n\n\nexport type SiteStatisticsStudiosArgs = {\n  page: InputMaybe<Scalars['Int']['input']>;\n  perPage: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<SiteTrendSort>>>;\n};\n\n\nexport type SiteStatisticsUsersArgs = {\n  page: InputMaybe<Scalars['Int']['input']>;\n  perPage: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<SiteTrendSort>>>;\n};\n\n/** Daily site statistics */\nexport type SiteTrend = {\n  /** The change from yesterday */\n  change: Scalars['Int']['output'];\n  count: Scalars['Int']['output'];\n  /** The day the data was recorded (timestamp) */\n  date: Scalars['Int']['output'];\n};\n\nexport type SiteTrendConnection = {\n  edges: Maybe<Array<Maybe<SiteTrendEdge>>>;\n  nodes: Maybe<Array<Maybe<SiteTrend>>>;\n  /** The pagination information */\n  pageInfo: Maybe<PageInfo>;\n};\n\n/** Site trend connection edge */\nexport type SiteTrendEdge = {\n  node: Maybe<SiteTrend>;\n};\n\n/** Site trend sort enums */\nexport enum SiteTrendSort {\n  Change = 'CHANGE',\n  ChangeDesc = 'CHANGE_DESC',\n  Count = 'COUNT',\n  CountDesc = 'COUNT_DESC',\n  Date = 'DATE',\n  DateDesc = 'DATE_DESC'\n}\n\n/** Voice actors or production staff */\nexport type Staff = {\n  /** The person's age in years */\n  age: Maybe<Scalars['Int']['output']>;\n  /** The persons blood type */\n  bloodType: Maybe<Scalars['String']['output']>;\n  /** Media the actor voiced characters in. (Same data as characters with media as node instead of characters) */\n  characterMedia: Maybe<MediaConnection>;\n  /** Characters voiced by the actor */\n  characters: Maybe<CharacterConnection>;\n  dateOfBirth: Maybe<FuzzyDate>;\n  dateOfDeath: Maybe<FuzzyDate>;\n  /** A general description of the staff member */\n  description: Maybe<Scalars['String']['output']>;\n  /** The amount of user's who have favourited the staff member */\n  favourites: Maybe<Scalars['Int']['output']>;\n  /** The staff's gender. Usually Male, Female, or Non-binary but can be any string. */\n  gender: Maybe<Scalars['String']['output']>;\n  /** The persons birthplace or hometown */\n  homeTown: Maybe<Scalars['String']['output']>;\n  /** The id of the staff member */\n  id: Scalars['Int']['output'];\n  /** The staff images */\n  image: Maybe<StaffImage>;\n  /** If the staff member is marked as favourite by the currently authenticated user */\n  isFavourite: Scalars['Boolean']['output'];\n  /** If the staff member is blocked from being added to favourites */\n  isFavouriteBlocked: Scalars['Boolean']['output'];\n  /**\n   * The primary language the staff member dub's in\n   * @deprecated Replaced with languageV2\n   */\n  language: Maybe<StaffLanguage>;\n  /** The primary language of the staff member. Current values: Japanese, English, Korean, Italian, Spanish, Portuguese, French, German, Hebrew, Hungarian, Chinese, Arabic, Filipino, Catalan, Finnish, Turkish, Dutch, Swedish, Thai, Tagalog, Malaysian, Indonesian, Vietnamese, Nepali, Hindi, Urdu */\n  languageV2: Maybe<Scalars['String']['output']>;\n  /** Notes for site moderators */\n  modNotes: Maybe<Scalars['String']['output']>;\n  /** The names of the staff member */\n  name: Maybe<StaffName>;\n  /** The person's primary occupations */\n  primaryOccupations: Maybe<Array<Maybe<Scalars['String']['output']>>>;\n  /** The url for the staff page on the AniList website */\n  siteUrl: Maybe<Scalars['String']['output']>;\n  /** Staff member that the submission is referencing */\n  staff: Maybe<Staff>;\n  /** Media where the staff member has a production role */\n  staffMedia: Maybe<MediaConnection>;\n  /** Inner details of submission status */\n  submissionNotes: Maybe<Scalars['String']['output']>;\n  /** Status of the submission */\n  submissionStatus: Maybe<Scalars['Int']['output']>;\n  /** Submitter for the submission */\n  submitter: Maybe<User>;\n  /** @deprecated No data available */\n  updatedAt: Maybe<Scalars['Int']['output']>;\n  /** [startYear, endYear] (If the 2nd value is not present staff is still active) */\n  yearsActive: Maybe<Array<Maybe<Scalars['Int']['output']>>>;\n};\n\n\n/** Voice actors or production staff */\nexport type StaffCharacterMediaArgs = {\n  onList: InputMaybe<Scalars['Boolean']['input']>;\n  page: InputMaybe<Scalars['Int']['input']>;\n  perPage: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<MediaSort>>>;\n};\n\n\n/** Voice actors or production staff */\nexport type StaffCharactersArgs = {\n  page: InputMaybe<Scalars['Int']['input']>;\n  perPage: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<CharacterSort>>>;\n};\n\n\n/** Voice actors or production staff */\nexport type StaffDescriptionArgs = {\n  asHtml: InputMaybe<Scalars['Boolean']['input']>;\n};\n\n\n/** Voice actors or production staff */\nexport type StaffStaffMediaArgs = {\n  onList: InputMaybe<Scalars['Boolean']['input']>;\n  page: InputMaybe<Scalars['Int']['input']>;\n  perPage: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<MediaSort>>>;\n  type: InputMaybe<MediaType>;\n};\n\nexport type StaffConnection = {\n  edges: Maybe<Array<Maybe<StaffEdge>>>;\n  nodes: Maybe<Array<Maybe<Staff>>>;\n  /** The pagination information */\n  pageInfo: Maybe<PageInfo>;\n};\n\n/** Staff connection edge */\nexport type StaffEdge = {\n  /** The order the staff should be displayed from the users favourites */\n  favouriteOrder: Maybe<Scalars['Int']['output']>;\n  /** The id of the connection */\n  id: Maybe<Scalars['Int']['output']>;\n  node: Maybe<Staff>;\n  /** The role of the staff member in the production of the media */\n  role: Maybe<Scalars['String']['output']>;\n};\n\nexport type StaffImage = {\n  /** The person's image of media at its largest size */\n  large: Maybe<Scalars['String']['output']>;\n  /** The person's image of media at medium size */\n  medium: Maybe<Scalars['String']['output']>;\n};\n\n/** The primary language of the voice actor */\nexport enum StaffLanguage {\n  /** English */\n  English = 'ENGLISH',\n  /** French */\n  French = 'FRENCH',\n  /** German */\n  German = 'GERMAN',\n  /** Hebrew */\n  Hebrew = 'HEBREW',\n  /** Hungarian */\n  Hungarian = 'HUNGARIAN',\n  /** Italian */\n  Italian = 'ITALIAN',\n  /** Japanese */\n  Japanese = 'JAPANESE',\n  /** Korean */\n  Korean = 'KOREAN',\n  /** Portuguese */\n  Portuguese = 'PORTUGUESE',\n  /** Spanish */\n  Spanish = 'SPANISH'\n}\n\n/** The names of the staff member */\nexport type StaffName = {\n  /** Other names the staff member might be referred to as (pen names) */\n  alternative: Maybe<Array<Maybe<Scalars['String']['output']>>>;\n  /** The person's given name */\n  first: Maybe<Scalars['String']['output']>;\n  /** The person's first and last name */\n  full: Maybe<Scalars['String']['output']>;\n  /** The person's surname */\n  last: Maybe<Scalars['String']['output']>;\n  /** The person's middle name */\n  middle: Maybe<Scalars['String']['output']>;\n  /** The person's full name in their native language */\n  native: Maybe<Scalars['String']['output']>;\n  /** The currently authenticated users preferred name language. Default romaji for non-authenticated */\n  userPreferred: Maybe<Scalars['String']['output']>;\n};\n\n/** The names of the staff member */\nexport type StaffNameInput = {\n  /** Other names the character might be referred by */\n  alternative: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;\n  /** The person's given name */\n  first: InputMaybe<Scalars['String']['input']>;\n  /** The person's surname */\n  last: InputMaybe<Scalars['String']['input']>;\n  /** The person's middle name */\n  middle: InputMaybe<Scalars['String']['input']>;\n  /** The person's full name in their native language */\n  native: InputMaybe<Scalars['String']['input']>;\n};\n\n/** Voice actor role for a character */\nexport type StaffRoleType = {\n  /** Used for grouping roles where multiple dubs exist for the same language. Either dubbing company name or language variant. */\n  dubGroup: Maybe<Scalars['String']['output']>;\n  /** Notes regarding the VA's role for the character */\n  roleNotes: Maybe<Scalars['String']['output']>;\n  /** The voice actors of the character */\n  voiceActor: Maybe<Staff>;\n};\n\n/** Staff sort enums */\nexport enum StaffSort {\n  Favourites = 'FAVOURITES',\n  FavouritesDesc = 'FAVOURITES_DESC',\n  Id = 'ID',\n  IdDesc = 'ID_DESC',\n  Language = 'LANGUAGE',\n  LanguageDesc = 'LANGUAGE_DESC',\n  /** Order manually decided by moderators */\n  Relevance = 'RELEVANCE',\n  Role = 'ROLE',\n  RoleDesc = 'ROLE_DESC',\n  SearchMatch = 'SEARCH_MATCH'\n}\n\n/** User's staff statistics */\nexport type StaffStats = {\n  amount: Maybe<Scalars['Int']['output']>;\n  meanScore: Maybe<Scalars['Int']['output']>;\n  staff: Maybe<Staff>;\n  /** The amount of time in minutes the staff member has been watched by the user */\n  timeWatched: Maybe<Scalars['Int']['output']>;\n};\n\n/** A submission for a staff that features in an anime or manga */\nexport type StaffSubmission = {\n  /** Data Mod assigned to handle the submission */\n  assignee: Maybe<User>;\n  createdAt: Maybe<Scalars['Int']['output']>;\n  /** The id of the submission */\n  id: Scalars['Int']['output'];\n  /** Whether the submission is locked */\n  locked: Maybe<Scalars['Boolean']['output']>;\n  /** Inner details of submission status */\n  notes: Maybe<Scalars['String']['output']>;\n  source: Maybe<Scalars['String']['output']>;\n  /** Staff that the submission is referencing */\n  staff: Maybe<Staff>;\n  /** Status of the submission */\n  status: Maybe<SubmissionStatus>;\n  /** The staff submission changes */\n  submission: Maybe<Staff>;\n  /** Submitter for the submission */\n  submitter: Maybe<User>;\n};\n\n/** Notification for when a staff submission is accepted, partially accepted, or rejected */\nexport type StaffSubmissionUpdateNotification = {\n  /** The notification context text */\n  contexts: Maybe<Array<Maybe<Scalars['String']['output']>>>;\n  /** The time the notification was created at */\n  createdAt: Maybe<Scalars['Int']['output']>;\n  /** The id of the Notification */\n  id: Scalars['Int']['output'];\n  /** The notes of the submission */\n  notes: Maybe<Scalars['String']['output']>;\n  /** The staff that was modified. */\n  staff: Maybe<Staff>;\n  /** The status of the submission */\n  status: Maybe<Scalars['String']['output']>;\n  /** The type of notification */\n  type: Maybe<NotificationType>;\n};\n\n/** The distribution of the watching/reading status of media or a user's list */\nexport type StatusDistribution = {\n  /** The amount of entries with this status */\n  amount: Maybe<Scalars['Int']['output']>;\n  /** The day the activity took place (Unix timestamp) */\n  status: Maybe<MediaListStatus>;\n};\n\n/** Animation or production company */\nexport type Studio = {\n  /** The amount of user's who have favourited the studio */\n  favourites: Maybe<Scalars['Int']['output']>;\n  /** The id of the studio */\n  id: Scalars['Int']['output'];\n  /** If the studio is an animation studio or a different kind of company */\n  isAnimationStudio: Scalars['Boolean']['output'];\n  /** If the studio is marked as favourite by the currently authenticated user */\n  isFavourite: Scalars['Boolean']['output'];\n  /** The media the studio has worked on */\n  media: Maybe<MediaConnection>;\n  /** The name of the studio */\n  name: Scalars['String']['output'];\n  /** The url for the studio page on the AniList website */\n  siteUrl: Maybe<Scalars['String']['output']>;\n};\n\n\n/** Animation or production company */\nexport type StudioMediaArgs = {\n  isMain: InputMaybe<Scalars['Boolean']['input']>;\n  onList: InputMaybe<Scalars['Boolean']['input']>;\n  page: InputMaybe<Scalars['Int']['input']>;\n  perPage: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<MediaSort>>>;\n};\n\nexport type StudioConnection = {\n  edges: Maybe<Array<Maybe<StudioEdge>>>;\n  nodes: Maybe<Array<Maybe<Studio>>>;\n  /** The pagination information */\n  pageInfo: Maybe<PageInfo>;\n};\n\n/** Studio connection edge */\nexport type StudioEdge = {\n  /** The order the character should be displayed from the users favourites */\n  favouriteOrder: Maybe<Scalars['Int']['output']>;\n  /** The id of the connection */\n  id: Maybe<Scalars['Int']['output']>;\n  /** If the studio is the main animation studio of the anime */\n  isMain: Scalars['Boolean']['output'];\n  node: Maybe<Studio>;\n};\n\n/** Studio sort enums */\nexport enum StudioSort {\n  Favourites = 'FAVOURITES',\n  FavouritesDesc = 'FAVOURITES_DESC',\n  Id = 'ID',\n  IdDesc = 'ID_DESC',\n  Name = 'NAME',\n  NameDesc = 'NAME_DESC',\n  SearchMatch = 'SEARCH_MATCH'\n}\n\n/** User's studio statistics */\nexport type StudioStats = {\n  amount: Maybe<Scalars['Int']['output']>;\n  meanScore: Maybe<Scalars['Int']['output']>;\n  studio: Maybe<Studio>;\n  /** The amount of time in minutes the studio's works have been watched by the user */\n  timeWatched: Maybe<Scalars['Int']['output']>;\n};\n\n/** Submission sort enums */\nexport enum SubmissionSort {\n  Id = 'ID',\n  IdDesc = 'ID_DESC'\n}\n\n/** Submission status */\nexport enum SubmissionStatus {\n  Accepted = 'ACCEPTED',\n  PartiallyAccepted = 'PARTIALLY_ACCEPTED',\n  Pending = 'PENDING',\n  Rejected = 'REJECTED'\n}\n\n/** User's tag statistics */\nexport type TagStats = {\n  amount: Maybe<Scalars['Int']['output']>;\n  meanScore: Maybe<Scalars['Int']['output']>;\n  tag: Maybe<MediaTag>;\n  /** The amount of time in minutes the tag has been watched by the user */\n  timeWatched: Maybe<Scalars['Int']['output']>;\n};\n\n/** User text activity */\nexport type TextActivity = {\n  /** The time the activity was created at */\n  createdAt: Scalars['Int']['output'];\n  /** The id of the activity */\n  id: Scalars['Int']['output'];\n  /** If the currently authenticated user liked the activity */\n  isLiked: Maybe<Scalars['Boolean']['output']>;\n  /** If the activity is locked and can receive replies */\n  isLocked: Maybe<Scalars['Boolean']['output']>;\n  /** If the activity is pinned to the top of the users activity feed */\n  isPinned: Maybe<Scalars['Boolean']['output']>;\n  /** If the currently authenticated user is subscribed to the activity */\n  isSubscribed: Maybe<Scalars['Boolean']['output']>;\n  /** The amount of likes the activity has */\n  likeCount: Scalars['Int']['output'];\n  /** The users who liked the activity */\n  likes: Maybe<Array<Maybe<User>>>;\n  /** The written replies to the activity */\n  replies: Maybe<Array<Maybe<ActivityReply>>>;\n  /** The number of activity replies */\n  replyCount: Scalars['Int']['output'];\n  /** The url for the activity page on the AniList website */\n  siteUrl: Maybe<Scalars['String']['output']>;\n  /** The status text (Markdown) */\n  text: Maybe<Scalars['String']['output']>;\n  /** The type of activity */\n  type: Maybe<ActivityType>;\n  /** The user who created the activity */\n  user: Maybe<User>;\n  /** The user id of the activity's creator */\n  userId: Maybe<Scalars['Int']['output']>;\n};\n\n\n/** User text activity */\nexport type TextActivityTextArgs = {\n  asHtml: InputMaybe<Scalars['Boolean']['input']>;\n};\n\n/** Forum Thread */\nexport type Thread = {\n  /** The text body of the thread (Markdown) */\n  body: Maybe<Scalars['String']['output']>;\n  /** The categories of the thread */\n  categories: Maybe<Array<Maybe<ThreadCategory>>>;\n  /** The time of the thread creation */\n  createdAt: Scalars['Int']['output'];\n  /** The id of the thread */\n  id: Scalars['Int']['output'];\n  /** If the currently authenticated user liked the thread */\n  isLiked: Maybe<Scalars['Boolean']['output']>;\n  /** If the thread is locked and can receive comments */\n  isLocked: Maybe<Scalars['Boolean']['output']>;\n  /** If the thread is stickied and should be displayed at the top of the page */\n  isSticky: Maybe<Scalars['Boolean']['output']>;\n  /** If the currently authenticated user is subscribed to the thread */\n  isSubscribed: Maybe<Scalars['Boolean']['output']>;\n  /** The amount of likes the thread has */\n  likeCount: Scalars['Int']['output'];\n  /** The users who liked the thread */\n  likes: Maybe<Array<Maybe<User>>>;\n  /** The media categories of the thread */\n  mediaCategories: Maybe<Array<Maybe<Media>>>;\n  /** The time of the last reply */\n  repliedAt: Maybe<Scalars['Int']['output']>;\n  /** The id of the most recent comment on the thread */\n  replyCommentId: Maybe<Scalars['Int']['output']>;\n  /** The number of comments on the thread */\n  replyCount: Maybe<Scalars['Int']['output']>;\n  /** The user to last reply to the thread */\n  replyUser: Maybe<User>;\n  /** The id of the user who most recently commented on the thread */\n  replyUserId: Maybe<Scalars['Int']['output']>;\n  /** The url for the thread page on the AniList website */\n  siteUrl: Maybe<Scalars['String']['output']>;\n  /** The title of the thread */\n  title: Maybe<Scalars['String']['output']>;\n  /** The time of the thread last update */\n  updatedAt: Scalars['Int']['output'];\n  /** The owner of the thread */\n  user: Maybe<User>;\n  /** The id of the thread owner user */\n  userId: Scalars['Int']['output'];\n  /** The number of times users have viewed the thread */\n  viewCount: Maybe<Scalars['Int']['output']>;\n};\n\n\n/** Forum Thread */\nexport type ThreadBodyArgs = {\n  asHtml: InputMaybe<Scalars['Boolean']['input']>;\n};\n\n/** A forum thread category */\nexport type ThreadCategory = {\n  /** The id of the category */\n  id: Scalars['Int']['output'];\n  /** The name of the category */\n  name: Scalars['String']['output'];\n};\n\n/** Forum Thread Comment */\nexport type ThreadComment = {\n  /** The comment's child reply comments */\n  childComments: Maybe<Scalars['Json']['output']>;\n  /** The text content of the comment (Markdown) */\n  comment: Maybe<Scalars['String']['output']>;\n  /** The time of the comments creation */\n  createdAt: Scalars['Int']['output'];\n  /** The id of the comment */\n  id: Scalars['Int']['output'];\n  /** If the currently authenticated user liked the comment */\n  isLiked: Maybe<Scalars['Boolean']['output']>;\n  /** If the comment tree is locked and may not receive replies or edits */\n  isLocked: Maybe<Scalars['Boolean']['output']>;\n  /** The amount of likes the comment has */\n  likeCount: Scalars['Int']['output'];\n  /** The users who liked the comment */\n  likes: Maybe<Array<Maybe<User>>>;\n  /** The url for the comment page on the AniList website */\n  siteUrl: Maybe<Scalars['String']['output']>;\n  /** The thread the comment belongs to */\n  thread: Maybe<Thread>;\n  /** The id of thread the comment belongs to */\n  threadId: Maybe<Scalars['Int']['output']>;\n  /** The time of the comments last update */\n  updatedAt: Scalars['Int']['output'];\n  /** The user who created the comment */\n  user: Maybe<User>;\n  /** The user id of the comment's owner */\n  userId: Maybe<Scalars['Int']['output']>;\n};\n\n\n/** Forum Thread Comment */\nexport type ThreadCommentCommentArgs = {\n  asHtml: InputMaybe<Scalars['Boolean']['input']>;\n};\n\n/** Notification for when a thread comment is liked */\nexport type ThreadCommentLikeNotification = {\n  /** The thread comment that was liked */\n  comment: Maybe<ThreadComment>;\n  /** The id of the activity which was liked */\n  commentId: Scalars['Int']['output'];\n  /** The notification context text */\n  context: Maybe<Scalars['String']['output']>;\n  /** The time the notification was created at */\n  createdAt: Maybe<Scalars['Int']['output']>;\n  /** The id of the Notification */\n  id: Scalars['Int']['output'];\n  /** The thread that the relevant comment belongs to */\n  thread: Maybe<Thread>;\n  /** The type of notification */\n  type: Maybe<NotificationType>;\n  /** The user who liked the activity */\n  user: Maybe<User>;\n  /** The id of the user who liked to the activity */\n  userId: Scalars['Int']['output'];\n};\n\n/** Notification for when authenticated user is @ mentioned in a forum thread comment */\nexport type ThreadCommentMentionNotification = {\n  /** The thread comment that included the @ mention */\n  comment: Maybe<ThreadComment>;\n  /** The id of the comment where mentioned */\n  commentId: Scalars['Int']['output'];\n  /** The notification context text */\n  context: Maybe<Scalars['String']['output']>;\n  /** The time the notification was created at */\n  createdAt: Maybe<Scalars['Int']['output']>;\n  /** The id of the Notification */\n  id: Scalars['Int']['output'];\n  /** The thread that the relevant comment belongs to */\n  thread: Maybe<Thread>;\n  /** The type of notification */\n  type: Maybe<NotificationType>;\n  /** The user who mentioned the authenticated user */\n  user: Maybe<User>;\n  /** The id of the user who mentioned the authenticated user */\n  userId: Scalars['Int']['output'];\n};\n\n/** Notification for when a user replies to your forum thread comment */\nexport type ThreadCommentReplyNotification = {\n  /** The reply thread comment */\n  comment: Maybe<ThreadComment>;\n  /** The id of the reply comment */\n  commentId: Scalars['Int']['output'];\n  /** The notification context text */\n  context: Maybe<Scalars['String']['output']>;\n  /** The time the notification was created at */\n  createdAt: Maybe<Scalars['Int']['output']>;\n  /** The id of the Notification */\n  id: Scalars['Int']['output'];\n  /** The thread that the relevant comment belongs to */\n  thread: Maybe<Thread>;\n  /** The type of notification */\n  type: Maybe<NotificationType>;\n  /** The user who replied to the activity */\n  user: Maybe<User>;\n  /** The id of the user who create the comment reply */\n  userId: Scalars['Int']['output'];\n};\n\n/** Thread comments sort enums */\nexport enum ThreadCommentSort {\n  Id = 'ID',\n  IdDesc = 'ID_DESC'\n}\n\n/** Notification for when a user replies to a subscribed forum thread */\nexport type ThreadCommentSubscribedNotification = {\n  /** The reply thread comment */\n  comment: Maybe<ThreadComment>;\n  /** The id of the new comment in the subscribed thread */\n  commentId: Scalars['Int']['output'];\n  /** The notification context text */\n  context: Maybe<Scalars['String']['output']>;\n  /** The time the notification was created at */\n  createdAt: Maybe<Scalars['Int']['output']>;\n  /** The id of the Notification */\n  id: Scalars['Int']['output'];\n  /** The thread that the relevant comment belongs to */\n  thread: Maybe<Thread>;\n  /** The type of notification */\n  type: Maybe<NotificationType>;\n  /** The user who replied to the subscribed thread */\n  user: Maybe<User>;\n  /** The id of the user who commented on the thread */\n  userId: Scalars['Int']['output'];\n};\n\n/** Notification for when a thread is liked */\nexport type ThreadLikeNotification = {\n  /** The liked thread comment */\n  comment: Maybe<ThreadComment>;\n  /** The notification context text */\n  context: Maybe<Scalars['String']['output']>;\n  /** The time the notification was created at */\n  createdAt: Maybe<Scalars['Int']['output']>;\n  /** The id of the Notification */\n  id: Scalars['Int']['output'];\n  /** The thread that the relevant comment belongs to */\n  thread: Maybe<Thread>;\n  /** The id of the thread which was liked */\n  threadId: Scalars['Int']['output'];\n  /** The type of notification */\n  type: Maybe<NotificationType>;\n  /** The user who liked the activity */\n  user: Maybe<User>;\n  /** The id of the user who liked to the activity */\n  userId: Scalars['Int']['output'];\n};\n\n/** Thread sort enums */\nexport enum ThreadSort {\n  /** @deprecated Use ID instead */\n  CreatedAt = 'CREATED_AT',\n  /** @deprecated Use ID_DESC instead */\n  CreatedAtDesc = 'CREATED_AT_DESC',\n  Id = 'ID',\n  IdDesc = 'ID_DESC',\n  IsSticky = 'IS_STICKY',\n  RepliedAt = 'REPLIED_AT',\n  RepliedAtDesc = 'REPLIED_AT_DESC',\n  ReplyCount = 'REPLY_COUNT',\n  ReplyCountDesc = 'REPLY_COUNT_DESC',\n  SearchMatch = 'SEARCH_MATCH',\n  Title = 'TITLE',\n  TitleDesc = 'TITLE_DESC',\n  UpdatedAt = 'UPDATED_AT',\n  UpdatedAtDesc = 'UPDATED_AT_DESC',\n  ViewCount = 'VIEW_COUNT',\n  ViewCountDesc = 'VIEW_COUNT_DESC'\n}\n\n/** A user */\nexport type User = {\n  /** The bio written by user (Markdown) */\n  about: Maybe<Scalars['String']['output']>;\n  /** The user's avatar images */\n  avatar: Maybe<UserAvatar>;\n  /** The user's banner images */\n  bannerImage: Maybe<Scalars['String']['output']>;\n  /** List of active bans. Mod-only */\n  bans: Maybe<Scalars['Json']['output']>;\n  /** When the user's account was created. (Does not exist for accounts created before 2020) */\n  createdAt: Maybe<Scalars['Int']['output']>;\n  /** Custom donation badge text */\n  donatorBadge: Maybe<Scalars['String']['output']>;\n  /** The donation tier of the user */\n  donatorTier: Maybe<Scalars['Int']['output']>;\n  /** The users favourites */\n  favourites: Maybe<Favourites>;\n  /** The id of the user */\n  id: Scalars['Int']['output'];\n  /** If the user is blocked by the authenticated user */\n  isBlocked: Maybe<Scalars['Boolean']['output']>;\n  /** If this user if following the authenticated user */\n  isFollower: Maybe<Scalars['Boolean']['output']>;\n  /** If the authenticated user if following this user */\n  isFollowing: Maybe<Scalars['Boolean']['output']>;\n  /** The user's media list options */\n  mediaListOptions: Maybe<MediaListOptions>;\n  /** The user's moderator roles if they are a site moderator */\n  moderatorRoles: Maybe<Array<Maybe<ModRole>>>;\n  /**\n   * If the user is a moderator or data moderator\n   * @deprecated Deprecated. Replaced with moderatorRoles field.\n   */\n  moderatorStatus: Maybe<Scalars['String']['output']>;\n  /** The name of the user */\n  name: Scalars['String']['output'];\n  /** The user's general options */\n  options: Maybe<UserOptions>;\n  /** The user's previously used names. */\n  previousNames: Maybe<Array<Maybe<UserPreviousName>>>;\n  /** The url for the user page on the AniList website */\n  siteUrl: Maybe<Scalars['String']['output']>;\n  /** The users anime & manga list statistics */\n  statistics: Maybe<UserStatisticTypes>;\n  /**\n   * The user's statistics\n   * @deprecated Deprecated. Replaced with statistics field.\n   */\n  stats: Maybe<UserStats>;\n  /** The number of unread notifications the user has */\n  unreadNotificationCount: Maybe<Scalars['Int']['output']>;\n  /** When the user's data was last updated */\n  updatedAt: Maybe<Scalars['Int']['output']>;\n};\n\n\n/** A user */\nexport type UserAboutArgs = {\n  asHtml: InputMaybe<Scalars['Boolean']['input']>;\n};\n\n\n/** A user */\nexport type UserFavouritesArgs = {\n  page: InputMaybe<Scalars['Int']['input']>;\n};\n\n/** A user's activity history stats for the previous 6 months. Refreshes only periodically */\nexport type UserActivityHistory = {\n  /** The amount of activity on the day */\n  amount: Maybe<Scalars['Int']['output']>;\n  /** The day the activity took place (Unix timestamp) */\n  date: Maybe<Scalars['Int']['output']>;\n  /** The level of activity represented on a 1-10 scale */\n  level: Maybe<Scalars['Int']['output']>;\n};\n\n/** A user's avatars */\nexport type UserAvatar = {\n  /** The avatar of user at its largest size */\n  large: Maybe<Scalars['String']['output']>;\n  /** The avatar of user at medium size */\n  medium: Maybe<Scalars['String']['output']>;\n};\n\nexport type UserCountryStatistic = {\n  chaptersRead: Scalars['Int']['output'];\n  count: Scalars['Int']['output'];\n  country: Maybe<Scalars['CountryCode']['output']>;\n  meanScore: Scalars['Float']['output'];\n  mediaIds: Array<Maybe<Scalars['Int']['output']>>;\n  minutesWatched: Scalars['Int']['output'];\n};\n\nexport type UserFormatStatistic = {\n  chaptersRead: Scalars['Int']['output'];\n  count: Scalars['Int']['output'];\n  format: Maybe<MediaFormat>;\n  meanScore: Scalars['Float']['output'];\n  mediaIds: Array<Maybe<Scalars['Int']['output']>>;\n  minutesWatched: Scalars['Int']['output'];\n};\n\nexport type UserGenreStatistic = {\n  chaptersRead: Scalars['Int']['output'];\n  count: Scalars['Int']['output'];\n  genre: Maybe<Scalars['String']['output']>;\n  meanScore: Scalars['Float']['output'];\n  mediaIds: Array<Maybe<Scalars['Int']['output']>>;\n  minutesWatched: Scalars['Int']['output'];\n};\n\nexport type UserLengthStatistic = {\n  chaptersRead: Scalars['Int']['output'];\n  count: Scalars['Int']['output'];\n  length: Maybe<Scalars['String']['output']>;\n  meanScore: Scalars['Float']['output'];\n  mediaIds: Array<Maybe<Scalars['Int']['output']>>;\n  minutesWatched: Scalars['Int']['output'];\n};\n\n/** User data for moderators */\nexport type UserModData = {\n  alts: Maybe<Array<Maybe<User>>>;\n  bans: Maybe<Scalars['Json']['output']>;\n  counts: Maybe<Scalars['Json']['output']>;\n  email: Maybe<Scalars['String']['output']>;\n  ip: Maybe<Scalars['Json']['output']>;\n  privacy: Maybe<Scalars['Int']['output']>;\n};\n\n/** A user's general options */\nexport type UserOptions = {\n  /** Minutes between activity for them to be merged together. 0 is Never, Above 2 weeks (20160 mins) is Always. */\n  activityMergeTime: Maybe<Scalars['Int']['output']>;\n  /** Whether the user receives notifications when a show they are watching aires */\n  airingNotifications: Maybe<Scalars['Boolean']['output']>;\n  /** The list activity types the user has disabled from being created from list updates */\n  disabledListActivity: Maybe<Array<Maybe<ListActivityOption>>>;\n  /** Whether the user has enabled viewing of 18+ content */\n  displayAdultContent: Maybe<Scalars['Boolean']['output']>;\n  /** Notification options */\n  notificationOptions: Maybe<Array<Maybe<NotificationOption>>>;\n  /** Profile highlight color (blue, purple, pink, orange, red, green, gray) */\n  profileColor: Maybe<Scalars['String']['output']>;\n  /** Whether the user only allow messages from users they follow */\n  restrictMessagesToFollowing: Maybe<Scalars['Boolean']['output']>;\n  /** The language the user wants to see staff and character names in */\n  staffNameLanguage: Maybe<UserStaffNameLanguage>;\n  /** The user's timezone offset (Auth user only) */\n  timezone: Maybe<Scalars['String']['output']>;\n  /** The language the user wants to see media titles in */\n  titleLanguage: Maybe<UserTitleLanguage>;\n};\n\n/** A user's previous name */\nexport type UserPreviousName = {\n  /** When the user first changed from this name. */\n  createdAt: Maybe<Scalars['Int']['output']>;\n  /** A previous name of the user. */\n  name: Maybe<Scalars['String']['output']>;\n  /** When the user most recently changed from this name. */\n  updatedAt: Maybe<Scalars['Int']['output']>;\n};\n\nexport type UserReleaseYearStatistic = {\n  chaptersRead: Scalars['Int']['output'];\n  count: Scalars['Int']['output'];\n  meanScore: Scalars['Float']['output'];\n  mediaIds: Array<Maybe<Scalars['Int']['output']>>;\n  minutesWatched: Scalars['Int']['output'];\n  releaseYear: Maybe<Scalars['Int']['output']>;\n};\n\nexport type UserScoreStatistic = {\n  chaptersRead: Scalars['Int']['output'];\n  count: Scalars['Int']['output'];\n  meanScore: Scalars['Float']['output'];\n  mediaIds: Array<Maybe<Scalars['Int']['output']>>;\n  minutesWatched: Scalars['Int']['output'];\n  score: Maybe<Scalars['Int']['output']>;\n};\n\n/** User sort enums */\nexport enum UserSort {\n  ChaptersRead = 'CHAPTERS_READ',\n  ChaptersReadDesc = 'CHAPTERS_READ_DESC',\n  Id = 'ID',\n  IdDesc = 'ID_DESC',\n  SearchMatch = 'SEARCH_MATCH',\n  Username = 'USERNAME',\n  UsernameDesc = 'USERNAME_DESC',\n  WatchedTime = 'WATCHED_TIME',\n  WatchedTimeDesc = 'WATCHED_TIME_DESC'\n}\n\n/** The language the user wants to see staff and character names in */\nexport enum UserStaffNameLanguage {\n  /** The staff or character's name in their native language */\n  Native = 'NATIVE',\n  /** The romanization of the staff or character's native name */\n  Romaji = 'ROMAJI',\n  /** The romanization of the staff or character's native name, with western name ordering */\n  RomajiWestern = 'ROMAJI_WESTERN'\n}\n\nexport type UserStaffStatistic = {\n  chaptersRead: Scalars['Int']['output'];\n  count: Scalars['Int']['output'];\n  meanScore: Scalars['Float']['output'];\n  mediaIds: Array<Maybe<Scalars['Int']['output']>>;\n  minutesWatched: Scalars['Int']['output'];\n  staff: Maybe<Staff>;\n};\n\nexport type UserStartYearStatistic = {\n  chaptersRead: Scalars['Int']['output'];\n  count: Scalars['Int']['output'];\n  meanScore: Scalars['Float']['output'];\n  mediaIds: Array<Maybe<Scalars['Int']['output']>>;\n  minutesWatched: Scalars['Int']['output'];\n  startYear: Maybe<Scalars['Int']['output']>;\n};\n\nexport type UserStatisticTypes = {\n  anime: Maybe<UserStatistics>;\n  manga: Maybe<UserStatistics>;\n};\n\nexport type UserStatistics = {\n  chaptersRead: Scalars['Int']['output'];\n  count: Scalars['Int']['output'];\n  countries: Maybe<Array<Maybe<UserCountryStatistic>>>;\n  episodesWatched: Scalars['Int']['output'];\n  formats: Maybe<Array<Maybe<UserFormatStatistic>>>;\n  genres: Maybe<Array<Maybe<UserGenreStatistic>>>;\n  lengths: Maybe<Array<Maybe<UserLengthStatistic>>>;\n  meanScore: Scalars['Float']['output'];\n  minutesWatched: Scalars['Int']['output'];\n  releaseYears: Maybe<Array<Maybe<UserReleaseYearStatistic>>>;\n  scores: Maybe<Array<Maybe<UserScoreStatistic>>>;\n  staff: Maybe<Array<Maybe<UserStaffStatistic>>>;\n  standardDeviation: Scalars['Float']['output'];\n  startYears: Maybe<Array<Maybe<UserStartYearStatistic>>>;\n  statuses: Maybe<Array<Maybe<UserStatusStatistic>>>;\n  studios: Maybe<Array<Maybe<UserStudioStatistic>>>;\n  tags: Maybe<Array<Maybe<UserTagStatistic>>>;\n  voiceActors: Maybe<Array<Maybe<UserVoiceActorStatistic>>>;\n  volumesRead: Scalars['Int']['output'];\n};\n\n\nexport type UserStatisticsCountriesArgs = {\n  limit: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<UserStatisticsSort>>>;\n};\n\n\nexport type UserStatisticsFormatsArgs = {\n  limit: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<UserStatisticsSort>>>;\n};\n\n\nexport type UserStatisticsGenresArgs = {\n  limit: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<UserStatisticsSort>>>;\n};\n\n\nexport type UserStatisticsLengthsArgs = {\n  limit: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<UserStatisticsSort>>>;\n};\n\n\nexport type UserStatisticsReleaseYearsArgs = {\n  limit: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<UserStatisticsSort>>>;\n};\n\n\nexport type UserStatisticsScoresArgs = {\n  limit: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<UserStatisticsSort>>>;\n};\n\n\nexport type UserStatisticsStaffArgs = {\n  limit: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<UserStatisticsSort>>>;\n};\n\n\nexport type UserStatisticsStartYearsArgs = {\n  limit: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<UserStatisticsSort>>>;\n};\n\n\nexport type UserStatisticsStatusesArgs = {\n  limit: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<UserStatisticsSort>>>;\n};\n\n\nexport type UserStatisticsStudiosArgs = {\n  limit: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<UserStatisticsSort>>>;\n};\n\n\nexport type UserStatisticsTagsArgs = {\n  limit: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<UserStatisticsSort>>>;\n};\n\n\nexport type UserStatisticsVoiceActorsArgs = {\n  limit: InputMaybe<Scalars['Int']['input']>;\n  sort: InputMaybe<Array<InputMaybe<UserStatisticsSort>>>;\n};\n\n/** User statistics sort enum */\nexport enum UserStatisticsSort {\n  Count = 'COUNT',\n  CountDesc = 'COUNT_DESC',\n  Id = 'ID',\n  IdDesc = 'ID_DESC',\n  MeanScore = 'MEAN_SCORE',\n  MeanScoreDesc = 'MEAN_SCORE_DESC',\n  Progress = 'PROGRESS',\n  ProgressDesc = 'PROGRESS_DESC'\n}\n\n/** A user's statistics */\nexport type UserStats = {\n  activityHistory: Maybe<Array<Maybe<UserActivityHistory>>>;\n  animeListScores: Maybe<ListScoreStats>;\n  animeScoreDistribution: Maybe<Array<Maybe<ScoreDistribution>>>;\n  animeStatusDistribution: Maybe<Array<Maybe<StatusDistribution>>>;\n  /** The amount of manga chapters the user has read */\n  chaptersRead: Maybe<Scalars['Int']['output']>;\n  favouredActors: Maybe<Array<Maybe<StaffStats>>>;\n  favouredFormats: Maybe<Array<Maybe<FormatStats>>>;\n  favouredGenres: Maybe<Array<Maybe<GenreStats>>>;\n  favouredGenresOverview: Maybe<Array<Maybe<GenreStats>>>;\n  favouredStaff: Maybe<Array<Maybe<StaffStats>>>;\n  favouredStudios: Maybe<Array<Maybe<StudioStats>>>;\n  favouredTags: Maybe<Array<Maybe<TagStats>>>;\n  favouredYears: Maybe<Array<Maybe<YearStats>>>;\n  mangaListScores: Maybe<ListScoreStats>;\n  mangaScoreDistribution: Maybe<Array<Maybe<ScoreDistribution>>>;\n  mangaStatusDistribution: Maybe<Array<Maybe<StatusDistribution>>>;\n  /** The amount of anime the user has watched in minutes */\n  watchedTime: Maybe<Scalars['Int']['output']>;\n};\n\nexport type UserStatusStatistic = {\n  chaptersRead: Scalars['Int']['output'];\n  count: Scalars['Int']['output'];\n  meanScore: Scalars['Float']['output'];\n  mediaIds: Array<Maybe<Scalars['Int']['output']>>;\n  minutesWatched: Scalars['Int']['output'];\n  status: Maybe<MediaListStatus>;\n};\n\nexport type UserStudioStatistic = {\n  chaptersRead: Scalars['Int']['output'];\n  count: Scalars['Int']['output'];\n  meanScore: Scalars['Float']['output'];\n  mediaIds: Array<Maybe<Scalars['Int']['output']>>;\n  minutesWatched: Scalars['Int']['output'];\n  studio: Maybe<Studio>;\n};\n\nexport type UserTagStatistic = {\n  chaptersRead: Scalars['Int']['output'];\n  count: Scalars['Int']['output'];\n  meanScore: Scalars['Float']['output'];\n  mediaIds: Array<Maybe<Scalars['Int']['output']>>;\n  minutesWatched: Scalars['Int']['output'];\n  tag: Maybe<MediaTag>;\n};\n\n/** The language the user wants to see media titles in */\nexport enum UserTitleLanguage {\n  /** The official english title */\n  English = 'ENGLISH',\n  /** The official english title, stylised by media creator */\n  EnglishStylised = 'ENGLISH_STYLISED',\n  /** Official title in it's native language */\n  Native = 'NATIVE',\n  /** Official title in it's native language, stylised by media creator */\n  NativeStylised = 'NATIVE_STYLISED',\n  /** The romanization of the native language title */\n  Romaji = 'ROMAJI',\n  /** The romanization of the native language title, stylised by media creator */\n  RomajiStylised = 'ROMAJI_STYLISED'\n}\n\nexport type UserVoiceActorStatistic = {\n  chaptersRead: Scalars['Int']['output'];\n  characterIds: Array<Maybe<Scalars['Int']['output']>>;\n  count: Scalars['Int']['output'];\n  meanScore: Scalars['Float']['output'];\n  mediaIds: Array<Maybe<Scalars['Int']['output']>>;\n  minutesWatched: Scalars['Int']['output'];\n  voiceActor: Maybe<Staff>;\n};\n\n/** User's year statistics */\nexport type YearStats = {\n  amount: Maybe<Scalars['Int']['output']>;\n  meanScore: Maybe<Scalars['Int']['output']>;\n  year: Maybe<Scalars['Int']['output']>;\n};\n","import { assertPositiveInt } from \"./services/validation\";\n\n/**\n * Minimal shape shared by AniList page responses (`Page.pageInfo` and the\n * selected `page.pageInfo`).\n */\nexport type PageInfoLike = {\n\thasNextPage?: boolean | null;\n\tcurrentPage?: number | null;\n};\n\n/**\n * Result of extracting a page of items from a response.\n */\nexport type ExtractedPage<TItem> = {\n\tpageInfo?: PageInfoLike | null;\n\titems?: Array<TItem | null> | null;\n};\n\n/**\n * Fetches a single page. Called sequentially by {@link paginate}.\n */\nexport type PageFetcher<TResponse> = (page: number) => Promise<TResponse>;\n\n/**\n * Maps a page response to its page info and items. Write one extractor per\n * response shape; both the generated SDK `Page` shape and the selected\n * lowercase `page` shape work.\n */\nexport type PageExtractor<TResponse, TItem> = (\n\tresponse: TResponse,\n) => ExtractedPage<TItem>;\n\nexport type PaginateOptions = {\n\t/** First page to request. Defaults to 1. */\n\tstartPage?: number;\n\t/** Maximum number of pages to request. Defaults to Infinity. */\n\tmaxPages?: number;\n};\n\n/**\n * Sequentially iterates every item across a paginated AniList endpoint.\n *\n * Stops when `pageInfo.hasNextPage` is not `true` or `maxPages` is reached.\n * Errors — including `RateLimitError` from api-core — propagate to the caller\n * untouched so retry/back-off handling stays with the consumer.\n *\n * @example\n * ```typescript\n * for await (const media of paginate(\n *   (page) => anilist.anime.getAnimeBySearch(\"Frieren\", page, 50),\n *   (response) => ({\n *     pageInfo: response.Page?.pageInfo,\n *     items: response.Page?.media,\n *   }),\n * )) {\n *   console.log(media.title?.userPreferred);\n * }\n * ```\n */\nexport async function* paginate<TResponse, TItem>(\n\tfetchPage: PageFetcher<TResponse>,\n\textract: PageExtractor<TResponse, TItem>,\n\toptions: PaginateOptions = {},\n): AsyncGenerator<TItem, void, undefined> {\n\tconst startPage = assertPositiveInt(options.startPage ?? 1, \"startPage\");\n\tconst maxPages = options.maxPages ?? Number.POSITIVE_INFINITY;\n\tif (\n\t\tmaxPages !== Number.POSITIVE_INFINITY &&\n\t\t(!Number.isInteger(maxPages) || maxPages < 0)\n\t) {\n\t\tthrow new TypeError(\"maxPages must be a non-negative integer or Infinity.\");\n\t}\n\n\tfor (\n\t\tlet page = startPage, fetched = 0;\n\t\tfetched < maxPages;\n\t\tpage++, fetched++\n\t) {\n\t\tconst response = await fetchPage(page);\n\t\tconst { pageInfo, items } = extract(response);\n\n\t\tfor (const item of items ?? []) {\n\t\t\tif (item !== null && item !== undefined) {\n\t\t\t\tyield item;\n\t\t\t}\n\t\t}\n\n\t\tif (pageInfo?.hasNextPage !== true) return;\n\t}\n}\n\n/**\n * Collects every item from a paginated AniList endpoint into an array.\n * See {@link paginate} for the extractor contract.\n */\nexport async function collectPages<TResponse, TItem>(\n\tfetchPage: PageFetcher<TResponse>,\n\textract: PageExtractor<TResponse, TItem>,\n\toptions: PaginateOptions = {},\n): Promise<Array<TItem>> {\n\tconst items: Array<TItem> = [];\n\n\tfor await (const item of paginate(fetchPage, extract, options)) {\n\t\titems.push(item);\n\t}\n\n\treturn items;\n}\n","import type { BaseHttpClient } from \"@api-wrappers/api-core\";\nimport type { ANILISTSDK } from \"./@types\";\nimport type { GraphQLClient } from \"./__generated__/anilist-sdk\";\nimport { type AnilistClientInput, createClientBundle } from \"./client\";\nimport { AnimeService } from \"./services/animeService\";\nimport { CharacterService } from \"./services/characterService\";\nimport { GraphQLService } from \"./services/graphqlService\";\nimport { MangaService } from \"./services/mangaService\";\nimport { MediaListService } from \"./services/mediaListService\";\nimport { MediaService } from \"./services/mediaService\";\nimport { SocialService } from \"./services/socialService\";\nimport { StaffService } from \"./services/staffService\";\nimport { StudioService } from \"./services/studioService\";\nimport { UserService } from \"./services/userService\";\n\n/** Main class for interacting with the AniList API. */\nclass Anilist {\n\tprivate client: ANILISTSDK;\n\tprivate graphQLClient: GraphQLClient;\n\treadonly http: BaseHttpClient;\n\n\tconstructor();\n\tconstructor(token: string | undefined);\n\tconstructor(options: Exclude<AnilistClientInput, string | undefined>);\n\tconstructor(input?: AnilistClientInput) {\n\t\tconst { graphQLClient, httpClient, sdkClient } = createClientBundle(input);\n\t\tthis.http = httpClient;\n\t\tthis.graphQLClient = graphQLClient;\n\t\tthis.client = sdkClient;\n\n\t\tthis.anime = new AnimeService(this.client, this.graphQLClient);\n\t\tthis.character = new CharacterService(this.client, this.graphQLClient);\n\t\tthis.graphql = new GraphQLService(this.graphQLClient);\n\t\tthis.manga = new MangaService(this.client, this.graphQLClient);\n\t\tthis.media = new MediaService(this.client, this.graphQLClient);\n\t\tthis.mediaList = new MediaListService(this.client, this.graphQLClient);\n\t\tthis.social = new SocialService(this.client, this.graphQLClient);\n\t\tthis.staff = new StaffService(this.client, this.graphQLClient);\n\t\tthis.studio = new StudioService(this.client, this.graphQLClient);\n\t\tthis.user = new UserService(this.client, this.graphQLClient);\n\t}\n\n\t/** Releases resources held by api-core plugins and transports. */\n\tdispose(): Promise<void> {\n\t\treturn this.http.dispose();\n\t}\n\n\tanime: AnimeService;\n\tcharacter: CharacterService;\n\tgraphql: GraphQLService;\n\tmanga: MangaService;\n\tmedia: MediaService;\n\tmediaList: MediaListService;\n\tsocial: SocialService;\n\tstaff: StaffService;\n\tstudio: StudioService;\n\tuser: UserService;\n}\n\nexport type {\n\tApiCoreError,\n\tApiPlugin,\n\tGraphQLErrorDetail,\n\tRateLimitPluginOptions,\n\tRetryConfig,\n\tTransport,\n} from \"@api-wrappers/api-core\";\nexport {\n\tApiError,\n\tcreateRateLimitPlugin,\n\tGraphQLRequestError,\n\tgql,\n\tisApiError,\n\tisGraphQLRequestError,\n\tisRateLimitError,\n\tisTimeoutError,\n\tRateLimitError,\n\tTimeoutError,\n} from \"@api-wrappers/api-core\";\nexport * from \"./__generated__/anilist-schema\";\nexport * as AniListOperations from \"./__generated__/anilist-sdk\";\nexport type {\n\tAnilistClientBundle,\n\tAnilistClientInput,\n\tAnilistOptions,\n\tAnilistRequestOptions,\n\tAnilistToken,\n} from \"./client\";\nexport {\n\tcreateClient,\n\tcreateClientBundle,\n\tcreateGraphQLClient,\n\tcreateHttpClient,\n\tcreateSdkClient,\n} from \"./client\";\nexport type {\n\tExtractedPage,\n\tPageExtractor,\n\tPageFetcher,\n\tPageInfoLike,\n\tPaginateOptions,\n} from \"./pagination\";\nexport { collectPages, paginate } from \"./pagination\";\nexport type {\n\tActivityReplyPageSelect,\n\tActivityReplySelect,\n\tAiringSchedulePageSelect,\n\tAiringScheduleSelect,\n\tCharacterPageSelect,\n\tCharacterSelect,\n\tDeletedSelect,\n\tFavouritesSelect,\n\tFollowersPageSelect,\n\tFollowingPageSelect,\n\tMediaListCollectionSelect,\n\tMediaListSelect,\n\tMediaPageSelect,\n\tMediaSelect,\n\tMediaTagSelect,\n\tPageInfoSelect,\n\tParsedMarkdownSelect,\n\tRecommendationPageSelect,\n\tRecommendationSelect,\n\tReviewPageSelect,\n\tReviewSelect,\n\tSelectedActivityReply,\n\tSelectedActivityReplyPage,\n\tSelectedAiringSchedule,\n\tSelectedAiringSchedulePage,\n\tSelectedCharacter,\n\tSelectedCharacterPage,\n\tSelectedDeleted,\n\tSelectedFavourites,\n\tSelectedFields,\n\tSelectedFollowersPage,\n\tSelectedFollowingPage,\n\tSelectedMedia,\n\tSelectedMediaList,\n\tSelectedMediaListCollection,\n\tSelectedMediaPage,\n\tSelectedMediaTag,\n\tSelectedParsedMarkdown,\n\tSelectedRecommendation,\n\tSelectedRecommendationPage,\n\tSelectedReview,\n\tSelectedReviewPage,\n\tSelectedSiteStatistics,\n\tSelectedStaff,\n\tSelectedStaffPage,\n\tSelectedStudio,\n\tSelectedStudioPage,\n\tSelectedThread,\n\tSelectedThreadComment,\n\tSelectedThreadCommentPage,\n\tSelectedThreadPage,\n\tSelectedUser,\n\tSelectedUserPage,\n\tSelectedUserStatisticTypes,\n\tSiteStatisticsSelect,\n\tStaffPageSelect,\n\tStaffSelect,\n\tStudioPageSelect,\n\tStudioSelect,\n\tThreadCommentPageSelect,\n\tThreadCommentSelect,\n\tThreadPageSelect,\n\tThreadSelect,\n\tToSelect,\n\tUserPageSelect,\n\tUserSelect,\n\tUserStatisticTypesSelect,\n} from \"./selections\";\nexport type { GraphQLDocument } from \"./services/graphqlService\";\nexport type {\n\tSaveMediaListEntryInput,\n\tUpdateMediaListEntriesInput,\n} from \"./services/mediaListService\";\nexport type { SaveReviewInput } from \"./services/mediaService\";\nexport type {\n\tSaveActivityReplyInput,\n\tSaveMessageActivityInput,\n\tSaveTextActivityInput,\n\tSaveThreadCommentInput,\n\tSaveThreadInput,\n\tThreadSearchFilters,\n} from \"./services/socialService\";\nexport {\n\tANILIST_MAX_PER_PAGE,\n\tassertPositiveInt,\n\tnormalizePerPage,\n} from \"./services/validation\";\nexport { Anilist, Anilist as AniList };\n"],"mappings":"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,kBAAkB;EACxB;EACA;EACA,WAAW;EACX;EACQ;EACR,SAAS;CACV,CAAC;AACF;AAEA,SAAgB,2BACf,eACA,qBACA,WACA,QACS;CACT,OAAO,kBAAkB;EACxB;EACA;EACA,WAAW;EACX;EACQ;EACR,SAAS;CACV,CAAC;AACF;AAEA,SAAgB,uBACf,eACA,qBACA,WACA,QACS;CACT,OAAO,kBAAkB;EACxB;EACA;EACA,WAAW;EACX;EACQ;EACR,SAAS;CACV,CAAC;AACF;AAEA,SAAgB,wBACf,eACA,qBACA,WACA,QACS;CACT,OAAO,kBAAkB;EACxB;EACA;EACA,WAAW;EACX;EACQ;EACR,SAAS;CACV,CAAC;AACF;AAEA,SAAgB,sBACf,eACA,qBACA,WACA,QACS;CACT,OAAO,kBAAkB;EACxB;EACA;EACA,WAAW;EACX;EACQ;EACR,SAAS;CACV,CAAC;AACF;AAEA,SAAgB,gCACf,QACS;CACT,OAAO,kBAAkB;EACxB,eAAe;EACf,qBAAqB;EACrB,WAAW;EACX,UAAU,CAAC,iBAAiB;EACpB;EACR,SAAS;CACV,CAAC;AACF;AAEA,SAAgB,gCACf,QACS;CACT,OAAO,kBAAkB;EACxB,eAAe;EACf,qBAAqB;EACrB,WAAW;EACX,UAAU,CAAC,SAAS;EACZ;EACR,SAAS;CACV,CAAC;AACF;AAEA,SAAgB,gCACf,eACA,qBACA,WACA,QACS;CACT,OAAO,kBAAkB;EACxB;EACA;EACA,WAAW;EACX;EACQ;EACR,SAAS;CACV,CAAC;AACF;AAEA,SAAgB,oBAAoB,QAA4B;CAC/D,OAAO,kBAAkB;EACxB,eAAe;EACf,qBAAqB;EACrB,WAAW;EACH;EACR,SAAS;CACV,CAAC;AACF;AAEA,SAAgB,8BACf,QACS;CACT,OAAO,kBAAkB;EACxB,eAAe;EACf,qBAAqB;EACrB,WAAW;EACX,QAAQ,EAAE,YAAY,OAAO;EAC7B,SAAS;CACV,CAAC;AACF;AAEA,SAAgB,wBACf,eACA,qBACA,WACA,QACS;CACT,OAAO,kBAAkB;EACxB;EACA;EACA,WAAW;EACX;EACQ;EACR,SAAS;CACV,C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M,IAAI,KAAK,EACpB;EACf;EACA,OAAO,KAAK,OAAO,eAAe;GAAE;GAAQ;GAAM,SAAS;EAAM,CAAC;CACnE;AACD;;;;;ACzYA,IAAY,eAAL;CACL;CACA;CACA;;AACF;;AAGA,IAAY,eAAL;;CAEL;;CAEA;;CAEA;;CAEA;;CAEA;;AACF;;AAsEA,IAAY,aAAL;CACL;CACA;CACA;CACA;CACA;CACA;CACA;CACA;;AACF;;AAmJA,IAAY,gBAAL;;CAEL;;CAEA;;CAEA;;AACF;;AAGA,IAAY,gBAAL;CACL;CACA;CACA;CACA;;CAEA;CACA;CACA;CACA;;AACF;AAkEA,IAAY,wBAAL;CACL;CACA;CACA;;AACF;AAEA,IAAY,mBAAL;CACL;CACA;CACA;;AACF;;AAugBA,IAAY,eAAL;CACL;CACA;CACA;CACA;;AACF;;AA+YA,IAAY,cAAL;;CAEL;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;AACF;;AA2IA,IAAY,gBAAL;CACL;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;;AACF;;AAGA,IAAY,kBAAL;;CAEL;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;AACF;;AA8DA,IAAY,gBAAL;;CAEL;;CAEA;;AACF;;AAGA,IAAY,gBAAL;;CAEL;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;CAEA;;AACF;AAEA,IAAY,cAAL;;CAEL;;CAEA;;CAEA;;CAEA;;AACF;;AAGA,IAAY,YAAL;CACL;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;;AACF;;AAGA,IAAY,cAAL;;CA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"}