@tutkli/jikan-ts 2.0.1 → 2.1.0

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
@@ -75,6 +75,20 @@ const animeClient = new AnimeClient({
75
75
  );
76
76
  ```
77
77
 
78
+ ### Custom Axios instance
79
+
80
+ Jikan uses `axios` as an `http` client and if you are not satisfied with the default client settings, then you can build your instance by passing it to the optional `axiosInstance` argument
81
+
82
+ ```ts
83
+ import { AnimeClient } from '@tutkli/jikan-ts';
84
+ import Axios from 'axios';
85
+
86
+ const animeClient = new AnimeClient({
87
+ axiosInstance: Axios.create({ ... })
88
+ }
89
+ );
90
+ ```
91
+
78
92
  For more information, check out the [axios-cache-interceptor Documentation](https://axios-cache-interceptor.js.org/).
79
93
 
80
94
  ### Logging
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
+ import { AxiosInstance, AxiosError } from 'axios';
1
2
  import { CacheOptions, InternalCacheRequestConfig, CacheAxiosResponse } from 'axios-cache-interceptor';
2
- import { AxiosError } from 'axios';
3
3
 
4
4
  interface JikanImages {
5
5
  jpg: JikanImagesCollection;
@@ -222,7 +222,7 @@ interface Anime {
222
222
  approved: boolean;
223
223
  titles: JikanResourceTitle[];
224
224
  title: string;
225
- title_english: string;
225
+ title_english?: string;
226
226
  title_japanese: string;
227
227
  title_synonyms: string[];
228
228
  type: AnimeType;
@@ -239,7 +239,7 @@ interface Anime {
239
239
  popularity: number;
240
240
  members: number;
241
241
  favorites: number;
242
- synopsis: string;
242
+ synopsis?: string;
243
243
  background: string;
244
244
  season?: AnimeSeason;
245
245
  year: number;
@@ -316,6 +316,7 @@ interface Manga {
316
316
  approved: boolean;
317
317
  titles: JikanResourceTitle[];
318
318
  title: string;
319
+ title_english?: string;
319
320
  title_japanese: string;
320
321
  title_synonyms?: string[];
321
322
  type: MangaType;
@@ -485,6 +486,11 @@ interface ClientArgs {
485
486
  * Location of the JikanAPI. Leave empty to use the official JikanAPI instance.
486
487
  */
487
488
  baseURL: string;
489
+ /**
490
+ * **Axios Instance**
491
+ * Еhe ability to build your own axios instance if you need it
492
+ */
493
+ axiosInstance?: AxiosInstance;
488
494
  }
489
495
  /**
490
496
  * **Base Client**
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- var C="https://api.jikan.moe/v4";var t={animeFullById:"/anime/{id}/full",animeById:"/anime/{id}",animeCharacters:"/anime/{id}/characters",animeStaff:"/anime/{id}/staff",animeEpisodes:"/anime/{id}/episodes",animeEpisodeById:"/anime/{id}/episodes/{episode}",animeNews:"/anime/{id}/news",animeForum:"/anime/{id}/forum",animeVideos:"/anime/{id}/videos",animeVideosEpisodes:"/anime/{id}/videos/episodes",animePictures:"/anime/{id}/pictures",animeStatistics:"/anime/{id}/statistics",animeMoreInfo:"/anime/{id}/moreinfo",animeRecommendations:"/anime/{id}/recommendations",animeUserUpdates:"/anime/{id}/userupdates",animeReviews:"/anime/{id}/reviews",animeRelations:"/anime/{id}/relations",animeThemes:"/anime/{id}/themes",animeExternal:"/anime/{id}/external",animeStreaming:"/anime/{id}/streaming",animeSearch:"/anime"};var s={characterFullById:"/characters/{id}/full",characterById:"/characters/{id}",characterAnime:"/characters/{id}/anime",charactersManga:"/characters/{id}/manga",characterVoiceActors:"/characters/{id}/voices",characterPictures:"/characters/{id}/pictures",characterSearch:"/characters"};var A={animeGenres:"/genres/anime",mangaGenres:"/genres/manga"};var o={mangaSearch:"/manga",mangaFullById:"/manga/{id}/full",mangaById:"/manga/{id}",mangaCharacters:"/manga/{id}/characters",mangaNews:"manga/{id}/news",mangaTopics:"/manga/{id}/forum",mangaPictures:"/manga/{id}/pictures",mangaStatistics:"/manga/{id}/statistics",mangaMoreInfo:"/manga/{id}/moreinfo",mangaRelations:"manga/{id}/relations",mangaExternal:"/manga/{id}/external",mangaRecommendations:"/manga/{id}/recommendations"};var m={season:"/seasons/{year}/{season}",seasonNow:"/seasons/now",seasonsList:"/seasons",seasonUpcoming:"/seasons/upcoming"};var p={topAnime:"/top/anime",topManga:"/top/manga",topCharacters:"/top/characters"};var u={randomAnime:"/random/anime",randomManga:"/random/manga",randomCharacters:"/random/characters"};import I from"axios";import{setupCache as w}from"axios-cache-interceptor";var E=r=>(console.info(`[Request] ${r.method?.toUpperCase()??""} | ${r.url??""}`),r),S=r=>{throw console.error(`[Request Error] CODE ${r.code??"UNKNOWN"} | ${r.message}`),r},M=r=>(console.info(`[Request Response] ${r.config.method?.toUpperCase()??""} | ${r.config.url??""}`,r.data),r),P=r=>{throw console.error(`[ Response Error ] CODE ${r.code??"UNKNOWN"} | ${r.message}`),r};var n=class{api;constructor(e={}){this.api=w(I.create({baseURL:e.baseURL??C,headers:{"Content-Type":"application/json"}}),{...e.cacheOptions,cacheTakeover:!1}),e.enableLogging&&this.addLoggingInterceptors()}async getResource(e,a={},i={}){return(await this.api.get(this.replacePathParams(e,a),{params:i})).data}replacePathParams(e,a){let i=e;for(let c of Object.keys(a)){if(!RegExp(`{${c}}`).exec(i))throw new Error(`Path does not contain "${c}" parameter.`);i=i.replace(`{${c}}`,String(a[c]))}return i}addLoggingInterceptors(){this.api.interceptors.request.use(e=>E(e),e=>S(e)),this.api.interceptors.response.use(e=>M(e),e=>P(e))}};var g=class extends n{getAnimeFullById(e){return this.getResource(t.animeFullById,{id:e})}getAnimeById(e){return this.getResource(t.animeById,{id:e})}getAnimeCharacters(e){return this.getResource(t.animeCharacters,{id:e})}getAnimeStaff(e){return this.getResource(t.animeStaff,{id:e})}getAnimeEpisodes(e,a=1){return this.getResource(t.animeEpisodes,{id:e},{page:a})}getAnimeEpisodeById(e,a){return this.getResource(t.animeEpisodeById,{id:e,episode:a})}getAnimeNews(e,a){return this.getResource(t.animeNews,{id:e},{page:a})}getAnimeForum(e,a){return this.getResource(t.animeForum,{id:e},a?{filter:a}:void 0)}getAnimeVideos(e){return this.getResource(t.animeVideos,{id:e})}getAnimeEpisodeVideos(e,a=1){return this.getResource(t.animeVideosEpisodes,{id:e},{page:a})}getAnimePictures(e){return this.getResource(t.animePictures,{id:e})}getAnimeStatistics(e){return this.getResource(t.animeStatistics,{id:e})}getAnimeMoreInfo(e){return this.getResource(t.animeMoreInfo,{id:e})}getAnimeRecommendations(e){return this.getResource(t.animeRecommendations,{id:e})}getAnimeRelations(e){return this.getResource(t.animeRelations,{id:e})}getAnimeExternal(e){return this.getResource(t.animeExternal,{id:e})}getAnimeSearch(e){return this.getResource(t.animeSearch,{},e)}};var l=class extends n{getCharacterFullById(e){return this.getResource(s.characterFullById,{id:e})}getCharacterById(e){return this.getResource(s.characterById,{id:e})}getCharacterAnime(e){return this.getResource(s.characterAnime,{id:e})}getCharacterManga(e){return this.getResource(s.charactersManga,{id:e})}getCharacterVoiceActors(e){return this.getResource(s.characterVoiceActors,{id:e})}getCharacterPictures(e){return this.getResource(s.characterPictures,{id:e})}getCharacterSearch(e){return this.getResource(s.characterSearch,{},e)}};var h=class extends n{getAnimeGenres(e){return this.getResource(A.animeGenres,{},{filter:e})}getMangaGenres(e){return this.getResource(A.mangaGenres,{},{filter:e})}};var d=class extends n{getMangaFullById(e){return this.getResource(o.mangaFullById,{id:e})}getMangaById(e){return this.getResource(o.mangaById,{id:e})}getMangaCharacters(e){return this.getResource(o.mangaCharacters,{id:e})}getMangaNews(e){return this.getResource(o.mangaNews,{id:e})}getMangaTopics(e,a){return this.getResource(o.mangaTopics,{id:e},a?{filter:a}:void 0)}getMangaPictures(e){return this.getResource(o.mangaPictures,{id:e})}getMangaStatistics(e){return this.getResource(o.mangaStatistics,{id:e})}getMangaMoreInfo(e){return this.getResource(o.mangaMoreInfo,{id:e})}getMangaRecommendations(e){return this.getResource(o.mangaRecommendations,{id:e})}getMangaRelations(e){return this.getResource(o.mangaRelations,{id:e})}getMangaExternal(e){return this.getResource(o.mangaExternal,{id:e})}getMangaSearch(e){return this.getResource(o.mangaSearch,{},e)}};var f=class extends n{getRandomAnime(){return this.getResource(u.randomAnime)}getRandomManga(){return this.getResource(u.randomManga)}getRandomCharacters(){return this.getResource(u.randomCharacters)}};var y={schedules:"/schedules"};var x=class extends n{getSchedules(e){return this.getResource(y.schedules,{},e)}};var R=class extends n{getSeason(e,a,i){return this.getResource(m.season,{year:e,season:a},i)}getSeasonNow(e){return this.getResource(m.seasonNow,{},e)}getSeasonsList(){return this.getResource(m.seasonsList)}getSeasonUpcoming(e){return this.getResource(m.seasonUpcoming,{},e)}};var b=class extends n{getTopAnime(e){return this.getResource(p.topAnime,{},e)}getTopManga(e){return this.getResource(p.topManga,{},e)}getTopCharacters(e){return this.getResource(p.topCharacters,{},e)}};var k=class{anime;characters;genres;manga;top;schedules;seasons;random;constructor(e){this.anime=new g(e),this.characters=new l(e),this.genres=new h(e),this.manga=new d(e),this.top=new b(e),this.schedules=new x(e),this.seasons=new R(e),this.random=new f(e)}};export{g as AnimeClient,t as AnimeEndpoints,n as BaseClient,C as BaseURL,l as CharactersClient,s as CharactersEndpoints,h as GenresClient,A as GenresEndpoints,k as JikanClient,d as MangaClient,o as MangaEndpoints,f as RandomClient,u as RandomEndpoints,x as SchedulesClient,R as SeasonsClient,m as SeasonsEndpoints,b as TopClient,p as TopEndpoints,E as handleRequest,S as handleRequestError,M as handleResponse,P as handleResponseError};
1
+ var C="https://api.jikan.moe/v4";var t={animeFullById:"/anime/{id}/full",animeById:"/anime/{id}",animeCharacters:"/anime/{id}/characters",animeStaff:"/anime/{id}/staff",animeEpisodes:"/anime/{id}/episodes",animeEpisodeById:"/anime/{id}/episodes/{episode}",animeNews:"/anime/{id}/news",animeForum:"/anime/{id}/forum",animeVideos:"/anime/{id}/videos",animeVideosEpisodes:"/anime/{id}/videos/episodes",animePictures:"/anime/{id}/pictures",animeStatistics:"/anime/{id}/statistics",animeMoreInfo:"/anime/{id}/moreinfo",animeRecommendations:"/anime/{id}/recommendations",animeUserUpdates:"/anime/{id}/userupdates",animeReviews:"/anime/{id}/reviews",animeRelations:"/anime/{id}/relations",animeThemes:"/anime/{id}/themes",animeExternal:"/anime/{id}/external",animeStreaming:"/anime/{id}/streaming",animeSearch:"/anime"};var s={characterFullById:"/characters/{id}/full",characterById:"/characters/{id}",characterAnime:"/characters/{id}/anime",charactersManga:"/characters/{id}/manga",characterVoiceActors:"/characters/{id}/voices",characterPictures:"/characters/{id}/pictures",characterSearch:"/characters"};var A={animeGenres:"/genres/anime",mangaGenres:"/genres/manga"};var o={mangaSearch:"/manga",mangaFullById:"/manga/{id}/full",mangaById:"/manga/{id}",mangaCharacters:"/manga/{id}/characters",mangaNews:"manga/{id}/news",mangaTopics:"/manga/{id}/forum",mangaPictures:"/manga/{id}/pictures",mangaStatistics:"/manga/{id}/statistics",mangaMoreInfo:"/manga/{id}/moreinfo",mangaRelations:"manga/{id}/relations",mangaExternal:"/manga/{id}/external",mangaRecommendations:"/manga/{id}/recommendations"};var m={season:"/seasons/{year}/{season}",seasonNow:"/seasons/now",seasonsList:"/seasons",seasonUpcoming:"/seasons/upcoming"};var p={topAnime:"/top/anime",topManga:"/top/manga",topCharacters:"/top/characters"};var u={randomAnime:"/random/anime",randomManga:"/random/manga",randomCharacters:"/random/characters"};import k from"axios";import{setupCache as w}from"axios-cache-interceptor";var E=r=>(console.info(`[Request] ${r.method?.toUpperCase()??""} | ${r.url??""}`),r),S=r=>{throw console.error(`[Request Error] CODE ${r.code??"UNKNOWN"} | ${r.message}`),r},M=r=>(console.info(`[Request Response] ${r.config.method?.toUpperCase()??""} | ${r.config.url??""}`,r.data),r),P=r=>{throw console.error(`[ Response Error ] CODE ${r.code??"UNKNOWN"} | ${r.message}`),r};var n=class{api;constructor(e={}){let a=e?.axiosInstance?e.axiosInstance:k.create({baseURL:e.baseURL??C,headers:{"Content-Type":"application/json"}});this.api=w(a,{...e.cacheOptions,cacheTakeover:!1}),e.enableLogging&&this.addLoggingInterceptors()}async getResource(e,a={},i={}){return(await this.api.get(this.replacePathParams(e,a),{params:i})).data}replacePathParams(e,a){let i=e;for(let c of Object.keys(a)){if(!RegExp(`{${c}}`).exec(i))throw new Error(`Path does not contain "${c}" parameter.`);i=i.replace(`{${c}}`,String(a[c]))}return i}addLoggingInterceptors(){this.api.interceptors.request.use(e=>E(e),e=>S(e)),this.api.interceptors.response.use(e=>M(e),e=>P(e))}};var g=class extends n{getAnimeFullById(e){return this.getResource(t.animeFullById,{id:e})}getAnimeById(e){return this.getResource(t.animeById,{id:e})}getAnimeCharacters(e){return this.getResource(t.animeCharacters,{id:e})}getAnimeStaff(e){return this.getResource(t.animeStaff,{id:e})}getAnimeEpisodes(e,a=1){return this.getResource(t.animeEpisodes,{id:e},{page:a})}getAnimeEpisodeById(e,a){return this.getResource(t.animeEpisodeById,{id:e,episode:a})}getAnimeNews(e,a){return this.getResource(t.animeNews,{id:e},{page:a})}getAnimeForum(e,a){return this.getResource(t.animeForum,{id:e},a?{filter:a}:void 0)}getAnimeVideos(e){return this.getResource(t.animeVideos,{id:e})}getAnimeEpisodeVideos(e,a=1){return this.getResource(t.animeVideosEpisodes,{id:e},{page:a})}getAnimePictures(e){return this.getResource(t.animePictures,{id:e})}getAnimeStatistics(e){return this.getResource(t.animeStatistics,{id:e})}getAnimeMoreInfo(e){return this.getResource(t.animeMoreInfo,{id:e})}getAnimeRecommendations(e){return this.getResource(t.animeRecommendations,{id:e})}getAnimeRelations(e){return this.getResource(t.animeRelations,{id:e})}getAnimeExternal(e){return this.getResource(t.animeExternal,{id:e})}getAnimeSearch(e){return this.getResource(t.animeSearch,{},e)}};var h=class extends n{getCharacterFullById(e){return this.getResource(s.characterFullById,{id:e})}getCharacterById(e){return this.getResource(s.characterById,{id:e})}getCharacterAnime(e){return this.getResource(s.characterAnime,{id:e})}getCharacterManga(e){return this.getResource(s.charactersManga,{id:e})}getCharacterVoiceActors(e){return this.getResource(s.characterVoiceActors,{id:e})}getCharacterPictures(e){return this.getResource(s.characterPictures,{id:e})}getCharacterSearch(e){return this.getResource(s.characterSearch,{},e)}};var l=class extends n{getAnimeGenres(e){return this.getResource(A.animeGenres,{},{filter:e})}getMangaGenres(e){return this.getResource(A.mangaGenres,{},{filter:e})}};var d=class extends n{getMangaFullById(e){return this.getResource(o.mangaFullById,{id:e})}getMangaById(e){return this.getResource(o.mangaById,{id:e})}getMangaCharacters(e){return this.getResource(o.mangaCharacters,{id:e})}getMangaNews(e){return this.getResource(o.mangaNews,{id:e})}getMangaTopics(e,a){return this.getResource(o.mangaTopics,{id:e},a?{filter:a}:void 0)}getMangaPictures(e){return this.getResource(o.mangaPictures,{id:e})}getMangaStatistics(e){return this.getResource(o.mangaStatistics,{id:e})}getMangaMoreInfo(e){return this.getResource(o.mangaMoreInfo,{id:e})}getMangaRecommendations(e){return this.getResource(o.mangaRecommendations,{id:e})}getMangaRelations(e){return this.getResource(o.mangaRelations,{id:e})}getMangaExternal(e){return this.getResource(o.mangaExternal,{id:e})}getMangaSearch(e){return this.getResource(o.mangaSearch,{},e)}};var f=class extends n{getRandomAnime(){return this.getResource(u.randomAnime)}getRandomManga(){return this.getResource(u.randomManga)}getRandomCharacters(){return this.getResource(u.randomCharacters)}};var I={schedules:"/schedules"};var x=class extends n{getSchedules(e){return this.getResource(I.schedules,{},e)}};var R=class extends n{getSeason(e,a,i){return this.getResource(m.season,{year:e,season:a},i)}getSeasonNow(e){return this.getResource(m.seasonNow,{},e)}getSeasonsList(){return this.getResource(m.seasonsList)}getSeasonUpcoming(e){return this.getResource(m.seasonUpcoming,{},e)}};var b=class extends n{getTopAnime(e){return this.getResource(p.topAnime,{},e)}getTopManga(e){return this.getResource(p.topManga,{},e)}getTopCharacters(e){return this.getResource(p.topCharacters,{},e)}};var y=class{anime;characters;genres;manga;top;schedules;seasons;random;constructor(e){this.anime=new g(e),this.characters=new h(e),this.genres=new l(e),this.manga=new d(e),this.top=new b(e),this.schedules=new x(e),this.seasons=new R(e),this.random=new f(e)}};export{g as AnimeClient,t as AnimeEndpoints,n as BaseClient,C as BaseURL,h as CharactersClient,s as CharactersEndpoints,l as GenresClient,A as GenresEndpoints,y as JikanClient,d as MangaClient,o as MangaEndpoints,f as RandomClient,u as RandomEndpoints,x as SchedulesClient,R as SeasonsClient,m as SeasonsEndpoints,b as TopClient,p as TopEndpoints,E as handleRequest,S as handleRequestError,M as handleResponse,P as handleResponseError};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tutkli/jikan-ts",
3
- "version": "2.0.1",
3
+ "version": "2.1.0",
4
4
  "description": "Node.js wrapper for the Jikan API with built-in typings.",
5
5
  "source": "src/index.ts",
6
6
  "main": "dist/index.js",
@@ -9,7 +9,7 @@
9
9
  "scripts": {
10
10
  "prepare": "git config core.hookspath .githooks",
11
11
  "build": "tsup --config tsup.config.ts",
12
- "prepublishOnly": "yarn run build",
12
+ "prepublishOnly": "bun run build",
13
13
  "test:ci": "vitest --silent --run",
14
14
  "test:coverage": "vitest run --coverage",
15
15
  "test:dev": "vitest",
@@ -44,11 +44,11 @@
44
44
  "@types/node": "20.12.10",
45
45
  "@vitest/coverage-v8": "^1.6.0",
46
46
  "@vitest/ui": "^1.6.0",
47
- "auto-changelog": "^2.4.0",
48
- "axios": "^1.6.8",
49
- "axios-cache-interceptor": "^1.5.2",
50
- "lint-staged": "^15.2.2",
51
- "tsup": "^8.0.2",
47
+ "auto-changelog": "^2.5.0",
48
+ "axios": "^1.7.7",
49
+ "axios-cache-interceptor": "^1.6.1",
50
+ "lint-staged": "^15.2.10",
51
+ "tsup": "^8.3.0",
52
52
  "typescript": "5.4.5",
53
53
  "vitest": "^1.6.0"
54
54
  }