ani-client 1.4.0 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -4
- package/dist/index.d.mts +50 -4
- package/dist/index.d.ts +50 -4
- package/dist/index.js +90 -11
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +90 -11
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -66,8 +66,7 @@ var CHARACTER_FIELDS_COMPACT = `
|
|
|
66
66
|
favourites
|
|
67
67
|
siteUrl
|
|
68
68
|
`;
|
|
69
|
-
var
|
|
70
|
-
${CHARACTER_FIELDS_COMPACT}
|
|
69
|
+
var CHARACTER_MEDIA_NODES = `
|
|
71
70
|
media(perPage: 10) {
|
|
72
71
|
nodes {
|
|
73
72
|
id
|
|
@@ -78,6 +77,39 @@ var CHARACTER_FIELDS = `
|
|
|
78
77
|
}
|
|
79
78
|
}
|
|
80
79
|
`;
|
|
80
|
+
var VOICE_ACTOR_FIELDS_COMPACT = `
|
|
81
|
+
id
|
|
82
|
+
name { first middle last full native userPreferred }
|
|
83
|
+
languageV2
|
|
84
|
+
image { large medium }
|
|
85
|
+
gender
|
|
86
|
+
primaryOccupations
|
|
87
|
+
siteUrl
|
|
88
|
+
`;
|
|
89
|
+
var CHARACTER_MEDIA_EDGES_WITH_VA = `
|
|
90
|
+
media(perPage: 10) {
|
|
91
|
+
edges {
|
|
92
|
+
voiceActors {
|
|
93
|
+
${VOICE_ACTOR_FIELDS_COMPACT}
|
|
94
|
+
}
|
|
95
|
+
node {
|
|
96
|
+
id
|
|
97
|
+
title { romaji english native userPreferred }
|
|
98
|
+
type
|
|
99
|
+
coverImage { large medium }
|
|
100
|
+
siteUrl
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
`;
|
|
105
|
+
var CHARACTER_FIELDS = `
|
|
106
|
+
${CHARACTER_FIELDS_COMPACT}
|
|
107
|
+
${CHARACTER_MEDIA_NODES}
|
|
108
|
+
`;
|
|
109
|
+
var CHARACTER_FIELDS_WITH_VA = `
|
|
110
|
+
${CHARACTER_FIELDS_COMPACT}
|
|
111
|
+
${CHARACTER_MEDIA_EDGES_WITH_VA}
|
|
112
|
+
`;
|
|
81
113
|
var STAFF_FIELDS = `
|
|
82
114
|
id
|
|
83
115
|
name { first middle last full native }
|
|
@@ -166,6 +198,12 @@ query ($id: Int!) {
|
|
|
166
198
|
${CHARACTER_FIELDS}
|
|
167
199
|
}
|
|
168
200
|
}`;
|
|
201
|
+
var QUERY_CHARACTER_BY_ID_WITH_VA = `
|
|
202
|
+
query ($id: Int!) {
|
|
203
|
+
Character(id: $id) {
|
|
204
|
+
${CHARACTER_FIELDS_WITH_VA}
|
|
205
|
+
}
|
|
206
|
+
}`;
|
|
169
207
|
var QUERY_CHARACTER_SEARCH = `
|
|
170
208
|
query ($search: String, $sort: [CharacterSort], $page: Int, $perPage: Int) {
|
|
171
209
|
Page(page: $page, perPage: $perPage) {
|
|
@@ -175,6 +213,15 @@ query ($search: String, $sort: [CharacterSort], $page: Int, $perPage: Int) {
|
|
|
175
213
|
}
|
|
176
214
|
}
|
|
177
215
|
}`;
|
|
216
|
+
var QUERY_CHARACTER_SEARCH_WITH_VA = `
|
|
217
|
+
query ($search: String, $sort: [CharacterSort], $page: Int, $perPage: Int) {
|
|
218
|
+
Page(page: $page, perPage: $perPage) {
|
|
219
|
+
pageInfo { total perPage currentPage lastPage hasNextPage }
|
|
220
|
+
characters(search: $search, sort: $sort) {
|
|
221
|
+
${CHARACTER_FIELDS_WITH_VA}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}`;
|
|
178
225
|
var QUERY_STAFF_BY_ID = `
|
|
179
226
|
query ($id: Int!) {
|
|
180
227
|
Staff(id: $id) {
|
|
@@ -182,7 +229,7 @@ query ($id: Int!) {
|
|
|
182
229
|
}
|
|
183
230
|
}`;
|
|
184
231
|
var QUERY_STAFF_SEARCH = `
|
|
185
|
-
query ($search: String, $sort: [
|
|
232
|
+
query ($search: String, $sort: [StaffSort], $page: Int, $perPage: Int) {
|
|
186
233
|
Page(page: $page, perPage: $perPage) {
|
|
187
234
|
pageInfo { total perPage currentPage lastPage hasNextPage }
|
|
188
235
|
staff(search: $search, sort: $sort) {
|
|
@@ -364,13 +411,17 @@ function buildMediaByIdQuery(include) {
|
|
|
364
411
|
const opts = typeof include.characters === "object" ? include.characters : {};
|
|
365
412
|
const perPage = opts.perPage ?? 25;
|
|
366
413
|
const sortClause = opts.sort !== false ? ", sort: [ROLE, RELEVANCE, ID]" : "";
|
|
414
|
+
const voiceActorBlock = opts.voiceActors ? `
|
|
415
|
+
voiceActors {
|
|
416
|
+
${VOICE_ACTOR_FIELDS_COMPACT}
|
|
417
|
+
}` : "";
|
|
367
418
|
extra.push(`
|
|
368
419
|
characters(perPage: ${perPage}${sortClause}) {
|
|
369
420
|
edges {
|
|
370
421
|
role
|
|
371
422
|
node {
|
|
372
423
|
${CHARACTER_FIELDS_COMPACT}
|
|
373
|
-
}
|
|
424
|
+
}${voiceActorBlock}
|
|
374
425
|
}
|
|
375
426
|
}`);
|
|
376
427
|
}
|
|
@@ -890,6 +941,9 @@ var AniListClient = class {
|
|
|
890
941
|
* // Include characters sorted by role, 25 results
|
|
891
942
|
* const anime = await client.getMedia(1, { characters: true });
|
|
892
943
|
*
|
|
944
|
+
* // Include characters with voice actors
|
|
945
|
+
* const anime = await client.getMedia(1, { characters: { voiceActors: true } });
|
|
946
|
+
*
|
|
893
947
|
* // Full control
|
|
894
948
|
* const anime = await client.getMedia(1, {
|
|
895
949
|
* characters: { perPage: 50, sort: true },
|
|
@@ -927,7 +981,11 @@ var AniListClient = class {
|
|
|
927
981
|
*/
|
|
928
982
|
async searchMedia(options = {}) {
|
|
929
983
|
const { query: search, page = 1, perPage = 20, ...filters } = options;
|
|
930
|
-
return this.pagedRequest(
|
|
984
|
+
return this.pagedRequest(
|
|
985
|
+
QUERY_MEDIA_SEARCH,
|
|
986
|
+
{ search, ...filters, page, perPage: this.clampPerPage(perPage) },
|
|
987
|
+
"media"
|
|
988
|
+
);
|
|
931
989
|
}
|
|
932
990
|
/**
|
|
933
991
|
* Get currently trending anime or manga.
|
|
@@ -943,32 +1001,49 @@ var AniListClient = class {
|
|
|
943
1001
|
* Fetch a character by AniList ID.
|
|
944
1002
|
*
|
|
945
1003
|
* @param id - The AniList character ID
|
|
1004
|
+
* @param include - Optional include options (e.g. voice actors)
|
|
946
1005
|
* @returns The character object
|
|
947
1006
|
*
|
|
948
1007
|
* @example
|
|
949
1008
|
* ```ts
|
|
950
1009
|
* const spike = await client.getCharacter(1);
|
|
951
1010
|
* console.log(spike.name.full); // "Spike Spiegel"
|
|
1011
|
+
*
|
|
1012
|
+
* // With voice actors
|
|
1013
|
+
* const spike = await client.getCharacter(1, { voiceActors: true });
|
|
1014
|
+
* spike.media?.edges?.forEach((e) => {
|
|
1015
|
+
* console.log(e.node.title.romaji);
|
|
1016
|
+
* e.voiceActors?.forEach((va) => console.log(` VA: ${va.name.full}`));
|
|
1017
|
+
* });
|
|
952
1018
|
* ```
|
|
953
1019
|
*/
|
|
954
|
-
async getCharacter(id) {
|
|
955
|
-
const
|
|
1020
|
+
async getCharacter(id, include) {
|
|
1021
|
+
const query = include?.voiceActors ? QUERY_CHARACTER_BY_ID_WITH_VA : QUERY_CHARACTER_BY_ID;
|
|
1022
|
+
const data = await this.request(query, { id });
|
|
956
1023
|
return data.Character;
|
|
957
1024
|
}
|
|
958
1025
|
/**
|
|
959
1026
|
* Search for characters by name.
|
|
960
1027
|
*
|
|
961
|
-
* @param options - Search / pagination parameters
|
|
1028
|
+
* @param options - Search / pagination parameters (includes optional `voiceActors`)
|
|
962
1029
|
* @returns Paginated results with matching characters
|
|
963
1030
|
*
|
|
964
1031
|
* @example
|
|
965
1032
|
* ```ts
|
|
966
1033
|
* const result = await client.searchCharacters({ query: "Luffy", perPage: 5 });
|
|
1034
|
+
*
|
|
1035
|
+
* // With voice actors
|
|
1036
|
+
* const result = await client.searchCharacters({ query: "Luffy", voiceActors: true });
|
|
967
1037
|
* ```
|
|
968
1038
|
*/
|
|
969
1039
|
async searchCharacters(options = {}) {
|
|
970
|
-
const { query: search, page = 1, perPage = 20, ...rest } = options;
|
|
971
|
-
|
|
1040
|
+
const { query: search, page = 1, perPage = 20, voiceActors, ...rest } = options;
|
|
1041
|
+
const gqlQuery = voiceActors ? QUERY_CHARACTER_SEARCH_WITH_VA : QUERY_CHARACTER_SEARCH;
|
|
1042
|
+
return this.pagedRequest(
|
|
1043
|
+
gqlQuery,
|
|
1044
|
+
{ search, ...rest, page, perPage: this.clampPerPage(perPage) },
|
|
1045
|
+
"characters"
|
|
1046
|
+
);
|
|
972
1047
|
}
|
|
973
1048
|
/**
|
|
974
1049
|
* Fetch a staff member by AniList ID.
|
|
@@ -999,7 +1074,11 @@ var AniListClient = class {
|
|
|
999
1074
|
*/
|
|
1000
1075
|
async searchStaff(options = {}) {
|
|
1001
1076
|
const { query: search, page = 1, perPage = 20, sort } = options;
|
|
1002
|
-
return this.pagedRequest(
|
|
1077
|
+
return this.pagedRequest(
|
|
1078
|
+
QUERY_STAFF_SEARCH,
|
|
1079
|
+
{ search, sort, page, perPage: this.clampPerPage(perPage) },
|
|
1080
|
+
"staff"
|
|
1081
|
+
);
|
|
1003
1082
|
}
|
|
1004
1083
|
/**
|
|
1005
1084
|
* Fetch a user by AniList ID.
|