@tutkli/jikan-ts 2.0.2 → 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 +14 -0
- package/dist/index.d.ts +7 -2
- package/dist/index.js +1 -1
- package/package.json +7 -7
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;
|
|
@@ -239,7 +239,7 @@ interface Anime {
|
|
|
239
239
|
popularity: number;
|
|
240
240
|
members: number;
|
|
241
241
|
favorites: number;
|
|
242
|
-
synopsis
|
|
242
|
+
synopsis?: string;
|
|
243
243
|
background: string;
|
|
244
244
|
season?: AnimeSeason;
|
|
245
245
|
year: number;
|
|
@@ -486,6 +486,11 @@ interface ClientArgs {
|
|
|
486
486
|
* Location of the JikanAPI. Leave empty to use the official JikanAPI instance.
|
|
487
487
|
*/
|
|
488
488
|
baseURL: string;
|
|
489
|
+
/**
|
|
490
|
+
* **Axios Instance**
|
|
491
|
+
* Еhe ability to build your own axios instance if you need it
|
|
492
|
+
*/
|
|
493
|
+
axiosInstance?: AxiosInstance;
|
|
489
494
|
}
|
|
490
495
|
/**
|
|
491
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
|
|
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
|
|
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": "
|
|
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.
|
|
48
|
-
"axios": "^1.
|
|
49
|
-
"axios-cache-interceptor": "^1.
|
|
50
|
-
"lint-staged": "^15.2.
|
|
51
|
-
"tsup": "^8.0
|
|
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
|
}
|