diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..1fd8a55 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,56 @@ +name: CI + +on: + push: + branches: + - main + pull_request: + branches: + - main + +env: + PUBG_API_KEY: ${{secrets.PUBG_API_KEY}} + +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [14.x, 16.x] + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + + - name: Install + run: yarn install --frozen-lock + + - name: Build + run: yarn build + + test: + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [14.x, 16.x] + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + + - name: Install + run: yarn install --frozen-lock + + - name: Build + run: yarn build:prod + + - name: Test + run: yarn test diff --git a/README.md b/README.md index 7bdbc03..6973ae9 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,6 @@ - ❗ Stirctly typed - ⚡ Request batching - ✍️ Verbose documentation -- 🪝 Hooks support - ⚠️ Error handling ## 🚀 Install @@ -58,73 +57,111 @@ You'll first need to [sign up on the PUBG developer API site](https://developer. With an account created, you can [create a new developer application](https://developer.playbattlegrounds.com/apps/new?locale=en) that will provide you with your API key. -### Make something! +### Basic -Here's a few small examples of what you can do with this library +As a basic example here's how to fetch player data: ```typescript -import { Client, Shard } from "pubg.ts"; +import { getPlayer } from "pubg.ts"; -const client = new Client({ - apiKey: "your_key_goes_here", - shard: Shard.STEAM, // Optional (Default: Steam) +const { data, error } = await getPlayer({ + value: "YOUR_NAME_HERE", }); -// Get a single or multiple player(s) using their name or ID -const { data: player } = await api.getPlayer({ - skipFailed: false, // Optional: fail silently (Default: false) - value: "single_name_or_id_or_array_of_such", -}); +console.log({ data, error }); +``` + +## 📕 Documentation + +Here is a breakdown of all modules that the package provides & how to use them: + +
+ Match + + ## Match + +Get a match from a specificed match id. + +--- -// Fetch a data from a single match -const { data: match } = await client.getMatch({ +Get started using the module function: + +```typescript +import { getMatch } from "pubg.ts"; + +const { data, error } = await getMatch({ + apiKey: "...", id: "a036c694-be29-4dea-833d-b6ff84323de7", }); +``` -// Get the current active season -const { data: activeSeason } = await client.getSeason(); +Or using the client: + +```typescript +import { Client } from "pubg.ts"; + +const client = new Client({ + apiKey: "...", +}); -// Get season stats for a specific player -const { data: playerSeason } = await client.getPlayerSeason({ - player: player.id, - season: activeSeason, - ranked: false, // Optionally gets stats for ranked gamemodes +const { data, error } = await getMatch({ + id: "a036c694-be29-4dea-833d-b6ff84323de7", }); ``` -Using individual fetchers +
+ +
+ Player + + ## Player + +Get player(s) by a given name(s) or id(s). + +--- + +Get started using the module function: ```typescript -import { Shard, getPlayer, getMatch, getSeason } from "pubg.ts"; - -// Get a single or multiple player(s) using their name or ID -const { data: player } = await getPlayer({ - apiKey: "your_key_goes_here", - shard: Shard.STEAM, // Optional: for all hooks (Default: Steam) - skipFailed: false, // Optional: fail silently (Default: false) - value: "single_name_or_id_or_array_of_such", +import { getPlayer } from "pubg.ts"; + +// Using a player name +const { data, error } = await getPlayer({ + apiKey: "...", + value: "YOUR_NAME_HERE", }); -// Fetch a data from a single match -const { data: match } = await getMatch({ - apiKey: "your_key_goes_here", - id: "a036c694-be29-4dea-833d-b6ff84323de7", +// Using a player ID +const { data, error } = await getPlayer({ + apiKey: "...", + id: true, + value: "account.ABC123", }); +``` + +Or using the client: + +```typescript +import { Client } from "pubg.ts"; -// Get the current active season -const { data: activeSeason } = await getSeason({ - apiKey: "your_key_goes_here", +const client = new Client({ + apiKey: "...", +}); + +// Using a player name +const { data, error } = await getPlayer({ + value: "YOUR_NAME_HERE", }); -// Get season stats for a specific player -const { data: playerSeason } = await getPlayerSeason({ - apiKey: "your_key_goes_here", - player: player.id, - season: activeSeason, - ranked: false, // Optionally gets stats for ranked gamemodes +// Using a player ID +const { data, error } = await getPlayer({ + id: true, + value: "account.ABC123", }); ``` +
+ ## ❤️ Credits - [ickerio](https://github.com/ickerio): This project was heavily inspired by [pubg.js](https://github.com/ickerio/pubg.js) diff --git a/example/index.html b/example/index.html deleted file mode 100644 index 3a0d8ee..0000000 --- a/example/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - PUBG.ts - - -
- - - diff --git a/example/public/favicon.png b/example/public/favicon.png deleted file mode 100644 index f7b0197..0000000 Binary files a/example/public/favicon.png and /dev/null differ diff --git a/example/src/App.vue b/example/src/App.vue deleted file mode 100644 index 33077ae..0000000 --- a/example/src/App.vue +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - diff --git a/example/src/components/Button.vue b/example/src/components/Button.vue deleted file mode 100644 index 5f0c7ed..0000000 --- a/example/src/components/Button.vue +++ /dev/null @@ -1,37 +0,0 @@ - - - - - diff --git a/example/src/env.d.ts b/example/src/env.d.ts deleted file mode 100644 index 2da5596..0000000 --- a/example/src/env.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -/// - -declare module "*.vue" { - import { DefineComponent } from "vue"; - // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types - const component: DefineComponent<{}, {}, any>; - export default component; -} diff --git a/example/src/main.ts b/example/src/main.ts deleted file mode 100644 index 49009a5..0000000 --- a/example/src/main.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { createApp } from "vue"; - -import "virtual:windi.css"; - -import App from "./App.vue"; - -createApp(App).mount("#app"); diff --git a/example/vite.config.ts b/example/vite.config.ts deleted file mode 100644 index bad8419..0000000 --- a/example/vite.config.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { defineConfig } from "vite"; -import { join } from "path"; -import Vue from "@vitejs/plugin-vue"; -import WindiCSS from "vite-plugin-windicss"; -import WindiCSSColors from "windicss/colors"; -import WindiCSSPluginFilters from "windicss/plugin/filters"; - -export default defineConfig({ - envDir: join(process.cwd()), - plugins: [ - Vue(), - WindiCSS({ - config: { - darkMode: "class", - plugins: [WindiCSSPluginFilters], - theme: { - extend: { - colors: { - gray: WindiCSSColors.trueGray, - }, - }, - }, - }, - }), - ], -}); diff --git a/package.json b/package.json index 21dc633..1415562 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pubg.ts", - "version": "0.1.7", + "version": "1.1.0", "description": "A lightweight PUBG TypeScript API Wrapper", "repository": { "type": "git", @@ -28,29 +28,54 @@ "LICENSE", "README.md" ], + "exports": { + ".": { + "import": "./dist/index.mjs", + "require": "./dist/index.js", + "types": "./dist/index.d.ts" + }, + "./constants": { + "import": "./dist/constants.mjs", + "require": "./dist/constants.js", + "types": "./dist/constants.d.ts" + }, + "./types": { + "import": "./dist/types.mjs", + "require": "./dist/types.js", + "types": "./dist/types.d.ts" + } + }, + "typesVersions": { + "*": { + "constants": [ + "./dist/constants.d.ts" + ], + "types": [ + "./dist/types.d.ts" + ] + } + }, "scripts": { - "dev": "npm run build -- --watch", + "coverage": "vitest run --coverage", + "dev": "yarn build --watch", "build": "rimraf dist && tsup", - "build:prod": "cross-env NODE_ENV=production npm run build", - "example:build": "vite build ./example/", - "example:dev": "vite ./example/", - "example:preview": "vite preview ./example/" + "build:prod": "cross-env NODE_ENV=production yarn build", + "test": "vitest run", + "test:watch": "vitest watch", + "test:ui": "vitest watch --ui" + }, + "dependencies": { + "axios": "^0.27.2" }, "devDependencies": { - "@heroicons/vue": "^1.0.4", - "@types/node": "^16.10.2", - "@vitejs/plugin-vue": "^1.9.2", - "@vueuse/core": "^6.5.3", + "@types/node": "^17.0.41", + "@vitest/ui": "^0.14.2", + "c8": "^7.11.3", "cross-env": "^7.0.3", + "dotenv": "^16.0.1", "rimraf": "^3.0.2", - "tsup": "^5.3.0", - "typescript": "^4.4.3", - "vite": "^2.6.2", - "vite-plugin-windicss": "^1.4.9", - "vue": "^3.2.19", - "windicss": "^3.1.9" - }, - "dependencies": { - "axios": "^0.22.0" + "tsup": "^6.1.0", + "typescript": "^4.7.3", + "vitest": "^0.14.2" } } diff --git a/src/client.ts b/src/client.ts index 5413cfe..868560a 100644 --- a/src/client.ts +++ b/src/client.ts @@ -1,27 +1,8 @@ -import { - getMatch, - getPlayer, - getPlayerSeason, - getSamples, - getSeason, - getSeasons, - getStatus, - getTelemetry, - getTournament, - getTournaments, -} from "."; -import { ErrorCode, Shard } from "./types"; +import { getMatch, getPlayer } from "~/modules"; +import { ErrorCode, Shard } from "~/types"; -import type { - MatchOptions, - PlayerOptions, - PlayerSeasonOptions, - SamplesOptions, - SeasonOptions, - TelemetryOptions, - TournamentOptions, -} from "."; -import type { WithApiShard } from "./types/util"; +import type { MatchOptions, PlayerOptions } from "~/modules"; +import type { WithApiShard } from "~/util/types"; interface ClientOptions extends WithApiShard {} @@ -30,8 +11,11 @@ type ClientFnOptions = Omit; export class Client { /** * PUBG Developer API access token + * + * @see https://documentation.pubg.com/en/api-keys.html#api-keys */ private _apiKey: string; + /** * Default shard to get if none provided in methods */ @@ -53,125 +37,35 @@ export class Client { } /** - * Get a match from a match id + * @name `getMatch` * - * @param {Object} options - Match Options - * @param {string} options.id - Match ID - */ - public async getMatch({ id }: ClientFnOptions) { - return await getMatch({ - apiKey: this._apiKey, - id, - shard: this._shard, - }); - } - - /** - * Get player by the given id or name + * @description Get a match from a match id * - * @param {Object} options - Player Options - * @param {boolean} [options.id] - Whether the provided value(s) are ID's, not player names - * @param {string | Array} options.value - Player or array of players to fetch + * @param {String} options.id - Match ID */ - public async getPlayer({ - id, - skipFailed, - value, - }: ClientFnOptions) { - return await getPlayer({ + public getMatch({ id }: ClientFnOptions) { + return getMatch({ apiKey: this._apiKey, id, shard: this._shard, - skipFailed, - value, }); } /** - * Get data for a single season of a player(s) by a given id or name + * @name `getPlayer` * - * @param {Object} options - Player Season Options - */ - public async getPlayerSeason(options: ClientFnOptions) { - return await getPlayerSeason({ - apiKey: this._apiKey, - shard: this._shard, - ...options, - }); - } - - /** - * Get a list of all past matches from the api - * - * @param {Object} options - Samples Options - * @param {Date | undefined} [options.createdAt] - The starting search date for the matches in UTC - */ - public async getSamples({ createdAt }: ClientFnOptions = {}) { - return await getSamples({ - apiKey: this._apiKey, - createdAt, - shard: this._shard, - }); - } - - /** - * Get data on a specified season. Whether current or a player(s) - * By default will fetch the current season + * @description Get player by the given id or name * - * @param {Object} options - Season Options - * @param {string | undefined} [options.id] - Season ID + * @param {Boolean} [options.id] - Whether the provided value(s) are ID's, not player names + * @param {Array} options.value - Player or array of players to fetch */ - public async getSeason({ id }: ClientFnOptions = {}) { - return await getSeason({ + public getPlayer({ id, skipFailed, value }: ClientFnOptions) { + return getPlayer({ apiKey: this._apiKey, id, shard: this._shard, - }); - } - - /** - * Get an array of all seasons - */ - public async getSeasons() { - return await getSeasons({ - apiKey: this._apiKey, - shard: this._shard, - }); - } - - /** - * Gets the status of the API - */ - public async getStatus() { - return await getStatus({ - apiKey: this._apiKey, - }); - } - - /** - * Fetches telemetry data object - * - * @param {Object} options - Telemetry Options - * @param {string} options.url - URL of the telemetry object - */ - public async getTelemetry({ url }: ClientFnOptions) { - return await getTelemetry({ - apiKey: this._apiKey, - url, - }); - } - - /** - * Gets all or a specific tournament with a provided id - * - * @param {Object} options - Tournament Options - * @param {string | undefined} [options.id] - Tournament ID - */ - public async getTournament({ id }: ClientFnOptions = {}) { - if (id) return await getTournament({ apiKey: this._apiKey, id }); - - return await getTournaments({ - apiKey: this._apiKey, + skipFailed, + value, }); } } diff --git a/src/endpoints/getPlayerSeason.ts b/src/endpoints/getPlayerSeason.ts deleted file mode 100644 index 67d4513..0000000 --- a/src/endpoints/getPlayerSeason.ts +++ /dev/null @@ -1,132 +0,0 @@ -import { ResponseObjectType } from ".."; -import { chunkify, fetch, fetchAll } from "../util"; - -import type { - ApiPlayerSeason, - BaseResponse, - GameModeStatGamemode, - PlayerSeason, - PromiseResult, - Season, -} from ".."; -import type { WithApiShard } from "../types/util"; - -export interface PlayerSeasonOptions extends WithApiShard { - /** - * Gamemode type - */ - gamemode: GameModeStatGamemode; - - /** - * Player object or id - */ - player: string | Array; - - /** - * Fetch player ranked statistics - */ - ranked?: boolean; - - /** - * Season object or id - */ - season: Season | string; -} - -interface ApiPlayerSeasonResponse extends BaseResponse { - /** - * A players stats & season data - * - * @see https://documentation.pubg.com/en/seasons-endpoint.html#/Season_Stats - */ - data: ApiPlayerSeason; -} - -export type PlayerSeasonResponse = PromiseResult< - PlayerSeason | Array ->; - -/** - * Get data for a single season of a player(s) by a given id or name - * - * @param {Object} options - Player Season Options - * @param {string} options.apiKey - PUBG Developer API key - * @param {string | undefined} [options.shard] - Platform Shard - */ -export async function getPlayerSeason({ - gamemode, - player, - ranked = false, - season, - ...rest -}: PlayerSeasonOptions): PlayerSeasonResponse { - const seasonId = typeof season === "object" ? season.id : season; - - if (ranked) - return { - data: null, - error: { - title: "Unimplemented", - detail: "Ranked player season stats are currently not supported", - }, - }; - - if (Array.isArray(player)) { - const fetchOptions = chunkify(player).map((chunk) => ({ - ...rest, - endpoint: `seasons/${seasonId}/gameMode/${gamemode}/players`, - params: { - ["filter[playerIds]"]: chunk.join(","), - }, - })); - - const responses = await fetchAll(fetchOptions); - - const error = responses.find((res) => res.error !== null); - if (error && error.error) return error; - - const data = responses.map(({ data }) => data!.data).flat(); - - return { - data: data.map((d) => handlePlayerSeasonData(d)), - error: null, - }; - } - - const response = await fetch({ - ...rest, - endpoint: `players/${player}/seasons/${seasonId}`, - }); - - if (response.error) return response; - - return { - data: handlePlayerSeasonData(response.data.data), - error: null, - }; -} - -function handlePlayerSeasonData(data: ApiPlayerSeason): PlayerSeason { - switch (data.type) { - case ResponseObjectType.PLAYER_SEASON: - return { - bestRankPoint: data.attributes.bestRankPoint ?? undefined, - gamemodeStats: data.attributes.gameModeStats, - matches: Object.fromEntries( - Object.entries(data.relationships).map(([key, value]) => - key === "player" || key === "season" ? [] : [key, value] - ) - ), - playerId: data.relationships.player.data.id, - seasonId: data.relationships.season.data.id, - type: data.type, - }; - case ResponseObjectType.RANKED_PLAYER_SEASON: - return { - playerId: data.relationships.player.data.id, - rankedGameModeStats: data.attributes.rankedGameModeStats, - seasonId: data.relationships.season.data.id, - type: data.type, - }; - } -} diff --git a/src/endpoints/getSamples.ts b/src/endpoints/getSamples.ts deleted file mode 100644 index c417e7a..0000000 --- a/src/endpoints/getSamples.ts +++ /dev/null @@ -1,96 +0,0 @@ -import { fetch } from "../util"; - -import type { - ApiSampleMatches, - PromiseResult, - Sample, - SampleMatches, -} from ".."; -import type { WithApiShard } from "../types/util"; - -export interface SamplesOptions extends WithApiShard { - /** - * The starting search date for the matches in UTC - * - * @default now() - 24hrs - */ - createdAt?: Date; -} - -interface ApiSamplesResponse { - data: { - /** - * Sample specific attributes / metadata - * - * @see https://documentation.pubg.com/en/samples-endpoint.html - */ - attributes: Sample; - - /** - * ID of the sample - */ - id: string; - - /** - * References to resource objects related to this sample - */ - relationships: { - matches: ApiSampleMatches; - }; - }; -} - -/** - * @see https://documentation.pubg.com/en/samples-endpoint.html - */ -export type SamplesResponse = PromiseResult< - Sample & { - /** - * ID of the sample - */ - id: string; - - /** - * - */ - matches: SampleMatches; - } ->; - -/** - * Get a list of all past matches from the api - * - * @param {Object} options - Sample Options - * @param {string} options.apiKey - PUBG Developer API key - * @param {Date | undefined} options.createdAt - The starting search date for the matches in UTC - * @param {string | undefined} [options.shard] - Platform Shard - */ -export async function getSamples({ - apiKey, - createdAt, - shard, -}: SamplesOptions): SamplesResponse { - const response = await fetch({ - apiKey, - endpoint: "samples", - params: createdAt - ? { - "filter[createdAt-start]": createdAt.toISOString(), - } - : undefined, - shard, - }); - - if (response.error) return response; - - const { data } = response.data; - - return { - data: { - ...data.attributes, - id: data.id, - matches: data.relationships.matches.data, - }, - error: null, - }; -} diff --git a/src/endpoints/getSeason.ts b/src/endpoints/getSeason.ts deleted file mode 100644 index 2bd7d17..0000000 --- a/src/endpoints/getSeason.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { getSeasons } from "."; - -import type { PromiseResult, Season } from ".."; -import type { WithApiShard } from "../types/util"; - -export interface SeasonOptions extends WithApiShard { - /** - * Season ID - */ - id?: string; -} - -export type SeasonResponse = PromiseResult; - -/** - * Get data on a specified season. Whether current or a player(s) - * - * By default will fetch the current season - * - * @param {Object} options - Season Options - * @param {string} options.apiKey - PUBG Developer API key - * @param {string | undefined} [options.id] - Season ID - * @param {string | undefined} [options.shard] - Platform Shard - */ -export async function getSeason({ - id, - ...rest -}: SeasonOptions): SeasonResponse { - // TODO: Pass through override error code - const seasons = await getSeasons({ - ...rest, - }); - - if (seasons.error) return seasons; - - return { - data: seasons.data.find((season) => - id ? id === season.id : season.isCurrentSeason - ), - error: null, - }; -} diff --git a/src/endpoints/getSeasons.ts b/src/endpoints/getSeasons.ts deleted file mode 100644 index f105b7b..0000000 --- a/src/endpoints/getSeasons.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { fetch } from "../util"; - -import type { ApiSeason, BaseResponse, PromiseResult, Season } from ".."; -import type { WithApiShard } from "../types/util"; - -export interface SeasonsOptions extends WithApiShard {} - -interface ApiSeasonsResponse extends BaseResponse { - /** - * An array of available seasons - * - * @see https://documentation.pubg.com/en/seasons-endpoint.html - */ - data: Array; -} - -/** - * An promised array of available seasons - * - * @see https://documentation.pubg.com/en/seasons-endpoint.html - */ -export type SeasonsResponse = PromiseResult>; - -/** - * Get an array of all seasons of a provided shard - * - * @param {Object} options - Seasons Options - * @param {string} options.apiKey - PUBG Developer API key - * @param {string | undefined} [options.shard] - Platform Shard - */ -export async function getSeasons(options: SeasonsOptions): SeasonsResponse { - const response = await fetch({ - ...options, - endpoint: "seasons", - }); - - if (response.error) return response; - - const { data } = response.data; - - return { - data: data.map(({ attributes, id, type }) => ({ - id, - isCurrentSeason: attributes.isCurrentSeason, - isOffseason: attributes.isOffseason, - type, - })), - error: null, - }; -} diff --git a/src/endpoints/getStatus.ts b/src/endpoints/getStatus.ts deleted file mode 100644 index 6bc4fda..0000000 --- a/src/endpoints/getStatus.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { fetch } from "../util"; - -import type { ResponseObjectType, PromiseResult } from ".."; -import type { WithApiKey } from "../types/util"; - -export interface StatusOptions extends WithApiKey {} - -interface ApiStatusResponse { - /** - * The current status of the API - * - * @see https://documentation.pubg.com/en/samples-endpoint.html - */ - data: { - id: string; - type: ResponseObjectType.STATUS; - }; -} - -/** - * The current status of the API - * - * @see https://documentation.pubg.com/en/samples-endpoint.html - */ -export type StatusResponse = PromiseResult<{ - id: string; - type: ResponseObjectType.STATUS; -}>; - -/** - * Gets the status of the API - * - * @param {Object} options - Status Options - * @param {string} options.apiKey - PUBG Developer API key - */ -export async function getStatus({ apiKey }: StatusOptions): StatusResponse { - const response = await fetch({ - apiKey, - endpoint: "status", - root: true, - }); - - if (response.error) return response; - - return { - data: response.data.data, - error: null, - }; -} diff --git a/src/endpoints/getTelemetry.ts b/src/endpoints/getTelemetry.ts deleted file mode 100644 index d2b0e26..0000000 --- a/src/endpoints/getTelemetry.ts +++ /dev/null @@ -1,44 +0,0 @@ -import axios from "axios"; - -import { BASE_HEADERS } from "../constants"; - -import type { AxiosResponse } from "axios"; - -import type { BaseResponse, Telemetry } from ".."; -import type { WithApiKey } from "../types/util"; - -export interface TelemetryOptions extends WithApiKey { - /** - * URL of the telemetry object - */ - url: string; -} - -interface ApiTelemetryResponse extends BaseResponse {} - -export type TelemetryResponse = Promise; - -/** - * Fetches telemetry data from a provided URL - * - * @param {Object} options - Telemetry Options - * @param {string} options.apiKey - PUBG Developer API key - * @param {string | undefined} [options.shard] - Platform Shard - * @param {string} options.url - URL of the telemetry object - */ -export async function getTelemetry({ - apiKey, - url, -}: TelemetryOptions): TelemetryResponse { - const response: AxiosResponse = await axios(url, { - headers: { - ...BASE_HEADERS, - Authorization: `Bearer ${apiKey}`, - }, - responseType: "json", - }); - - if ("error" in response) return response; - - return response.data; -} diff --git a/src/endpoints/getTournament.ts b/src/endpoints/getTournament.ts deleted file mode 100644 index 969c11c..0000000 --- a/src/endpoints/getTournament.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { fetch } from "../util"; - -import type { - ApiTournament, - BaseResponse, - ApiMatch, - PromiseResult, - Tournament, - Tournaments, -} from ".."; -import type { WithApiKey } from "../types/util"; - -export interface TournamentOptions extends WithApiKey { - /** - * Tournament ID - */ - id?: string; -} - -interface ApiTournamentResponse extends BaseResponse { - /** - * Data about a specified tournament - * - * @see https://documentation.pubg.com/en/tournaments-endpoint.html - */ - data: ApiTournament; - - /** - * Matches related to the selected tournament - */ - included: Array>; -} - -export type TournamentResponse = PromiseResult>; - -/** - * Gets a specific tournament using a provided match id - * - * @param {Object} options - Tournament Options - * @param {string} options.apiKey - PUBG Developer API key - * @param {string} options.id - Tournament ID - */ -export async function getTournament({ - apiKey, - id, -}: TournamentOptions): TournamentResponse { - const response = await fetch({ - apiKey, - endpoint: `tournaments/${id}`, - root: true, - }); - - if (response.error) return response; - - const { data, included } = response.data; - - return { - data: { - ...data, - matches: included, - }, - error: null, - }; -} diff --git a/src/endpoints/getTournaments.ts b/src/endpoints/getTournaments.ts deleted file mode 100644 index bbc9ee9..0000000 --- a/src/endpoints/getTournaments.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { fetch } from "../util"; - -import type { - ApiTournaments, - BaseResponse, - PromiseResult, - Tournament, - Tournaments, -} from ".."; -import type { WithApiKey } from "../types/util"; - -export interface TournamentsOptions extends WithApiKey {} - -interface ApiTournamentsResponse extends BaseResponse { - /** - * @see https://documentation.pubg.com/en/tournaments-endpoint.html - */ - data: Array; -} - -export type TournamentsResponse = PromiseResult< - Tournament | Array ->; - -/** - * Gets all tournaments - */ -export async function getTournaments({ - apiKey, -}: TournamentsOptions): TournamentsResponse { - const response = await fetch({ - apiKey, - endpoint: "tournaments", - root: true, - }); - - if (response.error) return response; - - const { data } = response.data; - - return { - data: data.map(({ attributes, id, type }) => ({ - createdAt: attributes.createdAt, - id, - type, - })), - error: null, - }; -} diff --git a/src/endpoints/index.ts b/src/endpoints/index.ts deleted file mode 100644 index 1007097..0000000 --- a/src/endpoints/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -export * from "./getMatch"; -export * from "./getPlayer"; -export * from "./getPlayerSeason"; -export * from "./getSamples"; -export * from "./getSeason"; -export * from "./getSeasons"; -export * from "./getStatus"; -export * from "./getTelemetry"; -export * from "./getTournament"; -export * from "./getTournaments"; diff --git a/src/index.ts b/src/index.ts index 84c864f..e2f07ab 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,6 @@ +import * as modules from "./modules"; + export * from "./client"; -export * from "./endpoints"; +export * from "./modules"; -export * from "./types"; +export default modules; diff --git a/src/modules/index.ts b/src/modules/index.ts new file mode 100644 index 0000000..1512251 --- /dev/null +++ b/src/modules/index.ts @@ -0,0 +1,2 @@ +export * from "./match"; +export * from "./player"; diff --git a/src/modules/match/index.ts b/src/modules/match/index.ts new file mode 100644 index 0000000..daadc16 --- /dev/null +++ b/src/modules/match/index.ts @@ -0,0 +1,3 @@ +export { getMatch } from "./match.module"; + +export type { MatchOptions } from "./match.module"; diff --git a/src/endpoints/getMatch.ts b/src/modules/match/match.module.ts similarity index 59% rename from src/endpoints/getMatch.ts rename to src/modules/match/match.module.ts index f1872ee..301501a 100644 --- a/src/endpoints/getMatch.ts +++ b/src/modules/match/match.module.ts @@ -1,19 +1,9 @@ -import { fetch } from "../util"; +import { fetch } from "~/util"; -import type { - ApiMatch, - BaseResponse, - Match, - Participant, - PromiseResult, - Roster, -} from ".."; -import type { WithApiShard } from "../types/util"; +import type { BaseResponse, Module, Result, WithApiShard } from "~/util/types"; +import type { ApiMatch, Match, Participant, Roster } from "./match.types"; export interface MatchOptions extends WithApiShard { - /** - * Match ID - */ id: string; } @@ -33,17 +23,19 @@ interface ApiMatchResponse extends BaseResponse { included: Array; } -export type MatchResponse = PromiseResult; - /** - * Get a match from a specificed match id + * @name `getMatch` * - * @param {Object} options - Match Options - * @param {string} options.apiKey - PUBG Developer API key - * @param {string} options.id - Match ID - * @param {string | undefined} [options.shard] - Platform Shard + * @description Get a match from a specificed match id + * + * @param {String} options.apiKey - PUBG Developer API key + * @param {String} options.id - Match ID + * @param {String} [options.shard="Steam"] - Platform Shard */ -export async function getMatch({ id, ...rest }: MatchOptions): MatchResponse { +export const getMatch: Module> = async ({ + id, + ...rest +}) => { const response = await fetch({ ...rest, endpoint: `matches/${id}`, @@ -63,4 +55,4 @@ export async function getMatch({ id, ...rest }: MatchOptions): MatchResponse { }, error: null, }; -} +}; diff --git a/src/modules/match/match.test.ts b/src/modules/match/match.test.ts new file mode 100644 index 0000000..806a224 --- /dev/null +++ b/src/modules/match/match.test.ts @@ -0,0 +1,120 @@ +import dotenv from "dotenv"; +import { beforeAll, describe, it, expect } from "vitest"; + +import { Client } from "~/client"; +import { Gamemode, Shard, Map, MatchType } from "~/types"; +import { getMatch, getPlayer } from "~/modules"; +import { patternMatchUUID, testPlayers } from "~/util/tests"; +import { ResponseObjectType } from "~/util/types"; + +describe("Get Match", () => { + let apiKey: string; + let matchIds: Array; + let singleMatchId: string; + + beforeAll(async () => { + dotenv.config(); + apiKey = process.env.PUBG_API_KEY; + + const { data: player, error } = await getPlayer({ + apiKey, + id: true, + value: testPlayers[0].id, + }); + + expect(error).toBeNull(); + + expect(player).toBeTypeOf("object"); + + expect(Array.isArray(player)).toBe(true); + + matchIds = player![0].matches.map(({ id }) => id); + singleMatchId = matchIds[0]; + }); + + describe.concurrent("Function", () => { + it.concurrent("Single Match", async () => { + const { data: match, error } = await getMatch({ + apiKey, + id: singleMatchId, + }); + + expect(error).toBeNull(); + + expect(match).toBeTypeOf("object"); + + expect(match).toStrictEqual( + expect.objectContaining({ + assets: expect.arrayContaining([ + expect.objectContaining({ + id: expect.stringMatching(patternMatchUUID), + type: "asset", + }), + ]), + id: expect.stringMatching(patternMatchUUID), + members: expect.arrayContaining([ + expect.objectContaining({ + id: expect.stringMatching(patternMatchUUID), + }), + ]), + type: ResponseObjectType.MATCH, + }) + ); + + expect(match?.gameMode).oneOf(Object.values(Gamemode)); + expect(match?.mapName).oneOf(Object.values(Map)); + expect(match?.matchType).oneOf(Object.values(MatchType)); + expect(match?.shardId).oneOf(Object.values(Shard)); + }); + }); + + describe.concurrent("Client", () => { + let client: Client; + + beforeAll(() => { + client = new Client({ + apiKey, + }); + }); + + it.concurrent("Single Match", async () => { + const { data: match, error } = await client.getMatch({ + id: singleMatchId, + }); + + expect(error).toBeNull(); + + expect(match).toBeTypeOf("object"); + + expect(match).toStrictEqual( + expect.objectContaining({ + assets: expect.arrayContaining([ + expect.objectContaining({ + id: expect.stringMatching(patternMatchUUID), + type: "asset", + }), + ]), + id: expect.stringMatching(patternMatchUUID), + members: expect.arrayContaining([ + expect.objectContaining({ + id: expect.stringMatching(patternMatchUUID), + }), + ]), + type: ResponseObjectType.MATCH, + }) + ); + + expect(match?.gameMode).oneOf(Object.values(Gamemode)); + expect(match?.mapName).oneOf(Object.values(Map)); + expect(match?.matchType).oneOf(Object.values(MatchType)); + expect(match?.shardId).oneOf(Object.values(Shard)); + }); + }); + + /** + * @todo Add tests with bad data expecting error response + * ``` + * describe.concurrent("Invalid Data", () => {}); + * ``` + */ +}); diff --git a/src/types/match.ts b/src/modules/match/match.types.ts similarity index 98% rename from src/types/match.ts rename to src/modules/match/match.types.ts index ed42a5b..84815bd 100644 --- a/src/types/match.ts +++ b/src/modules/match/match.types.ts @@ -1,15 +1,17 @@ import type { - ApiAssets, - Assets, DeathType, Gamemode, Map, MatchType, - ResponseObjectType, SeasonState, Shard, -} from "."; -import type { WithLinks } from "./util"; +} from "~/types"; +import type { + ApiAssets, + Asset, + ResponseObjectType, + WithLinks, +} from "~/util/types"; export interface MatchAttributes { /** @@ -53,12 +55,12 @@ export interface MatchAttributes { shardId: Shard; /** - * Unknown + * @todo Unknown */ stats: unknown | null; /** - * Unknown + * @todo Unknown */ tags: unknown | null; @@ -215,7 +217,7 @@ export interface Participant { */ kills: number; /** - * Unknown + * @todo Unknown * * Min: 0 */ @@ -343,7 +345,7 @@ export interface Match extends Pick, MatchAttributes { /** * Any assets a part of the match */ - assets: Assets; + assets: Array; /** * An array of all members (participants/rosters) who took part in the game */ diff --git a/src/modules/player/index.ts b/src/modules/player/index.ts new file mode 100644 index 0000000..e29081d --- /dev/null +++ b/src/modules/player/index.ts @@ -0,0 +1,3 @@ +export { getPlayer } from "./player.module"; + +export type { PlayerOptions } from "./player.module"; diff --git a/src/endpoints/getPlayer.ts b/src/modules/player/player.module.ts similarity index 85% rename from src/endpoints/getPlayer.ts rename to src/modules/player/player.module.ts index 00f1c04..b8095b8 100644 --- a/src/endpoints/getPlayer.ts +++ b/src/modules/player/player.module.ts @@ -1,7 +1,7 @@ -import { chunkify, fetchAll } from "../util"; +import { chunkify, fetchAll } from "~/util"; -import type { ApiPlayer, BaseResponse, Player, PromiseResult } from ".."; -import type { WithApiShard } from "../types/util"; +import type { BaseResponse, Module, Result, WithApiShard } from "~/util/types"; +import type { ApiPlayer, Player } from "./player.types"; export interface PlayerOptions extends WithApiShard { /** @@ -37,14 +37,9 @@ interface ApiPlayerResponse extends BaseResponse { } /** - * Player(s) data & their recent matches (Up to 14 days old) + * @name `getPlayer`` * - * @see https://documentation.pubg.com/en/players-endpoint.html/ - */ -export type PlayerResponse = PromiseResult>; - -/** - * Get player(s) by a given name(s) or id(s) + * @description Get player(s) by a given name(s) or id(s) * * @param {Object} options - Player Options * @param {string} options.apiKey - PUBG Developer API key @@ -52,12 +47,12 @@ export type PlayerResponse = PromiseResult>; * @param {string | undefined} [options.shard] - Platform Shard * @param {string | Array} - Player or array of players to fetch */ -export async function getPlayer({ +export const getPlayer: Module>> = async ({ id = false, skipFailed = false, value, ...rest -}: PlayerOptions): PlayerResponse { +}) => { const isArray = Array.isArray(value); const endpoint = !isArray && id ? `players/${value}` : "players"; @@ -118,4 +113,4 @@ export async function getPlayer({ })), error: null, }; -} +}; diff --git a/src/modules/player/player.test.ts b/src/modules/player/player.test.ts new file mode 100644 index 0000000..a0f75dd --- /dev/null +++ b/src/modules/player/player.test.ts @@ -0,0 +1,284 @@ +import dotenv from "dotenv"; +import { beforeAll, describe, it, expect } from "vitest"; + +import { Client } from "~/client"; +import { getPlayer } from "~/modules"; +import { + patternMatchAccountId, + patternMatchUUID, + testPlayers, +} from "~/util/tests"; +import { ResponseObjectType } from "~/util/types"; +import { Shard } from "~/types"; + +describe("Get Player", () => { + let apiKey: string; + + beforeAll(async () => { + dotenv.config(); + apiKey = process.env.PUBG_API_KEY; + }); + + describe.concurrent("Function", () => { + it.concurrent("Single player name", async () => { + const { name: playerName, id: playerId } = testPlayers[0]; + + const { data: player, error } = await getPlayer({ + apiKey, + id: false, + value: playerName, + }); + + expect(error).toBeNull(); + + expect(player).toBeTypeOf("object"); + + expect(Array.isArray(player)).toBe(true); + + expect(player).toStrictEqual( + expect.arrayContaining([ + expect.objectContaining({ + id: playerId, + matches: expect.arrayContaining([ + expect.objectContaining({ + id: expect.stringMatching(patternMatchUUID), + type: "match", + }), + ]), + name: playerName, + type: ResponseObjectType.PLAYER, + }), + ]) + ); + + expect(player![0]?.shardId).oneOf(Object.values(Shard)); + }); + + it.concurrent("Single player ID", async () => { + const { id: playerId, name: playerName } = testPlayers[0]; + + const { data: player, error } = await getPlayer({ + apiKey, + id: true, + value: playerId, + }); + + expect(error).toBeNull(); + + expect(Array.isArray(player)).toBe(true); + + expect(player).toStrictEqual( + expect.arrayContaining([ + expect.objectContaining({ + id: playerId, + matches: expect.arrayContaining([ + expect.objectContaining({ + id: expect.stringMatching(patternMatchUUID), + type: "match", + }), + ]), + name: playerName, + type: ResponseObjectType.PLAYER, + }), + ]) + ); + + expect(player![0]?.shardId).oneOf(Object.values(Shard)); + }); + + it.concurrent("Multiple player names", async () => { + const { data: player, error } = await getPlayer({ + apiKey, + id: false, + value: testPlayers.map(({ name }) => name), + }); + + expect(error).toBeNull(); + + expect(Array.isArray(player)).toBe(true); + + expect(player).toStrictEqual( + expect.arrayContaining([ + expect.objectContaining({ + id: expect.stringMatching(patternMatchAccountId), + matches: expect.arrayContaining([ + expect.objectContaining({ + id: expect.stringMatching(patternMatchUUID), + type: "match", + }), + ]), + type: ResponseObjectType.PLAYER, + }), + ]) + ); + + expect(player![0]?.shardId).oneOf(Object.values(Shard)); + }); + + it.concurrent("Multiple player ID's", async () => { + const { data: player, error } = await getPlayer({ + apiKey, + id: true, + value: testPlayers.map(({ id }) => id), + }); + + expect(error).toBeNull(); + + expect(Array.isArray(player)).toBe(true); + + expect(player).toStrictEqual( + expect.arrayContaining([ + expect.objectContaining({ + id: expect.stringMatching(patternMatchAccountId), + matches: expect.arrayContaining([ + expect.objectContaining({ + id: expect.stringMatching(patternMatchUUID), + type: "match", + }), + ]), + type: ResponseObjectType.PLAYER, + }), + ]) + ); + + expect(player![0]?.shardId).oneOf(Object.values(Shard)); + }); + }); + + describe.concurrent("Client", () => { + let client: Client; + + beforeAll(() => { + client = new Client({ + apiKey, + }); + }); + + it.concurrent("Single player name", async () => { + const { name: playerName, id: playerId } = testPlayers[0]; + + const { data: player, error } = await client.getPlayer({ + id: false, + value: playerName, + }); + + expect(error).toBeNull(); + + expect(player).toBeTypeOf("object"); + + expect(Array.isArray(player)).toBe(true); + + expect(player).toStrictEqual( + expect.arrayContaining([ + expect.objectContaining({ + id: playerId, + matches: expect.arrayContaining([ + expect.objectContaining({ + id: expect.stringMatching(patternMatchUUID), + type: "match", + }), + ]), + name: playerName, + type: ResponseObjectType.PLAYER, + }), + ]) + ); + + expect(player![0]?.shardId).oneOf(Object.values(Shard)); + }); + + it.concurrent("Single player ID", async () => { + const { id: playerId, name: playerName } = testPlayers[0]; + + const { data: player, error } = await client.getPlayer({ + id: true, + value: playerId, + }); + + expect(error).toBeNull(); + + expect(Array.isArray(player)).toBe(true); + + expect(player).toStrictEqual( + expect.arrayContaining([ + expect.objectContaining({ + id: playerId, + matches: expect.arrayContaining([ + expect.objectContaining({ + id: expect.stringMatching(patternMatchUUID), + type: "match", + }), + ]), + name: playerName, + type: ResponseObjectType.PLAYER, + }), + ]) + ); + + expect(player![0]?.shardId).oneOf(Object.values(Shard)); + }); + + it.concurrent("Multiple player names", async () => { + const { data: player, error } = await client.getPlayer({ + id: false, + value: testPlayers.map(({ name }) => name), + }); + + expect(error).toBeNull(); + + expect(Array.isArray(player)).toBe(true); + + expect(player).toStrictEqual( + expect.arrayContaining([ + expect.objectContaining({ + id: expect.stringMatching(patternMatchAccountId), + matches: expect.arrayContaining([ + expect.objectContaining({ + id: expect.stringMatching(patternMatchUUID), + type: "match", + }), + ]), + type: ResponseObjectType.PLAYER, + }), + ]) + ); + + expect(player![0]?.shardId).oneOf(Object.values(Shard)); + }); + + it.concurrent("Multiple player ID's", async () => { + const { data: player, error } = await client.getPlayer({ + id: true, + value: testPlayers.map(({ id }) => id), + }); + + expect(error).toBeNull(); + + expect(Array.isArray(player)).toBe(true); + + expect(player).toStrictEqual( + expect.arrayContaining([ + expect.objectContaining({ + id: expect.stringMatching(patternMatchAccountId), + matches: expect.arrayContaining([ + expect.objectContaining({ + id: expect.stringMatching(patternMatchUUID), + type: "match", + }), + ]), + type: ResponseObjectType.PLAYER, + }), + ]) + ); + + expect(player![0]?.shardId).oneOf(Object.values(Shard)); + }); + }); + + /** + * @todo Add tests with bad data expecting error response + * ``` + * describe.concurrent("Invalid Data", () => {}); + * ``` + */ +}); diff --git a/src/types/player.ts b/src/modules/player/player.types.ts similarity index 87% rename from src/types/player.ts rename to src/modules/player/player.types.ts index b9a5183..74ffc22 100644 --- a/src/types/player.ts +++ b/src/modules/player/player.types.ts @@ -1,7 +1,6 @@ -import { ResponseObjectType, Shard } from "."; - -import type { ApiMatch } from "."; -import type { WithLinks } from "./util"; +import type { ApiMatch } from "~/modules/match/match.types"; +import type { Shard } from "~/types"; +import type { ResponseObjectType, WithLinks } from "~/util/types"; interface PlayerAttributes { /** diff --git a/src/types/error.ts b/src/types/error.ts index 6c17d79..bd5c674 100644 --- a/src/types/error.ts +++ b/src/types/error.ts @@ -11,21 +11,3 @@ export interface PubgResponseError { detail: string; title: string; } - -enum PlayerError { - /** - * Not Found - * - * No player(s) found matching the criteria - */ - NOT_FOUND = "not-found", -} - -export const PlayerErrors: { - [Error in PlayerError]: PubgResponseError; -} = { - [PlayerError.NOT_FOUND]: { - detail: "No player(s) found matching the criteria", - title: "Not found", - }, -}; diff --git a/src/types/game.ts b/src/types/game.ts index da23983..ddb9591 100644 --- a/src/types/game.ts +++ b/src/types/game.ts @@ -135,32 +135,32 @@ export enum Gamemode { /** * Conquest Duo's (Third Person Perspective) */ - CONQUEST_DUO = "conquest_duo", + CONQUEST_DUO = "conquest-duo", /** * Conquest Duo's (First Person Perspective) */ - CONQUEST_DUO_FPP = "conquest_duo_fpp", + CONQUEST_DUO_FPP = "conquest-duo-fpp", /** * Conquest Solo's (Third Person Perspective) */ - CONQUEST_SOLO = "conquest_solo", + CONQUEST_SOLO = "conquest-solo", /** * Conquest Solos' (First Person Perspective) */ - CONQUEST_SOLO_FPP = "conquest_solo_fpp", + CONQUEST_SOLO_FPP = "conquest-solo-fpp", /** * Conquest Squad (Third Person Perspective) */ - CONQUEST_SQUAD = "conquest_squad", + CONQUEST_SQUAD = "conquest-squad", /** * Conquest Squad (First Person Perspective) */ - CONQUEST_SQUAD_FPP = "conquest_squad_fpp", + CONQUEST_SQUAD_FPP = "conquest-squad-fpp", /** * Duo's (Third Person Perspective) @@ -170,77 +170,77 @@ export enum Gamemode { /** * Duo's (First Person Perspective) */ - DUO_FPP = "duo_fpp", + DUO_FPP = "duo-fpp", /** * Esports Duo's (Third Person Perspective) */ - ESPORTS_DUO = "esports_duo", + ESPORTS_DUO = "esports-duo", /** * Esports Duo's (First Person Perspective) */ - ESPORTS_DUO_FPP = "esports_duo_fpp", + ESPORTS_DUO_FPP = "esports-duo-fpp", /** * Esports Solo's (Third Person Perspective) */ - ESPORTS_SOLO = "esports_solo", + ESPORTS_SOLO = "esports-solo", /** * Esports Solo's (First Person Perspective) */ - ESPORTS_SOLO_FPP = "esports_solo_fpp", + ESPORTS_SOLO_FPP = "esports-solo-fpp", /** * Esports Squad (Third Person Perspective) */ - ESPORTS_SQUAD = "esports_squad", + ESPORTS_SQUAD = "esports-squad", /** * Esports Squad (First Person Perspective) */ - ESPORTS_SQUAD_FPP = "esports_squad_fpp", + ESPORTS_SQUAD_FPP = "esports-squad-fpp", /** - * Unknown (First Person Perspective) + * @todo Unknown (First Person Perspective) */ - LAB_FPP = "lab_fpp", + LAB_FPP = "lab-fpp", /** - * Unknown (Third Person Perspective) + * @todo Unknown (Third Person Perspective) */ - LAB_TPP = "lab_tpp", + LAB_TPP = "lab-tpp", /** * Normal Duo's (Third Person Perspective) */ - NORMAL_DUO = "normal_duo", + NORMAL_DUO = "normal-duo", /** * Normal Duo's (First Person Perspective) */ - NORMAL_DUO_FPP = "normal_duo_fpp", + NORMAL_DUO_FPP = "normal-duo-fpp", /** * Normal Solo's (Third Person Perspective) */ - NORMAL_SOLO = "normal_solo", + NORMAL_SOLO = "normal-solo", /** * Normal Solo's (First Person Perspective) */ - NORMAL_SOLO_FPP = "normal_solo_fpp", + NORMAL_SOLO_FPP = "normal-solo-fpp", /** * Normal Squad (Third Person Perspective) */ - NORMAL_SQUAD = "normal_squad", + NORMAL_SQUAD = "normal-squad", /** * Normal Squad (First Person Perspective) */ - NORMAL_SQUAD_FPP = "normal_squad_fpp", + NORMAL_SQUAD_FPP = "normal-squad-fpp", /** * Solo's (Third Person Perspective) @@ -250,7 +250,7 @@ export enum Gamemode { /** * Solo's (First Person Perspective) */ - SOLO_FPP = "solo_fpp", + SOLO_FPP = "solo-fpp", /** * Squad (Third Person Perspective) @@ -260,7 +260,7 @@ export enum Gamemode { /** * Squad (First Person Perspective) */ - SQUAD_FPP = "squad_fpp", + SQUAD_FPP = "squad-fpp", /** * Team Deathmatch @@ -270,60 +270,60 @@ export enum Gamemode { /** * War Duo's (Third Person Perspective) */ - WAR_DUO = "war_duo", + WAR_DUO = "war-duo", /** * War Duo's (First Person Perspective) */ - WAR_DUO_FPP = "war_duo_fpp", + WAR_DUO_FPP = "war-duo-fpp", /** * War Solo's (Third Person Perspective) */ - WAR_SOLO = "war_solo", + WAR_SOLO = "war-solo", /** * War Solo's (First Person Perspective) */ - WAR_SOLO_FPP = "war_solo_fpp", + WAR_SOLO_FPP = "war-solo-fpp", /** * War Squad (Third Person Perspective) */ - WAR_SQUAD = "war_squad", + WAR_SQUAD = "war-squad", /** * War Squad (First Person Perspective) */ - WAR_SQUAD_FPP = "war_squad_fpp", + WAR_SQUAD_FPP = "war-squad-fpp", /** * Zombie Duo's (Third Person Perspective) */ - ZOMBIE_DUO = "zombie_duo", + ZOMBIE_DUO = "zombie-duo", /** * Zombie Duo's (First Person Perspective) */ - ZOMBIE_DUO_FPP = "zombie_duo_fpp", + ZOMBIE_DUO_FPP = "zombie-duo-fpp", /** * Zombie Solo's (Third Person Perspective) */ - ZOMBIE_SOLO = "zombie_solo", + ZOMBIE_SOLO = "zombie-solo", /** * Zombie Solo's (First Person Perspective) */ - ZOMBIE_SOLO_FPP = "zombie_solo_fpp", + ZOMBIE_SOLO_FPP = "zombie-solo-fpp", /** * Zombie Squad (Third Person Perspective) */ - ZOMBIE_SQUAD = "zombie_squad", + ZOMBIE_SQUAD = "zombie-squad", /** * Zombie Squad (First Person Perspective) */ - ZOMBIE_SQUAD_FPP = "zombie_squad_fpp", + ZOMBIE_SQUAD_FPP = "zombie-squad-fpp", } diff --git a/src/types/index.ts b/src/types/index.ts index 5a8760b..c5cc0ba 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,8 +1,8 @@ -export * from "./error"; -export * from "./game"; -export * from "./match"; -export * from "./platform"; -export * from "./player"; -export * from "./responses"; -export * from "./season"; -export * from "./telemetry"; +export { ErrorCode } from "./error"; +export type { PubgResponseError } from "./error"; + +export { DeathType, Gamemode, Map, MatchType } from "./game"; + +export { Region, Shard } from "./platform"; + +export { SeasonState } from "./season"; diff --git a/src/types/platform.ts b/src/types/platform.ts index bbc8306..98a4727 100644 --- a/src/types/platform.ts +++ b/src/types/platform.ts @@ -8,7 +8,7 @@ */ export enum Shard { /** - * Console - PSN/Xbox (getd for the /matches and /samples endpoints) + * Console - Playstation Network / Xbox (getd for the /matches and /samples endpoints) */ CONSOLE = "console", @@ -18,7 +18,7 @@ export enum Shard { KAKAO = "kakao", /** - * PayStation Network + * PlayStation Network */ PSN = "psn", diff --git a/src/types/season.ts b/src/types/season.ts index 1f58411..7fa4088 100644 --- a/src/types/season.ts +++ b/src/types/season.ts @@ -1,51 +1,3 @@ -import type { ResponseObjectType } from "."; - -/** - * Season - * - * @see https://documentation.pubg.com/en/seasons-endpoint.html - */ -export interface ApiSeason { - /** - * Season specific attributes / metadata - */ - attributes: { - /** - * Indicates if the season is active - */ - isCurrentSeason: boolean; - - /** - * Indicates if the season is not active - */ - isOffseason: boolean; - }; - - /** - * Season ID - * - * getd to lookup a player's stats for this season on the /players endpoint - */ - id: string; - - /** - * Identifier for this object type ("season") - */ - type: ResponseObjectType.SEASON; -} - -export interface Season extends Pick { - /** - * Indicates if the season is active - */ - isCurrentSeason: boolean; - - /** - * Indicates if the season is not active - */ - isOffseason: boolean; -} - /** * Season State * @@ -69,695 +21,3 @@ export enum SeasonState { */ PROGRESS = "progress", } - -export type ApiPlayerSeason = - | { - /** - * Season specific attributes / metadata - */ - attributes: { - /** - * @deprecated - * Highest number of rank points the player was awarded during the season across all game modes - * Min: 0 - */ - bestRankPoint?: number; - - /** - * Game Mode stats objects contain a player's aggregated stats for a game mode in the context of a season. - */ - gameModeStats: { - [G in GameModeStatGamemode]: GameModeStat; - }; - }; - - /** - * Lists of up to the 32 most recent match IDs that this player played this season (within the last 14 days) separated by game mode. - * If a player didn't play any matches in a season with a specific game mode (or within the last 14 days), then the array for that game mode will be empty. - */ - relationships: { - matchesDuo: MatchGameModeResponse; - matchesDuoFPP: MatchGameModeResponse; - matchesSolo: MatchGameModeResponse; - matchesSoloFPP: MatchGameModeResponse; - matchesSquad: MatchGameModeResponse; - matchesSquadFPP: MatchGameModeResponse; - player: { - data: { - /** - * Player ID - */ - id: string; - - /** - * Identifier for this object type ("player") - */ - type: ResponseObjectType.PLAYER; - }; - }; - season: { - data: { - /** - * Season ID - */ - id: string; - - /** - * Identifier for this object type ("season") - */ - type: ResponseObjectType.SEASON; - }; - }; - }; - - /** - * Identifier for this object type ("playerSeason") - */ - type: ResponseObjectType.PLAYER_SEASON; - } - | { - /** - * Season specific attributes / metadata - */ - attributes: { - /** - * Ranked Game Mode stats objects contain a player's aggregated ranked stats for a game mode in the context of a season. - */ - rankedGameModeStats: { - [GameModeStatGamemode.SQUAD]: RankedGameModeStats; - [GameModeStatGamemode.SQUAD_FPP]: RankedGameModeStats; - }; - }; - - /** - * References to resource objects related to this match - */ - relationships: { - player: { - data: { - /** - * Player ID - */ - id: string; - - /** - * Identifier for this object type ("player") - */ - type: ResponseObjectType.PLAYER; - }; - }; - season: { - data: { - /** - * Season ID - */ - id: string; - - /** - * Identifier for this object type ("season") - */ - type: ResponseObjectType.SEASON; - }; - }; - }; - - /** - * Identifier for this object type ("rankedplayerstats") - */ - type: ResponseObjectType.RANKED_PLAYER_SEASON; - }; - -export type PlayerSeason = - | { - /** - * @deprecated - * Highest number of rank points the player was awarded during the season across all game modes - * Min: 0 - */ - bestRankPoint?: number; - - /** - * Stats for the player broken down by gamemode - */ - gamemodeStats: { - [G in GameModeStatGamemode]: GameModeStat; - }; - - /** - * Matches ID's for each gamemode - */ - matches: { - [G in GameModeStatGamemode]: Array; - }; - - /** - * Player ID - */ - playerId: string; - - /** - * Season ID - */ - seasonId: string; - - /** - * Identifier for this object type ("playerSeason") - */ - type: ResponseObjectType.PLAYER_SEASON; - } - | { - /** - * Stats for the player broken down by gamemode - */ - rankedGameModeStats: { - [GameModeStatGamemode.SQUAD]: RankedGameModeStats; - [GameModeStatGamemode.SQUAD_FPP]: RankedGameModeStats; - }; - - /** - * Player ID - */ - playerId: string; - - /** - * Season ID - */ - seasonId: string; - - /** - * Identifier for this object type ("rankedplayerstats") - */ - type: ResponseObjectType.RANKED_PLAYER_SEASON; - }; - -/** - * All gamodes that support player season statistics - */ -export enum GameModeStatGamemode { - /** - * Duo's (Third Person Perspective) - */ - DUO = "duo", - - /** - * Duo's (First Person Perspective) - */ - DUO_FPP = "duo-fpp", - - /** - * Solo's (Third Person Perspective) - */ - SOLO = "solo", - - /** - * Solo's (First Person Perspective) - */ - SOLO_FPP = "solo-fpp", - - /** - * Squad (Third Person Perspective) - */ - SQUAD = "squad", - - /** - * Squad (First Person Perspective) - */ - SQUAD_FPP = "squad-fpp", -} - -/** - * All player stats for a given gamemode - */ -interface GameModeStat { - /** - * Assists - * - * Min: 0 - */ - assists: number; - - /** - * Boosts - * - * Min: 0 - */ - boosts: number; - - /** - * Daily Kills - * - * Min: 0 - */ - dailyKills: number; - - /** - * Daily Wins - * - * Min: 0 - */ - dailyWins: number; - - /** - * Damage Dealt - * - * Min: 0 - */ - damageDealt: number; - - /** - * Days - * - * Min: 0 - */ - days: number; - - /** - * Down but not out's - * - * Min: 0 - */ - dBNOs: number; - - /** - * Headshot Kills - * - * Min: 0 - */ - headshotKills: number; - - /** - * Heals - * - * Min: 0 - */ - heals: number; - - /** - * @deprecated Kill Points - */ - killPoints: number; - - /** - * Kills - * - * Min: 0 - */ - kills: number; - - /** - * Longest Kill - * - * Min: 0 - */ - longestKill: number; - - /** - * Longest Time Survived - * - * Min: 0 - */ - longestTimeSurvived: number; - - /** - * Losses - * - * Min: 0 - */ - losses: number; - - /** - * Max Kill Streaks - * - * Min: 0 - */ - maxKillStreaks: number; - - /** - * Most Survival Time - * - * Min: 0 - */ - mostSurvivalTime: number; - - /** - * @deprecated Rank Points - * - * Min: 0 - */ - rankPoints: number; - - /** - * @deprecated Rank Points Title - */ - rankPointsTitle: string; - - /** - * Revives - * - * Min: 0 - */ - revives: number; - - /** - * Ride Distance - * - * Min: 0 - */ - rideDistance: number; - - /** - * Road Kills - * - * Min: 0 - */ - roadKills: number; - - /** - * Round Most Kills - * - * Min: 0 - */ - roundMostKills: number; - - /** - * Rounds Played - * - * Min: 0 - */ - roundsPlayed: number; - - /** - * Suicides - * - * Min: 0 - */ - suicides: number; - - /** - * Swim Distance - * - * Min: 0 - */ - swimDistance: number; - - /** - * Team Kills - * - * Min: 0 - */ - teamKills: number; - - /** - * Time Survived - * - * Min: 0 - */ - timeSurvived: number; - - /** - * Top 10's - * - * Min: 0 - */ - top10s: number; - - /** - * Vehicle Destroys - * - * Min: 0 - */ - vehicleDestroys: number; - - /** - * Walk Distance - * - * Min: 0 - */ - walkDistance: number; - - /** - * Weapons Acquired - * - * Min: 0 - */ - weaponsAcquired: 12; - - /** - * Weekly Kills - * - * Min: 0 - */ - weeklyKills: number; - - /** - * Weekly Wins - * - * Min: 0 - */ - weeklyWins: number; - - /** - * @deprecated Win Points - */ - winPoints: number; - - /** - * Wins - * - * Min: 0 - */ - wins: number; -} - -interface RankedGameModeStats { - /** - * Assists - * - * Min: 0 - */ - assists: number; - - /** - * Average Rank - * - * Min: 0 - */ - avgRank: number; - - /** - * @deprecated Average Survival Time - * - * Min: 0 - */ - avgSurvivalTime: number; - - /** - * Best Rank Point - * - * Min: 0 - */ - bestRankPoint: number; - - /** - * Best Tier - */ - bestTier: { - /** - * Highest ranked tier - */ - tier: string; - - /** - * Highest ranked sub-tier - */ - subTier: string; - }; - - /** - * @deprecated Boosts - * - * Min: 0 - */ - boosts: number; - - /** - * Current Rank Point - * - * Min: 0 - */ - currentRankPoint: number; - - /** - * Current Tier - */ - currentTier: { - /** - * Current rank tier - */ - tier: string; - - /** - * Current rank sub-tier - */ - subTier: string; - }; - - /** - * Down but not out's - * - * Min: 0 - */ - dBNOs: number; - - /** - * Damage Dealt - * - * Min: 0 - */ - damageDealt: number; - - /** - * Deaths - * - * Min: 0 - */ - deaths: number; - - /** - * @deprecated Headshot Kill Ratio - * - * Min: 0 - */ - headshotKillRatio: number; - - /** - * @deprecated Headshot Kills - * - * Min: 0 - */ - headshotKills: number; - - /** - * @deprecated Heals - * - * Min: 0 - */ - heals: number; - - /** - * Kill to death average - * - * Min: 0 - */ - kda: number; - - /** - * @deprecated Kills to death ratio - */ - kdr: number; - - /** - * @deprecated Kill Streak - * - * Min: 0 - */ - killStreak: number; - - /** - * Kills - * - * Min: 0 - */ - kills: number; - - /** - * @deprecated Longest Kill - * - * Min: 0 - */ - longestKill: number; - - /** - * @deprecated Play Time - * - * Min: 0 - */ - playTime: number; - - /** - * @deprecated Revive Ratio - * - * Min: 0 - */ - reviveRatio: number; - - /** - * @deprecated Revives - * - * Min: 0 - */ - revives: number; - - /** - * @deprecated Round Most Kills - * - * Min: 0 - */ - roundMostKills: number; - - /** - * Rounds Played - * - * Min: 0 - */ - roundsPlayed: number; - - /** - * @deprecated Team Kills - * - * Min: 0 - */ - teamKills: number; - - /** - * Top 10 Ratio - * - * Min: 0 - */ - top10Ratio: number; - - /** - * @deprecated Weapons Acquired - * - * Min: 0 - */ - weaponsAcquired: number; - - /** - * Win Ratio - * - * Min: 0 - */ - winRatio: number; - - /** - * Wins - * - * Min: 0 - */ - wins: number; -} - -interface MatchGameModeResponse { - data: Array<{ - /** - * Match ID - */ - id: string; - - /** - * Identifier for this object type ("match") - */ - type: ResponseObjectType.MATCH; - }>; -} diff --git a/src/types/telemetry.ts b/src/types/telemetry.ts deleted file mode 100644 index dd7de4c..0000000 --- a/src/types/telemetry.ts +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Telemetry data returned from the API - * - * @see https://documentation.pubg.com/en/telemetry.html - */ -export interface ApiTelemetry {} - -export interface Telemetry {} diff --git a/src/util/chunkify.ts b/src/util/chunkify.ts index dbefdaa..ef47011 100644 --- a/src/util/chunkify.ts +++ b/src/util/chunkify.ts @@ -1,7 +1,7 @@ const CHUNK_SIZE = 10 as const; /** - * Chunkify - Splits up an array into chnks of arrays of a specified size + * Chunkify - Splits up an array into chunks of arrays of a specified size * * @param {Array} array - The input array that will be chunkified * @param {number} [chunkSize] - The size of each chunk diff --git a/src/util/fetch.ts b/src/util/fetch.ts index 7c4631c..c34b615 100644 --- a/src/util/fetch.ts +++ b/src/util/fetch.ts @@ -1,12 +1,9 @@ import axios from "axios"; -import { BASE_HEADERS, BASE_URL } from "../constants"; -import { ErrorCode, PubgResponseError, Shard } from "../types"; +import { BASE_HEADERS, BASE_URL } from "~/constants"; +import { ErrorCode, PubgResponseError, Shard } from "~/types"; -import type { AxiosResponse } from "axios"; - -import type { PromiseResult, Result } from ".."; -import type { FetchOptions } from "../types/util"; +import type { FetchOptions, Result } from "~/util/types"; export async function fetch({ apiKey, @@ -15,7 +12,7 @@ export async function fetch({ params = {}, root = false, shard = Shard.STEAM, -}: FetchOptions): PromiseResult { +}: FetchOptions): Promise> { if (!Object.values(Shard).includes(shard)) throw new Error(ErrorCode.INVALID_SHARD); @@ -24,7 +21,7 @@ export async function fetch({ : `${BASE_URL}/shards/${shard}/${endpoint}`; try { - const response: AxiosResponse = await axios(url, { + const response = await axios.get(url, { headers: { ...BASE_HEADERS, Authorization: `Bearer ${apiKey}`, diff --git a/src/util/index.ts b/src/util/index.ts index db1a2cc..f28b254 100644 --- a/src/util/index.ts +++ b/src/util/index.ts @@ -1,2 +1,3 @@ -export * from "./chunkify"; -export * from "./fetch"; +export { chunkify } from "./chunkify"; + +export { fetch, fetchAll } from "./fetch"; diff --git a/src/util/tests.ts b/src/util/tests.ts new file mode 100644 index 0000000..19eac5d --- /dev/null +++ b/src/util/tests.ts @@ -0,0 +1,9 @@ +export const testPlayers = [ + { name: "iBBA", id: "account.1225daa4e7544edfbe5f115b433d5069" }, + { name: "WackyJacky101", id: "account.c0e530e9b7244b358def282782f893af" }, +]; + +export const patternMatchUUID = + /^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i; + +export const patternMatchAccountId = /^account.*$/; diff --git a/src/util/types/environment.d.ts b/src/util/types/environment.d.ts new file mode 100644 index 0000000..9571ba8 --- /dev/null +++ b/src/util/types/environment.d.ts @@ -0,0 +1,9 @@ +declare global { + namespace NodeJS { + interface ProcessEnv { + PUBG_API_KEY: string; + } + } +} + +export {}; diff --git a/src/util/types/index.ts b/src/util/types/index.ts new file mode 100644 index 0000000..e8df397 --- /dev/null +++ b/src/util/types/index.ts @@ -0,0 +1,12 @@ +export type { FetchOptions, Module, Result } from "./misc"; + +export { ResponseObjectType } from "./response"; +export type { + ApiAssets, + Asset, + BaseResponse, + ErrorsResponse, + Links, +} from "./response"; + +export type { WithApiKey, WithApiShard, WithLinks, WithShard } from "./with"; diff --git a/src/types/util.ts b/src/util/types/misc.ts similarity index 52% rename from src/types/util.ts rename to src/util/types/misc.ts index 6cef43d..a1efcee 100644 --- a/src/types/util.ts +++ b/src/util/types/misc.ts @@ -1,27 +1,7 @@ -import type { Links, Shard } from "./index"; +import type { PubgResponseError } from "~/types"; +import type { WithApiShard } from "~/util/types"; -export type WithApiKey = T & { - /** - * PUBG Developer App API access token - */ - apiKey: string; -}; - -export type WithShard = T & { - /** - * The server shard to send the request to - */ - shard?: Shard; -}; - -export type WithApiShard = T & WithApiKey & WithShard; - -export type WithLinks = T & { - /** - * Links to relevant / current objects - */ - links: Links; -}; +export type Module = (options: TOptions) => Promise; export interface FetchOptions extends WithApiShard { /** @@ -50,3 +30,14 @@ export interface FetchOptions extends WithApiShard { */ root?: boolean; } + +export type Result = + | { + data: T; + error: null; + } + | { + data: null; + error: PubgResponseError; + status?: number; + }; diff --git a/src/types/responses.ts b/src/util/types/response.ts similarity index 67% rename from src/types/responses.ts rename to src/util/types/response.ts index f4d0fc4..f79b49f 100644 --- a/src/types/responses.ts +++ b/src/util/types/response.ts @@ -1,87 +1,72 @@ -import type { PubgResponseError } from "."; -import type { WithLinks } from "./util"; - -export type Result = - | { - data: T; - error: null; - } - | { - data: null; - error: PubgResponseError; - status?: number; - }; - -export type PromiseResult = Promise>; - -export enum ResponseObjectType { - ASSET = "asset", - MATCH = "match", - PARTICIPANT = "participant", - PLAYER = "player", - PLAYER_SEASON = "playerSeason", - RANKED_PLAYER_SEASON = "rankedplayerstats", - ROSTER = "roster", - SEASON = "season", - STATUS = "status", - TOURNAMENT = "tournament", -} - -export interface Links { - /** - * Unknown - */ - schema?: string; - - /** - * Link to the current object - */ - self: string; -} - -export interface Asset { - /** - * Asset specific attributes / metadata - */ - attributes?: { - /** - * Time of telemetry creation - */ - createdAt: Date; - /** - * Telemetry - */ - name: string; - /** - * Link to the telemetry.json file - */ - url: string; - }; - - /** - * A randomly generated ID assigned to this resource object for linking elsewhere in the match response - */ - id: string; - - /** - * Identifier for this object type - */ - type: ResponseObjectType.ASSET; -} - -export interface ApiAssets { - data: Array; -} - -export type Assets = Array; - -export interface BaseResponse extends WithLinks { - /** - * Unknown - */ - meta: unknown; -} - -export interface ErrorsResponse { - errors: PubgResponseError; -} +import type { PubgResponseError } from "~/types"; +import type { WithLinks } from "~/util/types"; + +export interface Links { + /** + * @todo Unknown + */ + schema?: string; + + /** + * Link to the current object + */ + self: string; +} + +export interface Asset { + /** + * Asset specific attributes / metadata + */ + attributes?: { + /** + * Time of telemetry creation + */ + createdAt: Date; + /** + * Telemetry + */ + name: string; + /** + * Link to the telemetry.json file + */ + url: string; + }; + + /** + * A randomly generated ID assigned to this resource object for linking elsewhere in the match response + */ + id: string; + + /** + * Identifier for this object type + */ + type: ResponseObjectType.ASSET; +} + +export interface ApiAssets { + data: Array; +} + +export interface BaseResponse extends WithLinks { + /** + * @todo Unknown + */ + meta: TMeta; +} + +export interface ErrorsResponse { + errors: PubgResponseError; +} + +export enum ResponseObjectType { + ASSET = "asset", + MATCH = "match", + PARTICIPANT = "participant", + PLAYER = "player", + PLAYER_SEASON = "playerSeason", + RANKED_PLAYER_SEASON = "rankedplayerstats", + ROSTER = "roster", + SEASON = "season", + STATUS = "status", + TOURNAMENT = "tournament", +} diff --git a/src/util/types/with.ts b/src/util/types/with.ts new file mode 100644 index 0000000..f210905 --- /dev/null +++ b/src/util/types/with.ts @@ -0,0 +1,25 @@ +import type { Shard } from "~/types"; +import type { Links } from "~/util/types"; + +export type WithApiKey = T & { + /** + * PUBG Developer App API access token + */ + apiKey: string; +}; + +export type WithShard = T & { + /** + * The server shard to send the request to + */ + shard?: Shard; +}; + +export type WithApiShard = T & WithApiKey & WithShard; + +export type WithLinks = T & { + /** + * Links to relevant / current objects + */ + links: Links; +}; diff --git a/tsconfig.json b/tsconfig.json index 8029b87..471c7af 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,7 +10,12 @@ "esModuleInterop": true, "noUnusedLocals": true, "noUnusedParameters": true, - "noImplicitReturns": true + "noImplicitReturns": true, + "baseUrl": ".", + "paths": { + "~/*": ["./src/*"] + }, + "types": ["vitest/globals"] }, "include": ["./src"] } diff --git a/tsup.config.ts b/tsup.config.ts index 22bb3cf..257480c 100644 --- a/tsup.config.ts +++ b/tsup.config.ts @@ -1,12 +1,16 @@ -import type { Options } from "tsup"; +import { defineConfig } from "tsup"; const isProduction = process.env.NODE_ENV === "production"; -export const tsup: Options = { +export default defineConfig({ clean: true, dts: true, - entryPoints: ["src/index.ts"], + entryPoints: { + constants: "src/constants.ts", + index: "src/index.ts", + types: "src/types/index.ts", + }, format: ["cjs", "esm", "iife"], minify: isProduction, sourcemap: true, -}; +}); diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 0000000..c882894 --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,10 @@ +import { defineConfig } from "vitest/config"; +import { resolve } from "node:path"; + +export default defineConfig({ + resolve: { + alias: { + "~": resolve(__dirname, "/src"), + }, + }, +}); diff --git a/yarn.lock b/yarn.lock index 22c4c0a..acfa2d0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,22 +2,33 @@ # yarn lockfile v1 -"@antfu/utils@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@antfu/utils/-/utils-0.3.0.tgz#6306c43b52a883bd8e973e3ed8dd64248418bcc4" - integrity sha512-UU8TLr/EoXdg7OjMp0h9oDoIAVr+Z/oW9cpOxQQyrsz6Qzd2ms/1CdWx8fl2OQdFpxGmq5Vc4TwfLHId6nAZjA== - dependencies: - "@types/throttle-debounce" "^2.1.0" - -"@babel/parser@^7.15.0": - version "7.15.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.7.tgz#0c3ed4a2eb07b165dfa85b3cc45c727334c4edae" - integrity sha512-rycZXvQ+xS9QyIcJ9HXeDWf1uxqlbVFAUq0Rq0dbc50Zb/+wUe/ehyfzGfm9KZZF0kBejYgxltBXocP+gKdL2g== - -"@heroicons/vue@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@heroicons/vue/-/vue-1.0.4.tgz#dcfd957a9abc827321054e643f6fb73629b3eef6" - integrity sha512-jm7JMoUGr7Asn07oYNmewxkdQALnskTzRo17iGpHG/apLcc+GFdvdN4XvWZ2awStodaqeZ4eYWg7UcI0LvLETQ== +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jridgewell/resolve-uri@^3.0.3": + version "3.0.7" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz#30cd49820a962aff48c8fffc5cd760151fca61fe" + integrity sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.13" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz#b6461fb0c2964356c469e115f504c95ad97ab88c" + integrity sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w== + +"@jridgewell/trace-mapping@^0.3.7": + version "0.3.13" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz#dcfe3e95f224c8fe97a87a5235defec999aa92ea" + integrity sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -40,150 +51,46 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@types/node@^16.10.2": - version "16.10.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.10.2.tgz#5764ca9aa94470adb4e1185fe2e9f19458992b2e" - integrity sha512-zCclL4/rx+W5SQTzFs9wyvvyCwoK9QtBpratqz2IYJ3O8Umrn0m3nsTv0wQBk9sRGpvUe9CwPDrQFB10f1FIjQ== +"@polka/url@^1.0.0-next.20": + version "1.0.0-next.21" + resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" + integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== -"@types/throttle-debounce@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@types/throttle-debounce/-/throttle-debounce-2.1.0.tgz#1c3df624bfc4b62f992d3012b84c56d41eab3776" - integrity sha512-5eQEtSCoESnh2FsiLTxE121IiE60hnMqcb435fShf4bpLRjEu1Eoekht23y6zXS9Ts3l+Szu3TARnTsA0GkOkQ== - -"@vitejs/plugin-vue@^1.9.2": - version "1.9.2" - resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-1.9.2.tgz#7234efb8c3c3d60c7eac350a935074ab1820ae0e" - integrity sha512-QnUQJvGmY+YT9xTidLcjr6NAjKWNdSuul1M+BZ6uwTQaO5vpAY9USBncXESATk742dYMZGJenegJgeJhG/HMNQ== - -"@vue/compiler-core@3.2.19": - version "3.2.19" - resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.19.tgz#b537dd377ce51fdb64e9b30ebfbff7cd70a64cb9" - integrity sha512-8dOPX0YOtaXol0Zf2cfLQ4NU/yHYl2H7DCKsLEZ7gdvPK6ZSEwGLJ7IdghhY2YEshEpC5RB9QKdC5I07z8Dtjg== - dependencies: - "@babel/parser" "^7.15.0" - "@vue/shared" "3.2.19" - estree-walker "^2.0.2" - source-map "^0.6.1" - -"@vue/compiler-dom@3.2.19": - version "3.2.19" - resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.2.19.tgz#0607bc90de6af55fde73b09b3c4d0bf8cb597ed8" - integrity sha512-WzQoE8rfkFjPtIioc7SSgTsnz9g2oG61DU8KHnzPrRS7fW/lji6H2uCYJfp4Z6kZE8GjnHc1Ljwl3/gxDes0cw== - dependencies: - "@vue/compiler-core" "3.2.19" - "@vue/shared" "3.2.19" - -"@vue/compiler-sfc@3.2.19": - version "3.2.19" - resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.2.19.tgz#d412195a98ebd49b84602f171719294a1d9549be" - integrity sha512-pLlbgkO1UHTO02MSpa/sFOXUwIDxSMiKZ1ozE5n71CY4DM+YmI+G3gT/ZHZ46WBId7f3VTF/D8pGwMygcQbrQA== - dependencies: - "@babel/parser" "^7.15.0" - "@vue/compiler-core" "3.2.19" - "@vue/compiler-dom" "3.2.19" - "@vue/compiler-ssr" "3.2.19" - "@vue/ref-transform" "3.2.19" - "@vue/shared" "3.2.19" - estree-walker "^2.0.2" - magic-string "^0.25.7" - postcss "^8.1.10" - source-map "^0.6.1" - -"@vue/compiler-ssr@3.2.19": - version "3.2.19" - resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.2.19.tgz#3e91ecf70f8f961c5f63eacd2139bcdab9a7a07c" - integrity sha512-oLon0Cn3O7WEYzzmzZavGoqXH+199LT+smdjBT3Uf3UX4HwDNuBFCmvL0TsqV9SQnIgKvBRbQ7lhbpnd4lqM3w== - dependencies: - "@vue/compiler-dom" "3.2.19" - "@vue/shared" "3.2.19" - -"@vue/reactivity@3.2.19": - version "3.2.19" - resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.2.19.tgz#fc6e0f0106f295226835cfed5ff5f84d927bea65" - integrity sha512-FtachoYs2SnyrWup5UikP54xDX6ZJ1s5VgHcJp4rkGoutU3Ry61jhs+nCX7J64zjX992Mh9gGUC0LqTs8q9vCA== - dependencies: - "@vue/shared" "3.2.19" - -"@vue/ref-transform@3.2.19": - version "3.2.19" - resolved "https://registry.yarnpkg.com/@vue/ref-transform/-/ref-transform-3.2.19.tgz#cf0f986486bb26838fbd09749e927bab19745600" - integrity sha512-03wwUnoIAeKti5IGGx6Vk/HEBJ+zUcm5wrUM3+PQsGf7IYnXTbeIfHHpx4HeSeWhnLAjqZjADQwW8uA4rBmVbg== - dependencies: - "@babel/parser" "^7.15.0" - "@vue/compiler-core" "3.2.19" - "@vue/shared" "3.2.19" - estree-walker "^2.0.2" - magic-string "^0.25.7" - -"@vue/runtime-core@3.2.19": - version "3.2.19" - resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.2.19.tgz#807715b7f4728abb84fa4a8efdbe37d8ddb4c6d3" - integrity sha512-qArZSWKxWsgKfxk9BelZ32nY0MZ31CAW2kUUyVJyxh4cTfHaXGbjiQB5JgsvKc49ROMNffv9t3/qjasQqAH+RQ== - dependencies: - "@vue/reactivity" "3.2.19" - "@vue/shared" "3.2.19" - -"@vue/runtime-dom@3.2.19": - version "3.2.19" - resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.2.19.tgz#7e8bf645754703e360fa132e4be9113edf2377bb" - integrity sha512-hIRboxXwafeHhbZEkZYNV0MiJXPNf4fP0X6hM2TJb0vssz8BKhD9cF92BkRgZztTQevecbhk0gu4uAPJ3dxL9A== - dependencies: - "@vue/runtime-core" "3.2.19" - "@vue/shared" "3.2.19" - csstype "^2.6.8" - -"@vue/server-renderer@3.2.19": - version "3.2.19" - resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.2.19.tgz#870bcec9f7cdaee0c2187a169b6e636ab4362fb1" - integrity sha512-A9FNT7fgQJXItwdzWREntAgWKVtKYuXHBKGev/H4+ByTu8vB7gQXGcim01QxaJshdNg4dYuH2tEBZXCNCNx+/w== - dependencies: - "@vue/compiler-ssr" "3.2.19" - "@vue/shared" "3.2.19" - -"@vue/shared@3.2.19": - version "3.2.19" - resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.19.tgz#111ec3da18337d86274446984c49925b1b2b2dd7" - integrity sha512-Knqhx7WieLdVgwCAZgTVrDCXZ50uItuecLh9JdLC8O+a5ayaSyIQYveUK3hCRNC7ws5zalHmZwfdLMGaS8r4Ew== - -"@vueuse/core@^6.5.3": - version "6.5.3" - resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-6.5.3.tgz#15848eaccad18652df4cb4b6ccae7bd7921a0c7e" - integrity sha512-o3CTu4nEqs371sDY5qLBX0r4QOm6GVpm3ApQc2Y+p8OMI2rRGartQo8xRykpUfsyq602A+SVtm/wxIWBkD/KCQ== - dependencies: - "@vueuse/shared" "6.5.3" - vue-demi "*" - -"@vueuse/shared@6.5.3": - version "6.5.3" - resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-6.5.3.tgz#6503fa4bfbf45d0616bacedb8a4bd003f01da73b" - integrity sha512-ChOKu3mECyZeqGJ/gHVm0CaHoZK5/TwNZr1ZM/aqH+RaRNQvC1qkLf1/8PBugzN3yRgC3BtZ/M1kLpGe/BFylw== - dependencies: - vue-demi "*" - -"@windicss/config@1.4.9": - version "1.4.9" - resolved "https://registry.yarnpkg.com/@windicss/config/-/config-1.4.9.tgz#fe36c540b71129a8a064a758ec45cf2dca1ee7d5" - integrity sha512-DYgWKuY48Nrhi4xprdKVC2IpcLQ8j3jJ1FYgaoHKvHYZG7Ux4xaPZEYaAWEeEiGKLP7bv9VpBYdjRTKFqOMIsA== - dependencies: - debug "^4.3.2" - jiti "^1.12.5" - tsup "^5.2.1" - windicss "^3.1.8" - -"@windicss/plugin-utils@1.4.9": - version "1.4.9" - resolved "https://registry.yarnpkg.com/@windicss/plugin-utils/-/plugin-utils-1.4.9.tgz#c31d128b94c25e48298f110da1916f0f0830fa20" - integrity sha512-Pie0mEH5whtI3zkWKThmgS6dxSAxQL5Be01Er/abLMVQjdoecoQT7ek2qSYOoFTtXGs7gMPUtCV/NdoL2TDgWw== - dependencies: - "@antfu/utils" "^0.3.0" - "@windicss/config" "1.4.9" - debug "^4.3.2" - fast-glob "^3.2.7" - magic-string "^0.25.7" - micromatch "^4.0.4" - windicss "^3.1.8" +"@types/chai-subset@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@types/chai-subset/-/chai-subset-1.3.3.tgz#97893814e92abd2c534de422cb377e0e0bdaac94" + integrity sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw== + dependencies: + "@types/chai" "*" -ansi-styles@^4.1.0: +"@types/chai@*", "@types/chai@^4.3.1": + version "4.3.1" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.1.tgz#e2c6e73e0bdeb2521d00756d099218e9f5d90a04" + integrity sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ== + +"@types/istanbul-lib-coverage@^2.0.1": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + +"@types/node@^17.0.41": + version "17.0.41" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.41.tgz#1607b2fd3da014ae5d4d1b31bc792a39348dfb9b" + integrity sha512-xA6drNNeqb5YyV5fO3OAEsnXLfO7uF0whiOfPTz5AeDo8KeZFmODKnvwPymMNO8qE/an8pVY/O50tig2SQCrGw== + +"@vitest/ui@^0.14.2": + version "0.14.2" + resolved "https://registry.yarnpkg.com/@vitest/ui/-/ui-0.14.2.tgz#63809d41127f8b539919ea785302b2ae11e6cd99" + integrity sha512-yV2paiv0/Obymx+9KV+KjM/FAbYF+PbnQiO2RFnZqDCgYwkkNmO1ZNNIetBeOzuNoi1BT1iPSKwtvL0PwCesDQ== + dependencies: + sirv "^2.0.2" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^4.0.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== @@ -208,12 +115,23 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -axios@^0.22.0: - version "0.22.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.22.0.tgz#bf702c41fb50fbca4539589d839a077117b79b25" - integrity sha512-Z0U3uhqQeg1oNcihswf4ZD57O3NrR1+ZXhxaROaWpDmsDTx7T2HNBV2ulBtie2hwJptu8UvgnJoK+BIqdzh/1w== +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +axios@^0.27.2: + version "0.27.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" + integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== dependencies: - follow-redirects "^1.14.4" + follow-redirects "^1.14.9" + form-data "^4.0.0" balanced-match@^1.0.0: version "1.0.2" @@ -240,18 +158,53 @@ braces@^3.0.1, braces@~3.0.2: dependencies: fill-range "^7.0.1" -cac@^6.7.2: - version "6.7.3" - resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.3.tgz#10410b8611677990cc2e3c8b576d471c1d71b768" - integrity sha512-ECVqVZh74qgSuZG9YOt2OJPI3wGcf+EwwuF/XIOYqZBD0KZYLtgPWqFPxmDPQ6joxI1nOlvVgRV6VT53Ooyocg== - -chalk@^4.1.0, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" +bundle-require@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/bundle-require/-/bundle-require-3.0.4.tgz#2b52ba77d99c0a586b5854cd21d36954e63cc110" + integrity sha512-VXG6epB1yrLAvWVQpl92qF347/UXmncQj7J3U8kZEbdVZ1ZkQyr4hYeL/9RvcE8vVVdp53dY78Fd/3pqfRqI1A== + dependencies: + load-tsconfig "^0.2.0" + +c8@^7.11.3: + version "7.11.3" + resolved "https://registry.yarnpkg.com/c8/-/c8-7.11.3.tgz#88c8459c1952ed4f701b619493c9ae732b057163" + integrity sha512-6YBmsaNmqRm9OS3ZbIiL2EZgi1+Xc4O24jL3vMYGE6idixYuGdy76rIfIdltSKDj9DpLNrcXSonUTR1miBD0wA== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@istanbuljs/schema" "^0.1.3" + find-up "^5.0.0" + foreground-child "^2.0.0" + istanbul-lib-coverage "^3.2.0" + istanbul-lib-report "^3.0.0" + istanbul-reports "^3.1.4" + rimraf "^3.0.2" + test-exclude "^6.0.0" + v8-to-istanbul "^9.0.0" + yargs "^16.2.0" + yargs-parser "^20.2.9" + +cac@^6.7.12: + version "6.7.12" + resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.12.tgz#6fb5ea2ff50bd01490dbda497f4ae75a99415193" + integrity sha512-rM7E2ygtMkJqD9c7WnFU6fruFcN3xe4FM5yUmgxhZzIKJk4uHl9U/fhwdajGFQbQuv43FAUo1Fe8gX/oIKDeSA== + +chai@^4.3.6: + version "4.3.6" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.6.tgz#ffe4ba2d9fa9d6680cc0b370adae709ec9011e9c" + integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.2" + deep-eql "^3.0.1" + get-func-name "^2.0.0" + loupe "^2.3.1" + pathval "^1.1.1" + type-detect "^4.0.5" + +check-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== chokidar@^3.5.1: version "3.5.2" @@ -268,6 +221,15 @@ chokidar@^3.5.1: optionalDependencies: fsevents "~2.3.2" +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -280,6 +242,13 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + commander@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" @@ -290,6 +259,13 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= +convert-source-map@^1.6.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + cross-env@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" @@ -297,7 +273,7 @@ cross-env@^7.0.3: dependencies: cross-spawn "^7.0.1" -cross-spawn@^7.0.1, cross-spawn@^7.0.3: +cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -306,18 +282,32 @@ cross-spawn@^7.0.1, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -csstype@^2.6.8: - version "2.6.18" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.18.tgz#980a8b53085f34af313410af064f2bd241784218" - integrity sha512-RSU6Hyeg14am3Ah4VZEmeX8H7kLwEEirXe6aU2IPfKNvhXwTflK5HQRDNI0ypQXoqmm+QPyG2IaPuQE5zMwSIQ== - -debug@^4.3.1, debug@^4.3.2: +debug@^4.3.1: version "4.3.2" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== dependencies: ms "2.1.2" +debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +deep-eql@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" + integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== + dependencies: + type-detect "^4.0.0" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -325,117 +315,146 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -esbuild-android-arm64@0.13.3: - version "0.13.3" - resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.13.3.tgz#ef734c76eeff42e8c53acdffe901da090164a890" - integrity sha512-jc9E8vGTHkzb0Vwl74H8liANV9BWsqtzLHaKvcsRgf1M+aVCBSF0gUheduAKfDsbDMT0judeMLhwBP34EUesTA== - -esbuild-darwin-64@0.13.3: - version "0.13.3" - resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.13.3.tgz#35f29376b7451add79f0640980683ef923365385" - integrity sha512-8bG3Zq+ZNuLlIJebOO2+weI7P2LVf33sOzaUfHj8MuJ+1Ixe4KtQxfYp7qhFnP6xP2ToJaYHxGUfLeiUCEz9hw== - -esbuild-darwin-arm64@0.13.3: - version "0.13.3" - resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.3.tgz#530a1326e7d18d62c9a54b6dce70f2b77ed50eec" - integrity sha512-5E81eImYtTgh8pY7Gq4WQHhWkR/LvYadUXmuYeZBiP+3ADZJZcG60UFceZrjqNPaFOWKr/xmh4aNocwagEubcA== - -esbuild-freebsd-64@0.13.3: - version "0.13.3" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.3.tgz#ce2896ac362e06eb82ca5dec06b2568901eb5afc" - integrity sha512-ou+f91KkTGexi8HvF/BdtsITL6plbciQfZGys7QX6/QEwyE96PmL5KnU6ZQwoU7E99Ts6Sc9bUDq8HXJubKtBA== - -esbuild-freebsd-arm64@0.13.3: - version "0.13.3" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.3.tgz#a20454f99e060bea4e465d131556a9f0533f403f" - integrity sha512-F1zV7nySjHswJuvIgjkiG5liZ63MeazDGXGKViTCeegjZ71sAhOChcaGhKcu6vq9+vqZxlfEi1fmXlx6Pc3coQ== - -esbuild-linux-32@0.13.3: - version "0.13.3" - resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.13.3.tgz#ad56f18208ecf007cd9ab16cd39626ca0312b8ee" - integrity sha512-mHHc2v6uLrHH4zaaq5RB/5IWzgimEJ1HGldzf1qtGI513KZWfH0HRRQ8p1di4notJgBn7tDzWQ1f34ZHy69viQ== - -esbuild-linux-64@0.13.3: - version "0.13.3" - resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.13.3.tgz#be1eabadf68d153897ed887678f7496d3949810f" - integrity sha512-FJ1De2O89mrOuqtaEXu41qIYJU6R41F+OA6vheNwcAQcX8fu0aiA13FJeLABq29BYJuTVgRj3cyC8q+tz19/dQ== - -esbuild-linux-arm64@0.13.3: - version "0.13.3" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.3.tgz#329348bb4a19cfb5e9046cc5d97ba5017d8f74ad" - integrity sha512-Cauhr45KSo+wRUojs+1qfycQqQCAXTOvsWvkZ6xmEMAXLAm+f8RQGDQeP8CAf8Yeelnegcn6UNdvzdzLHhWDFg== - -esbuild-linux-arm@0.13.3: - version "0.13.3" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.13.3.tgz#b3b3167c9d5d3038894fbc75b194a4fbe93eaf09" - integrity sha512-9BJNRtLwBh3OP22cln9g3AJdbAQUcjRHqA4BScx9k4RZpGqPokFr548zpeplxWhcwrIjT8qPebwH9CrRVy8Bsw== - -esbuild-linux-mips64le@0.13.3: - version "0.13.3" - resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.3.tgz#ea1687f28ea2c85399ecc2fe23a48ab343b7b35d" - integrity sha512-YVzJUGCncuuLm2boYyVeuMFsak4ZAhdiBwi0xNDZCC8sy+tS6Boe2mzcrD2uubv5JKAUOrpN186S1DtU4WgBgw== - -esbuild-linux-ppc64le@0.13.3: - version "0.13.3" - resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.3.tgz#a462cf42eae3d7fc29a9f277679f5adee70afa67" - integrity sha512-GU6CqqKtJEoyxC2QWHiJtmuOz9wc/jMv8ZloK2WwiGY5yMvAmM3PI103Dj7xcjebNTHBqITTUw/aigY1wx5A3w== - -esbuild-openbsd-64@0.13.3: - version "0.13.3" - resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.3.tgz#0cb15bd86d20eb19cb548b530f1a533197532cf9" - integrity sha512-HVpkgpn4BQt4BPDAjTOpeMub6mzNWw6Y3gaLQJrpbO24pws6ZwYkY24OI3/Uo3LDCbH6856MM81JxECt92OWjA== - -esbuild-sunos-64@0.13.3: - version "0.13.3" - resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.13.3.tgz#53a941241f881010969cc8f1acb1ada49c4cd3c2" - integrity sha512-XncBVOtnEfUbPV4CaiFBxh38ychnBfwCxuTm9iAqcHzIwkmeNRN5qMzDyfE1jyfJje+Bbt6AvIfz6SdYt8/UEQ== - -esbuild-windows-32@0.13.3: - version "0.13.3" - resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.13.3.tgz#265dc0d0cdb5374685a851c584857055e12865a4" - integrity sha512-ZlgDz7d1nk8wQACi+z8IDzNZVUlN9iprAme+1YSTsfFDlkyI8jeaGWPk9EQFNY7rJzsLVYm6eZ2mhPioc7uT5A== - -esbuild-windows-64@0.13.3: - version "0.13.3" - resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.13.3.tgz#ae710c0629ec8c39c5ef1f69e86ed5592bb4128f" - integrity sha512-YX7KvRez3TR+GudlQm9tND/ssj2FsF9vb8ZWzAoZOLxpPzE3y+3SFJNrfDzzQKPzJ0Pnh9KBP4gsaMwJjKHDhw== - -esbuild-windows-arm64@0.13.3: - version "0.13.3" - resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.3.tgz#a236199a26b1205573dcb571f966189326a4c953" - integrity sha512-nP7H0Y2a6OJd3Qi1Q8sehhyP4x4JoXK4S5y6FzH2vgaJgiyEurzFxjUufGdMaw+RxtxiwD/uRndUgwaZ2JD8lg== - -esbuild@^0.12.28: - version "0.12.29" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.12.29.tgz#be602db7c4dc78944a9dbde0d1ea19d36c1f882d" - integrity sha512-w/XuoBCSwepyiZtIRsKsetiLDUVGPVw1E/R3VTFSecIy8UR7Cq3SOtwKHJMFoVqqVG36aGkzh4e8BvpO1Fdc7g== - -esbuild@^0.13.2: - version "0.13.3" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.13.3.tgz#cc9fc347fc81ff6440cdd1fdb9fe65c02eddcc97" - integrity sha512-98xovMLKnyhv3gcReUuAEi5Ig1rK6SIgvsJuBIcfwzqGSEHsV8UJjMlmkhHoHMf9XZybMpE9Zax8AA8f7i2hlQ== +dotenv@^16.0.1: + version "16.0.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.1.tgz#8f8f9d94876c35dac989876a5d3a82a267fdce1d" + integrity sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +esbuild-android-64@0.14.43: + version "0.14.43" + resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.43.tgz#59bf3edad6863c27aa92bbb5c1d83a9a5c981495" + integrity sha512-kqFXAS72K6cNrB6RiM7YJ5lNvmWRDSlpi7ZuRZ1hu1S3w0zlwcoCxWAyM23LQUyZSs1PbjHgdbbfYAN8IGh6xg== + +esbuild-android-arm64@0.14.43: + version "0.14.43" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.43.tgz#0258704edf92ce2463af6d2900b844b5423bed63" + integrity sha512-bKS2BBFh+7XZY9rpjiHGRNA7LvWYbZWP87pLehggTG7tTaCDvj8qQGOU/OZSjCSKDYbgY7Q+oDw8RlYQ2Jt2BA== + +esbuild-darwin-64@0.14.43: + version "0.14.43" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.43.tgz#72a47295678d4aa0656979baa8cf6d5c8c92656f" + integrity sha512-/3PSilx011ttoieRGkSZ0XV8zjBf2C9enV4ScMMbCT4dpx0mFhMOpFnCHkOK0pWGB8LklykFyHrWk2z6DENVUg== + +esbuild-darwin-arm64@0.14.43: + version "0.14.43" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.43.tgz#5f5823170b8d85b888957f0794e186caac447aca" + integrity sha512-1HyFUKs8DMCBOvw1Qxpr5Vv/ThNcVIFb5xgXWK3pyT40WPvgYIiRTwJCvNs4l8i5qWF8/CK5bQxJVDjQvtv0Yw== + +esbuild-freebsd-64@0.14.43: + version "0.14.43" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.43.tgz#e4a48b08181053837e6cd9bda19ae0af94d493b0" + integrity sha512-FNWc05TPHYgaXjbPZO5/rJKSBslfG6BeMSs8GhwnqAKP56eEhvmzwnIz1QcC9cRVyO+IKqWNfmHFkCa1WJTULA== + +esbuild-freebsd-arm64@0.14.43: + version "0.14.43" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.43.tgz#386e780d36c1dedf3a1cdab79e0bbacd873274e6" + integrity sha512-amrYopclz3VohqisOPR6hA3GOWA3LZC1WDLnp21RhNmoERmJ/vLnOpnrG2P/Zao+/erKTCUqmrCIPVtj58DRoA== + +esbuild-linux-32@0.14.43: + version "0.14.43" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.43.tgz#040ed6b9ebf06d73acdf2acce7f1cd0c12fbc6a5" + integrity sha512-KoxoEra+9O3AKVvgDFvDkiuddCds6q71owSQEYwjtqRV7RwbPzKxJa6+uyzUulHcyGVq0g15K0oKG5CFBcvYDw== + +esbuild-linux-64@0.14.43: + version "0.14.43" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.43.tgz#8abbb7594ab6a008f2aae72d95d8a4fdc59d9000" + integrity sha512-EwINwGMyiJMgBby5/SbMqKcUhS5AYAZ2CpEBzSowsJPNBJEdhkCTtEjk757TN/wxgbu3QklqDM6KghY660QCUw== + +esbuild-linux-arm64@0.14.43: + version "0.14.43" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.43.tgz#4e8e9ce77cbf7efec65e79e512b3d2fbd2da398f" + integrity sha512-UlSpjMWllAc70zYbHxWuDS3FJytyuR/gHJYBr8BICcTNb/TSOYVBg6U7b3jZ3mILTrgzwJUHwhEwK18FZDouUQ== + +esbuild-linux-arm@0.14.43: + version "0.14.43" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.43.tgz#9e41ee5e099c0ffdfd150da154330c2c0226cc96" + integrity sha512-e6YzQUoDxxtyamuF12eVzzRC7bbEFSZohJ6igQB9tBqnNmIQY3fI6Cns3z2wxtbZ3f2o6idkD2fQnlvs2902Dg== + +esbuild-linux-mips64le@0.14.43: + version "0.14.43" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.43.tgz#4b41f465a787f91cc4fe7dffa0dcabf655935a1a" + integrity sha512-f+v8cInPEL1/SDP//CfSYzcDNgE4CY3xgDV81DWm3KAPWzhvxARrKxB1Pstf5mB56yAslJDxu7ryBUPX207EZA== + +esbuild-linux-ppc64le@0.14.43: + version "0.14.43" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.43.tgz#ca15934f5b46728dd9ac05270e783e7feaca9eaf" + integrity sha512-5wZYMDGAL/K2pqkdIsW+I4IR41kyfHr/QshJcNpUfK3RjB3VQcPWOaZmc+74rm4ZjVirYrtz+jWw0SgxtxRanA== + +esbuild-linux-riscv64@0.14.43: + version "0.14.43" + resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.43.tgz#70fce2b5a0605a67e58b5a357b0e00be1029836d" + integrity sha512-lYcAOUxp85hC7lSjycJUVSmj4/9oEfSyXjb/ua9bNl8afonaduuqtw7hvKMoKuYnVwOCDw4RSfKpcnIRDWq+Bw== + +esbuild-linux-s390x@0.14.43: + version "0.14.43" + resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.43.tgz#318d03b4f4ccc7fa44ac7562121cf4a4529e477a" + integrity sha512-27e43ZhHvhFE4nM7HqtUbMRu37I/4eNSUbb8FGZWszV+uLzMIsHDwLoBiJmw7G9N+hrehNPeQ4F5Ujad0DrUKQ== + +esbuild-netbsd-64@0.14.43: + version "0.14.43" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.43.tgz#86130ce204ef0162a96e863b55851efecc92f423" + integrity sha512-2mH4QF6hHBn5zzAfxEI/2eBC0mspVsZ6UVo821LpAJKMvLJPBk3XJO5xwg7paDqSqpl7p6IRrAenW999AEfJhQ== + +esbuild-openbsd-64@0.14.43: + version "0.14.43" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.43.tgz#0229dc2db2ded97b03bb93bba7646b30ffdf5d0d" + integrity sha512-ZhQpiZjvqCqO8jKdGp9+8k9E/EHSA+zIWOg+grwZasI9RoblqJ1QiZqqi7jfd6ZrrG1UFBNGe4m0NFxCFbMVbg== + +esbuild-sunos-64@0.14.43: + version "0.14.43" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.43.tgz#17e316216eb9f1de25d52a9000356ae5b869e736" + integrity sha512-DgxSi9DaHReL9gYuul2rrQCAapgnCJkh3LSHPKsY26zytYppG0HgkgVF80zjIlvEsUbGBP/GHQzBtrezj/Zq1Q== + +esbuild-windows-32@0.14.43: + version "0.14.43" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.43.tgz#a173757bc6dfd0f2656ff40b64f7f9290745778e" + integrity sha512-Ih3+2O5oExiqm0mY6YYE5dR0o8+AspccQ3vIAtRodwFvhuyGLjb0Hbmzun/F3Lw19nuhPMu3sW2fqIJ5xBxByw== + +esbuild-windows-64@0.14.43: + version "0.14.43" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.43.tgz#c447b23126aad158c4fe6a394342cafd97926ed1" + integrity sha512-8NsuNfI8xwFuJbrCuI+aBqNTYkrWErejFO5aYM+yHqyHuL8mmepLS9EPzAzk8rvfaJrhN0+RvKWAcymViHOKEw== + +esbuild-windows-arm64@0.14.43: + version "0.14.43" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.43.tgz#3caed1b430d394d7a7836407b9d36c4750246e76" + integrity sha512-7ZlD7bo++kVRblJEoG+cepljkfP8bfuTPz5fIXzptwnPaFwGS6ahvfoYzY7WCf5v/1nX2X02HDraVItTgbHnKw== + +esbuild@^0.14.25, esbuild@^0.14.27: + version "0.14.43" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.43.tgz#c227d585c512d3e0f23b88f50b8e16501147f647" + integrity sha512-Uf94+kQmy/5jsFwKWiQB4hfo/RkM9Dh7b79p8yqd1tshULdr25G2szLz631NoH3s2ujnKEKVD16RmOxvCNKRFA== optionalDependencies: - esbuild-android-arm64 "0.13.3" - esbuild-darwin-64 "0.13.3" - esbuild-darwin-arm64 "0.13.3" - esbuild-freebsd-64 "0.13.3" - esbuild-freebsd-arm64 "0.13.3" - esbuild-linux-32 "0.13.3" - esbuild-linux-64 "0.13.3" - esbuild-linux-arm "0.13.3" - esbuild-linux-arm64 "0.13.3" - esbuild-linux-mips64le "0.13.3" - esbuild-linux-ppc64le "0.13.3" - esbuild-openbsd-64 "0.13.3" - esbuild-sunos-64 "0.13.3" - esbuild-windows-32 "0.13.3" - esbuild-windows-64 "0.13.3" - esbuild-windows-arm64 "0.13.3" - -estree-walker@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" - integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + esbuild-android-64 "0.14.43" + esbuild-android-arm64 "0.14.43" + esbuild-darwin-64 "0.14.43" + esbuild-darwin-arm64 "0.14.43" + esbuild-freebsd-64 "0.14.43" + esbuild-freebsd-arm64 "0.14.43" + esbuild-linux-32 "0.14.43" + esbuild-linux-64 "0.14.43" + esbuild-linux-arm "0.14.43" + esbuild-linux-arm64 "0.14.43" + esbuild-linux-mips64le "0.14.43" + esbuild-linux-ppc64le "0.14.43" + esbuild-linux-riscv64 "0.14.43" + esbuild-linux-s390x "0.14.43" + esbuild-netbsd-64 "0.14.43" + esbuild-openbsd-64 "0.14.43" + esbuild-sunos-64 "0.14.43" + esbuild-windows-32 "0.14.43" + esbuild-windows-64 "0.14.43" + esbuild-windows-arm64 "0.14.43" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== execa@^5.0.0: version "5.1.1" @@ -452,7 +471,7 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -fast-glob@^3.1.1, fast-glob@^3.2.7: +fast-glob@^3.1.1: version "3.2.7" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== @@ -477,10 +496,35 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -follow-redirects@^1.14.4: - version "1.14.8" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.8.tgz#016996fb9a11a100566398b1c6839337d7bfa8fc" - integrity sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA== +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +follow-redirects@^1.14.9: + version "1.15.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" + integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== + +foreground-child@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53" + integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^3.0.2" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" fs.realpath@^1.0.0: version "1.0.0" @@ -497,6 +541,16 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== + get-stream@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" @@ -533,6 +587,18 @@ glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^7.1.4: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + globby@^11.0.3: version "11.0.4" resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" @@ -557,6 +623,11 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" @@ -601,10 +672,10 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-core-module@^2.2.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.7.0.tgz#3c0ef7d31b4acfc574f80c58409d568a836848e3" - integrity sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ== +is-core-module@^2.8.1: + version "2.9.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" + integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== dependencies: has "^1.0.3" @@ -613,6 +684,11 @@ is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" @@ -635,10 +711,27 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= -jiti@^1.12.5: - version "1.12.6" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.12.6.tgz#8884d53a10bd571e0e85787994d97cfcc48ac6f9" - integrity sha512-drQ/qnYriF9KiU47sRF0rTvfQmJo4JEmFMhCk2SJIsUj+hGnQaxkwaKfyvK9KenX20JNTQmVfJOz7VWe0cSntw== +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-reports@^3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.4.tgz#1b6f068ecbc6c331040aab5741991273e609e40c" + integrity sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" joycon@^3.0.1: version "3.0.1" @@ -655,12 +748,41 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= -magic-string@^0.25.7: - version "0.25.7" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" - integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== +load-tsconfig@^0.2.0: + version "0.2.3" + resolved "https://registry.yarnpkg.com/load-tsconfig/-/load-tsconfig-0.2.3.tgz#08af3e7744943caab0c75f8af7f1703639c3ef1f" + integrity sha512-iyT2MXws+dc2Wi6o3grCFtGXpeMvHmJqS27sMPGtV2eUu4PeFnG+33I8BlFK1t1NWMjOpcx9bridn5yxLDX2gQ== + +local-pkg@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.1.tgz#e7b0d7aa0b9c498a1110a5ac5b00ba66ef38cfff" + integrity sha512-lL87ytIGP2FU5PWwNDo0w3WhIo2gopIAxPg9RxDYF7m4rr5ahuZxP22xnJHIvaLTe4Z9P6uKKY2UHiwyB4pcrw== + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: - sourcemap-codec "^1.4.4" + p-locate "^5.0.0" + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== + +loupe@^2.3.1: + version "2.3.4" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.4.tgz#7e0b9bffc76f148f9be769cb1321d3dcf3cb25f3" + integrity sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ== + dependencies: + get-func-name "^2.0.0" + +make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" merge-stream@^2.0.0: version "2.0.0" @@ -680,6 +802,18 @@ micromatch@^4.0.4: braces "^3.0.1" picomatch "^2.2.3" +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -692,6 +826,18 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" +minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +mrmime@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" + integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== + ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -706,10 +852,10 @@ mz@^2.7.0: object-assign "^4.0.1" thenify-all "^1.0.0" -nanoid@^3.1.28: - version "3.2.0" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.2.0.tgz#62667522da6673971cca916a6d3eff3f415ff80c" - integrity sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA== +nanoid@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== node-modules-regexp@^1.0.0: version "1.0.0" @@ -747,6 +893,25 @@ onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -757,7 +922,7 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.6: +path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== @@ -767,10 +932,15 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -picocolors@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" - integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: version "2.3.0" @@ -793,14 +963,19 @@ postcss-load-config@^3.0.1: lilconfig "^2.0.3" yaml "^1.10.2" -postcss@^8.1.10, postcss@^8.3.8: - version "8.3.9" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.9.tgz#98754caa06c4ee9eb59cc48bd073bb6bd3437c31" - integrity sha512-f/ZFyAKh9Dnqytx5X62jgjhhzttjZS7hMsohcI7HEI5tjELX/HxCy3EFhsRxyzGvrzFF+82XPvCS8T9TFleVJw== +postcss@^8.4.13: + version "8.4.14" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" + integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== dependencies: - nanoid "^3.1.28" - picocolors "^0.2.1" - source-map-js "^0.6.2" + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== queue-microtask@^1.2.2: version "1.2.3" @@ -814,18 +989,24 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + resolve-from@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve@^1.20.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== +resolve@^1.22.0: + version "1.22.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" + integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" + is-core-module "^2.8.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" reusify@^1.0.4: version "1.0.4" @@ -839,10 +1020,10 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" -rollup@^2.56.1, rollup@^2.57.0: - version "2.58.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.58.0.tgz#a643983365e7bf7f5b7c62a8331b983b7c4c67fb" - integrity sha512-NOXpusKnaRpbS7ZVSzcEXqxcLDOagN6iFS8p45RkoiMqPHDLwJm758UF05KlMoCRbLBTZsPOIa887gZJ1AiXvw== +rollup@^2.59.0, rollup@^2.74.1: + version "2.75.6" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.75.6.tgz#ac4dc8600f95942a0180f61c7c9d6200e374b439" + integrity sha512-OEf0TgpC9vU6WGROJIk1JA3LR5vk/yvqlzxqdrE2CzzXnqKXNzbAwlWUXis8RS3ZPe7LAq+YUxsRa0l3r27MLA== optionalDependencies: fsevents "~2.3.2" @@ -853,6 +1034,16 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +semver@^6.0.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -865,40 +1056,67 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +signal-exit@^3.0.2: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + signal-exit@^3.0.3: version "3.0.5" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.5.tgz#9e3e8cc0c75a99472b44321033a7702e7738252f" integrity sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ== +sirv@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/sirv/-/sirv-2.0.2.tgz#128b9a628d77568139cff85703ad5497c46a4760" + integrity sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w== + dependencies: + "@polka/url" "^1.0.0-next.20" + mrmime "^1.0.0" + totalist "^3.0.0" + slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -source-map-js@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e" - integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug== +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +source-map@0.8.0-beta.0: + version "0.8.0-beta.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" + integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== + dependencies: + whatwg-url "^7.0.0" -source-map@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" -sourcemap-codec@^1.4.4: - version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -sucrase@^3.20.1: - version "3.20.1" - resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.20.1.tgz#1c055e97d0fab2f9857f02461364075b3a4ab226" - integrity sha512-BIG59HaJOxNct9Va6KvT5yzBA/rcMGetzvZyTx0ZdCcspIbpJTPS64zuAfYlJuOj+3WaI5JOdA+F0bJQQi8ZiQ== +sucrase@^3.20.3: + version "3.21.0" + resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.21.0.tgz#6a5affdbe716b22e4dc99c57d366ad0d216444b9" + integrity sha512-FjAhMJjDcifARI7bZej0Bi1yekjWQHoEvWIXhLPwDhC6O4iZ5PtGb86WV56riW87hzpgB13wwBKO9vKAiWu5VQ== dependencies: commander "^4.0.0" glob "7.1.6" @@ -914,6 +1132,20 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + thenify-all@^1.0.0: version "1.6.0" resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" @@ -928,6 +1160,16 @@ thenify-all@^1.0.0: dependencies: any-promise "^1.0.0" +tinypool@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.1.3.tgz#b5570b364a1775fd403de5e7660b325308fee26b" + integrity sha512-2IfcQh7CP46XGWGGbdyO4pjcKqsmVqFAPcXfPxcPXmOWt9cYkTP9HcDmGgsfijYoAEc4z9qcpM/BaBz46Y9/CQ== + +tinyspy@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-0.3.2.tgz#2f95cb14c38089ca690385f339781cd35faae566" + integrity sha512-2+40EP4D3sFYy42UkgkFFB+kiX2Tg3URG/lVvAZFfLxgGpnWl5qQJuBw1gaLttq8UOS+2p3C0WrhJnQigLTT2Q== + to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -935,6 +1177,18 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" +totalist@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.0.tgz#4ef9c58c5f095255cdc3ff2a0a55091c57a3a1bd" + integrity sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw== + +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA== + dependencies: + punycode "^2.1.0" + tree-kill@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" @@ -945,67 +1199,84 @@ ts-interface-checker@^0.1.9: resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== -tsup@^5.2.1, tsup@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/tsup/-/tsup-5.3.0.tgz#a62bf44922a2234a6c0b7499cf4237ca12eeb9de" - integrity sha512-/LZTuAj1Lhh7iXBhtWTWjPodtmOkg6HnhdWo+sl4JftJTAJqnxnHerOiFYjPeA5RIhcaFc2w2Sho1rGLJ7rLhw== +tsup@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/tsup/-/tsup-6.1.0.tgz#85d346b3f40da523a736b0eb5a687554106bce72" + integrity sha512-kKSzFbX996OXkbQif23LV0xDDvxnhH95Hw39ku7Kx1NEfJxcxvqexGGEDgRyd5dlzIJI4U8mySfPeq5iExYwnw== dependencies: - cac "^6.7.2" - chalk "^4.1.0" + bundle-require "^3.0.2" + cac "^6.7.12" chokidar "^3.5.1" debug "^4.3.1" - esbuild "^0.12.28" + esbuild "^0.14.25" execa "^5.0.0" globby "^11.0.3" joycon "^3.0.1" postcss-load-config "^3.0.1" resolve-from "^5.0.0" - rollup "^2.56.1" - sucrase "^3.20.1" + rollup "^2.74.1" + source-map "0.8.0-beta.0" + sucrase "^3.20.3" tree-kill "^1.2.2" -typescript@^4.4.3: - version "4.4.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.3.tgz#bdc5407caa2b109efd4f82fe130656f977a29324" - integrity sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA== - -vite-plugin-windicss@^1.4.9: - version "1.4.9" - resolved "https://registry.yarnpkg.com/vite-plugin-windicss/-/vite-plugin-windicss-1.4.9.tgz#7f97a6157790d614d4cc518e86cfd62abc189285" - integrity sha512-4DxBnsQ8dvhhtR5aUgpTApxN7Auh11/9xOIW7Qdu+OuTY6tyU1NqZntVQpwArf4gNsJssgUBBCfFx1zei+rYnQ== - dependencies: - "@windicss/plugin-utils" "1.4.9" - chalk "^4.1.2" - debug "^4.3.2" - windicss "^3.1.8" - -vite@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/vite/-/vite-2.6.2.tgz#5bbb4afe1f69ed9d6482e51a0f761f8cfc230e22" - integrity sha512-HSIg9U15LOnbD3CUxX364Pdrm7DUjftuBljowGxvkFHgDZU/SKPqApg9t86MX/Qq1VCO7wS+mGJHlfuTF7c0Sg== - dependencies: - esbuild "^0.13.2" - postcss "^8.3.8" - resolve "^1.20.0" - rollup "^2.57.0" +type-detect@^4.0.0, type-detect@^4.0.5: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +typescript@^4.7.3: + version "4.7.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.3.tgz#8364b502d5257b540f9de4c40be84c98e23a129d" + integrity sha512-WOkT3XYvrpXx4vMMqlD+8R8R37fZkjyLGlxavMc4iB8lrl8L0DeTcHbYgw/v0N/z9wAFsgBhcsF0ruoySS22mA== + +v8-to-istanbul@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.0.0.tgz#be0dae58719fc53cb97e5c7ac1d7e6d4f5b19511" + integrity sha512-HcvgY/xaRm7isYmyx+lFKA4uQmfUbN0J4M0nNItvzTvH/iQ9kW5j/t4YSR+Ge323/lrgDAWJoF46tzGQHwBHFw== + dependencies: + "@jridgewell/trace-mapping" "^0.3.7" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + +vite@^2.9.9: + version "2.9.11" + resolved "https://registry.yarnpkg.com/vite/-/vite-2.9.11.tgz#59a5a25fe40a4dcddc1ad3c348f4f0d8031ff926" + integrity sha512-h1n8bAN5Psv/V+RAY3P6OtYyGSFQdusgYWiLRAk41qY7rSyH4K5Jq+RUXztzyPVB0oHbnXPUuS2Aj44jucViUA== + dependencies: + esbuild "^0.14.27" + postcss "^8.4.13" + resolve "^1.22.0" + rollup "^2.59.0" optionalDependencies: fsevents "~2.3.2" -vue-demi@*: - version "0.11.4" - resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.11.4.tgz#6101992fe4724cf5634018a16e953f3052e94e2a" - integrity sha512-/3xFwzSykLW2HiiLie43a+FFgNOcokbBJ+fzvFXd0r2T8MYohqvphUyDQ8lbAwzQ3Dlcrb1c9ykifGkhSIAk6A== - -vue@^3.2.19: - version "3.2.19" - resolved "https://registry.yarnpkg.com/vue/-/vue-3.2.19.tgz#da2c80a6a0271c7097fee9e31692adfd9d569c8f" - integrity sha512-6KAMdIfAtlK+qohTIUE4urwAv4A3YRuo8uAbByApUmiB0CziGAAPs6qVugN6oHPia8YIafHB/37K0O6KZ7sGmA== - dependencies: - "@vue/compiler-dom" "3.2.19" - "@vue/compiler-sfc" "3.2.19" - "@vue/runtime-dom" "3.2.19" - "@vue/server-renderer" "3.2.19" - "@vue/shared" "3.2.19" +vitest@^0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/vitest/-/vitest-0.14.2.tgz#ac07b46d3cd3b5667d2bb803962f759a1b8f3f89" + integrity sha512-vXQUl8OUCqHmxKWscMGL+6Xl1pBJmYHZ8N85iNpLGrirAC2vhspu7b73ShRcLonmZT44BYZW+LBAVvn0L4jyVA== + dependencies: + "@types/chai" "^4.3.1" + "@types/chai-subset" "^1.3.3" + chai "^4.3.6" + debug "^4.3.4" + local-pkg "^0.4.1" + tinypool "^0.1.3" + tinyspy "^0.3.2" + vite "^2.9.9" + +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + +whatwg-url@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" which@^2.0.1: version "2.0.2" @@ -1014,17 +1285,49 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -windicss@^3.1.8, windicss@^3.1.9: - version "3.1.9" - resolved "https://registry.yarnpkg.com/windicss/-/windicss-3.1.9.tgz#e43d924168422efa743c8223607c3af47d2d0291" - integrity sha512-5YoKvXeCQXIdwc91BoOgpKbIImr2JS8I14rPMa/5dKDDPA4ot3NgICWKELkml39R/8rn4Q0BVUUTqN+w+hjDSA== +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + yaml@^1.10.2: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yargs-parser@^20.2.2, yargs-parser@^20.2.9: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==