ani-client 1.3.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 +101 -8
- package/dist/index.d.mts +289 -62
- package/dist/index.d.ts +289 -62
- package/dist/index.js +512 -194
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +512 -195
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -1
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// src/queries/index.ts
|
|
2
|
-
var
|
|
2
|
+
var MEDIA_FIELDS_BASE = `
|
|
3
3
|
id
|
|
4
4
|
idMal
|
|
5
5
|
title { romaji english native userPreferred }
|
|
@@ -31,6 +31,10 @@ var MEDIA_FIELDS = `
|
|
|
31
31
|
trending
|
|
32
32
|
tags { id name description category rank isMediaSpoiler }
|
|
33
33
|
studios { nodes { id name isAnimationStudio siteUrl } }
|
|
34
|
+
isAdult
|
|
35
|
+
siteUrl
|
|
36
|
+
`;
|
|
37
|
+
var RELATIONS_FIELDS = `
|
|
34
38
|
relations {
|
|
35
39
|
edges {
|
|
36
40
|
relationType(version: 2)
|
|
@@ -45,10 +49,12 @@ var MEDIA_FIELDS = `
|
|
|
45
49
|
}
|
|
46
50
|
}
|
|
47
51
|
}
|
|
48
|
-
isAdult
|
|
49
|
-
siteUrl
|
|
50
52
|
`;
|
|
51
|
-
var
|
|
53
|
+
var MEDIA_FIELDS = `
|
|
54
|
+
${MEDIA_FIELDS_BASE}
|
|
55
|
+
${RELATIONS_FIELDS}
|
|
56
|
+
`;
|
|
57
|
+
var CHARACTER_FIELDS_COMPACT = `
|
|
52
58
|
id
|
|
53
59
|
name { first middle last full native alternative }
|
|
54
60
|
image { large medium }
|
|
@@ -59,6 +65,8 @@ var CHARACTER_FIELDS = `
|
|
|
59
65
|
bloodType
|
|
60
66
|
favourites
|
|
61
67
|
siteUrl
|
|
68
|
+
`;
|
|
69
|
+
var CHARACTER_MEDIA_NODES = `
|
|
62
70
|
media(perPage: 10) {
|
|
63
71
|
nodes {
|
|
64
72
|
id
|
|
@@ -69,6 +77,39 @@ var CHARACTER_FIELDS = `
|
|
|
69
77
|
}
|
|
70
78
|
}
|
|
71
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
|
+
`;
|
|
72
113
|
var STAFF_FIELDS = `
|
|
73
114
|
id
|
|
74
115
|
name { first middle last full native }
|
|
@@ -138,7 +179,7 @@ query (
|
|
|
138
179
|
isAdult: $isAdult,
|
|
139
180
|
sort: $sort
|
|
140
181
|
) {
|
|
141
|
-
${
|
|
182
|
+
${MEDIA_FIELDS_BASE}
|
|
142
183
|
}
|
|
143
184
|
}
|
|
144
185
|
}`;
|
|
@@ -147,7 +188,7 @@ query ($type: MediaType, $page: Int, $perPage: Int) {
|
|
|
147
188
|
Page(page: $page, perPage: $perPage) {
|
|
148
189
|
pageInfo { total perPage currentPage lastPage hasNextPage }
|
|
149
190
|
media(type: $type, sort: TRENDING_DESC) {
|
|
150
|
-
${
|
|
191
|
+
${MEDIA_FIELDS_BASE}
|
|
151
192
|
}
|
|
152
193
|
}
|
|
153
194
|
}`;
|
|
@@ -157,6 +198,12 @@ query ($id: Int!) {
|
|
|
157
198
|
${CHARACTER_FIELDS}
|
|
158
199
|
}
|
|
159
200
|
}`;
|
|
201
|
+
var QUERY_CHARACTER_BY_ID_WITH_VA = `
|
|
202
|
+
query ($id: Int!) {
|
|
203
|
+
Character(id: $id) {
|
|
204
|
+
${CHARACTER_FIELDS_WITH_VA}
|
|
205
|
+
}
|
|
206
|
+
}`;
|
|
160
207
|
var QUERY_CHARACTER_SEARCH = `
|
|
161
208
|
query ($search: String, $sort: [CharacterSort], $page: Int, $perPage: Int) {
|
|
162
209
|
Page(page: $page, perPage: $perPage) {
|
|
@@ -166,6 +213,15 @@ query ($search: String, $sort: [CharacterSort], $page: Int, $perPage: Int) {
|
|
|
166
213
|
}
|
|
167
214
|
}
|
|
168
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
|
+
}`;
|
|
169
225
|
var QUERY_STAFF_BY_ID = `
|
|
170
226
|
query ($id: Int!) {
|
|
171
227
|
Staff(id: $id) {
|
|
@@ -173,10 +229,10 @@ query ($id: Int!) {
|
|
|
173
229
|
}
|
|
174
230
|
}`;
|
|
175
231
|
var QUERY_STAFF_SEARCH = `
|
|
176
|
-
query ($search: String, $page: Int, $perPage: Int) {
|
|
232
|
+
query ($search: String, $sort: [StaffSort], $page: Int, $perPage: Int) {
|
|
177
233
|
Page(page: $page, perPage: $perPage) {
|
|
178
234
|
pageInfo { total perPage currentPage lastPage hasNextPage }
|
|
179
|
-
staff(search: $search) {
|
|
235
|
+
staff(search: $search, sort: $sort) {
|
|
180
236
|
${STAFF_FIELDS}
|
|
181
237
|
}
|
|
182
238
|
}
|
|
@@ -204,7 +260,7 @@ query ($airingAt_greater: Int, $airingAt_lesser: Int, $sort: [AiringSort], $page
|
|
|
204
260
|
episode
|
|
205
261
|
mediaId
|
|
206
262
|
media {
|
|
207
|
-
${
|
|
263
|
+
${MEDIA_FIELDS_BASE}
|
|
208
264
|
}
|
|
209
265
|
}
|
|
210
266
|
}
|
|
@@ -214,7 +270,7 @@ query ($page: Int, $perPage: Int) {
|
|
|
214
270
|
Page(page: $page, perPage: $perPage) {
|
|
215
271
|
pageInfo { total perPage currentPage lastPage hasNextPage }
|
|
216
272
|
media(type: MANGA, status: RELEASING, sort: UPDATED_AT_DESC) {
|
|
217
|
-
${
|
|
273
|
+
${MEDIA_FIELDS_BASE}
|
|
218
274
|
}
|
|
219
275
|
}
|
|
220
276
|
}`;
|
|
@@ -223,7 +279,7 @@ query ($type: MediaType, $sort: [MediaSort], $page: Int, $perPage: Int) {
|
|
|
223
279
|
Page(page: $page, perPage: $perPage) {
|
|
224
280
|
pageInfo { total perPage currentPage lastPage hasNextPage }
|
|
225
281
|
media(type: $type, status: NOT_YET_RELEASED, sort: $sort) {
|
|
226
|
-
${
|
|
282
|
+
${MEDIA_FIELDS_BASE}
|
|
227
283
|
}
|
|
228
284
|
}
|
|
229
285
|
}`;
|
|
@@ -232,7 +288,7 @@ query ($season: MediaSeason!, $seasonYear: Int!, $type: MediaType, $sort: [Media
|
|
|
232
288
|
Page(page: $page, perPage: $perPage) {
|
|
233
289
|
pageInfo { total perPage currentPage lastPage hasNextPage }
|
|
234
290
|
media(season: $season, seasonYear: $seasonYear, type: $type, sort: $sort) {
|
|
235
|
-
${
|
|
291
|
+
${MEDIA_FIELDS_BASE}
|
|
236
292
|
}
|
|
237
293
|
}
|
|
238
294
|
}`;
|
|
@@ -252,7 +308,7 @@ var MEDIA_LIST_FIELDS = `
|
|
|
252
308
|
updatedAt
|
|
253
309
|
createdAt
|
|
254
310
|
media {
|
|
255
|
-
${
|
|
311
|
+
${MEDIA_FIELDS_BASE}
|
|
256
312
|
}
|
|
257
313
|
`;
|
|
258
314
|
var QUERY_RECOMMENDATIONS = `
|
|
@@ -345,13 +401,105 @@ query {
|
|
|
345
401
|
isAdult
|
|
346
402
|
}
|
|
347
403
|
}`;
|
|
404
|
+
function buildMediaByIdQuery(include) {
|
|
405
|
+
if (!include) return QUERY_MEDIA_BY_ID;
|
|
406
|
+
const extra = [];
|
|
407
|
+
if (include.relations !== false) {
|
|
408
|
+
extra.push(RELATIONS_FIELDS);
|
|
409
|
+
}
|
|
410
|
+
if (include.characters) {
|
|
411
|
+
const opts = typeof include.characters === "object" ? include.characters : {};
|
|
412
|
+
const perPage = opts.perPage ?? 25;
|
|
413
|
+
const sortClause = opts.sort !== false ? ", sort: [ROLE, RELEVANCE, ID]" : "";
|
|
414
|
+
const voiceActorBlock = opts.voiceActors ? `
|
|
415
|
+
voiceActors {
|
|
416
|
+
${VOICE_ACTOR_FIELDS_COMPACT}
|
|
417
|
+
}` : "";
|
|
418
|
+
extra.push(`
|
|
419
|
+
characters(perPage: ${perPage}${sortClause}) {
|
|
420
|
+
edges {
|
|
421
|
+
role
|
|
422
|
+
node {
|
|
423
|
+
${CHARACTER_FIELDS_COMPACT}
|
|
424
|
+
}${voiceActorBlock}
|
|
425
|
+
}
|
|
426
|
+
}`);
|
|
427
|
+
}
|
|
428
|
+
if (include.staff) {
|
|
429
|
+
const opts = typeof include.staff === "object" ? include.staff : {};
|
|
430
|
+
const perPage = opts.perPage ?? 25;
|
|
431
|
+
const sortClause = opts.sort !== false ? ", sort: [RELEVANCE, ID]" : "";
|
|
432
|
+
extra.push(`
|
|
433
|
+
staff(perPage: ${perPage}${sortClause}) {
|
|
434
|
+
edges {
|
|
435
|
+
role
|
|
436
|
+
node {
|
|
437
|
+
${STAFF_FIELDS}
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
}`);
|
|
441
|
+
}
|
|
442
|
+
if (include.recommendations) {
|
|
443
|
+
const perPage = typeof include.recommendations === "object" ? include.recommendations.perPage ?? 10 : 10;
|
|
444
|
+
extra.push(`
|
|
445
|
+
recommendations(perPage: ${perPage}, sort: [RATING_DESC]) {
|
|
446
|
+
nodes {
|
|
447
|
+
id
|
|
448
|
+
rating
|
|
449
|
+
mediaRecommendation {
|
|
450
|
+
id
|
|
451
|
+
title { romaji english native userPreferred }
|
|
452
|
+
type
|
|
453
|
+
format
|
|
454
|
+
coverImage { large medium }
|
|
455
|
+
averageScore
|
|
456
|
+
siteUrl
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
}`);
|
|
460
|
+
}
|
|
461
|
+
if (include.streamingEpisodes) {
|
|
462
|
+
extra.push(`
|
|
463
|
+
streamingEpisodes {
|
|
464
|
+
title
|
|
465
|
+
thumbnail
|
|
466
|
+
url
|
|
467
|
+
site
|
|
468
|
+
}`);
|
|
469
|
+
}
|
|
470
|
+
if (include.externalLinks) {
|
|
471
|
+
extra.push(`
|
|
472
|
+
externalLinks {
|
|
473
|
+
id
|
|
474
|
+
url
|
|
475
|
+
site
|
|
476
|
+
type
|
|
477
|
+
icon
|
|
478
|
+
color
|
|
479
|
+
}`);
|
|
480
|
+
}
|
|
481
|
+
if (include.stats) {
|
|
482
|
+
extra.push(`
|
|
483
|
+
stats {
|
|
484
|
+
scoreDistribution { score amount }
|
|
485
|
+
statusDistribution { status amount }
|
|
486
|
+
}`);
|
|
487
|
+
}
|
|
488
|
+
return `
|
|
489
|
+
query ($id: Int!) {
|
|
490
|
+
Media(id: $id) {
|
|
491
|
+
${MEDIA_FIELDS_BASE}
|
|
492
|
+
${extra.join("\n")}
|
|
493
|
+
}
|
|
494
|
+
}`;
|
|
495
|
+
}
|
|
348
496
|
function buildBatchQuery(ids, typeName, fields, prefix) {
|
|
349
497
|
const aliases = ids.map((id, i) => `${prefix}${i}: ${typeName}(id: ${id}) { ${fields} }`).join("\n ");
|
|
350
498
|
return `query {
|
|
351
499
|
${aliases}
|
|
352
500
|
}`;
|
|
353
501
|
}
|
|
354
|
-
var buildBatchMediaQuery = (ids) => buildBatchQuery(ids, "Media",
|
|
502
|
+
var buildBatchMediaQuery = (ids) => buildBatchQuery(ids, "Media", MEDIA_FIELDS_BASE, "m");
|
|
355
503
|
var buildBatchCharacterQuery = (ids) => buildBatchQuery(ids, "Character", CHARACTER_FIELDS, "c");
|
|
356
504
|
var buildBatchStaffQuery = (ids) => buildBatchQuery(ids, "Staff", STAFF_FIELDS, "s");
|
|
357
505
|
|
|
@@ -366,7 +514,8 @@ var MemoryCache = class {
|
|
|
366
514
|
}
|
|
367
515
|
/** Build a deterministic cache key from a query + variables pair. */
|
|
368
516
|
static key(query, variables) {
|
|
369
|
-
|
|
517
|
+
const normalized = query.replace(/\s+/g, " ").trim();
|
|
518
|
+
return `${normalized}|${JSON.stringify(variables, Object.keys(variables).sort())}`;
|
|
370
519
|
}
|
|
371
520
|
/** Retrieve a cached value, or `undefined` if missing / expired. */
|
|
372
521
|
get(key) {
|
|
@@ -403,9 +552,9 @@ var MemoryCache = class {
|
|
|
403
552
|
get size() {
|
|
404
553
|
return this.store.size;
|
|
405
554
|
}
|
|
406
|
-
/** Return
|
|
555
|
+
/** Return all cache keys. */
|
|
407
556
|
keys() {
|
|
408
|
-
return this.store.keys();
|
|
557
|
+
return [...this.store.keys()];
|
|
409
558
|
}
|
|
410
559
|
/**
|
|
411
560
|
* Remove all entries whose key matches the given pattern.
|
|
@@ -414,25 +563,26 @@ var MemoryCache = class {
|
|
|
414
563
|
* @returns Number of entries removed.
|
|
415
564
|
*/
|
|
416
565
|
invalidate(pattern) {
|
|
417
|
-
const regex = typeof pattern === "string" ? new RegExp(pattern) : pattern;
|
|
418
|
-
|
|
419
|
-
for (const key of
|
|
420
|
-
if (regex.test(key))
|
|
421
|
-
this.store.delete(key);
|
|
422
|
-
count++;
|
|
423
|
-
}
|
|
566
|
+
const regex = typeof pattern === "string" ? new RegExp(pattern.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")) : pattern;
|
|
567
|
+
const toDelete = [];
|
|
568
|
+
for (const key of this.store.keys()) {
|
|
569
|
+
if (regex.test(key)) toDelete.push(key);
|
|
424
570
|
}
|
|
425
|
-
|
|
571
|
+
for (const key of toDelete) this.store.delete(key);
|
|
572
|
+
return toDelete.length;
|
|
426
573
|
}
|
|
427
574
|
};
|
|
428
575
|
|
|
429
576
|
// src/errors/index.ts
|
|
430
|
-
var AniListError = class extends Error {
|
|
577
|
+
var AniListError = class _AniListError extends Error {
|
|
431
578
|
constructor(message, status, errors = []) {
|
|
432
579
|
super(message);
|
|
433
580
|
this.name = "AniListError";
|
|
434
581
|
this.status = status;
|
|
435
582
|
this.errors = errors;
|
|
583
|
+
if (Error.captureStackTrace) {
|
|
584
|
+
Error.captureStackTrace(this, _AniListError);
|
|
585
|
+
}
|
|
436
586
|
}
|
|
437
587
|
};
|
|
438
588
|
|
|
@@ -531,6 +681,169 @@ function isNetworkError(err) {
|
|
|
531
681
|
return false;
|
|
532
682
|
}
|
|
533
683
|
|
|
684
|
+
// src/types/index.ts
|
|
685
|
+
var MediaType = /* @__PURE__ */ ((MediaType2) => {
|
|
686
|
+
MediaType2["ANIME"] = "ANIME";
|
|
687
|
+
MediaType2["MANGA"] = "MANGA";
|
|
688
|
+
return MediaType2;
|
|
689
|
+
})(MediaType || {});
|
|
690
|
+
var MediaFormat = /* @__PURE__ */ ((MediaFormat2) => {
|
|
691
|
+
MediaFormat2["TV"] = "TV";
|
|
692
|
+
MediaFormat2["TV_SHORT"] = "TV_SHORT";
|
|
693
|
+
MediaFormat2["MOVIE"] = "MOVIE";
|
|
694
|
+
MediaFormat2["SPECIAL"] = "SPECIAL";
|
|
695
|
+
MediaFormat2["OVA"] = "OVA";
|
|
696
|
+
MediaFormat2["ONA"] = "ONA";
|
|
697
|
+
MediaFormat2["MUSIC"] = "MUSIC";
|
|
698
|
+
MediaFormat2["MANGA"] = "MANGA";
|
|
699
|
+
MediaFormat2["NOVEL"] = "NOVEL";
|
|
700
|
+
MediaFormat2["ONE_SHOT"] = "ONE_SHOT";
|
|
701
|
+
return MediaFormat2;
|
|
702
|
+
})(MediaFormat || {});
|
|
703
|
+
var MediaStatus = /* @__PURE__ */ ((MediaStatus2) => {
|
|
704
|
+
MediaStatus2["FINISHED"] = "FINISHED";
|
|
705
|
+
MediaStatus2["RELEASING"] = "RELEASING";
|
|
706
|
+
MediaStatus2["NOT_YET_RELEASED"] = "NOT_YET_RELEASED";
|
|
707
|
+
MediaStatus2["CANCELLED"] = "CANCELLED";
|
|
708
|
+
MediaStatus2["HIATUS"] = "HIATUS";
|
|
709
|
+
return MediaStatus2;
|
|
710
|
+
})(MediaStatus || {});
|
|
711
|
+
var MediaSeason = /* @__PURE__ */ ((MediaSeason2) => {
|
|
712
|
+
MediaSeason2["WINTER"] = "WINTER";
|
|
713
|
+
MediaSeason2["SPRING"] = "SPRING";
|
|
714
|
+
MediaSeason2["SUMMER"] = "SUMMER";
|
|
715
|
+
MediaSeason2["FALL"] = "FALL";
|
|
716
|
+
return MediaSeason2;
|
|
717
|
+
})(MediaSeason || {});
|
|
718
|
+
var MediaSort = /* @__PURE__ */ ((MediaSort2) => {
|
|
719
|
+
MediaSort2["ID"] = "ID";
|
|
720
|
+
MediaSort2["ID_DESC"] = "ID_DESC";
|
|
721
|
+
MediaSort2["TITLE_ROMAJI"] = "TITLE_ROMAJI";
|
|
722
|
+
MediaSort2["TITLE_ROMAJI_DESC"] = "TITLE_ROMAJI_DESC";
|
|
723
|
+
MediaSort2["TITLE_ENGLISH"] = "TITLE_ENGLISH";
|
|
724
|
+
MediaSort2["TITLE_ENGLISH_DESC"] = "TITLE_ENGLISH_DESC";
|
|
725
|
+
MediaSort2["TITLE_NATIVE"] = "TITLE_NATIVE";
|
|
726
|
+
MediaSort2["TITLE_NATIVE_DESC"] = "TITLE_NATIVE_DESC";
|
|
727
|
+
MediaSort2["TYPE"] = "TYPE";
|
|
728
|
+
MediaSort2["TYPE_DESC"] = "TYPE_DESC";
|
|
729
|
+
MediaSort2["FORMAT"] = "FORMAT";
|
|
730
|
+
MediaSort2["FORMAT_DESC"] = "FORMAT_DESC";
|
|
731
|
+
MediaSort2["START_DATE"] = "START_DATE";
|
|
732
|
+
MediaSort2["START_DATE_DESC"] = "START_DATE_DESC";
|
|
733
|
+
MediaSort2["END_DATE"] = "END_DATE";
|
|
734
|
+
MediaSort2["END_DATE_DESC"] = "END_DATE_DESC";
|
|
735
|
+
MediaSort2["SCORE"] = "SCORE";
|
|
736
|
+
MediaSort2["SCORE_DESC"] = "SCORE_DESC";
|
|
737
|
+
MediaSort2["POPULARITY"] = "POPULARITY";
|
|
738
|
+
MediaSort2["POPULARITY_DESC"] = "POPULARITY_DESC";
|
|
739
|
+
MediaSort2["TRENDING"] = "TRENDING";
|
|
740
|
+
MediaSort2["TRENDING_DESC"] = "TRENDING_DESC";
|
|
741
|
+
MediaSort2["EPISODES"] = "EPISODES";
|
|
742
|
+
MediaSort2["EPISODES_DESC"] = "EPISODES_DESC";
|
|
743
|
+
MediaSort2["DURATION"] = "DURATION";
|
|
744
|
+
MediaSort2["DURATION_DESC"] = "DURATION_DESC";
|
|
745
|
+
MediaSort2["STATUS"] = "STATUS";
|
|
746
|
+
MediaSort2["STATUS_DESC"] = "STATUS_DESC";
|
|
747
|
+
MediaSort2["FAVOURITES"] = "FAVOURITES";
|
|
748
|
+
MediaSort2["FAVOURITES_DESC"] = "FAVOURITES_DESC";
|
|
749
|
+
MediaSort2["UPDATED_AT"] = "UPDATED_AT";
|
|
750
|
+
MediaSort2["UPDATED_AT_DESC"] = "UPDATED_AT_DESC";
|
|
751
|
+
MediaSort2["SEARCH_MATCH"] = "SEARCH_MATCH";
|
|
752
|
+
return MediaSort2;
|
|
753
|
+
})(MediaSort || {});
|
|
754
|
+
var AiringSort = /* @__PURE__ */ ((AiringSort2) => {
|
|
755
|
+
AiringSort2["ID"] = "ID";
|
|
756
|
+
AiringSort2["ID_DESC"] = "ID_DESC";
|
|
757
|
+
AiringSort2["MEDIA_ID"] = "MEDIA_ID";
|
|
758
|
+
AiringSort2["MEDIA_ID_DESC"] = "MEDIA_ID_DESC";
|
|
759
|
+
AiringSort2["TIME"] = "TIME";
|
|
760
|
+
AiringSort2["TIME_DESC"] = "TIME_DESC";
|
|
761
|
+
AiringSort2["EPISODE"] = "EPISODE";
|
|
762
|
+
AiringSort2["EPISODE_DESC"] = "EPISODE_DESC";
|
|
763
|
+
return AiringSort2;
|
|
764
|
+
})(AiringSort || {});
|
|
765
|
+
var CharacterSort = /* @__PURE__ */ ((CharacterSort2) => {
|
|
766
|
+
CharacterSort2["ID"] = "ID";
|
|
767
|
+
CharacterSort2["ID_DESC"] = "ID_DESC";
|
|
768
|
+
CharacterSort2["ROLE"] = "ROLE";
|
|
769
|
+
CharacterSort2["ROLE_DESC"] = "ROLE_DESC";
|
|
770
|
+
CharacterSort2["SEARCH_MATCH"] = "SEARCH_MATCH";
|
|
771
|
+
CharacterSort2["FAVOURITES"] = "FAVOURITES";
|
|
772
|
+
CharacterSort2["FAVOURITES_DESC"] = "FAVOURITES_DESC";
|
|
773
|
+
return CharacterSort2;
|
|
774
|
+
})(CharacterSort || {});
|
|
775
|
+
var CharacterRole = /* @__PURE__ */ ((CharacterRole2) => {
|
|
776
|
+
CharacterRole2["MAIN"] = "MAIN";
|
|
777
|
+
CharacterRole2["SUPPORTING"] = "SUPPORTING";
|
|
778
|
+
CharacterRole2["BACKGROUND"] = "BACKGROUND";
|
|
779
|
+
return CharacterRole2;
|
|
780
|
+
})(CharacterRole || {});
|
|
781
|
+
var MediaRelationType = /* @__PURE__ */ ((MediaRelationType2) => {
|
|
782
|
+
MediaRelationType2["ADAPTATION"] = "ADAPTATION";
|
|
783
|
+
MediaRelationType2["PREQUEL"] = "PREQUEL";
|
|
784
|
+
MediaRelationType2["SEQUEL"] = "SEQUEL";
|
|
785
|
+
MediaRelationType2["PARENT"] = "PARENT";
|
|
786
|
+
MediaRelationType2["SIDE_STORY"] = "SIDE_STORY";
|
|
787
|
+
MediaRelationType2["CHARACTER"] = "CHARACTER";
|
|
788
|
+
MediaRelationType2["SUMMARY"] = "SUMMARY";
|
|
789
|
+
MediaRelationType2["ALTERNATIVE"] = "ALTERNATIVE";
|
|
790
|
+
MediaRelationType2["SPIN_OFF"] = "SPIN_OFF";
|
|
791
|
+
MediaRelationType2["OTHER"] = "OTHER";
|
|
792
|
+
MediaRelationType2["SOURCE"] = "SOURCE";
|
|
793
|
+
MediaRelationType2["COMPILATION"] = "COMPILATION";
|
|
794
|
+
MediaRelationType2["CONTAINS"] = "CONTAINS";
|
|
795
|
+
return MediaRelationType2;
|
|
796
|
+
})(MediaRelationType || {});
|
|
797
|
+
var RecommendationSort = /* @__PURE__ */ ((RecommendationSort2) => {
|
|
798
|
+
RecommendationSort2["ID"] = "ID";
|
|
799
|
+
RecommendationSort2["ID_DESC"] = "ID_DESC";
|
|
800
|
+
RecommendationSort2["RATING"] = "RATING";
|
|
801
|
+
RecommendationSort2["RATING_DESC"] = "RATING_DESC";
|
|
802
|
+
return RecommendationSort2;
|
|
803
|
+
})(RecommendationSort || {});
|
|
804
|
+
var MediaListStatus = /* @__PURE__ */ ((MediaListStatus2) => {
|
|
805
|
+
MediaListStatus2["CURRENT"] = "CURRENT";
|
|
806
|
+
MediaListStatus2["PLANNING"] = "PLANNING";
|
|
807
|
+
MediaListStatus2["COMPLETED"] = "COMPLETED";
|
|
808
|
+
MediaListStatus2["DROPPED"] = "DROPPED";
|
|
809
|
+
MediaListStatus2["PAUSED"] = "PAUSED";
|
|
810
|
+
MediaListStatus2["REPEATING"] = "REPEATING";
|
|
811
|
+
return MediaListStatus2;
|
|
812
|
+
})(MediaListStatus || {});
|
|
813
|
+
var MediaListSort = /* @__PURE__ */ ((MediaListSort2) => {
|
|
814
|
+
MediaListSort2["MEDIA_ID"] = "MEDIA_ID";
|
|
815
|
+
MediaListSort2["MEDIA_ID_DESC"] = "MEDIA_ID_DESC";
|
|
816
|
+
MediaListSort2["SCORE"] = "SCORE";
|
|
817
|
+
MediaListSort2["SCORE_DESC"] = "SCORE_DESC";
|
|
818
|
+
MediaListSort2["STATUS"] = "STATUS";
|
|
819
|
+
MediaListSort2["STATUS_DESC"] = "STATUS_DESC";
|
|
820
|
+
MediaListSort2["PROGRESS"] = "PROGRESS";
|
|
821
|
+
MediaListSort2["PROGRESS_DESC"] = "PROGRESS_DESC";
|
|
822
|
+
MediaListSort2["PROGRESS_VOLUMES"] = "PROGRESS_VOLUMES";
|
|
823
|
+
MediaListSort2["PROGRESS_VOLUMES_DESC"] = "PROGRESS_VOLUMES_DESC";
|
|
824
|
+
MediaListSort2["REPEAT"] = "REPEAT";
|
|
825
|
+
MediaListSort2["REPEAT_DESC"] = "REPEAT_DESC";
|
|
826
|
+
MediaListSort2["PRIORITY"] = "PRIORITY";
|
|
827
|
+
MediaListSort2["PRIORITY_DESC"] = "PRIORITY_DESC";
|
|
828
|
+
MediaListSort2["STARTED_ON"] = "STARTED_ON";
|
|
829
|
+
MediaListSort2["STARTED_ON_DESC"] = "STARTED_ON_DESC";
|
|
830
|
+
MediaListSort2["FINISHED_ON"] = "FINISHED_ON";
|
|
831
|
+
MediaListSort2["FINISHED_ON_DESC"] = "FINISHED_ON_DESC";
|
|
832
|
+
MediaListSort2["ADDED_TIME"] = "ADDED_TIME";
|
|
833
|
+
MediaListSort2["ADDED_TIME_DESC"] = "ADDED_TIME_DESC";
|
|
834
|
+
MediaListSort2["UPDATED_TIME"] = "UPDATED_TIME";
|
|
835
|
+
MediaListSort2["UPDATED_TIME_DESC"] = "UPDATED_TIME_DESC";
|
|
836
|
+
MediaListSort2["MEDIA_TITLE_ROMAJI"] = "MEDIA_TITLE_ROMAJI";
|
|
837
|
+
MediaListSort2["MEDIA_TITLE_ROMAJI_DESC"] = "MEDIA_TITLE_ROMAJI_DESC";
|
|
838
|
+
MediaListSort2["MEDIA_TITLE_ENGLISH"] = "MEDIA_TITLE_ENGLISH";
|
|
839
|
+
MediaListSort2["MEDIA_TITLE_ENGLISH_DESC"] = "MEDIA_TITLE_ENGLISH_DESC";
|
|
840
|
+
MediaListSort2["MEDIA_TITLE_NATIVE"] = "MEDIA_TITLE_NATIVE";
|
|
841
|
+
MediaListSort2["MEDIA_TITLE_NATIVE_DESC"] = "MEDIA_TITLE_NATIVE_DESC";
|
|
842
|
+
MediaListSort2["MEDIA_POPULARITY"] = "MEDIA_POPULARITY";
|
|
843
|
+
MediaListSort2["MEDIA_POPULARITY_DESC"] = "MEDIA_POPULARITY_DESC";
|
|
844
|
+
return MediaListSort2;
|
|
845
|
+
})(MediaListSort || {});
|
|
846
|
+
|
|
534
847
|
// src/client/index.ts
|
|
535
848
|
var DEFAULT_API_URL = "https://graphql.anilist.co";
|
|
536
849
|
var AniListClient = class {
|
|
@@ -598,16 +911,57 @@ var AniListClient = class {
|
|
|
598
911
|
*/
|
|
599
912
|
async pagedRequest(query, variables, field) {
|
|
600
913
|
const data = await this.request(query, variables);
|
|
601
|
-
|
|
914
|
+
const results = data.Page[field];
|
|
915
|
+
if (!Array.isArray(results)) {
|
|
916
|
+
throw new AniListError(`Unexpected response: missing field "${field}" in Page`, 0, []);
|
|
917
|
+
}
|
|
918
|
+
return { pageInfo: data.Page.pageInfo, results };
|
|
919
|
+
}
|
|
920
|
+
/**
|
|
921
|
+
* @internal
|
|
922
|
+
* Clamp perPage to AniList's maximum of 50.
|
|
923
|
+
*/
|
|
924
|
+
clampPerPage(value) {
|
|
925
|
+
return Math.min(Math.max(value, 1), 50);
|
|
602
926
|
}
|
|
603
927
|
/**
|
|
604
928
|
* Fetch a single media entry by its AniList ID.
|
|
605
929
|
*
|
|
930
|
+
* Optionally include related data (characters, staff, relations, etc.) via the `include` parameter.
|
|
931
|
+
*
|
|
606
932
|
* @param id - The AniList media ID
|
|
933
|
+
* @param include - Optional related data to include
|
|
607
934
|
* @returns The media object
|
|
935
|
+
*
|
|
936
|
+
* @example
|
|
937
|
+
* ```ts
|
|
938
|
+
* // Basic usage — same as before (includes relations by default)
|
|
939
|
+
* const anime = await client.getMedia(1);
|
|
940
|
+
*
|
|
941
|
+
* // Include characters sorted by role, 25 results
|
|
942
|
+
* const anime = await client.getMedia(1, { characters: true });
|
|
943
|
+
*
|
|
944
|
+
* // Include characters with voice actors
|
|
945
|
+
* const anime = await client.getMedia(1, { characters: { voiceActors: true } });
|
|
946
|
+
*
|
|
947
|
+
* // Full control
|
|
948
|
+
* const anime = await client.getMedia(1, {
|
|
949
|
+
* characters: { perPage: 50, sort: true },
|
|
950
|
+
* staff: true,
|
|
951
|
+
* relations: true,
|
|
952
|
+
* streamingEpisodes: true,
|
|
953
|
+
* externalLinks: true,
|
|
954
|
+
* stats: true,
|
|
955
|
+
* recommendations: { perPage: 5 },
|
|
956
|
+
* });
|
|
957
|
+
*
|
|
958
|
+
* // Exclude relations for a lighter response
|
|
959
|
+
* const anime = await client.getMedia(1, { characters: true, relations: false });
|
|
960
|
+
* ```
|
|
608
961
|
*/
|
|
609
|
-
async getMedia(id) {
|
|
610
|
-
const
|
|
962
|
+
async getMedia(id, include) {
|
|
963
|
+
const query = include ? buildMediaByIdQuery(include) : QUERY_MEDIA_BY_ID;
|
|
964
|
+
const data = await this.request(query, { id });
|
|
611
965
|
return data.Media;
|
|
612
966
|
}
|
|
613
967
|
/**
|
|
@@ -627,7 +981,11 @@ var AniListClient = class {
|
|
|
627
981
|
*/
|
|
628
982
|
async searchMedia(options = {}) {
|
|
629
983
|
const { query: search, page = 1, perPage = 20, ...filters } = options;
|
|
630
|
-
return this.pagedRequest(
|
|
984
|
+
return this.pagedRequest(
|
|
985
|
+
QUERY_MEDIA_SEARCH,
|
|
986
|
+
{ search, ...filters, page, perPage: this.clampPerPage(perPage) },
|
|
987
|
+
"media"
|
|
988
|
+
);
|
|
631
989
|
}
|
|
632
990
|
/**
|
|
633
991
|
* Get currently trending anime or manga.
|
|
@@ -636,25 +994,68 @@ var AniListClient = class {
|
|
|
636
994
|
* @param page - Page number (default 1)
|
|
637
995
|
* @param perPage - Results per page (default 20, max 50)
|
|
638
996
|
*/
|
|
639
|
-
async getTrending(type = "ANIME"
|
|
640
|
-
return this.pagedRequest(QUERY_TRENDING, { type, page, perPage }, "media");
|
|
997
|
+
async getTrending(type = "ANIME" /* ANIME */, page = 1, perPage = 20) {
|
|
998
|
+
return this.pagedRequest(QUERY_TRENDING, { type, page, perPage: this.clampPerPage(perPage) }, "media");
|
|
641
999
|
}
|
|
642
1000
|
/**
|
|
643
1001
|
* Fetch a character by AniList ID.
|
|
1002
|
+
*
|
|
1003
|
+
* @param id - The AniList character ID
|
|
1004
|
+
* @param include - Optional include options (e.g. voice actors)
|
|
1005
|
+
* @returns The character object
|
|
1006
|
+
*
|
|
1007
|
+
* @example
|
|
1008
|
+
* ```ts
|
|
1009
|
+
* const spike = await client.getCharacter(1);
|
|
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
|
+
* });
|
|
1018
|
+
* ```
|
|
644
1019
|
*/
|
|
645
|
-
async getCharacter(id) {
|
|
646
|
-
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 });
|
|
647
1023
|
return data.Character;
|
|
648
1024
|
}
|
|
649
1025
|
/**
|
|
650
1026
|
* Search for characters by name.
|
|
1027
|
+
*
|
|
1028
|
+
* @param options - Search / pagination parameters (includes optional `voiceActors`)
|
|
1029
|
+
* @returns Paginated results with matching characters
|
|
1030
|
+
*
|
|
1031
|
+
* @example
|
|
1032
|
+
* ```ts
|
|
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 });
|
|
1037
|
+
* ```
|
|
651
1038
|
*/
|
|
652
1039
|
async searchCharacters(options = {}) {
|
|
653
|
-
const { query: search, page = 1, perPage = 20, ...rest } = options;
|
|
654
|
-
|
|
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
|
+
);
|
|
655
1047
|
}
|
|
656
1048
|
/**
|
|
657
1049
|
* Fetch a staff member by AniList ID.
|
|
1050
|
+
*
|
|
1051
|
+
* @param id - The AniList staff ID
|
|
1052
|
+
* @returns The staff object
|
|
1053
|
+
*
|
|
1054
|
+
* @example
|
|
1055
|
+
* ```ts
|
|
1056
|
+
* const staff = await client.getStaff(95001);
|
|
1057
|
+
* console.log(staff.name.full);
|
|
1058
|
+
* ```
|
|
658
1059
|
*/
|
|
659
1060
|
async getStaff(id) {
|
|
660
1061
|
const data = await this.request(QUERY_STAFF_BY_ID, { id });
|
|
@@ -662,13 +1063,34 @@ var AniListClient = class {
|
|
|
662
1063
|
}
|
|
663
1064
|
/**
|
|
664
1065
|
* Search for staff (voice actors, directors, etc.).
|
|
1066
|
+
*
|
|
1067
|
+
* @param options - Search / pagination parameters
|
|
1068
|
+
* @returns Paginated results with matching staff
|
|
1069
|
+
*
|
|
1070
|
+
* @example
|
|
1071
|
+
* ```ts
|
|
1072
|
+
* const result = await client.searchStaff({ query: "Miyazaki", perPage: 5 });
|
|
1073
|
+
* ```
|
|
665
1074
|
*/
|
|
666
1075
|
async searchStaff(options = {}) {
|
|
667
|
-
const { query: search, page = 1, perPage = 20 } = options;
|
|
668
|
-
return this.pagedRequest(
|
|
1076
|
+
const { query: search, page = 1, perPage = 20, sort } = options;
|
|
1077
|
+
return this.pagedRequest(
|
|
1078
|
+
QUERY_STAFF_SEARCH,
|
|
1079
|
+
{ search, sort, page, perPage: this.clampPerPage(perPage) },
|
|
1080
|
+
"staff"
|
|
1081
|
+
);
|
|
669
1082
|
}
|
|
670
1083
|
/**
|
|
671
1084
|
* Fetch a user by AniList ID.
|
|
1085
|
+
*
|
|
1086
|
+
* @param id - The AniList user ID
|
|
1087
|
+
* @returns The user object
|
|
1088
|
+
*
|
|
1089
|
+
* @example
|
|
1090
|
+
* ```ts
|
|
1091
|
+
* const user = await client.getUser(1);
|
|
1092
|
+
* console.log(user.name);
|
|
1093
|
+
* ```
|
|
672
1094
|
*/
|
|
673
1095
|
async getUser(id) {
|
|
674
1096
|
const data = await this.request(QUERY_USER_BY_ID, { id });
|
|
@@ -676,6 +1098,15 @@ var AniListClient = class {
|
|
|
676
1098
|
}
|
|
677
1099
|
/**
|
|
678
1100
|
* Fetch a user by username.
|
|
1101
|
+
*
|
|
1102
|
+
* @param name - The AniList username
|
|
1103
|
+
* @returns The user object
|
|
1104
|
+
*
|
|
1105
|
+
* @example
|
|
1106
|
+
* ```ts
|
|
1107
|
+
* const user = await client.getUserByName("AniList");
|
|
1108
|
+
* console.log(user.statistics);
|
|
1109
|
+
* ```
|
|
679
1110
|
*/
|
|
680
1111
|
async getUserByName(name) {
|
|
681
1112
|
const data = await this.request(QUERY_USER_BY_NAME, { name });
|
|
@@ -714,7 +1145,7 @@ var AniListClient = class {
|
|
|
714
1145
|
airingAt_lesser: options.airingAtLesser ?? now,
|
|
715
1146
|
sort: options.sort ?? ["TIME_DESC"],
|
|
716
1147
|
page: options.page ?? 1,
|
|
717
|
-
perPage: options.perPage ?? 20
|
|
1148
|
+
perPage: this.clampPerPage(options.perPage ?? 20)
|
|
718
1149
|
};
|
|
719
1150
|
return this.pagedRequest(QUERY_AIRING_SCHEDULE, variables, "airingSchedules");
|
|
720
1151
|
}
|
|
@@ -737,7 +1168,7 @@ var AniListClient = class {
|
|
|
737
1168
|
QUERY_RECENT_CHAPTERS,
|
|
738
1169
|
{
|
|
739
1170
|
page: options.page ?? 1,
|
|
740
|
-
perPage: options.perPage ?? 20
|
|
1171
|
+
perPage: this.clampPerPage(options.perPage ?? 20)
|
|
741
1172
|
},
|
|
742
1173
|
"media"
|
|
743
1174
|
);
|
|
@@ -763,7 +1194,7 @@ var AniListClient = class {
|
|
|
763
1194
|
type: options.type,
|
|
764
1195
|
sort: options.sort ?? ["POPULARITY_DESC"],
|
|
765
1196
|
page: options.page ?? 1,
|
|
766
|
-
perPage: options.perPage ?? 20
|
|
1197
|
+
perPage: this.clampPerPage(options.perPage ?? 20)
|
|
767
1198
|
},
|
|
768
1199
|
"media"
|
|
769
1200
|
);
|
|
@@ -825,7 +1256,7 @@ var AniListClient = class {
|
|
|
825
1256
|
type: options.type ?? "ANIME",
|
|
826
1257
|
sort: options.sort ?? ["POPULARITY_DESC"],
|
|
827
1258
|
page: options.page ?? 1,
|
|
828
|
-
perPage: options.perPage ?? 20
|
|
1259
|
+
perPage: this.clampPerPage(options.perPage ?? 20)
|
|
829
1260
|
},
|
|
830
1261
|
"media"
|
|
831
1262
|
);
|
|
@@ -867,7 +1298,7 @@ var AniListClient = class {
|
|
|
867
1298
|
status: options.status,
|
|
868
1299
|
sort: options.sort,
|
|
869
1300
|
page: options.page ?? 1,
|
|
870
|
-
perPage: options.perPage ?? 20
|
|
1301
|
+
perPage: this.clampPerPage(options.perPage ?? 20)
|
|
871
1302
|
},
|
|
872
1303
|
"mediaList"
|
|
873
1304
|
);
|
|
@@ -900,7 +1331,7 @@ var AniListClient = class {
|
|
|
900
1331
|
{
|
|
901
1332
|
search: options.query,
|
|
902
1333
|
page: options.page ?? 1,
|
|
903
|
-
perPage: options.perPage ?? 20
|
|
1334
|
+
perPage: this.clampPerPage(options.perPage ?? 20)
|
|
904
1335
|
},
|
|
905
1336
|
"studios"
|
|
906
1337
|
);
|
|
@@ -1001,13 +1432,14 @@ var AniListClient = class {
|
|
|
1001
1432
|
/** @internal */
|
|
1002
1433
|
async executeBatch(ids, buildQuery, prefix) {
|
|
1003
1434
|
const chunks = this.chunk(ids, 50);
|
|
1004
|
-
const
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1435
|
+
const chunkResults = await Promise.all(
|
|
1436
|
+
chunks.map(async (chunk) => {
|
|
1437
|
+
const query = buildQuery(chunk);
|
|
1438
|
+
const data = await this.request(query);
|
|
1439
|
+
return chunk.map((_, i) => data[`${prefix}${i}`]);
|
|
1440
|
+
})
|
|
1441
|
+
);
|
|
1442
|
+
return chunkResults.flat();
|
|
1011
1443
|
}
|
|
1012
1444
|
/** @internal */
|
|
1013
1445
|
chunk(arr, size) {
|
|
@@ -1080,8 +1512,25 @@ var RedisCache = class {
|
|
|
1080
1512
|
const count = await this.client.del(this.prefixedKey(key));
|
|
1081
1513
|
return count > 0;
|
|
1082
1514
|
}
|
|
1515
|
+
/**
|
|
1516
|
+
* Collect keys matching a pattern. Uses SCAN when available, falls back to KEYS.
|
|
1517
|
+
*
|
|
1518
|
+
* **Warning:** The `KEYS` fallback is O(N) and blocks the Redis server.
|
|
1519
|
+
* Provide a client with `scanIterator` support for production use.
|
|
1520
|
+
* @internal
|
|
1521
|
+
*/
|
|
1522
|
+
async collectKeys(pattern) {
|
|
1523
|
+
if (this.client.scanIterator) {
|
|
1524
|
+
const keys = [];
|
|
1525
|
+
for await (const key of this.client.scanIterator({ MATCH: pattern, COUNT: 100 })) {
|
|
1526
|
+
keys.push(key);
|
|
1527
|
+
}
|
|
1528
|
+
return keys;
|
|
1529
|
+
}
|
|
1530
|
+
return this.client.keys(pattern);
|
|
1531
|
+
}
|
|
1083
1532
|
async clear() {
|
|
1084
|
-
const keys = await this.
|
|
1533
|
+
const keys = await this.collectKeys(`${this.prefix}*`);
|
|
1085
1534
|
if (keys.length > 0) {
|
|
1086
1535
|
await this.client.del(...keys);
|
|
1087
1536
|
}
|
|
@@ -1099,7 +1548,7 @@ var RedisCache = class {
|
|
|
1099
1548
|
return keys.length;
|
|
1100
1549
|
}
|
|
1101
1550
|
async keys() {
|
|
1102
|
-
const raw = await this.
|
|
1551
|
+
const raw = await this.collectKeys(`${this.prefix}*`);
|
|
1103
1552
|
return raw.map((k) => k.slice(this.prefix.length));
|
|
1104
1553
|
}
|
|
1105
1554
|
/**
|
|
@@ -1109,150 +1558,18 @@ var RedisCache = class {
|
|
|
1109
1558
|
* @returns Number of entries removed.
|
|
1110
1559
|
*/
|
|
1111
1560
|
async invalidate(pattern) {
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1561
|
+
if (typeof pattern === "string") {
|
|
1562
|
+
const keys = await this.collectKeys(`${this.prefix}${pattern}`);
|
|
1563
|
+
if (keys.length === 0) return 0;
|
|
1564
|
+
return this.client.del(...keys);
|
|
1565
|
+
}
|
|
1566
|
+
const allKeys = await this.collectKeys(`${this.prefix}*`);
|
|
1567
|
+
const matching = allKeys.filter((k) => pattern.test(k.slice(this.prefix.length)));
|
|
1568
|
+
if (matching.length === 0) return 0;
|
|
1569
|
+
return this.client.del(...matching);
|
|
1115
1570
|
}
|
|
1116
1571
|
};
|
|
1117
1572
|
|
|
1118
|
-
|
|
1119
|
-
var MediaType = /* @__PURE__ */ ((MediaType2) => {
|
|
1120
|
-
MediaType2["ANIME"] = "ANIME";
|
|
1121
|
-
MediaType2["MANGA"] = "MANGA";
|
|
1122
|
-
return MediaType2;
|
|
1123
|
-
})(MediaType || {});
|
|
1124
|
-
var MediaFormat = /* @__PURE__ */ ((MediaFormat2) => {
|
|
1125
|
-
MediaFormat2["TV"] = "TV";
|
|
1126
|
-
MediaFormat2["TV_SHORT"] = "TV_SHORT";
|
|
1127
|
-
MediaFormat2["MOVIE"] = "MOVIE";
|
|
1128
|
-
MediaFormat2["SPECIAL"] = "SPECIAL";
|
|
1129
|
-
MediaFormat2["OVA"] = "OVA";
|
|
1130
|
-
MediaFormat2["ONA"] = "ONA";
|
|
1131
|
-
MediaFormat2["MUSIC"] = "MUSIC";
|
|
1132
|
-
MediaFormat2["MANGA"] = "MANGA";
|
|
1133
|
-
MediaFormat2["NOVEL"] = "NOVEL";
|
|
1134
|
-
MediaFormat2["ONE_SHOT"] = "ONE_SHOT";
|
|
1135
|
-
return MediaFormat2;
|
|
1136
|
-
})(MediaFormat || {});
|
|
1137
|
-
var MediaStatus = /* @__PURE__ */ ((MediaStatus2) => {
|
|
1138
|
-
MediaStatus2["FINISHED"] = "FINISHED";
|
|
1139
|
-
MediaStatus2["RELEASING"] = "RELEASING";
|
|
1140
|
-
MediaStatus2["NOT_YET_RELEASED"] = "NOT_YET_RELEASED";
|
|
1141
|
-
MediaStatus2["CANCELLED"] = "CANCELLED";
|
|
1142
|
-
MediaStatus2["HIATUS"] = "HIATUS";
|
|
1143
|
-
return MediaStatus2;
|
|
1144
|
-
})(MediaStatus || {});
|
|
1145
|
-
var MediaSeason = /* @__PURE__ */ ((MediaSeason2) => {
|
|
1146
|
-
MediaSeason2["WINTER"] = "WINTER";
|
|
1147
|
-
MediaSeason2["SPRING"] = "SPRING";
|
|
1148
|
-
MediaSeason2["SUMMER"] = "SUMMER";
|
|
1149
|
-
MediaSeason2["FALL"] = "FALL";
|
|
1150
|
-
return MediaSeason2;
|
|
1151
|
-
})(MediaSeason || {});
|
|
1152
|
-
var MediaSort = /* @__PURE__ */ ((MediaSort2) => {
|
|
1153
|
-
MediaSort2["ID"] = "ID";
|
|
1154
|
-
MediaSort2["TITLE_ROMAJI"] = "TITLE_ROMAJI";
|
|
1155
|
-
MediaSort2["TITLE_ENGLISH"] = "TITLE_ENGLISH";
|
|
1156
|
-
MediaSort2["TITLE_NATIVE"] = "TITLE_NATIVE";
|
|
1157
|
-
MediaSort2["TYPE"] = "TYPE";
|
|
1158
|
-
MediaSort2["FORMAT"] = "FORMAT";
|
|
1159
|
-
MediaSort2["START_DATE"] = "START_DATE";
|
|
1160
|
-
MediaSort2["END_DATE"] = "END_DATE";
|
|
1161
|
-
MediaSort2["SCORE"] = "SCORE";
|
|
1162
|
-
MediaSort2["POPULARITY"] = "POPULARITY";
|
|
1163
|
-
MediaSort2["TRENDING"] = "TRENDING";
|
|
1164
|
-
MediaSort2["EPISODES"] = "EPISODES";
|
|
1165
|
-
MediaSort2["DURATION"] = "DURATION";
|
|
1166
|
-
MediaSort2["STATUS"] = "STATUS";
|
|
1167
|
-
MediaSort2["FAVOURITES"] = "FAVOURITES";
|
|
1168
|
-
MediaSort2["UPDATED_AT"] = "UPDATED_AT";
|
|
1169
|
-
MediaSort2["SEARCH_MATCH"] = "SEARCH_MATCH";
|
|
1170
|
-
return MediaSort2;
|
|
1171
|
-
})(MediaSort || {});
|
|
1172
|
-
var AiringSort = /* @__PURE__ */ ((AiringSort2) => {
|
|
1173
|
-
AiringSort2["ID"] = "ID";
|
|
1174
|
-
AiringSort2["ID_DESC"] = "ID_DESC";
|
|
1175
|
-
AiringSort2["MEDIA_ID"] = "MEDIA_ID";
|
|
1176
|
-
AiringSort2["MEDIA_ID_DESC"] = "MEDIA_ID_DESC";
|
|
1177
|
-
AiringSort2["TIME"] = "TIME";
|
|
1178
|
-
AiringSort2["TIME_DESC"] = "TIME_DESC";
|
|
1179
|
-
AiringSort2["EPISODE"] = "EPISODE";
|
|
1180
|
-
AiringSort2["EPISODE_DESC"] = "EPISODE_DESC";
|
|
1181
|
-
return AiringSort2;
|
|
1182
|
-
})(AiringSort || {});
|
|
1183
|
-
var CharacterSort = /* @__PURE__ */ ((CharacterSort2) => {
|
|
1184
|
-
CharacterSort2["ID"] = "ID";
|
|
1185
|
-
CharacterSort2["ROLE"] = "ROLE";
|
|
1186
|
-
CharacterSort2["SEARCH_MATCH"] = "SEARCH_MATCH";
|
|
1187
|
-
CharacterSort2["FAVOURITES"] = "FAVOURITES";
|
|
1188
|
-
return CharacterSort2;
|
|
1189
|
-
})(CharacterSort || {});
|
|
1190
|
-
var MediaRelationType = /* @__PURE__ */ ((MediaRelationType2) => {
|
|
1191
|
-
MediaRelationType2["ADAPTATION"] = "ADAPTATION";
|
|
1192
|
-
MediaRelationType2["PREQUEL"] = "PREQUEL";
|
|
1193
|
-
MediaRelationType2["SEQUEL"] = "SEQUEL";
|
|
1194
|
-
MediaRelationType2["PARENT"] = "PARENT";
|
|
1195
|
-
MediaRelationType2["SIDE_STORY"] = "SIDE_STORY";
|
|
1196
|
-
MediaRelationType2["CHARACTER"] = "CHARACTER";
|
|
1197
|
-
MediaRelationType2["SUMMARY"] = "SUMMARY";
|
|
1198
|
-
MediaRelationType2["ALTERNATIVE"] = "ALTERNATIVE";
|
|
1199
|
-
MediaRelationType2["SPIN_OFF"] = "SPIN_OFF";
|
|
1200
|
-
MediaRelationType2["OTHER"] = "OTHER";
|
|
1201
|
-
MediaRelationType2["SOURCE"] = "SOURCE";
|
|
1202
|
-
MediaRelationType2["COMPILATION"] = "COMPILATION";
|
|
1203
|
-
MediaRelationType2["CONTAINS"] = "CONTAINS";
|
|
1204
|
-
return MediaRelationType2;
|
|
1205
|
-
})(MediaRelationType || {});
|
|
1206
|
-
var RecommendationSort = /* @__PURE__ */ ((RecommendationSort2) => {
|
|
1207
|
-
RecommendationSort2["ID"] = "ID";
|
|
1208
|
-
RecommendationSort2["ID_DESC"] = "ID_DESC";
|
|
1209
|
-
RecommendationSort2["RATING"] = "RATING";
|
|
1210
|
-
RecommendationSort2["RATING_DESC"] = "RATING_DESC";
|
|
1211
|
-
return RecommendationSort2;
|
|
1212
|
-
})(RecommendationSort || {});
|
|
1213
|
-
var MediaListStatus = /* @__PURE__ */ ((MediaListStatus2) => {
|
|
1214
|
-
MediaListStatus2["CURRENT"] = "CURRENT";
|
|
1215
|
-
MediaListStatus2["PLANNING"] = "PLANNING";
|
|
1216
|
-
MediaListStatus2["COMPLETED"] = "COMPLETED";
|
|
1217
|
-
MediaListStatus2["DROPPED"] = "DROPPED";
|
|
1218
|
-
MediaListStatus2["PAUSED"] = "PAUSED";
|
|
1219
|
-
MediaListStatus2["REPEATING"] = "REPEATING";
|
|
1220
|
-
return MediaListStatus2;
|
|
1221
|
-
})(MediaListStatus || {});
|
|
1222
|
-
var MediaListSort = /* @__PURE__ */ ((MediaListSort2) => {
|
|
1223
|
-
MediaListSort2["MEDIA_ID"] = "MEDIA_ID";
|
|
1224
|
-
MediaListSort2["MEDIA_ID_DESC"] = "MEDIA_ID_DESC";
|
|
1225
|
-
MediaListSort2["SCORE"] = "SCORE";
|
|
1226
|
-
MediaListSort2["SCORE_DESC"] = "SCORE_DESC";
|
|
1227
|
-
MediaListSort2["STATUS"] = "STATUS";
|
|
1228
|
-
MediaListSort2["STATUS_DESC"] = "STATUS_DESC";
|
|
1229
|
-
MediaListSort2["PROGRESS"] = "PROGRESS";
|
|
1230
|
-
MediaListSort2["PROGRESS_DESC"] = "PROGRESS_DESC";
|
|
1231
|
-
MediaListSort2["PROGRESS_VOLUMES"] = "PROGRESS_VOLUMES";
|
|
1232
|
-
MediaListSort2["PROGRESS_VOLUMES_DESC"] = "PROGRESS_VOLUMES_DESC";
|
|
1233
|
-
MediaListSort2["REPEAT"] = "REPEAT";
|
|
1234
|
-
MediaListSort2["REPEAT_DESC"] = "REPEAT_DESC";
|
|
1235
|
-
MediaListSort2["PRIORITY"] = "PRIORITY";
|
|
1236
|
-
MediaListSort2["PRIORITY_DESC"] = "PRIORITY_DESC";
|
|
1237
|
-
MediaListSort2["STARTED_ON"] = "STARTED_ON";
|
|
1238
|
-
MediaListSort2["STARTED_ON_DESC"] = "STARTED_ON_DESC";
|
|
1239
|
-
MediaListSort2["FINISHED_ON"] = "FINISHED_ON";
|
|
1240
|
-
MediaListSort2["FINISHED_ON_DESC"] = "FINISHED_ON_DESC";
|
|
1241
|
-
MediaListSort2["ADDED_TIME"] = "ADDED_TIME";
|
|
1242
|
-
MediaListSort2["ADDED_TIME_DESC"] = "ADDED_TIME_DESC";
|
|
1243
|
-
MediaListSort2["UPDATED_TIME"] = "UPDATED_TIME";
|
|
1244
|
-
MediaListSort2["UPDATED_TIME_DESC"] = "UPDATED_TIME_DESC";
|
|
1245
|
-
MediaListSort2["MEDIA_TITLE_ROMAJI"] = "MEDIA_TITLE_ROMAJI";
|
|
1246
|
-
MediaListSort2["MEDIA_TITLE_ROMAJI_DESC"] = "MEDIA_TITLE_ROMAJI_DESC";
|
|
1247
|
-
MediaListSort2["MEDIA_TITLE_ENGLISH"] = "MEDIA_TITLE_ENGLISH";
|
|
1248
|
-
MediaListSort2["MEDIA_TITLE_ENGLISH_DESC"] = "MEDIA_TITLE_ENGLISH_DESC";
|
|
1249
|
-
MediaListSort2["MEDIA_TITLE_NATIVE"] = "MEDIA_TITLE_NATIVE";
|
|
1250
|
-
MediaListSort2["MEDIA_TITLE_NATIVE_DESC"] = "MEDIA_TITLE_NATIVE_DESC";
|
|
1251
|
-
MediaListSort2["MEDIA_POPULARITY"] = "MEDIA_POPULARITY";
|
|
1252
|
-
MediaListSort2["MEDIA_POPULARITY_DESC"] = "MEDIA_POPULARITY_DESC";
|
|
1253
|
-
return MediaListSort2;
|
|
1254
|
-
})(MediaListSort || {});
|
|
1255
|
-
|
|
1256
|
-
export { AiringSort, AniListClient, AniListError, CharacterSort, MediaFormat, MediaListSort, MediaListStatus, MediaRelationType, MediaSeason, MediaSort, MediaStatus, MediaType, MemoryCache, RateLimiter, RecommendationSort, RedisCache };
|
|
1573
|
+
export { AiringSort, AniListClient, AniListError, CharacterRole, CharacterSort, MediaFormat, MediaListSort, MediaListStatus, MediaRelationType, MediaSeason, MediaSort, MediaStatus, MediaType, MemoryCache, RateLimiter, RecommendationSort, RedisCache };
|
|
1257
1574
|
//# sourceMappingURL=index.mjs.map
|
|
1258
1575
|
//# sourceMappingURL=index.mjs.map
|