├── .eslintrc.json
├── .github
└── workflows
│ ├── codeql-analysis.yml
│ └── docs.yml
├── .gitignore
├── .prettierrc.json
├── LICENSE
├── README.md
├── package.json
├── src
├── constants
│ ├── anime.ts
│ ├── clubs.ts
│ ├── genres.ts
│ ├── index.ts
│ ├── manga.ts
│ ├── schedules.ts
│ ├── seasons.ts
│ ├── top.ts
│ └── users.ts
├── index.ts
├── lib
│ ├── Marika.ts
│ ├── index.ts
│ └── jikan
│ │ ├── anime.ts
│ │ ├── characters.ts
│ │ ├── clubs.ts
│ │ ├── genres.ts
│ │ ├── index.ts
│ │ ├── magazines.ts
│ │ ├── manga.ts
│ │ ├── people.ts
│ │ ├── producers.ts
│ │ ├── random.ts
│ │ ├── recommendations.ts
│ │ ├── reviews.ts
│ │ ├── schedules.ts
│ │ ├── seasons.ts
│ │ ├── top.ts
│ │ ├── users.ts
│ │ └── watch.ts
├── types
│ ├── anime.ts
│ ├── characters.ts
│ ├── clubs.ts
│ ├── genres.ts
│ ├── index.ts
│ ├── magazines.ts
│ ├── manga.ts
│ ├── pagination.ts
│ ├── people.ts
│ ├── producers.ts
│ ├── recommendations.ts
│ ├── schedules.ts
│ ├── seasons.ts
│ ├── top.ts
│ ├── users.ts
│ └── watch.ts
└── utils
│ ├── Error.ts
│ ├── Fetch.ts
│ ├── Utils.ts
│ └── index.ts
├── tsconfig.json
├── typedoc.json
└── yarn.lock
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "es2021": true,
4 | "node": true
5 | },
6 | "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended"],
7 | "parser": "@typescript-eslint/parser",
8 | "parserOptions": {
9 | "ecmaVersion": 7,
10 | "sourceType": "module"
11 | },
12 | "plugins": ["@typescript-eslint"],
13 | "rules": {
14 | "@typescript-eslint/no-explicit-any": "off"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/.github/workflows/codeql-analysis.yml:
--------------------------------------------------------------------------------
1 | # For most projects, this workflow file will not need changing; you simply need
2 | # to commit it to your repository.
3 | #
4 | # You may wish to alter this file to override the set of languages analyzed,
5 | # or to provide custom queries or build logic.
6 | #
7 | # ******** NOTE ********
8 | # We have attempted to detect the languages in your repository. Please check
9 | # the `language` matrix defined below to confirm you have the correct set of
10 | # supported CodeQL languages.
11 | #
12 | name: "CodeQL"
13 |
14 | on:
15 | push:
16 | branches: [main]
17 | pull_request:
18 | # The branches below must be a subset of the branches above
19 | branches: [main]
20 | schedule:
21 | - cron: "26 2 * * 2"
22 |
23 | jobs:
24 | analyze:
25 | name: Analyze
26 | runs-on: ubuntu-latest
27 | permissions:
28 | actions: read
29 | contents: read
30 | security-events: write
31 |
32 | strategy:
33 | fail-fast: false
34 | matrix:
35 | language: ["javascript"]
36 | # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
37 | # Learn more:
38 | # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
39 |
40 | steps:
41 | - name: Checkout repository
42 | uses: actions/checkout@v2
43 |
44 | # Initializes the CodeQL tools for scanning.
45 | - name: Initialize CodeQL
46 | uses: github/codeql-action/init@v1
47 | with:
48 | languages: ${{ matrix.language }}
49 | # If you wish to specify custom queries, you can do so here or in a config file.
50 | # By default, queries listed here will override any specified in a config file.
51 | # Prefix the list here with "+" to use these queries and those in the config file.
52 | # queries: ./path/to/local/query, your-org/your-repo/queries@main
53 |
54 | # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
55 | # If this step fails, then you should remove it and run the build manually (see below)
56 | - name: Autobuild
57 | uses: github/codeql-action/autobuild@v1
58 |
59 | # ℹ️ Command-line programs to run using the OS shell.
60 | # 📚 https://git.io/JvXDl
61 |
62 | # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
63 | # and modify them (or add more) to build your code if your project
64 | # uses a compiled language
65 |
66 | #- run: |
67 | # make bootstrap
68 | # make release
69 |
70 | - name: Perform CodeQL Analysis
71 | uses: github/codeql-action/analyze@v1
72 |
73 | - name: Setup Node.js environment
74 | uses: actions/setup-node@v2.4.0
75 | with:
76 | # Set always-auth in npmrc
77 | always-auth: false # optional, default is false
78 | # Version Spec of the version to use. Examples: 12.x, 10.15.1, >=10.15.0
79 | # node-version: # optional
80 | # Target architecture for Node to use. Examples: x86, x64. Will use system architecture by default.
81 | # architecture: # optional
82 | # Set this option if you want the action to check for the latest available version that satisfies the version spec
83 | # check-latest: # optional
84 | # Optional registry to set up for auth. Will set the registry in a project level .npmrc and .yarnrc file, and set up auth to read in from env.NODE_AUTH_TOKEN
85 | # registry-url: # optional
86 | # Optional scope for authenticating against scoped registries
87 | # scope: # optional
88 | # Used to pull node distributions from node-versions. Since there's a default, this is typically not supplied by the user.
89 | # token: # optional, default is ${{ github.token }}
90 | # Used to specify a package manager for caching in the default directory. Supported values: npm, yarn, pnpm
91 | # cache: # optional
92 | # Used to specify the path to a dependency file: package-lock.json, yarn.lock, etc. Supports wildcards or a list of file names for caching multiple dependencies.
93 | # cache-dependency-path: # optional
94 | # Deprecated. Use node-version instead. Will not be supported after October 1, 2019
95 | # version: # optional
96 |
--------------------------------------------------------------------------------
/.github/workflows/docs.yml:
--------------------------------------------------------------------------------
1 | name: Docs workflow
2 |
3 | on:
4 | push:
5 | branches:
6 | - main
7 | jobs:
8 | Build:
9 | runs-on: ubuntu-latest
10 | outputs:
11 | package-name: ${{ steps.packageInfo.outputs.package-name }}
12 | package-version: ${{ steps.packageInfo.outputs.package-version }}
13 | commit-msg: ${{ steps.packageInfo.outputs.commit-msg }}
14 | # Steps represent a sequence of tasks that will be executed as part of the job
15 | steps:
16 | - name: Checkout Commit
17 | uses: actions/checkout@v2
18 |
19 | - name: Parsing Package Info
20 | id: packageInfo
21 | run: |
22 | echo "::set-output name=package-name::$(jq -r .name package.json)"
23 | echo "::set-output name=package-version::$(jq -r .version package.json)"
24 | echo "::set-output name=commit-msg::$(git log -1 --pretty=%B)"
25 |
26 | - name: Setup Node.js environment
27 | uses: actions/setup-node@v2.1.1
28 |
29 | - name: Install Dependencies
30 | run: yarn install
31 |
32 | - name: Docs Build
33 | run: yarn docs
34 |
35 | - name: Publish to Pages
36 | uses: crazy-max/ghaction-github-pages@v2
37 | with:
38 | target_branch: gh-pages
39 | build_dir: docs
40 | env:
41 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | lerna-debug.log*
8 |
9 | # Diagnostic reports (https://nodejs.org/api/report.html)
10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
11 |
12 | # Runtime data
13 | pids
14 | *.pid
15 | *.seed
16 | *.pid.lock
17 |
18 | # Directory for instrumented libs generated by jscoverage/JSCover
19 | lib-cov
20 |
21 | # Coverage directory used by tools like istanbul
22 | coverage
23 | *.lcov
24 |
25 | # nyc test coverage
26 | .nyc_output
27 |
28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
29 | .grunt
30 |
31 | # Bower dependency directory (https://bower.io/)
32 | bower_components
33 |
34 | # node-waf configuration
35 | .lock-wscript
36 |
37 | # Compiled binary addons (https://nodejs.org/api/addons.html)
38 | build/Release
39 |
40 | # Dependency directories
41 | node_modules/
42 | jspm_packages/
43 |
44 |
45 | # TypeScript cache
46 | *.tsbuildinfo
47 |
48 | # Optional npm cache directory
49 | .npm
50 |
51 | # Optional eslint cache
52 | .eslintcache
53 |
54 | # Microbundle cache
55 | .rpt2_cache/
56 | .rts2_cache_cjs/
57 | .rts2_cache_es/
58 | .rts2_cache_umd/
59 |
60 | # Optional REPL history
61 | .node_repl_history
62 |
63 | # Output of 'npm pack'
64 | *.tgz
65 |
66 | # Yarn Integrity file
67 | .yarn-integrity
68 |
69 | # dotenv environment variables file
70 | .env
71 | .env.test
72 |
73 | # parcel-bundler cache (https://parceljs.org/)
74 | .cache
75 |
76 | # Next.js build output
77 | .next
78 |
79 | # Nuxt.js build / generate output
80 | .nuxt
81 | dist
82 |
83 | # Gatsby files
84 | .cache/
85 | # Comment in the public line in if your project uses Gatsby and *not* Next.js
86 | # https://nextjs.org/blog/next-9-1#public-directory-support
87 | # public
88 |
89 | # vuepress build output
90 | .vuepress/dist
91 |
92 | # Serverless directories
93 | .serverless/
94 |
95 | # FuseBox cache
96 | .fusebox/
97 |
98 | # DynamoDB Local files
99 | .dynamodb/
100 |
101 | # TernJS port file
102 | .tern-port
103 |
104 | docs
--------------------------------------------------------------------------------
/.prettierrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "semi": false,
3 | "trailingComma": "none",
4 | "singleQuote": true,
5 | "printWidth": 120,
6 | "tabWidth": 4
7 | }
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 Shinei Ichijo
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |

3 |
4 | # Marika
5 |
6 | [](https://www.npmjs.com/package/@shineiichijo/marika)
7 |
8 | A promise based API wrapper for the unofficial [MyAnimeList API](https://docs.api.jikan.moe/)
9 |
10 | [Documentation](https://luckyyam.github.io/Marika/)
11 |
12 |
13 |
14 | ---
15 |
16 | ## Installation
17 |
18 | ```sh
19 | npm i @shineiichijo/marika
20 |
21 | yarn add @shineiichijo/marika
22 | ```
23 |
24 | ## 🚀 Usage Examples
25 |
26 | ```ts
27 | import { Marika } from '@shineiichijo/marika'
28 |
29 | ;(async () => {
30 | const { anime } = new Marika()
31 | await anime.getAnimeById(1)
32 | .then(console.log)
33 | .catch(console.error)
34 | })()
35 | ```
36 |
37 | ```ts
38 | import { Manga } from '@shineiichijo/marika'
39 |
40 | ;(async () => {
41 | const manga = new Manga()
42 | await manga.getMangaSearch({ q: 'Nisekoi', page: 1, genres: [22, 4], limit: 1 })
43 | .then(console.log)
44 | .catch(console.error)
45 | })()
46 | ```
47 |
48 | ```ts
49 | import { Marika, AnimeSeasons, AnimeTypes } from '@shineiichijo/marika'
50 |
51 | ;(async () => {
52 | const { seasons } = new Marika()
53 | await seasons.getSeason(2023, AnimeSeasons['FALL'], { sfw: true, filter: AnimeTypes['TV'] })
54 | .then(console.log)
55 | .catch(console.error)
56 | })()
57 | ```
58 |
59 | ```ts
60 | import { Characters } from '@shineiichijo/marika'
61 |
62 | ;(async () => {
63 | const characters = new Characters()
64 | await characters.getCharacterFullById(66597)
65 | .then(console.log)
66 | .catch(console.error)
67 | })()
68 | ```
69 |
70 | ```ts
71 | import { Marika, Days } from '@shineiichijo/marika'
72 |
73 | ;(async () => {
74 | const { schedules } = new Marika()
75 | await schedules.getSchedules({ filter: Days['MONDAY'] })
76 | .then(console.log)
77 | .catch(console.error)
78 | })()
79 | ```
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@shineiichijo/marika",
3 | "version": "3.0.1",
4 | "description": "An API wrapper for the unofficial MyAnimeList API jikan.moe v4",
5 | "main": "dist/index.js",
6 | "types": "dist/index.d.ts",
7 | "dependencies": {
8 | "axios": "^1.5.0",
9 | "axios-cache-interceptor": "^1.3.0"
10 | },
11 | "files": [
12 | "dist"
13 | ],
14 | "scripts": {
15 | "build": "yarn rimraf dist/ && yarn tsc && yarn docs",
16 | "lint": "eslint . --ignore-path .gitignore --ext .ts",
17 | "lint:fix": "eslint . --ignore-path .gitignore --ext .ts --fix",
18 | "format": "yarn prettier --write --config .prettierrc.json \"src/**/*.ts\"",
19 | "prepack": "yarn build",
20 | "docs": "yarn typedoc"
21 | },
22 | "repository": {
23 | "type": "git",
24 | "url": "git+https://github.com/LuckyYam/Marika.git"
25 | },
26 | "keywords": [
27 | "anime",
28 | "manga",
29 | "anime-character",
30 | "jikan",
31 | "jikan-moe",
32 | "myanimelist",
33 | "MAL"
34 | ],
35 | "author": {
36 | "name": "Lucky Yambem",
37 | "url": "https://github.com/LuckyYam"
38 | },
39 | "license": "MIT",
40 | "bugs": {
41 | "url": "https://github.com/LuckyYam/Marika/issues"
42 | },
43 | "homepage": "https://github.com/LuckyYam/Marika",
44 | "devDependencies": {
45 | "@types/mocha": "^10.0.1",
46 | "@types/node": "^20.6.2",
47 | "@typescript-eslint/eslint-plugin": "^6.7.2",
48 | "@typescript-eslint/parser": "^6.7.2",
49 | "eslint": "^8.49.0",
50 | "mocha": "^10.2.0",
51 | "prettier": "^3.0.3",
52 | "ts-node": "^10.9.1",
53 | "typedoc": "^0.25.1",
54 | "typescript": "^5.2.2"
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/src/constants/anime.ts:
--------------------------------------------------------------------------------
1 | export enum AnimeTypes {
2 | TV = 'TV',
3 | MOVIE = 'Movie',
4 | SPECIAL = 'Special',
5 | OVA = 'OVA',
6 | ONA = 'ONA',
7 | MUSIC = 'Music'
8 | }
9 |
10 | export enum Ratings {
11 | /** G - All Ages */
12 | G = 'g',
13 | /** PG - Children */
14 | PG = 'pg',
15 | /** PG-13 - Teens 13 or older */
16 | PG_13 = 'pg13',
17 | /** R - 17+ (violence & profanity) */
18 | R_17 = 'r17',
19 | /** R+ - Mild Nudity */
20 | R = 'r',
21 | /** Rx - Hentai */
22 | RX = 'rx'
23 | }
24 |
25 | export enum AnimeStatus {
26 | AIRING = 'airing',
27 | COMPLETE = 'complete',
28 | UPCOMING = 'upcoming'
29 | }
30 |
--------------------------------------------------------------------------------
/src/constants/clubs.ts:
--------------------------------------------------------------------------------
1 | export enum ClubAccess {
2 | PUBLIC = 'public',
3 | PRIVATE = 'private',
4 | SECRET = 'secret'
5 | }
6 |
7 | export enum ClubCategories {
8 | ANIME = 'anime',
9 | MANGA = 'manga',
10 | ACTORS_AND_ARTISTS = 'actors_and_artists',
11 | CHARACTERS = 'characters',
12 | CITIES_AND_NEIGHBORHOODS = 'cities_and_neighborhoods',
13 | COMPANIES = 'companies',
14 | CONVENTIONS = 'conventions',
15 | GAMES = 'games',
16 | JAPAN = 'japan',
17 | MUSIC = 'music',
18 | OTHER = 'other',
19 | SCHOOLS = 'schools'
20 | }
21 |
--------------------------------------------------------------------------------
/src/constants/genres.ts:
--------------------------------------------------------------------------------
1 | export enum GenresFilter {
2 | GENRES = 'genres',
3 | EXPLICIT_GENRES = 'explicit_genres',
4 | THEMES = 'themes',
5 | DEMOGRAPHICS = 'demographics'
6 | }
7 |
--------------------------------------------------------------------------------
/src/constants/index.ts:
--------------------------------------------------------------------------------
1 | export const API_URL = 'https://api.jikan.moe/v4'
2 |
3 | export enum Sorting {
4 | DESCENDING = 'desc',
5 | ASCENDING = 'asc'
6 | }
7 |
8 | export enum Forums {
9 | ALL = 'all',
10 | EPISODE = 'episode',
11 | OTHER = 'other'
12 | }
13 |
14 | export * from './anime'
15 | export * from './clubs'
16 | export * from './genres'
17 | export * from './manga'
18 | export * from './schedules'
19 | export * from './seasons'
20 | export * from './users'
21 | export * from './top'
22 |
--------------------------------------------------------------------------------
/src/constants/manga.ts:
--------------------------------------------------------------------------------
1 | export enum MangaTypes {
2 | Manga = 'manga',
3 | Novel = 'novel',
4 | 'Light Novel' = 'lightnovel',
5 | 'One-shot' = 'oneshot',
6 | Doujin = 'doujin',
7 | Manhwa = 'manhwa',
8 | Manhua = 'manhua'
9 | }
10 |
11 | export enum MangaStatus {
12 | PUBLISHING = 'publishing',
13 | COMPLETE = 'complete',
14 | HIATUS = 'hiatus',
15 | DISCONTINUED = 'discontinued',
16 | UPCOMING = 'upcoming'
17 | }
18 |
--------------------------------------------------------------------------------
/src/constants/schedules.ts:
--------------------------------------------------------------------------------
1 | export enum Days {
2 | MONDAY = 'monday',
3 | TUESDAY = 'tuesday',
4 | WEDNESDAY = 'wednesday',
5 | THURSDAY = 'thursday',
6 | FRIDAY = 'friday',
7 | SATURDAY = 'saturday',
8 | SUNDAY = 'sunday'
9 | }
10 |
--------------------------------------------------------------------------------
/src/constants/seasons.ts:
--------------------------------------------------------------------------------
1 | export enum AnimeSeasons {
2 | FALL = 'fall',
3 | SUMMER = 'summer',
4 | SPRING = 'spring',
5 | WINTER = 'winter'
6 | }
7 |
--------------------------------------------------------------------------------
/src/constants/top.ts:
--------------------------------------------------------------------------------
1 | export enum AnimeFilters {
2 | BY_POPULARITY = 'bypopularity',
3 | AIRING = 'airing',
4 | UPCOMING = 'upcoming',
5 | FAVORITE = 'favorite'
6 | }
7 |
8 | export enum MangaFilters {
9 | BY_POPULARITY = 'bypopularity',
10 | UPCOMING = 'upcoming',
11 | FAVORITE = 'favorite',
12 | PUBLISHING = 'publishing'
13 | }
14 |
--------------------------------------------------------------------------------
/src/constants/users.ts:
--------------------------------------------------------------------------------
1 | export enum Genders {
2 | MALE = 'male',
3 | FEMALE = 'female',
4 | ANY = 'any',
5 | NON_BINARY = 'nonbinary'
6 | }
7 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './types'
2 | export * from './constants'
3 | export * from './lib'
4 |
--------------------------------------------------------------------------------
/src/lib/Marika.ts:
--------------------------------------------------------------------------------
1 | import { CacheOptions } from 'axios-cache-interceptor'
2 | import {
3 | Anime,
4 | Characters,
5 | Clubs,
6 | Genres,
7 | Magazines,
8 | Manga,
9 | People,
10 | Producers,
11 | Random,
12 | Recommendations,
13 | Reviews,
14 | Schedules,
15 | Seasons,
16 | Top,
17 | Users,
18 | Watch
19 | } from './jikan'
20 |
21 | export class Marika {
22 | /**
23 | * Constructs an instance of the [main](https://docs.api.jikan.moe/) client
24 | * @param cacheOptions [Cache options](https://axios-cache-interceptor.js.org/config) for the client to make requests
25 | */
26 | constructor(cacheOptions?: CacheOptions) {
27 | this.anime = new Anime(cacheOptions)
28 | this.characters = new Characters(cacheOptions)
29 | this.clubs = new Clubs(cacheOptions)
30 | this.genres = new Genres(cacheOptions)
31 | this.magazines = new Magazines(cacheOptions)
32 | this.manga = new Manga(cacheOptions)
33 | this.people = new People(cacheOptions)
34 | this.reviews = new Reviews(cacheOptions)
35 | this.schedules = new Schedules(cacheOptions)
36 | this.producers = new Producers(cacheOptions)
37 | this.recommendations = new Recommendations(cacheOptions)
38 | this.seasons = new Seasons(cacheOptions)
39 | this.users = new Users(cacheOptions)
40 | this.watch = new Watch(cacheOptions)
41 | this.random = new Random(cacheOptions)
42 | this.top = new Top(cacheOptions)
43 | }
44 |
45 | /** Client of [anime](https://docs.api.jikan.moe/#tag/anime) */
46 | public anime: Anime
47 | /** Client of [characters](https://docs.api.jikan.moe/#tag/characters) */
48 | public characters: Characters
49 | /** Client of [clubs](https://docs.api.jikan.moe/#tag/clubs) */
50 | public clubs: Clubs
51 | /** Client of [genres](https://docs.api.jikan.moe/#tag/genres) */
52 | public genres: Genres
53 | /** Client of [magazines](https://docs.api.jikan.moe/#tag/magazines) */
54 | public magazines: Magazines
55 | /** Client of [manga](https://docs.api.jikan.moe/#tag/manga) */
56 | public manga: Manga
57 | /** Client of [people](https://docs.api.jikan.moe/#tag/people) */
58 | public people: People
59 | /** Client of [reviews](https://docs.api.jikan.moe/#tag/reviews) */
60 | public reviews: Reviews
61 | /** Client of [schedules](https://docs.api.jikan.moe/#tag/schedules) */
62 | public schedules: Schedules
63 | /** Client of [producers](https://docs.api.jikan.moe/#tag/producers) */
64 | public producers: Producers
65 | /** Client of [recommendations](https://docs.api.jikan.moe/#tag/recommendations) */
66 | public recommendations: Recommendations
67 | /** Client of [seasons](https://docs.api.jikan.moe/#tag/seasons) */
68 | public seasons: Seasons
69 | /** Client of [users](https://docs.api.jikan.moe/#tag/users) */
70 | public users: Users
71 | /** Client of [watch](https://docs.api.jikan.moe/#tag/watch) */
72 | public watch: Watch
73 | /** Client of [random](https://docs.api.jikan.moe/#tag/random) */
74 | public random: Random
75 | /** Client of [top](https://docs.api.jikan.moe/#tag/top) */
76 | public top: Top
77 | }
78 |
--------------------------------------------------------------------------------
/src/lib/index.ts:
--------------------------------------------------------------------------------
1 | export * from './Marika'
2 | export * from './jikan'
3 |
--------------------------------------------------------------------------------
/src/lib/jikan/anime.ts:
--------------------------------------------------------------------------------
1 | import { CacheOptions } from 'axios-cache-interceptor'
2 | import { Fetch, getQueryString, getURL, getTypeErrorMessage } from '../../utils'
3 | import {
4 | IAnime,
5 | IAnimeCharacter,
6 | IAnimeFull,
7 | IAnimeStaff,
8 | IPagination,
9 | IEpisodeFromList,
10 | ICommonConfig,
11 | IEpisodeResponse,
12 | INewsResponse,
13 | IForumConfig,
14 | IForum,
15 | IAnimeVideo,
16 | IAnimeVideosEpisode,
17 | IPicture,
18 | IAnimeStatistics,
19 | IMoreInfo,
20 | IRecommendation,
21 | IAnimeUserUpdate,
22 | IAnimeReview,
23 | IReviewConfig,
24 | IRelation,
25 | IAnimeSearchConfig,
26 | IExtendedPagination
27 | } from '../../types'
28 |
29 | export class Anime {
30 | #fetch: Fetch['get']
31 | /**
32 | * Constructs an instance of the [anime](https://docs.api.jikan.moe/#tag/anime) client
33 | * @param cacheOptions [Cache options](https://axios-cache-interceptor.js.org/config) for the client to make requests
34 | */
35 | constructor(cacheOptions?: CacheOptions) {
36 | this.#fetch = new Fetch(cacheOptions).get
37 | }
38 |
39 | /**
40 | * Gets anime data by its MyAnimeList ID
41 | * @param id MyAnimeList ID of the anime
42 | * @returns The data of the anime
43 | */
44 | public getAnimeById = async (id: string | number): Promise => {
45 | if (typeof id !== 'string' && typeof id !== 'number')
46 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
47 | return (await this.#fetch<{ data: IAnime }>(getURL('anime', `${id}`))).data
48 | }
49 |
50 | /**
51 | * Gets the full data of anime by its MyAnimeList ID
52 | * @param id MyAnimeList ID of the anime
53 | * @returns The full data of the anime
54 | */
55 | public getAnimeFullById = async (id: string | number): Promise => {
56 | if (typeof id !== 'string' && typeof id !== 'number')
57 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
58 | return (await this.#fetch<{ data: IAnimeFull }>(getURL('anime', `${id}`, 'full'))).data
59 | }
60 |
61 | /**
62 | * Gets the characters of the anime from its MyAnimeList ID
63 | * @param id MyAnimeList ID of the anime
64 | * @returns The characters of the given anime ID
65 | */
66 | public getAnimeCharacters = async (id: string | number): Promise => {
67 | if (typeof id !== 'string' && typeof id !== 'number')
68 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
69 | return (await this.#fetch<{ data: IAnimeCharacter[] }>(getURL('anime', `${id}`, 'characters'))).data
70 | }
71 |
72 | /**
73 | * Gets the staffs of the anime from its MyAnimeList ID
74 | * @param id MyAnimeList ID of the anime
75 | * @returns The staffs of given anime ID
76 | */
77 | public getAnimeStaff = async (id: string | number): Promise => {
78 | if (typeof id !== 'string' && typeof id !== 'number')
79 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
80 | return (await this.#fetch<{ data: IAnimeStaff[] }>(getURL('anime', `${id}`, 'staff'))).data
81 | }
82 |
83 | /**
84 | * Gets the episodes of the anime from its MyAnimeList ID
85 | * @param id MyAnimeList ID of the anime
86 | * @param config Config to make the request
87 | * @returns List of episodes with the pagination
88 | */
89 | public getAnimeEpisodes = async (
90 | id: string | number,
91 | config?: ICommonConfig
92 | ): Promise<{ data: IEpisodeFromList[]; pagination: IPagination }> => {
93 | if (typeof id !== 'string' && typeof id !== 'number')
94 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
95 | return await this.#fetch<{ data: IEpisodeFromList[]; pagination: IPagination }>(
96 | getURL('anime', `${id}`, 'episodes').concat(getQueryString(config || {}))
97 | )
98 | }
99 |
100 | /**
101 | * Gets the data of an anime's episode by its anime & episode ID
102 | * @param id MyAnimeList ID of the anime
103 | * @param episode_id Episode ID of the anime
104 | * @returns Data of the required episode
105 | */
106 | public getAnimeEpisodeById = async (
107 | id: string | number,
108 | episode_id: string | number
109 | ): Promise => {
110 | if (typeof id !== 'string' && typeof id !== 'number')
111 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
112 | if (typeof episode_id !== 'string' && typeof episode_id !== 'number')
113 | throw new TypeError(getTypeErrorMessage('episode_id', 'string or number', typeof id))
114 | return (await this.#fetch<{ data: IEpisodeResponse }>(getURL('anime', `${id}`, 'episodes', `${episode_id}`)))
115 | .data
116 | }
117 |
118 | /**
119 | * Gets the list of news related to a anime from its MyAnimeList ID
120 | * @param id MyAnimeList ID of the anime
121 | * @param config Config to make the request
122 | * @returns List of news related to the anime
123 | */
124 | public getAnimeNews = async (
125 | id: string | number,
126 | config?: ICommonConfig
127 | ): Promise<{ data: INewsResponse[]; pagination: IPagination }> => {
128 | if (typeof id !== 'string' && typeof id !== 'number')
129 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
130 | return await this.#fetch<{ data: INewsResponse[]; pagination: IPagination }>(
131 | getURL('anime', `${id}`, 'news').concat(getQueryString(config || {}))
132 | )
133 | }
134 |
135 | /**
136 | * Gets the forums related to an anime from its MyAnimeList ID
137 | * @param id MyAnimeList ID of the anime
138 | * @param config Config to make the request
139 | * @returns List of the forums related to the anime
140 | */
141 | public getAnimeForum = async (id: string | number, config?: IForumConfig): Promise => {
142 | if (typeof id !== 'string' && typeof id !== 'number')
143 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
144 | return (
145 | await this.#fetch<{ data: IForum[] }>(
146 | getURL('anime', `${id}`, 'forum').concat(getQueryString(config || {}))
147 | )
148 | ).data
149 | }
150 |
151 | /**
152 | * Gets the anime videos of the given MyAnimeList ID
153 | * @param id MyAnimeList ID of the anime
154 | * @returns Videos of the anime
155 | */
156 | public getAnimeVideos = async (id: string | number): Promise => {
157 | if (typeof id !== 'string' && typeof id !== 'number')
158 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
159 | return (await this.#fetch<{ data: IAnimeVideo }>(getURL('anime', `${id}`, 'videos'))).data
160 | }
161 |
162 | /**
163 | * Gets the episode videos of an anime from its MyAnimeList ID
164 | * @param id MyAnimeList ID of the anime
165 | * @param config Config to make the request
166 | * @returns Episode videos of the anime
167 | */
168 | public getAnimeVideosEpisodes = async (
169 | id: string | number,
170 | config?: ICommonConfig
171 | ): Promise<{ data: IAnimeVideosEpisode[]; pagination: IPagination }> => {
172 | if (typeof id !== 'string' && typeof id !== 'number')
173 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
174 | return await this.#fetch<{ data: IAnimeVideosEpisode[]; pagination: IPagination }>(
175 | getURL('anime', `${id}`, 'videos', 'episodes').concat(getQueryString(config || {}))
176 | )
177 | }
178 |
179 | /**
180 | * Gets the pictures of an anime from its MyAnimeList ID
181 | * @param id MyAnimeList ID of the anime
182 | * @returns List of images of the anime in different formats
183 | */
184 | public getAnimePictures = async (id: string | number): Promise => {
185 | if (typeof id !== 'string' && typeof id !== 'number')
186 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
187 | return (await this.#fetch<{ data: IPicture[] }>(getURL('anime', `${id}`, 'pictures'))).data
188 | }
189 |
190 | /**
191 | * Gets the statistics of an anime from its MyAnimeList ID
192 | * @param id MyAnimeList ID of the anime
193 | * @returns Stats of the anime
194 | */
195 | public getAnimeStatistics = async (id: string | number): Promise => {
196 | if (typeof id !== 'string' && typeof id !== 'number')
197 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
198 | return (await this.#fetch<{ data: IAnimeStatistics }>(getURL('anime', `${id}`, 'statistics'))).data
199 | }
200 |
201 | /**
202 | * Gets more info of an anime from its MyAnimeList ID
203 | * @param id MyAnimeList ID of the anime
204 | * @returns More info of the anime
205 | */
206 | public getAnimeMoreInfo = async (id: string | number): Promise => {
207 | if (typeof id !== 'string' && typeof id !== 'number')
208 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
209 | return (await this.#fetch<{ data: IMoreInfo }>(getURL('anime', `${id}`, 'moreinfo'))).data
210 | }
211 |
212 | /**
213 | * Gets recommendations of an anime from its MyAnimeList ID
214 | * @param id MyAnimeList ID of the anime
215 | * @returns List of recommenedations from the anime
216 | */
217 | public getAnimeRecommendations = async (id: string | number): Promise => {
218 | if (typeof id !== 'string' && typeof id !== 'number')
219 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
220 | return (await this.#fetch<{ data: IRecommendation[] }>(getURL('anime', `${id}`, 'recommendations'))).data
221 | }
222 |
223 | /**
224 | * Gets the list of user updates of an anime from its MyAnimeList ID
225 | * @param id MyAnimeList ID of the anime
226 | * @param config Config to make the request
227 | * @returns List of user updates of the anime
228 | */
229 | public getAnimeUserUpdates = async (
230 | id: string | number,
231 | config?: ICommonConfig
232 | ): Promise<{ data: IAnimeUserUpdate[]; pagination: IPagination }> => {
233 | if (typeof id !== 'string' && typeof id !== 'number')
234 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
235 | return await this.#fetch<{ data: IAnimeUserUpdate[]; pagination: IPagination }>(
236 | getURL('anime', `${id}`, 'userupdates').concat(getQueryString(config || {}))
237 | )
238 | }
239 |
240 | /**
241 | * Gets the reviews of an anime by its MyAnimeList ID
242 | * @param id MyAnimeList ID of the anime
243 | * @param config Config to make the request
244 | * @returns Reviews of the anime
245 | */
246 | public getAnimeReviews = async (
247 | id: string | number,
248 | config?: IReviewConfig
249 | ): Promise<{ pagination: IPagination; data: IAnimeReview[] }> => {
250 | if (typeof id !== 'string' && typeof id !== 'number')
251 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
252 | return await this.#fetch<{ pagination: IPagination; data: IAnimeReview[] }>(
253 | getURL('anime', `${id}`, 'reviews').concat(getQueryString(config || {}))
254 | )
255 | }
256 |
257 | /**
258 | * Gets the relations of an anime by its MyAnimeList ID
259 | * @param id MyAnimeList ID of the anime
260 | * @returns Relations of the anime
261 | */
262 | public getAnimeRelations = async (id: string | number): Promise => {
263 | if (typeof id !== 'string' && typeof id !== 'number')
264 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
265 | return (await this.#fetch<{ data: IRelation[] }>(getURL('anime', `${id}`, 'relations'))).data
266 | }
267 |
268 | /**
269 | * Gets the themes of an anime by its MyAnimeList ID
270 | * @param id MyAnimeList ID of the anime
271 | * @returns Themes of the anime
272 | */
273 | public getAnimeThemes = async (id: string | number): Promise => {
274 | if (typeof id !== 'string' && typeof id !== 'number')
275 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
276 | return (await this.#fetch<{ data: IAnime['themes'] }>(getURL('anime', `${id}`, 'themes'))).data
277 | }
278 |
279 | /**
280 | * Gets the external sites of an anime by its MyAnimeList ID
281 | * @param id MyAnimeList ID of the anime
282 | * @returns External sites of the anime
283 | */
284 | public getAnimeExternal = async (id: string | number): Promise => {
285 | if (typeof id !== 'string' && typeof id !== 'number')
286 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
287 | return (await this.#fetch<{ data: IAnimeFull['external'] }>(getURL('anime', `${id}`, 'external'))).data
288 | }
289 |
290 | /**
291 | * Gets streaming platforms of an anime from its MyAnimeList ID
292 | * @param id MyAnimeList ID of the anime
293 | * @returns Streaming platforms of the anime with their URLs
294 | */
295 | public getAnimeStreaming = async (id: string | number): Promise => {
296 | if (typeof id !== 'string' && typeof id !== 'number')
297 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
298 | return (await this.#fetch<{ data: IAnimeFull['streaming'] }>(getURL('anime', `${id}`, 'streaming'))).data
299 | }
300 |
301 | /**
302 | * Searches for anime in MyAnimeList
303 | * @param config Config to make the search
304 | * @returns Results of the search
305 | */
306 | public getAnimeSearch = async (
307 | config?: IAnimeSearchConfig
308 | ): Promise<{ data: IAnime[]; pagination: IExtendedPagination }> =>
309 | await this.#fetch<{ data: IAnime[]; pagination: IExtendedPagination }>(
310 | getURL('anime').concat(getQueryString(config || {}))
311 | )
312 | }
313 |
--------------------------------------------------------------------------------
/src/lib/jikan/characters.ts:
--------------------------------------------------------------------------------
1 | import { CacheOptions } from 'axios-cache-interceptor'
2 | import { ICharacter, ICharacterFull, ICommonPicture, ICharacterSearchConfig, IExtendedPagination } from '../../types'
3 | import { Fetch, getURL, getQueryString, getTypeErrorMessage } from '../../utils'
4 |
5 | export class Characters {
6 | #fetch: Fetch['get']
7 | /**
8 | * Constructs an instance of the [characters](https://docs.api.jikan.moe/#tag/characters) client
9 | * @param cacheOptions [Cache options](https://axios-cache-interceptor.js.org/config) for the client to make requests
10 | */
11 | constructor(cacheOptions?: CacheOptions) {
12 | this.#fetch = new Fetch(cacheOptions).get
13 | }
14 |
15 | /**
16 | * Gets the data of a character from its MyAnimeList ID
17 | * @param id MyAnimeList ID of the character
18 | * @returns The data of the character
19 | */
20 | public getCharacterById = async (id: string | number): Promise => {
21 | if (typeof id !== 'string' && typeof id !== 'number')
22 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
23 | return (await this.#fetch<{ data: ICharacter }>(getURL('characters', `${id}`))).data
24 | }
25 |
26 | /**
27 | * Gets the full data of a character from its MyAnimeList ID
28 | * @param id MyAnimeList ID of the character
29 | * @returns The full data of the character
30 | */
31 | public getCharacterFullById = async (id: string | number): Promise => {
32 | if (typeof id !== 'string' && typeof id !== 'number')
33 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
34 | return (await this.#fetch<{ data: ICharacterFull }>(getURL('characters', `${id}`, 'full'))).data
35 | }
36 |
37 | /**
38 | * Gets the list of anime appeared by a character from its MyAnimeList ID
39 | * @param id MyAnimeList ID of the character
40 | * @returns List of anime appeared by the character
41 | */
42 | public getCharacterAnime = async (id: string | number): Promise => {
43 | if (typeof id !== 'string' && typeof id !== 'number')
44 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
45 | return (await this.#fetch<{ data: ICharacterFull['anime'] }>(getURL('characters', `${id}`, 'anime'))).data
46 | }
47 |
48 | /**
49 | * Gets the list of manga appeared by a character from its MyAnimeList ID
50 | * @param id MyAnimeList ID of the character
51 | * @returns List of manga appeared by the character
52 | */
53 | public getCharacterManga = async (id: string | number): Promise => {
54 | if (typeof id !== 'string' && typeof id !== 'number')
55 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
56 | return (await this.#fetch<{ data: ICharacterFull['manga'] }>(getURL('characters', `${id}`, 'manga'))).data
57 | }
58 |
59 | /**
60 | * Gets the voice actors of a character from its MyAnimeList ID
61 | * @param id MyAnimeList ID of the character
62 | * @returns Voice actors of the character
63 | */
64 | public getCharacterVoiceActors = async (id: number | string): Promise => {
65 | if (typeof id !== 'string' && typeof id !== 'number')
66 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
67 | return (await this.#fetch<{ data: ICharacterFull['voices'] }>(getURL('characters', `${id}`, 'voices'))).data
68 | }
69 |
70 | /**
71 | * Gets the pictures of a character from its MyAnimeList ID
72 | * @param id MyAnimeList ID of the character
73 | * @returns Pictures of the character
74 | */
75 | public getCharacterPictures = async (id: string | number): Promise => {
76 | if (typeof id !== 'string' && typeof id !== 'number')
77 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
78 | return (await this.#fetch<{ data: ICommonPicture[] }>(getURL('characters', `${id}`, 'pictures'))).data
79 | }
80 |
81 | /**
82 | * Searches for a character in MyAnimeList
83 | * @param config Config to make the search
84 | * @returns The results of the search
85 | */
86 | public getCharactersSearch = async (
87 | config?: ICharacterSearchConfig
88 | ): Promise<{ data: ICharacter[]; pagination: IExtendedPagination }> =>
89 | await this.#fetch<{ data: ICharacter[]; pagination: IExtendedPagination }>(
90 | getURL('characters').concat(getQueryString(config || {}))
91 | )
92 | }
93 |
--------------------------------------------------------------------------------
/src/lib/jikan/clubs.ts:
--------------------------------------------------------------------------------
1 | import { CacheOptions } from 'axios-cache-interceptor'
2 | import { Fetch, getQueryString, getTypeErrorMessage, getURL } from '../../utils'
3 | import {
4 | IClub,
5 | IClubMember,
6 | IClubRelations,
7 | IClubSearchConfig,
8 | IClubStaff,
9 | ICommonConfig,
10 | IPagination
11 | } from '../../types'
12 |
13 | export class Clubs {
14 | #fetch: Fetch['get']
15 | /**
16 | * Constructs an instance of the [clubs](https://docs.api.jikan.moe/#tag/clubs) client
17 | * @param cacheOptions [Cache options](https://axios-cache-interceptor.js.org/config) for the client to make requests
18 | */
19 | constructor(cacheOptions?: CacheOptions) {
20 | this.#fetch = new Fetch(cacheOptions).get
21 | }
22 |
23 | /**
24 | * Gets the data of a MyAnimeList club from its ID
25 | * @param id MyAnimeList ID of the club
26 | * @returns The data of the club
27 | */
28 | public getClubsById = async (id: string | number): Promise => {
29 | if (typeof id !== 'string' && typeof id !== 'number')
30 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
31 | return (await this.#fetch<{ data: IClub }>(getURL('clubs', `${id}`))).data
32 | }
33 |
34 | /**
35 | * Gets the members of a MyAnimeList club from its id
36 | * @param id MyAnimelist ID of the club
37 | * @returns Members of the club
38 | */
39 | public getClubMembers = async (
40 | id: string | number,
41 | config?: ICommonConfig
42 | ): Promise<{ pagination: IPagination; data: IClubMember[] }> => {
43 | if (typeof id !== 'string' && typeof id !== 'number')
44 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
45 | return await this.#fetch<{ data: IClubMember[]; pagination: IPagination }>(
46 | getURL('clubs', `${id}`, 'members').concat(getQueryString(config || {}))
47 | )
48 | }
49 |
50 | /**
51 | * Gets the staffs of a MyAnimeList club from its ID
52 | * @param id MyAnimeList ID of the club
53 | * @returns Staffs of the club
54 | */
55 | public getClubStaff = async (id: string | number): Promise => {
56 | if (typeof id !== 'string' && typeof id !== 'number')
57 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
58 | return (await this.#fetch<{ data: IClubStaff[] }>(getURL('clubs', `${id}`, 'staff'))).data
59 | }
60 |
61 | /**
62 | * Gets the relations of a MyAnimeList club from its ID
63 | * @param id MyAnimeList ID of the club
64 | * @returns Relations of the club
65 | */
66 | public getClubRelations = async (id: string | number): Promise => {
67 | if (typeof id !== 'string' && typeof id !== 'number')
68 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
69 | return (await this.#fetch<{ data: IClubRelations }>(getURL('clubs', `${id}`, 'relations'))).data
70 | }
71 |
72 | /**
73 | * Searches for MyAnimeList clubs
74 | * @param config Config to make the search
75 | * @returns Search results of the clubs
76 | */
77 | public getClubsSearch = async (config?: IClubSearchConfig) =>
78 | await this.#fetch<{ data: IClub[]; pagination: IPagination }>(
79 | getURL('clubs').concat(getQueryString(config || {}))
80 | )
81 | }
82 |
--------------------------------------------------------------------------------
/src/lib/jikan/genres.ts:
--------------------------------------------------------------------------------
1 | import { CacheOptions } from 'axios-cache-interceptor'
2 | import { getURL, getQueryString, Fetch } from '../../utils'
3 | import { IGenreConfig, ICommonResource } from '../../types'
4 |
5 | export class Genres {
6 | #fetch: Fetch['get']
7 | /**
8 | * Constructs an instance of the [genres](https://docs.api.jikan.moe/#tag/genres) client
9 | * @param cacheOptions [Cache options](https://axios-cache-interceptor.js.org/config) for the client to make requests
10 | */
11 | constructor(cacheOptions?: CacheOptions) {
12 | this.#fetch = new Fetch(cacheOptions).get
13 | }
14 |
15 | /**
16 | * Gets the list of anime genres
17 | * @param config Config to make the request
18 | * @returns List of anime genres
19 | */
20 | public getAnimeGenres = async (config?: IGenreConfig): Promise =>
21 | (
22 | await this.#fetch<{ data: ICommonResource[] }>(
23 | getURL('genres', 'anime').concat(getQueryString(config || {}))
24 | )
25 | ).data
26 |
27 | /**
28 | * Gets the list of manga genres
29 | * @param config Config to make the request
30 | * @returns List of manga genres
31 | */
32 | public getMangaGenres = async (config?: IGenreConfig): Promise =>
33 | (
34 | await this.#fetch<{ data: ICommonResource[] }>(
35 | getURL('genres', 'manga').concat(getQueryString(config || {}))
36 | )
37 | ).data
38 | }
39 |
--------------------------------------------------------------------------------
/src/lib/jikan/index.ts:
--------------------------------------------------------------------------------
1 | export * from './anime'
2 | export * from './characters'
3 | export * from './clubs'
4 | export * from './genres'
5 | export * from './magazines'
6 | export * from './manga'
7 | export * from './people'
8 | export * from './reviews'
9 | export * from './schedules'
10 | export * from './producers'
11 | export * from './recommendations'
12 | export * from './seasons'
13 | export * from './users'
14 | export * from './watch'
15 | export * from './random'
16 | export * from './top'
17 |
--------------------------------------------------------------------------------
/src/lib/jikan/magazines.ts:
--------------------------------------------------------------------------------
1 | import { CacheOptions } from 'axios-cache-interceptor'
2 | import { Fetch, getURL, getQueryString } from '../../utils'
3 | import { ICommonResource, IMagazineConfig, IPagination } from '../../types'
4 |
5 | export class Magazines {
6 | #fetch: Fetch['get']
7 | /**
8 | * Constructs an instance of the [magazines](https://docs.api.jikan.moe/#tag/magazines) client
9 | * @param cacheOptions [Cache options](https://axios-cache-interceptor.js.org/config) for the client to make requests
10 | */
11 | constructor(cacheOptions?: CacheOptions) {
12 | this.#fetch = new Fetch(cacheOptions).get
13 | }
14 |
15 | /**
16 | * Searches for magazines in MyAnimeList
17 | * @param config Config to make the search
18 | * @returns Results of the magazine search
19 | */
20 | public getMagazines = async (
21 | config?: IMagazineConfig
22 | ): Promise<{ data: ICommonResource[]; pagination: IPagination }> =>
23 | await this.#fetch<{ data: ICommonResource[]; pagination: IPagination }>(
24 | getURL('magazines').concat(getQueryString(config || {}))
25 | )
26 | }
27 |
--------------------------------------------------------------------------------
/src/lib/jikan/manga.ts:
--------------------------------------------------------------------------------
1 | import { CacheOptions } from 'axios-cache-interceptor'
2 | import { Fetch, getURL, getTypeErrorMessage, getQueryString } from '../../utils'
3 | import {
4 | ICharacterFromSource,
5 | ICommonConfig,
6 | IForum,
7 | IManga,
8 | IMangaFull,
9 | IMangaStatistics,
10 | IMangaUserUpdate,
11 | IMoreInfo,
12 | INewsResponse,
13 | IPagination,
14 | IPicture,
15 | IRecommendation,
16 | IMangaReview,
17 | IReviewConfig,
18 | IExtendedPagination,
19 | IMangaSearchConfig,
20 | IForumConfig
21 | } from '../../types'
22 |
23 | export class Manga {
24 | #fetch: Fetch['get']
25 | /**
26 | * Constructs an instance of the [manga](https://docs.api.jikan.moe/#tag/manga) client
27 | * @param cacheOptions [Cache options](https://axios-cache-interceptor.js.org/config) for the client to make requests
28 | */
29 | constructor(cacheOptions?: CacheOptions) {
30 | this.#fetch = new Fetch(cacheOptions).get
31 | }
32 |
33 | /**
34 | * Gets the data of a manga from its MyAnimeList ID
35 | * @param id MyAnimeList ID of the manga
36 | * @returns The data of the manga
37 | */
38 | public getMangaById = async (id: string | number): Promise => {
39 | if (typeof id !== 'string' && typeof id !== 'number')
40 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
41 | return (await this.#fetch<{ data: IManga }>(getURL('manga', `${id}`))).data
42 | }
43 |
44 | /**
45 | * Gets the full data of a manga from its MyAnimeList ID
46 | * @param id MyAnimeList ID of the manga
47 | * @returns The full data of the manga
48 | */
49 | public getMangaFullById = async (id: string | number): Promise => {
50 | if (typeof id !== 'string' && typeof id !== 'number')
51 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
52 | return (await this.#fetch<{ data: IMangaFull }>(getURL('manga', `${id}`, 'full'))).data
53 | }
54 |
55 | /**
56 | * Gets the list of characters of a manga from its MyAnimeList ID
57 | * @param id MyAnimeList ID of the manga
58 | * @returns List of characters of the manga
59 | */
60 | public getMangaCharacters = async (id: string | number): Promise => {
61 | if (typeof id !== 'string' && typeof id !== 'number')
62 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
63 | return (await this.#fetch<{ data: ICharacterFromSource[] }>(getURL('manga', `${id}`, 'characters'))).data
64 | }
65 |
66 | /**
67 | * Gets the list of news related to a manga from its MyAnimeList ID
68 | * @param id MyAnimeList ID of the manga
69 | * @param config Config to make the request
70 | * @returns List of news related to the manga
71 | */
72 | public getMangaNews = async (
73 | id: string | number,
74 | config?: ICommonConfig
75 | ): Promise<{ data: INewsResponse[]; pagination: IPagination }> => {
76 | if (typeof id !== 'string' && typeof id !== 'number')
77 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
78 | return await this.#fetch<{ data: INewsResponse[]; pagination: IPagination }>(
79 | getURL('manga', `${id}`, 'news').concat(getQueryString(config || {}))
80 | )
81 | }
82 |
83 | /**
84 | * Gets the topics related to a manga from its MyAnimeList ID
85 | * @param id MyAnimeList ID of the manga
86 | * @returns List of topics related to the manga
87 | */
88 | public getMangaTopics = async (id: string | number, config?: IForumConfig): Promise => {
89 | if (typeof id !== 'string' && typeof id !== 'number')
90 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
91 | return (
92 | await this.#fetch<{ data: IForum[] }>(
93 | getURL('manga', `${id}`, 'forum').concat(getQueryString(config || {}))
94 | )
95 | ).data
96 | }
97 |
98 | /**
99 | * Gets the pictures of a manga from its MyAnimeList ID
100 | * @param id MyAnimeList ID of the manga
101 | * @returns Pictures of the manga
102 | */
103 | public getMangaPictures = async (id: string | number): Promise => {
104 | if (typeof id !== 'string' && typeof id !== 'number')
105 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
106 | return (await this.#fetch<{ data: IPicture[] }>(getURL('manga', `${id}`, 'pictures'))).data
107 | }
108 |
109 | /**
110 | * Gets the statistics of a manga from its MyAnimeList ID
111 | * @param id MyAnimeList ID of the manga
112 | * @returns Statistics of the manga
113 | */
114 | public getMangaStatistics = async (id: string | number): Promise => {
115 | if (typeof id !== 'string' && typeof id !== 'number')
116 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
117 | return (await this.#fetch<{ data: IMangaStatistics }>(getURL('manga', `${id}`, 'statistics'))).data
118 | }
119 |
120 | /**
121 | * Gets more info of a manga from its MyAnimeList ID
122 | * @param id MyAnimeList ID of the manga
123 | * @returns More info of the manga
124 | */
125 | public getMangaMoreInfo = async (id: string | number): Promise => {
126 | if (typeof id !== 'string' && typeof id !== 'number')
127 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
128 | return (await this.#fetch<{ data: IMoreInfo }>(getURL('manga', `${id}`, 'moreinfo'))).data
129 | }
130 |
131 | /**
132 | * Gets recommendations of a manga from its MyAnimeList ID
133 | * @param id MyAnimeList ID of the manga
134 | * @returns List of recommendations from the manga
135 | */
136 | public getMangaRecommendations = async (id: string | number): Promise => {
137 | if (typeof id !== 'string' && typeof id !== 'number')
138 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
139 | return (await this.#fetch<{ data: IRecommendation[] }>(getURL('manga', `${id}`, 'recommendations'))).data
140 | }
141 |
142 | /**
143 | * Gets user updates of a manga from its MyAnimeList ID
144 | * @param id MyAnimeList ID of the manga
145 | * @param config Config to make the request
146 | * @returns List of user updates of the manga
147 | */
148 | public getMangaUserUpdates = async (
149 | id: string | number,
150 | config?: ICommonConfig
151 | ): Promise<{ data: IMangaUserUpdate[]; pagination: IPagination }> => {
152 | if (typeof id !== 'string' && typeof id !== 'number')
153 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
154 | return await this.#fetch<{ data: IMangaUserUpdate[]; pagination: IPagination }>(
155 | getURL('manga', `${id}`, 'userupdates').concat(getQueryString(config || {}))
156 | )
157 | }
158 |
159 | /**
160 | * Gets the reviews of a manga from its MyAnimeList ID
161 | * @param id MyAnimeList ID of the manga
162 | * @param config Config to make the request
163 | * @returns
164 | */
165 | public getMangaReviews = async (
166 | id: string | number,
167 | config?: IReviewConfig
168 | ): Promise<{ data: IMangaReview[]; pagination: IPagination }> => {
169 | if (typeof id !== 'string' && typeof id !== 'number')
170 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
171 | return await this.#fetch<{ pagination: IPagination; data: IMangaReview[] }>(
172 | getURL('manga', `${id}`, 'reviews').concat(getQueryString(config || {}))
173 | )
174 | }
175 |
176 | /**
177 | * Gets relation of a manga from its MyAnimeList ID
178 | * @param id MyAnimeList ID of the manga
179 | * @returns Relations of the manga
180 | */
181 | public getMangaRelations = async (id: string | number): Promise => {
182 | if (typeof id !== 'string' && typeof id !== 'number')
183 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
184 | return (await this.#fetch<{ data: IMangaFull['relations'] }>(getURL('manga', `${id}`, 'relations'))).data
185 | }
186 |
187 | /**
188 | * Get external sites of a manga from its MyAnimeList ID
189 | * @param id MyAnimeList ID of the manga
190 | * @returns External sites of the manga
191 | */
192 | public getMangaExternal = async (id: string | number): Promise => {
193 | if (typeof id !== 'string' && typeof id !== 'number')
194 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
195 | return (await this.#fetch<{ data: IMangaFull['external'] }>(getURL('manga', `${id}`, 'external'))).data
196 | }
197 |
198 | /**
199 | * Searches for manga in MyAnimeList
200 | * @param config Config to make the search
201 | * @returns Search results of the manga
202 | */
203 | public getMangaSearch = async (
204 | config?: IMangaSearchConfig
205 | ): Promise<{ data: IManga[]; pagination: IExtendedPagination }> =>
206 | await this.#fetch<{ data: IManga[]; pagination: IExtendedPagination }>(
207 | getURL('manga').concat(getQueryString(config || {}))
208 | )
209 | }
210 |
--------------------------------------------------------------------------------
/src/lib/jikan/people.ts:
--------------------------------------------------------------------------------
1 | import { CacheOptions } from 'axios-cache-interceptor'
2 | import { ICommonPicture, IExtendedPagination, IPerson, IPersonFull, IPersonSearchConfig } from '../../types'
3 | import { Fetch, getQueryString, getTypeErrorMessage, getURL } from '../../utils'
4 |
5 | export class People {
6 | #fetch: Fetch['get']
7 | /**
8 | * Constructs an instance of the [people](https://docs.api.jikan.moe/#tag/people) client
9 | * @param cacheOptions [Cache options](https://axios-cache-interceptor.js.org/config) for the client to make requests
10 | */
11 | constructor(cacheOptions?: CacheOptions) {
12 | this.#fetch = new Fetch(cacheOptions).get
13 | }
14 |
15 | /**
16 | * Gets the data of a person from its MyAnimeList ID
17 | * @param id MyAnimeList ID of the person
18 | * @returns Data of the person
19 | */
20 | public getPersonById = async (id: string | number): Promise => {
21 | if (typeof id !== 'string' && typeof id !== 'number')
22 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
23 | return (await this.#fetch<{ data: IPerson }>(getURL('people', `${id}`))).data
24 | }
25 |
26 | /**
27 | * Gets the full data of a person from its MyAnimeList ID
28 | * @param id MyAnimeList ID of the person
29 | * @returns Full data of the person
30 | */
31 | public getPersonByIdFull = async (id: string | number): Promise => {
32 | if (typeof id !== 'string' && typeof id !== 'number')
33 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
34 | return (await this.#fetch<{ data: IPersonFull }>(getURL('people', `${id}`, 'full'))).data
35 | }
36 |
37 | /**
38 | * Gets list of the anime contributed by a person from its MyAnimeList ID
39 | * @param id MyAnimeList ID of the person
40 | * @returns List of anime contributed by the person
41 | */
42 | public getPersonAnime = async (id: string | number): Promise => {
43 | if (typeof id !== 'string' && typeof id !== 'number')
44 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
45 | return (await this.#fetch<{ data: IPersonFull['anime'] }>(getURL('people', `${id}`, 'anime'))).data
46 | }
47 |
48 | /**
49 | * Gets list of the voices featured by a person from its MyAnimeList ID
50 | * @param id MyAnimeList ID of the person
51 | * @returns List of voices featured by the person
52 | */
53 | public getPersonVoices = async (id: string | number): Promise => {
54 | if (typeof id !== 'string' && typeof id !== 'number')
55 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
56 | return (await this.#fetch<{ data: IPersonFull['voices'] }>(getURL('people', `${id}`, 'voices'))).data
57 | }
58 |
59 | /**
60 | * Gets list of the manga contributed by a person from its MyAnimeList ID
61 | * @param id MyAnimeList ID of the person
62 | * @returns List of manga contributed by the person
63 | */
64 | public getPersonManga = async (id: string | number): Promise => {
65 | if (typeof id !== 'string' && typeof id !== 'number')
66 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
67 | return (await this.#fetch<{ data: IPersonFull['manga'] }>(getURL('people', `${id}`, 'manga'))).data
68 | }
69 |
70 | /**
71 | * Gets the pictures of a person from its MyAnimeList ID
72 | * @param id MyAnimeList ID of the person
73 | * @returns Pictures of the person
74 | */
75 | public getPersonPictures = async (id: string | number): Promise => {
76 | if (typeof id !== 'string' && typeof id !== 'number')
77 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
78 | return (await this.#fetch<{ data: ICommonPicture[] }>(getURL('people', `${id}`, 'pictures'))).data
79 | }
80 |
81 | /**
82 | * Searches for person in MyAnimeList
83 | * @param config Config to make the search
84 | * @returns Results of the search
85 | */
86 | public getPeopleSearch = async (
87 | config?: IPersonSearchConfig
88 | ): Promise<{ pagination: IExtendedPagination; data: IPerson[] }> =>
89 | await this.#fetch<{ pagination: IExtendedPagination; data: IPerson[] }>(
90 | getURL('people').concat(getQueryString(config || {}))
91 | )
92 | }
93 |
--------------------------------------------------------------------------------
/src/lib/jikan/producers.ts:
--------------------------------------------------------------------------------
1 | import { CacheOptions } from 'axios-cache-interceptor'
2 | import { getURL, Fetch, getTypeErrorMessage, getQueryString } from '../../utils'
3 | import { IExtendedPagination, IProducer, IProducerFull, IProducerSearchConfig } from '../../types'
4 |
5 | export class Producers {
6 | #fetch: Fetch['get']
7 | /**
8 | * Constructs an instance of the [producers](https://docs.api.jikan.moe/#tag/producers) client
9 | * @param cacheOptions [Cache options](https://axios-cache-interceptor.js.org/config) for the client to make requests
10 | */
11 | constructor(cacheOptions?: CacheOptions) {
12 | this.#fetch = new Fetch(cacheOptions).get
13 | }
14 |
15 | /**
16 | * Gets the data of a producer from its MyAnimeList ID
17 | * @param id MyAnimeList ID of the producer
18 | * @returns Data of the producer
19 | */
20 | public getProducerById = async (id: string | number): Promise => {
21 | if (typeof id !== 'string' && typeof id !== 'number')
22 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
23 | return (await this.#fetch<{ data: IProducer }>(getURL('producers', `${id}`))).data
24 | }
25 |
26 | /**
27 | * Gets the full data of a producer from its MyAnimeList ID
28 | * @param id MyAnimeList ID of the producer
29 | * @returns Full data of the producer
30 | */
31 | public getProducerFullById = async (id: string | number): Promise => {
32 | if (typeof id !== 'string' && typeof id !== 'number')
33 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
34 | return (await this.#fetch<{ data: IProducerFull }>(getURL('producers', `${id}`, 'full'))).data
35 | }
36 |
37 | /**
38 | * Gets the external sites of a producer from its MyAnimeList ID
39 | * @param id MyAnimeList ID of the producer
40 | * @returns External sites of the producer
41 | */
42 | public getProducerExternal = async (id: string | number): Promise => {
43 | if (typeof id !== 'string' && typeof id !== 'number')
44 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
45 | return (await this.#fetch<{ data: IProducerFull['external'] }>(getURL('producers', `${id}`, 'external'))).data
46 | }
47 |
48 | /**
49 | * Searches for producers in MyAnimeList
50 | * @param config Config to make the request
51 | * @returns Result of the search
52 | */
53 | public getProducers = async (
54 | config?: IProducerSearchConfig
55 | ): Promise<{ pagination: IExtendedPagination; data: IProducer[] }> =>
56 | await this.#fetch<{ pagination: IExtendedPagination; data: IProducer[] }>(
57 | getURL('producers').concat(getQueryString(config || {}))
58 | )
59 | }
60 |
--------------------------------------------------------------------------------
/src/lib/jikan/random.ts:
--------------------------------------------------------------------------------
1 | import { CacheOptions } from 'axios-cache-interceptor'
2 | import { IAnime, ICharacter, IManga, IPerson, IUserProfile } from '../../types'
3 | import { Fetch, getURL } from '../../utils'
4 |
5 | export class Random {
6 | #fetch: Fetch['get']
7 | /**
8 | * Constructs an instance of the [random](https://docs.api.jikan.moe/#tag/random) client
9 | * @param cacheOptions [Cache options](https://axios-cache-interceptor.js.org/config) for the client to make requests
10 | */
11 | constructor(cacheOptions?: CacheOptions) {
12 | this.#fetch = new Fetch(cacheOptions).get
13 | }
14 |
15 | /**
16 | * Gets the data of a random anime
17 | * @returns Data of the random anime
18 | */
19 | public getRandomAnime = async (): Promise =>
20 | (await this.#fetch<{ data: IAnime }>(getURL('random', 'anime'))).data
21 |
22 | /**
23 | * Gets the data of a random manga
24 | * @returns Data of the random manga
25 | */
26 | public getRandomManga = async (): Promise =>
27 | (await this.#fetch<{ data: IManga }>(getURL('random', 'manga'))).data
28 |
29 | /**
30 | * Gets the data of a random character
31 | * @returns Data of the random character
32 | */
33 | public getRandomCharacters = async (): Promise =>
34 | (await this.#fetch<{ data: ICharacter }>(getURL('random', 'characters'))).data
35 |
36 | /**
37 | * Gets the data of a random person
38 | * @returns Data of the random person
39 | */
40 | public getRandomPeople = async (): Promise =>
41 | (await this.#fetch<{ data: IPerson }>(getURL('random', 'people'))).data
42 |
43 | /**
44 | * Gets the profile of a random MyAnimeList user
45 | * @returns Profile of the random MyAnimeList user
46 | */
47 | public getRandomUsers = async (): Promise =>
48 | (await this.#fetch<{ data: IUserProfile }>(getURL('random', 'users'))).data
49 | }
50 |
--------------------------------------------------------------------------------
/src/lib/jikan/recommendations.ts:
--------------------------------------------------------------------------------
1 | import { CacheOptions } from 'axios-cache-interceptor'
2 | import { Fetch, getQueryString, getURL } from '../../utils'
3 | import { ICommonConfig, IPagination, IRandomRecommendation } from '../../types'
4 |
5 | export class Recommendations {
6 | #fetch: Fetch['get']
7 | /**
8 | * Constructs an instance of the [recommendations](https://docs.api.jikan.moe/#tag/recommendations) client
9 | * @param cacheOptions [Cache options](https://axios-cache-interceptor.js.org/config) for the client to make requests
10 | */
11 | constructor(cacheOptions?: CacheOptions) {
12 | this.#fetch = new Fetch(cacheOptions).get
13 | }
14 |
15 | /**
16 | * Gets the list of recent anime recommendations in MyAnimeList
17 | * @param config Config to make the request
18 | * @returns List of recent anime recommendations in MyAnimeList
19 | */
20 | public getRecentAnimeRecommendations = async (
21 | config?: ICommonConfig
22 | ): Promise<{ data: IRandomRecommendation[]; pagination: IPagination }> =>
23 | await this.#fetch<{ data: IRandomRecommendation[]; pagination: IPagination }>(
24 | getURL('recommendations', 'anime').concat(getQueryString(config || {}))
25 | )
26 |
27 | /**
28 | * Gets the list of recent manga recommendations in MyAnimeList
29 | * @param config Config to make the request
30 | * @returns List of recent manga recommendations in MyAnimeList
31 | */
32 | public getRecentMangaRecommendations = async (
33 | config?: ICommonConfig
34 | ): Promise<{ data: IRandomRecommendation[]; pagination: IPagination }> =>
35 | await this.#fetch<{ data: IRandomRecommendation[]; pagination: IPagination }>(
36 | getURL('recommendations', 'manga').concat(getQueryString(config || {}))
37 | )
38 | }
39 |
--------------------------------------------------------------------------------
/src/lib/jikan/reviews.ts:
--------------------------------------------------------------------------------
1 | import { CacheOptions } from 'axios-cache-interceptor'
2 | import { IExtendedPagination, IReview, IReviewConfig } from '../../types'
3 | import { Fetch, getQueryString, getURL } from '../../utils'
4 |
5 | export class Reviews {
6 | #fetch: Fetch['get']
7 | /**
8 | * Constructs an instance of the [reviews](https://docs.api.jikan.moe/#tag/reviews) client
9 | * @param cacheOptions [Cache options](https://axios-cache-interceptor.js.org/config) for the client to make requests
10 | */
11 | constructor(cacheOptions?: CacheOptions) {
12 | this.#fetch = new Fetch(cacheOptions).get
13 | }
14 |
15 | /**
16 | * Gets the list of recent anime reviews in MyAnimeList
17 | * @param config Config to make the request
18 | * @returns List of recent anime reviews
19 | */
20 | public getRecentAnimeReviews = async (
21 | config?: IReviewConfig
22 | ): Promise<{ pagination: IExtendedPagination; data: IReview[] }> =>
23 | await this.#fetch<{ pagination: IExtendedPagination; data: IReview[] }>(
24 | getURL('reviews', 'anime').concat(getQueryString(config || {}))
25 | )
26 |
27 | /**
28 | * Gets the list of recent manga reviews in MyAnimeList
29 | * @param config Config to make the request
30 | * @returns List of recent manga reviews
31 | */
32 | public getRecentMangaReviews = async (
33 | config?: IReviewConfig
34 | ): Promise<{ pagination: IExtendedPagination; data: IReview[] }> =>
35 | await this.#fetch<{ pagination: IExtendedPagination; data: IReview[] }>(
36 | getURL('reviews', 'manga').concat(getQueryString(config || {}))
37 | )
38 | }
39 |
--------------------------------------------------------------------------------
/src/lib/jikan/schedules.ts:
--------------------------------------------------------------------------------
1 | import { CacheOptions } from 'axios-cache-interceptor'
2 | import { IScheduleConfig, IExtendedPagination, IAnime } from '../../types'
3 | import { getURL, Fetch, getQueryString } from '../../utils'
4 |
5 | export class Schedules {
6 | #fetch: Fetch['get']
7 | /**
8 | * Constructs an instance of the [schedules](https://docs.api.jikan.moe/#tag/schedules) client
9 | * @param cacheOptions [Cache options](https://axios-cache-interceptor.js.org/config) for the client to make requests
10 | */
11 | constructor(cacheOptions?: CacheOptions) {
12 | this.#fetch = new Fetch(cacheOptions).get
13 | }
14 |
15 | /**
16 | * Gets the list of anime schedules
17 | * @param config Config to make the request
18 | * @returns List of anime schedules
19 | */
20 | public getSchedules = async (
21 | config?: IScheduleConfig
22 | ): Promise<{ pagination: IExtendedPagination; data: IAnime[] }> =>
23 | await this.#fetch<{ pagination: IExtendedPagination; data: IAnime[] }>(
24 | getURL('schedules').concat(getQueryString(config || {}))
25 | )
26 | }
27 |
--------------------------------------------------------------------------------
/src/lib/jikan/seasons.ts:
--------------------------------------------------------------------------------
1 | import { CacheOptions } from 'axios-cache-interceptor'
2 | import { getTypeErrorMessage, getQueryString, getURL, Fetch } from '../../utils'
3 | import { ISeasonConfig, ISeasonList, ISeasonResponse } from '../../types'
4 | import { AnimeSeasons } from '../../constants'
5 |
6 | export class Seasons {
7 | #fetch: Fetch['get']
8 | /**
9 | * Constructs an instance of the [seasons](https://docs.api.jikan.moe/#tag/seasons) client
10 | * @param cacheOptions [Cache options](https://axios-cache-interceptor.js.org/config) for the client to make requests
11 | */
12 | constructor(cacheOptions?: CacheOptions) {
13 | this.#fetch = new Fetch(cacheOptions).get
14 | }
15 |
16 | /**
17 | * Gets the list of current season's anime
18 | * @param config Config to make the request
19 | * @returns List of current season's anime
20 | */
21 | public getSeasonNow = async (config?: ISeasonConfig): Promise =>
22 | await this.#fetch(
23 | getURL('seasons', 'now').concat(getQueryString(config || {}))
24 | )
25 |
26 | /**
27 | * Gets the list for given season's anime of the given year
28 | * @param year Year of the anime
29 | * @param season Season of the anime
30 | * @param config Config to make the request
31 | * @returns The list for given season's anime of the given year
32 | */
33 | public getSeason = async (
34 | year: number | string,
35 | season: AnimeSeasons,
36 | config?: ISeasonConfig
37 | ): Promise => {
38 | if (typeof year !== 'string' && typeof year !== 'number')
39 | throw new TypeError(getTypeErrorMessage('year', 'string or number', typeof year))
40 | if (typeof season !== 'string') throw new TypeError(getTypeErrorMessage('season', 'string', typeof season))
41 | return await this.#fetch(
42 | getURL('seasons', `${year}`, `${season}`).concat(getQueryString(config || {}))
43 | )
44 | }
45 |
46 | /**
47 | * Gets the list of available seasons of all the years
48 | * @returns List of available seasons of all the years
49 | */
50 | public getSeasonsList = async (): Promise =>
51 | (await this.#fetch<{ data: ISeasonList[] }>(getURL('seasons'))).data
52 |
53 | /**
54 | * Gets the list of upcoming anime of the current season
55 | * @param config Config to make the request
56 | * @returns The list of upcoming anime of the current season
57 | */
58 | public getSeasonUpcoming = async (config?: ISeasonConfig): Promise =>
59 | await this.#fetch(
60 | getURL('seasons', 'upcoming').concat(getQueryString(config || {}))
61 | )
62 | }
63 |
--------------------------------------------------------------------------------
/src/lib/jikan/top.ts:
--------------------------------------------------------------------------------
1 | import { CacheOptions } from 'axios-cache-interceptor'
2 | import {
3 | IAnime,
4 | IExtendedPagination,
5 | IManga,
6 | ITopAnimeConfig,
7 | ITopMangaConfig,
8 | ITopCommonConfig,
9 | IPerson,
10 | ICharacter,
11 | ITopReviewConfig,
12 | IMangaReview,
13 | IAnimeReview
14 | } from '../../types'
15 | import { Fetch, getQueryString, getURL } from '../../utils'
16 |
17 | export class Top {
18 | #fetch: Fetch['get']
19 | /**
20 | * Constructs an instance of the [top](https://docs.api.jikan.moe/#tag/top) client
21 | * @param cacheOptions [Cache options](https://axios-cache-interceptor.js.org/config) for the client to make requests
22 | */
23 | constructor(cacheOptions?: CacheOptions) {
24 | this.#fetch = new Fetch(cacheOptions).get
25 | }
26 |
27 | /**
28 | * Gets the top list of anime in MyAnimeList
29 | * @param config Config to get the top list
30 | * @returns The top list of the anime in MyAnimeList
31 | */
32 | public getTopAnime = async (
33 | config?: ITopAnimeConfig
34 | ): Promise<{ pagination: IExtendedPagination; data: IAnime[] }> =>
35 | await this.#fetch<{ pagination: IExtendedPagination; data: IAnime[] }>(
36 | getURL('top', 'anime').concat(getQueryString(config || {}))
37 | )
38 |
39 | /**
40 | * Gets the top list of manga in MyAnimeList
41 | * @param config Config to get the top list
42 | * @returns The top list of the manga in MyAnimeList
43 | */
44 | public getTopManga = async (
45 | config?: ITopMangaConfig
46 | ): Promise<{ pagination: IExtendedPagination; data: IManga[] }> =>
47 | await this.#fetch<{ pagination: IExtendedPagination; data: IManga[] }>(
48 | getURL('top', 'manga').concat(getQueryString(config || {}))
49 | )
50 |
51 | /**
52 | * Gets the top list of people in MyAnimeList
53 | * @param config Config to get the top list
54 | * @returns The top list of people in MyAnimeList
55 | */
56 | public getTopPeople = async (
57 | config?: ITopCommonConfig
58 | ): Promise<{ pagination: IExtendedPagination; data: IPerson[] }> =>
59 | await this.#fetch<{ pagination: IExtendedPagination; data: IPerson[] }>(
60 | getURL('top', 'people').concat(getQueryString(config || {}))
61 | )
62 |
63 | /**
64 | * Gets the top list of characters in MyAnimeList
65 | * @param config Config to get the top list
66 | * @returns The top list of characters in MyAnimeList
67 | */
68 | public getTopCharacters = async (
69 | config?: ITopCommonConfig
70 | ): Promise<{ pagination: IExtendedPagination; data: ICharacter[] }> =>
71 | await this.#fetch<{ pagination: IExtendedPagination; data: ICharacter[] }>(
72 | getURL('top', 'characters').concat(getQueryString(config || {}))
73 | )
74 |
75 | /**
76 | * Gets the top list of reviews in MyAnimeList
77 | * @param config Config to get the top list
78 | * @returns The top list of reviews in MyAnimeList
79 | */
80 | public getTopReviews = async (
81 | config?: ITopReviewConfig
82 | ): Promise<{ pagination: IExtendedPagination; data: (IAnimeReview | IMangaReview)[] }> =>
83 | await this.#fetch<{ pagination: IExtendedPagination; data: (IAnimeReview | IMangaReview)[] }>(
84 | getURL('top', 'reviews').concat(getQueryString(config || {}))
85 | )
86 | }
87 |
--------------------------------------------------------------------------------
/src/lib/jikan/users.ts:
--------------------------------------------------------------------------------
1 | import { CacheOptions } from 'axios-cache-interceptor'
2 | import {
3 | ICommonConfig,
4 | IPagination,
5 | IRandomRecommendation,
6 | IUserAbout,
7 | IUserBaseRes,
8 | IUserById,
9 | IUserClub,
10 | IUserFavorites,
11 | IUserFriend,
12 | IUserFull,
13 | IUserHistory,
14 | IUserHistoryConfig,
15 | IUserProfile,
16 | IUserReview,
17 | IUserSearchConfig,
18 | IUserUpdatesResponse
19 | } from '../../types'
20 | import { Fetch, getQueryString, getTypeErrorMessage, getURL } from '../../utils'
21 |
22 | export class Users {
23 | #fetch: Fetch['get']
24 | /**
25 | * Constructs an instance of the [users](https://docs.api.jikan.moe/#tag/users) client
26 | * @param cacheOptions [Cache options](https://axios-cache-interceptor.js.org/config) for the client to make requests
27 | */
28 | constructor(cacheOptions?: CacheOptions) {
29 | this.#fetch = new Fetch(cacheOptions).get
30 | }
31 |
32 | /**
33 | * Searches for user in MyAnimeList
34 | * @param config Config to make the search
35 | * @returns Results of the user search
36 | */
37 | public getUsersSearch = async (
38 | config?: IUserSearchConfig
39 | ): Promise<{ data: IUserBaseRes[]; pagination: IPagination }> =>
40 | await this.#fetch<{ data: IUserBaseRes[]; pagination: IPagination }>(
41 | getURL('users').concat(getQueryString(config || {}))
42 | )
43 |
44 | /**
45 | * Gets the URL & username of a user from its MyAnimeList ID
46 | * @param id MyAnimeList ID of the user
47 | * @returns The URL & username of the user
48 | */
49 | public getUserById = async (id: string | number): Promise => {
50 | if (typeof id !== 'string' && typeof id !== 'number')
51 | throw new TypeError(getTypeErrorMessage('id', 'string or number', typeof id))
52 | return (await this.#fetch<{ data: IUserById }>(getURL('users', 'userbyid', `${id}`))).data
53 | }
54 |
55 | /**
56 | * Gets the full profile of a user from its MyAnimeList username
57 | * @param username Username of the user
58 | * @returns The full profile of the user
59 | */
60 | public getUserFullProfile = async (username: string): Promise => {
61 | if (typeof username !== 'string')
62 | throw new TypeError(getTypeErrorMessage('username', 'string', typeof username))
63 | return (await this.#fetch<{ data: IUserFull }>(getURL('users', username, 'full'))).data
64 | }
65 |
66 | /**
67 | * Gets the profile of a user from its MyAnimeList username
68 | * @param username Username of the user
69 | * @returns The profile of the user
70 | */
71 | public getUserProfile = async (username: string): Promise => {
72 | if (typeof username !== 'string')
73 | throw new TypeError(getTypeErrorMessage('username', 'string', typeof username))
74 | return (await this.#fetch<{ data: IUserProfile }>(getURL('users', username))).data
75 | }
76 |
77 | /**
78 | * Gets the statistics of a user from its MyAnimeList username
79 | * @param username Username of the user
80 | * @returns The statistics of the user
81 | */
82 | public getUserStatistics = async (username: string): Promise => {
83 | if (typeof username !== 'string')
84 | throw new TypeError(getTypeErrorMessage('username', 'string', typeof username))
85 | return (await this.#fetch<{ data: IUserFull['statistics'] }>(getURL('users', username, 'statistics'))).data
86 | }
87 |
88 | /**
89 | * Gets the list of favorites of a user from its MyAnimeList username
90 | * @param username Username of the user
91 | * @returns List of favorites of the user
92 | */
93 | public getUserFavorites = async (username: string): Promise => {
94 | if (typeof username !== 'string')
95 | throw new TypeError(getTypeErrorMessage('username', 'string', typeof username))
96 | return (await this.#fetch<{ data: IUserFavorites }>(getURL('users', username, 'favorites'))).data
97 | }
98 |
99 | /**
100 | * Gets the updates of a user from its MyAnimeList username
101 | * @param username Username of the user
102 | * @returns The updates of the user
103 | */
104 | public getUserUpdates = async (username: string): Promise => {
105 | if (typeof username !== 'string')
106 | throw new TypeError(getTypeErrorMessage('username', 'string', typeof username))
107 | return (await this.#fetch<{ data: IUserUpdatesResponse }>(getURL('users', username, 'userupdates'))).data
108 | }
109 |
110 | /**
111 | * Gets the about of a user from its MyAnimeList username
112 | * @param username Username of the user
113 | * @returns About of the user
114 | */
115 | public getUserAbout = async (username: string): Promise => {
116 | if (typeof username !== 'string')
117 | throw new TypeError(getTypeErrorMessage('username', 'string', typeof username))
118 | return (await this.#fetch<{ data: IUserAbout }>(getURL('users', username, 'about'))).data
119 | }
120 |
121 | /**
122 | * Gets the list of histories of a user from its MyAnimeList username
123 | * @param username Username of the user
124 | * @param config Config to make the request
125 | * @returns The list of histories of the user
126 | */
127 | public getUserHistory = async (username: string, config?: IUserHistoryConfig): Promise => {
128 | if (typeof username !== 'string')
129 | throw new TypeError(getTypeErrorMessage('username', 'string', typeof username))
130 | return (
131 | await this.#fetch<{ data: IUserHistory[] }>(
132 | getURL('users', username, 'history').concat(getQueryString(config || {}))
133 | )
134 | ).data
135 | }
136 |
137 | /**
138 | * Gets the list of friends of a user from its MyAnimeList username
139 | * @param username Username of the user
140 | * @param config Config to make the request
141 | * @returns The list of friends of the user
142 | */
143 | public getUserFriends = async (
144 | username: string,
145 | config?: ICommonConfig
146 | ): Promise<{ data: IUserFriend[]; pagination: IPagination }> => {
147 | if (typeof username !== 'string')
148 | throw new TypeError(getTypeErrorMessage('username', 'string', typeof username))
149 | return await this.#fetch<{ data: IUserFriend[]; pagination: IPagination }>(
150 | getURL('users', username, 'friends').concat(getQueryString(config || {}))
151 | )
152 | }
153 |
154 | /**
155 | * Gets the list of reviews posted by a user from its MyAnimeList username
156 | * @param username Username of the user
157 | * @param config Config to make the request
158 | * @returns The list of reviews posted by the user
159 | */
160 | public getUserReviews = async (
161 | username: string,
162 | config?: ICommonConfig
163 | ): Promise<{ data: IUserReview[]; pagination: IPagination }> => {
164 | if (typeof username !== 'string')
165 | throw new TypeError(getTypeErrorMessage('username', 'string', typeof username))
166 | return await this.#fetch<{ data: IUserReview[]; pagination: IPagination }>(
167 | getURL('users', username, 'reviews').concat(getQueryString(config || {}))
168 | )
169 | }
170 |
171 | /**
172 | * Gets the list of recommendations posted by a user from its MyAnimeList username
173 | * @param username Username of the user
174 | * @param config Config to make the request
175 | * @returns The list of recommendations posted by the user
176 | */
177 | public getUserRecommendations = async (
178 | username: string,
179 | config?: ICommonConfig
180 | ): Promise<{ data: IRandomRecommendation[]; pagination: IPagination }> => {
181 | if (typeof username !== 'string')
182 | throw new TypeError(getTypeErrorMessage('username', 'string', typeof username))
183 | return await this.#fetch<{ data: IRandomRecommendation[]; pagination: IPagination }>(
184 | getURL('users', username, 'recommendations').concat(getQueryString(config || {}))
185 | )
186 | }
187 |
188 | /**
189 | * Gets the list of clubs of a user from its MyAnimeList username
190 | * @param username Username of the user
191 | * @param config Config to make the request
192 | * @returns The list of clubs of the user
193 | */
194 | public getUserClubs = async (
195 | username: string,
196 | config?: ICommonConfig
197 | ): Promise<{ data: IUserClub[]; pagination: IPagination }> => {
198 | if (typeof username !== 'string')
199 | throw new TypeError(getTypeErrorMessage('username', 'string', typeof username))
200 | return await this.#fetch<{ data: IUserClub[]; pagination: IPagination }>(
201 | getURL('users', username, 'clubs').concat(getQueryString(config || {}))
202 | )
203 | }
204 |
205 | /**
206 | * Gets the external sites of a user from its MyAnimeList username
207 | * @param username Username of the user
208 | * @returns The external sites of the user
209 | */
210 | public getUserExternal = async (username: string): Promise => {
211 | if (typeof username !== 'string')
212 | throw new TypeError(getTypeErrorMessage('username', 'string', typeof username))
213 | return (await this.#fetch<{ data: IUserFull['external'] }>(getURL('users', username, 'external'))).data
214 | }
215 | }
216 |
--------------------------------------------------------------------------------
/src/lib/jikan/watch.ts:
--------------------------------------------------------------------------------
1 | import { CacheOptions } from 'axios-cache-interceptor'
2 | import { IWatchEpisode, IWatchPromo } from '../../types'
3 | import { Fetch, getURL } from '../../utils'
4 |
5 | export class Watch {
6 | #fetch: Fetch['get']
7 | /**
8 | * Constructs an instance of the [watch](https://docs.api.jikan.moe/#tag/watch) client
9 | * @param cacheOptions [Cache options](https://axios-cache-interceptor.js.org/config) for the client to make requests
10 | */
11 | constructor(cacheOptions?: CacheOptions) {
12 | this.#fetch = new Fetch(cacheOptions).get
13 | }
14 |
15 | /**
16 | * Gets the list of metadata of watching recent anime episodes
17 | * @returns The list of metadata of watching recent anime episodes
18 | */
19 | public getWatchRecentEpisodes = async (): Promise =>
20 | (await this.#fetch<{ data: IWatchEpisode[] }>(getURL('watch', 'episodes'))).data
21 |
22 | /**
23 | * Gets the list of metadata of watching popular anime episodes
24 | * @returns The list of metadata of watching popular anime episodes
25 | */
26 | public getWatchPopularEpisodes = async (): Promise =>
27 | (await this.#fetch<{ data: IWatchEpisode[] }>(getURL('watch', 'episodes', 'popular'))).data
28 |
29 | /**
30 | * Gets the list of metadata of watching recent anime promos
31 | * @returnsThe list of metadata of watching recent anime promos
32 | */
33 | public getWatchRecentPromos = async (): Promise =>
34 | (await this.#fetch<{ data: IWatchPromo[] }>(getURL('watch', 'promos'))).data
35 |
36 | /**
37 | * Gets the list of metadata of watching popular anime promos
38 | * @returns The list of metadata of watching popular anime promos
39 | */
40 | public getWatchPopularPromos = async (): Promise =>
41 | (await this.#fetch<{ data: IWatchPromo[] }>(getURL('watch', 'promos', 'popular'))).data
42 | }
43 |
--------------------------------------------------------------------------------
/src/types/anime.ts:
--------------------------------------------------------------------------------
1 | import {
2 | IExtendedImageResponse,
3 | IResource,
4 | ITimeResponse,
5 | IExtendedResource,
6 | IResponse,
7 | ICharacterFromSource,
8 | IScore,
9 | IReview,
10 | ISearchConfig,
11 | IRelation,
12 | IUserUpdate,
13 | ICommonPicture
14 | } from '.'
15 | import { AnimeSeasons, AnimeStatus, AnimeTypes, Ratings } from '../'
16 |
17 | export interface IAnimeFull extends IAnime {
18 | /** Relations of the anime */
19 | relations: IRelation[]
20 | /** Theme for the anime */
21 | theme: {
22 | /** Openings of the anime */
23 | openings: string[]
24 | /** Endings of the anime */
25 | endings: string[]
26 | }
27 | /** External sites of the anime */
28 | external: IResource[]
29 | /** Streaming platforms of the anime with their site URL */
30 | streaming: IResource[]
31 | }
32 |
33 | export interface IAnimeReview extends IReview {
34 | /** Number of episodes watched by the reviewer */
35 | episodes_watched: number | null
36 | }
37 |
38 | export interface IAnime extends IResponse {
39 | /** Trailer of the anime (from YouTube) */
40 | trailer: IYouTube
41 | /** Type of the anime */
42 | type: AnimeTypes
43 | /** Source of the anime */
44 | source: string
45 | /** Total episodes of the anime */
46 | episodes: number
47 | /** Status of the anime */
48 | status: string
49 | /** Whether the anime is airing or not */
50 | airing: boolean
51 | /** Data of dates the anime aired */
52 | aired: ITimeResponse
53 | /** Duration of the anime */
54 | duration: string
55 | /** Rating of the anime */
56 | rating: string
57 | /** Season which the anime was aired */
58 | season: AnimeSeasons
59 | /** Year which anime was aired */
60 | year: number
61 | /** Broadcast data of the anime */
62 | broadcast: {
63 | /** The day which the anime is broadcasted */
64 | day: string
65 | /** The time which the anime is broadcasted */
66 | time: string
67 | /** The timezone of the time given */
68 | timezone: string
69 | /** Human readable string of the broadcast data */
70 | string: string
71 | }
72 | /** Producers of the anime */
73 | producers: IExtendedResource[]
74 | /** Licensors of the anime */
75 | licensors: IExtendedResource[]
76 | /** Stuidos of the anime */
77 | studios: IExtendedResource[]
78 | }
79 |
80 | export interface IAnimeSearchConfig extends ISearchConfig {
81 | /** Filter by anime type */
82 | type?: AnimeTypes
83 | /** Filter by rating */
84 | rating?: Ratings
85 | /** Filter by anime status */
86 | status?: AnimeStatus
87 | /** Get entries by order of a field */
88 | order_by?:
89 | | 'mal_id'
90 | | 'title'
91 | | 'start_date'
92 | | 'end_date'
93 | | 'episodes'
94 | | 'score'
95 | | 'scored_by'
96 | | 'rank'
97 | | 'popularity'
98 | | 'members'
99 | | 'favorites'
100 | }
101 |
102 | export interface IAnimeStaff {
103 | /** Data of the staff */
104 | person: {
105 | /** MAL ID of the staff */
106 | mal_id: number
107 | /** MAL URL to the staff */
108 | url: string
109 | /** Images of the staff */
110 | images: ICommonPicture
111 | /** Name of the staff */
112 | name: string
113 | }
114 | /** Positions of the staff in the source */
115 | positions: string[]
116 | }
117 |
118 | export interface IAnimeCharacter extends ICharacterFromSource {
119 | /** Favorites count of the character */
120 | favorites: number
121 | /** Voice actors of the character in the anime */
122 | voice_actors: IVoiceActor[]
123 | }
124 |
125 | export interface IAnimeUserUpdate extends IUserUpdate {
126 | /** Number of episodes seen */
127 | episodes_seen: number | null
128 | /** Total number of episodes to watch */
129 | episodes_total: number | null
130 | }
131 |
132 | export interface IYouTube {
133 | /** YouTube ID of the anime trailer video */
134 | youtube_id: string | null
135 | /** URL to the anime trailer video in YouTube */
136 | url: string | null
137 | /** YouTube embed URL to the anime trailer video */
138 | embed_url: string | null
139 | /** Image URLs of the video */
140 | images: IExtendedImageResponse
141 | }
142 |
143 | export interface IAnimeStatistics {
144 | /** Number of users who has been watching the anime */
145 | watching: number
146 | /** Number of users who have completed watching the anime */
147 | completed: number
148 | /** Number of users who have put the anime on hold */
149 | on_hold: number
150 | /** Number of users who have dropped the anime */
151 | dropped: number
152 | /** Number of users who have plans to watch the anime */
153 | plan_to_watch: number
154 | /** Total number of users who have set their status on the anime */
155 | total: number
156 | /** Scores of the anime given by the users */
157 | scores: IScore[]
158 | }
159 |
160 | export interface IEpisodeFromList extends IBaseEpisodeResponse {
161 | /** Score of the episode */
162 | score: number
163 | /** MAL forum URL of the episode */
164 | forum_url: string
165 | }
166 |
167 | export interface IAnimeVideo {
168 | /** Promos of the anime */
169 | promo: {
170 | /** Title of the promo */
171 | title: string
172 | /** Trailer of the promo */
173 | trailer: IYouTube
174 | }[]
175 | /** Episodes of the anime */
176 | episodes: IAnimeVideosEpisode[]
177 | /** Music videos of the anime */
178 | music_videos: {
179 | /** Title of the music video */
180 | title: string
181 | /** Video of the music video */
182 | video: IYouTube
183 | /** Data of the music video */
184 | meta: {
185 | /** Name of the music video */
186 | name: string
187 | /** Author of the music video */
188 | author: string
189 | }
190 | }[]
191 | }
192 |
193 | export interface IVoiceActor {
194 | /** Information of the voice actor */
195 | person: {
196 | /** MAL ID of the voice actor */
197 | mal_id: number
198 | /** MAL URL of the voice actor */
199 | url: string
200 | /** Images of the voice actor */
201 | images: ICommonPicture
202 | /** Name of the voice actor */
203 | name: string
204 | }
205 | /** Language of the voice actor */
206 | language: string
207 | }
208 |
209 | export interface IAnimeVideosEpisode {
210 | /** MAL ID of the anime's episode */
211 | mal_id: number
212 | /** Title of the episode */
213 | title: string
214 | /** Episode of the anime in human readable string */
215 | episode: string
216 | /** MAL URL of the episode */
217 | url: string
218 | /** Images of the episode */
219 | images: ICommonPicture
220 | }
221 |
222 | export interface IEpisodeResponse extends IBaseEpisodeResponse {
223 | /** Duration of the episode in seconds */
224 | duration: number
225 | /** Synopsis of the episode */
226 | synopsis: string | null
227 | }
228 |
229 | export interface IBaseEpisodeResponse {
230 | /** MAL ID of the episode */
231 | mal_id: number
232 | /** MAL URL of the episode */
233 | url: string
234 | /** Title of the episode */
235 | title: string
236 | /** Title of the episode in Japanses */
237 | title_japanese: string
238 | /** Title of the anime in Romanji */
239 | title_romanji: string
240 | /** The date which the episode aired */
241 | aired: string
242 | /** got no idea */
243 | filler: boolean
244 | /** got no idea */
245 | recap: false
246 | }
247 |
--------------------------------------------------------------------------------
/src/types/characters.ts:
--------------------------------------------------------------------------------
1 | import { IPicture, ISimpleImageResponse, IVoiceActor, ICommonConfig, ICommonPicture } from '.'
2 | import { Sorting } from '../constants'
3 |
4 | export interface ICharacterFull extends ICharacter {
5 | /** List of anime appeared by the character */
6 | anime: CharacterSource<'anime'>[]
7 | /** List of manga appeared by the character */
8 | manga: CharacterSource<'manga'>[]
9 | /** Voice actors of the character */
10 | voices: IVoiceActor[]
11 | }
12 |
13 | export interface ICharacter {
14 | /** MyAnimeList ID of the character */
15 | mal_id: number
16 | /** MyAnimeList URL of the character */
17 | url: string
18 | /** Images of the character */
19 | images: ICommonPicture & {
20 | /** Images of the character in the format webp */
21 | webp: ISimpleImageResponse
22 | }
23 | /** Name of the character */
24 | name: string
25 | /** Name of the character in Kanji */
26 | name_kanji: string
27 | /** Nicknames of the character */
28 | nicknames: string[]
29 | /** Favorites count of the character */
30 | favorites: number
31 | /** About (description) of the character */
32 | about: string | null
33 | }
34 |
35 | export interface ICharacterSearchConfig extends ICommonConfig {
36 | /** Search term */
37 | q?: string
38 | /** Number of results that should be limited per page */
39 | limit?: number
40 | /** Get entries by order of a field */
41 | order_by?: 'mal_id' | 'name' | 'favorites'
42 | /** Search query sort direction */
43 | sort?: Sorting
44 | /** Return entries starting with the given letter */
45 | letter?: string
46 | }
47 |
48 | export type CharacterSource = {
49 | [key in T]: {
50 | /** MAL ID of the source */
51 | mal_id: number
52 | /** MAL URL of the source */
53 | url: string
54 | /** Images of the source */
55 | images: IPicture
56 | /** Title of the source */
57 | title: string
58 | }
59 | } & {
60 | /** Role of the character in the source */
61 | role: string
62 | }
63 |
--------------------------------------------------------------------------------
/src/types/clubs.ts:
--------------------------------------------------------------------------------
1 | import { IExtendedResource, ICommonConfig, ICommonPicture } from '.'
2 | import { ClubAccess, ClubCategories, Sorting } from '../constants'
3 |
4 | export interface IClub {
5 | /** MyAnimeList ID of the club */
6 | mal_id: number
7 | /**MyAnimeList URL of the club */
8 | url: string
9 | /** Images of the club */
10 | images: ICommonPicture
11 | /** Name of the club */
12 | name: string
13 | /** Members count of the club */
14 | members: number
15 | /** Catrgory of the club */
16 | category: string
17 | /** Date which the club was created */
18 | created: string
19 | /** Access type of the club */
20 | access: ClubAccess
21 | }
22 |
23 | export interface IClubMember extends IClubStaff {
24 | /** Images of the member */
25 | images: ICommonPicture & {
26 | webp: {
27 | /** Image URL of the member in the format webp */
28 | image_url: string
29 | }
30 | }
31 | }
32 |
33 | export interface IClubStaff {
34 | /** Username of the user */
35 | username: string
36 | /** MAL URL of the user */
37 | url: string
38 | }
39 |
40 | export interface IClubRelations {
41 | /** List of anime relations for the club */
42 | anime: IExtendedResource[]
43 | /** List of manga relations for the club */
44 | manga: IExtendedResource[]
45 | /** List of character relations for the club */
46 | characters: IExtendedResource[]
47 | }
48 |
49 | export interface IClubSearchConfig extends ICommonConfig {
50 | /** Number of results that should be limited per page */
51 | limit?: number
52 | /** Search term */
53 | q?: string
54 | /** Access type of the club */
55 | type?: ClubAccess
56 | /** Get entries by order of a field */
57 | order_by?: 'mal_id' | 'name' | 'members_count' | 'created'
58 | /** Search query sort direction */
59 | sort?: Sorting
60 | /** Return entries starting with the given letter */
61 | letter?: string
62 | /** Filter the entries by a category */
63 | cattegories?: ClubCategories
64 | }
65 |
--------------------------------------------------------------------------------
/src/types/genres.ts:
--------------------------------------------------------------------------------
1 | import { GenresFilter } from '../constants'
2 |
3 | export interface IGenreConfig {
4 | /** Filters the entries of the genres */
5 | filter?: GenresFilter
6 | }
7 |
--------------------------------------------------------------------------------
/src/types/index.ts:
--------------------------------------------------------------------------------
1 | import { Sorting, Forums } from '../constants'
2 |
3 | export interface IJikanError {
4 | status: 400 | 404 | 405 | 429 | 500
5 | type: string
6 | message?: string
7 | error: string | null
8 | report_url?: string
9 | messages?: { [key in string]: string[] }
10 | }
11 |
12 | export type TMethods =
13 | | 'anime'
14 | | 'characters'
15 | | 'clubs'
16 | | 'genres'
17 | | 'magazines'
18 | | 'manga'
19 | | 'people'
20 | | 'producers'
21 | | 'random'
22 | | 'recommendations'
23 | | 'reviews'
24 | | 'schedules'
25 | | 'users'
26 | | 'seasons'
27 | | 'top'
28 | | 'watch'
29 |
30 | export interface IExtendedImageResponse extends IImageResponse {
31 | /** Image url in maximum size */
32 | maximum_image_url: string | null
33 | }
34 |
35 | export interface IImageResponse extends ISimpleImageResponse {
36 | /** Image url in large size */
37 | large_image_url: string | null
38 | }
39 |
40 | export interface ISimpleImageResponse {
41 | /** Image url in normal size */
42 | image_url: string | null
43 | /** Image url in small size */
44 | small_image_url: string | null
45 | }
46 |
47 | export interface IExtendedResource extends IResource {
48 | /** MAL ID of the resource */
49 | mal_id: number
50 | /** Type of the resource */
51 | type: string
52 | }
53 |
54 | export interface IUser {
55 | /** Username of the user */
56 | username: string
57 | /** MAL URL of the user */
58 | url: string
59 | /** Images of the user */
60 | images: ICommonPicture & {
61 | /** Image of the user in the format webp */
62 | webp: {
63 | /** Image URL of the user in the format webp */
64 | image_url: string | null
65 | }
66 | }
67 | }
68 |
69 | export interface ITitle {
70 | /** Type of the title */
71 | type: string
72 | /** Title of the source for the type given */
73 | title: string
74 | }
75 |
76 | export interface IResource {
77 | /** MAL URL to the resource */
78 | url: string
79 | /** Name of the resource */
80 | name: string
81 | }
82 |
83 | export interface ISearchConfig extends ICommonConfig {
84 | /** Filter out Adult entries */
85 | sfw?: boolean
86 | /** When its value is true, it will include the unapproved entries */
87 | unapproved?: boolean
88 | /** Number of results that should be limited per page */
89 | limit?: number
90 | /** Search term */
91 | q?: string
92 | /** Filters out the results that doesn't match the score (exact) */
93 | score?: number
94 | /** Sets the minimum score of the results */
95 | min_score?: number
96 | /** Sets the maximum score of the results */
97 | max_score?: number
98 | /** Filter by genre(s) IDs */
99 | genres?: number[]
100 | /** Exclude genre(s) by IDs */
101 | genres_exclude?: number[]
102 | /** Search query sort direction */
103 | sort?: Sorting
104 | /** Return entries starting with the given letter */
105 | letter?: string
106 | /** Filter by starting date. Format: YYYY-MM-DD. e.g `2022`, `2005-05`, `2005-01-01` */
107 | start_date?: string
108 | /** Filter by ending date. Format: YYYY-MM-DD. e.g `2022`, `2005-05`, `2005-01-01` */
109 | end_date?: string
110 | }
111 |
112 | export interface IResponse {
113 | /** MAL ID of the source */
114 | mal_id: number
115 | /** MAL URL of the source */
116 | url: string
117 | /** Image URLs of the source */
118 | images: IPicture
119 | /** Whether the source has aprroved entry or not */
120 | approved: boolean
121 | /** Data of titles (in different languages) for the source */
122 | titles: ITitle[]
123 | /** Title of the source */
124 | title: string
125 | /** Title of the source in English */
126 | title_english: string
127 | /** Title of the source in Japanese */
128 | title_japanese: string
129 | /** Synonyms of the title */
130 | title_synonyms: string[]
131 | /** Status of the source */
132 | status: string
133 | /** Score of the source (out of 10)*/
134 | score: number
135 | /** Number of people that scored the source */
136 | scored_by: number
137 | /** Rank of the source */
138 | rank: number
139 | /** Popularity rank of the source */
140 | populartiy: number
141 | /** Members count of the source */
142 | members: number
143 | /** Favorites count of the source */
144 | favortites: number
145 | /** Synopsis of the source */
146 | synopsis: string | null
147 | /** Background of the source */
148 | background: string | null
149 | /** Genres of the source */
150 | genres: IExtendedResource[]
151 | /** Explicit genres of the source */
152 | explicit_genres: IExtendedResource[]
153 | /** Themes of the source */
154 | themes: IExtendedResource[]
155 | /** Demographics of the source */
156 | demographics: IExtendedResource[]
157 | }
158 |
159 | export interface IRelation {
160 | /** Relation of the source */
161 | relation: string
162 | /** Entries of the relation */
163 | entry: IExtendedResource[]
164 | }
165 |
166 | export interface ITimeResponse {
167 | /** Starting date of the source*/
168 | from: string | null
169 | /** Ending date of the source */
170 | to: string | null
171 | /** Objects of days, month & year for the starting & ending dates of the source */
172 | prop: {
173 | /** Objects of day, month & year the source started */
174 | from: IDate
175 | /** Objects of day, month & year the source started */
176 | to: IDate
177 | }
178 | /** Human readable string of the starting & finishing dates */
179 | string: string | null
180 | }
181 |
182 | export interface IDate {
183 | /** The day it happened */
184 | day: number | null
185 | /** The month it happened */
186 | month: number | null
187 | /** The year it happened */
188 | year: number | null
189 | }
190 |
191 | export interface ICharacterFromSource {
192 | /** Data of the character */
193 | character: {
194 | /** MAL ID of the character */
195 | mal_id: number
196 | /** MAL URL to the character */
197 | url: string
198 | /** Images of the character in the formats jpg & webp */
199 | images: ICommonPicture & {
200 | /** Images of the character in the format webp */
201 | webp: ISimpleImageResponse
202 | }
203 | /** Name of the character */
204 | name: string
205 | }
206 | /** Role of the character in the source */
207 | role: string
208 | }
209 |
210 | export interface ICommonPicture {
211 | /** Image of the target in the format jpg */
212 | jpg: {
213 | /** Image URL of the target in the format jpg */
214 | image_url: string | null
215 | }
216 | }
217 |
218 | export interface IForumConfig {
219 | filter?: Forums
220 | }
221 |
222 | export interface IForum {
223 | /** MAL ID of the forum */
224 | mal_id: number
225 | /** MAL URL to the forum */
226 | url: string
227 | /** Title of the forum */
228 | title: string
229 | /** The date which the forum was posted */
230 | date: string
231 | /** Username of the forum creator */
232 | author_username: string
233 | /** Forum creator user's URL */
234 | author_url: string
235 | /** Number of comments for the forum */
236 | comments: number
237 | /** Last comment of the forum */
238 | last_comment: {
239 | /** URL to the latest comment of the forum */
240 | url: string
241 | /** Name of the user */
242 | author_username: string
243 | /** URL of the user */
244 | author_url: string
245 | /** The date which the user commented */
246 | date: string
247 | }
248 | }
249 |
250 | export interface IReviewConfig extends ICommonConfig {
251 | /** Any reviews left during an ongoing anime/manga, those reviews are tagged as preliminary. */
252 | preliminary?: boolean
253 | /** Any reviews that are tagged as a spoiler. */
254 | spoiler?: boolean
255 | }
256 |
257 | export interface IUserUpdate {
258 | /** Data of the user */
259 | user: IUser
260 | /** Score given by the user */
261 | score: number | null
262 | /** Status for the user in the source*/
263 | status: string | null
264 | /** Date which the update was done */
265 | date: string
266 | }
267 |
268 | export interface IRecommendation {
269 | /** Data of the recommended source */
270 | entry: {
271 | /** MAL ID of the source */
272 | mal_id: number
273 | /** MAL URL of the source */
274 | url: string
275 | /** Images of the source in the formats webp & jpg */
276 | images: IPicture
277 | /** Title of the source */
278 | title: string
279 | }
280 | /** URL of the recommendation */
281 | url: string
282 | /** Votes of the recommendated entry */
283 | votes: number
284 | }
285 |
286 | export interface IReview {
287 | /** MAL ID of the review */
288 | mal_id: number
289 | /** URL of the review */
290 | url: string
291 | /** Type of the review */
292 | type: 'anime' | 'manga'
293 | /** Reactions of the review */
294 | reactions: {
295 | /** Total number of users that reacted the review */
296 | overall: number
297 | /** Number of users who reacted the review as nice */
298 | nice: number
299 | /** Number of users who loved the review */
300 | love_it: number
301 | /** Number of users who found the review funny */
302 | funny: number
303 | /** Number of users who found the review confusing */
304 | confusing: number
305 | /** Number of users who found the review informative */
306 | informative: number
307 | /** Number of users who found the review as well written */
308 | well_written: number
309 | /** Number of users who found the review creative */
310 | creative: number
311 | }
312 | /** Date which the review was posted */
313 | date: string
314 | /** Message of the review */
315 | review: string
316 | /** Score given by the reviewer */
317 | score: number
318 | /** Tags of the review */
319 | tags: string[]
320 | /** Whether it is a spoiler review or not */
321 | is_spoiler: boolean
322 | /** Whether it is a preliminary review or not */
323 | is_preliminary: boolean
324 | /** Data of the reviewer */
325 | user: IUser
326 | }
327 |
328 | export interface ICommonConfig {
329 | /** Page of the results to go */
330 | page?: number
331 | }
332 |
333 | export interface IPicture {
334 | /** Images of the source in jpg format */
335 | jpg: IImageResponse
336 | /** Images of the source in webp format */
337 | webp: IImageResponse
338 | }
339 |
340 | export interface IScore {
341 | /** Ratable score of the source */
342 | score: number
343 | /** Votes of the score given */
344 | votes: number
345 | /** Percentage to the total number of votes from all the total ratable scores */
346 | percentage: number
347 | }
348 |
349 | export interface IMoreInfo {
350 | /** Just some additional info of the source */
351 | moreinfo: string | null
352 | }
353 |
354 | export interface ICommonResource extends IResource {
355 | /** MyAnimeList ID of the topic */
356 | mal_id: number
357 | /** Total count of the sources for the topic */
358 | count: number
359 | }
360 |
361 | export interface INewsResponse {
362 | /** MAL ID of the news article */
363 | mal_id: number
364 | /** MAL URL of the news article */
365 | url: string
366 | /** Title of the news article */
367 | title: string
368 | /** Date of the article uploaded */
369 | date: string
370 | /** Username of the news article's author */
371 | author_username: string
372 | /** URL of the news article's author */
373 | author_url: string
374 | /** Images of the news article */
375 | images: ICommonPicture
376 | /** Forum URL of the news article */
377 | forum_url: string
378 | /** Number of comments in the news article */
379 | comments: number
380 | /** Just a short content of the news article */
381 | excerpt: string
382 | }
383 |
384 | export * from './pagination'
385 | export * from './anime'
386 | export * from './characters'
387 | export * from './clubs'
388 | export * from './genres'
389 | export * from './magazines'
390 | export * from './manga'
391 | export * from './people'
392 | export * from './schedules'
393 | export * from './producers'
394 | export * from './recommendations'
395 | export * from './seasons'
396 | export * from './users'
397 | export * from './watch'
398 | export * from './top'
399 |
--------------------------------------------------------------------------------
/src/types/magazines.ts:
--------------------------------------------------------------------------------
1 | import { ICommonConfig } from '.'
2 | import { Sorting } from '../constants'
3 |
4 | export interface IMagazineConfig extends ICommonConfig {
5 | /** Number of results that should be limited per page */
6 | limit?: number
7 | /** Search term */
8 | q?: string
9 | /** Get entries by order of a field */
10 | order_by?: 'mal_id' | 'name' | 'count'
11 | /** Search query sort direction */
12 | sort?: Sorting
13 | /** Return entries starting with the given letter */
14 | letter?: string
15 | }
16 |
--------------------------------------------------------------------------------
/src/types/manga.ts:
--------------------------------------------------------------------------------
1 | import {
2 | IExtendedResource,
3 | IRelation,
4 | IResponse,
5 | ITimeResponse,
6 | IResource,
7 | IScore,
8 | IReview,
9 | IUserUpdate,
10 | ISearchConfig
11 | } from '.'
12 | import { MangaStatus, MangaTypes } from '../constants'
13 |
14 | export interface IMangaStatistics {
15 | /** Count of users who have been reading the manga */
16 | reading: number
17 | /** Count of users who have completed reading the manga */
18 | completed: number
19 | /** Count of users who have put the manga on hold */
20 | on_hold: number
21 | /** Count of users who have dropped the manga */
22 | dropped: number
23 | /** Count of users who have plans to read the manga */
24 | plan_to_read: number
25 | /** Total number of users who have set their status on the manga */
26 | total: number
27 | /** Scores of the manga given by the users */
28 | scores: IScore[]
29 | }
30 |
31 | export interface IMangaReview extends IReview {
32 | /** Number of chapters read by the reviewer */
33 | chapters_read: number | null
34 | }
35 |
36 | export interface IMangaUserUpdate extends IUserUpdate {
37 | /** Number of volumes read by the user */
38 | volumes_read: number | null
39 | /** Total volumes of the manga to read */
40 | volumes_total: number | null
41 | /** Number of chapters read by the user */
42 | chapters_read: number | null
43 | /** Total chapters of the manga to read */
44 | chapters_total: number | null
45 | }
46 |
47 | export interface IMangaFull extends IManga {
48 | /** Relations of the manga */
49 | relations: IRelation[]
50 | /** External sites of the manga */
51 | external: IResource[]
52 | }
53 |
54 | export interface IManga extends IResponse {
55 | /** Type of the manga */
56 | type: keyof typeof MangaTypes
57 | /** Chapters count of the manga */
58 | chapters: number | null
59 | /** Volumes count of the manga */
60 | volumes: number | null
61 | /** Whether the manga is publishing or not */
62 | publishing: boolean
63 | /** Data of dates the manga published */
64 | published: ITimeResponse
65 | /** Authors of the manga */
66 | authors: IExtendedResource[]
67 | /** Serializations of the manga */
68 | serializations: IExtendedResource[]
69 | }
70 |
71 | export interface IMangaSearchConfig extends ISearchConfig {
72 | /** Type of the manga */
73 | type?: MangaTypes
74 | /** Status of the manga */
75 | status?: MangaStatus
76 | /** Get entries by order of a field */
77 | order_by?:
78 | | 'mal_id'
79 | | 'title'
80 | | 'start_date'
81 | | 'end_date'
82 | | 'chapters'
83 | | 'volumes'
84 | | 'score'
85 | | 'scored_by'
86 | | 'rank'
87 | | 'popularity'
88 | | 'members'
89 | | 'favorites'
90 | /** Filter by magazine(s) IDs */
91 | magazines?: number[]
92 | }
93 |
--------------------------------------------------------------------------------
/src/types/pagination.ts:
--------------------------------------------------------------------------------
1 | export interface IPagination {
2 | /** Last visible page of the data */
3 | last_visible_page: number
4 | /** This value will be true if a next page exists for the data & vice versa */
5 | has_next_page: boolean
6 | }
7 |
8 | export interface IExtendedPagination extends IPagination {
9 | /** Current page of the data */
10 | current_page: number
11 | /** Data of the pagination */
12 | items: IItems
13 | }
14 |
15 | export interface IItems {
16 | /** Number of results shown in the data */
17 | count: number
18 | /** Total number of all the results */
19 | total: number
20 | /** Number of data per page */
21 | per_page: number
22 | }
23 |
--------------------------------------------------------------------------------
/src/types/people.ts:
--------------------------------------------------------------------------------
1 | import { ICharacterFromSource, ICommonConfig, ICommonPicture } from '.'
2 | import { CharacterSource } from './characters'
3 | import { Sorting } from '../constants'
4 |
5 | export interface IPersonFull extends IPerson {
6 | /** List of anime contributed by the person */
7 | anime: PersonSource<'anime'>[]
8 | /** List of manga contributed by the person */
9 | manga: PersonSource<'manga'>[]
10 | /** List of voices featured by the person */
11 | voices: IPersonVoice[]
12 | }
13 |
14 | export interface IPerson {
15 | /** MAL ID of the person */
16 | mal_id: number
17 | /** MAL URL of the person */
18 | url: string
19 | /** Website URL of the person */
20 | website_url: string | null
21 | /** Images of the person */
22 | images: ICommonPicture
23 | /** Name of the person */
24 | name: string
25 | /** Given name of the person */
26 | given_name: string
27 | /** Alternate names of the person */
28 | alternate_names: string[]
29 | /** Birthday of the character in string */
30 | birthday: string
31 | /** Favorites count of the person */
32 | favorites: number
33 | /** About (description) of the person */
34 | about: string
35 | }
36 |
37 | export interface IPersonVoice extends CharacterSource<'anime'> {
38 | /** Data of the character */
39 | character: ICharacterFromSource
40 | }
41 |
42 | export interface IPersonSearchConfig extends ICommonConfig {
43 | /** Search term */
44 | q?: string
45 | /** Number of results that should be limited per page */
46 | limit?: number
47 | /** Get entries by order of a field */
48 | order_by?: 'mal_id' | 'name' | 'favorites' | 'birthday'
49 | /** Search query sort direction */
50 | sort?: Sorting
51 | /** Return entries starting with the given letter */
52 | letter?: string
53 | }
54 |
55 | export type PersonSource = Omit, 'role'> & {
56 | /** Position of the person in the source */
57 | position: string
58 | }
59 |
--------------------------------------------------------------------------------
/src/types/producers.ts:
--------------------------------------------------------------------------------
1 | import { ICommonConfig, ICommonPicture, IResource, ITitle } from '.'
2 | import { Sorting } from '../constants'
3 |
4 | export interface IProducerFull extends IProducer {
5 | /** External sites of the producer */
6 | external: IResource[]
7 | }
8 |
9 | export interface IProducer {
10 | /** MAL ID of the producer */
11 | mal_id: number
12 | /** MAL URL of the producer */
13 | url: string
14 | /** Titles of the producer */
15 | titles: ITitle[]
16 | /** Images of the producer */
17 | images: ICommonPicture
18 | /** Favortites count of the producer in MAL */
19 | favortites: number
20 | /** Count of works done by the producer */
21 | count: number
22 | /** Date in string which the producer was established */
23 | established: string
24 | /** About (info) of the producer */
25 | about: string
26 | }
27 |
28 | export interface IProducerSearchConfig extends ICommonConfig {
29 | /** Search term */
30 | q?: string
31 | /** Number of results that should be limited per page */
32 | limit?: number
33 | /** Return entries starting with the given letter */
34 | letter?: string
35 | /** Search direction */
36 | sort?: Sorting
37 | /** Return entries by order of a field */
38 | order_by?: 'mal_id' | 'count' | 'favorites' | 'established'
39 | }
40 |
--------------------------------------------------------------------------------
/src/types/recommendations.ts:
--------------------------------------------------------------------------------
1 | import { IClubStaff, IRecommendation } from '.'
2 |
3 | export interface IRandomRecommendation {
4 | /** MAL IDs of the compared sources for the recommendation separated by a "-" */
5 | mal_id: string
6 | /** Entries of the recommendations */
7 | entry: IRecommendation['entry'][]
8 | /** Content of the recommendation post */
9 | content: string
10 | /** Date which the recommendation post was created */
11 | date: string
12 | /** Data of user who created the recommendation */
13 | user: IClubStaff
14 | }
15 |
--------------------------------------------------------------------------------
/src/types/schedules.ts:
--------------------------------------------------------------------------------
1 | import { ICommonConfig } from '.'
2 | import { Days } from '../constants'
3 |
4 | export interface IScheduleConfig extends ICommonConfig {
5 | /** Filter the entries by day */
6 | filter?: Days
7 | /** When the value is true, it will return only Kid entries */
8 | kids?: boolean
9 | /** Filter out Adult entries */
10 | sfw?: boolean
11 | /** When its value is true, it will include the unapproved entries */
12 | unapproved?: boolean
13 | /** Limit of the entries per page */
14 | limit?: number
15 | }
16 |
--------------------------------------------------------------------------------
/src/types/seasons.ts:
--------------------------------------------------------------------------------
1 | import { IAnime, ICommonConfig, IExtendedPagination } from '.'
2 | import { AnimeSeasons, AnimeTypes } from '../constants'
3 |
4 | export interface ISeasonResponse {
5 | /** Data of the anime */
6 | data: IAnime[]
7 | /** Pagination of the results */
8 | pagination: IExtendedPagination
9 | }
10 |
11 | export interface ISeasonConfig extends ICommonConfig {
12 | /** Filter by anime type */
13 | filter?: AnimeTypes
14 | /** Filter out Adult entries */
15 | sfw?: boolean
16 | /** When its value is true, it will include the unapproved entries */
17 | unapproved?: boolean
18 | /** Number of results that should be limited per page */
19 | limit?: number
20 | }
21 |
22 | export interface ISeasonList {
23 | /** Year of the list */
24 | year: number
25 | /** Available seasons of the list */
26 | seasons: AnimeSeasons[]
27 | }
28 |
--------------------------------------------------------------------------------
/src/types/top.ts:
--------------------------------------------------------------------------------
1 | import { ICommonConfig, IReviewConfig } from '.'
2 | import { AnimeFilters, AnimeTypes, MangaFilters, MangaTypes, Ratings } from '../constants'
3 |
4 | export interface ITopAnimeConfig extends ITopCommonConfig {
5 | /** Filter the entries by an anime type */
6 | type?: AnimeTypes
7 | /** Filter the top list */
8 | filter?: AnimeFilters
9 | /** Filter entries by the ratings */
10 | rating?: Ratings
11 | /** Filter out adult entries */
12 | sfw?: boolean
13 | }
14 |
15 | export interface ITopMangaConfig extends ITopCommonConfig {
16 | /** Filter the entries by a manga type */
17 | type?: MangaTypes
18 | /** Filter the top list */
19 | filter?: MangaFilters
20 | }
21 |
22 | export interface ITopCommonConfig extends ICommonConfig {
23 | /** Number of results that should be limited per page */
24 | limit?: number
25 | }
26 |
27 | export interface ITopReviewConfig extends IReviewConfig {
28 | /** Filter the reviews by type */
29 | type: 'anime' | 'manga'
30 | }
31 |
--------------------------------------------------------------------------------
/src/types/users.ts:
--------------------------------------------------------------------------------
1 | import {
2 | ICommonPicture,
3 | IPicture,
4 | IResource,
5 | IUser,
6 | IRecommendation,
7 | IAnimeUserUpdate,
8 | IMangaUserUpdate,
9 | IExtendedResource,
10 | IReview,
11 | ICommonConfig
12 | } from '.'
13 | import { AnimeTypes, Genders, MangaTypes } from '../constants'
14 |
15 | export interface IUserFavorites {
16 | /** List of favorites of the user for anime */
17 | anime: (IUserSource & {
18 | /** Type of the anime */
19 | type: AnimeTypes
20 | })[]
21 | /** List of favorites of the user for anime */
22 | manga: (IUserSource & {
23 | /** Type of the manga */
24 | type: MangaTypes
25 | })[]
26 | /** List of favorites of the user for characters */
27 | characters: ISourceForUser[]
28 | /** List of favorites of the user for people */
29 | people: ISourceForUser[]
30 | }
31 |
32 | export interface IUserFull extends IUserProfile {
33 | /** Statistics of user for anime & manga */
34 | statistics: {
35 | /** Statistics of anime for the user */
36 | anime: IUserStatistics & {
37 | /** Number of days watched by the user for anime */
38 | days_watched: number
39 | /** Count of anime the user is currently watching */
40 | watching: number
41 | /** Count of anime the user is planning to watch */
42 | plan_to_watch: number
43 | /** Count of anime rewatched by the user */
44 | rewatched: number
45 | /** Count of total anime episodes watched by the user */
46 | episodes_watched: number
47 | }
48 | /** Statistics of manga for the user */
49 | manga: IUserStatistics & {
50 | /** Number of days read by the user for manga */
51 | days_read: number
52 | /** Count of manga reading by the user */
53 | reading: number
54 | /** Count of manga the user is planning to read */
55 | plan_to_read: number
56 | /** Count of manga reread by the user */
57 | reread: number
58 | /** Count of manga chapters read by the user */
59 | chapters_read: number
60 | /** Count of manga volumes read by the user */
61 | volumes_read: number
62 | }
63 | }
64 | /** External sites of the user */
65 | external: IResource[]
66 | }
67 |
68 | export interface IUserProfile extends IUserBaseRes {
69 | /** Gender of the user */
70 | gender: Genders | null
71 | /** Birthday of the user */
72 | birthday: string
73 | /** Location of the user */
74 | location: string
75 | /** Date & time in string which the user joined MAL */
76 | joined: string
77 | }
78 |
79 | export interface IUserBaseRes extends IUser {
80 | /** Date & time in string which the user was last online in MAL */
81 | last_online: string
82 | }
83 |
84 | export interface IUserStatistics {
85 | /** Mean score of the user for a source */
86 | mean_score: number
87 | /** Count of completed sources by the user */
88 | completed: number
89 | /** Count of sources put by the user on hold */
90 | on_hold: number
91 | /** Count of dropped sources by the user */
92 | dropped: number
93 | /** Total count of the sources which the user put a status */
94 | total_entries: number
95 | }
96 |
97 | export interface IUserById extends Omit {}
98 |
99 | export interface IUserUpdatesResponse {
100 | /** Anime updates of the user */
101 | anime: IAnimeUserUpdates[]
102 | /** Manga updates of the user */
103 | manga: IMangaUserUpdates[]
104 | }
105 |
106 | export interface IAnimeUserUpdates extends Omit {
107 | /** Entry (data) of the anime */
108 | entry: IRecommendation['entry']
109 | }
110 |
111 | export interface IMangaUserUpdates extends Omit {
112 | /** Entry (data) of the manga */
113 | entry: IRecommendation['entry']
114 | }
115 |
116 | export interface IUserAbout {
117 | /** About (info) of the user */
118 | about: string
119 | }
120 |
121 | export interface IUserFriend {
122 | /** Data of the friend */
123 | user: IUser
124 | /** Date & the time which the friend was online */
125 | last_online: string
126 | /** Date & time in string which the friend were friends with the user */
127 | friends_since: string
128 | }
129 |
130 | export interface IUserHistory {
131 | /** Entry (data) of the source */
132 | entry: IExtendedResource
133 | /** Increment of the source from the user */
134 | increment: number
135 | /** Date & time which the user accessed the source */
136 | date: string
137 | }
138 |
139 | export interface IUserSource {
140 | /** Title of the source */
141 | title: string
142 | /** MAL ID of the source */
143 | mal_id: number
144 | /** MAL URL of the source */
145 | url: string
146 | /** Images of the source */
147 | images: IPicture
148 | /** Starting year of the source */
149 | start_year: number
150 | }
151 |
152 | export interface IUserReview extends IReview {
153 | /** Count of episodes watched by the user
154 | * @description This value will be undefined if the type of review is not anime
155 | */
156 | episodes_watched?: number | null
157 | /** Count of chapters read by the user
158 | * @description This value will be undefined if the type of review is not manga
159 | */
160 | chapters_read?: number | null
161 | /** Entry of the source */
162 | entry: Omit
163 | }
164 |
165 | export interface ISourceForUser extends IResource {
166 | /** MAL ID of the source */
167 | mal_id: number
168 | /** Images of the source */
169 | images: ICommonPicture
170 | }
171 |
172 | export interface IUserClub extends IResource {
173 | /** MAL ID of the club */
174 | mal_id: number
175 | }
176 |
177 | export interface IUserHistoryConfig {
178 | /** Filter the entries by type of the review */
179 | type?: 'anime' | 'manga'
180 | }
181 |
182 | export interface IUserSearchConfig extends ICommonConfig {
183 | /** Number of results that should be limited per page */
184 | limit?: number
185 | /** Search term */
186 | q?: string
187 | /** Filter entries by gender */
188 | gender?: Genders
189 | /** Filter entries by loacation */
190 | location?: string
191 | /** Filter entries by maximum age */
192 | maxAge?: number
193 | /** Filter entries by minimum age */
194 | minAge?: number
195 | }
196 |
--------------------------------------------------------------------------------
/src/types/watch.ts:
--------------------------------------------------------------------------------
1 | import { IRecommendation, IYouTube } from '.'
2 |
3 | export interface IWatchEpisode extends ICommonWatchResponse {
4 | /** Episodes of the anime */
5 | episodes: IWatchEpisodeResponse[]
6 | }
7 |
8 | export interface IWatchPromo extends ICommonWatchResponse {
9 | /** Title of the promo */
10 | title: string
11 | /** Data of the promo video in YouTube */
12 | trailer: IYouTube
13 | }
14 |
15 | export interface IWatchEpisodeResponse {
16 | /** MAL ID of the episode */
17 | mal_id: number
18 | /** MAL URL of the episode */
19 | url: string
20 | /** Title of the episode. e.g `Episode 12` */
21 | title: string
22 | /** The value will be if premiumship is required to watch the episode */
23 | premium: boolean
24 | }
25 |
26 | export interface ICommonWatchResponse {
27 | /** Entry (data) of the anime */
28 | entry: IRecommendation['entry']
29 | /** Whether the source is locked in the region or not */
30 | region_locked: boolean
31 | }
32 |
--------------------------------------------------------------------------------
/src/utils/Error.ts:
--------------------------------------------------------------------------------
1 | import { IJikanError } from '../'
2 |
3 | export class MarikaError extends Error implements IJikanError {
4 | constructor(
5 | public status: 400 | 404 | 405 | 429 | 500,
6 | public type: string,
7 | public error: string | null,
8 | public jikanMessage?: IJikanError['message'] | IJikanError['messages'],
9 | public report_url?: string
10 | ) {
11 | super('')
12 | this.#assignErrorMessage()
13 | }
14 |
15 | #assignErrorMessage = () => {
16 | const message =
17 | typeof this.jikanMessage === 'string'
18 | ? this.jikanMessage
19 | : this.jikanMessage !== undefined
20 | ? this.jikanMessage[Object.keys(this.jikanMessage)[0]][0]
21 | : ''
22 | this.message = `An error occurred while making the request (Status: ${this.status} - ${this.type}). Message: ${message}`
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src/utils/Fetch.ts:
--------------------------------------------------------------------------------
1 | import Axios, { AxiosInstance, AxiosResponse } from 'axios'
2 | import { setupCache, CacheOptions, AxiosCacheInstance } from 'axios-cache-interceptor'
3 | import { MarikaError } from './Error'
4 | import { IJikanError } from '../types'
5 |
6 | export class Fetch {
7 | #axios: AxiosCacheInstance | AxiosInstance
8 | constructor(cacheOptions?: CacheOptions) {
9 | this.#axios = cacheOptions
10 | ? (Axios as unknown as AxiosCacheInstance).defaults.cache
11 | ? (Axios as unknown as AxiosCacheInstance)
12 | : setupCache(Axios, cacheOptions)
13 | : Axios
14 | }
15 | public get = async (url: string): Promise => {
16 | const throwError = (error: Error & { response: AxiosResponse }) => {
17 | throw new MarikaError(
18 | error.response.status as 400,
19 | error.response.data.type,
20 | error.response.data.error,
21 | error.response.data.message || error.response.data.messages
22 | )
23 | }
24 | return await this.#axios
25 | .get(url)
26 | .then((res) => {
27 | if (res.status !== 200 || (res.data as unknown as IJikanError).error !== undefined) throw new Error('')
28 | return res.data
29 | })
30 | .catch((err: Error & { response: AxiosResponse }) => throwError(err))
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/utils/Utils.ts:
--------------------------------------------------------------------------------
1 | import { API_URL } from '../constants'
2 | import { TMethods } from '../'
3 |
4 | export const getQueryString = (data: {
5 | [key in T]?: string | number[] | number | boolean
6 | }): string => {
7 | const result = {} as Record
8 | for (const key of Object.keys(data)) {
9 | const value = data[key as T]
10 | if (value) {
11 | if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean')
12 | result[key] =
13 | typeof value === 'number' ? value.toString() : typeof value === 'boolean' ? `${value}` : value
14 | else result[key] = value.join(',')
15 | }
16 | }
17 | if (!Object.keys(result).length) return ''
18 | const query = new URLSearchParams(result)
19 | return `?${query.toString()}`
20 | }
21 |
22 | export const getURL = (method: TMethods, ...routes: string[]): string =>
23 | API_URL.concat(`/${method}`, ...routes.map((route) => `/${route}`))
24 |
25 | export const getTypeErrorMessage = (parameter: string, expectedType: string, got: string) =>
26 | `Expected type ${expectedType} for the parameter '${parameter}', but received type ${got}.`
27 |
--------------------------------------------------------------------------------
/src/utils/index.ts:
--------------------------------------------------------------------------------
1 | export * from './Fetch'
2 | export * from './Utils'
3 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES6",
4 | "module": "CommonJS",
5 | "lib": ["ESNext", "DOM"],
6 |
7 | "outDir": "dist/",
8 | "declaration": true,
9 |
10 | "strict": true,
11 | "noImplicitAny": false,
12 |
13 | "types": ["mocha", "node"],
14 | "esModuleInterop": true
15 | },
16 | "include": ["src/**/*"]
17 | }
18 |
--------------------------------------------------------------------------------
/typedoc.json:
--------------------------------------------------------------------------------
1 | {
2 | "entryPoints": ["./src/index.ts"],
3 | "excludePrivate": true,
4 | "excludeProtected": true,
5 | "excludeExternals": true,
6 | "includeVersion": false,
7 | "entryPointStrategy": "expand"
8 | }
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@aashutoshrathi/word-wrap@^1.2.3":
6 | version "1.2.6"
7 | resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf"
8 | integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==
9 |
10 | "@cspotcode/source-map-support@^0.8.0":
11 | version "0.8.1"
12 | resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1"
13 | integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==
14 | dependencies:
15 | "@jridgewell/trace-mapping" "0.3.9"
16 |
17 | "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0":
18 | version "4.4.0"
19 | resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59"
20 | integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==
21 | dependencies:
22 | eslint-visitor-keys "^3.3.0"
23 |
24 | "@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1":
25 | version "4.8.1"
26 | resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.8.1.tgz#8c4bb756cc2aa7eaf13cfa5e69c83afb3260c20c"
27 | integrity sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==
28 |
29 | "@eslint/eslintrc@^2.1.2":
30 | version "2.1.2"
31 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396"
32 | integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==
33 | dependencies:
34 | ajv "^6.12.4"
35 | debug "^4.3.2"
36 | espree "^9.6.0"
37 | globals "^13.19.0"
38 | ignore "^5.2.0"
39 | import-fresh "^3.2.1"
40 | js-yaml "^4.1.0"
41 | minimatch "^3.1.2"
42 | strip-json-comments "^3.1.1"
43 |
44 | "@eslint/js@8.49.0":
45 | version "8.49.0"
46 | resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.49.0.tgz#86f79756004a97fa4df866835093f1df3d03c333"
47 | integrity sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==
48 |
49 | "@humanwhocodes/config-array@^0.11.11":
50 | version "0.11.11"
51 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.11.tgz#88a04c570dbbc7dd943e4712429c3df09bc32844"
52 | integrity sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==
53 | dependencies:
54 | "@humanwhocodes/object-schema" "^1.2.1"
55 | debug "^4.1.1"
56 | minimatch "^3.0.5"
57 |
58 | "@humanwhocodes/module-importer@^1.0.1":
59 | version "1.0.1"
60 | resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
61 | integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
62 |
63 | "@humanwhocodes/object-schema@^1.2.1":
64 | version "1.2.1"
65 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
66 | integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
67 |
68 | "@jridgewell/resolve-uri@^3.0.3":
69 | version "3.1.1"
70 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721"
71 | integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==
72 |
73 | "@jridgewell/sourcemap-codec@^1.4.10":
74 | version "1.4.15"
75 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
76 | integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
77 |
78 | "@jridgewell/trace-mapping@0.3.9":
79 | version "0.3.9"
80 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9"
81 | integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==
82 | dependencies:
83 | "@jridgewell/resolve-uri" "^3.0.3"
84 | "@jridgewell/sourcemap-codec" "^1.4.10"
85 |
86 | "@nodelib/fs.scandir@2.1.5":
87 | version "2.1.5"
88 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
89 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
90 | dependencies:
91 | "@nodelib/fs.stat" "2.0.5"
92 | run-parallel "^1.1.9"
93 |
94 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
95 | version "2.0.5"
96 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
97 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
98 |
99 | "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8":
100 | version "1.2.8"
101 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
102 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
103 | dependencies:
104 | "@nodelib/fs.scandir" "2.1.5"
105 | fastq "^1.6.0"
106 |
107 | "@tsconfig/node10@^1.0.7":
108 | version "1.0.8"
109 | resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9"
110 | integrity sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==
111 |
112 | "@tsconfig/node12@^1.0.7":
113 | version "1.0.9"
114 | resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.9.tgz#62c1f6dee2ebd9aead80dc3afa56810e58e1a04c"
115 | integrity sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==
116 |
117 | "@tsconfig/node14@^1.0.0":
118 | version "1.0.1"
119 | resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.1.tgz#95f2d167ffb9b8d2068b0b235302fafd4df711f2"
120 | integrity sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==
121 |
122 | "@tsconfig/node16@^1.0.2":
123 | version "1.0.2"
124 | resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e"
125 | integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==
126 |
127 | "@types/json-schema@^7.0.12":
128 | version "7.0.13"
129 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.13.tgz#02c24f4363176d2d18fc8b70b9f3c54aba178a85"
130 | integrity sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==
131 |
132 | "@types/mocha@^10.0.1":
133 | version "10.0.1"
134 | resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.1.tgz#2f4f65bb08bc368ac39c96da7b2f09140b26851b"
135 | integrity sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==
136 |
137 | "@types/node@^20.6.2":
138 | version "20.6.2"
139 | resolved "https://registry.yarnpkg.com/@types/node/-/node-20.6.2.tgz#a065925409f59657022e9063275cd0b9bd7e1b12"
140 | integrity sha512-Y+/1vGBHV/cYk6OI1Na/LHzwnlNCAfU3ZNGrc1LdRe/LAIbdDPTTv/HU3M7yXN448aTVDq3eKRm2cg7iKLb8gw==
141 |
142 | "@types/semver@^7.5.0":
143 | version "7.5.2"
144 | resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.2.tgz#31f6eec1ed7ec23f4f05608d3a2d381df041f564"
145 | integrity sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw==
146 |
147 | "@typescript-eslint/eslint-plugin@^6.7.2":
148 | version "6.7.2"
149 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.2.tgz#f18cc75c9cceac8080a9dc2e7d166008c5207b9f"
150 | integrity sha512-ooaHxlmSgZTM6CHYAFRlifqh1OAr3PAQEwi7lhYhaegbnXrnh7CDcHmc3+ihhbQC7H0i4JF0psI5ehzkF6Yl6Q==
151 | dependencies:
152 | "@eslint-community/regexpp" "^4.5.1"
153 | "@typescript-eslint/scope-manager" "6.7.2"
154 | "@typescript-eslint/type-utils" "6.7.2"
155 | "@typescript-eslint/utils" "6.7.2"
156 | "@typescript-eslint/visitor-keys" "6.7.2"
157 | debug "^4.3.4"
158 | graphemer "^1.4.0"
159 | ignore "^5.2.4"
160 | natural-compare "^1.4.0"
161 | semver "^7.5.4"
162 | ts-api-utils "^1.0.1"
163 |
164 | "@typescript-eslint/parser@^6.7.2":
165 | version "6.7.2"
166 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.7.2.tgz#e0ae93771441b9518e67d0660c79e3a105497af4"
167 | integrity sha512-KA3E4ox0ws+SPyxQf9iSI25R6b4Ne78ORhNHeVKrPQnoYsb9UhieoiRoJgrzgEeKGOXhcY1i8YtOeCHHTDa6Fw==
168 | dependencies:
169 | "@typescript-eslint/scope-manager" "6.7.2"
170 | "@typescript-eslint/types" "6.7.2"
171 | "@typescript-eslint/typescript-estree" "6.7.2"
172 | "@typescript-eslint/visitor-keys" "6.7.2"
173 | debug "^4.3.4"
174 |
175 | "@typescript-eslint/scope-manager@6.7.2":
176 | version "6.7.2"
177 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.7.2.tgz#cf59a2095d2f894770c94be489648ad1c78dc689"
178 | integrity sha512-bgi6plgyZjEqapr7u2mhxGR6E8WCzKNUFWNh6fkpVe9+yzRZeYtDTbsIBzKbcxI+r1qVWt6VIoMSNZ4r2A+6Yw==
179 | dependencies:
180 | "@typescript-eslint/types" "6.7.2"
181 | "@typescript-eslint/visitor-keys" "6.7.2"
182 |
183 | "@typescript-eslint/type-utils@6.7.2":
184 | version "6.7.2"
185 | resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.7.2.tgz#ed921c9db87d72fa2939fee242d700561454f367"
186 | integrity sha512-36F4fOYIROYRl0qj95dYKx6kybddLtsbmPIYNK0OBeXv2j9L5nZ17j9jmfy+bIDHKQgn2EZX+cofsqi8NPATBQ==
187 | dependencies:
188 | "@typescript-eslint/typescript-estree" "6.7.2"
189 | "@typescript-eslint/utils" "6.7.2"
190 | debug "^4.3.4"
191 | ts-api-utils "^1.0.1"
192 |
193 | "@typescript-eslint/types@6.7.2":
194 | version "6.7.2"
195 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.7.2.tgz#75a615a6dbeca09cafd102fe7f465da1d8a3c066"
196 | integrity sha512-flJYwMYgnUNDAN9/GAI3l8+wTmvTYdv64fcH8aoJK76Y+1FCZ08RtI5zDerM/FYT5DMkAc+19E4aLmd5KqdFyg==
197 |
198 | "@typescript-eslint/typescript-estree@6.7.2":
199 | version "6.7.2"
200 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.2.tgz#ce5883c23b581a5caf878af641e49dd0349238c7"
201 | integrity sha512-kiJKVMLkoSciGyFU0TOY0fRxnp9qq1AzVOHNeN1+B9erKFCJ4Z8WdjAkKQPP+b1pWStGFqezMLltxO+308dJTQ==
202 | dependencies:
203 | "@typescript-eslint/types" "6.7.2"
204 | "@typescript-eslint/visitor-keys" "6.7.2"
205 | debug "^4.3.4"
206 | globby "^11.1.0"
207 | is-glob "^4.0.3"
208 | semver "^7.5.4"
209 | ts-api-utils "^1.0.1"
210 |
211 | "@typescript-eslint/utils@6.7.2":
212 | version "6.7.2"
213 | resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.7.2.tgz#b9ef0da6f04932167a9222cb4ac59cb187165ebf"
214 | integrity sha512-ZCcBJug/TS6fXRTsoTkgnsvyWSiXwMNiPzBUani7hDidBdj1779qwM1FIAmpH4lvlOZNF3EScsxxuGifjpLSWQ==
215 | dependencies:
216 | "@eslint-community/eslint-utils" "^4.4.0"
217 | "@types/json-schema" "^7.0.12"
218 | "@types/semver" "^7.5.0"
219 | "@typescript-eslint/scope-manager" "6.7.2"
220 | "@typescript-eslint/types" "6.7.2"
221 | "@typescript-eslint/typescript-estree" "6.7.2"
222 | semver "^7.5.4"
223 |
224 | "@typescript-eslint/visitor-keys@6.7.2":
225 | version "6.7.2"
226 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.2.tgz#4cb2bd786f1f459731b0ad1584c9f73e1c7a4d5c"
227 | integrity sha512-uVw9VIMFBUTz8rIeaUT3fFe8xIUx8r4ywAdlQv1ifH+6acn/XF8Y6rwJ7XNmkNMDrTW+7+vxFFPIF40nJCVsMQ==
228 | dependencies:
229 | "@typescript-eslint/types" "6.7.2"
230 | eslint-visitor-keys "^3.4.1"
231 |
232 | acorn-jsx@^5.3.2:
233 | version "5.3.2"
234 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
235 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
236 |
237 | acorn-walk@^8.1.1:
238 | version "8.2.0"
239 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1"
240 | integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==
241 |
242 | acorn@^8.4.1:
243 | version "8.7.0"
244 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf"
245 | integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==
246 |
247 | acorn@^8.9.0:
248 | version "8.10.0"
249 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5"
250 | integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==
251 |
252 | ajv@^6.12.4:
253 | version "6.12.6"
254 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
255 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
256 | dependencies:
257 | fast-deep-equal "^3.1.1"
258 | fast-json-stable-stringify "^2.0.0"
259 | json-schema-traverse "^0.4.1"
260 | uri-js "^4.2.2"
261 |
262 | ansi-colors@4.1.1:
263 | version "4.1.1"
264 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
265 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
266 |
267 | ansi-regex@^5.0.1:
268 | version "5.0.1"
269 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
270 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
271 |
272 | ansi-sequence-parser@^1.1.0:
273 | version "1.1.1"
274 | resolved "https://registry.yarnpkg.com/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz#e0aa1cdcbc8f8bb0b5bca625aac41f5f056973cf"
275 | integrity sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==
276 |
277 | ansi-styles@^4.0.0, ansi-styles@^4.1.0:
278 | version "4.3.0"
279 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
280 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
281 | dependencies:
282 | color-convert "^2.0.1"
283 |
284 | anymatch@~3.1.2:
285 | version "3.1.2"
286 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
287 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
288 | dependencies:
289 | normalize-path "^3.0.0"
290 | picomatch "^2.0.4"
291 |
292 | arg@^4.1.0:
293 | version "4.1.3"
294 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
295 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
296 |
297 | argparse@^2.0.1:
298 | version "2.0.1"
299 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
300 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
301 |
302 | array-union@^2.1.0:
303 | version "2.1.0"
304 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
305 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
306 |
307 | asynckit@^0.4.0:
308 | version "0.4.0"
309 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
310 | integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
311 |
312 | axios-cache-interceptor@^1.3.0:
313 | version "1.3.0"
314 | resolved "https://registry.yarnpkg.com/axios-cache-interceptor/-/axios-cache-interceptor-1.3.0.tgz#9f754d32aee0c3f7aca05cc41f4e10d6bf65f8cc"
315 | integrity sha512-hBI9DXo3OnIsCCQYa4ip/tFa6QYry/WL0WZtPkEsdg4QJ9JGMezApzAT3KL1S/fJ8DjxA1vjAnZ8aAwb/VZDtQ==
316 | dependencies:
317 | cache-parser "^1.2.4"
318 | fast-defer "^1.1.7"
319 | object-code "^1.3.0"
320 |
321 | axios@^1.5.0:
322 | version "1.5.0"
323 | resolved "https://registry.yarnpkg.com/axios/-/axios-1.5.0.tgz#f02e4af823e2e46a9768cfc74691fdd0517ea267"
324 | integrity sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==
325 | dependencies:
326 | follow-redirects "^1.15.0"
327 | form-data "^4.0.0"
328 | proxy-from-env "^1.1.0"
329 |
330 | balanced-match@^1.0.0:
331 | version "1.0.2"
332 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
333 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
334 |
335 | binary-extensions@^2.0.0:
336 | version "2.2.0"
337 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
338 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
339 |
340 | brace-expansion@^1.1.7:
341 | version "1.1.11"
342 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
343 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
344 | dependencies:
345 | balanced-match "^1.0.0"
346 | concat-map "0.0.1"
347 |
348 | brace-expansion@^2.0.1:
349 | version "2.0.1"
350 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
351 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
352 | dependencies:
353 | balanced-match "^1.0.0"
354 |
355 | braces@^3.0.1, braces@~3.0.2:
356 | version "3.0.2"
357 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
358 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
359 | dependencies:
360 | fill-range "^7.0.1"
361 |
362 | browser-stdout@1.3.1:
363 | version "1.3.1"
364 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
365 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==
366 |
367 | cache-parser@^1.2.4:
368 | version "1.2.4"
369 | resolved "https://registry.yarnpkg.com/cache-parser/-/cache-parser-1.2.4.tgz#60975135ef2330e6a1d60895279d7237a2a9b398"
370 | integrity sha512-O0KwuHuJnbHUrghHi2kGp0SxnWSIBXTYt7M8WVhW0kbPRUNUKoE/Of6e1rRD6AAxmfxFunKnt90yEK09D+sc5g==
371 |
372 | callsites@^3.0.0:
373 | version "3.1.0"
374 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
375 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
376 |
377 | camelcase@^6.0.0:
378 | version "6.3.0"
379 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
380 | integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
381 |
382 | chalk@^4.0.0, chalk@^4.1.0:
383 | version "4.1.2"
384 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
385 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
386 | dependencies:
387 | ansi-styles "^4.1.0"
388 | supports-color "^7.1.0"
389 |
390 | chokidar@3.5.3:
391 | version "3.5.3"
392 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
393 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
394 | dependencies:
395 | anymatch "~3.1.2"
396 | braces "~3.0.2"
397 | glob-parent "~5.1.2"
398 | is-binary-path "~2.1.0"
399 | is-glob "~4.0.1"
400 | normalize-path "~3.0.0"
401 | readdirp "~3.6.0"
402 | optionalDependencies:
403 | fsevents "~2.3.2"
404 |
405 | cliui@^7.0.2:
406 | version "7.0.4"
407 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
408 | integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==
409 | dependencies:
410 | string-width "^4.2.0"
411 | strip-ansi "^6.0.0"
412 | wrap-ansi "^7.0.0"
413 |
414 | color-convert@^2.0.1:
415 | version "2.0.1"
416 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
417 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
418 | dependencies:
419 | color-name "~1.1.4"
420 |
421 | color-name@~1.1.4:
422 | version "1.1.4"
423 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
424 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
425 |
426 | combined-stream@^1.0.8:
427 | version "1.0.8"
428 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
429 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
430 | dependencies:
431 | delayed-stream "~1.0.0"
432 |
433 | concat-map@0.0.1:
434 | version "0.0.1"
435 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
436 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
437 |
438 | create-require@^1.1.0:
439 | version "1.1.1"
440 | resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
441 | integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
442 |
443 | cross-spawn@^7.0.2:
444 | version "7.0.3"
445 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
446 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
447 | dependencies:
448 | path-key "^3.1.0"
449 | shebang-command "^2.0.0"
450 | which "^2.0.1"
451 |
452 | debug@4.3.4, debug@^4.3.4:
453 | version "4.3.4"
454 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
455 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
456 | dependencies:
457 | ms "2.1.2"
458 |
459 | debug@^4.1.1, debug@^4.3.2:
460 | version "4.3.3"
461 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664"
462 | integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==
463 | dependencies:
464 | ms "2.1.2"
465 |
466 | decamelize@^4.0.0:
467 | version "4.0.0"
468 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837"
469 | integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==
470 |
471 | deep-is@^0.1.3:
472 | version "0.1.4"
473 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
474 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
475 |
476 | delayed-stream@~1.0.0:
477 | version "1.0.0"
478 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
479 | integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
480 |
481 | diff@5.0.0:
482 | version "5.0.0"
483 | resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b"
484 | integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==
485 |
486 | diff@^4.0.1:
487 | version "4.0.2"
488 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
489 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
490 |
491 | dir-glob@^3.0.1:
492 | version "3.0.1"
493 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
494 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
495 | dependencies:
496 | path-type "^4.0.0"
497 |
498 | doctrine@^3.0.0:
499 | version "3.0.0"
500 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
501 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
502 | dependencies:
503 | esutils "^2.0.2"
504 |
505 | emoji-regex@^8.0.0:
506 | version "8.0.0"
507 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
508 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
509 |
510 | escalade@^3.1.1:
511 | version "3.1.1"
512 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
513 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
514 |
515 | escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0:
516 | version "4.0.0"
517 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
518 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
519 |
520 | eslint-scope@^7.2.2:
521 | version "7.2.2"
522 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f"
523 | integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==
524 | dependencies:
525 | esrecurse "^4.3.0"
526 | estraverse "^5.2.0"
527 |
528 | eslint-visitor-keys@^3.3.0:
529 | version "3.3.0"
530 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826"
531 | integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==
532 |
533 | eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3:
534 | version "3.4.3"
535 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
536 | integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
537 |
538 | eslint@^8.49.0:
539 | version "8.49.0"
540 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.49.0.tgz#09d80a89bdb4edee2efcf6964623af1054bf6d42"
541 | integrity sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==
542 | dependencies:
543 | "@eslint-community/eslint-utils" "^4.2.0"
544 | "@eslint-community/regexpp" "^4.6.1"
545 | "@eslint/eslintrc" "^2.1.2"
546 | "@eslint/js" "8.49.0"
547 | "@humanwhocodes/config-array" "^0.11.11"
548 | "@humanwhocodes/module-importer" "^1.0.1"
549 | "@nodelib/fs.walk" "^1.2.8"
550 | ajv "^6.12.4"
551 | chalk "^4.0.0"
552 | cross-spawn "^7.0.2"
553 | debug "^4.3.2"
554 | doctrine "^3.0.0"
555 | escape-string-regexp "^4.0.0"
556 | eslint-scope "^7.2.2"
557 | eslint-visitor-keys "^3.4.3"
558 | espree "^9.6.1"
559 | esquery "^1.4.2"
560 | esutils "^2.0.2"
561 | fast-deep-equal "^3.1.3"
562 | file-entry-cache "^6.0.1"
563 | find-up "^5.0.0"
564 | glob-parent "^6.0.2"
565 | globals "^13.19.0"
566 | graphemer "^1.4.0"
567 | ignore "^5.2.0"
568 | imurmurhash "^0.1.4"
569 | is-glob "^4.0.0"
570 | is-path-inside "^3.0.3"
571 | js-yaml "^4.1.0"
572 | json-stable-stringify-without-jsonify "^1.0.1"
573 | levn "^0.4.1"
574 | lodash.merge "^4.6.2"
575 | minimatch "^3.1.2"
576 | natural-compare "^1.4.0"
577 | optionator "^0.9.3"
578 | strip-ansi "^6.0.1"
579 | text-table "^0.2.0"
580 |
581 | espree@^9.6.0, espree@^9.6.1:
582 | version "9.6.1"
583 | resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f"
584 | integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==
585 | dependencies:
586 | acorn "^8.9.0"
587 | acorn-jsx "^5.3.2"
588 | eslint-visitor-keys "^3.4.1"
589 |
590 | esquery@^1.4.2:
591 | version "1.5.0"
592 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b"
593 | integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==
594 | dependencies:
595 | estraverse "^5.1.0"
596 |
597 | esrecurse@^4.3.0:
598 | version "4.3.0"
599 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
600 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
601 | dependencies:
602 | estraverse "^5.2.0"
603 |
604 | estraverse@^5.1.0, estraverse@^5.2.0:
605 | version "5.3.0"
606 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
607 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
608 |
609 | esutils@^2.0.2:
610 | version "2.0.3"
611 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
612 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
613 |
614 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
615 | version "3.1.3"
616 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
617 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
618 |
619 | fast-defer@^1.1.7:
620 | version "1.1.7"
621 | resolved "https://registry.yarnpkg.com/fast-defer/-/fast-defer-1.1.7.tgz#943bc3c7a876d437360318ab1e1f269a29f31ba4"
622 | integrity sha512-tJ01ulDWT2WhqxMKS20nXX6wyX2iInBYpbN3GO7yjKwXMY4qvkdBRxak9IFwBLlFDESox+SwSvqMCZDfe1tqeg==
623 |
624 | fast-glob@^3.2.9:
625 | version "3.2.11"
626 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9"
627 | integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==
628 | dependencies:
629 | "@nodelib/fs.stat" "^2.0.2"
630 | "@nodelib/fs.walk" "^1.2.3"
631 | glob-parent "^5.1.2"
632 | merge2 "^1.3.0"
633 | micromatch "^4.0.4"
634 |
635 | fast-json-stable-stringify@^2.0.0:
636 | version "2.1.0"
637 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
638 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
639 |
640 | fast-levenshtein@^2.0.6:
641 | version "2.0.6"
642 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
643 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
644 |
645 | fastq@^1.6.0:
646 | version "1.13.0"
647 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c"
648 | integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==
649 | dependencies:
650 | reusify "^1.0.4"
651 |
652 | file-entry-cache@^6.0.1:
653 | version "6.0.1"
654 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
655 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
656 | dependencies:
657 | flat-cache "^3.0.4"
658 |
659 | fill-range@^7.0.1:
660 | version "7.0.1"
661 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
662 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
663 | dependencies:
664 | to-regex-range "^5.0.1"
665 |
666 | find-up@5.0.0, find-up@^5.0.0:
667 | version "5.0.0"
668 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
669 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
670 | dependencies:
671 | locate-path "^6.0.0"
672 | path-exists "^4.0.0"
673 |
674 | flat-cache@^3.0.4:
675 | version "3.0.4"
676 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
677 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==
678 | dependencies:
679 | flatted "^3.1.0"
680 | rimraf "^3.0.2"
681 |
682 | flat@^5.0.2:
683 | version "5.0.2"
684 | resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241"
685 | integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==
686 |
687 | flatted@^3.1.0:
688 | version "3.2.5"
689 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3"
690 | integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==
691 |
692 | follow-redirects@^1.15.0:
693 | version "1.15.2"
694 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
695 | integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
696 |
697 | form-data@^4.0.0:
698 | version "4.0.0"
699 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
700 | integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
701 | dependencies:
702 | asynckit "^0.4.0"
703 | combined-stream "^1.0.8"
704 | mime-types "^2.1.12"
705 |
706 | fs.realpath@^1.0.0:
707 | version "1.0.0"
708 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
709 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
710 |
711 | fsevents@~2.3.2:
712 | version "2.3.2"
713 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
714 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
715 |
716 | get-caller-file@^2.0.5:
717 | version "2.0.5"
718 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
719 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
720 |
721 | glob-parent@^5.1.2, glob-parent@~5.1.2:
722 | version "5.1.2"
723 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
724 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
725 | dependencies:
726 | is-glob "^4.0.1"
727 |
728 | glob-parent@^6.0.2:
729 | version "6.0.2"
730 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
731 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
732 | dependencies:
733 | is-glob "^4.0.3"
734 |
735 | glob@7.2.0, glob@^7.1.3:
736 | version "7.2.0"
737 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"
738 | integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==
739 | dependencies:
740 | fs.realpath "^1.0.0"
741 | inflight "^1.0.4"
742 | inherits "2"
743 | minimatch "^3.0.4"
744 | once "^1.3.0"
745 | path-is-absolute "^1.0.0"
746 |
747 | globals@^13.19.0:
748 | version "13.21.0"
749 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.21.0.tgz#163aae12f34ef502f5153cfbdd3600f36c63c571"
750 | integrity sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==
751 | dependencies:
752 | type-fest "^0.20.2"
753 |
754 | globby@^11.1.0:
755 | version "11.1.0"
756 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
757 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
758 | dependencies:
759 | array-union "^2.1.0"
760 | dir-glob "^3.0.1"
761 | fast-glob "^3.2.9"
762 | ignore "^5.2.0"
763 | merge2 "^1.4.1"
764 | slash "^3.0.0"
765 |
766 | graphemer@^1.4.0:
767 | version "1.4.0"
768 | resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6"
769 | integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
770 |
771 | has-flag@^4.0.0:
772 | version "4.0.0"
773 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
774 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
775 |
776 | he@1.2.0:
777 | version "1.2.0"
778 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
779 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
780 |
781 | ignore@^5.2.0:
782 | version "5.2.0"
783 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a"
784 | integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==
785 |
786 | ignore@^5.2.4:
787 | version "5.2.4"
788 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324"
789 | integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==
790 |
791 | import-fresh@^3.2.1:
792 | version "3.3.0"
793 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
794 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
795 | dependencies:
796 | parent-module "^1.0.0"
797 | resolve-from "^4.0.0"
798 |
799 | imurmurhash@^0.1.4:
800 | version "0.1.4"
801 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
802 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
803 |
804 | inflight@^1.0.4:
805 | version "1.0.6"
806 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
807 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
808 | dependencies:
809 | once "^1.3.0"
810 | wrappy "1"
811 |
812 | inherits@2:
813 | version "2.0.4"
814 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
815 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
816 |
817 | is-binary-path@~2.1.0:
818 | version "2.1.0"
819 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
820 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
821 | dependencies:
822 | binary-extensions "^2.0.0"
823 |
824 | is-extglob@^2.1.1:
825 | version "2.1.1"
826 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
827 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
828 |
829 | is-fullwidth-code-point@^3.0.0:
830 | version "3.0.0"
831 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
832 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
833 |
834 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
835 | version "4.0.3"
836 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
837 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
838 | dependencies:
839 | is-extglob "^2.1.1"
840 |
841 | is-number@^7.0.0:
842 | version "7.0.0"
843 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
844 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
845 |
846 | is-path-inside@^3.0.3:
847 | version "3.0.3"
848 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
849 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
850 |
851 | is-plain-obj@^2.1.0:
852 | version "2.1.0"
853 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
854 | integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
855 |
856 | is-unicode-supported@^0.1.0:
857 | version "0.1.0"
858 | resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
859 | integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
860 |
861 | isexe@^2.0.0:
862 | version "2.0.0"
863 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
864 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
865 |
866 | js-yaml@4.1.0, js-yaml@^4.1.0:
867 | version "4.1.0"
868 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
869 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
870 | dependencies:
871 | argparse "^2.0.1"
872 |
873 | json-schema-traverse@^0.4.1:
874 | version "0.4.1"
875 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
876 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
877 |
878 | json-stable-stringify-without-jsonify@^1.0.1:
879 | version "1.0.1"
880 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
881 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
882 |
883 | jsonc-parser@^3.2.0:
884 | version "3.2.0"
885 | resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76"
886 | integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==
887 |
888 | levn@^0.4.1:
889 | version "0.4.1"
890 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
891 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
892 | dependencies:
893 | prelude-ls "^1.2.1"
894 | type-check "~0.4.0"
895 |
896 | locate-path@^6.0.0:
897 | version "6.0.0"
898 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
899 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
900 | dependencies:
901 | p-locate "^5.0.0"
902 |
903 | lodash.merge@^4.6.2:
904 | version "4.6.2"
905 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
906 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
907 |
908 | log-symbols@4.1.0:
909 | version "4.1.0"
910 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
911 | integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
912 | dependencies:
913 | chalk "^4.1.0"
914 | is-unicode-supported "^0.1.0"
915 |
916 | lru-cache@^6.0.0:
917 | version "6.0.0"
918 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
919 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
920 | dependencies:
921 | yallist "^4.0.0"
922 |
923 | lunr@^2.3.9:
924 | version "2.3.9"
925 | resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1"
926 | integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==
927 |
928 | make-error@^1.1.1:
929 | version "1.3.6"
930 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
931 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
932 |
933 | marked@^4.3.0:
934 | version "4.3.0"
935 | resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3"
936 | integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==
937 |
938 | merge2@^1.3.0, merge2@^1.4.1:
939 | version "1.4.1"
940 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
941 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
942 |
943 | micromatch@^4.0.4:
944 | version "4.0.4"
945 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9"
946 | integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==
947 | dependencies:
948 | braces "^3.0.1"
949 | picomatch "^2.2.3"
950 |
951 | mime-db@1.52.0:
952 | version "1.52.0"
953 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
954 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
955 |
956 | mime-types@^2.1.12:
957 | version "2.1.35"
958 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
959 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
960 | dependencies:
961 | mime-db "1.52.0"
962 |
963 | minimatch@5.0.1:
964 | version "5.0.1"
965 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b"
966 | integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==
967 | dependencies:
968 | brace-expansion "^2.0.1"
969 |
970 | minimatch@^3.0.4:
971 | version "3.1.1"
972 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.1.tgz#879ad447200773912898b46cd516a7abbb5e50b0"
973 | integrity sha512-reLxBcKUPNBnc/sVtAbxgRVFSegoGeLaSjmphNhcwcolhYLRgtJscn5mRl6YRZNQv40Y7P6JM2YhSIsbL9OB5A==
974 | dependencies:
975 | brace-expansion "^1.1.7"
976 |
977 | minimatch@^3.0.5, minimatch@^3.1.2:
978 | version "3.1.2"
979 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
980 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
981 | dependencies:
982 | brace-expansion "^1.1.7"
983 |
984 | minimatch@^9.0.3:
985 | version "9.0.3"
986 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825"
987 | integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
988 | dependencies:
989 | brace-expansion "^2.0.1"
990 |
991 | mocha@^10.2.0:
992 | version "10.2.0"
993 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8"
994 | integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==
995 | dependencies:
996 | ansi-colors "4.1.1"
997 | browser-stdout "1.3.1"
998 | chokidar "3.5.3"
999 | debug "4.3.4"
1000 | diff "5.0.0"
1001 | escape-string-regexp "4.0.0"
1002 | find-up "5.0.0"
1003 | glob "7.2.0"
1004 | he "1.2.0"
1005 | js-yaml "4.1.0"
1006 | log-symbols "4.1.0"
1007 | minimatch "5.0.1"
1008 | ms "2.1.3"
1009 | nanoid "3.3.3"
1010 | serialize-javascript "6.0.0"
1011 | strip-json-comments "3.1.1"
1012 | supports-color "8.1.1"
1013 | workerpool "6.2.1"
1014 | yargs "16.2.0"
1015 | yargs-parser "20.2.4"
1016 | yargs-unparser "2.0.0"
1017 |
1018 | ms@2.1.2:
1019 | version "2.1.2"
1020 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
1021 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
1022 |
1023 | ms@2.1.3:
1024 | version "2.1.3"
1025 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
1026 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
1027 |
1028 | nanoid@3.3.3:
1029 | version "3.3.3"
1030 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25"
1031 | integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==
1032 |
1033 | natural-compare@^1.4.0:
1034 | version "1.4.0"
1035 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
1036 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
1037 |
1038 | normalize-path@^3.0.0, normalize-path@~3.0.0:
1039 | version "3.0.0"
1040 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
1041 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
1042 |
1043 | object-code@^1.3.0:
1044 | version "1.3.0"
1045 | resolved "https://registry.yarnpkg.com/object-code/-/object-code-1.3.0.tgz#59b52213c5a7a450071dab201e36ae2492b983d8"
1046 | integrity sha512-PLplgvzuFhSPBuTX/mtaXEnU3c6g7qKflVVQbV9VWEnV/34iKeAX1jeDNCKq1OgGlsnkA/NjldCzTbHxa7Wj4A==
1047 |
1048 | once@^1.3.0:
1049 | version "1.4.0"
1050 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1051 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
1052 | dependencies:
1053 | wrappy "1"
1054 |
1055 | optionator@^0.9.3:
1056 | version "0.9.3"
1057 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64"
1058 | integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==
1059 | dependencies:
1060 | "@aashutoshrathi/word-wrap" "^1.2.3"
1061 | deep-is "^0.1.3"
1062 | fast-levenshtein "^2.0.6"
1063 | levn "^0.4.1"
1064 | prelude-ls "^1.2.1"
1065 | type-check "^0.4.0"
1066 |
1067 | p-limit@^3.0.2:
1068 | version "3.1.0"
1069 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
1070 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
1071 | dependencies:
1072 | yocto-queue "^0.1.0"
1073 |
1074 | p-locate@^5.0.0:
1075 | version "5.0.0"
1076 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
1077 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
1078 | dependencies:
1079 | p-limit "^3.0.2"
1080 |
1081 | parent-module@^1.0.0:
1082 | version "1.0.1"
1083 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
1084 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
1085 | dependencies:
1086 | callsites "^3.0.0"
1087 |
1088 | path-exists@^4.0.0:
1089 | version "4.0.0"
1090 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
1091 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
1092 |
1093 | path-is-absolute@^1.0.0:
1094 | version "1.0.1"
1095 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
1096 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
1097 |
1098 | path-key@^3.1.0:
1099 | version "3.1.1"
1100 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
1101 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
1102 |
1103 | path-type@^4.0.0:
1104 | version "4.0.0"
1105 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
1106 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
1107 |
1108 | picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3:
1109 | version "2.3.1"
1110 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
1111 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
1112 |
1113 | prelude-ls@^1.2.1:
1114 | version "1.2.1"
1115 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
1116 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
1117 |
1118 | prettier@^3.0.3:
1119 | version "3.0.3"
1120 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.3.tgz#432a51f7ba422d1469096c0fdc28e235db8f9643"
1121 | integrity sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==
1122 |
1123 | proxy-from-env@^1.1.0:
1124 | version "1.1.0"
1125 | resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
1126 | integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
1127 |
1128 | punycode@^2.1.0:
1129 | version "2.1.1"
1130 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
1131 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
1132 |
1133 | queue-microtask@^1.2.2:
1134 | version "1.2.3"
1135 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
1136 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
1137 |
1138 | randombytes@^2.1.0:
1139 | version "2.1.0"
1140 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
1141 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
1142 | dependencies:
1143 | safe-buffer "^5.1.0"
1144 |
1145 | readdirp@~3.6.0:
1146 | version "3.6.0"
1147 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
1148 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
1149 | dependencies:
1150 | picomatch "^2.2.1"
1151 |
1152 | require-directory@^2.1.1:
1153 | version "2.1.1"
1154 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
1155 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
1156 |
1157 | resolve-from@^4.0.0:
1158 | version "4.0.0"
1159 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
1160 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
1161 |
1162 | reusify@^1.0.4:
1163 | version "1.0.4"
1164 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
1165 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
1166 |
1167 | rimraf@^3.0.2:
1168 | version "3.0.2"
1169 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
1170 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
1171 | dependencies:
1172 | glob "^7.1.3"
1173 |
1174 | run-parallel@^1.1.9:
1175 | version "1.2.0"
1176 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
1177 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
1178 | dependencies:
1179 | queue-microtask "^1.2.2"
1180 |
1181 | safe-buffer@^5.1.0:
1182 | version "5.2.1"
1183 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
1184 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
1185 |
1186 | semver@^7.5.4:
1187 | version "7.5.4"
1188 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
1189 | integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
1190 | dependencies:
1191 | lru-cache "^6.0.0"
1192 |
1193 | serialize-javascript@6.0.0:
1194 | version "6.0.0"
1195 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8"
1196 | integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==
1197 | dependencies:
1198 | randombytes "^2.1.0"
1199 |
1200 | shebang-command@^2.0.0:
1201 | version "2.0.0"
1202 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
1203 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
1204 | dependencies:
1205 | shebang-regex "^3.0.0"
1206 |
1207 | shebang-regex@^3.0.0:
1208 | version "3.0.0"
1209 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
1210 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
1211 |
1212 | shiki@^0.14.1:
1213 | version "0.14.4"
1214 | resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.14.4.tgz#2454969b466a5f75067d0f2fa0d7426d32881b20"
1215 | integrity sha512-IXCRip2IQzKwxArNNq1S+On4KPML3Yyn8Zzs/xRgcgOWIr8ntIK3IKzjFPfjy/7kt9ZMjc+FItfqHRBg8b6tNQ==
1216 | dependencies:
1217 | ansi-sequence-parser "^1.1.0"
1218 | jsonc-parser "^3.2.0"
1219 | vscode-oniguruma "^1.7.0"
1220 | vscode-textmate "^8.0.0"
1221 |
1222 | slash@^3.0.0:
1223 | version "3.0.0"
1224 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
1225 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
1226 |
1227 | string-width@^4.1.0, string-width@^4.2.0:
1228 | version "4.2.3"
1229 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
1230 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
1231 | dependencies:
1232 | emoji-regex "^8.0.0"
1233 | is-fullwidth-code-point "^3.0.0"
1234 | strip-ansi "^6.0.1"
1235 |
1236 | strip-ansi@^6.0.0, strip-ansi@^6.0.1:
1237 | version "6.0.1"
1238 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
1239 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
1240 | dependencies:
1241 | ansi-regex "^5.0.1"
1242 |
1243 | strip-json-comments@3.1.1, strip-json-comments@^3.1.1:
1244 | version "3.1.1"
1245 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
1246 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
1247 |
1248 | supports-color@8.1.1:
1249 | version "8.1.1"
1250 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
1251 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
1252 | dependencies:
1253 | has-flag "^4.0.0"
1254 |
1255 | supports-color@^7.1.0:
1256 | version "7.2.0"
1257 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
1258 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
1259 | dependencies:
1260 | has-flag "^4.0.0"
1261 |
1262 | text-table@^0.2.0:
1263 | version "0.2.0"
1264 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
1265 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
1266 |
1267 | to-regex-range@^5.0.1:
1268 | version "5.0.1"
1269 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
1270 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
1271 | dependencies:
1272 | is-number "^7.0.0"
1273 |
1274 | ts-api-utils@^1.0.1:
1275 | version "1.0.3"
1276 | resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.3.tgz#f12c1c781d04427313dbac808f453f050e54a331"
1277 | integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==
1278 |
1279 | ts-node@^10.9.1:
1280 | version "10.9.1"
1281 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b"
1282 | integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==
1283 | dependencies:
1284 | "@cspotcode/source-map-support" "^0.8.0"
1285 | "@tsconfig/node10" "^1.0.7"
1286 | "@tsconfig/node12" "^1.0.7"
1287 | "@tsconfig/node14" "^1.0.0"
1288 | "@tsconfig/node16" "^1.0.2"
1289 | acorn "^8.4.1"
1290 | acorn-walk "^8.1.1"
1291 | arg "^4.1.0"
1292 | create-require "^1.1.0"
1293 | diff "^4.0.1"
1294 | make-error "^1.1.1"
1295 | v8-compile-cache-lib "^3.0.1"
1296 | yn "3.1.1"
1297 |
1298 | type-check@^0.4.0, type-check@~0.4.0:
1299 | version "0.4.0"
1300 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
1301 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
1302 | dependencies:
1303 | prelude-ls "^1.2.1"
1304 |
1305 | type-fest@^0.20.2:
1306 | version "0.20.2"
1307 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
1308 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
1309 |
1310 | typedoc@^0.25.1:
1311 | version "0.25.1"
1312 | resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.25.1.tgz#50de2d8fb93623fbfb59e2fa6407ff40e3d3f438"
1313 | integrity sha512-c2ye3YUtGIadxN2O6YwPEXgrZcvhlZ6HlhWZ8jQRNzwLPn2ylhdGqdR8HbyDRyALP8J6lmSANILCkkIdNPFxqA==
1314 | dependencies:
1315 | lunr "^2.3.9"
1316 | marked "^4.3.0"
1317 | minimatch "^9.0.3"
1318 | shiki "^0.14.1"
1319 |
1320 | typescript@^5.2.2:
1321 | version "5.2.2"
1322 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78"
1323 | integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==
1324 |
1325 | uri-js@^4.2.2:
1326 | version "4.4.1"
1327 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
1328 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
1329 | dependencies:
1330 | punycode "^2.1.0"
1331 |
1332 | v8-compile-cache-lib@^3.0.1:
1333 | version "3.0.1"
1334 | resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf"
1335 | integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==
1336 |
1337 | vscode-oniguruma@^1.7.0:
1338 | version "1.7.0"
1339 | resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz#439bfad8fe71abd7798338d1cd3dc53a8beea94b"
1340 | integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==
1341 |
1342 | vscode-textmate@^8.0.0:
1343 | version "8.0.0"
1344 | resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-8.0.0.tgz#2c7a3b1163ef0441097e0b5d6389cd5504b59e5d"
1345 | integrity sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==
1346 |
1347 | which@^2.0.1:
1348 | version "2.0.2"
1349 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
1350 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
1351 | dependencies:
1352 | isexe "^2.0.0"
1353 |
1354 | workerpool@6.2.1:
1355 | version "6.2.1"
1356 | resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343"
1357 | integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==
1358 |
1359 | wrap-ansi@^7.0.0:
1360 | version "7.0.0"
1361 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
1362 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
1363 | dependencies:
1364 | ansi-styles "^4.0.0"
1365 | string-width "^4.1.0"
1366 | strip-ansi "^6.0.0"
1367 |
1368 | wrappy@1:
1369 | version "1.0.2"
1370 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1371 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
1372 |
1373 | y18n@^5.0.5:
1374 | version "5.0.8"
1375 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
1376 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
1377 |
1378 | yallist@^4.0.0:
1379 | version "4.0.0"
1380 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
1381 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
1382 |
1383 | yargs-parser@20.2.4:
1384 | version "20.2.4"
1385 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54"
1386 | integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==
1387 |
1388 | yargs-parser@^20.2.2:
1389 | version "20.2.9"
1390 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
1391 | integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
1392 |
1393 | yargs-unparser@2.0.0:
1394 | version "2.0.0"
1395 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb"
1396 | integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==
1397 | dependencies:
1398 | camelcase "^6.0.0"
1399 | decamelize "^4.0.0"
1400 | flat "^5.0.2"
1401 | is-plain-obj "^2.1.0"
1402 |
1403 | yargs@16.2.0:
1404 | version "16.2.0"
1405 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"
1406 | integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
1407 | dependencies:
1408 | cliui "^7.0.2"
1409 | escalade "^3.1.1"
1410 | get-caller-file "^2.0.5"
1411 | require-directory "^2.1.1"
1412 | string-width "^4.2.0"
1413 | y18n "^5.0.5"
1414 | yargs-parser "^20.2.2"
1415 |
1416 | yn@3.1.1:
1417 | version "3.1.1"
1418 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
1419 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==
1420 |
1421 | yocto-queue@^0.1.0:
1422 | version "0.1.0"
1423 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
1424 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
1425 |
--------------------------------------------------------------------------------