@irfanshadikrishad/anilist 1.0.6 → 1.0.7

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.
@@ -1,38 +1,38 @@
1
- const addAnimeToListMutation = `
2
- mutation($mediaId: Int, $status: MediaListStatus) {
3
- SaveMediaListEntry(mediaId: $mediaId, status: $status) { id status }
4
- }
1
+ const addAnimeToListMutation = `
2
+ mutation($mediaId: Int, $status: MediaListStatus) {
3
+ SaveMediaListEntry(mediaId: $mediaId, status: $status) { id status }
4
+ }
5
5
  `;
6
- const addMangaToListMutation = `
7
- mutation($mediaId: Int, $status: MediaListStatus) {
8
- SaveMediaListEntry(mediaId: $mediaId, status: $status) {
9
- id
10
- status
11
- media { id title { romaji english } }
12
- }
13
- }
6
+ const addMangaToListMutation = `
7
+ mutation($mediaId: Int, $status: MediaListStatus) {
8
+ SaveMediaListEntry(mediaId: $mediaId, status: $status) {
9
+ id
10
+ status
11
+ media { id title { romaji english } }
12
+ }
13
+ }
14
14
  `;
15
- const deleteActivityMutation = `
16
- mutation($id: Int!) {
17
- DeleteActivity(id: $id) { deleted }
18
- }
15
+ const deleteActivityMutation = `
16
+ mutation($id: Int!) {
17
+ DeleteActivity(id: $id) { deleted }
18
+ }
19
19
  `;
20
- const saveTextActivityMutation = `
21
- mutation SaveTextActivity($status: String!) {
22
- SaveTextActivity(text: $status) { id text userId createdAt }
23
- }
20
+ const saveTextActivityMutation = `
21
+ mutation SaveTextActivity($status: String!) {
22
+ SaveTextActivity(text: $status) { id text userId createdAt }
23
+ }
24
24
  `;
25
- const saveAnimeWithProgressMutation = `
26
- mutation ($mediaId: Int, $progress: Int, $status: MediaListStatus, $hiddenFromStatusLists: Boolean) {
27
- SaveMediaListEntry(mediaId: $mediaId, progress: $progress, status: $status, hiddenFromStatusLists: $hiddenFromStatusLists) {
28
- id progress hiddenFromStatusLists
29
- }
30
- }
25
+ const saveAnimeWithProgressMutation = `
26
+ mutation ($mediaId: Int, $progress: Int, $status: MediaListStatus, $hiddenFromStatusLists: Boolean) {
27
+ SaveMediaListEntry(mediaId: $mediaId, progress: $progress, status: $status, hiddenFromStatusLists: $hiddenFromStatusLists) {
28
+ id progress hiddenFromStatusLists
29
+ }
30
+ }
31
31
  `;
32
- const saveMangaWithProgressMutation = `
33
- mutation ($mediaId: Int, $progress: Int, $status: MediaListStatus, $hiddenFromStatusLists: Boolean, $private: Boolean) {
34
- SaveMediaListEntry( mediaId: $mediaId, progress: $progress, status: $status, hiddenFromStatusLists: $hiddenFromStatusLists, private: $private
35
- ) { id progress hiddenFromStatusLists private }
36
- }
32
+ const saveMangaWithProgressMutation = `
33
+ mutation ($mediaId: Int, $progress: Int, $status: MediaListStatus, $hiddenFromStatusLists: Boolean, $private: Boolean) {
34
+ SaveMediaListEntry( mediaId: $mediaId, progress: $progress, status: $status, hiddenFromStatusLists: $hiddenFromStatusLists, private: $private
35
+ ) { id progress hiddenFromStatusLists private }
36
+ }
37
37
  `;
38
38
  export { addAnimeToListMutation, addMangaToListMutation, deleteActivityMutation, saveTextActivityMutation, saveAnimeWithProgressMutation, saveMangaWithProgressMutation, };
@@ -1,122 +1,122 @@
1
- const currentUserQuery = `{
2
- Viewer {
3
- id name about bans siteUrl options { profileColor timezone activityMergeTime }
4
- donatorTier donatorBadge createdAt updatedAt unreadNotificationCount previousNames { name createdAt updatedAt }
5
- moderatorRoles favourites { anime { nodes { id title { romaji english } } } manga { nodes { id title { romaji english } } } }
6
- statistics { anime { count meanScore minutesWatched } manga { count chaptersRead volumesRead } }
7
- mediaListOptions { scoreFormat rowOrder animeList { sectionOrder } mangaList { sectionOrder } }
8
- }
9
- }`;
10
- const trendingQuery = `query ($page: Int, $perPage: Int) {
11
- Page(page: $page, perPage: $perPage) {
12
- media(sort: TRENDING_DESC, type: ANIME) { id title { romaji english } }
13
- }
14
- }`;
15
- const popularQuery = `query ($page: Int, $perPage: Int) {
16
- Page(page: $page, perPage: $perPage) {
17
- media(sort: POPULARITY_DESC, type: ANIME) { id title { romaji english } }
18
- }
19
- }`;
20
- const userQuery = `query ($username: String) {
21
- User(name: $username) {
22
- id name siteUrl donatorTier donatorBadge createdAt updatedAt previousNames { name createdAt updatedAt }
23
- isBlocked isFollower isFollowing options { profileColor timezone activityMergeTime }
24
- statistics { anime { count episodesWatched minutesWatched } manga { count chaptersRead volumesRead } }
25
- }
26
- }`;
27
- const currentUserAnimeList = `query ($id: Int) {
28
- MediaListCollection(userId: $id, type: ANIME) {
29
- lists { name entries { id progress hiddenFromStatusLists status media { id title { romaji english } status episodes siteUrl } } }
30
- }
31
- }
1
+ const currentUserQuery = `{
2
+ Viewer {
3
+ id name about bans siteUrl options { profileColor timezone activityMergeTime }
4
+ donatorTier donatorBadge createdAt updatedAt unreadNotificationCount previousNames { name createdAt updatedAt }
5
+ moderatorRoles favourites { anime { nodes { id title { romaji english } } } manga { nodes { id title { romaji english } } } }
6
+ statistics { anime { count meanScore minutesWatched } manga { count chaptersRead volumesRead } }
7
+ mediaListOptions { scoreFormat rowOrder animeList { sectionOrder } mangaList { sectionOrder } }
8
+ }
9
+ }`;
10
+ const trendingQuery = `query ($page: Int, $perPage: Int) {
11
+ Page(page: $page, perPage: $perPage) {
12
+ media(sort: TRENDING_DESC, type: ANIME) { id title { romaji english } }
13
+ }
14
+ }`;
15
+ const popularQuery = `query ($page: Int, $perPage: Int) {
16
+ Page(page: $page, perPage: $perPage) {
17
+ media(sort: POPULARITY_DESC, type: ANIME) { id title { romaji english } }
18
+ }
19
+ }`;
20
+ const userQuery = `query ($username: String) {
21
+ User(name: $username) {
22
+ id name siteUrl donatorTier donatorBadge createdAt updatedAt previousNames { name createdAt updatedAt }
23
+ isBlocked isFollower isFollowing options { profileColor timezone activityMergeTime }
24
+ statistics { anime { count episodesWatched minutesWatched } manga { count chaptersRead volumesRead } }
25
+ }
26
+ }`;
27
+ const currentUserAnimeList = `query ($id: Int) {
28
+ MediaListCollection(userId: $id, type: ANIME) {
29
+ lists { name entries { id progress hiddenFromStatusLists status media { id title { romaji english } status episodes siteUrl } } }
30
+ }
31
+ }
32
32
  `;
33
- const currentUserMangaList = `query ($id: Int) {
34
- MediaListCollection(userId: $id, type: MANGA) {
35
- lists { name entries { id progress hiddenFromStatusLists private status media { id title { romaji english } status chapters } } }
36
- }
37
- }
33
+ const currentUserMangaList = `query ($id: Int) {
34
+ MediaListCollection(userId: $id, type: MANGA) {
35
+ lists { name entries { id progress hiddenFromStatusLists private status media { id title { romaji english } status chapters } } }
36
+ }
37
+ }
38
38
  `;
39
- const deleteMediaEntryMutation = `mutation($id: Int!) {
40
- DeleteMediaListEntry(id: $id) { deleted }
41
- }`;
42
- const deleteMangaEntryMutation = `mutation($id: Int) {
43
- DeleteMediaListEntry(id: $id) { deleted }
44
- }`;
45
- const upcomingAnimesQuery = `query GetNextSeasonAnime($nextSeason: MediaSeason, $nextYear: Int, $perPage: Int) {
46
- Page(perPage: $perPage) {
47
- media(season: $nextSeason, seasonYear: $nextYear, type: ANIME, sort: POPULARITY_DESC) {
48
- id title { romaji english native userPreferred } season seasonYear startDate { year month day }
49
- episodes description genres
50
- }
51
- }
52
- }`;
53
- const animeDetailsQuery = `query ($id: Int) {
54
- Media(id: $id) {
55
- id idMal title { romaji english native userPreferred } episodes nextAiringEpisode { id }
56
- duration startDate { year month day } endDate { year month day } countryOfOrigin description isAdult status season format genres siteUrl
57
- stats { scoreDistribution { score amount } statusDistribution { status amount } }
58
- }
59
- }`;
60
- const userActivityQuery = `query ($id: Int, $page: Int, $perPage: Int) {
61
- Page(page: $page, perPage: $perPage) {
62
- activities(userId: $id, type_in: [ANIME_LIST, MANGA_LIST], sort: ID_DESC) {
63
- ... on ListActivity { id status progress createdAt media { id title { romaji english } } }
64
- }
65
- }
66
- }`;
67
- const animeSearchQuery = `query ($search: String, $perPage: Int) {
68
- Page(perPage: $perPage) {
69
- media(search: $search, type: ANIME) { id title { romaji english native userPreferred } episodes status description }
70
- }
71
- }`;
72
- const mangaSearchQuery = `query ($search: String, $perPage: Int) {
73
- Page(perPage: $perPage) {
74
- media(search: $search, type: MANGA) { id title { romaji english native userPreferred } chapters status description }
75
- }
76
- }`;
77
- const activityTextQuery = `query ($userId: Int, $page: Int, $perPage: Int) {
78
- Page(page: $page, perPage: $perPage) {
79
- activities(userId: $userId, type: TEXT, sort: ID_DESC) {
80
- ... on TextActivity { id type text createdAt user { id name } }
81
- }
82
- }
83
- }`;
84
- const activityAnimeListQuery = `query ($userId: Int, $page: Int, $perPage: Int) {
85
- Page(page: $page, perPage: $perPage) {
86
- activities(userId: $userId, type: ANIME_LIST, sort: ID_DESC) {
87
- ... on ListActivity { id type status progress createdAt media { id title { romaji english native } } }
88
- }
89
- }
90
- }`;
91
- const activityMangaListQuery = `query ($userId: Int, $page: Int, $perPage: Int) {
92
- Page(page: $page, perPage: $perPage) {
93
- activities(userId: $userId, type: MANGA_LIST, sort: ID_DESC) {
94
- ... on ListActivity { id type status progress createdAt media { id title { romaji english native } } }
95
- }
96
- }
97
- }`;
98
- const activityMessageQuery = `query ($userId: Int, $page: Int, $perPage: Int) {
99
- Page(page: $page, perPage: $perPage) {
100
- activities(userId: $userId, type: MESSAGE, sort: ID_DESC) {
101
- ... on MessageActivity { id type message recipient { id name } createdAt }
102
- }
103
- }
104
- }`;
105
- const activityAllQuery = `query ($userId: Int, $page: Int, $perPage: Int) {
106
- Page(page: $page, perPage: $perPage) {
107
- activities(userId: $userId, sort: ID_DESC) {
108
- ... on TextActivity { id type text createdAt user { id name } }
109
- ... on ListActivity { id type status progress createdAt media { id title { romaji english native } } }
110
- ... on MessageActivity { id type message recipient { id name } createdAt }
111
- }
112
- }
113
- }`;
114
- const activityMediaList = `query ($userId: Int, $page: Int, $perPage: Int, $type: ActivityType) {
115
- Page(page: $page, perPage: $perPage) {
116
- pageInfo { total currentPage lastPage hasNextPage perPage }
117
- activities(userId: $userId, type: $type, sort: ID_DESC) {
118
- ... on ListActivity { id type status progress media { id title { romaji english native } format } createdAt }
119
- }
120
- }
39
+ const deleteMediaEntryMutation = `mutation($id: Int!) {
40
+ DeleteMediaListEntry(id: $id) { deleted }
41
+ }`;
42
+ const deleteMangaEntryMutation = `mutation($id: Int) {
43
+ DeleteMediaListEntry(id: $id) { deleted }
44
+ }`;
45
+ const upcomingAnimesQuery = `query GetNextSeasonAnime($nextSeason: MediaSeason, $nextYear: Int, $perPage: Int) {
46
+ Page(perPage: $perPage) {
47
+ media(season: $nextSeason, seasonYear: $nextYear, type: ANIME, sort: POPULARITY_DESC) {
48
+ id title { romaji english native userPreferred } season seasonYear startDate { year month day }
49
+ episodes description genres
50
+ }
51
+ }
52
+ }`;
53
+ const animeDetailsQuery = `query ($id: Int) {
54
+ Media(id: $id) {
55
+ id idMal title { romaji english native userPreferred } episodes nextAiringEpisode { id }
56
+ duration startDate { year month day } endDate { year month day } countryOfOrigin description isAdult status season format genres siteUrl
57
+ stats { scoreDistribution { score amount } statusDistribution { status amount } }
58
+ }
59
+ }`;
60
+ const userActivityQuery = `query ($id: Int, $page: Int, $perPage: Int) {
61
+ Page(page: $page, perPage: $perPage) {
62
+ activities(userId: $id, type_in: [ANIME_LIST, MANGA_LIST], sort: ID_DESC) {
63
+ ... on ListActivity { id status progress createdAt media { id title { romaji english } } }
64
+ }
65
+ }
66
+ }`;
67
+ const animeSearchQuery = `query ($search: String, $perPage: Int) {
68
+ Page(perPage: $perPage) {
69
+ media(search: $search, type: ANIME) { id title { romaji english native userPreferred } episodes status description }
70
+ }
71
+ }`;
72
+ const mangaSearchQuery = `query ($search: String, $perPage: Int) {
73
+ Page(perPage: $perPage) {
74
+ media(search: $search, type: MANGA) { id title { romaji english native userPreferred } chapters status description }
75
+ }
76
+ }`;
77
+ const activityTextQuery = `query ($userId: Int, $page: Int, $perPage: Int) {
78
+ Page(page: $page, perPage: $perPage) {
79
+ activities(userId: $userId, type: TEXT, sort: ID_DESC) {
80
+ ... on TextActivity { id type text createdAt user { id name } }
81
+ }
82
+ }
83
+ }`;
84
+ const activityAnimeListQuery = `query ($userId: Int, $page: Int, $perPage: Int) {
85
+ Page(page: $page, perPage: $perPage) {
86
+ activities(userId: $userId, type: ANIME_LIST, sort: ID_DESC) {
87
+ ... on ListActivity { id type status progress createdAt media { id title { romaji english native } } }
88
+ }
89
+ }
90
+ }`;
91
+ const activityMangaListQuery = `query ($userId: Int, $page: Int, $perPage: Int) {
92
+ Page(page: $page, perPage: $perPage) {
93
+ activities(userId: $userId, type: MANGA_LIST, sort: ID_DESC) {
94
+ ... on ListActivity { id type status progress createdAt media { id title { romaji english native } } }
95
+ }
96
+ }
97
+ }`;
98
+ const activityMessageQuery = `query ($userId: Int, $page: Int, $perPage: Int) {
99
+ Page(page: $page, perPage: $perPage) {
100
+ activities(userId: $userId, type: MESSAGE, sort: ID_DESC) {
101
+ ... on MessageActivity { id type message recipient { id name } createdAt }
102
+ }
103
+ }
104
+ }`;
105
+ const activityAllQuery = `query ($userId: Int, $page: Int, $perPage: Int) {
106
+ Page(page: $page, perPage: $perPage) {
107
+ activities(userId: $userId, sort: ID_DESC) {
108
+ ... on TextActivity { id type text createdAt user { id name } }
109
+ ... on ListActivity { id type status progress createdAt media { id title { romaji english native } } }
110
+ ... on MessageActivity { id type message recipient { id name } createdAt }
111
+ }
112
+ }
113
+ }`;
114
+ const activityMediaList = `query ($userId: Int, $page: Int, $perPage: Int, $type: ActivityType) {
115
+ Page(page: $page, perPage: $perPage) {
116
+ pageInfo { total currentPage lastPage hasNextPage perPage }
117
+ activities(userId: $userId, type: $type, sort: ID_DESC) {
118
+ ... on ListActivity { id type status progress media { id title { romaji english native } format } createdAt }
119
+ }
120
+ }
121
121
  }`;
122
122
  export { currentUserQuery, trendingQuery, popularQuery, userQuery, currentUserAnimeList, currentUserMangaList, deleteMediaEntryMutation, deleteMangaEntryMutation, upcomingAnimesQuery, animeDetailsQuery, userActivityQuery, animeSearchQuery, mangaSearchQuery, activityAllQuery, activityMediaList, activityAnimeListQuery, activityMangaListQuery, activityMessageQuery, activityTextQuery, };
@@ -0,0 +1,11 @@
1
+ interface DeleteMangaResponse {
2
+ data?: {
3
+ DeleteMediaListEntry?: {
4
+ deleted?: boolean;
5
+ };
6
+ };
7
+ errors?: {
8
+ message: string;
9
+ }[];
10
+ }
11
+ export { DeleteMangaResponse };
@@ -0,0 +1 @@
1
+ export {};
@@ -11,6 +11,7 @@ import inquirer from "inquirer";
11
11
  import open from "open";
12
12
  import { join } from "path";
13
13
  import { homedir } from "os";
14
+ import process from "process";
14
15
  import { parse } from "json2csv";
15
16
  import { writeFile, readdir, readFile } from "fs/promises";
16
17
  import { currentUsersName } from "./auth.js";
@@ -163,31 +164,44 @@ function selectFile() {
163
164
  }
164
165
  function importAnimeListFromExportedJSON() {
165
166
  return __awaiter(this, void 0, void 0, function* () {
166
- var _a, _b;
167
167
  try {
168
168
  const filename = yield selectFile();
169
169
  const filePath = join(getDownloadFolderPath(), filename);
170
170
  const fileContent = yield readFile(filePath, "utf8");
171
171
  const importedData = JSON.parse(fileContent);
172
- for (let anime of importedData) {
173
- const query = saveAnimeWithProgressMutation;
174
- const variables = {
175
- mediaId: anime === null || anime === void 0 ? void 0 : anime.id,
176
- progress: anime === null || anime === void 0 ? void 0 : anime.progress,
177
- status: anime === null || anime === void 0 ? void 0 : anime.status,
178
- hiddenFromStatusLists: false,
179
- };
180
- const save = yield fetcher(query, variables);
181
- if (save) {
182
- const id = (_b = (_a = save === null || save === void 0 ? void 0 : save.data) === null || _a === void 0 ? void 0 : _a.SaveMediaListEntry) === null || _b === void 0 ? void 0 : _b.id;
183
- console.log(`${anime === null || anime === void 0 ? void 0 : anime.id}-${id} ✅`);
184
- }
185
- else {
186
- console.error(`\nError saving ${anime === null || anime === void 0 ? void 0 : anime.id}`);
187
- }
188
- // avoiding rate-limit
189
- yield new Promise((resolve) => setTimeout(resolve, 2000));
172
+ let count = 0;
173
+ const batchSize = 1; // Number of requests in each batch
174
+ const delay = 2000; // delay to avoid rate-limiting
175
+ for (let i = 0; i < importedData.length; i += batchSize) {
176
+ const batch = importedData.slice(i, i + batchSize);
177
+ yield Promise.all(batch.map((anime) => __awaiter(this, void 0, void 0, function* () {
178
+ var _a, _b;
179
+ const query = saveAnimeWithProgressMutation;
180
+ const variables = {
181
+ mediaId: anime === null || anime === void 0 ? void 0 : anime.id,
182
+ progress: anime === null || anime === void 0 ? void 0 : anime.progress,
183
+ status: anime === null || anime === void 0 ? void 0 : anime.status,
184
+ hiddenFromStatusLists: false,
185
+ };
186
+ try {
187
+ const save = yield fetcher(query, variables);
188
+ if (save) {
189
+ const id = (_b = (_a = save === null || save === void 0 ? void 0 : save.data) === null || _a === void 0 ? void 0 : _a.SaveMediaListEntry) === null || _b === void 0 ? void 0 : _b.id;
190
+ count++;
191
+ console.log(`[${count}] ${anime === null || anime === void 0 ? void 0 : anime.id}-${id} ✅`);
192
+ }
193
+ else {
194
+ console.error(`\nError saving ${anime === null || anime === void 0 ? void 0 : anime.id}`);
195
+ }
196
+ }
197
+ catch (error) {
198
+ console.error(`\nError saving ${anime === null || anime === void 0 ? void 0 : anime.id}: ${error.message}`);
199
+ }
200
+ })));
201
+ // Avoid rate-limiting: Wait before sending the next batch
202
+ yield new Promise((resolve) => setTimeout(resolve, delay));
190
203
  }
204
+ console.log(`\nTotal ${count} anime(s) imported successfully.`);
191
205
  }
192
206
  catch (error) {
193
207
  console.error(`\n${error.message}`);
@@ -196,35 +210,46 @@ function importAnimeListFromExportedJSON() {
196
210
  }
197
211
  function importMangaListFromExportedJSON() {
198
212
  return __awaiter(this, void 0, void 0, function* () {
199
- var _a, _b;
200
213
  try {
201
214
  const filename = yield selectFile();
202
215
  const filePath = join(getDownloadFolderPath(), filename);
203
216
  const fileContent = yield readFile(filePath, "utf8");
204
217
  const importedData = JSON.parse(fileContent);
205
- for (let manga of importedData) {
206
- const query = saveMangaWithProgressMutation;
207
- const variables = {
208
- mediaId: manga === null || manga === void 0 ? void 0 : manga.id,
209
- progress: manga === null || manga === void 0 ? void 0 : manga.progress,
210
- status: manga === null || manga === void 0 ? void 0 : manga.status,
211
- hiddenFromStatusLists: false,
212
- private: manga === null || manga === void 0 ? void 0 : manga.private,
213
- };
214
- const save = yield fetcher(query, variables);
215
- if (save) {
216
- const id = (_b = (_a = save === null || save === void 0 ? void 0 : save.data) === null || _a === void 0 ? void 0 : _a.SaveMediaListEntry) === null || _b === void 0 ? void 0 : _b.id;
217
- console.log(`${manga === null || manga === void 0 ? void 0 : manga.id}-${id} ✅`);
218
- }
219
- else {
220
- console.error(`\nError saving ${manga === null || manga === void 0 ? void 0 : manga.id}`);
221
- }
222
- // avoiding rate-limit
223
- yield new Promise((resolve) => setTimeout(resolve, 2000));
218
+ let count = 0;
219
+ const batchSize = 1; // Adjust batch size as per rate-limit constraints
220
+ const delay = 2000; // 2 seconds delay to avoid rate-limit
221
+ // Process in batches
222
+ for (let i = 0; i < importedData.length; i += batchSize) {
223
+ const batch = importedData.slice(i, i + batchSize);
224
+ yield Promise.all(batch.map((manga) => __awaiter(this, void 0, void 0, function* () {
225
+ var _a, _b;
226
+ const query = saveMangaWithProgressMutation;
227
+ const variables = {
228
+ mediaId: manga === null || manga === void 0 ? void 0 : manga.id,
229
+ progress: manga === null || manga === void 0 ? void 0 : manga.progress,
230
+ status: manga === null || manga === void 0 ? void 0 : manga.status,
231
+ hiddenFromStatusLists: false,
232
+ private: manga === null || manga === void 0 ? void 0 : manga.private,
233
+ };
234
+ try {
235
+ const save = yield fetcher(query, variables);
236
+ if (save) {
237
+ const id = (_b = (_a = save === null || save === void 0 ? void 0 : save.data) === null || _a === void 0 ? void 0 : _a.SaveMediaListEntry) === null || _b === void 0 ? void 0 : _b.id;
238
+ count++;
239
+ console.log(`[${count}] ${manga === null || manga === void 0 ? void 0 : manga.id}-${id} ✅`);
240
+ }
241
+ }
242
+ catch (err) {
243
+ console.error(`\nError saving ${manga === null || manga === void 0 ? void 0 : manga.id}: ${err.message}`);
244
+ }
245
+ })));
246
+ // Avoid rate-limit by adding delay after processing each batch
247
+ yield new Promise((resolve) => setTimeout(resolve, delay));
224
248
  }
249
+ console.log(`\nTotal ${count} manga(s) imported successfully.`);
225
250
  }
226
251
  catch (error) {
227
- console.error(`\n${error.message}`);
252
+ console.error(`\nError: ${error.message}`);
228
253
  }
229
254
  });
230
255
  }
package/bin/index.js CHANGED
@@ -9,14 +9,15 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  import { Command } from "commander";
12
+ import process from "process";
12
13
  import { anilistUserLogin, currentUserInfo, isLoggedIn, logoutUser, } from "./helpers/auth.js";
13
14
  import { deleteAnimeCollection, deleteMangaCollection, getPopular, getTrending, getUpcomingAnimes, loggedInUsersAnimeLists, loggedInUsersMangaLists, } from "./helpers/lists.js";
14
- import { getAnimeDetailsByID, getAnimeSearchResults, getMangaSearchResults, deleteUserActivities, getUserInfoByUsername, writeTextActivity, exportAnimeList, exportMangaList, importAnimeList, importMangaList, } from "./helpers/more.js";
15
+ import { deleteUserActivities, exportAnimeList, exportMangaList, getAnimeDetailsByID, getAnimeSearchResults, getMangaSearchResults, getUserInfoByUsername, importAnimeList, importMangaList, writeTextActivity, } from "./helpers/more.js";
15
16
  const cli = new Command();
16
17
  cli
17
18
  .name("anilist")
18
19
  .description("Minimalist unofficial AniList CLI for Anime and Manga Enthusiasts.")
19
- .version("1.0.6");
20
+ .version("1.0.7");
20
21
  cli
21
22
  .command("login")
22
23
  .description("Login with AniList")
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@irfanshadikrishad/anilist",
3
3
  "description": "Minimalist unofficial AniList CLI for Anime and Manga Enthusiasts",
4
4
  "author": "Irfan Shadik Rishad",
5
- "version": "1.0.6",
5
+ "version": "1.0.7",
6
6
  "main": "./bin/index.js",
7
7
  "type": "module",
8
8
  "types": "./bin/index.d.ts",
@@ -13,7 +13,10 @@
13
13
  "access": "public"
14
14
  },
15
15
  "scripts": {
16
- "build": "rm -rf ./bin && tsc -w"
16
+ "build": "rm -rf ./bin && tsc -w",
17
+ "format": "prettier . --write",
18
+ "lint": "eslint ./dist",
19
+ "lint:fix": "eslint ./dist --fix"
17
20
  },
18
21
  "keywords": [
19
22
  "anilist",
@@ -47,9 +50,14 @@
47
50
  },
48
51
  "license": "MPL-2.0",
49
52
  "devDependencies": {
53
+ "@eslint/js": "^9.13.0",
50
54
  "@types/json2csv": "^5.0.7",
51
55
  "@types/node": "^22.7.7",
52
- "typescript": "^5.6.3"
56
+ "eslint": "^9.13.0",
57
+ "globals": "^15.11.0",
58
+ "prettier": "^3.3.3",
59
+ "typescript": "^5.6.3",
60
+ "typescript-eslint": "^8.11.0"
53
61
  },
54
62
  "dependencies": {
55
63
  "commander": "^12.1.0",