├── .gitignore ├── .vim └── coc-settings.json ├── Dockerfile ├── src ├── either.ts ├── twitter-api │ ├── index.ts │ ├── error-types.ts │ ├── access-token.ts │ ├── guest-token.ts │ ├── api-types.ts │ ├── user-id.ts │ └── user-tweets.ts ├── rss.ts ├── twitter.ts ├── withCache.ts └── server.ts ├── docker-compose.yml ├── tsconfig.json ├── .eslintrc.js ├── .github └── workflows │ ├── deploy.yml │ └── push.yml ├── package.json ├── LICENSE ├── README.md └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | tsconfig.tsbuildinfo 3 | -------------------------------------------------------------------------------- /.vim/coc-settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "tsserver.useLocalTsdk": true, 3 | "tsserver.tsdk": "${workspaceFolder}/.yarn/sdks/typescript/lib" 4 | } -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:20.15.1-alpine 2 | 3 | WORKDIR /app 4 | 5 | COPY package.json yarn.lock ./ 6 | 7 | RUN yarn install --frozen-lockfile 8 | 9 | COPY . . 10 | 11 | CMD ["yarn", "start"] 12 | -------------------------------------------------------------------------------- /src/either.ts: -------------------------------------------------------------------------------- 1 | export type TEitherSuccess = { ok: true; data: S }; 2 | export type TEitherFailure = { ok: false; error: F }; 3 | export type TEither = TEitherSuccess | TEitherFailure; 4 | -------------------------------------------------------------------------------- /src/twitter-api/index.ts: -------------------------------------------------------------------------------- 1 | export * from './api-types'; 2 | export * from './error-types'; 3 | export * from './access-token'; 4 | export * from './guest-token'; 5 | export * from './user-id'; 6 | export * from './user-tweets'; 7 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | web: 5 | build: . 6 | volumes: 7 | - ./:/app 8 | ports: 9 | - '3000:3000' 10 | command: yarn dev 11 | environment: 12 | REDIS_URL: redis://redis:6379 13 | HOST: '0.0.0.0' 14 | depends_on: 15 | - redis 16 | 17 | redis: 18 | image: redis:latest 19 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es6", 4 | "esModuleInterop": true, 5 | "allowSyntheticDefaultImports": true, 6 | "strict": true, 7 | "forceConsistentCasingInFileNames": true, 8 | "module": "CommonJS", 9 | "moduleResolution": "Node", 10 | "isolatedModules": true, 11 | "noEmit": true 12 | }, 13 | "include": ["src"] 14 | } 15 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: [ 3 | 'eslint:recommended', 4 | 'plugin:@typescript-eslint/recommended', 5 | 'plugin:prettier/recommended', 6 | ], 7 | parser: '@typescript-eslint/parser', 8 | plugins: [ 9 | '@typescript-eslint', 10 | 'prettier', 11 | ], 12 | rules: { 13 | 'prettier/prettier': [ 14 | 1, 15 | { 16 | trailingComma: 'es5', 17 | singleQuote: true, 18 | }, 19 | ], 20 | }, 21 | }; 22 | -------------------------------------------------------------------------------- /src/twitter-api/error-types.ts: -------------------------------------------------------------------------------- 1 | export type TGuestTokenUnknownError = 'guest-token-unknown-error'; 2 | export type TGuestTokenError = TGuestTokenUnknownError; 3 | 4 | export type TUserIdUnknownError = 'user-id-unknown-error'; 5 | export type TUserIdDoesNotExistError = 'user-id-does-not-exist-error'; 6 | export type TUserIdError = TUserIdUnknownError | TUserIdDoesNotExistError; 7 | 8 | export type TUserTweetsUnknownError = 'user-tweets-unknown-error'; 9 | export type TUserTweetsError = TUserTweetsUnknownError; 10 | -------------------------------------------------------------------------------- /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | name: On push 2 | 3 | on: push 4 | 5 | jobs: 6 | deploy_production: 7 | if: ${{ github.ref == 'refs/heads/deployment' }} 8 | runs-on: ubuntu-latest 9 | 10 | steps: 11 | - uses: actions/checkout@v2 12 | 13 | - uses: zenato/docker-action@master 14 | with: 15 | username: ${{ secrets.REGISTRY_USERNAME }} 16 | password: ${{ secrets.REGISTRY_PASSWORD }} 17 | repository: ${{ secrets.REGISTRY_REPO }} 18 | registry: ${{ secrets.REGISTRY_URL }} 19 | tag: production 20 | -------------------------------------------------------------------------------- /.github/workflows/push.yml: -------------------------------------------------------------------------------- 1 | name: On push 2 | 3 | on: push 4 | 5 | jobs: 6 | ci: 7 | runs-on: ubuntu-latest 8 | 9 | steps: 10 | - uses: actions/checkout@v2 11 | - run: yarn install --frozen-lockfile 12 | - run: yarn ci 13 | 14 | deploy_alpha: 15 | needs: ci 16 | if: ${{ github.ref == 'refs/heads/main' }} 17 | runs-on: ubuntu-latest 18 | 19 | steps: 20 | - uses: actions/checkout@v2 21 | 22 | - uses: zenato/docker-action@master 23 | with: 24 | username: ${{ secrets.REGISTRY_USERNAME }} 25 | password: ${{ secrets.REGISTRY_PASSWORD }} 26 | repository: ${{ secrets.REGISTRY_REPO }} 27 | registry: ${{ secrets.REGISTRY_URL }} 28 | tag: alpha 29 | -------------------------------------------------------------------------------- /src/twitter-api/access-token.ts: -------------------------------------------------------------------------------- 1 | // These are pre-fetched bearer tokens 2 | const clientCredentials = { 3 | 'developer.twitter.com': 4 | 'AAAAAAAAAAAAAAAAAAAAACHguwAAAAAAaSlT0G31NDEyg%2BSnBN5JuyKjMCU%3Dlhg0gv0nE7KKyiJNEAojQbn8Y3wJm1xidDK7VnKGBP4ByJwHPb', 5 | tweetdeck: 6 | 'AAAAAAAAAAAAAAAAAAAAAFQODgEAAAAAVHTp76lzh3rFzcHbmHVvQxYYpTw%3DckAlMINMjmCwxUcaXbAN4XqJVdgMJaHqNOFgPMK0zN1qLqLQCF', 7 | ipad: 'AAAAAAAAAAAAAAAAAAAAAGHtAgAAAAAA%2Bx7ILXNILCqkSGIzy6faIHZ9s3Q%3DQy97w6SIrzE7lQwPJEYQBsArEE2fC25caFwRBvAGi456G09vGR', 8 | }; 9 | 10 | const clientCredentialIds = Object.keys( 11 | clientCredentials 12 | ) as (keyof typeof clientCredentials)[]; 13 | 14 | export const getAccessToken = (): string => { 15 | const client = 16 | clientCredentialIds[Math.floor(Math.random() * clientCredentialIds.length)]; 17 | console.log(`Using credentials: ${client}`); 18 | return clientCredentials[client]; 19 | }; 20 | -------------------------------------------------------------------------------- /src/twitter-api/guest-token.ts: -------------------------------------------------------------------------------- 1 | import { TEither } from '../either'; 2 | import { TGuestTokenResponse } from './api-types'; 3 | import { TGuestTokenError } from './error-types'; 4 | 5 | const GUEST_TOKEN_API = 'https://api.twitter.com/1.1/guest/activate.json'; 6 | 7 | export interface FetchGuestTokenOptions { 8 | accessToken: string; 9 | } 10 | 11 | // Fetch a guest token for the given access token 12 | export const fetchGuestToken = async ({ 13 | accessToken, 14 | }: FetchGuestTokenOptions): Promise> => { 15 | try { 16 | const { guest_token: guestToken } = (await fetch(GUEST_TOKEN_API, { 17 | method: 'POST', 18 | headers: { 19 | Authorization: `Bearer ${accessToken}`, 20 | }, 21 | }).then((res) => res.json())) as TGuestTokenResponse; 22 | 23 | return { ok: true, data: guestToken }; 24 | } catch (err) { 25 | console.error(err); 26 | return { ok: false, error: 'guest-token-unknown-error' }; 27 | } 28 | }; 29 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "twitter-client", 3 | "version": "1.0.0", 4 | "license": "Unlicense", 5 | "scripts": { 6 | "dev": "nodemon src/server.ts -w src", 7 | "start": "NODE_ENV=production ts-node src/server.ts", 8 | "typecheck": "tsc --noEmit", 9 | "typecheck:watch": "yarn typecheck --incremental --watch", 10 | "lint": "eslint src --max-warnings 0", 11 | "ci": "yarn typecheck && yarn lint" 12 | }, 13 | "dependencies": { 14 | "express": "^4.20.0", 15 | "node-fetch": "^2.7.0", 16 | "redis": "^4.7.0", 17 | "rss": "^1.2.2", 18 | "ts-node": "^10.9.2", 19 | "typescript": "^4.9.3" 20 | }, 21 | "devDependencies": { 22 | "@types/express": "^4.17.21", 23 | "@types/node": "^18.19.48", 24 | "@types/node-fetch": "^2.6.11", 25 | "@types/rss": "^0.0.30", 26 | "@typescript-eslint/eslint-plugin": "^5.62.0", 27 | "@typescript-eslint/parser": "^5.62.0", 28 | "eslint": "^8.57.0", 29 | "eslint-config-prettier": "^8.10.0", 30 | "eslint-plugin-prettier": "^4.2.1", 31 | "nodemon": "^2.0.20", 32 | "prettier": "^2.8.8" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | This is free and unencumbered software released into the public domain. 2 | 3 | Anyone is free to copy, modify, publish, use, compile, sell, or 4 | distribute this software, either in source code form or as a compiled 5 | binary, for any purpose, commercial or non-commercial, and by any 6 | means. 7 | 8 | In jurisdictions that recognize copyright laws, the author or authors 9 | of this software dedicate any and all copyright interest in the 10 | software to the public domain. We make this dedication for the benefit 11 | of the public at large and to the detriment of our heirs and 12 | successors. We intend this dedication to be an overt act of 13 | relinquishment in perpetuity of all present and future rights to this 14 | software under copyright law. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | 24 | For more information, please refer to -------------------------------------------------------------------------------- /src/rss.ts: -------------------------------------------------------------------------------- 1 | import RSS from 'rss'; 2 | import { TTweet } from './twitter-api'; 3 | 4 | export const RSS_FLAVOURS = ['default', 'slack'] as const; 5 | export type TRSSFlavour = (typeof RSS_FLAVOURS)[number]; 6 | 7 | export interface CreateUserRSSFeedOptions { 8 | username: string; 9 | feedUrl: string; 10 | tweets: TTweet[]; 11 | flavour?: TRSSFlavour; 12 | } 13 | 14 | export const createUserRSSFeed = ({ 15 | username, 16 | feedUrl, 17 | tweets, 18 | flavour = 'default', 19 | }: CreateUserRSSFeedOptions): RSS => { 20 | // Feed metadata 21 | const feed = new RSS({ 22 | title: username, 23 | feed_url: feedUrl, 24 | site_url: `https://twitter.com/${username}`, 25 | custom_namespaces: { 26 | atom: 'http://www.w3.org/2005/Atom', 27 | }, 28 | }); 29 | 30 | // For each tweet, add an item to the feed 31 | for (const tweet of tweets) { 32 | const id = tweet.rest_id; 33 | const url = `https://twitter.com/${username}/status/${id}`; 34 | const date = tweet.legacy.created_at; 35 | const text = tweet.legacy.full_text; 36 | const mediaUrls = 37 | tweet.legacy.entities.media?.map((media) => media.media_url_https) ?? []; 38 | 39 | feed.item({ 40 | title: flavour === 'slack' ? url : text, 41 | url: url, 42 | date, 43 | custom_elements: [{ 'dc:creator': username }], 44 | description: [ 45 | text, 46 | ...mediaUrls.map((url: string) => 47 | flavour === 'slack' ? url : `` 48 | ), 49 | ].join('\n'), 50 | }); 51 | } 52 | 53 | return feed; 54 | }; 55 | -------------------------------------------------------------------------------- /src/twitter-api/api-types.ts: -------------------------------------------------------------------------------- 1 | // Types in this file are incomplete 2 | 3 | // Guest token 4 | export type TGuestTokenResponse = { 5 | guest_token: string; 6 | }; 7 | 8 | // User ID 9 | export type TUserIdExistsResponse = { 10 | data: { 11 | user: { 12 | result: { 13 | rest_id: string; 14 | }; 15 | }; 16 | }; 17 | }; 18 | 19 | export type TUserIdDoesNotExistResponse = { 20 | data: Record; 21 | }; 22 | 23 | export type TUserIdResponse = 24 | | TUserIdExistsResponse 25 | | TUserIdDoesNotExistResponse; 26 | 27 | // User tweets 28 | export type TTweet = { 29 | rest_id: string; 30 | core: { 31 | user_results: { 32 | result: { 33 | legacy: { 34 | screen_name: string; 35 | }; 36 | }; 37 | }; 38 | }; 39 | legacy: { 40 | created_at: string; 41 | full_text: string; 42 | entities: { 43 | media?: { 44 | media_url_https: string; 45 | }[]; 46 | }; 47 | }; 48 | }; 49 | 50 | export type TTimelineAddEntriesInstruction = { 51 | type: 'TimelineAddEntries'; 52 | entries: { 53 | content?: { 54 | itemContent?: { 55 | tweet_results?: { 56 | result?: TTweet; 57 | }; 58 | }; 59 | }; 60 | }[]; 61 | }; 62 | 63 | export type TTimelineInstruction = 64 | | TTimelineAddEntriesInstruction 65 | | { type: 'never' }; // TypeScript hack 66 | 67 | export type TUserTweetsResponse = { 68 | data: { 69 | user: { 70 | result: { 71 | timeline_v2: { 72 | timeline: { 73 | instructions: TTimelineInstruction[]; 74 | }; 75 | }; 76 | }; 77 | }; 78 | }; 79 | }; 80 | -------------------------------------------------------------------------------- /src/twitter.ts: -------------------------------------------------------------------------------- 1 | import { TEither } from './either'; 2 | import { RedisClientType as RedisClient } from 'redis'; 3 | import { withCache } from './withCache'; 4 | import { 5 | getAccessToken, 6 | fetchGuestToken, 7 | fetchUserId, 8 | fetchUserTweets, 9 | TTweet, 10 | TGuestTokenError, 11 | TUserIdError, 12 | TUserTweetsError, 13 | } from './twitter-api'; 14 | 15 | export type TGetTweetsForUsernameError = 16 | | TGuestTokenError 17 | | TUserIdError 18 | | TUserTweetsError; 19 | 20 | export interface GetTweetsForUsernameOptions { 21 | redis: RedisClient; 22 | username: string; 23 | } 24 | 25 | export const getTweetsForUsername = async ({ 26 | redis, 27 | username, 28 | }: GetTweetsForUsernameOptions): Promise< 29 | TEither 30 | > => { 31 | const accessToken = getAccessToken(); 32 | 33 | return withCache( 34 | { 35 | redis, 36 | key: `guest-token-${accessToken}`, 37 | friendlyLabel: 'Guest token', 38 | producer: () => fetchGuestToken({ accessToken }), 39 | invalidateOnError: true, 40 | shouldInvalidateOnResult: ({ ok }) => !ok, 41 | }, 42 | async (guestTokenResult) => { 43 | if (!guestTokenResult.ok) { 44 | return guestTokenResult; 45 | } 46 | 47 | const guestToken = guestTokenResult.data; 48 | 49 | return withCache( 50 | { 51 | redis, 52 | key: `user-id-${username}`, 53 | friendlyLabel: 'User ID', 54 | producer: () => fetchUserId({ accessToken, guestToken, username }), 55 | }, 56 | async (userIdResult) => { 57 | if (!userIdResult.ok) { 58 | return userIdResult; 59 | } 60 | 61 | const userId = userIdResult.data; 62 | 63 | return fetchUserTweets({ 64 | accessToken, 65 | guestToken, 66 | userId, 67 | username, 68 | }); 69 | } 70 | ); 71 | } 72 | ); 73 | }; 74 | -------------------------------------------------------------------------------- /src/twitter-api/user-id.ts: -------------------------------------------------------------------------------- 1 | import { TEither } from '../either'; 2 | import { TUserIdResponse } from './api-types'; 3 | import { TUserIdError } from './error-types'; 4 | 5 | const userIdAPIForUsername = (username: string) => 6 | `https://api.twitter.com/graphql/oUZZZ8Oddwxs8Cd3iW3UEA/UserByScreenName?variables=%7B%22screen_name%22%3A%22${username}%22%2C%22withSafetyModeUserFields%22%3Atrue%7D&features=%7B%22hidden_profile_likes_enabled%22%3Afalse%2C%22responsive_web_graphql_exclude_directive_enabled%22%3Atrue%2C%22verified_phone_label_enabled%22%3Afalse%2C%22subscriptions_verification_info_verified_since_enabled%22%3Atrue%2C%22highlights_tweets_tab_ui_enabled%22%3Atrue%2C%22creator_subscriptions_tweet_preview_api_enabled%22%3Atrue%2C%22responsive_web_graphql_skip_user_profile_image_extensions_enabled%22%3Afalse%2C%22responsive_web_graphql_timeline_navigation_enabled%22%3Atrue%7D`; 7 | 8 | export interface FetchUserIdOptions { 9 | accessToken: string; 10 | guestToken: string; 11 | username: string; 12 | } 13 | 14 | // Fetch the user ID for the given username 15 | export const fetchUserId = async ({ 16 | accessToken, 17 | guestToken, 18 | username, 19 | }: FetchUserIdOptions): Promise> => { 20 | let response; 21 | 22 | try { 23 | response = (await fetch(userIdAPIForUsername(username), { 24 | method: 'GET', 25 | headers: { 26 | Authorization: `Bearer ${accessToken}`, 27 | 'x-guest-token': guestToken, 28 | 'x-twitter-active-user': 'yes', 29 | Referer: 'https://twitter.com/', 30 | }, 31 | }).then((res) => res.json())) as TUserIdResponse; 32 | 33 | // Handle unexpected response 34 | if (!response.data) { 35 | throw new Error(JSON.stringify(response, null, 2)); 36 | } 37 | } catch (err) { 38 | console.error(err); 39 | return { ok: false, error: 'user-id-unknown-error' }; 40 | } 41 | 42 | // The `data` field is empty if the user does not exist 43 | if ('user' in response.data) { 44 | return { ok: true, data: response.data.user.result.rest_id }; 45 | } 46 | 47 | return { ok: false, error: 'user-id-does-not-exist-error' }; 48 | }; 49 | -------------------------------------------------------------------------------- /src/withCache.ts: -------------------------------------------------------------------------------- 1 | import { RedisClientType as RedisClient } from 'redis'; 2 | 3 | // Update this to invalidate the cache for all instances 4 | const GLOBAL_CACHE_PREFIX = 'v2:'; 5 | 6 | export interface WithCacheOptions { 7 | redis: RedisClient; 8 | key: string; 9 | friendlyLabel?: string; 10 | producer: () => Promise; 11 | invalidateOnError?: boolean; 12 | shouldInvalidateOnResult?: (result: U) => boolean; 13 | } 14 | 15 | /** 16 | * A higher-order function that performs a computation with a cached value, 17 | * fetching the value if necessary. 18 | * 19 | * If the cached value exists, it is passed to the callback. If the callback 20 | * produces an error, an invalid result, or if the cached value does not exist, 21 | * then the value is fetched, cached, and passed to the callback (possibly for 22 | * a second time). 23 | */ 24 | export const withCache = async ( 25 | { 26 | redis, 27 | key, 28 | friendlyLabel = key, 29 | producer, 30 | invalidateOnError = false, 31 | shouldInvalidateOnResult = () => false, 32 | }: WithCacheOptions, 33 | callback: (value: T) => Promise 34 | ): Promise => { 35 | const prefixedKey = GLOBAL_CACHE_PREFIX + key; 36 | 37 | const cachedJSON: string | null = await redis.get(prefixedKey); 38 | const cachedValue: T | null = cachedJSON ? JSON.parse(cachedJSON) : null; 39 | 40 | console.log(`${friendlyLabel}: Cache ${cachedValue ? 'hit' : 'miss'}`); 41 | 42 | // Try with the cached value 43 | if (cachedValue) { 44 | let result: U | undefined = undefined; 45 | 46 | try { 47 | result = await callback(cachedValue); 48 | } catch (err) { 49 | if (!invalidateOnError) { 50 | throw err; 51 | } 52 | 53 | console.log( 54 | `${friendlyLabel}: Cached value resulted in error, fetching new value` 55 | ); 56 | } 57 | 58 | if (result) { 59 | if (shouldInvalidateOnResult(result)) { 60 | console.log( 61 | `${friendlyLabel}: Cached value resulted in an invalid result, fetching new value` 62 | ); 63 | } else { 64 | return result; 65 | } 66 | } 67 | } 68 | 69 | // Re-fetch the value and try again 70 | const value = await producer(); 71 | await redis.set(prefixedKey, JSON.stringify(value)); 72 | return callback(value); 73 | }; 74 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 12joan/twitter-client 2 | 3 | A temporary Twitter client for fetching recent tweets for use while Twitter is closed to guest users. 4 | 5 | Based on [this script](https://github.com/zedeus/nitter/issues/919#issuecomment-1619263153) by [polkaulfield](https://github.com/polkaulfield). 6 | 7 | **[🚀 Publish new version](https://github.com/12joan/twitter-client/compare/deployment...main?expand=1&title=Deploy%20production&body=Merging%20this%20PR%20will%20trigger%20a%20deployment%20to%20production)** - Create a PR that will push the contents of `main` to the Docker registry when merged 8 | 9 | ## Deployment with Docker 10 | 11 | Create a file `docker-compose.yml` with the following content: 12 | 13 | ```yml 14 | version: '3' 15 | 16 | services: 17 | web: 18 | image: ghcr.io/12joan/twitter-client:production 19 | environment: 20 | REDIS_URL: redis://redis:6379 21 | HOST: '0.0.0.0' 22 | ports: 23 | - 3000:3000 24 | depends_on: 25 | - redis 26 | 27 | redis: 28 | image: redis:latest 29 | ``` 30 | 31 | Start using `docker-compose up -d` and access at http://localhost:3000/. 32 | 33 | The `production` tag is updated when the `deployment` branch receives new commits. You can also try out the lastest version on `main` using the `alpha` tag. Anyone can update the `deployment` branch by clicking the **Publish new version** link at the top of this README. 34 | 35 | ## Deployment without Docker 36 | 37 | - [Red Hat Enterprise Linux](https://github.com/12joan/twitter-client/wiki/Install:NoDocker:Rocky-Linux-8.6) 38 | 39 | ## Usage 40 | 41 | ### Raw JSON data 42 | 43 | You can fetch recent Tweets as JSON from `http://localhost:3000/:username`. 44 | 45 | Example: `http://localhost:3000/amnesty` 46 | 47 | ### RSS feed 48 | 49 | To format the results as an RSS feed, use `http://localhost:3000/:username/rss`. 50 | 51 | Optionally, specify a preset "flavour" of RSS using `http://localhost:3000/:username/rss?flavour=slack`. Supported flavours: 52 | 53 | - `default` 54 | - Title: Tweet text 55 | - Description: Tweet text + media URLs as image tags 56 | - `slack` 57 | - Title: Tweet URL 58 | - Description: Tweet text + media URLs as links 59 | 60 | ## Running locally 61 | 62 | To start the server, 63 | 64 | ``` 65 | $ yarn install # See https://github.com/12joan/twitter-client/issues/6 66 | $ docker-compose up --build 67 | ``` 68 | 69 | To check types on file change, 70 | 71 | ``` 72 | $ yarn typecheck:watch 73 | ``` 74 | 75 | To fix code formatting, 76 | 77 | ``` 78 | $ yarn lint --fix 79 | ``` 80 | -------------------------------------------------------------------------------- /src/server.ts: -------------------------------------------------------------------------------- 1 | import express from 'express'; 2 | import { createClient as createRedisClient } from 'redis'; 3 | import { getTweetsForUsername } from './twitter'; 4 | import { TTweet } from './twitter-api'; 5 | import { createUserRSSFeed, RSS_FLAVOURS, TRSSFlavour } from './rss'; 6 | 7 | /** 8 | * Initialize the Redis server. The URL should be specified in the environment 9 | * variable REDIS_URL. 10 | */ 11 | const redis = createRedisClient({ url: process.env.REDIS_URL }); 12 | redis.on('error', console.error); 13 | 14 | /** 15 | * Express server config. Customise the host and port using the environment 16 | * variables HOST and PORT. 17 | */ 18 | const port = parseInt(process.env.PORT || '3000', 10); 19 | const host = process.env.HOST || 'localhost'; 20 | 21 | redis.connect().then(() => { 22 | const app = express(); 23 | 24 | // Middleware. Get Tweets for routes starting with /:username. 25 | app.use('/:username', async (req, res, next) => { 26 | let result; 27 | 28 | try { 29 | result = await getTweetsForUsername({ 30 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 31 | redis: redis as any, 32 | username: req.params.username, 33 | }); 34 | } catch (err) { 35 | console.error(err); 36 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 37 | res.status(500).send((err as any).message ?? 'Unknown error'); 38 | return; 39 | } 40 | 41 | if (!result.ok) { 42 | res 43 | .status(result.error === 'user-id-does-not-exist-error' ? 404 : 500) 44 | .send(result.error); 45 | return; 46 | } 47 | 48 | res.locals.tweets = result.data; 49 | next(); 50 | }); 51 | 52 | // JSON endpoint 53 | app.get('/:username', async (_req, res) => { 54 | res.send(res.locals.tweets); 55 | }); 56 | 57 | // RSS endpoint 58 | app.get('/:username/rss', async (req, res) => { 59 | const { username } = req.params; 60 | const { flavour = 'default' } = req.query; 61 | const tweets = res.locals.tweets as TTweet[]; 62 | 63 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 64 | if (!RSS_FLAVOURS.includes(flavour as any)) { 65 | res.status(400).send(`Invalid flavour: ${flavour}`); 66 | return; 67 | } 68 | 69 | const feed = createUserRSSFeed({ 70 | username, 71 | feedUrl: req.protocol + '://' + req.get('host') + req.originalUrl, 72 | tweets, 73 | flavour: flavour as TRSSFlavour, 74 | }); 75 | 76 | res.set('Content-Type', 'application/rss+xml'); 77 | res.send(feed.xml()); 78 | }); 79 | 80 | // Start the Express server 81 | app.listen(port, host, () => { 82 | console.log(`Server listening at http://${host}:${port}`); 83 | }); 84 | }); 85 | -------------------------------------------------------------------------------- /src/twitter-api/user-tweets.ts: -------------------------------------------------------------------------------- 1 | import { TEither } from '../either'; 2 | import { 3 | TUserTweetsResponse, 4 | TTimelineAddEntriesInstruction, 5 | TTweet, 6 | } from './api-types'; 7 | import { TUserTweetsError } from './error-types'; 8 | 9 | const tweetsAPIForUserId = (userId: string) => 10 | `https://api.twitter.com/graphql/pNl8WjKAvaegIoVH--FuoQ/UserTweetsAndReplies?variables=%7B%22userId%22%3A%22${userId}%22,%22count%22%3A40,%22includePromotedContent%22%3Atrue,%22withCommunity%22%3Atrue,%22withSuperFollowsUserFields%22%3Atrue,%22withDownvotePerspective%22%3Afalse,%22withReactionsMetadata%22%3Afalse,%22withReactionsPerspective%22%3Afalse,%22withSuperFollowsTweetFields%22%3Atrue,%22withVoice%22%3Atrue,%22withV2Timeline%22%3Atrue%7D&features=%7B%22responsive_web_twitter_blue_verified_badge_is_enabled%22%3Atrue,%22responsive_web_graphql_exclude_directive_enabled%22%3Atrue,%22verified_phone_label_enabled%22%3Afalse,%22responsive_web_graphql_timeline_navigation_enabled%22%3Atrue,%22responsive_web_graphql_skip_user_profile_image_extensions_enabled%22%3Afalse,%22tweetypie_unmention_optimization_enabled%22%3Atrue,%22vibe_api_enabled%22%3Atrue,%22responsive_web_edit_tweet_api_enabled%22%3Atrue,%22graphql_is_translatable_rweb_tweet_is_translatable_enabled%22%3Atrue,%22view_counts_everywhere_api_enabled%22%3Atrue,%22longform_notetweets_consumption_enabled%22%3Atrue,%22tweet_awards_web_tipping_enabled%22%3Afalse,%22freedom_of_speech_not_reach_fetch_enabled%22%3Afalse,%22standardized_nudges_misinfo%22%3Atrue,%22tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled%22%3Afalse,%22interactive_text_enabled%22%3Atrue,%22responsive_web_text_conversations_enabled%22%3Afalse,%22longform_notetweets_richtext_consumption_enabled%22%3Afalse,%22responsive_web_enhance_cards_enabled%22%3Afalse%7D`; 11 | 12 | export interface FetchUserTweetsOptions { 13 | accessToken: string; 14 | guestToken: string; 15 | userId: string; 16 | username: string; // Used for filtering Tweets 17 | } 18 | 19 | // Fetch the recent Tweets for the given user 20 | export const fetchUserTweets = async ({ 21 | accessToken, 22 | guestToken, 23 | userId, 24 | username, 25 | }: FetchUserTweetsOptions): Promise> => { 26 | let data: TUserTweetsResponse; 27 | 28 | try { 29 | data = await fetch(tweetsAPIForUserId(userId), { 30 | headers: { 31 | Authorization: `Bearer ${accessToken}`, 32 | 'x-guest-token': guestToken, 33 | 'x-twitter-active-user': 'yes', 34 | Referer: 'https://twitter.com', 35 | }, 36 | }).then((res) => res.json()); 37 | } catch (err) { 38 | console.error(err); 39 | return { ok: false, error: 'user-tweets-unknown-error' }; 40 | } 41 | 42 | const addEntriesInstructions = 43 | data.data.user.result.timeline_v2.timeline.instructions.filter( 44 | (instruction) => instruction.type === 'TimelineAddEntries' 45 | ) as TTimelineAddEntriesInstruction[]; 46 | 47 | const tweets = addEntriesInstructions 48 | .flatMap((instruction) => instruction.entries) 49 | .map((entry) => entry?.content?.itemContent?.tweet_results?.result) 50 | .filter((tweet) => tweet) as TTweet[]; 51 | 52 | /** 53 | * Only accept Tweets whose screen_name matches username. It may be 54 | * a bug or it may be advertising, but incorrect Tweets have been 55 | * showing up on this API endpoint. 56 | */ 57 | const filteredTweets = tweets.filter( 58 | (tweet) => 59 | tweet.core.user_results.result.legacy.screen_name.toUpperCase() === 60 | username.toUpperCase() 61 | ); 62 | 63 | return { ok: true, data: filteredTweets }; 64 | }; 65 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@aashutoshrathi/word-wrap@^1.2.3": 6 | version "1.2.6" 7 | resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" 8 | integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== 9 | 10 | "@cspotcode/source-map-support@^0.8.0": 11 | version "0.8.1" 12 | resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" 13 | integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== 14 | dependencies: 15 | "@jridgewell/trace-mapping" "0.3.9" 16 | 17 | "@eslint-community/eslint-utils@^4.2.0": 18 | version "4.4.0" 19 | resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" 20 | integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== 21 | dependencies: 22 | eslint-visitor-keys "^3.3.0" 23 | 24 | "@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": 25 | version "4.6.2" 26 | resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.6.2.tgz#1816b5f6948029c5eaacb0703b850ee0cb37d8f8" 27 | integrity sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw== 28 | 29 | "@eslint/eslintrc@^2.1.4": 30 | version "2.1.4" 31 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" 32 | integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== 33 | dependencies: 34 | ajv "^6.12.4" 35 | debug "^4.3.2" 36 | espree "^9.6.0" 37 | globals "^13.19.0" 38 | ignore "^5.2.0" 39 | import-fresh "^3.2.1" 40 | js-yaml "^4.1.0" 41 | minimatch "^3.1.2" 42 | strip-json-comments "^3.1.1" 43 | 44 | "@eslint/js@8.57.0": 45 | version "8.57.0" 46 | resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" 47 | integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== 48 | 49 | "@humanwhocodes/config-array@^0.11.14": 50 | version "0.11.14" 51 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" 52 | integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== 53 | dependencies: 54 | "@humanwhocodes/object-schema" "^2.0.2" 55 | debug "^4.3.1" 56 | minimatch "^3.0.5" 57 | 58 | "@humanwhocodes/module-importer@^1.0.1": 59 | version "1.0.1" 60 | resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" 61 | integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== 62 | 63 | "@humanwhocodes/object-schema@^2.0.2": 64 | version "2.0.2" 65 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" 66 | integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== 67 | 68 | "@jridgewell/resolve-uri@^3.0.3": 69 | version "3.1.1" 70 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" 71 | integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== 72 | 73 | "@jridgewell/sourcemap-codec@^1.4.10": 74 | version "1.4.15" 75 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" 76 | integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== 77 | 78 | "@jridgewell/trace-mapping@0.3.9": 79 | version "0.3.9" 80 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" 81 | integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== 82 | dependencies: 83 | "@jridgewell/resolve-uri" "^3.0.3" 84 | "@jridgewell/sourcemap-codec" "^1.4.10" 85 | 86 | "@nodelib/fs.scandir@2.1.5": 87 | version "2.1.5" 88 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 89 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 90 | dependencies: 91 | "@nodelib/fs.stat" "2.0.5" 92 | run-parallel "^1.1.9" 93 | 94 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 95 | version "2.0.5" 96 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 97 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 98 | 99 | "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": 100 | version "1.2.8" 101 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 102 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 103 | dependencies: 104 | "@nodelib/fs.scandir" "2.1.5" 105 | fastq "^1.6.0" 106 | 107 | "@redis/bloom@1.2.0": 108 | version "1.2.0" 109 | resolved "https://registry.yarnpkg.com/@redis/bloom/-/bloom-1.2.0.tgz#d3fd6d3c0af3ef92f26767b56414a370c7b63b71" 110 | integrity sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg== 111 | 112 | "@redis/client@1.6.0": 113 | version "1.6.0" 114 | resolved "https://registry.yarnpkg.com/@redis/client/-/client-1.6.0.tgz#dcf4ae1319763db6fdddd6de7f0af68a352c30ea" 115 | integrity sha512-aR0uffYI700OEEH4gYnitAnv3vzVGXCFvYfdpu/CJKvk4pHfLPEy/JSZyrpQ+15WhXe1yJRXLtfQ84s4mEXnPg== 116 | dependencies: 117 | cluster-key-slot "1.1.2" 118 | generic-pool "3.9.0" 119 | yallist "4.0.0" 120 | 121 | "@redis/graph@1.1.1": 122 | version "1.1.1" 123 | resolved "https://registry.yarnpkg.com/@redis/graph/-/graph-1.1.1.tgz#8c10df2df7f7d02741866751764031a957a170ea" 124 | integrity sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw== 125 | 126 | "@redis/json@1.0.7": 127 | version "1.0.7" 128 | resolved "https://registry.yarnpkg.com/@redis/json/-/json-1.0.7.tgz#016257fcd933c4cbcb9c49cde8a0961375c6893b" 129 | integrity sha512-6UyXfjVaTBTJtKNG4/9Z8PSpKE6XgSyEb8iwaqDcy+uKrd/DGYHTWkUdnQDyzm727V7p21WUMhsqz5oy65kPcQ== 130 | 131 | "@redis/search@1.2.0": 132 | version "1.2.0" 133 | resolved "https://registry.yarnpkg.com/@redis/search/-/search-1.2.0.tgz#50976fd3f31168f585666f7922dde111c74567b8" 134 | integrity sha512-tYoDBbtqOVigEDMAcTGsRlMycIIjwMCgD8eR2t0NANeQmgK/lvxNAvYyb6bZDD4frHRhIHkJu2TBRvB0ERkOmw== 135 | 136 | "@redis/time-series@1.1.0": 137 | version "1.1.0" 138 | resolved "https://registry.yarnpkg.com/@redis/time-series/-/time-series-1.1.0.tgz#cba454c05ec201bd5547aaf55286d44682ac8eb5" 139 | integrity sha512-c1Q99M5ljsIuc4YdaCwfUEXsofakb9c8+Zse2qxTadu8TalLXuAESzLvFAvNVbkmSlvlzIQOLpBCmWI9wTOt+g== 140 | 141 | "@tsconfig/node10@^1.0.7": 142 | version "1.0.9" 143 | resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" 144 | integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== 145 | 146 | "@tsconfig/node12@^1.0.7": 147 | version "1.0.11" 148 | resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" 149 | integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== 150 | 151 | "@tsconfig/node14@^1.0.0": 152 | version "1.0.3" 153 | resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" 154 | integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== 155 | 156 | "@tsconfig/node16@^1.0.2": 157 | version "1.0.4" 158 | resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" 159 | integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== 160 | 161 | "@types/body-parser@*": 162 | version "1.19.2" 163 | resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" 164 | integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== 165 | dependencies: 166 | "@types/connect" "*" 167 | "@types/node" "*" 168 | 169 | "@types/connect@*": 170 | version "3.4.35" 171 | resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" 172 | integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== 173 | dependencies: 174 | "@types/node" "*" 175 | 176 | "@types/express-serve-static-core@^4.17.33": 177 | version "4.17.35" 178 | resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz#c95dd4424f0d32e525d23812aa8ab8e4d3906c4f" 179 | integrity sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg== 180 | dependencies: 181 | "@types/node" "*" 182 | "@types/qs" "*" 183 | "@types/range-parser" "*" 184 | "@types/send" "*" 185 | 186 | "@types/express@^4.17.21": 187 | version "4.17.21" 188 | resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" 189 | integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== 190 | dependencies: 191 | "@types/body-parser" "*" 192 | "@types/express-serve-static-core" "^4.17.33" 193 | "@types/qs" "*" 194 | "@types/serve-static" "*" 195 | 196 | "@types/http-errors@*": 197 | version "2.0.1" 198 | resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.1.tgz#20172f9578b225f6c7da63446f56d4ce108d5a65" 199 | integrity sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ== 200 | 201 | "@types/json-schema@^7.0.9": 202 | version "7.0.12" 203 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" 204 | integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== 205 | 206 | "@types/mime@*": 207 | version "3.0.1" 208 | resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" 209 | integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== 210 | 211 | "@types/mime@^1": 212 | version "1.3.2" 213 | resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" 214 | integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== 215 | 216 | "@types/node-fetch@^2.6.11": 217 | version "2.6.11" 218 | resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.11.tgz#9b39b78665dae0e82a08f02f4967d62c66f95d24" 219 | integrity sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g== 220 | dependencies: 221 | "@types/node" "*" 222 | form-data "^4.0.0" 223 | 224 | "@types/node@*": 225 | version "20.3.3" 226 | resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.3.tgz#329842940042d2b280897150e023e604d11657d6" 227 | integrity sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw== 228 | 229 | "@types/node@^18.19.48": 230 | version "18.19.48" 231 | resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.48.tgz#3a1696f4a7298d8831ed9ce47db62bf4c62c8880" 232 | integrity sha512-7WevbG4ekUcRQSZzOwxWgi5dZmTak7FaxXDoW7xVxPBmKx1rTzfmRLkeCgJzcbBnOV2dkhAPc8cCeT6agocpjg== 233 | dependencies: 234 | undici-types "~5.26.4" 235 | 236 | "@types/qs@*": 237 | version "6.9.7" 238 | resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" 239 | integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== 240 | 241 | "@types/range-parser@*": 242 | version "1.2.4" 243 | resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" 244 | integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== 245 | 246 | "@types/rss@^0.0.30": 247 | version "0.0.30" 248 | resolved "https://registry.yarnpkg.com/@types/rss/-/rss-0.0.30.tgz#0bee0c2e8bcac4374ce7a760c1f21a532f58c50e" 249 | integrity sha512-RnWs98qajbcAZqie6EWYraJ2N+1Q1Wy9KN7HcVPJ//sYJGVjLjvkChZdeQPwf88xAcNUCcLXt6Zz3kiid7s/yw== 250 | 251 | "@types/semver@^7.3.12": 252 | version "7.5.0" 253 | resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" 254 | integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== 255 | 256 | "@types/send@*": 257 | version "0.17.1" 258 | resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.1.tgz#ed4932b8a2a805f1fe362a70f4e62d0ac994e301" 259 | integrity sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q== 260 | dependencies: 261 | "@types/mime" "^1" 262 | "@types/node" "*" 263 | 264 | "@types/serve-static@*": 265 | version "1.15.2" 266 | resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.2.tgz#3e5419ecd1e40e7405d34093f10befb43f63381a" 267 | integrity sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw== 268 | dependencies: 269 | "@types/http-errors" "*" 270 | "@types/mime" "*" 271 | "@types/node" "*" 272 | 273 | "@typescript-eslint/eslint-plugin@^5.62.0": 274 | version "5.62.0" 275 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" 276 | integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== 277 | dependencies: 278 | "@eslint-community/regexpp" "^4.4.0" 279 | "@typescript-eslint/scope-manager" "5.62.0" 280 | "@typescript-eslint/type-utils" "5.62.0" 281 | "@typescript-eslint/utils" "5.62.0" 282 | debug "^4.3.4" 283 | graphemer "^1.4.0" 284 | ignore "^5.2.0" 285 | natural-compare-lite "^1.4.0" 286 | semver "^7.3.7" 287 | tsutils "^3.21.0" 288 | 289 | "@typescript-eslint/parser@^5.62.0": 290 | version "5.62.0" 291 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" 292 | integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== 293 | dependencies: 294 | "@typescript-eslint/scope-manager" "5.62.0" 295 | "@typescript-eslint/types" "5.62.0" 296 | "@typescript-eslint/typescript-estree" "5.62.0" 297 | debug "^4.3.4" 298 | 299 | "@typescript-eslint/scope-manager@5.62.0": 300 | version "5.62.0" 301 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" 302 | integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== 303 | dependencies: 304 | "@typescript-eslint/types" "5.62.0" 305 | "@typescript-eslint/visitor-keys" "5.62.0" 306 | 307 | "@typescript-eslint/type-utils@5.62.0": 308 | version "5.62.0" 309 | resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" 310 | integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== 311 | dependencies: 312 | "@typescript-eslint/typescript-estree" "5.62.0" 313 | "@typescript-eslint/utils" "5.62.0" 314 | debug "^4.3.4" 315 | tsutils "^3.21.0" 316 | 317 | "@typescript-eslint/types@5.62.0": 318 | version "5.62.0" 319 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" 320 | integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== 321 | 322 | "@typescript-eslint/typescript-estree@5.62.0": 323 | version "5.62.0" 324 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" 325 | integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== 326 | dependencies: 327 | "@typescript-eslint/types" "5.62.0" 328 | "@typescript-eslint/visitor-keys" "5.62.0" 329 | debug "^4.3.4" 330 | globby "^11.1.0" 331 | is-glob "^4.0.3" 332 | semver "^7.3.7" 333 | tsutils "^3.21.0" 334 | 335 | "@typescript-eslint/utils@5.62.0": 336 | version "5.62.0" 337 | resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" 338 | integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== 339 | dependencies: 340 | "@eslint-community/eslint-utils" "^4.2.0" 341 | "@types/json-schema" "^7.0.9" 342 | "@types/semver" "^7.3.12" 343 | "@typescript-eslint/scope-manager" "5.62.0" 344 | "@typescript-eslint/types" "5.62.0" 345 | "@typescript-eslint/typescript-estree" "5.62.0" 346 | eslint-scope "^5.1.1" 347 | semver "^7.3.7" 348 | 349 | "@typescript-eslint/visitor-keys@5.62.0": 350 | version "5.62.0" 351 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" 352 | integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== 353 | dependencies: 354 | "@typescript-eslint/types" "5.62.0" 355 | eslint-visitor-keys "^3.3.0" 356 | 357 | "@ungap/structured-clone@^1.2.0": 358 | version "1.2.0" 359 | resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" 360 | integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== 361 | 362 | abbrev@1: 363 | version "1.1.1" 364 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 365 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== 366 | 367 | accepts@~1.3.8: 368 | version "1.3.8" 369 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" 370 | integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== 371 | dependencies: 372 | mime-types "~2.1.34" 373 | negotiator "0.6.3" 374 | 375 | acorn-jsx@^5.3.2: 376 | version "5.3.2" 377 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" 378 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 379 | 380 | acorn-walk@^8.1.1: 381 | version "8.2.0" 382 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" 383 | integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== 384 | 385 | acorn@^8.4.1, acorn@^8.9.0: 386 | version "8.10.0" 387 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" 388 | integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== 389 | 390 | ajv@^6.12.4: 391 | version "6.12.6" 392 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 393 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 394 | dependencies: 395 | fast-deep-equal "^3.1.1" 396 | fast-json-stable-stringify "^2.0.0" 397 | json-schema-traverse "^0.4.1" 398 | uri-js "^4.2.2" 399 | 400 | ansi-regex@^5.0.1: 401 | version "5.0.1" 402 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 403 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 404 | 405 | ansi-styles@^4.1.0: 406 | version "4.3.0" 407 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 408 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 409 | dependencies: 410 | color-convert "^2.0.1" 411 | 412 | anymatch@~3.1.2: 413 | version "3.1.3" 414 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" 415 | integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== 416 | dependencies: 417 | normalize-path "^3.0.0" 418 | picomatch "^2.0.4" 419 | 420 | arg@^4.1.0: 421 | version "4.1.3" 422 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" 423 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== 424 | 425 | argparse@^2.0.1: 426 | version "2.0.1" 427 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 428 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 429 | 430 | array-flatten@1.1.1: 431 | version "1.1.1" 432 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 433 | integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== 434 | 435 | array-union@^2.1.0: 436 | version "2.1.0" 437 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 438 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 439 | 440 | asynckit@^0.4.0: 441 | version "0.4.0" 442 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 443 | integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== 444 | 445 | balanced-match@^1.0.0: 446 | version "1.0.2" 447 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 448 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 449 | 450 | binary-extensions@^2.0.0: 451 | version "2.2.0" 452 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 453 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 454 | 455 | body-parser@1.20.3: 456 | version "1.20.3" 457 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" 458 | integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== 459 | dependencies: 460 | bytes "3.1.2" 461 | content-type "~1.0.5" 462 | debug "2.6.9" 463 | depd "2.0.0" 464 | destroy "1.2.0" 465 | http-errors "2.0.0" 466 | iconv-lite "0.4.24" 467 | on-finished "2.4.1" 468 | qs "6.13.0" 469 | raw-body "2.5.2" 470 | type-is "~1.6.18" 471 | unpipe "1.0.0" 472 | 473 | brace-expansion@^1.1.7: 474 | version "1.1.11" 475 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 476 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 477 | dependencies: 478 | balanced-match "^1.0.0" 479 | concat-map "0.0.1" 480 | 481 | braces@^3.0.2, braces@~3.0.2: 482 | version "3.0.2" 483 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 484 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 485 | dependencies: 486 | fill-range "^7.0.1" 487 | 488 | bytes@3.1.2: 489 | version "3.1.2" 490 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" 491 | integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== 492 | 493 | call-bind@^1.0.7: 494 | version "1.0.7" 495 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" 496 | integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== 497 | dependencies: 498 | es-define-property "^1.0.0" 499 | es-errors "^1.3.0" 500 | function-bind "^1.1.2" 501 | get-intrinsic "^1.2.4" 502 | set-function-length "^1.2.1" 503 | 504 | callsites@^3.0.0: 505 | version "3.1.0" 506 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 507 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 508 | 509 | chalk@^4.0.0: 510 | version "4.1.2" 511 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 512 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 513 | dependencies: 514 | ansi-styles "^4.1.0" 515 | supports-color "^7.1.0" 516 | 517 | chokidar@^3.5.2: 518 | version "3.5.3" 519 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" 520 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 521 | dependencies: 522 | anymatch "~3.1.2" 523 | braces "~3.0.2" 524 | glob-parent "~5.1.2" 525 | is-binary-path "~2.1.0" 526 | is-glob "~4.0.1" 527 | normalize-path "~3.0.0" 528 | readdirp "~3.6.0" 529 | optionalDependencies: 530 | fsevents "~2.3.2" 531 | 532 | cluster-key-slot@1.1.2: 533 | version "1.1.2" 534 | resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" 535 | integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== 536 | 537 | color-convert@^2.0.1: 538 | version "2.0.1" 539 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 540 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 541 | dependencies: 542 | color-name "~1.1.4" 543 | 544 | color-name@~1.1.4: 545 | version "1.1.4" 546 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 547 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 548 | 549 | combined-stream@^1.0.8: 550 | version "1.0.8" 551 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 552 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 553 | dependencies: 554 | delayed-stream "~1.0.0" 555 | 556 | concat-map@0.0.1: 557 | version "0.0.1" 558 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 559 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 560 | 561 | content-disposition@0.5.4: 562 | version "0.5.4" 563 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" 564 | integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== 565 | dependencies: 566 | safe-buffer "5.2.1" 567 | 568 | content-type@~1.0.4, content-type@~1.0.5: 569 | version "1.0.5" 570 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" 571 | integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== 572 | 573 | cookie-signature@1.0.6: 574 | version "1.0.6" 575 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 576 | integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== 577 | 578 | cookie@0.6.0: 579 | version "0.6.0" 580 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" 581 | integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== 582 | 583 | create-require@^1.1.0: 584 | version "1.1.1" 585 | resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" 586 | integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== 587 | 588 | cross-spawn@^7.0.2: 589 | version "7.0.3" 590 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 591 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 592 | dependencies: 593 | path-key "^3.1.0" 594 | shebang-command "^2.0.0" 595 | which "^2.0.1" 596 | 597 | debug@2.6.9: 598 | version "2.6.9" 599 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 600 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 601 | dependencies: 602 | ms "2.0.0" 603 | 604 | debug@^3.2.7: 605 | version "3.2.7" 606 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" 607 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== 608 | dependencies: 609 | ms "^2.1.1" 610 | 611 | debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: 612 | version "4.3.4" 613 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 614 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 615 | dependencies: 616 | ms "2.1.2" 617 | 618 | deep-is@^0.1.3: 619 | version "0.1.4" 620 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" 621 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 622 | 623 | define-data-property@^1.1.4: 624 | version "1.1.4" 625 | resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" 626 | integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== 627 | dependencies: 628 | es-define-property "^1.0.0" 629 | es-errors "^1.3.0" 630 | gopd "^1.0.1" 631 | 632 | delayed-stream@~1.0.0: 633 | version "1.0.0" 634 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 635 | integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== 636 | 637 | depd@2.0.0: 638 | version "2.0.0" 639 | resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" 640 | integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== 641 | 642 | destroy@1.2.0: 643 | version "1.2.0" 644 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" 645 | integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== 646 | 647 | diff@^4.0.1: 648 | version "4.0.2" 649 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" 650 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== 651 | 652 | dir-glob@^3.0.1: 653 | version "3.0.1" 654 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 655 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 656 | dependencies: 657 | path-type "^4.0.0" 658 | 659 | doctrine@^3.0.0: 660 | version "3.0.0" 661 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 662 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 663 | dependencies: 664 | esutils "^2.0.2" 665 | 666 | ee-first@1.1.1: 667 | version "1.1.1" 668 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 669 | integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== 670 | 671 | encodeurl@~1.0.2: 672 | version "1.0.2" 673 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 674 | integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== 675 | 676 | encodeurl@~2.0.0: 677 | version "2.0.0" 678 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" 679 | integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== 680 | 681 | es-define-property@^1.0.0: 682 | version "1.0.0" 683 | resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" 684 | integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== 685 | dependencies: 686 | get-intrinsic "^1.2.4" 687 | 688 | es-errors@^1.3.0: 689 | version "1.3.0" 690 | resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" 691 | integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== 692 | 693 | escape-html@~1.0.3: 694 | version "1.0.3" 695 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 696 | integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== 697 | 698 | escape-string-regexp@^4.0.0: 699 | version "4.0.0" 700 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 701 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 702 | 703 | eslint-config-prettier@^8.10.0: 704 | version "8.10.0" 705 | resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz#3a06a662130807e2502fc3ff8b4143d8a0658e11" 706 | integrity sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg== 707 | 708 | eslint-plugin-prettier@^4.2.1: 709 | version "4.2.1" 710 | resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" 711 | integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== 712 | dependencies: 713 | prettier-linter-helpers "^1.0.0" 714 | 715 | eslint-scope@^5.1.1: 716 | version "5.1.1" 717 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 718 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 719 | dependencies: 720 | esrecurse "^4.3.0" 721 | estraverse "^4.1.1" 722 | 723 | eslint-scope@^7.2.2: 724 | version "7.2.2" 725 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" 726 | integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== 727 | dependencies: 728 | esrecurse "^4.3.0" 729 | estraverse "^5.2.0" 730 | 731 | eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: 732 | version "3.4.3" 733 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" 734 | integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== 735 | 736 | eslint@^8.57.0: 737 | version "8.57.0" 738 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" 739 | integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== 740 | dependencies: 741 | "@eslint-community/eslint-utils" "^4.2.0" 742 | "@eslint-community/regexpp" "^4.6.1" 743 | "@eslint/eslintrc" "^2.1.4" 744 | "@eslint/js" "8.57.0" 745 | "@humanwhocodes/config-array" "^0.11.14" 746 | "@humanwhocodes/module-importer" "^1.0.1" 747 | "@nodelib/fs.walk" "^1.2.8" 748 | "@ungap/structured-clone" "^1.2.0" 749 | ajv "^6.12.4" 750 | chalk "^4.0.0" 751 | cross-spawn "^7.0.2" 752 | debug "^4.3.2" 753 | doctrine "^3.0.0" 754 | escape-string-regexp "^4.0.0" 755 | eslint-scope "^7.2.2" 756 | eslint-visitor-keys "^3.4.3" 757 | espree "^9.6.1" 758 | esquery "^1.4.2" 759 | esutils "^2.0.2" 760 | fast-deep-equal "^3.1.3" 761 | file-entry-cache "^6.0.1" 762 | find-up "^5.0.0" 763 | glob-parent "^6.0.2" 764 | globals "^13.19.0" 765 | graphemer "^1.4.0" 766 | ignore "^5.2.0" 767 | imurmurhash "^0.1.4" 768 | is-glob "^4.0.0" 769 | is-path-inside "^3.0.3" 770 | js-yaml "^4.1.0" 771 | json-stable-stringify-without-jsonify "^1.0.1" 772 | levn "^0.4.1" 773 | lodash.merge "^4.6.2" 774 | minimatch "^3.1.2" 775 | natural-compare "^1.4.0" 776 | optionator "^0.9.3" 777 | strip-ansi "^6.0.1" 778 | text-table "^0.2.0" 779 | 780 | espree@^9.6.0, espree@^9.6.1: 781 | version "9.6.1" 782 | resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" 783 | integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== 784 | dependencies: 785 | acorn "^8.9.0" 786 | acorn-jsx "^5.3.2" 787 | eslint-visitor-keys "^3.4.1" 788 | 789 | esquery@^1.4.2: 790 | version "1.5.0" 791 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" 792 | integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== 793 | dependencies: 794 | estraverse "^5.1.0" 795 | 796 | esrecurse@^4.3.0: 797 | version "4.3.0" 798 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 799 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 800 | dependencies: 801 | estraverse "^5.2.0" 802 | 803 | estraverse@^4.1.1: 804 | version "4.3.0" 805 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 806 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 807 | 808 | estraverse@^5.1.0, estraverse@^5.2.0: 809 | version "5.3.0" 810 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 811 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 812 | 813 | esutils@^2.0.2: 814 | version "2.0.3" 815 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 816 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 817 | 818 | etag@~1.8.1: 819 | version "1.8.1" 820 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 821 | integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== 822 | 823 | express@^4.20.0: 824 | version "4.20.0" 825 | resolved "https://registry.yarnpkg.com/express/-/express-4.20.0.tgz#f1d08e591fcec770c07be4767af8eb9bcfd67c48" 826 | integrity sha512-pLdae7I6QqShF5PnNTCVn4hI91Dx0Grkn2+IAsMTgMIKuQVte2dN9PeGSSAME2FR8anOhVA62QDIUaWVfEXVLw== 827 | dependencies: 828 | accepts "~1.3.8" 829 | array-flatten "1.1.1" 830 | body-parser "1.20.3" 831 | content-disposition "0.5.4" 832 | content-type "~1.0.4" 833 | cookie "0.6.0" 834 | cookie-signature "1.0.6" 835 | debug "2.6.9" 836 | depd "2.0.0" 837 | encodeurl "~2.0.0" 838 | escape-html "~1.0.3" 839 | etag "~1.8.1" 840 | finalhandler "1.2.0" 841 | fresh "0.5.2" 842 | http-errors "2.0.0" 843 | merge-descriptors "1.0.3" 844 | methods "~1.1.2" 845 | on-finished "2.4.1" 846 | parseurl "~1.3.3" 847 | path-to-regexp "0.1.10" 848 | proxy-addr "~2.0.7" 849 | qs "6.11.0" 850 | range-parser "~1.2.1" 851 | safe-buffer "5.2.1" 852 | send "0.19.0" 853 | serve-static "1.16.0" 854 | setprototypeof "1.2.0" 855 | statuses "2.0.1" 856 | type-is "~1.6.18" 857 | utils-merge "1.0.1" 858 | vary "~1.1.2" 859 | 860 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 861 | version "3.1.3" 862 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 863 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 864 | 865 | fast-diff@^1.1.2: 866 | version "1.3.0" 867 | resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" 868 | integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== 869 | 870 | fast-glob@^3.2.9: 871 | version "3.3.0" 872 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.0.tgz#7c40cb491e1e2ed5664749e87bfb516dbe8727c0" 873 | integrity sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA== 874 | dependencies: 875 | "@nodelib/fs.stat" "^2.0.2" 876 | "@nodelib/fs.walk" "^1.2.3" 877 | glob-parent "^5.1.2" 878 | merge2 "^1.3.0" 879 | micromatch "^4.0.4" 880 | 881 | fast-json-stable-stringify@^2.0.0: 882 | version "2.1.0" 883 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 884 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 885 | 886 | fast-levenshtein@^2.0.6: 887 | version "2.0.6" 888 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 889 | integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== 890 | 891 | fastq@^1.6.0: 892 | version "1.15.0" 893 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" 894 | integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== 895 | dependencies: 896 | reusify "^1.0.4" 897 | 898 | file-entry-cache@^6.0.1: 899 | version "6.0.1" 900 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" 901 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 902 | dependencies: 903 | flat-cache "^3.0.4" 904 | 905 | fill-range@^7.0.1: 906 | version "7.0.1" 907 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 908 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 909 | dependencies: 910 | to-regex-range "^5.0.1" 911 | 912 | finalhandler@1.2.0: 913 | version "1.2.0" 914 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" 915 | integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== 916 | dependencies: 917 | debug "2.6.9" 918 | encodeurl "~1.0.2" 919 | escape-html "~1.0.3" 920 | on-finished "2.4.1" 921 | parseurl "~1.3.3" 922 | statuses "2.0.1" 923 | unpipe "~1.0.0" 924 | 925 | find-up@^5.0.0: 926 | version "5.0.0" 927 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 928 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 929 | dependencies: 930 | locate-path "^6.0.0" 931 | path-exists "^4.0.0" 932 | 933 | flat-cache@^3.0.4: 934 | version "3.0.4" 935 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" 936 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 937 | dependencies: 938 | flatted "^3.1.0" 939 | rimraf "^3.0.2" 940 | 941 | flatted@^3.1.0: 942 | version "3.2.7" 943 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" 944 | integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== 945 | 946 | form-data@^4.0.0: 947 | version "4.0.0" 948 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" 949 | integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== 950 | dependencies: 951 | asynckit "^0.4.0" 952 | combined-stream "^1.0.8" 953 | mime-types "^2.1.12" 954 | 955 | forwarded@0.2.0: 956 | version "0.2.0" 957 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" 958 | integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== 959 | 960 | fresh@0.5.2: 961 | version "0.5.2" 962 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 963 | integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== 964 | 965 | fs.realpath@^1.0.0: 966 | version "1.0.0" 967 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 968 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 969 | 970 | fsevents@~2.3.2: 971 | version "2.3.2" 972 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 973 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 974 | 975 | function-bind@^1.1.2: 976 | version "1.1.2" 977 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" 978 | integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== 979 | 980 | generic-pool@3.9.0: 981 | version "3.9.0" 982 | resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-3.9.0.tgz#36f4a678e963f4fdb8707eab050823abc4e8f5e4" 983 | integrity sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g== 984 | 985 | get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: 986 | version "1.2.4" 987 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" 988 | integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== 989 | dependencies: 990 | es-errors "^1.3.0" 991 | function-bind "^1.1.2" 992 | has-proto "^1.0.1" 993 | has-symbols "^1.0.3" 994 | hasown "^2.0.0" 995 | 996 | glob-parent@^5.1.2, glob-parent@~5.1.2: 997 | version "5.1.2" 998 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 999 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 1000 | dependencies: 1001 | is-glob "^4.0.1" 1002 | 1003 | glob-parent@^6.0.2: 1004 | version "6.0.2" 1005 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" 1006 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 1007 | dependencies: 1008 | is-glob "^4.0.3" 1009 | 1010 | glob@^7.1.3: 1011 | version "7.2.3" 1012 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" 1013 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 1014 | dependencies: 1015 | fs.realpath "^1.0.0" 1016 | inflight "^1.0.4" 1017 | inherits "2" 1018 | minimatch "^3.1.1" 1019 | once "^1.3.0" 1020 | path-is-absolute "^1.0.0" 1021 | 1022 | globals@^13.19.0: 1023 | version "13.20.0" 1024 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" 1025 | integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== 1026 | dependencies: 1027 | type-fest "^0.20.2" 1028 | 1029 | globby@^11.1.0: 1030 | version "11.1.0" 1031 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" 1032 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== 1033 | dependencies: 1034 | array-union "^2.1.0" 1035 | dir-glob "^3.0.1" 1036 | fast-glob "^3.2.9" 1037 | ignore "^5.2.0" 1038 | merge2 "^1.4.1" 1039 | slash "^3.0.0" 1040 | 1041 | gopd@^1.0.1: 1042 | version "1.0.1" 1043 | resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" 1044 | integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== 1045 | dependencies: 1046 | get-intrinsic "^1.1.3" 1047 | 1048 | graphemer@^1.4.0: 1049 | version "1.4.0" 1050 | resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" 1051 | integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== 1052 | 1053 | has-flag@^3.0.0: 1054 | version "3.0.0" 1055 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1056 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== 1057 | 1058 | has-flag@^4.0.0: 1059 | version "4.0.0" 1060 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1061 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1062 | 1063 | has-property-descriptors@^1.0.2: 1064 | version "1.0.2" 1065 | resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" 1066 | integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== 1067 | dependencies: 1068 | es-define-property "^1.0.0" 1069 | 1070 | has-proto@^1.0.1: 1071 | version "1.0.1" 1072 | resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" 1073 | integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== 1074 | 1075 | has-symbols@^1.0.3: 1076 | version "1.0.3" 1077 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" 1078 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== 1079 | 1080 | hasown@^2.0.0: 1081 | version "2.0.2" 1082 | resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" 1083 | integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== 1084 | dependencies: 1085 | function-bind "^1.1.2" 1086 | 1087 | http-errors@2.0.0: 1088 | version "2.0.0" 1089 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" 1090 | integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== 1091 | dependencies: 1092 | depd "2.0.0" 1093 | inherits "2.0.4" 1094 | setprototypeof "1.2.0" 1095 | statuses "2.0.1" 1096 | toidentifier "1.0.1" 1097 | 1098 | iconv-lite@0.4.24: 1099 | version "0.4.24" 1100 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 1101 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 1102 | dependencies: 1103 | safer-buffer ">= 2.1.2 < 3" 1104 | 1105 | ignore-by-default@^1.0.1: 1106 | version "1.0.1" 1107 | resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" 1108 | integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== 1109 | 1110 | ignore@^5.2.0: 1111 | version "5.2.4" 1112 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" 1113 | integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== 1114 | 1115 | import-fresh@^3.2.1: 1116 | version "3.3.0" 1117 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 1118 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 1119 | dependencies: 1120 | parent-module "^1.0.0" 1121 | resolve-from "^4.0.0" 1122 | 1123 | imurmurhash@^0.1.4: 1124 | version "0.1.4" 1125 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1126 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== 1127 | 1128 | inflight@^1.0.4: 1129 | version "1.0.6" 1130 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1131 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 1132 | dependencies: 1133 | once "^1.3.0" 1134 | wrappy "1" 1135 | 1136 | inherits@2, inherits@2.0.4: 1137 | version "2.0.4" 1138 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1139 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1140 | 1141 | ipaddr.js@1.9.1: 1142 | version "1.9.1" 1143 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" 1144 | integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== 1145 | 1146 | is-binary-path@~2.1.0: 1147 | version "2.1.0" 1148 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 1149 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 1150 | dependencies: 1151 | binary-extensions "^2.0.0" 1152 | 1153 | is-extglob@^2.1.1: 1154 | version "2.1.1" 1155 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1156 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 1157 | 1158 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: 1159 | version "4.0.3" 1160 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 1161 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 1162 | dependencies: 1163 | is-extglob "^2.1.1" 1164 | 1165 | is-number@^7.0.0: 1166 | version "7.0.0" 1167 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1168 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1169 | 1170 | is-path-inside@^3.0.3: 1171 | version "3.0.3" 1172 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" 1173 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 1174 | 1175 | isexe@^2.0.0: 1176 | version "2.0.0" 1177 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1178 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 1179 | 1180 | js-yaml@^4.1.0: 1181 | version "4.1.0" 1182 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 1183 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 1184 | dependencies: 1185 | argparse "^2.0.1" 1186 | 1187 | json-schema-traverse@^0.4.1: 1188 | version "0.4.1" 1189 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1190 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1191 | 1192 | json-stable-stringify-without-jsonify@^1.0.1: 1193 | version "1.0.1" 1194 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 1195 | integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== 1196 | 1197 | levn@^0.4.1: 1198 | version "0.4.1" 1199 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 1200 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 1201 | dependencies: 1202 | prelude-ls "^1.2.1" 1203 | type-check "~0.4.0" 1204 | 1205 | locate-path@^6.0.0: 1206 | version "6.0.0" 1207 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 1208 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 1209 | dependencies: 1210 | p-locate "^5.0.0" 1211 | 1212 | lodash.merge@^4.6.2: 1213 | version "4.6.2" 1214 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 1215 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 1216 | 1217 | lru-cache@^6.0.0: 1218 | version "6.0.0" 1219 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 1220 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 1221 | dependencies: 1222 | yallist "^4.0.0" 1223 | 1224 | make-error@^1.1.1: 1225 | version "1.3.6" 1226 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" 1227 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 1228 | 1229 | media-typer@0.3.0: 1230 | version "0.3.0" 1231 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 1232 | integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== 1233 | 1234 | merge-descriptors@1.0.3: 1235 | version "1.0.3" 1236 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5" 1237 | integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== 1238 | 1239 | merge2@^1.3.0, merge2@^1.4.1: 1240 | version "1.4.1" 1241 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 1242 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 1243 | 1244 | methods@~1.1.2: 1245 | version "1.1.2" 1246 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 1247 | integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== 1248 | 1249 | micromatch@^4.0.4: 1250 | version "4.0.5" 1251 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" 1252 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 1253 | dependencies: 1254 | braces "^3.0.2" 1255 | picomatch "^2.3.1" 1256 | 1257 | mime-db@1.52.0: 1258 | version "1.52.0" 1259 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" 1260 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 1261 | 1262 | mime-db@~1.25.0: 1263 | version "1.25.0" 1264 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.25.0.tgz#c18dbd7c73a5dbf6f44a024dc0d165a1e7b1c392" 1265 | integrity sha512-5k547tI4Cy+Lddr/hdjNbBEWBwSl8EBc5aSdKvedav8DReADgWJzcYiktaRIw3GtGC1jjwldXtTzvqJZmtvC7w== 1266 | 1267 | mime-types@2.1.13: 1268 | version "2.1.13" 1269 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.13.tgz#e07aaa9c6c6b9a7ca3012c69003ad25a39e92a88" 1270 | integrity sha512-ryBDp1Z/6X90UvjUK3RksH0IBPM137T7cmg4OgD5wQBojlAiUwuok0QeELkim/72EtcYuNlmbkrcGuxj3Kl0YQ== 1271 | dependencies: 1272 | mime-db "~1.25.0" 1273 | 1274 | mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: 1275 | version "2.1.35" 1276 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" 1277 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 1278 | dependencies: 1279 | mime-db "1.52.0" 1280 | 1281 | mime@1.6.0: 1282 | version "1.6.0" 1283 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" 1284 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== 1285 | 1286 | minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: 1287 | version "3.1.2" 1288 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 1289 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 1290 | dependencies: 1291 | brace-expansion "^1.1.7" 1292 | 1293 | ms@2.0.0: 1294 | version "2.0.0" 1295 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1296 | integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== 1297 | 1298 | ms@2.1.2: 1299 | version "2.1.2" 1300 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1301 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1302 | 1303 | ms@2.1.3, ms@^2.1.1: 1304 | version "2.1.3" 1305 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 1306 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 1307 | 1308 | natural-compare-lite@^1.4.0: 1309 | version "1.4.0" 1310 | resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" 1311 | integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== 1312 | 1313 | natural-compare@^1.4.0: 1314 | version "1.4.0" 1315 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1316 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== 1317 | 1318 | negotiator@0.6.3: 1319 | version "0.6.3" 1320 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" 1321 | integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== 1322 | 1323 | node-fetch@^2.7.0: 1324 | version "2.7.0" 1325 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" 1326 | integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== 1327 | dependencies: 1328 | whatwg-url "^5.0.0" 1329 | 1330 | nodemon@^2.0.20: 1331 | version "2.0.22" 1332 | resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.22.tgz#182c45c3a78da486f673d6c1702e00728daf5258" 1333 | integrity sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ== 1334 | dependencies: 1335 | chokidar "^3.5.2" 1336 | debug "^3.2.7" 1337 | ignore-by-default "^1.0.1" 1338 | minimatch "^3.1.2" 1339 | pstree.remy "^1.1.8" 1340 | semver "^5.7.1" 1341 | simple-update-notifier "^1.0.7" 1342 | supports-color "^5.5.0" 1343 | touch "^3.1.0" 1344 | undefsafe "^2.0.5" 1345 | 1346 | nopt@~1.0.10: 1347 | version "1.0.10" 1348 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" 1349 | integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== 1350 | dependencies: 1351 | abbrev "1" 1352 | 1353 | normalize-path@^3.0.0, normalize-path@~3.0.0: 1354 | version "3.0.0" 1355 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 1356 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1357 | 1358 | object-inspect@^1.13.1: 1359 | version "1.13.2" 1360 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" 1361 | integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== 1362 | 1363 | on-finished@2.4.1: 1364 | version "2.4.1" 1365 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" 1366 | integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== 1367 | dependencies: 1368 | ee-first "1.1.1" 1369 | 1370 | once@^1.3.0: 1371 | version "1.4.0" 1372 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1373 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 1374 | dependencies: 1375 | wrappy "1" 1376 | 1377 | optionator@^0.9.3: 1378 | version "0.9.3" 1379 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" 1380 | integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== 1381 | dependencies: 1382 | "@aashutoshrathi/word-wrap" "^1.2.3" 1383 | deep-is "^0.1.3" 1384 | fast-levenshtein "^2.0.6" 1385 | levn "^0.4.1" 1386 | prelude-ls "^1.2.1" 1387 | type-check "^0.4.0" 1388 | 1389 | p-limit@^3.0.2: 1390 | version "3.1.0" 1391 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 1392 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 1393 | dependencies: 1394 | yocto-queue "^0.1.0" 1395 | 1396 | p-locate@^5.0.0: 1397 | version "5.0.0" 1398 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 1399 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 1400 | dependencies: 1401 | p-limit "^3.0.2" 1402 | 1403 | parent-module@^1.0.0: 1404 | version "1.0.1" 1405 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1406 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1407 | dependencies: 1408 | callsites "^3.0.0" 1409 | 1410 | parseurl@~1.3.3: 1411 | version "1.3.3" 1412 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" 1413 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== 1414 | 1415 | path-exists@^4.0.0: 1416 | version "4.0.0" 1417 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 1418 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1419 | 1420 | path-is-absolute@^1.0.0: 1421 | version "1.0.1" 1422 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1423 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 1424 | 1425 | path-key@^3.1.0: 1426 | version "3.1.1" 1427 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 1428 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1429 | 1430 | path-to-regexp@0.1.10: 1431 | version "0.1.10" 1432 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.10.tgz#67e9108c5c0551b9e5326064387de4763c4d5f8b" 1433 | integrity sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w== 1434 | 1435 | path-type@^4.0.0: 1436 | version "4.0.0" 1437 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 1438 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 1439 | 1440 | picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: 1441 | version "2.3.1" 1442 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 1443 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 1444 | 1445 | prelude-ls@^1.2.1: 1446 | version "1.2.1" 1447 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 1448 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 1449 | 1450 | prettier-linter-helpers@^1.0.0: 1451 | version "1.0.0" 1452 | resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" 1453 | integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== 1454 | dependencies: 1455 | fast-diff "^1.1.2" 1456 | 1457 | prettier@^2.8.8: 1458 | version "2.8.8" 1459 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" 1460 | integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== 1461 | 1462 | proxy-addr@~2.0.7: 1463 | version "2.0.7" 1464 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" 1465 | integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== 1466 | dependencies: 1467 | forwarded "0.2.0" 1468 | ipaddr.js "1.9.1" 1469 | 1470 | pstree.remy@^1.1.8: 1471 | version "1.1.8" 1472 | resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" 1473 | integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== 1474 | 1475 | punycode@^2.1.0: 1476 | version "2.3.0" 1477 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" 1478 | integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== 1479 | 1480 | qs@6.11.0: 1481 | version "6.11.0" 1482 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" 1483 | integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== 1484 | dependencies: 1485 | side-channel "^1.0.4" 1486 | 1487 | qs@6.13.0: 1488 | version "6.13.0" 1489 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" 1490 | integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== 1491 | dependencies: 1492 | side-channel "^1.0.6" 1493 | 1494 | queue-microtask@^1.2.2: 1495 | version "1.2.3" 1496 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 1497 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 1498 | 1499 | range-parser@~1.2.1: 1500 | version "1.2.1" 1501 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" 1502 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== 1503 | 1504 | raw-body@2.5.2: 1505 | version "2.5.2" 1506 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" 1507 | integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== 1508 | dependencies: 1509 | bytes "3.1.2" 1510 | http-errors "2.0.0" 1511 | iconv-lite "0.4.24" 1512 | unpipe "1.0.0" 1513 | 1514 | readdirp@~3.6.0: 1515 | version "3.6.0" 1516 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 1517 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 1518 | dependencies: 1519 | picomatch "^2.2.1" 1520 | 1521 | redis@^4.7.0: 1522 | version "4.7.0" 1523 | resolved "https://registry.yarnpkg.com/redis/-/redis-4.7.0.tgz#b401787514d25dd0cfc22406d767937ba3be55d6" 1524 | integrity sha512-zvmkHEAdGMn+hMRXuMBtu4Vo5P6rHQjLoHftu+lBqq8ZTA3RCVC/WzD790bkKKiNFp7d5/9PcSD19fJyyRvOdQ== 1525 | dependencies: 1526 | "@redis/bloom" "1.2.0" 1527 | "@redis/client" "1.6.0" 1528 | "@redis/graph" "1.1.1" 1529 | "@redis/json" "1.0.7" 1530 | "@redis/search" "1.2.0" 1531 | "@redis/time-series" "1.1.0" 1532 | 1533 | resolve-from@^4.0.0: 1534 | version "4.0.0" 1535 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1536 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1537 | 1538 | reusify@^1.0.4: 1539 | version "1.0.4" 1540 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 1541 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 1542 | 1543 | rimraf@^3.0.2: 1544 | version "3.0.2" 1545 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 1546 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1547 | dependencies: 1548 | glob "^7.1.3" 1549 | 1550 | rss@^1.2.2: 1551 | version "1.2.2" 1552 | resolved "https://registry.yarnpkg.com/rss/-/rss-1.2.2.tgz#50a1698876138133a74f9a05d2bdc8db8d27a921" 1553 | integrity sha512-xUhRTgslHeCBeHAqaWSbOYTydN2f0tAzNXvzh3stjz7QDhQMzdgHf3pfgNIngeytQflrFPfy6axHilTETr6gDg== 1554 | dependencies: 1555 | mime-types "2.1.13" 1556 | xml "1.0.1" 1557 | 1558 | run-parallel@^1.1.9: 1559 | version "1.2.0" 1560 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 1561 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 1562 | dependencies: 1563 | queue-microtask "^1.2.2" 1564 | 1565 | safe-buffer@5.2.1: 1566 | version "5.2.1" 1567 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 1568 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1569 | 1570 | "safer-buffer@>= 2.1.2 < 3": 1571 | version "2.1.2" 1572 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1573 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 1574 | 1575 | semver@^5.7.1: 1576 | version "5.7.2" 1577 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" 1578 | integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== 1579 | 1580 | semver@^7.3.7: 1581 | version "7.5.4" 1582 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" 1583 | integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== 1584 | dependencies: 1585 | lru-cache "^6.0.0" 1586 | 1587 | semver@~7.0.0: 1588 | version "7.0.0" 1589 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" 1590 | integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== 1591 | 1592 | send@0.18.0: 1593 | version "0.18.0" 1594 | resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" 1595 | integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== 1596 | dependencies: 1597 | debug "2.6.9" 1598 | depd "2.0.0" 1599 | destroy "1.2.0" 1600 | encodeurl "~1.0.2" 1601 | escape-html "~1.0.3" 1602 | etag "~1.8.1" 1603 | fresh "0.5.2" 1604 | http-errors "2.0.0" 1605 | mime "1.6.0" 1606 | ms "2.1.3" 1607 | on-finished "2.4.1" 1608 | range-parser "~1.2.1" 1609 | statuses "2.0.1" 1610 | 1611 | send@0.19.0: 1612 | version "0.19.0" 1613 | resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" 1614 | integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== 1615 | dependencies: 1616 | debug "2.6.9" 1617 | depd "2.0.0" 1618 | destroy "1.2.0" 1619 | encodeurl "~1.0.2" 1620 | escape-html "~1.0.3" 1621 | etag "~1.8.1" 1622 | fresh "0.5.2" 1623 | http-errors "2.0.0" 1624 | mime "1.6.0" 1625 | ms "2.1.3" 1626 | on-finished "2.4.1" 1627 | range-parser "~1.2.1" 1628 | statuses "2.0.1" 1629 | 1630 | serve-static@1.16.0: 1631 | version "1.16.0" 1632 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.0.tgz#2bf4ed49f8af311b519c46f272bf6ac3baf38a92" 1633 | integrity sha512-pDLK8zwl2eKaYrs8mrPZBJua4hMplRWJ1tIFksVC3FtBEBnl8dxgeHtsaMS8DhS9i4fLObaon6ABoc4/hQGdPA== 1634 | dependencies: 1635 | encodeurl "~1.0.2" 1636 | escape-html "~1.0.3" 1637 | parseurl "~1.3.3" 1638 | send "0.18.0" 1639 | 1640 | set-function-length@^1.2.1: 1641 | version "1.2.2" 1642 | resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" 1643 | integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== 1644 | dependencies: 1645 | define-data-property "^1.1.4" 1646 | es-errors "^1.3.0" 1647 | function-bind "^1.1.2" 1648 | get-intrinsic "^1.2.4" 1649 | gopd "^1.0.1" 1650 | has-property-descriptors "^1.0.2" 1651 | 1652 | setprototypeof@1.2.0: 1653 | version "1.2.0" 1654 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" 1655 | integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== 1656 | 1657 | shebang-command@^2.0.0: 1658 | version "2.0.0" 1659 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 1660 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1661 | dependencies: 1662 | shebang-regex "^3.0.0" 1663 | 1664 | shebang-regex@^3.0.0: 1665 | version "3.0.0" 1666 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 1667 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1668 | 1669 | side-channel@^1.0.4, side-channel@^1.0.6: 1670 | version "1.0.6" 1671 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" 1672 | integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== 1673 | dependencies: 1674 | call-bind "^1.0.7" 1675 | es-errors "^1.3.0" 1676 | get-intrinsic "^1.2.4" 1677 | object-inspect "^1.13.1" 1678 | 1679 | simple-update-notifier@^1.0.7: 1680 | version "1.1.0" 1681 | resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz#67694c121de354af592b347cdba798463ed49c82" 1682 | integrity sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg== 1683 | dependencies: 1684 | semver "~7.0.0" 1685 | 1686 | slash@^3.0.0: 1687 | version "3.0.0" 1688 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 1689 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 1690 | 1691 | statuses@2.0.1: 1692 | version "2.0.1" 1693 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" 1694 | integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== 1695 | 1696 | strip-ansi@^6.0.1: 1697 | version "6.0.1" 1698 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1699 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1700 | dependencies: 1701 | ansi-regex "^5.0.1" 1702 | 1703 | strip-json-comments@^3.1.1: 1704 | version "3.1.1" 1705 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 1706 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1707 | 1708 | supports-color@^5.5.0: 1709 | version "5.5.0" 1710 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1711 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1712 | dependencies: 1713 | has-flag "^3.0.0" 1714 | 1715 | supports-color@^7.1.0: 1716 | version "7.2.0" 1717 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1718 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1719 | dependencies: 1720 | has-flag "^4.0.0" 1721 | 1722 | text-table@^0.2.0: 1723 | version "0.2.0" 1724 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 1725 | integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== 1726 | 1727 | to-regex-range@^5.0.1: 1728 | version "5.0.1" 1729 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1730 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1731 | dependencies: 1732 | is-number "^7.0.0" 1733 | 1734 | toidentifier@1.0.1: 1735 | version "1.0.1" 1736 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" 1737 | integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== 1738 | 1739 | touch@^3.1.0: 1740 | version "3.1.0" 1741 | resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" 1742 | integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== 1743 | dependencies: 1744 | nopt "~1.0.10" 1745 | 1746 | tr46@~0.0.3: 1747 | version "0.0.3" 1748 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" 1749 | integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== 1750 | 1751 | ts-node@^10.9.2: 1752 | version "10.9.2" 1753 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" 1754 | integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== 1755 | dependencies: 1756 | "@cspotcode/source-map-support" "^0.8.0" 1757 | "@tsconfig/node10" "^1.0.7" 1758 | "@tsconfig/node12" "^1.0.7" 1759 | "@tsconfig/node14" "^1.0.0" 1760 | "@tsconfig/node16" "^1.0.2" 1761 | acorn "^8.4.1" 1762 | acorn-walk "^8.1.1" 1763 | arg "^4.1.0" 1764 | create-require "^1.1.0" 1765 | diff "^4.0.1" 1766 | make-error "^1.1.1" 1767 | v8-compile-cache-lib "^3.0.1" 1768 | yn "3.1.1" 1769 | 1770 | tslib@^1.8.1: 1771 | version "1.14.1" 1772 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 1773 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 1774 | 1775 | tsutils@^3.21.0: 1776 | version "3.21.0" 1777 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" 1778 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== 1779 | dependencies: 1780 | tslib "^1.8.1" 1781 | 1782 | type-check@^0.4.0, type-check@~0.4.0: 1783 | version "0.4.0" 1784 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 1785 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 1786 | dependencies: 1787 | prelude-ls "^1.2.1" 1788 | 1789 | type-fest@^0.20.2: 1790 | version "0.20.2" 1791 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 1792 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 1793 | 1794 | type-is@~1.6.18: 1795 | version "1.6.18" 1796 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" 1797 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== 1798 | dependencies: 1799 | media-typer "0.3.0" 1800 | mime-types "~2.1.24" 1801 | 1802 | typescript@^4.9.3: 1803 | version "4.9.5" 1804 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" 1805 | integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== 1806 | 1807 | undefsafe@^2.0.5: 1808 | version "2.0.5" 1809 | resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" 1810 | integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== 1811 | 1812 | undici-types@~5.26.4: 1813 | version "5.26.5" 1814 | resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" 1815 | integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== 1816 | 1817 | unpipe@1.0.0, unpipe@~1.0.0: 1818 | version "1.0.0" 1819 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 1820 | integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== 1821 | 1822 | uri-js@^4.2.2: 1823 | version "4.4.1" 1824 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 1825 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 1826 | dependencies: 1827 | punycode "^2.1.0" 1828 | 1829 | utils-merge@1.0.1: 1830 | version "1.0.1" 1831 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 1832 | integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== 1833 | 1834 | v8-compile-cache-lib@^3.0.1: 1835 | version "3.0.1" 1836 | resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" 1837 | integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== 1838 | 1839 | vary@~1.1.2: 1840 | version "1.1.2" 1841 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 1842 | integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== 1843 | 1844 | webidl-conversions@^3.0.0: 1845 | version "3.0.1" 1846 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" 1847 | integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== 1848 | 1849 | whatwg-url@^5.0.0: 1850 | version "5.0.0" 1851 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" 1852 | integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== 1853 | dependencies: 1854 | tr46 "~0.0.3" 1855 | webidl-conversions "^3.0.0" 1856 | 1857 | which@^2.0.1: 1858 | version "2.0.2" 1859 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 1860 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1861 | dependencies: 1862 | isexe "^2.0.0" 1863 | 1864 | wrappy@1: 1865 | version "1.0.2" 1866 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1867 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 1868 | 1869 | xml@1.0.1: 1870 | version "1.0.1" 1871 | resolved "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5" 1872 | integrity sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw== 1873 | 1874 | yallist@4.0.0, yallist@^4.0.0: 1875 | version "4.0.0" 1876 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 1877 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 1878 | 1879 | yn@3.1.1: 1880 | version "3.1.1" 1881 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" 1882 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== 1883 | 1884 | yocto-queue@^0.1.0: 1885 | version "0.1.0" 1886 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 1887 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 1888 | --------------------------------------------------------------------------------