@irfanshadikrishad/anilist 1.2.1-forbidden.1 → 1.2.3-forbidden.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 CHANGED
@@ -237,9 +237,4 @@ Since you are creating your own API client for login no else else can get your c
237
237
 
238
238
  Want to contribute to the project? Check out complete guideline [here](CONTRIBUTING.md).
239
239
 
240
- #### Donation
241
-
242
- <img src='/assets/binance.jpg' alt='irfanshadikrishad_binance_pay' width='200px'><br>
243
- Support the project if you find it useful to you.
244
-
245
240
  #### **_Thanks for visiting 💙_**
@@ -17,7 +17,7 @@ import { fetcher } from "./fetcher.js";
17
17
  import { AniList, MyAnimeList } from "./lists.js";
18
18
  import { deleteActivityMutation, likeActivityMutation, saveTextActivityMutation, } from "./mutations.js";
19
19
  import { activityAllQuery, activityAnimeListQuery, activityMangaListQuery, activityMediaList, activityMessageQuery, activityTextQuery, currentUserAnimeList, currentUserMangaList, currentUserQuery, deleteMangaEntryMutation, deleteMediaEntryMutation, followingActivitiesQuery, globalActivitiesQuery, specificUserActivitiesQuery, userActivityQuery, userQuery, } from "./queries.js";
20
- import { aniListEndpoint, getTitle, redirectUri, timestampToTimeAgo, } from "./workers.js";
20
+ import { activityBy, aniListEndpoint, getTitle, redirectUri, timestampToTimeAgo, } from "./workers.js";
21
21
  const home_dir = os.homedir();
22
22
  const save_path = path.join(home_dir, ".anilist_token");
23
23
  class Auth {
@@ -130,30 +130,30 @@ class Auth {
130
130
  perPage: 10,
131
131
  });
132
132
  const activities = (_b = (_a = activiResponse === null || activiResponse === void 0 ? void 0 : activiResponse.data) === null || _a === void 0 ? void 0 : _a.Page) === null || _b === void 0 ? void 0 : _b.activities;
133
- console.log(`
134
- ID: ${user === null || user === void 0 ? void 0 : user.id}
135
- Name: ${user === null || user === void 0 ? void 0 : user.name}
136
- siteUrl: ${user === null || user === void 0 ? void 0 : user.siteUrl}
137
- profileColor: ${(_c = user === null || user === void 0 ? void 0 : user.options) === null || _c === void 0 ? void 0 : _c.profileColor}
138
- timeZone: ${(_d = user === null || user === void 0 ? void 0 : user.options) === null || _d === void 0 ? void 0 : _d.timezone}
139
- activityMergeTime: ${(_e = user === null || user === void 0 ? void 0 : user.options) === null || _e === void 0 ? void 0 : _e.activityMergeTime}
140
- donatorTier: ${user === null || user === void 0 ? void 0 : user.donatorTier}
141
- donatorBadge: ${user === null || user === void 0 ? void 0 : user.donatorBadge}
142
- unreadNotificationCount:${user === null || user === void 0 ? void 0 : user.unreadNotificationCount}
143
- Account Created: ${new Date((user === null || user === void 0 ? void 0 : user.createdAt) * 1000).toUTCString()}
144
- Account Updated: ${new Date((user === null || user === void 0 ? void 0 : user.updatedAt) * 1000).toUTCString()}
145
-
146
- Statistics (Anime):
147
- Count: ${(_g = (_f = user === null || user === void 0 ? void 0 : user.statistics) === null || _f === void 0 ? void 0 : _f.anime) === null || _g === void 0 ? void 0 : _g.count}
148
- Mean Score: ${(_j = (_h = user === null || user === void 0 ? void 0 : user.statistics) === null || _h === void 0 ? void 0 : _h.anime) === null || _j === void 0 ? void 0 : _j.meanScore}
149
- Minutes Watched: ${(_l = (_k = user === null || user === void 0 ? void 0 : user.statistics) === null || _k === void 0 ? void 0 : _k.anime) === null || _l === void 0 ? void 0 : _l.minutesWatched}
150
- Episodes Watched: ${(_o = (_m = user === null || user === void 0 ? void 0 : user.statistics) === null || _m === void 0 ? void 0 : _m.anime) === null || _o === void 0 ? void 0 : _o.episodesWatched}
151
-
152
- Statistics (Manga):
153
- Count: ${(_q = (_p = user === null || user === void 0 ? void 0 : user.statistics) === null || _p === void 0 ? void 0 : _p.manga) === null || _q === void 0 ? void 0 : _q.count}
154
- Mean Score: ${(_s = (_r = user === null || user === void 0 ? void 0 : user.statistics) === null || _r === void 0 ? void 0 : _r.manga) === null || _s === void 0 ? void 0 : _s.meanScore}
155
- Chapters Read: ${(_u = (_t = user === null || user === void 0 ? void 0 : user.statistics) === null || _t === void 0 ? void 0 : _t.manga) === null || _u === void 0 ? void 0 : _u.chaptersRead}
156
- Volumes Read: ${(_w = (_v = user === null || user === void 0 ? void 0 : user.statistics) === null || _v === void 0 ? void 0 : _v.manga) === null || _w === void 0 ? void 0 : _w.volumesRead}
133
+ console.log(`
134
+ ID: ${user === null || user === void 0 ? void 0 : user.id}
135
+ Name: ${user === null || user === void 0 ? void 0 : user.name}
136
+ siteUrl: ${user === null || user === void 0 ? void 0 : user.siteUrl}
137
+ profileColor: ${(_c = user === null || user === void 0 ? void 0 : user.options) === null || _c === void 0 ? void 0 : _c.profileColor}
138
+ timeZone: ${(_d = user === null || user === void 0 ? void 0 : user.options) === null || _d === void 0 ? void 0 : _d.timezone}
139
+ activityMergeTime: ${(_e = user === null || user === void 0 ? void 0 : user.options) === null || _e === void 0 ? void 0 : _e.activityMergeTime}
140
+ donatorTier: ${user === null || user === void 0 ? void 0 : user.donatorTier}
141
+ donatorBadge: ${user === null || user === void 0 ? void 0 : user.donatorBadge}
142
+ unreadNotificationCount:${user === null || user === void 0 ? void 0 : user.unreadNotificationCount}
143
+ Account Created: ${new Date((user === null || user === void 0 ? void 0 : user.createdAt) * 1000).toUTCString()}
144
+ Account Updated: ${new Date((user === null || user === void 0 ? void 0 : user.updatedAt) * 1000).toUTCString()}
145
+
146
+ Statistics (Anime):
147
+ Count: ${(_g = (_f = user === null || user === void 0 ? void 0 : user.statistics) === null || _f === void 0 ? void 0 : _f.anime) === null || _g === void 0 ? void 0 : _g.count}
148
+ Mean Score: ${(_j = (_h = user === null || user === void 0 ? void 0 : user.statistics) === null || _h === void 0 ? void 0 : _h.anime) === null || _j === void 0 ? void 0 : _j.meanScore}
149
+ Minutes Watched: ${(_l = (_k = user === null || user === void 0 ? void 0 : user.statistics) === null || _k === void 0 ? void 0 : _k.anime) === null || _l === void 0 ? void 0 : _l.minutesWatched}
150
+ Episodes Watched: ${(_o = (_m = user === null || user === void 0 ? void 0 : user.statistics) === null || _m === void 0 ? void 0 : _m.anime) === null || _o === void 0 ? void 0 : _o.episodesWatched}
151
+
152
+ Statistics (Manga):
153
+ Count: ${(_q = (_p = user === null || user === void 0 ? void 0 : user.statistics) === null || _p === void 0 ? void 0 : _p.manga) === null || _q === void 0 ? void 0 : _q.count}
154
+ Mean Score: ${(_s = (_r = user === null || user === void 0 ? void 0 : user.statistics) === null || _r === void 0 ? void 0 : _r.manga) === null || _s === void 0 ? void 0 : _s.meanScore}
155
+ Chapters Read: ${(_u = (_t = user === null || user === void 0 ? void 0 : user.statistics) === null || _t === void 0 ? void 0 : _t.manga) === null || _u === void 0 ? void 0 : _u.chaptersRead}
156
+ Volumes Read: ${(_w = (_v = user === null || user === void 0 ? void 0 : user.statistics) === null || _v === void 0 ? void 0 : _v.manga) === null || _w === void 0 ? void 0 : _w.volumesRead}
157
157
  `);
158
158
  console.log(`\nRecent Activities:`);
159
159
  if (activities.length > 0) {
@@ -583,7 +583,7 @@ Statistics (Manga):
583
583
  }
584
584
  static LikeFollowing() {
585
585
  return __awaiter(this, void 0, void 0, function* () {
586
- var _a, _b, _c, _d, _e;
586
+ var _a, _b, _c, _d;
587
587
  try {
588
588
  let page = 1;
589
589
  let hasMoreActivities = true;
@@ -603,14 +603,14 @@ Statistics (Manga):
603
603
  const like = yield fetcher(likeActivityMutation, {
604
604
  activityId: activ.id,
605
605
  });
606
- console.info(`[${activ.id}]\t${(_e = activ.user) === null || _e === void 0 ? void 0 : _e.name} ${(like === null || like === void 0 ? void 0 : like.data) ? "✅" : "❌"}`);
606
+ console.info(`${activityBy(activ)} ${(like === null || like === void 0 ? void 0 : like.data) ? "✅" : "❌"}`);
607
607
  }
608
608
  catch (error) {
609
609
  console.error(`Activity possibly deleted. ${error.message}`);
610
610
  }
611
611
  }
612
612
  else {
613
- console.log(`[${activ === null || activ === void 0 ? void 0 : activ.id}]\t${activ.user.name} already-liked`);
613
+ console.log(`${activityBy(activ)} 🔵`);
614
614
  }
615
615
  // avoiding rate-limit
616
616
  yield new Promise((resolve) => {
@@ -640,7 +640,7 @@ Statistics (Manga):
640
640
  }
641
641
  static Like(type) {
642
642
  return __awaiter(this, void 0, void 0, function* () {
643
- var _a, _b, _c, _d, _e;
643
+ var _a, _b, _c, _d;
644
644
  try {
645
645
  let page = 1;
646
646
  let hasMoreActivities = true;
@@ -663,14 +663,14 @@ Statistics (Manga):
663
663
  activityId: activ.id,
664
664
  });
665
665
  // const ToggleLike = like?.data?.ToggleLike
666
- console.info(`[${activ.id}]\t${(_e = activ.user) === null || _e === void 0 ? void 0 : _e.name} ${(like === null || like === void 0 ? void 0 : like.data) ? "✅" : "❌"}`);
666
+ console.info(`${activityBy(activ)} ${(like === null || like === void 0 ? void 0 : like.data) ? "✅" : "❌"}`);
667
667
  }
668
668
  catch (error) {
669
669
  console.error(`Activity possibly deleted. ${error.message}`);
670
670
  }
671
671
  }
672
672
  else {
673
- console.log(`[${activ === null || activ === void 0 ? void 0 : activ.id}]\t${activ.user.name} already-liked`);
673
+ console.log(`${activityBy(activ)} 🔵`);
674
674
  }
675
675
  // avoiding rate-limit
676
676
  yield new Promise((resolve) => {
@@ -694,7 +694,7 @@ Statistics (Manga):
694
694
  }
695
695
  static LikeSpecificUser() {
696
696
  return __awaiter(this, void 0, void 0, function* () {
697
- var _a, _b, _c, _d, _e, _f;
697
+ var _a, _b, _c, _d;
698
698
  try {
699
699
  const { username } = yield inquirer.prompt([
700
700
  {
@@ -727,14 +727,14 @@ Statistics (Manga):
727
727
  const like = yield fetcher(likeActivityMutation, {
728
728
  activityId: activ.id,
729
729
  });
730
- console.info(`[${activ.id}]\t${(_e = activ.user) === null || _e === void 0 ? void 0 : _e.name} ${(like === null || like === void 0 ? void 0 : like.data) ? "✅" : "❌"}`);
730
+ console.info(`${activityBy(activ)} ${(like === null || like === void 0 ? void 0 : like.data) ? "✅" : "❌"}`);
731
731
  }
732
732
  catch (error) {
733
733
  console.error(`Activity possibly deleted. ${error.message}`);
734
734
  }
735
735
  }
736
736
  else {
737
- console.log(`[${activ === null || activ === void 0 ? void 0 : activ.id}]\t${(_f = activ.user) === null || _f === void 0 ? void 0 : _f.name} already-liked`);
737
+ console.log(`${activityBy(activ)} 🔵`);
738
738
  }
739
739
  // Avoiding rate limit
740
740
  yield new Promise((resolve) => {
@@ -21,5 +21,5 @@ declare const malIdToAnilistAnimeId = "query ($malId: Int) {\n Media(idMal: $ma
21
21
  declare const malIdToAnilistMangaId = "query ($malId: Int) {\n Media(idMal: $malId, type: MANGA) { id title { romaji english } } }\n";
22
22
  declare const followingActivitiesQuery = "\nquery ($page: Int, $perPage: Int) {\n Page(page: $page, perPage: $perPage) {\n activities(isFollowing: true, sort: ID_DESC) {\n ... on TextActivity { id type isLiked createdAt user { id name } }\n ... on ListActivity { id type isLiked status progress media { title { userPreferred } } createdAt user { id name } }\n ... on MessageActivity { id type isLiked message createdAt recipient { id name } }\n }\n }\n}\n";
23
23
  declare const globalActivitiesQuery = "\nquery ($page: Int, $perPage: Int) {\n Page(page: $page, perPage: $perPage) {\n activities(sort: ID_DESC) {\n ... on TextActivity { id type isLiked createdAt user { id name } }\n ... on ListActivity { id type isLiked status progress media { title { userPreferred } } createdAt user { id name } }\n ... on MessageActivity { id type isLiked message createdAt recipient { id name } }\n }\n }\n}\n";
24
- declare const specificUserActivitiesQuery = "\nquery ($page: Int, $perPage: Int, $userId: Int) {\n Page(page: $page, perPage: $perPage) {\n activities(userId: $userId, sort: ID_DESC) {\n ... on TextActivity { id type isLiked createdAt user { id name } }\n ... on ListActivity { id type isLiked status progress media { title { userPreferred } } createdAt user { id name } }\n ... on MessageActivity { id type isLiked message createdAt recipient { id name } }\n }\n }\n}\n";
24
+ declare const specificUserActivitiesQuery = "\nquery ($page: Int, $perPage: Int, $userId: Int) {\n Page(page: $page, perPage: $perPage) {\n activities(userId: $userId, sort: ID_DESC) {\n ... on TextActivity { id type isLiked createdAt user { id name } }\n ... on ListActivity { id type isLiked status progress media { title { userPreferred } } createdAt user { id name } }\n ... on MessageActivity { messenger { name } id type isLiked message createdAt recipient { id name } }\n }\n }\n}\n";
25
25
  export { activityAllQuery, activityAnimeListQuery, activityMangaListQuery, activityMediaList, activityMessageQuery, activityTextQuery, animeDetailsQuery, animeSearchQuery, currentUserAnimeList, currentUserMangaList, currentUserQuery, deleteMangaEntryMutation, deleteMediaEntryMutation, followingActivitiesQuery, globalActivitiesQuery, malIdToAnilistAnimeId, malIdToAnilistMangaId, mangaSearchQuery, popularQuery, specificUserActivitiesQuery, trendingQuery, upcomingAnimesQuery, userActivityQuery, userQuery, };
@@ -153,7 +153,7 @@ query ($page: Int, $perPage: Int, $userId: Int) {
153
153
  activities(userId: $userId, sort: ID_DESC) {
154
154
  ... on TextActivity { id type isLiked createdAt user { id name } }
155
155
  ... on ListActivity { id type isLiked status progress media { title { userPreferred } } createdAt user { id name } }
156
- ... on MessageActivity { id type isLiked message createdAt recipient { id name } }
156
+ ... on MessageActivity { messenger { name } id type isLiked message createdAt recipient { id name } }
157
157
  }
158
158
  }
159
159
  }
@@ -212,4 +212,28 @@ interface MediaListEntry {
212
212
  hiddenFromStatusLists?: boolean;
213
213
  private?: boolean;
214
214
  }
215
- export { AniListMediaStatus, AnimeDetails, AnimeList, DateMonthYear, DeleteMangaResponse, List, MALAnimeStatus, MALAnimeXML, MALMangaStatus, MalIdToAnilistIdResponse, MediaEntry, MediaList, MediaListEntry, MediaTitle, MediaWithProgress, Myself, saveAnimeWithProgressResponse, };
215
+ interface TheActivity {
216
+ type: string;
217
+ id: number;
218
+ message?: string;
219
+ createdAt: number;
220
+ recipient?: {
221
+ id: number;
222
+ name: string;
223
+ };
224
+ isLiked?: boolean;
225
+ user?: {
226
+ id?: number;
227
+ name?: string;
228
+ };
229
+ messenger?: {
230
+ name: string;
231
+ };
232
+ media?: {
233
+ title?: {
234
+ userPreferred: string;
235
+ };
236
+ };
237
+ progress: string | null;
238
+ }
239
+ export { AniListMediaStatus, AnimeDetails, AnimeList, DateMonthYear, DeleteMangaResponse, List, MALAnimeStatus, MALAnimeXML, MALMangaStatus, MalIdToAnilistIdResponse, MediaEntry, MediaList, MediaListEntry, MediaTitle, MediaWithProgress, Myself, TheActivity, saveAnimeWithProgressResponse, };
@@ -1,4 +1,4 @@
1
- import { MALAnimeStatus, MALMangaStatus, MediaWithProgress } from "./types.js";
1
+ import { MALAnimeStatus, MALMangaStatus, MediaWithProgress, TheActivity } from "./types.js";
2
2
  declare const aniListEndpoint = "https://graphql.anilist.co";
3
3
  declare const redirectUri = "https://anilist.co/api/v2/oauth/pin";
4
4
  declare function getTitle(title: {
@@ -36,4 +36,5 @@ declare function createAnimeListXML(mediaWithProgress: MediaWithProgress[]): Pro
36
36
  declare function createMangaListXML(mediaWithProgress: MediaWithProgress[]): Promise<string>;
37
37
  declare function getCurrentPackageVersion(): string | null;
38
38
  declare function timestampToTimeAgo(timestamp: number): string;
39
- export { aniListEndpoint, createAnimeListXML, createAnimeXML, createMangaListXML, createMangaXML, formatDateObject, getCurrentPackageVersion, getDownloadFolderPath, getFormattedDate, getNextSeasonAndYear, getTitle, redirectUri, removeHtmlAndMarkdown, saveJSONasCSV, saveJSONasJSON, selectFile, timestampToTimeAgo, };
39
+ declare function activityBy(activity: TheActivity): string;
40
+ export { activityBy, aniListEndpoint, createAnimeListXML, createAnimeXML, createMangaListXML, createMangaXML, formatDateObject, getCurrentPackageVersion, getDownloadFolderPath, getFormattedDate, getNextSeasonAndYear, getTitle, redirectUri, removeHtmlAndMarkdown, saveJSONasCSV, saveJSONasJSON, selectFile, timestampToTimeAgo, };
@@ -17,7 +17,7 @@ import { homedir } from "os";
17
17
  import { join } from "path";
18
18
  import process from "process";
19
19
  import { Auth } from "./auth.js";
20
- import { MALAnimeStatus, MALMangaStatus } from "./types.js";
20
+ import { MALAnimeStatus, MALMangaStatus, } from "./types.js";
21
21
  const aniListEndpoint = `https://graphql.anilist.co`;
22
22
  const redirectUri = "https://anilist.co/api/v2/oauth/pin";
23
23
  function getTitle(title) {
@@ -314,4 +314,9 @@ function timestampToTimeAgo(timestamp) {
314
314
  return `${years} year${years === 1 ? "" : "s"} ago`;
315
315
  }
316
316
  }
317
- export { aniListEndpoint, createAnimeListXML, createAnimeXML, createMangaListXML, createMangaXML, formatDateObject, getCurrentPackageVersion, getDownloadFolderPath, getFormattedDate, getNextSeasonAndYear, getTitle, redirectUri, removeHtmlAndMarkdown, saveJSONasCSV, saveJSONasJSON, selectFile, timestampToTimeAgo, };
317
+ function activityBy(activity) {
318
+ var _a, _b;
319
+ const name = ((_a = activity === null || activity === void 0 ? void 0 : activity.messenger) === null || _a === void 0 ? void 0 : _a.name) || ((_b = activity === null || activity === void 0 ? void 0 : activity.user) === null || _b === void 0 ? void 0 : _b.name);
320
+ return name ? `[${activity.id}]\t${name}` : `???`;
321
+ }
322
+ export { activityBy, aniListEndpoint, createAnimeListXML, createAnimeXML, createMangaListXML, createMangaXML, formatDateObject, getCurrentPackageVersion, getDownloadFolderPath, getFormattedDate, getNextSeasonAndYear, getTitle, redirectUri, removeHtmlAndMarkdown, saveJSONasCSV, saveJSONasJSON, selectFile, timestampToTimeAgo, };
package/package.json CHANGED
@@ -1,80 +1,80 @@
1
- {
2
- "name": "@irfanshadikrishad/anilist",
3
- "description": "Minimalist unofficial AniList CLI for Anime and Manga Enthusiasts",
4
- "author": "Irfan Shadik Rishad",
5
- "version": "1.2.1-forbidden.1",
6
- "main": "./bin/index.js",
7
- "type": "module",
8
- "types": "./bin/index.d.ts",
9
- "bin": {
10
- "anilist": "./bin/index.js"
11
- },
12
- "publishConfig": {
13
- "access": "public"
14
- },
15
- "scripts": {
16
- "build": "rm -rf ./bin && tsc",
17
- "buildw": "rm -rf ./bin && tsc -w",
18
- "format": "prettier . --write",
19
- "format:check": "prettier . --check",
20
- "lint": "eslint ./dist",
21
- "lint:fix": "eslint ./dist --fix",
22
- "all": "npm run lint && npm run lint:fix && npm run format && npm test",
23
- "test": "jest ./tests"
24
- },
25
- "keywords": [
26
- "anilist",
27
- "CLI",
28
- "anime",
29
- "manga",
30
- "anime list",
31
- "manga list",
32
- "anime tracker",
33
- "manga tracker",
34
- "anilist API",
35
- "anime progress",
36
- "manga progress",
37
- "media list",
38
- "export anime",
39
- "import anime",
40
- "export manga",
41
- "import manga",
42
- "status tracker",
43
- "watchlist",
44
- "reading list",
45
- "graphql"
46
- ],
47
- "repository": {
48
- "type": "git",
49
- "url": "https://github.com/irfanshadikrishad/anilist"
50
- },
51
- "homepage": "https://github.com/irfanshadikrishad/anilist",
52
- "bugs": {
53
- "url": "https://github.com/irfanshadikrishad/anilist/issues"
54
- },
55
- "license": "MPL-2.0",
56
- "devDependencies": {
57
- "@eslint/js": "^9.17.0",
58
- "@types/jest": "^29.5.14",
59
- "@types/json2csv": "^5.0.7",
60
- "@types/node": "^22.10.5",
61
- "eslint": "^9.17.0",
62
- "globals": "^15.14.0",
63
- "jest": "^29.7.0",
64
- "prettier": "^3.4.2",
65
- "prettier-plugin-organize-imports": "^4.1.0",
66
- "ts-jest": "^29.2.5",
67
- "ts-node": "^10.9.2",
68
- "typescript": "^5.7.2",
69
- "@babel/preset-env": "^7.26.0",
70
- "@typescript-eslint/eslint-plugin": "^8.19.0"
71
- },
72
- "dependencies": {
73
- "commander": "^13.0.0",
74
- "fast-xml-parser": "^4.5.1",
75
- "inquirer": "^12.3.0",
76
- "json2csv": "^6.0.0-alpha.2",
77
- "node-fetch": "^3.3.2",
78
- "open": "^10.1.0"
79
- }
80
- }
1
+ {
2
+ "name": "@irfanshadikrishad/anilist",
3
+ "description": "Minimalist unofficial AniList CLI for Anime and Manga Enthusiasts",
4
+ "author": "Irfan Shadik Rishad",
5
+ "version": "1.2.3-forbidden.1",
6
+ "main": "./bin/index.js",
7
+ "type": "module",
8
+ "types": "./bin/index.d.ts",
9
+ "bin": {
10
+ "anilist": "./bin/index.js"
11
+ },
12
+ "publishConfig": {
13
+ "access": "public"
14
+ },
15
+ "scripts": {
16
+ "build": "rm -rf ./bin && tsc",
17
+ "buildw": "rm -rf ./bin && tsc -w",
18
+ "format": "prettier . --write",
19
+ "format:check": "prettier . --check",
20
+ "lint": "eslint ./dist",
21
+ "lint:fix": "eslint ./dist --fix",
22
+ "all": "npm run lint && npm run lint:fix && npm run format && npm test",
23
+ "test": "jest ./tests"
24
+ },
25
+ "keywords": [
26
+ "anilist",
27
+ "CLI",
28
+ "anime",
29
+ "manga",
30
+ "anime list",
31
+ "manga list",
32
+ "anime tracker",
33
+ "manga tracker",
34
+ "anilist API",
35
+ "anime progress",
36
+ "manga progress",
37
+ "media list",
38
+ "export anime",
39
+ "import anime",
40
+ "export manga",
41
+ "import manga",
42
+ "status tracker",
43
+ "watchlist",
44
+ "reading list",
45
+ "graphql"
46
+ ],
47
+ "repository": {
48
+ "type": "git",
49
+ "url": "https://github.com/irfanshadikrishad/anilist"
50
+ },
51
+ "homepage": "https://github.com/irfanshadikrishad/anilist",
52
+ "bugs": {
53
+ "url": "https://github.com/irfanshadikrishad/anilist/issues"
54
+ },
55
+ "license": "MPL-2.0",
56
+ "devDependencies": {
57
+ "@eslint/js": "^9.17.0",
58
+ "@types/jest": "^29.5.14",
59
+ "@types/json2csv": "^5.0.7",
60
+ "@types/node": "^22.10.5",
61
+ "eslint": "^9.17.0",
62
+ "globals": "^15.14.0",
63
+ "jest": "^29.7.0",
64
+ "prettier": "^3.4.2",
65
+ "prettier-plugin-organize-imports": "^4.1.0",
66
+ "ts-jest": "^29.2.5",
67
+ "ts-node": "^10.9.2",
68
+ "typescript": "^5.7.2",
69
+ "@babel/preset-env": "^7.26.0",
70
+ "@typescript-eslint/eslint-plugin": "^8.19.1"
71
+ },
72
+ "dependencies": {
73
+ "commander": "^13.0.0",
74
+ "fast-xml-parser": "^4.5.1",
75
+ "inquirer": "^12.3.0",
76
+ "json2csv": "^6.0.0-alpha.2",
77
+ "node-fetch": "^3.3.2",
78
+ "open": "^10.1.0"
79
+ }
80
+ }
Binary file